UploadPatentBatchService.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. package cn.cslg.pas.service;
  2. import cn.cslg.pas.common.core.base.Constants;
  3. import cn.cslg.pas.common.model.dto.TaskWebSocketDTO;
  4. import cn.cslg.pas.common.model.params.*;
  5. import cn.cslg.pas.common.model.vo.ProjectImportPatentVO;
  6. import cn.cslg.pas.common.model.vo.TaskParams;
  7. import cn.cslg.pas.common.model.vo.UploadParamsVO;
  8. import cn.cslg.pas.common.model.vo.UploadSettingVO;
  9. import cn.cslg.pas.common.utils.*;
  10. import cn.cslg.pas.domain.*;
  11. import cn.hutool.extra.spring.SpringUtil;
  12. import lombok.RequiredArgsConstructor;
  13. import org.apache.poi.ss.usermodel.PictureData;
  14. import org.springframework.context.annotation.Lazy;
  15. import org.springframework.scheduling.annotation.Async;
  16. import org.springframework.stereotype.Service;
  17. import org.springframework.transaction.annotation.Transactional;
  18. import org.springframework.transaction.interceptor.TransactionAspectSupport;
  19. import java.text.SimpleDateFormat;
  20. import java.util.*;
  21. import java.util.stream.Collectors;
  22. @Service
  23. @RequiredArgsConstructor(onConstructor_ = {@Lazy})
  24. public class UploadPatentBatchService {
  25. private final FileUtils fileUtils;
  26. private final SystemDictService systemDictService;
  27. private final PatentImageService patentImageService;
  28. private final PatentService patentService;
  29. private final PatentAgencyService patentAgencyService;
  30. private final PatentInstructionTextService patentInstructionTextService;
  31. private final PatentRightService patentRightService;
  32. private final PatentAgentService patentAgentService;
  33. private final PatentPledgeService patentPledgeService;
  34. private final PatentLicensorService patentLicensorService;
  35. private final PatentSimpleFamilyService patentSimpleFamilyService;
  36. private final PatentInventorService patentInventorService;
  37. private final ProjectPatentLinkService projectPatentLinkService;
  38. private final ProjectFieldPatentLinkService projectFieldPatentLinkService;
  39. private final ProjectFolderPatentLinkService projectFolderPatentLinkService;
  40. private final PatentApplicantLinkService patentApplicantLinkService;
  41. private final PatentLabelService patentLabelService;
  42. private final PatentClassNumberLinkService patentClassNumberLinkService;
  43. private final PatentAffairService patentAffairService;
  44. @Async("singleThreadAsyncTaskExecutor")
  45. @Transactional(rollbackFor = Exception.class)
  46. public void uploadPatentBatch(TaskParams params, ProjectImportPatentVO projectImportPatentVO) {
  47. Integer total = params.getRowList().size();
  48. try {
  49. //先解析Json文件 获得配置文件的Json串
  50. String getSettingJson = fileUtils.analysisJsonFile();
  51. //查找需求数据源的对应配置
  52. List<UploadSettingVO.Column> jsonData = UploadPatentBatchUtil.parsingConfigurationFiles(projectImportPatentVO, getSettingJson);
  53. Map<String, PictureData> pictureDataMap = ExcelUtils.getDataFromExcel(params.getPath());
  54. //将数据进行装配并进行数据库操作
  55. for (int i = 0; i < params.getRowList().size(); i++) {
  56. //获取每一行的数据
  57. Map<Object, Object> row = params.getRowList().get(i);
  58. //基础数据装配
  59. UploadParamsVO uploadParamsVO = UploadPatentBatchUtil.processData(row, jsonData);
  60. //查询数据是否存在 如果存在 返回该条数据 如果不存在 新增一条数据
  61. getOneOrInsertOne(uploadParamsVO);
  62. //专利信息需要特殊处理部分
  63. //专利信息(摘要附图)数据装配
  64. PictureData pictureData = pictureDataMap.get(String.valueOf(i + 1));
  65. if (uploadParamsVO.getPatent() != null) {
  66. if (uploadParamsVO.getPatent().getId() != null && pictureData != null) {
  67. uploadParamsVO.getPatent().setAbstractPath(patentImageService.updatePatentImage(uploadParamsVO.getPatent().getId(), pictureData));
  68. }
  69. }
  70. //专利信息(代理机构)数据装配
  71. if (uploadParamsVO.getPatent() != null) {
  72. if (uploadParamsVO.getPatent().getAgencyId() != null) {
  73. uploadParamsVO.getPatent().setAgencyId(patentAgencyService.getAgencyStringIdByName(uploadParamsVO.getPatent().getAgencyId()));
  74. }
  75. }
  76. //将装配对象中的数据保存到数据库
  77. dataToDB(params, uploadParamsVO, projectImportPatentVO);
  78. WebSocketServer.sendInfo(Response.websocket(new TaskWebSocketDTO()
  79. .setTaskId(params.getTaskId())
  80. .setProjectId(projectImportPatentVO.getProjectId())
  81. .setComplete(false)
  82. .setIndex(i)
  83. .setTaskType(Constants.TASK_IMPORT_PATENT)
  84. .setPercentage(total == 0 ? 0 : Math.round((total.equals(i) ? (i * 1D) : (i + 1D)) / total * 100D))
  85. .setFileName("")
  86. .setOldName(params.getOldName())
  87. .setUrl("")
  88. .setTotal(total), ResponseEnum.PATENT_IMPORT_TASK_SUCCESS), params.getUserId());
  89. }
  90. SpringUtil.getBean(ProjectService.class).setImportPatentTaskStatus(2, params.getTaskId());
  91. WebSocketServer.sendInfo(Response.websocket(new TaskWebSocketDTO()
  92. .setTaskId(params.getTaskId())
  93. .setProjectId(projectImportPatentVO.getProjectId())
  94. .setComplete(true)
  95. .setIndex(total)
  96. .setTaskType(Constants.TASK_IMPORT_PATENT)
  97. .setPercentage(100L)
  98. .setFileName("")
  99. .setOldName(params.getOldName())
  100. .setUrl("")
  101. .setTotal(total), ResponseEnum.PATENT_IMPORT_TASK_SUCCESS), params.getUserId());
  102. } catch (Exception e) {
  103. e.printStackTrace();
  104. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  105. SpringUtil.getBean(ProjectService.class).setImportPatentTaskStatus(3, params.getTaskId());
  106. WebSocketServer.sendInfo(Response.error(ResponseEnum.PATENT_IMPORT_TASK_ERROR), params.getUserId());
  107. }
  108. }
  109. /**
  110. * @param uploadParamsVO 全局类
  111. * @date 2022-7-11
  112. * @name 数据库交互
  113. * @description 将装配完毕的VO类向数据库中不同的表进行添加或修改操作
  114. */
  115. private void dataToDB(TaskParams params, UploadParamsVO uploadParamsVO, ProjectImportPatentVO projectImportPatentVO) {
  116. //专利信息 OS_PATENT
  117. if (uploadParamsVO.getPatent() != null) {
  118. uploadParamsVO.getPatent().updateById();
  119. }
  120. //权利要求 OS_PATENT_RIGHT
  121. patentRightBusiness(uploadParamsVO);
  122. //说明书(文本) OS_PATENT_INSTRUCTION_TEXT
  123. if (uploadParamsVO.getPatentInstructionText() != null) {
  124. patentInstructionTextBusiness(uploadParamsVO);
  125. }
  126. //代理人 OS_PATENT_AGENT
  127. if (uploadParamsVO.getPatentAgentList() != null) {
  128. patentAgentBusiness(uploadParamsVO);
  129. }
  130. //质押质权人 OS_PATENT_PLEDGE
  131. if (uploadParamsVO.getPatentPledgeList() != null) {
  132. patentPledgeBusiness(uploadParamsVO);
  133. }
  134. //许可人 OS_PATENT_LICENSOR
  135. if (uploadParamsVO.getPatentLicensorList() != null) {
  136. patentLicensorBusiness(uploadParamsVO);
  137. }
  138. //简单同族 OS_PATENT_SIMPLEFAMILY
  139. patentSimplyFamilyBusiness(uploadParamsVO);
  140. //发明人 OS_PATENT_INVENTOR
  141. patentInventorBusiness(uploadParamsVO);
  142. // //申请人/权利人 OS_APPLICATION_ATTR
  143. // //权利人
  144. // patentCurrentApplicationBusiness(uploadParamsVO);
  145. // //申请人
  146. // patentOriginalApplicationBusiness(uploadParamsVO);
  147. //专题库关联专利信息 OS_THEMATIC_PID
  148. if (uploadParamsVO.getPatent() != null) {
  149. patentThematicPidBusiness(uploadParamsVO, projectImportPatentVO);
  150. }
  151. //标引内容关联专利信息 OS_PATENT_FIELD_PATENT_LINK
  152. if (uploadParamsVO.getPatent() != null) {
  153. patentProjectFieldPatentLinkBusiness(uploadParamsVO, projectImportPatentVO);
  154. }
  155. //文件夹管理 OS_PORTFOLIO_LINK
  156. if (uploadParamsVO.getPatent() != null) {
  157. patentProjectFolderPatentLinkBusiness(uploadParamsVO, projectImportPatentVO);
  158. }
  159. //标签 OS_PATENT_LABEL
  160. if (uploadParamsVO.getPatentLabelList() != null) {
  161. patentLabelBusiness(uploadParamsVO, projectImportPatentVO);
  162. }
  163. //分类号关联 OS_PATENT_TYPENO
  164. if (uploadParamsVO.getMainIpc() != null && uploadParamsVO.getMainUpc() != null && uploadParamsVO.getCpcList() != null && uploadParamsVO.getLocList() != null && uploadParamsVO.getUpcList() != null && uploadParamsVO.getIpcList() != null) {
  165. patentTypeNoBusiness(uploadParamsVO);
  166. }
  167. //事务信息 OS_PATENT_AFFAIR
  168. patentAffairBusiness(uploadParamsVO);
  169. //自定义字段
  170. if (uploadParamsVO.getKey() != null && uploadParamsVO.getFieldList() != null) {
  171. patentFieldBusiness(params, uploadParamsVO, projectImportPatentVO);
  172. }
  173. }
  174. /**
  175. * @param uploadParamsVO 全局类
  176. * @date 2022-7-11
  177. * @name 工具方法
  178. * @description 查询数据是否存在 如果存在 返回该条数据 如果不存在 新增一条数据
  179. */
  180. private void getOneOrInsertOne(UploadParamsVO uploadParamsVO) {
  181. if (uploadParamsVO.getPatent() != null) {
  182. //用专利号查询该条数据是否存在
  183. Patent patent = patentService.getByPatentNo(uploadParamsVO.getPatent().getPatentNo());
  184. //如果不存在就新增一条
  185. if (patent == null) {
  186. uploadParamsVO.getPatent().insert();
  187. } else {
  188. uploadParamsVO.getPatent().setId(patent.getId());
  189. }
  190. }
  191. }
  192. private void patentRightBusiness(UploadParamsVO uploadParamsVO) {
  193. PatentRightParams patentRightParams = new PatentRightParams();
  194. patentRightParams.setPatentId(uploadParamsVO.getPatent().getId());
  195. patentRightParams.setPatentNo(uploadParamsVO.getPatent().getPatentNo());
  196. if (uploadParamsVO.getPatentRight() != null) {
  197. patentRightParams.setContent(uploadParamsVO.getPatentRight().getContent());
  198. patentRightParams.setContentOut(uploadParamsVO.getPatentRight().getContentOut());
  199. }
  200. if (uploadParamsVO.getSelfContent() != null) {
  201. patentRightParams.setSelfContent(uploadParamsVO.getSelfContent());
  202. }
  203. patentRightService.updatePatentRight(patentRightParams);
  204. }
  205. private void patentInstructionTextBusiness(UploadParamsVO uploadParamsVO) {
  206. PatentInstructionTextParams patentInstructionTextParams = new PatentInstructionTextParams();
  207. patentInstructionTextParams.setPatentId(uploadParamsVO.getPatent().getId());
  208. patentInstructionTextParams.setManual(uploadParamsVO.getPatentInstructionText().getManual());
  209. patentInstructionTextParams.setManualOut(uploadParamsVO.getPatentInstructionText().getManualOut());
  210. patentInstructionTextService.updatePatentInstructionText(patentInstructionTextParams);
  211. }
  212. private void patentAgentBusiness(UploadParamsVO uploadParamsVO) {
  213. PatentAgentParams patentAgentParams = new PatentAgentParams();
  214. patentAgentParams.setPatentId(uploadParamsVO.getPatent().getId());
  215. List<String> agentList = uploadParamsVO.getPatentAgentList().stream().map(PatentAgent::getName).collect(Collectors.toList());
  216. patentAgentParams.setAgent(agentList);
  217. patentAgentService.updatePatentAgent(patentAgentParams);
  218. }
  219. private void patentPledgeBusiness(UploadParamsVO uploadParamsVO) {
  220. PatentPledgeParams patentPledgeParams = new PatentPledgeParams();
  221. patentPledgeParams.setPatentId(uploadParamsVO.getPatent().getId());
  222. List<String> pledgeeList = uploadParamsVO.getPatentPledgeList().stream().map(PatentPledge::getPledgee).collect(Collectors.toList());
  223. List<String> pledgorList = uploadParamsVO.getPatentPledgeList().stream().map(PatentPledge::getPledgor).collect(Collectors.toList());
  224. patentPledgeParams.setPledgee(pledgeeList);
  225. patentPledgeParams.setPledgor(pledgorList);
  226. patentPledgeService.updatePatentPledge(patentPledgeParams);
  227. }
  228. private void patentLicensorBusiness(UploadParamsVO uploadParamsVO) {
  229. PatentLicensorParams patentLicensorParams = new PatentLicensorParams();
  230. patentLicensorParams.setPatentId(uploadParamsVO.getPatent().getId());
  231. List<String> licensorList = uploadParamsVO.getPatentLicensorList().stream().map(PatentLicensor::getLicensor).collect(Collectors.toList());
  232. List<String> licenseeList = uploadParamsVO.getPatentLicensorList().stream().map(PatentLicensor::getLicensee).collect(Collectors.toList());
  233. List<String> typeList = uploadParamsVO.getPatentLicensorList().stream().map(PatentLicensor::getType).collect(Collectors.toList());
  234. patentLicensorParams.setLicensor(licensorList);
  235. patentLicensorParams.setLicensee(licenseeList);
  236. patentLicensorParams.setType(typeList);
  237. patentLicensorService.updatePatentLicensor(patentLicensorParams);
  238. }
  239. private void patentSimplyFamilyBusiness(UploadParamsVO uploadParamsVO) {
  240. PatentSimpleFamilyParams patentSimpleFamilyParams = new PatentSimpleFamilyParams();
  241. if (uploadParamsVO.getSimpleFamily() != null) {
  242. patentSimpleFamilyParams.setSimpleFamily(uploadParamsVO.getSimpleFamily());
  243. }
  244. if (uploadParamsVO.getPatSnapFamily() != null) {
  245. patentSimpleFamilyParams.setPatSnapFamily(uploadParamsVO.getPatSnapFamily());
  246. }
  247. if (uploadParamsVO.getInpadocFamily() != null) {
  248. patentSimpleFamilyParams.setInpadocFamily(uploadParamsVO.getInpadocFamily());
  249. }
  250. patentSimpleFamilyParams.setPatentId(uploadParamsVO.getPatent().getId());
  251. patentSimpleFamilyParams.setPatentNo(uploadParamsVO.getPatent().getPatentNo());
  252. patentSimpleFamilyService.updatePatentSimpleFamily(patentSimpleFamilyParams);
  253. }
  254. private void patentInventorBusiness(UploadParamsVO uploadParamsVO) {
  255. PatentInventorParams patentInventorParams = new PatentInventorParams();
  256. if (uploadParamsVO.getPatentInventorList() != null) {
  257. List<String> addressList = uploadParamsVO.getPatentInventorList().stream().map(PatentInventor::getAddress).filter(Objects::nonNull).collect(Collectors.toList());
  258. patentInventorParams.setAddressList(addressList);
  259. List<String> nameList = uploadParamsVO.getPatentInventorList().stream().map(PatentInventor::getName).collect(Collectors.toList());
  260. patentInventorParams.setNameList(nameList);
  261. }
  262. if (uploadParamsVO.getFirstName() != null) {
  263. patentInventorParams.setFirstName(uploadParamsVO.getFirstName());
  264. }
  265. if (uploadParamsVO.getFirstAddress() != null) {
  266. patentInventorParams.setFirstAddress(uploadParamsVO.getFirstAddress());
  267. }
  268. patentInventorParams.setPatentId(uploadParamsVO.getPatent().getId());
  269. patentInventorService.updatePatentInventor(patentInventorParams);
  270. }
  271. private void patentCurrentApplicationBusiness(UploadParamsVO uploadParamsVO) {
  272. patentApplicantLinkService.updatePatentApplicantLink(uploadParamsVO.getPatentApplicantCurrentName(), uploadParamsVO.getPatentApplicantStandardCurrentName(), 1, uploadParamsVO.getPatent().getId());
  273. }
  274. private void patentOriginalApplicationBusiness(UploadParamsVO uploadParamsVO) {
  275. patentApplicantLinkService.updatePatentApplicantLink(uploadParamsVO.getPatentApplicantOriginalName(), uploadParamsVO.getPatentApplicantStandardOriginalName(), 2, uploadParamsVO.getPatent().getId());
  276. }
  277. private void patentThematicPidBusiness(UploadParamsVO uploadParamsVO, ProjectImportPatentVO projectImportPatentVO) {
  278. projectPatentLinkService.updateProjectPatent(projectImportPatentVO.getProjectId(), uploadParamsVO.getPatent().getId());
  279. }
  280. private void patentProjectFieldPatentLinkBusiness(UploadParamsVO uploadParamsVO, ProjectImportPatentVO projectImportPatentVO) {
  281. projectFieldPatentLinkService.updateProjectFieldPatentLink(projectImportPatentVO, uploadParamsVO.getPatent().getId());
  282. }
  283. private void patentProjectFolderPatentLinkBusiness(UploadParamsVO uploadParamsVO, ProjectImportPatentVO projectImportPatentVO) {
  284. projectFolderPatentLinkService.updateProjectFolderLink(projectImportPatentVO, uploadParamsVO.getPatent().getId());
  285. }
  286. private void patentLabelBusiness(UploadParamsVO uploadParamsVO, ProjectImportPatentVO projectImportPatentVO) {
  287. PatentLabelParams patentLabelParams = new PatentLabelParams();
  288. patentLabelParams.setPatentId(uploadParamsVO.getPatent().getId());
  289. patentLabelParams.setProjectId(projectImportPatentVO.getProjectId());
  290. List<String> labelList = uploadParamsVO.getPatentLabelList().stream().map(PatentLabel::getName).collect(Collectors.toList());
  291. patentLabelParams.setLabel(labelList);
  292. patentLabelService.updatePatentLabel(patentLabelParams);
  293. }
  294. private void patentTypeNoBusiness(UploadParamsVO uploadParamsVO) {
  295. PatentClassNumberParams patentClassNumberParams = new PatentClassNumberParams();
  296. patentClassNumberParams.setPatentId(uploadParamsVO.getPatent().getId());
  297. patentClassNumberParams.setCpcList(uploadParamsVO.getCpcList());
  298. patentClassNumberParams.setIpcList(uploadParamsVO.getIpcList());
  299. patentClassNumberParams.setLocList(uploadParamsVO.getLocList());
  300. patentClassNumberParams.setIpcList(uploadParamsVO.getIpcList());
  301. patentClassNumberParams.setMainIpc(uploadParamsVO.getMainIpc());
  302. patentClassNumberParams.setMainUpc(uploadParamsVO.getMainUpc());
  303. patentClassNumberLinkService.updatePatentClassNumberLink(patentClassNumberParams);
  304. }
  305. private void patentAffairBusiness(UploadParamsVO uploadParamsVO) {
  306. PatentAffairParams patentAffairParams = new PatentAffairParams();
  307. if (uploadParamsVO.getPatentAffair() != null) {
  308. patentAffairParams.setContent(uploadParamsVO.getPatentAffair().getContent());
  309. patentAffairParams.setStatusList(uploadParamsVO.getPatentAffair().getStatus());
  310. patentAffairParams.setDateTime(uploadParamsVO.getPatentAffair().getDateTime());
  311. }
  312. if (uploadParamsVO.getSimpleStatus() != null) {
  313. List<SystemDict> systemDictList = systemDictService.getSystemDictListByType(Collections.singletonList(Constants.PATENT_SIMPLE_STATUS));
  314. Integer simpleStatus = Integer.parseInt(systemDictList.stream()
  315. .filter(systemDict -> systemDict.getType().equals(Constants.PATENT_SIMPLE_STATUS) && systemDict.getLabel().equals(uploadParamsVO.getSimpleStatus()))
  316. .findFirst()
  317. .orElse(new SystemDict()).getValue());
  318. patentAffairParams.setSimpleStatus(simpleStatus);
  319. }
  320. patentAffairParams.setPatentId(uploadParamsVO.getPatent().getId());
  321. patentAffairService.updatePatientAffair(patentAffairParams);
  322. }
  323. private void patentFieldBusiness(TaskParams params, UploadParamsVO uploadParamsVO, ProjectImportPatentVO projectImportPatentVO) {
  324. PatentCustomFieldParams patentCustomFieldParams = new PatentCustomFieldParams();
  325. patentCustomFieldParams.setPatentId(uploadParamsVO.getPatent().getId());
  326. patentCustomFieldParams.setProjectId(projectImportPatentVO.getProjectId());
  327. patentCustomFieldParams.setUserId(Integer.parseInt(params.getUserId()));
  328. patentCustomFieldParams.put(uploadParamsVO.getKey(), uploadParamsVO.getFieldList());
  329. patentService.updatePatentCustomField(patentCustomFieldParams);
  330. }
  331. }