feat(t219): show pending-payment reconciliation

This commit is contained in:
QiuSW
2026-07-28 18:16:09 +08:00
parent c2ec98d5be
commit 78dc595815
20 changed files with 768 additions and 37 deletions
@@ -280,9 +280,91 @@ func taskFromDetail(detail domain.TaskDetail) Task {
orderAuthorizationFrom(authorization),
)
}
for _, submission := range detail.OrderSubmissions {
task.OrderSubmissions = append(
task.OrderSubmissions,
orderSubmissionFrom(submission),
)
}
return task
}
func orderSubmissionFrom(
submission domain.OrderSubmission,
) OrderSubmission {
unitPrice := submission.ExpectedUnitPriceCents
totalPrice := submission.ExpectedTotalPriceCents
result := OrderSubmission{
ID: submission.ID,
Status: string(submission.Status),
StatusLabel: orderSubmissionStatusLabel(submission.Status),
ExpectedTitle: submission.ExpectedTitle,
ExpectedSKU: submission.ExpectedSKU,
ExpectedQuantity: submission.ExpectedQuantity,
ExpectedUnitPrice: *domain.FormatOptionalCNY(&unitPrice),
ExpectedTotalPrice: *domain.FormatOptionalCNY(&totalPrice),
FencedAt: submission.FencedAt,
}
if submission.PlatformOrderNo != nil {
result.PlatformOrderNo = *submission.PlatformOrderNo
}
if submission.PlatformOrderedAt != nil {
result.PlatformOrderedAt = *submission.PlatformOrderedAt
}
if submission.PlatformOrderStatus != nil {
result.PlatformOrderStatus = *submission.PlatformOrderStatus
}
if submission.ReconciliationEvidenceAssetID != nil {
result.EvidenceContentURL = "/api/v1/tasks/" +
submission.TaskID + "/evidence/" +
*submission.ReconciliationEvidenceAssetID + "/content"
}
if submission.ManualReasonCode != nil {
result.ManualReasonLabel = orderSubmissionManualReasonLabel(
*submission.ManualReasonCode,
)
}
if submission.ReconciledAt != nil {
result.ReconciledAt = *submission.ReconciledAt
}
if submission.ManualReviewAt != nil {
result.ManualReviewAt = *submission.ManualReviewAt
}
return result
}
func orderSubmissionStatusLabel(status domain.OrderSubmissionStatus) string {
switch status {
case domain.OrderSubmissionFenced:
return "正在对账"
case domain.OrderSubmissionManualReview:
return "需要人工对账"
case domain.OrderSubmissionReconciled:
return "待人工确认付款"
default:
return "未知状态"
}
}
func orderSubmissionManualReasonLabel(code string) string {
switch code {
case "ORDER_NOT_FOUND":
return "未找到符合条件的新订单"
case "ORDER_AMBIGUOUS":
return "找到多个可能订单"
case "ORDER_FIELDS_INCOMPLETE":
return "订单字段不完整"
case "ORDER_PAGE_UNKNOWN":
return "订单页面无法确认"
case "RISK_OR_PAYMENT_BOUNDARY":
return "遇到风控或付款边界"
case "EVIDENCE_UNAVAILABLE":
return "无法取得对账证据"
default:
return "订单需要人工核对"
}
}
func orderAuthorizationFrom(
authorization domain.OrderAuthorization,
) OrderAuthorization {