Browse Source

feat: 支持多设备联合任务下发;纠偏算法合并到其他算法展示

master
yinhuaiwei 4 weeks ago
parent
commit
4793c7cdbe
27 changed files with 1086 additions and 576 deletions
  1. +2
    -3
      inspect-job/src/main/java/com/inspect/job/task/JobMainTask.java
  2. +1
    -1
      inspect-main/inspect-main-task-exec/src/main/java/com/inspect/exec/controller/PatrolTaskExecController.java
  3. +2
    -1
      inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/domain/ResultAnalysis.java
  4. +17
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/domain/ResultAnalysisSummaryDTO.java
  5. +3
    -4
      inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/mapper/ResultAnalysisMapper.java
  6. +3
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/service/IResultAnalysisService.java
  7. +10
    -11
      inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/service/impl/AnalyseResponseServiceImpl.java
  8. +13
    -5
      inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/service/impl/ResultAnalysisServiceImpl.java
  9. +1
    -6
      inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/utils/ResultAnalysisUtils.java
  10. +83
    -122
      inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/controller/PatrolResultController.java
  11. +2
    -1
      inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/mapper/PatrolResultMapper.java
  12. +62
    -55
      inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/service/impl/PatrolResultServiceImpl.java
  13. +2
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/mapper/PatrolTaskResultMainMapper.java
  14. +1
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/service/IPatrolTaskResultMainService.java
  15. +4
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/service/impl/PatrolTaskResultMainServiceImpl.java
  16. +153
    -184
      inspect-main/inspect-main-task/src/main/java/com/inspect/task/controller/PatrolTaskController.java
  17. +2
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/task/domain/SendTask.java
  18. +17
    -19
      inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/impl/PatrolTaskServiceImpl.java
  19. +56
    -21
      inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/controller/PatrolTaskStatusController.java
  20. +7
    -53
      inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/domain/PatrolTaskStatus.java
  21. +6
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/mapper/PatrolTaskStatusMapper.java
  22. +10
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/service/IPatrolTaskStatusService.java
  23. +278
    -73
      inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/service/impl/PatrolTaskStatusServiceImpl.java
  24. +142
    -8
      inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolResultMapper.xml
  25. +18
    -6
      inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskResultMainMapper.xml
  26. +169
    -3
      inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskStatusMapper.xml
  27. +22
    -0
      inspect-main/inspect-main-task/src/main/resources/mapper/task/ResultAnalysisMapper.xml

+ 2
- 3
inspect-job/src/main/java/com/inspect/job/task/JobMainTask.java View File

@ -1099,7 +1099,6 @@ public class JobMainTask {
String immediatelyExecTaskTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")); String immediatelyExecTaskTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
redisService.setCacheObjectOfTask(RedisConst.IMMEDIATELY_EXEC_TASK_TIME, patrolTask.getTaskCode(), immediatelyExecTaskTime); redisService.setCacheObjectOfTask(RedisConst.IMMEDIATELY_EXEC_TASK_TIME, patrolTask.getTaskCode(), immediatelyExecTaskTime);
log.info("SET TASK_CURRENT_CODE: key: {}, value: {}", RedisConst.TASK_CURRENT_CODE + patrolTask.getTaskCode(), RedisConst.TASK_CODE + patrolTask.getTaskCode() + StringUtils.AT + immediatelyExecTaskTime); log.info("SET TASK_CURRENT_CODE: key: {}, value: {}", RedisConst.TASK_CURRENT_CODE + patrolTask.getTaskCode(), RedisConst.TASK_CODE + patrolTask.getTaskCode() + StringUtils.AT + immediatelyExecTaskTime);
redisService.setCacheObjectOfTask(RedisConst.TASK_CURRENT_CODE, patrolTask.getTaskCode(), RedisConst.TASK_CODE + patrolTask.getTaskCode() + StringUtils.AT + immediatelyExecTaskTime, 4L, TimeUnit.HOURS);
resetRecordCounter(patrolTask.getTaskCode()); resetRecordCounter(patrolTask.getTaskCode());
log.info("TASK REC CNT: {}", cameraPatrolTasks.size());//devType是2的设备数 log.info("TASK REC CNT: {}", cameraPatrolTasks.size());//devType是2的设备数
setRedisRecordCount(patrolTask.getTaskCode(), cameraPatrolTasks.size()); setRedisRecordCount(patrolTask.getTaskCode(), cameraPatrolTasks.size());
@ -2056,14 +2055,14 @@ public class JobMainTask {
if (!patrolTaskControlList.isEmpty()) { if (!patrolTaskControlList.isEmpty()) {
log.info(Color.YELLOW + "PATROL_TASK_LIST_DEVICE: {}, task list size: {}" + Color.END, redisKey, patrolTaskControlList.size()); log.info(Color.YELLOW + "PATROL_TASK_LIST_DEVICE: {}, task list size: {}" + Color.END, redisKey, patrolTaskControlList.size());
redisService.setCacheObjectOfTask(RedisConst.TASK_CURRENT_CODE, taskCode, redisKey, 5L, TimeUnit.MINUTES);
redisService.setCacheObjectOfTask(RedisConst.TASK_CURRENT_CODE, taskCode, redisKey, 1L, TimeUnit.HOURS);
// 执行机器狗无人机设备任务 // 执行机器狗无人机设备任务
taskExecClient.execDeviceTask(patrolTaskControlList); taskExecClient.execDeviceTask(patrolTaskControlList);
} }
if (!patrolTaskListEx.isEmpty()) { if (!patrolTaskListEx.isEmpty()) {
log.info(Color.YELLOW + "PATROL_TASK_LIST_VL: {}, task list size: {}" + Color.END, redisKey, patrolTaskListEx.size()); log.info(Color.YELLOW + "PATROL_TASK_LIST_VL: {}, task list size: {}" + Color.END, redisKey, patrolTaskListEx.size());
redisService.setCacheObjectOfTask(RedisConst.TASK_CURRENT_CODE, taskCode, redisKey, 5L, TimeUnit.MINUTES);
redisService.setCacheObjectOfTask(RedisConst.TASK_CURRENT_CODE, taskCode, redisKey, 1L, TimeUnit.HOURS);
execEveryDayTask(patrolTaskListEx); execEveryDayTask(patrolTaskListEx);
} }
// if (patrolTaskList != null && !patrolTaskList.isEmpty()) { // if (patrolTaskList != null && !patrolTaskList.isEmpty()) {


+ 1
- 1
inspect-main/inspect-main-task-exec/src/main/java/com/inspect/exec/controller/PatrolTaskExecController.java View File

@ -857,7 +857,7 @@ public class PatrolTaskExecController extends BaseController {
private void extracted(String key, String taskCode) { private void extracted(String key, String taskCode) {
log.info(Color.RED + "[EXEC] Add new task [{}]" + Color.END, key);//日志里没搜到 log.info(Color.RED + "[EXEC] Add new task [{}]" + Color.END, key);//日志里没搜到
redisService.setCacheObjectOfTask(RedisConst.TASK_CURRENT_CODE, taskCode, key, 5L, TimeUnit.MINUTES);
redisService.setCacheObjectOfTask(RedisConst.TASK_CURRENT_CODE, taskCode, key, 4L, TimeUnit.HOURS);
log.info("[EXEC] key: {}", key); log.info("[EXEC] key: {}", key);
List<PatrolTask> cameraPatrolTasks = redisService.getCacheObject(key); List<PatrolTask> cameraPatrolTasks = redisService.getCacheObject(key);
if (!cameraPatrolTasks.isEmpty()) { if (!cameraPatrolTasks.isEmpty()) {


+ 2
- 1
inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/domain/ResultAnalysis.java View File

@ -1,6 +1,5 @@
package com.inspect.analysis.domain; package com.inspect.analysis.domain;
import com.inspect.analysis.constant.AnalyseConstants;
import com.inspect.base.core.annotation.Excel; import com.inspect.base.core.annotation.Excel;
import com.inspect.base.core.utils.StringUtils; import com.inspect.base.core.utils.StringUtils;
import com.inspect.base.core.web.domain.BaseEntity; import com.inspect.base.core.web.domain.BaseEntity;
@ -65,6 +64,7 @@ public class ResultAnalysis extends BaseEntity {
private int csYcNum; private int csYcNum;
private int aiQxNum; private int aiQxNum;
private int aiYcNum; private int aiYcNum;
private int qxNum;
private String pointName; private String pointName;
private String deviceName; private String deviceName;
private String abnormal; private String abnormal;
@ -72,6 +72,7 @@ public class ResultAnalysis extends BaseEntity {
private String deviceSource; private String deviceSource;
private String filterDesc; private String filterDesc;
private String desc; private String desc;
private List<String> taskPatrolIds;
public ResultAnalysis(String businessId) { public ResultAnalysis(String businessId) {
this.businessId = businessId; this.businessId = businessId;


+ 17
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/domain/ResultAnalysisSummaryDTO.java View File

@ -0,0 +1,17 @@
package com.inspect.analysis.domain;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class ResultAnalysisSummaryDTO {
private String taskPatrolId;
private int qxNum; // 注意COUNT/SUM 返回的是数值类型
private int csQxNum;
private int aiQxNum;
private int csYcNum;
private int aiYcNum;
}

+ 3
- 4
inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/mapper/ResultAnalysisMapper.java View File

@ -1,9 +1,6 @@
package com.inspect.analysis.mapper; package com.inspect.analysis.mapper;
import com.inspect.analysis.domain.AlgPatrolPoint;
import com.inspect.analysis.domain.AnalyseLog;
import com.inspect.analysis.domain.AnalyseSummaryAlarmModel;
import com.inspect.analysis.domain.ResultAnalysis;
import com.inspect.analysis.domain.*;
import com.inspect.partrolresult.domain.PatrolResult; import com.inspect.partrolresult.domain.PatrolResult;
import com.inspect.task.domain.PatrolData; import com.inspect.task.domain.PatrolData;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@ -83,4 +80,6 @@ public interface ResultAnalysisMapper {
List<ResultAnalysis> selectResultAnalysisListBatch(@Param("list") List<String> taskPatrolIds, @Param("resultType") String resultType); List<ResultAnalysis> selectResultAnalysisListBatch(@Param("list") List<String> taskPatrolIds, @Param("resultType") String resultType);
void updateResultAnalysisByCondition(ResultAnalysis analysis); void updateResultAnalysisByCondition(ResultAnalysis analysis);
List<ResultAnalysisSummaryDTO> countResultAnalysisSummary(@Param("list") List<String> taskPatrolIds);
} }

+ 3
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/service/IResultAnalysisService.java View File

@ -3,6 +3,7 @@ package com.inspect.analysis.service;
import com.inspect.analysis.domain.AlgPatrolPoint; import com.inspect.analysis.domain.AlgPatrolPoint;
import com.inspect.analysis.domain.AnalyseSummaryAlarmModel; import com.inspect.analysis.domain.AnalyseSummaryAlarmModel;
import com.inspect.analysis.domain.ResultAnalysis; import com.inspect.analysis.domain.ResultAnalysis;
import com.inspect.analysis.domain.ResultAnalysisSummaryDTO;
import com.inspect.partrolresult.domain.PatrolResult; import com.inspect.partrolresult.domain.PatrolResult;
import com.inspect.task.domain.PatrolData; import com.inspect.task.domain.PatrolData;
@ -59,4 +60,6 @@ public interface IResultAnalysisService {
Long getDefectCountGroupByPoint(String defectFilter, String defectIsToday, String type); Long getDefectCountGroupByPoint(String defectFilter, String defectIsToday, String type);
void updateResultAnalysisByCondition(ResultAnalysis analysis); void updateResultAnalysisByCondition(ResultAnalysis analysis);
List<ResultAnalysisSummaryDTO> countResultAnalysisSummary(List<String> taskPatrolIds);
} }

+ 10
- 11
inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/service/impl/AnalyseResponseServiceImpl.java View File

@ -17,6 +17,7 @@ import com.inspect.base.core.constant.Color;
import com.inspect.base.core.constant.RedisConst; import com.inspect.base.core.constant.RedisConst;
import com.inspect.base.core.constant.Tags; import com.inspect.base.core.constant.Tags;
import com.inspect.base.core.enums.TaskStatus; import com.inspect.base.core.enums.TaskStatus;
import com.inspect.base.core.utils.BigDecimalUtil;
import com.inspect.base.core.utils.DateUtils; import com.inspect.base.core.utils.DateUtils;
import com.inspect.base.core.utils.StringUtils; import com.inspect.base.core.utils.StringUtils;
import com.inspect.base.redis.service.RedisService; import com.inspect.base.redis.service.RedisService;
@ -39,6 +40,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.IOException; import java.io.IOException;
import java.math.BigDecimal;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -751,11 +753,7 @@ public class AnalyseResponseServiceImpl implements IAnalyseResponseService {
private Map<String, PatrolResult> selectObj2PatrolResultMap(String filter, String patrolTaskId, String deviceId) { private Map<String, PatrolResult> selectObj2PatrolResultMap(String filter, String patrolTaskId, String deviceId) {
log.info("OBJ_TO_PATROL_RESULT_S taskPatrolId: {}, filter: {}, deviceId: {}", patrolTaskId, filter, deviceId); log.info("OBJ_TO_PATROL_RESULT_S taskPatrolId: {}, filter: {}, deviceId: {}", patrolTaskId, filter, deviceId);
List<PatrolTaskResultMain> resultMainList =
patrolTaskResultMainService.selectPatrolTaskResultMainList(new PatrolTaskResultMain(patrolTaskId));
assert resultMainList != null;
assert !resultMainList.isEmpty();
PatrolTaskResultMain resultMain = resultMainList.get(0);
PatrolTaskResultMain resultMain = patrolTaskResultMainService.selectPatrolTaskResultMainOne(patrolTaskId);
PatrolResult patrolResult = new PatrolResult(); PatrolResult patrolResult = new PatrolResult();
patrolResult.setMainId(String.valueOf(resultMain.getLineId())); patrolResult.setMainId(String.valueOf(resultMain.getLineId()));
patrolResult.setDeviceId(deviceId); patrolResult.setDeviceId(deviceId);
@ -930,8 +928,9 @@ public class AnalyseResponseServiceImpl implements IAnalyseResponseService {
if (!patrolTaskStatusList.isEmpty()) { if (!patrolTaskStatusList.isEmpty()) {
patrolTaskStatus = patrolTaskStatusList.get(0); patrolTaskStatus = patrolTaskStatusList.get(0);
patrolTaskStatus.setTaskEstimatedTime(algorithmProgress); patrolTaskStatus.setTaskEstimatedTime(algorithmProgress);
if ("100.0".equals(algorithmProgress)) {
patrolTaskStatus.setEndTime(DateUtil.formatDateTime(new Date()));
BigDecimal algorithmProgressBD = BigDecimalUtil.toBigDecimal(algorithmProgress);
BigDecimal oneHundredBD = new BigDecimal(100);
if (algorithmProgressBD.compareTo(oneHundredBD) == 0) {
log.info(Color.GREEN + "DONE CALC_REMOTE_ALGORITHM_PROGRESS taskPatrolledId: {}, objectId: {}, curNumber: {}, totalNumer: {}, algorithmProgress: {}, db-taskProgress: {}" + Color.END, log.info(Color.GREEN + "DONE CALC_REMOTE_ALGORITHM_PROGRESS taskPatrolledId: {}, objectId: {}, curNumber: {}, totalNumer: {}, algorithmProgress: {}, db-taskProgress: {}" + Color.END,
taskPatrolledId, taskPatrolledId,
objectId, objectId,
@ -939,11 +938,11 @@ public class AnalyseResponseServiceImpl implements IAnalyseResponseService {
totalNumber, totalNumber,
algorithmProgress, algorithmProgress,
patrolTaskStatus.getTaskProgress()); patrolTaskStatus.getTaskProgress());
//patrolTaskStatus.setTaskProgress("100.0");
if("100.0".equals(patrolTaskStatus.getTaskProgress())) {
BigDecimal taskProgressBD = BigDecimalUtil.toBigDecimal(patrolTaskStatus.getTaskProgress());
if (taskProgressBD.compareTo(oneHundredBD) == 0) {
patrolTaskStatus.setTaskState(TaskStatus.DONE.getCode()); patrolTaskStatus.setTaskState(TaskStatus.DONE.getCode());
} }
patrolTaskStatusService.updatePatrolTaskStatus(patrolTaskStatus);
patrolTaskStatusService.updateTaskProgress(patrolTaskStatus.getLineId(), patrolTaskStatus.getTaskProgress(), patrolTaskStatus.getTaskEstimatedTime(), patrolTaskStatus.getTaskState());
} else { } else {
log.info(Color.GREEN + "RUNNING CALC_REMOTE_ALGORITHM_PROGRESS taskPatrolledId: {}, objectId: {}, curNumber: {}, totalNumer: {}, algorithmProgress: {}, status: {}" + Color.END, log.info(Color.GREEN + "RUNNING CALC_REMOTE_ALGORITHM_PROGRESS taskPatrolledId: {}, objectId: {}, curNumber: {}, totalNumer: {}, algorithmProgress: {}, status: {}" + Color.END,
taskPatrolledId, taskPatrolledId,
@ -955,7 +954,7 @@ public class AnalyseResponseServiceImpl implements IAnalyseResponseService {
if (TaskStatus.RUNNING.getCode().equals(patrolTaskStatus.getTaskState())) { if (TaskStatus.RUNNING.getCode().equals(patrolTaskStatus.getTaskState())) {
patrolTaskStatus.setTaskState(TaskStatus.RUNNING.getCode()); patrolTaskStatus.setTaskState(TaskStatus.RUNNING.getCode());
patrolTaskStatusService.updatePatrolTaskStatus(patrolTaskStatus);
patrolTaskStatusService.updateTaskProgress(patrolTaskStatus.getLineId(), patrolTaskStatus.getTaskProgress(), patrolTaskStatus.getTaskEstimatedTime(), patrolTaskStatus.getTaskState());
} }
} }
} }


+ 13
- 5
inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/service/impl/ResultAnalysisServiceImpl.java View File

@ -3,10 +3,14 @@ package com.inspect.analysis.service.impl;
import com.inspect.analysis.domain.AlgPatrolPoint; import com.inspect.analysis.domain.AlgPatrolPoint;
import com.inspect.analysis.domain.AnalyseSummaryAlarmModel; import com.inspect.analysis.domain.AnalyseSummaryAlarmModel;
import com.inspect.analysis.domain.ResultAnalysis; import com.inspect.analysis.domain.ResultAnalysis;
import com.inspect.analysis.domain.ResultAnalysisSummaryDTO;
import com.inspect.analysis.mapper.ResultAnalysisMapper; import com.inspect.analysis.mapper.ResultAnalysisMapper;
import com.inspect.analysis.service.IResultAnalysisService; import com.inspect.analysis.service.IResultAnalysisService;
import com.inspect.base.core.utils.StringUtils; import com.inspect.base.core.utils.StringUtils;
import com.inspect.partrolresult.domain.PatrolResult; import com.inspect.partrolresult.domain.PatrolResult;
import com.inspect.task.domain.PatrolData;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
@ -14,11 +18,6 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.inspect.task.domain.PatrolData;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service @Service
@Slf4j @Slf4j
public class ResultAnalysisServiceImpl implements IResultAnalysisService { public class ResultAnalysisServiceImpl implements IResultAnalysisService {
@ -103,6 +102,14 @@ public class ResultAnalysisServiceImpl implements IResultAnalysisService {
this.resultAnalysisMapper.updateResultAnalysisByCondition(analysis); this.resultAnalysisMapper.updateResultAnalysisByCondition(analysis);
} }
@Override
public List<ResultAnalysisSummaryDTO> countResultAnalysisSummary(List<String> taskPatrolledIds) {
if (taskPatrolledIds.size() == 0) {
return null;
}
return resultAnalysisMapper.countResultAnalysisSummary(taskPatrolledIds);
}
public int deleteResultAnalysisByLineIds(Long[] lineIds) { public int deleteResultAnalysisByLineIds(Long[] lineIds) {
return this.resultAnalysisMapper.deleteResultAnalysisByLineIds(lineIds); return this.resultAnalysisMapper.deleteResultAnalysisByLineIds(lineIds);
} }
@ -115,6 +122,7 @@ public class ResultAnalysisServiceImpl implements IResultAnalysisService {
return this.resultAnalysisMapper.selectTaskAbnormalData(resultAnalysis); return this.resultAnalysisMapper.selectTaskAbnormalData(resultAnalysis);
} }
@Override
public Map<String, ResultAnalysis> selectTaskAbnormalDataBatch(List<String> taskPatrolledIds) { public Map<String, ResultAnalysis> selectTaskAbnormalDataBatch(List<String> taskPatrolledIds) {
if (taskPatrolledIds == null || taskPatrolledIds.isEmpty()) { if (taskPatrolledIds == null || taskPatrolledIds.isEmpty()) {
return new HashMap<>(); return new HashMap<>();


+ 1
- 6
inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/utils/ResultAnalysisUtils.java View File

@ -66,12 +66,7 @@ public class ResultAnalysisUtils {
log.info("PARSE_ALG algType: {}, algValue: {}, value: {}, defaultDesc: {}", algType, algValue, value, defaultDesc); log.info("PARSE_ALG algType: {}, algValue: {}, value: {}, defaultDesc: {}", algType, algValue, value, defaultDesc);
// 初筛红外 // 初筛红外
if ("1".equals(resultAnalysis.getFilter()) && algType != null &&
(algType.equals("infrared") ||
algType.equals("infra_1800") ||
algType.equals("infra_yu3") ||
algType.equals("infra_camera") ||
algType.equals("infra_camera_reverse"))) {
if ("1".equals(resultAnalysis.getFilter()) && AlgConstants.ALG_INFRARED_LIST.contains(algType)) {
// 绍兴初筛红外改成正常 // 绍兴初筛红外改成正常
resultAnalysis.setResultType("1"); resultAnalysis.setResultType("1");
resultAnalysis.setPointStatus("1"); resultAnalysis.setPointStatus("1");


+ 83
- 122
inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/controller/PatrolResultController.java View File

@ -10,10 +10,11 @@ import com.inspect.base.core.constant.AlgConstants;
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;
import com.inspect.base.core.domain.DataMsg; import com.inspect.base.core.domain.DataMsg;
import com.inspect.base.core.domain.maintain.MaintainRegion;
import com.inspect.base.core.enums.StaEnum; import com.inspect.base.core.enums.StaEnum;
import com.inspect.base.core.enums.TaskStatus; import com.inspect.base.core.enums.TaskStatus;
import com.inspect.base.core.enums.TaskType;
import com.inspect.base.core.exception.ServiceException; import com.inspect.base.core.exception.ServiceException;
import com.inspect.base.core.service.SyncDataToUpstreamService;
import com.inspect.base.core.sftp.SftpClient; import com.inspect.base.core.sftp.SftpClient;
import com.inspect.base.core.sftp.SftpUploadEntity; import com.inspect.base.core.sftp.SftpUploadEntity;
import com.inspect.base.core.utils.DateUtils; import com.inspect.base.core.utils.DateUtils;
@ -26,16 +27,15 @@ import com.inspect.base.core.utils.xml.GenXmlByBean;
import com.inspect.base.core.web.controller.BaseController; import com.inspect.base.core.web.controller.BaseController;
import com.inspect.base.core.web.domain.AjaxResult; import com.inspect.base.core.web.domain.AjaxResult;
import com.inspect.base.core.web.page.TableDataInfo; import com.inspect.base.core.web.page.TableDataInfo;
import com.inspect.base.redis.service.RedisService;
import com.inspect.common.log.annotation.Log; import com.inspect.common.log.annotation.Log;
import com.inspect.common.log.enums.BizType; import com.inspect.common.log.enums.BizType;
import com.inspect.base.redis.service.RedisService;
import com.inspect.fegin.FeignMinioService; import com.inspect.fegin.FeignMinioService;
import com.inspect.fegin.MultipartFileUtils; import com.inspect.fegin.MultipartFileUtils;
import com.inspect.fegin.UploadResponse; import com.inspect.fegin.UploadResponse;
import com.inspect.infrared.InfraredImageParser; import com.inspect.infrared.InfraredImageParser;
import com.inspect.infrared.InfraredRequestParam; import com.inspect.infrared.InfraredRequestParam;
import com.inspect.infrared.InfraredResponse; import com.inspect.infrared.InfraredResponse;
import com.inspect.base.core.domain.maintain.MaintainRegion;
import com.inspect.maintain.domain.MaintainAreaXML; import com.inspect.maintain.domain.MaintainAreaXML;
import com.inspect.maintain.domain.PatrolMaintainModuleXml; import com.inspect.maintain.domain.PatrolMaintainModuleXml;
import com.inspect.maintain.service.IMaintainRegionService; import com.inspect.maintain.service.IMaintainRegionService;
@ -48,7 +48,6 @@ import com.inspect.partrolresult.mapper.DeviceStateMapper;
import com.inspect.partrolresult.mapper.PatrolResultMapper; import com.inspect.partrolresult.mapper.PatrolResultMapper;
import com.inspect.partrolresult.service.IAnalyseRequestService; import com.inspect.partrolresult.service.IAnalyseRequestService;
import com.inspect.partrolresult.service.IPatrolResultService; import com.inspect.partrolresult.service.IPatrolResultService;
import com.inspect.partrolresult.util.ImageUtil;
import com.inspect.partrolresultAux.domain.PatrolResultAux; import com.inspect.partrolresultAux.domain.PatrolResultAux;
import com.inspect.partrolresultAux.service.IPatrolResultAuxService; import com.inspect.partrolresultAux.service.IPatrolResultAuxService;
import com.inspect.resultmain.domain.PatrolTaskResultMain; import com.inspect.resultmain.domain.PatrolTaskResultMain;
@ -65,7 +64,16 @@ import com.inspect.taskftp.domain.PatrolTaskFtp;
import com.inspect.taskftp.service.IPatrolTaskFtpService; import com.inspect.taskftp.service.IPatrolTaskFtpService;
import com.inspect.taskstatus.domain.PatrolTaskStatus; import com.inspect.taskstatus.domain.PatrolTaskStatus;
import com.inspect.taskstatus.service.IPatrolTaskStatusService; import com.inspect.taskstatus.service.IPatrolTaskStatusService;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
@ -75,41 +83,20 @@ import java.net.URL;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.*;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
@RestController @RestController
@RequestMapping({"/partrolresult"}) @RequestMapping({"/partrolresult"})
public class PatrolResultController extends BaseController { public class PatrolResultController extends BaseController {
private static final ExecutorService executor = Executors.newFixedThreadPool(100); private static final ExecutorService executor = Executors.newFixedThreadPool(100);
@Resource
DeviceStateMapper deviceStateMapper;
@Resource
ResultStatistics resultStatistics;
@Value("${sftp.ip}") @Value("${sftp.ip}")
private String ip; private String ip;
@Value("${sftp.port}") @Value("${sftp.port}")
@ -120,7 +107,6 @@ public class PatrolResultController extends BaseController {
private String password; private String password;
@Value("${INTRANET_FTP_VIEW_ADDRESS}") @Value("${INTRANET_FTP_VIEW_ADDRESS}")
private String intranetFtpAddress; private String intranetFtpAddress;
@Resource @Resource
private IPatrolResultService patrolResultService; private IPatrolResultService patrolResultService;
@Resource @Resource
@ -133,14 +119,8 @@ public class PatrolResultController extends BaseController {
private IPatrolTaskStatusService patrolTaskStatusService; private IPatrolTaskStatusService patrolTaskStatusService;
@Resource @Resource
private IPatrolTaskStatusService iPatrolTaskStatusService; private IPatrolTaskStatusService iPatrolTaskStatusService;
@Resource @Resource
private IResultAnalysisService resultAnalysisService; private IResultAnalysisService resultAnalysisService;
@Resource
SyncDataToUpstreamService syncDataToUpstreamService;
@Resource
IUploadServer iUploadServer;
@Resource @Resource
private IPatrolTaskResultMainService iPatrolTaskResultMainService; private IPatrolTaskResultMainService iPatrolTaskResultMainService;
@Resource @Resource
@ -152,16 +132,11 @@ public class PatrolResultController extends BaseController {
@Resource @Resource
private SftpClient sftpClient; private SftpClient sftpClient;
@Resource @Resource
DeviceStateMapper deviceStateMapper;
@Resource
private IPatrolTaskResultMainService patrolTaskResultMainService; private IPatrolTaskResultMainService patrolTaskResultMainService;
@Resource @Resource
private IMaintainRegionService maintainRegionService; private IMaintainRegionService maintainRegionService;
@Resource @Resource
private BaseDataClient baseDataClient; private BaseDataClient baseDataClient;
@Resource
ResultStatistics resultStatistics;
@Resource @Resource
private PatrolResultMapper patrolResultMapper; private PatrolResultMapper patrolResultMapper;
@ -1143,7 +1118,7 @@ public class PatrolResultController extends BaseController {
} catch (Exception e) { } catch (Exception e) {
logger.error("error", e); logger.error("error", e);
} }
PatrolTask patrolTaskDb = patrolTaskListOfDb.get(0);
if (StringUtils.isNotEmpty(patrolTaskStatusItem.getTaskPatrolledId())) { if (StringUtils.isNotEmpty(patrolTaskStatusItem.getTaskPatrolledId())) {
String str = ""; String str = "";
@ -1166,21 +1141,13 @@ public class PatrolResultController extends BaseController {
if (!patrolTaskStatusList.isEmpty()) { if (!patrolTaskStatusList.isEmpty()) {
PatrolTaskStatus patrolTaskStatusOfDb = patrolTaskStatusList.get(0); PatrolTaskStatus patrolTaskStatusOfDb = patrolTaskStatusList.get(0);
// 除了db非完成或终止或暂停状态当db状态与上报状态不一致时更新db状态 // 除了db非完成或终止或暂停状态当db状态与上报状态不一致时更新db状态
// sendCode.isEmpty为摄像机
if (!Arrays.asList(TaskStatus.DONE.getCode(), TaskStatus.HALTED.getCode()).contains(patrolTaskStatusOfDb.getTaskState()) if (!Arrays.asList(TaskStatus.DONE.getCode(), TaskStatus.HALTED.getCode()).contains(patrolTaskStatusOfDb.getTaskState())
&& !patrolTaskStatusItem.getTaskState().equals(TaskStatus.DONE.getCode())
&& !patrolTaskStatusOfDb.getTaskState().equals(patrolTaskStatusItem.getTaskState())
&& !sendCode.isEmpty()
&& !Arrays.asList(TaskStatus.DONE.getCode(),patrolTaskStatusOfDb.getTaskState()).contains(patrolTaskStatusItem.getTaskState())
&& !sendCode.equals("摄像头")
) { ) {
logger.info("GET_INFO_41 UPDATE TASK_STATE old: {} TO new: {}", patrolTaskStatusOfDb.getTaskState(), patrolTaskStatusItem.getTaskState()); logger.info("GET_INFO_41 UPDATE TASK_STATE old: {} TO new: {}", patrolTaskStatusOfDb.getTaskState(), patrolTaskStatusItem.getTaskState());
patrolTaskStatusOfDb.setTaskState(patrolTaskStatusItem.getTaskState()); patrolTaskStatusOfDb.setTaskState(patrolTaskStatusItem.getTaskState());
// 如果上报状态为终止或超期限制状态时需更新终止时间
if(patrolTaskStatusItem.getTaskState().equals(TaskStatus.HALTED.getCode())|| patrolTaskStatusItem.getTaskState().equals(TaskStatus.EXPIRED.getCode())) {
String endTime = DateUtils.parseDateToStr(DateUtils.yyyyMMddHHmmss2, new Date());
patrolTaskStatusItem.setEndTime(endTime);
patrolTaskStatusOfDb.setEndTime(endTime);
}
iPatrolTaskStatusService.updatePatrolTaskStatusOfTaskState(patrolTaskStatusOfDb);
iPatrolTaskStatusService.updateTaskProgress(patrolTaskStatusOfDb.getLineId(), patrolTaskStatusOfDb.getTaskProgress(), null, patrolTaskStatusOfDb.getTaskState());
} }
double runProgress = 0.0; double runProgress = 0.0;
double dbProgress = 0.0; double dbProgress = 0.0;
@ -1214,9 +1181,6 @@ public class PatrolResultController extends BaseController {
calProgressInDb); calProgressInDb);
if (runProgress > dbProgress) { if (runProgress > dbProgress) {
patrolTaskStatusItem.setLineId(patrolTaskStatusOfDb.getLineId()); patrolTaskStatusItem.setLineId(patrolTaskStatusOfDb.getLineId());
if (patrolTaskStatusItem.getTaskName().contains("联合") && !patrolTaskStatusItem.getTaskName().startsWith(sendCode)) {
patrolTaskStatusItem.setTaskName(sendCode + "-" + patrolTaskStatusItem.getTaskName());
}
logger.info(Color.CYAN + "updating patrol_task_status taskPatrolledId: {}, progress: {}, taskState: {}" + Color.END, logger.info(Color.CYAN + "updating patrol_task_status taskPatrolledId: {}, progress: {}, taskState: {}" + Color.END,
patrolTaskStatusItem.getTaskPatrolledId(), patrolTaskStatusItem.getTaskPatrolledId(),
runProgress, runProgress,
@ -1240,14 +1204,12 @@ public class PatrolResultController extends BaseController {
RedisConst.TASK_CURRENT_CODE + patrolTaskStatusItem.getTaskCode()); RedisConst.TASK_CURRENT_CODE + patrolTaskStatusItem.getTaskCode());
PatrolTaskStatus taskStatus = statusList.get(0); PatrolTaskStatus taskStatus = statusList.get(0);
taskStatus.setTaskProgress(String.valueOf(runProgress)); taskStatus.setTaskProgress(String.valueOf(runProgress));
iPatrolTaskStatusService.updatePatrolTaskStatusOfTaskProgress(taskStatus);
// 仅当智巡进度100%+算法进度100%才更新任务状态为完成 // 仅当智巡进度100%+算法进度100%才更新任务状态为完成
if ("100.0".equals(calProgressInDb)) { if ("100.0".equals(calProgressInDb)) {
logger.info("!!!!!!!!!!!!!!!!!! set task_status done!!!"); logger.info("!!!!!!!!!!!!!!!!!! set task_status done!!!");
taskStatus.setTaskState(TaskStatus.DONE.getCode()); taskStatus.setTaskState(TaskStatus.DONE.getCode());
iPatrolTaskStatusService.updatePatrolTaskStatusOfTaskState(taskStatus);
} }
redisService.deleteObjectOfTask(RedisConst.TASK_CURRENT_CODE, taskStatus.getTaskCode());
iPatrolTaskStatusService.updateTaskProgress(taskStatus.getLineId(), taskStatus.getTaskProgress(), null, taskStatus.getTaskState());
} }
} else { } else {
List<PatrolTaskStatus> statusList = patrolTaskStatusService.selectPatrolTaskStatusList(PatrolTaskStatus.builder().taskPatrolledId(patrolTaskStatusItem.getTaskPatrolledId()).build()); List<PatrolTaskStatus> statusList = patrolTaskStatusService.selectPatrolTaskStatusList(PatrolTaskStatus.builder().taskPatrolledId(patrolTaskStatusItem.getTaskPatrolledId()).build());
@ -1263,7 +1225,7 @@ public class PatrolResultController extends BaseController {
patrolTaskStatusOfDb.getTaskEstimatedTime()); patrolTaskStatusOfDb.getTaskEstimatedTime());
patrolTaskStatusItem.setTaskState(TaskStatus.RUNNING.getCode()); patrolTaskStatusItem.setTaskState(TaskStatus.RUNNING.getCode());
patrolTaskStatusItem.setTaskProgress(String.valueOf(runProgress)); patrolTaskStatusItem.setTaskProgress(String.valueOf(runProgress));
i = iPatrolTaskStatusService.updatePatrolTaskStatusRunning(patrolTaskStatusItem);
iPatrolTaskStatusService.updateTaskProgress(patrolTaskStatusItem.getLineId(), patrolTaskStatusItem.getTaskProgress(), null, patrolTaskStatusItem.getTaskState());
} }
} }
} }
@ -1283,10 +1245,45 @@ public class PatrolResultController extends BaseController {
patrolTaskStatusItem.setCreateTime(new Date()); patrolTaskStatusItem.setCreateTime(new Date());
patrolTaskStatusItem.setStartTime(new Date()); patrolTaskStatusItem.setStartTime(new Date());
patrolTaskStatusItem.setTaskEstimatedTime(""); patrolTaskStatusItem.setTaskEstimatedTime("");
if (patrolTaskStatusItem.getTaskName().contains("联合") && !patrolTaskStatusItem.getTaskName().startsWith(sendCode)) {
patrolTaskStatusItem.setTaskName(sendCode + "-" + patrolTaskStatusItem.getTaskName());
patrolTaskStatusItem.setTaskType(TaskType.ORDINARY.getCode());
String devType = patrolTaskDb.getDevType();
String taskCode = patrolTaskDb.getTaskCode();
String[] devTypeArray = Arrays.stream(devType.split(",")).distinct().toArray(String[]::new);
// note 任务包含多个设备类型则为联合任务
if (devTypeArray.length > 1) {
// 当taskCode为多设备且redis中正在执行该taskCode的任务时新增或ignore主任务
final String taskCurrentCode = redisService.getCacheObjectOfTask(RedisConst.TASK_CURRENT_CODE, taskCode);
logger.info(Color.CYAN + "task is union task, taskCode: {}, devType: {}, taskCurrentCode: {}" + Color.END, taskCode, devType, taskCurrentCode);
if (StringUtils.isNotEmpty(taskCurrentCode)) {
String execTime = taskCurrentCode.substring(taskCurrentCode.lastIndexOf("@") + 1);
String taskPatrolledId = taskCode + "_" + execTime + "_uni";
PatrolTaskStatus patrolTaskStatusMain = PatrolTaskStatus.builder()
.createTime(patrolTaskStatusItem.getCreateTime())
.startTime(patrolTaskStatusItem.getStartTime())
.taskPatrolledId(taskPatrolledId)
.taskCode(taskCode)
.posType("-1")
.taskState(TaskStatus.RUNNING.getCode())
.taskName(patrolTaskDb.getTaskName())
.taskProgress("0")
.taskEstimatedTime("0")
.taskType(TaskType.MAIN.getCode())
.build();
patrolTaskStatusItem.setTaskName(sendCode + "@" + patrolTaskStatusItem.getTaskName());
patrolTaskStatusItem.setMainId(patrolTaskStatusMain.getTaskPatrolledId());
patrolTaskStatusItem.setTaskType(TaskType.SUB.getCode());
int row = iPatrolTaskStatusService.insertIgnorePatrolTaskStatus(patrolTaskStatusMain);
if (row > 0) {
logger.info("主任务{}, patrolTaskStatusMain: {} 插入成功", patrolTaskStatusMain.getLineId(), patrolTaskStatusMain);
} else {
logger.info("主任务{}, taskPatrolledId: {} 已存在,忽略", patrolTaskStatusMain.getLineId(), patrolTaskStatusMain.getTaskPatrolledId());
}
}
} }
// 普通任务或子任务
i = iPatrolTaskStatusService.insertPatrolTaskStatus(patrolTaskStatusItem); i = iPatrolTaskStatusService.insertPatrolTaskStatus(patrolTaskStatusItem);
} }
} }
@ -1406,64 +1403,26 @@ public class PatrolResultController extends BaseController {
// } // }
// } // }
} }
List<PatrolTask> tasks = patrolTaskService.selectPatrolTaskList(PatrolTask.builder().taskCode(code).build()); List<PatrolTask> tasks = patrolTaskService.selectPatrolTaskList(PatrolTask.builder().taskCode(code).build());
String datetype; String datetype;
if (!tasks.isEmpty()) {
PatrolTaskResultMain taskResultMain = new PatrolTaskResultMain();
taskResultMain.setTaskId(String.valueOf(tasks.get(0).getTaskId()));
taskResultMain.setTaskPatrolledId(patrolResultList.get(0).getTaskPatrolledId());
logger.info("taskResultMain: {}", taskResultMain);
List<PatrolTaskResultMain> patrolTaskResultMainList = iPatrolTaskResultMainService.selectPatrolTaskResultMainList(taskResultMain);
if (!patrolTaskResultMainList.isEmpty()) {
mainID = patrolTaskResultMainList.get(0).getLineId().intValue();
logger.info("exist PatrolTaskResultMain Id: {}", mainID);
} else {
PatrolTaskResultMain patrolTaskResultMain = new PatrolTaskResultMain();
patrolTaskResultMain.setTaskId(String.valueOf(tasks.get(0).getTaskId()));
patrolTaskResultMain.setCreateBy("admin");
patrolTaskResultMain.setCreateTime(new Date());
if (StringUtils.isNotEmpty(tasks.get(0).getAreaName())) {
patrolTaskResultMain.setAreaName(tasks.get(0).getAreaName());
}
patrolTaskResultMain.setFileStatus("0");
patrolTaskResultMain.setTaskPatrolledId(patrolResultList.get(0).getTaskPatrolledId());
int devCount = tasks.get(0).getDevNo().split(StringUtils.COMMA).length;
if (devCount > 1) {
PatrolTaskResultMain resultMainQuery = new PatrolTaskResultMain();
resultMainQuery.setTaskId(String.valueOf(tasks.get(0).getTaskId()));
//select unified_task_patrolled_id from patrol_task_result_main where task_id = #{taskId} and file_status = 0 and (now() - create_time) &lt;= 120 ORDER BY line_id desc limit 1
String unifiedTaskPatrolledId = iPatrolTaskResultMainService.selectUnifiedTaskPatrolledId(resultMainQuery);
if (unifiedTaskPatrolledId != null) {
patrolTaskResultMain.setUnifiedTaskPatrolledId(unifiedTaskPatrolledId);
} else {
patrolTaskResultMain.setUnifiedTaskPatrolledId(taskResultMain.getTaskId() + "_" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()));
}
} else {
patrolTaskResultMain.setUnifiedTaskPatrolledId(taskResultMain.getTaskId() + "_" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()));
}
patrolTaskResultMain.setTaskCode(tasks.get(0).getTaskCode());
patrolTaskResultMain.setTaskName(tasks.get(0).getTaskName());
patrolTaskResultMain.setTaskType(tasks.get(0).getType());
patrolTaskResultMain.setTaskTime(tasks.get(0).getCreateTime());
if (StringUtils.isNotEmpty(tasks.get(0).getAreaId())) {
Map<String, String> map = patrolResultService.selectAreaByAudit(tasks.get(0).getAreaId());
if (map != null && map.get("area_name") != null) {
patrolTaskResultMain.setIntervalName(map.get("area_name"));
}
}
datetype = toDevType(patrolDeviceCodeList);
if (StringUtils.isNotEmpty(datetype)) {
patrolTaskResultMain.setDevType(datetype);
} else {
patrolTaskResultMain.setDevType(tasks.get(0).getDevType());
}
mainID = iPatrolTaskResultMainService.insertPatrolTaskResultMain(patrolTaskResultMain);//
logger.info("insert PatrolTaskResultMain Id: {}", mainID);
}
// 创建巡视归档记录taskMain
PatrolTaskStatus mainTaskStatus = iPatrolTaskStatusService.selectPatrolTaskStatusMain(patrolResultList.get(0).getTaskPatrolledId());
logger.info("mainTaskStatus: {}", mainTaskStatus);
if (mainTaskStatus == null) {
logger.info("GET_INFO_61 ROBOT_TASK_STATUS CODE {} NO EXIST, SKIP IT!", patrolResultList.get(0).getTaskCode());
return toAjax(i);
}
PatrolTaskResultMain taskResultMain = new PatrolTaskResultMain();
taskResultMain.setTaskId(String.valueOf(tasks.get(0).getTaskId()));
taskResultMain.setTaskPatrolledId(mainTaskStatus.getTaskPatrolledId());
logger.info("taskResultMain: {}", taskResultMain);
List<PatrolTaskResultMain> patrolTaskResultMainList = iPatrolTaskResultMainService.selectPatrolTaskResultMainList(taskResultMain);
if (!patrolTaskResultMainList.isEmpty()) {
mainID = patrolTaskResultMainList.get(0).getLineId().intValue();
logger.info("exist PatrolTaskResultMain Id: {}", mainID);
} else {
mainID = iPatrolTaskStatusService.generateTaskResultMain(mainTaskStatus);
logger.info("insert PatrolTaskResultMain Id: {}", mainID);
} }
List<PatrolResult> algrithomPatrolResultList = new ArrayList<>(); List<PatrolResult> algrithomPatrolResultList = new ArrayList<>();
@ -1671,11 +1630,13 @@ public class PatrolResultController extends BaseController {
if (!algrithomPatrolResultList.isEmpty()) { if (!algrithomPatrolResultList.isEmpty()) {
logger.info(Color.CYAN + "+++++++ callAlgorithm start +++++++" + Color.END); logger.info(Color.CYAN + "+++++++ callAlgorithm start +++++++" + Color.END);
// 非摄像头的设备任务需要从数据库统计执行点位数量
if (jsonRootBean.getTotalNumber() == null && !tasks.isEmpty()) { if (jsonRootBean.getTotalNumber() == null && !tasks.isEmpty()) {
logger.info("jsonRootBean.getTotalNumber not NULL: {}", algrithomPatrolResultList); logger.info("jsonRootBean.getTotalNumber not NULL: {}", algrithomPatrolResultList);
String taskId = String.valueOf(tasks.get(0).getTaskId()); String taskId = String.valueOf(tasks.get(0).getTaskId());
logger.info("taskId: {}", taskId);
List<String> algList = patrolResultMapper.selectAlgList(taskId);
logger.info("taskId: {}, sendCode: {}", taskId, sendCode);
// 获取设备标识以便统计执行点位数量
List<String> algList = patrolResultMapper.selectAlgList(taskId, sendCode, null);
logger.info("algList: {}", algList.toString()); logger.info("algList: {}", algList.toString());
int algCount = 0; int algCount = 0;
for (String alg : algList) { for (String alg : algList) {


+ 2
- 1
inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/mapper/PatrolResultMapper.java View File

@ -118,6 +118,7 @@ public interface PatrolResultMapper {
Map<String, String> selectDeviceNameById(BasePointAreaInfo basePointAreaInfo); Map<String, String> selectDeviceNameById(BasePointAreaInfo basePointAreaInfo);
List<String> selectAlgList(String taskId);
List<String> selectAlgList(@Param("taskId") String taskId, @Param("sendCode") String sendCode, @Param("devType") String devType);
List<PatrolData> selectPatrolDataResultByTaskCodeV3(ResultAnalysis resultAnalysis);
} }

+ 62
- 55
inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/service/impl/PatrolResultServiceImpl.java View File

@ -8,6 +8,7 @@ import com.inspect.analysis.domain.AnalyseResPoint;
import com.inspect.analysis.domain.ResultAnalysis; import com.inspect.analysis.domain.ResultAnalysis;
import com.inspect.analysis.mapper.ResultAnalysisMapper; import com.inspect.analysis.mapper.ResultAnalysisMapper;
import com.inspect.base.core.constant.AlgConstants; import com.inspect.base.core.constant.AlgConstants;
import com.inspect.base.core.enums.TaskType;
import com.inspect.base.core.exception.ServiceException; import com.inspect.base.core.exception.ServiceException;
import com.inspect.base.core.utils.DateUtils; import com.inspect.base.core.utils.DateUtils;
import com.inspect.base.core.utils.StringUtils; import com.inspect.base.core.utils.StringUtils;
@ -34,11 +35,6 @@ import com.inspect.task.domain.PatrolTask;
import com.inspect.task.mapper.PatrolTaskMapper; import com.inspect.task.mapper.PatrolTaskMapper;
import com.inspect.taskstatus.domain.PatrolTaskStatus; import com.inspect.taskstatus.domain.PatrolTaskStatus;
import com.inspect.taskstatus.mapper.PatrolTaskStatusMapper; import com.inspect.taskstatus.mapper.PatrolTaskStatusMapper;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
import io.seata.common.util.CollectionUtils; import io.seata.common.util.CollectionUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -48,20 +44,25 @@ import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@Service @Service
@RefreshScope @RefreshScope
public class PatrolResultServiceImpl implements IPatrolResultService { public class PatrolResultServiceImpl implements IPatrolResultService {
private static final Logger log = LoggerFactory.getLogger(PatrolResultServiceImpl.class); private static final Logger log = LoggerFactory.getLogger(PatrolResultServiceImpl.class);
@Value("${inspect.task.report.voltage:±800kv}")
private String voltage;
@Value("${inspect.task.report.all:0}")
private String exportReportFlag;
private final PatrolResultMapper patrolResultMapper;
private static final Set<String> validAlgTypes = new HashSet<>(Arrays.asList(
AlgConstants.METER,
AlgConstants.XB,
AlgConstants.INFRA_1800,
AlgConstants.INFRA_YU3,
AlgConstants.INFRA_CAMERA,
AlgConstants.INFRA_CAMERA_REVERSE
));
final final
PatrolResultDefaultValueMapper patrolResultDefaultvalueMapper; PatrolResultDefaultValueMapper patrolResultDefaultvalueMapper;
private final PatrolResultMapper patrolResultMapper;
private final PatrolTaskResultMainMapper patrolTaskResultMainMapper; private final PatrolTaskResultMainMapper patrolTaskResultMainMapper;
private final PatrolTaskStatusMapper patrolTaskStatusMapper; private final PatrolTaskStatusMapper patrolTaskStatusMapper;
private final PatrolTaskMapper patrolTaskMapper; private final PatrolTaskMapper patrolTaskMapper;
@ -69,20 +70,14 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
private final InspectionReportImgMapper inspectionReportImgMapper; private final InspectionReportImgMapper inspectionReportImgMapper;
private final InspectionReportDataMapper inspectionReportDataMapper; private final InspectionReportDataMapper inspectionReportDataMapper;
private final ResultAnalysisMapper resultAnalysisMapper; private final ResultAnalysisMapper resultAnalysisMapper;
private final FeignBasedataAreaService feignBasedataAreaService; private final FeignBasedataAreaService feignBasedataAreaService;
@Value("${inspect.task.report.voltage:±800kv}")
private String voltage;
@Value("${inspect.task.report.all:0}")
private String exportReportFlag;
@Autowired @Autowired
private MessageUtils messageUtils; private MessageUtils messageUtils;
private static final Set<String> validAlgTypes = new HashSet<>(Arrays.asList(
AlgConstants.METER,
AlgConstants.XB,
AlgConstants.INFRA_1800,
AlgConstants.INFRA_YU3,
AlgConstants.INFRA_CAMERA,
AlgConstants.INFRA_CAMERA_REVERSE
));;
;
public PatrolResultServiceImpl(PatrolResultMapper patrolResultMapper, PatrolResultDefaultValueMapper patrolResultDefaultvalueMapper, PatrolTaskResultMainMapper patrolTaskResultMainMapper, PatrolTaskStatusMapper patrolTaskStatusMapper, PatrolTaskMapper patrolTaskMapper, InspectionReportMapper inspectionReportMapper, InspectionReportImgMapper inspectionReportImgMapper, InspectionReportDataMapper inspectionReportDataMapper, ResultAnalysisMapper resultAnalysisMapper, FeignBasedataAreaService feignBasedataAreaService) { public PatrolResultServiceImpl(PatrolResultMapper patrolResultMapper, PatrolResultDefaultValueMapper patrolResultDefaultvalueMapper, PatrolTaskResultMainMapper patrolTaskResultMainMapper, PatrolTaskStatusMapper patrolTaskStatusMapper, PatrolTaskMapper patrolTaskMapper, InspectionReportMapper inspectionReportMapper, InspectionReportImgMapper inspectionReportImgMapper, InspectionReportDataMapper inspectionReportDataMapper, ResultAnalysisMapper resultAnalysisMapper, FeignBasedataAreaService feignBasedataAreaService) {
this.patrolResultMapper = patrolResultMapper; this.patrolResultMapper = patrolResultMapper;
@ -130,11 +125,21 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
return patrolResultMapper.selectPatrolDataResultByTaskCode(patrolResult); return patrolResultMapper.selectPatrolDataResultByTaskCode(patrolResult);
} }
@Override
public List<PatrolData> selectPatrolDataResultByTaskCodeV2(ResultAnalysis resultAnalysis) { public List<PatrolData> selectPatrolDataResultByTaskCodeV2(ResultAnalysis resultAnalysis) {
return this.patrolResultMapper.selectPatrolDataResultByTaskCodeV2(resultAnalysis);
PatrolTaskStatus patrolTaskStatus = patrolTaskStatusMapper.selectPatrolTaskStatusByTaskPatrolledId(resultAnalysis.getTaskPatrolId());
if (patrolTaskStatus != null) {
if (patrolTaskStatus.getTaskType().equals(TaskType.MAIN.getCode())) {
List<String> taskPatrolIds = patrolTaskStatus.getChildren().stream().map(PatrolTaskStatus::getTaskPatrolledId).collect(Collectors.toList());
resultAnalysis.setTaskPatrolIds(taskPatrolIds);
} else {
resultAnalysis.setTaskPatrolIds(Collections.singletonList(patrolTaskStatus.getTaskPatrolledId()));
}
}
log.info("---------------[TASK] query resultAnalysis {}", resultAnalysis);
return this.patrolResultMapper.selectPatrolDataResultByTaskCodeV3(resultAnalysis);
} }
public List<PatrolData> selectPatrolDataResultByTaskCodeList(PatrolTaskStatus patrolTaskStatus) { public List<PatrolData> selectPatrolDataResultByTaskCodeList(PatrolTaskStatus patrolTaskStatus) {
return patrolResultMapper.selectPatrolDataResultByTaskCodeList(patrolTaskStatus); return patrolResultMapper.selectPatrolDataResultByTaskCodeList(patrolTaskStatus);
} }
@ -366,7 +371,6 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
// return saveReportData(resultList, resultMain, lineIds); // return saveReportData(resultList, resultMain, lineIds);
} }
@Transactional @Transactional
public List<Long> saveReportLingzhou_v2(PatrolTaskResultMain resultMain, List<Long> lineIds, Long currentLineId, List<PatrolResult> resultList) { public List<Long> saveReportLingzhou_v2(PatrolTaskResultMain resultMain, List<Long> lineIds, Long currentLineId, List<PatrolResult> resultList) {
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
@ -504,6 +508,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
@Transactional @Transactional
public List<Long> saveReportShaoxing(PatrolTaskResultMain resultMain, List<Long> lineIds, List<PatrolResult> resultList) { public List<Long> saveReportShaoxing(PatrolTaskResultMain resultMain, List<Long> lineIds, List<PatrolResult> resultList) {
log.info("saveReportShaoxing PatrolTaskResultMain:{},lineIds:{},resultList:{} ", resultMain, lineIds, resultList);
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
List<Long> reportIds = new ArrayList<>(); List<Long> reportIds = new ArrayList<>();
// 获取站信息 // 获取站信息
@ -536,6 +541,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
List<String> taskNames = resultList.stream().map(PatrolResult::getTaskName).distinct().collect(Collectors.toList()); List<String> taskNames = resultList.stream().map(PatrolResult::getTaskName).distinct().collect(Collectors.toList());
String taskName = StringUtils.join(taskNames, ","); String taskName = StringUtils.join(taskNames, ",");
boolean isMultipleTasks = CollectionUtils.isNotEmpty(taskPatrolledIds) && taskPatrolledIds.size() > 1; boolean isMultipleTasks = CollectionUtils.isNotEmpty(taskPatrolledIds) && taskPatrolledIds.size() > 1;
// todo 多任务判断有问题
if (isMultipleTasks) { if (isMultipleTasks) {
// 说明多个任务合并任务名称修改为巡视日期-巡视报告 例如2026年3月23日-巡视报告 // 说明多个任务合并任务名称修改为巡视日期-巡视报告 例如2026年3月23日-巡视报告
Date date = CollectionUtils.isNotEmpty(startTimes) ? startTimes.get(0) : new Date(); Date date = CollectionUtils.isNotEmpty(startTimes) ? startTimes.get(0) : new Date();
@ -713,11 +719,13 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
resultMain.setCheckTime(new Date()); resultMain.setCheckTime(new Date());
resultMain.setFileStatus("1"); resultMain.setFileStatus("1");
String mainId = String.valueOf(resultMain.getLineId()); String mainId = String.valueOf(resultMain.getLineId());
// 查询当前的结果信息 // 查询当前的结果信息
PatrolResult patrolResult = resultList.stream().filter(item -> mainId.equals(item.getMainId())).findFirst().orElse(null); PatrolResult patrolResult = resultList.stream().filter(item -> mainId.equals(item.getMainId())).findFirst().orElse(null);
assert patrolResult != null; assert patrolResult != null;
String taskCode = patrolResult.getTaskCode(); String taskCode = patrolResult.getTaskCode();
String taskPatrolId = patrolResult.getTaskPatrolledId();
PatrolTaskResultMain main = patrolTaskResultMainMapper.selectPatrolTaskResultMainByLineId(lineId);
String taskPatrolId = main.getTaskPatrolledId();
if (StringUtils.isEmpty(taskPatrolId)) { if (StringUtils.isEmpty(taskPatrolId)) {
throw new ServiceException("LACK PLAN ID: " + mainId); throw new ServiceException("LACK PLAN ID: " + mainId);
} else { } else {
@ -922,7 +930,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
if ("0".equals(exportReportFlag) && aiQxNum == 0 && csQxNum == 0) { if ("0".equals(exportReportFlag) && aiQxNum == 0 && csQxNum == 0) {
continue; continue;
} }
Map<String,PatrolResultRef> keyPatrolResultRef = new HashMap<>();
Map<String, PatrolResultRef> keyPatrolResultRef = new HashMap<>();
List<PatrolResultRef> patrolResultRefs = patrolResultMapper.selectResultRefByLineIds(lineIds, "0"); List<PatrolResultRef> patrolResultRefs = patrolResultMapper.selectResultRefByLineIds(lineIds, "0");
List<PatrolResultRef> patrolResultRefsFilter = patrolResultMapper.selectResultRefByLineIds(lineIds, "1"); List<PatrolResultRef> patrolResultRefsFilter = patrolResultMapper.selectResultRefByLineIds(lineIds, "1");
for (PatrolResultRef AIRef : patrolResultRefs) { for (PatrolResultRef AIRef : patrolResultRefs) {
@ -940,7 +948,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
report.setInspectionStartTime(startTimes.get(0)); report.setInspectionStartTime(startTimes.get(0));
report.setInspectionEndTime(DateUtils.parseDate(endTimes.get(endTimes.size() - 1))); report.setInspectionEndTime(DateUtils.parseDate(endTimes.get(endTimes.size() - 1)));
report.setTaskId(String.valueOf(task.getTaskId())); report.setTaskId(String.valueOf(task.getTaskId()));
report.setEnvInfo(StringUtils.join(envoList,","));
report.setEnvInfo(StringUtils.join(envoList, ","));
report.setTaskPatrolledId(taskPatrolId); report.setTaskPatrolledId(taskPatrolId);
report.setInspectionTaskName(taskName); report.setInspectionTaskName(taskName);
report.setDescription(resultMain.getTaskResult()); report.setDescription(resultMain.getTaskResult());
@ -973,18 +981,18 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
String AiNum = statisticsAnalyseNumV2(mainId, "0"); String AiNum = statisticsAnalyseNumV2(mainId, "0");
String[] nums = new String[]{AiNum, filterNum}; String[] nums = new String[]{AiNum, filterNum};
startTime = PrintUtil.useTime("统计分析数据", startTime); startTime = PrintUtil.useTime("统计分析数据", startTime);
if(resultList.isEmpty()) {
if (resultList.isEmpty()) {
throw new ServiceException("缺少巡检结果:" + mainId); throw new ServiceException("缺少巡检结果:" + mainId);
} else { } else {
PatrolResult patrolResult = resultList.get(0); PatrolResult patrolResult = resultList.get(0);
String taskCode = patrolResult.getTaskCode(); String taskCode = patrolResult.getTaskCode();
String taskPatrolId = patrolResult.getTaskPatrolledId(); String taskPatrolId = patrolResult.getTaskPatrolledId();
if(StringUtils.isEmpty(taskPatrolId)) {
if (StringUtils.isEmpty(taskPatrolId)) {
throw new ServiceException("缺少执行ID:" + mainId); throw new ServiceException("缺少执行ID:" + mainId);
} else { } else {
List<PatrolTaskStatus> taskStatuses = this.patrolTaskStatusMapper.selectPatrolTaskStatusList(new PatrolTaskStatus(taskPatrolId)); List<PatrolTaskStatus> taskStatuses = this.patrolTaskStatusMapper.selectPatrolTaskStatusList(new PatrolTaskStatus(taskPatrolId));
startTime = PrintUtil.useTime("查询状态数据", startTime); startTime = PrintUtil.useTime("查询状态数据", startTime);
if(taskStatuses.isEmpty()) {
if (taskStatuses.isEmpty()) {
throw new ServiceException("缺少状态数据:" + mainId); throw new ServiceException("缺少状态数据:" + mainId);
} else { } else {
PatrolTaskStatus taskStatus = taskStatuses.get(0); PatrolTaskStatus taskStatus = taskStatuses.get(0);
@ -992,7 +1000,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
patrolTask.setTaskCode(taskCode); patrolTask.setTaskCode(taskCode);
List<PatrolTask> list = this.patrolTaskMapper.selectPatrolTaskList(patrolTask); List<PatrolTask> list = this.patrolTaskMapper.selectPatrolTaskList(patrolTask);
startTime = PrintUtil.useTime("查询任务计划", startTime); startTime = PrintUtil.useTime("查询任务计划", startTime);
if(list.isEmpty()) {
if (list.isEmpty()) {
throw new ServiceException("任务计划丢失:" + taskCode); throw new ServiceException("任务计划丢失:" + taskCode);
} else { } else {
PatrolTask task = list.get(0); PatrolTask task = list.get(0);
@ -1005,31 +1013,31 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
ResultAnalysis ras = resultAnalysisMapper.selectTaskAbnormalData(resultAnalysis); ResultAnalysis ras = resultAnalysisMapper.selectTaskAbnormalData(resultAnalysis);
int ii = 0; int ii = 0;
int iii = 0; int iii = 0;
if(0 == ras.getCsQxNum()) {
if (0 == ras.getCsQxNum()) {
ras.setFilter("0"); ras.setFilter("0");
ii = 0; ii = 0;
iii = 0; iii = 0;
} }
if(0 == ras.getAiQxNum()) {
if (0 == ras.getAiQxNum()) {
ras.setFilter("1"); ras.setFilter("1");
ii = 0; ii = 0;
iii = 1; iii = 1;
} }
if(0 != ras.getCsQxNum() && 0 != ras.getAiQxNum()) {
if (0 != ras.getCsQxNum() && 0 != ras.getAiQxNum()) {
ras.setFilter("2"); ras.setFilter("2");
ii = 2; ii = 2;
} }
Long[] ids = new Long[ii]; Long[] ids = new Long[ii];
List list1 = new ArrayList<>(); List list1 = new ArrayList<>();
for(int i = 0; i < 2; ++i) {
if(0 != ras.getCsQxNum() && 0 != ras.getAiQxNum()) {
for (int i = 0; i < 2; ++i) {
if (0 != ras.getCsQxNum() && 0 != ras.getAiQxNum()) {
iii = i; iii = i;
} }
if(i != Integer.parseInt(ras.getFilter())) {
if (i != Integer.parseInt(ras.getFilter())) {
InspectionReport report = new InspectionReport(); InspectionReport report = new InspectionReport();
resetReport(report, nums[iii], mainId, task, taskStatus); resetReport(report, nums[iii], mainId, task, taskStatus);
report.setFilter(iii + ""); report.setFilter(iii + "");
@ -1056,6 +1064,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
} }
} }
} }
private void resetReport(InspectionReport report, String analyseNum, String mainId, PatrolTask task, PatrolTaskStatus taskStatus) { private void resetReport(InspectionReport report, String analyseNum, String mainId, PatrolTask task, PatrolTaskStatus taskStatus) {
report.setPatrolStatistics(analyseNum); report.setPatrolStatistics(analyseNum);
//report.setInspectionDate(task.getCreateTime()); //report.setInspectionDate(task.getCreateTime());
@ -1071,7 +1080,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
// List<PatrolResultRef> patrolResultRefs = patrolResultMapper.selectResultRefByLineId(mainId); // List<PatrolResultRef> patrolResultRefs = patrolResultMapper.selectResultRefByLineId(mainId);
// List<PatrolResultRef> patrolResultRefs = patrolResultMapper.selectResultRefByLineIds(mainIds, filter); // List<PatrolResultRef> patrolResultRefs = patrolResultMapper.selectResultRefByLineIds(mainIds, filter);
if ("0".equals(exportReportFlag)) { if ("0".equals(exportReportFlag)) {
List <PatrolResultRef> resultRefs = new ArrayList<>();
List<PatrolResultRef> resultRefs = new ArrayList<>();
// 只导出缺陷 // 只导出缺陷
patrolResultRefs = patrolResultRefs.stream().filter((item) -> "0".equals(item.getResultType())).collect(Collectors.toList()); patrolResultRefs = patrolResultRefs.stream().filter((item) -> "0".equals(item.getResultType())).collect(Collectors.toList());
// 分组按点位ID和算法类型进行分组 // 分组按点位ID和算法类型进行分组
@ -1148,7 +1157,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
} }
reportData.setAlgName(patrolResultRef.getAlgName()); reportData.setAlgName(patrolResultRef.getAlgName());
String threshold = patrolResultRef.getThreshold(); String threshold = patrolResultRef.getThreshold();
if(StringUtils.isBlank(threshold)) {
if (StringUtils.isBlank(threshold)) {
threshold = ""; threshold = "";
} }
if ("1".equals(patrolResultRef.getResultType()) && threshold.contains("sub_53")) { if ("1".equals(patrolResultRef.getResultType()) && threshold.contains("sub_53")) {
@ -1182,7 +1191,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
// ++okNum; // ++okNum;
// } // }
log.info("[RESULT] resultType: {}, patrolResultRef: {}", resultType, patrolResultRef); log.info("[RESULT] resultType: {}, patrolResultRef: {}", resultType, patrolResultRef);
if(resultType == null) {
if (resultType == null) {
continue; continue;
} else if (resultType.equals("0")) { } else if (resultType.equals("0")) {
reportData.setPointStatus(messageUtils.get("缺陷")); reportData.setPointStatus(messageUtils.get("缺陷"));
@ -1294,7 +1303,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
} }
reportData.setAlgName(patrolResultRef.getAlgName()); reportData.setAlgName(patrolResultRef.getAlgName());
String threshold = patrolResultRef.getThreshold(); String threshold = patrolResultRef.getThreshold();
if(StringUtils.isBlank(threshold)) {
if (StringUtils.isBlank(threshold)) {
threshold = ""; threshold = "";
} }
if ("1".equals(patrolResultRef.getResultType()) && threshold.contains("sub_53")) { if ("1".equals(patrolResultRef.getResultType()) && threshold.contains("sub_53")) {
@ -1312,7 +1321,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
String pointStatus = patrolResultRef.getPointStatus(); String pointStatus = patrolResultRef.getPointStatus();
String resultType = patrolResultRef.getResultType(); String resultType = patrolResultRef.getResultType();
log.info("[RESULT] resultType: {}, patrolResultRef: {}", resultType, patrolResultRef); log.info("[RESULT] resultType: {}, patrolResultRef: {}", resultType, patrolResultRef);
if(resultType == null) {
if (resultType == null) {
continue; continue;
} else if (resultType.equals("0")) { } else if (resultType.equals("0")) {
reportData.setPointStatus(messageUtils.get("缺陷")); reportData.setPointStatus(messageUtils.get("缺陷"));
@ -1394,7 +1403,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
public void batchInsertReportData_Lingzhou(String reportId, List<BasePointAreaInfo> basePointAreaInfoList, String filter, List<PatrolResultRef> patrolResultRefs) { public void batchInsertReportData_Lingzhou(String reportId, List<BasePointAreaInfo> basePointAreaInfoList, String filter, List<PatrolResultRef> patrolResultRefs) {
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
if ("0".equals(exportReportFlag)) { if ("0".equals(exportReportFlag)) {
List <PatrolResultRef> resultRefs = new ArrayList<>();
List<PatrolResultRef> resultRefs = new ArrayList<>();
// 只导出缺陷 // 只导出缺陷
patrolResultRefs = patrolResultRefs.stream().filter((item) -> "0".equals(item.getResultType())).collect(Collectors.toList()); patrolResultRefs = patrolResultRefs.stream().filter((item) -> "0".equals(item.getResultType())).collect(Collectors.toList());
// 分组按点位ID和算法类型进行分组 // 分组按点位ID和算法类型进行分组
@ -1466,7 +1475,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
} }
reportData.setAlgName(patrolResultRef.getAlgName()); reportData.setAlgName(patrolResultRef.getAlgName());
String threshold = patrolResultRef.getThreshold(); String threshold = patrolResultRef.getThreshold();
if(StringUtils.isBlank(threshold)) {
if (StringUtils.isBlank(threshold)) {
threshold = ""; threshold = "";
} }
if ("1".equals(patrolResultRef.getResultType()) && threshold.contains("sub_53")) { if ("1".equals(patrolResultRef.getResultType()) && threshold.contains("sub_53")) {
@ -1483,7 +1492,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
String resultType = patrolResultRef.getResultType(); String resultType = patrolResultRef.getResultType();
log.info("[RESULT] resultType: {}, patrolResultRef: {}", resultType, patrolResultRef); log.info("[RESULT] resultType: {}, patrolResultRef: {}", resultType, patrolResultRef);
if(resultType == null) {
if (resultType == null) {
continue; continue;
} else if (resultType.equals("0")) { } else if (resultType.equals("0")) {
reportData.setPointStatus(messageUtils.get("缺陷")); reportData.setPointStatus(messageUtils.get("缺陷"));
@ -1559,7 +1568,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
List<InspectionReportImg> reportImages = new ArrayList<>(); List<InspectionReportImg> reportImages = new ArrayList<>();
int i; int i;
for(i = 0; i < patrolResultRefs.size(); ++i) {
for (i = 0; i < patrolResultRefs.size(); ++i) {
PatrolResultRef ref = patrolResultRefs.get(i); PatrolResultRef ref = patrolResultRefs.get(i);
ref.setAlgName(algInfos.stream().filter((alg) -> { ref.setAlgName(algInfos.stream().filter((alg) -> {
return alg.getAlgSubtypeCode().equals(ref.getAlgType()); return alg.getAlgSubtypeCode().equals(ref.getAlgType());
@ -1730,7 +1739,6 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
return String.format(messageUtils.get("缺陷总数:%d个"), confirmNum); return String.format(messageUtils.get("缺陷总数:%d个"), confirmNum);
} }
public String statisticsAnalyseNumLingZhou(List<Long> lineIds) { public String statisticsAnalyseNumLingZhou(List<Long> lineIds) {
int okNum = 0; int okNum = 0;
int failNum = 0; int failNum = 0;
@ -1777,7 +1785,6 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
} }
} }
public String statisticsAnalyseNumShaoxing(List<Long> lineIds) { public String statisticsAnalyseNumShaoxing(List<Long> lineIds) {
int okNum = 0; int okNum = 0;
int failNum = 0; int failNum = 0;
@ -1850,7 +1857,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
int totalNum = analyses.size(); int totalNum = analyses.size();
int lastNum = totalNum - failNum - confirmNum; int lastNum = totalNum - failNum - confirmNum;
if(lastNum != okNum) {
if (lastNum != okNum) {
; ;
} }
@ -1928,7 +1935,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
report.setStationType(stationType); report.setStationType(stationType);
Map<GroupKey, List<PatrolResultRef>> groupKeyListMap; Map<GroupKey, List<PatrolResultRef>> groupKeyListMap;
if ("0".equals(exportReportFlag)) { if ("0".equals(exportReportFlag)) {
List <PatrolResultRef> resultRefs = new ArrayList<>();
List<PatrolResultRef> resultRefs = new ArrayList<>();
// 只导出缺陷 // 只导出缺陷
patrolResultRefs = patrolResultRefs.stream().filter((item) -> "0".equals(item.getResultType())).collect(Collectors.toList()); patrolResultRefs = patrolResultRefs.stream().filter((item) -> "0".equals(item.getResultType())).collect(Collectors.toList());
// 分组按点位ID和算法类型进行分组 // 分组按点位ID和算法类型进行分组
@ -2093,7 +2100,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
} }
reportData.setAlgName(patrolResultRef.getAlgName()); reportData.setAlgName(patrolResultRef.getAlgName());
String threshold = patrolResultRef.getThreshold(); String threshold = patrolResultRef.getThreshold();
if(StringUtils.isBlank(threshold)) {
if (StringUtils.isBlank(threshold)) {
threshold = ""; threshold = "";
} }
if ("1".equals(patrolResultRef.getResultType()) && threshold.contains("sub_53")) { if ("1".equals(patrolResultRef.getResultType()) && threshold.contains("sub_53")) {
@ -2110,7 +2117,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
String resultType = patrolResultRef.getResultType(); String resultType = patrolResultRef.getResultType();
// log.info("[RESULT] resultType: {}, patrolResultRef: {}", resultType, patrolResultRef); // log.info("[RESULT] resultType: {}, patrolResultRef: {}", resultType, patrolResultRef);
if(resultType == null) {
if (resultType == null) {
continue; continue;
} else if (resultType.equals("0")) { } else if (resultType.equals("0")) {
reportData.setPointStatus(messageUtils.get("缺陷")); reportData.setPointStatus(messageUtils.get("缺陷"));


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

@ -33,4 +33,6 @@ public interface PatrolTaskResultMainMapper {
List<Long> selectLineIds(Long lineId); List<Long> selectLineIds(Long lineId);
List<Long> selectLineIdsByList(@Param("lineIds") List<Long> lineIds); List<Long> selectLineIdsByList(@Param("lineIds") List<Long> lineIds);
PatrolTaskResultMain selectPatrolTaskResultMainOne(String patrolTaskId);
} }

+ 1
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/service/IPatrolTaskResultMainService.java View File

@ -31,4 +31,5 @@ public interface IPatrolTaskResultMainService {
List<Long> selectLineIdsByList(List<Long> lineIds); List<Long> selectLineIdsByList(List<Long> lineIds);
PatrolTaskResultMain selectPatrolTaskResultMainOne(String patrolTaskId);
} }

+ 4
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/service/impl/PatrolTaskResultMainServiceImpl.java View File

@ -74,4 +74,8 @@ public class PatrolTaskResultMainServiceImpl implements IPatrolTaskResultMainSer
return this.patrolTaskResultMainMapper.selectLineIdsByList(lineIds); return this.patrolTaskResultMainMapper.selectLineIdsByList(lineIds);
} }
@Override
public PatrolTaskResultMain selectPatrolTaskResultMainOne(String patrolTaskId) {
return this.patrolTaskResultMainMapper.selectPatrolTaskResultMainOne(patrolTaskId);
}
} }

+ 153
- 184
inspect-main/inspect-main-task/src/main/java/com/inspect/task/controller/PatrolTaskController.java View File

@ -6,6 +6,7 @@ import com.github.pagehelper.PageInfo;
import com.inspect.analysis.domain.AlgValue; import com.inspect.analysis.domain.AlgValue;
import com.inspect.analysis.domain.ResultAnalysis; import com.inspect.analysis.domain.ResultAnalysis;
import com.inspect.analysis.service.IResultAnalysisService; import com.inspect.analysis.service.IResultAnalysisService;
import com.inspect.base.core.constant.AlgConstants;
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;
import com.inspect.base.core.domain.DataMsg; import com.inspect.base.core.domain.DataMsg;
@ -269,233 +270,205 @@ public class PatrolTaskController extends BaseController {
return getDataTable(list); return getDataTable(list);
} }
@GetMapping({"/taskInfo_v2"})
public TableDataInfo taskInfoV2(PatrolTaskStatus patrolTaskStatus) {
@GetMapping("/taskInfo_v2")
public TableDataInfo taskInfoV3(PatrolTaskStatus patrolTaskStatus) {
logger.info(Color.GREEN + "[MAIN TASK] taskInfoV2 param: {}" + Color.END, patrolTaskStatus); logger.info(Color.GREEN + "[MAIN TASK] taskInfoV2 param: {}" + Color.END, patrolTaskStatus);
Long lineId = patrolTaskStatus.getLineId(); Long lineId = patrolTaskStatus.getLineId();
if (lineId == null) { if (lineId == null) {
return getDataTable(1, new ArrayList<>(), new ArrayList<>()); return getDataTable(1, new ArrayList<>(), new ArrayList<>());
} }
long t1 = System.currentTimeMillis();
PatrolTaskStatus taskStatus = patrolTaskStatusService.selectPatrolTaskStatusByLineId(patrolTaskStatus.getLineId());
PatrolTaskStatus taskStatus = patrolTaskStatusService.selectPatrolTaskStatusByLineId(lineId);
if (taskStatus == null) { if (taskStatus == null) {
return getDataTable(2, new ArrayList<>(), new ArrayList<>()); return getDataTable(2, new ArrayList<>(), new ArrayList<>());
} }
// 查询算法列表
List<AlgInfo> algInfos = patrolResultService.selectAlgInfo(new PatrolResult());
ResultAnalysis resultAnalysis = new ResultAnalysis(); ResultAnalysis resultAnalysis = new ResultAnalysis();
resultAnalysis.setTaskPatrolId(taskStatus.getTaskPatrolledId()); resultAnalysis.setTaskPatrolId(taskStatus.getTaskPatrolledId());
resultAnalysis.setPosType(patrolTaskStatus.getPosType()); resultAnalysis.setPosType(patrolTaskStatus.getPosType());
resultAnalysis.setFilter("1"); resultAnalysis.setFilter("1");
logger.info("---------------[TASK] query resultAnalysis {}", resultAnalysis);
// 初筛数据
// 初筛数据filter=1
List<PatrolData> filterList = patrolResultService.selectPatrolDataResultByTaskCodeV2(resultAnalysis); List<PatrolData> filterList = patrolResultService.selectPatrolDataResultByTaskCodeV2(resultAnalysis);
// logger.debug("---------------[TASK] query filterList {}", filterList);
List<AlgInfo> algInfos = patrolResultService.selectAlgInfo(new PatrolResult());
// 大模型数据filter=0
resultAnalysis.setFilter("0"); resultAnalysis.setFilter("0");
long t2 = System.currentTimeMillis();
// 大模型数据
List<PatrolData> newList = patrolResultService.selectPatrolDataResultByTaskCodeV2(resultAnalysis); List<PatrolData> newList = patrolResultService.selectPatrolDataResultByTaskCodeV2(resultAnalysis);
// 光明大模型数据
// 光明模型数据filter=2
resultAnalysis.setFilter("2"); resultAnalysis.setFilter("2");
List<PatrolData> brightNewList = patrolResultService.selectPatrolDataResultByTaskCodeV2(resultAnalysis);
// logger.info("----------------[TASK] query newList {}", newList);
// if (newList == null) {
// return getDataTable(2, new ArrayList<>(), new ArrayList<>());
// }
long t3 = System.currentTimeMillis();
List<PatrolData> brightList = patrolResultService.selectPatrolDataResultByTaskCodeV2(resultAnalysis);
// 1. 预构建 algName 映射避免每次循环 stream 查找
Map<String, String> algNameMap = algInfos.stream()
.collect(Collectors.toMap(
AlgInfo::getAlgSubtypeCode,
AlgInfo::getAlgSubtypeName,
(a, b) -> a // 重复时保留第一个
));
// 2. 使用 LinkedHashMap 构建 filter/bright 映射O(1) 查找 + 保持原有顺序
Map<String, PatrolData> filterMap = filterList.stream()
.collect(Collectors.toMap(
data -> data.getObjectId() + "_" + data.getAlgType(),
data -> data,
(a, b) -> a,
LinkedHashMap::new
));
Map<String, PatrolData> brightMap = brightList.stream()
.collect(Collectors.toMap(
data -> data.getObjectId() + "_" + data.getAlgType(),
data -> data,
(a, b) -> a,
LinkedHashMap::new
));
for (PatrolData item : newList) { for (PatrolData item : newList) {
// item.setAlgName((algInfos.stream().filter((alg) -> {
// return alg.getAlgSubtypeCode().equals(item.getAlgType());
// }).findFirst().get()).getAlgSubtypeName());
item.setAlgName(
algInfos.stream().anyMatch((alg) -> {
return alg.getAlgSubtypeCode().equals(item.getAlgType());
}) ?
algInfos.stream().filter((alg) -> {
return alg.getAlgSubtypeCode().equals(item.getAlgType());
}).findFirst().get().getAlgSubtypeName() : ""
);
if ("0".equals(item.getFilter())) {
// 初筛数据
List<PatrolData> filterDatas = filterList.stream().filter((data) -> {
return data.getObjectId().equals(item.getObjectId()) && data.getAlgType().equals(item.getAlgType());
}).collect(Collectors.toList());
if (!filterDatas.isEmpty()) {
item.setImg((filterDatas.get(0)).getImgAnalyse());
item.setFilterDesc((filterDatas.get(0)).getDesc());
if (StringUtils.isEmpty(item.getImageNormalUrlPath())) {
item.setImageNormalUrlPath((filterDatas.get(0)).getImageNormalUrlPath());
}
// filterList.remove(filterDatas.get(0));
filterList.removeAll(filterDatas);
}
// 光明大模型数据
List<PatrolData> brightDatas = brightNewList.stream().filter((bright) -> {
return bright.getObjectId().equals(item.getObjectId()) && bright.getAlgType().equals(item.getAlgType());
}).collect(Collectors.toList());
if (!brightDatas.isEmpty()) {
item.setBrightDesc(brightDatas.get(0).getDesc());
item.setBrightResStatus(brightDatas.get(0).getResStatus());
item.setBrightImgAnalyse(brightDatas.get(0).getImgAnalyse());
// brightNewList.remove(brightDatas.get(0));
brightNewList.removeAll(brightDatas);
String key = item.getObjectId() + "_" + item.getAlgType();
// 初筛数据合并
PatrolData filterData = filterMap.get(key);
if (filterData != null) {
item.setImg(filterData.getImgAnalyse());
item.setFilterDesc(filterData.getDesc());
if (StringUtils.isEmpty(item.getImageNormalUrlPath())) {
item.setImageNormalUrlPath(filterData.getImageNormalUrlPath());
} }
filterMap.remove(key);
} }
AlgValue algValue = new AlgValue();
if (item.getResValue() != null) {
String str = algValue.formatValue(item.getResValue());
if ("meter".equals(item.getAlgType())) {
if (str.equals("-1")) {
item.setResValue("空值");
}
}
// 光明大模型数据合并
PatrolData brightData = brightMap.get(key);
if (brightData != null) {
item.setBrightDesc(brightData.getDesc());
item.setBrightResStatus(brightData.getResStatus());
item.setBrightImgAnalyse(brightData.getImgAnalyse());
brightMap.remove(key);
} }
} }
for (PatrolData item : filterList) {
// 光明大模型数据
List<PatrolData> brightDatas = brightNewList.stream().filter((bright) -> {
return bright.getObjectId().equals(item.getObjectId()) && bright.getAlgType().equals(item.getAlgType());
}).collect(Collectors.toList());
if (!brightDatas.isEmpty()) {
item.setBrightDesc(brightDatas.get(0).getDesc());
item.setBrightResStatus(brightDatas.get(0).getResStatus());
item.setBrightImgAnalyse(brightDatas.get(0).getImgAnalyse());
// brightNewList.remove(brightDatas.get(0));
brightNewList.removeAll(brightDatas);
}
item.setAlgName(
algInfos.stream().anyMatch((alg) -> {
return alg.getAlgSubtypeCode().equals(item.getAlgType());
}) ?
algInfos.stream().filter((alg) -> {
return alg.getAlgSubtypeCode().equals(item.getAlgType());
}).findFirst().get().getAlgSubtypeName() : ""
);
AlgValue algValue = new AlgValue();
if (item.getResValue() != null) {
String str = algValue.formatValue(item.getResValue());
if ("meter".equals(item.getAlgType())) {
if (str.equals("-1")) {
item.setResValue("空值");
}
}
// 4. 处理剩余初筛数据
List<PatrolData> remainingFilters = new ArrayList<>(filterMap.values());
for (PatrolData item : remainingFilters) {
String key = item.getObjectId() + "_" + item.getAlgType();
PatrolData brightData = brightMap.get(key);
if (brightData != null) {
item.setBrightDesc(brightData.getDesc());
item.setBrightResStatus(brightData.getResStatus());
item.setBrightImgAnalyse(brightData.getImgAnalyse());
brightMap.remove(key);
} }
item.setImgAnalyse(null); item.setImgAnalyse(null);
item.setFilterDesc(item.getDesc()); item.setFilterDesc(item.getDesc());
item.setDesc(""); item.setDesc("");
} }
for (PatrolData item : brightNewList) {
item.setAlgName(
algInfos.stream().anyMatch((alg) -> {
return alg.getAlgSubtypeCode().equals(item.getAlgType());
}) ?
algInfos.stream().filter((alg) -> {
return alg.getAlgSubtypeCode().equals(item.getAlgType());
}).findFirst().get().getAlgSubtypeName() : ""
);
AlgValue algValue = new AlgValue();
if (item.getResValue() != null) {
String str = algValue.formatValue(item.getResValue());
if ("meter".equals(item.getAlgType())) {
if (str.equals("-1")) {
item.setResValue("空值");
}
}
}
// 5. 处理剩余光明大模型数据
List<PatrolData> remainingBrights = new ArrayList<>(brightMap.values());
for (PatrolData item : remainingBrights) {
item.setBrightDesc(item.getDesc()); item.setBrightDesc(item.getDesc());
item.setBrightResStatus(item.getResStatus()); item.setBrightResStatus(item.getResStatus());
item.setBrightImgAnalyse(item.getImgAnalyse()); item.setBrightImgAnalyse(item.getImgAnalyse());
item.setDesc(""); item.setDesc("");
} }
newList.addAll(filterList);
newList.addAll(brightNewList);
if (StringUtils.isNotEmpty(patrolTaskStatus.getAlgName())) {
newList = newList.stream().filter((element) -> {
return patrolTaskStatus.getAlgName().equals(element.getAlgName());
}).collect(Collectors.toList());
}
if (StringUtils.isNotEmpty(patrolTaskStatus.getFilterDesc())) {
newList = newList.stream().filter((element) -> {
return patrolTaskStatus.getFilterDesc().equals(element.getFilterDesc());
}).collect(Collectors.toList());
}
// 生产设备 模糊匹配
if (StringUtils.isNotEmpty(patrolTaskStatus.getDeviceName())) {
newList = newList.stream().filter((element) ->
element.getDeviceName().contains(patrolTaskStatus.getDeviceName())
).collect(Collectors.toList());
}
// 点位名称 模糊匹配
if (StringUtils.isNotEmpty(patrolTaskStatus.getPointName())) {
newList = newList.stream().filter((element) ->
element.getPointName().contains(patrolTaskStatus.getPointName())
).collect(Collectors.toList());
}
// 相机名称 模糊匹配
if (StringUtils.isNotEmpty(patrolTaskStatus.getChannelName())) {
newList = newList.stream().filter((element) ->
element.getChannelName().contains(patrolTaskStatus.getChannelName())
).collect(Collectors.toList());
}
// 来源系统 模糊匹配
if (StringUtils.isNotEmpty(patrolTaskStatus.getDeviceSource())) {
newList = newList.stream().filter((element) ->
element.getDeviceSource().contains(patrolTaskStatus.getDeviceSource())
).collect(Collectors.toList());
}
if (StringUtils.isNotEmpty(patrolTaskStatus.getPointStatus())) {
newList = newList.stream().filter((element) -> {
return patrolTaskStatus.getPointStatus().equals(element.getPointStatus());
}).collect(Collectors.toList());
}
if (StringUtils.isNotEmpty(patrolTaskStatus.getDesc())) {
newList = newList.stream().filter((element) -> {
return patrolTaskStatus.getDesc().equals(element.getDesc());
}).collect(Collectors.toList());
}
if (StringUtils.isNotEmpty(patrolTaskStatus.getResultType())) {
newList = newList.stream().filter((element) -> {
return patrolTaskStatus.getResultType().equals(element.getWarnStatus());
}).collect(Collectors.toList());
}
// 合并所有数据
newList.addAll(remainingFilters);
newList.addAll(remainingBrights);
// 6. 统一设置 algName + resValue 格式化只循环一次
AlgValue algValue = new AlgValue();
for (PatrolData item : newList) {
item.setAlgName(algNameMap.getOrDefault(item.getAlgType(), ""));
if (item.getResValue() != null) {
String str = algValue.formatValue(item.getResValue());
if ("meter".equals(item.getAlgType()) && "-1".equals(str)) {
item.setResValue("空值");
}
}
}
// 6.1 合并纠偏算法数据
Map<Boolean, List<PatrolData>> partitionedMap = newList.stream()
.collect(Collectors.partitioningBy(element -> AlgConstants.CORRECTION.equals(element.getAlgType())));
List<PatrolData> correctionList = partitionedMap.getOrDefault(true, Collections.emptyList());
newList = partitionedMap.getOrDefault(false, Collections.emptyList());
if(!correctionList.isEmpty()) {
for(PatrolData item : newList) {
Optional<PatrolData> correctionOptional = correctionList.stream().filter(element -> element.getObjectId().equals(item.getObjectId())).findFirst();
if (correctionOptional.isPresent()) {
PatrolData correctionData = correctionOptional.get();
item.setResStatus(correctionData.getResStatus());
item.setOriginalValue(correctionData.getOriginalValue());
}
}
}
// 7. 所有过滤条件合并为一个 stream避免多次 filter + collect
newList = newList.stream()
.filter(element -> StringUtils.isEmpty(patrolTaskStatus.getAlgName())
|| patrolTaskStatus.getAlgName().equals(element.getAlgName()))
.filter(element -> StringUtils.isEmpty(patrolTaskStatus.getFilterDesc())
|| patrolTaskStatus.getFilterDesc().equals(element.getFilterDesc()))
// 生产设备点位名称等模糊匹配增加 null 保护防止 NPE
.filter(element -> StringUtils.isEmpty(patrolTaskStatus.getDeviceName())
|| (element.getDeviceName() != null && element.getDeviceName().contains(patrolTaskStatus.getDeviceName())))
.filter(element -> StringUtils.isEmpty(patrolTaskStatus.getPointName())
|| (element.getPointName() != null && element.getPointName().contains(patrolTaskStatus.getPointName())))
.filter(element -> StringUtils.isEmpty(patrolTaskStatus.getChannelName())
|| (element.getChannelName() != null && element.getChannelName().contains(patrolTaskStatus.getChannelName())))
.filter(element -> StringUtils.isEmpty(patrolTaskStatus.getDeviceSource())
|| (element.getDeviceSource() != null && element.getDeviceSource().contains(patrolTaskStatus.getDeviceSource())))
.filter(element -> StringUtils.isEmpty(patrolTaskStatus.getPointStatus())
|| patrolTaskStatus.getPointStatus().equals(element.getPointStatus()))
.filter(element -> StringUtils.isEmpty(patrolTaskStatus.getDesc())
|| patrolTaskStatus.getDesc().equals(element.getDesc()))
.filter(element -> StringUtils.isEmpty(patrolTaskStatus.getResultType())
|| patrolTaskStatus.getResultType().equals(element.getWarnStatus()))
.collect(Collectors.toList());
// 8. 去重保持首次出现顺序
Map<String, PatrolData> keyPatrolData = new LinkedHashMap<>(); Map<String, PatrolData> keyPatrolData = new LinkedHashMap<>();
for (PatrolData patrolData : newList) { for (PatrolData patrolData : newList) {
keyPatrolData.putIfAbsent(patrolData.getObjectId() + "_" + patrolData.getAlgType(), patrolData); keyPatrolData.putIfAbsent(patrolData.getObjectId() + "_" + patrolData.getAlgType(), patrolData);
} }
newList = new ArrayList<>(keyPatrolData.values()); newList = new ArrayList<>(keyPatrolData.values());
// 9. 异常置顶排序
if ("1".equals(patrolTaskStatus.getAbnormal())) { if ("1".equals(patrolTaskStatus.getAbnormal())) {
// 异常置顶
newList.sort(Comparator.comparingInt(obj -> { newList.sort(Comparator.comparingInt(obj -> {
switch (obj.getPointStatus()) { switch (obj.getPointStatus()) {
case "6": return 1; // 缺陷
case "5": return 2; // 确认
case "4": return 3; // 跟踪告警
case "0": return 4; // 异常
case "1": return 5; // 正常
case "2": return 6; // 待人工确认
case "3": return 7; // 已撤销忽略
default: return 8;
case "6":
return 1; // 缺陷
case "5":
return 2; // 确认
case "4":
return 3; // 跟踪告警
case "0":
return 4; // 异常
case "1":
return 5; // 正常
case "2":
return 6; // 待人工确认
case "3":
return 7; // 已撤销忽略
default:
return 8;
} }
})); }));
} }
// 10. 分页仍为内存分页详见下方说明
PageDomain pageDomain = TableSupport.buildPageRequest(); PageDomain pageDomain = TableSupport.buildPageRequest();
int pageNum = pageDomain.getPageNum(); int pageNum = pageDomain.getPageNum();
int pageSize = pageDomain.getPageSize(); int pageSize = pageDomain.getPageSize();
int toNum = Math.min(newList.size(), pageNum * pageSize);
List<PatrolData> pageList = newList.subList((pageNum - 1) * pageSize, toNum);
// int toNum = newList.size();
// List<PatrolData> pageList = newList.subList(0, toNum);
long t5 = System.currentTimeMillis();
logger.info("[MAIN TASK] task detail inquery step 1 cost: {}", (t2 - t1));
logger.info("[MAIN TASK] task detail inquery step 2 cost: {}", (t3 - t2));
logger.info("[MAIN TASK] task detail inquery step 3 cost: {}", (t5 - t3));
int fromIndex = (pageNum - 1) * pageSize;
int toIndex = Math.min(newList.size(), pageNum * pageSize);
List<PatrolData> pageList = (fromIndex < newList.size())
? newList.subList(fromIndex, toIndex)
: new ArrayList<>();
return getDataTable(0, pageList, newList); return getDataTable(0, pageList, newList);
} }
@ -3231,9 +3204,8 @@ public class PatrolTaskController extends BaseController {
@GetMapping({"/getPatrolPointName"}) @GetMapping({"/getPatrolPointName"})
public AjaxResult getPatrolPointName(PatrolTaskStatus patrolTaskStatus) { public AjaxResult getPatrolPointName(PatrolTaskStatus patrolTaskStatus) {
PatrolTaskStatus patro = patrolTaskStatusService.selectPatrolTaskStatusByLineId(patrolTaskStatus.getLineId());
ResultAnalysis resultAnalysis = new ResultAnalysis(); ResultAnalysis resultAnalysis = new ResultAnalysis();
resultAnalysis.setTaskPatrolId(patro.getTaskPatrolledId());
resultAnalysis.setTaskPatrolId(patrolTaskStatus.getTaskPatrolledId());
resultAnalysis.setFilter("1"); resultAnalysis.setFilter("1");
resultAnalysis.setDeviceName(patrolTaskStatus.getDeviceName()); resultAnalysis.setDeviceName(patrolTaskStatus.getDeviceName());
resultAnalysis.setPointName(patrolTaskStatus.getPointName()); resultAnalysis.setPointName(patrolTaskStatus.getPointName());
@ -3335,7 +3307,7 @@ public class PatrolTaskController extends BaseController {
mapList.add(map1); mapList.add(map1);
} else { } else {
logger.info("GET_PATROL_POINT_NAME taskPatrolId: {} result_analysis point_status is null, item: {}", logger.info("GET_PATROL_POINT_NAME taskPatrolId: {} result_analysis point_status is null, item: {}",
patro.getTaskPatrolledId(),
patrolTaskStatus.getTaskPatrolledId(),
item); item);
} }
} }
@ -3450,7 +3422,4 @@ public class PatrolTaskController extends BaseController {
map.put("listAlgName", listAlgName); map.put("listAlgName", listAlgName);
return AjaxResult.success(map); return AjaxResult.success(map);
} }
public static void main(String[] args) {
}
} }

+ 2
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/task/domain/SendTask.java View File

@ -29,6 +29,8 @@ public class SendTask {
name = "Command" name = "Command"
) )
private String command; private String command;
private String Time;
@JSONField( @JSONField(
name = "Type" name = "Type"
) )


+ 17
- 19
inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/impl/PatrolTaskServiceImpl.java View File

@ -5,6 +5,7 @@ import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.inspect.analysis.domain.ResultAnalysis; import com.inspect.analysis.domain.ResultAnalysis;
import com.inspect.analysis.mapper.ResultAnalysisMapper; import com.inspect.analysis.mapper.ResultAnalysisMapper;
import com.inspect.base.core.constant.AlgConstants;
import com.inspect.base.core.sftp.SftpClient; import com.inspect.base.core.sftp.SftpClient;
import com.inspect.base.core.sftp.SftpUploadEntity; import com.inspect.base.core.sftp.SftpUploadEntity;
import com.inspect.base.core.utils.DateUtils; import com.inspect.base.core.utils.DateUtils;
@ -15,19 +16,12 @@ import com.inspect.partrolresult.util.PrintUtil;
import com.inspect.resultmain.controller.PatrolTaskResultMainController; import com.inspect.resultmain.controller.PatrolTaskResultMainController;
import com.inspect.resultmain.domain.PatrolTaskResultMain; import com.inspect.resultmain.domain.PatrolTaskResultMain;
import com.inspect.task.domain.DeviceConvert; import com.inspect.task.domain.DeviceConvert;
import com.inspect.task.domain.PatrolData; import com.inspect.task.domain.PatrolData;
import com.inspect.task.domain.PatrolTask; import com.inspect.task.domain.PatrolTask;
import com.inspect.task.mapper.PatrolTaskMapper; import com.inspect.task.mapper.PatrolTaskMapper;
import com.inspect.task.service.IPatrolTaskService; import com.inspect.task.service.IPatrolTaskService;
import java.net.URLEncoder;
import java.util.*;
import java.util.stream.Collectors;
import com.inspect.taskstatus.domain.PatrolTaskStatus; import com.inspect.taskstatus.domain.PatrolTaskStatus;
import com.inspect.taskstatus.mapper.PatrolTaskStatusMapper; import com.inspect.taskstatus.mapper.PatrolTaskStatusMapper;
import io.swagger.models.auth.In;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
@ -35,7 +29,9 @@ import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
import java.net.URLEncoder;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j @Slf4j
@EnableScheduling @EnableScheduling
@ -43,20 +39,14 @@ import java.util.List;
public class PatrolTaskServiceImpl implements IPatrolTaskService { public class PatrolTaskServiceImpl implements IPatrolTaskService {
final PatrolTaskMapper patrolTaskMapper; final PatrolTaskMapper patrolTaskMapper;
@Autowired
private PatrolTaskStatusMapper patrolTaskStatusMapper;
final ResultAnalysisMapper resultAnalysisMapper;
@Autowired @Autowired
private PatrolTaskResultMainController patrolTaskResultMainController; private PatrolTaskResultMainController patrolTaskResultMainController;
@Autowired @Autowired
private TaskCalendarGenerator taskCalendarGenerator; private TaskCalendarGenerator taskCalendarGenerator;
@Autowired @Autowired
private SftpClient sftpClient; private SftpClient sftpClient;
final ResultAnalysisMapper resultAnalysisMapper;
@Autowired @Autowired
public PatrolTaskServiceImpl(PatrolTaskMapper patrolTaskMapper, ResultAnalysisMapper resultAnalysisMapper) { public PatrolTaskServiceImpl(PatrolTaskMapper patrolTaskMapper, ResultAnalysisMapper resultAnalysisMapper) {
this.patrolTaskMapper = patrolTaskMapper; this.patrolTaskMapper = patrolTaskMapper;
@ -203,9 +193,19 @@ public class PatrolTaskServiceImpl implements IPatrolTaskService {
ObjectMapper mapper = new ObjectMapper(); ObjectMapper mapper = new ObjectMapper();
List<List<Integer>> list; List<List<Integer>> list;
ResultAnalysis resultAnalysis = new ResultAnalysis();
resultAnalysis.setTaskPatrolId(patrolData.getTaskPatrolId());
resultAnalysis.setObjectId(patrolData.getPointId());
resultAnalysis.setAlgType(AlgConstants.CORRECTION);
try { try {
list = mapper.readValue(patrolData.getResValue(), new TypeReference<List<List<Integer>>>() {
});
List<ResultAnalysis> resultAnalysisList = resultAnalysisMapper.selectResultAnalysisList(resultAnalysis);
if (!resultAnalysisList.isEmpty()) {
resultAnalysis = resultAnalysisList.get(0);
list = mapper.readValue(resultAnalysis.getResValue(), new TypeReference<List<List<Integer>>>() {
});
} else {
list = new ArrayList<>();
}
log.info("controller correctionAlgorithm correction value: {}", list); log.info("controller correctionAlgorithm correction value: {}", list);
} catch (Exception e) { } catch (Exception e) {
log.info("controller correctionAlgorithm correction value exception"); log.info("controller correctionAlgorithm correction value exception");
@ -265,8 +265,6 @@ public class PatrolTaskServiceImpl implements IPatrolTaskService {
// 更新结果 // 更新结果
if (!StringUtils.isEmpty(patrolData.getLineId()) && filePath != "") { if (!StringUtils.isEmpty(patrolData.getLineId()) && filePath != "") {
ResultAnalysis resultAnalysis = new ResultAnalysis();
resultAnalysis.setLineId(Long.valueOf(patrolData.getLineId()));
resultAnalysis.setResStatus("4"); resultAnalysis.setResStatus("4");
resultAnalysis.setDescription("已完成纠偏"); resultAnalysis.setDescription("已完成纠偏");
resultAnalysis.setOriginalValue(filePath); resultAnalysis.setOriginalValue(filePath);


+ 56
- 21
inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/controller/PatrolTaskStatusController.java View File

@ -3,9 +3,11 @@ package com.inspect.taskstatus.controller;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.inspect.analysis.domain.ResultAnalysis; import com.inspect.analysis.domain.ResultAnalysis;
import com.inspect.analysis.domain.ResultAnalysisSummaryDTO;
import com.inspect.analysis.service.IResultAnalysisService; import com.inspect.analysis.service.IResultAnalysisService;
import com.inspect.base.core.constant.RedisConst; import com.inspect.base.core.constant.RedisConst;
import com.inspect.base.core.enums.TaskStatus; import com.inspect.base.core.enums.TaskStatus;
import com.inspect.base.core.enums.TaskType;
import com.inspect.base.core.utils.DateUtils; import com.inspect.base.core.utils.DateUtils;
import com.inspect.base.core.utils.DescUtil; import com.inspect.base.core.utils.DescUtil;
import com.inspect.base.core.utils.StringUtils; import com.inspect.base.core.utils.StringUtils;
@ -45,6 +47,7 @@ import java.text.ParseException;
import java.time.*; import java.time.*;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@RestController @RestController
@ -171,7 +174,7 @@ public class PatrolTaskStatusController extends BaseController {
// 更新结果 // 更新结果
List<String> taskPatrolIds = list.stream().filter(item -> !item.getTaskState().equals(TaskStateEnum.PENDING.getCode())).map(PatrolTaskStatus::getTaskPatrolledId).collect(Collectors.toList()); List<String> taskPatrolIds = list.stream().filter(item -> !item.getTaskState().equals(TaskStateEnum.PENDING.getCode())).map(PatrolTaskStatus::getTaskPatrolledId).collect(Collectors.toList());
if(taskPatrolIds.size() > 0) {
if (taskPatrolIds.size() > 0) {
List<PatrolTaskResultMain> resultMains = patrolTaskResultMainService.selectMainFileStatus(taskPatrolIds); List<PatrolTaskResultMain> resultMains = patrolTaskResultMainService.selectMainFileStatus(taskPatrolIds);
List<String> taskCodeIds = list.stream().map(PatrolTaskStatus::getTaskCode).collect(Collectors.toList()); List<String> taskCodeIds = list.stream().map(PatrolTaskStatus::getTaskCode).collect(Collectors.toList());
List<Map<String, Object>> pointList = patrolTaskInfoService.selectPatrolTaskInfoCount(taskCodeIds); List<Map<String, Object>> pointList = patrolTaskInfoService.selectPatrolTaskInfoCount(taskCodeIds);
@ -226,30 +229,30 @@ public class PatrolTaskStatusController extends BaseController {
@GetMapping({"/list"}) @GetMapping({"/list"})
public TableDataInfo list(PatrolTaskStatus patrolTaskStatus) { public TableDataInfo list(PatrolTaskStatus patrolTaskStatus) {
this.startPage(); this.startPage();
patrolTaskStatus.setFilterTaskType("2");
// 分页查询执行任务列表
List<PatrolTaskStatus> list = patrolTaskStatusService.selectPatrolTaskStatusList(patrolTaskStatus); List<PatrolTaskStatus> list = patrolTaskStatusService.selectPatrolTaskStatusList(patrolTaskStatus);
if (list == null || list.size() == 0) { if (list == null || list.size() == 0) {
return this.getDataTable(list); return this.getDataTable(list);
} }
// 收集执行id
List<String> taskPatrolIds = list.stream().map(PatrolTaskStatus::getTaskPatrolledId).collect(Collectors.toList()); List<String> taskPatrolIds = list.stream().map(PatrolTaskStatus::getTaskPatrolledId).collect(Collectors.toList());
// 查询归档信息
List<PatrolTaskResultMain> resultMains = patrolTaskResultMainService.selectMainFileStatus(taskPatrolIds); List<PatrolTaskResultMain> resultMains = patrolTaskResultMainService.selectMainFileStatus(taskPatrolIds);
// 收集任务code
List<String> taskCodeIds = list.stream().map(PatrolTaskStatus::getTaskCode).collect(Collectors.toList()); List<String> taskCodeIds = list.stream().map(PatrolTaskStatus::getTaskCode).collect(Collectors.toList());
// 查询任务详情
List<Map<String, Object>> pointList = patrolTaskInfoService.selectPatrolTaskInfoCount(taskCodeIds); List<Map<String, Object>> pointList = patrolTaskInfoService.selectPatrolTaskInfoCount(taskCodeIds);
Map<String, String> pointMap = pointList.stream().collect(Collectors.toMap((item) -> { Map<String, String> pointMap = pointList.stream().collect(Collectors.toMap((item) -> {
return (String) item.get("taskMajorId"); return (String) item.get("taskMajorId");
}, (item) -> { }, (item) -> {
return String.valueOf(item.get("num")); return String.valueOf(item.get("num"));
})); }));
Map<String, ResultAnalysis> abnormalDataBatchMap = resultAnalysisService.selectTaskAbnormalDataBatch(taskPatrolIds);
List<ResultAnalysis> allQxAnalysisList = resultAnalysisService.selectResultAnalysisListBatch(taskPatrolIds, "0");
Map<String, Map<GroupKey, List<ResultAnalysis>>> groupedAnalysisMap = allQxAnalysisList.stream()
.collect(Collectors.groupingBy(
ResultAnalysis::getTaskPatrolId,
Collectors.groupingBy(data -> new GroupKey(data.getObjectId(), data.getAlgType()))
));
// 填充每个任务的扩展统计信息
list.forEach((item) -> { list.forEach((item) -> {
item.setPatrolStatus("1"); item.setPatrolStatus("1");
item.setPointCount(pointMap.get(item.getTaskCode())); item.setPointCount(pointMap.get(item.getTaskCode()));
// 根据任务进度和归档信息设置文件状态
if (!item.getTaskProgress().contains("100")) { if (!item.getTaskProgress().contains("100")) {
item.setFileStatus("0"); item.setFileStatus("0");
} else { } else {
@ -262,14 +265,25 @@ public class PatrolTaskStatusController extends BaseController {
item.setFileStatus("0"); item.setFileStatus("0");
} }
} }
// 异常数据统计
ResultAnalysis resultAnalysis = abnormalDataBatchMap.getOrDefault(item.getTaskPatrolledId(), new ResultAnalysis());
item.setCsQxNum(resultAnalysis.getCsQxNum());
item.setAiQxNum(resultAnalysis.getAiQxNum());
item.setCsYcNum(resultAnalysis.getCsYcNum());
item.setAiYcNum(resultAnalysis.getAiYcNum());
Map<GroupKey, List<ResultAnalysis>> groupKeyListMap = groupedAnalysisMap.get(item.getTaskPatrolledId());
item.setQxNum(groupKeyListMap == null ? 0 : groupKeyListMap.size());
List<ResultAnalysisSummaryDTO> summaryDTOList;
if (item.getTaskType().equals(TaskType.MAIN.getCode())) {
List<String> taskPatrolledIds = item.getChildren().stream().map(PatrolTaskStatus::getTaskPatrolledId).collect(Collectors.toList());
summaryDTOList = resultAnalysisService.countResultAnalysisSummary(taskPatrolledIds);
} else {
summaryDTOList = resultAnalysisService.countResultAnalysisSummary(Collections.singletonList(item.getTaskPatrolledId()));
}
if (summaryDTOList != null && !summaryDTOList.isEmpty()) {
summaryDTOList.forEach(summaryDTO -> {
if (summaryDTO != null) {
// 使用 Optional 或三元运算符防止 null 值累加
item.setCsQxNum(item.getCsQxNum() + summaryDTO.getCsQxNum());
item.setAiQxNum(item.getAiQxNum() + summaryDTO.getAiQxNum());
item.setCsYcNum(item.getCsYcNum() + summaryDTO.getCsYcNum());
item.setAiYcNum(item.getAiYcNum() + summaryDTO.getAiYcNum());
item.setQxNum(item.getQxNum() + summaryDTO.getQxNum());
}
});
}
if (StringUtils.isEmpty(item.getTaskEstimatedTime())) { if (StringUtils.isEmpty(item.getTaskEstimatedTime())) {
item.setTaskEstimatedTime("0"); item.setTaskEstimatedTime("0");
} }
@ -789,8 +803,11 @@ public class PatrolTaskStatusController extends BaseController {
} }
} }
String immediatelyExecTaskTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
redisService.setCacheObjectOfTask(RedisConst.TASK_CURRENT_CODE, patrolTask.getTaskCode(), RedisConst.TASK_CODE + patrolTask.getTaskCode() + StringUtils.AT + immediatelyExecTaskTime, 1L, TimeUnit.HOURS);
// 下发无人机任务 // 下发无人机任务
for(String pilotTaskCmd : pilotTaskCmds) {
for (String pilotTaskCmd : pilotTaskCmds) {
log.info("无人机-机器人任务下发, pilotTaskCmd: {}", pilotTaskCmd); log.info("无人机-机器人任务下发, pilotTaskCmd: {}", pilotTaskCmd);
try { try {
this.feignTaskClient.sendCommand(pilotTaskCmd); this.feignTaskClient.sendCommand(pilotTaskCmd);
@ -824,6 +841,25 @@ public class PatrolTaskStatusController extends BaseController {
String command = params.getCommand(); String command = params.getCommand();
log.info("[TASK] task_status_change cmd: {}, task: {}", command, patrolTaskStatus); log.info("[TASK] task_status_change cmd: {}, task: {}", command, patrolTaskStatus);
if (patrolTaskStatus.getTaskType().equals(TaskType.MAIN.getCode())) {
for (PatrolTaskStatus status : patrolTaskStatus.getChildren()) {
execCommand(command, status);
}
} else {
execCommand(command, patrolTaskStatus);
}
return toAjax(1);
}
// 执行修改任务状态命令
private void execCommand(String command, PatrolTaskStatus patrolTaskStatus) {
log.info("[TASK] task_status_change cmd: {}, task: {}", command, patrolTaskStatus);
// 任务为完成终止过期状态时不允许改变状态
if (Arrays.asList(TaskStatus.DONE.getCode(), TaskStatus.HALTED.getCode(), TaskStatus.EXPIRED.getCode()).contains(patrolTaskStatus.getTaskState())) {
log.info("[TASK] STATUS CHANGE IS NOT ALLOWED cmd: {}, task: {}", command, patrolTaskStatus);
return;
}
if (TaskStatus.DONE.getCode().equals(command)) { if (TaskStatus.DONE.getCode().equals(command)) {
patrolTaskStatus.setTaskState(TaskStatus.RUNNING.getCode()); patrolTaskStatus.setTaskState(TaskStatus.RUNNING.getCode());
} else if (TaskStatus.RUNNING.getCode().equals(command)) { } else if (TaskStatus.RUNNING.getCode().equals(command)) {
@ -836,10 +872,9 @@ public class PatrolTaskStatusController extends BaseController {
feignJobTaskClient.resumeExecTask(patrolTaskStatus.getTaskPatrolledId()); feignJobTaskClient.resumeExecTask(patrolTaskStatus.getTaskPatrolledId());
} }
int res = patrolTaskStatusService.updatePatrolTaskStatus(patrolTaskStatus);
patrolTaskStatusService.updateTaskProgress(patrolTaskStatus.getLineId(), null, null, patrolTaskStatus.getTaskState());
patrolTaskStatus.setCommand(command); patrolTaskStatus.setCommand(command);
issuePatrolTask(patrolTaskStatus); issuePatrolTask(patrolTaskStatus);
return toAjax(res);
} }
public void issuePatrolTask(PatrolTaskStatus patrolTaskStatus) { public void issuePatrolTask(PatrolTaskStatus patrolTaskStatus) {
@ -910,7 +945,7 @@ public class PatrolTaskStatusController extends BaseController {
Set<String> wrjCode = new HashSet<>();//droneCode Set<String> wrjCode = new HashSet<>();//droneCode
for (BasedataEqpBookMoMain book : bookList) { for (BasedataEqpBookMoMain book : bookList) {
final String type = book.getType(); final String type = book.getType();
if(StringUtils.isEmpty(type)) {
if (StringUtils.isEmpty(type)) {
continue; continue;
} }
if (!type.equals("1") && !type.equals("2") && !type.equals("3") && !type.equals("13")) { if (!type.equals("1") && !type.equals("2") && !type.equals("3") && !type.equals("13")) {


+ 7
- 53
inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/domain/PatrolTaskStatus.java View File

@ -5,16 +5,15 @@ import com.inspect.base.core.web.domain.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date; import java.util.Date;
import java.util.List;
import lombok.*; import lombok.*;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
@Setter @Setter
@Getter @Getter
@Builder @Builder
@AllArgsConstructor @AllArgsConstructor
@ToString
public class PatrolTaskStatus extends BaseEntity { public class PatrolTaskStatus extends BaseEntity {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private Long lineId; private Long lineId;
@ -81,6 +80,11 @@ public class PatrolTaskStatus extends BaseEntity {
@Excel( @Excel(
name = "巡检类型" name = "巡检类型"
) )
// 主任务id
private String mainId;
private String taskType;
private String filterTaskType;
private List<PatrolTaskStatus> children;
private String patrolType; private String patrolType;
private String timeType; private String timeType;
private String timeConditions; private String timeConditions;
@ -107,7 +111,6 @@ public class PatrolTaskStatus extends BaseEntity {
private int csYcNum; private int csYcNum;
private int aiQxNum; private int aiQxNum;
private int aiYcNum; private int aiYcNum;
private int qxNum; private int qxNum;
private String resultType; private String resultType;
private String pointStatus; private String pointStatus;
@ -120,53 +123,4 @@ public class PatrolTaskStatus extends BaseEntity {
public PatrolTaskStatus() { public PatrolTaskStatus() {
} }
@Override
public String toString() {
return "PatrolTaskStatus{" +
"lineId=" + lineId +
", taskPatrolledId='" + taskPatrolledId + '\'' +
", taskName='" + taskName + '\'' +
", areaTaskName='" + areaTaskName + '\'' +
", taskCode='" + taskCode + '\'' +
", taskState='" + taskState + '\'' +
", planStartTime=" + planStartTime +
", startTime=" + startTime +
", taskProgress='" + taskProgress + '\'' +
", taskEstimatedTime='" + taskEstimatedTime + '\'' +
", description='" + description + '\'' +
", posType='" + posType + '\'' +
", code='" + code + '\'' +
", pos='" + pos + '\'' +
", patrolType='" + patrolType + '\'' +
", timeType='" + timeType + '\'' +
", timeConditions='" + timeConditions + '\'' +
", beginTime='" + beginTime + '\'' +
", endTime='" + endTime + '\'' +
", createTime=" + createTime +
", patrolStatus='" + patrolStatus + '\'' +
", year=" + year +
", devNo='" + devNo + '\'' +
", command='" + command + '\'' +
", pointCount='" + pointCount + '\'' +
", execType='" + execType + '\'' +
", fileStatus='" + fileStatus + '\'' +
", filter='" + filter + '\'' +
", pointName='" + pointName + '\'' +
", deviceName='" + deviceName + '\'' +
", abnormal='" + abnormal + '\'' +
", channelName='" + channelName + '\'' +
", deviceSource='" + deviceSource + '\'' +
", filterDesc='" + filterDesc + '\'' +
", desc='" + desc + '\'' +
", csQxNum=" + csQxNum +
", csYcNum=" + csYcNum +
", aiQxNum=" + aiQxNum +
", aiYcNum=" + aiYcNum +
", qxNum=" + qxNum +
", resultType='" + resultType + '\'' +
", pointStatus='" + pointStatus + '\'' +
", algName='" + algName + '\'' +
'}';
}
} }

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

@ -46,4 +46,10 @@ public interface PatrolTaskStatusMapper {
List<DailyTaskStatsDTO> selectDailyStatsByYearAndMonth(@Param("year") Integer year, @Param("month") Integer month); List<DailyTaskStatsDTO> selectDailyStatsByYearAndMonth(@Param("year") Integer year, @Param("month") Integer month);
List<DailyTaskStatsDTO> selectDailyStatsByYearAndMonthAndDay(@Param("year") Integer year, @Param("month") Integer month, @Param("day") Integer day); List<DailyTaskStatsDTO> selectDailyStatsByYearAndMonthAndDay(@Param("year") Integer year, @Param("month") Integer month, @Param("day") Integer day);
int insertIgnorePatrolTaskStatus(PatrolTaskStatus patrolTaskStatusMain);
List<PatrolTaskStatus> selectPatrolTaskStatusListByMainId(String taskPatrolledId);
PatrolTaskStatus selectPatrolTaskStatusMain(String taskPatrolledId);
} }

+ 10
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/service/IPatrolTaskStatusService.java View File

@ -33,4 +33,14 @@ public interface IPatrolTaskStatusService {
int deletePatrolTaskStatusByLineIds(Long[] lineIds); int deletePatrolTaskStatusByLineIds(Long[] lineIds);
int deletePatrolTaskStatusByLineId(Long lineId); int deletePatrolTaskStatusByLineId(Long lineId);
int insertIgnorePatrolTaskStatus(PatrolTaskStatus patrolTaskStatusMain);
void updateTaskProgress(Long lineId, String taskProgress, String taskEstimatedTime, String taskState);
List<PatrolTaskStatus> selectPatrolTaskStatusListByMainId(String taskPatrolledId);
int generateTaskResultMain(PatrolTaskStatus patrolTaskStatusMain);
PatrolTaskStatus selectPatrolTaskStatusMain(String taskPatrolledId);
} }

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

@ -2,88 +2,293 @@ package com.inspect.taskstatus.service.impl;
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.enums.TaskStatus;
import com.inspect.base.core.enums.TaskType;
import com.inspect.base.core.utils.BigDecimalUtil;
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.resultmain.domain.PatrolTaskResultMain;
import com.inspect.resultmain.service.IPatrolTaskResultMainService;
import com.inspect.task.domain.PatrolTask;
import com.inspect.task.service.IPatrolTaskService;
import com.inspect.taskstatus.domain.PatrolTaskStatus; import com.inspect.taskstatus.domain.PatrolTaskStatus;
import com.inspect.taskstatus.domain.TaskCount; import com.inspect.taskstatus.domain.TaskCount;
import com.inspect.taskstatus.mapper.PatrolTaskStatusMapper; import com.inspect.taskstatus.mapper.PatrolTaskStatusMapper;
import com.inspect.taskstatus.service.IPatrolTaskStatusService; import com.inspect.taskstatus.service.IPatrolTaskStatusService;
import java.util.Date;
import java.util.List;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@Service @Service
public class PatrolTaskStatusServiceImpl implements IPatrolTaskStatusService { public class PatrolTaskStatusServiceImpl implements IPatrolTaskStatusService {
private final Logger log = LoggerFactory.getLogger(this.getClass());
private final PatrolTaskStatusMapper patrolTaskStatusMapper;
@Autowired
public PatrolTaskStatusServiceImpl(PatrolTaskStatusMapper patrolTaskStatusMapper) {
this.patrolTaskStatusMapper = patrolTaskStatusMapper;
}
public PatrolTaskStatus selectPatrolTaskStatusByLineId(Long lineId) {
return this.patrolTaskStatusMapper.selectPatrolTaskStatusByLineId(lineId);
}
public PatrolTaskStatus selectPatrolTaskStatusByTaskPatrolledId(String taskPatrolledId) {
return this.patrolTaskStatusMapper.selectPatrolTaskStatusByTaskPatrolledId(taskPatrolledId);
}
public List<PatrolTaskStatus> selectPatrolTaskStatusList(PatrolTaskStatus patrolTaskStatus) {
return this.patrolTaskStatusMapper.selectPatrolTaskStatusList(patrolTaskStatus);
}
public List<PatrolTaskStatus> selectPatrolTaskStatusCount(PatrolTaskStatus patrolTaskStatus) {
return this.patrolTaskStatusMapper.selectPatrolTaskStatusCount(patrolTaskStatus);
}
public List<TaskCount> selectCountList(PatrolTaskStatus patrolTaskStatus) {
return this.patrolTaskStatusMapper.selectCountList(patrolTaskStatus);
}
public List<TaskCount> selectCountListByDate(PatrolTaskStatus patrolTaskStatus) {
return this.patrolTaskStatusMapper.selectCountListByDate(patrolTaskStatus);
}
@TaskStatusChange(targetState = "1", async = true) // "1"表示已完成状态
public int insertPatrolTaskStatus(PatrolTaskStatus patrolTaskStatus) {
patrolTaskStatus.setCreateTime(new Date());
patrolTaskStatus.setStartTime(new Date());
return this.patrolTaskStatusMapper.insertPatrolTaskStatus(patrolTaskStatus);
}
@TaskStatusChange(targetState = "1", async = true) // "1"表示已完成状态
public int updatePatrolTaskStatus(PatrolTaskStatus patrolTaskStatus) {
log.info(Color.RED + "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" + Color.END);
log.info("patrolTaskStatus: {}", patrolTaskStatus);
return this.patrolTaskStatusMapper.updatePatrolTaskStatus(patrolTaskStatus);
}
public int updatePatrolTaskStatusOfTaskProgress(PatrolTaskStatus patrolTaskStatus) {
return this.patrolTaskStatusMapper.updatePatrolTaskStatusOfTaskProgress(patrolTaskStatus);
}
@TaskStatusChange(targetState = "1", async = true) // "1"表示已完成状态
public int updatePatrolTaskStatusOfTaskState(PatrolTaskStatus patrolTaskStatus) {
return this.patrolTaskStatusMapper.updatePatrolTaskStatusOfTaskState(patrolTaskStatus);
}
public int updatePatrolTaskStatusOfTaskStateAndEndTime(PatrolTaskStatus patrolTaskStatus) {
return this.patrolTaskStatusMapper.updatePatrolTaskStatusOfTaskStateAndEndTime(patrolTaskStatus);
}
public int updatePatrolTaskStatusRunning(PatrolTaskStatus patrolTaskStatus) {
return this.patrolTaskStatusMapper.updatePatrolTaskStatusRunning(patrolTaskStatus);
}
public int deletePatrolTaskStatusByLineIds(Long[] lineIds) {
return this.patrolTaskStatusMapper.deletePatrolTaskStatusByLineIds(lineIds);
}
public int deletePatrolTaskStatusByLineId(Long lineId) {
return this.patrolTaskStatusMapper.deletePatrolTaskStatusByLineId(lineId);
}
private final Logger log = LoggerFactory.getLogger(this.getClass());
private final PatrolTaskStatusMapper patrolTaskStatusMapper;
@Resource
private RedisService redisService;
@Resource
private IPatrolTaskService patrolTaskService;
@Resource
private IPatrolTaskResultMainService patrolTaskResultMainService;
@Resource
private PatrolResultMapper patrolResultMapper;
@Autowired
public PatrolTaskStatusServiceImpl(PatrolTaskStatusMapper patrolTaskStatusMapper) {
this.patrolTaskStatusMapper = patrolTaskStatusMapper;
}
public PatrolTaskStatus selectPatrolTaskStatusByLineId(Long lineId) {
return this.patrolTaskStatusMapper.selectPatrolTaskStatusByLineId(lineId);
}
public PatrolTaskStatus selectPatrolTaskStatusByTaskPatrolledId(String taskPatrolledId) {
return this.patrolTaskStatusMapper.selectPatrolTaskStatusByTaskPatrolledId(taskPatrolledId);
}
public List<PatrolTaskStatus> selectPatrolTaskStatusList(PatrolTaskStatus patrolTaskStatus) {
return this.patrolTaskStatusMapper.selectPatrolTaskStatusList(patrolTaskStatus);
}
public List<PatrolTaskStatus> selectPatrolTaskStatusCount(PatrolTaskStatus patrolTaskStatus) {
return this.patrolTaskStatusMapper.selectPatrolTaskStatusCount(patrolTaskStatus);
}
public List<TaskCount> selectCountList(PatrolTaskStatus patrolTaskStatus) {
return this.patrolTaskStatusMapper.selectCountList(patrolTaskStatus);
}
@Override
public List<TaskCount> selectCountListByDate(PatrolTaskStatus patrolTaskStatus) {
return this.patrolTaskStatusMapper.selectCountListByDate(patrolTaskStatus);
}
@TaskStatusChange(targetState = "1", async = true) // "1"表示已完成状态
public int insertPatrolTaskStatus(PatrolTaskStatus patrolTaskStatus) {
patrolTaskStatus.setCreateTime(new Date());
patrolTaskStatus.setStartTime(new Date());
return this.patrolTaskStatusMapper.insertPatrolTaskStatus(patrolTaskStatus);
}
@Override
@TaskStatusChange(targetState = "1", async = true) // "1"表示已完成状态
public int updatePatrolTaskStatus(PatrolTaskStatus patrolTaskStatus) {
log.info(Color.RED + "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" + Color.END);
log.info("patrolTaskStatus: {}", patrolTaskStatus);
return this.patrolTaskStatusMapper.updatePatrolTaskStatus(patrolTaskStatus);
}
public int updatePatrolTaskStatusOfTaskProgress(PatrolTaskStatus patrolTaskStatus) {
return this.patrolTaskStatusMapper.updatePatrolTaskStatusOfTaskProgress(patrolTaskStatus);
}
@TaskStatusChange(targetState = "1", async = true) // "1"表示已完成状态
public int updatePatrolTaskStatusOfTaskState(PatrolTaskStatus patrolTaskStatus) {
return this.patrolTaskStatusMapper.updatePatrolTaskStatusOfTaskState(patrolTaskStatus);
}
public int updatePatrolTaskStatusOfTaskStateAndEndTime(PatrolTaskStatus patrolTaskStatus) {
return this.patrolTaskStatusMapper.updatePatrolTaskStatusOfTaskStateAndEndTime(patrolTaskStatus);
}
public int updatePatrolTaskStatusRunning(PatrolTaskStatus patrolTaskStatus) {
return this.patrolTaskStatusMapper.updatePatrolTaskStatusRunning(patrolTaskStatus);
}
public int deletePatrolTaskStatusByLineIds(Long[] lineIds) {
return this.patrolTaskStatusMapper.deletePatrolTaskStatusByLineIds(lineIds);
}
public int deletePatrolTaskStatusByLineId(Long lineId) {
return this.patrolTaskStatusMapper.deletePatrolTaskStatusByLineId(lineId);
}
@Override
public int insertIgnorePatrolTaskStatus(PatrolTaskStatus patrolTaskStatusMain) {
return this.patrolTaskStatusMapper.insertIgnorePatrolTaskStatus(patrolTaskStatusMain);
}
@Override
public List<PatrolTaskStatus> selectPatrolTaskStatusListByMainId(String taskPatrolledId) {
return this.patrolTaskStatusMapper.selectPatrolTaskStatusListByMainId(taskPatrolledId);
}
@Override
public PatrolTaskStatus selectPatrolTaskStatusMain(String taskPatrolledId) {
return patrolTaskStatusMapper.selectPatrolTaskStatusMain(taskPatrolledId);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateTaskProgress(Long lineId, String collectionProgress, String algorithmProgress, String state) {
log.info("==========updateTaskProgress=============== lineId: {}", lineId);
if (lineId == null) {
throw new IllegalArgumentException("lineId 不能为空");
}
// 查找任务
PatrolTaskStatus patrolTaskStatus = selectPatrolTaskStatusByLineId(lineId);
if (patrolTaskStatus == null) {
throw new IllegalArgumentException("执行任务不存在,lineId: " + lineId);
}
// 主任务由子任务更新
if (TaskType.MAIN.getCode().equals(patrolTaskStatus.getTaskType())) {
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());
}
// 更新子任务或普通任务
updatePatrolTaskStatus(patrolTaskStatus);
log.info("updateTaskProgress: {}", patrolTaskStatus);
// 如果是子任务需要同步更新主任务
if (TaskType.SUB.getCode().equals(patrolTaskStatus.getTaskType()) && patrolTaskStatus.getMainId() != null) {
updateMainTask(patrolTaskStatus.getMainId(), patrolTaskStatus.getTaskCode());
}
}
private void updateMainTask(String mainId, String taskCode) {
// 查找子任务
List<PatrolTaskStatus> subTasks = selectPatrolTaskStatusListByMainId(mainId);
if (subTasks.isEmpty()) {
return;
}
BigDecimal execTotalPoints = BigDecimal.ZERO;
BigDecimal execTotalAlgorithms = BigDecimal.ZERO;
TaskStatus mainTaskState = TaskStatus.DONE;
// 计算平均进度
for (PatrolTaskStatus subTask : subTasks) {
String[] taskNames = subTask.getTaskName().split("@");
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);
}
int subTotalPoints = algList.size();
int subTotalAlgorithms = algList.stream().mapToInt(s -> s.split(",").length).sum();
BigDecimal subTaskProgress = BigDecimalUtil.toBigDecimal(subTask.getTaskProgress());
BigDecimal subAlgorithmProgress = BigDecimalUtil.toBigDecimal(subTask.getTaskEstimatedTime());
BigDecimal subExecPoints = subTaskProgress.multiply(new BigDecimal(subTotalPoints)).divide(BigDecimal.valueOf(100), 1, RoundingMode.DOWN);
BigDecimal subExecAlgorithms = subAlgorithmProgress.multiply(new BigDecimal(subTotalAlgorithms)).divide(BigDecimal.valueOf(100), 1, RoundingMode.DOWN);
execTotalPoints = execTotalPoints.add(subExecPoints);
execTotalAlgorithms = execTotalAlgorithms.add(subExecAlgorithms);
log.info("subTotalPoints:{},subTotalAlgorithms:{},execTotalPoints:{},execTotalAlgorithms:{}", subTotalPoints, subTotalAlgorithms, execTotalPoints, execTotalAlgorithms);
}
// 按状态优先级设置主任务状态
TaskStatus subTaskState = TaskStatus.fromCode(subTask.getTaskState());
if (subTaskState == null) {
continue;
}
if (mainTaskState.getPriority() > subTaskState.getPriority()) {
mainTaskState = subTaskState;
}
}
List<String> algList = patrolResultMapper.selectAlgList(taskCode, null, null);
int totalPoints = algList.size();
int totalAlgorithms = algList.stream().mapToInt(s -> s.split(",").length).sum();
log.info("totalPoints:{},totalAlgorithms:{}", totalPoints, totalAlgorithms);
BigDecimal mainTaskProgress = execTotalPoints
.multiply(BigDecimal.valueOf(100))
.divide(
BigDecimal.valueOf(totalPoints),
1, RoundingMode.DOWN
);
BigDecimal mainAlgorithmProgress = execTotalAlgorithms
.multiply(BigDecimal.valueOf(100))
.divide(
BigDecimal.valueOf(totalAlgorithms),
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 )){
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);
// generateTaskResultMain(mainTask);
}
mainTask.setTaskState(mainTaskState.getCode());
mainTask.setTaskProgress(mainTaskProgress.toString());
mainTask.setTaskEstimatedTime(mainAlgorithmProgress.toString());
// 更新主任务
patrolTaskStatusMapper.updatePatrolTaskStatus(mainTask);
}
// 生成巡视归档记录
@Override
public int generateTaskResultMain(PatrolTaskStatus patrolTaskStatus) {
int mainId = -1;
if (patrolTaskStatus != null && !patrolTaskStatus.getTaskType().equals(TaskType.SUB.getCode())) {
PatrolTaskResultMain taskResultMain = new PatrolTaskResultMain();
taskResultMain.setTaskId(patrolTaskStatus.getTaskCode());
taskResultMain.setTaskCode(patrolTaskStatus.getTaskCode());
taskResultMain.setTaskTime(patrolTaskStatus.getStartTime());
taskResultMain.setTaskPatrolledId(patrolTaskStatus.getTaskPatrolledId());
taskResultMain.setTaskName(patrolTaskStatus.getTaskName());
taskResultMain.setCreateBy("sys");
taskResultMain.setCreateTime(new Date());
taskResultMain.setFileStatus("0");
PatrolTask patrolTask = patrolTaskService.selectPatrolTaskByTaskId(Long.valueOf(patrolTaskStatus.getTaskCode()));
taskResultMain.setTaskType(patrolTask.getType());
taskResultMain.setDevType(patrolTask.getDevType());
if (patrolTask != null && StringUtils.isNotEmpty(patrolTask.getAreaName())) {
taskResultMain.setAreaName(patrolTask.getAreaName());
}
taskResultMain.setUnifiedTaskPatrolledId(patrolTaskStatus.getTaskPatrolledId());
mainId = patrolTaskResultMainService.insertPatrolTaskResultMain(taskResultMain);
log.info("生成巡视归档记录: {}", taskResultMain);
} else {
log.info("子任务不生成归档记录!");
}
return mainId;
}
} }

+ 142
- 8
inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolResultMapper.xml View File

@ -214,6 +214,7 @@
ORDER BY line_id desc ORDER BY line_id desc
</select> </select>
<select id="selectPatrolDataResultByTaskCodeV2" parameterType="ResultAnalysis" resultMap="PatrolDataResult"> <select id="selectPatrolDataResultByTaskCodeV2" parameterType="ResultAnalysis" resultMap="PatrolDataResult">
select select
b.line_id , b.line_id ,
@ -274,9 +275,15 @@
left join basedata_eqpbook h on f.eqp_book_id = h.eqp_book_id left join basedata_eqpbook h on f.eqp_book_id = h.eqp_book_id
</if> </if>
<where> <where>
<if test="taskPatrolId != null and taskPatrolId != ''">
and a.task_patrolled_id=#{taskPatrolId}
and b.task_patrol_id=#{taskPatrolId}
<if test="taskPatrolIds != null and !taskPatrolIds.isEmpty()">
and a.task_patrolled_id IN
<foreach collection="taskPatrolIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
and b.task_patrol_id IN
<foreach collection="taskPatrolIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if> </if>
<if test="objectId != null and objectId != ''">and b.objectId=#{objectId}</if> <if test="objectId != null and objectId != ''">and b.objectId=#{objectId}</if>
<if test="result != null and result != ''">and b.result = #{result}</if> <if test="result != null and result != ''">and b.result = #{result}</if>
@ -320,8 +327,6 @@
</where> </where>
<if test="abnormal == 0">ORDER BY d.device_name,a.device_name</if> <if test="abnormal == 0">ORDER BY d.device_name,a.device_name</if>
<if test="abnormal == 1">ORDER BY b.point_status</if> <if test="abnormal == 1">ORDER BY b.point_status</if>
</select> </select>
<select id="selectPatrolDataResultByTaskCodeList" parameterType="PatrolResult" resultMap="PatrolDataResult"> <select id="selectPatrolDataResultByTaskCodeList" parameterType="PatrolResult" resultMap="PatrolDataResult">
@ -1270,8 +1275,137 @@
</select> </select>
<select id="selectAlgList" parameterType="String" resultType="String"> <select id="selectAlgList" parameterType="String" resultType="String">
SELECT alg_subtype_ids FROM basedata_patrolpoint WHERE patrol_point_id IN (
SELECT device_id FROM patrol_task_info WHERE task_major_id = #{taskId}
)
SELECT 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>
<if test="taskId != null and taskId != ''">and i.task_major_id = #{taskId}</if>
<if test="sendCode != null and sendCode != ''">and e.main_system_code = #{sendCode}</if>
<if test="devType != null and devType != ''">and i.dev_type = #{devType}</if>
</where>
</select>
<select id="selectPatrolDataResultByTaskCodeV3" parameterType="ResultAnalysis" resultMap="PatrolDataResult">
SELECT
b.line_id,
a.device_name AS point_name,
a.device_id AS point_id,
a.create_time AS patrol_time,
b.point_status,
b.result_type AS warn_status,
b.description AS `desc`,
<if test="filter == 0 ">a.file_path as img,</if>
<if test="filter == 1 ">b.res_img_url as img,</if>
<if test="filter == null or filter ==''">
case when b.filter = 0 then a.file_path else b.res_img_url end as img,
</if>
b.image_normal_url_path,
a.file_path,
a.file_type AS img_type,
a.data_type,
b.filter,
b.request_id,
b.res_img_url AS img_analysis,
b.original_value,
b.res_status,
d.device_name,
e.area_name,
b.alg_type,
b.objectId,
b.suggestion,
b.res_value,
s.pos_type,
b.task_patrol_id,
CASE
WHEN s.pos_type = '0' THEN g.channel_name
ELSE h.patrol_device_name
END AS channel_name,
CASE
WHEN s.pos_type = '0' THEN g.device_source
ELSE h.device_source
END AS device_source
FROM patrol_result a
INNER JOIN result_analysis b
ON a.line_id = b.business_id
LEFT JOIN basedata_patrolpoint c
ON a.device_id = c.patrol_point_id
LEFT JOIN basedata_device d
ON c.device_id = d.device_id
LEFT JOIN basedata_area e
ON e.area_id = d.area_id
LEFT JOIN patrol_task_status s
ON s.task_patrolled_id = a.task_patrolled_id
LEFT JOIN patrol_preset_pos f1
ON s.pos_type = '0'
AND c.patrol_point_id = f1.patrol_point_id
LEFT JOIN basedata_eqpbook_channel g
ON f1.channel_id = g.channel_id
<if test="channelName != null and channelName != ''">and g.channel_name like concat('%',
#{channelName}, '%')
</if>
<if test="deviceSource != null and deviceSource != ''">and g.device_source like concat('%',
#{deviceSource}, '%')
</if>
LEFT JOIN basedata_patrolpoint_preset f2
ON s.pos_type != '0'
AND c.patrol_point_id = f2.patrol_point_id
LEFT JOIN basedata_eqpbook h
ON f2.eqp_book_id = h.eqp_book_id
<if test="channelName != null and channelName != ''">and h.patrol_device_name like concat('%',
#{channelName}, '%')
</if>
<if test="deviceSource != null and deviceSource != ''">and h.device_source like concat('%',
#{deviceSource}, '%')
</if>
<where>
(g.channel_id IS NOT NULL OR h.eqp_book_id IS NOT NULL)
<if test="taskPatrolIds != null and !taskPatrolIds.isEmpty()">
and a.task_patrolled_id IN
<foreach collection="taskPatrolIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
and b.task_patrol_id IN
<foreach collection="taskPatrolIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
<if test="pointStatusList != null and !pointStatusList.isEmpty()">
and b.point_status IN
<foreach collection="pointStatusList" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
<if test="objectId != null and objectId != ''">and b.objectId=#{objectId}</if>
<if test="result != null and result != ''">and b.result = #{result}</if>
<if test="resultType != null and resultType != ''">and b.result_type =
#{resultType}
</if>
<if test="filter != null and filter != ''">
and b.filter = #{filter}
</if>
<if test="resCode != null and resCode!= ''">
and b.res_code=#{resCode}
</if>
<if test="pointStatus != null and pointStatus != ''">
and b.point_status = #{pointStatus}
</if>
<if test="pointName != null and pointName != ''">and a.device_name like concat('%', #{pointName}, '%')</if>
<if test="deviceName != null and deviceName != ''">and d.device_name like concat('%', #{deviceName}, '%')
</if>
</where>
<if test="abnormal == 0">ORDER BY d.device_name,a.device_name</if>
<if test="abnormal == 1">ORDER BY b.point_status</if>
</select> </select>
</mapper> </mapper>

+ 18
- 6
inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskResultMainMapper.xml View File

@ -142,12 +142,12 @@
</select> </select>
<select id="selectLineIds" resultType="java.lang.Long"> <select id="selectLineIds" resultType="java.lang.Long">
select
line_id
from
patrol_task_result_main
where
unified_task_patrolled_id in (select unified_task_patrolled_id from patrol_task_result_main where line_id = #{lineId})
SELECT DISTINCT d.line_id
FROM patrol_task_result_main a
JOIN patrol_task_status b ON a.task_patrolled_id = b.task_patrolled_id
JOIN patrol_task_status c ON c.parent_id = b.line_id
JOIN patrol_task_result_main d ON c.task_patrolled_id = d.task_patrolled_id
WHERE a.line_id = #{lineId};
</select> </select>
<select id="selectLineIdsByList" resultType="java.lang.Long"> <select id="selectLineIdsByList" resultType="java.lang.Long">
@ -176,6 +176,18 @@
</foreach> </foreach>
</select> </select>
<select id="selectPatrolTaskResultMainOne" resultMap="PatrolTaskResultMainResult" parameterType="String">
select c.* from patrol_task_result_main c
where c.task_patrolled_id = (
select
CASE
WHEN a.main_id is null THEN a.task_patrolled_id
ELSE a.main_id
END
FROM patrol_task_status a
where a.task_patrolled_id = #{patrolTaskId}
)
</select>
<insert id="insertPatrolTaskResultMain" parameterType="PatrolTaskResultMain" useGeneratedKeys="true" <insert id="insertPatrolTaskResultMain" parameterType="PatrolTaskResultMain" useGeneratedKeys="true"
keyProperty="lineId"> keyProperty="lineId">


+ 169
- 3
inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskStatusMapper.xml View File

@ -22,6 +22,40 @@
<result property="endTime" column="end_time"/> <result property="endTime" column="end_time"/>
<result property="execType" column="exec_type"/> <result property="execType" column="exec_type"/>
<result property="beginTime" column="beginTime"/> <result property="beginTime" column="beginTime"/>
<result property="taskType" column="task_type"/>
<result property="mainId" column="main_id"/>
<collection property="children"
ofType="PatrolTaskStatus"
select="selectPatrolTaskStatusListByMainId"
column="task_patrolled_id"
/>
</resultMap>
<resultMap type="PatrolTaskStatus" id="PatrolTaskStatusResultV2">
<result property="lineId" column="line_id"/>
<result property="taskPatrolledId" column="task_patrolled_id"/>
<result property="taskName" column="task_name"/>
<result property="taskCode" column="task_code"/>
<result property="taskState" column="task_state"/>
<result property="planStartTime" column="plan_start_time"/>
<result property="startTime" column="start_time"/>
<result property="taskProgress" column="task_progress"/>
<result property="taskEstimatedTime" column="task_estimated_time"/>
<result property="description" column="description"/>
<result property="posType" column="pos_type"/>
<result property="code" column="code"/>
<result property="pos" column="pos"/>
<result property="patrolType" column="patrol_type"/>
<result property="endTime" column="end_time"/>
<result property="execType" column="exec_type"/>
<result property="taskType" column="task_type"/>
<result property="beginTime" column="beginTime"/>
<result property="mainId" column="main_id"/>
<collection property="children"
ofType="PatrolTaskStatus"
select="selectPatrolTaskStatusListByMainId"
column="task_patrolled_id"
/>
</resultMap> </resultMap>
<sql id="selectPatrolTaskStatusVo"> <sql id="selectPatrolTaskStatusVo">
@ -40,7 +74,9 @@
pos_type, pos_type,
code, code,
pos, pos,
exec_type
exec_type,
task_type,
main_id
from patrol_task_status from patrol_task_status
</sql> </sql>
@ -79,8 +115,72 @@
a.pos, a.pos,
a.end_time, a.end_time,
b.type as patrol_type, b.type as patrol_type,
b.execution_status as exec_type from patrol_task_status a
LEFT JOIN patrol_task b on a.task_code=b.task_code
a.task_type,
a.main_id,
b.execution_status as exec_type
from patrol_task_status a
LEFT JOIN patrol_task b on a.task_code=b.task_code
<where>
<if test="filterTaskType != null and filterTaskType != ''">and a.task_type != #{filterTaskType}
</if>
<if test="taskPatrolledId != null and taskPatrolledId != ''">and a.task_patrolled_id = #{taskPatrolledId}
</if>
<if test="taskName != null and taskName != ''">
and a.task_name like concat('%', #{taskName}, '%')
</if>
<if test="areaTaskName != null and areaTaskName != ''">
and b.area_name like concat('%', #{areaTaskName}, '%')
</if>
<if test="taskCode != null and taskCode != ''">and a.task_code = #{taskCode}</if>
<if test="taskState != null and taskState != ''">and a.task_state = #{taskState}</if>
<if test="planStartTime != null ">and a.plan_start_time = #{planStartTime}</if>
<if test="startTime != null ">
and date_format(a.start_time,'%y%m%d') >= date_format(#{startTime},'%y%m%d')
</if>
<if test="createTime != null ">and date_format(a.create_time,'%y%m%d') =
date_format(#{createTime},'%y%m%d')
</if>
<if test="taskProgress != null and taskProgress != ''">and a.task_progress = #{taskProgress}</if>
<if test="taskEstimatedTime != null and taskEstimatedTime != ''">and a.task_estimated_time =
#{taskEstimatedTime}
</if>
<if test="description != null and description != ''">and a.description = #{description}</if>
<if test="posType != null and posType != ''">and a.pos_type = #{posType}</if>
<if test="code != null and code != ''">and a.code = #{code}</if>
<if test="pos != null and pos != ''">and a.pos = #{pos}</if>
<if test="patrolType != null and patrolType != ''">and b.type = #{patrolType}</if>
<if test="beginTime != null and beginTime != ''">
and date_format(a.start_time,'%y%m%d') &gt;= date_format(#{beginTime},'%y%m%d')
</if>
<if test="endTime != null and endTime != ''">
and date_format(a.start_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')
</if>
</where>
ORDER BY line_id desc
</select>
<select id="selectPatrolTaskStatusPage" resultType="com.inspect.taskstatus.domain.PatrolTaskStatus">
a.line_id,
a.task_patrolled_id,
a.task_name,
a.task_code,
a.task_state,
a.plan_start_time,
a.start_time,
a.task_progress,
a.task_estimated_time,
a.description,
a.pos_type,
a.code,
a.pos,
a.end_time,
b.type as patrol_type,
a.task_type,
a.main_id,
b.execution_status as exec_type
from patrol_task_status a
LEFT JOIN patrol_task b on a.task_code=b.task_code
LEFT JOIN
<where> <where>
<if test="taskPatrolledId != null and taskPatrolledId != ''">and a.task_patrolled_id = #{taskPatrolledId} <if test="taskPatrolledId != null and taskPatrolledId != ''">and a.task_patrolled_id = #{taskPatrolledId}
</if> </if>
@ -114,8 +214,11 @@
<if test="endTime != null and endTime != ''"> <if test="endTime != null and endTime != ''">
and date_format(a.start_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d') and date_format(a.start_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')
</if> </if>
AND task_type != 2
AND main_id IS NULL
</where> </where>
ORDER BY line_id desc ORDER BY line_id desc
</select> </select>
<resultMap type="TaskCount" id="TaskCountResult"> <resultMap type="TaskCount" id="TaskCountResult">
@ -238,6 +341,22 @@
GROUP BY m.month GROUP BY m.month
ORDER BY m.month ORDER BY m.month
</select> </select>
<select id="selectPatrolTaskStatusListByMainId" resultMap="PatrolTaskStatusResult">
<include refid="selectPatrolTaskStatusVo"/>
where main_id = #{taskPatrolledId}
</select>
<select id="selectPatrolTaskStatusMain" resultMap="PatrolTaskStatusResult" parameterType="String">
select a.* from patrol_task_status a
where a.task_patrolled_id = (
SELECT
CASE
WHEN b.main_id is null THEN b.task_patrolled_id
ELSE b.main_id
END
FROM patrol_task_status b where b.task_patrolled_id = #{taskPatrolledId}
)
</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
@ -258,6 +377,51 @@
<if test="endTime != null">end_time,</if> <if test="endTime != null">end_time,</if>
<if test="createTime != null">create_time,</if> <if test="createTime != null">create_time,</if>
<if test="execType != null">exec_type,</if> <if test="execType != null">exec_type,</if>
<if test="taskType != null">task_type,</if>
<if test="mainId != null">main_id,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="taskPatrolledId != null">#{taskPatrolledId},</if>
<if test="taskName != null">#{taskName},</if>
<if test="taskCode != null">#{taskCode},</if>
<if test="taskState != null">#{taskState},</if>
<if test="planStartTime != null">#{planStartTime},</if>
<if test="startTime != null">#{startTime},</if>
<if test="taskProgress != null">#{taskProgress},</if>
<if test="taskEstimatedTime != null">#{taskEstimatedTime},</if>
<if test="description != null">#{description},</if>
<if test="posType != null">#{posType},</if>
<if test="code != null">#{code},</if>
<if test="pos != null">#{pos},</if>
<if test="patrolType != null">#{patrolType},</if>
<if test="endTime != null">#{endTime},</if>
<if test="createTime != null">#{createTime},</if>
<if test="execType != null">#{execType},</if>
<if test="taskType != null">#{taskType},</if>
<if test="mainId != null">#{mainId},</if>
</trim>
</insert>
<insert id="insertIgnorePatrolTaskStatus" useGeneratedKeys="true" keyProperty="lineId">
insert ignore into patrol_task_status
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="taskPatrolledId != null">task_patrolled_id,</if>
<if test="taskName != null">task_name,</if>
<if test="taskCode != null">task_code,</if>
<if test="taskState != null">task_state,</if>
<if test="planStartTime != null">plan_start_time,</if>
<if test="startTime != null">start_time,</if>
<if test="taskProgress != null">task_progress,</if>
<if test="taskEstimatedTime != null">task_estimated_time,</if>
<if test="description != null">description,</if>
<if test="posType != null">pos_type,</if>
<if test="code != null">code,</if>
<if test="pos != null">pos,</if>
<if test="patrolType != null">patrol_type,</if>
<if test="endTime != null">end_time,</if>
<if test="createTime != null">create_time,</if>
<if test="execType != null">exec_type,</if>
<if test="taskType != null">task_type,</if>
<if test="mainId != null">main_id,</if>
</trim> </trim>
<trim prefix="values (" suffix=")" suffixOverrides=","> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="taskPatrolledId != null">#{taskPatrolledId},</if> <if test="taskPatrolledId != null">#{taskPatrolledId},</if>
@ -276,6 +440,8 @@
<if test="endTime != null">#{endTime},</if> <if test="endTime != null">#{endTime},</if>
<if test="createTime != null">#{createTime},</if> <if test="createTime != null">#{createTime},</if>
<if test="execType != null">#{execType},</if> <if test="execType != null">#{execType},</if>
<if test="taskType != null">#{taskType},</if>
<if test="mainId != null">#{mainId},</if>
</trim> </trim>
</insert> </insert>


+ 22
- 0
inspect-main/inspect-main-task/src/main/resources/mapper/task/ResultAnalysisMapper.xml View File

@ -121,6 +121,12 @@
<if test="lineId != null and lineId != ''"> <if test="lineId != null and lineId != ''">
and line_id = #{lineId} and line_id = #{lineId}
</if> </if>
<if test="taskPatrolIds != null and !taskPatrolIds.isEmpty()">
and task_patrol_id in
<foreach item="item" index="index" collection="taskPatrolIds" separator="," open="(" close=")">
#{item}
</foreach>
</if>
</where> </where>
ORDER BY line_id desc ORDER BY line_id desc
</select> </select>
@ -629,6 +635,22 @@
) aiYcNum ) aiYcNum
</select> </select>
<select id="countResultAnalysisSummary" parameterType="java.util.List" resultType="com.inspect.analysis.domain.ResultAnalysisSummaryDTO">
SELECT
task_patrol_id as taskPatrolledId,
SUM(CASE WHEN result_type = '0' AND filter = '1' THEN 1 ELSE 0 END) as csQxNum,
SUM(CASE WHEN result_type = '0' AND filter = '0' THEN 1 ELSE 0 END) as aiQxNum,
SUM(CASE WHEN result_type = '2' AND filter = '1' THEN 1 ELSE 0 END) as csYcNum,
SUM(CASE WHEN result_type = '2' AND filter = '0' THEN 1 ELSE 0 END) as aiYcNum,
COUNT(DISTINCT CASE WHEN result_type = '0' THEN CONCAT(objectId, '_', alg_type) END) as qxNum
FROM result_analysis
WHERE task_patrol_id IN
<foreach collection="list" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
AND result_type IN ('0', '2')
GROUP BY task_patrol_id
</select>
<select id="selectTaskAbnormalDataBatch" parameterType="java.util.List" resultType="map"> <select id="selectTaskAbnormalDataBatch" parameterType="java.util.List" resultType="map">
SELECT SELECT


Loading…
Cancel
Save