ProjectTeamServiceImpl.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. package com.fdkankan.site.service.impl;
  2. import cn.hutool.core.collection.CollectionUtil;
  3. import cn.hutool.core.util.NumberUtil;
  4. import cn.hutool.core.util.ObjectUtil;
  5. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  6. import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  7. import com.baomidou.mybatisplus.core.metadata.IPage;
  8. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  9. import com.fdkankan.site.common.PageInfo;
  10. import com.fdkankan.site.common.ResultCode;
  11. import com.fdkankan.site.common.util.VUtils;
  12. import com.fdkankan.site.entity.*;
  13. import com.fdkankan.site.entity.dto.ProjectTeamAddDTO;
  14. import com.fdkankan.site.entity.dto.ProjectTeamDTO;
  15. import com.fdkankan.site.entity.vo.TeamUserSelect;
  16. import com.fdkankan.site.exception.BusinessException;
  17. import com.fdkankan.site.httpClient.client.FdKKClient;
  18. import com.fdkankan.site.httpClient.request.FdkkLoginRequest;
  19. import com.fdkankan.site.httpClient.response.FdkkResponse;
  20. import com.fdkankan.site.mapper.IProjectTeamMapper;
  21. import com.fdkankan.site.request.ProjectTeamListParam;
  22. import com.fdkankan.site.service.*;
  23. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  24. import com.fdkankan.site.util.EscapeUtil;
  25. import com.github.yulichang.wrapper.MPJLambdaWrapper;
  26. import org.apache.commons.lang3.StringUtils;
  27. import org.springframework.beans.factory.annotation.Autowired;
  28. import org.springframework.stereotype.Service;
  29. import javax.annotation.Resource;
  30. import java.util.HashMap;
  31. import java.util.List;
  32. import java.util.Set;
  33. import java.util.stream.Collectors;
  34. import cn.hutool.core.util.StrUtil;
  35. /**
  36. * <p>
  37. * 服务实现类
  38. * </p>
  39. *
  40. * @author
  41. * @since 2022-10-10
  42. */
  43. @Service
  44. public class ProjectTeamServiceImpl extends ServiceImpl<IProjectTeamMapper, ProjectTeam> implements IProjectTeamService {
  45. @Resource
  46. FdKKClient fdKKClient;
  47. @Autowired
  48. IProjectService projectService;
  49. @Autowired
  50. IUserService userService;
  51. @Autowired
  52. IUserRoleService userRoleService;
  53. @Autowired
  54. IMarkingUserService markingUserService;
  55. @Autowired
  56. IMarkingService markingService;
  57. @Autowired
  58. IRoleService roleService;
  59. @Override
  60. public List<ProjectTeam> getListByUserId(Integer userId) {
  61. LambdaQueryWrapper<ProjectTeam> wrapper = new LambdaQueryWrapper<>();
  62. wrapper.eq(ProjectTeam::getUserId,userId);
  63. return this.list(wrapper);
  64. }
  65. @Override
  66. public ProjectTeam findByUserIdAndProjectId(Integer userId, Integer projectId) {
  67. LambdaQueryWrapper<ProjectTeam> wrapper = new LambdaQueryWrapper<>();
  68. wrapper.eq(ProjectTeam::getUserId,userId);
  69. wrapper.eq(ProjectTeam::getProjectId,projectId);
  70. return getOne(wrapper);
  71. }
  72. @Override
  73. public List<ProjectTeam> getListByUserIdAndProjectId(Integer userId, Integer projectId) {
  74. LambdaQueryWrapper<ProjectTeam> wrapper = new LambdaQueryWrapper<>();
  75. wrapper.eq(ProjectTeam::getUserId,userId);
  76. wrapper.eq(ProjectTeam::getProjectId,projectId);
  77. return this.list(wrapper);
  78. }
  79. @Override
  80. public void addProject(Integer projectId, String token) {
  81. ProjectTeam team = new ProjectTeam();
  82. team.setIsCreater(1);
  83. team.setProjectId(projectId);
  84. User user = userService.findByTokenCovUserName(token);
  85. team.setUserId(user.getUserId());
  86. team.setNickName(user.getUserName());
  87. team.setBindAccount(user.getUserName());
  88. this.save(team);
  89. Role manager = roleService.findByRoleKey("manager");
  90. UserRole userRole=new UserRole();
  91. userRole.setRoleId(manager.getRoleId());
  92. userRole.setUserId(user.getUserId());
  93. userRole.setProjectId(projectId);
  94. userRoleService.save(userRole);
  95. }
  96. @Override
  97. public Object pageList(ProjectTeamListParam param) {
  98. VUtils.isTure(param.getProjectId() == null).throwMessage(ResultCode.PARAM_MISS);
  99. projectService.checkTokenPer(param.getToken(),param.getProjectId());
  100. MPJLambdaWrapper<ProjectTeam> wrapper = new MPJLambdaWrapper<ProjectTeam>()
  101. .selectAll(ProjectTeam.class)
  102. .select(User::getUserName)
  103. .selectCollection(Role.class, ProjectTeamDTO::getRoles)
  104. .leftJoin(User.class, User::getUserId, ProjectTeam::getUserId)
  105. .leftJoin(UserRole.class,UserRole::getUserId,User::getUserId)
  106. .leftJoin(Role.class, Role::getRoleId, UserRole::getRoleId)
  107. .eq(ProjectTeam::getProjectId,param.getProjectId())
  108. .eq(UserRole::getProjectId,param.getProjectId())
  109. ;
  110. if(StringUtils.isNotBlank(param.getUserName())){
  111. wrapper.like(ProjectTeam::getNickName, param.getUserName());
  112. }
  113. IPage<ProjectTeamDTO> projectTeamIPage = baseMapper.selectJoinPage(new Page<>(param.getPageNum(), param.getPageSize()), ProjectTeamDTO.class, wrapper);
  114. return PageInfo.PageInfo(projectTeamIPage);
  115. }
  116. @Override
  117. public List<ProjectTeamDTO> findByProjectId(Integer projectId) {
  118. MPJLambdaWrapper<ProjectTeam> wrapper = new MPJLambdaWrapper<ProjectTeam>()
  119. .selectAll(ProjectTeam.class)
  120. .select(User::getUserName)
  121. .selectCollection(Role.class, ProjectTeamDTO::getRoles)
  122. .leftJoin(User.class, User::getUserId, ProjectTeam::getUserId)
  123. .leftJoin(UserRole.class,UserRole::getUserId,User::getUserId)
  124. .leftJoin(Role.class, Role::getRoleId, UserRole::getRoleId)
  125. .eq(ProjectTeam::getProjectId,projectId)
  126. .eq(UserRole::getProjectId,projectId)
  127. ;
  128. List<ProjectTeamDTO> projectTeamIPage = baseMapper.selectJoinList( ProjectTeamDTO.class, wrapper);
  129. return projectTeamIPage;
  130. }
  131. @Override
  132. public Object addUser(ProjectTeamAddDTO param, String token) {
  133. VUtils.isTure(param.getProjectId() == null || StringUtils.isBlank(param.getUserName())).throwMessage(ResultCode.PARAM_MISS);
  134. VUtils.isTure(!this.checkUserName(param.getUserName())).throwMessage(ResultCode.USER_NOT_EXIST);
  135. // ProjectTeam projectTeam = this.getProjectCreater(param.getProjectId());
  136. //VUtils.isTure(projectTeam == null).throwMessage(ResultCode.PROJECT_CREATER_NOT_EXIST);
  137. //VUtils.isTure(!projectTeam.getUserName().equals(JwtUtil.getUserName(token))).throwMessage(ResultCode.NOT_PERM);
  138. MPJLambdaWrapper<ProjectTeam> wrapper = new MPJLambdaWrapper<ProjectTeam>()
  139. .select(ProjectTeam::getTeamId)
  140. .leftJoin(User.class, User::getUserId, ProjectTeam::getUserId)
  141. .eq(User::getUserName,param.getUserName())
  142. .eq(ProjectTeam::getProjectId,param.getProjectId()) ;
  143. long count = getBaseMapper().selectJoinCount(wrapper);
  144. VUtils.isTure(count >0).throwMessage(ResultCode.USER_EXIST);
  145. User user = userService.findByUserName(param.getUserName());
  146. ProjectTeam team = new ProjectTeam();
  147. team.setProjectId(param.getProjectId());
  148. team.setUserId(user.getUserId());
  149. team.setRemark(param.getRemark());
  150. team.setNickName(param.getNickName());
  151. if (StrUtil.isNotEmpty(param.getBindAccount())){
  152. team.setBindAccount(param.getBindAccount());
  153. }
  154. this.save(team);
  155. for (Integer roleId : param.getRoles()) {
  156. UserRole userRole=new UserRole();
  157. userRole.setRoleId(roleId);
  158. userRole.setUserId(user.getUserId());
  159. userRole.setProjectId(param.getProjectId());
  160. userRoleService.save(userRole);
  161. }
  162. return team;
  163. }
  164. @Override
  165. public ProjectTeamDTO getProjectCreater(Integer projectId) {
  166. MPJLambdaWrapper<ProjectTeam> wrapper = new MPJLambdaWrapper<ProjectTeam>()
  167. .selectAll(ProjectTeam.class)
  168. .select(User::getUserName)
  169. .leftJoin(User.class, User::getUserId, ProjectTeam::getUserId)
  170. .eq(ProjectTeam::getProjectId,projectId)
  171. .eq(ProjectTeam::getIsCreater,1);;
  172. return getBaseMapper().selectJoinOne(ProjectTeamDTO.class,wrapper);
  173. }
  174. @Override
  175. public HashMap<Integer, String> getProjectCreaterMap(Set<Integer> projectIds) {
  176. HashMap<Integer, String> map = new HashMap<>();
  177. if(projectIds.size() >0){
  178. MPJLambdaWrapper<ProjectTeam> wrapper = new MPJLambdaWrapper<ProjectTeam>()
  179. .selectAll(ProjectTeam.class)
  180. .select(User::getUserName)
  181. .leftJoin(User.class, User::getUserId, ProjectTeam::getUserId)
  182. .in(ProjectTeam::getProjectId,projectIds)
  183. .eq(ProjectTeam::getIsCreater,1);;
  184. List<ProjectTeamDTO> list = getBaseMapper().selectJoinList(ProjectTeamDTO.class,wrapper);
  185. list.forEach(entity -> map.put(entity.getProjectId(),entity.getUserName()));
  186. }
  187. return map;
  188. }
  189. @Override
  190. public Boolean checkUserName(String userName) {
  191. FdkkResponse fdkkResponse = fdKKClient.checkUser(new FdkkLoginRequest(userName, ""));
  192. if(fdkkResponse.getCode() != 0){
  193. return false;
  194. }
  195. return true;
  196. }
  197. @Override
  198. public void deleteUser(ProjectTeam param, String token) {
  199. VUtils.isTure(param.getTeamId() == null ).throwMessage(ResultCode.PARAM_MISS);
  200. ProjectTeam team = this.getById(param.getTeamId());
  201. VUtils.isTure(team.getIsCreater() == 1).throwMessage(ResultCode.PROJECT_CREATER_NOT_DEL);
  202. ProjectTeam createrTeam = this.getProjectCreater(team.getProjectId());
  203. VUtils.isTure(createrTeam == null).throwMessage(ResultCode.PROJECT_CREATER_NOT_EXIST);
  204. User user = userService.findByTokenCovUserName(token);
  205. if(!NumberUtil.equals(createrTeam.getUserId(),user.getUserId())){
  206. if(!NumberUtil.equals(team.getUserId(),user.getUserId())){
  207. throw new BusinessException(ResultCode.NOT_PERM);
  208. }else {
  209. this.removeById(param.getTeamId());
  210. throw new BusinessException(ResultCode.DEL_MINE); // 提示刷新页面
  211. }
  212. }
  213. this.removeById(param.getTeamId());
  214. userRoleService.delUserRole(team.getUserId(),team.getProjectId());
  215. List<Marking> byProjectId = markingService.findByProjectId(team.getProjectId());
  216. for (Marking marking : byProjectId) {
  217. markingUserService.delByUserIdAndMarkingId(team.getUserId(),marking.getMarkingId());
  218. }
  219. }
  220. @Override
  221. public void updateRemark(ProjectTeam param) {
  222. VUtils.isTure(param.getTeamId() == null ).throwMessage(ResultCode.PARAM_MISS);
  223. ProjectTeam byId = getById(param.getTeamId());
  224. LambdaUpdateWrapper<ProjectTeam> wrapper = new LambdaUpdateWrapper<>();
  225. wrapper.eq(ProjectTeam::getTeamId,param.getTeamId())
  226. .set(ProjectTeam::getRemark,param.getRemark());
  227. this.update(byId,wrapper);
  228. }
  229. @Override
  230. public Set<Integer> getProjectIdByCreater(String projectCreater) {
  231. MPJLambdaWrapper<ProjectTeam> wrapper = new MPJLambdaWrapper<ProjectTeam>()
  232. .selectAll(ProjectTeam.class)
  233. .select(User::getUserName)
  234. .leftJoin(User.class, User::getUserId, ProjectTeam::getUserId)
  235. .eq(User::getUserName,projectCreater)
  236. .eq(ProjectTeam::getIsCreater,1);
  237. return getBaseMapper().selectList(wrapper).stream().map(ProjectTeam::getProjectId).collect(Collectors.toSet());
  238. }
  239. @Override
  240. public void delByProjectId(Integer projectId) {
  241. LambdaQueryWrapper<ProjectTeam> wrapper = new LambdaQueryWrapper<>();
  242. wrapper.eq(ProjectTeam::getProjectId,projectId);
  243. this.remove(wrapper);
  244. }
  245. @Override
  246. public List<ProjectTeamDTO> listAll(ProjectTeamListParam param) {
  247. MPJLambdaWrapper<ProjectTeam> wrapper = new MPJLambdaWrapper<ProjectTeam>()
  248. .selectAll(ProjectTeam.class)
  249. .select(User::getUserName)
  250. .leftJoin(User.class, User::getUserId, ProjectTeam::getUserId)
  251. .eq(ProjectTeam::getProjectId,param.getProjectId());
  252. if(StringUtils.isNotBlank(param.getUserName())){
  253. wrapper.like(User::getUserName,param.getUserName());
  254. }
  255. List<ProjectTeamDTO> projectTeamIPage = baseMapper.selectJoinList( ProjectTeamDTO.class, wrapper);
  256. return projectTeamIPage;
  257. }
  258. @Override
  259. public List<TeamUserSelect> buildTreeSelect(List<ProjectTeamDTO> projectTeamDTOS) {
  260. return projectTeamDTOS.stream().map(TeamUserSelect::new).collect(Collectors.toList());
  261. }
  262. @Override
  263. public void updateUser(ProjectTeamAddDTO param) {
  264. VUtils.isTure(param.getTeamId() == null ).throwMessage(ResultCode.PARAM_MISS);
  265. ProjectTeam projectTeam = getById(param.getTeamId());
  266. LambdaUpdateWrapper<ProjectTeam> wrapper = new LambdaUpdateWrapper<>();
  267. wrapper.eq(ProjectTeam::getTeamId,param.getTeamId());
  268. boolean updateFlag=false;
  269. if (StrUtil.isNotEmpty(param.getRemark())){
  270. wrapper.set(ProjectTeam::getRemark,param.getRemark());
  271. updateFlag=true;
  272. }
  273. if (StrUtil.isNotEmpty(param.getBindAccount())){
  274. updateFlag=true;
  275. wrapper.set(ProjectTeam::getBindAccount,param.getBindAccount());
  276. }
  277. if (StrUtil.isNotEmpty(param.getNickName())){
  278. updateFlag=true;
  279. wrapper.set(ProjectTeam::getNickName,param.getNickName());
  280. }
  281. if (updateFlag){
  282. this.update(wrapper);
  283. }
  284. if (CollectionUtil.isNotEmpty(param.getRoles())){
  285. userRoleService.delUserRole(param.getUserId(),param.getProjectId());
  286. for (Integer roleId : param.getRoles()) {
  287. UserRole userRole=new UserRole();
  288. userRole.setRoleId(roleId);
  289. userRole.setUserId(param.getUserId());
  290. userRole.setProjectId(param.getProjectId());
  291. userRoleService.save(userRole);
  292. }
  293. }
  294. }
  295. }