CostAuditReviewController.java 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. package com.hotent.enterpriseDeclare.controller;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.metadata.IPage;
  4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  5. import com.hotent.base.annotation.ApiGroup;
  6. import com.hotent.base.constants.ApiGroupConsts;
  7. import com.hotent.base.model.CommonResult;
  8. import com.hotent.base.util.StringUtil;
  9. import com.hotent.constant.NodeConstant;
  10. import com.hotent.constant.TaskStatusConstant;
  11. import com.hotent.enterpriseDeclare.req.CostTaskPageReq;
  12. import com.hotent.enterpriseDeclare.req.CostTaskReviewPageReq;
  13. import com.hotent.project.manager.CostProjectApprovalManager;
  14. import com.hotent.project.manager.CostProjectTaskManager;
  15. import com.hotent.project.manager.CostProjectTaskNodeManager;
  16. import com.hotent.project.model.CostProjectApproval;
  17. import com.hotent.project.model.CostProjectTask;
  18. import com.hotent.project.model.CostProjectTaskNode;
  19. import com.hotent.sys.persistence.manager.DataDictManager;
  20. import com.hotent.sys.persistence.model.DataDict;
  21. import com.hotent.uc.api.model.IUser;
  22. import com.hotent.uc.util.ContextUtil;
  23. import io.swagger.annotations.Api;
  24. import io.swagger.annotations.ApiOperation;
  25. import org.springframework.beans.factory.annotation.Autowired;
  26. import org.springframework.web.bind.annotation.PostMapping;
  27. import org.springframework.web.bind.annotation.RequestBody;
  28. import org.springframework.web.bind.annotation.RequestMapping;
  29. import org.springframework.web.bind.annotation.RestController;
  30. import javax.annotation.Resource;
  31. import java.util.List;
  32. @Api(tags = "成本监审任务审核")
  33. @RestController
  34. @RequestMapping("/api/enterprise/reviewTask")
  35. @ApiGroup(group = {ApiGroupConsts.GROUP_COST})
  36. public class CostAuditReviewController {
  37. @Autowired
  38. private CostProjectTaskManager costProjectTaskManager;
  39. @Autowired
  40. private CostProjectApprovalManager costProjectApprovalManager;
  41. @Autowired
  42. private CostProjectTaskNodeManager costProjectTaskNodeManager;
  43. @Resource
  44. DataDictManager dataDictManager;
  45. /**
  46. * 分页查询待审核任务列表
  47. * @param req 分页查询请求参数
  48. * @return 待审核任务分页列表
  49. */
  50. @PostMapping(value = "/pageList")
  51. @ApiOperation(value = "分页查询待审核任务列表", httpMethod = "POST", notes = "分页查询待审核任务列表")
  52. public CommonResult<IPage<CostProjectTask>> pageList(@RequestBody CostTaskReviewPageReq req) {
  53. IPage<CostProjectTask> pageResult = pageListForReviewTask(req);
  54. return CommonResult.<IPage<CostProjectTask>>ok().value(pageResult);
  55. }
  56. /**
  57. * 审核任务分页查询的具体实现
  58. * @param req 分页查询请求参数
  59. * @return 分页结果
  60. */
  61. private IPage<CostProjectTask> pageListForReviewTask(CostTaskReviewPageReq req) {
  62. // 获取当前用户
  63. IUser currentUser = ContextUtil.getCurrentUser();
  64. String currentUserId = currentUser.getUserId();
  65. // 1. 先查询当前用户有权限的立项(负责人或项目组成员)
  66. LambdaQueryWrapper<CostProjectApproval> approvalQueryWrapper = new LambdaQueryWrapper<>();
  67. approvalQueryWrapper.eq(CostProjectApproval::getIsDeleted, "0");
  68. approvalQueryWrapper.and(wrapper -> wrapper
  69. .eq(CostProjectApproval::getLeaderId, currentUserId)
  70. .or(projectMembersWrapper -> {
  71. projectMembersWrapper.like(CostProjectApproval::getProjectMembers, currentUserId);
  72. })
  73. );
  74. List<CostProjectApproval> accessibleApprovals = costProjectApprovalManager.list(approvalQueryWrapper);
  75. // 如果没有权限的立项,返回空结果
  76. if (accessibleApprovals.isEmpty()) {
  77. Page<CostProjectTask> emptyPage = new Page<>(req.getPageNum(), req.getPageSize());
  78. return emptyPage;
  79. }
  80. // 提取有权限的立项ID列表
  81. List<String> accessibleProjectIds = accessibleApprovals.stream()
  82. .map(CostProjectApproval::getProjectId)
  83. .distinct()
  84. .collect(java.util.stream.Collectors.toList());
  85. // 2. 构建任务查询条件
  86. LambdaQueryWrapper<CostProjectTask> queryWrapper = new LambdaQueryWrapper<>();
  87. // 查询未删除的记录
  88. queryWrapper.eq(CostProjectTask::getIsDeleted, "0");
  89. // 查询根任务(pid为0)
  90. queryWrapper.eq(CostProjectTask::getPid, "0");
  91. // 只查询当前用户有权限的立项对应的任务
  92. queryWrapper.in(CostProjectTask::getProjectId, accessibleProjectIds);
  93. // 根据请求参数添加查询条件
  94. if (StringUtil.isNotEmpty(req.getProjectName())) {
  95. queryWrapper.like(CostProjectTask::getProjectName, req.getProjectName());
  96. }
  97. if (StringUtil.isNotEmpty(req.getStatus())) {
  98. queryWrapper.eq(CostProjectTask::getStatus, req.getStatus());
  99. }
  100. if (StringUtil.isNotEmpty(req.getCurrentNode())) {
  101. queryWrapper.eq(CostProjectTask::getCurrentNode, req.getCurrentNode());
  102. }
  103. // 按创建时间倒序排列
  104. queryWrapper.orderByDesc(CostProjectTask::getCreateTime);
  105. // 创建分页对象并执行查询
  106. Page<CostProjectTask> page = new Page<>(req.getPageNum(), req.getPageSize());
  107. IPage<CostProjectTask> result = costProjectTaskManager.page(page, queryWrapper);
  108. // 填充根任务的子任务列表和流程信息
  109. for (CostProjectTask rootTask : result.getRecords()) {
  110. // 查询子任务列表
  111. LambdaQueryWrapper<CostProjectTask> childQueryWrapper = new LambdaQueryWrapper<>();
  112. childQueryWrapper.eq(CostProjectTask::getPid, rootTask.getId())
  113. .eq(CostProjectTask::getIsDeleted, "0")
  114. .orderByAsc(CostProjectTask::getOrderNum);
  115. List<CostProjectTask> childTasks = costProjectTaskManager.list(childQueryWrapper);
  116. for (CostProjectTask childTask : childTasks) {
  117. childTask.setStatus(TaskStatusConstant.getStatusNameByCode(childTask.getStatus()));
  118. }
  119. rootTask.setChildTasks(childTasks);
  120. rootTask.setCurrentNodeName(NodeConstant.getNodeValueByKey(rootTask.getCurrentNode()));
  121. }
  122. return result;
  123. }
  124. @PostMapping(value = "/getProcessBtn")
  125. @ApiOperation(value = "获取流程按钮", httpMethod = "POST", notes = "获取流程按钮")
  126. public CommonResult<List<java.util.Map<String, Object>>> getProcessBtn(@RequestBody CostTaskPageReq req) {
  127. CostProjectTaskNode one = costProjectTaskNodeManager.getOne(
  128. new LambdaQueryWrapper<CostProjectTaskNode>()
  129. .eq(CostProjectTaskNode::getTaskId, req.getTaskId())
  130. );
  131. if (one == null || StringUtil.isEmpty(one.getStatus())) {
  132. return CommonResult.<List<java.util.Map<String, Object>>>ok().value(new java.util.ArrayList<>());
  133. }
  134. String status = one.getStatus();
  135. String[] split = status.split(",");
  136. List<java.util.Map<String, Object>> buttonList = new java.util.ArrayList<>();
  137. for (String s : split) {
  138. if (StringUtil.isNotEmpty(s.trim())) {
  139. String key = s.trim();
  140. DataDict byDictKey = dataDictManager.getByDictKey("1977549156280991744", key);
  141. java.util.Map<String, Object> buttonMap = new java.util.HashMap<>();
  142. buttonMap.put("key", key);
  143. if (byDictKey != null && StringUtil.isNotEmpty(byDictKey.getName())) {
  144. buttonMap.put("value", byDictKey.getName());
  145. } else {
  146. buttonMap.put("value", key);
  147. }
  148. buttonList.add(buttonMap);
  149. }
  150. }
  151. return CommonResult.<List<java.util.Map<String, Object>>>ok().value(buttonList);
  152. }
  153. }