|
@@ -1,6 +1,7 @@ |
|
|
package one_circles |
|
|
package one_circles |
|
|
|
|
|
|
|
|
import ( |
|
|
import ( |
|
|
|
|
|
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" |
|
|
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/db" |
|
|
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/db" |
|
|
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/db/model" |
|
|
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/db/model" |
|
|
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/md" |
|
|
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/md" |
|
@@ -15,8 +16,8 @@ import ( |
|
|
"xorm.io/xorm" |
|
|
"xorm.io/xorm" |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
// ActivityCoinAutoExchangeGreenEnergy 活跃积分自动兑换成绿色能量 |
|
|
|
|
|
func ActivityCoinAutoExchangeGreenEnergy(engine *xorm.Engine, masterId string) (err error) { |
|
|
|
|
|
|
|
|
// ActivityCoinAutoExchangeGreenEnergyNew 活跃积分自动兑换成绿色能量 |
|
|
|
|
|
func ActivityCoinAutoExchangeGreenEnergyNew(engine *xorm.Engine, masterId string, ch *rabbit.Channel) (err error) { |
|
|
//1、查找 `one_circles_green_energy_basic_setting` 基础设置 && `one_circles_public_platoon_basic_setting` 基础设置 |
|
|
//1、查找 `one_circles_green_energy_basic_setting` 基础设置 && `one_circles_public_platoon_basic_setting` 基础设置 |
|
|
oneCirclesGreenEnergyBasicSetting, err := db.OneCirclesGreenEnergyBasicSettingGetOneByParams(engine, map[string]interface{}{ |
|
|
oneCirclesGreenEnergyBasicSetting, err := db.OneCirclesGreenEnergyBasicSettingGetOneByParams(engine, map[string]interface{}{ |
|
|
"key": "is_open", |
|
|
"key": "is_open", |
|
@@ -82,6 +83,22 @@ func ActivityCoinAutoExchangeGreenEnergy(engine *xorm.Engine, masterId string) ( |
|
|
}() |
|
|
}() |
|
|
session.Begin() |
|
|
session.Begin() |
|
|
|
|
|
|
|
|
|
|
|
for _, v := range list1 { |
|
|
|
|
|
//TODO::推入rabbitmq 异步处理 |
|
|
|
|
|
ch.Publish(md.OneCirclesExchange, md.OneCirclesStructForAutoExchangeGreenEnergy{ |
|
|
|
|
|
MasterId: masterId, |
|
|
|
|
|
Uid: v.Uid, |
|
|
|
|
|
}, md.OneCirclesRoutKeyForAutoExchangeGreenEnergyToPerson) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
for _, v := range list2 { |
|
|
|
|
|
//TODO::推入rabbitmq 异步处理 |
|
|
|
|
|
ch.Publish(md.OneCirclesExchange, md.OneCirclesStructForAutoExchangeGreenEnergy{ |
|
|
|
|
|
MasterId: masterId, |
|
|
|
|
|
Uid: v.Uid, |
|
|
|
|
|
}, md.OneCirclesRoutKeyForAutoExchangeGreenEnergyToTeam) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
//4、处理"个人活跃积分"兑换 |
|
|
//4、处理"个人活跃积分"兑换 |
|
|
for _, v := range list1 { |
|
|
for _, v := range list1 { |
|
|
autoExchangeNumsByPersonValue, _ := decimal.NewFromString(v.Amount) |
|
|
autoExchangeNumsByPersonValue, _ := decimal.NewFromString(v.Amount) |
|
@@ -205,3 +222,203 @@ func ActivityCoinAutoExchangeGreenEnergy(engine *xorm.Engine, masterId string) ( |
|
|
} |
|
|
} |
|
|
return |
|
|
return |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// ActivityCoinAutoExchangeGreenEnergy 活跃积分自动兑换成绿色能量 |
|
|
|
|
|
func ActivityCoinAutoExchangeGreenEnergy(engine *xorm.Engine, masterId string) (err error) { |
|
|
|
|
|
//1、查找 `one_circles_green_energy_basic_setting` 基础设置 && `one_circles_public_platoon_basic_setting` 基础设置 |
|
|
|
|
|
oneCirclesGreenEnergyBasicSetting, err := db.OneCirclesGreenEnergyBasicSettingGetOneByParams(engine, map[string]interface{}{ |
|
|
|
|
|
"key": "is_open", |
|
|
|
|
|
"value": 1, |
|
|
|
|
|
}) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
return |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
oneCirclesPublicPlatoonBasicSetting, err := db.OneCirclesPublicPlatoonBasicSettingGetOneByParams(engine, map[string]interface{}{ |
|
|
|
|
|
"key": "is_open", |
|
|
|
|
|
"value": 1, |
|
|
|
|
|
}) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
return |
|
|
|
|
|
} |
|
|
|
|
|
if oneCirclesPublicPlatoonBasicSetting.ExchangeRules == "" { |
|
|
|
|
|
err = errors.New("自动兑换未设置!") |
|
|
|
|
|
return |
|
|
|
|
|
} |
|
|
|
|
|
var exchangeRulesStruct *md2.ExchangeRulesStruct |
|
|
|
|
|
err = json.Unmarshal([]byte(oneCirclesPublicPlatoonBasicSetting.ExchangeRules), &exchangeRulesStruct) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
return |
|
|
|
|
|
} |
|
|
|
|
|
var autoExchangeNumsByPerson = zhios_order_relate_utils.StrToFloat64(exchangeRulesStruct.AutoExchangeNumsByPerson) //个人活跃积分X个自动兑换 |
|
|
|
|
|
var autoExchangeNumsByTeam = zhios_order_relate_utils.StrToFloat64(exchangeRulesStruct.AutoExchangeNumsByTeam) //团队活跃积分X个自动兑换 |
|
|
|
|
|
fmt.Println("autoExchangeNumsByPerson>>>>>>>>>>>>", autoExchangeNumsByPerson) |
|
|
|
|
|
fmt.Println("autoExchangeNumsByTeam>>>>>>>>>>>>", autoExchangeNumsByTeam) |
|
|
|
|
|
|
|
|
|
|
|
//2、获取"个人活跃积分" && 获取"团队活跃积分" |
|
|
|
|
|
var coin1, coin2 model.VirtualCoin |
|
|
|
|
|
_, err = engine.Where("id = ?", oneCirclesPublicPlatoonBasicSetting.PersonActivePointsCoinId).Get(&coin1) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
return err |
|
|
|
|
|
} |
|
|
|
|
|
_, err = engine.Where("id = ?", oneCirclesPublicPlatoonBasicSetting.TeamActivePointsCoinId).Get(&coin2) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
return err |
|
|
|
|
|
} |
|
|
|
|
|
personActivePointsCoinExchangeRatioValue, _ := decimal.NewFromString(coin1.ExchangeRatio) |
|
|
|
|
|
teamActivePointsCoinExchangeRatioValue, _ := decimal.NewFromString(coin2.ExchangeRatio) |
|
|
|
|
|
|
|
|
|
|
|
//3、当前 "个人活跃积分"可以自动兑换的用户数据 && "团队活跃积分"可以自动兑换的用户数据 |
|
|
|
|
|
var list1, list2 []model.UserVirtualAmount |
|
|
|
|
|
err = engine.Where("coin_id = ?", oneCirclesPublicPlatoonBasicSetting.PersonActivePointsCoinId).And("amount >=?", autoExchangeNumsByPerson).Limit(200, 0).Find(&list1) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
fmt.Println("err:::::1111", err.Error()) |
|
|
|
|
|
return |
|
|
|
|
|
} |
|
|
|
|
|
err = engine.Where("coin_id = ?", oneCirclesPublicPlatoonBasicSetting.TeamActivePointsCoinId).And("amount >=?", autoExchangeNumsByTeam).Limit(200, 0).Find(&list2) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
fmt.Println("err:::::2222", err.Error()) |
|
|
|
|
|
return |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//4、处理"个人活跃积分"兑换 |
|
|
|
|
|
for _, v := range list1 { |
|
|
|
|
|
session := engine.NewSession() |
|
|
|
|
|
session.Begin() |
|
|
|
|
|
|
|
|
|
|
|
autoExchangeNumsByPersonValue, _ := decimal.NewFromString(v.Amount) |
|
|
|
|
|
autoExchangeNumsByPersonAmount := autoExchangeNumsByPersonValue.Div(personActivePointsCoinExchangeRatioValue).String() |
|
|
|
|
|
//4.1计算涨价公式 |
|
|
|
|
|
err1, values, _, afterPriceValue := NewCalcPriceIncreaseFormula(autoExchangeNumsByPersonAmount, oneCirclesGreenEnergyBasicSetting) |
|
|
|
|
|
if err1 != nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
return err1 |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//4.2给相应的用户加上个人的绿色积分(可用数量) |
|
|
|
|
|
err = DealUserCoin(session, md.DealUserCoinReq{ |
|
|
|
|
|
Kind: "add", |
|
|
|
|
|
Mid: masterId, |
|
|
|
|
|
Title: md.OneCirclesPersonalActiveCoinExchangeGreenEnergy, |
|
|
|
|
|
TransferType: md.OneCirclesPersonalActiveCoinExchangeGreenEnergyForUserVirtualCoinFlow, |
|
|
|
|
|
OrdId: "", |
|
|
|
|
|
CoinId: oneCirclesGreenEnergyBasicSetting.PersonGreenEnergyCoinId, |
|
|
|
|
|
Uid: v.Uid, |
|
|
|
|
|
Amount: zhios_order_relate_utils.StrToFloat64(values), |
|
|
|
|
|
}) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
fmt.Println("err:::::33333", err.Error()) |
|
|
|
|
|
return err |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//4.3给相应的用户减去个人活跃积分 |
|
|
|
|
|
err = DealUserCoin(session, md.DealUserCoinReq{ |
|
|
|
|
|
Kind: "sub", |
|
|
|
|
|
Mid: masterId, |
|
|
|
|
|
Title: md.OneCirclesPersonalActiveCoinExchangeToBeGreenEnergy, |
|
|
|
|
|
TransferType: md.OneCirclesPersonalActiveCoinExchangeToBeGreenEnergyForUserVirtualCoinFlow, |
|
|
|
|
|
OrdId: "", |
|
|
|
|
|
CoinId: oneCirclesPublicPlatoonBasicSetting.PersonActivePointsCoinId, |
|
|
|
|
|
Uid: v.Uid, |
|
|
|
|
|
Amount: zhios_order_relate_utils.StrToFloat64(v.Amount), |
|
|
|
|
|
}) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
fmt.Println("err:::::33333", err.Error()) |
|
|
|
|
|
return err |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//4.4 减少“原始数量”中的绿色能量 |
|
|
|
|
|
err = DealAvailableGreenEnergyCoin(session, int(enum.PersonalActivePointRedemption), zhios_order_relate_utils.StrToFloat64(values), zhios_order_relate_utils.StrToFloat64(autoExchangeNumsByPersonAmount), enum.PersonalActivePointRedemption.String(), oneCirclesGreenEnergyBasicSetting, afterPriceValue) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
fmt.Println("err:::::44444", err.Error()) |
|
|
|
|
|
return err |
|
|
|
|
|
} |
|
|
|
|
|
session.Commit() |
|
|
|
|
|
session.Close() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//5、处理"团队活跃积分"兑换 |
|
|
|
|
|
for _, v := range list2 { |
|
|
|
|
|
session := engine.NewSession() |
|
|
|
|
|
session.Begin() |
|
|
|
|
|
|
|
|
|
|
|
autoExchangeNumsByTeamValue, _ := decimal.NewFromString(v.Amount) |
|
|
|
|
|
autoExchangeNumsByTeamAmount := autoExchangeNumsByTeamValue.Div(teamActivePointsCoinExchangeRatioValue).String() |
|
|
|
|
|
//5.1计算涨价公式 |
|
|
|
|
|
err1, values, _, afterPriceValue := NewCalcPriceIncreaseFormula(autoExchangeNumsByTeamAmount, oneCirclesGreenEnergyBasicSetting) |
|
|
|
|
|
if err1 != nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
return err1 |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//5.2给相应的用户加上个人的绿色积分(结算数量) |
|
|
|
|
|
err = DealUserCoin(session, md.DealUserCoinReq{ |
|
|
|
|
|
Kind: "add", |
|
|
|
|
|
Mid: masterId, |
|
|
|
|
|
Title: md.OneCirclesTeamActiveCoinExchangeGreenEnergy, |
|
|
|
|
|
TransferType: md.OneCirclesTeamActiveCoinExchangeGreenEnergyForUserVirtualCoinFlow, |
|
|
|
|
|
OrdId: "", |
|
|
|
|
|
CoinId: oneCirclesGreenEnergyBasicSetting.TeamGreenEnergyCoinId, |
|
|
|
|
|
Uid: v.Uid, |
|
|
|
|
|
Amount: zhios_order_relate_utils.StrToFloat64(values), |
|
|
|
|
|
}) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
fmt.Println("err:::::33333", err.Error()) |
|
|
|
|
|
return err |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//5.3给相应的用户减去个人团队积分 |
|
|
|
|
|
err = DealUserCoin(session, md.DealUserCoinReq{ |
|
|
|
|
|
Kind: "sub", |
|
|
|
|
|
Mid: masterId, |
|
|
|
|
|
Title: md.OneCirclesTeamActiveCoinExchangeToBeGreenEnergy, |
|
|
|
|
|
TransferType: md.OneCirclesTeamActiveCoinExchangeToBeGreenEnergyForUserVirtualCoinFlow, |
|
|
|
|
|
OrdId: "", |
|
|
|
|
|
CoinId: oneCirclesPublicPlatoonBasicSetting.TeamActivePointsCoinId, |
|
|
|
|
|
Uid: v.Uid, |
|
|
|
|
|
Amount: zhios_order_relate_utils.StrToFloat64(v.Amount), |
|
|
|
|
|
}) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
fmt.Println("err:::::66666", err.Error()) |
|
|
|
|
|
return err |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//5.4 减少“原始数量”中的绿色能量 |
|
|
|
|
|
err = DealAvailableGreenEnergyCoin(session, int(enum.TeamActivePointRedemption), zhios_order_relate_utils.StrToFloat64(values), zhios_order_relate_utils.StrToFloat64(autoExchangeNumsByTeamAmount), enum.TeamActivePointRedemption.String(), oneCirclesGreenEnergyBasicSetting, afterPriceValue) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
fmt.Println("err:::::44444", err.Error()) |
|
|
|
|
|
return err |
|
|
|
|
|
} |
|
|
|
|
|
err = session.Commit() |
|
|
|
|
|
session.Close() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
session := engine.NewSession() |
|
|
|
|
|
defer func() { |
|
|
|
|
|
session.Close() |
|
|
|
|
|
if err := recover(); err != nil { |
|
|
|
|
|
_ = zhios_order_relate_logx.Error(err) |
|
|
|
|
|
} |
|
|
|
|
|
}() |
|
|
|
|
|
session.Begin() |
|
|
|
|
|
|
|
|
|
|
|
//6、修改 one_circles_green_energy_basic_setting 的 now_price |
|
|
|
|
|
_, err = db.OneCirclesGreenEnergyBasicSettingUpdate(session, oneCirclesGreenEnergyBasicSetting.Id, oneCirclesGreenEnergyBasicSetting) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
fmt.Println("err:::::77777", err.Error()) |
|
|
|
|
|
return err |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
_ = session.Rollback() |
|
|
|
|
|
return errors.New("事务提交失败") |
|
|
|
|
|
} |
|
|
|
|
|
return |
|
|
|
|
|
} |