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