PatentDigProjectFilesService.java 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469
  1. package cn.cslg.pas.service.business;
  2. import cn.cslg.pas.common.dto.QueryPatentDigProjectFilesDTO;
  3. import cn.cslg.pas.common.dto.business.PatentDigProjectFilesDTO;
  4. import cn.cslg.pas.common.model.cronModel.Personnel;
  5. import cn.cslg.pas.common.model.cronModel.PersonnelVO;
  6. import cn.cslg.pas.common.model.cronModel.Records;
  7. import cn.cslg.pas.common.model.cronModel.SystemFile;
  8. import cn.cslg.pas.common.model.request.GroupRequest;
  9. import cn.cslg.pas.common.model.request.QueryRequest;
  10. import cn.cslg.pas.common.utils.CacheUtils;
  11. import cn.cslg.pas.common.utils.LoginUtils;
  12. import cn.cslg.pas.common.vo.business.PatentDigProjectFilesVO;
  13. import cn.cslg.pas.domain.business.*;
  14. import cn.cslg.pas.exception.UnLoginException;
  15. import cn.cslg.pas.exception.XiaoShiException;
  16. import cn.cslg.pas.factorys.businessFactory.Business;
  17. import cn.cslg.pas.mapper.PatentDigProjectFilesMapper;
  18. import cn.cslg.pas.service.common.FileManagerService;
  19. import cn.cslg.pas.service.permissions.PermissionService;
  20. import cn.cslg.pas.service.query.FormatQueryService;
  21. import com.alibaba.fastjson.JSONObject;
  22. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  23. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  24. import org.springframework.beans.BeanUtils;
  25. import org.springframework.beans.factory.annotation.Autowired;
  26. import org.springframework.context.annotation.Lazy;
  27. import org.springframework.stereotype.Service;
  28. import org.springframework.web.multipart.MultipartFile;
  29. import java.io.IOException;
  30. import java.text.SimpleDateFormat;
  31. import java.util.ArrayList;
  32. import java.util.HashMap;
  33. import java.util.List;
  34. import java.util.Map;
  35. import java.util.stream.Collectors;
  36. /**
  37. * 专利挖掘项目文件Service层
  38. *
  39. * @Author xiexiang
  40. * @Date 2023/11/8
  41. */
  42. @Service
  43. public class PatentDigProjectFilesService extends ServiceImpl<PatentDigProjectFilesMapper, PatentDigProjectFiles> implements Business {
  44. @Autowired
  45. private CacheUtils cacheUtils;
  46. @Autowired
  47. private LoginUtils loginUtils;
  48. @Autowired
  49. private FormatQueryService formatQueryService;
  50. @Autowired
  51. private PatentDigProjectFilesMapper patentDigProjectFilesMapper;
  52. @Autowired
  53. private PermissionService permissionService;
  54. @Autowired
  55. private FileManagerService fileManagerService;
  56. @Autowired
  57. @Lazy
  58. private ProjectTaskService projectTaskService;
  59. @Autowired
  60. private AssoTaskFileService assoTaskFileService;
  61. @Autowired
  62. private AssoProjectFileService assoProjectFileService;
  63. @Autowired
  64. @Lazy
  65. private TaskHandleResultService taskHandleResultService;
  66. @Autowired
  67. private AssoHandleResultFileService assoHandleResultFileService;
  68. @Override
  69. public Object queryMessage(QueryRequest queryRequest) throws Exception {
  70. //根据专题库/报告id查询自定义栏位
  71. List<String> sqls = formatQueryService.reSqls(queryRequest, "patentDigProjectFiles");
  72. //根据sql查询自定义栏位信息
  73. List<PatentDigProjectFilesVO> patentDigProjectFilesVOS = patentDigProjectFilesMapper.getPatentDigProjectFiles(sqls.get(0), sqls.get(1), sqls.get(2));
  74. //查询总数
  75. Long total = patentDigProjectFilesMapper.getPatentDigProjectFilesCount(sqls.get(0));
  76. //装载自定义栏位信息
  77. this.loadPatentDigProjectFiles(patentDigProjectFilesVOS);
  78. //装载返回信息
  79. Records records = new Records();
  80. records.setCurrent(queryRequest.getCurrent());
  81. records.setSize(queryRequest.getSize());
  82. records.setData(patentDigProjectFilesVOS);
  83. records.setTotal(total);
  84. return records;
  85. }
  86. @Override
  87. public Object addMessage(Object object, List<MultipartFile> files) {
  88. return null;
  89. }
  90. @Override
  91. public Object deleteMessage(List<Integer> ids) throws IOException {
  92. if (!ids.isEmpty()) {
  93. this.removeBatchByIds(ids);
  94. }
  95. return ids;
  96. }
  97. @Override
  98. public Object updateMessage(Object object, List<MultipartFile> files) {
  99. return null;
  100. }
  101. @Override
  102. public Object getGroup(GroupRequest groupRequest, String tableName) throws Exception {
  103. return null;
  104. }
  105. /**
  106. * 新增专利挖掘项目文件
  107. *
  108. * @param object
  109. * @return
  110. */
  111. @Override
  112. public Object addMessage(Object object) {
  113. //object to patentDigProjectFilesDTO
  114. PatentDigProjectFilesDTO patentDigProjectFilesDTO = (PatentDigProjectFilesDTO) object;
  115. //判断projectId是否为空
  116. if (patentDigProjectFilesDTO.getProjectId() == null) {
  117. throw new XiaoShiException("projectId不能为空");
  118. }
  119. //判断processId是否为空
  120. if (patentDigProjectFilesDTO.getProcessId() == null) {
  121. throw new XiaoShiException("processId不能为空");
  122. }
  123. //获取登陆人信息 用于设置创建人
  124. PersonnelVO personnelVO = new PersonnelVO();
  125. try {
  126. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  127. } catch (Exception e) {
  128. throw new UnLoginException("未登录");
  129. }
  130. List<Integer> ids = new ArrayList<>();
  131. if (patentDigProjectFilesDTO.getFileGuids() != null && !patentDigProjectFilesDTO.getFileGuids().isEmpty()) {
  132. List<String> fileGuids = patentDigProjectFilesDTO.getFileGuids();
  133. List<SystemFile> systemFiles = new ArrayList<>();
  134. List<PatentDigProjectFiles> patentDigProjectFilesS = new ArrayList<>();
  135. //调用文件系统查询文件信息接口
  136. if (fileGuids.size() != 0) {
  137. try {
  138. String res = fileManagerService.getSystemFileFromFMS(fileGuids);
  139. systemFiles = JSONObject.parseArray(res, SystemFile.class);
  140. if (systemFiles.size() != 0) {
  141. for (String item : fileGuids) {
  142. SystemFile systemFile = systemFiles.stream().filter(item1 -> item1.getGuid().equals(item)).findFirst().orElse(null);
  143. PatentDigProjectFiles patentDigProjectFiles = new PatentDigProjectFiles();
  144. BeanUtils.copyProperties(patentDigProjectFilesDTO, patentDigProjectFiles);
  145. patentDigProjectFiles.setFileGuid(item);
  146. patentDigProjectFiles.setName(systemFile.getOriginalName());
  147. patentDigProjectFiles.setCreateId(personnelVO.getId());
  148. patentDigProjectFilesS.add(patentDigProjectFiles);
  149. }
  150. this.saveBatch(patentDigProjectFilesS);
  151. }
  152. } catch (Exception e) {
  153. throw new XiaoShiException("查询文件信息错误");
  154. }
  155. }
  156. patentDigProjectFilesS.forEach(item -> {
  157. ids.add(item.getId());
  158. });
  159. }
  160. return ids;
  161. }
  162. @Override
  163. public Object updateMessage(Object object) {
  164. return null;
  165. }
  166. /**
  167. * 装载专利挖掘文件列表信息
  168. *
  169. * @param patentDigProjectFilesVOS
  170. */
  171. private void loadPatentDigProjectFiles(List<PatentDigProjectFilesVO> patentDigProjectFilesVOS) throws IOException {
  172. List<String> createIds = new ArrayList<>();
  173. List<String> fileGuids = new ArrayList<>();
  174. patentDigProjectFilesVOS.forEach(
  175. item -> {
  176. if (item.getCreateId() != null) {
  177. createIds.add(item.getCreateId());
  178. }
  179. if (item.getFileGuid() != null) {
  180. fileGuids.add(item.getFileGuid());
  181. }
  182. }
  183. );
  184. List<Personnel> personnels = 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. List<SystemFile> systemFiles = new ArrayList<>();
  192. if (fileGuids.size() != 0) {
  193. String res = fileManagerService.getSystemFileFromFMS(fileGuids);
  194. systemFiles = JSONObject.parseArray(res, SystemFile.class);
  195. }
  196. for (PatentDigProjectFilesVO patentDigProjectFilesVO : patentDigProjectFilesVOS) {
  197. //装载人员信息
  198. Personnel personnel = personnels.stream().filter(item -> item.getId().equals(patentDigProjectFilesVO.getCreateId())).findFirst().orElse(null);
  199. if (personnel != null) {
  200. patentDigProjectFilesVO.setCreateName(personnel.getPersonnelName());
  201. } else {
  202. throw new XiaoShiException("未获取到当前登陆人信息");
  203. }
  204. SystemFile systemFile = systemFiles.stream().filter(item -> item.getGuid().equals(patentDigProjectFilesVO.getFileGuid())).findFirst().orElse(null);
  205. patentDigProjectFilesVO.setType(systemFile.getType());
  206. patentDigProjectFilesVO.setName(systemFile.getOriginalName());
  207. //调用查询流程名称方法
  208. String name = this.getProcessName(patentDigProjectFilesVO.getProcessId());
  209. patentDigProjectFilesVO.setProcessName(name);
  210. //任务信息
  211. Integer taskId = patentDigProjectFilesVO.getTaskId();
  212. if (taskId != null) {
  213. ProjectTask projectTask = projectTaskService.getById(taskId);
  214. patentDigProjectFilesVO.setProjectTask(projectTask);
  215. }
  216. }
  217. }
  218. /**
  219. * 装载流程名
  220. *
  221. * @param processId
  222. * @return
  223. */
  224. public String getProcessName(Integer processId) {
  225. String name = null;
  226. Map<Integer, String> processMap = new HashMap<>();
  227. processMap.put(1, "创新点梳理");
  228. processMap.put(2, "查新检索");
  229. processMap.put(3, "保护主题规划");
  230. processMap.put(4, "独权撰写");
  231. processMap.put(5, "从权撰写");
  232. processMap.put(6, "申请文件定稿");
  233. processMap.put(7, "说明书规划撰写");
  234. name = processMap.get(processId);
  235. return name;
  236. }
  237. /**
  238. * 上传专利挖掘项目文件后提交审核,新增专利挖掘文件审核记录
  239. *
  240. * @param patentDigProjectFilesDTO
  241. * @return
  242. */
  243. public Integer addPDProjectFilesTask(PatentDigProjectFilesDTO patentDigProjectFilesDTO) {
  244. //首先调用新增文件接口
  245. List<Integer> ids = (List<Integer>) this.addMessage(patentDigProjectFilesDTO);
  246. //其次调用新增任务接口
  247. patentDigProjectFilesDTO.getProjectTaskDTO().setProjectId(patentDigProjectFilesDTO.getProjectId());
  248. patentDigProjectFilesDTO.getProjectTaskDTO().setProcessId(patentDigProjectFilesDTO.getProcessId());
  249. Integer taskType = 7;
  250. patentDigProjectFilesDTO.getProjectTaskDTO().setType(taskType);
  251. Integer taskId = projectTaskService.addTask(patentDigProjectFilesDTO.getProjectTaskDTO());
  252. if (!ids.isEmpty()) {
  253. LambdaQueryWrapper<PatentDigProjectFiles> queryWrapper = new LambdaQueryWrapper<>();
  254. queryWrapper.in(PatentDigProjectFiles::getId, ids);
  255. List<PatentDigProjectFiles> patentDigProjectFiles = this.list(queryWrapper);
  256. if (!patentDigProjectFiles.isEmpty()) {
  257. patentDigProjectFiles.forEach(item -> {
  258. item.setTaskId(taskId);
  259. });
  260. this.updateBatchById(patentDigProjectFiles);
  261. }
  262. }
  263. return taskId;
  264. }
  265. /**
  266. * 获取流程信息
  267. *
  268. * @param projectId
  269. * @return
  270. */
  271. public Map<Integer, Map<String, Integer>> getProcessInfo(Integer projectId) {
  272. Map<Integer, Map<String, Integer>> processInfo = new HashMap<>();
  273. for (int i = 1; i < 8; i++) {
  274. LambdaQueryWrapper<ProjectTask> queryWrapper = new LambdaQueryWrapper<>();
  275. queryWrapper.eq(ProjectTask::getProcessId, i).eq(ProjectTask::getProjectId, projectId);
  276. Integer taskCount = (int) projectTaskService.count(queryWrapper);
  277. LambdaQueryWrapper<PatentDigProjectFiles> queryWrapper1 = new LambdaQueryWrapper<>();
  278. queryWrapper1.eq(PatentDigProjectFiles::getProcessId, i).eq(PatentDigProjectFiles::getProjectId, projectId);
  279. Integer fileCount = (int) this.count(queryWrapper1);
  280. Integer handleFileCount = assoHandleResultFileService.getBaseMapper().getResultFileNum(projectId, i);
  281. fileCount += handleFileCount;
  282. Map<String, Integer> countMap = new HashMap<>();
  283. countMap.put("taskCount", taskCount);
  284. countMap.put("fileCount", fileCount);
  285. processInfo.put(i, countMap);
  286. }
  287. return processInfo;
  288. }
  289. /**
  290. * 查询专利挖掘项目所有文件
  291. * 来源:1 PatentDigProjectFiles
  292. * 2 AssoHandleResultFile
  293. * 3 AssoProjectFile
  294. * 4 AssoTaskFile
  295. *
  296. * @param queryPatentDigProjectFilesDTO
  297. */
  298. public List<PatentDigProjectFilesVO> getPatentDigProjectFiles(QueryPatentDigProjectFilesDTO queryPatentDigProjectFilesDTO) {
  299. List<PatentDigProjectFilesVO> patentDigProjectFilesVOS = new ArrayList<>();
  300. //查询本表
  301. if (queryPatentDigProjectFilesDTO == null) {
  302. throw new XiaoShiException("入参为空");
  303. }
  304. Integer projectId = queryPatentDigProjectFilesDTO.getProjectId();
  305. if (projectId == null) {
  306. throw new XiaoShiException("projectId为空");
  307. }
  308. //流程id
  309. Integer processId = queryPatentDigProjectFilesDTO.getProcessId();
  310. //任务id
  311. Integer taskId = queryPatentDigProjectFilesDTO.getTaskId();
  312. LambdaQueryWrapper<PatentDigProjectFiles> queryWrapper = new LambdaQueryWrapper<>();
  313. queryWrapper.eq(PatentDigProjectFiles::getProjectId, projectId);
  314. if (processId != null) {
  315. queryWrapper.eq(PatentDigProjectFiles::getProcessId, processId);
  316. }
  317. if (taskId != null) {
  318. queryWrapper.eq(PatentDigProjectFiles::getTaskId, taskId);
  319. }
  320. List<PatentDigProjectFiles> patentDigProjectFilesList = this.list(queryWrapper);
  321. if (!patentDigProjectFilesList.isEmpty()) {
  322. patentDigProjectFilesList.forEach(item -> {
  323. PatentDigProjectFilesVO patentDigProjectFilesVO = new PatentDigProjectFilesVO();
  324. BeanUtils.copyProperties(item, patentDigProjectFilesVO);
  325. patentDigProjectFilesVO.setSource(1);
  326. patentDigProjectFilesVOS.add(patentDigProjectFilesVO);
  327. });
  328. }
  329. //查询项目下所有任务的文件
  330. LambdaQueryWrapper<ProjectTask> queryWrapper1 = new LambdaQueryWrapper<>();
  331. queryWrapper1.eq(ProjectTask::getProjectId, projectId);
  332. if (processId != null) {
  333. queryWrapper1.eq(ProjectTask::getProcessId, processId);
  334. }
  335. if (taskId != null) {
  336. queryWrapper1.eq(ProjectTask::getId, taskId);
  337. }
  338. List<ProjectTask> projectTasks = projectTaskService.list(queryWrapper1);
  339. if (!projectTasks.isEmpty()) {
  340. List<Integer> taskIds = projectTasks.stream().map(ProjectTask::getId).collect(Collectors.toList());
  341. LambdaQueryWrapper<AssoTaskFile> queryWrapper2 = new LambdaQueryWrapper<>();
  342. queryWrapper2.in(AssoTaskFile::getTaskId, taskIds);
  343. List<AssoTaskFile> assoTaskFiles = assoTaskFileService.list(queryWrapper2);
  344. if (!assoTaskFiles.isEmpty()) {
  345. assoTaskFiles.forEach(item -> {
  346. ProjectTask projectTask = projectTasks.stream().filter(item2 -> item2.getId().equals(item.getTaskId())).findFirst().orElse(null);
  347. PatentDigProjectFilesVO patentDigProjectFilesVO = new PatentDigProjectFilesVO();
  348. patentDigProjectFilesVO.setProjectId(projectId);
  349. patentDigProjectFilesVO.setFileGuid(item.getFileGuid());
  350. patentDigProjectFilesVO.setTaskId(item.getTaskId());
  351. patentDigProjectFilesVO.setCreateId(item.getCreateId());
  352. patentDigProjectFilesVO.setCreateTime(item.getCreateTime());
  353. patentDigProjectFilesVO.setDescription(item.getDescription());
  354. if (projectTask != null) {
  355. patentDigProjectFilesVO.setProcessId(projectTask.getProcessId());
  356. }
  357. patentDigProjectFilesVO.setSource(4);
  358. patentDigProjectFilesVOS.add(patentDigProjectFilesVO);
  359. });
  360. }
  361. //查询审核历史里的文件
  362. LambdaQueryWrapper<TaskHandleResult> queryWrapper3 = new LambdaQueryWrapper<>();
  363. queryWrapper3.in(TaskHandleResult::getTaskId, taskIds);
  364. List<TaskHandleResult> taskHandleResults = taskHandleResultService.list(queryWrapper3);
  365. if (taskHandleResults != null && taskHandleResults.size() > 0) {
  366. List<Integer> resultIds = taskHandleResults.stream().map(TaskHandleResult::getId).collect(Collectors.toList());
  367. LambdaQueryWrapper<AssoHandleResultFile> queryWrapper4 = new LambdaQueryWrapper<>();
  368. queryWrapper4.in(AssoHandleResultFile::getTaskHandleResultId, resultIds);
  369. List<AssoHandleResultFile> assoHandleResultFiles = assoHandleResultFileService.list(queryWrapper4);
  370. assoHandleResultFiles.forEach(item -> {
  371. PatentDigProjectFilesVO patentDigProjectFilesVO = new PatentDigProjectFilesVO();
  372. patentDigProjectFilesVO.setProjectId(projectId);
  373. patentDigProjectFilesVO.setFileGuid(item.getFileGuid());
  374. patentDigProjectFilesVO.setCreateId(item.getCreateId());
  375. patentDigProjectFilesVO.setProcessId(processId);
  376. patentDigProjectFilesVO.setCreateTime(item.getCreateTime());
  377. patentDigProjectFilesVO.setSource(2);
  378. patentDigProjectFilesVOS.add(patentDigProjectFilesVO);
  379. });
  380. }
  381. }
  382. //查询项目下的文件
  383. if (taskId == null) {
  384. LambdaQueryWrapper<AssoProjectFile> queryWrapper2 = new LambdaQueryWrapper<>();
  385. queryWrapper2.eq(AssoProjectFile::getProjectId, projectId);
  386. List<AssoProjectFile> assoProjectFiles = assoProjectFileService.list(queryWrapper2);
  387. if (!assoProjectFiles.isEmpty()) {
  388. assoProjectFiles.forEach(item -> {
  389. PatentDigProjectFilesVO patentDigProjectFilesVO = new PatentDigProjectFilesVO();
  390. patentDigProjectFilesVO.setProjectId(projectId);
  391. patentDigProjectFilesVO.setFileGuid(item.getFileGuid());
  392. patentDigProjectFilesVO.setCreateId(item.getCreateId());
  393. patentDigProjectFilesVO.setCreateTime(item.getCreateTime());
  394. patentDigProjectFilesVO.setSource(3);
  395. patentDigProjectFilesVOS.add(patentDigProjectFilesVO);
  396. });
  397. }
  398. }
  399. try {
  400. this.loadPatentDigProjectFiles(patentDigProjectFilesVOS);
  401. } catch (Exception e) {
  402. throw new XiaoShiException("装载信息错误");
  403. }
  404. return patentDigProjectFilesVOS;
  405. }
  406. /**
  407. * 删除
  408. * 来源:1 PatentDigProjectFiles
  409. * 2 AssoHandleResultFile
  410. * 3 AssoProjectFile
  411. * 4 AssoTaskFile
  412. * @param source
  413. * @param fileGuid
  414. */
  415. public void delete(Integer source, String fileGuid) {
  416. if (fileGuid != null && !fileGuid.trim().isEmpty()) {
  417. if (source != null) {
  418. if (source.equals(1)) {
  419. LambdaQueryWrapper<PatentDigProjectFiles> queryWrapper = new LambdaQueryWrapper<>();
  420. queryWrapper.eq(PatentDigProjectFiles::getFileGuid, fileGuid);
  421. this.remove(queryWrapper);
  422. } else if (source.equals(2)) {
  423. LambdaQueryWrapper<AssoHandleResultFile> queryWrapper = new LambdaQueryWrapper<>();
  424. queryWrapper.eq(AssoHandleResultFile::getFileGuid, fileGuid);
  425. assoHandleResultFileService.remove(queryWrapper);
  426. } else if (source.equals(3)) {
  427. LambdaQueryWrapper<AssoProjectFile> queryWrapper = new LambdaQueryWrapper<>();
  428. queryWrapper.eq(AssoProjectFile::getFileGuid, fileGuid);
  429. assoProjectFileService.remove(queryWrapper);
  430. } else if (source.equals(4)) {
  431. LambdaQueryWrapper<AssoTaskFile> queryWrapper = new LambdaQueryWrapper<>();
  432. queryWrapper.eq(AssoTaskFile::getFileGuid, fileGuid);
  433. assoTaskFileService.remove(queryWrapper);
  434. }
  435. }
  436. }
  437. }
  438. }