Browse Source

样本上送代码

master
wangguangyuan 7 months ago
parent
commit
ecaff1ff95
7 changed files with 291 additions and 29 deletions
  1. +33
    -0
      src/main/java/com/inspect/simulator/domain/result/PatrolUpdataLog.java
  2. +14
    -0
      src/main/java/com/inspect/simulator/mapper/PatrolUpdataLogMapper.java
  3. +11
    -0
      src/main/java/com/inspect/simulator/service/IPatrolUpdataLogService.java
  4. +204
    -26
      src/main/java/com/inspect/simulator/service/impl/PatrolResultServiceImpl.java
  5. +18
    -0
      src/main/java/com/inspect/simulator/service/impl/PatrolUpdataLogServiceImpl.java
  6. +4
    -3
      src/main/resources/mapper/PatrolResultMapper.xml
  7. +7
    -0
      src/main/resources/mapper/PatrolUpdataLog.xml

+ 33
- 0
src/main/java/com/inspect/simulator/domain/result/PatrolUpdataLog.java View File

@ -0,0 +1,33 @@
package com.inspect.simulator.domain.result;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
* @author WGY
* @create 2025-03-31 11:33
**/
@Data
@TableName("patrol_updata_log")
public class PatrolUpdataLog {
private static final long serialVersionUID = 1L;
@TableId
private Long logId;
private String algorithmsType;
private String resultCode;
private String upNum;
private String filter;
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss"
)
private Date createTime;
}

+ 14
- 0
src/main/java/com/inspect/simulator/mapper/PatrolUpdataLogMapper.java View File

@ -0,0 +1,14 @@
package com.inspect.simulator.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.inspect.simulator.domain.result.PatrolUpdataLog;
import org.apache.ibatis.annotations.Mapper;
/**
* @author WGY
* @create 2025-03-31 11:38
**/
@Mapper
public interface PatrolUpdataLogMapper extends BaseMapper<PatrolUpdataLog> {
}

+ 11
- 0
src/main/java/com/inspect/simulator/service/IPatrolUpdataLogService.java View File

@ -0,0 +1,11 @@
package com.inspect.simulator.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.inspect.simulator.domain.result.PatrolUpdataLog;
/**
* @author WGY
* @create 2025-03-31 13:35
**/
public interface IPatrolUpdataLogService extends IService<PatrolUpdataLog> {
}

+ 204
- 26
src/main/java/com/inspect/simulator/service/impl/PatrolResultServiceImpl.java View File

@ -1,15 +1,20 @@
package com.inspect.simulator.service.impl; package com.inspect.simulator.service.impl;
import com.alibaba.nacos.client.config.common.GroupKey;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.inspect.simulator.domain.result.PatrolResult; import com.inspect.simulator.domain.result.PatrolResult;
import com.inspect.simulator.domain.result.PatrolUpdataLog;
import com.inspect.simulator.domain.result.upper.*; import com.inspect.simulator.domain.result.upper.*;
import com.inspect.simulator.mapper.PatrolResultMapper; import com.inspect.simulator.mapper.PatrolResultMapper;
import com.inspect.simulator.service.IPatrolUpdataLogService;
import com.inspect.simulator.service.PatrolResultService; import com.inspect.simulator.service.PatrolResultService;
import com.inspect.simulator.service.remote.UpperRemoteService; import com.inspect.simulator.service.remote.UpperRemoteService;
import com.inspect.simulator.utils.DateUtils; import com.inspect.simulator.utils.DateUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import retrofit2.Call; import retrofit2.Call;
@ -20,18 +25,32 @@ import java.util.stream.Collectors;
@Service @Service
public class PatrolResultServiceImpl implements PatrolResultService { public class PatrolResultServiceImpl implements PatrolResultService {
@Value("${upper.stationCode:30000001-112967078}")
private String stationCode;
@Value("${upper.provinceCode:330000}")
private String provinceCode;
@Value("${upper.voltLevel:800}")
private String voltLevel;
private static String token; private static String token;
private static final String MLLM_FILTER = "0"; private static final String MLLM_FILTER = "0";
private static final String FITLER_FILTER = "1"; private static final String FITLER_FILTER = "1";
private static final Set<String> VALID_RESULT_CODES = new HashSet<>(Arrays.asList("0", "1"));
private final Logger log = LoggerFactory.getLogger(this.getClass()); private final Logger log = LoggerFactory.getLogger(this.getClass());
private final UpperRemoteService upperRemoteService; private final UpperRemoteService upperRemoteService;
private final PatrolResultMapper patrolResultMapper; private final PatrolResultMapper patrolResultMapper;
@Autowired
private IPatrolUpdataLogService patrolUpdataLogService;
public PatrolResultServiceImpl(PatrolResultMapper patrolResultMapper, UpperRemoteService upperRemoteService) { public PatrolResultServiceImpl(PatrolResultMapper patrolResultMapper, UpperRemoteService upperRemoteService) {
this.patrolResultMapper = patrolResultMapper; this.patrolResultMapper = patrolResultMapper;
this.upperRemoteService = upperRemoteService; this.upperRemoteService = upperRemoteService;
@ -83,7 +102,8 @@ public class PatrolResultServiceImpl implements PatrolResultService {
log.info("[{}] [{}] sendPatrolResultToUpperSystem", threadId, execTime); log.info("[{}] [{}] sendPatrolResultToUpperSystem", threadId, execTime);
// 查询当天的巡检结果 // 查询当天的巡检结果
String createTimeStr = DateUtils.parseDateToStr("yyyy-MM-dd", date); String createTimeStr = DateUtils.parseDateToStr("yyyy-MM-dd", date);
// createTimeStr = "2024-06-19";
// createTimeStr = "2025-03-27";
List<PatrolResult> patrolResults = patrolResultMapper.selectCurrentPatrolResultList(createTimeStr); List<PatrolResult> patrolResults = patrolResultMapper.selectCurrentPatrolResultList(createTimeStr);
if (patrolResults == null || patrolResults.size() <= 0) { if (patrolResults == null || patrolResults.size() <= 0) {
log.info("[{}] [{}] sendPatrolResultToUpperSystem no data", threadId, execTime); log.info("[{}] [{}] sendPatrolResultToUpperSystem no data", threadId, execTime);
@ -91,7 +111,8 @@ public class PatrolResultServiceImpl implements PatrolResultService {
} }
try { try {
String token = getOrRefreshToken(false); String token = getOrRefreshToken(false);
MessageBody messageBody = prepareMessageBody(patrolResults);
Set<Long> lineIds = new HashSet<>();
MessageBody messageBody = prepareMessageBody(patrolResults, lineIds);
MessageResult messageResult = messageNotify(token, messageBody); MessageResult messageResult = messageNotify(token, messageBody);
if (messageResult == null || !messageResult.getSuccess()) { if (messageResult == null || !messageResult.getSuccess()) {
@ -100,11 +121,54 @@ public class PatrolResultServiceImpl implements PatrolResultService {
messageResult = messageNotify(token, messageBody); messageResult = messageNotify(token, messageBody);
} }
log.info("sendPatrolResultToUpperSystem messageResult: {}", messageResult); log.info("sendPatrolResultToUpperSystem messageResult: {}", messageResult);
if (messageResult != null && messageResult.getSuccess()) {
if (messageResult != null && messageResult.getSuccess() && lineIds.size() > 0) {
// 成功则更新数据库中上送状态 // 成功则更新数据库中上送状态
Set<Long> lineIds = patrolResults.stream().map(PatrolResult::getLineId).collect(Collectors.toSet());
int row = patrolResultMapper.updatePatrolResultUpStatus(lineIds); int row = patrolResultMapper.updatePatrolResultUpStatus(lineIds);
log.info("[{}] [{}] sendPatrolResultToUpperSystem updatePatrolResultUpStatus row:{}", threadId, execTime, row); log.info("[{}] [{}] sendPatrolResultToUpperSystem updatePatrolResultUpStatus row:{}", threadId, execTime, row);
List<MessageData> samples = messageBody.getSamples();
// 记录上送初筛正常的数据
List<MessageData> filterDataList = samples.stream().filter(messageData -> "0".equals(messageData.getFitlerResultCode()) && StringUtils.isEmpty(messageData.getMllmResultCode())).collect(Collectors.toList());
Map<GroupKeyStatic, List<MessageData>> staticFilterListMap = filterDataList.stream().collect(Collectors.groupingBy(p -> new GroupKeyStatic(p.getAlgorithmsType(), p.getFitlerResultCode())));
Map<GroupKeyStatic,Integer> staticFilterResultMap = new HashMap<>();
for (Map.Entry<GroupKeyStatic, List<MessageData>> groupKeyStaticListEntry : staticFilterListMap.entrySet()) {
GroupKeyStatic groupKey = groupKeyStaticListEntry.getKey();
List<MessageData> messageDatas = groupKeyStaticListEntry.getValue();
staticFilterResultMap.put(groupKey, messageDatas.size());
}
List<PatrolUpdataLog> updataLogs = new ArrayList<>();
for (Map.Entry<GroupKeyStatic, Integer> groupKeyStaticIntegerEntry : staticFilterResultMap.entrySet()) {
PatrolUpdataLog patrolUpdataLog = new PatrolUpdataLog();
GroupKeyStatic groupKey = groupKeyStaticIntegerEntry.getKey();
int count = groupKeyStaticIntegerEntry.getValue();
patrolUpdataLog.setAlgorithmsType(groupKey.getAlgorithmsType());
patrolUpdataLog.setResultCode(groupKey.getResultCode());
patrolUpdataLog.setUpNum(String.valueOf(count));
patrolUpdataLog.setCreateTime(date);
patrolUpdataLog.setFilter(FITLER_FILTER);
updataLogs.add(patrolUpdataLog);
}
// 记录初筛缺陷大模型正常缺陷数据
List<MessageData> mllmDataList = samples.stream().filter(messageData -> StringUtils.isNotEmpty(messageData.getMllmResultCode())).collect(Collectors.toList());
Map<GroupKeyStatic, List<MessageData>> staticMllmListMap = mllmDataList.stream().collect(Collectors.groupingBy(p -> new GroupKeyStatic(p.getAlgorithmsType(), p.getMllmResultCode())));
Map<GroupKeyStatic,Integer> staticMllmResultMap = new HashMap<>();
for (Map.Entry<GroupKeyStatic, List<MessageData>> groupKeyStaticListEntry : staticMllmListMap.entrySet()) {
GroupKeyStatic groupKey = groupKeyStaticListEntry.getKey();
List<MessageData> messageDatas = groupKeyStaticListEntry.getValue();
staticMllmResultMap.put(groupKey, messageDatas.size());
}
for (Map.Entry<GroupKeyStatic, Integer> groupKeyStaticIntegerEntry : staticMllmResultMap.entrySet()) {
PatrolUpdataLog patrolUpdataLog = new PatrolUpdataLog();
GroupKeyStatic groupKey = groupKeyStaticIntegerEntry.getKey();
int count = groupKeyStaticIntegerEntry.getValue();
patrolUpdataLog.setAlgorithmsType(groupKey.getAlgorithmsType());
patrolUpdataLog.setResultCode(groupKey.getResultCode());
patrolUpdataLog.setUpNum(String.valueOf(count));
patrolUpdataLog.setCreateTime(date);
patrolUpdataLog.setFilter(MLLM_FILTER);
updataLogs.add(patrolUpdataLog);
}
log.info("updataLogs size:{},updataLogs: {}", updataLogs.size(), updataLogs);
boolean b = patrolUpdataLogService.saveBatch(updataLogs);
} else { } else {
log.error("[{}] [{}] sendPatrolResultToUpperSystem failed", threadId, execTime); log.error("[{}] [{}] sendPatrolResultToUpperSystem failed", threadId, execTime);
} }
@ -112,7 +176,6 @@ public class PatrolResultServiceImpl implements PatrolResultService {
log.error("sendPatrolResultToUpperSystem Exception", e); log.error("sendPatrolResultToUpperSystem Exception", e);
} }
} }
private String getOrRefreshToken(Boolean isTokenExpired) { private String getOrRefreshToken(Boolean isTokenExpired) {
if (token == null || isTokenExpired) { if (token == null || isTokenExpired) {
TokenParam tokenParam = new TokenParam(); TokenParam tokenParam = new TokenParam();
@ -139,32 +202,147 @@ public class PatrolResultServiceImpl implements PatrolResultService {
return token; return token;
} }
private MessageBody prepareMessageBody(List<PatrolResult> patrolResults) {
private MessageBody prepareMessageBody(List<PatrolResult> patrolResults, Set<Long> lineIds) {
MessageBody messageBody = new MessageBody(); MessageBody messageBody = new MessageBody();
messageBody.setProvinceCode("330000");
messageBody.setStationCode("30000001-112967078");
messageBody.setVoltLevel("800");
// 绍兴站
// messageBody.setProvinceCode("330000");
// messageBody.setStationCode("30000001-112967078");
// 灵州站
// messageBody.setProvinceCode("640000");
// messageBody.setStationCode("1cc010d8a78a598ccb52fb470301531cbff88e26c5");
// messageBody.setVoltLevel("800");
messageBody.setProvinceCode(provinceCode);
messageBody.setStationCode(stationCode);
messageBody.setVoltLevel(voltLevel);
List<MessageData> samples = new ArrayList<>(); List<MessageData> samples = new ArrayList<>();
for (PatrolResult patrolResult : patrolResults) {
MessageData sample = new MessageData();
sample.setAreaName(patrolResult.getAreaName());
sample.setDeviceName(patrolResult.getDeviceName());
sample.setPointName(patrolResult.getDeviceName());
sample.setTime(DateUtils.format(DateUtils.yyyyMMddHHmmss2, patrolResult.getCreateTime()));
sample.setAlgorithmsName(patrolResult.getAlgorithmsName());
sample.setAlgorithmsType(patrolResult.getAlgorithmsType());
sample.setSampleRaw(patrolResult.getFilePath());
sample.setFitlerDefect(FITLER_FILTER.equals(patrolResult.getFilter()) ? patrolResult.getResImgUrl() : "");
sample.setMllmDefect(MLLM_FILTER.equals(patrolResult.getFilter()) ? patrolResult.getResImgUrl() : "");
sample.setFitlerDiffBase(FITLER_FILTER.equals(patrolResult.getFilter()) ? patrolResult.getImageNormalUrlPath() : "");
String resultType = StringUtils.isEmpty(patrolResult.getResultType()) ? patrolResult.getResultType() : ("1".equals(patrolResult.getResultType()) ? "0" : "1");
sample.setFitlerResultCode(FITLER_FILTER.equals(patrolResult.getFilter()) ? resultType : "");
sample.setMllmResultCode(MLLM_FILTER.equals(patrolResult.getFilter()) ? resultType : "");
samples.add(sample);
if (patrolResults == null) {
return messageBody;
} }
Map<GroupKey, List<PatrolResult>> groupedResults = patrolResults.stream()
.collect(Collectors.groupingBy(p -> new GroupKey(
p.getLineId(),
p.getDeviceName(),
p.getCreateTime(),
p.getAlgorithmsType()
)));
groupedResults.forEach((key, group) -> {
MessageData sample = new MessageData();
PatrolResult firstPr = group.get(0);
sample.setAreaName(firstPr.getAreaName());
sample.setDeviceName(firstPr.getDeviceName());
sample.setPointName(firstPr.getPointName());
sample.setTime(DateUtils.format(DateUtils.yyyyMMddHHmmss2, firstPr.getCreateTime()));
sample.setSampleRaw(firstPr.getFilePath());
sample.setAlgorithmsName(firstPr.getAlgorithmsName());
sample.setAlgorithmsType(firstPr.getAlgorithmsType());
// 处理同一分组内的不同filter结果
group.forEach(pr -> {
// result type是检测出来有缺陷的 0是缺陷 1是正常 2是异常(异常不算是缺陷比如图片抓拍失败为空算是异常或者是大模型服务挂掉分析失败也是异常这种的不算是缺陷)
String resultType = pr.getResultType();
if (StringUtils.isNotEmpty(resultType)) {
if ("1".equals(pr.getResultType())) {
resultType = "0";
} else if ("0".equals(pr.getResultType())) {
resultType = "1";
}
}
String filter = pr.getFilter();
if (MLLM_FILTER.equals(filter)) {
sample.setMllmDefect(pr.getResImgUrl());
sample.setMllmResultCode(resultType);
} else if (FITLER_FILTER.equals(filter)) {
sample.setFitlerDefect(pr.getResImgUrl());
sample.setFitlerDiffBase(pr.getImageNormalUrlPath());
sample.setFitlerResultCode(resultType);
}
});
// 上传大模型正常0和缺陷1的图片忽略异常的图片,初筛正常的图片(去掉表计识别)
if (isValidResultCode(sample.getMllmResultCode()) || ("0".equals(sample.getFitlerResultCode()) && StringUtils.isEmpty(sample.getMllmResultCode()))) {
samples.add(sample);
lineIds.add(firstPr.getLineId());
}
});
messageBody.setSamples(samples); messageBody.setSamples(samples);
log.info("samples size: {},messageBody: {}", samples.size(), messageBody); log.info("samples size: {},messageBody: {}", samples.size(), messageBody);
return messageBody; return messageBody;
} }
private boolean isValidResultCode(String resultCode) {
return VALID_RESULT_CODES.contains(resultCode);
}
// 分组键用于分组PatrolResult对象
private static class GroupKey {
private final Long lineId;
private final String deviceName;
private final Date createTime;
private final String algorithmsType;
public GroupKey(Long lineId, String deviceName, Date createTime, String algorithmsType) {
this.lineId = lineId;
this.deviceName = deviceName;
this.createTime = createTime;
this.algorithmsType = algorithmsType;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
GroupKey groupKey = (GroupKey) o;
return Objects.equals(lineId, groupKey.lineId) &&
Objects.equals(deviceName, groupKey.deviceName) &&
Objects.equals(createTime, groupKey.createTime) &&
Objects.equals(algorithmsType, groupKey.algorithmsType);
}
@Override
public int hashCode() {
return Objects.hash(lineId, deviceName, createTime, algorithmsType);
}
}
private static class GroupKeyStatic {
private final String algorithmsType;
private final String resultCode;
public GroupKeyStatic(String algorithmsType, String resultCode) {
this.resultCode = resultCode;
this.algorithmsType = algorithmsType;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
GroupKeyStatic groupKey = (GroupKeyStatic) o;
return Objects.equals(algorithmsType, groupKey.algorithmsType) &&
Objects.equals(resultCode, groupKey.resultCode);
}
@Override
public int hashCode() {
return Objects.hash(algorithmsType, resultCode);
}
public String getAlgorithmsType() {
return algorithmsType;
}
public String getResultCode() {
return resultCode;
}
@Override
public String toString() {
return "GroupKeyStatic{" +
"algorithmsType='" + algorithmsType + '\'' +
", resultCode='" + resultCode + '\'' +
'}';
}
}
} }

+ 18
- 0
src/main/java/com/inspect/simulator/service/impl/PatrolUpdataLogServiceImpl.java View File

@ -0,0 +1,18 @@
package com.inspect.simulator.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.inspect.simulator.domain.result.PatrolUpdataLog;
import com.inspect.simulator.mapper.PatrolUpdataLogMapper;
import com.inspect.simulator.service.IPatrolUpdataLogService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* @author WGY
* @create 2025-03-31 13:37
**/
@Service
@Slf4j
public class PatrolUpdataLogServiceImpl extends ServiceImpl<PatrolUpdataLogMapper, PatrolUpdataLog> implements IPatrolUpdataLogService {
}

+ 4
- 3
src/main/resources/mapper/PatrolResultMapper.xml View File

@ -767,8 +767,8 @@
resultType="com.inspect.simulator.domain.result.PatrolResult"> resultType="com.inspect.simulator.domain.result.PatrolResult">
select f.line_id lineId, select f.line_id lineId,
e.area_name areaName, e.area_name areaName,
f.device_name deviceName,
f.device_name pointName,
c.device_name deviceName,
a.patrol_point_name pointName,
f.create_time createTime, f.create_time createTime,
f.file_path filePath, f.file_path filePath,
bas.alg_subtype_name algorithmsName, bas.alg_subtype_name algorithmsName,
@ -779,12 +779,13 @@
ra.filter filter ra.filter filter
from patrol_result f from patrol_result f
left join basedata_patrolpoint a on f.device_id = a.patrol_point_id left join basedata_patrolpoint a on f.device_id = a.patrol_point_id
left join basedata_device c on a.main_device_id = c.device_id
left join basedata_area e on a.area_id = e.area_id left join basedata_area e on a.area_id = e.area_id
left join result_analysis ra on f.line_id = ra.business_id and f.device_id = ra.objectId and left join result_analysis ra on f.line_id = ra.business_id and f.device_id = ra.objectId and
f.task_patrolled_id = ra.task_patrol_id f.task_patrolled_id = ra.task_patrol_id
left join basedata_alg_subtype bas left join basedata_alg_subtype bas
on bas.alg_subtype_code = ra.alg_type and find_in_set(bas.alg_subtype_id, a.alg_subtype_ids) on bas.alg_subtype_code = ra.alg_type and find_in_set(bas.alg_subtype_id, a.alg_subtype_ids)
where f.create_time between concat(#{createTimeStr}, ' 00:00:00') and concat(#{createTimeStr}, ' 23:59:59') where f.create_time between concat(#{createTimeStr}, ' 00:00:00') and concat(#{createTimeStr}, ' 23:59:59')
and f.check_time is null and ra.result_type != '1'
and f.check_time is null
</select> </select>
</mapper> </mapper>

+ 7
- 0
src/main/resources/mapper/PatrolUpdataLog.xml View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.inspect.simulator.mapper.PatrolUpdataLogMapper">
</mapper>

Loading…
Cancel
Save