修复套餐快照集成测试与自动购包幂等

This commit is contained in:
2026-07-23 12:23:52 +09:00
parent 2df44d8e3c
commit 992757c056
8 changed files with 33 additions and 23 deletions

View File

@@ -462,6 +462,10 @@ func (h *AutoPurchaseHandler) activatePackages(
} else {
return errors.New("无效的订单载体")
}
// 在查询既有记录前锁定载体,避免并发任务同时判定不存在而重复创建套餐使用记录。
if err := h.lockPackageCarrier(ctx, tx, carrierType, carrierID); err != nil {
return err
}
for _, pkg := range packages {
var existingUsage model.PackageUsage

View File

@@ -1,8 +1,5 @@
package task
// testIDMask 用于将纳秒时间戳截断为合法的 uint 主键范围,仅限测试用。
const testIDMask = testIDMask
import (
"context"
"strconv"
@@ -17,6 +14,9 @@ import (
"gorm.io/gorm"
)
// testIDMask 用于将纳秒时间戳截断为合法的 uint 主键范围,仅限测试用。
const testIDMask = 0x7fffffff
// TestAutoPurchasePersistsTermsSnapshotsAndRealnameDecision 验证自动购包复用快照并遵守实名起算规则。
func TestAutoPurchasePersistsTermsSnapshotsAndRealnameDecision(t *testing.T) {
testCases := []struct {
@@ -192,4 +192,3 @@ func newAutoPurchaseOrder(cardID uint, sellerShopID *uint) *model.Order {
orderID := uint(time.Now().UnixNano() & testIDMask)
return &model.Order{Model: gorm.Model{ID: orderID}, OrderNo: "UR55-AUTO-" + strconv.FormatUint(uint64(orderID), 10), OrderType: model.OrderTypeSingleCard, IotCardID: &cardID, SellerShopID: sellerShopID, TotalAmount: 100, Generation: 1}
}