Browse Source

refactor: 重构任务详情点位巡检情况汇总的逻辑,记录至patrol_task_status的新增summary字段

master
yinhuaiwei 2 weeks ago
parent
commit
4494a7ee99
7 changed files with 88 additions and 42 deletions
  1. +0
    -2
      inspect-main/inspect-main-task/src/main/java/com/inspect/task/mapper/PatrolTaskMapper.java
  2. +0
    -2
      inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/IPatrolTaskService.java
  3. +0
    -5
      inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/impl/PatrolTaskServiceImpl.java
  4. +5
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/mapper/PatrolTaskStatusMapper.java
  5. +65
    -5
      inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/service/impl/PatrolTaskStatusServiceImpl.java
  6. +0
    -28
      inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskMapper.xml
  7. +18
    -0
      inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskStatusMapper.xml

+ 0
- 2
inspect-main/inspect-main-task/src/main/java/com/inspect/task/mapper/PatrolTaskMapper.java View File

@ -60,6 +60,4 @@ public interface PatrolTaskMapper {
List<JSONObject> selectBasedataPatrolPointPresetList(@Param("patrolPointIds") List<String> patrolPointIds); List<JSONObject> selectBasedataPatrolPointPresetList(@Param("patrolPointIds") List<String> patrolPointIds);
List<JSONObject> selectPatrolPresetPosList(@Param("patrolPointIds") List<String> patrolPointIds); List<JSONObject> selectPatrolPresetPosList(@Param("patrolPointIds") List<String> patrolPointIds);
Map<String, Integer> countPatrolTaskOverview(String taskPatrolledId);
} }

+ 0
- 2
inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/IPatrolTaskService.java View File

@ -63,6 +63,4 @@ public interface IPatrolTaskService {
List<JSONObject> selectBasedataPatrolPointPresetList(List<String> patrolPointIds); List<JSONObject> selectBasedataPatrolPointPresetList(List<String> patrolPointIds);
List<JSONObject> selectPatrolPresetPosList(List<String> patrolPointIds); List<JSONObject> selectPatrolPresetPosList(List<String> patrolPointIds);
Map<String, Integer> countPatrolTaskOverview(String taskPatrolledId);
} }

+ 0
- 5
inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/impl/PatrolTaskServiceImpl.java View File

@ -370,9 +370,4 @@ public class PatrolTaskServiceImpl implements IPatrolTaskService {
public List<JSONObject> selectPatrolPresetPosList(List<String> patrolPointIds) { public List<JSONObject> selectPatrolPresetPosList(List<String> patrolPointIds) {
return patrolTaskMapper.selectPatrolPresetPosList(patrolPointIds); return patrolTaskMapper.selectPatrolPresetPosList(patrolPointIds);
} }
@Override
public Map<String, Integer> countPatrolTaskOverview(String taskPatrolledId) {
return patrolTaskMapper.countPatrolTaskOverview(taskPatrolledId);
}
} }

+ 5
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/mapper/PatrolTaskStatusMapper.java View File

@ -8,6 +8,7 @@ import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
import java.util.Map;
@Mapper @Mapper
public interface PatrolTaskStatusMapper { public interface PatrolTaskStatusMapper {
@ -52,4 +53,8 @@ public interface PatrolTaskStatusMapper {
List<PatrolTaskStatus> selectPatrolTaskStatusListByMainId(String taskPatrolledId); List<PatrolTaskStatus> selectPatrolTaskStatusListByMainId(String taskPatrolledId);
PatrolTaskStatus selectPatrolTaskStatusMain(String taskPatrolledId); PatrolTaskStatus selectPatrolTaskStatusMain(String taskPatrolledId);
List<Map<String, String>> selectTotalPointsAndAlgs(String taskCode);
List<Map<String, String>> selectExecutedPointsAndAlgs(String taskPatrolledId);
} }

+ 65
- 5
inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/service/impl/PatrolTaskStatusServiceImpl.java View File

@ -1,5 +1,6 @@
package com.inspect.taskstatus.service.impl; package com.inspect.taskstatus.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.inspect.annotation.TaskStatusChange; import com.inspect.annotation.TaskStatusChange;
import com.inspect.base.core.constant.Color; import com.inspect.base.core.constant.Color;
import com.inspect.base.core.constant.RedisConst; import com.inspect.base.core.constant.RedisConst;
@ -27,10 +28,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.*;
@Service @Service
public class PatrolTaskStatusServiceImpl implements IPatrolTaskStatusService { public class PatrolTaskStatusServiceImpl implements IPatrolTaskStatusService {
@ -167,6 +165,10 @@ public class PatrolTaskStatusServiceImpl implements IPatrolTaskStatusService {
if (TaskType.ORDINARY.getCode().equals(patrolTaskStatus.getTaskType()) && state.equals(TaskStatus.DONE.getCode())) { if (TaskType.ORDINARY.getCode().equals(patrolTaskStatus.getTaskType()) && state.equals(TaskStatus.DONE.getCode())) {
redisService.deleteObjectOfTask(RedisConst.TASK_CURRENT_CODE, patrolTaskStatus.getTaskCode()); redisService.deleteObjectOfTask(RedisConst.TASK_CURRENT_CODE, patrolTaskStatus.getTaskCode());
} }
// 统计任务点位巡检情况
patrolTaskStatus.setSummary(getTaskPointsSummary(patrolTaskStatus.getTaskCode(), patrolTaskStatus.getTaskPatrolledId()));
// 更新子任务或普通任务 // 更新子任务或普通任务
updatePatrolTaskStatus(patrolTaskStatus); updatePatrolTaskStatus(patrolTaskStatus);
log.info("updateTaskProgress: {}", patrolTaskStatus); log.info("updateTaskProgress: {}", patrolTaskStatus);
@ -251,11 +253,12 @@ public class PatrolTaskStatusServiceImpl implements IPatrolTaskStatusService {
redisService.deleteObjectOfTask(RedisConst.TASK_CURRENT_CODE, taskCode); redisService.deleteObjectOfTask(RedisConst.TASK_CURRENT_CODE, taskCode);
String endTime = DateUtils.parseDateToStr(DateUtils.yyyyMMddHHmmss2, new Date()); String endTime = DateUtils.parseDateToStr(DateUtils.yyyyMMddHHmmss2, new Date());
mainTask.setEndTime(endTime); mainTask.setEndTime(endTime);
// generateTaskResultMain(mainTask);
} }
mainTask.setTaskState(mainTaskState.getCode()); mainTask.setTaskState(mainTaskState.getCode());
mainTask.setTaskProgress(mainTaskProgress.toString()); mainTask.setTaskProgress(mainTaskProgress.toString());
mainTask.setTaskEstimatedTime(mainAlgorithmProgress.toString()); mainTask.setTaskEstimatedTime(mainAlgorithmProgress.toString());
// 统计任务点位巡检情况
mainTask.setSummary(getTaskPointsSummary(mainTask.getTaskCode(), mainTask.getTaskPatrolledId()));
// 更新主任务 // 更新主任务
patrolTaskStatusMapper.updatePatrolTaskStatus(mainTask); patrolTaskStatusMapper.updatePatrolTaskStatus(mainTask);
} }
@ -291,4 +294,61 @@ public class PatrolTaskStatusServiceImpl implements IPatrolTaskStatusService {
return mainId; return mainId;
} }
private String getTaskPointsSummary(String taskCode, String taskPatrolledId) {
// 任务总点位和算法
List<Map<String, String>> totalPointList = patrolTaskStatusMapper.selectTotalPointsAndAlgs(taskCode);
// 任务已巡检点位和算法
List<Map<String, String>> executedPointList = patrolTaskStatusMapper.selectExecutedPointsAndAlgs(taskPatrolledId);
return countInspectedPoint(totalPointList, executedPointList);
}
/**
* 统计点位巡检情况
* @param data1List 总点位和算法
* @param data2List 已执行点位和算法
* @return
*/
private String countInspectedPoint(List<Map<String, String>> data1List, List<Map<String, String>> data2List) {
Map<String, Set<String>> data2Map = new HashMap<>();
for (Map<String, String> row : data2List) {
String pid = String.valueOf(row.get("patrol_point_id"));
String subtype = String.valueOf(row.get("alg_subtype_id"));
data2Map.computeIfAbsent(pid, k -> new HashSet<>()).add(subtype);
}
// 遍历 data1检查每个 patrol_point_id 是否全部子类型都存在
int count = 0;
for (Map<String, String> row : data1List) {
String pid = String.valueOf(row.get("patrol_point_id"));
String idsStr = String.valueOf(row.get("alg_subtype_ids"));
if (idsStr == null || idsStr.trim().isEmpty()) {
continue; // 空则跳过
}
// 解析逗号分隔的 alg_subtype_ids
Set<String> requiredSet = new HashSet<>();
for (String s : idsStr.split(",")) {
String trim = s.trim();
if (!trim.isEmpty()) {
requiredSet.add(trim);
}
}
// 判断是否是 data2 的子集
Set<String> availableSet = data2Map.get(pid);
if (availableSet != null && availableSet.containsAll(requiredSet)) {
count++;
}
}
JSONObject result = new JSONObject();
result.put("totalPoint", data1List.size());
result.put("executedPoint", count);
result.put("unexecutedPoint", (data1List.size() - count));
return result.toString();
}
} }

+ 0
- 28
inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskMapper.xml View File

@ -474,32 +474,4 @@
#{patrolPointId} #{patrolPointId}
</foreach> </foreach>
</select> </select>
<select id="countPatrolTaskOverview" resultType="java.util.Map">
SELECT
t.totalPoint,
COALESCE(e.executedPoint, 0) AS executedPoint,
t.totalPoint - COALESCE(e.executedPoint, 0) AS unexecutedPoint
FROM
(
SELECT COUNT(1) AS totalPoint
FROM patrol_task_info
WHERE task_major_id = (
SELECT task_code
FROM patrol_task_status
WHERE task_patrolled_id = #{taskPatrolledId}
LIMIT 1
)
) t
CROSS JOIN
(
SELECT COUNT(DISTINCT objectId) AS executedPoint
FROM result_analysis
WHERE task_patrol_id IN (
SELECT task_patrolled_id
FROM patrol_task_status
WHERE main_id = #{taskPatrolledId} OR task_patrolled_id = #{taskPatrolledId}
)
) e
</select>
</mapper> </mapper>

+ 18
- 0
inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskStatusMapper.xml View File

@ -117,6 +117,7 @@
b.type as patrol_type, b.type as patrol_type,
a.task_type, a.task_type,
a.main_id, a.main_id,
a.summary,
b.execution_status as exec_type b.execution_status as exec_type
from patrol_task_status a from patrol_task_status a
LEFT JOIN patrol_task b on a.task_code=b.task_code LEFT JOIN patrol_task b on a.task_code=b.task_code
@ -358,6 +359,22 @@
) )
</select> </select>
<select id="selectExecutedPointsAndAlgs" resultType="java.util.Map">
SELECT a.objectId AS patrol_point_id, s.alg_subtype_id
FROM result_analysis a
LEFT JOIN basedata_alg_subtype s ON a.alg_type = s.alg_subtype_code
WHERE a.task_patrol_id = #{taskPatrolledId}
AND filter = 1
</select>
<select id="selectTotalPointsAndAlgs" resultType="java.util.Map">
SELECT p.patrol_point_id, p.alg_subtype_ids
FROM basedata_patrolpoint p
LEFT JOIN patrol_task_info i ON p.patrol_point_id = i.device_id
LEFT JOIN basedata_eqpbook e ON i.ebook_id = e.eqp_book_id
where i.task_major_id = #{taskCode}
</select>
<insert id="insertPatrolTaskStatus" parameterType="PatrolTaskStatus" useGeneratedKeys="true" keyProperty="lineId"> <insert id="insertPatrolTaskStatus" parameterType="PatrolTaskStatus" useGeneratedKeys="true" keyProperty="lineId">
insert into patrol_task_status insert into patrol_task_status
<trim prefix="(" suffix=")" suffixOverrides=","> <trim prefix="(" suffix=")" suffixOverrides=",">
@ -461,6 +478,7 @@
<if test="code != null">code = #{code},</if> <if test="code != null">code = #{code},</if>
<if test="pos != null">pos = #{pos},</if> <if test="pos != null">pos = #{pos},</if>
<if test="patrolType != null">patrol_type = #{patrolType},</if> <if test="patrolType != null">patrol_type = #{patrolType},</if>
<if test="summary != null and summary != ''">summary = #{summary},</if>
<if test="endTime != null">end_time = #{endTime},</if> <if test="endTime != null">end_time = #{endTime},</if>
</trim> </trim>
where line_id = #{lineId} where line_id = #{lineId}


Loading…
Cancel
Save