MatchCasePersonService.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. package cn.cslg.pas.service.report;
  2. import cn.cslg.pas.common.model.cronModel.Personnel;
  3. import cn.cslg.pas.common.model.cronModel.PersonnelVO;
  4. import cn.cslg.pas.common.model.report.*;
  5. import cn.cslg.pas.common.utils.CacheUtils;
  6. import cn.cslg.pas.common.utils.LoginUtils;
  7. import cn.cslg.pas.domain.business.AssoProjectPerson;
  8. import cn.cslg.pas.domain.business.ReportProject;
  9. import cn.cslg.pas.domain.report.AssoIprReportType;
  10. import cn.cslg.pas.domain.report.IprPerson;
  11. import cn.cslg.pas.exception.ExceptionEnum;
  12. import cn.cslg.pas.exception.XiaoShiException;
  13. import cn.cslg.pas.service.business.AssoProjectPersonService;
  14. import cn.cslg.pas.service.business.ReportProjectService;
  15. import cn.cslg.pas.service.permissions.PermissionService;
  16. import com.alibaba.fastjson.JSON;
  17. import com.alibaba.fastjson.JSONObject;
  18. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  19. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  20. import cn.cslg.pas.domain.report.MatchCasePerson;
  21. import cn.cslg.pas.mapper.report.MatchCasePersonMapper;
  22. import lombok.RequiredArgsConstructor;
  23. import org.springframework.beans.BeanUtils;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.context.annotation.Lazy;
  26. import org.springframework.stereotype.Service;
  27. import org.springframework.util.CollectionUtils;
  28. import java.util.ArrayList;
  29. import java.util.List;
  30. import java.util.Objects;
  31. import java.util.regex.Pattern;
  32. import java.util.stream.Collectors;
  33. /**
  34. * @author admin
  35. * @description 针对表【match_case_person(配案人员)】的数据库操作Service实现
  36. * @createDate 2024-12-24 13:56:43
  37. */
  38. @Service
  39. @RequiredArgsConstructor
  40. public class MatchCasePersonService extends ServiceImpl<MatchCasePersonMapper, MatchCasePerson> {
  41. private final LoginUtils loginUtils;
  42. private final CacheUtils cacheUtils;
  43. @Autowired
  44. @Lazy
  45. private IprPersonService iprPersonService;
  46. private AssoProjectPersonService assoProjectPersonService;
  47. private ReportProjectService reportProjectService;
  48. private final PermissionService permissionService;
  49. public Integer updateMatchCasePerson(UpdateMatchCasePersonDTO updateMatchCasePersonDTO) {
  50. String name = updateMatchCasePersonDTO.getName();
  51. String email = updateMatchCasePersonDTO.getEmail();
  52. Integer assoAccountId = updateMatchCasePersonDTO.getAssoAccountId();
  53. String remark = updateMatchCasePersonDTO.getRemark();
  54. Integer assoId = updateMatchCasePersonDTO.getAssoAccountId();
  55. // 1内部ipr 2代理所
  56. Integer type = updateMatchCasePersonDTO.getType();
  57. Integer iprPersonId = null;
  58. // 邮箱传入 即先添加ipr人员 再与报告关联
  59. // 判断邮箱是否存在
  60. // 邮箱不为空 则去新增ipr人员 并判断邮箱是否存在
  61. if (email != null) {
  62. Boolean isValid = this.isValidEmail(email);
  63. if (!isValid) {
  64. throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "邮箱格式不正确");
  65. }
  66. LambdaQueryWrapper<IprPerson> queryWrapper = new LambdaQueryWrapper<>();
  67. queryWrapper.eq(IprPerson::getEmail, email);
  68. IprPerson iprPerson = iprPersonService.getOne(queryWrapper, false);
  69. if (iprPerson != null) {
  70. //邮箱存在
  71. iprPersonId = iprPerson.getId();
  72. assoId = iprPerson.getAssoAccountId();
  73. } else {
  74. PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  75. String personId = personnelVO.getId();
  76. Integer tenantId = personnelVO.getTenantId();
  77. IprPerson iprPerson1 = new IprPerson();
  78. iprPerson1.setName(updateMatchCasePersonDTO.getName());
  79. iprPerson1.setEmail(email);
  80. // type asso remark
  81. iprPerson1.setType(type);
  82. iprPerson1.setAssoAccountId(assoAccountId);
  83. iprPerson1.setRemark(remark);
  84. iprPerson1.setIfDefault(false);
  85. iprPerson1.setCreateId(personId);
  86. iprPerson1.setTenantId(tenantId);
  87. iprPerson1.insert();
  88. iprPersonId = iprPerson1.getId();
  89. }
  90. } else {
  91. throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "邮箱不能为空");
  92. }
  93. updateMatchCasePersonDTO.setName(name);
  94. // new
  95. updateMatchCasePersonDTO.setType(type);
  96. updateMatchCasePersonDTO.setIprPersonId(iprPersonId);
  97. MatchCasePerson matchCasePerson = this.addMatchCasePersonDB(updateMatchCasePersonDTO, assoId);
  98. if (type != null && type.equals(2)) {
  99. this.updateReportAgency(updateMatchCasePersonDTO.getReportId());
  100. }
  101. return matchCasePerson.getId();
  102. }
  103. public void updateReportAgency(Integer projectId) {
  104. LambdaQueryWrapper<MatchCasePerson> queryWrapper1 = new LambdaQueryWrapper<>();
  105. queryWrapper1.eq(MatchCasePerson::getProjectId, projectId);
  106. MatchCasePerson matchCasePerson = this.getOne(queryWrapper1, false);
  107. Integer iprPersonId = matchCasePerson.getIprPersonId();
  108. IprPerson iprPerson = iprPersonService.getById(iprPersonId);
  109. String name = iprPerson.getName();
  110. LambdaQueryWrapper<ReportProject> queryWrapper = new LambdaQueryWrapper<>();
  111. queryWrapper.eq(ReportProject::getProjectId, projectId);
  112. ReportProject reportProject = reportProjectService.getById(projectId);
  113. if (reportProject != null) {
  114. Integer actType = reportProject.getActType();
  115. //主动类型 专利权人代理所
  116. if (actType != null && actType.equals(1)) {
  117. String rightHolderAgency = reportProject.getRightHolderAgency();
  118. reportProject.setRightHolderAgency(rightHolderAgency + "," + name);
  119. } else {//被动类型 请求人代理所
  120. String applicantAgency = reportProject.getApplicantAgency();
  121. reportProject.setApplicantAgency(applicantAgency + "," + name);
  122. }
  123. reportProject.updateById();
  124. }
  125. }
  126. public MatchCasePerson addMatchCasePersonDB(UpdateMatchCasePersonDTO updateMatchCasePersonDTO, Integer assoId) {
  127. MatchCasePerson matchCasePerson = new MatchCasePerson();
  128. PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  129. String personId = personnelVO.getId();
  130. Integer tenantId = personnelVO.getTenantId();
  131. Integer id = updateMatchCasePersonDTO.getId();
  132. Integer assoAccountId = updateMatchCasePersonDTO.getAssoAccountId();
  133. //更新
  134. if (id != null) {
  135. matchCasePerson = this.getById(id);
  136. if (matchCasePerson != null) {
  137. matchCasePerson.setIprPersonId(updateMatchCasePersonDTO.getIprPersonId());
  138. matchCasePerson.updateById();
  139. if (assoId != null) {
  140. //assoId取消关联
  141. LambdaQueryWrapper<AssoProjectPerson> assoProjectPersonLambdaQueryWrapper = new LambdaQueryWrapper<>();
  142. assoProjectPersonLambdaQueryWrapper.eq(AssoProjectPerson::getProjectId, updateMatchCasePersonDTO.getReportId())
  143. .eq(AssoProjectPerson::getRole, 1)
  144. .eq(AssoProjectPerson::getPersonId, assoId);
  145. assoProjectPersonService.remove(assoProjectPersonLambdaQueryWrapper);
  146. }
  147. }
  148. } else {
  149. matchCasePerson.setProjectId(updateMatchCasePersonDTO.getReportId());
  150. matchCasePerson.setIprPersonId(updateMatchCasePersonDTO.getIprPersonId());
  151. matchCasePerson.setCreateId(personId);
  152. matchCasePerson.setTenantId(tenantId);
  153. matchCasePerson.setId(null);
  154. matchCasePerson.insert();
  155. }
  156. if (assoAccountId != null) {
  157. AssoProjectPerson assoProjectPerson = new AssoProjectPerson();
  158. assoProjectPerson.setRole(1);
  159. assoProjectPerson.setProjectId(updateMatchCasePersonDTO.getReportId());
  160. assoProjectPerson.setPersonId(String.valueOf(assoAccountId));
  161. assoProjectPerson.setCreateId(personId);
  162. assoProjectPerson.insert();
  163. }
  164. return matchCasePerson;
  165. }
  166. public List<QueryMatchCasePersonVO> getReportMatchCasePerson(QueryMatchCasePersonDTO queryMatchCasePersonDTO) {
  167. Integer reportId = queryMatchCasePersonDTO.getReportId();
  168. Integer type = queryMatchCasePersonDTO.getType();
  169. List<QueryMatchCasePersonVO> queryMatchCasePersonVOS = new ArrayList<>();
  170. LambdaQueryWrapper<MatchCasePerson> queryWrapper = new LambdaQueryWrapper<>();
  171. queryWrapper.eq(MatchCasePerson::getProjectId, reportId);
  172. if (type != null) {
  173. queryWrapper.eq(MatchCasePerson::getType, type);
  174. }
  175. List<MatchCasePerson> matchCasePersons = this.list(queryWrapper);
  176. if (matchCasePersons != null && !matchCasePersons.isEmpty()) {
  177. for (MatchCasePerson matchCasePerson : matchCasePersons) {
  178. QueryMatchCasePersonVO queryMatchCasePersonVO = new QueryMatchCasePersonVO();
  179. BeanUtils.copyProperties(matchCasePerson, queryMatchCasePersonVO);
  180. queryMatchCasePersonVO.setReportId(matchCasePerson.getProjectId());
  181. Integer iprPersonId = matchCasePerson.getIprPersonId();
  182. IprPerson iprPerson = iprPersonService.getById(iprPersonId);
  183. if (iprPerson != null) {
  184. queryMatchCasePersonVO.setName(iprPerson.getName());
  185. queryMatchCasePersonVO.setEmail(iprPerson.getEmail());
  186. queryMatchCasePersonVO.setAssoAccountId(iprPerson.getAssoAccountId());
  187. queryMatchCasePersonVO.setRemark(iprPerson.getRemark());
  188. }
  189. queryMatchCasePersonVOS.add(queryMatchCasePersonVO);
  190. }
  191. this.loadQueryMatchCasePersonVOS(queryMatchCasePersonVOS);
  192. }
  193. return queryMatchCasePersonVOS;
  194. }
  195. public void loadQueryMatchCasePersonVOS(List<QueryMatchCasePersonVO> queryMatchCasePersonVOS) {
  196. List<String> personIds = new ArrayList<>();
  197. List<Personnel> personnels = new ArrayList<>();
  198. List<String> createIds = queryMatchCasePersonVOS.stream()
  199. .map(QueryMatchCasePersonVO::getCreateId)
  200. .collect(Collectors.toList());
  201. personIds.addAll(createIds);
  202. List<String> assoAccountStrIds = queryMatchCasePersonVOS.stream()
  203. .map(QueryMatchCasePersonVO::getAssoAccountId)//提取Integer
  204. .filter(Objects::nonNull)//过滤null值
  205. .map(String::valueOf)//转换为String
  206. .collect(Collectors.toList());
  207. personIds.addAll(assoAccountStrIds);
  208. if (!CollectionUtils.isEmpty(createIds)) {
  209. try {
  210. String res = permissionService.getPersonnelByIdsFromPCS(createIds);
  211. JSONObject jsonObject = JSON.parseObject(res);
  212. personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
  213. } catch (Exception e) {
  214. throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "人员查询错误");
  215. }
  216. }
  217. for (QueryMatchCasePersonVO queryMatchCasePersonVO : queryMatchCasePersonVOS) {
  218. Personnel personnel = personnels.stream().filter(item -> item.getId().equals(queryMatchCasePersonVO.getCreateId())).findFirst().orElse(null);
  219. if (personnel != null) {
  220. queryMatchCasePersonVO.setCreateName(personnel.getPersonnelName());
  221. }
  222. Personnel assoAccount = personnels.stream()
  223. .filter(item -> {
  224. // 获取Integer类型的关联id
  225. Integer targetId = queryMatchCasePersonVO.getAssoAccountId();
  226. // 当目标id为空时 直接跳过匹配
  227. if (targetId == null) return false;
  228. // 将Integer转换为String进行比较
  229. return String.valueOf(targetId).equals(item.getId());
  230. })
  231. .findFirst()
  232. .orElse(null);
  233. if (assoAccount != null) {
  234. queryMatchCasePersonVO.setAccountName(personnel.getPersonnelName());
  235. queryMatchCasePersonVO.setAccountUserName(personnel.getPersonnelUserName());
  236. }
  237. queryMatchCasePersonVOS.add(queryMatchCasePersonVO);
  238. }
  239. }
  240. public Boolean isValidEmail(String email) {
  241. if ((email != null) && (!email.isEmpty())) {
  242. return Pattern.matches("^(\\w+([-.][A-Za-z0-9]+)*){3,18}@\\w+([-.][A-Za-z0-9]+)*\\.\\w+([-.][A-Za-z0-9]+)*$", email);
  243. }
  244. return false;
  245. }
  246. public void delete(List<Integer> ids) {
  247. for (Integer id : ids) {
  248. MatchCasePerson matchCasePerson = this.getById(id);
  249. Integer iprPersonId = matchCasePerson.getIprPersonId();
  250. Integer type = matchCasePerson.getType();
  251. Integer projectId = matchCasePerson.getProjectId();
  252. IprPerson iprPerson = iprPersonService.getById(iprPersonId);
  253. Integer assoId = iprPerson.getAssoAccountId();
  254. if (assoId != null) {
  255. //assoId取消关联
  256. LambdaQueryWrapper<AssoProjectPerson> assoProjectPersonLambdaQueryWrapper = new LambdaQueryWrapper<>();
  257. assoProjectPersonLambdaQueryWrapper.eq(AssoProjectPerson::getProjectId, projectId)
  258. .eq(AssoProjectPerson::getRole, 1)
  259. .eq(AssoProjectPerson::getPersonId, assoId);
  260. assoProjectPersonService.remove(assoProjectPersonLambdaQueryWrapper);
  261. }
  262. // 如果删除的是代理所
  263. if (type != null && type.equals(2)) {
  264. LambdaQueryWrapper<ReportProject> queryWrapper = new LambdaQueryWrapper<>();
  265. queryWrapper.eq(ReportProject::getProjectId, projectId);
  266. ReportProject reportProject = reportProjectService.getOne(queryWrapper, false);
  267. if (reportProject != null) {
  268. Integer actType = reportProject.getActType();
  269. // 主动类型
  270. if (actType != null && actType.equals(1)) {
  271. } else { // 被动类型
  272. }
  273. }
  274. }
  275. }
  276. this.removeBatchByIds(ids);
  277. }
  278. public void deleteByIprIds(List<Integer> iprPersonIds) {
  279. LambdaQueryWrapper<MatchCasePerson> queryWrapper = new LambdaQueryWrapper<>();
  280. queryWrapper.in(MatchCasePerson::getIprPersonId, iprPersonIds);
  281. this.remove(queryWrapper);
  282. }
  283. }