PatentService.java 103 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585
  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.QueryPatentVO;
  5. import cn.cslg.pas.common.model.dto.PatentDTO;
  6. import cn.cslg.pas.common.model.dto.PatentQueryFieldSourceDTO;
  7. import cn.cslg.pas.common.model.dto.TaskWebSocketDTO;
  8. import cn.cslg.pas.domain.*;
  9. import cn.cslg.pas.common.model.vo.PatentExportVO;
  10. import cn.cslg.pas.common.model.vo.PatentQueryFieldSourceVO;
  11. import cn.cslg.pas.common.model.vo.PatentVO;
  12. import cn.cslg.pas.common.model.vo.TaskParams;
  13. import cn.cslg.pas.common.utils.*;
  14. import cn.cslg.pas.common.model.dto.CustomFieldDTO;
  15. import cn.cslg.pas.common.model.params.PatentCustomFieldParams;
  16. import cn.cslg.pas.common.utils.WebSocketServer;
  17. import cn.cslg.pas.mapper.PatentMapper;
  18. import cn.cslg.pas.common.utils.CacheUtils;
  19. import cn.cslg.pas.common.utils.PatentUtils;
  20. import cn.hutool.core.io.FileUtil;
  21. import cn.hutool.core.util.IdUtil;
  22. import com.alibaba.fastjson.JSON;
  23. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  24. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  25. import com.baomidou.mybatisplus.core.metadata.IPage;
  26. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  27. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  28. import lombok.RequiredArgsConstructor;
  29. import org.apache.ibatis.annotations.Param;
  30. import org.apache.poi.hssf.usermodel.*;
  31. import org.apache.poi.hssf.util.HSSFColor;
  32. import org.apache.poi.ss.usermodel.*;
  33. import org.springframework.beans.BeanUtils;
  34. import org.springframework.context.annotation.Lazy;
  35. import org.springframework.scheduling.annotation.Async;
  36. import org.springframework.stereotype.Service;
  37. import java.io.FileOutputStream;
  38. import java.util.*;
  39. import java.util.stream.Collectors;
  40. /**
  41. * <p>
  42. * 专利信息表 服务实现类
  43. * </p>
  44. *
  45. * @author 王岩
  46. * @since 2021-12-26
  47. */
  48. @Service
  49. @RequiredArgsConstructor(onConstructor_ = {@Lazy})
  50. public class PatentService extends ServiceImpl<PatentMapper, Patent> {
  51. private final PatentMapper patentMapper;
  52. private final PatentApplicantService patentApplicantService;
  53. private final PatentApplicantLinkService applicantAttributeService;
  54. private final ProjectPatentLinkService projectPatentLinkService;
  55. private final CustomAnalysisItemSourceService customAnalysisItemSourceService;
  56. private final CacheUtils cacheUtils;
  57. private final DataAnalysisService dataAnalysisService;
  58. private final PatentAffairService patentAffairService;
  59. private final ProjectFieldTreeService projectFieldTreeService;
  60. private final ProjectFieldOptionService projectFieldOptionService;
  61. private final PatentLabelService patentLabelService;
  62. private final ProjectFieldTextService projectFieldTextService;
  63. private final PatentFieldService patentFieldService;
  64. private final ProjectFieldService projectFieldService;
  65. private final TaskService taskService;
  66. private final FileUtils fileUtils;
  67. private final PatentImageService patentImageService;
  68. private final PatentInventorService patentInventorService;
  69. private final PatentAgencyService patentAgencyService;
  70. private final PatentAgentService patentAgentService;
  71. private final ProjectFolderPatentLinkService projectFolderPatentLinkService;
  72. private final PatentApplicantMergeLinkService patentApplicantMergeLinkService;
  73. private final AreaService areaService;
  74. private final PatentClassNumberService patentClassNumberService;
  75. private final PatentClassNumberLinkService patentClassNumberLinkService;
  76. private final ProjectFieldPatentLinkService projectFieldPatentLinkService;
  77. private final PatentInstructionService patentInstructionService;
  78. private final PatentSimpleFamilyService patentSimpleFamilyService;
  79. private final SystemDictService systemDictService;
  80. private final PatentSimpleFamilyLinkService patentSimpleFamilyLinkService;
  81. private final PatentRightService patentRightService;
  82. private final PatentInstructionTextService patentInstructionTextService;
  83. private final PatentLicensorService patentLicensorService;
  84. private final PatentPledgeService patentPledgeService;
  85. private final PatentInventorMergeService patentInventorMergeService;
  86. public List<Patent> getPatentListByIds(List<Integer> ids) {
  87. if (ids == null || ids.size() == 0) {
  88. return new ArrayList<>();
  89. }
  90. LambdaQueryWrapper<Patent> queryWrapper = new LambdaQueryWrapper<>();
  91. queryWrapper.in(Patent::getId, ids);
  92. return this.list(queryWrapper);
  93. }
  94. public List<Patent> getPatentListByPatentNo(List<String> patentNo) {
  95. if (patentNo == null || patentNo.size() == 0) {
  96. return new ArrayList<>();
  97. }
  98. LambdaQueryWrapper<Patent> queryWrapper = new LambdaQueryWrapper<>();
  99. queryWrapper.in(Patent::getPatentNo, patentNo);
  100. return this.list(queryWrapper);
  101. }
  102. public Patent getByPatentNo(String patentNo) {
  103. LambdaQueryWrapper<Patent> queryWrapper = new LambdaQueryWrapper<>();
  104. queryWrapper.eq(Patent::getPatentNo, patentNo);
  105. return this.getOne(queryWrapper);
  106. }
  107. public List<Patent> getPublicDateAndPatentNoByPatentNo(List<String> patentNo) {
  108. LambdaQueryWrapper<Patent> queryWrapper = new LambdaQueryWrapper<>();
  109. queryWrapper.select(Patent::getPublicDate, Patent::getPatentNo, Patent::getId, Patent::getPublicNo
  110. , Patent::getSimpleFamily, Patent::getInpadocFamily, Patent::getPatSnapFamily);
  111. queryWrapper.in(Patent::getPatentNo, patentNo);
  112. queryWrapper.last(" order by appdate, patentno");
  113. return this.list(queryWrapper);
  114. }
  115. public List<Patent> getPatentIdAndPatentNoByIds(List<Integer> ids) {
  116. if (ids == null || ids.size() == 0) {
  117. return new ArrayList<>();
  118. }
  119. LambdaQueryWrapper<Patent> queryWrapper = new LambdaQueryWrapper<>();
  120. queryWrapper.select(Patent::getPatentNo, Patent::getId);
  121. queryWrapper.in(Patent::getId, ids);
  122. return this.list(queryWrapper);
  123. }
  124. public Date getDateTime(String ids, Integer fieldId, String type) {
  125. String column = "";
  126. switch (fieldId) {
  127. case 25:
  128. column = "appdate";
  129. break;
  130. case 26:
  131. column = "publicdate";
  132. break;
  133. case 27:
  134. column = "publictodate";
  135. break;
  136. default:
  137. return new Date(baseMapper.getDateTime2(ids, fieldId, type) * 1000L);
  138. }
  139. return new Date(baseMapper.getDateTime(ids, column, type) * 1000L);
  140. }
  141. public String getPatentNumberTypeCount(Integer projectId, String id, Integer field, CustomAnalysisItemSource source) {
  142. QueryWrapper<Patent> queryWrapper = new QueryWrapper<>();
  143. List<Integer> ids = StringUtils.changeStringToInteger(id, ",");
  144. String column = "";
  145. List<String> options = Arrays.asList(">", ">=", "<", "<=");
  146. if (ids.size() == 0) {
  147. return null;
  148. }
  149. Integer mino = source.getMin().getOperator();
  150. Integer maxo = source.getMax().getOperator();
  151. Integer minv = source.getMin().getValue();
  152. Integer maxv = source.getMax().getValue();
  153. queryWrapper.lambda().in(Patent::getId, ids);
  154. switch (field) {
  155. case 32:
  156. column = "quoteno";
  157. break;
  158. case 33:
  159. column = "quotedno";
  160. break;
  161. case 34:
  162. column = "inpadocfamilynum";
  163. break;
  164. case 35:
  165. column = "simplefamilynum";
  166. break;
  167. case 55:
  168. column = "patsnapfamilynum";
  169. break;
  170. case 38:
  171. column = "num2";
  172. break;
  173. case 39:
  174. column = "num3";
  175. break;
  176. default:
  177. List<Integer> patentIds = baseMapper.getCustomFieldCount(ids, field, options.get(mino), options.get(maxo), minv, maxv);
  178. return StringUtils.join(patentIds.stream().distinct().collect(Collectors.toList()), ",");
  179. }
  180. if (mino.equals(0)) {
  181. queryWrapper.gt(column, minv);
  182. } else {
  183. queryWrapper.ge(column, minv);
  184. }
  185. if (maxo.equals(2)) {
  186. queryWrapper.lt(column, maxv);
  187. } else {
  188. queryWrapper.le(column, maxv);
  189. }
  190. List<Patent> patentList = this.list(queryWrapper);
  191. return StringUtils.join(patentList.stream().map(Patent::getId).distinct().collect(Collectors.toList()), ",");
  192. }
  193. public String getPatentDateTime2(Integer projectId, Integer field, Long startDate, Long endDate, String id) {
  194. LambdaQueryWrapper<Patent> queryWrapper = new LambdaQueryWrapper<>();
  195. List<Integer> ids = StringUtils.changeStringToInteger(id, ",");
  196. if (ids.size() == 0) {
  197. return null;
  198. }
  199. queryWrapper.in(Patent::getId, ids);
  200. switch (field) {
  201. case 25:
  202. queryWrapper.between(Patent::getApplicationDate, startDate, endDate);
  203. break;
  204. case 26:
  205. queryWrapper.between(Patent::getPublicDate, startDate, endDate);
  206. break;
  207. case 27:
  208. queryWrapper.between(Patent::getPublicAccreditDate, startDate, endDate);
  209. break;
  210. default:
  211. List<Integer> patentIds = baseMapper.getCustomFieldTime(ids, field, startDate, endDate);
  212. return StringUtils.join(patentIds.stream().distinct().collect(Collectors.toList()), ",");
  213. }
  214. List<Patent> patentList = this.list(queryWrapper);
  215. return StringUtils.join(patentList.stream().map(BaseEntity::getId).distinct().collect(Collectors.toList()), ",");
  216. }
  217. //装载专利查询数据
  218. private void setQueryPatentParams(PatentVO params) {
  219. params.setSelfField(new ArrayList<>());
  220. List<String> customIds = new ArrayList<>();
  221. List<String> notInIds = new ArrayList<>();
  222. params.setCids(new ArrayList<>());
  223. //设置专利名sql
  224. if (StringUtils.isNotEmpty(params.getName())) {
  225. params.setNameSql(PatentUtils.formatTextQuerySql(params.getName(), "a.name"));
  226. }
  227. //设置摘要sql
  228. if (StringUtils.isNotEmpty(params.getAbstractStr())) {
  229. params.setAbstractStrSql(PatentUtils.formatTextQuerySql(params.getAbstractStr(), "a.abstract"));
  230. }
  231. //设置公开号sql
  232. if (StringUtils.isNotEmpty(params.getPublicNo())) {
  233. params.setPublicNoSql(PatentUtils.formatTextQuerySql(params.getPublicNo(), "a.publicno"));
  234. }
  235. //设置申请号sql
  236. if (StringUtils.isNotEmpty(params.getApplicationNo())) {
  237. params.setApplicationNoSql(PatentUtils.formatTextQuerySql(params.getApplicationNo(), "a.applicationno"));
  238. }
  239. //设置权要sql
  240. if (StringUtils.isNotEmpty(params.getRightContent())) {
  241. params.setRightContentSql(PatentUtils.formatTextQuerySql(params.getRightContent(), "content"));
  242. }
  243. //遍历查询字段
  244. for (int i = 0; i < params.getField().size(); i++) {
  245. List<String> queryList = params.getField().get(i).getValue();
  246. String key = params.getField().get(i).getKey();
  247. List<Integer> field = StringUtils.changeStringToInteger(key, "-");
  248. if (queryList.size() == 0) {
  249. continue;
  250. }
  251. String fieldType = params.getField().get(i).getType();
  252. switch (key) {
  253. //分类号查询筛选
  254. case "13":
  255. case "15":
  256. case "16":
  257. case "17":
  258. if (field.get(0) == 13) {
  259. params.setQueryClassNumberIpc(true);
  260. params.setWhereClassNumberIpc(queryList);
  261. params.setQueryClassNumberIpcMethod(params.getField().get(i).getClassId());
  262. }
  263. if (field.get(0) == 15) {
  264. params.setQueryClassNumberCpc(true);
  265. params.setWhereClassNumberCpc(queryList);
  266. params.setQueryClassNumberCpcMethod(params.getField().get(i).getClassId());
  267. }
  268. if (field.get(0) == 17) {
  269. params.setQueryClassNumberUpc(true);
  270. params.setWhereClassNumberUpc(queryList);
  271. params.setQueryClassNumberUpcMethod(params.getField().get(i).getClassId());
  272. }
  273. if (field.get(0) == 16) {
  274. params.setQueryClassNumberLoc(true);
  275. params.setWhereClassNumberLoc(queryList);
  276. params.setQueryClassNumberLocMethod(params.getField().get(i).getClassId());
  277. }
  278. break;
  279. //原始申请人筛选
  280. case "18-6":
  281. params.setQueryApplicantOriginal(true);
  282. params.setWhereApplicantOriginal(queryList);
  283. break;
  284. //当前申请人筛选
  285. case "19-6":
  286. params.setQueryApplicantCurrent(true);
  287. params.setWhereApplicantCurrent(queryList);
  288. break;
  289. case "20-0":
  290. //发明人筛选
  291. params.setQueryInventor(true);
  292. params.setWhereInventor(queryList);
  293. break;
  294. //合并发明人筛选
  295. case "20-1":
  296. params.setQueryInventor(true);
  297. params.setQueryInventorMerge(true);
  298. params.setWhereInventorMerge(queryList);
  299. break;
  300. //标准原始申请人筛选
  301. case "18-7":
  302. params.setQueryApplicantOriginalStandard(true);
  303. params.setWhereApplicantOriginalStandard(queryList);
  304. break;
  305. //标准当前申请人筛选
  306. case "19-7":
  307. params.setQueryApplicantCurrentStandard(true);
  308. params.setWhereApplicantCurrentStandard(queryList);
  309. break;
  310. //原始申请人筛选
  311. case "18-8":
  312. params.setQueryApplicantOriginal(true);
  313. params.setQueryApplicantOriginalMerge(true);
  314. params.setWhereApplicantOriginalMerge(queryList);
  315. break;
  316. //当前申请人筛选
  317. case "19-8":
  318. params.setQueryApplicantCurrent(true);
  319. params.setQueryApplicantCurrentMerge(true);
  320. params.setWhereApplicantCurrentMerge(queryList);
  321. break;
  322. case "28-0":
  323. params.setQueryBureau(true);
  324. params.setWhereBureau(queryList);
  325. break;
  326. case "37-0":
  327. params.setQueryType(true);
  328. params.setWhereType(queryList);
  329. break;
  330. case "36-0":
  331. params.setQueryStatus(true);
  332. params.setWhereStatus(queryList);
  333. break;
  334. case "25-12":
  335. params.setQueryAppDate(true);
  336. params.setWhereAppDate(queryList);
  337. break;
  338. case "26-12":
  339. params.setQueryPublicDate(true);
  340. params.setWherePublicDate(queryList);
  341. break;
  342. case "29-17":
  343. params.setQueryApplicantAddress(true);
  344. params.setQueryCountry(true);
  345. params.setWhereCountry(queryList);
  346. break;
  347. case "29-18":
  348. params.setQueryApplicantAddress(true);
  349. params.setQueryApplicantProvince(true);
  350. params.setWhereApplicantProvince(queryList);
  351. break;
  352. case "40-0":
  353. params.setQueryAffair(true);
  354. StringBuilder str = new StringBuilder();
  355. for (String s : queryList) {
  356. str.append(s).append("|");
  357. }
  358. params.setWhereAffair(str.substring(0, str.length() - 1));
  359. break;
  360. case "54-0":
  361. params.setQueryLabel(true);
  362. params.setWhereLabel(queryList);
  363. break;
  364. //自定义字段筛选
  365. default:
  366. //判断值里面是否含空
  367. params.getField().get(i).setIsNull(queryList.stream().anyMatch(item -> item.equals("null")));
  368. params.getSelfField().add(params.getField().get(i));
  369. customIds.add(String.valueOf(field.get(0)));
  370. if (params.getField().get(i).getIsNull() == null || !params.getField().get(i).getIsNull()) {
  371. params.getCids().add(field.get(0));
  372. } else if (params.getField().get(i).getIsNull() && queryList.size() == 1) {
  373. notInIds.add(String.valueOf(field.get(0)));
  374. }
  375. }
  376. }
  377. if (customIds.size() != 0) {
  378. params.setCustomIds(customIds);
  379. }
  380. params.getField().forEach(item -> {
  381. List<String> temIds = new ArrayList<>(notInIds);
  382. temIds.remove(item.getKey());
  383. item.setNotInIds(temIds);
  384. });
  385. }
  386. public List<Integer> getPatentListIds(PatentVO params) {
  387. this.setQueryFamilyParams(params);
  388. params.setSelected(new ArrayList<>());
  389. List<Integer> ids = this.getQueryPatentIds(params);
  390. return ids.stream().skip(params.getStartNumber() - 1).limit(params.getEndNumber() - params.getStartNumber() + 1).collect(Collectors.toList());
  391. }
  392. private void setQueryFamilyParams(PatentVO params) {
  393. switch (params.getFamily()) {
  394. //
  395. case 0:
  396. params.setQuerySimpleFamily(false);
  397. params.setQueryInpadocFamily(false);
  398. params.setQueryPatSnapFamily(false);
  399. break;
  400. case 1:
  401. params.setQuerySimpleFamily(true);
  402. params.setQueryInpadocFamily(false);
  403. params.setQueryPatSnapFamily(false);
  404. break;
  405. case 2:
  406. params.setQuerySimpleFamily(false);
  407. params.setQueryInpadocFamily(true);
  408. params.setQueryPatSnapFamily(false);
  409. break;
  410. case 3:
  411. params.setQuerySimpleFamily(false);
  412. params.setQueryInpadocFamily(false);
  413. params.setQueryPatSnapFamily(true);
  414. break;
  415. }
  416. }
  417. //获得专利列表
  418. public IPage<PatentDTO> getPageList(PatentVO params) {
  419. //根据同族类型装载需要查询的同族类型
  420. this.setQueryFamilyParams(params);
  421. //装载需要查询的字段
  422. this.setQueryPatentParams(params);
  423. //根据装载信息查询专利
  424. IPage<Patent> dataPage = baseMapper.getPageList(new Page<>(params.getCurrent(), params.getSize()), params);
  425. IPage<PatentDTO> pageList = new Page<>();
  426. List<PatentDTO> records = new ArrayList<>();
  427. List<Integer> patentIds = dataPage.getRecords().stream().map(Patent::getId).collect(Collectors.toList());
  428. List<PatentApplicant> patentApplicantList = patentApplicantService.getPatentApplicantByPatentIds(patentIds);
  429. List<PatentInventor> patentInventorList = patentInventorService.getPatentInventorByPatentIds(patentIds);
  430. List<PatentLabel> patentLabelList = patentLabelService.getPatentLabelByPatentIdsAndProjectId(patentIds, params.getProjectId());
  431. List<PatentClassNumberLink> patentClassNumberLinkList = patentClassNumberLinkService.getPatentClassNumberLinkByPatentIds(patentIds);
  432. List<PatentAgent> patentAgentList = patentAgentService.getPatentAgentByPatentIds(patentIds);
  433. List<PatentAgency> patentAgencyList = patentAgencyService.getPatentAgencyByIds(dataPage.getRecords().stream().filter(item -> StringUtils.isNotEmpty(item.getAgencyId())).map(item -> Integer.parseInt(item.getAgencyId())).distinct().collect(Collectors.toList()));
  434. List<PatentSimpleFamilyLink> patentSimpleFamilyLinkList = patentSimpleFamilyLinkService.getPatentSimpleFamilyLinkByFamilyIds(dataPage.getRecords().stream().map(Patent::getSimpleFamily).collect(Collectors.toList()));
  435. List<PatentSimpleFamilyLink> patentInpadocFamilyLinkList = patentSimpleFamilyLinkService.getPatentSimpleFamilyLinkByFamilyIds(dataPage.getRecords().stream().map(Patent::getInpadocFamily).collect(Collectors.toList()));
  436. List<PatentSimpleFamilyLink> patentPatSnapFamilyLinkList = patentSimpleFamilyLinkService.getPatentSimpleFamilyLinkByFamilyIds(dataPage.getRecords().stream().map(Patent::getPatSnapFamily).collect(Collectors.toList()));
  437. List<SystemDict> systemDictList = systemDictService.getSystemDictListByType(Arrays.asList(Constants.PATENT_TYPE, Constants.PATENT_SIMPLE_STATUS));
  438. //获得所有的自定义字段信息
  439. Map<Integer, List<PatentDTO.Field>> map = projectFieldService.getPatentFieldByPatentIdAndProjectId2(params.getProjectId(), patentIds);
  440. dataPage.getRecords().forEach(item -> {
  441. PatentDTO patentDTO = new PatentDTO();
  442. BeanUtils.copyProperties(item, patentDTO);
  443. patentDTO.setApplicationDate(DateUtils.formatDate(item.getApplicationDate(), DateUtils.YYYY_MM_DD));
  444. patentDTO.setPriorityDate(DateUtils.formatDate(item.getPriorityDate(), DateUtils.YYYY_MM_DD));
  445. patentDTO.setPublicDate(DateUtils.formatDate(item.getPublicDate(), DateUtils.YYYY_MM_DD));
  446. patentDTO.setPublicAccreditDate(DateUtils.formatDate(item.getPublicAccreditDate(), DateUtils.YYYY_MM_DD));
  447. patentDTO.setFirstPublicDate(DateUtils.formatDate(item.getFirstPublicDate(), DateUtils.YYYY_MM_DD));
  448. 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());
  449. patentDTO.setType(systemDictList.stream().filter(systemDict -> systemDict.getType().equals(Constants.PATENT_TYPE) && systemDict.getValue().equals(String.valueOf(item.getType()))).findFirst().orElse(new SystemDict()).getLabel());
  450. patentDTO.setApplicant(patentApplicantList.stream().filter(patentApplicant -> patentApplicant.getPatentId().equals(item.getId())).collect(Collectors.toList()));
  451. patentDTO.setInventor(patentInventorList.stream().filter(patentInventor -> patentInventor.getPatentId().equals(item.getId())).collect(Collectors.toList()));
  452. patentDTO.setLabel(patentLabelList.stream().filter(patentLabel -> patentLabel.getPatentId().equals(item.getId())).collect(Collectors.toList()));
  453. 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()));
  454. 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()));
  455. 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()));
  456. 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()));
  457. if (StringUtils.isNotEmpty(item.getAgencyId())) {
  458. patentDTO.setAgency(patentAgencyList.stream().filter(patentAgency -> patentAgency.getId().equals(Integer.parseInt(item.getAgencyId()))).findFirst().orElse(null));
  459. }
  460. PatentDTO.PatentFamily patentFamily = new PatentDTO.PatentFamily();
  461. patentFamily.setSimple(patentSimpleFamilyLinkList.stream().filter(patentSimpleFamilyLink -> patentSimpleFamilyLink.getFamilyId().equals(item.getSimpleFamily())).map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList()));
  462. patentFamily.setInpadoc(patentInpadocFamilyLinkList.stream().filter(patentSimpleFamilyLink -> patentSimpleFamilyLink.getFamilyId().equals(item.getInpadocFamily())).map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList()));
  463. patentFamily.setPatSnap(patentPatSnapFamilyLinkList.stream().filter(patentSimpleFamilyLink -> patentSimpleFamilyLink.getFamilyId().equals(item.getPatSnapFamily())).map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList()));
  464. patentDTO.setFamily(patentFamily);
  465. patentDTO.setAgent(patentAgentList.stream().filter(patentAgent -> patentAgent.getPatentId().equals(item.getId())).collect(Collectors.toList()));
  466. // TODO 性能优化
  467. patentDTO.setField(map.get(item.getId()));
  468. records.add(patentDTO);
  469. });
  470. pageList.setTotal(dataPage.getTotal());
  471. pageList.setRecords(records);
  472. pageList.setPages(dataPage.getPages());
  473. pageList.setSize(dataPage.getSize());
  474. pageList.setCurrent(dataPage.getCurrent());
  475. return pageList;
  476. }
  477. public IPage<PatentDTO> getPageListForRMS(QueryPatentVO params) {
  478. if (params.getObligeeName() != null) {
  479. String obligeeName = params.getObligeeName().replace("(", "\\(");
  480. obligeeName = obligeeName.replace(")", "\\)");
  481. params.setObligeeName(obligeeName);
  482. }
  483. if (params.getApplicationName() != null) {
  484. String applicationName = params.getApplicationName().replace("(", "\\(");
  485. applicationName = applicationName.replace(")", "\\)");
  486. params.setApplicationName(applicationName);
  487. }
  488. IPage<Patent> dataPage = baseMapper.getPageListForRMS2(new Page<>(params.getCurrent(), params.getSize()), params);
  489. IPage<PatentDTO> pageList = new Page<>();
  490. List<PatentDTO> records = new ArrayList<>();
  491. List<Integer> patentIds = dataPage.getRecords().stream().map(Patent::getId).collect(Collectors.toList());
  492. List<PatentApplicant> patentApplicantList = patentApplicantService.getPatentApplicantByPatentIds(patentIds);
  493. List<PatentInventor> patentInventorList = patentInventorService.getPatentInventorByPatentIds(patentIds);
  494. List<PatentLabel> patentLabelList = patentLabelService.getPatentLabelByPatentIdsAndProjectId(patentIds, params.getProjectId());
  495. List<PatentClassNumberLink> patentClassNumberLinkList = patentClassNumberLinkService.getPatentClassNumberLinkByPatentIds(patentIds);
  496. List<PatentAgent> patentAgentList = patentAgentService.getPatentAgentByPatentIds(patentIds);
  497. List<PatentAgency> patentAgencyList = patentAgencyService.getPatentAgencyByIds(dataPage.getRecords().stream().filter(item -> StringUtils.isNotEmpty(item.getAgencyId())).map(item -> Integer.parseInt(item.getAgencyId())).distinct().collect(Collectors.toList()));
  498. List<PatentSimpleFamilyLink> patentSimpleFamilyLinkList = patentSimpleFamilyLinkService.getPatentSimpleFamilyLinkByFamilyIds(dataPage.getRecords().stream().map(Patent::getSimpleFamily).collect(Collectors.toList()));
  499. List<PatentSimpleFamilyLink> patentInpadocFamilyLinkList = patentSimpleFamilyLinkService.getPatentSimpleFamilyLinkByFamilyIds(dataPage.getRecords().stream().map(Patent::getInpadocFamily).collect(Collectors.toList()));
  500. List<PatentSimpleFamilyLink> patentPatSnapFamilyLinkList = patentSimpleFamilyLinkService.getPatentSimpleFamilyLinkByFamilyIds(dataPage.getRecords().stream().map(Patent::getPatSnapFamily).collect(Collectors.toList()));
  501. List<SystemDict> systemDictList = systemDictService.getSystemDictListByType(Arrays.asList(Constants.PATENT_TYPE, Constants.PATENT_SIMPLE_STATUS));
  502. dataPage.getRecords().forEach(item -> {
  503. PatentDTO patentDTO = new PatentDTO();
  504. BeanUtils.copyProperties(item, patentDTO);
  505. patentDTO.setApplicationDate(DateUtils.formatDate(item.getApplicationDate(), DateUtils.YYYY_MM_DD));
  506. patentDTO.setPriorityDate(DateUtils.formatDate(item.getPriorityDate(), DateUtils.YYYY_MM_DD));
  507. patentDTO.setPublicDate(DateUtils.formatDate(item.getPublicDate(), DateUtils.YYYY_MM_DD));
  508. patentDTO.setPublicAccreditDate(DateUtils.formatDate(item.getPublicAccreditDate(), DateUtils.YYYY_MM_DD));
  509. patentDTO.setFirstPublicDate(DateUtils.formatDate(item.getFirstPublicDate(), DateUtils.YYYY_MM_DD));
  510. 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());
  511. patentDTO.setType(systemDictList.stream().filter(systemDict -> systemDict.getType().equals(Constants.PATENT_TYPE) && systemDict.getValue().equals(String.valueOf(item.getType()))).findFirst().orElse(new SystemDict()).getLabel());
  512. patentDTO.setApplicant(patentApplicantList.stream().filter(patentApplicant -> patentApplicant.getPatentId().equals(item.getId())).collect(Collectors.toList()));
  513. patentDTO.setInventor(patentInventorList.stream().filter(patentInventor -> patentInventor.getPatentId().equals(item.getId())).collect(Collectors.toList()));
  514. patentDTO.setLabel(patentLabelList.stream().filter(patentLabel -> patentLabel.getPatentId().equals(item.getId())).collect(Collectors.toList()));
  515. 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()));
  516. 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()));
  517. 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()));
  518. 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()));
  519. patentDTO.setAffair(patentAffairService.getPatentAffairByPatentId(item.getId()));
  520. if (StringUtils.isNotEmpty(item.getAgencyId())) {
  521. patentDTO.setAgency(patentAgencyList.stream().filter(patentAgency -> patentAgency.getId().equals(Integer.parseInt(item.getAgencyId()))).findFirst().orElse(null));
  522. }
  523. PatentDTO.PatentFamily patentFamily = new PatentDTO.PatentFamily();
  524. patentFamily.setSimple(patentSimpleFamilyLinkList.stream().filter(patentSimpleFamilyLink -> patentSimpleFamilyLink.getFamilyId().equals(item.getSimpleFamily())).map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList()));
  525. patentFamily.setInpadoc(patentInpadocFamilyLinkList.stream().filter(patentSimpleFamilyLink -> patentSimpleFamilyLink.getFamilyId().equals(item.getInpadocFamily())).map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList()));
  526. patentFamily.setPatSnap(patentPatSnapFamilyLinkList.stream().filter(patentSimpleFamilyLink -> patentSimpleFamilyLink.getFamilyId().equals(item.getPatSnapFamily())).map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList()));
  527. patentDTO.setFamily(patentFamily);
  528. patentDTO.setAgent(patentAgentList.stream().filter(patentAgent -> patentAgent.getPatentId().equals(item.getId())).collect(Collectors.toList()));
  529. // TODO 性能优化
  530. patentDTO.setField(projectFieldService.getPatentFieldByPatentIdAndProjectId(params.getProjectId(), item.getId()));
  531. records.add(patentDTO);
  532. });
  533. pageList.setTotal(dataPage.getTotal());
  534. pageList.setRecords(records);
  535. pageList.setPages(dataPage.getPages());
  536. pageList.setSize(dataPage.getSize());
  537. pageList.setCurrent(dataPage.getCurrent());
  538. return pageList;
  539. }
  540. public List<PatentDTO> getPatentDTOListForRMS(PatentVO params) {
  541. List<PatentDTO> records = new ArrayList<>();
  542. if (params.getPatentNos() == null || params.getPatentNos().size() == 0) {
  543. return records;
  544. }
  545. List<Patent> dataPage = baseMapper.getPatent(params.getPatentNos(), -1, -1);
  546. List<Integer> patentIds = dataPage.stream().map(Patent::getId).collect(Collectors.toList());
  547. List<PatentApplicant> patentApplicantList = patentApplicantService.getPatentApplicantByPatentIds(patentIds);
  548. List<PatentInventor> patentInventorList = patentInventorService.getPatentInventorByPatentIds(patentIds);
  549. List<PatentClassNumberLink> patentClassNumberLinkList = patentClassNumberLinkService.getPatentClassNumberLinkByPatentIds(patentIds);
  550. List<PatentAgent> patentAgentList = patentAgentService.getPatentAgentByPatentIds(patentIds);
  551. List<PatentAgency> patentAgencyList = patentAgencyService.getPatentAgencyByIds(dataPage.stream().filter(item -> StringUtils.isNotEmpty(item.getAgencyId())).map(item -> Integer.parseInt(item.getAgencyId())).distinct().collect(Collectors.toList()));
  552. List<PatentSimpleFamilyLink> patentSimpleFamilyLinkList = patentSimpleFamilyLinkService.getPatentSimpleFamilyLinkByFamilyIds(dataPage.stream().map(Patent::getSimpleFamily).collect(Collectors.toList()));
  553. List<PatentSimpleFamilyLink> patentInpadocFamilyLinkList = patentSimpleFamilyLinkService.getPatentSimpleFamilyLinkByFamilyIds(dataPage.stream().map(Patent::getInpadocFamily).collect(Collectors.toList()));
  554. List<PatentSimpleFamilyLink> patentPatSnapFamilyLinkList = patentSimpleFamilyLinkService.getPatentSimpleFamilyLinkByFamilyIds(dataPage.stream().map(Patent::getPatSnapFamily).collect(Collectors.toList()));
  555. List<SystemDict> systemDictList = systemDictService.getSystemDictListByType(Arrays.asList(Constants.PATENT_TYPE, Constants.PATENT_SIMPLE_STATUS));
  556. dataPage.forEach(item -> {
  557. PatentDTO patentDTO = new PatentDTO();
  558. BeanUtils.copyProperties(item, patentDTO);
  559. patentDTO.setApplicationDate(DateUtils.formatDate(item.getApplicationDate(), DateUtils.YYYY_MM_DD));
  560. patentDTO.setPriorityDate(DateUtils.formatDate(item.getPriorityDate(), DateUtils.YYYY_MM_DD));
  561. patentDTO.setPublicDate(DateUtils.formatDate(item.getPublicDate(), DateUtils.YYYY_MM_DD));
  562. patentDTO.setPublicAccreditDate(DateUtils.formatDate(item.getPublicAccreditDate(), DateUtils.YYYY_MM_DD));
  563. patentDTO.setFirstPublicDate(DateUtils.formatDate(item.getFirstPublicDate(), DateUtils.YYYY_MM_DD));
  564. 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());
  565. patentDTO.setSimpleStatusInt(item.getSimpleStatus());
  566. patentDTO.setType(systemDictList.stream().filter(systemDict -> systemDict.getType().equals(Constants.PATENT_TYPE) && systemDict.getValue().equals(String.valueOf(item.getType()))).findFirst().orElse(new SystemDict()).getLabel());
  567. patentDTO.setApplicant(patentApplicantList.stream().filter(patentApplicant -> patentApplicant.getPatentId().equals(item.getId())).collect(Collectors.toList()));
  568. patentDTO.setInventor(patentInventorList.stream().filter(patentInventor -> patentInventor.getPatentId().equals(item.getId())).collect(Collectors.toList()));
  569. 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()));
  570. 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()));
  571. 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()));
  572. 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()));
  573. if (StringUtils.isNotEmpty(item.getAgencyId())) {
  574. patentDTO.setAgency(patentAgencyList.stream().filter(patentAgency -> patentAgency.getId().equals(Integer.parseInt(item.getAgencyId()))).findFirst().orElse(null));
  575. }
  576. PatentDTO.PatentFamily patentFamily = new PatentDTO.PatentFamily();
  577. patentFamily.setSimple(patentSimpleFamilyLinkList.stream().filter(patentSimpleFamilyLink -> patentSimpleFamilyLink.getFamilyId().equals(item.getSimpleFamily())).map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList()));
  578. patentFamily.setInpadoc(patentInpadocFamilyLinkList.stream().filter(patentSimpleFamilyLink -> patentSimpleFamilyLink.getFamilyId().equals(item.getInpadocFamily())).map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList()));
  579. patentFamily.setPatSnap(patentPatSnapFamilyLinkList.stream().filter(patentSimpleFamilyLink -> patentSimpleFamilyLink.getFamilyId().equals(item.getPatSnapFamily())).map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList()));
  580. patentDTO.setFamily(patentFamily);
  581. patentDTO.setAffair(patentAffairService.getPatentAffairByPatentId(item.getId()));
  582. patentDTO.setAgent(patentAgentList.stream().filter(patentAgent -> patentAgent.getPatentId().equals(item.getId())).collect(Collectors.toList()));
  583. // TODO 性能优化
  584. records.add(patentDTO);
  585. });
  586. return records;
  587. }
  588. //查询对比文件信息
  589. public List<PatentDTO> getRmsComparePatent(PatentVO params) {
  590. List<Patent> dataPage = baseMapper.getPatent(params.getPatentNos(), -1, -1);
  591. List<PatentDTO> records = new ArrayList<>();
  592. List<Integer> patentIds = dataPage.stream().map(Patent::getId).collect(Collectors.toList());
  593. List<PatentApplicant> patentApplicantList = patentApplicantService.getPatentApplicantByPatentIds(patentIds);
  594. List<PatentInventor> patentInventorList = patentInventorService.getPatentInventorByPatentIds(patentIds);
  595. List<PatentClassNumberLink> patentClassNumberLinkList = patentClassNumberLinkService.getPatentClassNumberLinkByPatentIds(patentIds);
  596. List<PatentAgent> patentAgentList = patentAgentService.getPatentAgentByPatentIds(patentIds);
  597. List<PatentAgency> patentAgencyList = patentAgencyService.getPatentAgencyByIds(dataPage.stream().filter(item -> StringUtils.isNotEmpty(item.getAgencyId())).map(item -> Integer.parseInt(item.getAgencyId())).distinct().collect(Collectors.toList()));
  598. List<PatentSimpleFamilyLink> patentSimpleFamilyLinkList = patentSimpleFamilyLinkService.getPatentSimpleFamilyLinkByFamilyIds(dataPage.stream().map(Patent::getSimpleFamily).collect(Collectors.toList()));
  599. List<PatentSimpleFamilyLink> patentInpadocFamilyLinkList = patentSimpleFamilyLinkService.getPatentSimpleFamilyLinkByFamilyIds(dataPage.stream().map(Patent::getInpadocFamily).collect(Collectors.toList()));
  600. List<PatentSimpleFamilyLink> patentPatSnapFamilyLinkList = patentSimpleFamilyLinkService.getPatentSimpleFamilyLinkByFamilyIds(dataPage.stream().map(Patent::getPatSnapFamily).collect(Collectors.toList()));
  601. List<SystemDict> systemDictList = systemDictService.getSystemDictListByType(Arrays.asList(Constants.PATENT_TYPE, Constants.PATENT_SIMPLE_STATUS));
  602. dataPage.forEach(item -> {
  603. PatentDTO patentDTO = new PatentDTO();
  604. BeanUtils.copyProperties(item, patentDTO);
  605. patentDTO.setApplicationDate(DateUtils.formatDate(item.getApplicationDate(), DateUtils.YYYY_MM_DD));
  606. patentDTO.setPriorityDate(DateUtils.formatDate(item.getPriorityDate(), DateUtils.YYYY_MM_DD));
  607. patentDTO.setPublicDate(DateUtils.formatDate(item.getPublicDate(), DateUtils.YYYY_MM_DD));
  608. patentDTO.setPublicAccreditDate(DateUtils.formatDate(item.getPublicAccreditDate(), DateUtils.YYYY_MM_DD));
  609. patentDTO.setFirstPublicDate(DateUtils.formatDate(item.getFirstPublicDate(), DateUtils.YYYY_MM_DD));
  610. 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());
  611. patentDTO.setSimpleStatusInt(item.getSimpleStatus());
  612. patentDTO.setType(systemDictList.stream().filter(systemDict -> systemDict.getType().equals(Constants.PATENT_TYPE) && systemDict.getValue().equals(String.valueOf(item.getType()))).findFirst().orElse(new SystemDict()).getLabel());
  613. patentDTO.setApplicant(patentApplicantList.stream().filter(patentApplicant -> patentApplicant.getPatentId().equals(item.getId())).collect(Collectors.toList()));
  614. patentDTO.setInventor(patentInventorList.stream().filter(patentInventor -> patentInventor.getPatentId().equals(item.getId())).collect(Collectors.toList()));
  615. 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()));
  616. 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()));
  617. 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()));
  618. 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()));
  619. if (StringUtils.isNotEmpty(item.getAgencyId())) {
  620. patentDTO.setAgency(patentAgencyList.stream().filter(patentAgency -> patentAgency.getId().equals(Integer.parseInt(item.getAgencyId()))).findFirst().orElse(null));
  621. }
  622. PatentDTO.PatentFamily patentFamily = new PatentDTO.PatentFamily();
  623. patentFamily.setSimple(patentSimpleFamilyLinkList.stream().filter(patentSimpleFamilyLink -> patentSimpleFamilyLink.getFamilyId().equals(item.getSimpleFamily())).map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList()));
  624. patentFamily.setInpadoc(patentInpadocFamilyLinkList.stream().filter(patentSimpleFamilyLink -> patentSimpleFamilyLink.getFamilyId().equals(item.getInpadocFamily())).map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList()));
  625. patentFamily.setPatSnap(patentPatSnapFamilyLinkList.stream().filter(patentSimpleFamilyLink -> patentSimpleFamilyLink.getFamilyId().equals(item.getPatSnapFamily())).map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList()));
  626. patentDTO.setFamily(patentFamily);
  627. patentDTO.setAffair(patentAffairService.getPatentAffairByPatentId(item.getId()));
  628. patentDTO.setAgent(patentAgentList.stream().filter(patentAgent -> patentAgent.getPatentId().equals(item.getId())).collect(Collectors.toList()));
  629. // TODO 性能优化
  630. records.add(patentDTO);
  631. });
  632. return records;
  633. }
  634. // 获得对比专利号
  635. public String getComPantentNos(QueryPatentVO params) {
  636. if (params.getObligeeName() != null) {
  637. String obligeeName = params.getObligeeName().replace("(", "\\(");
  638. obligeeName = obligeeName.replace(")", "\\)");
  639. params.setObligeeName(obligeeName);
  640. }
  641. if (params.getApplicationName() != null) {
  642. String applicationName = params.getApplicationName().replace("(", "\\(");
  643. applicationName = applicationName.replace(")", "\\)");
  644. params.setApplicationName(applicationName);
  645. }
  646. List<String> patents = baseMapper.getListForRMS(params);
  647. return Response.success(patents);
  648. }
  649. // 获得带筛选条件的对比专利号
  650. public String getConPantentNos(QueryPatentVO params) {
  651. List<String> patents = baseMapper.getConPantentNos(params);
  652. return Response.success(patents);
  653. }
  654. // 获得带筛选条件的专利
  655. public String getConPantents(QueryPatentVO params) {
  656. if (params.getStartNumber() != null && params.getEndNumber() != null) {
  657. params.setEndNumber(params.getEndNumber() - params.getStartNumber() + 1);
  658. }
  659. List<Patent> patents = baseMapper.getConPantents(params);
  660. return Response.success(patents);
  661. }
  662. public PatentDTO getPatentDTOById(Integer id, Integer projectId) {
  663. //根据id查询专利
  664. Patent patent = baseMapper.selectById(id);
  665. PatentDTO patentDTO = new PatentDTO();
  666. //将patent的属性复制到patentDTO里
  667. BeanUtils.copyProperties(patent, patentDTO);
  668. //从字典表里查询字典数据
  669. List<SystemDict> systemDictList = systemDictService.getSystemDictListByType(Arrays.asList(Constants.PATENT_TYPE, Constants.PATENT_SIMPLE_STATUS, Constants.COUNTRIES));
  670. List<PatentClassNumberLink> patentClassNumberLinkList = patentClassNumberLinkService.getPatentClassNumberLinkByPatentIds(Collections.singletonList(id));
  671. if (patent.getPriorityNo() != null) {
  672. patentDTO.setPriorityNo(patent.getPriorityNo());
  673. } else {
  674. patentDTO.setPriorityNo("");
  675. }
  676. if (patent.getPriorityCountry() != null) {
  677. if (patent.getPriorityCountry().contains("\\|")) {
  678. List<String> countryList = StringUtils.changeStringToString(patent.getPriorityCountry().replaceAll(" ", ""), "\\|");
  679. patentDTO.setPriorityCountry(countryList);
  680. } else if (patent.getPriorityCountry().contains(",")) {
  681. List<String> countryList = StringUtils.changeStringToString(patent.getPriorityCountry().replaceAll(" ", ""), ",");
  682. patentDTO.setPriorityCountry(countryList);
  683. } else if (patent.getPriorityCountry().contains(";")) {
  684. List<String> countryList = StringUtils.changeStringToString(patent.getPriorityCountry().replaceAll(" ", ""), ";");
  685. patentDTO.setPriorityCountry(countryList);
  686. }
  687. } else {
  688. patentDTO.setPriorityCountry(Collections.singletonList(""));
  689. }
  690. patentDTO.setApplicationDate(DateUtils.formatDate(patent.getApplicationDate(), DateUtils.YYYY_MM_DD));
  691. patentDTO.setPriorityDate(DateUtils.formatDate(patent.getPriorityDate(), DateUtils.YYYY_MM_DD));
  692. patentDTO.setPublicDate(DateUtils.formatDate(patent.getPublicDate(), DateUtils.YYYY_MM_DD));
  693. patentDTO.setPublicAccreditDate(DateUtils.formatDate(patent.getPublicAccreditDate(), DateUtils.YYYY_MM_DD));
  694. patentDTO.setFirstPublicDate(DateUtils.formatDate(patent.getFirstPublicDate(), DateUtils.YYYY_MM_DD));
  695. 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());
  696. patentDTO.setType(systemDictList.stream().filter(systemDict -> systemDict.getType().equals(Constants.PATENT_TYPE) && systemDict.getValue().equals(String.valueOf(patent.getType()))).findFirst().orElse(new SystemDict()).getLabel());
  697. patentDTO.setLabel(patentLabelService.getPatentLabelByPatentIdAndProjectId(patent.getId(), projectId));
  698. patentDTO.setApplicant(patentApplicantService.getPatentApplicantByPatentId(patent.getId()));
  699. patentDTO.setInventor(patentInventorService.getPatentInventorByPatentId(patent.getId()));
  700. if (StringUtils.isNotEmpty(patent.getAgencyId())) {
  701. patentDTO.setAgency(patentAgencyService.getPatentAgencyById(Integer.parseInt(patent.getAgencyId())));
  702. } else {
  703. PatentAgency patentAgency = new PatentAgency();
  704. patentAgency.setName("");
  705. patentDTO.setAgency(patentAgency);
  706. }
  707. patentDTO.setAgent(patentAgentService.getPatentAgentByPatentId(patent.getId()));
  708. patentDTO.setAffair(patentAffairService.getPatentAffairByPatentId(patent.getId()));
  709. if (projectId != null) {
  710. patentDTO.setField(projectFieldService.getPatentFieldByPatentIdAndProjectId(projectId, patent.getId()));
  711. }
  712. if (StringUtils.isNotEmpty(patent.getPriorityCountry())) {
  713. List<String> priorityList = PatentUtils.formatValue(patent.getPriorityCountry());
  714. List<String> priorityCountryList = new ArrayList<>();
  715. for (String priorityCountry : priorityList) {
  716. priorityCountryList.add(systemDictList.stream().filter(systemDict -> systemDict.getType().equals(Constants.COUNTRIES) && systemDict.getValue().equals(priorityCountry)).findFirst().orElse(new SystemDict()).getLabel());
  717. }
  718. patentDTO.setPriorityCountry(priorityCountryList);
  719. }
  720. patentDTO.setInstruction(patentInstructionTextService.getPatentInstructionTextByPatentId(patent.getId()));
  721. patentDTO.setRights(patentRightService.getPatentRightByPatentId(patent.getId()));
  722. patentDTO.setImage(patentImageService.getPatentImageByPatentId(patent.getId()));
  723. patentDTO.setPdf(patentInstructionService.getPatentInstructionByPatentNo(patent.getPatentNo()));
  724. patentDTO.setIpc(patentClassNumberLinkList.stream().filter(patentClassNumberLink -> patentClassNumberLink.getType().equals(Constants.PATENT_CLASS_NUMBER_IPC) && patentClassNumberLink.getMain().equals(1)).findFirst().orElse(new PatentClassNumberLink()).getCode());
  725. patentDTO.setUpc(patentClassNumberLinkList.stream().filter(patentClassNumberLink -> patentClassNumberLink.getType().equals(Constants.PATENT_CLASS_NUMBER_UPC) && patentClassNumberLink.getMain().equals(1)).findFirst().orElse(new PatentClassNumberLink()).getCode());
  726. patentDTO.setIpcList(patentClassNumberLinkList.stream().filter(patentClassNumber -> patentClassNumber.getType().equals(Constants.PATENT_CLASS_NUMBER_IPC)).map(PatentClassNumberLink::getCode).distinct().collect(Collectors.toList()));
  727. patentDTO.setCpcList(patentClassNumberLinkList.stream().filter(patentClassNumber -> patentClassNumber.getType().equals(Constants.PATENT_CLASS_NUMBER_CPC)).map(PatentClassNumberLink::getCode).distinct().collect(Collectors.toList()));
  728. patentDTO.setUpcList(patentClassNumberLinkList.stream().filter(patentClassNumber -> patentClassNumber.getType().equals(Constants.PATENT_CLASS_NUMBER_UPC)).map(PatentClassNumberLink::getCode).distinct().collect(Collectors.toList()));
  729. patentDTO.setLocList(patentClassNumberLinkList.stream().filter(patentClassNumber -> patentClassNumber.getType().equals(Constants.PATENT_CLASS_NUMBER_LOC)).map(PatentClassNumberLink::getCode).distinct().collect(Collectors.toList()));
  730. return patentDTO;
  731. }
  732. public PatentDTO getPatentDTOById(String patentNo, Integer projectId) {
  733. LambdaQueryWrapper<Patent> wrapper = new LambdaQueryWrapper<>();
  734. wrapper.eq(Patent::getPatentNo, patentNo);
  735. List<Patent> patents = this.list(wrapper);
  736. PatentDTO patentDTO = new PatentDTO();
  737. //如果未查出专利则返回为空
  738. if (patents == null || patents.size() == 0) {
  739. return patentDTO;
  740. }
  741. Patent patent = patents.get(0);
  742. BeanUtils.copyProperties(patent, patentDTO);
  743. List<SystemDict> systemDictList = systemDictService.getSystemDictListByType(Arrays.asList(Constants.PATENT_TYPE, Constants.PATENT_SIMPLE_STATUS, Constants.COUNTRIES));
  744. List<PatentClassNumberLink> patentClassNumberLinkList = patentClassNumberLinkService.getPatentClassNumberLinkByPatentIds(Collections.singletonList(patent.getId()));
  745. if (patent.getPriorityNo() != null) {
  746. patentDTO.setPriorityNo(patent.getPriorityNo());
  747. } else {
  748. patentDTO.setPriorityNo("");
  749. }
  750. if (patent.getPriorityCountry() != null) {
  751. if (patent.getPriorityCountry().contains("\\|")) {
  752. List<String> countryList = StringUtils.changeStringToString(patent.getPriorityCountry().replaceAll(" ", ""), "\\|");
  753. patentDTO.setPriorityCountry(countryList);
  754. } else if (patent.getPriorityCountry().contains(",")) {
  755. List<String> countryList = StringUtils.changeStringToString(patent.getPriorityCountry().replaceAll(" ", ""), ",");
  756. patentDTO.setPriorityCountry(countryList);
  757. } else if (patent.getPriorityCountry().contains(";")) {
  758. List<String> countryList = StringUtils.changeStringToString(patent.getPriorityCountry().replaceAll(" ", ""), ";");
  759. patentDTO.setPriorityCountry(countryList);
  760. }
  761. } else {
  762. patentDTO.setPriorityCountry(Collections.singletonList(""));
  763. }
  764. patentDTO.setQuote("");
  765. if (patent.getQuote() != null) {
  766. patentDTO.setQuote(patent.getQuote());
  767. }
  768. patentDTO.setQuoted("");
  769. if (patent.getQuoted() != null) {
  770. patentDTO.setQuoted(patent.getQuoted());
  771. }
  772. //根据同族号,获得所有同族专利(三种同族)
  773. List<Integer> familyIds = new ArrayList<>();
  774. if (patent.getSimpleFamily() != null) {
  775. familyIds.add(patent.getSimpleFamily());
  776. }
  777. if (patent.getInpadocFamily() != null) {
  778. familyIds.add(patent.getInpadocFamily());
  779. }
  780. if (patent.getPatSnapFamily() != null) {
  781. familyIds.add(patent.getPatSnapFamily());
  782. }
  783. if (familyIds.size() != 0) {
  784. LambdaQueryWrapper<PatentSimpleFamilyLink> queryWrapper = new LambdaQueryWrapper<>();
  785. queryWrapper.in(PatentSimpleFamilyLink::getFamilyId, familyIds);
  786. List<PatentSimpleFamilyLink> patentSimpleFamilyLinks = patentSimpleFamilyLinkService.list(queryWrapper);
  787. List<String> familyPatentNos = patentSimpleFamilyLinks.stream().map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList());
  788. PatentDTO.PatentFamily patentFamily = new PatentDTO.PatentFamily();
  789. patentFamily.setSimple(familyPatentNos);
  790. patentDTO.setFamily(patentFamily);
  791. }
  792. patentDTO.setApplicationDate(DateUtils.formatDate(patent.getApplicationDate(), DateUtils.YYYY_MM_DD));
  793. patentDTO.setPriorityDate(DateUtils.formatDate(patent.getPriorityDate(), DateUtils.YYYY_MM_DD));
  794. patentDTO.setPublicDate(DateUtils.formatDate(patent.getPublicDate(), DateUtils.YYYY_MM_DD));
  795. patentDTO.setPublicAccreditDate(DateUtils.formatDate(patent.getPublicAccreditDate(), DateUtils.YYYY_MM_DD));
  796. patentDTO.setFirstPublicDate(DateUtils.formatDate(patent.getFirstPublicDate(), DateUtils.YYYY_MM_DD));
  797. 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());
  798. patentDTO.setSimpleStatusInt(patent.getSimpleStatus());
  799. patentDTO.setType(systemDictList.stream().filter(systemDict -> systemDict.getType().equals(Constants.PATENT_TYPE) && systemDict.getValue().equals(String.valueOf(patent.getType()))).findFirst().orElse(new SystemDict()).getLabel());
  800. patentDTO.setApplicant(patentApplicantService.getPatentApplicantByPatentId(patent.getId()));
  801. patentDTO.setInventor(patentInventorService.getPatentInventorByPatentId(patent.getId()));
  802. if (projectId != null) {
  803. patentDTO.setLabel(patentLabelService.getPatentLabelByPatentIdAndProjectId(patent.getId(), projectId));
  804. }
  805. if (StringUtils.isNotEmpty(patent.getAgencyId())) {
  806. patentDTO.setAgency(patentAgencyService.getPatentAgencyById(Integer.parseInt(patent.getAgencyId())));
  807. } else {
  808. PatentAgency patentAgency = new PatentAgency();
  809. patentAgency.setName("");
  810. patentDTO.setAgency(patentAgency);
  811. }
  812. patentDTO.setAgent(patentAgentService.getPatentAgentByPatentId(patent.getId()));
  813. patentDTO.setAffair(patentAffairService.getPatentAffairByPatentId(patent.getId()));
  814. if (StringUtils.isNotEmpty(patent.getPriorityCountry())) {
  815. List<String> priorityList = PatentUtils.formatValue(patent.getPriorityCountry());
  816. List<String> priorityCountryList = new ArrayList<>();
  817. for (String priorityCountry : priorityList) {
  818. priorityCountryList.add(systemDictList.stream().filter(systemDict -> systemDict.getType().equals(Constants.COUNTRIES) && systemDict.getValue().equals(priorityCountry)).findFirst().orElse(new SystemDict()).getLabel());
  819. }
  820. patentDTO.setPriorityCountry(priorityCountryList);
  821. }
  822. patentDTO.setInstruction(patentInstructionTextService.getPatentInstructionTextByPatentId(patent.getId()));
  823. patentDTO.setRights(patentRightService.getPatentRightByPatentId(patent.getId()));
  824. patentDTO.setImage(patentImageService.getPatentImageByPatentId(patent.getId()));
  825. patentDTO.setPdf(patentInstructionService.getPatentInstructionByPatentNo(patent.getPatentNo()));
  826. patentDTO.setIpc(patentClassNumberLinkList.stream().filter(patentClassNumberLink -> patentClassNumberLink.getType().equals(Constants.PATENT_CLASS_NUMBER_IPC) && patentClassNumberLink.getMain().equals(1)).findFirst().orElse(new PatentClassNumberLink()).getCode());
  827. patentDTO.setUpc(patentClassNumberLinkList.stream().filter(patentClassNumberLink -> patentClassNumberLink.getType().equals(Constants.PATENT_CLASS_NUMBER_UPC) && patentClassNumberLink.getMain().equals(1)).findFirst().orElse(new PatentClassNumberLink()).getCode());
  828. patentDTO.setIpcList(patentClassNumberLinkList.stream().filter(patentClassNumber -> patentClassNumber.getType().equals(Constants.PATENT_CLASS_NUMBER_IPC)).map(PatentClassNumberLink::getCode).distinct().collect(Collectors.toList()));
  829. patentDTO.setCpcList(patentClassNumberLinkList.stream().filter(patentClassNumber -> patentClassNumber.getType().equals(Constants.PATENT_CLASS_NUMBER_CPC)).map(PatentClassNumberLink::getCode).distinct().collect(Collectors.toList()));
  830. patentDTO.setUpcList(patentClassNumberLinkList.stream().filter(patentClassNumber -> patentClassNumber.getType().equals(Constants.PATENT_CLASS_NUMBER_UPC)).map(PatentClassNumberLink::getCode).distinct().collect(Collectors.toList()));
  831. patentDTO.setLocList(patentClassNumberLinkList.stream().filter(patentClassNumber -> patentClassNumber.getType().equals(Constants.PATENT_CLASS_NUMBER_LOC)).map(PatentClassNumberLink::getCode).distinct().collect(Collectors.toList()));
  832. return patentDTO;
  833. }
  834. public List<Integer> getQueryPatentIds(PatentVO params) {
  835. if (params.getSelected() != null && params.getSelected().size() != 0 && params.getSelectId() != null && params.getSelectId()) {
  836. return params.getSelected().stream().distinct().collect(Collectors.toList());
  837. }
  838. this.setQueryPatentParams(params);
  839. List<Patent> patentList = baseMapper.getPageList(params);
  840. return patentList.stream().map(Patent::getId).distinct().collect(Collectors.toList());
  841. }
  842. @Async
  843. public void exportPatent(TaskParams taskParams) {
  844. try {
  845. List<PatentExportVO> selected = JsonUtils.jsonToList(taskParams.getSelected(), PatentExportVO.class);
  846. List<Integer> ids = StringUtils.changeStringToInteger(taskParams.getIds(), ",");
  847. if (selected != null) {
  848. List<String> columns = selected.stream().filter(PatentExportVO::getSelected).map(PatentExportVO::getKey).distinct().collect(Collectors.toList());
  849. List<String> headers = selected.stream().filter(PatentExportVO::getSelected).map(PatentExportVO::getName).distinct().collect(Collectors.toList());
  850. String fileName = IdUtil.simpleUUID() + ".xls";
  851. String directoryName = fileUtils.createDirectory();
  852. String savePath = fileUtils.getSavePath(directoryName);
  853. HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
  854. HSSFSheet sheet = hssfWorkbook.createSheet();
  855. sheet.setDefaultColumnWidth(30);
  856. HSSFRow headerRow = sheet.createRow(0);
  857. headerRow.setHeight((short) 500);
  858. HSSFCellStyle headerCellStyle = hssfWorkbook.createCellStyle();
  859. HSSFCellStyle commonCellStyle = hssfWorkbook.createCellStyle();
  860. for (int i = 0; i < headers.size(); i++) {
  861. HSSFCell cell = headerRow.createCell(i);
  862. ExcelUtils.setExcelCellStyle(headerCellStyle);
  863. headerCellStyle.setAlignment(HorizontalAlignment.CENTER);
  864. headerCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
  865. headerCellStyle.setFillForegroundColor(HSSFColor.HSSFColorPredefined.SKY_BLUE.getIndex());
  866. headerCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
  867. headerCellStyle.setWrapText(true);
  868. cell.setCellStyle(headerCellStyle);
  869. cell.setCellValue(headers.get(i));
  870. }
  871. for (int i = 0; i < ids.size(); i++) {
  872. Map<String, Object> map = new LinkedHashMap<>();
  873. PatentDTO patent = this.getPatentDTOById(ids.get(i), taskParams.getProjectId());
  874. if (patent == null) {
  875. continue;
  876. }
  877. String country = PatentUtils.getPatentCountry(patent.getPatentNo());
  878. for (int j = 0; j < columns.size(); j++) {
  879. String column = columns.get(j);
  880. PatentExportVO patentExportVO = selected.stream().filter(item -> item.getKey().equals(column)).findFirst().orElse(new PatentExportVO());
  881. Object value = null;
  882. switch (column) {
  883. case "pname":
  884. value = patent.getName();
  885. break;
  886. case "pname_out":
  887. value = patent.getNameOut();
  888. break;
  889. case "patentno":
  890. value = patent.getPatentNo();
  891. break;
  892. case "abstract":
  893. value = patent.getAbstractStr();
  894. break;
  895. case "abstract_out":
  896. value = patent.getAbstractOut();
  897. break;
  898. case "abstract_path":
  899. break;
  900. case "applicationno":
  901. value = patent.getApplicationNo();
  902. break;
  903. case "appdate":
  904. value = patent.getApplicationDate();
  905. break;
  906. case "publicno":
  907. value = patent.getPublicNo();
  908. break;
  909. case "publicdate":
  910. value = patent.getPublicDate();
  911. break;
  912. case "fpublicdate":
  913. value = patent.getFirstPublicDate();
  914. break;
  915. case "publictono":
  916. value = patent.getPublicAccreditNo();
  917. break;
  918. case "publictodate":
  919. value = patent.getPublicAccreditDate();
  920. break;
  921. case "tags":
  922. value = StringUtils.join(patent.getLabel().stream().map(PatentLabel::getName).distinct().collect(Collectors.toList()), "\n");
  923. break;
  924. case "bureau":
  925. value = patent.getBureau();
  926. break;
  927. case "simplefamily":
  928. List<PatentSimpleFamilyLink> patentSimpleFamilyLinkList = patentSimpleFamilyLinkService.getPatentSimpleFamilyLinkByFamilyIds(Collections.singletonList(patent.getSimpleFamily()));
  929. value = StringUtils.join(patentSimpleFamilyLinkList.stream().map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList()), Constants.SEPARATOR_VERTICAL_BAR);
  930. break;
  931. case "inpadocfamily":
  932. List<PatentSimpleFamilyLink> patentInpadocFamilyLinkList = patentSimpleFamilyLinkService.getPatentSimpleFamilyLinkByFamilyIds(Collections.singletonList(patent.getInpadocFamily()));
  933. value = StringUtils.join(patentInpadocFamilyLinkList.stream().map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList()), Constants.SEPARATOR_VERTICAL_BAR);
  934. break;
  935. case "patsnapfamily":
  936. List<PatentSimpleFamilyLink> patentPatSnapFamilyLinkList = patentSimpleFamilyLinkService.getPatentSimpleFamilyLinkByFamilyIds(Collections.singletonList(patent.getPatSnapFamily()));
  937. value = StringUtils.join(patentPatSnapFamilyLinkList.stream().map(PatentSimpleFamilyLink::getPatentNo).collect(Collectors.toList()), Constants.SEPARATOR_VERTICAL_BAR);
  938. break;
  939. case "ipc":
  940. value = StringUtils.join(patent.getIpcList(), Constants.SEPARATOR_VERTICAL_BAR);
  941. break;
  942. case "upc":
  943. value = StringUtils.join(patent.getUpcList(), Constants.SEPARATOR_VERTICAL_BAR);
  944. break;
  945. case "intclassno":
  946. value = patent.getIpc();
  947. break;
  948. case "intclasscpcno":
  949. value = StringUtils.join(patent.getCpcList(), Constants.SEPARATOR_VERTICAL_BAR);
  950. break;
  951. case "intclassupcno":
  952. value = patent.getUpc();
  953. break;
  954. case "intclasslocno":
  955. value = StringUtils.join(patent.getLocList(), Constants.SEPARATOR_VERTICAL_BAR);
  956. break;
  957. case "pstatus":
  958. value = patent.getSimpleStatus();
  959. break;
  960. case "ptype":
  961. value = patent.getType();
  962. break;
  963. case "law_datetime":
  964. value = PatentUtils.getPatentAffair(patent.getAffair(), 0);
  965. break;
  966. case "law_status":
  967. value = PatentUtils.getPatentAffair(patent.getAffair(), 1);
  968. break;
  969. case "law_simplestatus":
  970. value = PatentUtils.getPatentAffair(patent.getAffair(), 2);
  971. break;
  972. case "law_content":
  973. value = PatentUtils.getPatentAffair(patent.getAffair(), 3);
  974. break;
  975. case "applicant":
  976. 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);
  977. break;
  978. case "applicant1":
  979. 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);
  980. break;
  981. case "rightholder":
  982. 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);
  983. break;
  984. case "rightholder1":
  985. 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);
  986. break;
  987. case "applicantcountry":
  988. value = PatentUtils.getPeopleCountry(patent.getApplicant().stream().filter(item -> item.getDataType().equals(2)).collect(Collectors.toList()));
  989. break;
  990. case "rightholdercountry":
  991. value = PatentUtils.getPeopleCountry(patent.getApplicant().stream().filter(item -> item.getDataType().equals(1)).collect(Collectors.toList()));
  992. break;
  993. case "applicantaddress":
  994. value = PatentUtils.getPeopleAddress(patent.getApplicant().stream().filter(item -> item.getDataType().equals(2)).collect(Collectors.toList()));
  995. break;
  996. case "rightholderaddress":
  997. value = PatentUtils.getPeopleAddress(patent.getApplicant().stream().filter(item -> item.getDataType().equals(1)).collect(Collectors.toList()));
  998. break;
  999. case "applicantaddr":
  1000. break;
  1001. case "rightholderaddr":
  1002. break;
  1003. case "firstapplicant":
  1004. PatentApplicant firstApplicant1 = patent.getApplicant().stream().filter(item -> item.getDataType().equals(2) && item.getOrder().equals(0)).findFirst().orElse(null);
  1005. if (firstApplicant1 != null) {
  1006. value = firstApplicant1.getName();
  1007. }
  1008. break;
  1009. case "firstrightholder":
  1010. PatentApplicant firstApplicant3 = patent.getApplicant().stream().filter(item -> item.getDataType().equals(1) && item.getOrder().equals(0)).findFirst().orElse(null);
  1011. if (firstApplicant3 != null) {
  1012. value = firstApplicant3.getName();
  1013. }
  1014. break;
  1015. case "firstapplicantaddr":
  1016. PatentApplicant firstApplicant2 = patent.getApplicant().stream().filter(item -> item.getDataType().equals(2) && item.getOrder().equals(0)).findFirst().orElse(null);
  1017. if (firstApplicant2 != null) {
  1018. value = firstApplicant2.getAddressStr();
  1019. }
  1020. break;
  1021. case "firstrightholderaddr":
  1022. PatentApplicant firstApplicant4 = patent.getApplicant().stream().filter(item -> item.getDataType().equals(1) && item.getOrder().equals(0)).findFirst().orElse(null);
  1023. if (firstApplicant4 != null) {
  1024. value = firstApplicant4.getAddressStr();
  1025. }
  1026. break;
  1027. case "firstapplicantnum":
  1028. value = patent.getApplicantNum();
  1029. break;
  1030. case "inventor":
  1031. value = StringUtils.join(patent.getInventor().stream().map(PatentInventor::getName).distinct().collect(Collectors.toList()), Constants.SEPARATOR_VERTICAL_BAR);
  1032. break;
  1033. case "firstnventoraddr":
  1034. value = patent.getInventor().stream().filter(PatentInventor::getFirst).findFirst().orElse(new PatentInventor()).getAddress();
  1035. break;
  1036. case "firstnventor":
  1037. value = patent.getInventor().stream().filter(PatentInventor::getFirst).findFirst().orElse(new PatentInventor()).getName();
  1038. break;
  1039. case "inventornum":
  1040. value = patent.getInventorNum();
  1041. break;
  1042. case "num2":
  1043. value = patent.getRightNum();
  1044. break;
  1045. case "content":
  1046. case "content_out":
  1047. case "selfcontent":
  1048. List<String> content = new ArrayList<>();
  1049. if (column.equals("content")) {
  1050. content = patent.getRights().stream().map(PatentRight::getContent).collect(Collectors.toList());
  1051. }
  1052. if (column.equals("content_out")) {
  1053. content = patent.getRights().stream().map(PatentRight::getContentOut).collect(Collectors.toList());
  1054. }
  1055. if (column.equals("selfcontent")) {
  1056. content = patent.getRights().stream().filter(item -> item.getType().equals(1)).map(PatentRight::getContent).collect(Collectors.toList());
  1057. }
  1058. StringBuffer contentBuffer = new StringBuffer();
  1059. for (String s : content) {
  1060. contentBuffer.append(s);
  1061. switch (country) {
  1062. case "JP":
  1063. case "CN":
  1064. contentBuffer.append("。\n");
  1065. break;
  1066. default:
  1067. contentBuffer.append("\n");
  1068. }
  1069. }
  1070. value = contentBuffer.toString();
  1071. break;
  1072. case "priorityno":
  1073. value = patent.getPriorityNo();
  1074. break;
  1075. case "prioritycountry":
  1076. value = patent.getPriorityCountry();
  1077. break;
  1078. case "prioritydate":
  1079. value = patent.getPriorityDate();
  1080. break;
  1081. case "page":
  1082. value = patent.getDocPage();
  1083. break;
  1084. case "code":
  1085. value = patent.getCode();
  1086. break;
  1087. case "manual":
  1088. if (patent.getInstruction() != null) {
  1089. value = patent.getInstruction().getManual();
  1090. }
  1091. break;
  1092. case "simplefamilynum":
  1093. value = patent.getSimpleFamilyNum();
  1094. break;
  1095. case "inpadocfamilynum":
  1096. value = patent.getInpadocFamilyNum();
  1097. break;
  1098. case "patsnapfamilynum":
  1099. value = patent.getPatSnapFamilyNum();
  1100. break;
  1101. case "quoteno":
  1102. value = patent.getQuoteNum();
  1103. break;
  1104. case "quotedno":
  1105. value = patent.getQuotedNum();
  1106. break;
  1107. case "quotedno3":
  1108. value = patent.getQuotedNum3();
  1109. break;
  1110. case "quotedno5":
  1111. value = patent.getQuotedNum5();
  1112. break;
  1113. case "agency":
  1114. PatentAgency agency = patent.getAgency();
  1115. if (agency != null) {
  1116. value = agency.getName();
  1117. }
  1118. break;
  1119. case "agent":
  1120. value = StringUtils.join(patent.getAgent().stream().map(PatentAgent::getName).distinct().collect(Collectors.toList()), Constants.SEPARATOR_VERTICAL_BAR);
  1121. break;
  1122. case "wonational":
  1123. value = patent.getWo();
  1124. break;
  1125. case "examiner":
  1126. value = patent.getExaminer();
  1127. break;
  1128. case "assexaminer":
  1129. value = patent.getAidExaminer();
  1130. break;
  1131. case "quote":
  1132. value = patent.getQuote();
  1133. break;
  1134. case "quoted":
  1135. value = patent.getQuoted();
  1136. break;
  1137. case "nonpatentquote":
  1138. value = patent.getNotPatentQuote();
  1139. break;
  1140. case "epcountry":
  1141. value = patent.getEpStatus();
  1142. break;
  1143. default:
  1144. PatentDTO.Field field = patent.getField().stream().filter(item -> item.getId().equals(Integer.parseInt(column))).findFirst().orElse(null);
  1145. if (field != null) {
  1146. value = StringUtils.join(field.getSelected(), "\n");
  1147. }
  1148. }
  1149. map.put(patentExportVO.getName(), value);
  1150. }
  1151. HSSFRow row = sheet.createRow(i + 1);
  1152. row.setHeight((short) 800);
  1153. for (String key : map.keySet()) {
  1154. int index = headers.indexOf(key);
  1155. if (index != -1) {
  1156. HSSFCell cell = row.createCell(index);
  1157. ExcelUtils.setExcelCellStyle(commonCellStyle);
  1158. commonCellStyle.setVerticalAlignment(VerticalAlignment.TOP);
  1159. commonCellStyle.setWrapText(true);
  1160. cell.setCellStyle(commonCellStyle);
  1161. if (key.equals("摘要附图")) {
  1162. if (StringUtils.isNotEmpty(patent.getAbstractPath())) {
  1163. try {
  1164. byte[] pictureData = FileUtil.readBytes(fileUtils.getSystemPath(patent.getAbstractPath()));
  1165. if (pictureData != null) {
  1166. ExcelUtils.writePicture(sheet, index, i + 1, pictureData, HSSFWorkbook.PICTURE_TYPE_JPEG);
  1167. }
  1168. row.setHeight((short) 2500);
  1169. } catch (Exception e) {
  1170. }
  1171. }
  1172. } else if (StringUtils.isNotNull(map.get(key))) {
  1173. cell.setCellValue(String.valueOf(map.get(key)));
  1174. }
  1175. }
  1176. }
  1177. Integer total = ids.size();
  1178. WebSocketServer.sendInfo(Response.websocket(new TaskWebSocketDTO()
  1179. .setTaskId(taskParams.getTaskId())
  1180. .setProjectId(taskParams.getProjectId())
  1181. .setComplete(false)
  1182. .setIndex(i)
  1183. .setTaskType(Constants.TASK_EXPORT_PATENT)
  1184. .setPercentage(total == 0 ? 0 : Math.round((total.equals(i) ? (i * 1D) : (i + 1D)) / total * 100D))
  1185. .setFileName("")
  1186. .setOldName("")
  1187. .setUrl("")
  1188. .setTotal(total), ResponseEnum.PATENT_EXPORT_TASK_SUCCESS), taskParams.getUserId());
  1189. }
  1190. FileOutputStream fos = new FileOutputStream(savePath + fileName);
  1191. hssfWorkbook.write(fos);
  1192. fos.flush();
  1193. fos.close();
  1194. String url = fileUtils.getDirectory(fileName);
  1195. taskService.updateTime(taskParams.getTaskId(), 2, DateUtils.getDateTime(), url, fileName);
  1196. WebSocketServer.sendInfo(Response.websocket(new TaskWebSocketDTO()
  1197. .setTaskId(taskParams.getTaskId())
  1198. .setProjectId(taskParams.getProjectId())
  1199. .setComplete(true)
  1200. .setIndex(ids.size())
  1201. .setTaskType(Constants.TASK_EXPORT_PATENT)
  1202. .setPercentage(100L)
  1203. .setFileName(fileName)
  1204. .setOldName("")
  1205. .setUrl(url)
  1206. .setTotal(ids.size()), ResponseEnum.PATENT_EXPORT_TASK_SUCCESS), taskParams.getUserId());
  1207. }
  1208. } catch (Exception e) {
  1209. e.printStackTrace();
  1210. taskService.updateTime(taskParams.getTaskId(), 3, DateUtils.getDateTime(), null, null);
  1211. WebSocketServer.sendInfo(Response.error(ResponseEnum.PATENT_EXPORT_TASK_ERROR), taskParams.getUserId());
  1212. }
  1213. }
  1214. public IPage<PatentQueryFieldSourceDTO> getPatentQuerySourcePageList(PatentQueryFieldSourceVO params) {
  1215. return this.getPatentAttributeSourcePageList(params);
  1216. }
  1217. public IPage<PatentQueryFieldSourceDTO> getPatentAttributeSourcePageList(PatentQueryFieldSourceVO params) {
  1218. this.setPatentQuerySourceParams(params);
  1219. if (params.getKey().equals("40-0")) {
  1220. Integer projectId = params.getProjectId();
  1221. List<PatentQueryFieldSourceDTO> dataList = baseMapper.getCountStatus(projectId);
  1222. List<PatentQueryFieldSourceDTO> lstA = new ArrayList<>();
  1223. List<PatentQueryFieldSourceDTO> lstB = new ArrayList<>();
  1224. dataList.forEach(item -> {
  1225. if (StringUtils.changeStringToString(item.getLabel(), "\\|").size() > 1) {
  1226. lstA.add(item);
  1227. } else {
  1228. lstB.add(item);
  1229. }
  1230. });
  1231. lstA.forEach(item -> {
  1232. List<String> stringList = StringUtils.changeStringToString(item.getLabel(), "\\|");
  1233. stringList.forEach(x -> {
  1234. List<PatentQueryFieldSourceDTO> lstC = new ArrayList<>();
  1235. for (PatentQueryFieldSourceDTO patentQueryFieldSourceDTO : lstB) {
  1236. if (!lstB.stream().map(PatentQueryFieldSourceDTO::getLabel).collect(Collectors.toList()).contains(x)) {
  1237. PatentQueryFieldSourceDTO a = new PatentQueryFieldSourceDTO();
  1238. a.setCount(item.getCount());
  1239. a.setLabel(x);
  1240. lstC.add(a);
  1241. break;
  1242. }
  1243. if (patentQueryFieldSourceDTO.getLabel().equals(x)) {
  1244. patentQueryFieldSourceDTO.setCount(patentQueryFieldSourceDTO.getCount() + item.getCount());
  1245. }
  1246. }
  1247. lstB.addAll(lstC);
  1248. });
  1249. });
  1250. List<SystemDict> systemDictList = systemDictService.getSystemDictListByType(Collections.singletonList(Constants.PATENT_STATUS));
  1251. lstB.forEach(b -> {
  1252. Integer status = Integer.parseInt(systemDictList.stream()
  1253. .filter(systemDict -> systemDict.getType().equals(Constants.PATENT_STATUS) && systemDict.getLabel().equals(b.getLabel()))
  1254. .findFirst()
  1255. .orElse(new SystemDict()).getValue());
  1256. b.setValue(String.valueOf(status));
  1257. });
  1258. IPage<PatentQueryFieldSourceDTO> pageList = baseMapper.getPatentQuerySourcePageList(new Page<>(params.getCurrent(), params.getSize()), params, new ArrayList<>());
  1259. pageList.setRecords(lstB);
  1260. return pageList;
  1261. }
  1262. IPage<PatentQueryFieldSourceDTO> pageList = baseMapper.getPatentQuerySourcePageList(new Page<>(params.getCurrent(), params.getSize()), params, new ArrayList<>());
  1263. pageList.getRecords().forEach(item -> item.setIds(null));
  1264. return pageList;
  1265. }
  1266. public List<PatentQueryFieldSourceDTO> getPatentAttributeSourceList(PatentQueryFieldSourceVO params, List<Integer> patentIds) {
  1267. this.setPatentQuerySourceParams(params);
  1268. List<PatentQueryFieldSourceDTO> dataList = baseMapper.getPatentQuerySourcePageList(params, patentIds);
  1269. return dataList;
  1270. }
  1271. private void setPatentQuerySourceParams(PatentQueryFieldSourceVO params) {
  1272. List<Integer> field = StringUtils.changeStringToInteger(params.getKey(), "-");
  1273. Integer type = 0;
  1274. Integer level = 0;
  1275. Integer status = 0;
  1276. switch (params.getKey()) {
  1277. case "18-6":
  1278. case "18-7":
  1279. case "18-8":
  1280. case "23-6":
  1281. case "23-7":
  1282. case "23-8":
  1283. params.setApplicantType(2);
  1284. break;
  1285. case "19-6":
  1286. case "19-7":
  1287. case "19-8":
  1288. case "24-6":
  1289. case "24-7":
  1290. case "24-8":
  1291. params.setApplicantType(1);
  1292. break;
  1293. case "29-17":
  1294. case "30-17":
  1295. case "29-18":
  1296. case "29-19":
  1297. case "29-20":
  1298. case "30-18":
  1299. case "30-19":
  1300. case "30-20":
  1301. params.setApplicantType(field.get(0) == 29 ? 2 : 1);
  1302. break;
  1303. default:
  1304. params.setCustomFieldId(field.get(0));
  1305. if (params.getType().equals("6") && field.get(1).equals(0)) {
  1306. params.setCustomFieldTreeType(0);
  1307. } else {
  1308. params.setCustomFieldTreeType(null);
  1309. }
  1310. }
  1311. }
  1312. public void updatePatentCustomField(PatentCustomFieldParams params) {
  1313. List<CustomFieldDTO> dataList = new ArrayList<>();
  1314. for (String key : params.keySet()) {
  1315. List<String> fields = StringUtils.changeStringToString(key, ":");
  1316. if (fields.size() == 2) {
  1317. Object name = fields.get(0);
  1318. Object selected = params.get(key);
  1319. List<String> select = JsonUtils.jsonToList(JsonUtils.objectToJson(selected), String.class);
  1320. if (StringUtils.isNull(select)) {
  1321. select = new ArrayList<>();
  1322. }
  1323. CustomFieldDTO data = new CustomFieldDTO();
  1324. data.setName(name.toString());
  1325. data.setSelected(select);
  1326. data.setType(Integer.parseInt(fields.get(1)));
  1327. dataList.add(data);
  1328. }
  1329. }
  1330. for (CustomFieldDTO data : dataList) {
  1331. ProjectField projectField = projectFieldService.getProjectFieldByNameAndType(data.getName(), data.getType(), params.getProjectId(), params.getUserId());
  1332. projectFieldPatentLinkService.deleteByPatentIdAndProjectIdAndFieldId(params.getPatentId(), params.getProjectId(), projectField.getId());
  1333. switch (projectField.getType()) {
  1334. case 0:
  1335. case 1:
  1336. case 2:
  1337. for (String text : data.getSelected()) {
  1338. ProjectFieldText projectFieldText = projectFieldTextService.getProjectFieldTextByNameAndFieldId(text, projectField.getId());
  1339. if (projectFieldText == null) {
  1340. projectFieldText = new ProjectFieldText();
  1341. projectFieldText.setFieldId(projectField.getId());
  1342. projectFieldText.setText(text);
  1343. projectFieldText.insert();
  1344. }
  1345. projectFieldPatentLinkService.updateProjectPatentLink(params.getPatentId(), projectField.getType(), projectField.getId(), projectFieldText.getId(), params.getUserId(), params.getProjectId());
  1346. }
  1347. break;
  1348. case 3:
  1349. case 4:
  1350. case 5:
  1351. for (String option : data.getSelected()) {
  1352. ProjectFieldOption projectFieldOption = projectFieldOptionService.getProjectFieldOptionByNameAndFieldId(option, projectField.getId());
  1353. if (projectFieldOption == null) {
  1354. projectFieldOption = new ProjectFieldOption();
  1355. projectFieldOption.setFieldId(projectField.getId());
  1356. projectFieldOption.setName(option);
  1357. projectFieldOption.insert();
  1358. }
  1359. projectFieldPatentLinkService.updateProjectPatentLink(params.getPatentId(), projectField.getType(), projectField.getId(), projectFieldOption.getId(), params.getUserId(), params.getProjectId());
  1360. }
  1361. break;
  1362. case 6:
  1363. for (String tree : data.getSelected()) {
  1364. List<String> treeNode = StringUtils.changeStringToString(tree, "\\\\");
  1365. Integer treeNodeId = projectFieldTreeService.getTreeNodeIdByPathNameAndUpdateTreeData(treeNode, projectField);
  1366. if (treeNodeId != 0) {
  1367. projectFieldPatentLinkService.updateProjectPatentLink(params.getPatentId(), projectField.getType(), projectField.getId(), treeNodeId, params.getUserId(), params.getProjectId());
  1368. }
  1369. }
  1370. break;
  1371. }
  1372. }
  1373. }
  1374. public Map<String, Object> getBetweenPatentList(PatentVO params) {
  1375. this.setQueryPatentParams(params);
  1376. List<Patent> patentList = baseMapper.getPageList(params);
  1377. int index = patentList.stream().map(Patent::getId).collect(Collectors.toList()).indexOf(params.getPatentId());
  1378. Map<String, Object> map = new HashMap<>();
  1379. if (index > 0) {
  1380. Patent patent = patentList.get(index - 1);
  1381. Map<String, Object> prev = new HashMap<>();
  1382. prev.put("id", patent.getId());
  1383. prev.put("patentNo", patent.getPatentNo());
  1384. prev.put("total", index);
  1385. map.put("prev", prev);
  1386. }
  1387. if (index < patentList.size() - 1) {
  1388. Patent patent = patentList.get(index + 1);
  1389. Map<String, Object> next = new HashMap<>();
  1390. next.put("id", patent.getId());
  1391. next.put("patentNo", patent.getPatentNo());
  1392. next.put("total", patentList.size() - index - 1);
  1393. map.put("next", next);
  1394. }
  1395. return map;
  1396. }
  1397. 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) {
  1398. List<Patent> importPatentList = JsonUtils.jsonToList(patentJson, Patent.class);
  1399. List<PatentAffair> importPatentAffairList = JsonUtils.jsonToList(patentAffairJson, PatentAffair.class);
  1400. List<PatentAgency> importPatentAgencyList = JsonUtils.jsonToList(patentAgencyJson, PatentAgency.class);
  1401. List<PatentAgent> importPatentAgentList = JsonUtils.jsonToList(patentAgentJson, PatentAgent.class);
  1402. List<PatentAgentLink> importPatentAgentLinkList = JsonUtils.jsonToList(patentAgentLinkJson, PatentAgentLink.class);
  1403. List<PatentInventor> importPatentInventorList = JsonUtils.jsonToList(patentInventorJson, PatentInventor.class);
  1404. List<PatentInventorMerge> importPatentInventorMergeList = JsonUtils.jsonToList(patentInventorMergeJson, PatentInventorMerge.class);
  1405. List<PatentInventorLink> importPatentInventorLinkList = JsonUtils.jsonToList(patentInventorLinkJson, PatentInventorLink.class);
  1406. List<PatentApplicant> importPatentApplicantList = JsonUtils.jsonToList(patentApplicantJson, PatentApplicant.class);
  1407. List<PatentApplicantLink> importPatentApplicantLinkList = JsonUtils.jsonToList(patentApplicantLinkJson, PatentApplicantLink.class);
  1408. List<PatentApplicantMergeLink> importPatentApplicantMergeLinkList = JsonUtils.jsonToList(patentApplicantMergeLinkJson, PatentApplicantMergeLink.class);
  1409. List<PatentSimpleFamily> importPatentSimpleFamilyList = JsonUtils.jsonToList(patentFamilyJson, PatentSimpleFamily.class);
  1410. List<PatentSimpleFamilyLink> importPatentSimpleFamilyLinkList = JsonUtils.jsonToList(patentFamilyLinkJson, PatentSimpleFamilyLink.class);
  1411. List<PatentClassNumberLink> importPatentClassNumberLinkList = JsonUtils.jsonToList(patentClassNumberJson, PatentClassNumberLink.class);
  1412. List<PatentInstructionText> importPatentInstructionTextList = JsonUtils.jsonToList(patentInstructionTextJson, PatentInstructionText.class);
  1413. List<PatentRight> importPatentRightList = JsonUtils.jsonToList(patentRightJson, PatentRight.class);
  1414. List<PatentLicensor> importPatentLicensorList = JsonUtils.jsonToList(patentLicensorJson, PatentLicensor.class);
  1415. List<PatentPledge> importPatentPledgeList = JsonUtils.jsonToList(patentPledgeJson, PatentPledge.class);
  1416. List<Patent> localPatentList = this.getPatentListByPatentNo(importPatentList.stream().map(Patent::getPatentNo).collect(Collectors.toList()));
  1417. List<Patent> patentList = new ArrayList<>();
  1418. for (Patent importPatent : importPatentList) {
  1419. Patent localPatent = localPatentList.stream().filter(item -> item.getPatentNo().equals(importPatent.getPatentNo())).findFirst().orElse(null);
  1420. Integer patentId;
  1421. if (localPatent == null) {
  1422. localPatent = new Patent();
  1423. patentId = null;
  1424. } else {
  1425. patentId = localPatent.getId();
  1426. }
  1427. BeanUtils.copyProperties(importPatent, localPatent);
  1428. localPatent.setId(patentId);
  1429. if (StringUtils.isNotEmpty(importPatent.getAgencyId())) {
  1430. PatentAgency importPatentAgency = importPatentAgencyList.stream().filter(item -> item.getId().equals(Integer.valueOf(importPatent.getAgencyId()))).findFirst().orElse(new PatentAgency());
  1431. localPatent.setAgencyId(patentAgencyService.getAgencyStringIdByName(importPatentAgency.getName()));
  1432. }
  1433. localPatent.insertOrUpdate();
  1434. patentList.add(localPatent);
  1435. }
  1436. for (Patent patent : patentList) {
  1437. Patent importPatent = importPatentList.stream().filter(item -> item.getPatentNo().equals(patent.getPatentNo())).findFirst().orElse(new Patent());
  1438. patentAffairService.importPatentAffair(patent, importPatentList, importPatentAffairList);
  1439. patentAgentService.importPatentAgent(patent.getId(), importPatent.getId(), importPatentAgentList, importPatentAgentLinkList);
  1440. patentSimpleFamilyService.importPatentSimpleFamily(patent, importPatentSimpleFamilyList, importPatentSimpleFamilyLinkList);
  1441. patentInventorService.importPatentInventor(patent.getId(), importPatent.getId(), importPatentInventorList, importPatentInventorLinkList);
  1442. patentApplicantService.importPatentApplicant(projectId, patent.getId(), importPatent.getId(), importPatentApplicantList, importPatentApplicantLinkList);
  1443. patentClassNumberLinkService.importPatentClassNumberLink(patent.getId(), importPatent.getId(), importPatentClassNumberLinkList);
  1444. patentInstructionTextService.importPatentInstructionText(patent.getId(), importPatent.getId(), importPatentInstructionTextList);
  1445. patentRightService.importPatentRight(patent.getId(), importPatent.getId(), importPatentRightList);
  1446. patentLicensorService.importPatentLicensor(patent.getId(), importPatent.getId(), importPatentLicensorList);
  1447. patentPledgeService.importPatentPledge(patent.getId(), importPatent.getId(), importPatentPledgeList);
  1448. }
  1449. patentInventorMergeService.importPatentInventorMergeLink(projectId, importPatentInventorList, importPatentInventorMergeList);
  1450. patentApplicantMergeLinkService.importPatentApplicantMergeLink(projectId, importPatentApplicantList, importPatentApplicantMergeLinkList);
  1451. }
  1452. public String getPatentNos(Integer projectId) {
  1453. //根据专题库号获得专利id
  1454. LambdaQueryWrapper<ProjectPatentLink> wrapper = new LambdaQueryWrapper<>();
  1455. wrapper.select(ProjectPatentLink::getPatentId).eq(ProjectPatentLink::getProjectId, projectId);
  1456. List<ProjectPatentLink> projectPatentLinkList = projectPatentLinkService.list(wrapper);
  1457. List<Integer> patentIds = projectPatentLinkList.stream().map(ProjectPatentLink::getPatentId).collect(Collectors.toList());
  1458. //根据专利Id获得专利号
  1459. LambdaQueryWrapper<Patent> queryWrapper = new LambdaQueryWrapper<>();
  1460. queryWrapper.in(Patent::getId, patentIds);
  1461. List<Patent> patents = this.list(queryWrapper);
  1462. List<String> patentNos = patents.stream().map(Patent::getPatentNo).collect(Collectors.toList());
  1463. return Response.success(patentNos);
  1464. }
  1465. public String getPagination(List<String> list, int location) {
  1466. Map map = new HashMap();
  1467. LambdaQueryWrapper<Patent> wrapper = new LambdaQueryWrapper<>();
  1468. wrapper.in(Patent::getPatentNo, list);
  1469. Integer totalNumber = Math.toIntExact(this.count(wrapper));
  1470. if (location >= totalNumber) {
  1471. location = totalNumber;
  1472. int a = location - 2;
  1473. int b = 2;
  1474. List<Patent> patent = patentMapper.getPatent(list, a, b);
  1475. int front = location - 1;
  1476. String str1 = patent.get(0).getPatentNo();
  1477. String srr2 = patent.get(1).getPatentNo();
  1478. int i = patent.get(0).getId();
  1479. int j = patent.get(1).getId();
  1480. map.put("frontID", i);
  1481. map.put("currentID", j);
  1482. map.put("behindPatentNo", null);
  1483. map.put("frontNumber", front);
  1484. map.put("behindNumber", 0);
  1485. map.put("frontPatentNo", str1);
  1486. map.put("currentPatentNo", srr2);
  1487. map.put("totalNumber", totalNumber);
  1488. return Response.success(map);
  1489. }
  1490. if (location == 1) {
  1491. int a = 0;
  1492. int p = 2;
  1493. List<Patent> patent = patentMapper.getPatent(list, a, p);
  1494. String str1 = patent.get(0).getPatentNo();
  1495. String srr2 = patent.get(1).getPatentNo();
  1496. int i = patent.get(0).getId();
  1497. int j = patent.get(1).getId();
  1498. map.put("currentID", i);
  1499. map.put("behindID", j);
  1500. map.put("currentPatentNo", str1);
  1501. map.put("behindPatentNo", srr2);
  1502. map.put("frontPatentNo", null);
  1503. map.put("frontNumber", 0);
  1504. int behindNumber = totalNumber - location;
  1505. map.put("behindNumber", behindNumber);
  1506. map.put("totalNumber", totalNumber);
  1507. return Response.success(map);
  1508. }
  1509. int a = location - 2;
  1510. int p = 3;
  1511. List<Patent> patent = patentMapper.getPatent(list, a, p);
  1512. String str1 = patent.get(0).getPatentNo();
  1513. String str2 = patent.get(1).getPatentNo();
  1514. String str3 = patent.get(2).getPatentNo();
  1515. int i = patent.get(0).getId();
  1516. int j = patent.get(1).getId();
  1517. int k = patent.get(2).getId();
  1518. map.put("frontID", i);
  1519. map.put("currentID", j);
  1520. map.put("behindID", k);
  1521. map.put("frontPatentNo", str1);
  1522. map.put("currentPatentNo", str2);
  1523. map.put("behindPatentNo", str3);
  1524. map.put("totalNumber", totalNumber);
  1525. int behindNumber = totalNumber - location;
  1526. int frontNumber = location - 1;
  1527. map.put("behindNumber", behindNumber);
  1528. map.put("frontNumber", frontNumber);
  1529. return Response.success(map);
  1530. }
  1531. }