12 Commits

Author SHA1 Message Date
  yinhuaiwei 5e566cd058 fix: 对纠偏算法的结果解析进行修正 2 days ago
  yinhuaiwei d0c7d93e9d fix: 算法异常(code=2001|2002)不展示读数 2 days ago
  yinhuaiwei 25b246a011 feat: patrol_task表新增specified_alg字段,用于任务指定如纠偏等算法类型(可根据注释“任务指定算法类型”查看逻辑路径);去掉纠偏算法合并逻辑 3 days ago
  yinhuaiwei 6a85ad7b2e fix: 点位管理返回alarmThreshold字段,便于优化点位算法阈值回显 2 weeks ago
  yinhuaiwei 4494a7ee99 refactor: 重构任务详情点位巡检情况汇总的逻辑,记录至patrol_task_status的新增summary字段 2 weeks ago
  yinhuaiwei 9e6a264143 feat: 1.巡视详情和巡视归档可读数类算法,添加单位;2.优化纠偏算法的展示;3.巡视详情新增总-已巡检-未巡检点位数量统计 3 weeks ago
  wangguangyuan 4396b1bdb4 fix:1.阈值管理支持批量,2.巡视方案剔除未配置预置位的点位 3 weeks ago
  wangguangyuan 4ed94ad548 fix:1.联合任务归档task_patrolled_id改成mainId,2.分析失败的结果状态归为异常,3.纠偏的缺陷结果不需要在缺陷详情中展示 3 weeks ago
  wangguangyuan 6627a7fa37 Merge branch 'master' of http://git.ht-atia.cn/qinyanlei/inspect 4 weeks ago
  wangguangyuan 534bcf6ad0 feat:1.联合任务归档,2.新增点位监控编号后台处理,3.阈值管理 4 weeks ago
  yinhuaiwei c95db43c0b fix: 修复阈值管理查看历史记录接口异常 4 weeks ago
  wangguangyuan 88fb9e316f feat:1.新版巡视方案代码,2.纠偏算法不归档 4 weeks ago
52 changed files with 1762 additions and 422 deletions
Split View
  1. +18
    -1
      inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/constant/AlgConstants.java
  2. +25
    -0
      inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/enums/AlgTypeEnum.java
  3. +45
    -0
      inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/enums/DevTypeEnum.java
  4. +4
    -2
      inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/enums/ResStatusEnum.java
  5. +4
    -4
      inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/enums/TaskStatus.java
  6. +17
    -0
      inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/utils/BigDecimalUtil.java
  7. +1
    -0
      inspect-job/src/main/java/com/inspect/job/domain/task/PatrolTask.java
  8. +4
    -0
      inspect-job/src/main/java/com/inspect/job/domain/task/PatrolTaskExecRecord.java
  9. +19
    -22
      inspect-job/src/main/java/com/inspect/job/task/JobMainTask.java
  10. +1
    -0
      inspect-main/inspect-main-task-exec/src/main/java/com/inspect/exec/controller/PatrolTaskExecController.java
  11. +29
    -5
      inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/controller/ResultAnalysisController.java
  12. +0
    -18
      inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/domain/AlgValue.java
  13. +1
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/domain/ResultAnalysis.java
  14. +6
    -1
      inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/service/impl/AnalyseResponseServiceImpl.java
  15. +61
    -62
      inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/utils/ResultAnalysisUtils.java
  16. +3
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/fegin/FeignBasedataAreaService.java
  17. +6
    -3
      inspect-main/inspect-main-task/src/main/java/com/inspect/insreport/controller/InspectionReportController.java
  18. +3
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/insreportdata/domain/InspectionReportData.java
  19. +15
    -35
      inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/controller/PatrolResultController.java
  20. +4
    -20
      inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/domain/PatrolResultRef.java
  21. +5
    -1
      inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/mapper/PatrolResultMapper.java
  22. +6
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/service/IPatrolResultService.java
  23. +72
    -13
      inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/service/impl/PatrolResultServiceImpl.java
  24. +5
    -29
      inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/domain/PatrolTaskResultMain.java
  25. +604
    -57
      inspect-main/inspect-main-task/src/main/java/com/inspect/task/controller/PatrolTaskController.java
  26. +9
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/task/domain/PatrolData.java
  27. +6
    -50
      inspect-main/inspect-main-task/src/main/java/com/inspect/task/domain/PatrolTask.java
  28. +6
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/task/mapper/PatrolTaskMapper.java
  29. +7
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/IPatrolTaskService.java
  30. +30
    -4
      inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/impl/PatrolTaskServiceImpl.java
  31. +5
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/controller/PatrolTaskStatusController.java
  32. +4
    -2
      inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/domain/PatrolTaskStatus.java
  33. +5
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/mapper/PatrolTaskStatusMapper.java
  34. +102
    -31
      inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/service/impl/PatrolTaskStatusServiceImpl.java
  35. +5
    -3
      inspect-main/inspect-main-task/src/main/resources/mapper/task/InspectionReportDataMapper.xml
  36. +21
    -1
      inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolResultMapper.xml
  37. +97
    -3
      inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskMapper.xml
  38. +69
    -5
      inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskStatusMapper.xml
  39. +49
    -0
      inspect-metadata/src/main/java/com/inspect/metadata/area/controller/BaseDataAreaController.java
  40. +55
    -0
      inspect-metadata/src/main/java/com/inspect/metadata/area/domain/BaseDataArea.java
  41. +97
    -29
      inspect-metadata/src/main/java/com/inspect/metadata/eqpbook/controller/BasedataEqpBookController.java
  42. +9
    -1
      inspect-metadata/src/main/java/com/inspect/metadata/patrolpointmnt/controller/BasedataPatrolPointController.java
  43. +5
    -0
      inspect-metadata/src/main/java/com/inspect/metadata/patrolpointmnt/domain/BasedataPatrolPoint.java
  44. +2
    -0
      inspect-metadata/src/main/java/com/inspect/metadata/patrolpointmnt/mapper/BasedataPatrolPointMapper.java
  45. +1
    -1
      inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/controller/BasedataDeviceController.java
  46. +10
    -0
      inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/domain/vo/AreaDeviceTreeSelect.java
  47. +1
    -1
      inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/service/IBasedataDeviceService.java
  48. +144
    -6
      inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/service/impl/BasedataDeviceServiceImpl.java
  49. +4
    -0
      inspect-metadata/src/main/java/com/inspect/metadata/threshold/domain/BasedataThresholdModification.java
  50. +9
    -3
      inspect-metadata/src/main/resources/mapper/eqpbook/BasedataEqpBookMapper.xml
  51. +45
    -0
      inspect-metadata/src/main/resources/mapper/patrolpointmnt/BasedataPatrolPointMapper.xml
  52. +7
    -9
      inspect-metadata/src/main/resources/mapper/threshold/BasedataThresholdModificationMapper.xml

+ 18
- 1
inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/constant/AlgConstants.java View File

@ -2,10 +2,13 @@ package com.inspect.base.core.constant;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class AlgConstants {
public static final String METER = "meter";
public static final String GIS_METER_2 = "gis_meter2";
public static final String GIS_METER = "gis_meter";
public static final String INFRA_1800 = "infra_1800";
public static final String INFRA_YU3 = "infra_yu3";
public static final String INFRA_CAMERA = "infra_camera";
@ -31,7 +34,7 @@ public class AlgConstants {
INFRARED2,
"isolator",
"gis_meter",
"correction",
CORRECTION,
"switch",
GIS_METER_2
);
@ -47,4 +50,18 @@ public class AlgConstants {
INFRA_CAMERA,
INFRA_CAMERA_REVERSE
);
/**
* 表计类型的算法
*/
public static final List<String> ALG_METER_LIST = Arrays.asList(
METER,
"gis_meter",
GIS_METER_2
);
/**
* 可读数的算法红外和表计
*/
public static final List<String> READABLE_ALG_LIST = Stream.concat(ALG_INFRARED_LIST.stream(), ALG_METER_LIST.stream()).collect(Collectors.toList());
}

+ 25
- 0
inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/enums/AlgTypeEnum.java View File

@ -0,0 +1,25 @@
package com.inspect.base.core.enums;
public enum AlgTypeEnum {
// 表计
METER("1", "表计"),
// 外观
APPEARANCE("2", "外观"),
// 红外
INFRARED("3", "红外");
private final String code;
private final String info;
AlgTypeEnum(String code, String info) {
this.code = code;
this.info = info;
}
public String getCode() {
return this.code;
}
public String getInfo() {
return this.info;
}
}

+ 45
- 0
inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/enums/DevTypeEnum.java View File

@ -0,0 +1,45 @@
package com.inspect.base.core.enums;
/**
* 设备类型
*/
public enum DevTypeEnum {
// 机器人
ROBOT("0", "机器人"),
// 室外轮式机器人
ROBOT_OUT("1", "室外轮式机器人"),
// 室内轮式机器人
ROBOT_IN("2", "室内轮式机器人"),
// 挂轨机器人
ROBOT_HANG("3", "挂轨机器人"),
// 高清视频
VIDEO("10", "高清视频"),
// 硬盘录像机
DVR("11", "硬盘录像机"),
// 智能分析主机
ANALYZE_HOST("12", "智能分析主机"),
// 无人机
DRONE("13", "无人机"),
// 声纹
VOICE("14", "声纹"),
// 巡视主机
HOST("20", "巡视主机");
private final String code;
private final String info;
DevTypeEnum(String code, String info) {
this.code = code;
this.info = info;
}
public String getCode() {
return this.code;
}
public String getInfo() {
return this.info;
}
}

+ 4
- 2
inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/enums/ResStatusEnum.java View File

@ -6,10 +6,12 @@ package com.inspect.base.core.enums;
* @create 2026-03-27 15:53
**/
public enum ResStatusEnum {
UNCONFIRM("0", "未确认"),
CONFIRM("1", "已确认"),
CANCEL("2", "已撤销");
CANCEL("2", "已撤销"),
CORRECT("3", "需要纠偏"),
CORRECTED("4", "完成纠偏");
private final String code;
private final String info;


+ 4
- 4
inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/enums/TaskStatus.java View File

@ -5,11 +5,11 @@ import lombok.Getter;
@Getter
public enum TaskStatus {
DONE("1", "已经执行", 5),
RUNNING("2", "正在执行", 3),
PAUSED("3", "暂停执行", 2),
HALTED("4", "终止执行", 0),
RUNNING("2", "正在执行", 0),
PAUSED("3", "暂停执行", 1),
HALTED("4", "终止执行", 3),
PENDING("5", "尚未执行", 4),
EXPIRED("6", "超过期限", 1);
EXPIRED("6", "超过期限", 2);
private final String code;
private final String info;


+ 17
- 0
inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/utils/BigDecimalUtil.java View File

@ -1,6 +1,7 @@
package com.inspect.base.core.utils;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class BigDecimalUtil {
public static double round(double f) {
@ -34,4 +35,20 @@ public class BigDecimalUtil {
return BigDecimal.ZERO;
}
}
/**
* 结果保留X位小数
*/
public static String toOneDecimal(String str, int scale) {
if (str == null || str.trim().isEmpty()) {
return str;
}
try {
return new BigDecimal(str.trim())
.setScale(scale, RoundingMode.DOWN)
.toString();
} catch (NumberFormatException e) {
return str;
}
}
}

+ 1
- 0
inspect-job/src/main/java/com/inspect/job/domain/task/PatrolTask.java View File

@ -99,6 +99,7 @@ public class PatrolTask extends BaseEntity {
private String areaName;
private List<PatrolTaskInfo> eqPointList;
private List<PatrolTaskStatus> patrolTaskStatusList;
private String specifiedAlg;
@Override
public boolean equals(Object object) {


+ 4
- 0
inspect-job/src/main/java/com/inspect/job/domain/task/PatrolTaskExecRecord.java View File

@ -52,4 +52,8 @@ public class PatrolTaskExecRecord extends BaseEntity {
private Integer finishNumber;
private Integer cursorNumber;
private Integer rebootTimes;
/**
* 任务指定算法类型
*/
private String specifiedAlg;
}

+ 19
- 22
inspect-job/src/main/java/com/inspect/job/task/JobMainTask.java View File

@ -490,7 +490,7 @@ public class JobMainTask {
private PatrolTaskExecRecord prePointExec(PatrolTaskExecRecord taskExecRecord, PatrolTaskInfo patrolTaskInfo, int infoListSize) {
String uuid = UUID.randomUUID().toString().trim().replaceAll(StringUtils.DASH, StringUtils.EMPTY);
final PatrolPresetPosSlim presetPos = queryPatrolPresetPos(uuid, patrolTaskInfo.getDeviceId());
if(StringUtils.isNotEmpty(presetPos.getAddress())) {
if (StringUtils.isNotEmpty(presetPos.getAddress())) {
log.info("prePointExec remake infrared address: raw: {}", presetPos.getAddress());
String infraredAddress = getInfraredAddress(3, presetPos);
presetPos.setAddress(infraredAddress);
@ -527,7 +527,6 @@ public class JobMainTask {
String taskPatrolId = taskExecRecord.getTaskPatrolId();
if (PresetAction.PHOTO.getCode().equals(presetAction.getActionType())) {
final String chanType = presetPos.getChannelType();
fileTypes.append("ir".equals(chanType) ? "1" : "vl".equals(chanType) ? "2" : "").append(",");
//boolean bOk = false;
try {
log.info("PHOTO_PRESET_TYPE taskPatrolId: {}, chanType: {}, patrolPointId: {}, channelCode: {}, videoNvrCode: {}",
@ -537,6 +536,7 @@ public class JobMainTask {
presetPos.getChannelCode(),
presetPos.getVideoNvrCode());
if ("vl".equals(chanType)) {
fileTypes.append(2).append(",");
String paramUrl = liveIVS_URL + "/api/v1/device/channelsnap?serial="
+ presetPos.getVideoNvrCode()
+ "&realtime=true&code=" + presetPos.getChannelCode()
@ -558,6 +558,9 @@ public class JobMainTask {
recordPersist(taskExecRecord, infoListSize, patrolTaskInfo, presetPos, fileTypes, filePaths);
} else if ("ir".equals(chanType)) {
Map<String, String> algSubtypeIdMap = taskExecClient.getAlgTypeListByPatrolPointId(String.valueOf(presetPos.getPatrolPointId()));
// 任务指定算法类型巡视详情的图片类型加载
boolean isSpecifiedAlg = StringUtils.isNotEmpty(taskExecRecord.getSpecifiedAlg());
fileTypes.append(isSpecifiedAlg ? "2" : "1").append(",");
String paramUrl = liveIVS_URL
+ "/api/v1/device/channelsnap?serial=" + presetPos.getVideoNvrCode()
+ "&realtime=true&code=" + presetPos.getChannelCode();
@ -1133,6 +1136,7 @@ public class JobMainTask {
patrolTaskExecRecord.setDeviceId("0");
patrolTaskExecRecord.setExecPointId(0L);
patrolTaskExecRecord.setTotalNumber(taskInfos.isEmpty() ? 1 : taskInfos.size());
patrolTaskExecRecord.setSpecifiedAlg(patrolTask.getSpecifiedAlg());
log.info("taskName: {}, taskCode: {}, taskPatrolledId: {}",
patrolTaskExecRecord.getTaskName(), patrolTaskExecRecord.getTaskCode(), patrolTaskExecRecord.getTaskPatrolId());
taskExecClient.addPatrolTaskExecRecord(patrolTaskExecRecord);
@ -1305,13 +1309,19 @@ public class JobMainTask {
// }
// }
private int calcTaskAlgorithmTotalNumber(List<PatrolTaskInfo> patrolTaskInfoList) {
private int calcTaskAlgorithmTotalNumber(List<PatrolTaskInfo> patrolTaskInfoList, String specifiedAlg) {
int totalAlgorithmNumber = 0;
for (PatrolTaskInfo patrolTaskInfo : patrolTaskInfoList) {
String result = taskExecClient.getAlgSubtypeIdsByPatrolPointId(patrolTaskInfo.getDeviceId());
if (StringUtils.isNotEmpty(result)) {
String[] algSubtypeIds = result.split(StringUtils.COMMA);
// 任务指定算法类型累加任务点位算法个数
if (StringUtils.isNotEmpty(specifiedAlg)) {
String[] algSubtypeIds = specifiedAlg.split(StringUtils.COMMA);
totalAlgorithmNumber += algSubtypeIds.length;
} else {
String result = taskExecClient.getAlgSubtypeIdsByPatrolPointId(patrolTaskInfo.getDeviceId());
if (StringUtils.isNotEmpty(result)) {
String[] algSubtypeIds = result.split(StringUtils.COMMA);
totalAlgorithmNumber += algSubtypeIds.length;
}
}
}
@ -1324,7 +1334,7 @@ public class JobMainTask {
deviceMap.computeIfAbsent(patrolTaskInfo.getDeviceCode(), k -> new ArrayList<>()).add(patrolTaskInfo);
}
int totalAlgorithmNumber = calcTaskAlgorithmTotalNumber(patrolTaskInfoList);
int totalAlgorithmNumber = calcTaskAlgorithmTotalNumber(patrolTaskInfoList, patrolTaskExecRecord.getSpecifiedAlg());
patrolTaskExecRecord.setTotalAlgorithmNumber(totalAlgorithmNumber);
asyncTaskPatrolPointCnt.set(0);
@ -1422,6 +1432,7 @@ public class JobMainTask {
patrolTaskExecRecord.getOldTaskPatrolId(),
isConsummate ? "false" : "true");
}
public List<List<PatrolTaskInfo>> optimizedGroup(List<PatrolTaskInfo> list) {
Map<String, List<PatrolTaskInfo>> deviceMap = new HashMap<>();
@ -1454,7 +1465,6 @@ public class JobMainTask {
return result;
}
private void execRemoveMaintainArea(List<PatrolTaskInfo> patrolTaskInfoList, List<MaintainRegion> maintAreaList, List<String> deviceIds) {
for (MaintainRegion area : maintAreaList) {
if (area.getStartTime().getTime() < System.currentTimeMillis() && area.getEndTime().getTime() > System.currentTimeMillis()) {
@ -1546,7 +1556,6 @@ public class JobMainTask {
return record != null && TaskStatus.RUNNING.getCode().equals(record.getTaskState());
}
@SuppressWarnings({"unused"})
public void generalTask() {
log.info("***************************** JobTaskTimer generalTask *************************************");
@ -1968,6 +1977,7 @@ public class JobMainTask {
.deviceId("0")
.execPointId(0L)
.totalNumber(taskInfos.isEmpty() ? 1 : taskInfos.size())
.specifiedAlg(patrolTask.getSpecifiedAlg())
.build();
try {
taskExecClient.addPatrolTaskExecRecord(patrolTaskExecRecord);
@ -1983,19 +1993,6 @@ public class JobMainTask {
}
}
// private void incrementRedisRecordCounter() {
// Integer redisRecCnt = redisService.getCacheObject(RedisConst.TASK_RECORD_CNT);
// if (redisRecCnt == null) {
// redisRecCnt = 1;
// redisService.setCacheObject(RedisConst.TASK_RECORD_CNT, redisRecCnt);
// } else {
// redisRecCnt++;
// redisService.setCacheObject(RedisConst.TASK_RECORD_CNT, redisRecCnt);
// }
//
// log.info(Color.YELLOW + "[JOB] redisRecCnt: {}" + Color.END, redisRecCnt);
// }
@SuppressWarnings({"unused"})
public void execRepeatDayTask(List<PatrolTask> patrolTaskList) {
log.info("***************************** JobTaskTimer execRepeatDayTask with parameters *************************************");


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

@ -927,6 +927,7 @@ public class PatrolTaskExecController extends BaseController {
.endTime(task.getEndTime())
.areaId(task.getAreaId())
.areaName(task.getAreaName())
.specifiedAlg(task.getSpecifiedAlg())
.build();
patrolTaskList.add(patrolTask);
return patrolTaskList;


+ 29
- 5
inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/controller/ResultAnalysisController.java View File

@ -5,7 +5,7 @@ import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.inspect.analysis.domain.*;
import com.inspect.analysis.service.IResultAnalysisService;
import com.inspect.base.core.constant.Color;
import com.inspect.base.core.constant.AlgConstants;
import com.inspect.base.core.domain.Response;
import com.inspect.base.core.enums.PointStatusEnum;
import com.inspect.base.core.utils.StringUtils;
@ -17,6 +17,7 @@ import com.inspect.base.core.web.page.TableDataInfo;
import com.inspect.base.core.web.page.TableSupport;
import com.inspect.common.log.annotation.Log;
import com.inspect.common.log.enums.BizType;
import com.inspect.fegin.FeignBasedataAreaService;
import com.inspect.message.MessageUtils;
import com.inspect.partrolresult.domain.AlgInfo;
import com.inspect.partrolresult.domain.PatrolResult;
@ -49,6 +50,7 @@ public class ResultAnalysisController extends BaseController {
private final IPatrolTaskService patrolTaskService;
private final IPatrolTaskInfoService iPatrolTaskInfoService;
private final IPatrolResultService patrolResultService;
private final FeignBasedataAreaService feignBasedataAreaService;
@Resource
private MessageUtils messageUtils;
@ -56,11 +58,12 @@ public class ResultAnalysisController extends BaseController {
@Resource
private PatrolResultMapper patrolResultMapper;
public ResultAnalysisController(IResultAnalysisService resultAnalysisService, IPatrolTaskService patrolTaskService, IPatrolTaskInfoService iPatrolTaskInfoService, IPatrolResultService patrolResultService) {
public ResultAnalysisController(IResultAnalysisService resultAnalysisService, IPatrolTaskService patrolTaskService, IPatrolTaskInfoService iPatrolTaskInfoService, IPatrolResultService patrolResultService, FeignBasedataAreaService feignBasedataAreaService) {
this.resultAnalysisService = resultAnalysisService;
this.patrolTaskService = patrolTaskService;
this.iPatrolTaskInfoService = iPatrolTaskInfoService;
this.patrolResultService = patrolResultService;
this.feignBasedataAreaService = feignBasedataAreaService;
}
public String recursionGetNameId(String devId) {
@ -709,10 +712,15 @@ public class ResultAnalysisController extends BaseController {
patrolData.setImg(data.getImg());
}
}
String areaId = value.stream().map(PatrolData::getAreaId).distinct().findFirst().orElse("");
logger.info("defectList缺陷记录,{}",areaId);
// 用新的区域树
String areaNameS = getAreaNameSByAreaIdSRelation(areaId);
logger.info("defectList缺陷记录,{}",areaNameS);
String imageNormalPath = imageNormalMap.getOrDefault(taskPatrolId + "_" + objectId + "_" + algType, "");
patrolData.setImageNormalUrlPath(imageNormalPath);
patrolData.setAlgName(value.stream().map(item -> item.getAlgName() != null ? item.getAlgName() : "").distinct().findFirst().orElse(""));
patrolData.setAreaName(value.stream().map(item -> item.getAreaName() != null ? item.getAreaName() : "").distinct().findFirst().orElse(""));
patrolData.setAreaName(areaNameS);
patrolData.setBrightDesc(value.stream().map(item -> item.getBrightDesc() != null ? item.getBrightDesc() : "").distinct().findFirst().orElse(""));
patrolData.setBrightImgAnalyse(value.stream().map(item -> item.getBrightImgAnalyse() != null ? item.getBrightImgAnalyse() : "").distinct().findFirst().orElse(""));
patrolData.setBrightResStatus(value.stream().map(item -> item.getBrightResStatus() != null ? item.getBrightResStatus() : "").distinct().findFirst().orElse(""));
@ -753,6 +761,17 @@ public class ResultAnalysisController extends BaseController {
return rspData;
}
/**
* 新的关系树
* @param areaIdS
* @return
*/
private String getAreaNameSByAreaIdSRelation(String areaIdS) {
AjaxResult ajaxResult = feignBasedataAreaService.selectAreaNameSForTaskByAreaIdSRelation((new JSONObject()).fluentPut("areaIdS", areaIdS));
JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(ajaxResult));
return jsonObject.get("data").toString();
}
//初筛大模型一起查询
@GetMapping({"/list_v2_ex"})
public TableDataInfo listV2Ex(PatrolTaskStatus patrolTaskStatus) {
@ -796,10 +815,15 @@ public class ResultAnalysisController extends BaseController {
item -> new GroupKey(item.getObjectId(), item.getAlgType())
));
List<PatrolData> resultList = new ArrayList<>();
groupedFilterList.forEach((key, value) -> {
for (Map.Entry<GroupKey, List<PatrolData>> groupKeyListEntry : groupedFilterList.entrySet()) {
GroupKey key = groupKeyListEntry.getKey();
List<PatrolData> value = groupKeyListEntry.getValue();
PatrolData patrolData = new PatrolData();
patrolData.setObjectId(key.objectId);
patrolData.setAlgType(key.algType);
if (AlgConstants.CORRECTION.equals(key.algType)) {
continue;
}
patrolData.setDesc(value.stream().map(PatrolData::getDesc).distinct().collect(Collectors.joining(",")));
for (PatrolData data : value) {
// 初筛有缺陷 展示初筛结果图片
@ -839,7 +863,7 @@ public class ResultAnalysisController extends BaseController {
patrolData.setWarnStatus(value.stream().map(item -> item.getWarnStatus() != null ? item.getWarnStatus() : "").distinct().findFirst().orElse(""));
resultList.add(patrolData);
});
}
Collections.sort(resultList);


+ 0
- 18
inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/domain/AlgValue.java View File

@ -5,8 +5,6 @@ import com.inspect.base.core.utils.StringUtils;
import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Objects;
@Setter
@ -57,22 +55,6 @@ public class AlgValue {
return valueOnlyPrecise;
}
/**
* 结果保留一位小数
*/
public String toOneDecimal(String str) {
if (str == null || str.trim().isEmpty()) {
return str;
}
try {
return new BigDecimal(str.trim())
.setScale(1, RoundingMode.DOWN)
.toString();
} catch (NumberFormatException e) {
return str;
}
}
public AlgValue(String max, String min) {
this.max = max;
this.min = min;


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

@ -449,6 +449,7 @@ public class ResultAnalysis extends BaseEntity {
", resultContent='" + resultContent + '\'' +
", resStatus='" + resStatus + '\'' +
", pointStatus='" + pointStatus + '\'' +
", pointStatusList='" + pointStatusList + '\'' +
", beginTime='" + beginTime + '\'' +
", endTime='" + endTime + '\'' +
", createTime='" + super.getCreateTime() + '\'' +


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

@ -802,6 +802,11 @@ public class AnalyseResponseServiceImpl implements IAnalyseResponseService {
// 兼容算法结果传过来多个算法
continue;
}
// 红外算法保留一位小数其他可读数算法增加读数单位
String resValue = resultAnalysisUtils.addUnit2Value(resultAnalysis.getResValue(), resultAnalysis.getAlgType(), patrolResult.getUnit());
resultAnalysis.setResValue(resValue);
resultAnalysisList.add(resultAnalysis);
valueJoiner.add(resultAnalysis.getResValue());
String pointStatus = resultAnalysis.getPointStatus();
@ -900,7 +905,7 @@ public class AnalyseResponseServiceImpl implements IAnalyseResponseService {
// 处理正常结果以及兼容处理无机人表计gis_meter2纠偏correction的异常结果
if (resultAnalysisUtils.checkCode(analyseResPoint.getCode(), analyseResPoint.getDesc(), resultAnalysis)
|| (AlgConstants.GIS_METER_2.equals(analyseResPoint.getType()))
|| ("correction".equals(analyseResPoint.getType()) && Arrays.asList("2001", "2002", "2003").contains(analyseResPoint.getCode()) )) {
|| (AlgConstants.CORRECTION.equals(analyseResPoint.getType()) && Arrays.asList("2001", "2002", "2003").contains(analyseResPoint.getCode()) )) {
AlgValue algValue = selectAlgMap(objectId, analyseResPoint.getType());
resultAnalysisUtils.parseAlg(analyseResPoint.getType(), algValue, value, analyseResPoint.getDesc(), resultAnalysis);
// 合并辅助值字段


+ 61
- 62
inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/utils/ResultAnalysisUtils.java View File

@ -1,5 +1,6 @@
package com.inspect.analysis.utils;
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.inspect.analysis.constant.AnalyseConstants;
@ -8,6 +9,8 @@ import com.inspect.analysis.domain.AnalyseResPoint;
import com.inspect.analysis.domain.ResultAnalysis;
import com.inspect.base.core.constant.AlgConstants;
import com.inspect.base.core.enums.PointStatusEnum;
import com.inspect.base.core.enums.ResultTypeEnum;
import com.inspect.base.core.utils.BigDecimalUtil;
import com.inspect.base.core.utils.StringUtils;
import com.inspect.message.MessageUtils;
import lombok.extern.slf4j.Slf4j;
@ -16,8 +19,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@Component
@ -28,7 +33,8 @@ public class ResultAnalysisUtils {
/**
* 检查返回结果
* code除了2000,其他值均为异常
* code: 2000-正确 2001-图像数据错误 2002-算法分析失败
* 图像数据错误是指未能获取到图像数据算法分析失败是指算法本身分析过程中出错
*/
public boolean checkCode(String code, String desc, ResultAnalysis resultAnalysis) {
if (AnalyseConstants.ANALYSE_OK.equals(code)) {
@ -52,6 +58,7 @@ public class ResultAnalysisUtils {
resultAnalysis.setPointStatus("0");
resultAnalysis.setResultType("2");
resultAnalysis.setResStatus("0");
resultAnalysis.setResValue("");
resultAnalysis.setCreateTime(new Date());
return false;
}
@ -60,7 +67,7 @@ public class ResultAnalysisUtils {
* 解析算法结果
* pointStatus点位状态: 点位状态 0-异常 1-正常 2-待人工确认 3-已撤销忽略 4-跟踪告警 5-确认告警 6-缺陷
* resultType分析结果: 0-缺陷 1-正常 2-异常
* resStatus告警确认状态: 0-未确认 1-已确认 2-已撤销
* resStatus告警确认状态: 0-未确认 1-已确认 2-已撤销 3-需要纠偏 4-完成纠偏
*/
public void parseAlg(String algType, AlgValue algValue, String value, String defaultDesc, ResultAnalysis resultAnalysis) {
log.info("PARSE_ALG algType: {}, algValue: {}, value: {}, defaultDesc: {}", algType, algValue, value, defaultDesc);
@ -76,7 +83,7 @@ public class ResultAnalysisUtils {
return;
}
if (value == null) {
if (value == null || value == "null") {
value = "";
}
@ -201,47 +208,45 @@ public class ResultAnalysisUtils {
boolean hasDefect = false;
boolean hasAbnormal = false;
try {
ObjectMapper mapper = new ObjectMapper();
// 1. 解析 JSON
List<String> originalList = mapper.readValue(correctionValue, new TypeReference<List<String>>() {
});
String[] values = JSON.parseArray(correctionValue, String.class).toArray(new String[0]);
// 2. 转换非空 "正常"空值 "读数失败"超限 "表计超限"
List<String> descList = new ArrayList<>(originalList.size());
for (String item : originalList) {
String[] descs = new String[values.length];
for (int i = 0; i < values.length; i++) {
String item = values[i];
if (StringUtils.isEmpty(item)) {
hasAbnormal = true;
descList.add("读数失败");
values[i] = "--";
descs[i] = "读数失败";
} else {
if (algValue.isAlarm(item)) {
hasDefect = true;
descList.add("表计超限");
descs[i] = "表计超限";
} else {
descList.add("正常");
descs[i] = "正常";
}
}
}
String descStr = mapper.writeValueAsString(descList);
if (hasDefect) {
String valueStr = String.join(",", values);
String descStr = String.join(",", descs);
resultAnalysis.setResValue(valueStr);
resultAnalysis.setResDesc(descStr);
// 无人机表计所有读数失败都应该是缺陷
if (hasDefect || hasAbnormal) {
resultAnalysis.setPointStatus(PointStatusEnum.DEFECT.getCode());
resultAnalysis.setResStatus("0");
resultAnalysis.setResultType("0");
defaultDesc = descStr;
} else {
if (hasAbnormal) {
resultAnalysis.setPointStatus("0");
resultAnalysis.setResStatus("0");
resultAnalysis.setResultType("2");
defaultDesc = descStr;
} else {
resultAnalysis.setPointStatus("1");
resultAnalysis.setResStatus("0");
resultAnalysis.setResultType("1");
defaultDesc = messageUtils.get("正常");
}
resultAnalysis.setPointStatus("1");
resultAnalysis.setResStatus("0");
resultAnalysis.setResultType("1");
}
} catch (Exception e) {
log.error("PARSE_ALG_GIS_METER_2_ERROR correctionValue: {}", correctionValue, e);
defaultDesc = "解析异常";
resultAnalysis.setPointStatus(PointStatusEnum.DEFECT.getCode());
resultAnalysis.setResStatus("0");
resultAnalysis.setResultType("0");
}
} else if (algType.equals("sound")) {
if (value.equals("1")) {
@ -257,22 +262,7 @@ public class ResultAnalysisUtils {
}
} else if (
AlgConstants.ALG_INFRARED_LIST.contains(algType) ||
algType.equals("xb")) {
// String device = "";
// if (algType.equals("infrared")) {
// device = messageUtils.get("红外");
// } else if (algType.equals("infra_1800")) {
// log.info("红外1800===============");
// device = messageUtils.get("红外1800");
// } else if (algType.equals("infra_yu3")) {
// device = messageUtils.get("无人机红外");
// } else if (algType.equals("infra_camera")) {
// device = messageUtils.get("摄像头红外");
// } else if (algType.equals("infra_camera_reverse")) {
// device = messageUtils.get("摄像头红外灰度反算");
// } else if (algType.equals("xb")) {
// device = messageUtils.get("形变");
// }
algType.equals("xb")) {
if (!algValue.isAlarm(value)) {
log.info("infrared no alarm value: {}, algValue: {}", value, algValue);
resultAnalysis.setResStatus("1");
@ -289,10 +279,8 @@ public class ResultAnalysisUtils {
//defaultDesc = device + messageUtils.get("告警");
defaultDesc = messageUtils.get("温度异常告警");
}
// 红外类型的算法读数保留一位小数
resultAnalysis.setResValue(algValue.toOneDecimal(value));
if (messageUtils.get("分析失败").equals(defaultDesc)) {
defaultDesc = "-";
defaultDesc = "--";
}
} else if (algType.equals("isolator")) {
log.info("ALG_TYPE isolator value: {}", value);
@ -346,7 +334,7 @@ public class ResultAnalysisUtils {
resultAnalysis.setResultType("1");
resultAnalysis.setResStatus("2");
resultAnalysis.setResValue("");
defaultDesc = messageUtils.get("正常");
defaultDesc = messageUtils.get("无需纠偏");
} else {
log.info("2000 correction need value0: {}, value1: {}, value2: {}, value3: {}", value0, value1, value2, value3);
resultAnalysis.setPointStatus("1");
@ -355,7 +343,7 @@ public class ResultAnalysisUtils {
//defaultDesc = "请进行纠偏";
resultAnalysis.setResStatus("2");
resultAnalysis.setResValue("");
defaultDesc = "正常";
defaultDesc = "无需纠偏";
}
} else {
log.info("parseAlg algType correction correctionValue abnormal");
@ -441,6 +429,7 @@ public class ResultAnalysisUtils {
}
if (StringUtils.isNotEmpty(defaultDesc) && defaultDesc.contains(messageUtils.get("分析失败"))) {
resultAnalysis.setResultType("2");
resultAnalysis.setPointStatus(PointStatusEnum.ABNORMAL.getCode());
}
}
resultAnalysis.setDescription(defaultDesc);
@ -450,6 +439,7 @@ public class ResultAnalysisUtils {
/**
* 将分析结果的辅助值进行合并展示
*
* @param analyseResPoint
* @param resultAnalysis
*/
@ -458,7 +448,7 @@ public class ResultAnalysisUtils {
if (StringUtils.isNotEmpty(value2)) {
log.info("mergeValue analyseResPoint value2: {}", value2);
String value = analyseResPoint.getValue();
if(!NumberUtils.isCreatable(value2)) {
if (!NumberUtils.isCreatable(value2)) {
value2 = "null";
}
String val = String.join(",", value, value2);
@ -466,21 +456,30 @@ public class ResultAnalysisUtils {
}
}
public static void main(String[] args) {
String value = "[[121,108],[121,108]]";
ObjectMapper mapper = new ObjectMapper();
List<List<Double>> list;
try {
list = mapper.readValue(value, new TypeReference<List<List<Double>>>() {
});
System.out.println("parseAlg algType correction value: " + list);
} catch (Exception e) {
System.out.println("parseAlg algType correction value exception");
list = new ArrayList<>();
}
if(list.size() == 2 && list.get(0).size() == 2 && list.get(1).size() == 2) {
System.out.println("parseAlg algType correction value");
/**
* 添加单位
*
* @param resValue 读数
* @param algType 算法类型
* @param unit 单位
* @return
*/
public String addUnit2Value(String resValue, String algType, String unit) {
if (StringUtils.isNotEmpty(resValue) && StringUtils.isNotEmpty(unit) && AlgConstants.READABLE_ALG_LIST.contains(algType)) {
log.info("addUnit2Value resValue: {}, algType: {}, unit: {}", resValue, algType, unit);
String[] valueArr = resValue.split(",");
String values = Arrays.stream(valueArr).map(val -> {
boolean isNumber = val.matches("^-?\\d+(\\.\\d+)?$");
if (isNumber) {
if (AlgConstants.ALG_INFRARED_LIST.contains(algType)) {
return BigDecimalUtil.toOneDecimal(val, 1) + unit;
}
return val + unit;
}
return val;
}).collect(Collectors.joining(","));
return values;
}
return resValue;
}
}

+ 3
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/fegin/FeignBasedataAreaService.java View File

@ -11,6 +11,9 @@ public interface FeignBasedataAreaService {
@GetMapping({"/area/selectAreaNameSForTaskByAreaIdS"})
AjaxResult selectAreaNameSForTaskByAreaIdS(@RequestParam("baseDataArea") JSONObject var1);
@GetMapping({"/area/selectAreaNameSForTaskByAreaIdSRelation"})
AjaxResult selectAreaNameSForTaskByAreaIdSRelation(@RequestParam("baseDataArea") JSONObject var1);
@GetMapping({"/area/list"})
AjaxResult list(@RequestParam("baseDataArea") JSONObject var1);


+ 6
- 3
inspect-main/inspect-main-task/src/main/java/com/inspect/insreport/controller/InspectionReportController.java View File

@ -260,18 +260,21 @@ public class InspectionReportController extends BaseController {
if (StringUtils.isEmpty(reportData.getTaskPatrolledId())) {
reportData.setTaskPatrolledId(inspectionReport.getTaskPatrolledId());
}
if (StringUtils.isEmpty(reportData.getTaskResultId())) {
reportData.setTaskResultId(inspectionReport.getTaskResultId());
}
}
// inspectionReport.setInfo(inspectionReportDataList);
Map<String, List<Map<String, List<InspectionReportData>>>> resultTaskInfoMap = new HashMap<>();
// pointStatus 分组再按 taskPatrolledId_taskName 分组
// key: pointStatusvalue: {taskPatrolledId_taskName -> List<InspectionReportData>}
// pointStatus 分组再按 taskResultId_taskName 分组
// key: pointStatusvalue: {taskResultId_taskName -> List<InspectionReportData>}
Map<String, Map<String, List<InspectionReportData>>> detailGrouped =
inspectionReportDataList.stream()
.collect(Collectors.groupingBy(
item -> item.getPointStatus() == null ? "unknown" : item.getPointStatus(),
Collectors.groupingBy(item -> item.getTaskPatrolledId() + "_" + item.getTaskName())
Collectors.groupingBy(item -> item.getTaskResultId() + "_" + item.getTaskName())
));
// 将分组结果转换为所需的格式
for (Map.Entry<String, Map<String, List<InspectionReportData>>> stringMapEntry : detailGrouped.entrySet()) {


+ 3
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/insreportdata/domain/InspectionReportData.java View File

@ -74,6 +74,8 @@ public class InspectionReportData extends BaseEntity {
private String taskPatrolledId;
private String taskResultId;
@Override
public boolean equals(Object object) {
if (this == object) return true;
@ -107,6 +109,7 @@ public class InspectionReportData extends BaseEntity {
", algName='" + algName + '\'' +
", taskName='" + taskName + '\'' +
", taskPatrolledId='" + taskPatrolledId + '\'' +
", taskResultId='" + taskResultId + '\'' +
'}';
}
}

+ 15
- 35
inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/controller/PatrolResultController.java View File

@ -40,7 +40,6 @@ import com.inspect.maintain.domain.MaintainAreaXML;
import com.inspect.maintain.domain.PatrolMaintainModuleXml;
import com.inspect.maintain.service.IMaintainRegionService;
import com.inspect.message.MessageUtils;
import com.inspect.mqtt.services.Warn.IUploadServer;
import com.inspect.partrolresult.client.BaseDataClient;
import com.inspect.partrolresult.client.WebsocketService;
import com.inspect.partrolresult.domain.*;
@ -668,7 +667,6 @@ public class PatrolResultController extends BaseController {
}
private void remoteAnalysisServiceStart(final String ANALYSIS_URL, final String params) {
logger.info("[ALG] CALL ALG BIG MODEL, URL: {}, PARAM: {}", ANALYSIS_URL, params);
executor.submit(() -> {
@ -694,6 +692,7 @@ public class PatrolResultController extends BaseController {
String ids = "";
for (PatrolResult patrolResult : patrolResultList) {
PatrolTask task = patrolTaskService.selectPatrolTaskByTaskId(Long.valueOf(patrolResult.getTaskCode()));
logger.info("callRemoteAlgorithm taskPatrolledId: {}, patrolResult: {}", patrolResult.getTaskPatrolledId(), patrolResult);
List<AnalyseReqItem> filterList = new ArrayList<>(); //初筛
List<AnalyseReqItem> bigModelList = new ArrayList<>(); //大模型
@ -703,32 +702,13 @@ public class PatrolResultController extends BaseController {
AnalyseReqItem analyseReqItem = new AnalyseReqItem();
analyseReqItem.setObjectId(patrolResult.getDeviceId());
//根据basedata_patrolpoint中的patrol_point_id(对应patrol_result表中的device_id)查询该预置位配置的算法列表
Map<String, String> algSubtypeIdMap = patrolResultService.selectAlgorithmType(patrolResult.getDeviceId());
List<String> algSubtypeIdList = new ArrayList<>();
logger.info("callRemoteAlgorithm algorithmTypeMap: {}", algSubtypeIdMap);
if (algSubtypeIdMap != null) {
String subIdStr = algSubtypeIdMap.get("alg_subtype_ids");
if (subIdStr.contains(StringUtils.COMMA)) {
String[] subIds = subIdStr.split(StringUtils.COMMA);
for (String subId : subIds) {
if (StringUtils.isNotEmpty(subId)) {
algSubtypeIdList.add(subId);
}
}
} else {
algSubtypeIdList.add(subIdStr);
}
}
PatrolResult patrolResultTemp = new PatrolResult();
if (!algSubtypeIdList.isEmpty()) {
patrolResultTemp.setAlgId(algSubtypeIdList);
}
List<AlgInfo> algInfoList = new ArrayList<>();
if (patrolResultTemp.getAlgId() != null && !patrolResultTemp.getAlgId().isEmpty()) {
algInfoList = patrolResultService.selectAlgInfo(patrolResultTemp);
List<AlgInfo> algInfoList;
if (StringUtils.isNotEmpty(task.getSpecifiedAlg())) {
// 任务指定算法类型获取指定算法类型的对象
algInfoList = patrolResultService.selectAlgInfoByCode(task.getSpecifiedAlg());
} else {
// 根据basedata_patrolpoint中的patrol_point_id(对应patrol_result表中的device_id)查询该预置位配置的算法列表
algInfoList = patrolResultService.selectPointAlgInfo(patrolResult.getDeviceId());
}
logger.info("callRemoteAlgorithm algInfoList: {}", algInfoList);
@ -923,8 +903,6 @@ public class PatrolResultController extends BaseController {
logger.info(Color.CYAN + "callRemoteAlgorithm filter size: {}, filterList: {}" + Color.END, filterList.size(), filterList);
logger.info(Color.CYAN + "callRemoteAlgorithm bigModel size: {}, bigModelList: {}" + Color.END, bigModelList.size(), bigModelList);
// 查询任务指定的分析主机厂商
PatrolTask task = patrolTaskService.selectPatrolTaskByTaskId(Long.valueOf(patrolResult.getTaskCode()));
String drafter = task.getDrafter();
//qinyl 初筛逻辑处理
if (!filterList.isEmpty()) {
@ -1142,7 +1120,7 @@ public class PatrolResultController extends BaseController {
PatrolTaskStatus patrolTaskStatusOfDb = patrolTaskStatusList.get(0);
// 除了db非完成或终止或暂停状态当db状态与上报状态不一致时更新db状态
if (!Arrays.asList(TaskStatus.DONE.getCode(), TaskStatus.HALTED.getCode()).contains(patrolTaskStatusOfDb.getTaskState())
&& !Arrays.asList(TaskStatus.DONE.getCode(),patrolTaskStatusOfDb.getTaskState()).contains(patrolTaskStatusItem.getTaskState())
&& !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());
@ -1620,6 +1598,9 @@ public class PatrolResultController extends BaseController {
}
logger.info("SEND_MESSAGE NEW patrolResult: {}", patrolResult);
Map<String, String> map = resultAnalysisService.selectPointInfoById(patrolResult.getDeviceId());
String unit = map.get("purpose");
patrolResult.setUnit(unit);
i = patrolResultService.insertPatrolResult(patrolResult);//
resultStatistics.compare(patrolResult);
// if (!"2".equals(Jqtype)) {
@ -1633,10 +1614,10 @@ public class PatrolResultController extends BaseController {
// 非摄像头的设备任务需要从数据库统计执行点位数量
if (jsonRootBean.getTotalNumber() == null && !tasks.isEmpty()) {
logger.info("jsonRootBean.getTotalNumber not NULL: {}", algrithomPatrolResultList);
String taskId = String.valueOf(tasks.get(0).getTaskId());
logger.info("taskId: {}, sendCode: {}", taskId, sendCode);
String taskCode = String.valueOf(tasks.get(0).getTaskId());
logger.info("taskCode: {}, sendCode: {}", taskCode, sendCode);
// 获取设备标识以便统计执行点位数量
List<String> algList = patrolResultMapper.selectAlgList(taskId, sendCode, null);
List<String> algList = patrolResultService.selectAlgList(taskCode, sendCode, tasks.get(0).getSpecifiedAlg());
logger.info("algList: {}", algList.toString());
int algCount = 0;
for (String alg : algList) {
@ -1780,7 +1761,6 @@ public class PatrolResultController extends BaseController {
return AjaxResult.success(patrolTaskList);
}
@GetMapping({"/getEqpBookListInfoForXml"})
public String getEqpBookListInfo(BasedataEqpBookMoMain basedataEqpBook) {
logger.info("--------getEqpBookListInfo 1!!!!!!");


+ 4
- 20
inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/domain/PatrolResultRef.java View File

@ -2,13 +2,16 @@ package com.inspect.partrolresult.domain;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.util.Objects;
@Setter
@Getter
@ToString
public class PatrolResultRef {
private String lineId;
private Long mainId;
private String deviceId;
private String devType;
private String deviceSource;
@ -23,6 +26,7 @@ public class PatrolResultRef {
private String resultType;
private String valueUnit;
private String unit;
private String resultContent;
private String resStatus;
private String resImgUrl;
@ -50,24 +54,4 @@ public class PatrolResultRef {
public int hashCode() {
return Objects.hash(lineId, deviceId, devType, deviceSource, time, value, algType, algName, threshold, filePath, description, pointStatus, valueUnit, resultContent);
}
@Override
public String toString() {
return "PatrolResultRef{" +
"lineId='" + lineId + '\'' +
", deviceId='" + deviceId + '\'' +
", devType='" + devType + '\'' +
", deviceSource='" + deviceSource + '\'' +
", time='" + time + '\'' +
", value='" + value + '\'' +
", algType='" + algType + '\'' +
", algName='" + algName + '\'' +
", threshold='" + threshold + '\'' +
", filePath='" + filePath + '\'' +
", description='" + description + '\'' +
", pointStatus='" + pointStatus + '\'' +
", valueUnit='" + valueUnit + '\'' +
", resultContent='" + resultContent + '\'' +
'}';
}
}

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

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

+ 6
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/service/IPatrolResultService.java View File

@ -101,4 +101,10 @@ public interface IPatrolResultService {
List<PatrolResult> selectPatrolResultListByMainIds(List<Long> mainIds);
InspectionReport getInspectionReport(List<Long> lineIds, PatrolTaskResultMain patrolTaskResultMain);
List<AlgInfo> selectPointAlgInfo(String patrolPointId);
List<AlgInfo> selectAlgInfoByCode(String codes);
List<String> selectAlgList(String taskCode, String sendCode, String specifiedAlg);
}

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

@ -7,6 +7,7 @@ import com.inspect.analysis.domain.AlgValue;
import com.inspect.analysis.domain.AnalyseResPoint;
import com.inspect.analysis.domain.ResultAnalysis;
import com.inspect.analysis.mapper.ResultAnalysisMapper;
import com.inspect.analysis.utils.ResultAnalysisUtils;
import com.inspect.base.core.constant.AlgConstants;
import com.inspect.base.core.enums.TaskType;
import com.inspect.base.core.exception.ServiceException;
@ -44,6 +45,7 @@ import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@ -58,7 +60,11 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
AlgConstants.INFRA_1800,
AlgConstants.INFRA_YU3,
AlgConstants.INFRA_CAMERA,
AlgConstants.INFRA_CAMERA_REVERSE
AlgConstants.INFRA_CAMERA_REVERSE,
AlgConstants.INFRARED,
AlgConstants.INFRARED2,
AlgConstants.GIS_METER_2,
AlgConstants.GIS_METER
));
final
PatrolResultDefaultValueMapper patrolResultDefaultvalueMapper;
@ -77,7 +83,8 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
private String exportReportFlag;
@Autowired
private MessageUtils messageUtils;
;
@Resource
private ResultAnalysisUtils resultAnalysisUtils;
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;
@ -540,8 +547,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
List<String> taskNames = resultList.stream().map(PatrolResult::getTaskName).distinct().collect(Collectors.toList());
String taskName = StringUtils.join(taskNames, ",");
boolean isMultipleTasks = CollectionUtils.isNotEmpty(taskPatrolledIds) && taskPatrolledIds.size() > 1;
// todo 多任务判断有问题
boolean isMultipleTasks = CollectionUtils.isNotEmpty(lineIds) && lineIds.size() > 1;
if (isMultipleTasks) {
// 说明多个任务合并任务名称修改为巡视日期-巡视报告 例如2026年3月23日-巡视报告
Date date = CollectionUtils.isNotEmpty(startTimes) ? startTimes.get(0) : new Date();
@ -563,10 +569,16 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
patrolResultRefs = patrolResultRefs.stream().filter((item) -> "0".equals(item.getResultType())).collect(Collectors.toList());
// 分组按点位ID和算法类型进行分组
groupKeyListMap = patrolResultRefs.stream().collect(Collectors.groupingBy(item -> new GroupKey(item.getDeviceId(), item.getAlgType(), item.getTaskPatrolledId())));
groupKeyListMap.forEach((key, value) -> {
for (Map.Entry<GroupKey, List<PatrolResultRef>> entry : groupKeyListMap.entrySet()) {
GroupKey key = entry.getKey();
List<PatrolResultRef> value = entry.getValue();
PatrolResultRef patrolResultRef = new PatrolResultRef();
patrolResultRef.setDeviceId(key.objectId);
patrolResultRef.setAlgType(key.algType);
// 纠偏算法不归档
if (AlgConstants.CORRECTION.equals(key.algType)) {
continue;
}
patrolResultRef.setDescription(value.stream().sorted(Comparator.comparing(PatrolResultRef::getFilter).reversed()).map(PatrolResultRef::getDescription).collect(Collectors.joining(",")));
patrolResultRef.setValue(value.stream().sorted(Comparator.comparing(PatrolResultRef::getFilter).reversed()).map(PatrolResultRef::getValue).collect(Collectors.joining(",")));
for (PatrolResultRef resultRef : value) {
@ -590,7 +602,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
patrolResultRef.setAlgName(value.get(0).getAlgName());
patrolResultRef.setResultType("0");
resultRefs.add(patrolResultRef);
});
}
patrolResultRefs = resultRefs;
startTime = PrintUtil.useTime("导出报告:筛选缺陷数据", startTime);
} else {
@ -600,6 +612,10 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
List<PatrolResultRef> value = entry.getValue();
GroupKey key = entry.getKey();
String algType = key.algType;
// 纠偏算法不归档
if (AlgConstants.CORRECTION.equals(algType)) {
continue;
}
List<PatrolResultRef> filterResults = value.stream().filter(item -> "1".equals(item.getFilter())).collect(Collectors.toList());
List<PatrolResultRef> AIResults = value.stream().filter(item -> "0".equals(item.getFilter())).collect(Collectors.toList());
PatrolResultRef filterResult = filterResults.isEmpty() ? null : filterResults.get(0);
@ -758,7 +774,8 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
report.setFilter("0");
report.setStationType(stationType);
inspectionReportMapper.insertInspectionReport(report);
batchInsertReportData_shaoxing(String.valueOf(report.getLineId()), patrolResultRefs, basePointAreaInfoList, taskPatrolledIds);
// 为每个报告生成数据
batchInsertReportData_shaoxing(String.valueOf(report.getLineId()), patrolResultRefs, basePointAreaInfoList, lineIds);
reportIds.add(report.getLineId());
}
}
@ -1251,11 +1268,11 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
}
}
public void batchInsertReportData_shaoxing(String reportId, List<PatrolResultRef> patrolResultRefs, List<BasePointAreaInfo> basePointAreaInfoList, List<String> taskPatrolledIds) {
Map<String, Map<String, Long>> taskCounterMap = new HashMap<>();
public void batchInsertReportData_shaoxing(String reportId, List<PatrolResultRef> patrolResultRefs, List<BasePointAreaInfo> basePointAreaInfoList, List<Long> lineIds) {
Map<Long, Map<String, Long>> taskCounterMap = new HashMap<>();
// 为每个任务初始化计数器
for (String item : taskPatrolledIds) {
for (Long item : lineIds) {
Map<String, Long> counter = new HashMap<>();
counter.put("defect", 0L);
counter.put("ok", 0L);
@ -1277,6 +1294,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
// 获取该结果所属的任务名
String resultTaskName = patrolResultRef.getTaskName();
String taskPatrolledId = patrolResultRef.getTaskPatrolledId();
Long mainId = patrolResultRef.getMainId();
BasePointAreaInfo basePointAreaInfo;
try {
basePointAreaInfo = basePointAreaInfoList.stream().filter((item) -> item != null && patrolResultRef.getDeviceId().equals(item.getDeviceId())).findFirst().get();
@ -1296,6 +1314,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
reportData.setAcquisitionTime(DateUtils.parse(DateUtils.yyyyMMddHHmmss2, patrolResultRef.getTime()));
reportData.setTaskName(resultTaskName);
reportData.setTaskPatrolledId(taskPatrolledId);
reportData.setTaskResultId(String.valueOf(mainId));
if ("1".equals(patrolResultRef.getResultType()) && validAlgTypes.contains(patrolResultRef.getAlgType())) {
reportData.setInspectionResults(patrolResultRef.getValue());
} else {
@ -1318,6 +1337,10 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
reportData.setInspectionResults(patrolResultRef.getValue());
}
// 给读数增加单位
String resValue = resultAnalysisUtils.addUnit2Value(reportData.getInspectionResults(), patrolResultRef.getAlgType(), patrolResultRef.getUnit());
reportData.setInspectionResults(resValue);
String pointStatus = patrolResultRef.getPointStatus();
String resultType = patrolResultRef.getResultType();
log.info("[RESULT] resultType: {}, patrolResultRef: {}", resultType, patrolResultRef);
@ -1326,7 +1349,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
} else if (resultType.equals("0")) {
reportData.setPointStatus(messageUtils.get("缺陷"));
// 按任务统计异常编号
Map<String, Long> counter = taskCounterMap.get(taskPatrolledId);
Map<String, Long> counter = taskCounterMap.get(mainId);
if (counter != null) {
counter.put("defect", counter.get("defect") + 1);
reportData.setCode(counter.get("defect"));
@ -1337,7 +1360,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
} else if (resultType.equals("1")) {
reportData.setPointStatus(messageUtils.get("正常"));
// 按任务统计异常编号
Map<String, Long> counter = taskCounterMap.get(taskPatrolledId);
Map<String, Long> counter = taskCounterMap.get(mainId);
if (counter != null) {
counter.put("ok", counter.get("ok") + 1);
reportData.setCode(counter.get("ok"));
@ -1348,7 +1371,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
} else {
reportData.setPointStatus(messageUtils.get("异常"));
// 按任务统计异常编号
Map<String, Long> counter = taskCounterMap.get(taskPatrolledId);
Map<String, Long> counter = taskCounterMap.get(mainId);
if (counter != null) {
counter.put("fail", counter.get("fail") + 1);
reportData.setCode(counter.get("fail"));
@ -1433,6 +1456,7 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
patrolResultRef.setTime(value.stream().map(item -> item.getTime() != null ? item.getTime() : "").distinct().findFirst().orElse(""));
patrolResultRef.setThreshold(value.stream().map(item -> item.getThreshold() != null ? item.getThreshold() : "").distinct().findFirst().orElse(""));
patrolResultRef.setAlgName(value.get(0).getAlgName());
patrolResultRef.setAlgType(value.get(0).getAlgType());
patrolResultRef.setResultType("0");
resultRefs.add(patrolResultRef);
});
@ -2162,6 +2186,32 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
return report;
}
@Override
public List<AlgInfo> selectPointAlgInfo(String patrolPointId) {
return patrolResultMapper.selectPointAlgInfo(patrolPointId);
}
@Override
public List<AlgInfo> selectAlgInfoByCode(String codes) {
return patrolResultMapper.selectAlgInfoByCode(codes);
}
/**
* 根据以下条件返回任务的全部或某设备类型的点位及其算法
* @param sendCode 任务编码
* @param specifiedAlg 设备唯一标识
* @return 任务指定算法
*/
@Override
public List<String> selectAlgList(String taskCode, String sendCode, String specifiedAlg) {
String devType = "摄像头".equals(sendCode) ? "2" : null;
List<String> algList = patrolResultMapper.selectAlgList(taskCode, sendCode, devType);
if (StringUtils.isNotEmpty(specifiedAlg)) {
return algList.stream().map(item -> specifiedAlg).collect(Collectors.toList());
}
return algList;
}
private PatrolResultRef mergePatrolResultRef(PatrolResultRef filterResult, PatrolResultRef AIResult, String resultType) {
PatrolResultRef merged = new PatrolResultRef();
merged.setDeviceId(filterResult.getDeviceId());
@ -2207,6 +2257,15 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
public int hashCode() {
return Objects.hash(objectId, algType, taskPatrolled);
}
@Override
public String toString() {
return "GroupKey{" +
"objectId='" + objectId + '\'' +
", algType='" + algType + '\'' +
", taskPatrolled='" + taskPatrolled + '\'' +
'}';
}
}
public static void main(String[] args) {


+ 5
- 29
inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/domain/PatrolTaskResultMain.java View File

@ -1,19 +1,18 @@
package com.inspect.resultmain.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.inspect.base.core.annotation.Excel;
import com.inspect.base.core.web.domain.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.util.Date;
import java.util.List;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
@Setter
@Getter
@ToString
public class PatrolTaskResultMain extends BaseEntity {
private static final long serialVersionUID = 1L;
private Long lineId;
@ -95,27 +94,4 @@ public class PatrolTaskResultMain extends BaseEntity {
public PatrolTaskResultMain(String taskPatrolledId) {
this.taskPatrolledId = taskPatrolledId;
}
@Override
public String toString() {
return "PatrolTaskResultMain{" +
"lineId=" + lineId +
", taskId='" + taskId + '\'' +
", taskName='" + taskName + '\'' +
", taskCode='" + taskCode + '\'' +
", createBy='" + createBy + '\'' +
", fileStatus='" + fileStatus + '\'' +
", areaName='" + areaName + '\'' +
", taskType='" + taskType + '\'' +
", taskTime=" + taskTime +
", intervalName='" + intervalName + '\'' +
", devType='" + devType + '\'' +
", taskResult='" + taskResult + '\'' +
", requestId='" + requestId + '\'' +
", checkPerson='" + checkPerson + '\'' +
", taskPatrolledId='" + taskPatrolledId + '\'' +
", taskPatrolledIds='" + taskPatrolledIds + '\'' +
", checkTime=" + checkTime +
'}';
}
}

+ 604
- 57
inspect-main/inspect-main-task/src/main/java/com/inspect/task/controller/PatrolTaskController.java View File

@ -11,6 +11,8 @@ import com.inspect.base.core.constant.Color;
import com.inspect.base.core.constant.RedisConst;
import com.inspect.base.core.domain.DataMsg;
import com.inspect.base.core.enums.PointStatusEnum;
import com.inspect.base.core.enums.ResStatusEnum;
import com.inspect.base.core.enums.ResultTypeEnum;
import com.inspect.base.core.enums.TaskStatus;
import com.inspect.base.core.service.SyncDataToUpstreamService;
import com.inspect.base.core.sftp.SftpClient;
@ -71,6 +73,7 @@ import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.Collectors;
@RestController
@ -182,7 +185,7 @@ public class PatrolTaskController extends BaseController {
@GetMapping("/list")
public TableDataInfo list(PatrolTask patrolTask) {
// startPage();
startPage();
List<PatrolTask> taskList = patrolTaskService.selectPatrolTaskList(patrolTask);
logger.debug("[TASK] patrolTask: {}, taskList: {}", patrolTask, taskList);
for (PatrolTask task : taskList) {
@ -190,50 +193,17 @@ public class PatrolTaskController extends BaseController {
patrolTaskStatus.setTaskCode(task.getTaskCode());
patrolTaskStatus.setTaskState(TaskStatus.RUNNING.getCode());
List<PatrolTaskStatus> statusList = patrolTaskStatusService.selectPatrolTaskStatusList(patrolTaskStatus);
String taskMajorId = task.getTaskCode();
int totalPoints = patrolTaskInfoService.countPatrolTaskInfoByMajorId(taskMajorId);
task.setTotalPoints(totalPoints);
if (!statusList.isEmpty()) {
task.setFileStatus("1");
} else {
task.setFileStatus("0");
}
// String areaIdS = task.getAreaIdS();
// AjaxResult ajaxResult = FeignBasedataAreaService.list((new JSONObject()).fluentPut("areaIdS", areaIdS));
// JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(ajaxResult));
// // 检查响应是否成功
// if ("200".equals(ajaxResult.get("code").toString())) {
// JSONArray data = jsonObject.getJSONArray("data");
// if (data != null && !data.isEmpty()) {
// List<String> areaNames = data.stream()
// .filter(item -> "station_in".equals(((JSONObject) item).getString("areaType")))
// .map(item -> ((JSONObject) item).getString("areaName"))
// .collect(Collectors.toList());
// task.setAreaName(StringUtils.join(areaNames, StringUtils.COMMA));
// }
// }
}
List<PatrolTask> taskListEx = taskList;
if (StringUtils.isNotEmpty(patrolTask.getAreaName())) {
taskListEx = new ArrayList<>();
for (PatrolTask task : taskList) {
if (StringUtils.isNotEmpty(task.getAreaName()) && task.getAreaName().contains(patrolTask.getAreaName())) {
taskListEx.add(task);
}
}
// PageDomain pageDomain = TableSupport.buildPageRequest();
// int pageNum = pageDomain.getPageNum();
// int pageSize = pageDomain.getPageSize();
// int toNum = Math.min(taskListEx.size(), pageNum * pageSize);
// List<PatrolTask> pageList = taskListEx.subList((pageNum - 1) * pageSize, toNum);
// return getDataTable(0, pageList, taskListEx);
// 统计任务点位数量
String taskMajorId = task.getTaskCode();
int totalPoints = patrolTaskInfoService.countPatrolTaskInfoByMajorId(taskMajorId);
task.setTotalPoints(totalPoints);
}
PageDomain pageDomain = TableSupport.buildPageRequest();
int pageNum = pageDomain.getPageNum();
int pageSize = pageDomain.getPageSize();
int toNum = Math.min(taskListEx.size(), pageNum * pageSize);
List<PatrolTask> pageList = taskListEx.subList((pageNum - 1) * pageSize, toNum);
return getDataTable(0, pageList, taskListEx);
return getDataTable(taskList);
}
@GetMapping({"/taskInfo"})
@ -388,23 +358,6 @@ public class PatrolTaskController extends BaseController {
}
}
// 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())
@ -537,6 +490,58 @@ public class PatrolTaskController extends BaseController {
return AjaxResult.success(patrolTask);
}
/**
* 信息
*
* @param object
* @return
*/
@GetMapping({"/shaoxing/{taskId}"})
public AjaxResult getInfoShaoxing(@PathVariable("taskId") Object object) {
long taskId;
try {
taskId = Long.parseLong(String.valueOf(object));
} catch (Exception e) {
logger.info("[TASK] parameter taskId error: {}", e.getMessage());
return AjaxResult.fail(500, "parameter error: {}", e.getMessage());
}
List<PrevPoint> prevPoints = new ArrayList<>();
PatrolTask patrolTask = patrolTaskService.selectPatrolTaskByTaskId(taskId);
if (patrolTask == null) {
return AjaxResult.fail(500, "任务不存在");
}
if (StringUtils.isEmpty(patrolTask.getExecutionMode())) {
patrolTask.setExecutionMode("0");
}
if (StringUtils.isEmpty(patrolTask.getType())) {
patrolTask.setType("4");
}
if (StringUtils.isNotEmpty(patrolTask.getCycleMonth())) {
String cycleMonth = calcCycleMonth(patrolTask.getCycleMonth());
if (StringUtils.isNotEmpty(cycleMonth)) {
patrolTask.setCycleMonth(cycleMonth);
}
}
PatrolTaskInfo patrolTaskInfo = new PatrolTaskInfo();
patrolTaskInfo.setTaskMajorId(patrolTask.getTaskId() + "");
List<PatrolTaskInfo> patrolTaskInfos = patrolTaskInfoService.selectPatrolTaskInfoList(patrolTaskInfo);
List<String> patrolPointIds = new ArrayList<>();
if (!patrolTaskInfos.isEmpty()) {
for (PatrolTaskInfo taskInfo : patrolTaskInfos) {
patrolPointIds.add(taskInfo.getDeviceId());
}
}
patrolTask.setPrevPoints(prevPoints);
patrolTask.setPatrolPointIds(patrolPointIds);
return AjaxResult.success(patrolTask);
}
@Log(
title = "巡视任务(任务模型文件数据)",
businessType = BizType.INSERT
@ -590,6 +595,537 @@ public class PatrolTaskController extends BaseController {
return patrolTask.getTaskCode() + "_" + sdf.format(patrolTask.getCycleExecuteTime());
}
@PostMapping({"/shaoxing/add"})
@ResponseBody
public AjaxResult add_shaoxing(@RequestBody String message) {
logger.info("[TASK] add message: {}", message);
List<String> patrolTaskIds = new ArrayList<>();
if (StringUtils.isEmpty(message)) {
return AjaxResult.success(String.join(StringUtils.COMMA, patrolTaskIds));
}
JSONObject jsonObject = JSONObject.parseObject(message);
logger.info(Color.GREEN + "[MAIN] toPatrolTaskList jsonObject: {}" + Color.END, jsonObject);
PatrolTask patrolTask = new PatrolTask();
toPatrolTask(jsonObject, patrolTask);
List<String> patrolPointIds = new ArrayList<>();
// 点位信息
if (jsonObject.get("patrolPointIds") != null) {
String jsonObjectString = jsonObject.get("patrolPointIds").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
String[] pointArr = jsonObjectString.split(",");
patrolPointIds = Arrays.asList(pointArr);
}
}
List<PatrolTaskInfo> taskInfos = new ArrayList<>();
if (patrolPointIds.size() > 0) {
// 查询点位信息
List<JSONObject> patrolPointList = patrolTaskService.selectBasedataPatrolPointList(patrolPointIds);
Map<Long, JSONObject> patrolPointIdMap = patrolPointList.stream().collect(Collectors.toMap(item -> item.getLong("patrolPointId"), Function.identity()));
// 查询点位预置位信息
List<JSONObject> basedataPatrolPointPresetList = patrolTaskService.selectBasedataPatrolPointPresetList(patrolPointIds);
Map<Long, JSONObject> basedataPatrolPointPresetMap = basedataPatrolPointPresetList.stream().collect(Collectors.toMap(item -> item.getLong("patrolPointId"), Function.identity(), (e1, e2) -> e2));
// 查询点位预置位位置信息
List<JSONObject> basedataPatrolPresetPosList = patrolTaskService.selectPatrolPresetPosList(patrolPointIds);
Map<Long, JSONObject> basedataPatrolPresetPosMap = basedataPatrolPresetPosList.stream().collect(Collectors.toMap(item -> item.getLong("patrolPointId"), Function.identity(), (e1, e2) -> e2));
Set<String> eqpBookIdPreset = basedataPatrolPointPresetList.stream().map(basedataPatrolPointPresetJson -> {
return basedataPatrolPointPresetJson.getString("eqpBookId");
}).collect(Collectors.toSet());
Set<String> eqpBookIdPos = basedataPatrolPresetPosList.stream().map(basedataPatrolPresetPosJson -> {
return basedataPatrolPresetPosJson.getString("eqpBookId");
}).collect(Collectors.toSet());
List<String> eqpBookIds = new ArrayList<>();
eqpBookIds.addAll(eqpBookIdPreset);
eqpBookIds.addAll(eqpBookIdPos);
// 查询设备信息
List<Map<String, String>> list = patrolTaskInfoService.selectVideoPosByPointIdByEqpbookIds(eqpBookIds);
Map<String, Map<String, String>> eqpBooksMap =
list.stream().collect(Collectors.toMap(e -> String.valueOf(e.get("eqp_book_id")), e -> e, (e1, e2) -> e2));
List<String> devTypeList = new LinkedList<>();
Set<String> devNoSet = new LinkedHashSet<>();
Set<String> deviceSet = new LinkedHashSet<>();
// 查询点位预置位信息
for (String patrolPointId : patrolPointIds) {
PatrolTaskInfo patrolTaskInfo = new PatrolTaskInfo();
patrolTaskInfo.setEbookId(basedataPatrolPointPresetMap.getOrDefault(Long.valueOf(patrolPointId), basedataPatrolPresetPosMap.getOrDefault(Long.valueOf(patrolPointId),new JSONObject())).getString("eqpBookId"));
Map<String, String> videoPos = eqpBooksMap.get(patrolTaskInfo.getEbookId());
String type = videoPos.get("type");
String patrolDeviceCode = videoPos.get("patrol_device_code");
String typeEx;
if (type.equals("13")) {
typeEx = "0";
} else if (!type.equals("1") && !type.equals("2") && !type.equals("3")) {
typeEx = "2";
} else {
typeEx = "1";
}
patrolTaskInfo.setDeviceId(patrolPointId);
patrolTaskInfo.setDeviceName(patrolPointIdMap.getOrDefault(Long.valueOf(patrolPointId), new JSONObject()).getString("patrolPointName"));
patrolTaskInfo.setComponentId(patrolPointIdMap.getOrDefault(Long.valueOf(patrolPointId), new JSONObject()).getString("relationDeviceId"));
// patrolTaskInfo.setComponentName();
// patrolTaskInfo.setBayId();
// patrolTaskInfo.setBayName();
patrolTaskInfo.setMainDeviceId(patrolPointIdMap.getOrDefault(Long.valueOf(patrolPointId), new JSONObject()).getString("relationMainDeviceId"));
// patrolTaskInfo.setMainDeviceName();
patrolTaskInfo.setDevNo(patrolDeviceCode);
patrolTaskInfo.setDevType(typeEx);
patrolTaskInfo.setPresetCode(basedataPatrolPointPresetMap.getOrDefault(Long.valueOf(patrolPointId), basedataPatrolPresetPosMap.getOrDefault(Long.valueOf(patrolPointId),new JSONObject())).getString("presetCode"));
patrolTaskInfo.setEbookName(videoPos.getOrDefault("patrol_device_name", ""));
// patrolTaskInfoService.insertPatrolTaskInfo(patrolTaskInfo);
if (devNoSet.add(patrolTaskInfo.getDevNo())) {
devTypeList.add(patrolTaskInfo.getDevType());
}
deviceSet.add(patrolTaskInfo.getMainDeviceId());
taskInfos.add(patrolTaskInfo);
}
patrolTask.setDevType(StringUtils.join(devTypeList, ","));
patrolTask.setDevNo(StringUtils.join(devNoSet, ","));
patrolTask.setDeviceList(StringUtils.join(deviceSet, ","));
}
logger.info("任务新增,patrolTask {}",patrolTask);
int majorId = patrolTaskService.insertPatrolTask(patrolTask);
patrolTaskIds.add(majorId + "");
logger.info("============任务新增成功=======");
PatrolTask patrolTaskTemp = patrolTaskService.selectPatrolTaskByTaskId((long) majorId);
patrolTaskTemp.setTaskCode(patrolTaskTemp.getTaskId() + "");
patrolTaskService.updatePatrolTask(patrolTaskTemp);
patrolTask.setTaskCode(patrolTaskTemp.getTaskCode());
for (PatrolTaskInfo taskInfo : taskInfos) {
taskInfo.setTaskMajorId(majorId + "");
}
patrolTaskInfoService.batchInsertPatrolTaskInfo(taskInfos);
try {
logger.info("-----------------patrolTask start");
issueTask(patrolTask);
logger.info("-----------------patrolTask end");
} catch (Exception e) {
logger.info("error", e);
}
return AjaxResult.success(String.join(StringUtils.COMMA, patrolTaskIds));
}
private void toPatrolTask(JSONObject jsonObject, PatrolTask patrolTask) {
String jsonObjectString;
if (jsonObject.get("deviceType") != null) {
jsonObjectString = jsonObject.get("deviceType").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setDeviceType(jsonObjectString);
}
}
if (jsonObject.get("pointType") != null) {
jsonObjectString = jsonObject.get("pointType").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setPointType(jsonObjectString);
}
}
if (jsonObject.get("taskId") != null) {
jsonObjectString = jsonObject.get("taskId").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setTaskId(Long.valueOf(jsonObjectString));
patrolTask.setCreateTime(patrolTaskService.selectPatrolTaskByTaskId(Long.valueOf(jsonObjectString)).getCreateTime());
}
}
if (jsonObject.get("stationName") != null) {
jsonObjectString = jsonObject.get("stationName").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setStationName(jsonObjectString);
}
}
if (jsonObject.get("areaId") != null) {
jsonObjectString = jsonObject.get("areaId").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setAreaId(jsonObjectString);
}
}
if (jsonObject.get("areaName") != null) {
jsonObjectString = jsonObject.get("areaName").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setAreaName(jsonObjectString);
}
}
if (jsonObject.get("stationCode") != null) {
jsonObjectString = jsonObject.get("stationCode").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setStationCode(jsonObjectString);
}
}
if (jsonObject.get("type") != null) {
jsonObjectString = jsonObject.get("type").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setType(jsonObjectString);
}
}
if (jsonObject.get("taskCode") != null) {
jsonObjectString = jsonObject.get("taskCode").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setTaskCode(jsonObjectString);
}
}
if (jsonObject.get("taskName") != null) {
jsonObjectString = jsonObject.get("taskName").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setTaskName(jsonObjectString);
}
}
if (jsonObject.get("priority") != null) {
jsonObjectString = jsonObject.get("priority").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setPriority(jsonObjectString);
}
}
if (jsonObject.get("deviceLevel") != null) {
jsonObjectString = jsonObject.get("deviceLevel").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setDeviceLevel(jsonObjectString);
}
}
if (jsonObject.get("deviceList") != null) {
jsonObjectString = jsonObject.get("deviceList").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setDeviceList(jsonObjectString);
}
}
if (jsonObject.get("fixedStartTime") != null) {
jsonObjectString = jsonObject.get("fixedStartTime").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setFixedStartTime(DateUtils.parse(DateUtils.yyyyMMddHHmmss2, jsonObjectString));
}
}
if (jsonObject.get("cycleMonth") != null) {
jsonObjectString = jsonObject.get("cycleMonth").toString();
if (jsonObjectString != null && StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setCycleMonth(jsonObjectString);
}
}
if (jsonObject.get("cycleWeek") != null) {
jsonObjectString = jsonObject.get("cycleWeek").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setCycleWeek(jsonObjectString);
}
}
if (jsonObject.get("cycleExecuteTime") != null) {
jsonObjectString = jsonObject.get("cycleExecuteTime").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setCycleExecuteTime(jsonObjectString);
}
}
if (jsonObject.get("cycleStartTime") != null) {
jsonObjectString = jsonObject.get("cycleStartTime").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setCycleStartTime(DateUtils.parse(DateUtils.yyyyMMddHHmmss2, jsonObjectString));
}
}
if (jsonObject.get("cycleEndTime") != null) {
jsonObjectString = jsonObject.get("cycleEndTime").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setCycleEndTime(DateUtils.parse(DateUtils.yyyyMMddHHmmss2, jsonObjectString));
}
}
if (jsonObject.get("intervalNumber") != null) {
jsonObjectString = jsonObject.get("intervalNumber").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setIntervalNumber(Integer.parseInt(jsonObjectString));
}
}
if (jsonObject.get("intervalType") != null) {
jsonObjectString = jsonObject.get("intervalType").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setIntervalType(jsonObjectString);
}
}
if (jsonObject.get("intervalExecuteTime") != null) {
jsonObjectString = jsonObject.get("intervalExecuteTime").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setIntervalExecuteTime(jsonObjectString);
}
}
if (jsonObject.get("intervalStartTime") != null) {
jsonObjectString = jsonObject.get("intervalStartTime").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setIntervalStartTime(DateUtils.parse(DateUtils.yyyyMMddHHmmss2, jsonObjectString));
}
}
if (jsonObject.get("intervalEndTime") != null) {
jsonObjectString = jsonObject.get("intervalEndTime").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setIntervalEndTime(DateUtils.parse(DateUtils.yyyyMMddHHmmss2, jsonObjectString));
}
}
if (jsonObject.get("invalidStartTime") != null) {
jsonObjectString = jsonObject.get("invalidStartTime").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setInvalidStartTime(DateUtils.parse(DateUtils.yyyyMMddHHmmss2, jsonObjectString));
}
}
if (jsonObject.get("invalidEndTime") != null) {
jsonObjectString = jsonObject.get("invalidEndTime").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setInvalidEndTime(DateUtils.parse(DateUtils.yyyyMMddHHmmss2, jsonObjectString));
}
}
if (jsonObject.get("isenable") != null) {
jsonObjectString = jsonObject.get("isenable").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setIsEnable(jsonObjectString);
}
}
if (jsonObject.get("devType") != null) {
jsonObjectString = jsonObject.get("devType").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setDevType(jsonObjectString);
}
}
if (jsonObject.get("creator") != null) {
jsonObjectString = jsonObject.get("creator").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setDrafter(jsonObjectString);
}
}
if (jsonObject.get("executionStatus") != null) {
jsonObjectString = jsonObject.get("executionStatus").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setExecutionStatus(jsonObjectString);
}
}
if (jsonObject.get("taskCycle") != null) {
jsonObjectString = jsonObject.get("taskCycle").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setTaskCycle(jsonObjectString);
}
}
if (jsonObject.get("devNo") != null) {
jsonObjectString = jsonObject.get("devNo").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setDevNo(jsonObjectString);
}
}
if (jsonObject.get("executionMode") != null) {
jsonObjectString = jsonObject.get("executionMode").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setExecutionMode(jsonObjectString);
}
}
if (jsonObject.get("linkageState") != null) {
jsonObjectString = jsonObject.get("linkageState").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setLinkageState(jsonObjectString);
}
}
if (jsonObject.get("areaIdS") != null) {
jsonObjectString = jsonObject.get("areaIdS").toString();
if (jsonObjectString != null && StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setAreaIdS(jsonObjectString);
// 用新的区域树
String areaNameS = getAreaNameSByAreaIdSRelation(jsonObjectString);
patrolTask.setAreaName(areaNameS);
}
}
if (jsonObject.get("taskId") != null) {
jsonObjectString = jsonObject.get("taskId").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setTaskId(Long.valueOf(jsonObjectString));
}
}
if (jsonObject.get("cycleMonth") != null) {
jsonObjectString = jsonObject.get("cycleMonth").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
patrolTask.setCycleMonth(jsonObjectString);
}
}
if (StringUtils.isNotEmpty(patrolTask.getCycleMonth())) {
final String cycleMonth = toCycleMonth(patrolTask.getCycleMonth());
if (StringUtils.isNotEmpty(cycleMonth)) {
patrolTask.setCycleMonth(cycleMonth);
}
}
String executionType = "1";
if (jsonObject.get("executionType") != null) {
executionType = jsonObject.get("executionType").toString();
}
if ("2".equals(executionType) || "3".equals(executionType)) {
patrolTask.setFixedStartTime(null);
}
}
@PostMapping({"/shaoxing/save"})
@ResponseBody
public AjaxResult save_shaoxing(@RequestBody String message) {
try {
logger.info("message: {}", message);
int a = 1;
if (StringUtils.isNotEmpty(message)) {
JSONObject parseObject = JSONObject.parseObject(message);
PatrolTask patrolTask = new PatrolTask();
toPatrolTask(parseObject, patrolTask);
String key = redisService.getCacheObjectOfTask(RedisConst.TASK_CURRENT_CODE, String.valueOf(patrolTask.getTaskId()));
if (key != null && key.contains(String.valueOf(patrolTask.getTaskId()))) {
return AjaxResult.error("任务正在执行,禁止修改!");
}
patrolTask.setStorage(message);
String cycleMonthText;
if (StringUtils.isNotEmpty(patrolTask.getCycleMonth())) {
cycleMonthText = toCycleMonth(patrolTask.getCycleMonth());
if (StringUtils.isNotEmpty(cycleMonthText)) {
patrolTask.setCycleMonth(cycleMonthText);
}
}
String executionTypeText = "";
if (parseObject.get("executionType") != null) {
executionTypeText = parseObject.get("executionType").toString();
}
if ("2".equals(executionTypeText) || "3".equals(executionTypeText)) {
patrolTask.setFixedStartTime(null);
patrolTaskService.updatePatrolTaskTime(patrolTask.getTaskId().toString());
}
Long majorId = patrolTask.getTaskId();
patrolTask.setTaskCode(patrolTask.getTaskId() + "");
patrolTaskInfoService.deletePatrolTaskInfoByMajorId(majorId);
// 点位信息
List<String> patrolPointIds = new ArrayList<>();
if (parseObject.get("patrolPointIds") != null) {
String jsonObjectString = parseObject.get("patrolPointIds").toString();
if (StringUtils.isNotEmpty(jsonObjectString)) {
String[] pointArr = jsonObjectString.split(",");
patrolPointIds = Arrays.asList(pointArr);
}
}
List<PatrolTaskInfo> taskInfos = new ArrayList<>();
if (patrolPointIds.size() > 0) {
// 查询点位信息
List<JSONObject> patrolPointList = patrolTaskService.selectBasedataPatrolPointList(patrolPointIds);
Map<Long, JSONObject> patrolPointIdMap = patrolPointList.stream().collect(Collectors.toMap(item -> item.getLong("patrolPointId"), Function.identity()));
// 查询点位预置位信息
List<JSONObject> basedataPatrolPointPresetList = patrolTaskService.selectBasedataPatrolPointPresetList(patrolPointIds);
Map<Long, JSONObject> basedataPatrolPointPresetMap = basedataPatrolPointPresetList.stream().collect(Collectors.toMap(item -> item.getLong("patrolPointId"), Function.identity(), (e1, e2) -> e2));
// 查询点位预置位位置信息
List<JSONObject> basedataPatrolPresetPosList = patrolTaskService.selectPatrolPresetPosList(patrolPointIds);
Map<Long, JSONObject> basedataPatrolPresetPosMap = basedataPatrolPresetPosList.stream().collect(Collectors.toMap(item -> item.getLong("patrolPointId"), Function.identity(), (e1, e2) -> e2));
Set<String> eqpBookIdPreset = basedataPatrolPointPresetList.stream().map(basedataPatrolPointPresetJson -> {
return basedataPatrolPointPresetJson.getString("eqpBookId");
}).collect(Collectors.toSet());
Set<String> eqpBookIdPos = basedataPatrolPresetPosList.stream().map(basedataPatrolPresetPosJson -> {
return basedataPatrolPresetPosJson.getString("eqpBookId");
}).collect(Collectors.toSet());
List<String> eqpBookIds = new ArrayList<>();
eqpBookIds.addAll(eqpBookIdPreset);
eqpBookIds.addAll(eqpBookIdPos);
// 查询设备信息
List<Map<String, String>> list = patrolTaskInfoService.selectVideoPosByPointIdByEqpbookIds(eqpBookIds);
Map<String, Map<String, String>> eqpBooksMap =
list.stream().collect(Collectors.toMap(e -> String.valueOf(e.get("eqp_book_id")), e -> e, (e1, e2) -> e2));
List<String> devTypeList = new LinkedList<>();
Set<String> devNoSet = new LinkedHashSet<>();
Set<String> deviceSet = new LinkedHashSet<>();
// 查询点位预置位信息
for (String patrolPointId : patrolPointIds) {
PatrolTaskInfo patrolTaskInfo = new PatrolTaskInfo();
patrolTaskInfo.setEbookId(basedataPatrolPointPresetMap.getOrDefault(Long.valueOf(patrolPointId), basedataPatrolPresetPosMap.getOrDefault(Long.valueOf(patrolPointId),new JSONObject())).getString("eqpBookId"));
Map<String, String> videoPos = eqpBooksMap.get(patrolTaskInfo.getEbookId());
String type = videoPos.get("type");
String patrolDeviceCode = videoPos.get("patrol_device_code");
String typeEx;
if (type.equals("13")) {
typeEx = "0";
} else if (!type.equals("1") && !type.equals("2") && !type.equals("3")) {
typeEx = "2";
} else {
typeEx = "1";
}
patrolTaskInfo.setDeviceId(patrolPointId);
patrolTaskInfo.setDeviceName(patrolPointIdMap.getOrDefault(Long.valueOf(patrolPointId), new JSONObject()).getString("patrolPointName"));
patrolTaskInfo.setComponentId(patrolPointIdMap.getOrDefault(Long.valueOf(patrolPointId), new JSONObject()).getString("relationDeviceId"));
// patrolTaskInfo.setComponentName();
// patrolTaskInfo.setBayId();
// patrolTaskInfo.setBayName();
patrolTaskInfo.setMainDeviceId(patrolPointIdMap.getOrDefault(Long.valueOf(patrolPointId), new JSONObject()).getString("relationMainDeviceId"));
// patrolTaskInfo.setMainDeviceName();
patrolTaskInfo.setDevNo(patrolDeviceCode);
patrolTaskInfo.setDevType(typeEx);
patrolTaskInfo.setPresetCode(basedataPatrolPointPresetMap.getOrDefault(Long.valueOf(patrolPointId), basedataPatrolPresetPosMap.getOrDefault(Long.valueOf(patrolPointId),new JSONObject())).getString("presetCode"));
patrolTaskInfo.setEbookName(videoPos.getOrDefault("patrol_device_name", ""));
// patrolTaskInfoService.insertPatrolTaskInfo(patrolTaskInfo);
if (devNoSet.add(patrolTaskInfo.getDevNo())) {
devTypeList.add(patrolTaskInfo.getDevType());
}
deviceSet.add(patrolTaskInfo.getMainDeviceId());
taskInfos.add(patrolTaskInfo);
}
patrolTask.setDevType(StringUtils.join(devTypeList, ","));
patrolTask.setDevNo(StringUtils.join(devNoSet, ","));
patrolTask.setDeviceList(StringUtils.join(deviceSet, ","));
}
patrolTaskService.updatePatrolTask(patrolTask);
for (PatrolTaskInfo taskInfo : taskInfos) {
taskInfo.setTaskMajorId(majorId + "");
}
patrolTaskInfoService.batchInsertPatrolTaskInfo(taskInfos);
issueTask(patrolTask);
// 修改任务删除原有的任务执行策略根据新的策略重新生成
if (StringUtils.isNotEmpty(patrolTask.getTaskCode())) {
Collection<String> redisKeys = redisService.keys(RedisConst.TASK_CODE + patrolTask.getTaskCode() + StringUtils.AT + "*");
for (String redisKey : redisKeys) {
redisService.deleteObject(redisKey);
}
}
}
return toAjax(a);
} catch (Exception e) {
e.printStackTrace();
}
return toAjax(0);
}
@PostMapping({"/add"})
@ResponseBody
public AjaxResult add(@RequestBody String message) {
@ -900,6 +1436,7 @@ public class PatrolTaskController extends BaseController {
}
public void issueTask(PatrolTask patrolTask) {
logger.info("***************************** JobTaskTimer issueTask ************************************* patrolTask: {}", patrolTask);
String rebootCode = patrolTaskService.selectConfigByKey("rebootCode");//robotCode
String uavCode = patrolTaskService.selectConfigByKey("uavCode");//droneCode
String receiveCode = "";
@ -2546,6 +3083,17 @@ public class PatrolTaskController extends BaseController {
return jsonObject.get("data").toString();
}
/**
* 新的关系树
* @param areaIdS
* @return
*/
private String getAreaNameSByAreaIdSRelation(String areaIdS) {
AjaxResult ajaxResult = FeignBasedataAreaService.selectAreaNameSForTaskByAreaIdSRelation((new JSONObject()).fluentPut("areaIdS", areaIdS));
JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(ajaxResult));
return jsonObject.get("data").toString();
}
@Log(
title = "导出任务详情数据",
businessType = BizType.EXPORT
@ -3411,7 +3959,6 @@ public class PatrolTaskController extends BaseController {
listAlgName.add(item.getAlgName());
}
}
map.put("listPointName", listPointName);
map.put("listPointStatus", mapList);
map.put("listDeviceSource", listDeviceSource);


+ 9
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/task/domain/PatrolData.java View File

@ -74,6 +74,7 @@ public class PatrolData implements Comparable<PatrolData> {
private String brightResStatus;
private String areaName;
private String areaId;
private String algType;
private String objectId;
private String imageNormalUrlPath;
@ -374,6 +375,14 @@ public class PatrolData implements Comparable<PatrolData> {
this.taskPatrolId = taskPatrolId;
}
public String getAreaId() {
return areaId;
}
public void setAreaId(String areaId) {
this.areaId = areaId;
}
protected boolean canEqual(Object other) {
return other instanceof PatrolData;
}


+ 6
- 50
inspect-main/inspect-main-task/src/main/java/com/inspect/task/domain/PatrolTask.java View File

@ -17,6 +17,7 @@ import lombok.*;
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class PatrolTask extends BaseEntity {
private static final long serialVersionUID = 1L;
@ -186,57 +187,12 @@ public class PatrolTask extends BaseEntity {
private List<VideoPos> videoPosList;
private List<PatrolTaskStatus> patrolTaskStatusList;
private List<PrevPoint> prevPoints;
private List<String> patrolPointIds;
private String specifiedAlg;
// 任务总点位数量
private int totalPoints;
@Override
public String toString() {
return "PatrolTask{" +
"taskId=" + taskId +
", stationName='" + stationName + '\'' +
", stationCode='" + stationCode + '\'' +
", type='" + type + '\'' +
", taskCode='" + taskCode + '\'' +
", taskName='" + taskName + '\'' +
", priority='" + priority + '\'' +
", deviceLevel='" + deviceLevel + '\'' +
", deviceList='" + deviceList + '\'' +
", fixedStartTime=" + fixedStartTime +
", cycleMonth='" + cycleMonth + '\'' +
", cycleWeek='" + cycleWeek + '\'' +
", cycleExecuteTime='" + cycleExecuteTime + '\'' +
", cycleStartTime=" + cycleStartTime +
", cycleEndTime=" + cycleEndTime +
", intervalNumber=" + intervalNumber +
", intervalType='" + intervalType + '\'' +
", intervalExecuteTime='" + intervalExecuteTime + '\'' +
", intervalStartTime=" + intervalStartTime +
", intervalEndTime=" + intervalEndTime +
", invalidStartTime=" + invalidStartTime +
", invalidEndTime=" + invalidEndTime +
", isEnable='" + isEnable + '\'' +
", linkageState='" + linkageState + '\'' +
", devType='" + devType + '\'' +
", drafter='" + drafter + '\'' +
", executionStatus='" + executionStatus + '\'' +
", fileStatus='" + fileStatus + '\'' +
", isUp='" + isUp + '\'' +
", taskCycle='" + taskCycle + '\'' +
", devNo='" + devNo + '\'' +
", storage='" + storage + '\'' +
", taskProgress='" + taskProgress + '\'' +
", taskState='" + taskState + '\'' +
", executionMode='" + executionMode + '\'' +
", beginTime='" + beginTime + '\'' +
", endTime='" + endTime + '\'' +
", areaId='" + areaId + '\'' +
", areaName='" + areaName + '\'' +
", areaIdS='" + areaIdS + '\'' +
", eqPointList=" + eqpointList +
", videoPosList=" + videoPosList +
", patrolTaskStatusList=" + patrolTaskStatusList +
", prevPoints=" + prevPoints +
", totalPoints=" + totalPoints +
'}';
}
private String deviceType;
private String pointType;
}

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

@ -54,4 +54,10 @@ public interface PatrolTaskMapper {
List<JSONObject> selectPatrolTaskStatus(@Param("taskCodes") Set<String> patrolTaskCodes);
String selectStationNo();
List<JSONObject> selectBasedataPatrolPointList(@Param("patrolPointIds") List<String> patrolPointIds);
List<JSONObject> selectBasedataPatrolPointPresetList(@Param("patrolPointIds") List<String> patrolPointIds);
List<JSONObject> selectPatrolPresetPosList(@Param("patrolPointIds") List<String> patrolPointIds);
}

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

@ -1,5 +1,6 @@
package com.inspect.task.service;
import com.alibaba.fastjson.JSONObject;
import com.inspect.task.domain.DeviceConvert;
import com.inspect.task.domain.PatrolData;
import com.inspect.task.domain.PatrolTask;
@ -56,4 +57,10 @@ public interface IPatrolTaskService {
void executeAsync(PatrolTaskStatus taskStatus);
void executeTask();
List<JSONObject> selectBasedataPatrolPointList(List<String> patrolPointIds);
List<JSONObject> selectBasedataPatrolPointPresetList(List<String> patrolPointIds);
List<JSONObject> selectPatrolPresetPosList(List<String> patrolPointIds);
}

+ 30
- 4
inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/impl/PatrolTaskServiceImpl.java View File

@ -16,10 +16,16 @@ import com.inspect.partrolresult.util.PrintUtil;
import com.inspect.resultmain.controller.PatrolTaskResultMainController;
import com.inspect.resultmain.domain.PatrolTaskResultMain;
import com.inspect.task.domain.DeviceConvert;
import com.inspect.task.domain.PatrolData;
import com.inspect.task.domain.PatrolTask;
import com.inspect.task.mapper.PatrolTaskMapper;
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.mapper.PatrolTaskStatusMapper;
import lombok.extern.slf4j.Slf4j;
@ -29,9 +35,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import java.net.URLEncoder;
import java.util.*;
import java.util.stream.Collectors;
import java.util.List;
@Slf4j
@EnableScheduling
@ -39,14 +43,20 @@ import java.util.stream.Collectors;
public class PatrolTaskServiceImpl implements IPatrolTaskService {
final PatrolTaskMapper patrolTaskMapper;
final ResultAnalysisMapper resultAnalysisMapper;
@Autowired
private PatrolTaskStatusMapper patrolTaskStatusMapper;
@Autowired
private PatrolTaskResultMainController patrolTaskResultMainController;
@Autowired
private TaskCalendarGenerator taskCalendarGenerator;
@Autowired
private SftpClient sftpClient;
final ResultAnalysisMapper resultAnalysisMapper;
@Autowired
public PatrolTaskServiceImpl(PatrolTaskMapper patrolTaskMapper, ResultAnalysisMapper resultAnalysisMapper) {
this.patrolTaskMapper = patrolTaskMapper;
@ -344,4 +354,20 @@ public class PatrolTaskServiceImpl implements IPatrolTaskService {
}
log.info("=============================定时任务归档结束=============================================");
}
// 根据点位id查询点位信息
@Override
public List<JSONObject> selectBasedataPatrolPointList(List<String> patrolPointIds) {
return patrolTaskMapper.selectBasedataPatrolPointList(patrolPointIds);
}
@Override
public List<JSONObject> selectBasedataPatrolPointPresetList(List<String> patrolPointIds) {
return patrolTaskMapper.selectBasedataPatrolPointPresetList(patrolPointIds);
}
@Override
public List<JSONObject> selectPatrolPresetPosList(List<String> patrolPointIds) {
return patrolTaskMapper.selectPatrolPresetPosList(patrolPointIds);
}
}

+ 5
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/controller/PatrolTaskStatusController.java View File

@ -5,6 +5,7 @@ import com.github.pagehelper.PageInfo;
import com.inspect.analysis.domain.ResultAnalysis;
import com.inspect.analysis.domain.ResultAnalysisSummaryDTO;
import com.inspect.analysis.service.IResultAnalysisService;
import com.inspect.base.core.constant.AlgConstants;
import com.inspect.base.core.constant.RedisConst;
import com.inspect.base.core.enums.TaskStatus;
import com.inspect.base.core.enums.TaskType;
@ -252,6 +253,10 @@ public class PatrolTaskStatusController extends BaseController {
list.forEach((item) -> {
item.setPatrolStatus("1");
item.setPointCount(pointMap.get(item.getTaskCode()));
// 任务指定算法类型当为纠偏时返回值便于前端做样式处理
if (AlgConstants.CORRECTION.equals(item.getSpecifiedAlg())) {
item.setAlgName(AlgConstants.CORRECTION);
}
// 根据任务进度和归档信息设置文件状态
if (!item.getTaskProgress().contains("100")) {
item.setFileStatus("0");


+ 4
- 2
inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/domain/PatrolTaskStatus.java View File

@ -80,12 +80,14 @@ public class PatrolTaskStatus extends BaseEntity {
@Excel(
name = "巡检类型"
)
private String patrolType;
// 主任务id
private String mainId;
private String taskType;
private String filterTaskType;
// 汇总信息
private String summary;
private List<PatrolTaskStatus> children;
private String patrolType;
private String timeType;
private String timeConditions;
private String beginTime;
@ -115,7 +117,7 @@ public class PatrolTaskStatus extends BaseEntity {
private String resultType;
private String pointStatus;
private String algName;
private String specifiedAlg;
public PatrolTaskStatus(String taskPatrolledId) {
this.taskPatrolledId = taskPatrolledId;


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

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

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

@ -1,5 +1,6 @@
package com.inspect.taskstatus.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.inspect.annotation.TaskStatusChange;
import com.inspect.base.core.constant.Color;
import com.inspect.base.core.constant.RedisConst;
@ -10,6 +11,7 @@ import com.inspect.base.core.utils.DateUtils;
import com.inspect.base.core.utils.StringUtils;
import com.inspect.base.redis.service.RedisService;
import com.inspect.partrolresult.mapper.PatrolResultMapper;
import com.inspect.partrolresult.service.IPatrolResultService;
import com.inspect.resultmain.domain.PatrolTaskResultMain;
import com.inspect.resultmain.service.IPatrolTaskResultMainService;
import com.inspect.task.domain.PatrolTask;
@ -27,10 +29,7 @@ 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;
import java.util.*;
@Service
public class PatrolTaskStatusServiceImpl implements IPatrolTaskStatusService {
@ -49,6 +48,9 @@ public class PatrolTaskStatusServiceImpl implements IPatrolTaskStatusService {
@Resource
private PatrolResultMapper patrolResultMapper;
@Resource
private IPatrolResultService patrolResultService;
@Autowired
public PatrolTaskStatusServiceImpl(PatrolTaskStatusMapper patrolTaskStatusMapper) {
this.patrolTaskStatusMapper = patrolTaskStatusMapper;
@ -154,19 +156,11 @@ public class PatrolTaskStatusServiceImpl implements IPatrolTaskStatusService {
throw new IllegalArgumentException("主任务进度/状态由子任务自动计算,不能直接修改:" + patrolTaskStatus.getTaskPatrolledId());
}
// 任务状态完成/超期更新结束时间
if (state.equals(TaskStatus.DONE.getCode()) || state.equals(TaskStatus.HALTED.getCode())) {
String endTime = DateUtils.parseDateToStr(DateUtils.yyyyMMddHHmmss2, new Date());
patrolTaskStatus.setEndTime(endTime);
}
patrolTaskStatus.setTaskProgress(collectionProgress);
patrolTaskStatus.setTaskEstimatedTime(algorithmProgress);
patrolTaskStatus.setTaskState(state);
// 普通任务且状态为已完成删除redis任务缓存
if (TaskType.ORDINARY.getCode().equals(patrolTaskStatus.getTaskType()) && state.equals(TaskStatus.DONE.getCode())) {
redisService.deleteObjectOfTask(RedisConst.TASK_CURRENT_CODE, patrolTaskStatus.getTaskCode());
}
setNormalTaskStatus(patrolTaskStatus);
// 更新子任务或普通任务
updatePatrolTaskStatus(patrolTaskStatus);
log.info("updateTaskProgress: {}", patrolTaskStatus);
@ -183,6 +177,8 @@ public class PatrolTaskStatusServiceImpl implements IPatrolTaskStatusService {
return;
}
PatrolTaskStatus mainTask = selectPatrolTaskStatusByTaskPatrolledId(mainId);
BigDecimal execTotalPoints = BigDecimal.ZERO;
BigDecimal execTotalAlgorithms = BigDecimal.ZERO;
TaskStatus mainTaskState = TaskStatus.DONE;
@ -193,12 +189,8 @@ public class PatrolTaskStatusServiceImpl implements IPatrolTaskStatusService {
log.info("taskNames: {}", subTask.getTaskName());
if (taskNames.length > 1) {
String sendCode = taskNames[0];
List<String> algList = new ArrayList<>();
if (sendCode.equals("摄像头")) {
algList = patrolResultMapper.selectAlgList(taskCode, null, "2");
} else {
algList = patrolResultMapper.selectAlgList(taskCode, sendCode, null);
}
// 指定任务算法
List<String> algList = patrolResultService.selectAlgList(taskCode, sendCode, mainTask.getSpecifiedAlg());
int subTotalPoints = algList.size();
int subTotalAlgorithms = algList.stream().mapToInt(s -> s.split(",").length).sum();
@ -221,7 +213,7 @@ public class PatrolTaskStatusServiceImpl implements IPatrolTaskStatusService {
}
}
List<String> algList = patrolResultMapper.selectAlgList(taskCode, null, null);
List<String> algList = patrolResultService.selectAlgList(taskCode, null, mainTask.getSpecifiedAlg());
int totalPoints = algList.size();
int totalAlgorithms = algList.stream().mapToInt(s -> s.split(",").length).sum();
log.info("totalPoints:{},totalAlgorithms:{}", totalPoints, totalAlgorithms);
@ -239,23 +231,17 @@ public class PatrolTaskStatusServiceImpl implements IPatrolTaskStatusService {
1, RoundingMode.DOWN
);
PatrolTaskStatus mainTask = selectPatrolTaskStatusByTaskPatrolledId(mainId);
// 如果状态为已完成但采集和分析进度小于100说明还有任务未上报更新为运行中
if (mainTaskState.getCode().equals(TaskStatus.DONE.getCode())
&& (mainTaskProgress.compareTo(new BigDecimal(100)) != 0 || mainAlgorithmProgress.compareTo(new BigDecimal(100)) != 0 )){
&& (mainTaskProgress.compareTo(new BigDecimal(100)) != 0 || mainAlgorithmProgress.compareTo(new BigDecimal(100)) != 0)) {
mainTaskState = TaskStatus.RUNNING;
}
if (mainTaskState.getCode().equals(TaskStatus.DONE.getCode()) || mainTaskState.getCode().equals(TaskStatus.HALTED.getCode())) {
// 主任务且状态为已完成删除redis任务缓存
redisService.deleteObjectOfTask(RedisConst.TASK_CURRENT_CODE, taskCode);
String endTime = DateUtils.parseDateToStr(DateUtils.yyyyMMddHHmmss2, new Date());
mainTask.setEndTime(endTime);
// generateTaskResultMain(mainTask);
}
mainTask.setTaskState(mainTaskState.getCode());
mainTask.setTaskProgress(mainTaskProgress.toString());
mainTask.setTaskEstimatedTime(mainAlgorithmProgress.toString());
setNormalTaskStatus(mainTask);
// 更新主任务
patrolTaskStatusMapper.updatePatrolTaskStatus(mainTask);
}
@ -291,4 +277,89 @@ public class PatrolTaskStatusServiceImpl implements IPatrolTaskStatusService {
return mainId;
}
private String getTaskPointsSummary(String taskCode, String taskPatrolledId, String specifiedAlg) {
// 任务总点位和算法
List<Map<String, String>> totalPointList = patrolTaskStatusMapper.selectTotalPointsAndAlgs(taskCode);
// 任务指定算法类型
if (StringUtils.isNotEmpty(specifiedAlg)) {
totalPointList.stream().forEach(item -> item.put("alg_subtype_ids", specifiedAlg));
}
// 任务已巡检点位和算法
List<Map<String, String>> executedPointList = patrolTaskStatusMapper.selectExecutedPointsAndAlgs(taskPatrolledId);
return countInspectedPoint(totalPointList, executedPointList);
}
/**
* 统计点位巡检情况
*
* @param data1List 总点位和算法
* @param data2List 已执行点位和算法
* @return
*/
private String countInspectedPoint(List<Map<String, String>> data1List, List<Map<String, String>> data2List) {
Map<String, Set<String>> data2Map = new HashMap<>();
for (Map<String, String> row : data2List) {
String pid = String.valueOf(row.get("patrol_point_id"));
String subtype = String.valueOf(row.get("alg_subtype_id"));
data2Map.computeIfAbsent(pid, k -> new HashSet<>()).add(subtype);
}
// 遍历 data1检查每个 patrol_point_id 是否全部子类型都存在
int count = 0;
for (Map<String, String> row : data1List) {
String pid = String.valueOf(row.get("patrol_point_id"));
String idsStr = String.valueOf(row.get("alg_subtype_ids"));
if (idsStr == null || idsStr.trim().isEmpty()) {
continue; // 空则跳过
}
// 解析逗号分隔的 alg_subtype_ids
Set<String> requiredSet = new HashSet<>();
for (String s : idsStr.split(",")) {
String trim = s.trim();
if (!trim.isEmpty()) {
requiredSet.add(trim);
}
}
// 判断是否是 data2 的子集
Set<String> availableSet = data2Map.get(pid);
if (availableSet != null && availableSet.containsAll(requiredSet)) {
count++;
}
}
JSONObject result = new JSONObject();
result.put("totalPoint", data1List.size());
result.put("executedPoint", count);
result.put("unexecutedPoint", (data1List.size() - count));
return result.toJSONString();
}
private void setNormalTaskStatus(PatrolTaskStatus patrolTaskStatus) {
// 任务最终状态已完成已终止
boolean isFinalState = TaskStatus.DONE.getCode().equals(patrolTaskStatus.getTaskState()) || TaskStatus.HALTED.getCode().equals(patrolTaskStatus.getTaskState());
// 常规任务主任务普通任务
boolean isNormalTask = TaskType.ORDINARY.getCode().equals(patrolTaskStatus.getTaskType()) || TaskType.MAIN.getCode().equals(patrolTaskStatus.getTaskType());
// 更新任务结束时间和redis任务执行标识
if (isFinalState) {
String endTime = DateUtils.parseDateToStr(DateUtils.yyyyMMddHHmmss2, new Date());
patrolTaskStatus.setEndTime(endTime);
if (isNormalTask) {
redisService.deleteObjectOfTask(RedisConst.TASK_CURRENT_CODE, patrolTaskStatus.getTaskCode());
}
}
// 更新的点位汇总信息
if (isNormalTask) {
String summary = getTaskPointsSummary(patrolTaskStatus.getTaskCode(), patrolTaskStatus.getTaskPatrolledId(), patrolTaskStatus.getSpecifiedAlg());
patrolTaskStatus.setSummary(summary);
}
}
}

+ 5
- 3
inspect-main/inspect-main-task/src/main/resources/mapper/task/InspectionReportDataMapper.xml View File

@ -21,6 +21,7 @@
<result property="algName" column="alg_name"/>
<result property="taskName" column="task_name"/>
<result property="taskPatrolledId" column="task_patrolled_id"/>
<result property="taskResultId" column="task_result_id"/>
</resultMap>
<sql id="selectInspectionReportDataVo">
@ -39,7 +40,8 @@
inspection_img,
alg_name,
task_name,
task_patrolled_id
task_patrolled_id,
task_result_id
from inspection_report_data
</sql>
@ -162,11 +164,11 @@
</delete>
<insert id="batchInsertInspectionReportData" parameterType="java.util.List">
insert into inspection_report_data
(line_id,code,report_id,area,time_interval,eq_name,parts,point_name,data_sources,acquisition_time,inspection_results,point_status,inspection_img,alg_name,task_name,task_patrolled_id)
(line_id,code,report_id,area,time_interval,eq_name,parts,point_name,data_sources,acquisition_time,inspection_results,point_status,inspection_img,alg_name,task_name,task_patrolled_id,task_result_id)
values
<foreach collection="list" item="t" index="index" separator=",">
(#{t.lineId}, #{t.code}, #{t.reportId}, #{t.area}, #{t.timeInterval}, #{t.eqName}, #{t.parts},
#{t.pointName},#{t.dataSources},#{t.acquisitionTime},#{t.inspectionResults},#{t.pointStatus},#{t.inspectionImg},#{t.algName},#{t.taskName},#{t.taskPatrolledId})
#{t.pointName},#{t.dataSources},#{t.acquisitionTime},#{t.inspectionResults},#{t.pointStatus},#{t.inspectionImg},#{t.algName},#{t.taskName},#{t.taskPatrolledId},#{t.taskResultId})
</foreach>
</insert>
</mapper>

+ 21
- 1
inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolResultMapper.xml View File

@ -174,6 +174,7 @@
<result property="resStatus" column="res_status"/>
<result property="deviceName" column="device_name"/>
<result property="areaName" column="area_name"/>
<result property="areaId" column="area_id"/>
<result property="algType" column="alg_type"/>
<result property="objectId" column="objectId"/>
<result property="algName" column="alg_name"/>
@ -614,6 +615,7 @@
</select>
<resultMap type="PatrolResultRef" id="PatrolResultRef">
<result property="lineId" column="line_id"/>
<result property="mainId" column="main_id"/>
<result property="deviceId" column="device_id"/>
<result property="taskName" column="task_name"/>
<result property="devType" column="dev_type"/>
@ -654,6 +656,7 @@
<select id="selectResultRefByLineIds" resultMap="PatrolResultRef">
select a.line_id,
a.main_id,
a.device_id,
a.task_name,
c.dev_type,
@ -668,6 +671,7 @@
b.result_type,
b.task_patrol_id,
a.value_unit,
a.unit,
b.result_content,
b.alg_type,
d.alg_subtype_name as alg_name
@ -1279,7 +1283,7 @@
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="taskCode != null and taskCode != ''">and i.task_major_id = #{taskCode}</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>
@ -1311,6 +1315,7 @@
b.res_status,
d.device_name,
e.area_name,
e.area_id,
b.alg_type,
b.objectId,
b.suggestion,
@ -1408,4 +1413,19 @@
<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 id="selectPointAlgInfo" resultMap="AlgInfoResult">
SELECT a.alg_name, s.alg_subtype_code, s.alg_subtype_name
FROM basedata_patrolpoint p
LEFT JOIN basedata_alg_subtype s ON FIND_IN_SET(s.alg_subtype_id, p.alg_subtype_ids)
LEFT JOIN basedata_alg a ON s.alg_id = a.alg_id
WHERE p.patrol_point_id = #{patrolPointId}
</select>
<select id="selectAlgInfoByCode" resultMap="AlgInfoResult">
SELECT a.alg_name, s.alg_subtype_code, s.alg_subtype_name
FROM basedata_alg_subtype s
LEFT JOIN basedata_alg a ON s.alg_id = a.alg_id
WHERE FIND_IN_SET(s.alg_subtype_code, #{codes})
</select>
</mapper>

+ 97
- 3
inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskMapper.xml View File

@ -41,6 +41,9 @@
<result property="linkageState" column="linkage_state"/>
<result property="isUp" column="is_up"/>
<result property="areaIdS" column="area_id_s"/>
<result property="pointType" column="point_type"/>
<result property="deviceType" column="device_type"/>
<result property="specifiedAlg" column="specified_alg"/>
</resultMap>
<sql id="selectPatrolTaskVo">
@ -80,7 +83,10 @@
is_enable,
create_time,
drafter,
area_id_s
area_id_s,
point_type,
device_type,
specified_alg
from patrol_task
</sql>
@ -121,11 +127,9 @@
<if test="executionStatus != null and executionStatus != ''">and execution_status = #{executionStatus}</if>
<if test="taskCycle != null and taskCycle != ''">and task_cycle = #{taskCycle}</if>
<if test="devNo != null and devNo != ''">and dev_no = #{devNo}</if>
<!-- <if test="devType != null and devType != ''">and dev_type = #{devType}</if>-->
<if test="devType != null and devType != ''">and find_in_set(#{devType}, dev_type)</if>
<if test="storage != null and storage != ''">and storage = #{storage}</if>
<if test="areaId != null and areaId != ''">and area_id = #{areaId}</if>
<!-- <if test="areaName != null and areaName != ''">and area_name = #{areaName}</if>-->
<if test="executionMode != null and executionMode != ''">and execution_mode = #{executionMode}</if>
<if test="linkageState != null and linkageState != ''">and linkage_state = #{linkageState}</if>
<if test="isUp != null and isUp != ''">and is_up = #{isUp}</if>
@ -136,6 +140,9 @@
<if test="endTime != null and endTime != ''">
and date_format(create_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')
</if>
<if test="areaName != null and areaName != ''">
and CONCAT(',', area_name, ',') LIKE CONCAT('%', #{areaName}, '%')
</if>
</where>
order by task_id desc
</select>
@ -237,6 +244,8 @@
<if test="linkageState != null">linkage_state,</if>
<if test="isUp != null">is_up,</if>
<if test="areaIdS != null">area_id_s,</if>
<if test="deviceType != null">device_type,</if>
<if test="pointType != null">point_type,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="stationName != null">#{stationName},</if>
@ -275,6 +284,8 @@
<if test="linkageState != null">#{linkageState},</if>
<if test="isUp != null">#{isUp},</if>
<if test="areaIdS != null">#{areaIdS},</if>
<if test="deviceType != null">#{deviceType},</if>
<if test="pointType != null">#{pointType},</if>
</trim>
</insert>
@ -317,6 +328,8 @@
<if test="linkageState != null">linkage_state = #{linkageState},</if>
<if test="isUp != null">is_up = #{isUp},</if>
<if test="areaIdS != null">area_id_s = #{areaIdS},</if>
<if test="pointType != null">point_type = #{pointType},</if>
<if test="deviceType != null">device_type = #{deviceType},</if>
</trim>
where task_id = #{taskId}
</update>
@ -381,5 +394,86 @@
select station_no from basedata_station limit 1
</select>
<select id="selectBasedataPatrolPointList" resultType="com.alibaba.fastjson.JSONObject">
select patrol_point_id as patrolPointId,
patrol_point_code as patrolPointCode,
patrol_point_name as patrolPointName,
device_type_id as deviceTypeId,
main_device_id as mainDeviceId,
relation_main_device_id as relationMainDeviceId,
device_id as deviceId,
relation_device_id as relationDeviceId,
area_id as areaId,
relation_area_id as relationAreaId,
patrol_content as patrolContent,
purpose as purpose,
create_by as createBy,
create_time as createTime,
update_by as updateBy,
update_time as updateTime,
delete_flag as deleteFlag,
std_parol_point_id as stdPatrolPointId,
point_impt_level as pointImptLevel,
patrol_type_id as patrolTypeId,
lower_value as lowerValue,
upper_value as upperValue,
position_x as positionX,
position_y as positionY,
position_z as positionZ,
alg_subtype_ids as algSubtypeIds,
original_alg_subtype_ids as originalAlgSubtypeIds,
original_device_id as originalDeviceId,
dis_ref_picture_path as disRefPicturePath,
original_main_device_id as originalMainDeviceId,
alarm_threshold as alarmThreshold,
meter_type as meterType
from basedata_patrolpoint where patrol_point_id in
<foreach item="patrolPointId" collection="patrolPointIds" open="(" separator="," close=")">
#{patrolPointId}
</foreach>
</select>
<select id="selectBasedataPatrolPointPresetList" resultType="com.alibaba.fastjson.JSONObject">
select patrol_point_preset_id as patrolPointPresetId,
patrol_point_id as patrolPointId,
eqp_book_id as eqpBookId,
channel_id as channelId,
preset_code as presetCode,
preset_name as presetName,
create_by as createBy,
create_time as createTime,
update_by as updateBy,
update_time as updateTime,
delete_flag as deleteFlag,
patrol_device_code as patrolDeviceCode,
channel_code as channelCode,
video_nvr_code as videoNvrCode
from basedata_patrolpoint_preset where patrol_point_id in
<foreach item="patrolPointId" collection="patrolPointIds" open="(" separator="," close=")">
#{patrolPointId}
</foreach>
</select>
<select id="selectPatrolPresetPosList" resultType="com.alibaba.fastjson.JSONObject">
select preset_pos_id as presetPosId,
preset_pos_code as presetCode,
preset_pos_name as presetPosName,
eqp_book_id as eqpBookId,
patrol_device_code as patrolDeviceCode,
patrol_point_id as patrolPointId,
channel_id as channelId,
channel_code as channelCode,
channel_type as channelType,
coordinate_type as coordinateType,
stop_time as stopTime,
channel_img as channelImg,
description as description,
alg_subtype_code as algSubtypeCode,
is_enable as isEnable,
create_time as createTime,
video_nvr_code as videoNvrCode
from patrol_preset_pos where patrol_point_id in
<foreach item="patrolPointId" collection="patrolPointIds" open="(" separator="," close=")">
#{patrolPointId}
</foreach>
</select>
</mapper>

+ 69
- 5
inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskStatusMapper.xml View File

@ -76,7 +76,8 @@
pos,
exec_type,
task_type,
main_id
main_id,
summary
from patrol_task_status
</sql>
@ -117,6 +118,7 @@
b.type as patrol_type,
a.task_type,
a.main_id,
a.summary,
b.execution_status as exec_type
from patrol_task_status a
LEFT JOIN patrol_task b on a.task_code=b.task_code
@ -293,13 +295,57 @@
</select>
<select id="selectPatrolTaskStatusByLineId" parameterType="Long" resultMap="PatrolTaskStatusResult">
<include refid="selectPatrolTaskStatusVo"/>
where line_id = #{lineId}
SELECT
pts.line_id,
pts.task_patrolled_id,
pts.end_time,
pts.patrol_type,
pts.task_name,
pts.task_code,
pts.task_state,
pts.plan_start_time,
pts.start_time,
pts.task_progress,
pts.task_estimated_time,
pts.description,
pts.pos_type,
pts.code,
pts.pos,
pts.exec_type,
pts.task_type,
pts.main_id,
pts.summary,
t.specified_alg
FROM patrol_task_status pts
LEFT JOIN patrol_task t ON pts.task_code = t.task_code
where pts.line_id = #{lineId}
</select>
<select id="selectPatrolTaskStatusByTaskPatrolledId" parameterType="String" resultMap="PatrolTaskStatusResult">
<include refid="selectPatrolTaskStatusVo"/>
where task_patrolled_id = #{taskPatrolledId}
SELECT
pts.line_id,
pts.task_patrolled_id,
pts.end_time,
pts.patrol_type,
pts.task_name,
pts.task_code,
pts.task_state,
pts.plan_start_time,
pts.start_time,
pts.task_progress,
pts.task_estimated_time,
pts.description,
pts.pos_type,
pts.code,
pts.pos,
pts.exec_type,
pts.task_type,
pts.main_id,
pts.summary,
t.specified_alg
FROM patrol_task_status pts
LEFT JOIN patrol_task t ON pts.task_code = t.task_code
WHERE pts.task_patrolled_id = #{taskPatrolledId}
</select>
<select id="selectPatrolTaskStatusListByTaskPatrolledIds"
@ -358,6 +404,23 @@
)
</select>
<select id="selectExecutedPointsAndAlgs" resultType="java.util.Map">
SELECT a.objectId AS patrol_point_id, s.alg_subtype_id
FROM result_analysis a
LEFT JOIN basedata_alg_subtype s ON a.alg_type = s.alg_subtype_code
LEFT JOIN patrol_task_status t ON a.task_patrol_id = t.task_patrolled_id
WHERE a.filter = 1
AND (t.task_patrolled_id = #{taskPatrolledId} or t.main_id = #{taskPatrolledId})
</select>
<select id="selectTotalPointsAndAlgs" resultType="java.util.Map">
SELECT p.patrol_point_id, p.alg_subtype_ids
FROM basedata_patrolpoint p
LEFT JOIN patrol_task_info i ON p.patrol_point_id = i.device_id
LEFT JOIN basedata_eqpbook e ON i.ebook_id = e.eqp_book_id
where i.task_major_id = #{taskCode}
</select>
<insert id="insertPatrolTaskStatus" parameterType="PatrolTaskStatus" useGeneratedKeys="true" keyProperty="lineId">
insert into patrol_task_status
<trim prefix="(" suffix=")" suffixOverrides=",">
@ -461,6 +524,7 @@
<if test="code != null">code = #{code},</if>
<if test="pos != null">pos = #{pos},</if>
<if test="patrolType != null">patrol_type = #{patrolType},</if>
<if test="summary != null and summary != ''">summary = #{summary},</if>
<if test="endTime != null">end_time = #{endTime},</if>
</trim>
where line_id = #{lineId}


+ 49
- 0
inspect-metadata/src/main/java/com/inspect/metadata/area/controller/BaseDataAreaController.java View File

@ -370,6 +370,26 @@ public class BaseDataAreaController extends BaseController {
return AjaxResult.success("成功", nameSBuilder.toString());
}
@GetMapping({"/selectAreaNameSForTaskByAreaIdSRelation"})
public AjaxResult selectAreaNameSForTaskByAreaIdSRelation(BaseDataArea area) {
Map<String, BaseDataArea> areaMap = new HashMap<>();
List<String> list = this.paramsGetListByAreaIdS(area);
BaseDataArea areaQuery = new BaseDataArea();
List<BaseDataArea> areas = this.baseDataAreaService.selectAreaRelationList(areaQuery);
for (BaseDataArea baseDataArea : areas) {
areaMap.put(String.valueOf(baseDataArea.getAreaId()), baseDataArea);
}
Map<String, String> retHashMap = new HashMap<>();
StringBuilder nameSBuilder = new StringBuilder();
for (String areaId : list) {
this.getAreaDeviceTreeDeviceCodeRelation(areaId, areaMap, retHashMap, nameSBuilder);
}
return AjaxResult.success("成功", nameSBuilder.toString());
}
private void getAreaDeviceTreeDeviceCode(String areaId, Map<String, BaseDataArea> areaMap, Map<String, String> retHashMap, StringBuilder nameSBuilder) {
if (areaMap.containsKey(areaId)) {
BaseDataArea area = areaMap.get(areaId);
@ -398,4 +418,33 @@ public class BaseDataAreaController extends BaseController {
}
}
private void getAreaDeviceTreeDeviceCodeRelation(String areaId, Map<String, BaseDataArea> areaMap, Map<String, String> retHashMap, StringBuilder nameSBuilder) {
if (areaMap.containsKey(areaId)) {
BaseDataArea area = areaMap.get(areaId);
if (area.getRelationParentId() == 0L) {
return;
}
if (area.getRelationParentId() == 1L) {
if (!retHashMap.containsKey(area.getAreaId().toString())) {
if (!retHashMap.isEmpty()) {
nameSBuilder.append(",");
nameSBuilder.append(area.getAreaName());
} else {
nameSBuilder.append(area.getAreaName());
}
retHashMap.put(area.getAreaId().toString(), area.getAreaName());
return;
}
return;
}
areaId = area.getRelationParentId().toString();
this.getAreaDeviceTreeDeviceCodeRelation(areaId, areaMap, retHashMap, nameSBuilder);
}
}
}

+ 55
- 0
inspect-metadata/src/main/java/com/inspect/metadata/area/domain/BaseDataArea.java View File

@ -53,6 +53,29 @@ public class BaseDataArea extends BaseEntity {
private List<BaseDataArea> children = new ArrayList<>();
private List<String> filterNameList;
// 设备类型 编码 10: 摄像头高清视频 13无人机 0机器人
private List<String> devTypeList;
// 设备类型 字典编码
private List<Long> devTypeCodeList;
// 算法类型 编码 1: 表计 2外观 3红外
private List<String> algTypeList;
// 算法类型 字典编码
private List<Long> algTypeCodeList;
// 是否过滤未配置预置位的点位
private Boolean filterByPreset;
public Boolean getFilterByPreset() {
return filterByPreset;
}
public void setFilterByPreset(Boolean filterByPreset) {
this.filterByPreset = filterByPreset;
}
public String getOldAreaId() {
return this.oldAreaId;
}
@ -156,6 +179,38 @@ public class BaseDataArea extends BaseEntity {
this.filterNameList = filterNameList;
}
public List<String> getDevTypeList() {
return devTypeList;
}
public void setDevTypeList(List<String> devTypeList) {
this.devTypeList = devTypeList;
}
public List<String> getAlgTypeList() {
return algTypeList;
}
public void setAlgTypeList(List<String> algTypeList) {
this.algTypeList = algTypeList;
}
public List<Long> getDevTypeCodeList() {
return devTypeCodeList;
}
public void setDevTypeCodeList(List<Long> devTypeCodeList) {
this.devTypeCodeList = devTypeCodeList;
}
public List<Long> getAlgTypeCodeList() {
return algTypeCodeList;
}
public void setAlgTypeCodeList(List<Long> algTypeCodeList) {
this.algTypeCodeList = algTypeCodeList;
}
@Override
public String toString() {
return "BaseDataArea{" +


+ 97
- 29
inspect-metadata/src/main/java/com/inspect/metadata/eqpbook/controller/BasedataEqpBookController.java View File

@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
import com.inspect.base.core.utils.ServletUtils;
import com.inspect.metadata.alg.domain.BasedataAlgSubtype;
import com.inspect.metadata.alg.service.IBasedataAlgSubtypeService;
import com.inspect.metadata.area.controller.BaseDataAreaController;
import com.inspect.metadata.area.domain.BaseDataArea;
import com.inspect.metadata.eqpbook.domain.BasedataEqpBook;
import com.inspect.metadata.eqpbook.domain.BasedataEqpBookChannel;
@ -23,6 +24,7 @@ import com.inspect.metadata.eqpbook.task.FeignTaskClient;
import com.inspect.metadata.montdata.domain.BasedataMontPatDevStaData;
import com.inspect.metadata.mqutil.FeignMsgClient;
import com.inspect.metadata.patrolpointmnt.domain.BasedataPatrolPoint;
import com.inspect.metadata.patrolpointmnt.mapper.BasedataPatrolPointMapper;
import com.inspect.metadata.patrolpointmnt.service.IBasedataPatrolPointService;
import com.inspect.metadata.station.service.IBasedataStationService;
import com.inspect.metadata.threshold.domain.BasedataThresholdModification;
@ -52,11 +54,7 @@ import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
@ -93,6 +91,11 @@ public class BasedataEqpBookController extends BaseController {
private IBasedataThresholdModificationService basedataThresholdModificationService;
@Autowired
private FeignTaskClient feignTaskClient;
@Autowired
private BaseDataAreaController baseDataAreaController;
@Resource
private BasedataPatrolPointMapper basedataPatrolpointMapper;
@GetMapping({"/list"})
public TableDataInfo list(BasedataEqpBook basedataEqpbook) {
@ -857,10 +860,44 @@ public class BasedataEqpBookController extends BaseController {
@GetMapping({"/subtypeData"})
public TableDataInfo subtypeData(BasedataPatrolPoint basedataPatrolpoint) {
// List<String> errors = new ArrayList<>();
// this.startPage();
// List<BasedataPatrolPoint> subtypeList = this.basedataEqpBookService.getSubtypeData(basedataPatrolpoint);
List<BasedataPatrolPoint> stdList = new ArrayList<>();
// 前端传的算法编码
List<Long> algTypeCodeList = basedataPatrolpoint.getAlgTypeCodeList();
// 获取算法分类字典dictCode=字典编码dictValue=逗号分隔的子类型ID
List<SysDictData> algCategoryDict = getSysDictDataList("threshold_alg_type");
// 构建字典编码所有可配阈值的算法 -> 子类型ID集合的映射 (例如"886" -> {"1", "2"})
Map<Long, Set<String>> labelToSubtypeIds = algCategoryDict.stream()
.collect(Collectors.toMap(
SysDictData::getDictCode,
item -> Arrays.stream(item.getDictValue().split(","))
.filter(StringUtils::isNotBlank)
.collect(Collectors.toSet())
));
logger.info("[META] labelToSubtypeIds : {}", labelToSubtypeIds);
if (algTypeCodeList == null || algTypeCodeList.size() == 0) {
algTypeCodeList = new ArrayList<>(labelToSubtypeIds.keySet());
}
// 合并所有允许的子类型ID
Set<String> allowedSubtypeIds = algTypeCodeList.stream()
.filter(Objects::nonNull)
.flatMap(dictCode -> labelToSubtypeIds.getOrDefault(dictCode, Collections.emptySet()).stream())
.collect(Collectors.toSet());
// subtypeList = subtypeList.stream().filter(point -> {
// String algSubtypeIds = point.getAlgSubtypeIds();
// if (StringUtils.isBlank(algSubtypeIds)) {
// return false;
// }
// return Arrays.stream(algSubtypeIds.split(",")).anyMatch(allowedSubtypeIds::contains);
// }).collect(Collectors.toList());
this.startPage();
basedataPatrolpoint.setAlgSubtypeIds(StringUtils.join(allowedSubtypeIds, ","));
List<BasedataPatrolPoint> subtypeList = this.basedataEqpBookService.getSubtypeData(basedataPatrolpoint);
List<BasedataPatrolPoint> stdList = new ArrayList<>();
// 查询区域信息
for (BasedataPatrolPoint bp : subtypeList) {
List<BasedataThresholdModification> subTypeDOList = new ArrayList<>();
List<JSONObject> jsonArray = JSONArray.parseArray(bp.getAlarmThreshold(), JSONObject.class);
@ -870,22 +907,35 @@ public class BasedataEqpBookController extends BaseController {
} else {
subs = new String[]{bp.getAlgSubtypeIds()};
}
Long relationAreaId = bp.getRelationAreaId();
if (relationAreaId != null) {
BaseDataArea areaQuery = new BaseDataArea();
areaQuery.setAreaIdS(String.valueOf(relationAreaId));
AjaxResult ajaxResult = baseDataAreaController.selectAreaNameSForTaskByAreaIdSRelation(areaQuery);
if (ajaxResult.get("code").equals(200)) {
bp.setAreaName(ajaxResult.get("data").toString());
}
}
if(jsonArray == null || subs.length != jsonArray.size()) {
logger.info("问题巡检点位id,{}", bp.getPatrolPointId());
// errors.add(bp.getPatrolPointId()+"");
continue;
}
List<String> algSubtypeNames = new ArrayList<>();
for (int k = 0; k < subs.length; ++k) {
if ("52".equals(subs[k]) || "53".equals(subs[k])) {
BasedataAlgSubtype basedataAlgSubtype = this.basedataAlgSubtypeService.selectBasedataAlgSubtypeByAlgSubtypeId(Long.valueOf(subs[k]));
if (null != basedataAlgSubtype && (basedataPatrolpoint.getAlgSubtypeName() == null || "".equals(basedataPatrolpoint.getAlgSubtypeName()) || basedataAlgSubtype.getAlgSubtypeName().contains(basedataPatrolpoint.getAlgSubtypeName()))) {
BasedataThresholdModification std = new BasedataThresholdModification();
std.setPatrolPointId(bp.getPatrolPointId());
std.setAlgSubtypeId(subs[k]);
std.setAlgSubtypeName(basedataAlgSubtype.getAlgSubtypeName());
std.setUpperValue(jsonArray.get(k).getString("upperValue"));
std.setLowerValue(jsonArray.get(k).getString("lowerValue"));
subTypeDOList.add(std);
}
BasedataAlgSubtype basedataAlgSubtype = this.basedataAlgSubtypeService.selectBasedataAlgSubtypeByAlgSubtypeId(Long.valueOf(subs[k]));
if (null != basedataAlgSubtype) {
BasedataThresholdModification std = new BasedataThresholdModification();
std.setPatrolPointId(bp.getPatrolPointId());
std.setAlgSubtypeId(subs[k]);
std.setAlgSubtypeName(basedataAlgSubtype.getAlgSubtypeName());
std.setUpperValue(jsonArray.get(k).getString("upperValue"));
std.setLowerValue(jsonArray.get(k).getString("lowerValue"));
subTypeDOList.add(std);
algSubtypeNames.add(basedataAlgSubtype.getAlgSubtypeName());
}
}
bp.setAlgSubtypeName(StringUtils.join(algSubtypeNames, ","));
if (!subTypeDOList.isEmpty()) {
bp.setSubTypeDOList(subTypeDOList);
stdList.add(bp);
@ -904,23 +954,41 @@ public class BasedataEqpBookController extends BaseController {
return rspData;
}
private List<SysDictData> getSysDictDataList(String dictType) {
return basedataPatrolpointMapper.selectDictDataByType(dictType);
}
@PostMapping({"/subtypeUpdate"})
public AjaxResult subtypeUpdate(@RequestBody BasedataPatrolPoint bp) {
List<JSONObject> jsonArray = JSONArray.parseArray(bp.getAlarmThreshold(), JSONObject.class);
public AjaxResult subtypeUpdate(@RequestBody List<JSONObject> jsonObjects) {
for (JSONObject jsonObject : jsonObjects) {
BasedataPatrolPoint bp = jsonObject.toJavaObject(BasedataPatrolPoint.class);
List<JSONObject> jsonArray = JSONArray.parseArray(bp.getAlarmThreshold(), JSONObject.class);
for (int i = 0; i < bp.getSubTypeDOList().size(); ++i) {
jsonArray.get(i).put("upperValue", bp.getSubTypeDOList().get(i).getUpperValue());
jsonArray.get(i).put("lowerValue", bp.getSubTypeDOList().get(i).getLowerValue());
this.basedataThresholdModificationService.insertBasedataThresholdModification(bp.getSubTypeDOList().get(i));
}
for (int i = 0; i < bp.getSubTypeDOList().size(); ++i) {
jsonArray.get(i).put("upperValue", bp.getSubTypeDOList().get(i).getUpperValue());
jsonArray.get(i).put("lowerValue", bp.getSubTypeDOList().get(i).getLowerValue());
this.basedataThresholdModificationService.insertBasedataThresholdModification(bp.getSubTypeDOList().get(i));
}
bp.setAlarmThreshold(jsonArray.toString().replaceFirst(",$", StringUtils.EMPTY));
return this.toAjax(this.basedataPatrolPointService.updateBasedataPatrolPoint(bp));
bp.setAlarmThreshold(jsonArray.toString().replaceFirst(",$", StringUtils.EMPTY));
int i = this.basedataPatrolPointService.updateBasedataPatrolPoint(bp);
}
return this.toAjax(true);
}
@GetMapping({"/subtypeUpdateRecord"})
public TableDataInfo subtypeUpdateRecord(BasedataThresholdModification btd) {
this.startPage();
logger.info("查询巡检点位报警阈值修改记录,{}",btd.getAlgSubtypeId());
if (btd.getAlgSubtypeId() != null) {
String[] subs;
if (btd.getAlgSubtypeId().contains(StringUtils.COMMA)) {
subs = btd.getAlgSubtypeId().split(StringUtils.COMMA);
} else {
subs = new String[]{btd.getAlgSubtypeId()};
}
btd.setAlgSubtypeIds(Arrays.asList(subs));
}
List<BasedataThresholdModification> list = this.basedataThresholdModificationService.selectBasedataThresholdModificationList(btd);
return this.getDataTable(list);
}


+ 9
- 1
inspect-metadata/src/main/java/com/inspect/metadata/patrolpointmnt/controller/BasedataPatrolPointController.java View File

@ -1,5 +1,6 @@
package com.inspect.metadata.patrolpointmnt.controller;
import cn.hutool.core.util.RandomUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.inspect.base.core.constant.Color;
@ -118,6 +119,7 @@ public class BasedataPatrolPointController extends BaseController {
basedataPatrolPoint2.setPointImptLevel(basedataPatrolPoint.getPointImptLevel());
basedataPatrolPoint2.setAlgSubtypeName(basedataPatrolPoint.getAlgSubtypeName());
basedataPatrolPoint2.setPurpose(basedataPatrolPoint.getPurpose());
basedataPatrolPoint2.setAlarmThreshold(basedataPatrolPoint.getAlarmThreshold());
listEx.add(basedataPatrolPoint2);
}
return getDataTable(listEx);
@ -162,6 +164,7 @@ public class BasedataPatrolPointController extends BaseController {
basedataPatrolPoint2.setPointImptLevel(basedataPatrolPoint.getPointImptLevel());
basedataPatrolPoint2.setAlgSubtypeName(basedataPatrolPoint.getAlgSubtypeName());
basedataPatrolPoint2.setPurpose(basedataPatrolPoint.getPurpose());
basedataPatrolPoint2.setAlarmThreshold(basedataPatrolPoint.getAlarmThreshold());
listEx.add(basedataPatrolPoint2);
}
return getDataTable(listEx);
@ -216,7 +219,12 @@ public class BasedataPatrolPointController extends BaseController {
basedataPatrolpoint.setRelationMainDeviceId(basedataPatrolpoint.getMainDeviceId());
basedataPatrolPointService.insertBasedataPatrolPoint(basedataPatrolpoint);
return null != basedataPatrolpoint.getPatrolPointId() ? AjaxResult.success(basedataPatrolpoint.getPatrolPointId()) : AjaxResult.error("新增异常");
if (basedataPatrolpoint.getPatrolPointId() == null) {
return AjaxResult.error("新增异常");
}
basedataPatrolpoint.setPatrolPointCode(String.valueOf(basedataPatrolpoint.getPatrolPointId()));
basedataPatrolPointService.updateBasedataPatrolPoint(basedataPatrolpoint);
return AjaxResult.success(basedataPatrolpoint.getPatrolPointId());
}
private void combinePatrolPointByStd(BasedataPatrolPoint basedataPatrolpoint) {


+ 5
- 0
inspect-metadata/src/main/java/com/inspect/metadata/patrolpointmnt/domain/BasedataPatrolPoint.java View File

@ -70,6 +70,7 @@ public class BasedataPatrolPoint extends BaseEntity {
@JsonProperty("stdparolPointId")
private Long stdParolPointId;
private Long areaId;
private String areaName;
private Long relationAreaId;
private String patrolTypeId;
private String pointImptLevel;
@ -122,6 +123,10 @@ public class BasedataPatrolPoint extends BaseEntity {
private String parentName;
List<Long> algTypeCodeList;
private String allowedSubtypeIds;
public void setPatrolpointName(String patrolpointName) {
this.patrolpointName = patrolpointName;
this.patrolPointName = patrolpointName;


+ 2
- 0
inspect-metadata/src/main/java/com/inspect/metadata/patrolpointmnt/mapper/BasedataPatrolPointMapper.java View File

@ -45,6 +45,8 @@ public interface BasedataPatrolPointMapper {
List<BasedataPatrolPoint> selectBasedataPatrolPointListByDeviceIds(@Param("deviceIds") List<Long> deviceIds);
List<BasedataPatrolPoint> selectBasedataPatrolPointRelationListByDeviceIds(@Param("deviceIds") List<Long> deviceIds);
List<BasedataPatrolPoint> selectBasedataPatrolPointWithPresetRelationListByDeviceIds(@Param("deviceIds") List<Long> deviceIds);
void updateBasedataPatrolPointRelation(@Param("toAreaId") Long toAreaId, @Param("deviceId") Long deviceId);


+ 1
- 1
inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/controller/BasedataDeviceController.java View File

@ -239,7 +239,7 @@ public class BasedataDeviceController extends BaseController {
filterNameList.add("新增相机");
}
return !areaList.isEmpty()
? AjaxResult.success(basedataDeviceService.buildAreaDeviceTreeSelectByAreasFilterByPresetRelationRight(areaList, filterNameList))
? AjaxResult.success(basedataDeviceService.buildAreaDeviceTreeSelectByAreasFilterByPresetRelationRight(areaList, filterNameList, baseDataArea))
: AjaxResult.success(new JSONArray());
}


+ 10
- 0
inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/domain/vo/AreaDeviceTreeSelect.java View File

@ -46,6 +46,8 @@ public class AreaDeviceTreeSelect implements Serializable {
this.patrolPointNames = patrolPointNames;
}
@JsonInclude(JsonInclude.Include.NON_NULL)
private String patrolPointCode;
@JsonInclude(JsonInclude.Include.NON_NULL)
private String patrolPointId;
@JsonInclude(JsonInclude.Include.NON_NULL)
@ -253,6 +255,14 @@ public class AreaDeviceTreeSelect implements Serializable {
this.basedataPatrolPoints = basedataPatrolPoints;
}
public String getPatrolPointCode() {
return patrolPointCode;
}
public void setPatrolPointCode(String patrolPointCode) {
this.patrolPointCode = patrolPointCode;
}
// public List<AreaDeviceTreeSelect> cleanEmptyPatrolPoints() {
// // 递归清理
// if (children != null) {


+ 1
- 1
inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/service/IBasedataDeviceService.java View File

@ -51,7 +51,7 @@ public interface IBasedataDeviceService {
List<AreaDeviceTreeSelect> buildAreaDeviceTreeSelectByAreasFilterByPreset(List<BaseDataArea> areas, List<String> filterNameList);
List<AreaDeviceTreeSelect> buildAreaDeviceTreeSelectByAreasFilterByPresetRelationLeft(List<BaseDataArea> areas, List<String> filterNameList);
List<AreaDeviceTreeSelect> buildAreaDeviceTreeSelectByAreasFilterByPresetRelationRight(List<BaseDataArea> areas, List<String> filterNameList);
List<AreaDeviceTreeSelect> buildAreaDeviceTreeSelectByAreasFilterByPresetRelationRight(List<BaseDataArea> areas, List<String> filterNameList, BaseDataArea baseDataArea);
List<AreaDeviceTreeSelect> buildAreaDeviceTreeSelectByAreasFilterByPresetRelation(List<BaseDataArea> areas, List<String> filterNameList);


+ 144
- 6
inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/service/impl/BasedataDeviceServiceImpl.java View File

@ -1,5 +1,9 @@
package com.inspect.metadata.prodevmnt.service.impl;
import com.inspect.base.core.enums.AlgTypeEnum;
import com.inspect.base.core.enums.DevTypeEnum;
import com.inspect.metadata.alg.domain.BasedataAlgSubtype;
import com.inspect.metadata.alg.mapper.BasedataAlgSubtypeMapper;
import com.inspect.metadata.area.domain.BaseDataArea;
import com.inspect.metadata.eqpbook.domain.BasedataEqpBook;
import com.inspect.metadata.eqpbook.mapper.BasedataEqpBookMapper;
@ -30,10 +34,13 @@ import com.inspect.base.core.utils.bean.BeanUtils;
import java.util.*;
import java.util.stream.Collectors;
import com.inspect.system.base.domain.SysDictData;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class BasedataDeviceServiceImpl implements IBasedataDeviceService {
@ -51,6 +58,12 @@ public class BasedataDeviceServiceImpl implements IBasedataDeviceService {
final
BasedataDeviceTypeMapper basedataDevicetypeMapper;
@Resource
private BasedataPatrolPointMapper basedataPatrolpointMapper;
@Resource
private BasedataAlgSubtypeMapper basedataAlgSubtypeMapper;
public BasedataDeviceServiceImpl(BasedataDeviceMapper basedataDeviceMapper, BasedataPatrolPointMapper basedataPatrolPointMapper, BasedataPatrolPointPresetMapper basedataPatrolPointPresetMapper, BasedataEqpBookMapper basedataEqpbookMapper, BasedataModelDeviceMapper basedataModelDeviceMapper, BasedataDeviceTypeMapper basedataDevicetypeMapper) {
this.basedataDeviceMapper = basedataDeviceMapper;
this.basedataPatrolPointMapper = basedataPatrolPointMapper;
@ -373,6 +386,8 @@ public class BasedataDeviceServiceImpl implements IBasedataDeviceService {
patrolVO.setPatrolPointName(basedataPatrolPoint.getPatrolPointName());
patrolVO.setDeviceName(basedataPatrolPoint.getPatrolPointName());
patrolVO.setPatrolPointId(String.valueOf(basedataPatrolPoint.getPatrolPointId()));
patrolVO.setDataId(String.valueOf(basedataPatrolPoint.getPatrolPointId()));
patrolVO.setPatrolPointCode(basedataPatrolPoint.getPatrolPointCode());
patrolPoints.add(patrolVO);
}
// 设置点位列表到节点上
@ -498,7 +513,7 @@ public class BasedataDeviceServiceImpl implements IBasedataDeviceService {
/**
* 与fillPointNumAndPatrolPoints区别在于查询的表不一样 此处用的是basedata_patrolpoint_relation表用于迁移数据使用
*/
private void fillPointNumAndPatrolPointsRelation(List<AreaDeviceTreeSelect> allNodes, List<AreaDeviceTreeSelect> treeList) {
private void fillPointNumAndPatrolPointsRelation(List<AreaDeviceTreeSelect> allNodes, List<AreaDeviceTreeSelect> treeList, BaseDataArea baseDataArea) {
// 收集所有设备ID
Set<Long> deviceIds = new HashSet<>();
for (AreaDeviceTreeSelect node : allNodes) {
@ -509,9 +524,42 @@ public class BasedataDeviceServiceImpl implements IBasedataDeviceService {
if (deviceIds.isEmpty()) {
return;
}
List<BasedataPatrolPoint> patrolPoints = null;
// 批量查询点位
List<BasedataPatrolPoint> patrolPoints = basedataPatrolPointMapper.selectBasedataPatrolPointRelationListByDeviceIds(new ArrayList<>(deviceIds));
if (baseDataArea != null && baseDataArea.getFilterByPreset() != null && baseDataArea.getFilterByPreset()) {
// 剔除掉未配置预置位的点位
patrolPoints = basedataPatrolPointMapper.selectBasedataPatrolPointWithPresetRelationListByDeviceIds(new ArrayList<>(deviceIds));
} else {
// 全部点位
patrolPoints = basedataPatrolPointMapper.selectBasedataPatrolPointRelationListByDeviceIds(new ArrayList<>(deviceIds));
}
List<BasedataAlgSubtype> basedataAlgSubtypes = basedataAlgSubtypeMapper.selectBasedataAlgSubtypeList(new BasedataAlgSubtype());
logger.info("[META] basedataAlgSubtypes cnt: {}", basedataAlgSubtypes.size());
Map<String, String> algSubtypeMap = new HashMap<>();
basedataAlgSubtypes.forEach((item) -> {
algSubtypeMap.put(item.getAlgSubtypeId() + "", item.getAlgSubtypeName());
});
List<SysDictData> dictList = getSysDictDataList("point_device_type");
Optional<SysDictData> defaultDictData = dictList.stream()
.filter(SysDictData::getDefault)
.findFirst();
for (BasedataPatrolPoint basedataPatrolPoint : patrolPoints) {
basedataPatrolPoint.loadAlgSubtypeName(algSubtypeMap);
processPointType(basedataPatrolPoint, dictList, defaultDictData);
}
if (baseDataArea != null && baseDataArea.getDevTypeCodeList() != null && baseDataArea.getDevTypeCodeList().size() > 0) {
// 设备
dictList = dictList.stream().filter(item -> baseDataArea.getDevTypeCodeList().contains(item.getDictCode())).collect(Collectors.toList());
patrolPoints = filterByDeviceTypes(patrolPoints, dictList);
}
if (baseDataArea != null && baseDataArea.getAlgTypeCodeList() != null && baseDataArea.getAlgTypeCodeList().size() > 0) {
// 算法类型
patrolPoints = filterByAlgTypes(patrolPoints, baseDataArea.getAlgTypeCodeList());
}
// 按设备ID分组
Map<Long, List<BasedataPatrolPoint>> devicePatrolMap = patrolPoints.stream()
.collect(Collectors.groupingBy(BasedataPatrolPoint::getRelationDeviceId));
@ -520,6 +568,94 @@ public class BasedataDeviceServiceImpl implements IBasedataDeviceService {
setPointNumAndPatrolPoints(treeList, devicePatrolMap);
}
private List<BasedataPatrolPoint> filterByAlgTypes(List<BasedataPatrolPoint> patrolPoints, List<Long> algTypeCodeList) {
// 获取算法分类字典dictCode=字典编码dictValue=逗号分隔的子类型ID
List<SysDictData> algCategoryDict = getSysDictDataList("point_alg_category");
// 构建字典编码 -> 子类型ID集合的映射 (例如"886" -> {"1", "2"})
Map<Long, Set<String>> labelToSubtypeIds = algCategoryDict.stream()
.collect(Collectors.toMap(
SysDictData::getDictCode,
item -> Arrays.stream(item.getDictValue().split(","))
.filter(StringUtils::isNotBlank)
.collect(Collectors.toSet())
));
logger.info("[META] labelToSubtypeIds : {}", labelToSubtypeIds);
// 合并所有允许的子类型ID
Set<String> allowedSubtypeIds = algTypeCodeList.stream()
.filter(Objects::nonNull)
.flatMap(dictCode -> labelToSubtypeIds.getOrDefault(dictCode, Collections.emptySet()).stream())
.collect(Collectors.toSet());
if (allowedSubtypeIds.isEmpty()) {
return Collections.emptyList();
}
// 筛选出那些 algSubtypeIds 字段逗号分隔的 ID 字符串中至少有一个 ID 存在于 allowedSubtypeIds 集合中的对象
return patrolPoints.stream()
.filter(point -> {
String subtypeIds = point.getAlgSubtypeIds();
if (StringUtils.isBlank(subtypeIds)) {
return false;
}
return Arrays.stream(subtypeIds.split(","))
.anyMatch(allowedSubtypeIds::contains);
})
.collect(Collectors.toList());
}
private List<BasedataPatrolPoint> filterByDeviceTypes(List<BasedataPatrolPoint> patrolPoints, List<SysDictData> dictList) {
Set<String> allowedPointTypeNames = dictList.stream().map(SysDictData::getDictLabel).collect(Collectors.toSet());
if (allowedPointTypeNames.isEmpty()) {
return Collections.emptyList();
}
return patrolPoints.stream()
.filter(point -> allowedPointTypeNames.contains(point.getPointTypeName()))
.collect(Collectors.toList());
}
private List<SysDictData> getSysDictDataList(String dictType) {
return basedataPatrolpointMapper.selectDictDataByType(dictType);
}
/**
* 处理点位的设备类型
*
* @param dictList
* @param basedataPatrolPoint
*/
private void processPointType(BasedataPatrolPoint basedataPatrolPoint, List<SysDictData> dictList, Optional<SysDictData> defaultDictData) {
String patrolPointCode = basedataPatrolPoint.getPatrolPointCode();
if (StringUtils.isNotEmpty(patrolPointCode)) {
if (patrolPointCode.contains("|")) {
String finalPatrolPointCode = patrolPointCode.substring(0, patrolPointCode.indexOf("|"));
Optional<String> pointTypeName = dictList.stream()
.filter(dict -> {
String valueStr = dict.getDictValue(); // 调用 getter
if (valueStr == null) {
return false;
}
return Arrays.stream(valueStr.split(","))
.map(String::trim)
.anyMatch(code -> code.equals(finalPatrolPointCode));
})
.map(SysDictData::getDictLabel)
.findFirst();
basedataPatrolPoint.setPointTypeName(pointTypeName.orElse("未知设备类型"));
basedataPatrolPoint.setPointTypeCode(finalPatrolPointCode);
} else {
defaultDictData.ifPresent(dict -> {
basedataPatrolPoint.setPointTypeName(dict.getDictLabel());
String[] codes = dict.getDictValue().split(",");
logger.info("[META] pointTypeCode: {}", codes);
if (codes.length > 0) {
basedataPatrolPoint.setPointTypeCode(codes[0]);
}
});
}
}
}
public List<AreaDeviceTreeSelect> buildAreaDeviceTreeSelectByAreasFilterByPresetRelation(List<BaseDataArea> areas, List<String> filterNamelist) {
ArrayList<Long> areaIdList = new ArrayList<>();
HashMap<Long, BaseDataArea> areaMap = new HashMap<>();
@ -587,7 +723,7 @@ public class BasedataDeviceServiceImpl implements IBasedataDeviceService {
return treeList;
}
public List<AreaDeviceTreeSelect> buildAreaDeviceTreeSelectByAreasFilterByPresetRelationRight(List<BaseDataArea> areas, List<String> filterNamelist) {
public List<AreaDeviceTreeSelect> buildAreaDeviceTreeSelectByAreasFilterByPresetRelationRight(List<BaseDataArea> areas, List<String> filterNamelist, BaseDataArea baseDataArea) {
ArrayList<Long> areaIdList = new ArrayList<>();
HashMap<Long, BaseDataArea> areaMap = new HashMap<>();
HashMap<Long, BasedataDevice> deviceHashMap = new HashMap<>();
@ -647,8 +783,10 @@ public class BasedataDeviceServiceImpl implements IBasedataDeviceService {
List<AreaDeviceTreeSelect> treeList = AreaDeviceTreeSelectUtil.buildDeviceTreeFilterByAreaName(areaVOS, filterNamelist);
// 新增填充点位统计
fillPointNumAndPatrolPointsRelation(areaVOS, treeList);
fillPointNumAndPatrolPointsRelation(areaVOS, treeList, baseDataArea);
for (AreaDeviceTreeSelect area : treeList) {
area.cleanEmptyPatrolPoints();
}
return treeList;
}
public List<AreaDeviceTreeSelect> buildAreaDeviceTreeSelectByAreasFilterByMeter(List<BaseDataArea> areas) {


+ 4
- 0
inspect-metadata/src/main/java/com/inspect/metadata/threshold/domain/BasedataThresholdModification.java View File

@ -5,6 +5,8 @@ import com.inspect.base.core.web.domain.BaseEntity;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Setter
@Getter
public class BasedataThresholdModification extends BaseEntity {
@ -26,6 +28,8 @@ public class BasedataThresholdModification extends BaseEntity {
name = "算法子类型id"
)
private String algSubtypeId;
private List<String> algSubtypeIds;
@Excel(
name = "算法子类型名称"
)


+ 9
- 3
inspect-metadata/src/main/resources/mapper/eqpbook/BasedataEqpBookMapper.xml View File

@ -731,7 +731,8 @@
</select>
<resultMap type="BasedataPatrolPoint" id="BasedataPatrolPointResult">
<result property="patrolPointId" column="patrol_point_id"/>
<result property="patrolPointName" column="patrolpoint_name"/>
<result property="relationAreaId" column="relation_area_id"/>
<result property="patrolPointName" column="patrol_point_name"/>
<result property="parentName" column="parent_name"/>
<result property="alarmThreshold" column="alarm_threshold"/>
<result property="algSubtypeIds" column="alg_subtype_ids"/>
@ -744,6 +745,7 @@
<select id="getSubtypeData" resultMap="BasedataPatrolPointResult">
SELECT
a.patrol_point_id,
a.relation_area_id,
(SELECT c.device_name FROM basedata_device c WHERE c.device_id = b.parent_id) parent_name,
b.device_name,
a.patrol_point_name,
@ -757,10 +759,14 @@
a.device_id = b.device_id
AND a.alarm_threshold != ''
AND a.alarm_threshold != '[]'
AND ( a.alarm_threshold LIKE '%52%' OR a.alarm_threshold LIKE '%53%' )
<if test="deviceName != null and deviceName != ''">and b.device_name = #{deviceName}</if>
<if test="patrolPointName != null and patrolPointName != ''">and a.patrol_point_name = #{patrolPointName}</if>
<if test="patrolPointName != null and patrolPointName != ''">and a.patrol_point_name like concat('%',
#{patrolPointName}, '%')</if>
<if test="algSubtypeIds != null and algSubtypeIds != ''">
AND a.alg_subtype_ids REGEXP CONCAT('(^|,)(', REPLACE(#{algSubtypeIds}, ',', '|'), ')(,|$)')
</if>
ORDER BY
update_time DESC,
a.device_id
</select>


+ 45
- 0
inspect-metadata/src/main/resources/mapper/patrolpointmnt/BasedataPatrolPointMapper.xml View File

@ -198,6 +198,51 @@
</foreach>
</select>
<select id="selectBasedataPatrolPointWithPresetRelationListByDeviceIds" parameterType="java.util.List"
resultMap="BasedataPatrolPointResult">
select
distinct bp.patrol_point_id,
bp.patrol_point_code,
bp.patrol_point_name,
bp.device_type_id,
bp.main_device_id,
bp.relation_main_device_id,
bp.device_id,
bp.relation_device_id,
bp.area_id,
bp.relation_area_id,
bp.patrol_content,
bp.purpose,
bp.create_by,
bp.create_time,
bp.update_by,
bp.update_time,
bp.delete_flag,
bp.std_parol_point_id,
bp.point_impt_level,
bp.patrol_type_id,
bp.lower_value,
bp.upper_value,
bp.position_x,
bp.position_y,
bp.position_z,
bp.alg_subtype_ids,
bp.original_alg_subtype_ids,
bp.original_device_id,
bp.dis_ref_picture_path,
bp.original_main_device_id,
bp.alarm_threshold,
bp.meter_type
from basedata_patrolpoint bp
left join basedata_patrolpoint_preset bpp on bp.patrol_point_id = bpp.patrol_point_id
left join patrol_preset_pos ppp on bp.patrol_point_id = ppp.patrol_point_id
WHERE relation_device_id IN
<foreach item="item" collection="deviceIds" open="(" separator="," close=")">
#{item}
</foreach>
and (bpp.patrol_point_id is not null or ppp.patrol_point_id is not null)
</select>
<select id="selectBasedataMonitorList" parameterType="BasedataPatrolPoint" resultMap="BasedataPatrolPointResult">
-- select a.patrol_point_id, a.patrol_point_code,a.area_id, a.patrol_point_name, a.main_device_id, a.device_id,
-- left join basedata_stdpatrol_point b on a.std_parol_point_id = b.std_patrol_point_id


+ 7
- 9
inspect-metadata/src/main/resources/mapper/threshold/BasedataThresholdModificationMapper.xml View File

@ -42,22 +42,20 @@
<if test="patrolPointId != null ">and patrol_point_id = #{patrolPointId}</if>
<if test="algId != null ">and alg_id = #{algId}</if>
<if test="algName != null and algName != ''">and alg_name like concat('%', #{algName}, '%')</if>
<if test="params != null">
<if test="params.algSubtypeId != null and params.algSubtypeId != ''">
and alg_subtype_id in
<foreach item="item" collection="params.algSubtypeId" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="algSubtypeIds != null and algSubtypeIds != ''">
and alg_subtype_id in
<foreach item="item" collection="algSubtypeIds" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="algSubtypeName != null and algSubtypeName != ''">and alg_subtype_name like concat('%',
#{algSubtypeName}, '%')
</if>
<if test="lowerValue != null and lowerValue != ''">and lower_value = #{lowerValue}</if>
<if test="upperValue != null and upperValue != ''">and upper_value = #{upperValue}</if>
ORDER BY alg_subtype_name,create_time DESC
</where>
ORDER BY alg_subtype_name,create_time DESC
</select>
<select id="selectBasedataThresholdModificationByLineId" parameterType="Long"


Loading…
Cancel
Save