AvoidDesignWholeService.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. package cn.cslg.pas.service.business;
  2. import cn.cslg.pas.common.dto.business.AvoidDesignWholeDTO;
  3. import cn.cslg.pas.common.dto.business.GetFeatureSplitDTO;
  4. import cn.cslg.pas.common.model.cronModel.PersonnelVO;
  5. import cn.cslg.pas.common.utils.CacheUtils;
  6. import cn.cslg.pas.common.utils.LoginUtils;
  7. import cn.cslg.pas.common.vo.PatentRightVo;
  8. import cn.cslg.pas.common.vo.business.AvoidDesignRightVO;
  9. import cn.cslg.pas.common.vo.business.AvoidDesignVO;
  10. import cn.cslg.pas.common.vo.business.AvoidDesignWholeVO;
  11. import cn.cslg.pas.common.vo.business.SplitVO;
  12. import cn.cslg.pas.domain.business.*;
  13. import cn.cslg.pas.exception.UnLoginException;
  14. import cn.cslg.pas.exception.XiaoShiException;
  15. import cn.cslg.pas.mapper.AvoidDesignWholeMapper;
  16. import cn.cslg.pas.service.permissions.PermissionService;
  17. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  18. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  19. import org.springframework.beans.BeanUtils;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.context.annotation.Lazy;
  22. import org.springframework.stereotype.Service;
  23. import java.io.IOException;
  24. import java.util.ArrayList;
  25. import java.util.List;
  26. /**
  27. * 回避设计方案总体方向Service
  28. * @Author xiexiang
  29. * @Date 2023/12/5
  30. */
  31. @Service
  32. public class AvoidDesignWholeService extends ServiceImpl<AvoidDesignWholeMapper, AvoidDesignWhole> {
  33. @Autowired
  34. @Lazy
  35. private AvoidDesignService avoidDesignService;
  36. @Autowired
  37. private PermissionService permissionService;
  38. @Autowired
  39. private ProjectTaskService projectTaskService;
  40. @Autowired
  41. private FeatureService featureService;
  42. @Autowired
  43. private ReportProjectService reportProjectService;
  44. @Autowired
  45. private CacheUtils cacheUtils;
  46. @Autowired
  47. private LoginUtils loginUtils;
  48. /**
  49. * 新增回避设计方案总体方向
  50. * @param avoidDesignWholeDTO
  51. * @return
  52. */
  53. public Integer addAvoidDesignWhole(AvoidDesignWholeDTO avoidDesignWholeDTO){
  54. AvoidDesignWhole avoidDesignWhole = new AvoidDesignWhole();
  55. BeanUtils.copyProperties(avoidDesignWholeDTO, avoidDesignWhole);
  56. //获取登录人信息
  57. PersonnelVO personnelVO = new PersonnelVO();
  58. try {
  59. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  60. } catch (Exception e) {
  61. throw new UnLoginException("未登录");
  62. }
  63. avoidDesignWhole.setCreateId(personnelVO.getId());
  64. avoidDesignWhole.insert();
  65. return avoidDesignWhole.getId();
  66. }
  67. /**
  68. * 查询回避设计方案
  69. * @param getFeatureSplitDTO
  70. * @return
  71. */
  72. public AvoidDesignWholeVO getAvoidDesignWhole(GetFeatureSplitDTO getFeatureSplitDTO) throws IOException {
  73. //判断参数不能为空
  74. Integer projectId = getFeatureSplitDTO.getProjectId();
  75. if (projectId == null) {
  76. throw new XiaoShiException("projectId为空");
  77. }
  78. if (getFeatureSplitDTO.getIfReSplit() == null) {
  79. throw new XiaoShiException("ifReSplit不能为空");
  80. }
  81. if (getFeatureSplitDTO.getSplitBy() == null) {
  82. throw new XiaoShiException("splitBy不能为空");
  83. }
  84. if (getFeatureSplitDTO.getSplitType() == null) {
  85. throw new XiaoShiException("splitType不能为空");
  86. }
  87. //返回的VO类
  88. AvoidDesignWholeVO avoidDesignWholeVO = new AvoidDesignWholeVO();
  89. avoidDesignWholeVO.setProjectId(projectId);
  90. //根据projectId查询专利号
  91. LambdaQueryWrapper<ReportProject> queryWrapper = new LambdaQueryWrapper<>();
  92. queryWrapper.eq(ReportProject::getProjectId, projectId);
  93. ReportProject reportProject = reportProjectService.getOne(queryWrapper, false);
  94. String patentNo = reportProject.getSignPatentNo();
  95. //新建查询拆分特征DTO
  96. SplitVO splitVO = new SplitVO();
  97. BeanUtils.copyProperties(getFeatureSplitDTO, splitVO);
  98. splitVO.setPatentNo(patentNo);
  99. List<PatentRightVo> patentRightVos = new ArrayList<>();
  100. //判断是否重拆
  101. if (getFeatureSplitDTO.getIfReSplit() == true) {//重拆
  102. //重拆需要清空原有特征表、回避设计方向表、回避设计总体方向表
  103. //清空回避设计方向表
  104. LambdaQueryWrapper<AvoidDesign> deleteWrapper = new LambdaQueryWrapper<>();
  105. deleteWrapper.eq(AvoidDesign::getProjectId, projectId);
  106. avoidDesignService.remove(deleteWrapper);
  107. //清空回避设计总体方向表
  108. LambdaQueryWrapper<AvoidDesignWhole> deleteWholeWapper = new LambdaQueryWrapper<>();
  109. deleteWholeWapper.eq(AvoidDesignWhole::getProjectId, projectId);
  110. this.remove(deleteWholeWapper);
  111. //清空特征表
  112. //根据重拆条件拆分权要保存到特征表
  113. patentRightVos = featureService.splitPatentFeature(splitVO);
  114. } else {
  115. //不重拆
  116. patentRightVos = featureService.splitPatentFeature(splitVO);
  117. }
  118. if (!patentRightVos.isEmpty()) {
  119. //根据projectId查询回避设计方案总体方向
  120. LambdaQueryWrapper<AvoidDesignWhole> getWholeWrapper = new LambdaQueryWrapper<>();
  121. getWholeWrapper.eq(AvoidDesignWhole::getProjectId, projectId);
  122. AvoidDesignWhole avoidDesignWhole = this.getOne(getWholeWrapper, false);
  123. //复制总体方向数据
  124. if (avoidDesignWhole != null) {
  125. BeanUtils.copyProperties(avoidDesignWhole, avoidDesignWholeVO);
  126. avoidDesignWholeVO.setWholeContent(avoidDesignWhole.getContent());
  127. } else {
  128. avoidDesignWholeVO.setWholeContent(null);
  129. }
  130. //新建权要层信息
  131. List<AvoidDesignRightVO> avoidDesignRightVOS = new ArrayList<>();
  132. //遍历装载权要层信息
  133. patentRightVos.forEach(item -> {
  134. AvoidDesignRightVO avoidDesignRightVO = new AvoidDesignRightVO();
  135. BeanUtils.copyProperties(item, avoidDesignRightVO);
  136. //新建特征与回避设计方向VOS
  137. List<AvoidDesignVO> avoidDesignVOS = new ArrayList<>();
  138. //特征信息
  139. List<Feature> features = item.getFeatures();
  140. avoidDesignVOS = this.loadAvoidDesign(projectId, features);
  141. avoidDesignRightVO.setAvoidDesignVOS(avoidDesignVOS);
  142. avoidDesignRightVOS.add(avoidDesignRightVO);
  143. });
  144. avoidDesignWholeVO.setAvoidDesignRightVOS(avoidDesignRightVOS);
  145. } else {
  146. throw new XiaoShiException("特征查询错误");
  147. }
  148. // //装载名称等信息
  149. // this.loadAvoidDesignWhole(avoidDesignWholeVO);
  150. return avoidDesignWholeVO;
  151. }
  152. public List<AvoidDesignVO> loadAvoidDesign(Integer projectId, List<Feature> features) {
  153. List<AvoidDesignVO> avoidDesignVOS = new ArrayList<>();
  154. LambdaQueryWrapper<AvoidDesign> queryWrapper = new LambdaQueryWrapper<>();
  155. queryWrapper.eq(AvoidDesign::getProjectId, projectId);
  156. List<AvoidDesign> avoidDesignList = avoidDesignService.list(queryWrapper);
  157. if (!features.isEmpty()) {
  158. for (Feature feature : features) {
  159. //新建特征与回避设计方向VO
  160. AvoidDesignVO avoidDesignVO = new AvoidDesignVO();
  161. //装载特征部分的信息
  162. avoidDesignVO.setFeatureId(feature.getId());
  163. avoidDesignVO.setContent(feature.getContent());
  164. avoidDesignVO.setPatentNo(feature.getPatentNo());
  165. avoidDesignVO.setRightSort(feature.getRightSort());
  166. avoidDesignVO.setRightType(feature.getRightType());
  167. avoidDesignVO.setExplainText(feature.getExplainText());
  168. avoidDesignVO.setFormId(feature.getFromId());
  169. avoidDesignVO.setSysOrder(feature.getSysOrder());
  170. //装载回避设计部分(可能为空)
  171. if (!avoidDesignList.isEmpty()) {
  172. AvoidDesign avoidDesign = avoidDesignList.stream().filter(item -> item.getFeatureId() != null && item.getFeatureId().equals(feature.getId())).findFirst().orElse(null);
  173. if (avoidDesign != null) {
  174. avoidDesignVO.setId(avoidDesign.getId());
  175. avoidDesignVO.setDirection(avoidDesign.getDirection());
  176. avoidDesignVO.setCreateId(avoidDesign.getCreateId());
  177. avoidDesignVO.setCreateTime(avoidDesign.getCreateTime());
  178. }
  179. }
  180. avoidDesignVOS.add(avoidDesignVO);
  181. }
  182. }
  183. return avoidDesignVOS;
  184. }
  185. // /**
  186. // * 装载回避设计方案总数据(回避设计方案总体方向and回避设计方向集合)
  187. // * @param avoidDesignWholeVO
  188. // */
  189. // public void loadAvoidDesignWhole(AvoidDesignWholeVO avoidDesignWholeVO) throws IOException {
  190. // //创建需要查询的ids
  191. // List<String> createIds = new ArrayList<>();
  192. // List<Personnel> personnels = new ArrayList<>();
  193. // //将回避设计总体方向的人员id插入其中
  194. // createIds.add(avoidDesignWholeVO.getCreateId());
  195. // List<AvoidDesignVO> avoidDesignVOS = avoidDesignWholeVO.getAvoidDesignVOS();
  196. // //回避设计方向集合不为空,遍历将人员ids插入其中
  197. // if (!avoidDesignVOS.isEmpty()) {
  198. // avoidDesignVOS.forEach(item -> {
  199. // if (item.getCreateId() != null) {
  200. // createIds.add(item.getCreateId());
  201. // }
  202. // });
  203. // }
  204. // //查询创建人名称
  205. // if (createIds.size() != 0) {
  206. // String res = permissionService.getPersonnelByIdsFromPCS(createIds);
  207. // JSONObject jsonObject = JSONObject.parseObject(res);
  208. // personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
  209. // }
  210. // //首先装载回避设计总体方向的人员名称
  211. // Personnel personnelWhole = personnels.stream().filter(item -> item.getId().equals(avoidDesignWholeVO.getCreateId())).findFirst().orElse(null);
  212. // if (personnelWhole != null) {
  213. // avoidDesignWholeVO.setCreateName(personnelWhole.getPersonnelName());
  214. // } else {
  215. // throw new XiaoShiException("未获取到当前登陆人信息");
  216. // }
  217. // //新建
  218. // List<Integer> projectIds = new ArrayList<>();
  219. // //将回避设计的projectId插入其中
  220. // projectIds.add(avoidDesignWholeVO.getProjectId());
  221. // List<Project> projects = projectTaskService.getProjectInfo(projectIds);
  222. // if (!projects.isEmpty()) {
  223. // Project project = projects.stream().filter(item -> item.getId().equals(avoidDesignWholeVO.getProjectId())).findFirst().orElse(null);
  224. // if (project != null) {
  225. // avoidDesignWholeVO.setProjectName(project.getName());
  226. // avoidDesignWholeVO.setProjectType(project.getType());
  227. // } else {
  228. // throw new XiaoShiException("未查询到报告信息");
  229. // }
  230. // }
  231. // //遍历装载回避设计方向的人员名称
  232. // for (AvoidDesignVO avoidDesignVO : avoidDesignVOS) {
  233. // //装载人员信息
  234. // Personnel personnel = personnels.stream().filter(item -> item.getId().equals(avoidDesignVO.getCreateId())).findFirst().orElse(null);
  235. // if (personnel != null) {
  236. // avoidDesignVO.setCreateName(personnel.getPersonnelName());
  237. // } else {
  238. // throw new XiaoShiException("未获取到当前登陆人信息");
  239. // }
  240. // //装载特征集合
  241. // Feature feature = featureService.getById(avoidDesignVO.getFeatureId());
  242. // avoidDesignVO.setContent(feature.getContent());
  243. // avoidDesignVO.setExplainText(feature.getExplainText());
  244. // avoidDesignVO.setRightSort(feature.getRightSort());
  245. // avoidDesignVO.setRightType(feature.getRightType());
  246. // avoidDesignVO.setPatentNo(feature.getPatentNo());
  247. // }
  248. // }
  249. }