统一订单单状态模型
This commit is contained in:
@@ -242,8 +242,9 @@ func (s *DeliveryService) submit(orderNo, gameAccount, bindUUID string, apiClien
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if order.FulfillmentStatus == model.FulfillmentStatusProcessing ||
|
||||
order.FulfillmentStatus == model.FulfillmentStatusSucceeded ||
|
||||
orderStatus := normalizeOrderStatus(order)
|
||||
if orderStatus == model.OrderStatusDelivering ||
|
||||
orderStatus == model.OrderStatusDelivered ||
|
||||
strings.TrimSpace(order.ProviderOrderNo) != "" ||
|
||||
strings.Contains(order.ResultData, "\"queue_order_id\"") {
|
||||
if existing := buildExistingDeliverySubmitResult(order); existing != nil {
|
||||
@@ -311,7 +312,7 @@ func (s *DeliveryService) submit(orderNo, gameAccount, bindUUID string, apiClien
|
||||
MerchantID: order.MerchantID,
|
||||
APIClientID: apiClientID,
|
||||
OrderNo: order.OrderNo,
|
||||
Status: "processing",
|
||||
Status: model.OrderStatusDelivering,
|
||||
ProviderOrderNo: providerOrderNo,
|
||||
ResultData: resultData,
|
||||
})
|
||||
@@ -320,7 +321,7 @@ func (s *DeliveryService) submit(orderNo, gameAccount, bindUUID string, apiClien
|
||||
}
|
||||
return &DeliverySubmitResult{
|
||||
OrderNo: updated.OrderNo,
|
||||
Status: updated.FulfillmentStatus,
|
||||
Status: normalizeOrderStatus(updated),
|
||||
Message: "已提交上游发货,等待发货结果回传",
|
||||
ProviderOrderNo: providerOrderNo,
|
||||
GameAccount: boundAccount,
|
||||
@@ -341,11 +342,12 @@ func (s *DeliveryService) claimDeliverySubmission(merchantID, apiClientID uint,
|
||||
}
|
||||
return err
|
||||
}
|
||||
if order.FulfillmentStatus == model.FulfillmentStatusProcessing || order.FulfillmentStatus == model.FulfillmentStatusSucceeded {
|
||||
orderStatus := normalizeOrderStatus(&order)
|
||||
if orderStatus == model.OrderStatusDelivering || orderStatus == model.OrderStatusDelivered {
|
||||
updated = order
|
||||
return nil
|
||||
}
|
||||
if err := validateFulfillmentTransition(&order, model.FulfillmentStatusProcessing, fulfillmentTransitionUpdate); err != nil {
|
||||
if err := validateOrderStatusTransition(&order, model.OrderStatusDelivering, fulfillmentTransitionUpdate); err != nil {
|
||||
return newDeliveryHTTPError(http.StatusConflict, "订单暂不可发货")
|
||||
}
|
||||
raw, _ := json.Marshal(map[string]interface{}{
|
||||
@@ -354,9 +356,9 @@ func (s *DeliveryService) claimDeliverySubmission(merchantID, apiClientID uint,
|
||||
"provider_order_stage": "claimed",
|
||||
})
|
||||
if err := tx.Model(&order).Updates(map[string]interface{}{
|
||||
"fulfillment_status": model.FulfillmentStatusProcessing,
|
||||
"result_data": string(raw),
|
||||
"failure_reason": "",
|
||||
"order_status": model.OrderStatusDelivering,
|
||||
"result_data": string(raw),
|
||||
"failure_reason": "",
|
||||
}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -389,7 +391,7 @@ func (s *DeliveryService) markDeliverySubmissionFailed(order *model.FulfillmentO
|
||||
MerchantID: order.MerchantID,
|
||||
APIClientID: apiClientID,
|
||||
OrderNo: order.OrderNo,
|
||||
Status: model.FulfillmentStatusFailed,
|
||||
Status: model.OrderStatusShipFailed,
|
||||
FailureReason: reason,
|
||||
ResultData: map[string]interface{}{
|
||||
"source": "delivery_proxy",
|
||||
@@ -492,8 +494,8 @@ func buildExistingDeliverySubmitResult(order *model.FulfillmentOrder) *DeliveryS
|
||||
if order == nil {
|
||||
return nil
|
||||
}
|
||||
switch order.FulfillmentStatus {
|
||||
case model.FulfillmentStatusProcessing, model.FulfillmentStatusSucceeded:
|
||||
switch normalizeOrderStatus(order) {
|
||||
case model.OrderStatusDelivering, model.OrderStatusDelivered:
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
@@ -506,12 +508,13 @@ func buildExistingDeliverySubmitResult(order *model.FulfillmentOrder) *DeliveryS
|
||||
stringFromMap(resultData, "provider_order_no"),
|
||||
)
|
||||
message := "订单暂时正在履约中,请稍后查询"
|
||||
if order.FulfillmentStatus == model.FulfillmentStatusSucceeded {
|
||||
status := normalizeOrderStatus(order)
|
||||
if status == model.OrderStatusDelivered {
|
||||
message = "订单已履约成功"
|
||||
}
|
||||
return &DeliverySubmitResult{
|
||||
OrderNo: order.OrderNo,
|
||||
Status: order.FulfillmentStatus,
|
||||
Status: status,
|
||||
Message: message,
|
||||
ProviderOrderNo: providerOrderNo,
|
||||
UpstreamOrder: resultData,
|
||||
|
||||
Reference in New Issue
Block a user