fix:人脸质量上报bug修改

This commit is contained in:
dzc committed 2026-09-30 10:10:15 +08:00
1 parent da167a46ef
commit aa3897a651
2 files changed
+28 -9

No files matched your search

@@ -30,4 +30,10 @@ public class SysUserFaceTerminalQualityReportVo {
* 请求时服务端已经不存在的样本编号,终端无需将其视为上报失败。
*/
private List<String> alreadyAbsentSampleIds;
/**
* 未审核通过或服务端编号异常而逐条拒收的样本编号;不影响同批其他样本,
* 终端保留待下次重试,样本审核通过后即可正常写入。
*/
private List<String> ignoredNotApprovedSampleIds;
}
@@ -477,19 +477,28 @@ public class SysUserFaceServiceImpl extends ServiceImpl<SysUserFaceMapper, SysUs
List<SysUserFaceVo> candidates = baseMapper.terminalQualityCandidates(
new ArrayList<>(itemBySampleId.keySet()));
boolean notApproved = candidates.stream()
.anyMatch(face -> !TaskCheckStatusEnum.RESULT.getCode().equals(face.getProcessStatus()));
if (notApproved) {
throw new RuntimeException("请求包含未审核通过的人脸");
}
// 逐条收集拒收样本而不是整批拒绝:终端调试全租户库可能混有待审核或
// 历史脏编号样本,一票否决会让整批(上限500条)永远无法上报成功。
Set<String> ignoredNotApprovedSampleIds = new LinkedHashSet<>();
LinkedHashMap<String, SysUserFaceVo> candidateBySampleId = new LinkedHashMap<>();
Set<String> candidateSampleIds = new HashSet<>();
for (SysUserFaceVo candidate : candidates) {
String sampleId = StrUtil.trim(candidate.getAutoCode());
if (candidate.getId() == null || StrUtil.isBlank(sampleId)
|| candidateBySampleId.putIfAbsent(sampleId, candidate) != null) {
throw new RuntimeException("服务端存在重复或无效人脸样本编号");
if (candidate.getId() == null || StrUtil.isBlank(sampleId)) {
continue;
}
if (candidateSampleIds.contains(sampleId)) {
// 服务端存在重复编号:同编号的候选都不可信,整组拒收待数据修复。
candidateBySampleId.remove(sampleId);
ignoredNotApprovedSampleIds.add(sampleId);
continue;
}
candidateSampleIds.add(sampleId);
if (!TaskCheckStatusEnum.RESULT.getCode().equals(candidate.getProcessStatus())) {
ignoredNotApprovedSampleIds.add(sampleId);
continue;
}
candidateBySampleId.put(sampleId, candidate);
}
// 不限制样本所属部门:生产终端经 V3 部门快照只持有本部门树人脸,跨部门样本仅出现在
@@ -500,6 +509,9 @@ public class SysUserFaceServiceImpl extends ServiceImpl<SysUserFaceMapper, SysUs
for (Map.Entry<String, SysUserFaceQualityReportItemDto> entry : itemBySampleId.entrySet()) {
String sampleId = entry.getKey();
SysUserFaceQualityReportItemDto item = entry.getValue();
if (ignoredNotApprovedSampleIds.contains(sampleId)) {
continue;
}
SysUserFaceVo candidate = candidateBySampleId.get(sampleId);
if (candidate == null) {
alreadyAbsentSampleIds.add(sampleId);
@@ -556,6 +568,7 @@ public class SysUserFaceServiceImpl extends ServiceImpl<SysUserFaceMapper, SysUs
.updatedSampleIds(updatedSampleIds)
.ignoredStaleSampleIds(ignoredStaleSampleIds)
.alreadyAbsentSampleIds(alreadyAbsentSampleIds)
.ignoredNotApprovedSampleIds(new ArrayList<>(ignoredNotApprovedSampleIds))
.build();
}