ProjectTaskService.java 52 KB

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