Преглед на файлове

Merge remote-tracking branch 'origin/nt-by-master' into nt-by-master

zhuang преди 3 седмици
родител
ревизия
9f776ea2b3

+ 178 - 0
business-common/src/main/java/com/rongwei/bscommon/sys/dao/ProjectWbsNodeDao.java

@@ -0,0 +1,178 @@
+package com.rongwei.bscommon.sys.dao;
+
+import com.alibaba.fastjson.JSONObject;
+import com.rongwei.bsentity.domain.ProjectWbsNodeDo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author dlc
+ * @since 2025-07-01
+ */
+public interface ProjectWbsNodeDao extends BaseMapper<ProjectWbsNodeDo> {
+
+    /**
+     * 获取所有的项目和机号
+     *
+     * @return
+     */
+    @Select("SELECT " +
+            " DISTINCT PROJECTID, " +
+            " MATHINECODE " +
+            "FROM " +
+            " PROJECT_WBS_NODE")
+    List<JSONObject> getProjectAndMachine();
+
+    @Update("UPDATE PROJECT_WBS_NODE T1  " +
+            " SET T1.STATE = (SELECT MAX(T2.INSTATE) INSTATE FROM ZHCX_ITP_PROJECT_NODE_STATE T2 WHERE T2.NODEID = T1.ITPNODEID and T2.PRJID=  #{projectId} and T2.MATHINECODE= #{machineNo})  " +
+            "where T1.PROJECTID=  #{projectId} and T1.MATHINECODE= #{machineNo}; " +
+            "update PROJECT_WBS_NODE set STATE='2' where (STATE='10' or STATE='30')   " +
+            "and PROJECTID=  #{projectId} and MATHINECODE= #{machineNo}; " +
+            "WITH min_complete_time AS ( " +
+            "    SELECT  " +
+            "        NODEID, " +
+            "        PRJID, " +
+            "        MATHINECODE, " +
+            "        MIN(INCOMPLETETIME) AS MIN_INCOMPLETETIME " +
+            "    FROM  " +
+            "        ZHCX_ITP_PROJECT_NODE_STATE " +
+            "    WHERE  " +
+            "        INSTATE IN (10, 30) and PRJID=  #{projectId} and MATHINECODE= #{machineNo} " +
+            "    GROUP BY  " +
+            "        NODEID, " +
+            "        PRJID, " +
+            "        MATHINECODE " +
+            ") " +
+            "UPDATE  " +
+            "    PROJECT_WBS_NODE pwn " +
+            "SET  " +
+            "    FACTENDDATE = ( " +
+            "        SELECT mct.MIN_INCOMPLETETIME " +
+            "        FROM min_complete_time mct " +
+            "        WHERE mct.NODEID = pwn.ITPNODEID " +
+            "          AND mct.PRJID = pwn.PROJECTID " +
+            "          AND mct.MATHINECODE = pwn.MATHINECODE " +
+            "    ) where STATE='2' and PROJECTID=  #{projectId} and MATHINECODE= #{machineNo}; " +
+            " " +
+            "UPDATE PROJECT_WBS_NODE T1 " +
+            "SET T1.STATEOUT= (SELECT MAX(T2.OUTSTATE) OUTSTATE FROM ZHCX_ITP_PROJECT_NODE_STATE T2 WHERE T2.NODEID = T1.ITPNODEID and T2.PRJID=  #{projectId} and T2.MATHINECODE= #{machineNo})  " +
+            "where T1.PROJECTID=  #{projectId} and T1.MATHINECODE= #{machineNo}; " +
+            "update PROJECT_WBS_NODE set STATEOUT='2' where (STATEOUT='10' or STATEOUT='30')  " +
+            "and PROJECTID=  #{projectId} and MATHINECODE= #{machineNo}")
+    void updateWbsNodeState(@Param("projectId") String projectId, @Param("machineNo") String machineNo);
+
+    /**
+     * 获取所有的多个报验点的任务
+     *
+     * @param projectId
+     * @param machineNo
+     * @return
+     */
+    @Select("select ID,ITPNODEID,TASKNAME from PROJECT_WBS_NODE T1 " +
+            "   where T1.PROJECTID=#{projectId} and T1.MATHINECODE=#{machineNo} " +
+            "   and  INSTR(ITPNODEID, ',') > 0")
+    List<JSONObject> getAllNode(@Param("projectId") String projectId, @Param("machineNo") String machineNo);
+
+    /**
+     * 更新进度
+     *
+     * @param projectId
+     * @param machineNo
+     */
+    @Update("WITH cte_calculation AS ( " +
+            " select f.pid as id,f.PLANSTARTDATE-g.PLANSTARTDATE pass,g.total, " +
+            " (f.PLANSTARTDATE-g.PLANSTARTDATE)/g.total as progress  " +
+            " from PROJECT_WBS_NODE a right join ( " +
+            " select PID,MAX(PLANSTARTDATE) PLANSTARTDATE from PROJECT_WBS_NODE   " +
+            " where PROJECTID=#{projectId} and MATHINECODE=#{machineNo} and (STATE = '1' or STATE='2') and DELETED='0' group by PID ) f  " +
+            " on a.ID=f.PID left join  " +
+            " (select PID,MIN(PLANSTARTDATE) PLANSTARTDATE,MAX(PLANSTARTDATE)-MIN(PLANSTARTDATE) total from PROJECT_WBS_NODE   " +
+            " where PROJECTID=#{projectId} and MATHINECODE=#{machineNo} and DELETED='0' group by PID) g  " +
+            " on a.ID = g.PID " +
+            "  WHERE g.total!=0  " +
+//            "-- 过滤无效日期 " +
+            " ) " +
+            " UPDATE PROJECT_WBS_NODE AS t " +
+            " SET progress = ROUND(c.progress * 100, 4) " +
+            " FROM cte_calculation c " +
+            " WHERE t.id = c.id; " +
+            "WITH child_date_diff AS ( " +
+            "    SELECT  " +
+            "        PID,MIN(PLANSTARTDATE) MINDATE, " +
+            "        MAX(PLANSTARTDATE) - MIN(PLANSTARTDATE) AS max_date_diff " +
+            "    FROM  " +
+            "        project_wbs_node  " +
+            "    WHERE  " +
+            "        TYPE='milestone' and DELETED='0' and PROJECTID=#{projectId} and MATHINECODE=#{machineNo} " +
+            "    GROUP BY  " +
+            "        PID " +
+            "), " +
+//            "-- 获取每个父节点下STATE为1或2的子节点最大PLANSTARTDATE " +
+            "valid_child_dates AS ( " +
+            "    SELECT distinct   " +
+            "        PID, " +
+            "        MAX(PLANSTARTDATE) AS max_valid_date " +
+            "    FROM  " +
+            "        project_wbs_node " +
+            "    WHERE  " +
+            "        STATE = '2' and " +
+            "        TYPE='milestone' and DELETED='0' AND PROJECTID=#{projectId} and MATHINECODE=#{machineNo} " +
+            "    GROUP BY  " +
+            "        PID " +
+            "), " +
+            " " +
+//            "-- 获取每个子节点的下一个PLANSTARTDATE " +
+            "next_node_dates AS ( " +
+            "    SELECT DISTINCT   " +
+            "        ID,PID,PLANSTARTDATE,FACTENDDATE, " +
+            "        LEAD(PLANSTARTDATE) OVER (PARTITION BY PID ORDER BY PLANSTARTDATE) AS next_date " +
+            "    FROM  " +
+            "        project_wbs_node where PROJECTID=#{projectId} and MATHINECODE=#{machineNo} " +
+            "), " +
+            " " +
+//            "-- 计算分子值(考虑当前时间与节点时间关系) " +
+            "numerator_calc AS ( " +
+            "    SELECT  " +
+            "        vcd.PID, " +
+            "        CASE " +
+            "            WHEN nnd.next_date IS NULL or nnd.FACTENDDATE is null THEN vcd.max_valid_date " +
+            "            WHEN now()- nnd.FACTENDDATE >= nnd.next_date-vcd.max_valid_date THEN nnd.next_date " +
+            "            WHEN now()- nnd.FACTENDDATE < nnd.next_date-vcd.max_valid_date THEN ADD_DAYS(vcd.max_valid_date, (now()- nnd.FACTENDDATE)) " +
+            "            ELSE vcd.max_valid_date " +
+            "        END AS numerator_value " +
+            "    FROM  " +
+            "        valid_child_dates vcd " +
+            "    JOIN  " +
+            "        next_node_dates nnd ON nnd.PLANSTARTDATE = vcd.max_valid_date AND nnd.PID = vcd.PID " +
+            ") " +
+            "UPDATE project_wbs_node pwn " +
+            "SET PROGRESS = ( " +
+            "    SELECT top 1   " +
+            "        CASE  " +
+            "            WHEN cdd.max_date_diff = 0 THEN 1 " +
+            "            ELSE DATEDIFF(DAY, cdd.MINDATE, nc.numerator_value) * 100 /  " +
+            "                 cdd.max_date_diff  " +
+            "        END " +
+            "    FROM  " +
+            "        numerator_calc nc " +
+            "    JOIN  " +
+            "        child_date_diff cdd ON nc.PID = cdd.PID " +
+            "    WHERE  " +
+            "        nc.PID = pwn.ID   " +
+            "        AND pwn.PROJECTID=#{projectId} and pwn.MATHINECODE=#{machineNo} " +
+            ") " +
+            "WHERE EXISTS ( " +
+            "    SELECT 1 " +
+            "    FROM numerator_calc nc " +
+            "    WHERE nc.PID = pwn.ID " +
+            ");")
+    void updateProgress(@Param("projectId") String projectId, @Param("machineNo") String machineNo);
+}

+ 21 - 0
business-common/src/main/java/com/rongwei/bscommon/sys/service/ProjectWbsNodeService.java

@@ -0,0 +1,21 @@
+package com.rongwei.bscommon.sys.service;
+
+import com.rongwei.bsentity.domain.ProjectWbsNodeDo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author dlc
+ * @since 2025-07-01
+ */
+public interface ProjectWbsNodeService extends IService<ProjectWbsNodeDo> {
+
+    /**
+     * 更新wbs节点
+     *
+     */
+    void updateWbsNode();
+}

+ 141 - 0
business-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ProjectWbsNodeServiceImpl.java

@@ -0,0 +1,141 @@
+package com.rongwei.bscommon.sys.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.rongwei.bscommon.sys.service.ZhcxItpProjectNodeStateService;
+import com.rongwei.bsentity.domain.ProjectWbsNodeDo;
+import com.rongwei.bscommon.sys.dao.ProjectWbsNodeDao;
+import com.rongwei.bscommon.sys.service.ProjectWbsNodeService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.rongwei.bsentity.domain.ZhcxItpProjectNodeStateDo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author dlc
+ * @since 2025-07-01
+ */
+@Service
+public class ProjectWbsNodeServiceImpl extends ServiceImpl<ProjectWbsNodeDao, ProjectWbsNodeDo> implements ProjectWbsNodeService {
+
+    @Autowired
+    private ProjectWbsNodeDao dao;
+
+    @Autowired
+    private ZhcxItpProjectNodeStateService zhcxItpProjectNodeStateService;
+
+    /**
+     * 更新wbs节点
+     *
+     */
+    @Override
+    public void updateWbsNode() {
+        //获取项目机号
+        final List<JSONObject> prjMachineList = dao.getProjectAndMachine();
+
+        for(JSONObject row : prjMachineList) {
+            updateProjectWbs(row);
+        }
+    }
+
+    /**
+     * 更新单个项目
+     *
+     * @param projectMachineObj
+     */
+    private void updateProjectWbs(JSONObject projectMachineObj) {
+        //更新一个报验点的任务节点状态
+        final String projectid = projectMachineObj.getString("PROJECTID");
+        final String mathinecode = projectMachineObj.getString("MATHINECODE");
+        dao.updateWbsNodeState(projectid, mathinecode);
+
+        // 单个报验点更新完还需更新多个报验点,先获取项目所有的报验点状态
+        final LambdaQueryWrapper<ZhcxItpProjectNodeStateDo> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(ZhcxItpProjectNodeStateDo::getPrjid, projectid)
+                .eq(ZhcxItpProjectNodeStateDo::getMathinecode, mathinecode);
+        final List<ZhcxItpProjectNodeStateDo> list = zhcxItpProjectNodeStateService.list(queryWrapper);
+
+        if(ObjectUtil.isEmpty(list)) { //无报验点不做处理
+            updateProgress(projectid, mathinecode);
+            return ;
+        }
+        final List<JSONObject> nodeList = dao.getAllNode(projectid, mathinecode); //获取所有任务报验点
+        if(ObjectUtil.isEmpty(nodeList)) { //无任务报验点不做处理
+            updateProgress(projectid, mathinecode);
+            return ;
+        }
+
+        //转换格式方便读取
+        Map<String, ZhcxItpProjectNodeStateDo> nodeStateMap = new HashMap<>(list.size());
+        for(ZhcxItpProjectNodeStateDo state : list) {
+            nodeStateMap.put(state.getNodeid(), state);
+        }
+
+        int scount = 0, count = 0;
+
+        String stateIn = "0", stateOut = "0";
+        int finishCnt = 0, finishCntOut = 0;
+        for(JSONObject item : nodeList) {
+            count = nodeList.size();//总共多报验点任务数量
+            final String itpnodeid = item.getString("ITPNODEID");
+            final String[] itpNodeIds = itpnodeid.split(",");
+            for(String nodeId : itpNodeIds) {
+                final ZhcxItpProjectNodeStateDo nodeState = nodeStateMap.get(nodeId);
+                if(ObjectUtil.isNull(nodeState)) {
+                    continue;
+                }
+
+                //内部
+                if("10".equals(nodeState.getInstate()) || "30".equals(nodeState.getInstate())) {
+                    finishCnt++;
+                }
+
+                //外部
+                if("10".equals(nodeState.getOutstate()) || "30".equals(nodeState.getOutstate())) {
+                    finishCntOut++;
+                    stateOut = "1";
+                }
+
+                if(finishCnt == itpNodeIds.length) {
+                    stateIn = "2";
+                } else if(finishCnt > 0) {
+                    stateIn = "1";
+                }
+
+                if(itpNodeIds.length > 1 && finishCntOut == itpNodeIds.length) {
+                    stateOut = "2";
+                }
+
+                //更新任务点状态
+                final LambdaUpdateWrapper<ProjectWbsNodeDo> updateWrapper = Wrappers.lambdaUpdate();
+                updateWrapper.eq(ProjectWbsNodeDo::getId, item.getString("ID"))
+                        .set(ProjectWbsNodeDo::getState, stateIn).set(ProjectWbsNodeDo::getStateout, stateOut);
+                update(updateWrapper);
+                scount++;
+
+                if(scount == scount) { //更新进度
+                    updateProgress(projectid, mathinecode);
+                }
+            }
+        }
+    }
+
+    /**
+     * 更新进度
+     *
+     */
+    private void updateProgress(String projectId, String machineNo) {
+        dao.updateProgress(projectId, machineNo);
+    }
+}

+ 44 - 38
business-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ZhcxInsideInspectionServiceImpl.java

@@ -2357,56 +2357,62 @@ public class ZhcxInsideInspectionServiceImpl extends ServiceImpl<ZhcxInsideInspe
             return ;
         }
 
-        ZhcxInsideInspectionDo itpDo = inOper.getInspection();
+        ZhcxInsideInspectionDo inside = inOper.getInspection();
         String machineNo = inOper.getInspection().getMachineno();
         if (StringUtils.isBlank(machineNo)) {
             machineNo = inOper.getInspection().getStructuremachineno();
         }
         if (StringUtils.isBlank(machineNo)) {
-            log.error("{}-{}:总装机号和结构机号都没有", itpDo.getId(), itpDo.getInspectioncode());
+            log.error("{}-{}:总装机号和结构机号都没有", inside.getId(), inside.getInspectioncode());
             return;
         }
-        String[] machinenos = machineNo.split(",");
-        for (String mn : machinenos) {
-            LambdaQueryWrapper<ZhcxItpProjectNodeStateDo> queryWrapper = Wrappers.lambdaQuery();
-            queryWrapper.eq(ZhcxItpProjectNodeStateDo::getPrjid, itpDo.getProjectid())
-                    .eq(ZhcxItpProjectNodeStateDo::getMathinecode, mn)
-                    .eq(ZhcxItpProjectNodeStateDo::getNodeid, itpDo.getInspectioncontentid());
-            List<ZhcxItpProjectNodeStateDo> stateList = itpProjectNodeStateService.list(queryWrapper);
-            ZhcxItpProjectNodeStateDo stateDo = BusinessFunUtils.getPrjNodeState(stateList);
-
-            if(ObjectUtil.isNull(stateDo)) {
-                stateDo = new ZhcxItpProjectNodeStateDo();
-                stateDo.setId(SecurityUtil.getUUID());
-                stateDo.setMathinecode(mn);
-                stateDo.setPrjid(itpDo.getProjectid());
-                stateDo.setNodeid(itpDo.getInspectioncontentid());
-                stateDo.setDeleted("0");
-
-                stateDo.setCreatedate(inOper.getOperTime());
-                stateDo.setCreateuserid(inOper.getOperUser().getId());
-                stateDo.setCreateusername(inOper.getOperUser().getName());
+        String[] machinenos = machineNo.split(","); //机号
+        final String[] nodeIds = inside.getInspectioncontentid().split(","); //报验点id
+
+        for(String nodeId : nodeIds) { // 报验点
+            for (String mn : machinenos) { // 机号
+
+                //查询报验点状态表中
+                LambdaQueryWrapper<ZhcxItpProjectNodeStateDo> queryWrapper = Wrappers.lambdaQuery();
+                queryWrapper.eq(ZhcxItpProjectNodeStateDo::getPrjid, inside.getProjectid())
+                        .eq(ZhcxItpProjectNodeStateDo::getMathinecode, mn)
+                        .eq(ZhcxItpProjectNodeStateDo::getNodeid, nodeId);
+                List<ZhcxItpProjectNodeStateDo> stateList = itpProjectNodeStateService.list(queryWrapper);
+                ZhcxItpProjectNodeStateDo stateDo = BusinessFunUtils.getPrjNodeState(stateList);
+
+                if(ObjectUtil.isNull(stateDo)) {
+                    stateDo = new ZhcxItpProjectNodeStateDo();
+                    stateDo.setId(SecurityUtil.getUUID());
+                    stateDo.setMathinecode(mn);
+                    stateDo.setPrjid(inside.getProjectid());
+                    stateDo.setNodeid(nodeId);
+                    stateDo.setDeleted("0");
+
+                    stateDo.setCreatedate(inOper.getOperTime());
+                    stateDo.setCreateuserid(inOper.getOperUser().getId());
+                    stateDo.setCreateusername(inOper.getOperUser().getName());
 //                entity.setIncompletetime(itpDoPa.getInspectioncomplatetime());
-                assembleUpdateNodeState(stateDo, inOper, complateTime, false);
+                    assembleUpdateNodeState(stateDo, inOper, complateTime, false);
 
-                nodeStateBo.getInsertList().add(stateDo);
-            } else {
+                    nodeStateBo.getInsertList().add(stateDo);
+                } else {
 //                stateDo.setIncompletetime(itpDoPa.getInspectioncomplatetime());
-                assembleUpdateNodeState(stateDo, inOper, complateTime, true);
+                    assembleUpdateNodeState(stateDo, inOper, complateTime, true);
 
-                nodeStateBo.getUpdateList().add(stateDo);
-            }
+                    nodeStateBo.getUpdateList().add(stateDo);
+                }
 
-            // 报验点-内部报验单
-            ZhcxItpProjectNodeStateInsideDo stateInside = new ZhcxItpProjectNodeStateInsideDo();
-            stateInside.setId(SecurityUtil.getUUID());
-            stateInside.setDeleted("0");
-            stateInside.setInsideid(itpDo.getId());
-            stateInside.setStateid(stateDo.getId());
-            stateInside.setInspectioncode(itpDo.getInspectioncode());
-            stateInside.setLaunchtype(itpDo.getLaunchtype());
-            stateInside.setStateid(stateDo.getId());
-            nodeStateBo.getInsideStateList().add(stateInside);
+                // 报验点-内部报验单
+                ZhcxItpProjectNodeStateInsideDo stateInside = new ZhcxItpProjectNodeStateInsideDo();
+                stateInside.setId(SecurityUtil.getUUID());
+                stateInside.setDeleted("0");
+                stateInside.setInsideid(inside.getId());
+                stateInside.setStateid(stateDo.getId());
+                stateInside.setInspectioncode(inside.getInspectioncode());
+                stateInside.setLaunchtype(inside.getLaunchtype());
+                stateInside.setStateid(stateDo.getId());
+                nodeStateBo.getInsideStateList().add(stateInside);
+            }
         }
     }
 

+ 11 - 4
business-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ZhcxMdfFormServiceImpl.java

@@ -22,6 +22,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.text.SimpleDateFormat;
+import java.time.LocalTime;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -56,10 +57,16 @@ public class ZhcxMdfFormServiceImpl extends ServiceImpl<ZhcxMdfFormDao, ZhcxMdfF
         R r = new R();
         if (dtwhoapproveTime == null || dtwhoapproveTime.length() == 0) {
             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-            Calendar calendar = Calendar.getInstance();
-            calendar.add(Calendar.DATE, -1);
-            Date yesterday = calendar.getTime();
-            dtwhoapproveTime = sdf.format(yesterday);
+            LocalTime currentTime = LocalTime.now();
+            LocalTime sevenAM = LocalTime.of(7, 0); // 早上7点
+            if (currentTime.isBefore(sevenAM)) {
+                Calendar calendar = Calendar.getInstance();
+                calendar.add(Calendar.DATE, -1);
+                Date yesterday = calendar.getTime();
+                dtwhoapproveTime = sdf.format(yesterday);
+            } else {
+                dtwhoapproveTime = sdf.format(new Date());
+            }
         }
         Map<String, Object> mdfmap = mdfApi.apiCall(dtwhoapproveTime);
         if (mdfmap.get("code").equals("200")) {

+ 275 - 0
business-entity/src/main/java/com/rongwei/bsentity/domain/ProjectWbsNodeDo.java

@@ -0,0 +1,275 @@
+package com.rongwei.bsentity.domain;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.rongwei.rwcommon.base.BaseDo;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author dlc
+ * @since 2025-07-01
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+@TableName("PROJECT_WBS_NODE")
+public class ProjectWbsNodeDo extends BaseDo {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 主键
+     */
+    @TableField("ID")
+    private String id;
+    /**
+     * 父节点ID
+     */
+    @TableField("PID")
+    private String pid;
+    /**
+     * 任务编号
+     */
+    @TableField("TASKCODE")
+    private String taskcode;
+    /**
+     * 任务标题
+     */
+    @TableField("TASKNAME")
+    private String taskname;
+    /**
+     * 全路径ID
+     */
+    @TableField("FULLID")
+    private String fullid;
+    /**
+     * 项目ID
+     */
+    @TableField("PROJECTID")
+    private String projectid;
+    /**
+     * 模版ID
+     */
+    @TableField("TMPID")
+    private String tmpid;
+    /**
+     * 模版名称
+     */
+    @TableField("TMPNAME")
+    private String tmpname;
+    /**
+     * 责任部门ID
+     */
+    @TableField("BELONGDEPTID")
+    private String belongdeptid;
+    /**
+     * 责任部门
+     */
+    @TableField("BELONGDEPTNAME")
+    private String belongdeptname;
+    /**
+     * 责任人ID
+     */
+    @TableField("DUTYUSERID")
+    private String dutyuserid;
+    /**
+     * 责任人
+     */
+    @TableField("DUTYUSERNAME")
+    private String dutyusername;
+    /**
+     * 任务附件
+     */
+    @TableField("ATTACHMENTS")
+    private String attachments;
+    /**
+     * 任务状态
+     */
+    @TableField("STATE")
+    private String state;
+    /**
+     * 任务优先级
+     */
+    @TableField("PRIORITY")
+    private String priority;
+    /**
+     * 任务类型
+     */
+    @TableField("TYPE")
+    private String type;
+    /**
+     * 是否已完成
+     */
+    @TableField("ISDONE")
+    private Integer isdone;
+    /**
+     * 任务进度
+     */
+    @TableField("PROGRESS")
+    private BigDecimal progress;
+    /**
+     * 是否生效
+     */
+    @TableField("ENABLED")
+    private String enabled;
+    /**
+     * 扩展信息
+     */
+    @TableField("ROPTIONS")
+    private String roptions;
+    /**
+     * 全路径ID
+     */
+    @TableField("FULLPID")
+    private String fullpid;
+    /**
+     * 层级
+     */
+    @TableField("LEVEL")
+    private Integer level;
+    /**
+     * 叶子节点
+     */
+    @TableField("ISLEAF")
+    private String isleaf;
+    /**
+     * 租户ID
+     */
+    @TableField("TENANTID")
+    private String tenantid;
+    /**
+     * 复制源任务ID
+     */
+    @TableField("SOURCEID")
+    private String sourceid;
+    /**
+     * 计划开始时间
+     */
+    @TableField("PLANSTARTDATE")
+    private Date planstartdate;
+    /**
+     * 计划结束时间
+     */
+    @TableField("PLANENDDATE")
+    private Date planenddate;
+    /**
+     * 实际开始时间
+     */
+    @TableField("FACTSTARTDATE")
+    private Date factstartdate;
+    /**
+     * 实际结束时间
+     */
+    @TableField("FACTENDDATE")
+    private Date factenddate;
+    /**
+     * 工程量
+     */
+    @TableField("NEEDQTYS")
+    private Integer needqtys;
+    /**
+     * 工期
+     */
+    @TableField("DURATION")
+    private Integer duration;
+    /**
+     * 权重
+     */
+    @TableField("BALANCE")
+    private BigDecimal balance;
+    /**
+     * 排序
+     */
+    @TableField("SORTINDEX")
+    private BigDecimal sortindex;
+    /**
+     * 关联机号
+     */
+    @TableField("MATHINECODE")
+    private String mathinecode;
+    /**
+     * 进度占比
+     */
+    @TableField("PROGRESSPERCENTAGE")
+    private BigDecimal progresspercentage;
+    /**
+     * 实际进度
+     */
+    @TableField("ACTUALPROGRESS")
+    private BigDecimal actualprogress;
+    /**
+     * 项目计划进度
+     */
+    @TableField("PROJECTPROGRESS")
+    private BigDecimal projectprogress;
+    /**
+     * 项目实际进度
+     */
+    @TableField("PROJECTACTUALPROGRESS")
+    private BigDecimal projectactualprogress;
+    /**
+     * 进度更新日期
+     */
+    @TableField("PROGRESSUPDATEDATE")
+    private Date progressupdatedate;
+    /**
+     * 计划进度
+     */
+    @TableField("PLANPROGRESS")
+    private BigDecimal planprogress;
+    /**
+     * 关联任务ID
+     */
+    @TableField("RELATETASKID")
+    private String relatetaskid;
+    /**
+     * 关联任务名称
+     */
+    @TableField("RELATETASKNAME")
+    private String relatetaskname;
+    /**
+     * 关联约束类型
+     */
+    @TableField("RELATETYPE")
+    private String relatetype;
+    /**
+     * ITP报验点ID
+     */
+    @TableField("ITPNODEID")
+    private String itpnodeid;
+    /**
+     * 关联ITP节点
+     */
+    @TableField("ITPNODENAME")
+    private String itpnodename;
+    /**
+     * 任务分类
+     */
+    @TableField("ABTYPE")
+    private String abtype;
+    /**
+     * 关联天数
+     */
+    @TableField("RELATEDAYS")
+    private Integer relatedays;
+    /**
+     * 外部报验状态
+     */
+    @TableField("STATEOUT")
+    private String stateout;
+    /**
+     * 是否外部报验
+     */
+    @TableField("NEEDOUT")
+    private String needout;
+
+
+}

+ 36 - 0
business-server/src/main/java/com/rongwei/bsserver/controller/ProjectWbsNodeController.java

@@ -0,0 +1,36 @@
+package com.rongwei.bsserver.controller;
+
+
+import com.rongwei.bscommon.sys.service.ProjectWbsNodeService;
+import com.rongwei.rwcommon.base.R;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author dlc
+ * @since 2025-07-01
+ */
+@RestController
+@RequestMapping("/projectWbsNode")
+public class ProjectWbsNodeController {
+
+    @Autowired
+    private ProjectWbsNodeService service;
+
+    /**
+     * 更新节点
+     *
+     * @return
+     */
+    @PostMapping("/updateWbsNode")
+    @ResponseBody
+    public R updateWbsNode() {
+        service.updateWbsNode();
+        return R.ok();
+    }
+}
+