From 88fb9e316f537d3b5ef840cf74e52d318d3fc132 Mon Sep 17 00:00:00 2001 From: wangguangyuan Date: Tue, 14 Apr 2026 16:23:33 +0800 Subject: [PATCH] =?UTF-8?q?feat:1.=E6=96=B0=E7=89=88=E5=B7=A1=E8=A7=86?= =?UTF-8?q?=E6=96=B9=E6=A1=88=E4=BB=A3=E7=A0=81=EF=BC=8C2.=E7=BA=A0?= =?UTF-8?q?=E5=81=8F=E7=AE=97=E6=B3=95=E4=B8=8D=E5=BD=92=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/core/constant/AlgConstants.java | 1 + .../inspect/base/core/enums/AlgTypeEnum.java | 25 + .../inspect/base/core/enums/DevTypeEnum.java | 45 ++ .../controller/ResultAnalysisController.java | 24 +- .../analysis/domain/ResultAnalysis.java | 1 + .../fegin/FeignBasedataAreaService.java | 3 + .../service/impl/PatrolResultServiceImpl.java | 20 +- .../task/controller/PatrolTaskController.java | 595 ++++++++++++++++++ .../com/inspect/task/domain/PatrolData.java | 9 + .../com/inspect/task/domain/PatrolTask.java | 7 + .../inspect/task/mapper/PatrolTaskMapper.java | 6 + .../task/service/IPatrolTaskService.java | 9 + .../service/impl/PatrolTaskServiceImpl.java | 35 +- .../mapper/task/PatrolResultMapper.xml | 2 + .../mapper/task/PatrolTaskMapper.xml | 95 ++- .../controller/BaseDataAreaController.java | 49 ++ .../metadata/area/domain/BaseDataArea.java | 45 ++ .../controller/BasedataDeviceController.java | 2 +- .../domain/vo/AreaDeviceTreeSelect.java | 10 + .../service/IBasedataDeviceService.java | 2 +- .../impl/BasedataDeviceServiceImpl.java | 139 +++- 21 files changed, 1107 insertions(+), 17 deletions(-) create mode 100644 inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/enums/AlgTypeEnum.java create mode 100644 inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/enums/DevTypeEnum.java diff --git a/inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/constant/AlgConstants.java b/inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/constant/AlgConstants.java index 3270099..0d993d9 100644 --- a/inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/constant/AlgConstants.java +++ b/inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/constant/AlgConstants.java @@ -6,6 +6,7 @@ import java.util.List; 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"; diff --git a/inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/enums/AlgTypeEnum.java b/inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/enums/AlgTypeEnum.java new file mode 100644 index 0000000..a46bf21 --- /dev/null +++ b/inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/enums/AlgTypeEnum.java @@ -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; + } +} diff --git a/inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/enums/DevTypeEnum.java b/inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/enums/DevTypeEnum.java new file mode 100644 index 0000000..03377cc --- /dev/null +++ b/inspect-base/inspect-base-core/src/main/java/com/inspect/base/core/enums/DevTypeEnum.java @@ -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; + } +} diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/controller/ResultAnalysisController.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/controller/ResultAnalysisController.java index 4bb9275..b4bdf79 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/controller/ResultAnalysisController.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/controller/ResultAnalysisController.java @@ -5,7 +5,6 @@ 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.domain.Response; import com.inspect.base.core.enums.PointStatusEnum; import com.inspect.base.core.utils.StringUtils; @@ -17,6 +16,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 +49,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 +57,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 +711,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 +760,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) { diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/domain/ResultAnalysis.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/domain/ResultAnalysis.java index 7ba4bc1..9ea21c4 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/domain/ResultAnalysis.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/domain/ResultAnalysis.java @@ -449,6 +449,7 @@ public class ResultAnalysis extends BaseEntity { ", resultContent='" + resultContent + '\'' + ", resStatus='" + resStatus + '\'' + ", pointStatus='" + pointStatus + '\'' + + ", pointStatusList='" + pointStatusList + '\'' + ", beginTime='" + beginTime + '\'' + ", endTime='" + endTime + '\'' + ", createTime='" + super.getCreateTime() + '\'' + diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/fegin/FeignBasedataAreaService.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/fegin/FeignBasedataAreaService.java index 62f4061..f77b773 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/fegin/FeignBasedataAreaService.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/fegin/FeignBasedataAreaService.java @@ -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); diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/service/impl/PatrolResultServiceImpl.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/service/impl/PatrolResultServiceImpl.java index fb36a48..b4f495b 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/service/impl/PatrolResultServiceImpl.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/service/impl/PatrolResultServiceImpl.java @@ -58,7 +58,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; @@ -563,10 +567,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> entry : groupKeyListMap.entrySet()) { + GroupKey key = entry.getKey(); + List 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 +600,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 +610,10 @@ public class PatrolResultServiceImpl implements IPatrolResultService { List value = entry.getValue(); GroupKey key = entry.getKey(); String algType = key.algType; + // 纠偏算法不归档 + if (AlgConstants.CORRECTION.equals(algType)) { + continue; + } List filterResults = value.stream().filter(item -> "1".equals(item.getFilter())).collect(Collectors.toList()); List AIResults = value.stream().filter(item -> "0".equals(item.getFilter())).collect(Collectors.toList()); PatrolResultRef filterResult = filterResults.isEmpty() ? null : filterResults.get(0); diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/task/controller/PatrolTaskController.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/task/controller/PatrolTaskController.java index a3ec552..82b1a5d 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/task/controller/PatrolTaskController.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/task/controller/PatrolTaskController.java @@ -71,6 +71,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 @@ -537,6 +538,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 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 patrolTaskInfos = patrolTaskInfoService.selectPatrolTaskInfoList(patrolTaskInfo); + List 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 +643,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 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 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 taskInfos = new ArrayList<>(); + if (patrolPointIds.size() > 0) { + // 查询点位信息 + List patrolPointList = patrolTaskService.selectBasedataPatrolPointList(patrolPointIds); + Map patrolPointIdMap = patrolPointList.stream().collect(Collectors.toMap(item -> item.getLong("patrolPointId"), Function.identity())); + // 查询点位预置位信息 + List basedataPatrolPointPresetList = patrolTaskService.selectBasedataPatrolPointPresetList(patrolPointIds); + Map basedataPatrolPointPresetMap = basedataPatrolPointPresetList.stream().collect(Collectors.toMap(item -> item.getLong("patrolPointId"), Function.identity(), (e1, e2) -> e2)); + // 查询点位预置位位置信息 + List basedataPatrolPresetPosList = patrolTaskService.selectPatrolPresetPosList(patrolPointIds); + Map basedataPatrolPresetPosMap = basedataPatrolPresetPosList.stream().collect(Collectors.toMap(item -> item.getLong("patrolPointId"), Function.identity(), (e1, e2) -> e2)); + Set eqpBookIdPreset = basedataPatrolPointPresetList.stream().map(basedataPatrolPointPresetJson -> { + return basedataPatrolPointPresetJson.getString("eqpBookId"); + }).collect(Collectors.toSet()); + Set eqpBookIdPos = basedataPatrolPresetPosList.stream().map(basedataPatrolPresetPosJson -> { + return basedataPatrolPresetPosJson.getString("eqpBookId"); + }).collect(Collectors.toSet()); + List eqpBookIds = new ArrayList<>(); + eqpBookIds.addAll(eqpBookIdPreset); + eqpBookIds.addAll(eqpBookIdPos); + // 查询设备信息 + List> list = patrolTaskInfoService.selectVideoPosByPointIdByEqpbookIds(eqpBookIds); + Map> eqpBooksMap = + list.stream().collect(Collectors.toMap(e -> String.valueOf(e.get("eqp_book_id")), e -> e, (e1, e2) -> e2)); + List devTypeList = new LinkedList<>(); + Set devNoSet = new LinkedHashSet<>(); + Set 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 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(); + patrolTaskInfoService.deletePatrolTaskInfoByMajorId(majorId); + + // 点位信息 + List 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 taskInfos = new ArrayList<>(); + if (patrolPointIds.size() > 0) { + // 查询点位信息 + List patrolPointList = patrolTaskService.selectBasedataPatrolPointList(patrolPointIds); + Map patrolPointIdMap = patrolPointList.stream().collect(Collectors.toMap(item -> item.getLong("patrolPointId"), Function.identity())); + // 查询点位预置位信息 + List basedataPatrolPointPresetList = patrolTaskService.selectBasedataPatrolPointPresetList(patrolPointIds); + Map basedataPatrolPointPresetMap = basedataPatrolPointPresetList.stream().collect(Collectors.toMap(item -> item.getLong("patrolPointId"), Function.identity(), (e1, e2) -> e2)); + // 查询点位预置位位置信息 + List basedataPatrolPresetPosList = patrolTaskService.selectPatrolPresetPosList(patrolPointIds); + Map basedataPatrolPresetPosMap = basedataPatrolPresetPosList.stream().collect(Collectors.toMap(item -> item.getLong("patrolPointId"), Function.identity(), (e1, e2) -> e2)); + Set eqpBookIdPreset = basedataPatrolPointPresetList.stream().map(basedataPatrolPointPresetJson -> { + return basedataPatrolPointPresetJson.getString("eqpBookId"); + }).collect(Collectors.toSet()); + Set eqpBookIdPos = basedataPatrolPresetPosList.stream().map(basedataPatrolPresetPosJson -> { + return basedataPatrolPresetPosJson.getString("eqpBookId"); + }).collect(Collectors.toSet()); + List eqpBookIds = new ArrayList<>(); + eqpBookIds.addAll(eqpBookIdPreset); + eqpBookIds.addAll(eqpBookIdPos); + // 查询设备信息 + List> list = patrolTaskInfoService.selectVideoPosByPointIdByEqpbookIds(eqpBookIds); + Map> eqpBooksMap = + list.stream().collect(Collectors.toMap(e -> String.valueOf(e.get("eqp_book_id")), e -> e, (e1, e2) -> e2)); + List devTypeList = new LinkedList<>(); + Set devNoSet = new LinkedHashSet<>(); + Set 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 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 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) { @@ -2546,6 +3130,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 diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/task/domain/PatrolData.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/task/domain/PatrolData.java index 63c66b3..ed598a8 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/task/domain/PatrolData.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/task/domain/PatrolData.java @@ -74,6 +74,7 @@ public class PatrolData implements Comparable { 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 { 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; } diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/task/domain/PatrolTask.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/task/domain/PatrolTask.java index b4f4e13..5f34f60 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/task/domain/PatrolTask.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/task/domain/PatrolTask.java @@ -186,9 +186,14 @@ public class PatrolTask extends BaseEntity { private List videoPosList; private List patrolTaskStatusList; private List prevPoints; + private List patrolPointIds; // 任务总点位数量 private int totalPoints; + private String deviceType; + + private String pointType; + @Override public String toString() { return "PatrolTask{" + @@ -237,6 +242,8 @@ public class PatrolTask extends BaseEntity { ", patrolTaskStatusList=" + patrolTaskStatusList + ", prevPoints=" + prevPoints + ", totalPoints=" + totalPoints + + ", deviceType='" + deviceType + '\'' + + ", pointType='" + pointType + '\'' + '}'; } } diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/task/mapper/PatrolTaskMapper.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/task/mapper/PatrolTaskMapper.java index bfa0598..5be0335 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/task/mapper/PatrolTaskMapper.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/task/mapper/PatrolTaskMapper.java @@ -54,4 +54,10 @@ public interface PatrolTaskMapper { List selectPatrolTaskStatus(@Param("taskCodes") Set patrolTaskCodes); String selectStationNo(); + + List selectBasedataPatrolPointList(@Param("patrolPointIds") List patrolPointIds); + + List selectBasedataPatrolPointPresetList(@Param("patrolPointIds") List patrolPointIds); + + List selectPatrolPresetPosList(@Param("patrolPointIds") List patrolPointIds); } diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/IPatrolTaskService.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/IPatrolTaskService.java index 63a8378..f9aea99 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/IPatrolTaskService.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/IPatrolTaskService.java @@ -1,12 +1,15 @@ 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; import com.inspect.taskstatus.domain.PatrolTaskStatus; +import org.apache.ibatis.annotations.Param; import java.util.List; import java.util.Map; +import java.util.Set; public interface IPatrolTaskService { PatrolTask selectPatrolTaskByTaskId(Long taskId); @@ -56,4 +59,10 @@ public interface IPatrolTaskService { void executeAsync(PatrolTaskStatus taskStatus); void executeTask(); + + List selectBasedataPatrolPointList(List patrolPointIds); + + List selectBasedataPatrolPointPresetList(List patrolPointIds); + + List selectPatrolPresetPosList(List patrolPointIds); } diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/impl/PatrolTaskServiceImpl.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/impl/PatrolTaskServiceImpl.java index bf5b3ba..b266825 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/impl/PatrolTaskServiceImpl.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/task/service/impl/PatrolTaskServiceImpl.java @@ -16,12 +16,19 @@ 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 io.swagger.models.auth.In; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; @@ -29,9 +36,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 +44,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 +355,20 @@ public class PatrolTaskServiceImpl implements IPatrolTaskService { } log.info("=============================定时任务归档结束============================================="); } + + // 根据点位id查询点位信息 + @Override + public List selectBasedataPatrolPointList(List patrolPointIds) { + return patrolTaskMapper.selectBasedataPatrolPointList(patrolPointIds); + } + + @Override + public List selectBasedataPatrolPointPresetList(List patrolPointIds) { + return patrolTaskMapper.selectBasedataPatrolPointPresetList(patrolPointIds); + } + + @Override + public List selectPatrolPresetPosList(List patrolPointIds) { + return patrolTaskMapper.selectPatrolPresetPosList(patrolPointIds); + } } diff --git a/inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolResultMapper.xml b/inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolResultMapper.xml index 0006be0..bf8030d 100644 --- a/inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolResultMapper.xml +++ b/inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolResultMapper.xml @@ -174,6 +174,7 @@ + @@ -1311,6 +1312,7 @@ b.res_status, d.device_name, e.area_name, + e.area_id, b.alg_type, b.objectId, b.suggestion, diff --git a/inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskMapper.xml b/inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskMapper.xml index cd53163..2aaad6f 100644 --- a/inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskMapper.xml +++ b/inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskMapper.xml @@ -41,6 +41,8 @@ + + @@ -80,7 +82,9 @@ is_enable, create_time, drafter, - area_id_s + area_id_s, + point_type, + device_type from patrol_task @@ -237,6 +241,8 @@ linkage_state, is_up, area_id_s, + device_type, + point_type, #{stationName}, @@ -275,6 +281,8 @@ #{linkageState}, #{isUp}, #{areaIdS}, + #{deviceType}, + #{pointType}, @@ -317,6 +325,8 @@ linkage_state = #{linkageState}, is_up = #{isUp}, area_id_s = #{areaIdS}, + point_type = #{pointType}, + device_type = #{deviceType}, where task_id = #{taskId} @@ -381,5 +391,88 @@ select station_no from basedata_station limit 1 + + + + diff --git a/inspect-metadata/src/main/java/com/inspect/metadata/area/controller/BaseDataAreaController.java b/inspect-metadata/src/main/java/com/inspect/metadata/area/controller/BaseDataAreaController.java index 406e3b5..225338d 100644 --- a/inspect-metadata/src/main/java/com/inspect/metadata/area/controller/BaseDataAreaController.java +++ b/inspect-metadata/src/main/java/com/inspect/metadata/area/controller/BaseDataAreaController.java @@ -370,6 +370,26 @@ public class BaseDataAreaController extends BaseController { return AjaxResult.success("成功", nameSBuilder.toString()); } + @GetMapping({"/selectAreaNameSForTaskByAreaIdSRelation"}) + public AjaxResult selectAreaNameSForTaskByAreaIdSRelation(BaseDataArea area) { + Map areaMap = new HashMap<>(); + List list = this.paramsGetListByAreaIdS(area); + BaseDataArea areaQuery = new BaseDataArea(); + List areas = this.baseDataAreaService.selectAreaRelationList(areaQuery); + + for (BaseDataArea baseDataArea : areas) { + areaMap.put(String.valueOf(baseDataArea.getAreaId()), baseDataArea); + } + + Map 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 areaMap, Map 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 areaMap, Map 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); + } + + } } diff --git a/inspect-metadata/src/main/java/com/inspect/metadata/area/domain/BaseDataArea.java b/inspect-metadata/src/main/java/com/inspect/metadata/area/domain/BaseDataArea.java index 120ddf1..407470a 100644 --- a/inspect-metadata/src/main/java/com/inspect/metadata/area/domain/BaseDataArea.java +++ b/inspect-metadata/src/main/java/com/inspect/metadata/area/domain/BaseDataArea.java @@ -53,6 +53,19 @@ public class BaseDataArea extends BaseEntity { private List children = new ArrayList<>(); private List filterNameList; + // 设备类型 编码 10: 摄像头(高清视频) 13:无人机 0:机器人 + private List devTypeList; + + // 设备类型 字典编码 + private List devTypeCodeList; + + + // 算法类型 编码 1: 表计 2:外观 3:红外 + private List algTypeList; + + // 算法类型 字典编码 + private List algTypeCodeList; + public String getOldAreaId() { return this.oldAreaId; } @@ -156,6 +169,38 @@ public class BaseDataArea extends BaseEntity { this.filterNameList = filterNameList; } + public List getDevTypeList() { + return devTypeList; + } + + public void setDevTypeList(List devTypeList) { + this.devTypeList = devTypeList; + } + + public List getAlgTypeList() { + return algTypeList; + } + + public void setAlgTypeList(List algTypeList) { + this.algTypeList = algTypeList; + } + + public List getDevTypeCodeList() { + return devTypeCodeList; + } + + public void setDevTypeCodeList(List devTypeCodeList) { + this.devTypeCodeList = devTypeCodeList; + } + + public List getAlgTypeCodeList() { + return algTypeCodeList; + } + + public void setAlgTypeCodeList(List algTypeCodeList) { + this.algTypeCodeList = algTypeCodeList; + } + @Override public String toString() { return "BaseDataArea{" + diff --git a/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/controller/BasedataDeviceController.java b/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/controller/BasedataDeviceController.java index 54d3cec..69dcc51 100644 --- a/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/controller/BasedataDeviceController.java +++ b/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/controller/BasedataDeviceController.java @@ -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()); } diff --git a/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/domain/vo/AreaDeviceTreeSelect.java b/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/domain/vo/AreaDeviceTreeSelect.java index ccfc76e..eeb37f1 100644 --- a/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/domain/vo/AreaDeviceTreeSelect.java +++ b/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/domain/vo/AreaDeviceTreeSelect.java @@ -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 cleanEmptyPatrolPoints() { // // 递归清理 // if (children != null) { diff --git a/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/service/IBasedataDeviceService.java b/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/service/IBasedataDeviceService.java index 080d09e..0ee7914 100644 --- a/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/service/IBasedataDeviceService.java +++ b/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/service/IBasedataDeviceService.java @@ -51,7 +51,7 @@ public interface IBasedataDeviceService { List buildAreaDeviceTreeSelectByAreasFilterByPreset(List areas, List filterNameList); List buildAreaDeviceTreeSelectByAreasFilterByPresetRelationLeft(List areas, List filterNameList); - List buildAreaDeviceTreeSelectByAreasFilterByPresetRelationRight(List areas, List filterNameList); + List buildAreaDeviceTreeSelectByAreasFilterByPresetRelationRight(List areas, List filterNameList, BaseDataArea baseDataArea); List buildAreaDeviceTreeSelectByAreasFilterByPresetRelation(List areas, List filterNameList); diff --git a/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/service/impl/BasedataDeviceServiceImpl.java b/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/service/impl/BasedataDeviceServiceImpl.java index b24d51f..38e4c51 100644 --- a/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/service/impl/BasedataDeviceServiceImpl.java +++ b/inspect-metadata/src/main/java/com/inspect/metadata/prodevmnt/service/impl/BasedataDeviceServiceImpl.java @@ -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 allNodes, List treeList) { + private void fillPointNumAndPatrolPointsRelation(List allNodes, List treeList, BaseDataArea baseDataArea) { // 收集所有设备ID Set deviceIds = new HashSet<>(); for (AreaDeviceTreeSelect node : allNodes) { @@ -512,6 +527,32 @@ public class BasedataDeviceServiceImpl implements IBasedataDeviceService { // 批量查询点位 List patrolPoints = basedataPatrolPointMapper.selectBasedataPatrolPointRelationListByDeviceIds(new ArrayList<>(deviceIds)); + List basedataAlgSubtypes = basedataAlgSubtypeMapper.selectBasedataAlgSubtypeList(new BasedataAlgSubtype()); + + logger.info("[META] basedataAlgSubtypes cnt: {}", basedataAlgSubtypes.size()); + Map algSubtypeMap = new HashMap<>(); + basedataAlgSubtypes.forEach((item) -> { + algSubtypeMap.put(item.getAlgSubtypeId() + "", item.getAlgSubtypeName()); + }); + List dictList = getSysDictDataList("point_device_type"); + Optional 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> devicePatrolMap = patrolPoints.stream() .collect(Collectors.groupingBy(BasedataPatrolPoint::getRelationDeviceId)); @@ -520,6 +561,94 @@ public class BasedataDeviceServiceImpl implements IBasedataDeviceService { setPointNumAndPatrolPoints(treeList, devicePatrolMap); } + private List filterByAlgTypes(List patrolPoints, List algTypeCodeList) { + // 获取算法分类字典(dictCode=字典编码,dictValue=逗号分隔的子类型ID) + List algCategoryDict = getSysDictDataList("point_alg_category"); + // 构建字典编码 -> 子类型ID集合的映射 (例如,"886" -> {"1", "2"}) + Map> 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 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 filterByDeviceTypes(List patrolPoints, List dictList) { + Set 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 getSysDictDataList(String dictType) { + return basedataPatrolpointMapper.selectDictDataByType(dictType); + } + + /** + * 处理点位的设备类型 + * + * @param dictList + * @param basedataPatrolPoint + */ + private void processPointType(BasedataPatrolPoint basedataPatrolPoint, List dictList, Optional defaultDictData) { + String patrolPointCode = basedataPatrolPoint.getPatrolPointCode(); + if (StringUtils.isNotEmpty(patrolPointCode)) { + if (patrolPointCode.contains("|")) { + String finalPatrolPointCode = patrolPointCode.substring(0, patrolPointCode.indexOf("|")); + Optional 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 buildAreaDeviceTreeSelectByAreasFilterByPresetRelation(List areas, List filterNamelist) { ArrayList areaIdList = new ArrayList<>(); HashMap areaMap = new HashMap<>(); @@ -587,7 +716,7 @@ public class BasedataDeviceServiceImpl implements IBasedataDeviceService { return treeList; } - public List buildAreaDeviceTreeSelectByAreasFilterByPresetRelationRight(List areas, List filterNamelist) { + public List buildAreaDeviceTreeSelectByAreasFilterByPresetRelationRight(List areas, List filterNamelist, BaseDataArea baseDataArea) { ArrayList areaIdList = new ArrayList<>(); HashMap areaMap = new HashMap<>(); HashMap deviceHashMap = new HashMap<>(); @@ -647,8 +776,10 @@ public class BasedataDeviceServiceImpl implements IBasedataDeviceService { List treeList = AreaDeviceTreeSelectUtil.buildDeviceTreeFilterByAreaName(areaVOS, filterNamelist); // 新增:填充点位统计 - fillPointNumAndPatrolPointsRelation(areaVOS, treeList); - + fillPointNumAndPatrolPointsRelation(areaVOS, treeList, baseDataArea); + for (AreaDeviceTreeSelect area : treeList) { + area.cleanEmptyPatrolPoints(); + } return treeList; } public List buildAreaDeviceTreeSelectByAreasFilterByMeter(List areas) {