修复商城订单列表展示与模拟数据

This commit is contained in:
czl231
2026-08-16 00:47:35 +08:00
parent 26cd78ac12
commit 2942d9a71c
7 changed files with 238 additions and 7 deletions

View File

@@ -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{}).