ProjectTaskService.java 54 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228
  1. package cn.cslg.pas.service.business;
  2. import cn.cslg.pas.common.dto.business.*;
  3. import cn.cslg.pas.common.model.cronModel.Personnel;
  4. import cn.cslg.pas.common.model.cronModel.PersonnelVO;
  5. import cn.cslg.pas.common.model.cronModel.Records;
  6. import cn.cslg.pas.common.model.cronModel.SystemFile;
  7. import cn.cslg.pas.common.model.request.GroupRequest;
  8. import cn.cslg.pas.common.model.request.QueryRequest;
  9. import cn.cslg.pas.common.model.request.StringRequest;
  10. import cn.cslg.pas.common.utils.CacheUtils;
  11. import cn.cslg.pas.common.utils.LoginUtils;
  12. import cn.cslg.pas.common.vo.PatentWithIdVO;
  13. import cn.cslg.pas.common.vo.business.*;
  14. import cn.cslg.pas.domain.business.*;
  15. import cn.cslg.pas.domain.es.EsProjectTask;
  16. import cn.cslg.pas.domain.es.Patent;
  17. import cn.cslg.pas.domain.es.PatentJoin;
  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.mapper.ProjectTaskMapper;
  22. import cn.cslg.pas.service.AssoTaskFieldService;
  23. import cn.cslg.pas.service.MailSendService;
  24. import cn.cslg.pas.service.business.es.EsPatentService;
  25. import cn.cslg.pas.service.business.es.EsService;
  26. import cn.cslg.pas.service.common.FileManagerService;
  27. import cn.cslg.pas.service.permissions.PermissionService;
  28. import cn.cslg.pas.service.query.FormatQueryService;
  29. import com.alibaba.fastjson.JSONObject;
  30. import com.baomidou.mybatisplus.annotation.TableField;
  31. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  32. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  33. import org.springframework.beans.BeanUtils;
  34. import org.springframework.beans.factory.annotation.Autowired;
  35. import org.springframework.stereotype.Service;
  36. import org.springframework.transaction.annotation.Transactional;
  37. import org.springframework.web.bind.annotation.RequestBody;
  38. import org.springframework.web.multipart.MultipartFile;
  39. import java.io.IOException;
  40. import java.util.*;
  41. import java.util.stream.Collectors;
  42. /**
  43. * 任务模块
  44. *
  45. * @Author xiexiang
  46. * @Date 2023/11/21
  47. */
  48. @Service
  49. public class ProjectTaskService extends ServiceImpl<ProjectTaskMapper, ProjectTask> implements Business {
  50. @Autowired
  51. private CacheUtils cacheUtils;
  52. @Autowired
  53. private LoginUtils loginUtils;
  54. @Autowired
  55. private PatentDigProjectService patentDigProjectService;
  56. @Autowired
  57. private PatentDigProjectFilesService patentDigProjectFilesService;
  58. @Autowired
  59. private FormatQueryService formatQueryService;
  60. @Autowired
  61. private ProjectTaskMapper projectTaskMapper;
  62. @Autowired
  63. private PermissionService permissionService;
  64. @Autowired
  65. private AssoTaskFileService assoTaskFileService;
  66. @Autowired
  67. private TaskHandleResultService taskHandleResultService;
  68. @Autowired
  69. private AssoHandleResultFileService assoHandleResultFileService;
  70. @Autowired
  71. private FileManagerService fileManagerService;
  72. @Autowired
  73. private ProjectService projectService;
  74. @Autowired
  75. private AssoTaskPersonService assoTaskPersonService;
  76. @Autowired
  77. private TortCompareRecordService tortCompareRecordService;
  78. @Autowired
  79. private ReportProjectService reportProjectService;
  80. @Autowired
  81. private EsPatentService esPatentService;
  82. @Autowired
  83. private CompareLiteratureService compareLiteratureService;
  84. @Autowired
  85. private EsService esService;
  86. @Autowired
  87. private CustomFieldService customFieldService;
  88. @Autowired
  89. private AssoTaskFieldService assoTaskFieldService;
  90. @Autowired
  91. private FTOCompareRecordService ftoCompareRecordService;
  92. @Autowired
  93. private TaskCodeService taskCodeService;
  94. @Autowired
  95. private MailSendService mailSendService;
  96. /**
  97. * 挖掘项目开卷审核任务
  98. *
  99. * @param patentDigProjectTaskDTO
  100. * @return
  101. */
  102. public Object addProjectOpenAuditTask(PatentDigProjectTaskDTO patentDigProjectTaskDTO) {
  103. PatentDigProjectDTO patentDigProjectDTO = patentDigProjectTaskDTO.getPatentDigProjectDTO();
  104. ProjectTaskDTO projectTaskDTO = patentDigProjectTaskDTO.getProjectTaskDTO();
  105. //如果专利挖掘项目DTO不为空,则需要先建立专利挖掘项目
  106. if (patentDigProjectDTO != null) {
  107. Integer projectId = (Integer) patentDigProjectService.addMessage(patentDigProjectDTO);
  108. if (projectId != null) {
  109. projectTaskDTO.setProjectId(projectId);
  110. Integer projectTaskId = this.addTask(projectTaskDTO);
  111. if (projectTaskId != null) {
  112. //将专利挖掘项目状态置为开卷审核
  113. LambdaQueryWrapper<PatentDigProject> queryWrapper = new LambdaQueryWrapper<>();
  114. queryWrapper.eq(PatentDigProject::getProjectId, projectId);
  115. List<PatentDigProject> patentDigProjects = patentDigProjectService.list(queryWrapper);
  116. if (!patentDigProjects.isEmpty()) {
  117. PatentDigProject patentDigProject = patentDigProjects.get(0);
  118. patentDigProject.setState(0);
  119. patentDigProject.updateById();
  120. }
  121. }
  122. return projectTaskId;
  123. } else {
  124. throw new XiaoShiException("专利挖掘项目新增失败");
  125. }
  126. } else {
  127. throw new XiaoShiException("挖掘项目数据不能为空!");
  128. }
  129. }
  130. /**
  131. * 新建任务
  132. *
  133. * @param projectTaskDTO
  134. * @return
  135. */
  136. public Integer addTask(ProjectTaskDTO projectTaskDTO) {
  137. //判断专题库id不为空
  138. if (projectTaskDTO.getProjectId() == null) {
  139. throw new XiaoShiException("专题库id不能为空!");
  140. }
  141. //判断任务类型不为空
  142. if (projectTaskDTO.getType() == null) {
  143. throw new XiaoShiException("任务类型不能为空!");
  144. }
  145. //判断任务名称不为空
  146. projectTaskDTO.setName(projectTaskDTO.getName().trim());
  147. String name = projectTaskDTO.getName();
  148. if (name == null || name.equals("")) {
  149. throw new XiaoShiException("任务名称不能为空!");
  150. }
  151. //根据assoTaskId查询processId
  152. if (projectTaskDTO.getAssoTaskId() != null) {
  153. LambdaQueryWrapper<ProjectTask> queryWrapper = new LambdaQueryWrapper<>();
  154. queryWrapper.eq(ProjectTask::getId, projectTaskDTO.getAssoTaskId());
  155. List<ProjectTask> projectTasks = this.list(queryWrapper);
  156. if (projectTasks != null && projectTasks.size() != 0) {
  157. ProjectTask projectTask = projectTasks.get(0);
  158. projectTaskDTO.setProcessId(projectTask.getProcessId());
  159. }
  160. }
  161. ProjectTask projectTask = new ProjectTask();
  162. BeanUtils.copyProperties(projectTaskDTO, projectTask);
  163. //任务状态置为处理中
  164. projectTask.setStatus(2);
  165. //获取登录人信息
  166. PersonnelVO personnelVO = new PersonnelVO();
  167. try {
  168. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  169. } catch (Exception e) {
  170. throw new UnLoginException("未登录");
  171. }
  172. //设置任务的发起人
  173. projectTask.setCreateId(personnelVO.getId());
  174. projectTask.insert();
  175. //如果assoTaskId为空,就设置
  176. if (projectTask.getAssoTaskId() == null) {
  177. if (projectTask.getType() == 1 || projectTask.getType() == 6 || projectTask.getType() == 7) {
  178. projectTask.setAssoTaskId(projectTask.getId());
  179. projectTask.updateById();
  180. }
  181. }
  182. //新增任务可能会上传附件,如果附件不为空,则添加任务与附件关联
  183. if (projectTaskDTO.getFileGuids() != null) {
  184. AssoTaskFileDTO assoTaskFileDTO = new AssoTaskFileDTO();
  185. assoTaskFileDTO.setTaskId(projectTask.getId());
  186. assoTaskFileDTO.setFileGuids(projectTaskDTO.getFileGuids());
  187. assoTaskFileService.addTaskFile(assoTaskFileDTO);
  188. }
  189. //根据新增的审核任务的lastTaskId,将上一级任务状态改为审核中
  190. if (projectTask.getLastTaskId() != null && projectTask.getType().equals(5)) {
  191. LambdaQueryWrapper<ProjectTask> queryWrapper = new LambdaQueryWrapper<>();
  192. queryWrapper.eq(ProjectTask::getId, projectTask.getLastTaskId());
  193. List<ProjectTask> projectTasks = this.list(queryWrapper);
  194. if (projectTasks != null && projectTasks.size() != 0) {
  195. ProjectTask projectTask1 = projectTasks.get(0);
  196. projectTask1.setStatus(1);
  197. projectTask1.updateById();
  198. }
  199. }
  200. return projectTask.getId();
  201. }
  202. /**
  203. * 查询任务
  204. *
  205. * @param queryRequest
  206. * @return
  207. * @throws Exception
  208. */
  209. @Override
  210. public Object queryMessage(QueryRequest queryRequest) throws Exception {
  211. List<String> sqls = formatQueryService.reSqls(queryRequest, "projectTask");
  212. sqls=this.loadSearchSql(sqls);
  213. //根据sql查询任务信息
  214. List<ProjectTaskVO> projectTaskVOS = projectTaskMapper.getProjectTask(sqls.get(0), sqls.get(1), sqls.get(2));
  215. //查询总数
  216. Long total = projectTaskMapper.getProjectTaskCount(sqls.get(0));
  217. //装载事件信息
  218. this.loadProjectTask(projectTaskVOS);
  219. Records records = new Records();
  220. records.setCurrent(queryRequest.getCurrent());
  221. records.setSize(queryRequest.getSize());
  222. records.setData(projectTaskVOS);
  223. records.setTotal(total);
  224. return records;
  225. }
  226. /**
  227. * 装载任务
  228. *
  229. * @param projectTaskVOS
  230. * @throws IOException
  231. */
  232. public void loadProjectTask(List<ProjectTaskVO> projectTaskVOS) throws IOException {
  233. List<String> createIds = new ArrayList<>();
  234. List<String> handlerIds = new ArrayList<>();
  235. List<Integer> projectIds = new ArrayList<>();
  236. projectTaskVOS.forEach(
  237. item -> {
  238. if (item.getCreateId() != null) {
  239. createIds.add(item.getCreateId());
  240. }
  241. if (item.getHandler() != null && item.getHandlerType() != null && item.getHandlerType().equals(0)) {
  242. handlerIds.add(item.getHandler());
  243. }
  244. if (item.getProjectId() != null) {
  245. projectIds.add(item.getProjectId());
  246. }
  247. }
  248. );
  249. List<Personnel> personnels = new ArrayList<>();
  250. List<Personnel> personnels2 = new ArrayList<>();
  251. //查询发起人名称
  252. if (createIds.size() != 0) {
  253. String res = permissionService.getPersonnelByIdsFromPCS(createIds);
  254. JSONObject jsonObject = JSONObject.parseObject(res);
  255. personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
  256. }
  257. //查询负责人名称
  258. if (handlerIds.size() != 0) {
  259. String res = permissionService.getPersonnelByIdsFromPCS(handlerIds);
  260. JSONObject jsonObject = JSONObject.parseObject(res);
  261. personnels2 = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
  262. }
  263. //根据报告ids查询项目信息
  264. List<Project> projects = new ArrayList<>();
  265. if (!projectIds.isEmpty()) {
  266. projects = this.getProjectInfo(projectIds);
  267. }
  268. //装载信息
  269. for (ProjectTaskVO projectTaskVO : projectTaskVOS) {
  270. Integer handlerType = projectTaskVO.getHandlerType();
  271. //装载人员信息
  272. Personnel personnel = personnels.stream().filter(item -> item.getId().equals(projectTaskVO.getCreateId())).findFirst().orElse(null);
  273. if (personnel != null) {
  274. projectTaskVO.setCreateName(personnel.getPersonnelName());
  275. }
  276. if (handlerType != null && handlerType.equals(0)) {
  277. Personnel personnel2 = personnels2.stream().filter(item -> item.getId().equals(projectTaskVO.getHandler())).findFirst().orElse(null);
  278. if (personnel2 != null) {
  279. projectTaskVO.setHandlerName(personnel2.getPersonnelName());
  280. }
  281. } else {
  282. projectTaskVO.setHandlerName(projectTaskVO.getHandler());
  283. }
  284. String name = patentDigProjectFilesService.getProcessName(projectTaskVO.getProcessId());
  285. projectTaskVO.setProcessName(name);
  286. Project project = projects.stream().filter(item -> item.getId().equals(projectTaskVO.getProjectId())).findFirst().orElse(null);
  287. if (project != null) {
  288. projectTaskVO.setProjectName(project.getName());
  289. projectTaskVO.setProjectType(project.getType());
  290. if (project.getType().equals(2)) {//报告
  291. LambdaQueryWrapper<ReportProject> queryWrapper = new LambdaQueryWrapper<>();
  292. queryWrapper.eq(ReportProject::getProjectId, projectTaskVO.getProjectId());
  293. ReportProject reportProject = reportProjectService.getOne(queryWrapper, false);
  294. if (reportProject != null) {
  295. projectTaskVO.setReportType(reportProject.getReportType());
  296. }
  297. }
  298. }
  299. }
  300. }
  301. /**
  302. * 根据任务id查询任务详情以及处理结果以及审核历史
  303. *
  304. * @param taskId
  305. * @return
  306. */
  307. public TaskDetailsVO getAuditHistory(Integer taskId) throws IOException {
  308. //新建返回VO类
  309. TaskDetailsVO taskDetailsVO = new TaskDetailsVO();
  310. List<HandleResultFileVO> handleResultFileVOS = new ArrayList<>();
  311. List<AuditHistoryVO> auditHistoryVOS = new ArrayList<>();
  312. //根据taskId查询此条任务详情
  313. ProjectTask currentTask = this.getById(taskId);
  314. //根据此条任务详情获取assoTaskId
  315. //使用Optional避免空指针异常:使用Optional来处理可能为空的变量,例如currentTask和assoTask。
  316. Optional<ProjectTask> currentTaskOptional = Optional.ofNullable(currentTask);
  317. Integer assoTaskId = currentTaskOptional.map(ProjectTask::getAssoTaskId).orElse(null);
  318. List<ProjectTask> allProjectTasks = new ArrayList<>();
  319. if (assoTaskId != null) {
  320. //根据assoTaskId获取最初任务的详情
  321. LambdaQueryWrapper<ProjectTask> assoTaskWrapper = new LambdaQueryWrapper<>();
  322. assoTaskWrapper.eq(ProjectTask::getId, assoTaskId);
  323. ProjectTaskVO projectTaskVO = new ProjectTaskVO();
  324. ProjectTask assoTask = this.list(assoTaskWrapper).get(0);
  325. if (assoTask != null) {
  326. //装载最初任务详情
  327. BeanUtils.copyProperties(assoTask, projectTaskVO);
  328. taskDetailsVO.setProjectTaskVO(projectTaskVO);
  329. if (assoTask.getType() == 7) {
  330. //专利挖掘文件任务
  331. LambdaQueryWrapper<PatentDigProjectFiles> queryWrapper = new LambdaQueryWrapper<>();
  332. queryWrapper.eq(PatentDigProjectFiles::getTaskId, assoTask.getId());
  333. List<PatentDigProjectFiles> patentDigProjectFiles = patentDigProjectFilesService.list(queryWrapper);
  334. List<String> fileGuids = new ArrayList<>();
  335. List<SystemFile> systemFiles = new ArrayList<>();
  336. if (!patentDigProjectFiles.isEmpty()) {
  337. fileGuids = patentDigProjectFiles.stream().map(PatentDigProjectFiles::getFileGuid).collect(Collectors.toList());
  338. }
  339. //调用文件系统查询文件信息接口
  340. if (!fileGuids.isEmpty()) {
  341. String res = fileManagerService.getSystemFileFromFMS(fileGuids);
  342. systemFiles = JSONObject.parseArray(res, SystemFile.class);
  343. }
  344. if (!systemFiles.isEmpty()) {
  345. for (PatentDigProjectFiles patentDigProjectFiles1 : patentDigProjectFiles) {
  346. HandleResultFileVO handleResultFileVO = new HandleResultFileVO();
  347. //装载文件信息
  348. SystemFile systemFile = systemFiles.stream().filter(item -> item.getGuid().equals(patentDigProjectFiles1.getFileGuid())).findFirst().orElse(null);
  349. if (systemFile != null) {
  350. BeanUtils.copyProperties(patentDigProjectFiles1, handleResultFileVO);
  351. handleResultFileVO.setGuid(patentDigProjectFiles1.getFileGuid());
  352. handleResultFileVO.setType(systemFile.getType());
  353. handleResultFileVO.setOriginalName(systemFile.getOriginalName());
  354. }
  355. handleResultFileVOS.add(handleResultFileVO);
  356. }
  357. }
  358. }
  359. //根据assoTaskId查询所有任务的id
  360. LambdaQueryWrapper<ProjectTask> allTaskWrapper = new LambdaQueryWrapper<>();
  361. allTaskWrapper.eq(ProjectTask::getAssoTaskId, assoTaskId);
  362. allProjectTasks = this.list(allTaskWrapper);
  363. }
  364. }
  365. //审核历史返回VO以及集合
  366. if (allProjectTasks != null) {
  367. auditHistoryVOS = allProjectTasks.stream()
  368. //过滤筛选掉分配任务的信息
  369. .filter(item -> item.getId() != item.getAssoTaskId())
  370. .map(item -> {
  371. //新建VO
  372. AuditHistoryVO auditHistoryVO = new AuditHistoryVO();
  373. ProjectTaskVO auditHistoryTaskVO = new ProjectTaskVO();
  374. BeanUtils.copyProperties(item, auditHistoryTaskVO);
  375. //处理结果VO
  376. TaskHandleResultVO taskHandleResultVO = new TaskHandleResultVO();
  377. LambdaQueryWrapper<TaskHandleResult> queryWrapper = new LambdaQueryWrapper<>();
  378. queryWrapper.eq(TaskHandleResult::getTaskId, item.getId());
  379. List<TaskHandleResult> taskHandleResults = taskHandleResultService.list(queryWrapper);
  380. if (taskHandleResults.size() != 0) {
  381. TaskHandleResult taskHandleResult = taskHandleResults.get(0);
  382. if (taskHandleResult != null) {
  383. BeanUtils.copyProperties(taskHandleResult, taskHandleResultVO);
  384. auditHistoryVO.setProjectTaskVO(auditHistoryTaskVO);
  385. auditHistoryVO.setTaskHandleResultVO(taskHandleResultVO);
  386. return auditHistoryVO;
  387. }
  388. }
  389. return null;//返回空值不装到列表中
  390. })
  391. //过滤掉空对象
  392. .filter(Objects::nonNull)
  393. .sorted(Comparator.comparing(
  394. a -> a.getTaskHandleResultVO(),
  395. Comparator.nullsLast(Comparator.comparing(TaskHandleResultVO::getCreateTime, Comparator.reverseOrder()))))
  396. .collect(Collectors.toList());
  397. taskDetailsVO.setAuditHistoryVOS(auditHistoryVOS);
  398. }
  399. //全部的文件信息(获取所有的任务的id,查出所有的结果id)
  400. List<Integer> allTaskIds = allProjectTasks.stream().map(ProjectTask::getId).collect(Collectors.toList());
  401. LambdaQueryWrapper<TaskHandleResult> queryWrapper = new LambdaQueryWrapper<>();
  402. queryWrapper.in(TaskHandleResult::getTaskId, allTaskIds);
  403. List<TaskHandleResult> taskHandleResults = taskHandleResultService.list(queryWrapper);
  404. List<Integer> resultIds = new ArrayList<>();
  405. if (taskHandleResults != null && !taskHandleResults.isEmpty()) {
  406. resultIds = taskHandleResults.stream().map(TaskHandleResult::getId).collect(Collectors.toList());
  407. }
  408. //根据所有的结果ids查询所有fileGuids
  409. if (resultIds != null && !resultIds.isEmpty()) {
  410. LambdaQueryWrapper<AssoHandleResultFile> allGuidsWrapper = new LambdaQueryWrapper<>();
  411. allGuidsWrapper.in(AssoHandleResultFile::getTaskHandleResultId, resultIds);
  412. List<AssoHandleResultFile> assoHandleResultFiles = assoHandleResultFileService.list(allGuidsWrapper);
  413. List<String> fileGuids = new ArrayList<>();
  414. List<SystemFile> systemFiles = new ArrayList<>();
  415. if (!assoHandleResultFiles.isEmpty()) {
  416. fileGuids = assoHandleResultFiles.stream().map(AssoHandleResultFile::getFileGuid).collect(Collectors.toList());
  417. }
  418. //调用文件系统查询文件信息接口
  419. if (!fileGuids.isEmpty()) {
  420. String res = fileManagerService.getSystemFileFromFMS(fileGuids);
  421. systemFiles = JSONObject.parseArray(res, SystemFile.class);
  422. }
  423. if (!systemFiles.isEmpty()) {
  424. for (AssoHandleResultFile assoHandleResultFile : assoHandleResultFiles) {
  425. HandleResultFileVO handleResultFileVO = new HandleResultFileVO();
  426. //装载文件信息
  427. SystemFile systemFile = systemFiles.stream().filter(item -> item.getGuid().equals(assoHandleResultFile.getFileGuid())).findFirst().orElse(null);
  428. if (systemFile != null) {
  429. BeanUtils.copyProperties(assoHandleResultFile, handleResultFileVO);
  430. handleResultFileVO.setGuid(assoHandleResultFile.getFileGuid());
  431. handleResultFileVO.setType(systemFile.getType());
  432. handleResultFileVO.setOriginalName(systemFile.getOriginalName());
  433. }
  434. handleResultFileVOS.add(handleResultFileVO);
  435. }
  436. }
  437. }
  438. taskDetailsVO.setSystemFileList(handleResultFileVOS.stream()
  439. .sorted(Comparator.comparing(HandleResultFileVO::getCreateTime).reversed())
  440. .collect(Collectors.toList()));
  441. //装载名称
  442. this.loadTaskDetails(taskDetailsVO);
  443. return taskDetailsVO;
  444. }
  445. /**
  446. * 装载任务详情的集合
  447. *
  448. * @param taskDetailsVO
  449. * @throws IOException
  450. */
  451. public void loadTaskDetails(TaskDetailsVO taskDetailsVO) throws IOException {
  452. //装载项目名称
  453. Integer projectId = null;
  454. if (taskDetailsVO.getProjectTaskVO() != null) {
  455. projectId = taskDetailsVO.getProjectTaskVO().getProjectId();
  456. }
  457. if (projectId != null) {
  458. //根据项目id查询项目名称并装载
  459. LambdaQueryWrapper<PatentDigProject> queryWrapper = new LambdaQueryWrapper<>();
  460. queryWrapper.eq(PatentDigProject::getProjectId, projectId);
  461. List<PatentDigProject> patentDigProjects = patentDigProjectService.list(queryWrapper);
  462. if (patentDigProjects != null && patentDigProjects.size() != 0) {
  463. PatentDigProject patentDigProject = patentDigProjects.get(0);
  464. String projectName = patentDigProject.getName();
  465. taskDetailsVO.getProjectTaskVO().setProjectName(projectName);
  466. }
  467. }
  468. //新建人员id集合
  469. List<String> createIds = new ArrayList<>();
  470. //添加分配任务的创建人id
  471. if (taskDetailsVO.getProjectTaskVO().getCreateId() != null) {
  472. createIds.add(taskDetailsVO.getProjectTaskVO().getCreateId());
  473. }
  474. //添加分配任务的负责人id
  475. if (taskDetailsVO.getProjectTaskVO().getHandler() != null) {
  476. createIds.add(taskDetailsVO.getProjectTaskVO().getHandler());
  477. }
  478. //添加文件上传人的id
  479. taskDetailsVO.getSystemFileList().forEach(
  480. item -> {
  481. if (item.getCreateId() != null) {
  482. createIds.add(item.getCreateId());
  483. }
  484. }
  485. );
  486. //添加审查历史中的人员id
  487. taskDetailsVO.getAuditHistoryVOS().forEach(
  488. item -> {
  489. if (item.getProjectTaskVO() != null) {
  490. if (item.getProjectTaskVO().getCreateId() != null) {
  491. createIds.add(item.getProjectTaskVO().getCreateId());
  492. }
  493. if (item.getProjectTaskVO().getHandler() != null) {
  494. createIds.add(item.getProjectTaskVO().getHandler());
  495. }
  496. }
  497. if (item.getTaskHandleResultVO() != null) {
  498. if (item.getTaskHandleResultVO().getCreateId() != null) {
  499. createIds.add(item.getTaskHandleResultVO().getCreateId());
  500. }
  501. }
  502. }
  503. );
  504. List<Personnel> personnels = new ArrayList<>();
  505. //查询创建人名称
  506. if (createIds.size() != 0) {
  507. String res = permissionService.getPersonnelByIdsFromPCS(createIds);
  508. JSONObject jsonObject = JSONObject.parseObject(res);
  509. personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
  510. }
  511. //装载人员信息
  512. //分配任务的创建人name
  513. if (taskDetailsVO.getProjectTaskVO() != null) {
  514. Personnel personnel = personnels.stream().filter(item -> item.getId().equals(taskDetailsVO.getProjectTaskVO().getCreateId())).findFirst().orElse(null);
  515. if (personnel != null) {
  516. taskDetailsVO.getProjectTaskVO().setCreateName(personnel.getPersonnelName());
  517. } else {
  518. throw new XiaoShiException("未获取到分配任务的创建人id信息");
  519. }
  520. //分配任务的负责人name
  521. Personnel personnel1 = personnels.stream().filter(item -> item.getId().equals(taskDetailsVO.getProjectTaskVO().getHandler())).findFirst().orElse(null);
  522. if (personnel1 != null) {
  523. taskDetailsVO.getProjectTaskVO().setHandlerName(personnel1.getPersonnelName());
  524. } else {
  525. throw new XiaoShiException("未获取到分配任务的负责人id信息");
  526. }
  527. }
  528. //装载所有文件的上传人name
  529. for (HandleResultFileVO handleResultFileVO : taskDetailsVO.getSystemFileList()) {
  530. if (handleResultFileVO != null) {
  531. Personnel personnel2 = personnels.stream().filter(item -> item.getId().equals(handleResultFileVO.getCreateId())).findFirst().orElse(null);
  532. if (personnel2 != null) {
  533. handleResultFileVO.setCreateName(personnel2.getPersonnelName());
  534. } else {
  535. throw new XiaoShiException("未获取到所有文件上传人id信息");
  536. }
  537. }
  538. }
  539. //装载所有审查历史中的人员name
  540. for (AuditHistoryVO auditHistoryVO : taskDetailsVO.getAuditHistoryVOS()) {
  541. if (auditHistoryVO.getProjectTaskVO() != null) {
  542. Personnel personnel3 = personnels.stream().filter(item -> item.getId().equals(auditHistoryVO.getProjectTaskVO().getCreateId())).findFirst().orElse(null);
  543. if (personnel3 != null) {
  544. auditHistoryVO.getProjectTaskVO().setCreateName(personnel3.getPersonnelName());
  545. } else {
  546. throw new XiaoShiException("未获取到分配任务的负责人id信息");
  547. }
  548. Personnel personnel4 = personnels.stream().filter(item -> item.getId().equals(auditHistoryVO.getProjectTaskVO().getHandler())).findFirst().orElse(null);
  549. if (personnel4 != null) {
  550. auditHistoryVO.getProjectTaskVO().setHandlerName(personnel4.getPersonnelName());
  551. } else {
  552. throw new XiaoShiException("未获取到分配任务的负责人id信息");
  553. }
  554. }
  555. if (auditHistoryVO.getTaskHandleResultVO() != null) {
  556. Personnel personnel5 = personnels.stream().filter(item -> item.getId().equals(auditHistoryVO.getTaskHandleResultVO().getCreateId())).findFirst().orElse(null);
  557. if (personnel5 != null) {
  558. auditHistoryVO.getTaskHandleResultVO().setCreateName(personnel5.getPersonnelName());
  559. } else {
  560. throw new XiaoShiException("未获取到分配任务的负责人id信息");
  561. }
  562. }
  563. }
  564. }
  565. /**
  566. * 取消/完成任务
  567. *
  568. * @param taskId
  569. * @param type
  570. */
  571. public void finishTask(Integer taskId, Integer type) {
  572. //处理人直接完成任务
  573. LambdaQueryWrapper<ProjectTask> queryWrapper = new LambdaQueryWrapper<>();
  574. queryWrapper.eq(ProjectTask::getId, taskId);
  575. ProjectTask projectTask = this.getOne(queryWrapper, false);
  576. if (projectTask != null) {
  577. //查询出当前任务的类型
  578. //如果是分配任务/或者协同任务
  579. if (projectTask.getType() == 6) {
  580. //类型为0,需要完成任务
  581. if (type == 0) {
  582. //完成需要判断不为审核中
  583. if (projectTask.getStatus() != 1) {
  584. projectTask.setStatus(3);
  585. projectTask.updateById();
  586. } else {
  587. throw new XiaoShiException("任务状态为审核中,不可以完成");
  588. }
  589. } else if (type == 1) {
  590. //类型为1,取消任务
  591. projectTask.setStatus(5);
  592. projectTask.updateById();
  593. //所关联的审核任务的状态为处理中的设置为取消
  594. //根据assoTaskId查询出所有任务,过滤状态为处理中的
  595. Integer assoTaskId = projectTask.getAssoTaskId();
  596. if (assoTaskId != null) {
  597. LambdaQueryWrapper<ProjectTask> queryWrapper1 = new LambdaQueryWrapper<>();
  598. queryWrapper1.eq(ProjectTask::getAssoTaskId, assoTaskId).eq(ProjectTask::getStatus, 2);
  599. List<ProjectTask> projectTasks1 = this.list(queryWrapper1);
  600. if (!projectTasks1.isEmpty()) {
  601. projectTasks1.forEach(item -> {
  602. item.setStatus(5);
  603. });
  604. this.updateBatchById(projectTasks1);
  605. }
  606. }
  607. }
  608. //开卷审核项目(判断是报告还是挖掘项目)
  609. } else if (projectTask.getType() == 1) {
  610. Integer projectId = projectTask.getProjectId();
  611. //根据projectId查询类型
  612. LambdaQueryWrapper<Project> getType = new LambdaQueryWrapper<>();
  613. getType.eq(Project::getId, projectId);
  614. Project project = projectService.getOne(getType, false);
  615. Integer projectType = project.getType();
  616. //挖掘项目
  617. if (projectType != null && projectType.equals(3)) {
  618. LambdaQueryWrapper<PatentDigProject> queryWrapper1 = new LambdaQueryWrapper<>();
  619. queryWrapper1.eq(PatentDigProject::getProjectId, projectId);
  620. PatentDigProject patentDigProject = patentDigProjectService.getOne(queryWrapper1, false);
  621. if (patentDigProject != null) {
  622. if (type == 0) {
  623. //直接同意
  624. projectTask.setStatus(3);
  625. projectTask.updateById();
  626. patentDigProject.setState(2);
  627. patentDigProject.updateById();
  628. } else if (type == 1) {
  629. //取消
  630. projectTask.setStatus(5);
  631. projectTask.updateById();
  632. patentDigProject.setState(4);
  633. patentDigProject.updateById();
  634. } else if (type == 2) {
  635. //缺少资料
  636. projectTask.setStatus(4);
  637. projectTask.updateById();
  638. patentDigProject.setState(5);
  639. patentDigProject.updateById();
  640. }
  641. } else {
  642. throw new XiaoShiException("未查询到专利挖掘项目");
  643. }
  644. } else if (projectType != null && projectType.equals(2)) {//报告
  645. LambdaQueryWrapper<ReportProject> queryWrapper1 = new LambdaQueryWrapper<>();
  646. queryWrapper1.eq(ReportProject::getProjectId, projectId);
  647. ReportProject reportProject = reportProjectService.getOne(queryWrapper1, false);
  648. if (reportProject != null) {
  649. if (type == 0) {
  650. //直接同意
  651. projectTask.setStatus(3);
  652. projectTask.updateById();
  653. reportProject.setStatus(2);
  654. reportProject.updateById();
  655. } else if (type == 1) {
  656. //取消
  657. projectTask.setStatus(5);
  658. projectTask.updateById();
  659. reportProject.setStatus(4);
  660. reportProject.updateById();
  661. } else if (type == 2) {
  662. //缺少资料
  663. projectTask.setStatus(4);
  664. projectTask.updateById();
  665. reportProject.setStatus(5);
  666. reportProject.updateById();
  667. }
  668. } else {
  669. throw new XiaoShiException("未查询到报告");
  670. }
  671. }
  672. }
  673. //处理协同任务完成
  674. else if (projectTask.getType() == 4) {
  675. //获得请求人
  676. PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  677. if (type == 0) {
  678. //判断请求人是否为创建人
  679. if (personnelVO.getId() != null && personnelVO.getId().equals(projectTask.getCreateId())) {
  680. projectTask.setStatus(3);
  681. projectTask.updateById();
  682. } else {
  683. projectTask.setStatus(6);
  684. projectTask.updateById();
  685. }
  686. } else if (type == 1) {
  687. projectTask.setStatus(5);
  688. projectTask.updateById();
  689. }
  690. } else {
  691. if (type.equals(1)) {
  692. projectTask.setStatus(5);
  693. projectTask.updateById();
  694. }
  695. }
  696. } else {
  697. throw new XiaoShiException("该任务不存在");
  698. }
  699. }
  700. @Override
  701. public Object addMessage(Object object, List<MultipartFile> files) {
  702. return null;
  703. }
  704. @Override
  705. public Object deleteMessage(List<Integer> ids) throws IOException {
  706. return null;
  707. }
  708. @Override
  709. public Object updateMessage(Object object, List<MultipartFile> files) {
  710. return null;
  711. }
  712. @Override
  713. public Object getGroup(GroupRequest groupRequest, String tableName) throws Exception {
  714. return null;
  715. }
  716. @Override
  717. public Object addMessage(Object object) {
  718. return null;
  719. }
  720. @Override
  721. public Object updateMessage(Object object) {
  722. return null;
  723. }
  724. public List<Project> getProjectInfo(List<Integer> projectIds) {
  725. LambdaQueryWrapper<Project> queryWrapper = new LambdaQueryWrapper<>();
  726. queryWrapper.in(Project::getId, projectIds);
  727. List<Project> projects = projectService.list(queryWrapper);
  728. if (!projects.isEmpty()) {
  729. projects.forEach(item -> {
  730. Integer type = item.getType();
  731. if (type == 3) {
  732. //挖掘项目
  733. LambdaQueryWrapper<PatentDigProject> queryWrapper1 = new LambdaQueryWrapper<>();
  734. queryWrapper1.eq(PatentDigProject::getProjectId, item.getId());
  735. PatentDigProject patentDigProject = patentDigProjectService.getOne(queryWrapper1, false);
  736. item.setName(patentDigProject.getName());
  737. }
  738. });
  739. }
  740. return projects;
  741. }
  742. /**
  743. * 添加侵权分析协同任务
  744. */
  745. public Integer addTortTask(TortTaskDTO tortTaskDTO) {
  746. //1.保存任务信息 project_task表
  747. if (tortTaskDTO == null) {
  748. throw new XiaoShiException("入参不能为空!");
  749. }
  750. //判断报告id不为空
  751. if (tortTaskDTO.getProjectId() == null) {
  752. throw new XiaoShiException("报告id不能为空!");
  753. }
  754. //判断协同人员类型不为空
  755. if (tortTaskDTO.getHandlerType() == null) {
  756. throw new XiaoShiException("协同人员类型不能为空!");
  757. }
  758. //判断任务名称不为空
  759. tortTaskDTO.setName(tortTaskDTO.getName().trim());
  760. String name = tortTaskDTO.getName();
  761. if (name == null || name.equals("")) {
  762. throw new XiaoShiException("任务名称不能为空!");
  763. }
  764. tortTaskDTO.setType(4);
  765. //获取登录人信息
  766. PersonnelVO personnelVO = new PersonnelVO();
  767. try {
  768. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  769. } catch (Exception e) {
  770. throw new UnLoginException("未登录");
  771. }
  772. ProjectTask projectTask = new ProjectTask();
  773. BeanUtils.copyProperties(tortTaskDTO, projectTask);
  774. projectTask.setCreateId(personnelVO.getId());
  775. projectTask.setStatus(2);
  776. projectTask.insert();
  777. Integer taskId = projectTask.getId();
  778. //2.保存任务和人员关联表信息
  779. if (taskId != null) {
  780. List<CCPerson> ccPeople = tortTaskDTO.getCcPeople();
  781. this.addTaskAndCCPeople(personnelVO.getId(), taskId, ccPeople);
  782. } else {
  783. throw new XiaoShiException("创建任务失败,未读取到任务id");
  784. }
  785. //3.从侵权分析中获得对比结果,并复制保存
  786. tortCompareRecordService.copyTortCompareRecords(tortTaskDTO.getProjectId(), taskId, personnelVO.getId());
  787. //4.发送邮件通知协同人和抄送人
  788. //TODO
  789. return projectTask.getId();
  790. }
  791. /**
  792. * 保存任务和人员关联表信息
  793. *
  794. * @param taskId
  795. * @param ccPeople
  796. */
  797. public void addTaskAndCCPeople(String createId, Integer taskId, List<CCPerson> ccPeople) {
  798. if (createId == null && createId.equals("")) {
  799. throw new XiaoShiException("createId不能为空");
  800. }
  801. if (taskId == null) {
  802. throw new XiaoShiException("taskId不能为空");
  803. }
  804. if (ccPeople != null && !ccPeople.isEmpty()) {
  805. List<AssoTaskPerson> assoTaskPeople = new ArrayList<>();
  806. ccPeople.forEach(item -> {
  807. AssoTaskPerson assoTaskPerson = new AssoTaskPerson();
  808. assoTaskPerson.setPersonId(item.getPersonId());
  809. assoTaskPerson.setIfInner(item.getIfInner());
  810. assoTaskPerson.setTaskId(taskId);
  811. assoTaskPerson.setCreateId(createId);
  812. assoTaskPeople.add(assoTaskPerson);
  813. });
  814. assoTaskPersonService.saveBatch(assoTaskPeople);
  815. }
  816. }
  817. /**
  818. * 根据任务id查询专利号
  819. *
  820. * @param taskId
  821. * @return
  822. */
  823. public String getPatentNoByTaskId(Integer taskId) {
  824. //根据任务id查询报告id
  825. if (taskId == null) {
  826. throw new XiaoShiException("taskId不能为空");
  827. }
  828. Integer projectId = tortCompareRecordService.getProjectIdByTaskId(taskId);
  829. String patentNo = this.getPatentNoByProjectId(projectId);
  830. return patentNo;
  831. }
  832. /**
  833. * 根据projectId查询专利号
  834. *
  835. * @param projectId
  836. * @return
  837. */
  838. public String getPatentNoByProjectId(Integer projectId) {
  839. //根据报告id查询专利号
  840. LambdaQueryWrapper<ReportProject> queryWrapper1 = new LambdaQueryWrapper<>();
  841. queryWrapper1.eq(ReportProject::getProjectId, projectId);
  842. ReportProject reportProject = reportProjectService.getOne(queryWrapper1, false);
  843. if (reportProject != null) {
  844. String patentNo = reportProject.getSignPatentNo();
  845. return patentNo;
  846. } else {
  847. throw new XiaoShiException("报告为空");
  848. }
  849. }
  850. /**
  851. * 侵权分析报告开卷审核任务
  852. *
  853. * @param reportAuditTaskDTO
  854. * @return
  855. */
  856. public Object addReportOpenAuditTask(ReportAuditTaskDTO reportAuditTaskDTO) {
  857. ReportProjectDTO reportProjectDTO = reportAuditTaskDTO.getReportProjectDTO();
  858. ProjectTaskDTO projectTaskDTO = reportAuditTaskDTO.getProjectTaskDTO();
  859. //如果报告DTO不为空,则需要先建立报告
  860. if (reportProjectDTO != null) {
  861. Integer projectId = (Integer) reportProjectService.addMessage(reportProjectDTO);
  862. if (projectId != null) {
  863. projectTaskDTO.setProjectId(projectId);
  864. Integer projectTaskId = this.addTask(projectTaskDTO);
  865. if (projectTaskId != null) {
  866. //将侵权分析报告置为开卷审核
  867. LambdaQueryWrapper<ReportProject> queryWrapper = new LambdaQueryWrapper<>();
  868. queryWrapper.eq(ReportProject::getProjectId, projectId);
  869. ReportProject reportProject = reportProjectService.getOne(queryWrapper, false);
  870. reportProject.setStatus(0);
  871. reportProject.updateById();
  872. }
  873. return projectTaskId;
  874. } else {
  875. throw new XiaoShiException("侵权分析报告新增失败");
  876. }
  877. } else {
  878. throw new XiaoShiException("侵权分析报告数据不能为空!");
  879. }
  880. }
  881. @Transactional(rollbackFor = Exception.class)
  882. public List<Integer> addMarkTask(MarkTaskDTO markTaskDTO) throws Exception {
  883. Integer projectId = markTaskDTO.getProjectId();
  884. List<MarkTaskDTO.MarkedField> markedFields = markTaskDTO.getMarkedFields();
  885. //获取人员专利
  886. List<PersonAssignedDTO> personAssignedDTOList = markTaskDTO.getPersonAssignedDTOList();
  887. //获取任务类型
  888. Integer taskType = markTaskDTO.getTaskType();
  889. //获取任务名称
  890. String taskName = markTaskDTO.getName();
  891. //获得截止时间
  892. Date deadLineTime = markTaskDTO.getDeadLineTime();
  893. List<Integer> ids = new ArrayList<>();
  894. StringRequest stringRequest = markTaskDTO.getStringRequest();
  895. //过滤出已经添加的专利
  896. PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  897. //添加任务批次
  898. TaskBatch taskBatch = new TaskBatch();
  899. taskBatch.setCreateId(personnelVO.getId());
  900. taskBatch.insert();
  901. Integer taskBatchId = taskBatch.getId();
  902. List<String> patentNos = new ArrayList<>();
  903. List<Integer> nums = new ArrayList<>();
  904. personAssignedDTOList.forEach(item -> {
  905. if (item.getPatentNos() != null && item.getPatentNos().size() != 0) {
  906. patentNos.addAll(item.getPatentNos());
  907. } else {
  908. if (item.getPatentNum() != null) {
  909. nums.add(item.getPatentNum());
  910. }
  911. }
  912. });
  913. Integer current = 0;
  914. for (PersonAssignedDTO item : personAssignedDTOList) {
  915. List<String> addPatentNos = new ArrayList<>();
  916. //创建任务
  917. ProjectTaskDTO projectTaskDTO = new ProjectTaskDTO();
  918. projectTaskDTO.setType(taskType);
  919. projectTaskDTO.setName(taskName);
  920. projectTaskDTO.setDeadLineTime(deadLineTime);
  921. projectTaskDTO.setHandler(item.getPersonId());
  922. projectTaskDTO.setHandlerType(0);
  923. projectTaskDTO.setProjectId(projectId);
  924. Integer taskId = this.addTask(projectTaskDTO);
  925. ids.add(taskId);
  926. //添加任务和标引关联
  927. this.addAssoTaskField(markedFields, taskId, taskBatchId, projectId);
  928. //根据检索式和已经添加的专利以及位置获得专利
  929. if (item.getPatentNos() == null || item.getPatentNos().size() == 0) {
  930. if (nums.size() > 0) {
  931. Integer num = nums.remove(0);
  932. stringRequest.setCurrent(Long.parseLong(current.toString()));
  933. stringRequest.setSize(Long.parseLong(num.toString()));
  934. stringRequest.setProjectId(projectId);
  935. current += num;
  936. List<Patent> patentList = esPatentService.getPatentsWithNotNo(stringRequest, patentNos);
  937. addPatentNos = patentList.stream().map(Patent::getPatentNo).collect(Collectors.toList());
  938. }
  939. } else {
  940. addPatentNos = item.getPatentNos();
  941. }
  942. //添加专利
  943. this.addCompareLiteratureByNosToEs(addPatentNos, taskId, projectId);
  944. }
  945. return ids;
  946. }
  947. //添加对比文献和专利号关联
  948. private void addCompareLiteratureByNos(List<String> patentNos, Integer taskId, Integer projectId) {
  949. List<CompareLiterature> compareLiteratures = new ArrayList<>();
  950. if (patentNos == null || patentNos.size() == 0) {
  951. return;
  952. } else {
  953. patentNos.forEach(item -> {
  954. CompareLiterature compareLiterature = new CompareLiterature();
  955. compareLiterature.setLiteratureNo(item);
  956. compareLiterature.setProjectId(projectId);
  957. compareLiterature.setName(item);
  958. compareLiteratures.add(compareLiterature);
  959. });
  960. }
  961. compareLiteratureService.saveBatch(compareLiteratures);
  962. }
  963. /**
  964. * 添加FTO协同任务
  965. *
  966. * @param tortTaskDTO
  967. * @return
  968. */
  969. public Integer addFTOAssitTask(TortTaskDTO tortTaskDTO) {
  970. //1.保存任务信息 project_task表
  971. if (tortTaskDTO == null) {
  972. throw new XiaoShiException("入参不能为空!");
  973. }
  974. //判断报告id不为空
  975. Integer projectId = tortTaskDTO.getProjectId();
  976. if (projectId == null) {
  977. throw new XiaoShiException("报告id不能为空!");
  978. }
  979. //判断协同人员类型不为空
  980. if (tortTaskDTO.getHandlerType() == null) {
  981. throw new XiaoShiException("协同人员类型不能为空!");
  982. }
  983. //判断任务名称不为空
  984. tortTaskDTO.setName(tortTaskDTO.getName().trim());
  985. String name = tortTaskDTO.getName();
  986. if (name == null || name.equals("")) {
  987. throw new XiaoShiException("任务名称不能为空!");
  988. }
  989. tortTaskDTO.setType(4);
  990. //获取登录人信息
  991. PersonnelVO personnelVO = new PersonnelVO();
  992. try {
  993. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  994. } catch (Exception e) {
  995. throw new UnLoginException("未登录");
  996. }
  997. ProjectTask projectTask = new ProjectTask();
  998. BeanUtils.copyProperties(tortTaskDTO, projectTask);
  999. projectTask.setCreateId(personnelVO.getId());
  1000. projectTask.setStatus(2);
  1001. projectTask.insert();
  1002. Integer taskId = projectTask.getId();
  1003. //2.compareLiterature入库
  1004. List<String> patentNos = tortTaskDTO.getPatentNos();
  1005. if (!patentNos.isEmpty()) {
  1006. try {
  1007. this.addCompareLiteratureByNosToEs(patentNos, taskId, projectId);
  1008. //3.从侵权分析中获得对比结果,并复制保存
  1009. //taskId是协同任务id
  1010. ftoCompareRecordService.copyFTOCompareRecords(tortTaskDTO.getProjectId(), taskId, personnelVO.getId(), patentNos);
  1011. } catch (Exception e) {
  1012. throw new XiaoShiException(e.toString());
  1013. }
  1014. }
  1015. //4.保存任务和人员关联表信息
  1016. if (taskId != null) {
  1017. List<CCPerson> ccPeople = tortTaskDTO.getCcPeople();
  1018. this.addTaskAndCCPeople(personnelVO.getId(), taskId, ccPeople);
  1019. //发送给抄送人
  1020. for (CCPerson item : ccPeople) {
  1021. mailSendService.sentToCCMail(item.getPersonId(), item.getIfInner(), personnelVO.getId());
  1022. }
  1023. } else {
  1024. throw new XiaoShiException("创建任务失败,未读取到任务id");
  1025. }
  1026. //5.发送邮件通知协同人
  1027. //获取code码
  1028. String code = taskCodeService.addTaskCode(taskId);
  1029. Boolean ifInner = true;
  1030. if (tortTaskDTO.getHandlerType() == 0) {
  1031. ifInner = true;
  1032. } else {
  1033. ifInner = false;
  1034. }
  1035. LambdaQueryWrapper<ReportProject> queryWrapper = new LambdaQueryWrapper<>();
  1036. queryWrapper.eq(ReportProject::getProjectId, projectId);
  1037. ReportProject reportProject = reportProjectService.getOne(queryWrapper, false);
  1038. Integer reportType = null;
  1039. if (reportProject != null) {
  1040. reportType = reportProject.getReportType();
  1041. }
  1042. mailSendService.sendSynery(projectTask.getHandler(), ifInner, projectId, taskId, reportType, code);
  1043. return projectTask.getId();
  1044. }
  1045. /**
  1046. * 添加任务与专利关联到ES
  1047. *
  1048. * @param patentNos
  1049. * @param taskId
  1050. * @param projectId
  1051. * @throws Exception
  1052. */
  1053. private void addCompareLiteratureByNosToEs(List<String> patentNos, Integer taskId, Integer projectId) throws Exception {
  1054. if (patentNos == null || patentNos.size() == 0) {
  1055. return;
  1056. } else {
  1057. patentNos.forEach(item -> {
  1058. //根据专利号查询专利
  1059. PatentWithIdVO patentWithIdVO = null;
  1060. try {
  1061. patentWithIdVO = esService.getIdByPatentNo(item);
  1062. } catch (Exception e) {
  1063. e.printStackTrace();
  1064. }
  1065. if (patentWithIdVO != null) {
  1066. String id = patentWithIdVO.getId();
  1067. if (id != null || !id.trim().equals("")) {
  1068. Patent patent = new Patent();
  1069. EsProjectTask esProjectTask = new EsProjectTask();
  1070. esProjectTask.setProjectId(projectId);
  1071. esProjectTask.setTaskId(taskId);
  1072. PatentJoin patentJoin = new PatentJoin();
  1073. patentJoin.setParent(id);
  1074. patentJoin.setName("task");
  1075. patent.setPatentJoin(patentJoin);
  1076. patent.setProjectTask(esProjectTask);
  1077. try {
  1078. esService.addChildPatent(patent, id);
  1079. } catch (Exception e) {
  1080. }
  1081. }
  1082. }
  1083. });
  1084. }
  1085. }
  1086. private void addAssoTaskField(List<MarkTaskDTO.MarkedField> markedFields, Integer taskId, Integer batchId, Integer projectId) {
  1087. List<AssoTaskField> assoTaskFields = new ArrayList<>();
  1088. if (markedFields == null || markedFields.size() == 0) {
  1089. //根据projectId 查询所有标引栏位
  1090. List<AllCustomFieldVO> customFieldVOS = customFieldService.getAllProjectCustomField(projectId);
  1091. if (customFieldVOS != null && customFieldVOS.size() > 0) {
  1092. customFieldVOS.forEach(item -> {
  1093. AssoTaskField assoTaskField = new AssoTaskField();
  1094. assoTaskField.setFieldId(item.getId());
  1095. assoTaskField.setFieldType(item.getType());
  1096. assoTaskField.setTaskId(taskId);
  1097. assoTaskField.setProjectId(batchId);
  1098. assoTaskField.setProjectId(projectId);
  1099. assoTaskFields.add(assoTaskField);
  1100. });
  1101. }
  1102. } else {
  1103. markedFields.forEach(item -> {
  1104. AssoTaskField assoTaskField = new AssoTaskField();
  1105. assoTaskField.setFieldId(item.getFieldId());
  1106. assoTaskField.setFieldType(item.getFieldType());
  1107. assoTaskField.setTaskId(taskId);
  1108. assoTaskField.setProjectId(batchId);
  1109. assoTaskField.setProjectId(projectId);
  1110. assoTaskFields.add(assoTaskField);
  1111. });
  1112. }
  1113. assoTaskFieldService.saveBatch(assoTaskFields);
  1114. }
  1115. public Optional<ProjectTask> getByIdOpt(Integer id) {
  1116. ProjectTask projectTask = projectTaskMapper.selectById(id);
  1117. return Optional.ofNullable(projectTask);
  1118. }
  1119. /**
  1120. *
  1121. */
  1122. public void getPatent(String patentNo, Integer taskId) {
  1123. }
  1124. /**
  1125. * 更新任务
  1126. * @param updateProjectTaskDTO
  1127. * @return
  1128. */
  1129. public Integer updateTask(UpdateProjectTaskDTO updateProjectTaskDTO){
  1130. if (updateProjectTaskDTO == null) {
  1131. throw new XiaoShiException("入参为空");
  1132. }
  1133. Integer id = updateProjectTaskDTO.getId();
  1134. ProjectTask projectTask = this.getById(id);
  1135. if (projectTask != null) {
  1136. BeanUtils.copyProperties(updateProjectTaskDTO, projectTask);
  1137. projectTask.updateById();
  1138. }
  1139. return projectTask.getId();
  1140. }
  1141. //装载查询语句
  1142. private List<String> loadSearchSql(List<String> sqls){
  1143. PersonnelVO personnelVO =cacheUtils.getLoginUser(loginUtils.getId());
  1144. String id =personnelVO.getId();
  1145. String rootSql ="(create_id ="+id+" or handler="+id+")";
  1146. if(sqls.get(0)!=null&&!sqls.get(0).equals(""))
  1147. {
  1148. sqls.set(0,rootSql+" and"+"("+sqls.get(0)+")");
  1149. }
  1150. else {
  1151. sqls.set(0,rootSql);
  1152. }
  1153. return sqls;
  1154. }
  1155. }