修复商城订单列表展示与模拟数据
This commit is contained in:
@@ -311,13 +311,17 @@ func MockData(database *gorm.DB) error {
|
||||
}
|
||||
|
||||
ecOrder := models.EcOrder{
|
||||
Entity: entity(30, common.StatusEnable), OrderStatus: common.StatusPaid, OrderNo: "MOCK-ECORDER-001",
|
||||
Entity: entity(30, common.StatusEnable), OrderStatus: mockEcOrderPaidStatus(), OrderNo: "MOCK-ECORDER-001",
|
||||
UserAccountID: user.ID, GasStationID: gas.ID, DeliveryPointID: delivery.ID,
|
||||
TotalAmount: ecProduct.PriceAmount,
|
||||
ProductAmount: ecProduct.PriceAmount, PayableAmount: ecProduct.PriceAmount,
|
||||
TotalAmount: ecProduct.PriceAmount, PaidAt: &now,
|
||||
}
|
||||
if err := put(tx, &ecOrder); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := repairMockEcOrder(tx, ecOrder, mockEcOrderPaidStatus(), ecProduct.PriceAmount, &now); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
ecOrderItem := models.EcOrderItem{
|
||||
Entity: entity(31, common.StatusEnable), EcOrderID: ecOrder.ID, EcProductID: ecProduct.ID,
|
||||
@@ -723,13 +727,18 @@ func seedAdditionalCoreScenarios(database *gorm.DB, passwordHash string, now tim
|
||||
}
|
||||
|
||||
ecOrder := models.EcOrder{
|
||||
Entity: entity(sequence+16, common.StatusEnable), OrderStatus: common.StatusPending,
|
||||
Entity: entity(sequence+16, common.StatusEnable), OrderStatus: mockEcOrderPendingStatus(),
|
||||
OrderNo: "MOCK-ECORDER-" + suffix, UserAccountID: user.ID,
|
||||
GasStationID: gas.ID, DeliveryPointID: delivery.ID, TotalAmount: ecProduct.PriceAmount,
|
||||
GasStationID: gas.ID, DeliveryPointID: delivery.ID,
|
||||
ProductAmount: ecProduct.PriceAmount, PayableAmount: ecProduct.PriceAmount,
|
||||
TotalAmount: ecProduct.PriceAmount,
|
||||
}
|
||||
if err := put(database, &ecOrder); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := repairMockEcOrder(database, ecOrder, mockEcOrderPendingStatus(), ecProduct.PriceAmount, nil); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
wallet := models.WalletBasic{
|
||||
Entity: entity(sequence+17, common.StatusEnable), OwnerType: "user", OwnerID: user.ID,
|
||||
@@ -767,6 +776,76 @@ func mockGasorderInitialStatus() int {
|
||||
return common.StatusCreated
|
||||
}
|
||||
|
||||
// Mock 商城订单使用商城交易状态,不复用其他领域含义相近的通用状态。
|
||||
func mockEcOrderPendingStatus() int { return 16 }
|
||||
func mockEcOrderPaidStatus() int { return 18 }
|
||||
|
||||
// repairMockEcOrder 幂等修复固定 Mock 商城订单的状态、金额与支付时间。
|
||||
func repairMockEcOrder(database *gorm.DB, order models.EcOrder, status int, amount int64, paidAt *time.Time) error {
|
||||
result := database.Model(&models.EcOrder{}).
|
||||
Where("identity = ? AND order_no LIKE ?", order.Identity, "MOCK-ECORDER-%").
|
||||
Updates(map[string]any{
|
||||
"order_status": status, "product_amount": amount, "payable_amount": amount,
|
||||
"total_amount": amount, "paid_at": paidAt,
|
||||
})
|
||||
if result.Error != nil {
|
||||
return fmt.Errorf("repair mock ec order: %w", result.Error)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type mockEcOrderRepairSpec struct {
|
||||
identity string
|
||||
orderNo string
|
||||
status int
|
||||
amount int64
|
||||
paidAt *time.Time
|
||||
}
|
||||
|
||||
// mockEcOrderRepairSpecs 返回固定 Mock 商城订单的文档化交易状态与金额。
|
||||
func mockEcOrderRepairSpecs() []mockEcOrderRepairSpec {
|
||||
paidAt := time.Date(2026, time.July, 1, 9, 0, 0, 0, time.Local)
|
||||
specs := []mockEcOrderRepairSpec{{
|
||||
identity: entity(30, common.StatusEnable).Identity,
|
||||
orderNo: "MOCK-ECORDER-001",
|
||||
status: mockEcOrderPaidStatus(),
|
||||
amount: 10300,
|
||||
paidAt: &paidAt,
|
||||
}}
|
||||
for scenario := 2; scenario <= 10; scenario++ {
|
||||
sequence := 1000 + scenario*100
|
||||
specs = append(specs, mockEcOrderRepairSpec{
|
||||
identity: entity(sequence+16, common.StatusEnable).Identity,
|
||||
orderNo: fmt.Sprintf("MOCK-ECORDER-%03d", scenario),
|
||||
status: mockEcOrderPendingStatus(),
|
||||
amount: int64(9500 + scenario*100),
|
||||
})
|
||||
}
|
||||
return specs
|
||||
}
|
||||
|
||||
// RepairMockEcOrders 仅修复固定 Mock 商城订单,不触发其他模拟资源写入。
|
||||
func RepairMockEcOrders(database *gorm.DB) (int64, error) {
|
||||
var repaired int64
|
||||
err := database.Transaction(func(tx *gorm.DB) error {
|
||||
for _, spec := range mockEcOrderRepairSpecs() {
|
||||
result := tx.Model(&models.EcOrder{}).
|
||||
Where("identity = ? AND order_no = ?", spec.identity, spec.orderNo).
|
||||
Updates(map[string]any{
|
||||
"order_status": spec.status, "product_amount": spec.amount,
|
||||
"payable_amount": spec.amount, "total_amount": spec.amount,
|
||||
"paid_at": spec.paidAt,
|
||||
})
|
||||
if result.Error != nil {
|
||||
return fmt.Errorf("repair mock ec order %s: %w", spec.orderNo, result.Error)
|
||||
}
|
||||
repaired += result.RowsAffected
|
||||
}
|
||||
return nil
|
||||
})
|
||||
return repaired, err
|
||||
}
|
||||
|
||||
// repairMockGasorderInitialStatus 幂等修复历史种子数据中误写为“待处理”的 Mock 配送订单。
|
||||
func repairMockGasorderInitialStatus(database *gorm.DB, order models.GasorderBasic) error {
|
||||
result := database.Model(&models.GasorderBasic{}).
|
||||
|
||||
Reference in New Issue
Block a user