修复V4 Trace确认态字段刷新

This commit is contained in:
andy
2026-07-21 19:31:05 +07:00
parent 6e97778633
commit 350bb3310b
2 changed files with 205 additions and 2 deletions

View File

@@ -20,6 +20,7 @@ import cn.nianxx.thhotel.workflows.reservation.common.enums.ReservationV4Notific
import cn.nianxx.thhotel.workflows.reservation.common.enums.ReservationV4OrderTaskStatus;
import cn.nianxx.thhotel.workflows.reservation.common.enums.ReservationV4ReadonlyReasonCode;
import cn.nianxx.thhotel.workflows.reservation.common.enums.ReservationV4WorkbenchItemType;
import cn.nianxx.thhotel.workflows.reservation.common.enums.ReservationReviewStatus;
import cn.nianxx.thhotel.workflows.reservation.common.request.ReservationV4OrderTaskQueryRequest;
import cn.nianxx.thhotel.workflows.reservation.common.request.ReservationV4SourceNotificationQueryRequest;
import cn.nianxx.thhotel.workflows.reservation.common.request.ReservationV4WorkbenchQueryRequest;
@@ -426,6 +427,8 @@ public class ReservationV4QueryServiceImpl implements ReservationV4QueryService
JsonNode reviewResolution = parseJson(card.reviewResolutionJson());
JsonNode validationErrors = parseJson(card.validationErrorsJson());
ReservationV4ActionAvailabilityResult availability = cardAvailability(card, orderAvailability, basicCard);
JsonNode responseValidationErrors = validationErrorsForCardResponse(card, confirmedPayload, validationErrors);
JsonNode fieldsPayload = fieldsPayloadForCard(card, displayPayload, confirmedPayload);
return new ReservationV4TaskCardResult(
card.id().toString(),
card.cardType(),
@@ -437,8 +440,8 @@ public class ReservationV4QueryServiceImpl implements ReservationV4QueryService
displayPayload,
confirmedPayload,
reviewResolution,
validationErrors,
cardFields(card, displayPayload, validationErrors, availability),
responseValidationErrors,
cardFields(card, fieldsPayload, responseValidationErrors, availability),
card.confirmedBy(),
UtcTimeFormatter.toUtcOffsetDateTime(card.confirmedAt()),
card.version(),
@@ -447,6 +450,49 @@ public class ReservationV4QueryServiceImpl implements ReservationV4QueryService
availability);
}
/**
* 选择字段展示的数据源Trace 确认后以用户确认快照为准,避免刷新时回到 AI 原始建议。
*/
private JsonNode fieldsPayloadForCard(
ReservationV4TaskCardSnapshot card,
JsonNode displayPayload,
JsonNode confirmedPayload) {
if (shouldUseTraceConfirmedPayload(card, confirmedPayload)) {
return confirmedPayload;
}
return displayPayload;
}
/**
* 选择响应校验错误Trace 确认或复核成功后旧入站错误已经被解消,前端不再展示。
*/
private JsonNode validationErrorsForCardResponse(
ReservationV4TaskCardSnapshot card,
JsonNode confirmedPayload,
JsonNode validationErrors) {
if (shouldUseTraceConfirmedPayload(card, confirmedPayload)) {
return objectMapper.createArrayNode();
}
return validationErrors;
}
/**
* 判断 Trace 卡是否已经有可用于刷新字段展示的安全确认快照。
*/
private boolean shouldUseTraceConfirmedPayload(ReservationV4TaskCardSnapshot card, JsonNode confirmedPayload) {
if (!ReservationV4CardType.TRACE_RESERVATION_NOTES.name().equals(card.cardType())) {
return false;
}
if (confirmedPayload == null || confirmedPayload.isNull() || confirmedPayload.isMissingNode()) {
return false;
}
if (!confirmedPayload.path("trace_items").isArray()) {
return false;
}
return ReservationV4CardStatus.CONFIRMED.name().equals(card.cardStatus())
|| ReservationReviewStatus.RESOLVED.name().equals(card.reviewStatus());
}
/**
* 生成卡片安全展示 payloadRoom Information 卡在这里补稳定业务展示模型。
*/