Forráskód Böngészése

pms 项目任务 更新瑞都实际进度

zhangcl 1 napja
szülő
commit
d8f3d13476

+ 9 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrddailyreport/IotRdDailyReportController.java

@@ -573,6 +573,15 @@ public class IotRdDailyReportController {
         });
     }
 
+    @GetMapping("/taskActualProgress")
+    @Operation(summary = "查询日报所属任务的实际进度")
+    @PreAuthorize("@ss.hasPermission('pms:iot-rd-daily-report:query')")
+    public CommonResult<List<IotRdDailyReportRespVO>> taskActualProgress(@Valid IotRdDailyReportPageReqVO pageReqVO) {
+        List<IotRdDailyReportDO> taskProgresses = iotRdDailyReportService.taskActualProgress(pageReqVO);
+
+        return success(BeanUtils.toBean(taskProgresses, IotRdDailyReportRespVO.class));
+    }
+
     @GetMapping("/export-excel")
     @Operation(summary = "导出瑞都日报 Excel")
     @PreAuthorize("@ss.hasPermission('pms:iot-rd-daily-report:export')")

+ 7 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotrddailyreport/IotRdDailyReportMapper.java

@@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreport.vo.IotRdDailyReportPageReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotrddailyreport.IotRdDailyReportDO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -165,4 +166,10 @@ public interface IotRdDailyReportMapper extends BaseMapperX<IotRdDailyReportDO>
                 .betweenIfPresent(IotRdDailyReportDO::getCreateTime, reqVO.getCreateTime())
                 .orderByDesc(IotRdDailyReportDO::getId);
     }
+
+    /**
+     * 瑞都日报 关联的任务进度
+     * @param reqVO 查询条件
+     */
+    List<IotRdDailyReportDO> selectListGrouped(@Param("reqVO") IotRdDailyReportPageReqVO reqVO);
 }

+ 8 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotrddailyreport/IotRdDailyReportService.java

@@ -89,4 +89,12 @@ public interface IotRdDailyReportService {
      * @param
      */
     void saveBatch(List<IotRdDailyReportSaveReqVO> reports);
+
+    /**
+     * 查询任务的实际进度
+     *
+     * @param reqVO taskId
+     * @return 从日报中提取任务的实际进度
+     */
+    List<IotRdDailyReportDO> taskActualProgress(IotRdDailyReportPageReqVO reqVO);
 }

+ 24 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotrddailyreport/IotRdDailyReportServiceImpl.java

@@ -33,13 +33,13 @@ import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
-
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
+import static cn.iocoder.yudao.module.pms.enums.ErrorCodeConstant.IOT_PROJECT_TASK_NOT_EXISTS;
 import static cn.iocoder.yudao.module.pms.enums.ErrorCodeConstant.IOT_RD_DAILY_REPORT_NOT_EXISTS;
 
 /**
@@ -129,9 +129,20 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
         dailyReport.setAuditStatus(updateReqVO.getAuditStatus());
         if (SupplierAuditStatusEnum.REJECT.getStatus().equals(updateReqVO.getAuditStatus())) {
             dailyReport.setStatus(0);
+        } else {
+            // 审核通过 更新关联任务状态
+            Long taskId = updateReqVO.getTaskId();
+            if (ObjUtil.isNotEmpty(taskId)) {
+                // 查找关联的任务
+                IotProjectTaskDO task = iotProjectTaskMapper.selectById(taskId);
+                task.setStatus(updateReqVO.getRdStatus());
+                task.setRdStatus(updateReqVO.getRdStatus());
+                iotProjectTaskMapper.updateById(task);
+            }
         }
         dailyReport.setOpinion(updateReqVO.getOpinion());
         iotRdDailyReportMapper.updateById(dailyReport);
+
     }
 
     @Override
@@ -551,4 +562,16 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
         });
     }
 
+    @Override
+    public List<IotRdDailyReportDO> taskActualProgress(IotRdDailyReportPageReqVO reqVO) {
+        if (ObjUtil.isEmpty(reqVO.getTaskId())) {
+            throw exception(IOT_PROJECT_TASK_NOT_EXISTS);
+        }
+        // 根据 taskId 任务提取日报中的施工状态进度节点信息
+        IotRdDailyReportPageReqVO reportReqVO = new IotRdDailyReportPageReqVO();
+        reportReqVO.setTaskId(reqVO.getTaskId());
+        List<IotRdDailyReportDO> dailyReports = iotRdDailyReportMapper.selectListGrouped(reportReqVO);
+        return dailyReports;
+    }
+
 }

+ 84 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/static/iotprojecttask/IotRdDailyReportMapper.xml

@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.iocoder.yudao.module.pms.dal.mysql.iotrddailyreport.IotRdDailyReportMapper">
+
+
+    <!-- 基础结果映射 -->
+    <resultMap id="BaseResultMap" type="cn.iocoder.yudao.module.pms.dal.dataobject.iotrddailyreport.IotRdDailyReportDO">
+        <!-- 根据实际字段配置 -->
+        <id column="id" property="id" />
+        <result column="dept_id" property="deptId" />
+        <result column="project_id" property="projectId" />
+        <result column="task_id" property="taskId" />
+        <result column="rd_status" property="rdStatus" />
+        <result column="construction_start_date" property="constructionStartDate" />
+        <result column="construction_end_date" property="constructionEndDate" />
+        <!-- 其他字段映射 -->
+        <result column="project_classification" property="projectClassification" />
+        <result column="daily_power_usage" property="dailyPowerUsage" />
+        <!-- 其他字段映射 -->
+        <result column="non_production_time" property="nonProductionTime" />
+        <result column="rd_npt_reason" property="rdNptReason" />
+        <result column="production_status" property="productionStatus" />
+        <result column="next_plan" property="nextPlan" />
+        <result column="personnel" property="personnel" />
+        <!-- 其他字段映射 -->
+        <result column="remark" property="remark" />
+        <result column="status" property="status" />
+        <result column="creator" property="creator" />
+        <result column="create_time" property="createTime" />
+        <result column="updater" property="updater" />
+        <result column="update_time" property="updateTime" />
+    </resultMap>
+
+    <select id="selectListGrouped" resultMap="BaseResultMap"
+            parameterType="cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreport.vo.IotRdDailyReportPageReqVO">
+        SELECT t1.*, g.min_start_date
+        FROM rq_iot_rd_daily_report t1
+        INNER JOIN (
+        SELECT
+        rd_status,
+        MIN(construction_start_date) as min_start_date
+        FROM rq_iot_rd_daily_report
+        <where>
+            <if test="reqVO.deptId != null">
+                AND dept_id = #{reqVO.deptId}
+            </if>
+            <if test="reqVO.projectId != null">
+                AND project_id = #{reqVO.projectId}
+            </if>
+            <if test="reqVO.taskId != null">
+                AND task_id = #{reqVO.taskId}
+            </if>
+        </where>
+        GROUP BY rd_status
+        ) g ON t1.rd_status = g.rd_status
+        AND t1.construction_start_date = g.min_start_date
+        AND t1.rd_status <![CDATA[<>]]> ''
+        WHERE NOT EXISTS (
+            SELECT 1 FROM rq_iot_rd_daily_report t2
+            WHERE t2.rd_status = t1.rd_status
+            AND t2.construction_start_date &lt; t1.construction_start_date
+            <if test="reqVO.deptId != null">
+                AND t2.dept_id = #{reqVO.deptId}
+            </if>
+            <if test="reqVO.projectId != null">
+                AND t2.project_id = #{reqVO.projectId}
+            </if>
+            <if test="reqVO.taskId != null">
+                AND t2.task_id = #{reqVO.taskId}
+            </if>
+        )
+        <if test="reqVO.deptId != null">
+            AND t1.dept_id = #{reqVO.deptId}
+        </if>
+        <if test="reqVO.projectId != null">
+            AND t1.project_id = #{reqVO.projectId}
+        </if>
+        <if test="reqVO.taskId != null">
+            AND t1.task_id = #{reqVO.taskId}
+        </if>
+        ORDER BY g.min_start_date ASC
+    </select>
+
+</mapper>