AvoidDesignWholeService.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  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. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  59. avoidDesignWhole.setCreateId(personnelVO.getId());
  60. avoidDesignWhole.insert();
  61. return avoidDesignWhole.getId();
  62. }
  63. /**
  64. * 查询回避设计方案
  65. * @param getFeatureSplitDTO
  66. * @return
  67. */
  68. public AvoidDesignWholeVO getAvoidDesignWhole(GetFeatureSplitDTO getFeatureSplitDTO) throws IOException {
  69. //判断参数不能为空
  70. Integer projectId = getFeatureSplitDTO.getProjectId();
  71. if (projectId == null) {
  72. throw new XiaoShiException("projectId为空");
  73. }
  74. if (getFeatureSplitDTO.getIfReSplit() == null) {
  75. throw new XiaoShiException("ifReSplit不能为空");
  76. }
  77. if (getFeatureSplitDTO.getSplitBy() == null) {
  78. throw new XiaoShiException("splitBy不能为空");
  79. }
  80. if (getFeatureSplitDTO.getSplitType() == null) {
  81. throw new XiaoShiException("splitType不能为空");
  82. }
  83. //返回的VO类
  84. AvoidDesignWholeVO avoidDesignWholeVO = new AvoidDesignWholeVO();
  85. avoidDesignWholeVO.setProjectId(projectId);
  86. //根据projectId查询专利号
  87. LambdaQueryWrapper<ReportProject> queryWrapper = new LambdaQueryWrapper<>();
  88. queryWrapper.eq(ReportProject::getProjectId, projectId);
  89. ReportProject reportProject = reportProjectService.getOne(queryWrapper, false);
  90. String patentNo = reportProject.getSignPatentNo();
  91. //新建查询拆分特征DTO
  92. SplitVO splitVO = new SplitVO();
  93. BeanUtils.copyProperties(getFeatureSplitDTO, splitVO);
  94. splitVO.setPatentNo(patentNo);
  95. List<PatentRightVo> patentRightVos = new ArrayList<>();
  96. //判断是否重拆
  97. if (getFeatureSplitDTO.getIfReSplit() == true) {//重拆
  98. //重拆需要清空原有特征表、回避设计方向表、回避设计总体方向表
  99. //清空回避设计方向表
  100. LambdaQueryWrapper<AvoidDesign> deleteWrapper = new LambdaQueryWrapper<>();
  101. deleteWrapper.eq(AvoidDesign::getProjectId, projectId);
  102. avoidDesignService.remove(deleteWrapper);
  103. //清空回避设计总体方向表
  104. LambdaQueryWrapper<AvoidDesignWhole> deleteWholeWapper = new LambdaQueryWrapper<>();
  105. deleteWholeWapper.eq(AvoidDesignWhole::getProjectId, projectId);
  106. this.remove(deleteWholeWapper);
  107. //清空特征表
  108. //根据重拆条件拆分权要保存到特征表
  109. patentRightVos = featureService.splitPatentFeature(splitVO);
  110. } else {
  111. //不重拆
  112. patentRightVos = featureService.splitPatentFeature(splitVO);
  113. }
  114. if (!patentRightVos.isEmpty()) {
  115. //根据projectId查询回避设计方案总体方向
  116. LambdaQueryWrapper<AvoidDesignWhole> getWholeWrapper = new LambdaQueryWrapper<>();
  117. getWholeWrapper.eq(AvoidDesignWhole::getProjectId, projectId);
  118. AvoidDesignWhole avoidDesignWhole = this.getOne(getWholeWrapper, false);
  119. //复制总体方向数据
  120. if (avoidDesignWhole != null) {
  121. BeanUtils.copyProperties(avoidDesignWhole, avoidDesignWholeVO);
  122. avoidDesignWholeVO.setWholeContent(avoidDesignWhole.getContent());
  123. } else {
  124. avoidDesignWholeVO.setWholeContent(null);
  125. }
  126. //新建权要层信息
  127. List<AvoidDesignRightVO> avoidDesignRightVOS = new ArrayList<>();
  128. //遍历装载权要层信息
  129. patentRightVos.forEach(item -> {
  130. AvoidDesignRightVO avoidDesignRightVO = new AvoidDesignRightVO();
  131. BeanUtils.copyProperties(item, avoidDesignRightVO);
  132. //新建特征与回避设计方向VOS
  133. List<AvoidDesignVO> avoidDesignVOS = new ArrayList<>();
  134. //特征信息
  135. List<Feature> features = item.getFeatures();
  136. avoidDesignVOS = this.loadAvoidDesign(projectId, features);
  137. avoidDesignRightVO.setAvoidDesignVOS(avoidDesignVOS);
  138. avoidDesignRightVOS.add(avoidDesignRightVO);
  139. });
  140. avoidDesignWholeVO.setAvoidDesignRightVOS(avoidDesignRightVOS);
  141. } else {
  142. throw new XiaoShiException("特征查询错误");
  143. }
  144. // //装载名称等信息
  145. // this.loadAvoidDesignWhole(avoidDesignWholeVO);
  146. return avoidDesignWholeVO;
  147. }
  148. public List<AvoidDesignVO> loadAvoidDesign(Integer projectId, List<Feature> features) {
  149. List<AvoidDesignVO> avoidDesignVOS = new ArrayList<>();
  150. LambdaQueryWrapper<AvoidDesign> queryWrapper = new LambdaQueryWrapper<>();
  151. queryWrapper.eq(AvoidDesign::getProjectId, projectId);
  152. List<AvoidDesign> avoidDesignList = avoidDesignService.list(queryWrapper);
  153. if (!features.isEmpty()) {
  154. for (Feature feature : features) {
  155. //新建特征与回避设计方向VO
  156. AvoidDesignVO avoidDesignVO = new AvoidDesignVO();
  157. //装载特征部分的信息
  158. avoidDesignVO.setFeatureId(feature.getId());
  159. avoidDesignVO.setContent(feature.getContent());
  160. avoidDesignVO.setPatentNo(feature.getPatentNo());
  161. avoidDesignVO.setRightSort(feature.getRightSort());
  162. avoidDesignVO.setRightType(feature.getRightType());
  163. avoidDesignVO.setExplainText(feature.getExplainText());
  164. avoidDesignVO.setFormId(feature.getFromId());
  165. avoidDesignVO.setSysOrder(feature.getSysOrder());
  166. //装载回避设计部分(可能为空)
  167. if (!avoidDesignList.isEmpty()) {
  168. AvoidDesign avoidDesign = avoidDesignList.stream().filter(item -> item.getFeatureId() != null && item.getFeatureId().equals(feature.getId())).findFirst().orElse(null);
  169. if (avoidDesign != null) {
  170. avoidDesignVO.setId(avoidDesign.getId());
  171. avoidDesignVO.setDirection(avoidDesign.getDirection());
  172. avoidDesignVO.setCreateId(avoidDesign.getCreateId());
  173. avoidDesignVO.setCreateTime(avoidDesign.getCreateTime());
  174. }
  175. }
  176. avoidDesignVOS.add(avoidDesignVO);
  177. }
  178. }
  179. return avoidDesignVOS;
  180. }
  181. // /**
  182. // * 装载回避设计方案总数据(回避设计方案总体方向and回避设计方向集合)
  183. // * @param avoidDesignWholeVO
  184. // */
  185. // public void loadAvoidDesignWhole(AvoidDesignWholeVO avoidDesignWholeVO) throws IOException {
  186. // //创建需要查询的ids
  187. // List<String> createIds = new ArrayList<>();
  188. // List<Personnel> personnels = new ArrayList<>();
  189. // //将回避设计总体方向的人员id插入其中
  190. // createIds.add(avoidDesignWholeVO.getCreateId());
  191. // List<AvoidDesignVO> avoidDesignVOS = avoidDesignWholeVO.getAvoidDesignVOS();
  192. // //回避设计方向集合不为空,遍历将人员ids插入其中
  193. // if (!avoidDesignVOS.isEmpty()) {
  194. // avoidDesignVOS.forEach(item -> {
  195. // if (item.getCreateId() != null) {
  196. // createIds.add(item.getCreateId());
  197. // }
  198. // });
  199. // }
  200. // //查询创建人名称
  201. // if (createIds.size() != 0) {
  202. // String res = permissionService.getPersonnelByIdsFromPCS(createIds);
  203. // JSONObject jsonObject = JSONObject.parseObject(res);
  204. // personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
  205. // }
  206. // //首先装载回避设计总体方向的人员名称
  207. // Personnel personnelWhole = personnels.stream().filter(item -> item.getId().equals(avoidDesignWholeVO.getCreateId())).findFirst().orElse(null);
  208. // if (personnelWhole != null) {
  209. // avoidDesignWholeVO.setCreateName(personnelWhole.getPersonnelName());
  210. // } else {
  211. // throw new XiaoShiException("未获取到当前登陆人信息");
  212. // }
  213. // //新建
  214. // List<Integer> projectIds = new ArrayList<>();
  215. // //将回避设计的projectId插入其中
  216. // projectIds.add(avoidDesignWholeVO.getProjectId());
  217. // List<Project> projects = projectTaskService.getProjectInfo(projectIds);
  218. // if (!projects.isEmpty()) {
  219. // Project project = projects.stream().filter(item -> item.getId().equals(avoidDesignWholeVO.getProjectId())).findFirst().orElse(null);
  220. // if (project != null) {
  221. // avoidDesignWholeVO.setProjectName(project.getName());
  222. // avoidDesignWholeVO.setProjectType(project.getType());
  223. // } else {
  224. // throw new XiaoShiException("未查询到报告信息");
  225. // }
  226. // }
  227. // //遍历装载回避设计方向的人员名称
  228. // for (AvoidDesignVO avoidDesignVO : avoidDesignVOS) {
  229. // //装载人员信息
  230. // Personnel personnel = personnels.stream().filter(item -> item.getId().equals(avoidDesignVO.getCreateId())).findFirst().orElse(null);
  231. // if (personnel != null) {
  232. // avoidDesignVO.setCreateName(personnel.getPersonnelName());
  233. // } else {
  234. // throw new XiaoShiException("未获取到当前登陆人信息");
  235. // }
  236. // //装载特征集合
  237. // Feature feature = featureService.getById(avoidDesignVO.getFeatureId());
  238. // avoidDesignVO.setContent(feature.getContent());
  239. // avoidDesignVO.setExplainText(feature.getExplainText());
  240. // avoidDesignVO.setRightSort(feature.getRightSort());
  241. // avoidDesignVO.setRightType(feature.getRightType());
  242. // avoidDesignVO.setPatentNo(feature.getPatentNo());
  243. // }
  244. // }
  245. }