diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/controller/PatrolResultController.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/controller/PatrolResultController.java index 248158b..2101efa 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/controller/PatrolResultController.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/controller/PatrolResultController.java @@ -948,6 +948,9 @@ 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()) { AnalyseRequest analyseReq = new AnalyseRequest(); @@ -960,6 +963,7 @@ public class PatrolResultController extends BaseController { analyseReq.setSftpUsername(username); analyseReq.setSftpPassword(password); analyseReq.setTotalNumber(totalNumber); + analyseReq.setDrafter(drafter); if (filterList.get(0).getImageUrlList() != null && filterList.get(0).getImageUrlList().length > 0) { // 初筛算法调用改为异步调用 final String meterFilter = patrolTaskService.selectConfigByKey(AnalyseConstants.ANALYSE_IS_METER_FILTER); @@ -990,6 +994,7 @@ public class PatrolResultController extends BaseController { analyseReq.setSftpUsername(username); analyseReq.setSftpPassword(password); analyseReq.setTotalNumber(totalNumber); + analyseReq.setDrafter(drafter); if (bigModelList.get(0).getImageUrlList() != null && bigModelList.get(0).getImageUrlList().length > 0) { // 大模型算法调用改为异步调用 //analyseRemoteService.sendRequest(analyseReq, bigModelList.get(0).getTypeList(), true); diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/domain/AnalyseRequest.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/domain/AnalyseRequest.java index d4ecd7c..6051419 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/domain/AnalyseRequest.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/domain/AnalyseRequest.java @@ -1,6 +1,7 @@ package com.inspect.partrolresult.domain; import com.alibaba.fastjson.JSONObject; +import com.alibaba.nacos.shaded.com.google.gson.*; import com.inspect.analysis.domain.AnalyseResItem; import com.inspect.analysis.domain.AnalyseResPoint; import com.inspect.analysis.domain.AnalyseResult; @@ -8,16 +9,16 @@ import com.inspect.analysis.service.RetryableRequest; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; +import lombok.extern.slf4j.Slf4j; import java.io.Serializable; import java.util.ArrayList; - -import java.util.Date; import java.util.List; @Setter @Getter @EqualsAndHashCode(of = "requestId") +@Slf4j public class AnalyseRequest implements RetryableRequest, Serializable { private List objectList; private String requestHostIp; @@ -41,11 +42,66 @@ public class AnalyseRequest implements RetryableRequest, Serializable { private String valueUnit; private String valueType; private String coordinatePixel; + private String drafter; public AnalyseRequest() { } + /** + * 兼容数聚智造接口 + * 新增 imagePathList 对应 imageUrlList + * 新增 annotations对象 algo.analyse.sgcc/id 对应 taskPatrolId + * 新增 annotations对象 task.analyse.sgcc/total 对应 totalNumber + */ + public static String convertJson(String originalJson) { + Gson gson = new GsonBuilder().setPrettyPrinting().create(); + JsonObject root = JsonParser.parseString(originalJson).getAsJsonObject(); + + // 1. 创建一个新的根对象,并把原 root 的所有字段都复制过去(除了 objectList) + JsonObject newRoot = new JsonObject(); + + // 遍历 root 的所有 entry,复制除 objectList 外的所有字段 + for (String key : root.keySet()) { + if (!"objectList".equals(key)) { + newRoot.add(key, root.get(key).deepCopy()); // deepCopy 防止引用问题 + } + } + + // 2. 处理 objectList(这是我们真正需要修改的部分) + JsonArray originalObjectList = root.getAsJsonArray("objectList"); + JsonArray newObjectList = new JsonArray(); + + for (JsonElement elem : originalObjectList) { + JsonObject obj = elem.getAsJsonObject().deepCopy(); // 复制一份,避免修改原数据 + + // 处理 imageUrlList -> imagePathList + if (obj.has("imageUrlList")) { + JsonArray imageUrlList = obj.getAsJsonArray("imageUrlList"); + obj.add("imagePathList", imageUrlList.deepCopy()); + } + + // 添加 annotations + JsonObject annotations = new JsonObject(); + // 从根对象取值(即使根对象有很多字段,也只用这两个) + if (root.has("taskPatrolId")) { + annotations.addProperty("algo.analyse.sgcc/id", root.get("taskPatrolId").getAsString()); + } + if (root.has("totalNumber")) { + annotations.addProperty("task.analyse.sgcc/total", root.get("totalNumber").getAsString()); + } + obj.add("annotations", annotations); + + newObjectList.add(obj); + } + + // 3. 把处理好的 objectList 放进新根对象 + newRoot.add("objectList", newObjectList); + + // 4. 转成漂亮的 JSON 字符串 + return gson.toJson(newRoot); + } + @Override public int getRetryCount() { return retryCount; @@ -118,7 +174,13 @@ public class AnalyseRequest implements RetryableRequest, Serializable { return JSONObject.toJSONString(analyseResult); } + @Override public String toString() { - return JSONObject.toJSONString(this); + String jsonStr = JSONObject.toJSONString(this); + if ("SJZZ".equals(this.drafter) && this.isFilter) { + log.info("数聚智造请求格式构造中"); + return convertJson(jsonStr); + } + return jsonStr; } } diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/service/AnalyseRequestServiceImpl.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/service/AnalyseRequestServiceImpl.java index 1c2a5cf..fe9aad4 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/service/AnalyseRequestServiceImpl.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/service/AnalyseRequestServiceImpl.java @@ -150,6 +150,7 @@ public class AnalyseRequestServiceImpl implements IAnalyseRequestService { } //qinyl + @Override public void sendRequest(AnalyseRequest analyseReq, String[] typeList, boolean isFilter) throws IOException { final long requestTimeout = 1L; //String requestId = UUID.randomUUID().toString().trim().replaceAll(StringUtils.DASH, StringUtils.EMPTY); @@ -211,33 +212,8 @@ public class AnalyseRequestServiceImpl implements IAnalyseRequestService { readDroneImageXmpInfo(analyseReq); } } else { - // 不再使用这个redis键值 -// analyseReq.getObjectList().forEach((item) -> { -// String[] itemTypeList = item.getTypeList(); -// for (String type : itemTypeList) { -// redisService.redisTemplate.opsForSet().add(requestSetKey, item.toResultValue(type)); -// } -// }); - // 红外分析路径 - if (checkInfraredType(typeList)) { - requestUrl = patrolTaskService.selectConfigByKey(AnalyseConstants.ANALYSIS_BIG_URL_INFRARED); - log.info("ANALYSIS_BIG_URL_INFRARED requestId: {}, requestUrl: {}", requestId, requestUrl); - } - // 表计读数分析路径 - else if (checkMeterType(typeList)) { - requestUrl = patrolTaskService.selectConfigByKey(AnalyseConstants.ANALYSIS_BIG_URL_METER); - log.info("ANALYSIS_BIG_URL_METER requestId: {}, requestUrl: {}", requestId, requestUrl); - } - // 无人机gis_meter2读数分析路径 - else if (checkGisMeter2Type(typeList)) { - requestUrl = patrolTaskService.selectConfigByKey(AnalyseConstants.ANALYSIS_BIG_URL_GIS_METER_2); - log.info("ANALYSIS_BIG_URL_GIS_METER_2 requestId: {}, requestUrl: {}", requestId, requestUrl); - } - // 默认大模型分析路径 - else { - requestUrl = patrolTaskService.selectConfigByKey(AnalyseConstants.ANALYSIS_BIG_URL); - log.info("DEFAULT ANALYSIS_BIG_URL requestId: {}, requestUrl: {}", requestId, requestUrl); - } + // 获取大模型分析接口地址 + requestUrl = getLargeModelAnalysisUrl(typeList, requestId, analyseReq.getDrafter()); final String analyzeBigModelRequestIdRedisKey = AnalyseConstants.ANALYSE_AI_REQUEST.concat(requestId); log.info("SEND_REQUEST_BIG_MODEL requestId: {}, analyzeBigModelRequestIdRedisKey: {}, analyseReq: {}", @@ -249,6 +225,7 @@ public class AnalyseRequestServiceImpl implements IAnalyseRequestService { if (StringUtil.isEmpty(requestUrl)) { requestUrl = "http://localhost:8080"; + log.error("ANALYSIS URL IS EMPTY, isFilter: {}, requestId: {}, typeList: {}", isFilter, requestId, typeList); } analyseReq.setFilter(isFilter); @@ -294,6 +271,50 @@ public class AnalyseRequestServiceImpl implements IAnalyseRequestService { } } + /** + * 根据厂商或算法获取大模型分析地址 + * @param typeList 算法 + * @param requestId 请求唯一id标识 + * @param drafter 算法厂商 + * @return 大模型分析地址 + */ + public String getLargeModelAnalysisUrl(String[] typeList, String requestId, String drafter) { + String requestUrl = ""; + + // 根据厂商获取分析路径 + if (!StringUtil.isEmpty(drafter)) { + String key = "ANALYSIS_BIG_URL_" + drafter; + requestUrl = patrolTaskService.selectConfigByKey(key); + log.info("{} requestId: {}, requestUrl: {}", key, requestId, requestUrl); + if(!StringUtils.isEmpty(requestUrl)) { + return requestUrl; + } + } + + // 红外分析路径 + if (checkInfraredType(typeList)) { + requestUrl = patrolTaskService.selectConfigByKey(AnalyseConstants.ANALYSIS_BIG_URL_INFRARED); + log.info("ANALYSIS_BIG_URL_INFRARED requestId: {}, requestUrl: {}", requestId, requestUrl); + } + // 表计读数分析路径 + else if (checkMeterType(typeList)) { + requestUrl = patrolTaskService.selectConfigByKey(AnalyseConstants.ANALYSIS_BIG_URL_METER); + log.info("ANALYSIS_BIG_URL_METER requestId: {}, requestUrl: {}", requestId, requestUrl); + } + // 无人机gis_meter2读数分析路径 + else if (checkGisMeter2Type(typeList)) { + requestUrl = patrolTaskService.selectConfigByKey(AnalyseConstants.ANALYSIS_BIG_URL_GIS_METER_2); + log.info("ANALYSIS_BIG_URL_GIS_METER_2 requestId: {}, requestUrl: {}", requestId, requestUrl); + } + // 默认大模型分析路径 + else { + requestUrl = patrolTaskService.selectConfigByKey(AnalyseConstants.ANALYSIS_BIG_URL); + log.info("DEFAULT ANALYSIS_BIG_URL requestId: {}, requestUrl: {}", requestId, requestUrl); + } + + return requestUrl; + } + public void readDroneImageXmpInfo(AnalyseRequest analyseReq) { String taskPatrolId = analyseReq.getTaskPatrolId(); PatrolTaskStatus taskStatus = patrolTaskStatusService.selectPatrolTaskStatusByTaskPatrolledId(taskPatrolId);