ReportProjectService.java 51 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103
  1. package cn.cslg.pas.service.business;
  2. import cn.cslg.pas.common.dto.ClientDTO;
  3. import cn.cslg.pas.common.dto.UpdateSingleColumnDTO;
  4. import cn.cslg.pas.common.dto.business.PatentProjectDTO;
  5. import cn.cslg.pas.common.dto.business.ProjectEventDTO;
  6. import cn.cslg.pas.common.dto.business.ReportProjectDTO;
  7. import cn.cslg.pas.common.dto.business.UpdateReportProjectDTO;
  8. import cn.cslg.pas.common.dto.invalidDTO.UpdateIfSecondInvalidDTO;
  9. import cn.cslg.pas.common.model.cronModel.*;
  10. import cn.cslg.pas.common.model.request.GroupRequest;
  11. import cn.cslg.pas.common.model.request.QueryRequest;
  12. import cn.cslg.pas.common.model.request.StringRequest;
  13. import cn.cslg.pas.common.utils.CacheUtils;
  14. import cn.cslg.pas.common.utils.GenerateObjectUtil;
  15. import cn.cslg.pas.common.utils.LoginUtils;
  16. import cn.cslg.pas.common.vo.DepartmentVO;
  17. import cn.cslg.pas.common.vo.PatentWithIdVO;
  18. import cn.cslg.pas.common.vo.QueryCasePhaseVO;
  19. import cn.cslg.pas.common.vo.QueryReportAffairConclusionVO;
  20. import cn.cslg.pas.common.vo.business.*;
  21. import cn.cslg.pas.domain.business.*;
  22. import cn.cslg.pas.domain.es.Patent;
  23. import cn.cslg.pas.domain.es.PatentPerson;
  24. import cn.cslg.pas.exception.UnLoginException;
  25. import cn.cslg.pas.exception.XiaoShiException;
  26. import cn.cslg.pas.factorys.businessFactory.Business;
  27. import cn.cslg.pas.factorys.reGroupFactory.QueryGroupFactory;
  28. import cn.cslg.pas.factorys.reGroupFactory.QueryGroupImp;
  29. import cn.cslg.pas.mapper.*;
  30. import cn.cslg.pas.service.business.es.EsPatentService;
  31. import cn.cslg.pas.service.business.es.EsService;
  32. import cn.cslg.pas.service.common.FileManagerService;
  33. import cn.cslg.pas.service.permissions.PermissionService;
  34. import cn.cslg.pas.service.query.FormatQueryService;
  35. import com.alibaba.fastjson.JSON;
  36. import com.alibaba.fastjson.JSONObject;
  37. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  38. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  39. import jakarta.validation.constraints.AssertFalse;
  40. import lombok.extern.slf4j.Slf4j;
  41. import org.apache.commons.lang3.ObjectUtils;
  42. import org.apache.commons.lang3.StringUtils;
  43. import org.springframework.beans.BeanUtils;
  44. import org.springframework.beans.factory.annotation.Autowired;
  45. import org.springframework.context.annotation.Lazy;
  46. import org.springframework.stereotype.Service;
  47. import org.springframework.transaction.annotation.Isolation;
  48. import org.springframework.transaction.annotation.Propagation;
  49. import org.springframework.transaction.annotation.Transactional;
  50. import org.springframework.util.CollectionUtils;
  51. import org.springframework.web.multipart.MultipartFile;
  52. import java.io.IOException;
  53. import java.util.ArrayList;
  54. import java.util.Arrays;
  55. import java.util.List;
  56. import java.util.stream.Collectors;
  57. @Slf4j
  58. @Service
  59. public class ReportProjectService extends ServiceImpl<ReportProjectMapper, ReportProject> implements Business {
  60. @Autowired
  61. private ReportProjectMapper reportProjectMapper;
  62. @Autowired
  63. private FormatQueryService formatQueryService;
  64. @Autowired
  65. private FileManagerService fileManagerService;
  66. @Autowired
  67. private QueryGroupFactory queryGroupFactory;
  68. @Autowired
  69. private PermissionService permissionService;
  70. @Autowired
  71. private AssoProjectEventService assoProjectEventService;
  72. @Autowired
  73. private AssoProjectFileService assoProjectFileService;
  74. @Autowired
  75. private AssoReportCronService assoReportCronService;
  76. @Autowired
  77. private AssoProjectPersonService assoProjectPersonService;
  78. @Autowired
  79. private CacheUtils cacheUtils;
  80. @Autowired
  81. private LoginUtils loginUtils;
  82. @Autowired
  83. private FollowUpService followUpService;
  84. @Autowired
  85. private EventService eventService;
  86. @Autowired
  87. private ProjectService projectService;
  88. @Autowired
  89. private AssoProjectService assoProjectService;
  90. @Autowired
  91. private SystemDictService systemDictService;
  92. @Autowired
  93. private MatterService matterService;
  94. @Autowired
  95. private ScenarioService scenarioService;
  96. @Autowired
  97. private EsService esService;
  98. @Autowired
  99. private EsPatentService esPatentService;
  100. @Autowired
  101. private CustomFieldService customFieldService;
  102. @Autowired
  103. @Lazy
  104. private CompareLiteratureService compareLiteratureService;
  105. @Autowired
  106. private ReportAffairMapper reportAffairMapper;
  107. @Override
  108. @Transactional(rollbackFor = Exception.class)
  109. public Object queryMessage(QueryRequest queryRequest) throws Exception {
  110. String tableName = "reportProject";
  111. Boolean ifInvalidReport = queryRequest.getIfInvalidReport();
  112. if (ifInvalidReport != null && ifInvalidReport) {
  113. tableName = "invalidReportProject";
  114. }
  115. List<String> sqls = formatQueryService.reSqls(queryRequest, tableName);
  116. sqls = this.loadSearchSql(sqls);
  117. //根据sql查询事件信息
  118. List<ReportProjectVO> reportProject = reportProjectMapper.getReportProject(this.getSelectMessage(), sqls.get(0), sqls.get(1), sqls.get(2));
  119. this.loadReportProjectVO(reportProject, ifInvalidReport);
  120. //查询总数
  121. Long total = reportProjectMapper.getReportProjectCount(this.getSelectMessage(), sqls.get(0));
  122. //装载事件信息
  123. Records records = new Records();
  124. records.setCurrent(queryRequest.getCurrent());
  125. records.setSize(queryRequest.getSize());
  126. records.setData(reportProject);
  127. records.setTotal(total);
  128. return records;
  129. }
  130. @Override
  131. @Transactional(rollbackFor = Exception.class)
  132. public Integer addMessage(Object object, List<MultipartFile> files) {
  133. return null;
  134. }
  135. @Override
  136. @Transactional(rollbackFor = Exception.class)
  137. public Object deleteMessage(List<Integer> ids) throws IOException {
  138. //后续事项
  139. LambdaQueryWrapper<FollowUp> followUpWrapper = new LambdaQueryWrapper<>();
  140. followUpWrapper.in(FollowUp::getProjectId, ids);
  141. followUpService.remove(followUpWrapper);
  142. //事件
  143. LambdaQueryWrapper<AssoProjectEvent> eventWrapper = new LambdaQueryWrapper<>();
  144. eventWrapper.in(AssoProjectEvent::getProjectId, ids);
  145. assoProjectEventService.remove(eventWrapper);
  146. //附件
  147. LambdaQueryWrapper<AssoProjectFile> fileWrapper = new LambdaQueryWrapper<>();
  148. fileWrapper.in(AssoProjectFile::getProjectId, ids);
  149. assoProjectFileService.remove(fileWrapper);
  150. //核心结论
  151. LambdaQueryWrapper<AssoReportCron> reportCronWrapper = new LambdaQueryWrapper<>();
  152. reportCronWrapper.in(AssoReportCron::getProjectId, ids);
  153. assoReportCronService.remove(reportCronWrapper);
  154. //和报告关联
  155. LambdaQueryWrapper<AssoProject> assoReportWrapper = new LambdaQueryWrapper<>();
  156. assoReportWrapper.in(AssoProject::getProjectId, ids);
  157. assoReportWrapper.eq(AssoProject::getProjectType, 2);
  158. assoReportWrapper.eq(AssoProject::getAssoProjectType, 2);
  159. assoProjectService.remove(assoReportWrapper);
  160. //report
  161. LambdaQueryWrapper<ReportProject> reportProjectWrapper = new LambdaQueryWrapper<>();
  162. reportProjectWrapper.in(ReportProject::getProjectId, ids);
  163. this.remove(reportProjectWrapper);
  164. //project
  165. projectService.removeBatchByIds(ids);
  166. return ids;
  167. }
  168. /**
  169. * 更新事件接口
  170. *
  171. * @param object
  172. * @param files
  173. * @return
  174. */
  175. @Override
  176. @Transactional(rollbackFor = Exception.class)
  177. public Object updateMessage(Object object, List<MultipartFile> files) {
  178. return null;
  179. }
  180. /**
  181. * 查询事件分组信息
  182. *
  183. * @param groupRequest
  184. * @return
  185. * @throws Exception
  186. */
  187. @Transactional(rollbackFor = Exception.class)
  188. public Object getGroup(GroupRequest groupRequest, String groupTableName) throws Exception {
  189. StringRequest stringRequest = new StringRequest();
  190. BeanUtils.copyProperties(groupRequest, stringRequest);
  191. String tableName = "reportProject";
  192. Boolean ifInvalidReport = stringRequest.getIfInvalidReport();
  193. if (ifInvalidReport != null && ifInvalidReport) {
  194. tableName = "invalidReportProject";
  195. }
  196. List<String> sqls = formatQueryService.reSqls(stringRequest, tableName);
  197. sqls = this.loadSearchSql(sqls);
  198. //格式化 分组
  199. GroupConfig groupConfig = null;
  200. if (groupRequest.getGroupBy() != null) {
  201. String json = CommonService.readJsonFile(tableName + ".json");
  202. List<GroupConfig> groupConfigs = JSON.parseArray(json, GroupConfig.class);
  203. groupConfig = groupConfigs.stream().filter(item -> groupRequest.getGroupBy().equals(item.getField())).findFirst().orElse(null);
  204. if (groupConfig == null) {
  205. throw new XiaoShiException("未找到配置");
  206. }
  207. }
  208. tableName = "(" + getSelectMessage() + ") as t";
  209. //返回分组数据
  210. QueryGroupImp queryGroupImp = queryGroupFactory.getClass(groupConfig.getGroupClass());
  211. String countFiled = "distinct t.id";
  212. ReGroupDataVO reGroupDataVO = queryGroupImp.getGroup(sqls, tableName, groupConfig.getSqlField(), countFiled);
  213. //装载数据
  214. GroupVO groupVO = new GroupVO();
  215. groupVO.setField(groupRequest.getGroupBy());
  216. groupVO.setValues(reGroupDataVO.getValues());
  217. Records records = new Records();
  218. records.setCurrent(groupRequest.getCurrent());
  219. records.setSize(groupRequest.getSize());
  220. records.setData(groupVO);
  221. records.setTotal(reGroupDataVO.getTotal());
  222. return records;
  223. }
  224. @Override
  225. @Transactional(rollbackFor = Exception.class)
  226. public Object addMessage(Object object) {
  227. //TODO 校验参数
  228. //object to reportProjectDTO
  229. ReportProjectDTO reportProjectDTO = (ReportProjectDTO) object;
  230. /**
  231. * 校验必传参数是否上传
  232. */
  233. //负责人id
  234. if (reportProjectDTO.getHeadId() == null) {
  235. throw new XiaoShiException("负责人id不能为空");
  236. }
  237. //报告类型
  238. if (reportProjectDTO.getReportType().equals(null)) {
  239. throw new XiaoShiException("报告类型不能为空");
  240. }
  241. //获取登陆人信息 用于设置创建人
  242. PersonnelVO personnelVO = new PersonnelVO();
  243. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  244. String userId = personnelVO.getId();
  245. /**
  246. * 装载project
  247. */
  248. Project project = new Project();
  249. BeanUtils.copyProperties(reportProjectDTO, project);
  250. project.setCreateId(personnelVO.getId());
  251. project.setTenantId(personnelVO.getTenantId());
  252. //TODO 当委托方id或者委托方名称不为空时,
  253. if (reportProjectDTO.getEntrustId() != null || reportProjectDTO.getEntrustName() != null) {
  254. //根据创建人的租户类型设置project的委托类型
  255. if (personnelVO.getTenantType().equals("1")) {
  256. project.setEntrustType(1);
  257. //当委托方id不为空时
  258. if (StringUtils.isNotEmpty(reportProjectDTO.getEntrustId()) && !StringUtils.equals(reportProjectDTO.getEntrustId(), "-1")) {
  259. project.setEntrustId(reportProjectDTO.getEntrustId());
  260. }
  261. //若且租户类型为代理机构,并且委托方id为空,委托方名称不为空时,新增委托方
  262. else {
  263. if (reportProjectDTO.getEntrustName() != null && reportProjectDTO.getEntrustName().trim() != "") {
  264. ClientDTO clientDTO = new ClientDTO();
  265. clientDTO.setName(reportProjectDTO.getEntrustName());
  266. clientDTO.setTenantId(personnelVO.getTenantId());
  267. try {
  268. String res = permissionService.addClient(clientDTO);
  269. JSONObject jsonObject = JSONObject.parseObject(res);
  270. Integer clientId = Integer.parseInt(jsonObject.get("data").toString());
  271. project.setEntrustId(clientId.toString());
  272. project.setEntrustType(1);
  273. } catch (Exception e) {
  274. throw new XiaoShiException("网络异常");
  275. }
  276. }
  277. }
  278. } else {
  279. if (reportProjectDTO.getEntrustId() != null) {
  280. project.setEntrustType(0);
  281. project.setEntrustId(reportProjectDTO.getEntrustId());
  282. }
  283. }
  284. }
  285. project.insert();
  286. /**
  287. * 装载和报告关联
  288. */
  289. if (reportProjectDTO.getAssoReportId() != null) {
  290. AssoProject assoProject = new AssoProject();
  291. assoProject.setAssoProjectId(project.getId());
  292. assoProject.setAssoProjectType(2);
  293. assoProject.setProjectId(reportProjectDTO.getAssoReportId());
  294. assoProject.setProjectType(2);
  295. assoProject.insert();
  296. }
  297. /**
  298. * 装载reportProject
  299. */
  300. ReportProject reportProject = new ReportProject();
  301. BeanUtils.copyProperties(reportProjectDTO, reportProject);
  302. if (reportProject.getSignPatentNo() != null&&!reportProject.getReportType().equals(3)) {
  303. try {
  304. PatentWithIdVO patentWithIdVO = esService.getIdByPatentNo(reportProject.getSignPatentNo());
  305. if (patentWithIdVO != null && patentWithIdVO.getPatent() != null) {
  306. if (patentWithIdVO.getPatent().getPatentType() != null) {
  307. reportProject.setPatentType(Integer.parseInt(patentWithIdVO.getPatent().getPatentType()));
  308. }
  309. }
  310. Patent patent = patentWithIdVO.getPatent();
  311. if (patent.getRightHolder() != null && patent.getRightHolder().size() > 0) {
  312. List<String> rightHolders = patent.getRightHolder().stream().map(PatentPerson::getName).collect(Collectors.toList());
  313. String holderString = StringUtils.join(rightHolders, ",");
  314. reportProject.setRightHolder(holderString);
  315. }
  316. } catch (Exception e) {
  317. throw new XiaoShiException("未查询到标的专利");
  318. }
  319. //根据专利号查询专利
  320. }
  321. reportProject.setProjectId(project.getId());
  322. //根据是否直接完成设置报告的状态
  323. if (reportProjectDTO.getIfFinish() == null || !reportProjectDTO.getIfFinish()) {
  324. reportProject.setStatus(2);
  325. } else if (reportProjectDTO.getIfFinish()) {
  326. reportProject.setStatus(3);
  327. }
  328. reportProject.insert();
  329. /**
  330. * 装载后续事项和project关联
  331. */
  332. if (reportProjectDTO.getFollowUps() != null && reportProjectDTO.getFollowUps().size() != 0) {
  333. List<FollowUp> followUps = new ArrayList<>();
  334. reportProjectDTO.getFollowUps().forEach(item -> {
  335. FollowUp followUp = new FollowUp();
  336. BeanUtils.copyProperties(item, followUp);
  337. followUp.setProjectId(project.getId());
  338. followUp.setCreateId(userId);
  339. followUps.add(followUp);
  340. });
  341. followUpService.saveBatch(followUps);
  342. }
  343. /**
  344. * 装载事件与project关联
  345. */
  346. List<AssoProjectEvent> assoProjectEvents = new ArrayList<>();
  347. List<ProjectEventDTO> events = reportProjectDTO.getEvents();
  348. if (events != null && events.size() != 0) {
  349. assoProjectEventService.addAssoEventProject(events, project.getId(), 1);
  350. }
  351. /**
  352. * 装载和附件关联
  353. */
  354. List<AssoProjectFile> assoProjectFiles = new ArrayList<>();
  355. List<String> fileGuids = reportProjectDTO.getFileGuids();
  356. if (fileGuids != null && fileGuids.size() != 0) {
  357. for (String fileGuid : fileGuids) {
  358. AssoProjectFile assoProjectFile = new AssoProjectFile();
  359. assoProjectFile.setProjectId(project.getId());
  360. assoProjectFile.setFileGuid(fileGuid);
  361. assoProjectFile.setCreateId(personnelVO.getId());
  362. assoProjectFiles.add(assoProjectFile);
  363. }
  364. if (assoProjectFiles != null && assoProjectFiles.size() != 0) {
  365. assoProjectFileService.saveBatch(assoProjectFiles);
  366. }
  367. }
  368. /**
  369. * 装载核心结论
  370. */
  371. List<Integer> cronIds = reportProjectDTO.getCronIds();
  372. List<AssoReportCron> assoReportCrons = new ArrayList<>();
  373. if (cronIds != null && cronIds.size() != 0) {
  374. cronIds.forEach(item -> {
  375. AssoReportCron assoReportCron = new AssoReportCron();
  376. assoReportCron.setProjectId(project.getId());
  377. assoReportCron.setCronId(item);
  378. assoReportCrons.add(assoReportCron);
  379. });
  380. assoReportCronService.saveBatch(assoReportCrons);
  381. }
  382. List<String> involvedPersonIds = reportProjectDTO.getInvolvedPersonIds();
  383. //添加项目的参与人
  384. assoProjectPersonService.addProjectPeople(1, project.getId(), involvedPersonIds);
  385. /**
  386. * 复制信息
  387. */
  388. Boolean track = reportProjectDTO.getTrack();
  389. if (track != null && track.equals(true)) {
  390. List<Integer> copyIds = reportProjectDTO.getCopyIds();
  391. //复制对比文献
  392. if (copyIds != null && copyIds.contains(0)) {
  393. Integer oldProjectId = reportProjectDTO.getAssociateReportId();
  394. compareLiteratureService.copyCompareLiterature(oldProjectId, project.getId());
  395. }
  396. //复制标引信息
  397. if (copyIds != null && copyIds.contains(1)) {
  398. Integer oldProjectId = reportProjectDTO.getAssociateReportId();
  399. customFieldService.copyCustomField(oldProjectId, project.getId());
  400. }
  401. }
  402. //返回id
  403. return project.getId();
  404. }
  405. @Override
  406. public Object updateMessage(Object object) {
  407. //TODO 校验参数
  408. //object to reportProjectDTO
  409. UpdateReportProjectDTO updateReportProjectDTO = (UpdateReportProjectDTO) object;
  410. /**
  411. * 校验必传参数是否上传
  412. */
  413. //负责人id
  414. if (updateReportProjectDTO.getHeadId() == null) {
  415. throw new XiaoShiException("负责人id不能为空");
  416. }
  417. //报告类型
  418. if (updateReportProjectDTO.getReportType().equals(null)) {
  419. throw new XiaoShiException("报告类型不能为空");
  420. }
  421. //获取登陆人信息 用于设置创建人
  422. PersonnelVO personnelVO = new PersonnelVO();
  423. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  424. String userId = personnelVO.getId();
  425. /**
  426. * 装载project
  427. */
  428. Project project = projectService.getById(updateReportProjectDTO.getId());
  429. BeanUtils.copyProperties(updateReportProjectDTO, project);
  430. //TODO 当委托方id或者委托方名称不为空时,
  431. if (updateReportProjectDTO.getEntrustId() != null || updateReportProjectDTO.getEntrustName() != null) {
  432. //根据创建人的租户类型设置project的委托类型
  433. if (personnelVO.getTenantType().equals("1")) {
  434. project.setEntrustType(1);
  435. //当委托方id不为空时
  436. if (StringUtils.isNotEmpty(updateReportProjectDTO.getEntrustId()) && !StringUtils.equals(updateReportProjectDTO.getEntrustId(), "-1")) {
  437. project.setEntrustId(updateReportProjectDTO.getEntrustId());
  438. }
  439. //若且租户类型为代理机构,并且委托方id为空,委托方名称不为空时,新增委托方
  440. else {
  441. if (updateReportProjectDTO.getEntrustName() != null && updateReportProjectDTO.getEntrustName().trim() != "") {
  442. ClientDTO clientDTO = new ClientDTO();
  443. clientDTO.setName(updateReportProjectDTO.getEntrustName());
  444. clientDTO.setTenantId(personnelVO.getTenantId());
  445. try {
  446. String res = permissionService.addClient(clientDTO);
  447. JSONObject jsonObject = JSONObject.parseObject(res);
  448. Integer clientId = Integer.parseInt(jsonObject.get("data").toString());
  449. project.setEntrustId(clientId.toString());
  450. project.setEntrustType(1);
  451. } catch (Exception e) {
  452. throw new XiaoShiException("网络异常");
  453. }
  454. }
  455. }
  456. } else {
  457. if (updateReportProjectDTO.getEntrustId() != null) {
  458. project.setEntrustType(0);
  459. project.setEntrustId(updateReportProjectDTO.getEntrustId());
  460. }
  461. }
  462. }
  463. project.updateById();
  464. /**
  465. * 装载和报告关联
  466. */
  467. if (updateReportProjectDTO.getAssoReportId() != null) {
  468. LambdaQueryWrapper<AssoProject> deleteReportWrapper = new LambdaQueryWrapper<>();
  469. deleteReportWrapper.eq(AssoProject::getProjectId, project.getId());
  470. assoProjectService.remove(deleteReportWrapper);
  471. AssoProject assoProject = new AssoProject();
  472. assoProject.setAssoProjectId(project.getId());
  473. assoProject.setAssoProjectType(2);
  474. assoProject.setProjectId(updateReportProjectDTO.getAssoReportId());
  475. assoProject.setProjectType(2);
  476. assoProject.insert();
  477. }
  478. /**
  479. * 装载reportProject
  480. */
  481. LambdaQueryWrapper<ReportProject> reportProjectWrapper = new LambdaQueryWrapper<>();
  482. reportProjectWrapper.eq(ReportProject::getProjectId, project.getId());
  483. ReportProject reportProject = this.getOne(reportProjectWrapper);
  484. Integer reportId = reportProject.getId();
  485. if (reportProject.getSignPatentNo() != null && reportProject.getSignPatentNo() != updateReportProjectDTO.getSignPatentNo()) {
  486. try {
  487. String patentNo =updateReportProjectDTO.getSignPatentNo();
  488. PatentWithIdVO patentWithIdVO = esService.getIdByPatentNo(patentNo);
  489. if(patentWithIdVO==null){
  490. reportProject.setRightHolder("");
  491. }else {
  492. Patent patent = patentWithIdVO.getPatent();
  493. if (patent.getRightHolder() != null && patent.getRightHolder().size() > 0) {
  494. List<String> rightHolders = patent.getRightHolder().stream().map(PatentPerson::getName).collect(Collectors.toList());
  495. String holderString = StringUtils.join(rightHolders, ",");
  496. reportProject.setRightHolder(holderString);
  497. }
  498. else {
  499. reportProject.setRightHolder("");
  500. }
  501. }
  502. } catch (Exception e) {
  503. e.printStackTrace();
  504. }
  505. }
  506. updateReportProjectDTO.setEvidenceRiskResponse(reportProject.getEvidenceRiskResponse());
  507. updateReportProjectDTO.setOralPanelMembers(reportProject.getOralPanelMembers());
  508. updateReportProjectDTO.setOfficialDeadline(reportProject.getOfficialDeadline());
  509. BeanUtils.copyProperties(updateReportProjectDTO, reportProject);
  510. reportProject.setId(reportId);
  511. reportProject.updateById();
  512. /**
  513. * 装载后续事项和project关联
  514. */
  515. LambdaQueryWrapper<FollowUp> followUpWrapper = new LambdaQueryWrapper<>();
  516. followUpWrapper.eq(FollowUp::getProjectId, project.getId());
  517. followUpService.remove(followUpWrapper);
  518. if (updateReportProjectDTO.getFollowUps() != null && updateReportProjectDTO.getFollowUps().size() != 0) {
  519. List<FollowUp> followUps = new ArrayList<>();
  520. updateReportProjectDTO.getFollowUps().forEach(item -> {
  521. FollowUp followUp = new FollowUp();
  522. BeanUtils.copyProperties(item, followUp);
  523. followUp.setCreateId(userId);
  524. followUp.setProjectId(project.getId());
  525. followUps.add(followUp);
  526. });
  527. followUpService.saveBatch(followUps);
  528. }
  529. /**
  530. * 装载事件与project关联
  531. */
  532. List<AssoProjectEvent> assoProjectEvents = new ArrayList<>();
  533. LambdaQueryWrapper<AssoProjectEvent> deleteEventWrapper = new LambdaQueryWrapper<>();
  534. deleteEventWrapper.eq(AssoProjectEvent::getProjectId, project.getId());
  535. assoProjectEventService.remove(deleteEventWrapper);
  536. List<ProjectEventDTO> events = updateReportProjectDTO.getEvents();
  537. if (events != null && events.size() != 0) {
  538. if (events != null && events.size() != 0) {
  539. assoProjectEventService.addAssoEventProject(events, project.getId(), 1);
  540. }
  541. }
  542. /**
  543. * 装载和附件关联
  544. */
  545. List<AssoProjectFile> assoProjectFiles = new ArrayList<>();
  546. LambdaQueryWrapper<AssoProjectFile> deleteFileWrapper = new LambdaQueryWrapper<>();
  547. deleteFileWrapper.eq(AssoProjectFile::getProjectId, project.getId());
  548. assoProjectFileService.remove(deleteFileWrapper);
  549. List<String> fileGuids = updateReportProjectDTO.getFileGuids();
  550. if (fileGuids != null && fileGuids.size() != 0) {
  551. for (String fileGuid : fileGuids) {
  552. AssoProjectFile assoProjectFile = new AssoProjectFile();
  553. assoProjectFile.setProjectId(project.getId());
  554. assoProjectFile.setFileGuid(fileGuid);
  555. assoProjectFile.setCreateId(personnelVO.getId());
  556. assoProjectFiles.add(assoProjectFile);
  557. }
  558. if (assoProjectFiles != null && assoProjectFiles.size() != 0) {
  559. assoProjectFileService.saveBatch(assoProjectFiles);
  560. }
  561. }
  562. /**
  563. * 装载核心结论
  564. */
  565. List<Integer> cronIds = updateReportProjectDTO.getCronIds();
  566. LambdaQueryWrapper<AssoReportCron> reportCronWrapper = new LambdaQueryWrapper<>();
  567. reportCronWrapper.eq(AssoReportCron::getProjectId, project.getId());
  568. assoReportCronService.remove(reportCronWrapper);
  569. List<AssoReportCron> assoReportCrons = new ArrayList<>();
  570. if (cronIds != null && cronIds.size() != 0) {
  571. cronIds.forEach(item -> {
  572. AssoReportCron assoReportCron = new AssoReportCron();
  573. assoReportCron.setProjectId(project.getId());
  574. assoReportCron.setCronId(item);
  575. assoReportCrons.add(assoReportCron);
  576. });
  577. assoReportCronService.saveBatch(assoReportCrons);
  578. }
  579. /**
  580. *装载参与人
  581. */
  582. List<String> involvedPersonIds = updateReportProjectDTO.getInvolvedPersonIds();
  583. assoProjectPersonService.updateProjectPeople(1, project.getId(), involvedPersonIds);
  584. //返回id
  585. return project.getId();
  586. }
  587. /**
  588. * 装载报告返回类
  589. *
  590. * @param reportProjectVOs
  591. */
  592. private void loadReportProjectVO(List<ReportProjectVO> reportProjectVOs, Boolean ifInvalidReport) throws IOException {
  593. List<String> createIds = new ArrayList<>();
  594. List<String> departmentIds = new ArrayList<>();
  595. List<DepartmentVO> departmentVOS = new ArrayList<>();
  596. List<Integer> clientIds = new ArrayList<>();
  597. List<Integer> ids = new ArrayList<>();
  598. List<Client> clients = new ArrayList<>();
  599. List<Event> events = new ArrayList<>();
  600. List<AssoReportCron> assoReportCrons = new ArrayList<>();
  601. List<AssoProjectEvent> assoProjectEvents = new ArrayList<>();
  602. List<SystemDict> systemDictList = new ArrayList<>();
  603. List<SystemDict> reportTypeList = new ArrayList<>();
  604. List<Scenario> scenarios = new ArrayList<>();
  605. List<Matter> matters = new ArrayList<>();
  606. List<AssoProject> assoProjects = new ArrayList<>();
  607. List<String> patentNos = new ArrayList<>();
  608. List<Patent> patentList = new ArrayList<>();
  609. List<AssoProjectPerson> assoProjectPersonList = new ArrayList<>();
  610. reportProjectVOs.forEach(
  611. item -> {
  612. if (item.getCreateId() != null) {
  613. createIds.add(item.getCreateId());
  614. }
  615. if (item.getHeadId() != null) {
  616. createIds.add(item.getHeadId());
  617. }
  618. if (item.getId() != null) {
  619. ids.add(item.getId());
  620. }
  621. if (item.getDepartmentId() != null) {
  622. departmentIds.add(item.getDepartmentId());
  623. }
  624. if (item.getEntrustType() != null && item.getEntrustType().equals(2)) {
  625. departmentIds.add(item.getEntrustId());
  626. }
  627. if (item.getEntrustType() != null && item.getEntrustType().equals(1)) {
  628. clientIds.add(Integer.parseInt(item.getEntrustId()));
  629. }
  630. if (ifInvalidReport != null && ifInvalidReport && item.getSignPatentNo() != null) {
  631. patentNos.add(item.getSignPatentNo());
  632. }
  633. }
  634. );
  635. List<Personnel> personnels = new ArrayList<>();
  636. List<String> guids = new ArrayList<>();
  637. List<SystemFile> systemFiles = new ArrayList<>();
  638. List<AssoProjectFile> assoEventFiles = new ArrayList<>();
  639. List<QueryCasePhaseVO> casePhaseVOS = new ArrayList<>();
  640. List<QueryCasePhaseVO> casePhaseVOS1 = new ArrayList<>();
  641. List<QueryReportAffairConclusionVO> conclusionVOS = new ArrayList<>();
  642. //查询部门名称
  643. if (departmentIds.size() != 0) {
  644. String json = permissionService.getDepartmentByIdsFromPCS(departmentIds);
  645. departmentVOS = JSON.parseArray(json, DepartmentVO.class);
  646. }
  647. //查询标的专利信息
  648. if (ifInvalidReport != null && ifInvalidReport && patentNos.size() > 0) {
  649. try {
  650. patentList = esPatentService.getPatentsByNo(patentNos, true, null, null);
  651. } catch (Exception e) {
  652. }
  653. }
  654. if (ids.size() != 0) {
  655. //根据事件id获得专利数据库文件关联表
  656. LambdaQueryWrapper<AssoProjectFile> queryWrapper = new LambdaQueryWrapper<>();
  657. queryWrapper.in(AssoProjectFile::getProjectId, ids);
  658. assoEventFiles = assoProjectFileService.list(queryWrapper);
  659. guids = assoEventFiles.stream().map(AssoProjectFile::getFileGuid).collect(Collectors.toList());
  660. //查询核心结论
  661. LambdaQueryWrapper<AssoReportCron> reportCronLambdaQueryWrapper = new LambdaQueryWrapper<>();
  662. reportCronLambdaQueryWrapper.in(AssoReportCron::getProjectId, ids);
  663. assoReportCrons = assoReportCronService.list(reportCronLambdaQueryWrapper);
  664. if (assoReportCrons != null && assoReportCrons.size() != 0) {
  665. LambdaQueryWrapper<SystemDict> systemDictLambdaQueryWrapper = new LambdaQueryWrapper<>();
  666. systemDictLambdaQueryWrapper.eq(SystemDict::getGroupType, "ASSESS");
  667. systemDictList = systemDictService.list(systemDictLambdaQueryWrapper);
  668. }
  669. LambdaQueryWrapper<SystemDict> systemDictLambdaQueryWrapper = new LambdaQueryWrapper<>();
  670. systemDictLambdaQueryWrapper.eq(SystemDict::getType, "REPORT_TYPE").or().eq(SystemDict::getType, "REPORT_STATE");
  671. reportTypeList = systemDictService.list(systemDictLambdaQueryWrapper);
  672. LambdaQueryWrapper<AssoProject> queryWrapper1 = new LambdaQueryWrapper<>();
  673. queryWrapper1.in(AssoProject::getAssoProjectId, ids);
  674. assoProjects = assoProjectService.list(queryWrapper1);
  675. //查询和参与人关联
  676. LambdaQueryWrapper<AssoProjectPerson> projectPersonLambdaQueryWrapper = new LambdaQueryWrapper<>();
  677. projectPersonLambdaQueryWrapper.in(AssoProjectPerson::getProjectId, ids)
  678. .eq(AssoProjectPerson::getRole, 1);
  679. assoProjectPersonList = assoProjectPersonService.list(projectPersonLambdaQueryWrapper);
  680. List<String> personIds = assoProjectPersonList.stream().map(AssoProjectPerson::getPersonId).collect(Collectors.toList());
  681. createIds.addAll(personIds);
  682. casePhaseVOS = reportAffairMapper.queryCasePhase(ids);
  683. casePhaseVOS1 = reportAffairMapper.queryCasePhaseOral(ids);
  684. conclusionVOS = reportAffairMapper.queryReportAffairConclusion(ids);
  685. }
  686. //查询创建人名称
  687. if (createIds.size() != 0) {
  688. String res = permissionService.getPersonnelByIdsFromPCS(createIds);
  689. JSONObject jsonObject = JSONObject.parseObject(res);
  690. personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
  691. }
  692. //查询文件
  693. if (guids.size() != 0) {
  694. try {
  695. String res = fileManagerService.getSystemFileFromFMS(guids);
  696. systemFiles = JSONObject.parseArray(res, SystemFile.class);
  697. } catch (Exception e) {
  698. }
  699. }
  700. //查询客户名称
  701. if (clientIds.size() != 0) {
  702. String res = permissionService.getClientByIdsFromPCS(clientIds);
  703. JSONObject jsonObject = JSONObject.parseObject(res);
  704. clients = JSONObject.parseArray(jsonObject.getString("data"), Client.class);
  705. }
  706. //查询应用场景、调查类型、事件和专题库的关联
  707. if (ids != null && ids.size() > 0) {
  708. LambdaQueryWrapper<AssoProjectEvent> assoProjectEventQueryWrapper = new LambdaQueryWrapper<>();
  709. assoProjectEventQueryWrapper.in(AssoProjectEvent::getProjectId, ids);
  710. assoProjectEvents = assoProjectEventService.list(assoProjectEventQueryWrapper);
  711. //查询事件
  712. if (assoProjectEvents != null && assoProjectEvents.size() != 0) {
  713. scenarios = scenarioService.list();
  714. matters = matterService.list();
  715. List<Integer> eventIds = assoProjectEvents.stream().filter(item -> item.getEventId() != null).map(AssoProjectEvent::getEventId).collect(Collectors.toList());
  716. if (eventIds.size() != 0) {
  717. LambdaQueryWrapper<Event> eventQueryWrapper = new LambdaQueryWrapper<>();
  718. eventQueryWrapper.in(Event::getId, eventIds);
  719. events = eventService.list(eventQueryWrapper);
  720. }
  721. }
  722. }
  723. //装载信息
  724. for (ReportProjectVO reportProjectVO : reportProjectVOs) {
  725. //装载人员信息
  726. Personnel personnel = personnels.stream().filter(item -> item.getId().equals(reportProjectVO.getCreateId())).findFirst().orElse(null);
  727. if (personnel != null) {
  728. reportProjectVO.setCreateName(personnel.getPersonnelName());
  729. }
  730. if (reportProjectVO.getHeadId() != null) {
  731. Personnel headPersonnel = personnels.stream().filter(item -> item.getId().equals(reportProjectVO.getHeadId())).findFirst().orElse(null);
  732. if (headPersonnel != null) {
  733. reportProjectVO.setHeadName(headPersonnel.getPersonnelName());
  734. }
  735. }
  736. //装载文件信息
  737. List<AssoProjectFile> assoProjectFileTemp = assoEventFiles.stream().filter(item -> item.getProjectId().equals(reportProjectVO.getId())).collect(Collectors.toList());
  738. if (assoProjectFileTemp.size() != 0) {
  739. List<String> guidTemp = assoProjectFileTemp.stream().map(AssoProjectFile::getFileGuid).collect(Collectors.toList());
  740. if (guidTemp.size() != 0) {
  741. if (systemFiles != null) {
  742. List<SystemFile> systemFileTemp = systemFiles.stream().filter(item -> guidTemp.contains(item.getGuid())).collect(Collectors.toList());
  743. if (systemFileTemp.size() != 0) {
  744. reportProjectVO.setSystemFileList(systemFileTemp);
  745. }
  746. }
  747. }
  748. }
  749. //装载参与人
  750. List<SimplePersonVO> simplePersonVOS = new ArrayList<>();
  751. List<AssoProjectPerson> assoProjectPersonTmps = assoProjectPersonList.stream().filter(item -> item.getProjectId().equals(reportProjectVO.getId())).collect(Collectors.toList());
  752. List<String> personIds = assoProjectPersonTmps.stream().map(AssoProjectPerson::getPersonId).collect(Collectors.toList());
  753. if (!CollectionUtils.isEmpty(personIds)) {
  754. List<Personnel> personneltmps = personnels.stream().filter(item -> personIds.contains(item.getId())).collect(Collectors.toList());
  755. personneltmps.forEach(item -> {
  756. SimplePersonVO simplePersonVO = new SimplePersonVO();
  757. simplePersonVO.setPersonId(item.getId());
  758. simplePersonVO.setPersonName(item.getPersonnelName());
  759. simplePersonVOS.add(simplePersonVO);
  760. });
  761. }
  762. reportProjectVO.setInvolvedPersons(simplePersonVOS);
  763. //装载部门
  764. if (reportProjectVO.getDepartmentId() != null) {
  765. DepartmentVO departmentVO = departmentVOS.stream().filter(item -> item.getDepartId().equals(reportProjectVO.getDepartmentId())).findFirst().orElse(null);
  766. if (departmentVO != null) {
  767. reportProjectVO.setDepartmentName(departmentVO.getDepartName());
  768. }
  769. }
  770. //裝載委托方
  771. if (reportProjectVO.getEntrustType() != null) {
  772. //当委托方为客户时
  773. if (reportProjectVO.getEntrustType().equals(1)) {
  774. Client client = clients.stream().filter(item -> item.getId().equals(Integer.parseInt(reportProjectVO.getEntrustId()))).findFirst().orElse(null);
  775. if (client != null) {
  776. reportProjectVO.setEntrustName(client.getName());
  777. }
  778. } else if (reportProjectVO.getEntrustType().equals(2)) {
  779. DepartmentVO departmentVO = departmentVOS.stream().filter(item -> item.getDepartId().equals(reportProjectVO.getEntrustId())).findFirst().orElse(null);
  780. if (departmentVO != null) {
  781. reportProjectVO.setEntrustName(departmentVO.getDepartName());
  782. }
  783. }
  784. }
  785. //装载事件
  786. //装载事件 应用场景,处理事项
  787. List<Integer> eventIds = new ArrayList<>();
  788. List<Integer> matterIds = new ArrayList<>();
  789. List<Integer> scenarioIds = new ArrayList<>();
  790. List<String> eventTmpNames = new ArrayList<>();
  791. List<String> matterTmpNames = new ArrayList<>();
  792. List<String> scenarioTmpNames = new ArrayList<>();
  793. if (assoProjectEvents != null) {
  794. List<AssoProjectEvent> assoProjectEventTmps = assoProjectEvents.stream().filter(item -> item.getProjectId().equals(reportProjectVO.getId())).collect(Collectors.toList());
  795. if (assoProjectEventTmps.size() != 0) {
  796. //过滤出事件
  797. eventIds = assoProjectEventTmps.stream().filter(item -> item.getEventId() != null).map(AssoProjectEvent::getEventId).collect(Collectors.toList());
  798. matterIds = assoProjectEventTmps.stream().filter(item -> item.getMatterId() != null).map(AssoProjectEvent::getMatterId).collect(Collectors.toList());
  799. scenarioIds = assoProjectEventTmps.stream().filter(item -> item.getScenarioId() != null).map(AssoProjectEvent::getScenarioId).collect(Collectors.toList());
  800. List<Integer> eventIdsFilter = eventIds;
  801. List<Integer> matterIdsFilter = matterIds;
  802. List<Integer> scenarioIdsFilter = scenarioIds;
  803. List<Event> eventTmps = events.stream().filter(item -> eventIdsFilter.contains(item.getId())).collect(Collectors.toList());
  804. List<Matter> matterTmps = matters.stream().filter(item -> matterIdsFilter.contains(item.getId())).collect(Collectors.toList());
  805. List<Scenario> scenarioTmps = scenarios.stream().filter(item -> scenarioIdsFilter.contains(item.getId())).collect(Collectors.toList());
  806. eventTmpNames = eventTmps.stream().map(Event::getName).collect(Collectors.toList());
  807. eventIds = eventTmps.stream().map(Event::getId).collect(Collectors.toList());
  808. matterTmpNames = matterTmps.stream().map(Matter::getName).collect(Collectors.toList());
  809. matterIds = matterTmps.stream().map(Matter::getId).collect(Collectors.toList());
  810. scenarioTmpNames = scenarioTmps.stream().map(Scenario::getName).collect(Collectors.toList());
  811. scenarioIds = scenarioTmps.stream().map(Scenario::getId).collect(Collectors.toList());
  812. }
  813. }
  814. reportProjectVO.setScenarioIds(scenarioIds);
  815. reportProjectVO.setMatterIds(matterIds);
  816. reportProjectVO.setEventIds(eventIds);
  817. reportProjectVO.setScenarioNames(scenarioTmpNames);
  818. reportProjectVO.setMatterNames(matterTmpNames);
  819. reportProjectVO.setEventNames(eventTmpNames);
  820. List<Integer> reCronIds = new ArrayList<>();
  821. List<String> reCronNames = new ArrayList<>();
  822. //装载核心结论
  823. if (assoReportCrons != null && assoReportCrons.size() != 0) {
  824. List<AssoReportCron> assoReportCronTmps = assoReportCrons.stream().filter(item -> item.getProjectId().equals(reportProjectVO.getId())).collect(Collectors.toList());
  825. if (assoReportCronTmps.size() != 0) {
  826. //过滤出事件
  827. List<Integer> cronIds = assoReportCronTmps.stream().map(AssoReportCron::getCronId).collect(Collectors.toList());
  828. List<SystemDict> systemDicts = systemDictList.stream().filter(item -> cronIds.contains(Integer.parseInt(item.getValue()))).collect(Collectors.toList());
  829. systemDicts.forEach(item -> {
  830. CronVO cronVO = new CronVO();
  831. reCronIds.add(Integer.parseInt(item.getValue()));
  832. reCronNames.add(item.getLabel());
  833. });
  834. }
  835. }
  836. reportProjectVO.setCronIds(reCronIds);
  837. reportProjectVO.setCronNames(reCronNames);
  838. //装载案件阶段与案件子阶段
  839. if (!CollectionUtils.isEmpty(casePhaseVOS) && !CollectionUtils.isEmpty(casePhaseVOS1)) {
  840. QueryCasePhaseVO casePhaseVO1 = casePhaseVOS1.stream().filter(i -> i.getProjectId().equals(reportProjectVO.getId())).findFirst().orElse(null);
  841. QueryCasePhaseVO casePhaseVO = casePhaseVOS.stream().filter(i -> i.getProjectId().equals(reportProjectVO.getId())).findFirst().orElse(null);
  842. if (casePhaseVO != null) {
  843. reportProjectVO.setCasePhase(casePhaseVO.getCasePhase());
  844. reportProjectVO.setCaseChildPhase(casePhaseVO.getCaseChildPhase());
  845. } else {
  846. if (casePhaseVO1 != null) {
  847. Integer flowType = casePhaseVO1.getFlowType();
  848. if (flowType == 6) {
  849. reportProjectVO.setCasePhase(casePhaseVO1.getCasePhase());
  850. }
  851. }
  852. }
  853. }
  854. //装载行诉结果
  855. if (!CollectionUtils.isEmpty(conclusionVOS)) {
  856. QueryReportAffairConclusionVO conclusionVO = conclusionVOS.stream().filter(i -> i.getProjectId().equals(reportProjectVO.getId())).findFirst().orElse(null);
  857. if (conclusionVO != null) {
  858. reportProjectVO.setConclusion(conclusionVO.getConclusion());
  859. }
  860. }
  861. //装载报告类型
  862. SystemDict systemDict = reportTypeList.stream().filter(item -> reportProjectVO.getReportType().equals(Integer.parseInt(item.getValue())) && item.getType().equals("REPORT_TYPE")).findFirst().orElse(null);
  863. if (systemDict != null) {
  864. reportProjectVO.setReportTypeName(systemDict.getLabel());
  865. }
  866. //装载报告状态
  867. SystemDict systemDictStatus = reportTypeList.stream().filter(item -> reportProjectVO.getStatus().equals(Integer.parseInt(item.getValue())) && item.getType().equals("REPORT_STATE")).findFirst().orElse(null);
  868. if (systemDict != null) {
  869. if (systemDictStatus != null) {
  870. reportProjectVO.setStatusName(systemDictStatus.getLabel());
  871. }
  872. }
  873. //装载关联报告id
  874. AssoProject assoProject = assoProjects.stream().filter(item -> item.getAssoProjectId().equals(reportProjectVO.getId())).findFirst().orElse(null);
  875. if (assoProject != null) {
  876. reportProjectVO.setAssoReportId(assoProject.getProjectId());
  877. }
  878. //装载专利权人
  879. if (ifInvalidReport != null && ifInvalidReport && reportProjectVO.getSignPatentNo() != null && patentList.size() > 0) {
  880. String rightHolderStr = reportProjectVO.getRightHolderStr();
  881. if (rightHolderStr != null) {
  882. List<String> rightHolders = Arrays.asList(rightHolderStr.split(","));
  883. reportProjectVO.setRightHolder(rightHolders);
  884. }
  885. }
  886. }
  887. }
  888. //更新是否有第二次更新
  889. public Boolean updateIfSecondInvalid(UpdateIfSecondInvalidDTO dto) {
  890. Integer projectId = dto.getProjectId();
  891. Boolean ifSecondInvalid = dto.getIfSecondInvalid();
  892. if (ifSecondInvalid == null) {
  893. throw new XiaoShiException("");
  894. }
  895. //根据 项目id查询报告
  896. LambdaQueryWrapper<ReportProject> queryWrapper = new LambdaQueryWrapper<>();
  897. queryWrapper.eq(ReportProject::getProjectId, projectId);
  898. ReportProject reportProject = this.getOne(queryWrapper);
  899. if (reportProject == null) {
  900. throw new XiaoShiException("不存在报告");
  901. }
  902. reportProject.setIfSecondInvalid(dto.getIfSecondInvalid());
  903. reportProject.updateById();
  904. return true;
  905. }
  906. //装载查询语句
  907. private List<String> loadSearchSql(List<String> sqls) {
  908. PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  909. String id = personnelVO.getId();
  910. Integer tenantId = personnelVO.getTenantId();
  911. Integer roleType = personnelVO.getRoleType();
  912. String rootSql = "";
  913. if (roleType == null || roleType.equals(0)) {
  914. rootSql = "(t.createId =" + id + " or t.headId=" + id + " or t.id in (select project_id from asso_project_person where person_id =" + id + "))";
  915. } else if (roleType.equals(2)) {
  916. rootSql = "t.tenantId=" + tenantId;
  917. }
  918. if (sqls.get(0) != null && !sqls.get(0).equals("") && !rootSql.equals("")) {
  919. sqls.set(0, rootSql + " and " + "(" + sqls.get(0) + ")");
  920. } else if ((sqls.get(0) == null || sqls.get(0).equals("")) && !rootSql.equals("")) {
  921. sqls.set(0, rootSql);
  922. }
  923. return sqls;
  924. }
  925. public String getSelectMessage() {
  926. String tableName = "";
  927. tableName = "select p.id as id,p.name as name ,rp.sign_patent_no as signPatentNo,p.contract_no as\n" +
  928. " contract_no,p.volume_number as volumeNumber,p.commission_case_day as commissionCaseDay,\n" +
  929. " p.description as description,p.create_id as createId,p.create_time as createTime, rp.report_type as reportType ,\n" +
  930. " p.head_id as headId,p.department_id as departmentId, p.tenant_id as tenantId,\n" +
  931. " p.entrust_type as entrustType,p.entrust_id as entrustId,rp.product_or_tech as productOrTech,rp.cron_description\n" +
  932. " as cronDescription ,rp.status as status,rp.if_second_invalid as ifSecondInvalid,rp.case_number as caseNumber ,rp.issue_number as issueNumber ,rp.invalid_application as\n" +
  933. " invalidApplication ,rp.act_type as actType ,rp.patent_type as patentType ,rp.current_application as\n" +
  934. " currentApplication, rp.invention_name as inventionName,p.contract_no as contractNo,rp.carding_opinion,rp.official_deadline as officialDeadline,rp.oral_panel_members as oralPanelMembers,rp.evidence_risk_response as evidenceRiskResponse,\n" +
  935. " rp.accept_year as acceptYear,rp.applicant_agency as applicantAgency,rp.right_holder_agency as rightHolderAgency,rp.case_stage as caseStage,\n" +
  936. " aspe.event_id as eventId,arc.cron_id as cronId,aspm.matter_id as matterId,asps.scenario_id as scenarioId,rp.actual_person as actualPerson,rp.litigation_party as litigationParty,rp.right_holder as rightHolderStr from report as rp left join project as p on rp.project_id =p.id ";
  937. tableName += "left join asso_report_cron arc on p.id =arc.project_id " +
  938. "left join (select * from asso_project_event where scenario_id is not null ) as asps on p.id = asps.project_id " +
  939. "left join (select * from asso_project_event where event_id is not null ) as aspe on p.id = aspe.project_id " +
  940. "left join (select * from asso_project_event where matter_id is not null ) as aspm on p.id = aspm.project_id ";
  941. return tableName;
  942. }
  943. public Integer updateReportSingleColumn(UpdateSingleColumnDTO columnDTO) throws Exception {
  944. if (ObjectUtils.isEmpty(columnDTO)) {
  945. throw new XiaoShiException("请输入值");
  946. }
  947. Integer projectId = columnDTO.getProjectId();
  948. ReportProject reportProject = this.getOne(new LambdaQueryWrapper<ReportProject>()
  949. .eq(ReportProject::getProjectId, projectId));
  950. if (ObjectUtils.isEmpty(reportProject)) {
  951. throw new XiaoShiException("未查询到该报告");
  952. }
  953. String columnName = GenerateObjectUtil.getTableColumnName(reportProject, columnDTO.getField());
  954. if (StringUtils.isNotEmpty(columnName)) {
  955. reportProjectMapper.updateReportField(projectId, columnName, columnDTO.getValue());
  956. } else {
  957. throw new XiaoShiException("获取栏位错误");
  958. }
  959. return reportProject.getId();
  960. }
  961. public List<ReportProjectVO> queryReportVOs(QueryRequest queryRequest) throws Exception{
  962. String tableName = "reportProject";
  963. Boolean ifInvalidReport = queryRequest.getIfInvalidReport();
  964. if (ifInvalidReport != null && ifInvalidReport) {
  965. tableName = "invalidReportProject";
  966. }
  967. List<String> sqls = formatQueryService.reSqls(queryRequest, tableName);
  968. sqls = this.loadSearchSql(sqls);
  969. //根据sql查询事件信息
  970. List<ReportProjectVO> reportProject = reportProjectMapper.getReportProject(this.getSelectMessage(), sqls.get(0), sqls.get(1), sqls.get(2));
  971. this.loadReportProjectVO(reportProject, ifInvalidReport);
  972. return reportProject;
  973. }
  974. }