关于时间精度调整

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) {
Integer suffix = FormalTestManager.freqConverterTableSuffix;
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));
boolean originalTolerant = lastStatusData.getStatusWord1() != freqConverterConfig.getNoTolerant();
LocalDateTime targetEndTime = pqDipData.getStartTime()
.plusNanos(pqDipData.getDurationMs() * 1000_000L)
.plusNanos(freqConverterConfig.getDt() * 1000_000L);
if (CollUtil.isNotEmpty(statusList)) {
FreqConverterStatus status = statusList.get(statusList.size() - 1);
@@ -301,13 +308,25 @@ public class SocketFreqConverterDevService {
testRes.setTolerant(originalTolerant ? status.getStatusWord1() != freqConverterConfig.getNoTolerant() : false);
testRes.setStartTime(lastStatusData.getTimestamp());
int collectCount = (int) Math.ceil((freqConverterConfig.getDt()) / freqConverterConfig.getSchedulePeriod());
if (collectCount > 0) {
FormalTestManager.pendingDipTaskMap.put(pqDipData.getId(), new FormalTestManager.PendingDipTask(pqDipData.getId(), pqDipData.getStartTime(), originalTolerant, collectCount));
} else {
testRes.setEndTime(status.getTimestamp());
}
pqFreqConverterTestResService.saveTestRes(suffix, Collections.singletonList(testRes));
FormalTestManager.pendingDipTaskMap.put(pqDipData.getId(), new FormalTestManager.PendingDipTask(
pqDipData.getId(),
pqDipData.getStartTime(),
targetEndTime,
originalTolerant
));
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 {
// FormalTestManager.stopFlag = false;
// }
freqConverterService.saveFreqConverterStatus(FormalTestManager.freqConverterTableSuffix, freqConverterStatus);
this.consumePendingDipTasks(freqConverterStatus);
freqConverterService.saveFreqConverterStatus(FormalTestManager.freqConverterTableSuffix, freqConverterStatus);
}
private void handleCloseSerial(String converterChannelTag, FreqConverterRespDTO respDTO) {
@@ -257,22 +257,23 @@ public class SocketFreqConverterService {
List<String> finishedDipIdList = new ArrayList<>();
List<PqFreqConverterTestRes> testResList = new ArrayList<>();
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());
continue;
}
PqFreqConverterTestRes testRes = pqFreqConverterTestResService.getByDipId(suffix, task.getDipId());
testRes.setEndTime(freqConverterStatus.getTimestamp());
testRes.setEndTime(freqConverterStatus.getTimestamp().isAfter(task.getTargetEndTime())
? freqConverterStatus.getTimestamp()
: task.getTargetEndTime());
testRes.setTolerant(testRes.getTolerant() && (freqConverterStatus.getStatusWord1() != freqConverterConfig.getNoTolerant()));
testResList.add(testRes);
task.decrementRemainingCount();
if (task.getRemainingCount() <= 0) {
if (freqConverterStatus.getTimestamp().isAfter(task.getTargetEndTime())) {
finishedDipIdList.add(task.getDipId());
}
}
pqFreqConverterTestResService.saveTestRes(suffix, testResList);
pqFreqConverterTestResService.saveOrUpdateTestRes(suffix, testResList);
for (String dipId : finishedDipIdList) {
FormalTestManager.pendingDipTaskMap.remove(dipId);

View File

@@ -229,18 +229,14 @@ public class FormalTestManager {
public static class PendingDipTask {
private final String dipId;
private LocalDateTime startTime;
private LocalDateTime targetEndTime;
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.startTime = startTime;
this.targetEndTime = targetEndTime;
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 结果数据
* @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
public boolean saveTestRes(Integer suffix, List<PqFreqConverterTestRes> testResList) {
public boolean saveOrUpdateTestRes(Integer suffix, List<PqFreqConverterTestRes> testResList) {
DynamicTableNameHandler.setTableName("pq_freq_converter_test_res_" + suffix);
List<PqFreqConverterTestRes> existedTestResList = new ArrayList<>();