1、增加接口
This commit is contained in:
		| @ -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 | ||||
| } | ||||
|  | ||||
| @ -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 <?", startTime, endTime).Find(&datas).Error; err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	for _, item := range datas { | ||||
| 		renewLog := models.SmsRenewalLog{} | ||||
| 		renewLog.UserId = item.UserId | ||||
| 		renewLog.PhoneId = item.Id | ||||
| 		renewLog.Type = item.Type | ||||
| 		renewLog.Amount = price | ||||
| 		renewLog.BeforeTime = *item.ExpireTime | ||||
| 		renewLog.Period = 30 | ||||
| 		percent := decimal.NewFromInt(1) | ||||
| 		price := decimal.Zero | ||||
|  | ||||
| 		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) | ||||
| 		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()) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
|  | ||||
| @ -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 | ||||
| } | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
		Reference in New Issue
	
	Block a user