PatentService.java 87 KB

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