feat: asset Service 新增 GetEffectiveRealnamePolicy 策略判断及 HasValidRechargeOrPaidOrder 检查逻辑
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -164,6 +164,7 @@ func (s *Service) buildDeviceResolveResponse(ctx context.Context, device *model.
|
||||
SwitchMode: device.SwitchMode,
|
||||
LastGatewaySyncAt: device.LastGatewaySyncAt,
|
||||
EnablePolling: device.EnablePolling,
|
||||
RealnamePolicy: device.RealnamePolicy,
|
||||
}
|
||||
|
||||
// 查绑定卡
|
||||
@@ -250,6 +251,7 @@ func (s *Service) buildCardResolveResponse(ctx context.Context, card *model.IotC
|
||||
UpdatedAt: card.UpdatedAt,
|
||||
RealNameStatus: card.RealNameStatus,
|
||||
RealNameAt: card.FirstRealnameAt,
|
||||
RealnamePolicy: card.RealnamePolicy,
|
||||
NetworkStatus: card.NetworkStatus,
|
||||
ICCID: card.ICCID,
|
||||
CarrierID: card.CarrierID,
|
||||
@@ -999,6 +1001,72 @@ func paymentStatusText(status int) string {
|
||||
}
|
||||
}
|
||||
|
||||
// GetEffectiveRealnamePolicy 获取资产的有效实名认证策略
|
||||
// 设备卡使用设备策略,单独卡使用卡策略
|
||||
func GetEffectiveRealnamePolicy(card *model.IotCard, device *model.Device) string {
|
||||
if device != nil {
|
||||
return device.RealnamePolicy
|
||||
}
|
||||
if card != nil {
|
||||
return card.RealnamePolicy
|
||||
}
|
||||
return constants.RealnamePolicyNone
|
||||
}
|
||||
|
||||
// HasValidRechargeOrPaidOrder 检查资产在当前世代是否有有效充值或已支付订单
|
||||
// 用于 after_order 策略的生效条件判断
|
||||
func (s *Service) HasValidRechargeOrPaidOrder(ctx context.Context, assetType string, assetID uint) (bool, error) {
|
||||
generation := s.resolveAssetGeneration(ctx, assetType, assetID)
|
||||
|
||||
if assetType == "card" {
|
||||
var rechargeCount int64
|
||||
err := s.db.WithContext(ctx).Model(&model.RechargeOrder{}).
|
||||
Where("iot_card_id = ? AND generation = ? AND status = ?", assetID, generation, model.RechargeOrderStatusPaid).
|
||||
Count(&rechargeCount).Error
|
||||
if err != nil {
|
||||
return false, errors.Wrap(errors.CodeDatabaseError, err, "查询卡充值订单失败")
|
||||
}
|
||||
if rechargeCount > 0 {
|
||||
return true, nil
|
||||
}
|
||||
|
||||
var orderCount int64
|
||||
err = s.db.WithContext(ctx).Model(&model.Order{}).
|
||||
Where("iot_card_id = ? AND generation = ? AND payment_status = ?", assetID, generation, model.PaymentStatusPaid).
|
||||
Count(&orderCount).Error
|
||||
if err != nil {
|
||||
return false, errors.Wrap(errors.CodeDatabaseError, err, "查询卡订单失败")
|
||||
}
|
||||
if orderCount > 0 {
|
||||
return true, nil
|
||||
}
|
||||
} else if assetType == "device" {
|
||||
var rechargeCount int64
|
||||
err := s.db.WithContext(ctx).Model(&model.RechargeOrder{}).
|
||||
Where("device_id = ? AND generation = ? AND status = ?", assetID, generation, model.RechargeOrderStatusPaid).
|
||||
Count(&rechargeCount).Error
|
||||
if err != nil {
|
||||
return false, errors.Wrap(errors.CodeDatabaseError, err, "查询设备充值订单失败")
|
||||
}
|
||||
if rechargeCount > 0 {
|
||||
return true, nil
|
||||
}
|
||||
|
||||
var orderCount int64
|
||||
err = s.db.WithContext(ctx).Model(&model.Order{}).
|
||||
Where("device_id = ? AND generation = ? AND payment_status = ?", assetID, generation, model.PaymentStatusPaid).
|
||||
Count(&orderCount).Error
|
||||
if err != nil {
|
||||
return false, errors.Wrap(errors.CodeDatabaseError, err, "查询设备订单失败")
|
||||
}
|
||||
if orderCount > 0 {
|
||||
return true, nil
|
||||
}
|
||||
}
|
||||
|
||||
return false, nil
|
||||
}
|
||||
|
||||
// packageStatusName 套餐状态码转中文名称
|
||||
func packageStatusName(status int) string {
|
||||
switch status {
|
||||
|
||||
Reference in New Issue
Block a user