PatentService.java 67 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118
  1. package cn.cslg.pas.service;
  2. import cn.cslg.pas.common.core.base.Constants;
  3. import cn.cslg.pas.common.model.BaseEntity;
  4. import cn.cslg.pas.common.model.dto.PatentDTO;
  5. import cn.cslg.pas.common.model.dto.PatentQueryFieldSourceDTO;
  6. import cn.cslg.pas.common.model.dto.TaskWebSocketDTO;
  7. import cn.cslg.pas.domain.*;
  8. import cn.cslg.pas.common.model.vo.PatentExportVO;
  9. import cn.cslg.pas.common.model.vo.PatentQueryFieldSourceVO;
  10. import cn.cslg.pas.common.model.vo.PatentVO;
  11. import cn.cslg.pas.common.model.vo.TaskParams;
  12. import cn.cslg.pas.common.utils.*;
  13. import cn.cslg.pas.common.model.dto.CustomFieldDTO;
  14. import cn.cslg.pas.common.model.params.PatentCustomFieldParams;
  15. import cn.cslg.pas.common.utils.WebSocketServer;
  16. import cn.cslg.pas.mapper.PatentMapper;
  17. import cn.cslg.pas.common.utils.CacheUtils;
  18. import cn.cslg.pas.common.utils.PatentUtils;
  19. import cn.hutool.core.io.FileUtil;
  20. import cn.hutool.core.util.IdUtil;
  21. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  22. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  23. import com.baomidou.mybatisplus.core.metadata.IPage;
  24. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  25. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  26. import lombok.RequiredArgsConstructor;
  27. import org.apache.poi.hssf.usermodel.*;
  28. import org.apache.poi.hssf.util.HSSFColor;
  29. import org.apache.poi.ss.usermodel.*;
  30. import org.springframework.beans.BeanUtils;
  31. import org.springframework.context.annotation.Lazy;
  32. import org.springframework.scheduling.annotation.Async;
  33. import org.springframework.stereotype.Service;
  34. import java.io.FileOutputStream;
  35. import java.util.*;
  36. import java.util.stream.Collectors;
  37. /**
  38. * <p>
  39. * 专利信息表 服务实现类
  40. * </p>
  41. *
  42. * @author 王岩
  43. * @since 2021-12-26
  44. */
  45. @Service
  46. @RequiredArgsConstructor(onConstructor_ = {@Lazy})
  47. public class PatentService extends ServiceImpl<PatentMapper, Patent> {
  48. private final PatentApplicantService patentApplicantService;
  49. private final PatentApplicantLinkService applicantAttributeService;
  50. private final ProjectPatentLinkService projectPatentLinkService;
  51. private final CustomAnalysisItemSourceService customAnalysisItemSourceService;
  52. private final CacheUtils cacheUtils;
  53. private final DataAnalysisService dataAnalysisService;
  54. private final PatentAffairService patentAffairService;
  55. private final ProjectFieldTreeService projectFieldTreeService;
  56. private final ProjectFieldOptionService projectFieldOptionService;
  57. private final PatentLabelService patentLabelService;
  58. private final ProjectFieldTextService projectFieldTextService;
  59. private final PatentFieldService patentFieldService;
  60. private final ProjectFieldService projectFieldService;
  61. private final TaskService taskService;
  62. private final FileUtils fileUtils;
  63. private final PatentImageService patentImageService;
  64. private final PatentInventorService patentInventorService;
  65. private final PatentAgencyService patentAgencyService;
  66. private final PatentAgentService patentAgentService;
  67. private final ProjectFolderPatentLinkService projectFolderPatentLinkService;
  68. private final PatentApplicantMergeLinkService patentApplicantMergeLinkService;
  69. private final AreaService areaService;
  70. private final PatentClassNumberService patentClassNumberService;
  71. private final PatentClassNumberLinkService patentClassNumberLinkService;
  72. private final ProjectFieldPatentLinkService projectFieldPatentLinkService;
  73. private final PatentInstructionService patentInstructionService;
  74. private final PatentSimpleFamilyService patentSimpleFamilyService;
  75. private final SystemDictService systemDictService;
  76. private final PatentSimpleFamilyLinkService patentSimpleFamilyLinkService;
  77. private final PatentRightService patentRightService;
  78. private final PatentInstructionTextService patentInstructionTextService;
  79. private final PatentLicensorService patentLicensorService;
  80. private final PatentPledgeService patentPledgeService;
  81. private final PatentInventorMergeService patentInventorMergeService;
  82. public List<Patent> getPatentListByIds(List<Integer> ids) {
  83. if (ids == null || ids.size() == 0) {
  84. return new ArrayList<>();
  85. }
  86. LambdaQueryWrapper<Patent> queryWrapper = new LambdaQueryWrapper<>();
  87. queryWrapper.in(Patent::getId, ids);
  88. return this.list(queryWrapper);
  89. }
  90. public List<Patent> getPatentListByPatentNo(List<String> patentNo) {
  91. if (patentNo == null || patentNo.size() == 0) {
  92. return new ArrayList<>();
  93. }
  94. LambdaQueryWrapper<Patent> queryWrapper = new LambdaQueryWrapper<>();
  95. queryWrapper.in(Patent::getPatentNo, patentNo);
  96. return this.list(queryWrapper);
  97. }
  98. public Patent getByPatentNo(String patentNo) {
  99. LambdaQueryWrapper<Patent> queryWrapper = new LambdaQueryWrapper<>();
  100. queryWrapper.eq(Patent::getPatentNo, patentNo);
  101. return this.getOne(queryWrapper);
  102. }
  103. public Patent getPublicDateAndPatentNoByPatentNo(String patentNo) {
  104. LambdaQueryWrapper<Patent> queryWrapper = new LambdaQueryWrapper<>();
  105. queryWrapper.select(Patent::getPublicDate, Patent::getPatentNo, Patent::getId, Patent::getPublicNo);
  106. queryWrapper.eq(Patent::getPatentNo, patentNo);
  107. return this.getOne(queryWrapper);
  108. }
  109. public List<Patent> getPatentIdAndPatentNoByIds(List<Integer> ids) {
  110. if (ids == null || ids.size() == 0) {
  111. return new ArrayList<>();
  112. }
  113. LambdaQueryWrapper<Patent> queryWrapper = new LambdaQueryWrapper<>();
  114. queryWrapper.select(Patent::getPatentNo, Patent::getId);
  115. queryWrapper.in(Patent::getId, ids);
  116. return this.list(queryWrapper);
  117. }
  118. public Date getDateTime(String ids, Integer fieldId, String type) {
  119. String column = "";
  120. switch (fieldId) {
  121. case 25:
  122. column = "appdate";
  123. break;
  124. case 26:
  125. column = "publicdate";
  126. break;
  127. case 27:
  128. column = "publictodate";
  129. break;
  130. default:
  131. return new Date(baseMapper.getDateTime2(ids, fieldId, type) * 1000L);
  132. }
  133. return new Date(baseMapper.getDateTime(ids, column, type) * 1000L);
  134. }
  135. public String getPatentNumberTypeCount(Integer projectId, String id, Integer field, CustomAnalysisItemSource source) {
  136. QueryWrapper<Patent> queryWrapper = new QueryWrapper<>();
  137. List<Integer> ids = StringUtils.changeStringToInteger(id, ",");
  138. String column = "";
  139. List<String> options = Arrays.asList(">", ">=", "<", "<=");
  140. if (ids.size() == 0) {
  141. return null;
  142. }
  143. Integer mino = source.getMin().getOperator();
  144. Integer maxo = source.getMax().getOperator();
  145. Integer minv = source.getMin().getValue();
  146. Integer maxv = source.getMax().getValue();
  147. queryWrapper.lambda().in(Patent::getId, ids);
  148. switch (field) {
  149. case 32:
  150. column = "quoteno";
  151. break;
  152. case 33:
  153. column = "quotedno";
  154. break;
  155. case 34:
  156. column = "inpadocfamilynum";
  157. break;
  158. case 35:
  159. column = "simplefamilynum";
  160. break;
  161. case 55:
  162. column = "patsnapfamilynum";
  163. break;
  164. case 38:
  165. column = "num2";
  166. break;
  167. case 39:
  168. column = "num3";
  169. break;
  170. default:
  171. List<Integer> patentIds = baseMapper.getCustomFieldCount(ids, field, options.get(mino), options.get(maxo), minv, maxv);
  172. return StringUtils.join(patentIds.stream().distinct().collect(Collectors.toList()), ",");
  173. }
  174. if (mino.equals(0)) {
  175. queryWrapper.gt(column, minv);
  176. } else {
  177. queryWrapper.ge(column, minv);
  178. }
  179. if (maxo.equals(2)) {
  180. queryWrapper.lt(column, maxv);
  181. } else {
  182. queryWrapper.le(column, maxv);
  183. }
  184. List<Patent> patentList = this.list(queryWrapper);
  185. return StringUtils.join(patentList.stream().map(Patent::getId).distinct().collect(Collectors.toList()), ",");
  186. }
  187. public String getPatentDateTime2(Integer projectId, Integer field, Long startDate, Long endDate, String id) {
  188. LambdaQueryWrapper<Patent> queryWrapper = new LambdaQueryWrapper<>();
  189. List<Integer> ids = StringUtils.changeStringToInteger(id, ",");
  190. if (ids.size() == 0) {
  191. return null;
  192. }
  193. queryWrapper.in(Patent::getId, ids);
  194. switch (field) {
  195. case 25:
  196. queryWrapper.between(Patent::getApplicationDate, startDate, endDate);
  197. break;
  198. case 26:
  199. queryWrapper.between(Patent::getPublicDate, startDate, endDate);
  200. break;
  201. case 27:
  202. queryWrapper.between(Patent::getPublicAccreditDate, startDate, endDate);
  203. break;
  204. default:
  205. List<Integer> patentIds = baseMapper.getCustomFieldTime(ids, field, startDate, endDate);
  206. return StringUtils.join(patentIds.stream().distinct().collect(Collectors.toList()), ",");
  207. }
  208. List<Patent> patentList = this.list(queryWrapper);
  209. return StringUtils.join(patentList.stream().map(BaseEntity::getId).distinct().collect(Collectors.toList()), ",");
  210. }
  211. private void setQueryPatentParams(PatentVO params) {
  212. List<String> customIds = new ArrayList<>();
  213. if (StringUtils.isNotEmpty(params.getName())) {
  214. params.setNameSql(PatentUtils.formatTextQuerySql(params.getName(), "a.name"));
  215. }
  216. if (StringUtils.isNotEmpty(params.getAbstractStr())) {
  217. params.setAbstractStrSql(PatentUtils.formatTextQuerySql(params.getAbstractStr(), "a.abstract"));
  218. }
  219. if (StringUtils.isNotEmpty(params.getPublicNo())) {
  220. params.setPublicNoSql(PatentUtils.formatTextQuerySql(params.getPublicNo(), "a.publicno"));
  221. }
  222. if (StringUtils.isNotEmpty(params.getApplicationNo())) {
  223. params.setApplicationNoSql(PatentUtils.formatTextQuerySql(params.getApplicationNo(), "a.applicationno"));
  224. }
  225. if (StringUtils.isNotEmpty(params.getRightContent())) {
  226. params.setRightContentSql(PatentUtils.formatTextQuerySql(params.getRightContent(), "content"));
  227. }
  228. for (int i = 0; i < params.getField().size(); i++) {
  229. List<String> queryList = params.getField().get(i).getValue();
  230. String key = params.getField().get(i).getKey();
  231. List<Integer> field = StringUtils.changeStringToInteger(key, "-");
  232. if (queryList.size() == 0) {
  233. continue;
  234. }
  235. String fieldType = params.getField().get(i).getType();
  236. switch (key) {
  237. case "13":
  238. case "15":
  239. case "16":
  240. case "17":
  241. if (field.get(0) == 13) {
  242. params.setQueryClassNumberIpc(true);
  243. params.setWhereClassNumberIpc(queryList);
  244. params.setQueryClassNumberIpcMethod(params.getField().get(i).getClassId());
  245. }
  246. if (field.get(0) == 15) {
  247. params.setQueryClassNumberCpc(true);
  248. params.setWhereClassNumberCpc(queryList);
  249. params.setQueryClassNumberCpcMethod(params.getField().get(i).getClassId());
  250. }
  251. if (field.get(0) == 17) {
  252. params.setQueryClassNumberUpc(true);
  253. params.setWhereClassNumberUpc(queryList);
  254. params.setQueryClassNumberUpcMethod(params.getField().get(i).getClassId());
  255. }
  256. if (field.get(0) == 16) {
  257. params.setQueryClassNumberLoc(true);
  258. params.setWhereClassNumberLoc(queryList);
  259. params.setQueryClassNumberLocMethod(params.getField().get(i).getClassId());
  260. }
  261. break;
  262. case "18-6":
  263. params.setQueryApplicantOriginal(true);
  264. params.setWhereApplicantOriginal(queryList);
  265. break;
  266. case "19-6":
  267. params.setQueryApplicantCurrent(true);
  268. params.setWhereApplicantCurrent(queryList);
  269. break;
  270. case "20-0":
  271. params.setQueryInventor(true);
  272. params.setWhereInventor(queryList);
  273. break;
  274. case "20-1":
  275. params.setQueryInventor(true);
  276. params.setQueryInventorMerge(true);
  277. params.setWhereInventorMerge(queryList);
  278. break;
  279. case "18-7":
  280. params.setQueryApplicantOriginalStandard(true);
  281. params.setWhereApplicantOriginalStandard(queryList);
  282. break;
  283. case "19-7":
  284. params.setQueryApplicantCurrentStandard(true);
  285. params.setWhereApplicantCurrentStandard(queryList);
  286. break;
  287. case "18-8":
  288. params.setQueryApplicantOriginal(true);
  289. params.setQueryApplicantOriginalMerge(true);
  290. params.setWhereApplicantOriginalMerge(queryList);
  291. break;
  292. case "19-8":
  293. params.setQueryApplicantCurrent(true);
  294. params.setQueryApplicantCurrentMerge(true);
  295. params.setWhereApplicantCurrentMerge(queryList);
  296. break;
  297. case "28-0":
  298. params.setQueryBureau(true);
  299. params.setWhereBureau(queryList);
  300. break;
  301. case "37-0":
  302. params.setQueryType(true);
  303. params.setWhereType(queryList);
  304. break;
  305. case "36-0":
  306. params.setQueryStatus(true);
  307. params.setWhereStatus(queryList);
  308. break;
  309. case "25-12":
  310. params.setQueryAppDate(true);
  311. params.setWhereAppDate(queryList);
  312. break;
  313. case "26-12":
  314. params.setQueryPublicDate(true);
  315. params.setWherePublicDate(queryList);
  316. break;
  317. case "29-17":
  318. params.setQueryApplicantAddress(true);
  319. params.setQueryCountry(true);
  320. params.setWhereCountry(queryList);
  321. break;
  322. case "29-18":
  323. params.setQueryApplicantAddress(true);
  324. params.setQueryApplicantProvince(true);
  325. params.setWhereApplicantProvince(queryList);
  326. break;
  327. case "40-0":
  328. params.setQueryAffair(true);
  329. params.setWhereAffair(queryList);
  330. break;
  331. case "54-0":
  332. params.setQueryLabel(true);
  333. params.setWhereLabel(queryList);
  334. break;
  335. default:
  336. customIds.add(String.valueOf(field.get(0)));
  337. if (fieldType.equals("6")) {
  338. if (field.get(1).equals(1)) {
  339. params.setQueryTreeType1(true);
  340. params.setWhereTreeType1(queryList);
  341. params.setQueryTreeType0(false);
  342. params.setWhereTreeType0(null);
  343. } else {
  344. params.setQueryTreeType0(true);
  345. params.setWhereTreeType0(queryList);
  346. params.setQueryTreeType1(false);
  347. params.setWhereTreeType1(null);
  348. }
  349. } else if (fieldType.equals("0") || fieldType.equals("1") || fieldType.equals("2")) {
  350. params.setWhereFieldText(queryList);
  351. params.setWhereFieldTextNull(queryList.stream().anyMatch(item -> item.equals("null")));
  352. } else {
  353. params.setWhereFieldMultiple(queryList);
  354. params.setWhereFieldMultipleNull(queryList.stream().anyMatch(item -> item.equals("null")));
  355. }
  356. }
  357. }
  358. if (customIds.size() != 0) {
  359. params.setQueryFieldText(true);
  360. params.setQueryFieldMultiple(true);
  361. params.setCustomIds(customIds);
  362. }
  363. }
  364. public List<Integer> getPatentListIds(PatentVO params) {
  365. this.setQueryFamilyParams(params);
  366. params.setSelected(new ArrayList<>());
  367. List<Integer> ids = this.getQueryPatentIds(params);
  368. return ids.stream().skip(params.getStartNumber() - 1).limit(params.getEndNumber() - params.getStartNumber() + 1).collect(Collectors.toList());
  369. }
  370. private void setQueryFamilyParams(PatentVO params) {
  371. switch (params.getFamily()) {
  372. case 0:
  373. params.setQuerySimpleFamily(false);
  374. params.setQueryInpadocFamily(false);
  375. params.setQueryPatSnapFamily(false);
  376. break;
  377. case 1:
  378. params.setQuerySimpleFamily(true);
  379. params.setQueryInpadocFamily(false);
  380. params.setQueryPatSnapFamily(false);
  381. break;
  382. case 2:
  383. params.setQuerySimpleFamily(false);
  384. params.setQueryInpadocFamily(true);
  385. params.setQueryPatSnapFamily(false);
  386. break;
  387. case 3:
  388. params.setQuerySimpleFamily(false);
  389. params.setQueryInpadocFamily(false);
  390. params.setQueryPatSnapFamily(true);
  391. break;
  392. }
  393. }
  394. public IPage<PatentDTO> getPageList(PatentVO params) {
  395. this.setQueryFamilyParams(params);
  396. this.setQueryPatentParams(params);
  397. IPage<Patent> dataPage = baseMapper.getPageList(new Page<>(params.getCurrent(), params.getSize()), params);
  398. IPage<PatentDTO> pageList = new Page<>();
  399. List<PatentDTO> records = new ArrayList<>();
  400. List<Integer> patentIds = dataPage.getRecords().stream().map(Patent::getId).collect(Collectors.toList());
  401. List<PatentApplicant> patentApplicantList = patentApplicantService.getPatentApplicantByPatentIds(patentIds);
  402. List<PatentInventor> patentInventorList = patentInventorService.getPatentInventorByPatentIds(patentIds);
  403. List<PatentLabel> patentLabelList = patentLabelService.getPatentLabelByPatentIdsAndProjectId(patentIds, params.getProjectId());
  404. List<PatentClassNumberLink> patentClassNumberLinkList = patentClassNumberLinkService.getPatentClassNumberLinkByPatentIds(patentIds);
  405. List<PatentAgent> patentAgentList = patentAgentService.getPatentAgentByPatentIds(patentIds);
  406. List<PatentAgency> patentAgencyList = patentAgencyService.getPatentAgencyByIds(dataPage.getRecords().stream().filter(item -> StringUtils.isNotEmpty(item.getAgencyId())).map(item -> Integer.parseInt(item.getAgencyId())).distinct().collect(Collectors.toList()));
  407. List<PatentSimpleFamilyLink> patentSimpleFamilyLinkList = patentSimpleFamilyLinkService.getPatentSimpleFamilyLinkByFamilyIds(dataPage.getRecords().stream().map(Patent::getSimpleFamily).collect(Collectors.toList()));
  408. List<PatentSimpleFamilyLink> patentInpadocFamilyLinkList = patentSimpleFamilyLinkService.getPatentSimpleFamilyLinkByFamilyIds(dataPage.getRecords().stream().map(Patent::getInpadocFamily).collect(Collectors.toList()));
  409. List<PatentSimpleFamilyLink> patentPatSnapFamilyLinkList = patentSimpleFamilyLinkService.getPatentSimpleFamilyLinkByFamilyIds(dataPage.getRecords().stream().map(Patent::getPatSnapFamily).collect(Collectors.toList()));
  410. List<SystemDict> systemDictList = systemDictService.getSystemDictListByType(Arrays.asList(Constants.PATENT_TYPE, Constants.PATENT_SIMPLE_STATUS));
  411. dataPage.getRecords().forEach(item -> {
  412. PatentDTO patentDTO = new PatentDTO();
  413. BeanUtils.copyProperties(item, patentDTO);
  414. patentDTO.setApplicationDate(DateUtils.formatDate(item.getApplicationDate(), DateUtils.YYYY_MM_DD));
  415. patentDTO.setPriorityDate(DateUtils.formatDate(item.getPriorityDate(), DateUtils.YYYY_MM_DD));
  416. patentDTO.setPublicDate(DateUtils.formatDate(item.getPublicDate(), DateUtils.YYYY_MM_DD));
  417. patentDTO.setPublicAccreditDate(DateUtils.formatDate(item.getPublicAccreditDate(), DateUtils.YYYY_MM_DD));
  418. patentDTO.setFirstPublicDate(DateUtils.formatDate(item.getFirstPublicDate(), DateUtils.YYYY_MM_DD));
  419. patentDTO.setSimpleStatus(systemDictList.stream().filter(systemDict -> systemDict.getType().equals(Constants.PATENT_SIMPLE_STATUS) && systemDict.getValue().equals(String.valueOf(item.getSimpleStatus()))).findFirst().orElse(new SystemDict()).getLabel());
  420. patentDTO.setType(systemDictList.stream().filter(systemDict -> systemDict.getType().equals(Constants.PATENT_TYPE) && systemDict.getValue().equals(String.valueOf(item.getType()))).findFirst().orElse(new SystemDict()).getLabel());
  421. patentDTO.setApplicant(patentApplicantList.stream().filter(patentApplicant -> patentApplicant.getPatentId().equals(item.getId())).collect(Collectors.toList()));
  422. patentDTO.setInventor(patentInventorList.stream().filter(patentInventor -> patentInventor.getPatentId().equals(item.getId())).collect(Collectors.toList()));
  423. patentDTO.setLabel(patentLabelList.stream().filter(patentLabel -> patentLabel.getPatentId().equals(item.getId())).collect(Collectors.toList()));
  424. patentDTO.setIpcList(patentClassNumberLinkList.stream().filter(patentClassNumber -> patentClassNumber.getPatentId().equals(item.getId()) && patentClassNumber.getType().equals(Constants.PATENT_CLASS_NUMBER_IPC)).map(PatentClassNumberLink::getCode).distinct().collect(Collectors.toList()));
  425. patentDTO.setCpcList(patentClassNumberLinkList.stream().filter(patentClassNumber -> patentClassNumber.getPatentId().equals(item.getId()) && patentClassNumber.getType().equals(Constants.PATENT_CLASS_NUMBER_CPC)).map(PatentClassNumberLink::getCode).distinct().collect(Collectors.toList()));
  426. patentDTO.setUpcList(patentClassNumberLinkList.stream().filter(patentClassNumber -> patentClassNumber.getPatentId().equals(item.getId()) && patentClassNumber.getType().equals(Constants.PATENT_CLASS_NUMBER_UPC)).map(PatentClassNumberLink::getCode).distinct().collect(Collectors.toList()));
  427. patentDTO.setLocList(patentClassNumberLinkList.stream().filter(patentClassNumber -> patentClassNumber.getPatentId().equals(item.getId()) && patentClassNumber.getType().equals(Constants.PATENT_CLASS_NUMBER_LOC)).map(PatentClassNumberLink::getCode).distinct().collect(Collectors.toList()));
  428. if (StringUtils.isNotEmpty(item.getAgencyId())) {
  429. patentDTO.setAgency(patentAgencyList.stream().filter(patentAgency -> patentAgency.getId().equals(Integer.parseInt(item.getAgencyId()))).findFirst().orElse(null));
  430. }
  431. PatentDTO.PatentFamily patentFamily = new PatentDTO.PatentFamily();
  432. patentFamily.setSimple(patentSimpleFamilyLinkList.stream().filter(patentSimpleFamilyLink -> patentSimpleFamilyLink.getFamilyId().equals(item.getSimpleFamily())).map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList()));
  433. patentFamily.setInpadoc(patentInpadocFamilyLinkList.stream().filter(patentSimpleFamilyLink -> patentSimpleFamilyLink.getFamilyId().equals(item.getInpadocFamily())).map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList()));
  434. patentFamily.setPatSnap(patentPatSnapFamilyLinkList.stream().filter(patentSimpleFamilyLink -> patentSimpleFamilyLink.getFamilyId().equals(item.getPatSnapFamily())).map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList()));
  435. patentDTO.setFamily(patentFamily);
  436. patentDTO.setAgent(patentAgentList.stream().filter(patentAgent -> patentAgent.getPatentId().equals(item.getId())).collect(Collectors.toList()));
  437. // TODO 性能优化
  438. patentDTO.setField(projectFieldService.getPatentFieldByPatentIdAndProjectId(params.getProjectId(), item.getId()));
  439. records.add(patentDTO);
  440. });
  441. pageList.setTotal(dataPage.getTotal());
  442. pageList.setRecords(records);
  443. pageList.setPages(dataPage.getPages());
  444. pageList.setSize(dataPage.getSize());
  445. pageList.setCurrent(dataPage.getCurrent());
  446. return pageList;
  447. }
  448. public PatentDTO getPatentDTOById(Integer id, Integer projectId) {
  449. Patent patent = baseMapper.selectById(id);
  450. PatentDTO patentDTO = new PatentDTO();
  451. BeanUtils.copyProperties(patent, patentDTO);
  452. List<SystemDict> systemDictList = systemDictService.getSystemDictListByType(Arrays.asList(Constants.PATENT_TYPE, Constants.PATENT_SIMPLE_STATUS, Constants.COUNTRIES));
  453. List<PatentClassNumberLink> patentClassNumberLinkList = patentClassNumberLinkService.getPatentClassNumberLinkByPatentIds(Collections.singletonList(id));
  454. if (patent.getPriorityNo() != null) {
  455. patentDTO.setPriorityNo(patent.getPriorityNo());
  456. } else {
  457. patentDTO.setPriorityNo("");
  458. }
  459. if (patent.getPriorityCountry() != null) {
  460. if (patent.getPriorityCountry().contains("\\|")) {
  461. List<String> countryList = StringUtils.changeStringToString(patent.getPriorityCountry().replaceAll(" ", ""), "\\|");
  462. patentDTO.setPriorityCountry(countryList);
  463. } else if (patent.getPriorityCountry().contains(",")) {
  464. List<String> countryList = StringUtils.changeStringToString(patent.getPriorityCountry().replaceAll(" ", ""), ",");
  465. patentDTO.setPriorityCountry(countryList);
  466. } else if (patent.getPriorityCountry().contains(";")) {
  467. List<String> countryList = StringUtils.changeStringToString(patent.getPriorityCountry().replaceAll(" ", ""), ";");
  468. patentDTO.setPriorityCountry(countryList);
  469. }
  470. } else {
  471. patentDTO.setPriorityCountry(Collections.singletonList(""));
  472. }
  473. patentDTO.setApplicationDate(DateUtils.formatDate(patent.getApplicationDate(), DateUtils.YYYY_MM_DD));
  474. patentDTO.setPriorityDate(DateUtils.formatDate(patent.getPriorityDate(), DateUtils.YYYY_MM_DD));
  475. patentDTO.setPublicDate(DateUtils.formatDate(patent.getPublicDate(), DateUtils.YYYY_MM_DD));
  476. patentDTO.setPublicAccreditDate(DateUtils.formatDate(patent.getPublicAccreditDate(), DateUtils.YYYY_MM_DD));
  477. patentDTO.setFirstPublicDate(DateUtils.formatDate(patent.getFirstPublicDate(), DateUtils.YYYY_MM_DD));
  478. patentDTO.setSimpleStatus(systemDictList.stream().filter(systemDict -> systemDict.getType().equals(Constants.PATENT_SIMPLE_STATUS) && systemDict.getValue().equals(String.valueOf(patent.getSimpleStatus()))).findFirst().orElse(new SystemDict()).getLabel());
  479. patentDTO.setType(systemDictList.stream().filter(systemDict -> systemDict.getType().equals(Constants.PATENT_TYPE) && systemDict.getValue().equals(String.valueOf(patent.getType()))).findFirst().orElse(new SystemDict()).getLabel());
  480. patentDTO.setLabel(patentLabelService.getPatentLabelByPatentIdAndProjectId(patent.getId(), projectId));
  481. patentDTO.setApplicant(patentApplicantService.getPatentApplicantByPatentId(patent.getId()));
  482. patentDTO.setInventor(patentInventorService.getPatentInventorByPatentId(patent.getId()));
  483. if (StringUtils.isNotEmpty(patent.getAgencyId())) {
  484. patentDTO.setAgency(patentAgencyService.getPatentAgencyById(Integer.parseInt(patent.getAgencyId())));
  485. }
  486. patentDTO.setAgent(patentAgentService.getPatentAgentByPatentId(patent.getId()));
  487. patentDTO.setAffair(patentAffairService.getPatentAffairByPatentId(patent.getId()));
  488. if (projectId != null) {
  489. patentDTO.setField(projectFieldService.getPatentFieldByPatentIdAndProjectId(projectId, patent.getId()));
  490. }
  491. if (StringUtils.isNotEmpty(patent.getPriorityCountry())) {
  492. List<String> priorityList = PatentUtils.formatValue(patent.getPriorityCountry());
  493. List<String> priorityCountryList = new ArrayList<>();
  494. for (String priorityCountry : priorityList) {
  495. priorityCountryList.add(systemDictList.stream().filter(systemDict -> systemDict.getType().equals(Constants.COUNTRIES) && systemDict.getValue().equals(priorityCountry)).findFirst().orElse(new SystemDict()).getLabel());
  496. }
  497. patentDTO.setPriorityCountry(priorityCountryList);
  498. }
  499. patentDTO.setInstruction(patentInstructionTextService.getPatentInstructionTextByPatentId(patent.getId()));
  500. patentDTO.setRights(patentRightService.getPatentRightByPatentId(patent.getId()));
  501. patentDTO.setImage(patentImageService.getPatentImageByPatentId(patent.getId()));
  502. patentDTO.setPdf(patentInstructionService.getPatentInstructionByPatentNo(patent.getPatentNo()));
  503. patentDTO.setIpc(patentClassNumberLinkList.stream().filter(patentClassNumberLink -> patentClassNumberLink.getType().equals(Constants.PATENT_CLASS_NUMBER_IPC) && patentClassNumberLink.getMain().equals(1)).findFirst().orElse(new PatentClassNumberLink()).getCode());
  504. patentDTO.setUpc(patentClassNumberLinkList.stream().filter(patentClassNumberLink -> patentClassNumberLink.getType().equals(Constants.PATENT_CLASS_NUMBER_UPC) && patentClassNumberLink.getMain().equals(1)).findFirst().orElse(new PatentClassNumberLink()).getCode());
  505. patentDTO.setIpcList(patentClassNumberLinkList.stream().filter(patentClassNumber -> patentClassNumber.getType().equals(Constants.PATENT_CLASS_NUMBER_IPC)).map(PatentClassNumberLink::getCode).distinct().collect(Collectors.toList()));
  506. patentDTO.setCpcList(patentClassNumberLinkList.stream().filter(patentClassNumber -> patentClassNumber.getType().equals(Constants.PATENT_CLASS_NUMBER_CPC)).map(PatentClassNumberLink::getCode).distinct().collect(Collectors.toList()));
  507. patentDTO.setUpcList(patentClassNumberLinkList.stream().filter(patentClassNumber -> patentClassNumber.getType().equals(Constants.PATENT_CLASS_NUMBER_UPC)).map(PatentClassNumberLink::getCode).distinct().collect(Collectors.toList()));
  508. patentDTO.setLocList(patentClassNumberLinkList.stream().filter(patentClassNumber -> patentClassNumber.getType().equals(Constants.PATENT_CLASS_NUMBER_LOC)).map(PatentClassNumberLink::getCode).distinct().collect(Collectors.toList()));
  509. return patentDTO;
  510. }
  511. public List<Integer> getQueryPatentIds(PatentVO params) {
  512. if (params.getSelected() != null && params.getSelected().size() != 0 && params.getSelectId() != null && params.getSelectId()) {
  513. return params.getSelected().stream().distinct().collect(Collectors.toList());
  514. }
  515. this.setQueryPatentParams(params);
  516. List<Patent> patentList = baseMapper.getPageList(params);
  517. return patentList.stream().map(Patent::getId).distinct().collect(Collectors.toList());
  518. }
  519. @Async
  520. public void exportPatent(TaskParams taskParams) {
  521. try {
  522. List<PatentExportVO> selected = JsonUtils.jsonToList(taskParams.getSelected(), PatentExportVO.class);
  523. List<Integer> ids = StringUtils.changeStringToInteger(taskParams.getIds(), ",");
  524. if (selected != null) {
  525. List<String> columns = selected.stream().filter(PatentExportVO::getSelected).map(PatentExportVO::getKey).distinct().collect(Collectors.toList());
  526. List<String> headers = selected.stream().filter(PatentExportVO::getSelected).map(PatentExportVO::getName).distinct().collect(Collectors.toList());
  527. String fileName = IdUtil.simpleUUID() + ".xls";
  528. String directoryName = fileUtils.createDirectory();
  529. String savePath = fileUtils.getSavePath(directoryName);
  530. HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
  531. HSSFSheet sheet = hssfWorkbook.createSheet();
  532. sheet.setDefaultColumnWidth(30);
  533. HSSFRow headerRow = sheet.createRow(0);
  534. headerRow.setHeight((short) 500);
  535. HSSFCellStyle headerCellStyle = hssfWorkbook.createCellStyle();
  536. HSSFCellStyle commonCellStyle = hssfWorkbook.createCellStyle();
  537. for (int i = 0; i < headers.size(); i++) {
  538. HSSFCell cell = headerRow.createCell(i);
  539. ExcelUtils.setExcelCellStyle(headerCellStyle);
  540. headerCellStyle.setAlignment(HorizontalAlignment.CENTER);
  541. headerCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
  542. headerCellStyle.setFillForegroundColor(HSSFColor.HSSFColorPredefined.SKY_BLUE.getIndex());
  543. headerCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
  544. headerCellStyle.setWrapText(true);
  545. cell.setCellStyle(headerCellStyle);
  546. cell.setCellValue(headers.get(i));
  547. }
  548. for (int i = 0; i < ids.size(); i++) {
  549. Map<String, Object> map = new LinkedHashMap<>();
  550. PatentDTO patent = this.getPatentDTOById(ids.get(i), taskParams.getProjectId());
  551. if (patent == null) {
  552. continue;
  553. }
  554. String country = PatentUtils.getPatentCountry(patent.getPatentNo());
  555. for (int j = 0; j < columns.size(); j++) {
  556. String column = columns.get(j);
  557. PatentExportVO patentExportVO = selected.stream().filter(item -> item.getKey().equals(column)).findFirst().orElse(new PatentExportVO());
  558. Object value = null;
  559. switch (column) {
  560. case "pname":
  561. value = patent.getName();
  562. break;
  563. case "pname_out":
  564. value = patent.getNameOut();
  565. break;
  566. case "patentno":
  567. value = patent.getPatentNo();
  568. break;
  569. case "abstract":
  570. value = patent.getAbstractStr();
  571. break;
  572. case "abstract_out":
  573. value = patent.getAbstractOut();
  574. break;
  575. case "abstract_path":
  576. break;
  577. case "applicationno":
  578. value = patent.getApplicationNo();
  579. break;
  580. case "appdate":
  581. value = patent.getApplicationDate();
  582. break;
  583. case "publicno":
  584. value = patent.getPublicNo();
  585. break;
  586. case "publicdate":
  587. value = patent.getPublicDate();
  588. break;
  589. case "fpublicdate":
  590. value = patent.getFirstPublicDate();
  591. break;
  592. case "publictono":
  593. value = patent.getPublicAccreditNo();
  594. break;
  595. case "publictodate":
  596. value = patent.getPublicAccreditDate();
  597. break;
  598. case "tags":
  599. value = StringUtils.join(patent.getLabel().stream().map(PatentLabel::getName).distinct().collect(Collectors.toList()), "\n");
  600. break;
  601. case "bureau":
  602. value = patent.getBureau();
  603. break;
  604. case "simplefamily":
  605. List<PatentSimpleFamilyLink> patentSimpleFamilyLinkList = patentSimpleFamilyLinkService.getPatentSimpleFamilyLinkByFamilyIds(Collections.singletonList(patent.getSimpleFamily()));
  606. value = StringUtils.join(patentSimpleFamilyLinkList.stream().map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList()), Constants.SEPARATOR_VERTICAL_BAR);
  607. break;
  608. case "inpadocfamily":
  609. List<PatentSimpleFamilyLink> patentInpadocFamilyLinkList = patentSimpleFamilyLinkService.getPatentSimpleFamilyLinkByFamilyIds(Collections.singletonList(patent.getInpadocFamily()));
  610. value = StringUtils.join(patentInpadocFamilyLinkList.stream().map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList()), Constants.SEPARATOR_VERTICAL_BAR);
  611. break;
  612. case "patsnapfamily":
  613. List<PatentSimpleFamilyLink> patentPatSnapFamilyLinkList = patentSimpleFamilyLinkService.getPatentSimpleFamilyLinkByFamilyIds(Collections.singletonList(patent.getPatSnapFamily()));
  614. value = StringUtils.join(patentPatSnapFamilyLinkList.stream().map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList()), Constants.SEPARATOR_VERTICAL_BAR);
  615. break;
  616. case "ipc":
  617. value = StringUtils.join(patent.getIpcList(), Constants.SEPARATOR_VERTICAL_BAR);
  618. break;
  619. case "upc":
  620. value = StringUtils.join(patent.getUpcList(), Constants.SEPARATOR_VERTICAL_BAR);
  621. break;
  622. case "intclassno":
  623. value = patent.getIpc();
  624. break;
  625. case "intclasscpcno":
  626. value = StringUtils.join(patent.getCpcList(), Constants.SEPARATOR_VERTICAL_BAR);
  627. break;
  628. case "intclassupcno":
  629. value = patent.getUpc();
  630. break;
  631. case "intclasslocno":
  632. value = StringUtils.join(patent.getLocList(), Constants.SEPARATOR_VERTICAL_BAR);
  633. break;
  634. case "pstatus":
  635. value = patent.getSimpleStatus();
  636. break;
  637. case "ptype":
  638. value = patent.getType();
  639. break;
  640. case "law_datetime":
  641. value = PatentUtils.getPatentAffair(patent.getAffair(), 0);
  642. break;
  643. case "law_status":
  644. value = PatentUtils.getPatentAffair(patent.getAffair(), 1);
  645. break;
  646. case "law_simplestatus":
  647. value = PatentUtils.getPatentAffair(patent.getAffair(), 2);
  648. break;
  649. case "law_content":
  650. value = PatentUtils.getPatentAffair(patent.getAffair(), 3);
  651. break;
  652. case "applicant":
  653. value = StringUtils.join(patent.getApplicant().stream().filter(item -> item.getDataType().equals(2)).collect(Collectors.toList()).stream().map(PatentApplicant::getName).distinct().collect(Collectors.toList()), Constants.SEPARATOR_VERTICAL_BAR);
  654. break;
  655. case "applicant1":
  656. value = StringUtils.join(patent.getApplicant().stream().filter(item -> item.getDataType().equals(2)).collect(Collectors.toList()).stream().map(PatentApplicant::getShortName).distinct().collect(Collectors.toList()), Constants.SEPARATOR_VERTICAL_BAR);
  657. break;
  658. case "rightholder":
  659. value = StringUtils.join(patent.getApplicant().stream().filter(item -> item.getDataType().equals(1)).collect(Collectors.toList()).stream().map(PatentApplicant::getName).distinct().collect(Collectors.toList()), Constants.SEPARATOR_VERTICAL_BAR);
  660. break;
  661. case "rightholder1":
  662. value = StringUtils.join(patent.getApplicant().stream().filter(item -> item.getDataType().equals(1)).collect(Collectors.toList()).stream().map(PatentApplicant::getShortName).distinct().collect(Collectors.toList()), Constants.SEPARATOR_VERTICAL_BAR);
  663. break;
  664. case "applicantcountry":
  665. value = PatentUtils.getPeopleCountry(patent.getApplicant().stream().filter(item -> item.getDataType().equals(2)).collect(Collectors.toList()));
  666. break;
  667. case "rightholdercountry":
  668. value = PatentUtils.getPeopleCountry(patent.getApplicant().stream().filter(item -> item.getDataType().equals(1)).collect(Collectors.toList()));
  669. break;
  670. case "applicantaddress":
  671. value = PatentUtils.getPeopleAddress(patent.getApplicant().stream().filter(item -> item.getDataType().equals(2)).collect(Collectors.toList()));
  672. break;
  673. case "rightholderaddress":
  674. value = PatentUtils.getPeopleAddress(patent.getApplicant().stream().filter(item -> item.getDataType().equals(1)).collect(Collectors.toList()));
  675. break;
  676. case "applicantaddr":
  677. break;
  678. case "rightholderaddr":
  679. break;
  680. case "firstapplicant":
  681. PatentApplicant firstApplicant1 = patent.getApplicant().stream().filter(item -> item.getDataType().equals(2) && item.getOrder().equals(0)).findFirst().orElse(null);
  682. if (firstApplicant1 != null) {
  683. value = firstApplicant1.getName();
  684. }
  685. break;
  686. case "firstrightholder":
  687. PatentApplicant firstApplicant3 = patent.getApplicant().stream().filter(item -> item.getDataType().equals(1) && item.getOrder().equals(0)).findFirst().orElse(null);
  688. if (firstApplicant3 != null) {
  689. value = firstApplicant3.getName();
  690. }
  691. break;
  692. case "firstapplicantaddr":
  693. PatentApplicant firstApplicant2 = patent.getApplicant().stream().filter(item -> item.getDataType().equals(2) && item.getOrder().equals(0)).findFirst().orElse(null);
  694. if (firstApplicant2 != null) {
  695. value = firstApplicant2.getAddressStr();
  696. }
  697. break;
  698. case "firstrightholderaddr":
  699. PatentApplicant firstApplicant4 = patent.getApplicant().stream().filter(item -> item.getDataType().equals(1) && item.getOrder().equals(0)).findFirst().orElse(null);
  700. if (firstApplicant4 != null) {
  701. value = firstApplicant4.getAddressStr();
  702. }
  703. break;
  704. case "firstapplicantnum":
  705. value = patent.getApplicantNum();
  706. break;
  707. case "inventor":
  708. value = StringUtils.join(patent.getInventor().stream().map(PatentInventor::getName).distinct().collect(Collectors.toList()), Constants.SEPARATOR_VERTICAL_BAR);
  709. break;
  710. case "firstnventoraddr":
  711. value = patent.getInventor().stream().filter(PatentInventor::getFirst).findFirst().orElse(new PatentInventor()).getAddress();
  712. break;
  713. case "firstnventor":
  714. value = patent.getInventor().stream().filter(PatentInventor::getFirst).findFirst().orElse(new PatentInventor()).getName();
  715. break;
  716. case "inventornum":
  717. value = patent.getInventorNum();
  718. break;
  719. case "num2":
  720. value = patent.getRightNum();
  721. break;
  722. case "content":
  723. case "content_out":
  724. case "selfcontent":
  725. List<String> content = new ArrayList<>();
  726. if (column.equals("content")) {
  727. content = patent.getRights().stream().map(PatentRight::getContent).collect(Collectors.toList());
  728. }
  729. if (column.equals("content_out")) {
  730. content = patent.getRights().stream().map(PatentRight::getContentOut).collect(Collectors.toList());
  731. }
  732. if (column.equals("selfcontent")) {
  733. content = patent.getRights().stream().filter(item -> item.getType().equals(1)).map(PatentRight::getContent).collect(Collectors.toList());
  734. }
  735. StringBuffer contentBuffer = new StringBuffer();
  736. for (String s : content) {
  737. contentBuffer.append(s);
  738. switch (country) {
  739. case "JP":
  740. case "CN":
  741. contentBuffer.append("。\n");
  742. break;
  743. default:
  744. contentBuffer.append("\n");
  745. }
  746. }
  747. value = contentBuffer.toString();
  748. break;
  749. case "priorityno":
  750. value = patent.getPriorityNo();
  751. break;
  752. case "prioritycountry":
  753. value = patent.getPriorityCountry();
  754. break;
  755. case "prioritydate":
  756. value = patent.getPriorityDate();
  757. break;
  758. case "page":
  759. value = patent.getDocPage();
  760. break;
  761. case "code":
  762. value = patent.getCode();
  763. break;
  764. case "manual":
  765. if (patent.getInstruction() != null) {
  766. value = patent.getInstruction().getManual();
  767. }
  768. break;
  769. case "simplefamilynum":
  770. value = patent.getSimpleFamilyNum();
  771. break;
  772. case "inpadocfamilynum":
  773. value = patent.getInpadocFamilyNum();
  774. break;
  775. case "patsnapfamilynum":
  776. value = patent.getPatSnapFamilyNum();
  777. break;
  778. case "quoteno":
  779. value = patent.getQuoteNum();
  780. break;
  781. case "quotedno":
  782. value = patent.getQuotedNum();
  783. break;
  784. case "quotedno3":
  785. value = patent.getQuotedNum3();
  786. break;
  787. case "quotedno5":
  788. value = patent.getQuotedNum5();
  789. break;
  790. case "agency":
  791. PatentAgency agency = patent.getAgency();
  792. if (agency != null) {
  793. value = agency.getName();
  794. }
  795. break;
  796. case "agent":
  797. value = StringUtils.join(patent.getAgent().stream().map(PatentAgent::getName).distinct().collect(Collectors.toList()), Constants.SEPARATOR_VERTICAL_BAR);
  798. break;
  799. case "wonational":
  800. value = patent.getWo();
  801. break;
  802. case "examiner":
  803. value = patent.getExaminer();
  804. break;
  805. case "assexaminer":
  806. value = patent.getAidExaminer();
  807. break;
  808. case "quote":
  809. value = patent.getQuote();
  810. break;
  811. case "quoted":
  812. value = patent.getQuoted();
  813. break;
  814. case "nonpatentquote":
  815. value = patent.getNotPatentQuote();
  816. break;
  817. case "epcountry":
  818. value = patent.getEpStatus();
  819. break;
  820. default:
  821. PatentDTO.Field field = patent.getField().stream().filter(item -> item.getId().equals(Integer.parseInt(column))).findFirst().orElse(null);
  822. if (field != null) {
  823. value = StringUtils.join(field.getSelected(), "\n");
  824. }
  825. }
  826. map.put(patentExportVO.getName(), value);
  827. }
  828. HSSFRow row = sheet.createRow(i + 1);
  829. row.setHeight((short) 800);
  830. for (String key : map.keySet()) {
  831. int index = headers.indexOf(key);
  832. if (index != -1) {
  833. HSSFCell cell = row.createCell(index);
  834. ExcelUtils.setExcelCellStyle(commonCellStyle);
  835. commonCellStyle.setVerticalAlignment(VerticalAlignment.TOP);
  836. commonCellStyle.setWrapText(true);
  837. cell.setCellStyle(commonCellStyle);
  838. if (key.equals("摘要附图")) {
  839. if (StringUtils.isNotEmpty(patent.getAbstractPath())) {
  840. try {
  841. byte[] pictureData = FileUtil.readBytes(fileUtils.getSystemPath(patent.getAbstractPath()));
  842. if (pictureData != null) {
  843. ExcelUtils.writePicture(sheet, index, i + 1, pictureData, HSSFWorkbook.PICTURE_TYPE_JPEG);
  844. }
  845. row.setHeight((short) 2500);
  846. } catch (Exception e) {
  847. }
  848. }
  849. } else if (StringUtils.isNotNull(map.get(key))) {
  850. cell.setCellValue(String.valueOf(map.get(key)));
  851. }
  852. }
  853. }
  854. Integer total = ids.size();
  855. WebSocketServer.sendInfo(Response.websocket(new TaskWebSocketDTO()
  856. .setTaskId(taskParams.getTaskId())
  857. .setProjectId(taskParams.getProjectId())
  858. .setComplete(false)
  859. .setIndex(i)
  860. .setTaskType(Constants.TASK_EXPORT_PATENT)
  861. .setPercentage(total == 0 ? 0 : Math.round((total.equals(i) ? (i * 1D) : (i + 1D)) / total * 100D))
  862. .setFileName("")
  863. .setOldName("")
  864. .setUrl("")
  865. .setTotal(total), ResponseEnum.PATENT_EXPORT_TASK_SUCCESS), taskParams.getUserId());
  866. }
  867. FileOutputStream fos = new FileOutputStream(savePath + fileName);
  868. hssfWorkbook.write(fos);
  869. fos.flush();
  870. fos.close();
  871. String url = fileUtils.getDirectory(fileName);
  872. taskService.updateTime(taskParams.getTaskId(), 2, DateUtils.getDateTime(), url, fileName);
  873. WebSocketServer.sendInfo(Response.websocket(new TaskWebSocketDTO()
  874. .setTaskId(taskParams.getTaskId())
  875. .setProjectId(taskParams.getProjectId())
  876. .setComplete(true)
  877. .setIndex(ids.size())
  878. .setTaskType(Constants.TASK_EXPORT_PATENT)
  879. .setPercentage(100L)
  880. .setFileName(fileName)
  881. .setOldName("")
  882. .setUrl(url)
  883. .setTotal(ids.size()), ResponseEnum.PATENT_EXPORT_TASK_SUCCESS), taskParams.getUserId());
  884. }
  885. } catch (Exception e) {
  886. e.printStackTrace();
  887. taskService.updateTime(taskParams.getTaskId(), 3, DateUtils.getDateTime(), null, null);
  888. WebSocketServer.sendInfo(Response.error(ResponseEnum.PATENT_EXPORT_TASK_ERROR), taskParams.getUserId());
  889. }
  890. }
  891. public IPage<PatentQueryFieldSourceDTO> getPatentQuerySourcePageList(PatentQueryFieldSourceVO params) {
  892. return this.getPatentAttributeSourcePageList(params);
  893. }
  894. public IPage<PatentQueryFieldSourceDTO> getPatentAttributeSourcePageList(PatentQueryFieldSourceVO params) {
  895. this.setPatentQuerySourceParams(params);
  896. IPage<PatentQueryFieldSourceDTO> pageList = baseMapper.getPatentQuerySourcePageList(new Page<>(params.getCurrent(), params.getSize()), params, new ArrayList<>());
  897. pageList.getRecords().forEach(item -> item.setIds(null));
  898. return pageList;
  899. }
  900. public List<PatentQueryFieldSourceDTO> getPatentAttributeSourceList(PatentQueryFieldSourceVO params, List<Integer> patentIds) {
  901. this.setPatentQuerySourceParams(params);
  902. List<PatentQueryFieldSourceDTO> dataList = baseMapper.getPatentQuerySourcePageList(params, patentIds);
  903. return dataList;
  904. }
  905. private void setPatentQuerySourceParams(PatentQueryFieldSourceVO params) {
  906. List<Integer> field = StringUtils.changeStringToInteger(params.getKey(), "-");
  907. Integer type = 0;
  908. Integer level = 0;
  909. Integer status = 0;
  910. switch (params.getKey()) {
  911. case "18-6":
  912. case "18-7":
  913. case "18-8":
  914. case "23-6":
  915. case "23-7":
  916. case "23-8":
  917. params.setApplicantType(2);
  918. break;
  919. case "19-6":
  920. case "19-7":
  921. case "19-8":
  922. case "24-6":
  923. case "24-7":
  924. case "24-8":
  925. params.setApplicantType(1);
  926. break;
  927. case "29-17":
  928. case "30-17":
  929. case "29-18":
  930. case "29-19":
  931. case "29-20":
  932. case "30-18":
  933. case "30-19":
  934. case "30-20":
  935. params.setApplicantType(field.get(0) == 29 ? 2 : 1);
  936. break;
  937. default:
  938. params.setCustomFieldId(field.get(0));
  939. if (params.getType().equals("6") && field.get(1).equals(0)) {
  940. params.setCustomFieldTreeType(0);
  941. } else {
  942. params.setCustomFieldTreeType(null);
  943. }
  944. }
  945. }
  946. public void updatePatentCustomField(PatentCustomFieldParams params) {
  947. List<CustomFieldDTO> dataList = new ArrayList<>();
  948. for (String key : params.keySet()) {
  949. List<String> fields = StringUtils.changeStringToString(key, ":");
  950. if (fields.size() == 2) {
  951. Object name = fields.get(0);
  952. Object selected = params.get(key);
  953. List<String> select = JsonUtils.jsonToList(JsonUtils.objectToJson(selected), String.class);
  954. if (StringUtils.isNull(select)) {
  955. select = new ArrayList<>();
  956. }
  957. CustomFieldDTO data = new CustomFieldDTO();
  958. data.setName(name.toString());
  959. data.setSelected(select);
  960. data.setType(Integer.parseInt(fields.get(1)));
  961. dataList.add(data);
  962. }
  963. }
  964. for (CustomFieldDTO data : dataList) {
  965. ProjectField projectField = projectFieldService.getProjectFieldByNameAndType(data.getName(), data.getType(), params.getProjectId(), params.getUserId());
  966. projectFieldPatentLinkService.deleteByPatentIdAndProjectIdAndFieldId(params.getPatentId(), params.getProjectId(), projectField.getId());
  967. switch (projectField.getType()) {
  968. case 0:
  969. case 1:
  970. case 2:
  971. for (String text : data.getSelected()) {
  972. ProjectFieldText projectFieldText = projectFieldTextService.getProjectFieldTextByNameAndFieldId(text, projectField.getId());
  973. if (projectFieldText == null) {
  974. projectFieldText = new ProjectFieldText();
  975. projectFieldText.setFieldId(projectField.getId());
  976. projectFieldText.setText(text);
  977. projectFieldText.insert();
  978. }
  979. projectFieldPatentLinkService.updateProjectPatentLink(params.getPatentId(), projectField.getType(), projectField.getId(), projectFieldText.getId(), params.getUserId(), params.getProjectId());
  980. }
  981. break;
  982. case 3:
  983. case 4:
  984. case 5:
  985. for (String option : data.getSelected()) {
  986. ProjectFieldOption projectFieldOption = projectFieldOptionService.getProjectFieldOptionByNameAndFieldId(option, projectField.getId());
  987. if (projectFieldOption == null) {
  988. projectFieldOption = new ProjectFieldOption();
  989. projectFieldOption.setFieldId(projectField.getId());
  990. projectFieldOption.setName(option);
  991. projectFieldOption.insert();
  992. }
  993. projectFieldPatentLinkService.updateProjectPatentLink(params.getPatentId(), projectField.getType(), projectField.getId(), projectFieldOption.getId(), params.getUserId(), params.getProjectId());
  994. }
  995. break;
  996. case 6:
  997. for (String tree : data.getSelected()) {
  998. List<String> treeNode = StringUtils.changeStringToString(tree, "\\\\");
  999. Integer treeNodeId = projectFieldTreeService.getTreeNodeIdByPathNameAndUpdateTreeData(treeNode, projectField);
  1000. if (treeNodeId != 0) {
  1001. projectFieldPatentLinkService.updateProjectPatentLink(params.getPatentId(), projectField.getType(), projectField.getId(), treeNodeId, params.getUserId(), params.getProjectId());
  1002. }
  1003. }
  1004. break;
  1005. }
  1006. }
  1007. }
  1008. public Map<String, Object> getBetweenPatentList(PatentVO params) {
  1009. this.setQueryPatentParams(params);
  1010. List<Patent> patentList = baseMapper.getPageList(params);
  1011. int index = patentList.stream().map(Patent::getId).collect(Collectors.toList()).indexOf(params.getPatentId());
  1012. Map<String, Object> map = new HashMap<>();
  1013. if (index > 0) {
  1014. Patent patent = patentList.get(index - 1);
  1015. Map<String, Object> prev = new HashMap<>();
  1016. prev.put("id", patent.getId());
  1017. prev.put("patentNo", patent.getPatentNo());
  1018. prev.put("total", index);
  1019. map.put("prev", prev);
  1020. }
  1021. if (index < patentList.size() - 1) {
  1022. Patent patent = patentList.get(index + 1);
  1023. Map<String, Object> next = new HashMap<>();
  1024. next.put("id", patent.getId());
  1025. next.put("patentNo", patent.getPatentNo());
  1026. next.put("total", patentList.size() - index - 1);
  1027. map.put("next", next);
  1028. }
  1029. return map;
  1030. }
  1031. public void importPatent(Integer projectId, String patentJson, String patentAffairJson, String patentAgencyJson, String patentFamilyJson, String patentFamilyLinkJson, String patentInventorJson, String patentInventorLinkJson, String patentAgentJson, String patentAgentLinkJson, String patentApplicantJson, String patentApplicantLinkJson, String patentApplicantMergeLinkJson, String patentClassNumberJson, String patentInstructionTextJson, String patentRightJson, String patentLicensorJson, String patentPledgeJson, String patentInventorMergeJson) {
  1032. List<Patent> importPatentList = JsonUtils.jsonToList(patentJson, Patent.class);
  1033. List<PatentAffair> importPatentAffairList = JsonUtils.jsonToList(patentAffairJson, PatentAffair.class);
  1034. List<PatentAgency> importPatentAgencyList = JsonUtils.jsonToList(patentAgencyJson, PatentAgency.class);
  1035. List<PatentAgent> importPatentAgentList = JsonUtils.jsonToList(patentAgentJson, PatentAgent.class);
  1036. List<PatentAgentLink> importPatentAgentLinkList = JsonUtils.jsonToList(patentAgentLinkJson, PatentAgentLink.class);
  1037. List<PatentInventor> importPatentInventorList = JsonUtils.jsonToList(patentInventorJson, PatentInventor.class);
  1038. List<PatentInventorMerge> importPatentInventorMergeList = JsonUtils.jsonToList(patentInventorMergeJson, PatentInventorMerge.class);
  1039. List<PatentInventorLink> importPatentInventorLinkList = JsonUtils.jsonToList(patentInventorLinkJson, PatentInventorLink.class);
  1040. List<PatentApplicant> importPatentApplicantList = JsonUtils.jsonToList(patentApplicantJson, PatentApplicant.class);
  1041. List<PatentApplicantLink> importPatentApplicantLinkList = JsonUtils.jsonToList(patentApplicantLinkJson, PatentApplicantLink.class);
  1042. List<PatentApplicantMergeLink> importPatentApplicantMergeLinkList = JsonUtils.jsonToList(patentApplicantMergeLinkJson, PatentApplicantMergeLink.class);
  1043. List<PatentSimpleFamily> importPatentSimpleFamilyList = JsonUtils.jsonToList(patentFamilyJson, PatentSimpleFamily.class);
  1044. List<PatentSimpleFamilyLink> importPatentSimpleFamilyLinkList = JsonUtils.jsonToList(patentFamilyLinkJson, PatentSimpleFamilyLink.class);
  1045. List<PatentClassNumberLink> importPatentClassNumberLinkList = JsonUtils.jsonToList(patentClassNumberJson, PatentClassNumberLink.class);
  1046. List<PatentInstructionText> importPatentInstructionTextList = JsonUtils.jsonToList(patentInstructionTextJson, PatentInstructionText.class);
  1047. List<PatentRight> importPatentRightList = JsonUtils.jsonToList(patentRightJson, PatentRight.class);
  1048. List<PatentLicensor> importPatentLicensorList = JsonUtils.jsonToList(patentLicensorJson, PatentLicensor.class);
  1049. List<PatentPledge> importPatentPledgeList = JsonUtils.jsonToList(patentPledgeJson, PatentPledge.class);
  1050. List<Patent> localPatentList = this.getPatentListByPatentNo(importPatentList.stream().map(Patent::getPatentNo).collect(Collectors.toList()));
  1051. List<Patent> patentList = new ArrayList<>();
  1052. for (Patent importPatent : importPatentList) {
  1053. Patent localPatent = localPatentList.stream().filter(item -> item.getPatentNo().equals(importPatent.getPatentNo())).findFirst().orElse(null);
  1054. Integer patentId;
  1055. if (localPatent == null) {
  1056. localPatent = new Patent();
  1057. patentId = null;
  1058. } else {
  1059. patentId = localPatent.getId();
  1060. }
  1061. BeanUtils.copyProperties(importPatent, localPatent);
  1062. localPatent.setId(patentId);
  1063. if (StringUtils.isNotEmpty(importPatent.getAgencyId())) {
  1064. PatentAgency importPatentAgency = importPatentAgencyList.stream().filter(item -> item.getId().equals(Integer.valueOf(importPatent.getAgencyId()))).findFirst().orElse(new PatentAgency());
  1065. localPatent.setAgencyId(patentAgencyService.getAgencyStringIdByName(importPatentAgency.getName()));
  1066. }
  1067. localPatent.insertOrUpdate();
  1068. patentList.add(localPatent);
  1069. }
  1070. for (Patent patent : patentList) {
  1071. Patent importPatent = importPatentList.stream().filter(item -> item.getPatentNo().equals(patent.getPatentNo())).findFirst().orElse(new Patent());
  1072. patentAffairService.importPatentAffair(patent, importPatentList, importPatentAffairList);
  1073. patentAgentService.importPatentAgent(patent.getId(), importPatent.getId(), importPatentAgentList, importPatentAgentLinkList);
  1074. patentSimpleFamilyService.importPatentSimpleFamily(patent, importPatentSimpleFamilyList, importPatentSimpleFamilyLinkList);
  1075. patentInventorService.importPatentInventor(patent.getId(), importPatent.getId(), importPatentInventorList, importPatentInventorLinkList);
  1076. patentApplicantService.importPatentApplicant(projectId, patent.getId(), importPatent.getId(), importPatentApplicantList, importPatentApplicantLinkList);
  1077. patentClassNumberLinkService.importPatentClassNumberLink(patent.getId(), importPatent.getId(), importPatentClassNumberLinkList);
  1078. patentInstructionTextService.importPatentInstructionText(patent.getId(), importPatent.getId(), importPatentInstructionTextList);
  1079. patentRightService.importPatentRight(patent.getId(), importPatent.getId(), importPatentRightList);
  1080. patentLicensorService.importPatentLicensor(patent.getId(), importPatent.getId(), importPatentLicensorList);
  1081. patentPledgeService.importPatentPledge(patent.getId(), importPatent.getId(), importPatentPledgeList);
  1082. }
  1083. patentInventorMergeService.importPatentInventorMergeLink(projectId, importPatentInventorList, importPatentInventorMergeList);
  1084. patentApplicantMergeLinkService.importPatentApplicantMergeLink(projectId, importPatentApplicantList, importPatentApplicantMergeLinkList);
  1085. }
  1086. }