ProjectTaskService.java 72 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625
  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.projectTask.*;
  8. import cn.cslg.pas.common.model.request.GroupRequest;
  9. import cn.cslg.pas.common.model.request.QueryRequest;
  10. import cn.cslg.pas.common.model.request.StringRequest;
  11. import cn.cslg.pas.common.utils.CacheUtils;
  12. import cn.cslg.pas.common.utils.FormatUtil;
  13. import cn.cslg.pas.common.utils.LoginUtils;
  14. import cn.cslg.pas.common.vo.PatentWithIdVO;
  15. import cn.cslg.pas.common.vo.business.*;
  16. import cn.cslg.pas.domain.business.*;
  17. import cn.cslg.pas.domain.es.EsProjectTask;
  18. import cn.cslg.pas.domain.es.Patent;
  19. import cn.cslg.pas.domain.es.PatentJoin;
  20. import cn.cslg.pas.exception.UnLoginException;
  21. import cn.cslg.pas.exception.XiaoShiException;
  22. import cn.cslg.pas.factorys.businessFactory.Business;
  23. import cn.cslg.pas.mapper.ProjectTaskMapper;
  24. import cn.cslg.pas.service.AssoTaskFieldService;
  25. import cn.cslg.pas.service.MailSendService;
  26. import cn.cslg.pas.service.business.es.EsPatentService;
  27. import cn.cslg.pas.service.business.es.EsService;
  28. import cn.cslg.pas.service.common.FileManagerService;
  29. import cn.cslg.pas.service.permissions.PermissionService;
  30. import cn.cslg.pas.service.query.FormatQueryService;
  31. import com.alibaba.fastjson.JSONObject;
  32. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  33. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  34. import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  35. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  36. import org.springframework.beans.BeanUtils;
  37. import org.springframework.beans.factory.annotation.Autowired;
  38. import org.springframework.stereotype.Service;
  39. import org.springframework.transaction.annotation.Propagation;
  40. import org.springframework.transaction.annotation.Transactional;
  41. import org.springframework.web.multipart.MultipartFile;
  42. import java.io.File;
  43. import java.io.IOException;
  44. import java.util.*;
  45. import java.util.stream.Collectors;
  46. /**
  47. * 任务模块
  48. *
  49. * @Author xiexiang
  50. * @Date 2023/11/21
  51. */
  52. @Service
  53. public class ProjectTaskService extends ServiceImpl<ProjectTaskMapper, ProjectTask> implements Business {
  54. @Autowired
  55. private CacheUtils cacheUtils;
  56. @Autowired
  57. private LoginUtils loginUtils;
  58. @Autowired
  59. private PatentDigProjectService patentDigProjectService;
  60. @Autowired
  61. private PatentDigProjectFilesService patentDigProjectFilesService;
  62. @Autowired
  63. private FormatQueryService formatQueryService;
  64. @Autowired
  65. private ProjectTaskMapper projectTaskMapper;
  66. @Autowired
  67. private PermissionService permissionService;
  68. @Autowired
  69. private AssoTaskFileService assoTaskFileService;
  70. @Autowired
  71. private TaskHandleResultService taskHandleResultService;
  72. @Autowired
  73. private AssoHandleResultFileService assoHandleResultFileService;
  74. @Autowired
  75. private FileManagerService fileManagerService;
  76. @Autowired
  77. private ProjectService projectService;
  78. @Autowired
  79. private AssoTaskPersonService assoTaskPersonService;
  80. @Autowired
  81. private TortCompareRecordService tortCompareRecordService;
  82. @Autowired
  83. private ReportProjectService reportProjectService;
  84. @Autowired
  85. private EsPatentService esPatentService;
  86. @Autowired
  87. private CompareLiteratureService compareLiteratureService;
  88. @Autowired
  89. private EsService esService;
  90. @Autowired
  91. private CustomFieldService customFieldService;
  92. @Autowired
  93. private AssoTaskFieldService assoTaskFieldService;
  94. @Autowired
  95. private FTOCompareRecordService ftoCompareRecordService;
  96. @Autowired
  97. private TaskCodeService taskCodeService;
  98. @Autowired
  99. private MailSendService mailSendService;
  100. @Autowired
  101. private AssoProjectPersonService assoProjectPersonService;
  102. /**
  103. * 挖掘项目开卷审核任务
  104. *
  105. * @param patentDigProjectTaskDTO
  106. * @return
  107. */
  108. public Object addProjectOpenAuditTask(PatentDigProjectTaskDTO patentDigProjectTaskDTO) {
  109. PatentDigProjectDTO patentDigProjectDTO = patentDigProjectTaskDTO.getPatentDigProjectDTO();
  110. ProjectTaskDTO projectTaskDTO = patentDigProjectTaskDTO.getProjectTaskDTO();
  111. TaskFormDTO taskFormDTO = toTaskFormDTO(projectTaskDTO);
  112. //如果专利挖掘项目DTO不为空,则需要先建立专利挖掘项目
  113. if (patentDigProjectDTO != null) {
  114. patentDigProjectDTO.setId(null);
  115. Integer projectId = (Integer) patentDigProjectService.addMessage(patentDigProjectDTO);
  116. if (projectId != null) {
  117. projectTaskDTO.setProjectId(projectId);
  118. projectTaskDTO.setType(1);
  119. ProjectTask projectTask = this.addTaskByTaskFormDTO(taskFormDTO, projectId);
  120. Integer projectTaskId = projectTask.getId();
  121. if (projectTaskId != null) {
  122. //将专利挖掘项目状态置为开卷审核
  123. LambdaUpdateWrapper<PatentDigProject> queryWrapper = new LambdaUpdateWrapper<>();
  124. queryWrapper.eq(PatentDigProject::getProjectId, projectId);
  125. queryWrapper.set(PatentDigProject::getState, 0);
  126. patentDigProjectService.update(queryWrapper);
  127. }
  128. return projectTaskId;
  129. } else {
  130. throw new XiaoShiException("专利挖掘项目新增失败");
  131. }
  132. } else {
  133. throw new XiaoShiException("挖掘项目数据不能为空!");
  134. }
  135. }
  136. /**
  137. * 新建任务
  138. *
  139. * @param projectTaskDTO
  140. * @return
  141. */
  142. public Integer addTask(ProjectTaskDTO projectTaskDTO) throws Exception {
  143. //判断专题库id不为空
  144. if (projectTaskDTO.getProjectId() == null) {
  145. throw new XiaoShiException("专题库id不能为空!");
  146. }
  147. //判断任务类型不为空
  148. if (projectTaskDTO.getType() == null) {
  149. throw new XiaoShiException("任务类型不能为空!");
  150. }
  151. //判断任务名称不为空
  152. projectTaskDTO.setName(projectTaskDTO.getName().trim());
  153. String name = projectTaskDTO.getName();
  154. if (name == null || name.equals("")) {
  155. throw new XiaoShiException("任务名称不能为空!");
  156. }
  157. //根据assoTaskId查询processId
  158. if (projectTaskDTO.getAssoTaskId() != null) {
  159. LambdaQueryWrapper<ProjectTask> queryWrapper = new LambdaQueryWrapper<>();
  160. queryWrapper.eq(ProjectTask::getId, projectTaskDTO.getAssoTaskId());
  161. List<ProjectTask> projectTasks = this.list(queryWrapper);
  162. if (projectTasks != null && projectTasks.size() != 0) {
  163. ProjectTask projectTask = projectTasks.get(0);
  164. projectTaskDTO.setProcessId(projectTask.getProcessId());
  165. }
  166. }
  167. ProjectTask projectTask = new ProjectTask();
  168. BeanUtils.copyProperties(projectTaskDTO, projectTask);
  169. projectTask.setLastTaskId(null);
  170. //任务状态置为处理中
  171. projectTask.setStatus(2);
  172. //获取登录人信息
  173. PersonnelVO personnelVO = new PersonnelVO();
  174. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  175. //设置任务的发起人
  176. projectTask.setCreateId(personnelVO.getId());
  177. projectTask.insert();
  178. Integer taskId = projectTask.getId();
  179. //新增任务可能会上传附件,如果附件不为空,则添加任务与附件关联
  180. if (projectTaskDTO.getFileGuids() != null) {
  181. AssoTaskFileDTO assoTaskFileDTO = new AssoTaskFileDTO();
  182. assoTaskFileDTO.setTaskId(projectTask.getId());
  183. assoTaskFileDTO.setFileGuids(projectTaskDTO.getFileGuids());
  184. assoTaskFileService.addTaskFile(assoTaskFileDTO);
  185. }
  186. if (projectTaskDTO.getLastTaskId() != null) {
  187. LambdaQueryWrapper<TaskHandleResult> queryWrapper = new LambdaQueryWrapper<>();
  188. queryWrapper.eq(TaskHandleResult::getTaskId, projectTaskDTO.getLastTaskId());
  189. TaskHandleResult taskHandleResult = taskHandleResultService.getOne(queryWrapper, false);
  190. if (taskHandleResult != null) {
  191. Integer resultId = taskHandleResult.getId();
  192. LambdaQueryWrapper<AssoHandleResultFile> queryWrapper1 = new LambdaQueryWrapper<>();
  193. queryWrapper1.eq(AssoHandleResultFile::getTaskHandleResultId, resultId);
  194. List<AssoHandleResultFile> assoHandleResultFiles = assoHandleResultFileService.list(queryWrapper1);
  195. List<FileDTO> fileDTOS = new ArrayList<>();
  196. this.getCopyFileDTOs(assoHandleResultFiles, fileDTOS);
  197. FileFormDTO fileFormDTO = new FileFormDTO();
  198. fileFormDTO.setFiles(fileDTOS);
  199. this.addProjectTaskFileByFormDTO(fileFormDTO, taskId);
  200. }
  201. }
  202. //根据新增的审核任务的lastTaskId,将上一级任务状态改为审核中
  203. if (projectTask.getLastTaskId() != null && projectTask.getType().equals(5)) {
  204. LambdaUpdateWrapper<ProjectTask> queryWrapper = new LambdaUpdateWrapper<>();
  205. queryWrapper.eq(ProjectTask::getId, projectTask.getLastTaskId());
  206. queryWrapper.set(ProjectTask::getStatus, 1);
  207. this.update(queryWrapper);
  208. }
  209. //项目可见人检验
  210. //如果是内部人员
  211. if (projectTask.getHandlerType().equals(0)) {
  212. this.checkProjectPerson(1, projectTask.getHandler(), projectTask.getProjectId(), projectTask.getId());
  213. }
  214. return projectTask.getId();
  215. }
  216. /**
  217. * 查询任务
  218. *
  219. * @param queryRequest
  220. * @return
  221. * @throws Exception
  222. */
  223. @Override
  224. public Object queryMessage(QueryRequest queryRequest) throws Exception {
  225. List<String> sqls = formatQueryService.reSqls(queryRequest, "projectTask");
  226. sqls = this.loadSearchSql(sqls);
  227. //根据sql查询任务信息
  228. List<ProjectTaskVO> projectTaskVOS = projectTaskMapper.getProjectTask(sqls.get(0), sqls.get(1), sqls.get(2));
  229. //查询总数
  230. Long total = projectTaskMapper.getProjectTaskCount(sqls.get(0));
  231. //装载事件信息
  232. this.loadProjectTask(projectTaskVOS);
  233. Records records = new Records();
  234. records.setCurrent(queryRequest.getCurrent());
  235. records.setSize(queryRequest.getSize());
  236. records.setData(projectTaskVOS);
  237. records.setTotal(total);
  238. return records;
  239. }
  240. /**
  241. * 装载任务
  242. *
  243. * @param projectTaskVOS
  244. * @throws IOException
  245. */
  246. public void loadProjectTask(List<ProjectTaskVO> projectTaskVOS) throws IOException {
  247. List<String> createIds = new ArrayList<>();
  248. List<String> handlerIds = new ArrayList<>();
  249. List<Integer> projectIds = new ArrayList<>();
  250. projectTaskVOS.forEach(
  251. item -> {
  252. if (item.getCreateId() != null) {
  253. createIds.add(item.getCreateId());
  254. }
  255. if (item.getHandler() != null && item.getHandlerType() != null && item.getHandlerType().equals(0)) {
  256. handlerIds.add(item.getHandler());
  257. }
  258. if (item.getProjectId() != null) {
  259. projectIds.add(item.getProjectId());
  260. }
  261. }
  262. );
  263. List<Personnel> personnels = new ArrayList<>();
  264. List<Personnel> personnels2 = new ArrayList<>();
  265. //查询发起人名称
  266. if (createIds.size() != 0) {
  267. String res = permissionService.getPersonnelByIdsFromPCS(createIds);
  268. JSONObject jsonObject = JSONObject.parseObject(res);
  269. personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
  270. }
  271. //查询负责人名称
  272. if (handlerIds.size() != 0) {
  273. String res = permissionService.getPersonnelByIdsFromPCS(handlerIds);
  274. JSONObject jsonObject = JSONObject.parseObject(res);
  275. personnels2 = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
  276. }
  277. //根据报告ids查询项目信息
  278. List<Project> projects = new ArrayList<>();
  279. if (!projectIds.isEmpty()) {
  280. projects = this.getProjectInfo(projectIds);
  281. }
  282. //装载信息
  283. for (ProjectTaskVO projectTaskVO : projectTaskVOS) {
  284. Integer handlerType = projectTaskVO.getHandlerType();
  285. //装载人员信息
  286. Personnel personnel = personnels.stream().filter(item -> item.getId().equals(projectTaskVO.getCreateId())).findFirst().orElse(null);
  287. if (personnel != null) {
  288. projectTaskVO.setCreateName(personnel.getPersonnelName());
  289. }
  290. if (handlerType != null && handlerType.equals(0)) {
  291. Personnel personnel2 = personnels2.stream().filter(item -> item.getId().equals(projectTaskVO.getHandler())).findFirst().orElse(null);
  292. if (personnel2 != null) {
  293. projectTaskVO.setHandlerName(personnel2.getPersonnelName());
  294. }
  295. } else {
  296. projectTaskVO.setHandlerName(projectTaskVO.getHandler());
  297. }
  298. String name = patentDigProjectFilesService.getProcessName(projectTaskVO.getProcessId());
  299. projectTaskVO.setProcessName(name);
  300. Project project = projects.stream().filter(item -> item.getId().equals(projectTaskVO.getProjectId())).findFirst().orElse(null);
  301. if (project != null) {
  302. projectTaskVO.setProjectName(project.getName());
  303. projectTaskVO.setProjectType(project.getType());
  304. if (project.getType().equals(2)) {//报告
  305. LambdaQueryWrapper<ReportProject> queryWrapper = new LambdaQueryWrapper<>();
  306. queryWrapper.eq(ReportProject::getProjectId, projectTaskVO.getProjectId());
  307. ReportProject reportProject = reportProjectService.getOne(queryWrapper, false);
  308. if (reportProject != null) {
  309. projectTaskVO.setReportType(reportProject.getReportType());
  310. }
  311. }
  312. }
  313. }
  314. }
  315. /**
  316. * 根据任务id查询任务详情以及处理结果以及审核历史
  317. *
  318. * @param taskId
  319. * @return
  320. */
  321. public TaskDetailsVO getAuditHistory(Integer taskId) throws IOException {
  322. //新建返回VO类
  323. TaskDetailsVO taskDetailsVO = new TaskDetailsVO();
  324. List<HandleResultFileVO> handleResultFileVOS = new ArrayList<>();
  325. List<AuditHistoryVO> auditHistoryVOS = new ArrayList<>();
  326. //根据taskId查询此条任务详情
  327. ProjectTask currentTask = this.getById(taskId);
  328. //根据此条任务详情获取assoTaskId
  329. //使用Optional避免空指针异常:使用Optional来处理可能为空的变量,例如currentTask和assoTask。
  330. Optional<ProjectTask> currentTaskOptional = Optional.ofNullable(currentTask);
  331. Integer assoTaskId = currentTaskOptional.map(ProjectTask::getAssoTaskId).orElse(null);
  332. String taskPath = currentTaskOptional.map(ProjectTask::getTaskPath).orElse(null);
  333. List<ProjectTask> allProjectTasks = new ArrayList<>();
  334. if (assoTaskId != null) {
  335. //根据assoTaskId获取最初任务的详情
  336. ProjectTaskVO projectTaskVO = new ProjectTaskVO();
  337. ProjectTask assoTask = this.getById(assoTaskId);
  338. if (assoTask != null) {
  339. //装载最初任务详情
  340. BeanUtils.copyProperties(assoTask, projectTaskVO);
  341. taskDetailsVO.setProjectTaskVO(projectTaskVO);
  342. if (assoTask.getType() == 7) {
  343. //专利挖掘文件任务
  344. LambdaQueryWrapper<PatentDigProjectFiles> queryWrapper = new LambdaQueryWrapper<>();
  345. queryWrapper.eq(PatentDigProjectFiles::getTaskId, assoTask.getId());
  346. List<PatentDigProjectFiles> patentDigProjectFiles = patentDigProjectFilesService.list(queryWrapper);
  347. List<String> fileGuids = new ArrayList<>();
  348. List<SystemFile> systemFiles = new ArrayList<>();
  349. if (!patentDigProjectFiles.isEmpty()) {
  350. fileGuids = patentDigProjectFiles.stream().map(PatentDigProjectFiles::getFileGuid).collect(Collectors.toList());
  351. }
  352. //调用文件系统查询文件信息接口
  353. if (!fileGuids.isEmpty()) {
  354. String res = fileManagerService.getSystemFileFromFMS(fileGuids);
  355. systemFiles = JSONObject.parseArray(res, SystemFile.class);
  356. }
  357. if (!systemFiles.isEmpty()) {
  358. for (PatentDigProjectFiles patentDigProjectFiles1 : patentDigProjectFiles) {
  359. HandleResultFileVO handleResultFileVO = new HandleResultFileVO();
  360. //装载文件信息
  361. SystemFile systemFile = systemFiles.stream().filter(item -> item.getGuid().equals(patentDigProjectFiles1.getFileGuid())).findFirst().orElse(null);
  362. if (systemFile != null) {
  363. BeanUtils.copyProperties(patentDigProjectFiles1, handleResultFileVO);
  364. handleResultFileVO.setGuid(patentDigProjectFiles1.getFileGuid());
  365. handleResultFileVO.setType(systemFile.getType());
  366. handleResultFileVO.setSource(1);
  367. handleResultFileVO.setOriginalName(systemFile.getOriginalName());
  368. }
  369. handleResultFileVOS.add(handleResultFileVO);
  370. }
  371. }
  372. }
  373. //根据assoTaskId查询所有任务的id
  374. List<Integer> ids = new ArrayList<>();
  375. ids.add(taskId);
  376. if (taskPath != null) {
  377. List<String> a = Arrays.asList(taskPath.split("/"));
  378. List<Integer> b = FormatUtil.StringTOIntegerList(a);
  379. ids.addAll(b);
  380. }
  381. LambdaQueryWrapper<ProjectTask> allTaskWrapper = new LambdaQueryWrapper<>();
  382. allTaskWrapper.in(ProjectTask::getId, ids);
  383. allProjectTasks = this.list(allTaskWrapper);
  384. }
  385. }
  386. //审核历史返回VO以及集合
  387. if (allProjectTasks != null) {
  388. auditHistoryVOS = allProjectTasks.stream()
  389. //过滤筛选掉分配任务的信息
  390. .filter(item -> item.getId() != item.getAssoTaskId())
  391. .map(item -> {
  392. //新建VO
  393. AuditHistoryVO auditHistoryVO = new AuditHistoryVO();
  394. ProjectTaskVO auditHistoryTaskVO = new ProjectTaskVO();
  395. BeanUtils.copyProperties(item, auditHistoryTaskVO);
  396. //处理结果VO
  397. TaskHandleResultVO taskHandleResultVO = new TaskHandleResultVO();
  398. LambdaQueryWrapper<TaskHandleResult> queryWrapper = new LambdaQueryWrapper<>();
  399. queryWrapper.eq(TaskHandleResult::getTaskId, item.getId());
  400. List<TaskHandleResult> taskHandleResults = taskHandleResultService.list(queryWrapper);
  401. if (taskHandleResults.size() != 0) {
  402. TaskHandleResult taskHandleResult = taskHandleResults.get(0);
  403. if (taskHandleResult != null) {
  404. BeanUtils.copyProperties(taskHandleResult, taskHandleResultVO);
  405. auditHistoryVO.setProjectTaskVO(auditHistoryTaskVO);
  406. auditHistoryVO.setTaskHandleResultVO(taskHandleResultVO);
  407. return auditHistoryVO;
  408. }
  409. }
  410. return null;//返回空值不装到列表中
  411. })
  412. //过滤掉空对象
  413. .filter(Objects::nonNull)
  414. .sorted(Comparator.comparing(
  415. a -> a.getTaskHandleResultVO(),
  416. Comparator.nullsLast(Comparator.comparing(TaskHandleResultVO::getCreateTime, Comparator.reverseOrder()))))
  417. .collect(Collectors.toList());
  418. taskDetailsVO.setAuditHistoryVOS(auditHistoryVOS);
  419. }
  420. //全部的文件信息(获取所有的任务的id,查出所有的结果id)
  421. List<Integer> allTaskIds = allProjectTasks.stream().map(ProjectTask::getId).collect(Collectors.toList());
  422. LambdaQueryWrapper<TaskHandleResult> queryWrapper = new LambdaQueryWrapper<>();
  423. queryWrapper.in(TaskHandleResult::getTaskId, allTaskIds);
  424. List<TaskHandleResult> taskHandleResults = taskHandleResultService.list(queryWrapper);
  425. List<Integer> resultIds = new ArrayList<>();
  426. if (taskHandleResults != null && !taskHandleResults.isEmpty()) {
  427. resultIds = taskHandleResults.stream().map(TaskHandleResult::getId).collect(Collectors.toList());
  428. }
  429. //根据所有的结果ids查询所有fileGuids
  430. if (resultIds != null && !resultIds.isEmpty()) {
  431. LambdaQueryWrapper<AssoHandleResultFile> allGuidsWrapper = new LambdaQueryWrapper<>();
  432. allGuidsWrapper.in(AssoHandleResultFile::getTaskHandleResultId, resultIds);
  433. List<AssoHandleResultFile> assoHandleResultFiles = assoHandleResultFileService.list(allGuidsWrapper);
  434. List<String> fileGuids = new ArrayList<>();
  435. List<SystemFile> systemFiles = new ArrayList<>();
  436. if (!assoHandleResultFiles.isEmpty()) {
  437. fileGuids = assoHandleResultFiles.stream().map(AssoHandleResultFile::getFileGuid).collect(Collectors.toList());
  438. }
  439. //调用文件系统查询文件信息接口
  440. if (!fileGuids.isEmpty()) {
  441. String res = fileManagerService.getSystemFileFromFMS(fileGuids);
  442. systemFiles = JSONObject.parseArray(res, SystemFile.class);
  443. }
  444. if (!systemFiles.isEmpty()) {
  445. for (AssoHandleResultFile assoHandleResultFile : assoHandleResultFiles) {
  446. HandleResultFileVO handleResultFileVO = new HandleResultFileVO();
  447. //装载文件信息
  448. SystemFile systemFile = systemFiles.stream().filter(item -> item.getGuid().equals(assoHandleResultFile.getFileGuid())).findFirst().orElse(null);
  449. if (systemFile != null) {
  450. BeanUtils.copyProperties(assoHandleResultFile, handleResultFileVO);
  451. handleResultFileVO.setGuid(assoHandleResultFile.getFileGuid());
  452. handleResultFileVO.setSource(2);
  453. handleResultFileVO.setType(systemFile.getType());
  454. handleResultFileVO.setOriginalName(systemFile.getOriginalName());
  455. }
  456. handleResultFileVOS.add(handleResultFileVO);
  457. }
  458. }
  459. }
  460. taskDetailsVO.setSystemFileList(handleResultFileVOS.stream()
  461. .sorted(Comparator.comparing(HandleResultFileVO::getCreateTime).reversed())
  462. .collect(Collectors.toList()));
  463. //装载名称
  464. this.loadTaskDetails(taskDetailsVO);
  465. return taskDetailsVO;
  466. }
  467. /**
  468. * 装载任务详情的集合
  469. *
  470. * @param taskDetailsVO
  471. * @throws IOException
  472. */
  473. public void loadTaskDetails(TaskDetailsVO taskDetailsVO) throws IOException {
  474. //装载项目名称
  475. Integer projectId = null;
  476. if (taskDetailsVO.getProjectTaskVO() != null) {
  477. projectId = taskDetailsVO.getProjectTaskVO().getProjectId();
  478. }
  479. if (projectId != null) {
  480. //根据项目id查询项目名称并装载
  481. LambdaQueryWrapper<PatentDigProject> queryWrapper = new LambdaQueryWrapper<>();
  482. queryWrapper.eq(PatentDigProject::getProjectId, projectId);
  483. List<PatentDigProject> patentDigProjects = patentDigProjectService.list(queryWrapper);
  484. if (patentDigProjects != null && patentDigProjects.size() != 0) {
  485. PatentDigProject patentDigProject = patentDigProjects.get(0);
  486. String projectName = patentDigProject.getName();
  487. taskDetailsVO.getProjectTaskVO().setProjectName(projectName);
  488. }
  489. }
  490. //新建人员id集合
  491. List<String> createIds = new ArrayList<>();
  492. //添加分配任务的创建人id
  493. if (taskDetailsVO.getProjectTaskVO().getCreateId() != null) {
  494. createIds.add(taskDetailsVO.getProjectTaskVO().getCreateId());
  495. }
  496. //添加分配任务的负责人id
  497. if (taskDetailsVO.getProjectTaskVO().getHandler() != null) {
  498. createIds.add(taskDetailsVO.getProjectTaskVO().getHandler());
  499. }
  500. //添加文件上传人的id
  501. taskDetailsVO.getSystemFileList().forEach(
  502. item -> {
  503. if (item.getCreateId() != null) {
  504. createIds.add(item.getCreateId());
  505. }
  506. }
  507. );
  508. //添加审查历史中的人员id
  509. taskDetailsVO.getAuditHistoryVOS().forEach(
  510. item -> {
  511. if (item.getProjectTaskVO() != null) {
  512. if (item.getProjectTaskVO().getCreateId() != null) {
  513. createIds.add(item.getProjectTaskVO().getCreateId());
  514. }
  515. if (item.getProjectTaskVO().getHandler() != null) {
  516. createIds.add(item.getProjectTaskVO().getHandler());
  517. }
  518. }
  519. if (item.getTaskHandleResultVO() != null) {
  520. if (item.getTaskHandleResultVO().getCreateId() != null) {
  521. createIds.add(item.getTaskHandleResultVO().getCreateId());
  522. }
  523. }
  524. }
  525. );
  526. List<Personnel> personnels = new ArrayList<>();
  527. //查询创建人名称
  528. if (createIds.size() != 0) {
  529. String res = permissionService.getPersonnelByIdsFromPCS(createIds);
  530. JSONObject jsonObject = JSONObject.parseObject(res);
  531. personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
  532. }
  533. //装载人员信息
  534. //分配任务的创建人name
  535. if (taskDetailsVO.getProjectTaskVO() != null) {
  536. Personnel personnel = personnels.stream().filter(item -> item.getId().equals(taskDetailsVO.getProjectTaskVO().getCreateId())).findFirst().orElse(null);
  537. if (personnel != null) {
  538. taskDetailsVO.getProjectTaskVO().setCreateName(personnel.getPersonnelName());
  539. } else {
  540. throw new XiaoShiException("未获取到分配任务的创建人id信息");
  541. }
  542. //分配任务的负责人name
  543. Personnel personnel1 = personnels.stream().filter(item -> item.getId().equals(taskDetailsVO.getProjectTaskVO().getHandler())).findFirst().orElse(null);
  544. if (personnel1 != null) {
  545. taskDetailsVO.getProjectTaskVO().setHandlerName(personnel1.getPersonnelName());
  546. } else {
  547. throw new XiaoShiException("未获取到分配任务的负责人id信息");
  548. }
  549. }
  550. //装载所有文件的上传人name
  551. for (HandleResultFileVO handleResultFileVO : taskDetailsVO.getSystemFileList()) {
  552. if (handleResultFileVO != null) {
  553. Personnel personnel2 = personnels.stream().filter(item -> item.getId().equals(handleResultFileVO.getCreateId())).findFirst().orElse(null);
  554. if (personnel2 != null) {
  555. handleResultFileVO.setCreateName(personnel2.getPersonnelName());
  556. } else {
  557. throw new XiaoShiException("未获取到所有文件上传人id信息");
  558. }
  559. }
  560. }
  561. //装载所有审查历史中的人员name
  562. for (AuditHistoryVO auditHistoryVO : taskDetailsVO.getAuditHistoryVOS()) {
  563. if (auditHistoryVO.getProjectTaskVO() != null) {
  564. Personnel personnel3 = personnels.stream().filter(item -> item.getId().equals(auditHistoryVO.getProjectTaskVO().getCreateId())).findFirst().orElse(null);
  565. if (personnel3 != null) {
  566. auditHistoryVO.getProjectTaskVO().setCreateName(personnel3.getPersonnelName());
  567. } else {
  568. throw new XiaoShiException("未获取到分配任务的负责人id信息");
  569. }
  570. Personnel personnel4 = personnels.stream().filter(item -> item.getId().equals(auditHistoryVO.getProjectTaskVO().getHandler())).findFirst().orElse(null);
  571. if (personnel4 != null) {
  572. auditHistoryVO.getProjectTaskVO().setHandlerName(personnel4.getPersonnelName());
  573. } else {
  574. throw new XiaoShiException("未获取到分配任务的负责人id信息");
  575. }
  576. }
  577. if (auditHistoryVO.getTaskHandleResultVO() != null) {
  578. Personnel personnel5 = personnels.stream().filter(item -> item.getId().equals(auditHistoryVO.getTaskHandleResultVO().getCreateId())).findFirst().orElse(null);
  579. if (personnel5 != null) {
  580. auditHistoryVO.getTaskHandleResultVO().setCreateName(personnel5.getPersonnelName());
  581. } else {
  582. throw new XiaoShiException("未获取到分配任务的负责人id信息");
  583. }
  584. }
  585. }
  586. }
  587. /**
  588. * 取消/完成任务
  589. *
  590. * @param taskId
  591. * @param type
  592. */
  593. public void finishTask(Integer taskId, Integer type) {
  594. //处理人直接完成任务
  595. LambdaQueryWrapper<ProjectTask> queryWrapper = new LambdaQueryWrapper<>();
  596. queryWrapper.eq(ProjectTask::getId, taskId);
  597. ProjectTask projectTask = this.getOne(queryWrapper, false);
  598. if (projectTask != null) {
  599. //查询出当前任务的类型
  600. //如果是分配任务/或者协同任务
  601. if (projectTask.getType().equals(6)) {
  602. //类型为0,需要完成任务
  603. if (type.equals(0)) {
  604. //完成需要判断不为审核中
  605. if (projectTask.getStatus() != 1) {
  606. projectTask.setStatus(3);
  607. projectTask.updateById();
  608. } else {
  609. throw new XiaoShiException("任务状态为审核中,不可以完成");
  610. }
  611. } else if (type.equals(1)) {
  612. //类型为1,取消任务
  613. projectTask.setStatus(5);
  614. projectTask.updateById();
  615. //所关联的审核任务的状态为处理中的设置为取消
  616. //根据assoTaskId查询出所有任务,过滤状态为处理中的
  617. Integer assoTaskId = projectTask.getAssoTaskId();
  618. if (assoTaskId != null) {
  619. LambdaQueryWrapper<ProjectTask> queryWrapper1 = new LambdaQueryWrapper<>();
  620. queryWrapper1.eq(ProjectTask::getAssoTaskId, assoTaskId).eq(ProjectTask::getStatus, 2);
  621. List<ProjectTask> projectTasks1 = this.list(queryWrapper1);
  622. if (!projectTasks1.isEmpty()) {
  623. projectTasks1.forEach(item -> {
  624. item.setStatus(5);
  625. });
  626. this.updateBatchById(projectTasks1);
  627. }
  628. }
  629. this.checkProjectPerson(2, projectTask.getHandler(), projectTask.getProjectId(), projectTask.getId());
  630. }
  631. //开卷审核项目(判断是报告还是挖掘项目)
  632. } else if (projectTask.getType().equals(1)) {
  633. Integer projectId = projectTask.getProjectId();
  634. //根据projectId查询类型
  635. LambdaQueryWrapper<Project> getType = new LambdaQueryWrapper<>();
  636. getType.eq(Project::getId, projectId);
  637. Project project = projectService.getOne(getType, false);
  638. Integer projectType = project.getType();
  639. //挖掘项目
  640. if (projectType != null && projectType.equals(3)) {
  641. LambdaQueryWrapper<PatentDigProject> queryWrapper1 = new LambdaQueryWrapper<>();
  642. queryWrapper1.eq(PatentDigProject::getProjectId, projectId);
  643. PatentDigProject patentDigProject = patentDigProjectService.getOne(queryWrapper1, false);
  644. if (patentDigProject != null) {
  645. if (type.equals(0)) {
  646. //直接同意
  647. projectTask.setStatus(3);
  648. projectTask.updateById();
  649. patentDigProject.setState(2);
  650. patentDigProject.updateById();
  651. } else if (type.equals(1)) {
  652. //取消
  653. projectTask.setStatus(5);
  654. projectTask.updateById();
  655. patentDigProject.setState(4);
  656. patentDigProject.updateById();
  657. this.checkProjectPerson(2, projectTask.getHandler(), projectTask.getProjectId(), projectTask.getId());
  658. } else if (type.equals(2)) {
  659. //缺少资料
  660. projectTask.setStatus(4);
  661. projectTask.updateById();
  662. patentDigProject.setState(5);
  663. patentDigProject.updateById();
  664. }
  665. } else {
  666. throw new XiaoShiException("未查询到专利挖掘项目");
  667. }
  668. } else if (projectType != null && projectType.equals(2)) {//报告
  669. LambdaQueryWrapper<ReportProject> queryWrapper1 = new LambdaQueryWrapper<>();
  670. queryWrapper1.eq(ReportProject::getProjectId, projectId);
  671. ReportProject reportProject = reportProjectService.getOne(queryWrapper1, false);
  672. if (reportProject != null) {
  673. if (type.equals(0)) {
  674. //直接同意
  675. projectTask.setStatus(3);
  676. projectTask.updateById();
  677. reportProject.setStatus(2);
  678. reportProject.updateById();
  679. } else if (type.equals(1)) {
  680. //取消
  681. projectTask.setStatus(5);
  682. projectTask.updateById();
  683. reportProject.setStatus(4);
  684. reportProject.updateById();
  685. this.checkProjectPerson(2, projectTask.getHandler(), projectTask.getProjectId(), projectTask.getId());
  686. } else if (type.equals(2)) {
  687. //缺少资料
  688. projectTask.setStatus(4);
  689. projectTask.updateById();
  690. reportProject.setStatus(5);
  691. reportProject.updateById();
  692. }
  693. } else {
  694. throw new XiaoShiException("未查询到报告");
  695. }
  696. }
  697. }
  698. //处理协同任务完成
  699. else if (projectTask.getType().equals(4)) {
  700. //获得请求人
  701. PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  702. if (type.equals(0)) {
  703. //判断请求人是否为创建人
  704. if (personnelVO.getId() != null && personnelVO.getId().equals(projectTask.getCreateId())) {
  705. projectTask.setStatus(3);
  706. projectTask.updateById();
  707. } else {
  708. projectTask.setStatus(6);
  709. projectTask.updateById();
  710. }
  711. } else if (type.equals(1)) {
  712. projectTask.setStatus(5);
  713. projectTask.updateById();
  714. this.checkProjectPerson(2, projectTask.getHandler(), projectTask.getProjectId(), projectTask.getId());
  715. }
  716. } else {
  717. if (type.equals(1)) {
  718. projectTask.setStatus(5);
  719. projectTask.updateById();
  720. this.checkProjectPerson(2, projectTask.getHandler(), projectTask.getProjectId(), projectTask.getId());
  721. } else if (type.equals(0)) {
  722. projectTask.setStatus(3);
  723. projectTask.updateById();
  724. }
  725. }
  726. } else {
  727. throw new XiaoShiException("该任务不存在");
  728. }
  729. }
  730. @Override
  731. public Object addMessage(Object object, List<MultipartFile> files) {
  732. return null;
  733. }
  734. @Override
  735. public Object deleteMessage(List<Integer> ids) throws IOException {
  736. return null;
  737. }
  738. @Override
  739. public Object updateMessage(Object object, List<MultipartFile> files) {
  740. return null;
  741. }
  742. @Override
  743. public Object getGroup(GroupRequest groupRequest, String tableName) throws Exception {
  744. return null;
  745. }
  746. @Override
  747. public Object addMessage(Object object) {
  748. return null;
  749. }
  750. @Override
  751. public Object updateMessage(Object object) {
  752. return null;
  753. }
  754. public List<Project> getProjectInfo(List<Integer> projectIds) {
  755. LambdaQueryWrapper<Project> queryWrapper = new LambdaQueryWrapper<>();
  756. queryWrapper.in(Project::getId, projectIds);
  757. List<Project> projects = projectService.list(queryWrapper);
  758. if (!projects.isEmpty()) {
  759. projects.forEach(item -> {
  760. Integer type = item.getType();
  761. if (type == 3) {
  762. //挖掘项目
  763. LambdaQueryWrapper<PatentDigProject> queryWrapper1 = new LambdaQueryWrapper<>();
  764. queryWrapper1.eq(PatentDigProject::getProjectId, item.getId());
  765. PatentDigProject patentDigProject = patentDigProjectService.getOne(queryWrapper1, false);
  766. item.setName(patentDigProject.getName());
  767. }
  768. });
  769. }
  770. return projects;
  771. }
  772. /**
  773. * 添加侵权分析协同任务
  774. */
  775. @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
  776. public Integer addTortTask(TortTaskDTO tortTaskDTO) throws Exception {
  777. Integer projectId = tortTaskDTO.getProjectId();
  778. List<String> patentNos = tortTaskDTO.getPatentNos();
  779. //1.保存任务信息 project_task表
  780. if (tortTaskDTO == null) {
  781. throw new XiaoShiException("入参不能为空!");
  782. }
  783. //判断报告id不为空
  784. if (tortTaskDTO.getProjectId() == null) {
  785. throw new XiaoShiException("报告id不能为空!");
  786. }
  787. //判断协同人员类型不为空
  788. if (tortTaskDTO.getHandlerType() == null) {
  789. throw new XiaoShiException("协同人员类型不能为空!");
  790. }
  791. //判断任务名称不为空
  792. tortTaskDTO.setName(tortTaskDTO.getName().trim());
  793. String name = tortTaskDTO.getName();
  794. if (name == null || name.equals("")) {
  795. throw new XiaoShiException("任务名称不能为空!");
  796. }
  797. tortTaskDTO.setType(4);
  798. //获取登录人信息
  799. PersonnelVO personnelVO = new PersonnelVO();
  800. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  801. ProjectTask projectTask = new ProjectTask();
  802. BeanUtils.copyProperties(tortTaskDTO, projectTask);
  803. projectTask.setCreateId(personnelVO.getId());
  804. projectTask.setStatus(2);
  805. projectTask.insert();
  806. Integer taskId = projectTask.getId();
  807. //2.保存任务和人员关联表信息
  808. if (taskId != null) {
  809. List<CCPerson> ccPeople = tortTaskDTO.getCcPeople();
  810. this.addTaskAndCCPeople(personnelVO.getId(), taskId, ccPeople);
  811. //发送给抄送人
  812. for (CCPerson item : ccPeople) {
  813. mailSendService.sentToCCMail(item.getPersonId(), item.getIfInner(), personnelVO.getId());
  814. }
  815. } else {
  816. throw new XiaoShiException("创建任务失败,未读取到任务id");
  817. }
  818. //3.从侵权分析中获得对比结果,并复制保存
  819. tortCompareRecordService.copyTortCompareRecords(tortTaskDTO.getProjectId(), taskId, personnelVO.getId());
  820. //保存es
  821. this.addCompareLiteratureByNosToEs(patentNos, taskId, projectId);
  822. //4.发送邮件通知协同人和抄送人
  823. String code = taskCodeService.addTaskCode(taskId);
  824. Boolean ifInner = true;
  825. if (tortTaskDTO.getHandlerType() == 0) {
  826. ifInner = true;
  827. } else {
  828. ifInner = false;
  829. }
  830. LambdaQueryWrapper<ReportProject> queryWrapper = new LambdaQueryWrapper<>();
  831. queryWrapper.eq(ReportProject::getProjectId, projectId);
  832. ReportProject reportProject = reportProjectService.getOne(queryWrapper, false);
  833. Integer reportType = null;
  834. if (reportProject != null) {
  835. reportType = reportProject.getReportType();
  836. }
  837. mailSendService.sendSynery(projectTask.getHandler(), ifInner, projectId, taskId, reportType, code);
  838. return projectTask.getId();
  839. }
  840. /**
  841. * 保存任务和人员关联表信息
  842. *
  843. * @param taskId
  844. * @param ccPeople
  845. */
  846. public void addTaskAndCCPeople(String createId, Integer taskId, List<CCPerson> ccPeople) {
  847. if (createId == null && createId.equals("")) {
  848. throw new XiaoShiException("createId不能为空");
  849. }
  850. if (taskId == null) {
  851. throw new XiaoShiException("taskId不能为空");
  852. }
  853. if (ccPeople != null && !ccPeople.isEmpty()) {
  854. List<AssoTaskPerson> assoTaskPeople = new ArrayList<>();
  855. ccPeople.forEach(item -> {
  856. AssoTaskPerson assoTaskPerson = new AssoTaskPerson();
  857. assoTaskPerson.setPersonId(item.getPersonId());
  858. assoTaskPerson.setIfInner(item.getIfInner());
  859. assoTaskPerson.setTaskId(taskId);
  860. assoTaskPerson.setCreateId(createId);
  861. assoTaskPeople.add(assoTaskPerson);
  862. });
  863. assoTaskPersonService.saveBatch(assoTaskPeople);
  864. }
  865. }
  866. /**
  867. * 根据任务id查询专利号
  868. *
  869. * @param taskId
  870. * @return
  871. */
  872. public String getPatentNoByTaskId(Integer taskId) {
  873. //根据任务id查询报告id
  874. if (taskId == null) {
  875. throw new XiaoShiException("taskId不能为空");
  876. }
  877. Integer projectId = tortCompareRecordService.getProjectIdByTaskId(taskId);
  878. String patentNo = this.getPatentNoByProjectId(projectId);
  879. return patentNo;
  880. }
  881. /**
  882. * 根据projectId查询专利号
  883. *
  884. * @param projectId
  885. * @return
  886. */
  887. public String getPatentNoByProjectId(Integer projectId) {
  888. //根据报告id查询专利号
  889. LambdaQueryWrapper<ReportProject> queryWrapper1 = new LambdaQueryWrapper<>();
  890. queryWrapper1.eq(ReportProject::getProjectId, projectId);
  891. ReportProject reportProject = reportProjectService.getOne(queryWrapper1, false);
  892. if (reportProject != null) {
  893. String patentNo = reportProject.getSignPatentNo();
  894. return patentNo;
  895. } else {
  896. throw new XiaoShiException("报告为空");
  897. }
  898. }
  899. /**
  900. * 侵权分析报告开卷审核任务
  901. *
  902. * @param reportAuditTaskDTO
  903. * @return
  904. */
  905. public Object addReportOpenAuditTask(ReportAuditTaskDTO reportAuditTaskDTO) {
  906. ReportProjectDTO reportProjectDTO = reportAuditTaskDTO.getReportProjectDTO();
  907. ProjectTaskDTO projectTaskDTO = reportAuditTaskDTO.getProjectTaskDTO();
  908. TaskFormDTO taskFormDTO = toTaskFormDTO(projectTaskDTO);
  909. //如果报告DTO不为空,则需要先建立报告
  910. if (reportProjectDTO != null) {
  911. Integer projectId = (Integer) reportProjectService.addMessage(reportProjectDTO);
  912. if (projectId != null) {
  913. projectTaskDTO.setProjectId(projectId);
  914. ProjectTask projectTask = this.addTaskByTaskFormDTO(taskFormDTO, projectId);
  915. Integer projectTaskId = projectTask.getId();
  916. if (projectTaskId != null) {
  917. //将侵权分析报告置为开卷审核
  918. LambdaUpdateWrapper<ReportProject> queryWrapper = new LambdaUpdateWrapper<>();
  919. queryWrapper.eq(ReportProject::getProjectId, projectId);
  920. queryWrapper.set(ReportProject::getStatus, 0);
  921. reportProjectService.update(queryWrapper);
  922. }
  923. return projectTaskId;
  924. } else {
  925. throw new XiaoShiException("侵权分析报告新增失败");
  926. }
  927. } else {
  928. throw new XiaoShiException("侵权分析报告数据不能为空!");
  929. }
  930. }
  931. @Transactional(rollbackFor = Exception.class)
  932. public List<Integer> addMarkTask(MarkTaskDTO markTaskDTO) throws Exception {
  933. Integer projectId = markTaskDTO.getProjectId();
  934. List<MarkTaskDTO.MarkedField> markedFields = markTaskDTO.getMarkedFields();
  935. //获取人员专利
  936. List<PersonAssignedDTO> personAssignedDTOList = markTaskDTO.getPersonAssignedDTOList();
  937. //获取任务类型
  938. Integer taskType = markTaskDTO.getTaskType();
  939. //获取任务名称
  940. String taskName = markTaskDTO.getName();
  941. //获得截止时间
  942. Date deadLineTime = markTaskDTO.getDeadLineTime();
  943. List<Integer> ids = new ArrayList<>();
  944. StringRequest stringRequest = markTaskDTO.getStringRequest();
  945. //过滤出已经添加的专利
  946. PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  947. //添加任务批次
  948. TaskBatch taskBatch = new TaskBatch();
  949. taskBatch.setCreateId(personnelVO.getId());
  950. taskBatch.insert();
  951. Integer taskBatchId = taskBatch.getId();
  952. List<String> patentNos = new ArrayList<>();
  953. List<Integer> nums = new ArrayList<>();
  954. personAssignedDTOList.forEach(item -> {
  955. if (item.getPatentNos() != null && item.getPatentNos().size() != 0) {
  956. patentNos.addAll(item.getPatentNos());
  957. } else {
  958. if (item.getPatentNum() != null) {
  959. nums.add(item.getPatentNum());
  960. }
  961. }
  962. });
  963. Integer current = 1;
  964. for (PersonAssignedDTO item : personAssignedDTOList) {
  965. List<String> addPatentNos = new ArrayList<>();
  966. //创建任务
  967. ProjectTaskDTO projectTaskDTO = new ProjectTaskDTO();
  968. projectTaskDTO.setType(taskType);
  969. projectTaskDTO.setName(taskName);
  970. projectTaskDTO.setDeadLineTime(deadLineTime);
  971. projectTaskDTO.setHandler(item.getPersonId());
  972. projectTaskDTO.setHandlerType(0);
  973. projectTaskDTO.setProjectId(projectId);
  974. Integer taskId = this.addTask(projectTaskDTO);
  975. ids.add(taskId);
  976. //添加任务和标引关联
  977. this.addAssoTaskField(markedFields, taskId, taskBatchId, projectId);
  978. //根据检索式和已经添加的专利以及位置获得专利
  979. if (item.getPatentNos() == null || item.getPatentNos().size() == 0) {
  980. if (nums.size() > 0) {
  981. Integer num = nums.remove(0);
  982. stringRequest.setCurrent(Long.parseLong(current.toString()));
  983. stringRequest.setSize(Long.parseLong(num.toString()));
  984. stringRequest.setProjectId(projectId);
  985. List<Patent> patentList = esPatentService.getPatentsWithNotNo(stringRequest, patentNos);
  986. addPatentNos = patentList.stream().map(Patent::getPatentNo).collect(Collectors.toList());
  987. current += num;
  988. }
  989. } else {
  990. addPatentNos = item.getPatentNos();
  991. }
  992. //添加专利
  993. this.addCompareLiteratureByNosToEs(addPatentNos, taskId, projectId);
  994. }
  995. return ids;
  996. }
  997. //添加对比文献和专利号关联
  998. private void addCompareLiteratureByNos(List<String> patentNos, Integer taskId, Integer projectId) {
  999. List<CompareLiterature> compareLiteratures = new ArrayList<>();
  1000. if (patentNos == null || patentNos.size() == 0) {
  1001. return;
  1002. } else {
  1003. patentNos.forEach(item -> {
  1004. CompareLiterature compareLiterature = new CompareLiterature();
  1005. compareLiterature.setLiteratureNo(item);
  1006. compareLiterature.setProjectId(projectId);
  1007. compareLiterature.setName(item);
  1008. compareLiteratures.add(compareLiterature);
  1009. });
  1010. }
  1011. compareLiteratureService.saveBatch(compareLiteratures);
  1012. }
  1013. /**
  1014. * 添加FTO协同任务
  1015. *
  1016. * @param tortTaskDTO
  1017. * @return
  1018. */
  1019. public Integer addFTOAssitTask(TortTaskDTO tortTaskDTO) {
  1020. //1.保存任务信息 project_task表
  1021. if (tortTaskDTO == null) {
  1022. throw new XiaoShiException("入参不能为空!");
  1023. }
  1024. //判断报告id不为空
  1025. Integer projectId = tortTaskDTO.getProjectId();
  1026. if (projectId == null) {
  1027. throw new XiaoShiException("报告id不能为空!");
  1028. }
  1029. //判断协同人员类型不为空
  1030. if (tortTaskDTO.getHandlerType() == null) {
  1031. throw new XiaoShiException("协同人员类型不能为空!");
  1032. }
  1033. //判断任务名称不为空
  1034. tortTaskDTO.setName(tortTaskDTO.getName().trim());
  1035. String name = tortTaskDTO.getName();
  1036. if (name == null || name.equals("")) {
  1037. throw new XiaoShiException("任务名称不能为空!");
  1038. }
  1039. tortTaskDTO.setType(4);
  1040. //获取登录人信息
  1041. PersonnelVO personnelVO = new PersonnelVO();
  1042. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  1043. ProjectTask projectTask = new ProjectTask();
  1044. BeanUtils.copyProperties(tortTaskDTO, projectTask);
  1045. projectTask.setCreateId(personnelVO.getId());
  1046. projectTask.setStatus(2);
  1047. projectTask.insert();
  1048. Integer taskId = projectTask.getId();
  1049. //2.compareLiterature入库
  1050. List<String> patentNos = tortTaskDTO.getPatentNos();
  1051. if (!patentNos.isEmpty()) {
  1052. try {
  1053. this.addCompareLiteratureByNosToEs(patentNos, taskId, projectId);
  1054. //3.从侵权分析中获得对比结果,并复制保存
  1055. //taskId是协同任务id
  1056. ftoCompareRecordService.copyFTOCompareRecords(tortTaskDTO.getProjectId(), taskId, personnelVO.getId(), patentNos);
  1057. } catch (Exception e) {
  1058. throw new XiaoShiException(e.toString());
  1059. }
  1060. }
  1061. //4.保存任务和人员关联表信息
  1062. if (taskId != null) {
  1063. List<CCPerson> ccPeople = tortTaskDTO.getCcPeople();
  1064. this.addTaskAndCCPeople(personnelVO.getId(), taskId, ccPeople);
  1065. //发送给抄送人
  1066. for (CCPerson item : ccPeople) {
  1067. mailSendService.sentToCCMail(item.getPersonId(), item.getIfInner(), personnelVO.getId());
  1068. }
  1069. } else {
  1070. throw new XiaoShiException("创建任务失败,未读取到任务id");
  1071. }
  1072. //5.发送邮件通知协同人
  1073. //获取code码
  1074. String code = taskCodeService.addTaskCode(taskId);
  1075. Boolean ifInner = true;
  1076. if (tortTaskDTO.getHandlerType() == 0) {
  1077. ifInner = true;
  1078. } else {
  1079. ifInner = false;
  1080. }
  1081. LambdaQueryWrapper<ReportProject> queryWrapper = new LambdaQueryWrapper<>();
  1082. queryWrapper.eq(ReportProject::getProjectId, projectId);
  1083. ReportProject reportProject = reportProjectService.getOne(queryWrapper, false);
  1084. Integer reportType = null;
  1085. if (reportProject != null) {
  1086. reportType = reportProject.getReportType();
  1087. }
  1088. mailSendService.sendSynery(projectTask.getHandler(), ifInner, projectId, taskId, reportType, code);
  1089. return projectTask.getId();
  1090. }
  1091. /**
  1092. * 添加任务与专利关联到ES
  1093. *
  1094. * @param patentNos
  1095. * @param taskId
  1096. * @param projectId
  1097. * @throws Exception
  1098. */
  1099. private void addCompareLiteratureByNosToEs(List<String> patentNos, Integer taskId, Integer projectId) throws Exception {
  1100. if (patentNos == null || patentNos.size() == 0) {
  1101. return;
  1102. } else {
  1103. patentNos.forEach(item -> {
  1104. //根据专利号查询专利
  1105. PatentWithIdVO patentWithIdVO = null;
  1106. try {
  1107. patentWithIdVO = esService.getIdByPatentNo(item);
  1108. } catch (Exception e) {
  1109. e.printStackTrace();
  1110. }
  1111. if (patentWithIdVO != null) {
  1112. String id = patentWithIdVO.getId();
  1113. if (id != null || !id.trim().equals("")) {
  1114. Patent patent = new Patent();
  1115. EsProjectTask esProjectTask = new EsProjectTask();
  1116. esProjectTask.setProjectId(projectId);
  1117. esProjectTask.setTaskId(taskId);
  1118. PatentJoin patentJoin = new PatentJoin();
  1119. patentJoin.setParent(id);
  1120. patentJoin.setName("task");
  1121. patent.setPatentJoin(patentJoin);
  1122. patent.setProjectTask(esProjectTask);
  1123. try {
  1124. esService.addChildPatent(patent, id);
  1125. } catch (Exception e) {
  1126. }
  1127. }
  1128. }
  1129. });
  1130. }
  1131. }
  1132. private void addAssoTaskField(List<MarkTaskDTO.MarkedField> markedFields, Integer taskId, Integer batchId, Integer projectId) {
  1133. List<AssoTaskField> assoTaskFields = new ArrayList<>();
  1134. if (markedFields == null || markedFields.size() == 0) {
  1135. //根据projectId 查询所有标引栏位
  1136. List<AllCustomFieldVO> customFieldVOS = customFieldService.getAllProjectCustomField(projectId);
  1137. if (customFieldVOS != null && customFieldVOS.size() > 0) {
  1138. customFieldVOS.forEach(item -> {
  1139. AssoTaskField assoTaskField = new AssoTaskField();
  1140. assoTaskField.setFieldId(item.getId());
  1141. assoTaskField.setFieldType(item.getType());
  1142. assoTaskField.setTaskId(taskId);
  1143. assoTaskField.setTaskBatchId(batchId);
  1144. assoTaskField.setProjectId(projectId);
  1145. assoTaskField.setFieldValueId(0);
  1146. assoTaskFields.add(assoTaskField);
  1147. });
  1148. }
  1149. } else {
  1150. markedFields.forEach(item -> {
  1151. if (item.getValues() != null && item.getValues().size() > 0) {
  1152. item.getValues().forEach(i -> {
  1153. AssoTaskField assoTaskField = new AssoTaskField();
  1154. assoTaskField.setFieldId(item.getFieldId());
  1155. assoTaskField.setFieldType(item.getFieldType());
  1156. assoTaskField.setTaskId(taskId);
  1157. assoTaskField.setTaskBatchId(batchId);
  1158. assoTaskField.setProjectId(projectId);
  1159. assoTaskField.setFieldValueId(i);
  1160. assoTaskFields.add(assoTaskField);
  1161. });
  1162. } else {
  1163. AssoTaskField assoTaskField = new AssoTaskField();
  1164. assoTaskField.setFieldId(item.getFieldId());
  1165. assoTaskField.setFieldType(item.getFieldType());
  1166. assoTaskField.setTaskId(taskId);
  1167. assoTaskField.setTaskBatchId(batchId);
  1168. assoTaskField.setProjectId(projectId);
  1169. assoTaskField.setFieldValueId(0);
  1170. assoTaskFields.add(assoTaskField);
  1171. }
  1172. });
  1173. }
  1174. assoTaskFieldService.saveBatch(assoTaskFields);
  1175. }
  1176. public Optional<ProjectTask> getByIdOpt(Integer id) {
  1177. ProjectTask projectTask = projectTaskMapper.selectById(id);
  1178. return Optional.ofNullable(projectTask);
  1179. }
  1180. /**
  1181. *
  1182. */
  1183. public void getPatent(String patentNo, Integer taskId) {
  1184. }
  1185. /**
  1186. * 更新任务
  1187. *
  1188. * @param updateProjectTaskDTO
  1189. * @return
  1190. */
  1191. public Integer updateTask(UpdateProjectTaskDTO updateProjectTaskDTO) {
  1192. if (updateProjectTaskDTO == null) {
  1193. throw new XiaoShiException("入参为空");
  1194. }
  1195. Integer id = updateProjectTaskDTO.getId();
  1196. ProjectTask projectTask = this.getById(id);
  1197. if (projectTask != null) {
  1198. BeanUtils.copyProperties(updateProjectTaskDTO, projectTask);
  1199. projectTask.updateById();
  1200. }
  1201. return projectTask.getId();
  1202. }
  1203. //装载查询语句
  1204. private List<String> loadSearchSql(List<String> sqls) {
  1205. PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  1206. String id = personnelVO.getId();
  1207. String rootSql = "(create_id =" + id + " or handler=" + id + ")";
  1208. if (sqls.get(0) != null && !sqls.get(0).equals("")) {
  1209. sqls.set(0, rootSql + " and" + "(" + sqls.get(0) + ")");
  1210. } else {
  1211. sqls.set(0, rootSql);
  1212. }
  1213. return sqls;
  1214. }
  1215. /**
  1216. * 处理任务参与人员与项目可见人员
  1217. *
  1218. * @param type 1为新增 2为取消
  1219. * @param handler
  1220. */
  1221. public void checkProjectPerson(Integer type, String handler, Integer projectId, Integer taskId) {
  1222. //获取登录人信息
  1223. Integer roleType = 2;
  1224. PersonnelVO personnelVO = new PersonnelVO();
  1225. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  1226. LambdaQueryWrapper<AssoProjectPerson> queryWrapper = new LambdaQueryWrapper<>();
  1227. queryWrapper.eq(AssoProjectPerson::getProjectId, projectId);
  1228. queryWrapper.eq(AssoProjectPerson::getRole, roleType);
  1229. List<AssoProjectPerson> assoProjectPeople = assoProjectPersonService.list(queryWrapper);
  1230. //新增任务的时候 需要将任务处理人添加到项目可见人中 先校验是否已经存在
  1231. if (type.equals(1)) {
  1232. AssoProjectPerson assoProjectPerson = new AssoProjectPerson();
  1233. assoProjectPerson.setProjectId(projectId);
  1234. assoProjectPerson.setPersonId(handler);
  1235. assoProjectPerson.setCreateId(personnelVO.getId());
  1236. assoProjectPerson.setRole(roleType);
  1237. if (!assoProjectPeople.isEmpty()) {
  1238. List<String> people = assoProjectPeople.stream().map(AssoProjectPerson::getPersonId).collect(Collectors.toList());
  1239. if (!people.contains(handler)) {
  1240. assoProjectPerson.insert();
  1241. }
  1242. } else {
  1243. assoProjectPerson.insert();
  1244. }
  1245. }
  1246. //取消任务的时候 需要将任务处理人从项目可见人中去除 但是先校验是否还有别的任务导致他在项目可见人中
  1247. else if (type.equals(2)) {
  1248. if (!assoProjectPeople.isEmpty()) {
  1249. LambdaQueryWrapper<ProjectTask> queryWrapper1 = new LambdaQueryWrapper<>();
  1250. queryWrapper1.eq(ProjectTask::getProjectId, projectId)
  1251. .eq(ProjectTask::getHandlerType, 0)
  1252. .eq(ProjectTask::getHandler, handler)
  1253. .ne(ProjectTask::getStatus, 5);
  1254. List<ProjectTask> projectTasks = this.list(queryWrapper1);
  1255. if (projectTasks.isEmpty()) {
  1256. LambdaQueryWrapper<AssoProjectPerson> deleteWrapper = new LambdaQueryWrapper<>();
  1257. deleteWrapper.eq(AssoProjectPerson::getProjectId, projectId)
  1258. .eq(AssoProjectPerson::getPersonId, handler)
  1259. .eq(AssoProjectPerson::getRole, roleType);
  1260. assoProjectPersonService.remove(deleteWrapper);
  1261. }
  1262. }
  1263. }
  1264. }
  1265. public ProjectTask addTaskByTaskFormDTO(TaskFormDTO taskFormDTO, Integer projectId) {
  1266. String name = taskFormDTO.getName();
  1267. Integer handleType = taskFormDTO.getHandlerType();
  1268. String handleName = taskFormDTO.getHandler();
  1269. Date deadLineTime = taskFormDTO.getDeadLineTime();
  1270. Integer lastTaskId = taskFormDTO.getLastTaskId();
  1271. Integer assoTaskId = taskFormDTO.getAssoTaskId();
  1272. ProjectTask projectTask = new ProjectTask();
  1273. projectTask.setName(name);
  1274. projectTask.setHandlerType(handleType);
  1275. projectTask.setHandler(handleName);
  1276. projectTask.setDeadLineTime(deadLineTime);
  1277. projectTask.setProjectId(projectId);
  1278. projectTask.setType(taskFormDTO.getTaskType());
  1279. projectTask.setAssoTaskId(assoTaskId);
  1280. //任务状态置为处理中
  1281. projectTask.setStatus(2);
  1282. //获取登录人信息
  1283. PersonnelVO personnelVO = new PersonnelVO();
  1284. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  1285. if (lastTaskId != null) {
  1286. ProjectTask projectTask1 = this.getById(lastTaskId);
  1287. String lastName = projectTask1.getName();
  1288. projectTask.setLastTaskId(lastTaskId);
  1289. projectTask.setProjectId(projectTask1.getProjectId());
  1290. projectTask.setProcessId(projectTask1.getProcessId());
  1291. projectTask.setType(projectTask1.getType());
  1292. String lastPath = projectTask1.getTaskPath();
  1293. if (lastPath == null) {
  1294. lastPath = projectTask1.getId() + "";
  1295. } else {
  1296. lastPath += "/" + projectTask1.getId();
  1297. }
  1298. projectTask.setTaskPath(lastPath);
  1299. Integer b = 1;
  1300. if (!lastPath.equals("")) {
  1301. String[] a = lastPath.split("/");
  1302. b = a.length + 1;
  1303. }
  1304. String newName = lastName + "-" + b + "级审核";
  1305. projectTask.setName(newName);
  1306. }
  1307. //设置任务的发起人
  1308. projectTask.setCreateId(personnelVO.getId());
  1309. projectTask.insert();
  1310. return projectTask;
  1311. }
  1312. public void addProjectTaskFileByFormDTO(FileFormDTO fileFormDTO, Integer taskId) {
  1313. List<FileDTO> fileDTOS = fileFormDTO.getFiles();
  1314. List<String> fileGuids = fileDTOS.stream().map(FileDTO::getGuid).collect(Collectors.toList());
  1315. if (fileGuids != null && fileGuids.size() > 0) {
  1316. AssoTaskFileDTO assoTaskFileDTO = new AssoTaskFileDTO();
  1317. assoTaskFileDTO.setTaskId(taskId);
  1318. assoTaskFileDTO.setFileGuids(fileGuids);
  1319. assoTaskFileService.addTaskFile(fileDTOS, taskId);
  1320. }
  1321. }
  1322. public Integer addFileExamineTask(AddFileExamineTaskDTO addFileExamineTaskDTO) {
  1323. FileFormDTO fileFormDTO = addFileExamineTaskDTO.getFileForm();
  1324. TaskFormDTO taskFormDTO = addFileExamineTaskDTO.getTaskForm();
  1325. taskFormDTO.setTaskType(taskFormDTO.getTaskType());
  1326. Integer projectId = fileFormDTO.getProjectId();
  1327. ProjectTask projectTask = this.addTaskByTaskFormDTO(taskFormDTO, projectId);
  1328. Integer taskId = projectTask.getId();
  1329. this.addProjectTaskFileByFormDTO(fileFormDTO, taskId);
  1330. //如果是内部人员
  1331. // if (projectTask.getHandlerType().equals(0)) {
  1332. // this.checkProjectPerson(1, projectTask.getHandler(), projectTask.getProjectId(), projectTask.getId());
  1333. // }
  1334. return projectTask.getId();
  1335. }
  1336. /**
  1337. * 根据任务id查询任务详情以及处理结果以及审核历史
  1338. *
  1339. * @param getExamineHistoryDTO
  1340. * @return
  1341. */
  1342. public List<TaskResultVO> getExamineHistory(GetExamineHistoryDTO getExamineHistoryDTO) throws IOException {
  1343. List<TaskResultVO> taskDetailsVOs = new ArrayList<>();
  1344. Integer taskId = getExamineHistoryDTO.getTaskId();
  1345. String fileGuid = getExamineHistoryDTO.getFileGuid();
  1346. Boolean ifGetLast = getExamineHistoryDTO.getIfGetLast();
  1347. String rootGuid = fileGuid;
  1348. if (fileGuid != null && !fileGuid.equals("")) {
  1349. AssoTaskFile assoTaskFile = assoTaskFileService.getAssoTaskFileByGuid(fileGuid);
  1350. if (assoTaskFile == null) {
  1351. return new ArrayList<>();
  1352. }
  1353. if (taskId == null) {
  1354. taskId = assoTaskFile.getTaskId();
  1355. }
  1356. if (assoTaskFile.getRootFileGuid() != null) {
  1357. rootGuid = assoTaskFile.getRootFileGuid();
  1358. }
  1359. }
  1360. //根据taskId 查询任务
  1361. LambdaQueryWrapper<ProjectTask> queryWrapper = new LambdaQueryWrapper<>();
  1362. ProjectTask projectTask = this.getById(taskId);
  1363. Integer rootTaskId = projectTask.getAssoTaskId();
  1364. if (rootTaskId == null) {
  1365. String path = projectTask.getTaskPath();
  1366. String key = null;
  1367. if (path == null) {
  1368. key = projectTask.getId() + "";
  1369. } else {
  1370. String[] paths = path.split("/");
  1371. key = paths[0];
  1372. }
  1373. queryWrapper.apply("id=" + key + " or find_in_set(" + key + ",REPLACE(task_path, '/', ',')) ");
  1374. } else {
  1375. queryWrapper.eq(ProjectTask::getAssoTaskId, rootTaskId);
  1376. }
  1377. List<ProjectTask> projectTasks = new ArrayList<>();
  1378. if (ifGetLast != null && ifGetLast) {
  1379. queryWrapper.orderByDesc(ProjectTask::getCreateTime);
  1380. ProjectTask projectTask1 = this.getOne(queryWrapper, false);
  1381. if (projectTask1 != null) {
  1382. projectTasks.add(projectTask1);
  1383. }
  1384. } else {
  1385. queryWrapper.orderByAsc(ProjectTask::getCreateTime);
  1386. projectTasks = this.list(queryWrapper);
  1387. }
  1388. List<Integer> taskIds = projectTasks.stream().map(ProjectTask::getId).collect(Collectors.toList());
  1389. if (taskIds == null || taskIds.size() == 0) {
  1390. return taskDetailsVOs;
  1391. }
  1392. LambdaQueryWrapper<TaskHandleResult> resultLambdaQueryWrapper = new LambdaQueryWrapper<>();
  1393. resultLambdaQueryWrapper.in(TaskHandleResult::getTaskId, taskIds);
  1394. List<TaskHandleResult> taskHandleResults = taskHandleResultService.list(resultLambdaQueryWrapper);
  1395. List<AssoHandleResultFile> resultFiles = new ArrayList<>();
  1396. List<Integer> resultIds = taskHandleResults.stream().map(TaskHandleResult::getId).collect(Collectors.toList());
  1397. if (resultIds != null && resultIds.size() > 0) {
  1398. LambdaQueryWrapper<AssoHandleResultFile> resultFileWrapper = new LambdaQueryWrapper<>();
  1399. resultFileWrapper.in(AssoHandleResultFile::getTaskHandleResultId, resultIds);
  1400. if (fileGuid != null && !fileGuid.equals("")) {
  1401. resultFileWrapper.eq(AssoHandleResultFile::getRootFileGuid, rootGuid);
  1402. }
  1403. resultFiles = assoHandleResultFileService.list(resultFileWrapper);
  1404. }
  1405. List<String> fileGuids = resultFiles.stream().map(AssoHandleResultFile::getFileGuid).collect(Collectors.toList());
  1406. List<SystemFile> systemFiles = new ArrayList<>();
  1407. if (!fileGuids.isEmpty()) {
  1408. String res = fileManagerService.getSystemFileFromFMS(fileGuids);
  1409. systemFiles = JSONObject.parseArray(res, SystemFile.class);
  1410. }
  1411. for (ProjectTask projectTask1 : projectTasks) {
  1412. TaskResultVO taskResultVO = new TaskResultVO();
  1413. Integer status = projectTask1.getStatus();
  1414. Integer taskId1 = projectTask1.getId();
  1415. Integer handleType = projectTask1.getHandlerType();
  1416. String handler = projectTask1.getHandler();
  1417. TaskHandleResult taskHandleResult = taskHandleResults.stream().filter(item -> item.getTaskId().equals(taskId1)).findFirst().orElse(null);
  1418. if (taskHandleResult != null) {
  1419. BeanUtils.copyProperties(taskHandleResult, taskResultVO);
  1420. List<String> temGuids = resultFiles.stream().filter(item -> item.getTaskHandleResultId().equals(taskHandleResult.getId())).map(AssoHandleResultFile::getFileGuid).collect(Collectors.toList());
  1421. if (temGuids != null && temGuids.size() > 0) {
  1422. List<SystemFile> systemFileList = systemFiles.stream().filter(item -> temGuids.contains(item.getGuid())).collect(Collectors.toList());
  1423. taskResultVO.setFiles(systemFileList);
  1424. }
  1425. } else {
  1426. taskResultVO.setNextAuditor(projectTask1.getCreateId());
  1427. }
  1428. if (handleType.equals(0)) {
  1429. taskResultVO.setCreateId(handler);
  1430. } else {
  1431. taskResultVO.setCreateName(handler);
  1432. }
  1433. taskResultVO.setStatus(status);
  1434. taskDetailsVOs.add(taskResultVO);
  1435. }
  1436. //装载名称
  1437. this.loadTaskResultVos(taskDetailsVOs);
  1438. return taskDetailsVOs;
  1439. }
  1440. /**
  1441. * 装载任务详情的集合
  1442. *
  1443. * @param taskResultVOs
  1444. * @throws IOException
  1445. */
  1446. public void loadTaskResultVos(List<TaskResultVO> taskResultVOs) throws IOException {
  1447. //装载项目名称
  1448. List<String> createIds = taskResultVOs.stream().map(TaskResultVO::getCreateId).collect(Collectors.toList());
  1449. List<Personnel> personnels = new ArrayList<>();
  1450. //查询创建人名称
  1451. if (createIds.size() != 0) {
  1452. String res = permissionService.getPersonnelByIdsFromPCS(createIds);
  1453. JSONObject jsonObject = JSONObject.parseObject(res);
  1454. personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
  1455. }
  1456. //装载所有审查历史中的人员name
  1457. for (TaskResultVO taskResultVO : taskResultVOs) {
  1458. if (taskResultVO.getCreateName() == null) {
  1459. Personnel personnel = personnels.stream().filter(item -> item.getId().equals(taskResultVO.getCreateId())).findFirst().orElse(null);
  1460. if (personnel != null) {
  1461. taskResultVO.setCreateName(personnel.getPersonnelName());
  1462. } else {
  1463. throw new XiaoShiException("未获取到分配任务的负责人id信息");
  1464. }
  1465. }
  1466. }
  1467. return;
  1468. }
  1469. public TaskFormDTO toTaskFormDTO(ProjectTaskDTO projectTaskDTO) {
  1470. TaskFormDTO taskFormDTO = new TaskFormDTO();
  1471. taskFormDTO.setTaskType(1);
  1472. taskFormDTO.setHandlerType(projectTaskDTO.getHandlerType());
  1473. taskFormDTO.setHandler(projectTaskDTO.getHandler());
  1474. taskFormDTO.setDeadLineTime(projectTaskDTO.getDeadLineTime());
  1475. taskFormDTO.setName(projectTaskDTO.getName());
  1476. taskFormDTO.setDescription(projectTaskDTO.getDescription());
  1477. return taskFormDTO;
  1478. }
  1479. /**
  1480. * 从审核结果文件中,复制文件
  1481. *
  1482. * @param assoHandleResultFiles
  1483. * @param fileDTOS
  1484. * @throws Exception
  1485. */
  1486. public void getCopyFileDTOs(List<AssoHandleResultFile> assoHandleResultFiles, List<FileDTO> fileDTOS) throws Exception {
  1487. List<File> files = new ArrayList<>();
  1488. for (AssoHandleResultFile assoHandleResultFile : assoHandleResultFiles) {
  1489. String rootFileGuid = assoHandleResultFile.getFileGuid();
  1490. File file = fileManagerService.getOrgTempFileByGuid(assoHandleResultFile.getFileGuid());
  1491. files.add(file);
  1492. if (fileDTOS != null) {
  1493. List<String> guid2s = fileManagerService.uploadFileGetGuid2(Arrays.asList(file));
  1494. if (guid2s != null && guid2s.size() > 0) {
  1495. FileDTO fileDTO = new FileDTO();
  1496. fileDTO.setGuid(guid2s.get(0));
  1497. fileDTO.setRootGuid(rootFileGuid);
  1498. fileDTOS.add(fileDTO);
  1499. }
  1500. }
  1501. }
  1502. files.forEach(item -> item.delete());
  1503. }
  1504. }