Browse Source

feat: 新增drafter字段用于巡视任务走指定的分析主机地址(用于数聚智造联调)

master
yinhuaiwei 3 weeks ago
parent
commit
9440d84b50
3 changed files with 118 additions and 30 deletions
  1. +5
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/controller/PatrolResultController.java
  2. +65
    -3
      inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/domain/AnalyseRequest.java
  3. +48
    -27
      inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/service/AnalyseRequestServiceImpl.java

+ 5
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/controller/PatrolResultController.java View File

@ -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);


+ 65
- 3
inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/domain/AnalyseRequest.java View File

@ -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<AnalyseReqItem> 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;
}
}

+ 48
- 27
inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/service/AnalyseRequestServiceImpl.java View File

@ -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);


Loading…
Cancel
Save