作废链接和取消订单
This commit is contained in:
@@ -617,6 +617,10 @@ func (s *DeliveryService) GetOrCreateDeliveryLink(merchantID uint, orderNo, requ
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// 订单已取消后禁止获取发货链接(含复用未过期链接的路径),与 authorizeDeliveryLink 保持一致。
|
||||
if normalizeOrderStatus(order) == model.OrderStatusCancelled {
|
||||
return nil, newDeliveryHTTPError(http.StatusBadRequest, "订单已取消,无法获取发货链接")
|
||||
}
|
||||
now := time.Now().UTC()
|
||||
if order.DeliveryLinkRevokedAt != nil {
|
||||
return nil, newDeliveryHTTPError(http.StatusForbidden, "发货链接已作废")
|
||||
@@ -643,7 +647,7 @@ func (s *DeliveryService) GetOrCreateDeliveryLink(merchantID uint, orderNo, requ
|
||||
return s.buildDeliveryLinkResult(order.OrderNo, expiresAt, requestBaseURL), nil
|
||||
}
|
||||
|
||||
func (s *DeliveryService) RevokeDeliveryLink(merchantID uint, orderNo string) error {
|
||||
func (s *DeliveryService) RevokeDeliveryLink(merchantID, actorUserID uint, orderNo string) error {
|
||||
orderNo = strings.TrimSpace(orderNo)
|
||||
if orderNo == "" {
|
||||
return errors.New("订单号不能为空")
|
||||
@@ -653,14 +657,21 @@ func (s *DeliveryService) RevokeDeliveryLink(merchantID uint, orderNo string) er
|
||||
return err
|
||||
}
|
||||
now := time.Now().UTC().Truncate(time.Second)
|
||||
return s.fulfillment.db.Model(&model.FulfillmentOrder{}).
|
||||
Where("id = ?", order.ID).
|
||||
Updates(map[string]interface{}{
|
||||
"delivery_link_revoked_at": now,
|
||||
}).Error
|
||||
return s.fulfillment.db.Transaction(func(tx *gorm.DB) error {
|
||||
if err := tx.Model(&model.FulfillmentOrder{}).
|
||||
Where("id = ?", order.ID).
|
||||
Updates(map[string]interface{}{
|
||||
"delivery_link_revoked_at": now,
|
||||
}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return writeAudit(tx, &merchantID, optionalUint(actorUserID), nil, "delivery_link.revoke", "fulfillment_order", order.OrderNo, map[string]interface{}{
|
||||
"revoked_at": timeutil.FormatAPITime(now),
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func (s *DeliveryService) RestoreDeliveryLink(merchantID uint, orderNo, requestBaseURL string) (*DeliveryLinkResult, error) {
|
||||
func (s *DeliveryService) RestoreDeliveryLink(merchantID, actorUserID uint, orderNo, requestBaseURL string) (*DeliveryLinkResult, error) {
|
||||
orderNo = strings.TrimSpace(orderNo)
|
||||
if orderNo == "" {
|
||||
return nil, errors.New("订单号不能为空")
|
||||
@@ -680,12 +691,19 @@ func (s *DeliveryService) RestoreDeliveryLink(merchantID uint, orderNo, requestB
|
||||
if order.DeliveryLinkExpiresAt != nil && expiresAt.Equal(order.DeliveryLinkExpiresAt.UTC().Truncate(time.Second)) {
|
||||
expiresAt = expiresAt.Add(time.Second)
|
||||
}
|
||||
if err := s.fulfillment.db.Model(&model.FulfillmentOrder{}).
|
||||
Where("id = ?", order.ID).
|
||||
Updates(map[string]interface{}{
|
||||
"delivery_link_expires_at": expiresAt,
|
||||
"delivery_link_revoked_at": nil,
|
||||
}).Error; err != nil {
|
||||
if err := s.fulfillment.db.Transaction(func(tx *gorm.DB) error {
|
||||
if err := tx.Model(&model.FulfillmentOrder{}).
|
||||
Where("id = ?", order.ID).
|
||||
Updates(map[string]interface{}{
|
||||
"delivery_link_expires_at": expiresAt,
|
||||
"delivery_link_revoked_at": nil,
|
||||
}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return writeAudit(tx, &merchantID, optionalUint(actorUserID), nil, "delivery_link.restore", "fulfillment_order", order.OrderNo, map[string]interface{}{
|
||||
"expires_at": timeutil.FormatAPITime(expiresAt),
|
||||
})
|
||||
}); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return s.buildDeliveryLinkResult(order.OrderNo, expiresAt, requestBaseURL), nil
|
||||
|
||||
Reference in New Issue
Block a user