Bläddra i källkod

Merge branch 'master' of http://116.204.116.5:3000/zzw/cbjs-mvue-master

fengzhenzhong 1 månad sedan
förälder
incheckning
a5ad6d3a8e

+ 47 - 0
assistMg/src/main/java/com/hotent/enterpriseDeclare/controller/CostAuditTaskController.java

@@ -32,6 +32,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Api(tags = "成本监审任务填报")
 @RestController
@@ -81,4 +82,50 @@ public class CostAuditTaskController {
     public CommonResult<String> yjsave(@RequestBody CostProjectTaskPreliminaryOpinion costProjectTaskPreliminaryOpinion) throws Exception{
         return CommonResult.<String>ok().value(costProjectTaskManager.saveYjTask(costProjectTaskPreliminaryOpinion));
     }
+
+    /**
+     * 获取子任务的所有监审单位
+     * @param taskId 主任务ID
+     * @return 监审单位列表
+     */
+    @GetMapping(value = "/getChildTaskUnits")
+    @ApiOperation(value = "获取子任务的所有监审单位", httpMethod = "GET", notes = "根据主任务ID查询所有子任务,获取子任务的监审单位字段,然后查询单位表返回所有单位")
+    public CommonResult<List<AuditedUnit>> getChildTaskUnits(
+            @ApiParam(name = "taskId", value = "主任务ID", required = true)
+            @RequestParam(required = true) String taskId) {
+        
+        // 1. 查询该主任务下的所有子任务(pid等于主任务ID)
+        LambdaQueryWrapper<CostProjectTask> taskQueryWrapper = new LambdaQueryWrapper<>();
+        taskQueryWrapper.eq(CostProjectTask::getPid, taskId)
+                .eq(CostProjectTask::getIsDeleted, "0")
+                .isNotNull(CostProjectTask::getAuditedUnitId)
+                .ne(CostProjectTask::getAuditedUnitId, "");
+        
+        List<CostProjectTask> childTasks = costProjectTaskManager.list(taskQueryWrapper);
+        
+        // 如果没有子任务,返回空列表
+        if (childTasks == null || childTasks.isEmpty()) {
+            return CommonResult.<List<AuditedUnit>>ok().value(java.util.Collections.emptyList());
+        }
+        
+        // 2. 提取所有不重复的监审单位ID
+        List<String> auditedUnitIds = childTasks.stream()
+                .map(CostProjectTask::getAuditedUnitId)
+                .filter(StringUtil::isNotEmpty)
+                .distinct()
+                .collect(Collectors.toList());
+        
+        if (auditedUnitIds.isEmpty()) {
+            return CommonResult.<List<AuditedUnit>>ok().value(java.util.Collections.emptyList());
+        }
+        
+        // 3. 根据单位ID列表查询单位表
+        LambdaQueryWrapper<AuditedUnit> unitQueryWrapper = new LambdaQueryWrapper<>();
+        unitQueryWrapper.in(AuditedUnit::getUnitId, auditedUnitIds)
+                .eq(AuditedUnit::getIsDeleted, "0");
+        
+        List<AuditedUnit> units = auditedUnitManager.list(unitQueryWrapper);
+        
+        return CommonResult.<List<AuditedUnit>>ok().value(units);
+    }
 }

+ 9 - 0
assistMg/src/main/java/com/hotent/enterpriseDeclare/controller/material/CostProjectTaskEvidenceController.java

@@ -54,6 +54,15 @@ public class CostProjectTaskEvidenceController {
         return CommonResult.<String>ok().value("操作成功");
     }
 
+    /**
+     * 更新资料登记
+     */
+    @PostMapping(value = "/update")
+    @ApiOperation(value = "更新资料登记", httpMethod = "POST", notes = "更新资料登记")
+    public CommonResult<String> update(@RequestBody CostProjectTaskEvidence evidence) {
+        costProjectTaskEvidenceManager.createOrUpdate(evidence);
+        return CommonResult.<String>ok().value("更新成功");
+    }
 
     /**
      * 删除资料登记

+ 3 - 0
assistMg/src/main/java/com/hotent/enterpriseDeclare/req/CostTaskPageReq.java

@@ -24,4 +24,7 @@ public class CostTaskPageReq {
 
     @ApiModelProperty(value = "意见")
     private String content;
+
+    @ApiModelProperty(value = "子任务ID(集体审议节点补充材料时,指定具体单位对应的子任务)")
+    private String childTaskId;
 }

+ 42 - 11
assistMg/src/main/java/com/hotent/project/manager/impl/CostProjectTaskManagerImpl.java

@@ -437,19 +437,50 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
      * 补充材料,发送通知+修改任务状态
      */
     private String supplementMaterial(CostProjectTask task, CostTaskPageReq req) {
-
-        // 更新任务状态为
-        task.setStatus(TaskStatusConstant.BCCL.getStatusCode());
-        costProjectTaskManager.updateById(task);
-
-        // 通知内容组装
-        String title = NodeConstant.getNodeValueByKey(task.getCurrentNode())+TaskStatusConstant.BCCL.getStatusName();
-        String enterpriseId = task.getAuditedUnitId() == null ? "" : task.getAuditedUnitId();
+        String currentNode = task.getCurrentNode();
+        String title = NodeConstant.getNodeValueByKey(currentNode) + TaskStatusConstant.BCCL.getStatusName();
         String noticeSource = "系统";
-        String sendTarget = task.getCreateBy() == null ? "" : task.getCreateBy();
-        costNoticeManager.sendNotice(task.getProjectId(), "1", title, req.getContent(), enterpriseId, noticeSource, sendTarget);
 
-        return title;
+        switch (currentNode) {
+            // 集体审议节点:支持指定多个子任务补充材料
+            case "jtsy":
+                if (StringUtil.isNotEmpty(req.getChildTaskId())) {
+                    String[] childTaskIdArray = req.getChildTaskId().split(",");
+                    List<String> unitNames = new java.util.ArrayList<>();
+
+                    for (String childTaskId : childTaskIdArray) {
+                        CostProjectTask childTask = costProjectTaskManager.getById(childTaskId);
+                        if (childTask == null) {
+                            throw new RuntimeException("子任务不存在:" + childTaskId);
+                        }
+                        // 验证子任务是否属于当前主任务
+                        if (!childTask.getPid().equals(task.getId())) {
+                            throw new RuntimeException("子任务不属于当前主任务:" + childTaskId);
+                        }
+                        // 更新子任务状态为补充材料
+                        childTask.setStatus(TaskStatusConstant.BCCL.getStatusCode());
+                        costProjectTaskManager.updateById(childTask);
+                        // 通知内容组装(针对子任务对应的单位)
+                        String childEnterpriseId = childTask.getAuditedUnitId() == null ? "" : childTask.getAuditedUnitId();
+                        String childSendTarget = childTask.getCreateBy() == null ? "" : childTask.getCreateBy();
+                        costNoticeManager.sendNotice(task.getProjectId(), "1", title, req.getContent(), childEnterpriseId, noticeSource, childSendTarget);
+                        // 收集单位名称
+                        if (StringUtil.isNotEmpty(childTask.getAuditedUnitName())) {
+                            unitNames.add(childTask.getAuditedUnitName());
+                        }
+                    }
+                    // 返回结果,包含所有单位名称
+                    String unitNamesStr = unitNames.isEmpty() ? "" : String.join("、", unitNames);
+                    return title + "(单位:" + unitNamesStr + ")";
+                }
+            default:
+                task.setStatus(TaskStatusConstant.BCCL.getStatusCode());
+                costProjectTaskManager.updateById(task);
+                String enterpriseId = task.getAuditedUnitId() == null ? "" : task.getAuditedUnitId();
+                String sendTarget = task.getCreateBy() == null ? "" : task.getCreateBy();
+                costNoticeManager.sendNotice(task.getProjectId(), "1", title, req.getContent(), enterpriseId, noticeSource, sendTarget);
+                return title;
+        }
     }
 
     /**

+ 45 - 34
assistMg/src/main/java/com/hotent/project/manager/impl/CostProjectTaskMaterialSummaryManagerImpl.java

@@ -211,45 +211,56 @@ public class CostProjectTaskMaterialSummaryManagerImpl extends BaseManagerImpl<C
         }
 
         String taskId = current.getTaskId();
-        Integer currentOrderNum = current.getMaterialOrderNum() != null ? current.getMaterialOrderNum() : 0;
 
-        // 查询同任务下的其他记录
+        // 查询同任务下的所有记录,按序号和ID排序
         LambdaQueryWrapper<CostProjectTaskMaterialSummary> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(CostProjectTaskMaterialSummary::getTaskId, taskId)
-                .ne(CostProjectTaskMaterialSummary::getId, id)
-                .orderByAsc(CostProjectTaskMaterialSummary::getMaterialOrderNum);
-
-        List<CostProjectTaskMaterialSummary> otherList = this.list(queryWrapper);
-
-        if ("down".equals(direction)) {
-            // 下移:找到比当前orderNum大的最小orderNum的记录,交换
-            CostProjectTaskMaterialSummary next = otherList.stream()
-                    .filter(s -> s.getMaterialOrderNum() != null && s.getMaterialOrderNum() > currentOrderNum)
-                    .min(java.util.Comparator.comparing(CostProjectTaskMaterialSummary::getMaterialOrderNum))
-                    .orElse(null);
-
-            if (next != null) {
-                Integer temp = current.getMaterialOrderNum();
-                current.setMaterialOrderNum(next.getMaterialOrderNum());
-                next.setMaterialOrderNum(temp);
-                this.updateById(current);
-                this.updateById(next);
-            }
-        } else if ("up".equals(direction)) {
-            // 上移:找到比当前orderNum小的最大orderNum的记录,交换
-            CostProjectTaskMaterialSummary prev = otherList.stream()
-                    .filter(s -> s.getMaterialOrderNum() != null && s.getMaterialOrderNum() < currentOrderNum)
-                    .max(java.util.Comparator.comparing(CostProjectTaskMaterialSummary::getMaterialOrderNum))
-                    .orElse(null);
-
-            if (prev != null) {
-                Integer temp = current.getMaterialOrderNum();
-                current.setMaterialOrderNum(prev.getMaterialOrderNum());
-                prev.setMaterialOrderNum(temp);
-                this.updateById(current);
-                this.updateById(prev);
+                .orderByAsc(CostProjectTaskMaterialSummary::getMaterialOrderNum)
+                .orderByAsc(CostProjectTaskMaterialSummary::getId);
+        List<CostProjectTaskMaterialSummary> list = this.list(queryWrapper);
+
+        // 找到当前位置
+        int currentIndex = -1;
+        for (int i = 0; i < list.size(); i++) {
+            if (list.get(i).getId().equals(id)) {
+                currentIndex = i;
+                break;
             }
         }
+        if (currentIndex == -1) {
+            return;
+        }
+
+        // 获取最大序号作为临时序号
+        Integer tempOrderNum = list.stream()
+                .filter(s -> s.getMaterialOrderNum() != null)
+                .map(CostProjectTaskMaterialSummary::getMaterialOrderNum)
+                .max(Integer::compareTo)
+                .orElse(0) + 10000;
+
+        if ("down".equals(direction) && currentIndex < list.size() - 1) {
+            // 下移:与下一个交换
+            CostProjectTaskMaterialSummary next = list.get(currentIndex + 1);
+            Integer currentOrder = current.getMaterialOrderNum();
+            Integer nextOrder = next.getMaterialOrderNum();
+            current.setMaterialOrderNum(tempOrderNum);
+            this.updateById(current);
+            next.setMaterialOrderNum(currentOrder);
+            this.updateById(next);
+            current.setMaterialOrderNum(nextOrder);
+            this.updateById(current);
+        } else if ("up".equals(direction) && currentIndex > 0) {
+            // 上移:与上一个交换
+            CostProjectTaskMaterialSummary prev = list.get(currentIndex - 1);
+            Integer currentOrder = current.getMaterialOrderNum();
+            Integer prevOrder = prev.getMaterialOrderNum();
+            current.setMaterialOrderNum(tempOrderNum);
+            this.updateById(current);
+            prev.setMaterialOrderNum(currentOrder);
+            this.updateById(prev);
+            current.setMaterialOrderNum(prevOrder);
+            this.updateById(current);
+        }
     }
 }
 

+ 0 - 1
assistMg/src/main/java/com/hotent/project/manager/impl/CostProjectTaskPreliminaryOpinionManagerImpl.java

@@ -29,7 +29,6 @@ public class CostProjectTaskPreliminaryOpinionManagerImpl extends BaseManagerImp
     public CostProjectTaskPreliminaryOpinion getByTaskId(String taskId) {
         LambdaQueryWrapper<CostProjectTaskPreliminaryOpinion> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(CostProjectTaskPreliminaryOpinion::getTaskId, taskId)
-                   .eq(CostProjectTaskPreliminaryOpinion::getIsDeleted, BaseConstant.NORMAL_STATUS)
                    .last("LIMIT 1");
 
         return this.getOne(queryWrapper);