ProjectTaskService.java 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493
  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.utils.CacheUtils;
  10. import cn.cslg.pas.common.utils.LoginUtils;
  11. import cn.cslg.pas.common.vo.business.*;
  12. import cn.cslg.pas.domain.business.*;
  13. import cn.cslg.pas.exception.UnLoginException;
  14. import cn.cslg.pas.exception.XiaoShiException;
  15. import cn.cslg.pas.factorys.businessFactory.Business;
  16. import cn.cslg.pas.mapper.ProjectTaskMapper;
  17. import cn.cslg.pas.service.common.FileManagerService;
  18. import cn.cslg.pas.service.permissions.PermissionService;
  19. import cn.cslg.pas.service.query.FormatQueryService;
  20. import com.alibaba.fastjson.JSONObject;
  21. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  22. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  23. import org.springframework.beans.BeanUtils;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.stereotype.Service;
  26. import org.springframework.web.multipart.MultipartFile;
  27. import java.io.IOException;
  28. import java.util.ArrayList;
  29. import java.util.List;
  30. import java.util.stream.Collectors;
  31. /**
  32. * 专利挖掘任务模块
  33. * @Author xiexiang
  34. * @Date 2023/11/21
  35. */
  36. @Service
  37. public class ProjectTaskService extends ServiceImpl<ProjectTaskMapper, ProjectTask> implements Business {
  38. @Autowired
  39. private CacheUtils cacheUtils;
  40. @Autowired
  41. private LoginUtils loginUtils;
  42. @Autowired
  43. private PatentDigProjectService patentDigProjectService;
  44. @Autowired
  45. private FormatQueryService formatQueryService;
  46. @Autowired
  47. private ProjectTaskMapper projectTaskMapper;
  48. @Autowired
  49. private PermissionService permissionService;
  50. @Autowired
  51. private AssoTaskFileService assoTaskFileService;
  52. @Autowired
  53. private TaskHandleResultService taskHandleResultService;
  54. @Autowired
  55. private AssoHandleResultFileService assoHandleResultFileService;
  56. @Autowired
  57. private FileManagerService fileManagerService;
  58. /**
  59. * 项目开卷审核任务
  60. * @param patentDigProjectTaskDTO
  61. * @return
  62. */
  63. public Object addProjectOpenAuditTask(PatentDigProjectTaskDTO patentDigProjectTaskDTO){
  64. PatentDigProjectDTO patentDigProjectDTO = patentDigProjectTaskDTO.getPatentDigProjectDTO();
  65. ProjectTaskDTO projectTaskDTO = patentDigProjectTaskDTO.getProjectTaskDTO();
  66. //如果专利挖掘项目DTO不为空,则需要先建立专利挖掘项目
  67. if (patentDigProjectDTO != null) {
  68. Integer projectId = (Integer) patentDigProjectService.addMessage(patentDigProjectDTO);
  69. projectTaskDTO.setProjectId(projectId);
  70. Integer projectTaskId = this.addTask(projectTaskDTO);
  71. return projectTaskId;
  72. } else {
  73. throw new XiaoShiException("挖掘项目数据不能为空!");
  74. }
  75. }
  76. /**
  77. * 新建任务
  78. * @param projectTaskDTO
  79. * @return
  80. */
  81. public Integer addTask(ProjectTaskDTO projectTaskDTO){
  82. //判断专题库id不为空
  83. if (projectTaskDTO.getProjectId() == null) {
  84. throw new XiaoShiException("专题库id不能为空!");
  85. }
  86. //判断任务类型不为空
  87. if (projectTaskDTO.getType() == null) {
  88. throw new XiaoShiException("任务类型不能为空!");
  89. }
  90. //判断任务名称不为空
  91. projectTaskDTO.setName(projectTaskDTO.getName().trim());
  92. String name = projectTaskDTO.getName();
  93. if (name == null || name.equals("")) {
  94. throw new XiaoShiException("任务名称不能为空!");
  95. }
  96. //根据assoTaskId查询processId
  97. if (projectTaskDTO.getAssoTaskId() != null) {
  98. LambdaQueryWrapper<ProjectTask> queryWrapper = new LambdaQueryWrapper<>();
  99. queryWrapper.eq(ProjectTask::getId, projectTaskDTO.getAssoTaskId());
  100. List<ProjectTask> projectTasks = this.list(queryWrapper);
  101. if (projectTasks != null && projectTasks.size() != 0) {
  102. ProjectTask projectTask = projectTasks.get(0);
  103. projectTaskDTO.setProcessId(projectTask.getProcessId());
  104. }
  105. }
  106. ProjectTask projectTask = new ProjectTask();
  107. BeanUtils.copyProperties(projectTaskDTO, projectTask);
  108. //任务状态置为处理中
  109. projectTask.setStatus(2);
  110. //获取登录人信息
  111. PersonnelVO personnelVO = new PersonnelVO();
  112. try {
  113. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  114. } catch (Exception e) {
  115. throw new UnLoginException("未登录");
  116. }
  117. //设置任务的发起人
  118. projectTask.setCreateId(personnelVO.getId());
  119. projectTask.insert();
  120. if (projectTask.getAssoTaskId() == null && projectTask.getType() == 6) {
  121. projectTask.setAssoTaskId(projectTask.getId());
  122. }
  123. //新增任务可能会上传附件,如果附件不为空,则添加任务与附件关联
  124. if (projectTaskDTO.getFileGuids() != null) {
  125. AssoTaskFileDTO assoTaskFileDTO = new AssoTaskFileDTO();
  126. assoTaskFileDTO.setTaskId(projectTask.getId());
  127. assoTaskFileDTO.setFileGuids(projectTaskDTO.getFileGuids());
  128. assoTaskFileService.addTaskFile(assoTaskFileDTO);
  129. }
  130. //根据新增的审核任务的lastTaskId,将上一级任务状态改为审核中
  131. if (projectTask.getLastTaskId() != null) {
  132. LambdaQueryWrapper<ProjectTask> queryWrapper = new LambdaQueryWrapper<>();
  133. queryWrapper.eq(ProjectTask::getId, projectTask.getLastTaskId());
  134. List<ProjectTask> projectTasks = this.list(queryWrapper);
  135. if (projectTasks != null && projectTasks.size() != 0) {
  136. ProjectTask projectTask1 = projectTasks.get(0);
  137. projectTask1.setStatus(1);
  138. projectTask1.updateById();
  139. }
  140. }
  141. return projectTask.getId();
  142. }
  143. /**
  144. * 查询任务
  145. * @param queryRequest
  146. * @return
  147. * @throws Exception
  148. */
  149. @Override
  150. public Object queryMessage(QueryRequest queryRequest) throws Exception {
  151. List<String> sqls = formatQueryService.reSqls(queryRequest,"projectTask");
  152. //根据sql查询任务信息
  153. List<ProjectTaskVO> projectTaskVOS = projectTaskMapper.getProjectTask(sqls.get(0),sqls.get(1),sqls.get(2));
  154. //查询总数
  155. Long total = projectTaskMapper.getProjectTaskCount(sqls.get(0));
  156. //装载事件信息
  157. this.loadProjectTask(projectTaskVOS);
  158. Records records = new Records();
  159. records.setCurrent(queryRequest.getCurrent());
  160. records.setSize(queryRequest.getSize());
  161. records.setData(projectTaskVOS);
  162. records.setTotal(total);
  163. return records;
  164. }
  165. /**
  166. * 装载任务
  167. * @param projectTaskVOS
  168. * @throws IOException
  169. */
  170. public void loadProjectTask(List<ProjectTaskVO> projectTaskVOS) throws IOException {
  171. List<String> createIds = new ArrayList<>();
  172. List<String> handlerIds = new ArrayList<>();
  173. projectTaskVOS.forEach(
  174. item -> {
  175. if (item.getCreateId() != null) {
  176. createIds.add(item.getCreateId());
  177. }
  178. if (item.getHandler() != null) {
  179. handlerIds.add(item.getHandler());
  180. }
  181. }
  182. );
  183. List<Personnel> personnels = new ArrayList<>();
  184. List<Personnel> personnels2 = new ArrayList<>();
  185. //查询发起人名称
  186. if (createIds.size() != 0) {
  187. String res = permissionService.getPersonnelByIdsFromPCS(createIds);
  188. JSONObject jsonObject = JSONObject.parseObject(res);
  189. personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
  190. }
  191. //查询负责人名称
  192. if (handlerIds.size() != 0) {
  193. String res = permissionService.getPersonnelByIdsFromPCS(handlerIds);
  194. JSONObject jsonObject = JSONObject.parseObject(res);
  195. personnels2 = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
  196. }
  197. //装载信息
  198. for (ProjectTaskVO projectTaskVO : projectTaskVOS) {
  199. //装载人员信息
  200. Personnel personnel = personnels.stream().filter(item -> item.getId().equals(projectTaskVO.getCreateId())).findFirst().orElse(null);
  201. Personnel personnel2 = personnels2.stream().filter(item -> item.getId().equals(projectTaskVO.getHandler())).findFirst().orElse(null);
  202. if(personnel != null){
  203. projectTaskVO.setCreateName(personnel.getPersonnelName());
  204. projectTaskVO.setHandlerName(personnel2.getPersonnelName());
  205. } else {
  206. throw new XiaoShiException("未获取到当前登陆人信息");
  207. }
  208. }
  209. }
  210. /**
  211. * 根据任务id查询任务详情以及处理结果以及审核历史
  212. * @param taskId
  213. * @return
  214. */
  215. public TaskDetailsVO queryAuditHistory(Integer taskId) throws IOException {
  216. //新建返回VO类
  217. TaskDetailsVO taskDetailsVO = new TaskDetailsVO();
  218. //根据taskId查询此条任务详情
  219. LambdaQueryWrapper<ProjectTask> currentTaskWrapper = new LambdaQueryWrapper<>();
  220. currentTaskWrapper.eq(ProjectTask::getId, taskId);
  221. List<ProjectTask> currentTasks = this.list(currentTaskWrapper);
  222. ProjectTask currentTask = new ProjectTask();
  223. if (currentTasks != null && currentTasks.size() != 0) {
  224. currentTask = currentTasks.get(0);
  225. }
  226. //根据此条任务详情获取assoTaskId
  227. Integer assoTaskId = currentTask.getAssoTaskId();
  228. List<ProjectTask> allProjectTasks = new ArrayList<>();
  229. if (assoTaskId != null) {
  230. //根据assoTaskId获取最初任务的详情
  231. LambdaQueryWrapper<ProjectTask> assoTaskWrapper = new LambdaQueryWrapper<>();
  232. assoTaskWrapper.eq(ProjectTask::getId, assoTaskId);
  233. ProjectTask assoTask = this.list(assoTaskWrapper).get(0);
  234. //装载最初任务详情
  235. ProjectTaskVO projectTaskVO = new ProjectTaskVO();
  236. BeanUtils.copyProperties(assoTask, projectTaskVO);
  237. taskDetailsVO.setProjectTaskVO(projectTaskVO);
  238. //根据assoTaskId查询所有任务的id
  239. LambdaQueryWrapper<ProjectTask> allTaskWrapper = new LambdaQueryWrapper<>();
  240. allTaskWrapper.eq(ProjectTask::getAssoTaskId, assoTaskId);
  241. allProjectTasks = this.list(allTaskWrapper);
  242. }
  243. //新建审核历史返回VO以及集合
  244. List<AuditHistoryVO> auditHistoryVOS = new ArrayList<>();
  245. if (allProjectTasks != null) {
  246. for (ProjectTask item : allProjectTasks) {
  247. if (item != null) {
  248. AuditHistoryVO auditHistoryVO = new AuditHistoryVO();
  249. //任务详情VO
  250. ProjectTaskVO auditHistoryTaskVO = new ProjectTaskVO();
  251. BeanUtils.copyProperties(item, auditHistoryTaskVO);
  252. //处理结果VO
  253. TaskHandleResultVO taskHandleResultVO = new TaskHandleResultVO();
  254. LambdaQueryWrapper<TaskHandleResult> queryWrapper = new LambdaQueryWrapper<>();
  255. queryWrapper.eq(TaskHandleResult::getTaskId, item.getId());
  256. List<TaskHandleResult> taskHandleResults = taskHandleResultService.list(queryWrapper);
  257. if (taskHandleResults.size() != 0) {
  258. TaskHandleResult taskHandleResult = taskHandleResults.get(0);
  259. if (taskHandleResult != null) {
  260. BeanUtils.copyProperties(taskHandleResult, taskHandleResultVO);
  261. auditHistoryVO.setProjectTaskVO(auditHistoryTaskVO);
  262. auditHistoryVO.setTaskHandleResultVO(taskHandleResultVO);
  263. }
  264. }
  265. auditHistoryVOS.add(auditHistoryVO);
  266. }
  267. }
  268. taskDetailsVO.setAuditHistoryVOS(auditHistoryVOS);
  269. }
  270. //全部的文件信息(获取所有的任务的id,查出所有的结果id)
  271. List<Integer> allTaskIds = allProjectTasks.stream().map(ProjectTask::getId).collect(Collectors.toList());
  272. LambdaQueryWrapper<TaskHandleResult> queryWrapper = new LambdaQueryWrapper<>();
  273. queryWrapper.in(TaskHandleResult::getTaskId, allTaskIds);
  274. List<TaskHandleResult> taskHandleResults = taskHandleResultService.list(queryWrapper);
  275. List<Integer> resultIds = new ArrayList<>();
  276. if (taskHandleResults != null && taskHandleResults.size() != 0) {
  277. resultIds = taskHandleResults.stream().map(TaskHandleResult::getId).collect(Collectors.toList());
  278. }
  279. List<HandleResultFileVO> handleResultFileVOS = new ArrayList<>();
  280. //根据所有的结果ids查询所有fileGuids
  281. if (resultIds != null) {
  282. LambdaQueryWrapper<AssoHandleResultFile> allGuidsWrapper = new LambdaQueryWrapper<>();
  283. allGuidsWrapper.in(AssoHandleResultFile::getTaskHandleResultId, resultIds);
  284. List<AssoHandleResultFile> assoHandleResultFiles = assoHandleResultFileService.list(allGuidsWrapper);
  285. //新建
  286. List<String> fileGuids = new ArrayList<>();
  287. List<SystemFile> systemFiles = new ArrayList<>();
  288. if (assoHandleResultFiles.size() != 0) {
  289. fileGuids = assoHandleResultFiles.stream().map(AssoHandleResultFile::getFileGuid).collect(Collectors.toList());
  290. }
  291. //调用文件系统查询文件信息接口
  292. if (fileGuids.size() != 0) {
  293. String res = fileManagerService.getSystemFileFromFMS(fileGuids);
  294. systemFiles = JSONObject.parseArray(res, SystemFile.class);
  295. }
  296. if (systemFiles.size() != 0) {
  297. for (AssoHandleResultFile assoHandleResultFile : assoHandleResultFiles) {
  298. HandleResultFileVO handleResultFileVO = new HandleResultFileVO();
  299. //装载文件信息
  300. SystemFile systemFile = systemFiles.stream().filter(item -> item.getGuid().equals(assoHandleResultFile.getFileGuid())).findFirst().orElse(null);
  301. if (systemFile != null) {
  302. BeanUtils.copyProperties(assoHandleResultFile, handleResultFileVO);
  303. handleResultFileVO.setGuid(assoHandleResultFile.getFileGuid());
  304. handleResultFileVO.setType(systemFile.getType());
  305. handleResultFileVO.setOriginalName(systemFile.getOriginalName());
  306. }
  307. handleResultFileVOS.add(handleResultFileVO);
  308. }
  309. }
  310. }
  311. taskDetailsVO.setSystemFileList(handleResultFileVOS);
  312. //装载名称
  313. this.loadTaskDetails(taskDetailsVO);
  314. return taskDetailsVO;
  315. }
  316. /**
  317. * 装载任务详情的集合
  318. * @param taskDetailsVO
  319. * @throws IOException
  320. */
  321. public void loadTaskDetails(TaskDetailsVO taskDetailsVO) throws IOException {
  322. //装载项目名称
  323. Integer projectId = null;
  324. if (taskDetailsVO.getProjectTaskVO() != null) {
  325. projectId = taskDetailsVO.getProjectTaskVO().getProjectId();
  326. }
  327. if (projectId != null) {
  328. //根据项目id查询项目名称并装载
  329. LambdaQueryWrapper<PatentDigProject> queryWrapper = new LambdaQueryWrapper<>();
  330. queryWrapper.eq(PatentDigProject::getProjectId, projectId);
  331. List<PatentDigProject> patentDigProjects = patentDigProjectService.list(queryWrapper);
  332. if (patentDigProjects != null && patentDigProjects.size() != 0) {
  333. PatentDigProject patentDigProject = patentDigProjects.get(0);
  334. String projectName = patentDigProject.getName();
  335. taskDetailsVO.getProjectTaskVO().setProjectName(projectName);
  336. }
  337. }
  338. //新建人员id集合
  339. List<String> createIds = new ArrayList<>();
  340. //添加分配任务的创建人id
  341. if (taskDetailsVO.getProjectTaskVO().getCreateId() != null) {
  342. createIds.add(taskDetailsVO.getProjectTaskVO().getCreateId());
  343. }
  344. //添加分配任务的负责人id
  345. if (taskDetailsVO.getProjectTaskVO().getHandler() != null) {
  346. createIds.add(taskDetailsVO.getProjectTaskVO().getHandler());
  347. }
  348. //添加文件上传人的id
  349. taskDetailsVO.getSystemFileList().forEach(
  350. item -> {
  351. if (item.getCreateId() != null) {
  352. createIds.add(item.getCreateId());
  353. }
  354. }
  355. );
  356. //添加审查历史中的人员id
  357. taskDetailsVO.getAuditHistoryVOS().forEach(
  358. item -> {
  359. if (item.getProjectTaskVO() != null) {
  360. if (item.getProjectTaskVO().getCreateId() != null) {
  361. createIds.add(item.getProjectTaskVO().getCreateId());
  362. }
  363. if (item.getProjectTaskVO().getHandler() != null) {
  364. createIds.add(item.getProjectTaskVO().getHandler());
  365. }
  366. }
  367. if (item.getTaskHandleResultVO() != null) {
  368. if (item.getTaskHandleResultVO().getCreateId() != null) {
  369. createIds.add(item.getTaskHandleResultVO().getCreateId());
  370. }
  371. }
  372. }
  373. );
  374. List<Personnel> personnels = new ArrayList<>();
  375. //查询创建人名称
  376. if (createIds.size() != 0) {
  377. String res = permissionService.getPersonnelByIdsFromPCS(createIds);
  378. JSONObject jsonObject = JSONObject.parseObject(res);
  379. personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
  380. }
  381. //装载人员信息
  382. //分配任务的创建人name
  383. if (taskDetailsVO.getProjectTaskVO() != null) {
  384. Personnel personnel = personnels.stream().filter(item -> item.getId().equals(taskDetailsVO.getProjectTaskVO().getCreateId())).findFirst().orElse(null);
  385. if (personnel != null) {
  386. taskDetailsVO.getProjectTaskVO().setCreateName(personnel.getPersonnelName());
  387. } else {
  388. throw new XiaoShiException("未获取到分配任务的创建人id信息");
  389. }
  390. //分配任务的负责人name
  391. Personnel personnel1 = personnels.stream().filter(item -> item.getId().equals(taskDetailsVO.getProjectTaskVO().getHandler())).findFirst().orElse(null);
  392. if (personnel1 != null) {
  393. taskDetailsVO.getProjectTaskVO().setHandlerName(personnel1.getPersonnelName());
  394. } else {
  395. throw new XiaoShiException("未获取到分配任务的负责人id信息");
  396. }
  397. }
  398. //装载所有文件的上传人name
  399. for (HandleResultFileVO handleResultFileVO : taskDetailsVO.getSystemFileList()) {
  400. if (handleResultFileVO != null) {
  401. Personnel personnel2 = personnels.stream().filter(item -> item.getId().equals(handleResultFileVO.getCreateId())).findFirst().orElse(null);
  402. if (personnel2 != null) {
  403. handleResultFileVO.setCreateName(personnel2.getPersonnelName());
  404. } else {
  405. throw new XiaoShiException("未获取到所有文件上传人id信息");
  406. }
  407. }
  408. }
  409. //装载所有审查历史中的人员name
  410. for (AuditHistoryVO auditHistoryVO : taskDetailsVO.getAuditHistoryVOS()) {
  411. if (auditHistoryVO.getProjectTaskVO() != null) {
  412. Personnel personnel3 = personnels.stream().filter(item -> item.getId().equals(auditHistoryVO.getProjectTaskVO().getCreateId())).findFirst().orElse(null);
  413. if (personnel3 != null) {
  414. auditHistoryVO.getProjectTaskVO().setCreateName(personnel3.getPersonnelName());
  415. } else {
  416. throw new XiaoShiException("未获取到分配任务的负责人id信息");
  417. }
  418. Personnel personnel4 = personnels.stream().filter(item -> item.getId().equals(auditHistoryVO.getProjectTaskVO().getHandler())).findFirst().orElse(null);
  419. if (personnel4 != null) {
  420. auditHistoryVO.getProjectTaskVO().setHandlerName(personnel4.getPersonnelName());
  421. } else {
  422. throw new XiaoShiException("未获取到分配任务的负责人id信息");
  423. }
  424. }
  425. if (auditHistoryVO.getTaskHandleResultVO() != null) {
  426. Personnel personnel5 = personnels.stream().filter(item -> item.getId().equals(auditHistoryVO.getTaskHandleResultVO().getCreateId())).findFirst().orElse(null);
  427. if (personnel5 != null) {
  428. auditHistoryVO.getTaskHandleResultVO().setCreateName(personnel5.getPersonnelName());
  429. } else {
  430. throw new XiaoShiException("未获取到分配任务的负责人id信息");
  431. }
  432. }
  433. }
  434. }
  435. @Override
  436. public Object addMessage(Object object, List<MultipartFile> files) {
  437. return null;
  438. }
  439. @Override
  440. public Object deleteMessage(List<Integer> ids) throws IOException {
  441. //TODO
  442. //删除审核结果与文件关联表
  443. //删除审核结果表
  444. //删除任务表
  445. return null;
  446. }
  447. @Override
  448. public Object updateMessage(Object object, List<MultipartFile> files) {
  449. return null;
  450. }
  451. @Override
  452. public Object getGroup(GroupRequest groupRequest, String tableName) throws Exception {
  453. return null;
  454. }
  455. @Override
  456. public Object addMessage(Object object) {
  457. return null;
  458. }
  459. @Override
  460. public Object updateMessage(Object object) {
  461. return null;
  462. }
  463. }