AssoProjectPersonService.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. package cn.cslg.pas.service.business;
  2. import cn.cslg.pas.common.dto.AddProjectPersonDTO;
  3. import cn.cslg.pas.common.dto.QueryProjectPersonDTO;
  4. import cn.cslg.pas.common.model.cronModel.Personnel;
  5. import cn.cslg.pas.common.model.cronModel.PersonnelVO;
  6. import cn.cslg.pas.common.model.cronModel.Records;
  7. import cn.cslg.pas.common.utils.CacheUtils;
  8. import cn.cslg.pas.common.utils.LoginUtils;
  9. import cn.cslg.pas.common.vo.ProjectPersonVO;
  10. import cn.cslg.pas.domain.business.AssoProductPerson;
  11. import cn.cslg.pas.domain.business.AssoProjectPerson;
  12. import cn.cslg.pas.domain.business.Project;
  13. import cn.cslg.pas.exception.XiaoShiException;
  14. import cn.cslg.pas.mapper.AssoProductPersonMapper;
  15. import cn.cslg.pas.mapper.AssoProjectPersonMapper;
  16. import cn.cslg.pas.service.permissions.PermissionService;
  17. import com.alibaba.fastjson.JSONObject;
  18. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  19. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  20. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  21. import org.springframework.beans.BeanUtils;
  22. import org.springframework.beans.factory.annotation.Autowired;
  23. import org.springframework.context.annotation.Lazy;
  24. import org.springframework.stereotype.Service;
  25. import org.springframework.transaction.annotation.Transactional;
  26. import org.springframework.util.CollectionUtils;
  27. import java.util.ArrayList;
  28. import java.util.List;
  29. import java.util.stream.Collectors;
  30. /**
  31. * 项目与可见人员关联表Service层
  32. *
  33. * @Author lrj
  34. * @Date 2023/11/10
  35. */
  36. @Service
  37. public class AssoProjectPersonService extends ServiceImpl<AssoProjectPersonMapper, AssoProjectPerson> {
  38. @Autowired
  39. private PermissionService permissionService;
  40. @Autowired
  41. private CacheUtils cacheUtils;
  42. @Autowired
  43. private LoginUtils loginUtils;
  44. @Autowired
  45. @Lazy
  46. private ProjectService projectService;
  47. /**
  48. * 添加分享人
  49. *
  50. * @param addProjectPersonDTO
  51. * @return
  52. */
  53. public List<Integer> addProjectShare(AddProjectPersonDTO addProjectPersonDTO) {
  54. PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  55. Integer roleType = 3;
  56. List<Integer> reIds = new ArrayList<>();
  57. List<String> personIds = addProjectPersonDTO.getPersonIds();
  58. Integer projectId = addProjectPersonDTO.getProjectId();
  59. //根据ids查询是否存在
  60. LambdaQueryWrapper<AssoProjectPerson> queryWrapper = new LambdaQueryWrapper<>();
  61. queryWrapper.select(AssoProjectPerson::getPersonId);
  62. queryWrapper.in(AssoProjectPerson::getPersonId, personIds)
  63. .eq(AssoProjectPerson::getProjectId, projectId)
  64. .eq(AssoProjectPerson::getRole, roleType);
  65. List<AssoProjectPerson> assoProjectPersonList = this.list(queryWrapper);
  66. List<String> ids = assoProjectPersonList.stream().map(AssoProjectPerson::getPersonId).collect(Collectors.toList());
  67. if (ids != null) {
  68. personIds.removeAll(ids);
  69. }
  70. if (personIds.size() != 0) {
  71. for (String personId : personIds) {
  72. AssoProjectPerson assoProjectPerson = new AssoProjectPerson();
  73. assoProjectPerson.setProjectId(projectId);
  74. assoProjectPerson.setPersonId(personId);
  75. assoProjectPerson.setCreateId(personnelVO.getId());
  76. assoProjectPerson.setRole(roleType);
  77. assoProjectPerson.insert();
  78. reIds.add(assoProjectPerson.getId());
  79. }
  80. }
  81. return reIds;
  82. }
  83. /**
  84. * 批量删除分享记录
  85. *
  86. * @param ids
  87. * @return
  88. */
  89. public List<Integer> removeProjectShare(List<Integer> ids) {
  90. if (ids == null || ids.size() == 0) {
  91. throw new XiaoShiException("请选择分享记录");
  92. }
  93. this.removeBatchByIds(ids);
  94. return ids;
  95. }
  96. /**
  97. * 查询分享记录
  98. *
  99. * @param queryProjectPersonDTO
  100. * @return
  101. */
  102. public Records queryProjectShare(QueryProjectPersonDTO queryProjectPersonDTO) {
  103. Records records = new Records();
  104. Integer projectId = queryProjectPersonDTO.getProjectId();
  105. String personName = queryProjectPersonDTO.getPersonName();
  106. Long current = queryProjectPersonDTO.getCurrent();
  107. Long size = queryProjectPersonDTO.getSize();
  108. LambdaQueryWrapper<AssoProjectPerson> queryWrapper = new LambdaQueryWrapper<>();
  109. queryWrapper.eq(AssoProjectPerson::getProjectId, projectId);
  110. List<String> ids = new ArrayList<>();
  111. if (personName != null && personName.trim() != "") {
  112. ids = permissionService.getPersonIdsByName(personName);
  113. }
  114. if (ids.size() != 0) {
  115. queryWrapper.in(AssoProjectPerson::getProjectId, ids);
  116. }
  117. Page<AssoProjectPerson> page = this.page(new Page<>(current, size), queryWrapper);
  118. List<AssoProjectPerson> assoProjectPersonList = page.getRecords();
  119. List<ProjectPersonVO> projectPersonVOS = this.loadData(assoProjectPersonList);
  120. records.setData(projectPersonVOS);
  121. records.setTotal(page.getTotal());
  122. records.setCurrent(current);
  123. records.setSize(size);
  124. return records;
  125. }
  126. private List<ProjectPersonVO> loadData(List<AssoProjectPerson> assoProjectPersonList) {
  127. List<ProjectPersonVO> projectPersonVOS = new ArrayList<>();
  128. if (assoProjectPersonList == null || assoProjectPersonList.size() == 0) {
  129. return projectPersonVOS;
  130. }
  131. List<String> personIds = new ArrayList<>();
  132. assoProjectPersonList.forEach(item -> {
  133. if (item.getPersonId() != null) {
  134. personIds.add(item.getPersonId());
  135. }
  136. if (item.getCreateId() != null) {
  137. personIds.add(item.getCreateId());
  138. }
  139. });
  140. List<Personnel> personnels = new ArrayList<>();
  141. if (personIds.size() != 0) {
  142. try {
  143. String res = permissionService.getPersonnelByIdsFromPCS(personIds);
  144. JSONObject jsonObject = JSONObject.parseObject(res);
  145. personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
  146. } catch (Exception e) {
  147. }
  148. }
  149. for (AssoProjectPerson assoProjectPerson : assoProjectPersonList) {
  150. ProjectPersonVO projectPersonVO = new ProjectPersonVO();
  151. Personnel personnel1 = personnels.stream().filter(item -> item.getId().equals(assoProjectPerson.getPersonId())).findFirst().orElse(null);
  152. Personnel personnel2 = personnels.stream().filter(item -> item.getId().equals(assoProjectPerson.getCreateId())).findFirst().orElse(null);
  153. BeanUtils.copyProperties(assoProjectPerson, projectPersonVO);
  154. if (personnel1 != null) {
  155. projectPersonVO.setPersonName(personnel1.getPersonnelName());
  156. }
  157. if (personnel2 != null) {
  158. projectPersonVO.setCreateName(personnel2.getPersonnelName());
  159. }
  160. projectPersonVOS.add(projectPersonVO);
  161. }
  162. return projectPersonVOS;
  163. }
  164. public List<Integer> getRootProjectIds() {
  165. PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  166. Integer roleType = personnelVO.getRoleType();
  167. Integer tenantId = personnelVO.getTenantId();
  168. if (roleType != null && roleType.equals(1)) {
  169. return null;
  170. }
  171. String createId = personnelVO.getId();
  172. List<Integer> ids = new ArrayList<>();
  173. LambdaQueryWrapper<Project> queryWrapper = new LambdaQueryWrapper<>();
  174. queryWrapper.select(Project::getId);
  175. if (roleType != null && roleType.equals(2)) {
  176. queryWrapper.eq(Project::getTenantId, tenantId);
  177. } else {
  178. queryWrapper.eq(Project::getCreateId, createId);
  179. }
  180. queryWrapper.eq(Project::getCreateId, createId)
  181. .or().eq(Project::getHeadId, createId);
  182. List<Project> projects = projectService.list(queryWrapper);
  183. if (projects != null && projects.size() > 0) {
  184. List<Integer> temIds = projects.stream().map(Project::getId).collect(Collectors.toList());
  185. ids.addAll(temIds);
  186. }
  187. LambdaQueryWrapper<AssoProjectPerson> queryWrapper1 = new LambdaQueryWrapper<>();
  188. queryWrapper1.select(AssoProjectPerson::getProjectId);
  189. queryWrapper1.eq(AssoProjectPerson::getPersonId, createId);
  190. List<AssoProjectPerson> assoProjectPersonList = this.list(queryWrapper1);
  191. if (assoProjectPersonList != null && assoProjectPersonList.size() > 0) {
  192. List<Integer> temIds = assoProjectPersonList.stream().map(AssoProjectPerson::getProjectId).collect(Collectors.toList());
  193. ids.addAll(temIds);
  194. }
  195. return ids;
  196. }
  197. public List<String> getProjectShareIds(Integer projectId) {
  198. List<String> personIds = new ArrayList<>();
  199. LambdaQueryWrapper<AssoProjectPerson> queryWrapper = new LambdaQueryWrapper<>();
  200. queryWrapper.eq(AssoProjectPerson::getProjectId, projectId);
  201. List<AssoProjectPerson> assoProjectPersonList = this.list(queryWrapper);
  202. if (assoProjectPersonList != null && assoProjectPersonList.size() > 0) {
  203. personIds = assoProjectPersonList.stream().map(AssoProjectPerson::getPersonId).collect(Collectors.toList());
  204. }
  205. return personIds;
  206. }
  207. public List<AssoProjectPerson> queryIfExist(Integer roleType, List<String> personIds, Integer projectId) {
  208. List<AssoProjectPerson> assoProjectPersonList = new ArrayList<>();
  209. if (personIds == null || personIds.size() == 0) {
  210. }
  211. LambdaQueryWrapper<AssoProjectPerson> queryWrapper = new LambdaQueryWrapper<>();
  212. queryWrapper.eq(AssoProjectPerson::getProjectId, projectId)
  213. .eq(AssoProjectPerson::getPersonId, personIds)
  214. .eq(AssoProjectPerson::getRole, roleType);
  215. return assoProjectPersonList;
  216. }
  217. @Transactional(rollbackFor = Exception.class)
  218. public void addProjectPeople(Integer roleType, Integer projectId, List<String> personIds) {
  219. if (!CollectionUtils.isEmpty(personIds)) {
  220. List<AssoProjectPerson> assoProjectPersonList = new ArrayList<>();
  221. personIds.forEach(item -> {
  222. AssoProjectPerson assoProjectPerson = new AssoProjectPerson();
  223. assoProjectPerson.setPersonId(item);
  224. assoProjectPerson.setRole(roleType);
  225. assoProjectPerson.setProjectId(projectId);
  226. assoProjectPerson.setCreateId(loginUtils.getId().toString());
  227. assoProjectPersonList.add(assoProjectPerson);
  228. });
  229. this.saveBatch(assoProjectPersonList);
  230. }
  231. }
  232. @Transactional(rollbackFor = Exception.class)
  233. public void updateProjectPeople(Integer roleType, Integer projectId, List<String> personIds) {
  234. LambdaQueryWrapper<AssoProjectPerson> assoProjectPersonLambdaQueryWrapper = new LambdaQueryWrapper<>();
  235. assoProjectPersonLambdaQueryWrapper.eq(AssoProjectPerson::getProjectId, projectId)
  236. .eq(AssoProjectPerson::getRole, roleType);
  237. this.remove(assoProjectPersonLambdaQueryWrapper);
  238. /**
  239. *装载参与人
  240. */
  241. if (!CollectionUtils.isEmpty(personIds)) {
  242. List<AssoProjectPerson> assoProjectPersonList = new ArrayList<>();
  243. personIds.forEach(item -> {
  244. AssoProjectPerson assoProjectPerson = new AssoProjectPerson();
  245. assoProjectPerson.setPersonId(item);
  246. assoProjectPerson.setRole(roleType);
  247. assoProjectPerson.setProjectId(projectId);
  248. assoProjectPerson.setCreateId(loginUtils.getId().toString());
  249. assoProjectPersonList.add(assoProjectPerson);
  250. });
  251. this.saveBatch(assoProjectPersonList);
  252. }
  253. }
  254. }