|
|
@ -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(); |
|
|
|
|
|
} |
|
|
} |
|
|
} |