赵越越 преди 1 месец
родител
ревизия
e8505a99a7
променени са 16 файла, в които са добавени 632 реда и са изтрити 5 реда
  1. 7 0
      assistMg/src/main/java/com/hotent/baseInfo/vo/TaskTreeVo.java
  2. 68 0
      assistMg/src/main/java/com/hotent/project/controller/CostProjectSuperviseController.java
  3. 15 0
      assistMg/src/main/java/com/hotent/project/controller/CostProjectSuperviseDataController.java
  4. 76 4
      assistMg/src/main/java/com/hotent/project/controller/CostProjectTaskController.java
  5. 17 0
      assistMg/src/main/java/com/hotent/project/dao/CostProjectSuperviseDao.java
  6. 17 0
      assistMg/src/main/java/com/hotent/project/dao/CostProjectSuperviseDataDao.java
  7. 16 0
      assistMg/src/main/java/com/hotent/project/manager/CostProjectSuperviseDataManager.java
  8. 27 0
      assistMg/src/main/java/com/hotent/project/manager/CostProjectSuperviseManager.java
  9. 1 1
      assistMg/src/main/java/com/hotent/project/manager/impl/CostProjectDocumentManagerImpl.java
  10. 39 0
      assistMg/src/main/java/com/hotent/project/manager/impl/CostProjectSuperviseDataManagerImpl.java
  11. 147 0
      assistMg/src/main/java/com/hotent/project/manager/impl/CostProjectSuperviseManagerImpl.java
  12. 78 0
      assistMg/src/main/java/com/hotent/project/model/CostProjectSupervise.java
  13. 72 0
      assistMg/src/main/java/com/hotent/project/model/CostProjectSuperviseData.java
  14. 23 0
      assistMg/src/main/java/com/hotent/project/req/CostProjectSuperviseReq.java
  15. 27 0
      assistMg/src/main/java/com/hotent/project/vo/CostProjectSuperviseDataVo.java
  16. 2 0
      base/src/main/resources/config/application.yml

+ 7 - 0
assistMg/src/main/java/com/hotent/baseInfo/vo/TaskTreeVo.java

@@ -31,6 +31,9 @@ public class TaskTreeVo   extends SumTree {
     @ApiModelProperty(value = "父id")
     @JsonProperty("pid")
     private String pid;
+    @ApiModelProperty(value = "督办id")
+    @JsonProperty("superviseId")
+    private String superviseId;
 
     @ApiModelProperty(value = "成本监审项目名称")
     @JsonProperty("projectName")
@@ -59,6 +62,10 @@ public class TaskTreeVo   extends SumTree {
     @JsonProperty("status")
     private String status;
 
+    @ApiModelProperty(value = "状态  0:在办、1:办结")
+    @JsonProperty("superviseStatus")
+    private String superviseStatus;
+
     @ApiModelProperty(value = "序号")
     @JsonProperty("orderNum")
     private Integer orderNum;

+ 68 - 0
assistMg/src/main/java/com/hotent/project/controller/CostProjectSuperviseController.java

@@ -0,0 +1,68 @@
+package com.hotent.project.controller;
+
+import com.hotent.base.annotation.ApiGroup;
+import com.hotent.base.constants.ApiGroupConsts;
+import com.hotent.base.model.CommonResult;
+import com.hotent.baseInfo.vo.CatalogTreeVo;
+import com.hotent.project.manager.CostProjectSuperviseManager;
+import com.hotent.project.model.CostProjectSupervise;
+import com.hotent.project.model.CostProjectSuperviseData;
+import com.hotent.project.req.CostProjectSuperviseReq;
+import com.hotent.project.vo.CostProjectSuperviseDataVo;
+import com.hotent.util.treeutil.SumTree;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ *@author: zhao yue yue
+ *@create: 2025-11-18 14:45
+ */
+
+@RestController
+@Api(tags = "项目督办")
+@RequestMapping("/cost/project/supervise/v1")
+@ApiGroup(group = {ApiGroupConsts.GROUP_PROJECT})
+public class CostProjectSuperviseController {
+
+    @Autowired
+    private CostProjectSuperviseManager costProjectSuperviseManager;
+
+
+
+    @ApiOperation("创建(新增)督办任务")
+    @RequestMapping(value = "/save", method = { RequestMethod.POST})
+    public CommonResult<String> save (@RequestBody CostProjectSuperviseReq param) throws Exception {
+        String msg= costProjectSuperviseManager.add(param);
+        return CommonResult.<String>ok().message(msg);
+    }
+
+    @ApiOperation("修改(上报)督办内容")
+    @RequestMapping(value = "/modify", method = { RequestMethod.POST})
+    public CommonResult<String> modify (@RequestBody CostProjectSuperviseReq param) throws Exception {
+        String msg= costProjectSuperviseManager.modify(param);
+        return CommonResult.<String>ok().message(msg);
+    }
+
+
+    @ApiOperation("(删除)停止督办")
+    @RequestMapping(value = "/delete", method = { RequestMethod.POST})
+    public CommonResult<String> delete (@RequestBody CostProjectSuperviseReq param) throws Exception {
+        String msg= costProjectSuperviseManager.delete(param);
+        return CommonResult.<String>ok().message(msg);
+    }
+
+    @ApiOperation("查询督办报告")
+    @RequestMapping(value = "/getReportList", method = { RequestMethod.POST})
+    public CommonResult<List<CostProjectSuperviseDataVo>> getReportList (@RequestBody CostProjectSuperviseReq param) throws Exception {
+        List<CostProjectSuperviseDataVo> reportList = costProjectSuperviseManager.getReportList(param);
+        return CommonResult.<List<CostProjectSuperviseDataVo>>ok().value(reportList);
+    }
+
+}

+ 15 - 0
assistMg/src/main/java/com/hotent/project/controller/CostProjectSuperviseDataController.java

@@ -0,0 +1,15 @@
+package com.hotent.project.controller;
+
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ *@author: zhao yue yue
+ *@create: 2025-11-18 14:45
+ */
+@RestController
+@Api(tags = "项目督察")
+@RequestMapping("/cost/project/supervise/data/v1")
+public class CostProjectSuperviseDataController {
+}

+ 76 - 4
assistMg/src/main/java/com/hotent/project/controller/CostProjectTaskController.java

@@ -1,6 +1,7 @@
 package com.hotent.project.controller;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.hotent.base.annotation.ApiGroup;
 import com.hotent.base.constants.ApiGroupConsts;
@@ -14,10 +15,17 @@ import com.hotent.common.CrudService;
 import com.hotent.constant.NodeConstant;
 import com.hotent.constant.TaskStatusConstant;
 import com.hotent.enterpriseDeclare.req.CostTaskReviewPageReq;
+import com.hotent.project.manager.CostProjectSuperviseManager;
+import com.hotent.project.manager.CostProjectTaskNodeManager;
+import com.hotent.project.manager.CostProjectTaskProccessManager;
+import com.hotent.project.model.CostProjectSupervise;
+import com.hotent.project.model.CostProjectTaskNode;
+import com.hotent.project.model.CostProjectTaskProccess;
 import com.hotent.util.JsonUtil;
 import com.hotent.util.treeutil.SumTree;
 import com.hotent.util.treeutil.newtreeutil.TreeDotUtils;
 import io.swagger.annotations.Api;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -32,6 +40,7 @@ import com.hotent.base.controller.BaseController;
 import com.hotent.project.model.CostProjectTask;
 import com.hotent.project.manager.CostProjectTaskManager;
 
+import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -49,7 +58,13 @@ import java.util.stream.Collectors;
 @ApiGroup(group = {ApiGroupConsts.GROUP_COST})
 public class CostProjectTaskController extends BaseController<CostProjectTaskManager, CostProjectTask> {
 
+    @Autowired
+    private CostProjectSuperviseManager costProjectSuperviseManager;
+    @Autowired
+    private CostProjectTaskNodeManager costProjectTaskNodeManager;
 
+    @Autowired
+    private CostProjectTaskProccessManager costProjectTaskProccessManager;
     /**
      * 根据id获取项目任务表数据详情
      *
@@ -138,16 +153,73 @@ public class CostProjectTaskController extends BaseController<CostProjectTaskMan
     public CommonResult<List<SumTree<TaskTreeVo>>> supervisorList(@RequestBody CostTaskSearchReq req) throws Exception {
         List<CostProjectTask> taskList = baseService.getTaskList(req);
         List<TaskTreeVo> allList = JsonUtil.getJsonToList(taskList, TaskTreeVo.class);
+        List<String> projectIds = allList.stream().map(TaskTreeVo::getProjectId).distinct().collect(Collectors.toList());
+        List<CostProjectSupervise> supervises = costProjectSuperviseManager.getListByprojectIds(projectIds);
         for (int i = 0; i < taskList.size(); i++) {
             CostProjectTask task = taskList.get(i);
-            allList.get(i).setId(task.getId());
-            allList.get(i).setParentId(task.getPid());
-            // 设置预警状态
-            allList.get(i).setWarningStatus(task.getWarningStatus());
+            TaskTreeVo taskTreeVo = allList.get(i);
+            taskTreeVo.setId(task.getId());
+            taskTreeVo.setParentId(task.getPid());
+            taskTreeVo.setWarningStatus(calculateWarningStatus(task));
+            CostProjectSupervise projectSupervise = supervises.stream().filter(s -> s.getProjectId().equals(taskTreeVo.getProjectId())&& StringUtil.isNotEmpty(taskTreeVo.getAuditType()) && taskTreeVo.getAuditType().equals("1")).findAny().orElse(null);
+            if (projectSupervise!=null) {
+                taskTreeVo.setSuperviseStatus(String.valueOf(projectSupervise.getStatus()));
+                taskTreeVo.setSuperviseId(projectSupervise.getId());
+            }
         }
         List<SumTree<TaskTreeVo>> trees = TreeDotUtils.convertListToTreeDotFilter(allList);
         CommonResult<List<SumTree<TaskTreeVo>>> result = CommonResult.ok();
         result.setValue(trees);
         return result;
     }
+
+
+
+    /**
+     * 计算任务预警状态
+     * @param task 任务对象
+     * @return 预警状态:green-绿色预警(在办理期限内) yellow-黄色预警(超过环节期限但没超过流程期限) red-红色预警(超过流程期限)
+     */
+    private String calculateWarningStatus(CostProjectTask task) {
+        // 获取任务对应的流程信息
+        CostProjectTaskProccess process = costProjectTaskProccessManager.getOne(
+                new LambdaQueryWrapper<CostProjectTaskProccess>()
+                        .eq(CostProjectTaskProccess::getTaskId, task.getId())
+        );
+
+        if (process == null) {
+            return "green"; // 默认绿色预警
+        }
+
+        // 获取当前环节的节点信息
+        CostProjectTaskNode currentNode = costProjectTaskNodeManager.getOne(
+                new LambdaQueryWrapper<CostProjectTaskNode>()
+                        .eq(CostProjectTaskNode::getTaskId, task.getId())
+                        .eq(CostProjectTaskNode::getProcessNodeKey, task.getCurrentNode())
+        );
+
+        // 获取当前时间
+        LocalDateTime now = LocalDateTime.now();
+
+        // 1. 如果超过流程期限,红色预警
+        if (process.getPlannedAuditEndDate() != null &&
+                now.toLocalDate().isAfter(process.getPlannedAuditEndDate())) {
+            return "red";
+        }
+
+        // 2. 如果当前环节有截止时间且已超过,但未超过流程期限,黄色预警
+        if (currentNode != null && currentNode.getEndTime() != null &&
+                now.isAfter(currentNode.getEndTime())) {
+            // 检查是否超过流程期限
+            if (process.getPlannedAuditEndDate() != null &&
+                    now.toLocalDate().isAfter(process.getPlannedAuditEndDate())) {
+                return "red"; // 超过流程期限,红色预警
+            } else {
+                return "yellow"; // 超过环节期限但未超过流程期限,黄色预警
+            }
+        }
+
+        // 3. 默认绿色预警(在办理期限内)
+        return "green";
+    }
 }

+ 17 - 0
assistMg/src/main/java/com/hotent/project/dao/CostProjectSuperviseDao.java

@@ -0,0 +1,17 @@
+package com.hotent.project.dao;/**
+ * @program: cbjs-mvue-master
+ * @description:
+ * @author: zhao yue yue
+ * @create: 2025-11-18 14:50
+ */
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.hotent.project.model.CostProjectScenario;
+import com.hotent.project.model.CostProjectSupervise;
+
+/**
+ *@author: zhao yue yue
+ *@create: 2025-11-18 14:50
+ */
+public interface CostProjectSuperviseDao extends BaseMapper<CostProjectSupervise> {
+}

+ 17 - 0
assistMg/src/main/java/com/hotent/project/dao/CostProjectSuperviseDataDao.java

@@ -0,0 +1,17 @@
+package com.hotent.project.dao;/**
+ * @program: cbjs-mvue-master
+ * @description:
+ * @author: zhao yue yue
+ * @create: 2025-11-18 14:50
+ */
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.hotent.project.model.CostProjectSupervise;
+import com.hotent.project.model.CostProjectSuperviseData;
+
+/**
+ *@author: zhao yue yue
+ *@create: 2025-11-18 14:50
+ */
+public interface CostProjectSuperviseDataDao extends BaseMapper<CostProjectSuperviseData> {
+}

+ 16 - 0
assistMg/src/main/java/com/hotent/project/manager/CostProjectSuperviseDataManager.java

@@ -0,0 +1,16 @@
+package com.hotent.project.manager;
+
+import com.hotent.base.manager.BaseManager;
+import com.hotent.project.model.CostProjectSupervise;
+import com.hotent.project.model.CostProjectSuperviseData;
+
+import java.util.List;
+
+/**
+ *@author: zhao yue yue
+ *@create: 2025-11-18 14:47
+ */
+public interface CostProjectSuperviseDataManager extends BaseManager<CostProjectSuperviseData> {
+
+    List<CostProjectSuperviseData> getListBySupervise(String id);
+}

+ 27 - 0
assistMg/src/main/java/com/hotent/project/manager/CostProjectSuperviseManager.java

@@ -0,0 +1,27 @@
+package com.hotent.project.manager;
+
+import com.hotent.base.manager.BaseManager;
+import com.hotent.project.model.CostProjectSupervise;
+import com.hotent.project.model.CostProjectSuperviseData;
+import com.hotent.project.model.CostProjectSurvey;
+import com.hotent.project.req.CostProjectSuperviseReq;
+import com.hotent.project.vo.CostProjectSuperviseDataVo;
+
+import java.util.List;
+
+/**
+ *@author: zhao yue yue
+ *@create: 2025-11-18 14:47
+ */
+public interface CostProjectSuperviseManager extends BaseManager<CostProjectSupervise> {
+
+    String add(CostProjectSuperviseReq param) throws Exception;
+
+    String modify(CostProjectSuperviseReq param) throws Exception;
+
+    String delete(CostProjectSuperviseReq param);
+
+    List<CostProjectSupervise> getListByprojectIds(List<String> projectIds);
+
+    List<CostProjectSuperviseDataVo> getReportList(CostProjectSuperviseReq param);
+}

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

@@ -207,7 +207,7 @@ public class CostProjectDocumentManagerImpl extends BaseManagerImpl<CostProjectD
         String whNo = this.getWH(costDocumentWh);
         //校验文号唯一性
         Boolean b = whMap.get(whNo);
-        if (!b) {
+        if (b==null || !b) {
             whMap.put(whNo,true);
         }else {
             throw new BaseException("【"+whNo+"】文号已存在请重新添加");

+ 39 - 0
assistMg/src/main/java/com/hotent/project/manager/impl/CostProjectSuperviseDataManagerImpl.java

@@ -0,0 +1,39 @@
+package com.hotent.project.manager.impl;/**
+ * @program: cbjs-mvue-master
+ * @description:
+ * @author: zhao yue yue
+ * @create: 2025-11-18 14:48
+ */
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.hotent.base.exception.BaseException;
+import com.hotent.base.manager.impl.BaseManagerImpl;
+import com.hotent.base.util.StringUtil;
+import com.hotent.project.dao.CostProjectSuperviseDao;
+import com.hotent.project.dao.CostProjectSuperviseDataDao;
+import com.hotent.project.manager.CostProjectSuperviseDataManager;
+import com.hotent.project.manager.CostProjectSuperviseManager;
+import com.hotent.project.model.CostProjectSupervise;
+import com.hotent.project.model.CostProjectSuperviseData;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ *@author: zhao yue yue
+ *@create: 2025-11-18 14:48
+ */
+@Service
+public class CostProjectSuperviseDataManagerImpl  extends BaseManagerImpl<CostProjectSuperviseDataDao, CostProjectSuperviseData> implements CostProjectSuperviseDataManager {
+    @Override
+    public List<CostProjectSuperviseData> getListBySupervise(String id) {
+        if (StringUtil.isEmpty(id)){
+            throw new BaseException("id不能为空");
+        }
+        QueryWrapper<CostProjectSuperviseData> wrapper = new QueryWrapper<>();
+        wrapper.eq("supervise_id",id);
+
+        return this.list(wrapper);
+    }
+}

+ 147 - 0
assistMg/src/main/java/com/hotent/project/manager/impl/CostProjectSuperviseManagerImpl.java

@@ -0,0 +1,147 @@
+package com.hotent.project.manager.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.hotent.base.exception.BaseException;
+import com.hotent.base.manager.impl.BaseManagerImpl;
+import com.hotent.base.util.StringUtil;
+import com.hotent.base.util.UniqueIdUtil;
+import com.hotent.project.dao.CostProjectSuperviseDao;
+import com.hotent.project.dao.CostProjectSurveyDao;
+import com.hotent.project.manager.CostProjectApprovalManager;
+import com.hotent.project.manager.CostProjectSuperviseDataManager;
+import com.hotent.project.manager.CostProjectSuperviseManager;
+import com.hotent.project.manager.CostProjectSurveyManager;
+import com.hotent.project.model.CostProjectApproval;
+import com.hotent.project.model.CostProjectSupervise;
+import com.hotent.project.model.CostProjectSuperviseData;
+import com.hotent.project.model.CostProjectSurvey;
+import com.hotent.project.req.CostProjectSuperviseReq;
+import com.hotent.project.vo.CostProjectSuperviseDataVo;
+import com.hotent.uc.manager.UserManager;
+import com.hotent.uc.model.User;
+import com.hotent.uc.util.ContextUtil;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ *@author: zhao yue yue
+ *@create: 2025-11-18 14:48
+ */
+@Service
+public class CostProjectSuperviseManagerImpl extends BaseManagerImpl<CostProjectSuperviseDao, CostProjectSupervise> implements CostProjectSuperviseManager {
+
+    @Autowired
+    private CostProjectApprovalManager costProjectApprovalManager;
+
+    @Autowired
+    private UserManager userService;
+
+    @Autowired
+    private CostProjectSuperviseDataManager costProjectSuperviseDataManager;
+
+    @Override
+    public String add(CostProjectSuperviseReq param) throws Exception {
+        if (StringUtil.isEmpty(param.getProjectId())){
+            throw new BaseException("项目id不能够为空");
+        }
+        if (StringUtil.isEmpty(param.getSupervisorId())) {
+            throw new BaseException("督办人不能为空");
+        }
+        User supervisor = userService.get(param.getSupervisorId());
+        if (supervisor==null) {
+            throw new BaseException("根据id【"+param.getSupervisorId()+"】督办人信息未查询到");
+        }
+        CostProjectApproval projectApproval = costProjectApprovalManager.get(param.getProjectId());
+        if (projectApproval==null) {
+            throw new BaseException("根据id:【"+param.getProjectId()+"】未查询到项目信息");
+        }
+        param.setSupervisorId(supervisor.getId());
+        param.setSupervisorName(supervisor.getFullname());
+        param.setCreateTime(LocalDateTime.now());
+        param.setId(String.valueOf(UniqueIdUtil.getUId()));
+        param.setReportTime(LocalDateTime.now());
+        param.setStatus(0);
+        String account = ContextUtil.getCurrentUser().getAccount();
+        User user = userService.getByAccount(account);
+        param.setCreateId(user.getId());
+        param.setCreateBy(user.getFullname());
+        boolean save = this.save(param);
+        return save ? "添加成功" :"添加失败";
+    }
+
+    @Override
+    public String modify(CostProjectSuperviseReq param) throws Exception {
+        if(StringUtil.isEmpty(param.getId())){
+            throw new BaseException("实体id不能为空");
+        }
+        CostProjectSupervise supervise = this.get(param.getId());
+        if (supervise==null) {
+            throw new BaseException("未查询到实体信息");
+        }
+        String account = ContextUtil.getCurrentUser().getAccount();
+        User user = userService.getByAccount(account);
+        CostProjectSuperviseData costProjectSuperviseData = new CostProjectSuperviseData();
+        costProjectSuperviseData.setId(String.valueOf(UniqueIdUtil.getUId()));
+        costProjectSuperviseData.setReportContent(param.getReportContent());
+        costProjectSuperviseData.setReportTime(LocalDateTime.now());
+        costProjectSuperviseData.setSuperviseId(param.getId());
+        costProjectSuperviseData.setProjectId(param.getProjectId());
+        costProjectSuperviseData.setCreateBy(user.getFullname());
+        costProjectSuperviseData.setCreateTime(LocalDateTime.now());
+        costProjectSuperviseData.setCreateId(user.getId());
+        costProjectSuperviseData.setAttachmentIds(param.getAttachmentUrls());
+        //boolean b = this.saveOrUpdate(param);
+        //this.update(param);
+        boolean save = costProjectSuperviseDataManager.save(costProjectSuperviseData);
+        return save ? "上报成功" :"上报失败";
+    }
+
+    @Override
+    public String delete(CostProjectSuperviseReq param) {
+        if(StringUtil.isEmpty(param.getId())){
+            throw new BaseException("实体id不能为空");
+        }
+        CostProjectSupervise supervise = this.get(param.getId());
+        if (supervise==null) {
+            throw new BaseException("未查询到实体信息");
+        }
+        param.setStatus(1);
+        this.update(param);
+        return "办结成功";
+    }
+
+    @Override
+    public List<CostProjectSupervise> getListByprojectIds(List<String> projectIds) {
+        if (projectIds!=null && !projectIds.isEmpty()) {
+            QueryWrapper<CostProjectSupervise> wrapper = new QueryWrapper<>();
+            wrapper.in("project_id",projectIds);
+            return this.list(wrapper);
+        }
+        return null;
+    }
+
+    @Override
+    public List<CostProjectSuperviseDataVo> getReportList(CostProjectSuperviseReq param) {
+        if(StringUtil.isEmpty(param.getId())){
+            throw new BaseException("ID不能为空");
+        }
+        CostProjectSupervise supervise = this.get(param.getId());
+        if (supervise==null) {
+            throw new BaseException("根据id未查询到督办实体");
+        }
+        List<CostProjectSuperviseData> data= costProjectSuperviseDataManager.getListBySupervise(param.getId());
+        List<CostProjectSuperviseDataVo> dataVos = data.stream().map(d -> {
+            CostProjectSuperviseDataVo costProjectSuperviseDataVo = new CostProjectSuperviseDataVo();
+            BeanUtils.copyProperties(d, costProjectSuperviseDataVo);
+            costProjectSuperviseDataVo.setSuperviseId(supervise.getSupervisorId());
+            costProjectSuperviseDataVo.setSupervisorName(supervise.getSupervisorName());
+            return costProjectSuperviseDataVo;
+        }).collect(Collectors.toList());
+        return dataVos;
+    }
+}

+ 78 - 0
assistMg/src/main/java/com/hotent/project/model/CostProjectSupervise.java

@@ -0,0 +1,78 @@
+package com.hotent.project.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.hotent.base.entity.BaseModel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *@author: zhao yue yue
+ *@create: 2025-11-18 10:21
+ */
+@ApiModel(value = "CostProjectSupervise", description = "督办表")
+@TableName(value ="cost_project_supervise")
+@Data
+@EqualsAndHashCode(callSuper=false)
+@Accessors(chain = true)
+public class CostProjectSupervise extends BaseModel<CostProjectSupervise> implements Serializable {
+
+    private static final long serialVersionUID = 21L;
+
+    @ApiModelProperty(value = "【系统标记】主键ID")
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
+    @TableId(value = "id")
+    private String id;
+    @ApiModelProperty(value = "项目id")
+    @TableField(value = "project_id")
+    private String projectId;
+    @ApiModelProperty(value = "监督人")
+    @TableField(value = "supervisor_id")
+    private String supervisorId;
+    @ApiModelProperty(value = "监督人")
+    @TableField(value = "supervisor_name")
+    private String supervisorName;
+    @ApiModelProperty(value = "要求时间")
+    @TableField(value = "require_time")
+    private LocalDateTime requireTime;
+    @ApiModelProperty(value = "督促要求内容")
+    @TableField(value = "require_content")
+    private String requireContent;
+    @ApiModelProperty(value = "附件id")
+    @TableField(value = "attachment_urls")
+    private String attachmentUrls;
+    @ApiModelProperty(value = "状态:0:在办、1:办结")
+    @TableField(value = "status")
+    private Integer status;
+    @ApiModelProperty(value = "逻辑删除:0正常 1已删除")
+    @TableField(value = "is_deleted")
+    private Integer isDeleted;
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "create_time")
+    private LocalDateTime createTime;
+    @ApiModelProperty(value = "创建人名称")
+    @TableField(value = "create_by")
+    private String createBy;
+    @ApiModelProperty(value = "创建人ID")
+    @TableField(value = "create_id")
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
+    private String createId;
+    @ApiModelProperty(value = "更新时间")
+    @TableField(value = "update_time")
+    private LocalDateTime updateTime;
+    @TableField(value = "update_by")
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+    @TableField(value = "update_id")
+    @ApiModelProperty(value = "更新人ID")
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
+    private String updateId;
+}

+ 72 - 0
assistMg/src/main/java/com/hotent/project/model/CostProjectSuperviseData.java

@@ -0,0 +1,72 @@
+package com.hotent.project.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.hotent.base.entity.BaseModel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ *@author: zhao yue yue
+ *@create: 2025-11-18 10:21
+ */
+@ApiModel(value = "CostProjectSuperviseData", description = "督办记录表")
+@TableName(value ="cost_project_supervise_data")
+@Data
+@EqualsAndHashCode(callSuper=false)
+@Accessors(chain = true)
+public class CostProjectSuperviseData extends BaseModel<CostProjectSuperviseData> implements Serializable {
+
+    private static final long serialVersionUID = 21L;
+
+    @ApiModelProperty(value = "【系统标记】主键ID")
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
+    @TableId(value = "id")
+    private String id;
+    @ApiModelProperty(value = "项目id")
+    @TableField(value = "project_id")
+    private String projectId;
+    @ApiModelProperty(value = "督办id")
+    @TableField(value = "supervise_id")
+    private String superviseId;
+    @ApiModelProperty(value = "报告时间")
+    @TableField(value = "report_time")
+    private LocalDateTime reportTime;
+    @ApiModelProperty(value = "督促内容")
+    @TableField(value = "report_content")
+    private String reportContent;
+    @ApiModelProperty(value = "附件id")
+    @TableField(value = "attachment_ids")
+    private String attachmentIds;
+    @ApiModelProperty(value = "逻辑删除:0正常 1已删除")
+    @TableField(value = "is_deleted")
+    private Integer isDeleted;
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "create_time")
+    private LocalDateTime createTime;
+    @ApiModelProperty(value = "创建人名称")
+    @TableField(value = "create_by")
+    private String createBy;
+    @ApiModelProperty(value = "创建人ID")
+    @TableField(value = "create_id")
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
+    private String createId;
+    @ApiModelProperty(value = "更新时间")
+    @TableField(value = "update_time")
+    private LocalDateTime updateTime;
+    @TableField(value = "update_by")
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+    @TableField(value = "update_id")
+    @ApiModelProperty(value = "更新人ID")
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
+    private String updateId;
+}

+ 23 - 0
assistMg/src/main/java/com/hotent/project/req/CostProjectSuperviseReq.java

@@ -0,0 +1,23 @@
+package com.hotent.project.req;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.hotent.project.model.CostProjectSupervise;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.time.LocalDateTime;
+
+/**
+ *@author: zhao yue yue
+ *@create: 2025-11-18 15:02
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class CostProjectSuperviseReq extends CostProjectSupervise {
+
+    @ApiModelProperty(value = "报告时间")
+    private LocalDateTime reportTime;
+    @ApiModelProperty(value = "报告内容")
+    private String reportContent;
+}

+ 27 - 0
assistMg/src/main/java/com/hotent/project/vo/CostProjectSuperviseDataVo.java

@@ -0,0 +1,27 @@
+package com.hotent.project.vo;/**
+ * @program: cbjs-mvue-master
+ * @description:
+ * @author: zhao yue yue
+ * @create: 2025-11-18 17:46
+ */
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.hotent.project.model.CostProjectSuperviseData;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *@author: zhao yue yue
+ *@create: 2025-11-18 17:46
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class CostProjectSuperviseDataVo extends CostProjectSuperviseData {
+    @ApiModelProperty(value = "监督人")
+    @TableField(value = "supervisor_id")
+    private String supervisorId;
+    @ApiModelProperty(value = "监督人")
+    @TableField(value = "supervisor_name")
+    private String supervisorName;
+}

+ 2 - 0
base/src/main/resources/config/application.yml

@@ -240,6 +240,8 @@ system:
       - cost_survey_template_upload
       - cost_audit_period_record
       - cost_survey_fd_template_upload_data
+      - cost_project_supervise
+      - cost_project_supervise_data
   # 异步线程池配置
   thread:
     # 连接池最小线程数(设部署应用的服务器CPU内核数为N,该值设置为:2N+1)