|
- package egg_energy
-
- import (
- "code.fnuoos.com/EggPlanet/egg_models.git/src/implement"
- "code.fnuoos.com/EggPlanet/egg_models.git/src/model"
- "code.fnuoos.com/EggPlanet/egg_system_rules.git/enum"
- "code.fnuoos.com/EggPlanet/egg_system_rules.git/md"
- "code.fnuoos.com/EggPlanet/egg_system_rules.git/rule"
- "code.fnuoos.com/EggPlanet/egg_system_rules.git/utils/cache"
- zhios_order_relate_logx "code.fnuoos.com/EggPlanet/egg_system_rules.git/utils/logx"
- "errors"
- "fmt"
- "github.com/shopspring/decimal"
- "time"
- "xorm.io/xorm"
- )
-
- const LockKey = "auto_release_exchange_team_egg_energy_lock_key"
-
- // AutoReleaseExchangeTeamEggEnergy 团队蛋蛋能量自动释放成可用绿色能量
- func AutoReleaseExchangeTeamEggEnergy(engine *xorm.Engine) (err error) {
- now := time.Now()
- fmt.Println(now.Hour())
- if !(now.Hour() > 1 && now.Hour() < 8) {
- //TODO::只在凌晨一点 ~ 凌晨 8 点运行
- return errors.New("非运行时间")
- }
- //TODO::增加“悲观锁”防止串行
- getString, _ := cache.GetString(LockKey)
- //if err != nil {
- // return err
- //}
- if getString != "" {
- fmt.Println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "上一次结算未执行完")
- return errors.New("上一次结算未执行完")
- }
- cache.SetEx(LockKey, "running", 3600*8) //8小时
-
- //1、查找`egg_energy_basic_setting` 基础设置
- eggEnergyBasicSettingDb := implement.NewEggEnergyBasicSettingDb(engine)
- eggEnergyBasicSetting, err := eggEnergyBasicSettingDb.EggEnergyBasicSettingGetOneByParams(map[string]interface{}{
- "key": "is_open",
- "value": 1,
- })
- if err != nil {
- return
- }
- if eggEnergyBasicSetting.SettlementQuantity == 0 {
- err = errors.New("结算百分比未设置!")
- return
- }
-
- settlementQuantity := eggEnergyBasicSetting.SettlementQuantity
- fmt.Println("settlementQuantity>>>>>>>>>>>>", settlementQuantity)
-
- //2、当前 "可用"绿色能量可以兑换的用户数据
- var list1 []model.UserVirtualAmount
- err = engine.Where("coin_id = ?", eggEnergyBasicSetting.TeamEggEnergyCoinId).And("amount > ?", 0).Find(&list1)
- if err != nil {
- fmt.Println("err:::::1111", err)
- return
- }
-
- //4、处理释放
- settlementQuantityRadio := decimal.NewFromFloat(100)
- settlementQuantityValue := decimal.NewFromInt(int64(settlementQuantity)).Div(settlementQuantityRadio)
- for _, v := range list1 {
- userAmount, _ := decimal.NewFromString(v.Amount)
- settlementQuantityAmount, _ := userAmount.Mul(settlementQuantityValue).Float64()
- if settlementQuantityAmount > 0 {
- session := engine.NewSession()
- defer func() {
- session.Close()
- if err := recover(); err != nil {
- _ = zhios_order_relate_logx.Error(err)
- }
- }()
- session.Begin()
-
- //4.2给相应的用户减少团队蛋蛋能量
- err = rule.DealUserVirtualCoin(session, md.DealUserVirtualCoinReq{
- Kind: "sub",
- Title: enum.TeamEggEnergyReleaseToPersonEggEnergy.String(),
- TransferType: int(enum.TeamEggEnergyReleaseToPersonEggEnergy),
- CoinId: eggEnergyBasicSetting.TeamEggEnergyCoinId,
- Uid: v.Uid,
- Amount: settlementQuantityAmount,
- })
- if err != nil {
- _ = session.Rollback()
- fmt.Println("err:::::33333", err)
- continue
- }
-
- //4.3给相应的用户增加个人的蛋蛋能量
- err = rule.DealUserVirtualCoin(session, md.DealUserVirtualCoinReq{
- Kind: "add",
- Title: enum.PersonEggGetByTeamEggEnergyRelease.String(),
- TransferType: int(enum.PersonEggGetByTeamEggEnergyRelease),
- CoinId: eggEnergyBasicSetting.PersonEggEnergyCoinId,
- Uid: v.Uid,
- Amount: settlementQuantityAmount,
- })
- if err != nil {
- _ = session.Rollback()
- fmt.Println("err:::::22222", err)
- continue
- }
- err = session.Commit()
- if err != nil {
- _ = session.Rollback()
- continue
- }
- }
- }
-
- return
- }
|