ProjectFieldService.java 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695
  1. package cn.cslg.pas.service;
  2. import cn.cslg.pas.common.model.PersonnelVO;
  3. import cn.cslg.pas.common.model.dto.PatentDTO;
  4. import cn.cslg.pas.common.model.vo.ProjectFieldVO;
  5. import cn.cslg.pas.common.model.vo.UploadSettingVO;
  6. import cn.cslg.pas.common.utils.*;
  7. import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils;
  8. import cn.cslg.pas.domain.*;
  9. import cn.cslg.pas.mapper.ProjectFieldMapper;
  10. import cn.dev33.satoken.stp.StpUtil;
  11. import cn.hutool.core.lang.tree.Tree;
  12. import com.alibaba.fastjson.JSONObject;
  13. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  14. import com.baomidou.mybatisplus.core.metadata.IPage;
  15. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  16. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  17. import lombok.RequiredArgsConstructor;
  18. import org.springframework.context.annotation.Lazy;
  19. import org.springframework.stereotype.Service;
  20. import org.springframework.transaction.annotation.Transactional;
  21. import java.io.IOException;
  22. import java.util.*;
  23. import java.util.stream.Collectors;
  24. /**
  25. * <p>
  26. * 专利信息自定义字段表 服务类
  27. * </p>
  28. *
  29. * @author 王岩
  30. * @since 2021-12-16
  31. */
  32. @Service
  33. @RequiredArgsConstructor(onConstructor_ = {@Lazy})
  34. public class ProjectFieldService extends ServiceImpl<ProjectFieldMapper, ProjectField> {
  35. private final ProjectFieldOptionService projectFieldOptionService;
  36. private final ProjectFieldTreeService projectFieldTreeService;
  37. private final ProjectFolderService projectFolderService;
  38. private final ProjectFieldTextService projectFieldTextService;
  39. private final ProjectFieldPatentLinkService projectFieldPatentLinkService;
  40. private final PatentService patentService;
  41. private final FileUtils fileUtils;
  42. private final LoginUtils loginUtils;
  43. private final OutInterfaceService outInterfaceService;
  44. private final CacheUtils cacheUtils;
  45. public List<PatentDTO.Field> getPatentFieldByPatentIdAndProjectId(Integer projectId, Integer patentId) {
  46. List<PatentDTO.Field> dataList = new ArrayList<>();
  47. List<ProjectFieldPatentLink> linkList = projectFieldPatentLinkService.getProjectPatentLinkByPatentAndProId(patentId, projectId);
  48. List<Integer> fieldIds = linkList.stream().map(ProjectFieldPatentLink::getFieldId).distinct().collect(Collectors.toList());
  49. List<Integer> optionIds = linkList.stream().map(ProjectFieldPatentLink::getOptionId).distinct().collect(Collectors.toList());
  50. List<ProjectField> fieldList = this.getFieldListByIds(fieldIds);
  51. List<ProjectFieldText> textList = projectFieldTextService.getProjectFieldTextByFieldIds(fieldIds);
  52. List<ProjectFieldOption> optionList = projectFieldOptionService.getFieldOptionList(fieldIds);
  53. List<ProjectFieldTree> treeList = projectFieldTreeService.getProjectFieldTreeOptionByFieldIds(fieldIds);
  54. fieldList.forEach(field -> {
  55. PatentDTO.Field data = new PatentDTO.Field();
  56. data.setId(field.getId());
  57. data.setName(field.getName());
  58. data.setType(field.getType());
  59. switch (field.getType()) {
  60. case 0:
  61. case 1:
  62. case 2:
  63. data.setSelected(textList.stream().filter(item -> item.getFieldId().equals(field.getId()) && optionIds.contains(item.getId())).map(ProjectFieldText::getText).distinct().collect(Collectors.toList()));
  64. break;
  65. case 3:
  66. case 4:
  67. case 5:
  68. data.setSelected(optionList.stream().filter(item -> item.getFieldId().equals(field.getId()) && optionIds.contains(item.getId())).map(ProjectFieldOption::getName).distinct().collect(Collectors.toList()));
  69. break;
  70. case 6:
  71. List<ProjectFieldTree> trees = treeList.stream().filter(item -> item.getFieldId().equals(field.getId())).collect(Collectors.toList());
  72. List<ProjectFieldTree> optionTree = trees.stream().filter(item -> optionIds.contains(item.getId())).collect(Collectors.toList());
  73. List<String> selected = new ArrayList<>();
  74. optionTree.forEach(item -> selected.add(PatentUtils.getTreeNodeFullName(trees, item.getPath())));
  75. data.setSelected(selected);
  76. break;
  77. }
  78. dataList.add(data);
  79. });
  80. return dataList;
  81. }
  82. public Map<Integer, List<PatentDTO.Field>> getPatentFieldByPatentIdAndProjectId2(Integer projectId, List<Integer> patentIds) {
  83. Map<Integer, List<PatentDTO.Field>> map = new HashMap<>();
  84. List<ProjectFieldPatentLink> linkList = new ArrayList<>();
  85. //根据专利号和专题库id获得所有自定义字段关联数据
  86. if (patentIds.size() > 0) {
  87. LambdaQueryWrapper<ProjectFieldPatentLink> queryWrapper = new LambdaQueryWrapper<>();
  88. queryWrapper.in(ProjectFieldPatentLink::getPatentId, patentIds);
  89. queryWrapper.eq(ProjectFieldPatentLink::getProjectId, projectId);
  90. linkList = projectFieldPatentLinkService.list(queryWrapper);
  91. }
  92. List<Integer> fieldIds = linkList.stream().map(ProjectFieldPatentLink::getFieldId).distinct().collect(Collectors.toList());
  93. List<ProjectField> fieldList = this.getFieldListByIds(fieldIds);
  94. List<ProjectFieldText> textList = projectFieldTextService.getProjectFieldTextByFieldIds(fieldIds);
  95. List<ProjectFieldOption> optionList = projectFieldOptionService.getFieldOptionList(fieldIds);
  96. List<ProjectFieldTree> treeList = projectFieldTreeService.getProjectFieldTreeOptionByFieldIds(fieldIds);
  97. //遍历专利
  98. for (Integer patentId : patentIds) {
  99. List<PatentDTO.Field> dataList = new ArrayList<>();
  100. //获得当前专利的关联信息
  101. List<ProjectFieldPatentLink> temLinkList = linkList.stream().filter(item -> item.getPatentId().equals(patentId)).collect(Collectors.toList());
  102. //过滤出当前专利的自定义栏位
  103. List<Integer> temFieldIds = linkList.stream().filter(item -> item.getPatentId().equals(patentId)).map(ProjectFieldPatentLink::getFieldId).distinct().collect(Collectors.toList());
  104. List<ProjectField> temFieldList = fieldList.stream().filter(item -> temFieldIds.contains(item.getId())).collect(Collectors.toList());
  105. temFieldList.forEach(field -> {
  106. List<Integer> valueIds = temLinkList.stream().filter(item -> item.getFieldId().equals(field.getId())).map(ProjectFieldPatentLink::getOptionId).collect(Collectors.toList());
  107. PatentDTO.Field data = new PatentDTO.Field();
  108. data.setId(field.getId());
  109. data.setName(field.getName());
  110. data.setType(field.getType());
  111. switch (field.getType()) {
  112. case 0:
  113. case 1:
  114. case 2:
  115. data.setSelected(textList.stream().filter(item -> item.getFieldId().equals(field.getId()) && valueIds.contains(item.getId())).map(ProjectFieldText::getText).distinct().collect(Collectors.toList()));
  116. break;
  117. case 3:
  118. case 4:
  119. case 5:
  120. data.setSelected(optionList.stream().filter(item -> item.getFieldId().equals(field.getId()) && valueIds.contains(item.getId())).map(ProjectFieldOption::getName).distinct().collect(Collectors.toList()));
  121. break;
  122. case 6:
  123. List<ProjectFieldTree> trees = treeList.stream().filter(item -> item.getFieldId().equals(field.getId())).collect(Collectors.toList());
  124. List<ProjectFieldTree> optionTree = trees.stream().filter(item -> valueIds.contains(item.getId())).collect(Collectors.toList());
  125. List<String> selected = new ArrayList<>();
  126. optionTree.forEach(item -> selected.add(PatentUtils.getTreeNodeFullName(trees, item.getPath())));
  127. data.setSelected(selected);
  128. break;
  129. }
  130. dataList.add(data);
  131. });
  132. map.put(patentId, dataList);
  133. }
  134. return map;
  135. }
  136. public List<ProjectField> getProjectFieldByProjectId(Integer projectId) {
  137. LambdaQueryWrapper<ProjectField> queryWrapper = new LambdaQueryWrapper<>();
  138. queryWrapper.eq(ProjectField::getProjectId, projectId);
  139. return this.list(queryWrapper);
  140. }
  141. public List<ProjectField> getSystemField(Integer projectId) {
  142. List<ProjectField> fieldList = new ArrayList<>();
  143. List<ProjectField> systemField = this.getProjectSystemField();
  144. List<ProjectField> customField = this.getProjectCustomField(projectId);
  145. List<ProjectFieldExpand> expandList = this.getProjectFieldExpand();
  146. List<ProjectFieldSystemExpand> systemExpands = this.getProjectFieldSystemExpand();
  147. for (ProjectField item : systemField) {
  148. if (!item.getType().equals(96)) {
  149. List<Integer> eid = systemExpands.stream().filter(e -> e.getFieldId().equals(item.getId())).map(ProjectFieldSystemExpand::getExpandId).collect(Collectors.toList());
  150. if (eid.size() != 0) {
  151. item.setExpand(expandList.stream().filter(expand -> eid.contains(expand.getId())).collect(Collectors.toList()));
  152. }
  153. fieldList.add(item);
  154. } else {
  155. customField.add(item);
  156. }
  157. }
  158. for (ProjectField item : customField) {
  159. ProjectField field = new ProjectField();
  160. field.setName(item.getName());
  161. field.setId(item.getId());
  162. field.setType(item.getType());
  163. field.setPtype(this.getCustomFieldPtype(item, field, expandList));
  164. fieldList.add(field);
  165. }
  166. return fieldList;
  167. }
  168. public Integer getCustomFieldPtype(ProjectField item, ProjectField field, List<ProjectFieldExpand> expandList) {
  169. switch (item.getType()) {
  170. case 0:
  171. return 3;
  172. case 1:
  173. field.setExpand(expandList.stream().filter(e -> e.getPtype().equals(2) || e.getPtype().equals(4)).collect(Collectors.toList()));
  174. return 0;
  175. case 2:
  176. case 3:
  177. case 4:
  178. case 5:
  179. case 6:
  180. return 1;
  181. }
  182. return item.getPtype();
  183. }
  184. public List<ProjectField> getFieldListByIds(List<Integer> ids) {
  185. if (ids == null || ids.size() == 0) {
  186. return new ArrayList<>();
  187. }
  188. LambdaQueryWrapper<ProjectField> queryWrapper = new LambdaQueryWrapper<>();
  189. queryWrapper.in(ProjectField::getId, ids);
  190. return this.list(queryWrapper);
  191. }
  192. public List<ProjectField> getTreeOptionList(Integer projectId) {
  193. LambdaQueryWrapper<ProjectField> queryWrapper = new LambdaQueryWrapper<>();
  194. queryWrapper.eq(ProjectField::getProjectId, projectId);
  195. queryWrapper.eq(ProjectField::getType, 6);
  196. List<ProjectField> fieldList = this.list(queryWrapper);
  197. for (ProjectField field : fieldList) {
  198. List<Tree<Integer>> treeList = projectFieldTreeService.getProjectFieldTreeNodeByFieldId(field.getId());
  199. field.setOption(JsonUtils.jsonToList(JsonUtils.objectToJson(treeList), ProjectFieldOption.class));
  200. }
  201. return fieldList;
  202. }
  203. public List<ProjectField> getProjectCustomField(Integer projectId) {
  204. List<ProjectField> fieldList = this.getProjectFieldByProjectId(projectId);
  205. List<ProjectFieldOption> optionList = projectFieldOptionService.getFieldOptionList(fieldList.stream().map(ProjectField::getId).collect(Collectors.toList()));
  206. for (ProjectField item : fieldList) {
  207. if (item.getType() != 6) {
  208. item.setOption(optionList.stream().filter(option -> option.getFieldId().equals(item.getId())).collect(Collectors.toList()));
  209. } else {
  210. item.setOption(JsonUtils.jsonToList(JsonUtils.objectToJson(projectFieldTreeService.getProjectFieldTreeNodeByFieldId(item.getId())), ProjectFieldOption.class));
  211. }
  212. }
  213. return fieldList;
  214. }
  215. public Map<String, Object> getCustomField(Integer projectId) {
  216. Map<String, Object> result = new HashMap<>();
  217. List<ProjectField> indexs = new ArrayList<>();
  218. List<Object> classifys = new ArrayList<>();
  219. List<ProjectField> fieldList = this.getProjectFieldByProjectId(projectId);
  220. List<ProjectFieldOption> optionList = projectFieldOptionService.getFieldOptionList(fieldList.stream().map(ProjectField::getId).collect(Collectors.toList()));
  221. fieldList.forEach(item -> {
  222. if (item.getType() != 6) {
  223. item.setOption(optionList.stream().filter(option -> option.getFieldId().equals(item.getId())).collect(Collectors.toList()));
  224. indexs.add(item);
  225. } else {
  226. item.setOption(JsonUtils.jsonToList(JsonUtils.objectToJson(projectFieldTreeService.getProjectFieldTreeNodeByFieldId(item.getId())), ProjectFieldOption.class));
  227. classifys.add(item);
  228. }
  229. });
  230. List<ProjectFolder> folderList = projectFolderService.getProjectFolderOptionByProjectId(projectId);
  231. result.put("index", indexs);
  232. result.put("classify", classifys);
  233. result.put("folder", projectFolderService.getProjectFolderTreeNode(projectId, folderList));
  234. //数据源名称
  235. String getSettingJson = fileUtils.analysisJsonFile();
  236. List<UploadSettingVO> settingJsonList = JsonUtils.jsonToList(getSettingJson, UploadSettingVO.class);
  237. List<ProjectField.dataType> dataTypesLst = new ArrayList<>();
  238. Objects.requireNonNull(settingJsonList).forEach(item -> {
  239. ProjectField.dataType dataType = new ProjectField.dataType();
  240. dataType.setId(item.getSourceId());
  241. dataType.setName(item.getName());
  242. dataTypesLst.add(dataType);
  243. });
  244. result.put("dataType", dataTypesLst);
  245. return result;
  246. }
  247. public ProjectField getProjectFieldById(Integer id) {
  248. ProjectField projectField = this.getById(id);
  249. switch (projectField.getType()) {
  250. case 0:
  251. case 1:
  252. case 2:
  253. break;
  254. case 3:
  255. case 4:
  256. case 5:
  257. projectField.setOption(projectFieldOptionService.getListByFieldId(projectField.getId()));
  258. break;
  259. case 6:
  260. projectField.setOption(JsonUtils.jsonToList(JsonUtils.objectToJson(projectFieldTreeService.getProjectFieldTreeNodeByFieldId(projectField.getId())), ProjectFieldOption.class));
  261. break;
  262. }
  263. return projectField;
  264. }
  265. public ProjectField getProjectFieldByNameAndType(String name, Integer type, Integer projectId, Integer userId) {
  266. ProjectField projectField = this.getByProjectIdAndNameAndType(name, type, projectId);
  267. if (projectField == null) {
  268. projectField = new ProjectField();
  269. projectField.setType(type);
  270. projectField.setName(name);
  271. projectField.setCreateBy(userId);
  272. projectField.setCreateTime(DateUtils.getDateTime());
  273. projectField.setPtype(projectField.getType() == 6 ? 2 : 1);
  274. projectField.setStatus(1);
  275. projectField.setProjectId(projectId);
  276. projectField.insert();
  277. }
  278. switch (projectField.getType()) {
  279. case 0:
  280. case 1:
  281. case 2:
  282. projectField.setOption(projectFieldTextService.getProjectFieldTextByFieldId(projectField.getId()).stream().map(item -> {
  283. ProjectFieldOption projectFieldOption = new ProjectFieldOption();
  284. projectFieldOption.setId(item.getId());
  285. projectFieldOption.setName(item.getText());
  286. projectFieldOption.setFieldId(item.getFieldId());
  287. return projectFieldOption;
  288. }).collect(Collectors.toList()));
  289. break;
  290. case 3:
  291. case 4:
  292. case 5:
  293. projectField.setOption(projectFieldOptionService.getListByFieldId(projectField.getId()));
  294. break;
  295. case 6:
  296. projectField.setOption(JsonUtils.jsonToList(JsonUtils.objectToJson(projectFieldTreeService.getProjectFieldTreeNodeByFieldId(projectField.getId())), ProjectFieldOption.class));
  297. break;
  298. }
  299. return projectField;
  300. }
  301. public IPage<ProjectField> getPageList(ProjectFieldVO params) throws IOException {
  302. PersonnelVO personnelVO =cacheUtils.getLoginUser(loginUtils.getId());
  303. //分页查询列表
  304. params.setTenantId(personnelVO.getTenantId());
  305. IPage<ProjectField> pageList = baseMapper.getPageList(new Page<>(params.getCurrent(), params.getSize()), params);
  306. //从分页信息中获取列表
  307. List<ProjectField> projectFields = pageList.getRecords();
  308. ArrayList<Integer> personnelIds = new ArrayList<>();
  309. for (ProjectField projectField : projectFields) {
  310. personnelIds.add(projectField.getCreateBy());
  311. }
  312. //调用权限系统根据人员ids获得人员列表的接口
  313. String res = outInterfaceService.getPersonnelByIdsFromPCS(personnelIds);
  314. JSONObject jsonObject = JSONObject.parseObject(res);
  315. List<Personnel> personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
  316. //遍历人员列表和列表,给列表装载人员名称
  317. for (ProjectField projectField : projectFields) {
  318. for (Personnel personnel : personnels) {
  319. if (personnel.getId().equals(projectField.getCreateBy())) {
  320. projectField.setCreateName(personnel.getPersonnelName());
  321. }
  322. }
  323. }
  324. pageList.setRecords(projectFields);
  325. return pageList;
  326. }
  327. public ProjectField getByProjectIdAndNameAndType(String name, Integer type, Integer projectId) {
  328. LambdaQueryWrapper<ProjectField> queryWrapper = new LambdaQueryWrapper<>();
  329. queryWrapper.eq(ProjectField::getName, name);
  330. queryWrapper.eq(ProjectField::getType, type);
  331. queryWrapper.eq(ProjectField::getProjectId, projectId);
  332. return this.getOne(queryWrapper);
  333. }
  334. public ProjectField getProjectFieldByName(String name, Integer projectId) {
  335. LambdaQueryWrapper<ProjectField> queryWrapper = new LambdaQueryWrapper<>();
  336. queryWrapper.eq(ProjectField::getName, name);
  337. queryWrapper.eq(ProjectField::getProjectId, projectId);
  338. return this.getOne(queryWrapper);
  339. }
  340. public String add(ProjectField projectField) {
  341. ProjectField temp = this.getProjectFieldByName(projectField.getName(), projectField.getProjectId());
  342. if (temp != null) {
  343. return Response.error("字段名称已存在");
  344. }
  345. projectField.setPtype(projectField.getType() == 6 ? 2 : 1);
  346. projectField.setCreateBy(loginUtils.getId());
  347. projectField.setCreateTime(DateUtils.getDateTime());
  348. projectField.setProjectId(projectField.getProjectId());
  349. projectField.insert();
  350. return Response.success(projectField.getId());
  351. }
  352. public String edit(ProjectField projectField) {
  353. ProjectField temp = this.getProjectFieldByName(projectField.getName(), projectField.getProjectId());
  354. if (temp != null && !temp.getId().equals(projectField.getId())) {
  355. return Response.error("字段名称已存在");
  356. }
  357. projectField.setPtype(projectField.getType() == 6 ? 2 : 1);
  358. projectField.updateById();
  359. return Response.success(true);
  360. }
  361. @Transactional
  362. public String delete(Integer id) {
  363. this.removeById(id);
  364. projectFieldTextService.deleteByFieldId(id);
  365. projectFieldOptionService.deleteByFieldId(id);
  366. projectFieldTreeService.deleteByFieldId(id);
  367. projectFieldPatentLinkService.deleteByFieldId(id);
  368. return Response.success(true);
  369. }
  370. @Transactional
  371. public void deleteByProjectId(Integer projectId) {
  372. List<Integer> ids = this.getProjectFieldByProjectId(projectId).stream().map(ProjectField::getId).collect(Collectors.toList());
  373. for (Integer id : ids) {
  374. this.delete(id);
  375. }
  376. }
  377. public void importProjectField(Integer projectId, Integer userId, String patentIdPatentNoJson, String projectFieldJson, String projectFieldTextJson, String projectFieldOptionJson, String projectFieldTreeJson, String projectFieldPatentLink) {
  378. List<Patent> importPatentList = JsonUtils.jsonToList(patentIdPatentNoJson, Patent.class);
  379. List<Patent> localPatentList = patentService.getPatentListByPatentNo(importPatentList.stream().map(Patent::getPatentNo).collect(Collectors.toList()));
  380. List<Integer> localPatentIds = localPatentList.stream().map(Patent::getId).collect(Collectors.toList());
  381. List<ProjectField> importProjectFieldList = JsonUtils.jsonToList(projectFieldJson, ProjectField.class);
  382. List<ProjectField> localProjectFieldList = this.getProjectFieldByProjectId(projectId);
  383. List<ProjectFieldText> projectFieldTextList = JsonUtils.jsonToList(projectFieldTextJson, ProjectFieldText.class);
  384. List<ProjectFieldOption> projectFieldOptionList = JsonUtils.jsonToList(projectFieldOptionJson, ProjectFieldOption.class);
  385. List<ProjectFieldTree> projectFieldTreeList = JsonUtils.jsonToList(projectFieldTreeJson, ProjectFieldTree.class);
  386. List<ProjectFieldPatentLink> projectFieldPatentLinkList = JsonUtils.jsonToList(projectFieldPatentLink, ProjectFieldPatentLink.class);
  387. for (ProjectField projectField : importProjectFieldList) {
  388. ProjectField localProjectField = localProjectFieldList.stream().filter(item -> item.getName().equals(projectField.getName())).findFirst().orElse(null);
  389. if (localProjectField != null && !localProjectField.getType().equals(projectField.getType())) {
  390. continue;
  391. }
  392. if (localProjectField == null) {
  393. localProjectField = new ProjectField();
  394. localProjectField.setCreateBy(userId);
  395. localProjectField.setCreateTime(DateUtils.getDateTime());
  396. localProjectField.setProjectId(projectId);
  397. localProjectField.setName(projectField.getName());
  398. localProjectField.setType(projectField.getType());
  399. localProjectField.setPtype(projectField.getPtype());
  400. localProjectField.insert();
  401. }
  402. projectFieldPatentLinkService.deleteByPatentIdsAndProjectIdAndFieldId(localPatentIds, projectId, localProjectField.getId());
  403. List<ProjectFieldPatentLink> importProjectPatentLinkList = projectFieldPatentLinkList.stream().filter(item -> item.getFieldId().equals(projectField.getId())).collect(Collectors.toList());
  404. switch (projectField.getType()) {
  405. case 0:
  406. case 1:
  407. case 2:
  408. List<ProjectFieldText> importProjectFieldTextList = projectFieldTextList.stream().filter(item -> item.getFieldId().equals(projectField.getId())).collect(Collectors.toList());
  409. List<ProjectFieldText> localProjectFieldTextList = projectFieldTextService.getProjectFieldTextByFieldId(localProjectField.getId());
  410. for (ProjectFieldText projectFieldText : importProjectFieldTextList) {
  411. ProjectFieldText localProjectFieldText = localProjectFieldTextList.stream().filter(item -> item.getText().equals(projectFieldText.getText())).findFirst().orElse(null);
  412. if (localProjectFieldText == null) {
  413. localProjectFieldText = new ProjectFieldText();
  414. localProjectFieldText.setText(projectFieldText.getText());
  415. localProjectFieldText.setFieldId(localProjectField.getId());
  416. localProjectFieldText.insert();
  417. }
  418. projectFieldPatentLinkService.importProjectFieldPatentLink(importPatentList, localPatentList, importProjectPatentLinkList, projectId, userId, projectFieldText.getFieldId(), projectFieldText.getId(), localProjectFieldText.getFieldId(), localProjectFieldText.getId());
  419. }
  420. break;
  421. case 3:
  422. case 4:
  423. case 5:
  424. List<ProjectFieldOption> importProjectFieldOptionList = projectFieldOptionList.stream().filter(item -> item.getFieldId().equals(projectField.getId())).collect(Collectors.toList());
  425. List<ProjectFieldOption> localProjectFieldOptionList = projectFieldOptionService.getListByFieldId(localProjectField.getId());
  426. for (ProjectFieldOption projectFieldOption : importProjectFieldOptionList) {
  427. ProjectFieldOption localProjectFieldOption = localProjectFieldOptionList.stream().filter(item -> item.getName().equals(projectFieldOption.getName())).findFirst().orElse(null);
  428. if (localProjectFieldOption == null) {
  429. localProjectFieldOption = new ProjectFieldOption();
  430. localProjectFieldOption.setName(projectFieldOption.getName());
  431. localProjectFieldOption.setFieldId(localProjectField.getId());
  432. localProjectFieldOption.insert();
  433. }
  434. projectFieldPatentLinkService.importProjectFieldPatentLink(importPatentList, localPatentList, importProjectPatentLinkList, projectId, userId, projectFieldOption.getFieldId(), projectFieldOption.getId(), localProjectFieldOption.getFieldId(), localProjectFieldOption.getId());
  435. }
  436. break;
  437. case 6:
  438. List<ProjectFieldTree> importProjectFieldTreeList = projectFieldTreeList.stream().filter(item -> item.getFieldId().equals(projectField.getId())).sorted(Comparator.comparing(ProjectFieldTree::getLevel)).collect(Collectors.toList());
  439. for (ProjectFieldTree projectFieldTree : importProjectFieldTreeList) {
  440. ProjectFieldTree localProjectFieldTree = projectFieldTreeService.getProjectFieldTreeOptionByFieldIdAndNameAndLevel(localProjectField.getId(), projectFieldTree.getName(), projectFieldTree.getLevel());
  441. if (localProjectFieldTree == null) {
  442. localProjectFieldTree = new ProjectFieldTree();
  443. localProjectFieldTree.setFieldId(localProjectField.getId());
  444. if (projectFieldTree.getLevel().equals(1)) {
  445. localProjectFieldTree.setParentId(0);
  446. } else {
  447. ProjectFieldTree importProjectFieldTreeParent = importProjectFieldTreeList.stream().filter(item -> item.getId().equals(projectFieldTree.getParentId())).findFirst().orElse(new ProjectFieldTree());
  448. ProjectFieldTree localProjectFieldTreeParent = projectFieldTreeService.getProjectFieldTreeOptionByFieldIdAndNameAndLevel(localProjectField.getId(), importProjectFieldTreeParent.getName(), importProjectFieldTreeParent.getLevel());
  449. localProjectFieldTree.setParentId(localProjectFieldTreeParent.getId());
  450. }
  451. localProjectFieldTree.setOrder(-1);
  452. localProjectFieldTree.setName(projectFieldTree.getName());
  453. localProjectFieldTree.insert();
  454. projectFieldTreeService.edit(localProjectFieldTree);
  455. }
  456. projectFieldPatentLinkService.importProjectFieldPatentLink(importPatentList, localPatentList, importProjectPatentLinkList, projectId, userId, projectFieldTree.getFieldId(), projectFieldTree.getId(), localProjectFieldTree.getFieldId(), localProjectFieldTree.getId());
  457. }
  458. break;
  459. }
  460. }
  461. }
  462. @Transactional
  463. public void importProjectField(List<Integer> ids, Integer projectId) {
  464. for (Integer id : ids) {
  465. ProjectField temp = this.getProjectFieldById(id);
  466. temp.setProjectId(projectId);
  467. temp.setId(null);
  468. switch (temp.getType()) {
  469. case 0:
  470. case 1:
  471. case 2:
  472. break;
  473. case 3:
  474. case 4:
  475. case 5:
  476. temp.getOption().forEach(item -> item.setId(null));
  477. break;
  478. case 6:
  479. this.setImportTreeNodeIdToNull(temp.getOption());
  480. break;
  481. }
  482. this.add(temp);
  483. }
  484. }
  485. @Transactional
  486. public void copyProjectField(Integer id, List<Integer> projectIds) {
  487. ProjectField temp = this.getProjectFieldById(id);
  488. for (Integer projectId : projectIds) {
  489. temp.setProjectId(projectId);
  490. temp.setId(null);
  491. switch (temp.getType()) {
  492. case 0:
  493. case 1:
  494. case 2:
  495. break;
  496. case 3:
  497. case 4:
  498. case 5:
  499. temp.getOption().forEach(item -> item.setId(null));
  500. break;
  501. case 6:
  502. this.setImportTreeNodeIdToNull(temp.getOption());
  503. break;
  504. }
  505. this.add(temp);
  506. }
  507. }
  508. private void setImportTreeNodeIdToNull(List<ProjectFieldOption> treeList) {
  509. treeList.forEach(tree -> {
  510. tree.setId(null);
  511. tree.setPath(null);
  512. tree.setParentId(null);
  513. tree.setLevel(null);
  514. tree.setOrder(null);
  515. if (tree.getChildren() != null && tree.getChildren().size() != 0) {
  516. this.setImportTreeNodeIdToNull(tree.getChildren());
  517. }
  518. });
  519. }
  520. public List<ProjectField> getProjectSystemField() {
  521. List<ProjectField> projectFieldList = new ArrayList<>();
  522. projectFieldList.add(this.buildProjectFieldEntity(13, "IPC分类号", 90, 0));
  523. projectFieldList.add(this.buildProjectFieldEntity(14, "IPC主分类号", 90, 0));
  524. projectFieldList.add(this.buildProjectFieldEntity(15, "CPC分类号", 90, 0));
  525. projectFieldList.add(this.buildProjectFieldEntity(16, "LOC分类号", 90, 0));
  526. projectFieldList.add(this.buildProjectFieldEntity(17, "UPC分类号", 90, 0));
  527. projectFieldList.add(this.buildProjectFieldEntity(18, "申请人", 91, 0));
  528. projectFieldList.add(this.buildProjectFieldEntity(19, "权利人", 91, 0));
  529. projectFieldList.add(this.buildProjectFieldEntity(20, "发明人", 91, 1));
  530. projectFieldList.add(this.buildProjectFieldEntity(21, "代理机构", 91, 1));
  531. projectFieldList.add(this.buildProjectFieldEntity(22, "代理人", 91, 1));
  532. projectFieldList.add(this.buildProjectFieldEntity(23, "第一申请人", 91, 0));
  533. projectFieldList.add(this.buildProjectFieldEntity(24, "第一权利人", 91, 0));
  534. projectFieldList.add(this.buildProjectFieldEntity(25, "申请日", 92, 0));
  535. projectFieldList.add(this.buildProjectFieldEntity(26, "公开日", 92, 0));
  536. projectFieldList.add(this.buildProjectFieldEntity(27, "授权日", 92, 0));
  537. projectFieldList.add(this.buildProjectFieldEntity(28, "受理局", 93, 1));
  538. projectFieldList.add(this.buildProjectFieldEntity(29, "申请人", 93, 0));
  539. projectFieldList.add(this.buildProjectFieldEntity(30, "权利人", 93, 0));
  540. projectFieldList.add(this.buildProjectFieldEntity(31, "优先权国家", 93, 1));
  541. projectFieldList.add(this.buildProjectFieldEntity(32, "引用专利数量", 94, 3));
  542. projectFieldList.add(this.buildProjectFieldEntity(33, "被引用专利数量", 94, 3));
  543. projectFieldList.add(this.buildProjectFieldEntity(34, "inpadoc同族数量", 94, 3));
  544. projectFieldList.add(this.buildProjectFieldEntity(35, "简单同族数量", 94, 3));
  545. projectFieldList.add(this.buildProjectFieldEntity(55, "扩展同族数量", 94, 3));
  546. projectFieldList.add(this.buildProjectFieldEntity(36, "法律状态", 95, 1));
  547. projectFieldList.add(this.buildProjectFieldEntity(37, "专利类型", 95, 1));
  548. projectFieldList.add(this.buildProjectFieldEntity(38, "权利要求数量", 95, 3));
  549. projectFieldList.add(this.buildProjectFieldEntity(39, "独立权利要求数量", 95, 3));
  550. projectFieldList.add(this.buildProjectFieldEntity(54, "标签", 96, 1));
  551. return projectFieldList;
  552. }
  553. public List<ProjectFieldExpand> getProjectFieldExpand() {
  554. List<ProjectFieldExpand> projectFieldExpandList = new ArrayList<>();
  555. projectFieldExpandList.add(this.buildProjectFieldExpandEntity(1, "部", 1));
  556. projectFieldExpandList.add(this.buildProjectFieldExpandEntity(2, "大类", 1));
  557. projectFieldExpandList.add(this.buildProjectFieldExpandEntity(3, "小类", 1));
  558. projectFieldExpandList.add(this.buildProjectFieldExpandEntity(4, "大组", 1));
  559. projectFieldExpandList.add(this.buildProjectFieldExpandEntity(5, "小组", 1));
  560. projectFieldExpandList.add(this.buildProjectFieldExpandEntity(6, "当前", 1));
  561. projectFieldExpandList.add(this.buildProjectFieldExpandEntity(7, "标准", 1));
  562. projectFieldExpandList.add(this.buildProjectFieldExpandEntity(8, "合并后", 1));
  563. projectFieldExpandList.add(this.buildProjectFieldExpandEntity(9, "月", 2));
  564. projectFieldExpandList.add(this.buildProjectFieldExpandEntity(10, "季", 2));
  565. projectFieldExpandList.add(this.buildProjectFieldExpandEntity(11, "半年", 2));
  566. projectFieldExpandList.add(this.buildProjectFieldExpandEntity(12, "年", 2));
  567. projectFieldExpandList.add(this.buildProjectFieldExpandEntity(13, "2年", 2));
  568. projectFieldExpandList.add(this.buildProjectFieldExpandEntity(14, "3年", 2));
  569. projectFieldExpandList.add(this.buildProjectFieldExpandEntity(15, "5年", 2));
  570. projectFieldExpandList.add(this.buildProjectFieldExpandEntity(16, "自定义", 4));
  571. projectFieldExpandList.add(this.buildProjectFieldExpandEntity(17, "国家", 1));
  572. projectFieldExpandList.add(this.buildProjectFieldExpandEntity(18, "省", 1));
  573. projectFieldExpandList.add(this.buildProjectFieldExpandEntity(19, "市", 1));
  574. return projectFieldExpandList;
  575. }
  576. public List<ProjectFieldSystemExpand> getProjectFieldSystemExpand() {
  577. List<ProjectFieldSystemExpand> projectFieldSystemExpandList = new ArrayList<>();
  578. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(13, 1));
  579. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(13, 2));
  580. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(13, 3));
  581. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(13, 4));
  582. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(13, 5));
  583. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(14, 1));
  584. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(14, 2));
  585. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(14, 3));
  586. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(14, 4));
  587. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(14, 5));
  588. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(15, 1));
  589. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(15, 2));
  590. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(15, 3));
  591. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(15, 4));
  592. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(15, 5));
  593. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(16, 2));
  594. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(16, 3));
  595. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(17, 2));
  596. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(17, 3));
  597. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(18, 6));
  598. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(18, 7));
  599. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(18, 8));
  600. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(19, 6));
  601. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(19, 7));
  602. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(19, 8));
  603. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(23, 6));
  604. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(23, 7));
  605. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(23, 8));
  606. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(24, 6));
  607. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(24, 7));
  608. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(24, 8));
  609. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(25, 9));
  610. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(25, 10));
  611. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(25, 11));
  612. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(25, 12));
  613. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(25, 13));
  614. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(25, 14));
  615. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(25, 15));
  616. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(25, 16));
  617. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(26, 9));
  618. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(26, 10));
  619. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(26, 11));
  620. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(26, 12));
  621. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(26, 13));
  622. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(26, 14));
  623. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(26, 15));
  624. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(26, 16));
  625. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(27, 9));
  626. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(27, 10));
  627. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(27, 11));
  628. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(27, 12));
  629. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(27, 13));
  630. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(27, 14));
  631. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(27, 15));
  632. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(27, 16));
  633. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(29, 17));
  634. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(29, 18));
  635. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(29, 19));
  636. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(30, 17));
  637. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(30, 18));
  638. projectFieldSystemExpandList.add(this.buildProjectFieldSystemExpandEntity(30, 19));
  639. return projectFieldSystemExpandList;
  640. }
  641. public ProjectField buildProjectFieldEntity(Integer id, String name, Integer type, Integer ptype) {
  642. ProjectField projectField = new ProjectField();
  643. projectField.setId(id);
  644. projectField.setName(name);
  645. projectField.setType(type);
  646. projectField.setPtype(ptype);
  647. return projectField;
  648. }
  649. public ProjectFieldExpand buildProjectFieldExpandEntity(Integer id, String name, Integer ptype) {
  650. ProjectFieldExpand projectFieldExpand = new ProjectFieldExpand();
  651. projectFieldExpand.setId(id);
  652. projectFieldExpand.setName(name);
  653. projectFieldExpand.setPtype(ptype);
  654. return projectFieldExpand;
  655. }
  656. public ProjectFieldSystemExpand buildProjectFieldSystemExpandEntity(Integer fieldId, Integer expandId) {
  657. ProjectFieldSystemExpand projectFieldSystemExpand = new ProjectFieldSystemExpand();
  658. projectFieldSystemExpand.setFieldId(fieldId);
  659. projectFieldSystemExpand.setExpandId(expandId);
  660. return projectFieldSystemExpand;
  661. }
  662. }