|
|
|
@ -11,6 +11,7 @@ import com.inspect.base.core.utils.DateUtils; |
|
|
|
import com.inspect.base.core.utils.StringUtils; |
|
|
|
import com.inspect.base.redis.service.RedisService; |
|
|
|
import com.inspect.partrolresult.mapper.PatrolResultMapper; |
|
|
|
import com.inspect.partrolresult.service.IPatrolResultService; |
|
|
|
import com.inspect.resultmain.domain.PatrolTaskResultMain; |
|
|
|
import com.inspect.resultmain.service.IPatrolTaskResultMainService; |
|
|
|
import com.inspect.task.domain.PatrolTask; |
|
|
|
@ -47,6 +48,9 @@ public class PatrolTaskStatusServiceImpl implements IPatrolTaskStatusService { |
|
|
|
@Resource |
|
|
|
private PatrolResultMapper patrolResultMapper; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private IPatrolResultService patrolResultService; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
public PatrolTaskStatusServiceImpl(PatrolTaskStatusMapper patrolTaskStatusMapper) { |
|
|
|
this.patrolTaskStatusMapper = patrolTaskStatusMapper; |
|
|
|
@ -152,22 +156,10 @@ public class PatrolTaskStatusServiceImpl implements IPatrolTaskStatusService { |
|
|
|
throw new IllegalArgumentException("主任务进度/状态由子任务自动计算,不能直接修改:" + patrolTaskStatus.getTaskPatrolledId()); |
|
|
|
} |
|
|
|
|
|
|
|
// 任务状态完成/超期,更新结束时间 |
|
|
|
if (state.equals(TaskStatus.DONE.getCode()) || state.equals(TaskStatus.HALTED.getCode())) { |
|
|
|
String endTime = DateUtils.parseDateToStr(DateUtils.yyyyMMddHHmmss2, new Date()); |
|
|
|
patrolTaskStatus.setEndTime(endTime); |
|
|
|
} |
|
|
|
|
|
|
|
patrolTaskStatus.setTaskProgress(collectionProgress); |
|
|
|
patrolTaskStatus.setTaskEstimatedTime(algorithmProgress); |
|
|
|
patrolTaskStatus.setTaskState(state); |
|
|
|
// 普通任务且状态为已完成,删除redis任务缓存 |
|
|
|
if (TaskType.ORDINARY.getCode().equals(patrolTaskStatus.getTaskType()) && state.equals(TaskStatus.DONE.getCode())) { |
|
|
|
redisService.deleteObjectOfTask(RedisConst.TASK_CURRENT_CODE, patrolTaskStatus.getTaskCode()); |
|
|
|
} |
|
|
|
|
|
|
|
// 统计任务点位巡检情况 |
|
|
|
patrolTaskStatus.setSummary(getTaskPointsSummary(patrolTaskStatus.getTaskCode(), patrolTaskStatus.getTaskPatrolledId())); |
|
|
|
setNormalTaskStatus(patrolTaskStatus); |
|
|
|
|
|
|
|
// 更新子任务或普通任务 |
|
|
|
updatePatrolTaskStatus(patrolTaskStatus); |
|
|
|
@ -185,6 +177,8 @@ public class PatrolTaskStatusServiceImpl implements IPatrolTaskStatusService { |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
PatrolTaskStatus mainTask = selectPatrolTaskStatusByTaskPatrolledId(mainId); |
|
|
|
|
|
|
|
BigDecimal execTotalPoints = BigDecimal.ZERO; |
|
|
|
BigDecimal execTotalAlgorithms = BigDecimal.ZERO; |
|
|
|
TaskStatus mainTaskState = TaskStatus.DONE; |
|
|
|
@ -195,12 +189,8 @@ public class PatrolTaskStatusServiceImpl implements IPatrolTaskStatusService { |
|
|
|
log.info("taskNames: {}", subTask.getTaskName()); |
|
|
|
if (taskNames.length > 1) { |
|
|
|
String sendCode = taskNames[0]; |
|
|
|
List<String> algList = new ArrayList<>(); |
|
|
|
if (sendCode.equals("摄像头")) { |
|
|
|
algList = patrolResultMapper.selectAlgList(taskCode, null, "2"); |
|
|
|
} else { |
|
|
|
algList = patrolResultMapper.selectAlgList(taskCode, sendCode, null); |
|
|
|
} |
|
|
|
// 指定任务算法 |
|
|
|
List<String> algList = patrolResultService.selectAlgList(taskCode, sendCode, mainTask.getSpecifiedAlg()); |
|
|
|
int subTotalPoints = algList.size(); |
|
|
|
int subTotalAlgorithms = algList.stream().mapToInt(s -> s.split(",").length).sum(); |
|
|
|
|
|
|
|
@ -223,7 +213,7 @@ public class PatrolTaskStatusServiceImpl implements IPatrolTaskStatusService { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
List<String> algList = patrolResultMapper.selectAlgList(taskCode, null, null); |
|
|
|
List<String> algList = patrolResultService.selectAlgList(taskCode, null, mainTask.getSpecifiedAlg()); |
|
|
|
int totalPoints = algList.size(); |
|
|
|
int totalAlgorithms = algList.stream().mapToInt(s -> s.split(",").length).sum(); |
|
|
|
log.info("totalPoints:{},totalAlgorithms:{}", totalPoints, totalAlgorithms); |
|
|
|
@ -241,24 +231,17 @@ public class PatrolTaskStatusServiceImpl implements IPatrolTaskStatusService { |
|
|
|
1, RoundingMode.DOWN |
|
|
|
); |
|
|
|
|
|
|
|
PatrolTaskStatus mainTask = selectPatrolTaskStatusByTaskPatrolledId(mainId); |
|
|
|
|
|
|
|
// 如果状态为已完成,但采集和分析进度小于100,说明还有任务未上报,更新为运行中 |
|
|
|
if (mainTaskState.getCode().equals(TaskStatus.DONE.getCode()) |
|
|
|
&& (mainTaskProgress.compareTo(new BigDecimal(100)) != 0 || mainAlgorithmProgress.compareTo(new BigDecimal(100)) != 0 )){ |
|
|
|
&& (mainTaskProgress.compareTo(new BigDecimal(100)) != 0 || mainAlgorithmProgress.compareTo(new BigDecimal(100)) != 0)) { |
|
|
|
mainTaskState = TaskStatus.RUNNING; |
|
|
|
} |
|
|
|
if (mainTaskState.getCode().equals(TaskStatus.DONE.getCode()) || mainTaskState.getCode().equals(TaskStatus.HALTED.getCode())) { |
|
|
|
// 主任务且状态为已完成,删除redis任务缓存 |
|
|
|
redisService.deleteObjectOfTask(RedisConst.TASK_CURRENT_CODE, taskCode); |
|
|
|
String endTime = DateUtils.parseDateToStr(DateUtils.yyyyMMddHHmmss2, new Date()); |
|
|
|
mainTask.setEndTime(endTime); |
|
|
|
} |
|
|
|
|
|
|
|
mainTask.setTaskState(mainTaskState.getCode()); |
|
|
|
mainTask.setTaskProgress(mainTaskProgress.toString()); |
|
|
|
mainTask.setTaskEstimatedTime(mainAlgorithmProgress.toString()); |
|
|
|
// 统计任务点位巡检情况 |
|
|
|
mainTask.setSummary(getTaskPointsSummary(mainTask.getTaskCode(), mainTask.getTaskPatrolledId())); |
|
|
|
setNormalTaskStatus(mainTask); |
|
|
|
|
|
|
|
// 更新主任务 |
|
|
|
patrolTaskStatusMapper.updatePatrolTaskStatus(mainTask); |
|
|
|
} |
|
|
|
@ -295,9 +278,13 @@ public class PatrolTaskStatusServiceImpl implements IPatrolTaskStatusService { |
|
|
|
return mainId; |
|
|
|
} |
|
|
|
|
|
|
|
private String getTaskPointsSummary(String taskCode, String taskPatrolledId) { |
|
|
|
private String getTaskPointsSummary(String taskCode, String taskPatrolledId, String specifiedAlg) { |
|
|
|
// 任务总点位和算法 |
|
|
|
List<Map<String, String>> totalPointList = patrolTaskStatusMapper.selectTotalPointsAndAlgs(taskCode); |
|
|
|
// 任务指定算法类型 |
|
|
|
if (StringUtils.isNotEmpty(specifiedAlg)) { |
|
|
|
totalPointList.stream().forEach(item -> item.put("alg_subtype_ids", specifiedAlg)); |
|
|
|
} |
|
|
|
// 任务已巡检点位和算法 |
|
|
|
List<Map<String, String>> executedPointList = patrolTaskStatusMapper.selectExecutedPointsAndAlgs(taskPatrolledId); |
|
|
|
return countInspectedPoint(totalPointList, executedPointList); |
|
|
|
@ -305,6 +292,7 @@ public class PatrolTaskStatusServiceImpl implements IPatrolTaskStatusService { |
|
|
|
|
|
|
|
/** |
|
|
|
* 统计点位巡检情况 |
|
|
|
* |
|
|
|
* @param data1List 总点位和算法 |
|
|
|
* @param data2List 已执行点位和算法 |
|
|
|
* @return |
|
|
|
@ -312,8 +300,8 @@ public class PatrolTaskStatusServiceImpl implements IPatrolTaskStatusService { |
|
|
|
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")); |
|
|
|
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); |
|
|
|
} |
|
|
|
@ -349,6 +337,29 @@ public class PatrolTaskStatusServiceImpl implements IPatrolTaskStatusService { |
|
|
|
result.put("executedPoint", count); |
|
|
|
result.put("unexecutedPoint", (data1List.size() - count)); |
|
|
|
|
|
|
|
return result.toString(); |
|
|
|
return result.toJSONString(); |
|
|
|
} |
|
|
|
|
|
|
|
private void setNormalTaskStatus(PatrolTaskStatus patrolTaskStatus) { |
|
|
|
// 任务最终状态:已完成、已终止 |
|
|
|
boolean isFinalState = TaskStatus.DONE.getCode().equals(patrolTaskStatus.getTaskState()) || TaskStatus.HALTED.getCode().equals(patrolTaskStatus.getTaskState()); |
|
|
|
// 常规任务:主任务、普通任务 |
|
|
|
boolean isNormalTask = TaskType.ORDINARY.getCode().equals(patrolTaskStatus.getTaskType()) || TaskType.MAIN.getCode().equals(patrolTaskStatus.getTaskType()); |
|
|
|
|
|
|
|
// 更新任务结束时间和redis任务执行标识 |
|
|
|
if (isFinalState) { |
|
|
|
String endTime = DateUtils.parseDateToStr(DateUtils.yyyyMMddHHmmss2, new Date()); |
|
|
|
patrolTaskStatus.setEndTime(endTime); |
|
|
|
|
|
|
|
if (isNormalTask) { |
|
|
|
redisService.deleteObjectOfTask(RedisConst.TASK_CURRENT_CODE, patrolTaskStatus.getTaskCode()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 更新的点位汇总信息 |
|
|
|
if (isNormalTask) { |
|
|
|
String summary = getTaskPointsSummary(patrolTaskStatus.getTaskCode(), patrolTaskStatus.getTaskPatrolledId(), patrolTaskStatus.getSpecifiedAlg()); |
|
|
|
patrolTaskStatus.setSummary(summary); |
|
|
|
} |
|
|
|
} |
|
|
|
} |