修复同卡复核重复字段校验

This commit is contained in:
andy
2026-07-11 21:08:33 +08:00
parent 705f779b32
commit 25dfa33f45
5 changed files with 66 additions and 0 deletions

View File

@@ -807,9 +807,14 @@ public class ReservationTaskWorkflowServiceImpl implements ReservationTaskWorkfl
Map<String, ReservationTaskCardFieldDefinition> definitionByPath = new LinkedHashMap<>();
activeDefinitions.forEach(definition -> definitionByPath.put(definition.fieldPath(), definition));
List<ManualReviewResolutionFieldOverrideResult> results = new ArrayList<>();
Set<String> seenPointers = new LinkedHashSet<>();
Set<String> seenFieldPaths = new LinkedHashSet<>();
for (ManualReviewResolutionFieldOverrideRequest request : requests) {
String fieldPointer = trimToNull(request == null ? null : request.fieldPointer());
ReservationTaskCardFieldDefinition definition = findEditableDefinitionByPointer(definitionByPath, fieldPointer);
if (!seenPointers.add(fieldPointer) || !seenFieldPaths.add(definition.fieldPath())) {
throw reviewPointerDuplicateError(fieldPointer, definition.fieldPath());
}
results.add(new ManualReviewResolutionFieldOverrideResult(
fieldPointer,
definition.fieldPath(),
@@ -818,6 +823,17 @@ public class ReservationTaskWorkflowServiceImpl implements ReservationTaskWorkfl
return results;
}
/**
* 构建重复复核字段错误,避免 confirmed payload 后值覆盖前值但审计保留多条冲突记录。
*/
private ReservationTaskWorkflowException reviewPointerDuplicateError(String fieldPointer, String fieldPath) {
return new ReservationTaskWorkflowException(
HttpStatus.BAD_REQUEST,
"TASK_REVIEW_POINTER_DUPLICATE",
"复核字段指针重复。",
List.of(fieldPointer + ": 重复指向字段 " + fieldPath + ""));
}
/**
* 复核 pointer 白名单使用当前卡型的可编辑字段全集;展示条件由合并后的 activeDefinitions 再兜底校验。
*/