ReportProjectService.java 44 KB

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