Переглянути джерело

fit:财务数据表-财务表模板/流程通知调整

zzw 1 місяць тому
батько
коміт
a19e36254d
17 змінених файлів з 266 додано та 112 видалено
  1. 20 8
      assistMg/src/main/java/com/hotent/enterpriseDeclare/controller/CostAuditReviewController.java
  2. 0 10
      assistMg/src/main/java/com/hotent/enterpriseDeclare/controller/CostAuditTaskController.java
  3. 38 11
      assistMg/src/main/java/com/hotent/enterpriseDeclare/controller/opinion/CostAuditTaskInfoController.java
  4. 21 0
      assistMg/src/main/java/com/hotent/enterpriseDeclare/model/CostAuditPeriodRecord.java
  5. 2 0
      assistMg/src/main/java/com/hotent/enterpriseDeclare/req/CostTaskReviewPageReq.java
  6. 1 1
      assistMg/src/main/java/com/hotent/project/controller/CostProjectMemoController.java
  7. 1 0
      assistMg/src/main/java/com/hotent/project/manager/CostProjectTaskManager.java
  8. 0 7
      assistMg/src/main/java/com/hotent/project/manager/impl/CostProjectApprovalManagerImpl.java
  9. 0 10
      assistMg/src/main/java/com/hotent/project/manager/impl/CostProjectProccessManagerImpl.java
  10. 123 61
      assistMg/src/main/java/com/hotent/project/manager/impl/CostProjectTaskManagerImpl.java
  11. 5 1
      assistMg/src/main/java/com/hotent/project/manager/impl/CostProjectTaskMaterialManagerImpl.java
  12. 2 0
      assistMg/src/main/java/com/hotent/surveyinfo/dao/CostSurveyTemplateUploadDao.java
  13. 2 0
      assistMg/src/main/java/com/hotent/surveyinfo/manager/CostSurveyTemplateUploadManager.java
  14. 6 0
      assistMg/src/main/java/com/hotent/surveyinfo/manager/impl/CostSurveyTemplateUploadManagerImpl.java
  15. 10 0
      assistMg/src/main/java/com/hotent/surveyinfo/model/CostSurveyTemplateUpload.java
  16. 2 2
      assistMg/src/main/resources/mapper/CostAuditPeriodRecordMapper.xml
  17. 33 1
      assistMg/src/main/resources/mapper/CostSurveyTemplateUploadMapper.xml

+ 20 - 8
assistMg/src/main/java/com/hotent/enterpriseDeclare/controller/CostAuditReviewController.java

@@ -2,25 +2,18 @@ package com.hotent.enterpriseDeclare.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.hotent.base.annotation.ApiGroup;
 import com.hotent.base.constants.ApiGroupConsts;
 import com.hotent.base.model.CommonResult;
 import com.hotent.base.util.StringUtil;
-import com.hotent.constant.BaseConstant;
 import com.hotent.constant.NodeConstant;
-import com.hotent.constant.TaskStatusConstant;
 import com.hotent.enterpriseDeclare.req.CostTaskPageReq;
 import com.hotent.enterpriseDeclare.req.CostTaskReviewPageReq;
 import com.hotent.project.manager.*;
-import com.hotent.project.model.CostProjectApproval;
 import com.hotent.project.model.CostProjectTask;
 import com.hotent.project.model.CostProjectTaskNode;
-import com.hotent.project.model.CostProjectTaskProccess;
 import com.hotent.sys.persistence.manager.DataDictManager;
 import com.hotent.sys.persistence.model.DataDict;
-import com.hotent.uc.api.model.IUser;
-import com.hotent.uc.util.ContextUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -31,10 +24,11 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import java.util.List;
+import java.util.Map;
 
 @Api(tags = "成本监审任务审核")
 @RestController
-@RequestMapping("/api/enterprise/reviewTask")
+@RequestMapping("/api/enterprise/reviewTask/")
 @ApiGroup(group = {ApiGroupConsts.GROUP_COST})
 public class CostAuditReviewController {
 
@@ -140,6 +134,24 @@ public class CostAuditReviewController {
         return CommonResult.<String>ok().value(costProjectTaskManager.doProcessBtn(req));
     }
 
+    /**
+     * 统计在办和已结事项数量
+     */
+    @PostMapping(value = "/itemsCount")
+    @ApiOperation(value = "统计在办和已结事项数量", httpMethod = "POST", notes = "统计在办和已结事项数量")
+    public CommonResult<Map<String, Integer>> itemsCount(@RequestBody CostTaskReviewPageReq req) {
+        Integer pendingCount = costProjectTaskManager.countForReviewTask(req);
+
+        req.setCurrentNode(NodeConstant.guidang.getNodeKey());
+        Integer completedCount = costProjectTaskManager.countForReviewTask(req);
+
+        Map<String, Integer> result = new java.util.HashMap<>();
+        result.put("pendingCount", pendingCount);
+        result.put("completedCount", completedCount);
+
+        return CommonResult.<java.util.Map<String, Integer>>ok().value(result);
+    }
+
 
 
 

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

@@ -3,28 +3,18 @@ package com.hotent.enterpriseDeclare.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.hotent.base.annotation.ApiGroup;
 import com.hotent.base.constants.ApiGroupConsts;
 import com.hotent.base.model.CommonResult;
 import com.hotent.base.util.StringUtil;
 import com.hotent.baseInfo.manager.AuditedUnitManager;
-import com.hotent.baseInfo.manager.CostDistrictManager;
 import com.hotent.baseInfo.model.AuditedUnit;
-import com.hotent.baseInfo.model.CostDistrict;
-import com.hotent.constant.NodeConstant;
-import com.hotent.constant.TaskStatusConstant;
 import com.hotent.enterpriseDeclare.req.CostAuditTaskPageReq;
 import com.hotent.enterpriseDeclare.req.CostTaskPageReq;
 import com.hotent.project.manager.CostProjectApprovalManager;
 import com.hotent.project.manager.CostProjectTaskManager;
-import com.hotent.project.manager.CostProjectTaskNodeManager;
-import com.hotent.project.manager.CostProjectTaskProccessManager;
 import com.hotent.project.model.*;
 import com.hotent.project.resp.CostProjectApprovalDetailResp;
-import com.hotent.uc.api.model.IUser;
-import com.hotent.uc.manager.OrgManager;
-import com.hotent.uc.util.ContextUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;

+ 38 - 11
assistMg/src/main/java/com/hotent/enterpriseDeclare/controller/opinion/CostAuditTaskInfoController.java

@@ -1,6 +1,7 @@
 package com.hotent.enterpriseDeclare.controller.opinion;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.hotent.base.annotation.ApiGroup;
 import com.hotent.base.constants.ApiGroupConsts;
 import com.hotent.base.model.CommonResult;
@@ -9,6 +10,11 @@ import com.hotent.enterpriseDeclare.manager.CostAuditPeriodRecordManager;
 import com.hotent.enterpriseDeclare.manager.CostSurveyTemplateUploadDataManager;
 import com.hotent.enterpriseDeclare.model.CostAuditPeriodRecord;
 import com.hotent.enterpriseDeclare.model.CostSurveyTemplateUploadData;
+import com.hotent.project.manager.CostProjectApprovalManager;
+import com.hotent.project.manager.CostProjectTaskManager;
+import com.hotent.project.model.CostProjectApproval;
+import com.hotent.project.model.CostProjectTask;
+import com.hotent.project.resp.CostProjectApprovalDetailResp;
 import com.hotent.surveyinfo.dao.CostSurveyTemplateItemsDao;
 import com.hotent.surveyinfo.manager.CostSurveyTemplateHeadersManager;
 import com.hotent.surveyinfo.manager.CostSurveyTemplateManager;
@@ -26,10 +32,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Api(tags = "成本监审任务填报")
@@ -60,19 +63,23 @@ public class CostAuditTaskInfoController {
     @Autowired
     private CostSurveyTemplateManager costSurveyTemplateManager;
 
+    @Autowired
+    private CostProjectApprovalManager costProjectApprovalManager;
+
+    @Autowired
+    private CostProjectTaskManager costProjectTaskManager;
     /**
      * 企业报送-成本调查表-列表
-     * @param catalogId 监管目录ID
+     * @param taskId 任务ID
      * @return 上传记录列表(包含是否必填、是否上传等信息)
      * @throws Exception
      */
-    @GetMapping(value="/listUploadByCatalogId")
-    @ApiOperation(value="根据监管目录ID查询成本调查表模板上传记录列表", httpMethod = "GET", notes = "根据监管目录ID查询成本调查表模板上传记录列表,包含是否必填、是否上传等信息")
-    public CommonResult<List<CostSurveyTemplateUpload>> listUploadByCatalogId(
-            @ApiParam(name="catalogId", value="监管目录ID", required = true)
-            @RequestParam String catalogId) throws Exception {
+    @GetMapping(value="/listByTaskId")
+    public CommonResult<List<CostSurveyTemplateUpload>> listByTaskId(
+            @ApiParam(name="tas kId", value="任务ID", required = true)
+            @RequestParam String taskId) throws Exception {
 
-        List<CostSurveyTemplateUpload> uploadList = costSurveyTemplateUploadManager.listByCatalogId(catalogId);
+        List<CostSurveyTemplateUpload> uploadList = costSurveyTemplateUploadManager.listByTaskId(taskId);
 
         return CommonResult.<List<CostSurveyTemplateUpload>>ok().value(uploadList);
     }
@@ -252,6 +259,25 @@ public class CostAuditTaskInfoController {
         if (StringUtil.isEmpty(record.getAuditPeriod())) {
             return CommonResult.<CostAuditPeriodRecord>error().message("auditPeriod不能为空");
         }
+        // 校验
+
+        CostProjectTask task = costProjectTaskManager.getById(record.getTaskId());
+        CostProjectApproval approval = costProjectApprovalManager.getById(task.getProjectId());
+        if (approval == null) {
+            return CommonResult.<CostAuditPeriodRecord>error().message("项目不存在");
+        }
+        if(!Arrays.asList(approval.getAuditPeriod().split( ",")).contains(record.getAuditPeriod())){
+            return CommonResult.<CostAuditPeriodRecord>error().message("项目所属监审期间不存在");
+        }
+        // 如果已有的也不能添加
+        CostAuditPeriodRecord existRecord = costAuditPeriodRecordManager.getOne(
+                new QueryWrapper<CostAuditPeriodRecord>()
+                        .eq("task_id", record.getTaskId())
+                        .eq("audit_period", record.getAuditPeriod())
+        );
+        if (existRecord != null) {
+            return CommonResult.<CostAuditPeriodRecord>error().message("项目所属监审期间已存在");
+        }
 
         // 如果没有 uploadId,需要先创建主表
         String uploadId = record.getUploadId();
@@ -270,6 +296,7 @@ public class CostAuditTaskInfoController {
             upload.setIsRequired("1");
             upload.setIsDeleted("0");
             upload.setOrderNum(0);
+            upload.setTaskId(record.getTaskId());
             costSurveyTemplateUploadManager.save(upload);
             uploadId = upload.getId();
             record.setUploadId(uploadId);

+ 21 - 0
assistMg/src/main/java/com/hotent/enterpriseDeclare/model/CostAuditPeriodRecord.java

@@ -83,6 +83,27 @@ public class CostAuditPeriodRecord extends BaseModel<CostAuditPeriodRecord> {
     @JsonProperty("surveyTemplateId")
     private String surveyTemplateId;
 
+    private String taskId;
+
+    @TableField(exist = false)
+    private String projectId;
+
+    public String getProjectId() {
+        return projectId;
+    }
+
+    public void setProjectId(String projectId) {
+        this.projectId = projectId;
+    }
+
+    public String getTaskId() {
+        return taskId;
+    }
+
+    public void setTaskId(String taskId) {
+        this.taskId = taskId;
+    }
+
     public String getId() {
         return id;
     }

+ 2 - 0
assistMg/src/main/java/com/hotent/enterpriseDeclare/req/CostTaskReviewPageReq.java

@@ -23,5 +23,7 @@ public class CostTaskReviewPageReq extends PageReq {
     
     @ApiModelProperty(value = "是否归档 0否1是")
     private String isGd;
+
+    private String year;
 }
 

+ 1 - 1
assistMg/src/main/java/com/hotent/project/controller/CostProjectMemoController.java

@@ -53,7 +53,7 @@ public class CostProjectMemoController extends BaseController<CostProjectMemoMan
 		return crudService.pageQuery(req, costProjectMemoManager::pageList);
 	}*/
 
-        @PostMapping(value="/pageList")
+    @PostMapping(value="/pageList")
     @ApiOperation(value="备忘录列表")
     public PageList<CostProjectMemo> pageList(@RequestBody CostProjectMemoQueryReq req) throws Exception {
         return  costProjectMemoManager.pageList(req);

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

@@ -34,5 +34,6 @@ public interface CostProjectTaskManager extends BaseManager<CostProjectTask> {
 
 	String doProcessBtn(CostTaskPageReq req);
 
+	Integer countForReviewTask(CostTaskReviewPageReq req);
 
 }

+ 0 - 7
assistMg/src/main/java/com/hotent/project/manager/impl/CostProjectApprovalManagerImpl.java

@@ -1,7 +1,6 @@
 package com.hotent.project.manager.impl;
 
 import cn.hutool.core.util.ObjectUtil;
-import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -21,7 +20,6 @@ import com.hotent.project.dao.CostProjectApprovalDao;
 import com.hotent.base.manager.impl.BaseManagerImpl;
 import com.hotent.project.req.CostProjectApprovalPageReq;
 import com.hotent.project.req.CostProjectApprovalPublishReq;
-import com.hotent.project.resp.CostAnnualPlanDetailResp;
 import com.hotent.project.resp.CostProjectApprovalDetailResp;
 import com.hotent.surveyinfo.manager.*;
 import com.hotent.surveyinfo.model.*;
@@ -32,7 +30,6 @@ import com.hotent.uc.model.User;
 import com.hotent.uc.util.ContextUtil;
 import com.hotent.util.AreaCodeUtil;
 import com.hotent.util.CopyUtil;
-import dm.jdbc.convert.J2DB;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -42,11 +39,7 @@ import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
-import java.util.Map;
 import java.util.stream.Collectors;
-import javax.annotation.Resource;
-
-import com.hotent.base.util.BeanUtils;
 
 
 /**

+ 0 - 10
assistMg/src/main/java/com/hotent/project/manager/impl/CostProjectProccessManagerImpl.java

@@ -1,9 +1,7 @@
 package com.hotent.project.manager.impl;
 
 import cn.hutool.core.util.ObjectUtil;
-import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.hotent.constant.NodeConstant;
 import com.hotent.project.manager.*;
 import com.hotent.project.model.CostProjectProccess;
@@ -11,21 +9,16 @@ import com.hotent.project.dao.CostProjectProccessDao;
 import com.hotent.base.manager.impl.BaseManagerImpl;
 import com.hotent.project.model.CostProjectProccessNode;
 import com.hotent.project.model.CostProjectProccessNodeTemplete;
-import com.hotent.project.model.CostProjectProccessPersonnel;
-import com.hotent.project.req.CostProjectBasePageReq;
-import com.hotent.project.req.CostProjectProccessPersonnelReq;
 import com.hotent.project.req.CostProjectProcessNodeReq;
 import com.hotent.project.req.CostProjectProcessReq;
 import com.hotent.project.resp.CostProjectProccessNodeResp;
 import com.hotent.project.resp.CostProjectProccessResp;
 import com.hotent.uc.exception.BaseException;
 import com.hotent.uc.manager.UserManager;
-import com.hotent.uc.manager.impl.UcGroupUserManagerImpl;
 import com.hotent.uc.model.User;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -33,9 +26,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.function.Function;
 import java.util.stream.Collectors;
-import javax.annotation.Resource;
-
-import com.hotent.base.util.BeanUtils;
 
 
 /**

+ 123 - 61
assistMg/src/main/java/com/hotent/project/manager/impl/CostProjectTaskManagerImpl.java

@@ -1,15 +1,12 @@
 package com.hotent.project.manager.impl;
 
-import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.hotent.base.manager.impl.BaseManagerImpl;
 import com.hotent.base.util.AuthenticationUtil;
 import com.hotent.base.util.StringUtil;
 import com.hotent.baseInfo.req.CostTaskSearchReq;
-import com.hotent.constant.BaseConstant;
 import com.hotent.constant.NodeConstant;
 import com.hotent.constant.TaskStatusConstant;
 import com.hotent.enterpriseDeclare.req.CostTaskPageReq;
@@ -18,9 +15,11 @@ import com.hotent.project.dao.CostProjectTaskDao;
 import com.hotent.project.manager.*;
 import com.hotent.project.model.CostProjectApproval;
 import com.hotent.project.model.CostProjectTask;
+import com.hotent.project.model.CostProjectTaskMaterial;
 import com.hotent.project.model.CostProjectTaskPreliminaryOpinion;
-import com.hotent.project.model.CostProjectTaskProccess;
 import com.hotent.project.resp.CostProjectApprovalDetailResp;
+import com.hotent.surveyinfo.manager.CostSurveyTemplateUploadManager;
+import com.hotent.surveyinfo.model.CostSurveyTemplateUpload;
 import com.hotent.uc.api.model.IUser;
 import com.hotent.uc.manager.UserManager;
 import com.hotent.uc.model.User;
@@ -60,6 +59,16 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
     @Autowired
     private UserManager userService;
 
+    @Autowired
+    private CostProjectTaskMaterialManager costProjectTaskMaterialManager;
+
+    @Autowired
+    private CostSurveyTemplateUploadManager costSurveyTemplateUploadManager;
+
+    @Autowired
+    private CostProjectTaskLogManager costProjectTaskLogManager;
+
+
 
     @Override
     public List<CostProjectTask> getTaskList(CostTaskSearchReq req) throws Exception {
@@ -69,12 +78,12 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
         req.setProvinceCode(user.getProvinceCode());
         req.setCityCode(user.getCityCode());
         req.setCountyCode(user.getCountyCode());
-        List<CostProjectTask> list =baseMapper.getCostProjectTaskList(req.getDataScope()
-                ,req.getProvinceCode()
-                ,req.getCityCode()
-                ,req.getCountyCode()
-                ,req.getYear()
-                ,req.getProjectName());
+        List<CostProjectTask> list = baseMapper.getCostProjectTaskList(req.getDataScope()
+                , req.getProvinceCode()
+                , req.getCityCode()
+                , req.getCountyCode()
+                , req.getYear()
+                , req.getProjectName());
         /*LambdaQueryWrapper<CostProjectTask> queryWrapper = new LambdaQueryWrapper<>();
         if (ObjectUtil.isNotEmpty(req.getYear())) {
             queryWrapper.eq(CostProjectTask::getYear, req.getYear());
@@ -250,20 +259,35 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
         return result;
     }
 
-	@Override
-	@Transactional
-	public void createOrUpdate(CostProjectTask costProjectTask) {
-		//新建或更新
-		this.saveOrUpdate(costProjectTask);
-	}
+    @Override
+    @Transactional
+    public void createOrUpdate(CostProjectTask costProjectTask) {
+        //新建或更新
+        this.saveOrUpdate(costProjectTask);
+    }
 
-	@Override
+    @Override
     @Transactional
     public String saveTask(CostTaskPageReq costTaskPageReq) {
-        // 1.校验内容是否填写完毕!todo
-
-
-
+        // 1.校验内容是否填写完毕!t
+        List<CostProjectTaskMaterial> costProjectTaskMaterials = costProjectTaskMaterialManager.listByTaskId(costTaskPageReq.getTaskId());
+        boolean c = costProjectTaskMaterials.stream()
+                .filter(item ->"1".equals(item.getIsRequired()))
+                .allMatch(
+                item -> "1".equals(item.getIsUpload())
+        );
+        if (!c) {
+            throw new RuntimeException("报送资料必填文件未全部填写完成!");
+        }
+        List<CostSurveyTemplateUpload> costSurveyTemplateUploads = costSurveyTemplateUploadManager.listByTaskId(costTaskPageReq.getTaskId());
+        boolean d = costSurveyTemplateUploads.stream()
+                .filter(item ->"1".equals(item.getIsRequired()))
+                .allMatch(
+                        item -> "1".equals(item.getIsUpload())
+        );
+        if (!d) {
+            throw new RuntimeException("成本调查必填文件未全部填写完成!");
+        }
         // 2. 子流程状态改为审核中
         CostProjectTask task = this.getById(costTaskPageReq.getTaskId());
         task.setCurrentNode(NodeConstant.clcs.getNodeKey());
@@ -285,9 +309,9 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
 
         return "意见反馈完成";
 
-	}
+    }
 
-	@Override
+    @Override
     public String doProcessBtn(CostTaskPageReq req) {
 
         CostProjectTask task = costProjectTaskManager.getById(req.getTaskId());
@@ -299,7 +323,7 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
                 break;
             case "2":
                 // 中止/恢复
-                resultMessage = suspendTask(task,req);
+                resultMessage = suspendTask(task, req);
                 break;
             case "3":
                 // 通过
@@ -307,15 +331,15 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
                 break;
             case "4":
                 // 退回
-                resultMessage = returnToSubmit(task,req);
+                resultMessage = returnToSubmit(task, req);
                 break;
             case "6":
                 // 退回上一步
-                resultMessage = backPreToSubmit(task,req);
+                resultMessage = backPreToSubmit(task, req);
                 break;
             case "7":
                 // 扭转下一步
-                resultMessage = toNextSubmit(task,req);
+                resultMessage = toNextSubmit(task, req);
                 break;
             default:
                 return "未知的操作类型";
@@ -328,7 +352,7 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
      */
     private String completeTask(CostProjectTask task) {
         CostProjectTask nTask = costProjectTaskManager.getById(task.getId());
-        if (nTask == null){
+        if (nTask == null) {
             return "任务不存在";
         }
 
@@ -336,22 +360,45 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
                 new LambdaQueryWrapper<CostProjectTask>()
                         .eq(CostProjectTask::getPid, nTask.getId())
         );
-        boolean b = children.stream().noneMatch(child ->
-                child.getStatus().equals(TaskStatusConstant.AUDITING.getStatusCode()));
-        if (!b) {
-            throw new RuntimeException("子任务未全部办理,主任务无法办结");
+        if (children.isEmpty()) {
+            // 子任务 所有“是否必填”为“是”的资料“初审结果”均为“通过”.
+            List<CostProjectTaskMaterial> costProjectTaskMaterials = costProjectTaskMaterialManager.listByTaskId(nTask.getId());
+            boolean c = costProjectTaskMaterials.stream()
+                    .filter(item -> "1".equals(item.getIsRequired()))
+                    .allMatch(
+                    item -> "1".equals(item.getAuditedStatus())
+            );
+            if (!c) {
+                throw new RuntimeException("报送资料未全部通过!");
+            }
+            List<CostSurveyTemplateUpload> costSurveyTemplateUploads = costSurveyTemplateUploadManager.listByTaskId(nTask.getId());
+            boolean d = costSurveyTemplateUploads.stream()
+                    .filter(item -> "1".equals(item.getIsRequired()))
+                    .allMatch(
+                            item -> "1".equals(item.getAuditedStatus())
+            );
+            if (!d) {
+                throw new RuntimeException("成本调查表未全部通过!");
+            }
+        } else {
+            // 主任务
+            boolean b = children.stream().noneMatch(child ->
+                    child.getStatus().equals(TaskStatusConstant.AUDITING.getStatusCode()));
+            if (!b) {
+                throw new RuntimeException("子任务未全部办理,主任务无法办结");
+            }
         }
         task.setStatus(TaskStatusConstant.COMPLETED.getStatusCode());
         costProjectTaskManager.updateById(task);
 
         // 发送通知
-        String title = NodeConstant.getNodeValueByKey(task.getCurrentNode())+"通过";
+        String title = NodeConstant.getNodeValueByKey(task.getCurrentNode()) + "通过";
         // 操作人
-        String content = "["+  NodeConstant.getNodeValueByKey(task.getCurrentNode()) +"]"+AuthenticationUtil.getCurrentUserFullname() + "已通过" + task.getAuditedUnitName() + "的项目(" + task.getProjectName() +")";
+        String content = "[" + NodeConstant.getNodeValueByKey(task.getCurrentNode()) + "]" + AuthenticationUtil.getCurrentUserFullname() + "已通过" + task.getAuditedUnitName() + "的项目(" + task.getProjectName() + ")";
         String enterpriseId = task.getAuditedUnitId() == null ? "" : task.getAuditedUnitId();
         String noticeSource = "系统";
         String sendTarget = task.getCreateBy() == null ? "" : task.getCreateBy();
-        costNoticeManager.sendNotice(task.getProjectId(),task.getId(), "1", title, content, enterpriseId, noticeSource, sendTarget);
+        costNoticeManager.sendNotice(task.getProjectId(), task.getId(), "1", title, content, enterpriseId, noticeSource, sendTarget);
 
         return title;
     }
@@ -359,19 +406,19 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
     /**
      * 退回,填写原因 修改状态
      */
-    private String returnToSubmit(CostProjectTask task,CostTaskPageReq req) {
-        switch (req.getProcessNodeKey()){
+    private String returnToSubmit(CostProjectTask task, CostTaskPageReq req) {
+        switch (req.getProcessNodeKey()) {
             case "sdsh":
                 throw new RuntimeException("当前节点无法退回");
             default:
                 // 通知内容组装
-                String title = NodeConstant.getNodeValueByKey(task.getCurrentNode())+"退回";
+                String title = NodeConstant.getNodeValueByKey(task.getCurrentNode()) + "退回";
                 String enterpriseId = task.getAuditedUnitId() == null ? "" : task.getAuditedUnitId();
                 String noticeSource = "系统";
                 String sendTarget = task.getCreateBy() == null ? "" : task.getCreateBy();
 
-                String content = "["+  NodeConstant.getNodeValueByKey(task.getCurrentNode()) +"]"+AuthenticationUtil.getCurrentUserFullname() + "已退回" + task.getAuditedUnitName() + "的项目(" + task.getProjectName() +")";
-                costNoticeManager.sendNotice(task.getProjectId(),task.getId(),  "1", title, content, enterpriseId, noticeSource, sendTarget);
+                String content = "[" + NodeConstant.getNodeValueByKey(task.getCurrentNode()) + "]" + AuthenticationUtil.getCurrentUserFullname() + "已退回" + task.getAuditedUnitName() + "的项目(" + task.getProjectName() + ")";
+                costNoticeManager.sendNotice(task.getProjectId(), task.getId(), "1", title, content, enterpriseId, noticeSource, sendTarget);
 
                 // 更新任务的当前节点和状态
                 task.setStatus(TaskStatusConstant.NOT_PASSED.getStatusCode());
@@ -385,20 +432,20 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
     /**
      * 中止,填写原因 修改状态
      */
-    private String suspendTask(CostProjectTask task,CostTaskPageReq req) {
+    private String suspendTask(CostProjectTask task, CostTaskPageReq req) {
 
         // 更新任务状态为中止/恢复
-        String status = req.getStatus()==null ? TaskStatusConstant.SUSPENDED.getStatusCode() :TaskStatusConstant.AUDITING.getStatusCode();
+        String status = req.getStatus() == null ? TaskStatusConstant.SUSPENDED.getStatusCode() : TaskStatusConstant.AUDITING.getStatusCode();
         task.setStatus(status);
         costProjectTaskManager.updateById(task);
 
         // 通知内容组装
-        String title = NodeConstant.getNodeValueByKey(task.getCurrentNode())+TaskStatusConstant.getStatusNameByCode(status);
-        String content = "["+  NodeConstant.getNodeValueByKey(task.getCurrentNode()) +"]"+AuthenticationUtil.getCurrentUserFullname() + "已" + TaskStatusConstant.getStatusNameByCode(status) + task.getAuditedUnitName() + "的项目(" + task.getProjectName() +")";
+        String title = NodeConstant.getNodeValueByKey(task.getCurrentNode()) + TaskStatusConstant.getStatusNameByCode(status);
+        String content = "[" + NodeConstant.getNodeValueByKey(task.getCurrentNode()) + "]" + AuthenticationUtil.getCurrentUserFullname() + "已" + TaskStatusConstant.getStatusNameByCode(status) + task.getAuditedUnitName() + "的项目(" + task.getProjectName() + ")";
         String enterpriseId = task.getAuditedUnitId() == null ? "" : task.getAuditedUnitId();
         String noticeSource = "系统";
         String sendTarget = task.getCreateBy() == null ? "" : task.getCreateBy();
-        costNoticeManager.sendNotice(task.getProjectId(),task.getId(),  "1", title, content, enterpriseId, noticeSource, sendTarget);
+        costNoticeManager.sendNotice(task.getProjectId(), task.getId(), "1", title, content, enterpriseId, noticeSource, sendTarget);
 
         return title;
     }
@@ -431,10 +478,10 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
                         childTask.setStatus(TaskStatusConstant.BCCL.getStatusCode());
                         costProjectTaskManager.updateById(childTask);
                         // 通知内容组装(针对子任务对应的单位)
-                        String childContent = "["+  NodeConstant.getNodeValueByKey(task.getCurrentNode()) +"]"+AuthenticationUtil.getCurrentUserFullname() + "要求" + childTask.getAuditedUnitName() + "补充材料,项目(" + task.getProjectName() +")";
+                        String childContent = "[" + NodeConstant.getNodeValueByKey(task.getCurrentNode()) + "]" + AuthenticationUtil.getCurrentUserFullname() + "要求" + childTask.getAuditedUnitName() + "补充材料,项目(" + task.getProjectName() + ")";
                         String childEnterpriseId = childTask.getAuditedUnitId() == null ? "" : childTask.getAuditedUnitId();
                         String childSendTarget = childTask.getCreateBy() == null ? "" : childTask.getCreateBy();
-                        costNoticeManager.sendNotice(task.getProjectId(),task.getId(),  "1", title, childContent, childEnterpriseId, noticeSource, childSendTarget);
+                        costNoticeManager.sendNotice(task.getProjectId(), task.getId(), "1", title, childContent, childEnterpriseId, noticeSource, childSendTarget);
                         // 收集单位名称
                         if (StringUtil.isNotEmpty(childTask.getAuditedUnitName())) {
                             unitNames.add(childTask.getAuditedUnitName());
@@ -447,10 +494,10 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
             default:
                 task.setStatus(TaskStatusConstant.BCCL.getStatusCode());
                 costProjectTaskManager.updateById(task);
-                String content = "["+  NodeConstant.getNodeValueByKey(task.getCurrentNode()) +"]"+AuthenticationUtil.getCurrentUserFullname() + "要求" + task.getAuditedUnitName() + "补充材料,项目(" + task.getProjectName() +")";
+                String content = "[" + NodeConstant.getNodeValueByKey(task.getCurrentNode()) + "]" + AuthenticationUtil.getCurrentUserFullname() + "要求" + task.getAuditedUnitName() + "补充材料,项目(" + task.getProjectName() + ")";
                 String enterpriseId = task.getAuditedUnitId() == null ? "" : task.getAuditedUnitId();
                 String sendTarget = task.getCreateBy() == null ? "" : task.getCreateBy();
-                costNoticeManager.sendNotice(task.getProjectId(),task.getId(),  "1", title, content, enterpriseId, noticeSource, sendTarget);
+                costNoticeManager.sendNotice(task.getProjectId(), task.getId(), "1", title, content, enterpriseId, noticeSource, sendTarget);
                 return title;
         }
     }
@@ -458,9 +505,9 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
     /**
      * 退回上一步,填写原因 修改状态和节点
      */
-    private String backPreToSubmit(CostProjectTask task,CostTaskPageReq req) {
+    private String backPreToSubmit(CostProjectTask task, CostTaskPageReq req) {
         CostProjectTask nTask = costProjectTaskManager.getById(task.getId());
-        if (nTask == null || !nTask.getPid().equals("0") ){
+        if (nTask == null || !nTask.getPid().equals("0")) {
             throw new RuntimeException("当前节点无法退回");
         }
 
@@ -505,11 +552,11 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
         }
 
         // 通知内容组装
-        String title = NodeConstant.getNodeValueByKey(prevNodeStatus)+"退回上一步";
+        String title = NodeConstant.getNodeValueByKey(prevNodeStatus) + "退回上一步";
         String enterpriseId = task.getAuditedUnitId() == null ? "" : task.getAuditedUnitId();
         String noticeSource = "系统";
         String sendTarget = task.getCreateBy() == null ? "" : task.getCreateBy();
-        costNoticeManager.sendNotice(task.getProjectId(),task.getId(),  "1", title, req.getContent(), enterpriseId, noticeSource, sendTarget);
+        costNoticeManager.sendNotice(task.getProjectId(), task.getId(), "1", title, req.getContent(), enterpriseId, noticeSource, sendTarget);
 
         return title;
     }
@@ -517,12 +564,12 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
     /**
      * 扭转下一步,填写原因 修改状态和节点
      */
-    private String toNextSubmit(CostProjectTask task,CostTaskPageReq req) {
+    private String toNextSubmit(CostProjectTask task, CostTaskPageReq req) {
         CostProjectTask nTask = costProjectTaskManager.getById(task.getId());
-        if (nTask == null || !nTask.getPid().equals("0")){
+        if (nTask == null || !nTask.getPid().equals("0")) {
             throw new RuntimeException("当前节点无法扭转");
         }
-        if (!task.getStatus().equals(TaskStatusConstant.COMPLETED.getStatusCode())){
+        if (!task.getStatus().equals(TaskStatusConstant.COMPLETED.getStatusCode())) {
             throw new RuntimeException("请办结任务后,在进行扭转下一步");
         }
         // 子任务都办结才可以扭转
@@ -532,7 +579,7 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
         );
         boolean b = children.stream().noneMatch(
                 child -> child.getStatus().equals(TaskStatusConstant.AUDITING.getStatusCode()));
-        if (!b){
+        if (!b) {
             throw new RuntimeException("子任务未全部办结,主任务无法扭转");
         }
         // 将当前任务置为办结
@@ -542,8 +589,8 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
         nTask.setIsGd("0");
         costProjectTaskManager.updateById(task);
         // 如果所有子任务都办结,则将父子任务都扭转
-        String  status = "";
-        switch (nTask.getCurrentNode()){
+        String status = "";
+        switch (nextNodeStatus) {
             case "yjfk":
                 status = TaskStatusConstant.WAIT_FEEDBACK.getStatusCode();
                 break;
@@ -555,7 +602,7 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
                 break;
         }
         for (CostProjectTask child : children) {
-            if (!child.getStatus().equals(TaskStatusConstant.SUSPENDED.getStatusCode())){
+            if (!child.getStatus().equals(TaskStatusConstant.SUSPENDED.getStatusCode())) {
                 child.setStatus(status);
                 child.setCurrentNode(nextNodeStatus);
                 costProjectTaskManager.updateById(child);
@@ -563,7 +610,7 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
 
         }
         // 通知内容组装
-        String title = NodeConstant.getNodeValueByKey(task.getCurrentNode())+"扭转至下一步";
+        String title = NodeConstant.getNodeValueByKey(task.getCurrentNode()) + "扭转至下一步";
         String enterpriseId = task.getAuditedUnitId() == null ? "" : task.getAuditedUnitId();
         String noticeSource = "系统";
         String sendTarget = task.getCreateBy() == null ? "" : task.getCreateBy();
@@ -572,6 +619,21 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
         return title;
     }
 
+    @Override
+    public Integer countForReviewTask(CostTaskReviewPageReq req) {
 
+        LambdaQueryWrapper<CostProjectTask> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(CostProjectTask::getIsDeleted, "0")
+                .eq(CostProjectTask::getPid, "0")
+        ;
+
+        if (StringUtil.isNotEmpty(req.getCurrentNode())) {
+            queryWrapper.eq(CostProjectTask::getCurrentNode, req.getCurrentNode());
+        } else {
+            queryWrapper.ne(CostProjectTask::getCurrentNode, NodeConstant.guidang.getNodeKey());
+        }
+
+        return costProjectTaskManager.count(queryWrapper);
+    }
 
 }

+ 5 - 1
assistMg/src/main/java/com/hotent/project/manager/impl/CostProjectTaskMaterialManagerImpl.java

@@ -5,6 +5,7 @@ import java.util.List;
 
 import com.hotent.surveyinfo.manager.CostSurveyFdTemplateManager;
 import com.hotent.surveyinfo.manager.CostSurveyTemplateManager;
+import com.hotent.surveyinfo.model.CostSurveyFdTemplate;
 import com.hotent.sys.persistence.manager.DataDictManager;
 import com.hotent.sys.persistence.model.DataDict;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -78,7 +79,10 @@ public class CostProjectTaskMaterialManagerImpl extends BaseManagerImpl<CostProj
 				costProjectTaskMaterial.setInformationTypeName(byDictKey.getName());
 			}
 			if(costProjectTaskMaterial.getTemplateId() != null){
-				costProjectTaskMaterial.setTemplateType(costSurveyFdTemplateManager.getById(costProjectTaskMaterial.getTemplateId()).getTemplateType());
+				CostSurveyFdTemplate manager = costSurveyFdTemplateManager.getById(costProjectTaskMaterial.getTemplateId());
+				if (manager != null){
+					costProjectTaskMaterial.setTemplateType(manager.getTemplateType());
+				}
 			}
 
 		}

+ 2 - 0
assistMg/src/main/java/com/hotent/surveyinfo/dao/CostSurveyTemplateUploadDao.java

@@ -21,5 +21,7 @@ public interface CostSurveyTemplateUploadDao extends BaseMapper<CostSurveyTempla
      * @return 上传记录列表
      */
     List<CostSurveyTemplateUpload> selectListByCatalogId(@Param("catalogId") String catalogId);
+
+    List<CostSurveyTemplateUpload> selectListByTaskId(@Param("taskId")String taskId);
 }
 

+ 2 - 0
assistMg/src/main/java/com/hotent/surveyinfo/manager/CostSurveyTemplateUploadManager.java

@@ -20,5 +20,7 @@ public interface CostSurveyTemplateUploadManager extends BaseManager<CostSurveyT
      * @return 上传记录列表
      */
     List<CostSurveyTemplateUpload> listByCatalogId(String catalogId);
+
+    List<CostSurveyTemplateUpload> listByTaskId(String taskId);
 }
 

+ 6 - 0
assistMg/src/main/java/com/hotent/surveyinfo/manager/impl/CostSurveyTemplateUploadManagerImpl.java

@@ -7,6 +7,7 @@ import com.hotent.base.manager.impl.BaseManagerImpl;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -23,5 +24,10 @@ public class CostSurveyTemplateUploadManagerImpl extends BaseManagerImpl<CostSur
     public List<CostSurveyTemplateUpload> listByCatalogId(String catalogId) {
         return baseMapper.selectListByCatalogId(catalogId);
     }
+
+    @Override
+    public List<CostSurveyTemplateUpload> listByTaskId(String taskId) {
+        return baseMapper.selectListByTaskId(taskId);
+    }
 }
 

+ 10 - 0
assistMg/src/main/java/com/hotent/surveyinfo/model/CostSurveyTemplateUpload.java

@@ -27,6 +27,8 @@ public class CostSurveyTemplateUpload extends BaseModel<CostSurveyTemplateUpload
     @TableId(value = "id", type = IdType.ASSIGN_ID)
     @JsonProperty("id")
     private String id;
+
+    private String taskId;
     
     @ApiModelProperty(value = "监管目录ID")
     @TableField("catalog_id")
@@ -271,6 +273,14 @@ public class CostSurveyTemplateUpload extends BaseModel<CostSurveyTemplateUpload
         this.dataType = dataType;
     }
 
+    public String getTaskId() {
+        return taskId;
+    }
+
+    public void setTaskId(String taskId) {
+        this.taskId = taskId;
+    }
+
     @Override
     protected Serializable pkVal() {
         return this.id;

+ 2 - 2
assistMg/src/main/resources/mapper/CostAuditPeriodRecordMapper.xml

@@ -48,8 +48,8 @@
 
     <!-- 根据上传记录ID和企业ID查询记录列表 -->
     <select id="selectByUploadIdAndAuditedUnitId" resultMap="BaseResultMap">
-        SELECT 
-            <include refid="Base_Column_List"/>
+        SELECT
+            id, upload_id, audited_unit_id, audit_period, reporting_time, is_deleted, create_time, create_by, update_time, update_by
         FROM 
             cost_audit_period_record
         WHERE 

+ 33 - 1
assistMg/src/main/resources/mapper/CostSurveyTemplateUploadMapper.xml

@@ -22,12 +22,13 @@
         <result column="survey_template_name" property="surveyTemplateName" />
         <result column="audited_status" property="auditedStatus" />
         <result column="template_type" property="templateType" />
+        <result column="task_id" property="taskId" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
         id, catalog_id, survey_template_id, is_required, is_upload, upload_time, upload_by, 
-        file_url, order_num, is_deleted, create_time, create_by, update_time, update_by,audited_status
+        file_url, order_num, is_deleted, create_time, create_by, update_time, update_by,audited_status,task_id
     </sql>
 
     <!-- 根据目录ID查询上传记录列表(关联模板信息) -->
@@ -87,5 +88,36 @@
         where 
             id = #{id}
     </select>
+    <select id="selectListByTaskId" resultType="com.hotent.surveyinfo.model.CostSurveyTemplateUpload">
+        SELECT
+            COALESCE(u.id, '') as id,
+            u.task_id,
+            t.catalog_id,
+            t.survey_template_id,
+            COALESCE(u.is_required, '1') as is_required,
+            COALESCE(u.is_upload, '0') as is_upload,
+            u.upload_time,
+            u.upload_by,
+            u.file_url,
+            COALESCE(u.order_num, 0) as order_num,
+            COALESCE(u.is_deleted, '0') as is_deleted,
+            COALESCE(u.create_time, t.create_time) as create_time,
+            COALESCE(u.create_by, t.create_by) as create_by,
+            u.update_time,
+            u.update_by,
+            t.survey_template_name,
+            t.template_type,
+            '模版定制' as data_type,
+            u.audited_status
+        FROM
+            cost_survey_template t
+                LEFT JOIN
+            cost_survey_template_upload u ON t.survey_template_id = u.survey_template_id
+        WHERE
+            u.task_id = #{taskId}
+            AND t.status = '0'
+        ORDER BY
+            COALESCE(u.order_num, 0) ASC, t.create_time ASC
+    </select>
 </mapper>