归档一次性佣金配置落库与累计触发修复,同步规范文档到主 specs
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m45s
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m45s
- 归档 fix-one-time-commission-config-and-accumulation 到 archive/2026-01-29-* - 同步 delta specs 到主规范(one-time-commission-trigger、commission-calculation) - 新增累计触发逻辑文档和测试用例 - 修复一次性佣金配置落库和累计充值更新逻辑
This commit is contained in:
@@ -194,10 +194,6 @@ func (s *Service) triggerOneTimeCommissionForCardInTx(ctx context.Context, tx *g
|
||||
return errors.Wrap(errors.CodeDatabaseError, err, "获取卡信息失败")
|
||||
}
|
||||
|
||||
if card.FirstCommissionPaid {
|
||||
return nil
|
||||
}
|
||||
|
||||
if card.SeriesAllocationID == nil {
|
||||
return nil
|
||||
}
|
||||
@@ -211,12 +207,25 @@ func (s *Service) triggerOneTimeCommissionForCardInTx(ctx context.Context, tx *g
|
||||
return nil
|
||||
}
|
||||
|
||||
if allocation.OneTimeCommissionTrigger == model.OneTimeCommissionTriggerAccumulatedRecharge {
|
||||
newAccumulated := card.AccumulatedRecharge + order.TotalAmount
|
||||
if err := tx.Model(&model.IotCard{}).Where("id = ?", cardID).
|
||||
Update("accumulated_recharge", newAccumulated).Error; err != nil {
|
||||
return errors.Wrap(errors.CodeDatabaseError, err, "更新卡累计充值金额失败")
|
||||
}
|
||||
card.AccumulatedRecharge = newAccumulated
|
||||
}
|
||||
|
||||
if card.FirstCommissionPaid {
|
||||
return nil
|
||||
}
|
||||
|
||||
var rechargeAmount int64
|
||||
switch allocation.OneTimeCommissionTrigger {
|
||||
case model.OneTimeCommissionTriggerSingleRecharge:
|
||||
rechargeAmount = order.TotalAmount
|
||||
case model.OneTimeCommissionTriggerAccumulatedRecharge:
|
||||
rechargeAmount = card.AccumulatedRecharge + order.TotalAmount
|
||||
rechargeAmount = card.AccumulatedRecharge
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
@@ -260,12 +269,9 @@ func (s *Service) triggerOneTimeCommissionForCardInTx(ctx context.Context, tx *g
|
||||
return errors.Wrap(errors.CodeInternalError, err, "一次性佣金入账失败")
|
||||
}
|
||||
|
||||
updates := map[string]any{"first_commission_paid": true}
|
||||
if allocation.OneTimeCommissionTrigger == model.OneTimeCommissionTriggerAccumulatedRecharge {
|
||||
updates["accumulated_recharge"] = rechargeAmount
|
||||
}
|
||||
if err := tx.Model(&model.IotCard{}).Where("id = ?", cardID).Updates(updates).Error; err != nil {
|
||||
return errors.Wrap(errors.CodeDatabaseError, err, "更新卡状态失败")
|
||||
if err := tx.Model(&model.IotCard{}).Where("id = ?", cardID).
|
||||
Update("first_commission_paid", true).Error; err != nil {
|
||||
return errors.Wrap(errors.CodeDatabaseError, err, "更新卡佣金发放状态失败")
|
||||
}
|
||||
|
||||
return nil
|
||||
@@ -283,10 +289,6 @@ func (s *Service) triggerOneTimeCommissionForDeviceInTx(ctx context.Context, tx
|
||||
return errors.Wrap(errors.CodeDatabaseError, err, "获取设备信息失败")
|
||||
}
|
||||
|
||||
if device.FirstCommissionPaid {
|
||||
return nil
|
||||
}
|
||||
|
||||
if device.SeriesAllocationID == nil {
|
||||
return nil
|
||||
}
|
||||
@@ -300,12 +302,25 @@ func (s *Service) triggerOneTimeCommissionForDeviceInTx(ctx context.Context, tx
|
||||
return nil
|
||||
}
|
||||
|
||||
if allocation.OneTimeCommissionTrigger == model.OneTimeCommissionTriggerAccumulatedRecharge {
|
||||
newAccumulated := device.AccumulatedRecharge + order.TotalAmount
|
||||
if err := tx.Model(&model.Device{}).Where("id = ?", deviceID).
|
||||
Update("accumulated_recharge", newAccumulated).Error; err != nil {
|
||||
return errors.Wrap(errors.CodeDatabaseError, err, "更新设备累计充值金额失败")
|
||||
}
|
||||
device.AccumulatedRecharge = newAccumulated
|
||||
}
|
||||
|
||||
if device.FirstCommissionPaid {
|
||||
return nil
|
||||
}
|
||||
|
||||
var rechargeAmount int64
|
||||
switch allocation.OneTimeCommissionTrigger {
|
||||
case model.OneTimeCommissionTriggerSingleRecharge:
|
||||
rechargeAmount = order.TotalAmount
|
||||
case model.OneTimeCommissionTriggerAccumulatedRecharge:
|
||||
rechargeAmount = device.AccumulatedRecharge + order.TotalAmount
|
||||
rechargeAmount = device.AccumulatedRecharge
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
@@ -349,12 +364,9 @@ func (s *Service) triggerOneTimeCommissionForDeviceInTx(ctx context.Context, tx
|
||||
return errors.Wrap(errors.CodeInternalError, err, "一次性佣金入账失败")
|
||||
}
|
||||
|
||||
updates := map[string]any{"first_commission_paid": true}
|
||||
if allocation.OneTimeCommissionTrigger == model.OneTimeCommissionTriggerAccumulatedRecharge {
|
||||
updates["accumulated_recharge"] = rechargeAmount
|
||||
}
|
||||
if err := tx.Model(&model.Device{}).Where("id = ?", deviceID).Updates(updates).Error; err != nil {
|
||||
return errors.Wrap(errors.CodeDatabaseError, err, "更新设备状态失败")
|
||||
if err := tx.Model(&model.Device{}).Where("id = ?", deviceID).
|
||||
Update("first_commission_paid", true).Error; err != nil {
|
||||
return errors.Wrap(errors.CodeDatabaseError, err, "更新设备佣金发放状态失败")
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user