ProjectTaskService.java 52 KB

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