ReportProjectService.java 44 KB

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