feat: 业务逻辑补全 — 佣金待审记录、C端订单重构、支付抽象、富友支付、卡设备状态联动
Some checks failed
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
Some checks failed
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
F-1: 佣金链断裂时创建 status=99 零额待审记录,新增修正接口 POST /commission-records/:id/resolve F-4: C端订单查询从 Handler 迁移至 Service 层,移除 SkipPermissionCtx J-1: 富友支付 JSAPI/MiniApp 预下单实现,回调补全签名验证 J-2: 平台钱包代购支持(buyerType 为空时使用资产所属代理钱包) J-3: 套餐激活后自动更新卡/设备 status=3,最后套餐过期后更新 status=4 支付抽象: 引入 PaymentProvider 接口 + 微信/富友适配器,CreateOrder 支持多支付渠道 修复: 设备/IoT卡响应 DTO 移除 omitempty,空值字段返回 null 而非省略
This commit is contained in:
@@ -141,6 +141,8 @@ func (s *ActivationService) ActivateByRealname(ctx context.Context, carrierType
|
||||
return errors.Wrap(errors.CodeDatabaseError, err, "激活套餐失败")
|
||||
}
|
||||
|
||||
s.syncCarrierStatusActivated(ctx, tx, usage, carrierType, carrierID)
|
||||
|
||||
s.logger.Info("套餐已激活",
|
||||
zap.Uint("usage_id", usage.ID),
|
||||
zap.Uint("package_id", usage.PackageID),
|
||||
@@ -300,6 +302,8 @@ func (s *ActivationService) activateNextMainPackage(ctx context.Context, tx *gor
|
||||
return errors.Wrap(errors.CodeDatabaseError, err, "激活排队主套餐失败")
|
||||
}
|
||||
|
||||
s.syncCarrierStatusActivated(ctx, tx, &nextMain, carrierType, carrierID)
|
||||
|
||||
s.logger.Info("排队主套餐已激活",
|
||||
zap.Uint("usage_id", nextMain.ID),
|
||||
zap.Uint("package_id", nextMain.PackageID),
|
||||
@@ -320,3 +324,48 @@ func (s *ActivationService) activateNextMainPackage(ctx context.Context, tx *gor
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *ActivationService) syncCarrierStatusActivated(ctx context.Context, tx *gorm.DB, usage *model.PackageUsage, carrierType string, carrierID uint) {
|
||||
if usage == nil {
|
||||
return
|
||||
}
|
||||
|
||||
if usage.UsageType == constants.PackageUsageTypeDevice || usage.DeviceID > 0 || carrierType == constants.AssetTypeDevice {
|
||||
deviceID := usage.DeviceID
|
||||
if deviceID == 0 {
|
||||
deviceID = carrierID
|
||||
}
|
||||
if deviceID == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
if err := tx.WithContext(ctx).
|
||||
Model(&model.Device{}).
|
||||
Where("id = ? AND status < ?", deviceID, constants.DeviceStatusActivated).
|
||||
Update("status", constants.DeviceStatusActivated).Error; err != nil {
|
||||
s.logger.Warn("套餐激活后更新设备状态失败",
|
||||
zap.Uint("device_id", deviceID),
|
||||
zap.Uint("usage_id", usage.ID),
|
||||
zap.Error(err))
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
cardID := usage.IotCardID
|
||||
if cardID == 0 {
|
||||
cardID = carrierID
|
||||
}
|
||||
if cardID == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
if err := tx.WithContext(ctx).
|
||||
Model(&model.IotCard{}).
|
||||
Where("id = ? AND status < ?", cardID, constants.IotCardStatusActivated).
|
||||
Update("status", constants.IotCardStatusActivated).Error; err != nil {
|
||||
s.logger.Warn("套餐激活后更新卡状态失败",
|
||||
zap.Uint("iot_card_id", cardID),
|
||||
zap.Uint("usage_id", usage.ID),
|
||||
zap.Error(err))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user