PatentService.java 104 KB

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