关于时间精度调整

This commit is contained in:
caozehui
2026-04-16 14:14:38 +08:00
parent a2468f1353
commit ab11c91579
5 changed files with 39 additions and 23 deletions

View File

@@ -291,8 +291,15 @@ public class SocketFreqConverterDevService {
private void initDipTestRes(PqDipData pqDipData) { private void initDipTestRes(PqDipData pqDipData) {
Integer suffix = FormalTestManager.freqConverterTableSuffix; Integer suffix = FormalTestManager.freqConverterTableSuffix;
FreqConverterStatus lastStatusData = freqConverterService.getLastStatusData(suffix, pqDipData.getStartTime()); FreqConverterStatus lastStatusData = freqConverterService.getLastStatusData(suffix, pqDipData.getStartTime());
if (Objects.isNull(lastStatusData)) {
return;
}
List<FreqConverterStatus> statusList = freqConverterService.getDipDurationStatusData(suffix, lastStatusData.getTimestamp(), pqDipData.getStartTime().plusNanos(pqDipData.getDurationMs() * 1000_000L)); List<FreqConverterStatus> statusList = freqConverterService.getDipDurationStatusData(suffix, lastStatusData.getTimestamp(), pqDipData.getStartTime().plusNanos(pqDipData.getDurationMs() * 1000_000L));
boolean originalTolerant = lastStatusData.getStatusWord1() != freqConverterConfig.getNoTolerant(); boolean originalTolerant = lastStatusData.getStatusWord1() != freqConverterConfig.getNoTolerant();
LocalDateTime targetEndTime = pqDipData.getStartTime()
.plusNanos(pqDipData.getDurationMs() * 1000_000L)
.plusNanos(freqConverterConfig.getDt() * 1000_000L);
if (CollUtil.isNotEmpty(statusList)) { if (CollUtil.isNotEmpty(statusList)) {
FreqConverterStatus status = statusList.get(statusList.size() - 1); FreqConverterStatus status = statusList.get(statusList.size() - 1);
@@ -301,13 +308,25 @@ public class SocketFreqConverterDevService {
testRes.setTolerant(originalTolerant ? status.getStatusWord1() != freqConverterConfig.getNoTolerant() : false); testRes.setTolerant(originalTolerant ? status.getStatusWord1() != freqConverterConfig.getNoTolerant() : false);
testRes.setStartTime(lastStatusData.getTimestamp()); testRes.setStartTime(lastStatusData.getTimestamp());
int collectCount = (int) Math.ceil((freqConverterConfig.getDt()) / freqConverterConfig.getSchedulePeriod()); FormalTestManager.pendingDipTaskMap.put(pqDipData.getId(), new FormalTestManager.PendingDipTask(
if (collectCount > 0) { pqDipData.getId(),
FormalTestManager.pendingDipTaskMap.put(pqDipData.getId(), new FormalTestManager.PendingDipTask(pqDipData.getId(), pqDipData.getStartTime(), originalTolerant, collectCount)); pqDipData.getStartTime(),
} else { targetEndTime,
testRes.setEndTime(status.getTimestamp()); originalTolerant
} ));
pqFreqConverterTestResService.saveTestRes(suffix, Collections.singletonList(testRes)); testRes.setEndTime(status.getTimestamp());
// if (status.getTimestamp().isBefore(targetEndTime)) {
// FormalTestManager.pendingDipTaskMap.put(pqDipData.getId(), new FormalTestManager.PendingDipTask(
// pqDipData.getId(),
// pqDipData.getStartTime(),
// targetEndTime,
// originalTolerant
// ));
// } else {
// testRes.setEndTime(status.getTimestamp().isAfter(targetEndTime) ? targetEndTime : status.getTimestamp());
// }
pqFreqConverterTestResService.saveOrUpdateTestRes(suffix, Collections.singletonList(testRes));
} }
} }

View File

@@ -198,8 +198,8 @@ public class SocketFreqConverterService {
// } else { // } else {
// FormalTestManager.stopFlag = false; // FormalTestManager.stopFlag = false;
// } // }
freqConverterService.saveFreqConverterStatus(FormalTestManager.freqConverterTableSuffix, freqConverterStatus);
this.consumePendingDipTasks(freqConverterStatus); this.consumePendingDipTasks(freqConverterStatus);
freqConverterService.saveFreqConverterStatus(FormalTestManager.freqConverterTableSuffix, freqConverterStatus);
} }
private void handleCloseSerial(String converterChannelTag, FreqConverterRespDTO respDTO) { private void handleCloseSerial(String converterChannelTag, FreqConverterRespDTO respDTO) {
@@ -257,22 +257,23 @@ public class SocketFreqConverterService {
List<String> finishedDipIdList = new ArrayList<>(); List<String> finishedDipIdList = new ArrayList<>();
List<PqFreqConverterTestRes> testResList = new ArrayList<>(); List<PqFreqConverterTestRes> testResList = new ArrayList<>();
for (FormalTestManager.PendingDipTask task : FormalTestManager.pendingDipTaskMap.values()) { for (FormalTestManager.PendingDipTask task : FormalTestManager.pendingDipTaskMap.values()) {
if (task.getRemainingCount() <= 0) { PqFreqConverterTestRes testRes = pqFreqConverterTestResService.getByDipId(suffix, task.getDipId());
if (Objects.isNull(testRes)) {
finishedDipIdList.add(task.getDipId()); finishedDipIdList.add(task.getDipId());
continue; continue;
} }
PqFreqConverterTestRes testRes = pqFreqConverterTestResService.getByDipId(suffix, task.getDipId()); testRes.setEndTime(freqConverterStatus.getTimestamp().isAfter(task.getTargetEndTime())
testRes.setEndTime(freqConverterStatus.getTimestamp()); ? freqConverterStatus.getTimestamp()
: task.getTargetEndTime());
testRes.setTolerant(testRes.getTolerant() && (freqConverterStatus.getStatusWord1() != freqConverterConfig.getNoTolerant())); testRes.setTolerant(testRes.getTolerant() && (freqConverterStatus.getStatusWord1() != freqConverterConfig.getNoTolerant()));
testResList.add(testRes); testResList.add(testRes);
task.decrementRemainingCount(); if (freqConverterStatus.getTimestamp().isAfter(task.getTargetEndTime())) {
if (task.getRemainingCount() <= 0) {
finishedDipIdList.add(task.getDipId()); finishedDipIdList.add(task.getDipId());
} }
} }
pqFreqConverterTestResService.saveTestRes(suffix, testResList); pqFreqConverterTestResService.saveOrUpdateTestRes(suffix, testResList);
for (String dipId : finishedDipIdList) { for (String dipId : finishedDipIdList) {
FormalTestManager.pendingDipTaskMap.remove(dipId); FormalTestManager.pendingDipTaskMap.remove(dipId);

View File

@@ -229,18 +229,14 @@ public class FormalTestManager {
public static class PendingDipTask { public static class PendingDipTask {
private final String dipId; private final String dipId;
private LocalDateTime startTime; private LocalDateTime startTime;
private LocalDateTime targetEndTime;
private Boolean originalTolerant; private Boolean originalTolerant;
private int remainingCount;
public PendingDipTask(String dipId, LocalDateTime startTime, Boolean originalTolerant, int remainingCount) { public PendingDipTask(String dipId, LocalDateTime startTime, LocalDateTime targetEndTime, Boolean originalTolerant) {
this.dipId = dipId; this.dipId = dipId;
this.startTime = startTime; this.startTime = startTime;
this.targetEndTime = targetEndTime;
this.originalTolerant = originalTolerant; this.originalTolerant = originalTolerant;
this.remainingCount = remainingCount;
}
public void decrementRemainingCount() {
this.remainingCount--;
} }
} }
} }

View File

@@ -25,7 +25,7 @@ public interface IPqFreqConverterTestResService extends IService<PqFreqConverter
* @param testResList 结果数据 * @param testResList 结果数据
* @return 是否成功 * @return 是否成功
*/ */
boolean saveTestRes(Integer suffix, List<PqFreqConverterTestRes> testResList); boolean saveOrUpdateTestRes(Integer suffix, List<PqFreqConverterTestRes> testResList);
/** /**
* 查询结果记录 * 查询结果记录

View File

@@ -25,7 +25,7 @@ public class PqFreqConverterTestResServiceImpl extends ServiceImpl<PqFreqConvert
} }
@Override @Override
public boolean saveTestRes(Integer suffix, List<PqFreqConverterTestRes> testResList) { public boolean saveOrUpdateTestRes(Integer suffix, List<PqFreqConverterTestRes> testResList) {
DynamicTableNameHandler.setTableName("pq_freq_converter_test_res_" + suffix); DynamicTableNameHandler.setTableName("pq_freq_converter_test_res_" + suffix);
List<PqFreqConverterTestRes> existedTestResList = new ArrayList<>(); List<PqFreqConverterTestRes> existedTestResList = new ArrayList<>();