Browse Source

/*初筛算法请求失败重试机制bug修改:用绍兴站20250806的数据在测试环境跑表计识别A,初筛算法请求重试机制会不断往algorithm:request:queue中增加同样的请求,

导致结果有很多重复的。*/
master
htjcAdmin 4 months ago
parent
commit
3e90dd51f0
4 changed files with 36 additions and 19 deletions
  1. +5
    -1
      inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/service/impl/AlgorithmRequestRetryableConsumerManager.java
  2. +26
    -16
      inspect-main/inspect-main-task/src/main/java/com/inspect/analysis/service/impl/AnalyseResponseServiceImpl.java
  3. +1
    -1
      inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/domain/AnalyseRequest.java
  4. +4
    -1
      inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/service/AnalyseRequestRetryableDelegate.java

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

@ -70,7 +70,11 @@ public class AlgorithmRequestRetryableConsumerManager {
final int TRIES_MAX = testMode ? 50 : 3;
if (retryCount < TRIES_MAX) {
request.setRetryCount(retryCount + 1);
redisService.redisTemplate.opsForList().leftPush(AnalyseConstants.ALGORITHM_REQUEST_QUEUE, new Gson().toJson(request));
final String filterRedisKey = AnalyseConstants.ANALYSE_FILTER_REQUEST.concat(request.getRequestId());
if(Boolean.FALSE.equals(redisService.redisTemplate.hasKey(filterRedisKey))) {
log.info("ALGORITHM_REQUEST_RETRYABLE_CONSUME_MANAGE NO_KEY_IN_REDIS, filterRedisKey: {}, retryCount: {}", filterRedisKey, retryCount);
redisService.redisTemplate.opsForList().leftPush(AnalyseConstants.ALGORITHM_REQUEST_QUEUE, new Gson().toJson(request));
}
} else {
log.info("ALGORITHM_REQUEST_RETRYABLE_CONSUME_MANAGE compensate, retryCount: {}, request: {}", retryCount, request);
analyseRequestService.sendCompensateRequest(request);


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

@ -32,8 +32,7 @@ import com.inspect.taskinfo.domain.PatrolTaskInfo;
import com.inspect.taskinfo.service.IPatrolTaskInfoService;
import com.inspect.taskstatus.domain.PatrolTaskStatus;
import com.inspect.taskstatus.service.IPatrolTaskStatusService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@ -42,9 +41,9 @@ import java.text.DecimalFormat;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
@Service
public class AnalyseResponseServiceImpl implements IAnalyseResponseService {
private final Logger log = LoggerFactory.getLogger(this.getClass());
@Resource
private RedisService redisService;
@ -201,9 +200,9 @@ public class AnalyseResponseServiceImpl implements IAnalyseResponseService {
}
//qinyl
analysisLogService.log(new AnalyseLog(analyseResult.toString(), "1", analyseResult.getTaskPatrolId(), analyseResult.getFilter(), requestId));
try {
analysis(analyseResult);
analysisLogService.log(new AnalyseLog(analyseResult.toString(), "1", analyseResult.getTaskPatrolId(), analyseResult.getFilter(), requestId));
repositAnalyseAlgorithmResult(analyseResult);
} catch (Exception e) {
log.error("error", e);
}
@ -720,7 +719,7 @@ public class AnalyseResponseServiceImpl implements IAnalyseResponseService {
return resMap;
}
public void analysis(AnalyseResult analyseResult) {
public void repositAnalyseAlgorithmResult(AnalyseResult analyseResult) {
List<WebsocketData> websocketDataList = new ArrayList<>();
Map<String, PatrolResult> resMap = selectObj2PatrolResultMap(analyseResult.getTaskPatrolId());
List<AnalyseResItem> resultList = analyseResult.getResultList();
@ -789,8 +788,9 @@ public class AnalyseResponseServiceImpl implements IAnalyseResponseService {
}
// 计算初筛算法的进度
if ("1".equals(analyseResult.getFilter())) {
calcRemoteAlgorithmProgress(analyseResult.getTotalNumber(), analyseResult.getTaskPatrolId());
if ("1".equals(analyseResult.getFilter()) && !analyseResult.getResultList().isEmpty()) {
final String objectId = analyseResult.getResultList().get(0).getObjectId();
calcRemoteAlgorithmProgress(analyseResult.getTaskPatrolId(), objectId, analyseResult.getTotalNumber());
}
//this.senWebsocket(websocketDataList);
@ -839,7 +839,7 @@ public class AnalyseResponseServiceImpl implements IAnalyseResponseService {
return resultAnalysis;
}
private void calcRemoteAlgorithmProgress(final int totalNumber, final String taskPatrolledId) {
private void calcRemoteAlgorithmProgress(final String taskPatrolledId, final String objectId, final int totalNumber) {
ResultAnalysis resultAnalysis = new ResultAnalysis();
resultAnalysis.setTaskPatrolId(taskPatrolledId);
resultAnalysis.setFilter("1");
@ -856,14 +856,24 @@ public class AnalyseResponseServiceImpl implements IAnalyseResponseService {
patrolTaskStatus.setTaskEstimatedTime(algorithmProgress);
if ("100.0".equals(algorithmProgress)) {
patrolTaskStatus.setEndTime(DateUtil.formatDateTime(new Date()));
log.info(Color.GREEN + "DONE CALC_REMOTE_ALGORITHM_PROGRESS: taskPatrolledId: {}, curNumber: {}, totalNumer: {}, algorithmProgress: {}, db-taskProgress: {}" + Color.END,
taskPatrolledId, resultAnalysisList.size(), totalNumber, algorithmProgress, patrolTaskStatus.getTaskProgress());
log.info(Color.GREEN + "DONE CALC_REMOTE_ALGORITHM_PROGRESS: taskPatrolledId: {}, objectId: {}, curNumber: {}, totalNumer: {}, algorithmProgress: {}, db-taskProgress: {}" + Color.END,
taskPatrolledId,
objectId,
resultAnalysisList.size(),
totalNumber,
algorithmProgress,
patrolTaskStatus.getTaskProgress());
patrolTaskStatus.setTaskProgress("100.0");
patrolTaskStatus.setTaskState(TaskStatus.DONE.getCode());
patrolTaskStatusService.updatePatrolTaskStatus(patrolTaskStatus);
} else {
log.info(Color.GREEN + "RUNNING CALC_REMOTE_ALGORITHM_PROGRESS taskPatrolledId: {}, curNumber: {}, totalNumer: {}, algorithmProgress: {}, status: {}" + Color.END,
taskPatrolledId, resultAnalysisList.size(), totalNumber, algorithmProgress, patrolTaskStatus.getTaskState());
log.info(Color.GREEN + "RUNNING CALC_REMOTE_ALGORITHM_PROGRESS taskPatrolledId: {}, objectId: {}, curNumber: {}, totalNumer: {}, algorithmProgress: {}, status: {}" + Color.END,
taskPatrolledId,
objectId,
resultAnalysisList.size(),
totalNumber,
algorithmProgress,
patrolTaskStatus.getTaskState());
if (TaskStatus.RUNNING.getCode().equals(patrolTaskStatus.getTaskState())) {
patrolTaskStatus.setTaskState(TaskStatus.RUNNING.getCode());
@ -898,12 +908,12 @@ public class AnalyseResponseServiceImpl implements IAnalyseResponseService {
for (int i = 0; i < thresholdList.size(); ++i) {
JSONObject threshold = thresholdList.getJSONObject(i);
if (StringUtils.isNotEmpty(type) && type.equals(threshold.getString(AnalyseConstants.ANALYSE_CODE))) {
log.info("selectAlgMap patrolpoint threshold: {}", JSONObject.toJSONString(threshold));
log.info("selectAlgMap patrolPoint threshold: {}", JSONObject.toJSONString(threshold));
algValue = new AlgValue(threshold.getString(AnalyseConstants.ANALYSE_UPPER_VALUE), threshold.getString(AnalyseConstants.ANALYSE_LOWER_VALUE));
}
}
} catch (Exception e) {
log.error("selectAlgMap Exception alarmThreshold: {}, Msg: {}", alarmThreshold, e.getMessage());
log.error("selectAlgMap Exception devId: {}, alarmThreshold: {}, Msg: {}", devId, alarmThreshold, e.getMessage());
}
}
@ -920,7 +930,7 @@ public class AnalyseResponseServiceImpl implements IAnalyseResponseService {
}
if (algValue == null) {
log.info("selectAlgMap threshold is not set");
log.info("selectAlgMap threshold is not set, devId: {}", devId);
algValue = new AlgValue();
}


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

@ -72,7 +72,7 @@ public class AnalyseRequest implements RetryableRequest, Serializable {
analyseResItem.setResults(results);
for (String type : analyseReqItem.getTypeList()) {
AnalyseResPoint analyseResPoint = new AnalyseResPoint();
analyseResPoint.setCode("2002");
analyseResPoint.setCode("2000");
analyseResPoint.setType(type);
analyseResPoint.setDesc("-");
analyseResPoint.setResImageUrl(analyseReqItem.getImageUrlList()[0]);


+ 4
- 1
inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/service/AnalyseRequestRetryableDelegate.java View File

@ -39,7 +39,10 @@ public class AnalyseRequestRetryableDelegate {
@SuppressWarnings("unused")
@Recover
public boolean recover(IOException e, final AnalyseRequest analyseReq) {
log.info("CALL_REMOTE_ANALYZE RECOVER: requestId: {}", analyseReq.getRequestId());
log.info("CALL_REMOTE_ANALYZE RECOVER: taskPatrolId: {}, retryCount: {}, requestId: {}",
analyseReq.getTaskPatrolId(),
analyseReq.getRetryCount(),
analyseReq.getRequestId());
return false;
}
}

Loading…
Cancel
Save