Răsfoiți Sursa

pms 瑞恒日报 以井为单位 统计 队伍的工作量

zhangcl 1 săptămână în urmă
părinte
comite
410b6da27e

+ 8 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotprojecttask/IotProjectTaskController.java

@@ -354,6 +354,14 @@ public class IotProjectTaskController {
         return success(new PageResult<>(buildProjectTaskList(taskList.getList()), taskList.getTotal()));
     }
 
+    @GetMapping("/taskWellNames")
+    @Operation(summary = "查看某个专业公司下去重后的所有任务列表")
+    @PreAuthorize("@ss.hasPermission('rq:iot-project-task:query')")
+    public CommonResult<List<IotProjectTaskRespVO>> taskWellNames( IotProjectTaskPageReqVO pageReqVO) {
+        List<IotProjectTaskDO> wellNames = iotProjectTaskService.taskWellNames(pageReqVO);
+        return success(BeanUtils.toBean(wellNames, IotProjectTaskRespVO.class));
+    }
+
     private List<IotProjectTaskRespVO> buildProjectTaskList(List<IotProjectTaskDO> tasks) {
         if (CollUtil.isEmpty(tasks)) {
             return Collections.emptyList();

+ 33 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrhdailyreport/IotRhDailyReportController.java

@@ -186,6 +186,39 @@ public class IotRhDailyReportController {
         return success(new PageResult<>(buildRhDailyReports(pageResult.getList(), pageReqVO), pageResult.getTotal()));
     }
 
+    @GetMapping("/teamReports")
+    @Operation(summary = "根据井号查询瑞恒日报列表 按照队伍分组统计工作量")
+    @PreAuthorize("@ss.hasPermission('pms:iot-rh-daily-report:query')")
+    public CommonResult<PageResult<IotRhDailyReportRespVO>> teamReports(@Valid IotRhDailyReportPageReqVO pageReqVO) {
+        // 根据查询参数筛选出 符合条件 的记录id 再传入 分页查询
+        Set<Long> projectIds = new HashSet<>();
+        Set<Long> taskIds = new HashSet<>();
+        if (StrUtil.isNotBlank(pageReqVO.getContractName())) {
+            IotProjectInfoPageReqVO reqVO = new IotProjectInfoPageReqVO();
+            reqVO.setContractName(pageReqVO.getContractName());
+            List<IotProjectInfoDO> projects = iotProjectInfoService.getIotProjectInfos(reqVO);
+            if (CollUtil.isNotEmpty(projects)) {
+                projects.forEach(project -> {
+                    projectIds.add(project.getId());
+                });
+                pageReqVO.setProjectIds(projectIds);
+            }
+        }
+        if (StrUtil.isNotBlank(pageReqVO.getTaskName())) {
+            IotProjectTaskPageReqVO reqVO = new IotProjectTaskPageReqVO();
+            reqVO.setSearchKey(pageReqVO.getTaskName());
+            List<IotProjectTaskDO> tasks = iotProjectTaskService.projectTasks(reqVO);
+            if (CollUtil.isNotEmpty(tasks)) {
+                tasks.forEach(task -> {
+                    taskIds.add(task.getId());
+                });
+                pageReqVO.setTaskIds(taskIds);
+            }
+        }
+        PageResult<IotRhDailyReportDO> pageResult = iotRhDailyReportService.teamReports(pageReqVO);
+        return success(new PageResult<>(buildRhDailyReports(pageResult.getList(), pageReqVO), pageResult.getTotal()));
+    }
+
     @GetMapping("/completeRate")
     @Operation(summary = "查询各专业公司日报完成率")
     @DataPermission(enable = false)

+ 11 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotrhdailyreport/IotRhDailyReportMapper.java

@@ -40,6 +40,17 @@ public interface IotRhDailyReportMapper extends BaseMapperX<IotRhDailyReportDO>
                                              @Param("taskIds") Collection<Long> taskIds,
                                              @Param("projectIds") Collection<Long> projectIds, @Param("deptIds") Collection<Long> deptIds);
 
+    /**
+     * 根据 井号 查询 瑞恒日报 按照队伍分组 小计
+     * @param page
+     * @param reqVO
+     * @param projectIds
+     * @return
+     */
+    IPage<IotRhDailyReportDO> rhWellNameDailyReports(IPage<IotRhDailyReportDO> page, @Param("reqVO") IotRhDailyReportPageReqVO reqVO,
+                                             @Param("taskIds") Collection<Long> taskIds,
+                                             @Param("projectIds") Collection<Long> projectIds, @Param("deptIds") Collection<Long> deptIds);
+
     /**
      * 瑞恒日报汇总统计
      * @param page

+ 7 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotprojecttask/IotProjectTaskService.java

@@ -72,4 +72,11 @@ public interface IotProjectTaskService {
 
     PageResult<IotProjectTaskDO> taskList(IotProjectTaskPageReqVO taskDO,Collection<Long> deptIds);
 
+    /**
+     * 查询所有任务井号信息 过滤数据权限
+     *
+     * @param pageReqVO 列表查询
+     * @return 项目信息任务列表
+     */
+    List<IotProjectTaskDO> taskWellNames(IotProjectTaskPageReqVO pageReqVO);
 }

+ 22 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotprojecttask/IotProjectTaskServiceImpl.java

@@ -25,6 +25,7 @@ import javax.annotation.Resource;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicReference;
+import java.util.stream.Collectors;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.module.pms.enums.ErrorCodeConstant.IOT_PROJECT_TASK_NOT_EXISTS;
@@ -265,4 +266,25 @@ public class IotProjectTaskServiceImpl implements IotProjectTaskService {
         return new PageResult<>(taskDOIPage.getRecords(), taskDOIPage.getTotal());
     }
 
+    @Override
+    public List<IotProjectTaskDO> taskWellNames(IotProjectTaskPageReqVO pageReqVO) {
+        List<IotProjectTaskDO> tasks = iotProjectTaskMapper.selectList(pageReqVO);
+        // 井号有重名的情况 需要去重
+        if (CollUtil.isNotEmpty(tasks)) {
+            // 1. 以wellName为key去重,保留第一个出现的元素(推荐,符合“只显示1条”的默认需求)
+            Map<String, IotProjectTaskDO> wellNameTaskMap = tasks.stream()
+                    // 可选:过滤wellName为null/空字符串的元素,避免null作为key导致的异常
+                    .filter(task -> task.getWellName() != null && !task.getWellName().trim().isEmpty())
+                    .collect(Collectors.toMap(
+                            IotProjectTaskDO::getWellName,  // Map的key:井号wellName(去重依据)
+                            task -> task,                   // Map的value:任务对象本身
+                            (existingTask, newTask) -> existingTask  // 重复key时:保留已存在的元素(即第一个出现的元素)
+                    ));
+
+            // 2. 将Map的value转为List,得到去重后的集合
+            tasks = wellNameTaskMap.values().stream().collect(Collectors.toList());
+        }
+        return tasks;
+    }
+
 }

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

@@ -55,6 +55,14 @@ public interface IotRhDailyReportService {
      */
     PageResult<IotRhDailyReportDO> getIotRhDailyReportPage(IotRhDailyReportPageReqVO pageReqVO);
 
+    /**
+     * 获得瑞恒日报分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 瑞恒日报分页
+     */
+    PageResult<IotRhDailyReportDO> teamReports(IotRhDailyReportPageReqVO pageReqVO);
+
     /**
      * 瑞恒日报汇总统计
      *

+ 24 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotrhdailyreport/IotRhDailyReportServiceImpl.java

@@ -716,6 +716,30 @@ public class IotRhDailyReportServiceImpl implements IotRhDailyReportService {
         return new PageResult<>(page.getRecords(), page.getTotal());
     }
 
+    @Override
+    public PageResult<IotRhDailyReportDO> teamReports(IotRhDailyReportPageReqVO pageReqVO) {
+        // 查询选择部门下面所有子部门
+        Set<Long> ids = new HashSet<>();
+        if (Objects.nonNull(pageReqVO.getDeptId())) {
+            ids = deptService.getChildDeptIdListFromCache(pageReqVO.getDeptId());
+            ids.add(pageReqVO.getDeptId());
+            pageReqVO.setDeptIds(ids);
+        }
+        // 检查contractName不为空但projectIds为空的情况
+        if (StrUtil.isNotBlank(pageReqVO.getContractName()) && (CollUtil.isEmpty(pageReqVO.getProjectIds()))) {
+            return new PageResult<>(Collections.emptyList(), 0L);
+        }
+        // 检查taskName不为空但taskIds为空的情况
+        if (StrUtil.isNotBlank(pageReqVO.getTaskName()) && (CollUtil.isEmpty(pageReqVO.getTaskIds()))) {
+            return new PageResult<>(Collections.emptyList(), 0L);
+        }
+        IPage<IotRhDailyReportDO> page = iotRhDailyReportMapper.rhWellNameDailyReports(
+                new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()), pageReqVO,
+                pageReqVO.getTaskIds(), pageReqVO.getProjectIds(), ids);
+
+        return new PageResult<>(page.getRecords(), page.getTotal());
+    }
+
     @Override
     public List<IotRhDailyReportStatisticsRespVO> statistics(IotRhDailyReportPageReqVO pageReqVO) {
         List<IotRhDailyReportStatisticsRespVO> result = new ArrayList<>();

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

@@ -195,6 +195,51 @@
             d.sort ASC;
     </select>
 
+    <select id="rhWellNameDailyReports" resultMap="BaseResultMap"
+            parameterType="cn.iocoder.yudao.module.pms.controller.admin.iotrhdailyreport.vo.IotRhDailyReportPageReqVO">
+        SELECT
+        rdr.*
+        FROM
+        rq_iot_rh_daily_report rdr
+        INNER JOIN system_dept d ON d.id = rdr.dept_id
+        LEFT JOIN system_dept pd ON pd.id = d.parent_id
+        WHERE
+        rdr.deleted = 0
+        AND rdr.dept_id IS NOT NULL
+        <if test="deptIds != null and deptIds.size &gt; 0">
+            AND rdr.dept_id IN
+            <foreach collection="deptIds" index="index" item="key" open="(" separator="," close=")">
+                #{key}
+            </foreach>
+        </if>
+        <if test="projectIds != null and projectIds.size &gt; 0">
+            AND rdr.project_id IN
+            <foreach collection="projectIds" index="index" item="key" open="(" separator="," close=")">
+                #{key}
+            </foreach>
+        </if>
+        <if test="taskIds != null and taskIds.size &gt; 0">
+            AND rdr.task_id IN
+            <foreach collection="taskIds" index="index" item="key" open="(" separator="," close=")">
+                #{key}
+            </foreach>
+        </if>
+        <if test="reqVO.createTime != null and reqVO.createTime.length > 0">
+            <!-- 处理“开始时间”(数组第1位,如 createTime[0] = 2024-01-01 00:00:00) -->
+            <if test="reqVO.createTime[0] != null">
+                AND rdr.create_time &gt;= #{reqVO.createTime[0]}
+            </if>
+            <!-- 处理“结束时间”(数组第2位,如 createTime[1] = 2024-01-31 23:59:59) -->
+            <if test="reqVO.createTime.length > 1 and reqVO.createTime[1] != null">
+                AND rdr.create_time &lt;= #{reqVO.createTime[1]}
+            </if>
+        </if>
+        ORDER BY
+            COALESCE(pd.sort, 999999) ASC,
+            d.sort ASC,
+            DATE(rdr.create_time) DESC;
+    </select>
+
     <!-- 瑞恒日报汇总统计 -->
     <select id="rhReportStatistics" resultMap="BaseResultMap"
             parameterType="cn.iocoder.yudao.module.pms.controller.admin.iotrhdailyreport.vo.IotRhDailyReportPageReqVO">