feat: 采购详情展示 PDD 核单结果 (#125)
This commit is contained in:
@@ -345,6 +345,14 @@ type TaskDetailView struct {
|
||||
QuantityText string
|
||||
PriceLimitText string
|
||||
|
||||
// PDD 核单结果只在采购任务详情显示。付款状态是 Client 核单上报时的快照,
|
||||
// 不是 Admin 对 PDD 的实时查询结果。
|
||||
HasPddOrder bool
|
||||
PddOrderNo string
|
||||
PddOrderedAt string
|
||||
PddPaymentStatusText string
|
||||
PddOrderResultText string
|
||||
|
||||
HasError bool
|
||||
ErrorCode string
|
||||
ErrorMessage string
|
||||
@@ -377,6 +385,7 @@ func GetTaskDetail(db *sql.DB, taskID string) (*TaskDetailView, error) {
|
||||
v.SpecText = specText(t.PddOptions)
|
||||
v.QuantityText = quantityText(t.Quantity)
|
||||
v.PriceLimitText = priceLimitText(t.MaxPriceCent)
|
||||
setPddOrderResult(v, *t)
|
||||
}
|
||||
|
||||
if t.ErrorCode != "" || t.ErrorMessage != "" {
|
||||
@@ -392,6 +401,61 @@ func GetTaskDetail(db *sql.DB, taskID string) (*TaskDetailView, error) {
|
||||
return v, nil
|
||||
}
|
||||
|
||||
// purchaseResult 只声明详情页需要展示的字段,避免把 Client 的完整结果结构
|
||||
// 复制到 Admin。其余原始字段仍保存在 result_data 并可在详情底部展开查看。
|
||||
type purchaseResult struct {
|
||||
Purchase *struct {
|
||||
OrderNo string `json:"order_no"`
|
||||
OrderedAt string `json:"ordered_at"`
|
||||
PaymentStatus string `json:"payment_status"`
|
||||
MatchStatus string `json:"match_status"`
|
||||
OrderSubmitted bool `json:"order_submitted"`
|
||||
} `json:"purchase"`
|
||||
}
|
||||
|
||||
// setPddOrderResult 把采购结果翻成模板可直接显示的文字。
|
||||
// 解析失败只影响结构化摘要,不能阻止详情页打开,也不能隐藏原始 result_data。
|
||||
func setPddOrderResult(v *TaskDetailView, task model.Task) {
|
||||
raw := strings.TrimSpace(task.ResultData)
|
||||
if raw == "" {
|
||||
switch task.Status {
|
||||
case model.TaskManualReview:
|
||||
v.PddOrderResultText = "订单结果不确定,请结合错误信息人工核对。"
|
||||
case model.TaskFailed, model.TaskCancelled:
|
||||
v.PddOrderResultText = "任务未产生可展示的 PDD 核单结果。"
|
||||
default:
|
||||
v.PddOrderResultText = "等待 Client 核单上报。"
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
var result purchaseResult
|
||||
if err := json.Unmarshal([]byte(raw), &result); err != nil || result.Purchase == nil {
|
||||
v.PddOrderResultText = "采购结果格式异常,请展开完整结果进行诊断。"
|
||||
return
|
||||
}
|
||||
p := result.Purchase
|
||||
if p.MatchStatus != "matched" || !p.OrderSubmitted {
|
||||
v.PddOrderResultText = "本次结果没有已匹配的 PDD 订单。"
|
||||
return
|
||||
}
|
||||
if strings.TrimSpace(p.OrderNo) == "" || p.PaymentStatus != "unpaid" {
|
||||
v.PddOrderResultText = "采购结果格式异常,请展开完整结果进行诊断。"
|
||||
return
|
||||
}
|
||||
orderedAt, ok := model.ParseISO(strings.TrimSpace(p.OrderedAt))
|
||||
if !ok {
|
||||
v.PddOrderResultText = "采购结果中的下单时间格式异常,请展开完整结果进行诊断。"
|
||||
return
|
||||
}
|
||||
|
||||
v.HasPddOrder = true
|
||||
v.PddOrderNo = strings.TrimSpace(p.OrderNo)
|
||||
v.PddOrderedAt = orderedAt.Local().Format("2006-01-02 15:04")
|
||||
v.PddPaymentStatusText = "未付款(Client 上报时)"
|
||||
v.PddOrderResultText = "Admin 不会查询 PDD 实时付款状态。"
|
||||
}
|
||||
|
||||
func orPlaceholder(s string) string {
|
||||
if s == "" {
|
||||
return placeholder
|
||||
|
||||
Reference in New Issue
Block a user