diff --git a/app/admin/service/member_api.go b/app/admin/service/member_api.go index ffb92e1..ab874ff 100644 --- a/app/admin/service/member_api.go +++ b/app/admin/service/member_api.go @@ -106,5 +106,17 @@ func (e *MemberApi) CreateApi(userId int, user *models.MemberApi, retryCount int return err } + apiKey := fmt.Sprintf(rediskey.MemberApiKey, apiEntity.ApiKey) + val, err := sonic.MarshalString(apiEntity) + + if err != nil { + e.Log.Errorf("用户api 初始化失败") + return err + } + + if err := redishelper.DefaultRedis.SetString(apiKey, val); err != nil { + e.Log.Errorf("用户api 初始化失败") + return err + } return nil } diff --git a/app/admin/service/sms_phone.go b/app/admin/service/sms_phone.go index 76c4420..4fd89bf 100644 --- a/app/admin/service/sms_phone.go +++ b/app/admin/service/sms_phone.go @@ -494,57 +494,75 @@ func (e SmsServices) AutoRenewal() error { startTime := time.Now().Add(-24 * time.Hour) endTime := time.Now().Add(24 * time.Hour) + smsServices := SmsServices{Service: e.Service} + serviceMap := smsServices.GetMapAll() + configService := SysConfig{Service: e.Service} - configResp := dto.GetSysConfigByKEYForServiceResp{} - configService.GetWithKey(&dto.SysConfigByKeyReq{ConfigKey: "long_number_renew_deduction_standard"}, &configResp) - - if configResp.ConfigValue == "" { - e.Log.Errorf("获取续费价格失败") - return nil - } - - price, _ := decimal.NewFromString(configResp.ConfigValue) - if price.IsZero() { - e.Log.Errorf("获取续费价格失败") - return nil - } + mapDatas, _ := configService.GetMapByKeys([]string{"renew_number_premium_daisysms", "renew_number_premium_textverified"}) if err := e.Orm.Model(&models.SmsPhone{}).Where("auto_renewal =1 and type =1 and actived =2 and expire_time >=? and expire_time = ?", price, item.UserId, price) + if service, ok := serviceMap[item.PlatformCode+"_"+item.ServiceCode]; !ok { + continue + } else { + price = service.LongPrice + switch { + case item.PlatformCode == global.SmsPlatformDaisysms: + p, ok := mapDatas["renew_number_premium_daisysms"] + val, _ := decimal.NewFromString(p.ConfigValue) - if db.Error != nil { - return db.Error + if ok && val.Cmp(decimal.Zero) > 0 { + per := decimal.NewFromInt(100).Add(val) + percent = per.Div(decimal.NewFromInt(100)).Truncate(2) + } + case item.PlatformCode == global.SmsPlatformTextVerified: + p, ok := mapDatas["renew_number_premium_textverified"] + val, _ := decimal.NewFromString(p.ConfigValue) + + if ok && val.Cmp(decimal.Zero) > 0 { + per := decimal.NewFromInt(100).Add(val) + percent = per.Div(decimal.NewFromInt(100)).Truncate(2) + } } - if db.RowsAffected == 0 { - return errors.New("余额不足") - } + renewLog := models.SmsRenewalLog{} + renewLog.UserId = item.UserId + renewLog.PhoneId = item.Id + renewLog.Type = item.Type + renewLog.Amount = price.Mul(percent).Truncate(2) + renewLog.BeforeTime = *item.ExpireTime + renewLog.Period = 30 - if err1 := tx.Create(&renewLog).Error; err1 != nil { + if err := e.Orm.Transaction(func(tx *gorm.DB) error { + db := tx.Exec("UPDATE member_balance set balance = balance - ? where user_id = ? and balance >= ?", price, item.UserId, price) - return errors.New("创建续费日志失败") - } + if db.Error != nil { + return db.Error + } - newExpireTime := item.ExpireTime.AddDate(0, 0, 30) - if err1 := tx.Model(data).Where("id =?", item.Id).Update("expire_time", newExpireTime).Error; err1 != nil { - return err1 + if db.RowsAffected == 0 { + return errors.New("余额不足") + } + + if err1 := tx.Create(&renewLog).Error; err1 != nil { + + return errors.New("创建续费日志失败") + } + + newExpireTime := item.ExpireTime.AddDate(0, 0, 30) + if err1 := tx.Model(data).Where("id =?", item.Id).Update("expire_time", newExpireTime).Error; err1 != nil { + return err1 + } + return nil + }); err != nil { + e.Log.Errorf("自动续期失败:%s", err.Error()) } - return nil - }); err != nil { - e.Log.Errorf("自动续期失败:%s", err.Error()) } } diff --git a/app/admin/service/sms_services.go b/app/admin/service/sms_services.go index 06fa526..2030aeb 100644 --- a/app/admin/service/sms_services.go +++ b/app/admin/service/sms_services.go @@ -306,3 +306,21 @@ func (e *SmsServices) SyncPrices() error { textVerifiedService.SyncPrices() return nil } + +// 获取服务map +// map key ={platformCode}_{serviceCode} +func (e *SmsServices) GetMapAll() map[string]models.SmsServices { + var datas []models.SmsServices + + if err := e.Orm.Model(&models.SmsServices{}).Find(&datas).Error; err != nil { + e.Log.Errorf("SmsServicesService GetMapAll error:%s \r\n", err) + return nil + } + + mapServices := make(map[string]models.SmsServices) + for _, item := range datas { + mapServices[item.PlatformCode+"_"+item.Code] = item + } + + return mapServices +} diff --git a/app/admin/service/sys_config.go b/app/admin/service/sys_config.go index f040680..6a684e5 100644 --- a/app/admin/service/sys_config.go +++ b/app/admin/service/sys_config.go @@ -162,6 +162,22 @@ func (e *SysConfig) Remove(d *dto.SysConfigDeleteReq) error { return nil } +func (e *SysConfig) GetMapByKeys(keys []string) (map[string]dto.GetSysConfigByKEYForServiceResp, error) { + listData := make([]dto.GetSysConfigByKEYForServiceResp, 0) + err := e.GetWithKeyForList(keys, &listData) + result := make(map[string]dto.GetSysConfigByKEYForServiceResp) + + if err != nil { + return result, err + } + + for _, v := range listData { + result[v.ConfigKey] = v + } + + return result, nil +} + // GetWithKey 根据Key获取SysConfig func (e *SysConfig) GetWithKey(c *dto.SysConfigByKeyReq, resp *dto.GetSysConfigByKEYForServiceResp) error { var err error