@@ -3,7 +3,7 @@ module code.fnuoos.com/EggPlanet/egg_system_rules.git | |||
go 1.19 | |||
// go.mod文件中 | |||
// replace code.fnuoos.com/EggPlanet/egg_models.git => E:/company/Egg/egg_models | |||
//replace code.fnuoos.com/EggPlanet/egg_models.git => E:/company/Egg/egg_models | |||
require ( | |||
code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git v0.0.5 | |||
@@ -21,6 +21,7 @@ require ( | |||
) | |||
require ( | |||
code.fnuoos.com/go_rely_warehouse/zyos_go_es.git v1.0.1-0.20241118083738-0f22da9ba0be // indirect | |||
github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.5 // indirect | |||
github.com/alibabacloud-go/debug v1.0.1 // indirect | |||
github.com/alibabacloud-go/endpoint-util v1.1.0 // indirect | |||
@@ -40,7 +41,7 @@ require ( | |||
) | |||
require ( | |||
code.fnuoos.com/EggPlanet/egg_models.git v0.2.1-0.20241128102555-fc839292d728 | |||
code.fnuoos.com/EggPlanet/egg_models.git v0.2.1-0.20241204145112-7b4c29691a6d | |||
github.com/goccy/go-json v0.10.2 // indirect | |||
github.com/golang/snappy v0.0.4 // indirect | |||
github.com/json-iterator/go v1.1.12 // indirect | |||
@@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT | |||
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= | |||
code.fnuoos.com/EggPlanet/egg_models.git v0.2.1-0.20241128102555-fc839292d728 h1:BHW0yPeka1RRS4pIcZKwiatVg9U4mE8iiTl1+YCk1vQ= | |||
code.fnuoos.com/EggPlanet/egg_models.git v0.2.1-0.20241128102555-fc839292d728/go.mod h1:+bDK4gfBq4LEkhh6K/A46+0urH/sgxDxnjIjlxb9HI8= | |||
code.fnuoos.com/go_rely_warehouse/zyos_go_es.git v1.0.1-0.20241118083738-0f22da9ba0be h1:zuleX5JnIGQpt6wDAmCFs++lLgOmE6kWo3xkJnjrSck= | |||
code.fnuoos.com/go_rely_warehouse/zyos_go_es.git v1.0.1-0.20241118083738-0f22da9ba0be/go.mod h1:Yuc7XnUQ15eaC0ZobcJG7XwkVTttVqp52OTanXhI1Qk= | |||
code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git v0.0.5 h1:dqvWJqlJi0WXCwTxbWPLvSOsKPjP+iEDBVgLcAl9nOE= | |||
code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git v0.0.5/go.mod h1:TTcCnFn/LhBGapnutpezlW+GXkLRNPMWkziOoCsXQqY= | |||
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= | |||
@@ -0,0 +1,92 @@ | |||
package egg_energy | |||
import ( | |||
"code.fnuoos.com/EggPlanet/egg_models.git/src/implement" | |||
"code.fnuoos.com/EggPlanet/egg_system_rules.git/enum" | |||
md2 "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/rule/egg_energy/md" | |||
egg_system_rules "code.fnuoos.com/EggPlanet/egg_system_rules.git/utils" | |||
zhios_order_relate_logx "code.fnuoos.com/EggPlanet/egg_system_rules.git/utils/logx" | |||
"fmt" | |||
"github.com/shopspring/decimal" | |||
"math/rand" | |||
"time" | |||
"xorm.io/xorm" | |||
) | |||
// ActivityCoinAutoExchangeEggPersonEnergy 个人蛋蛋积分【开始】兑换成个人蛋蛋能量 | |||
func ActivityCoinAutoExchangeEggPersonEnergy(engine *xorm.Engine, req md.EggEnergyStructForAutoExchangeGreenEnergy) (err error) { | |||
//1、判断当前是否可以执行 | |||
now := time.Now() | |||
endTimeValue, _ := egg_system_rules.StringToTime(req.EndExchangeTime) | |||
if endTimeValue.After(now) { | |||
time.Sleep(time.Microsecond * time.Duration(rand.Intn(5))) //TODO::随机休眠5s不等 | |||
} | |||
//2、查询sign 记录 | |||
eggSignInDb := implement.NewEggSignInDb(engine) | |||
sign, err := eggSignInDb.EggSignInGet(req.SignId) | |||
if err != nil { | |||
return err | |||
} | |||
if sign.IsCompleted == 1 { | |||
//TODO::已完成的直接pass | |||
return | |||
} | |||
//3、增加用户对应蛋蛋能量数量 | |||
startTime, _ := egg_system_rules.StringToTime(sign.StartTime) | |||
endTime, _ := egg_system_rules.StringToTime(sign.EndTime) | |||
seconds := endTime.Sub(startTime).Seconds() | |||
secondsValue := decimal.NewFromFloat(seconds) | |||
eggEnergyNumsForPersonValue, _ := decimal.NewFromString(sign.EstimatePerSecondPersonEggEnergyValue) | |||
eggEnergyNumsForTeamValue, _ := decimal.NewFromString(sign.EstimatePerSecondTeamEggEnergyValue) | |||
amountForPerson, _ := eggEnergyNumsForPersonValue.Mul(secondsValue).Float64() | |||
amountForTeam, _ := eggEnergyNumsForTeamValue.Mul(secondsValue).Float64() | |||
session := engine.NewSession() | |||
defer func() { | |||
session.Close() | |||
if err := recover(); err != nil { | |||
_ = zhios_order_relate_logx.Error(err) | |||
} | |||
}() | |||
session.Begin() | |||
err = rule.DealUserVirtualCoin(session, md2.DealUserVirtualCoinReq{ | |||
Kind: "add", | |||
Title: enum.PersonEggGetByEnergyEggPointCoin.String(), | |||
TransferType: int(enum.PersonEggGetByEnergyEggPointCoin), | |||
CoinId: req.PersonEggEnergyCoinId, | |||
Uid: req.Uid, | |||
Amount: amountForPerson, | |||
}) | |||
if err != nil { | |||
fmt.Println("ActivityCoinAutoExchangeEggEnergy:::::err111:::", err) | |||
_ = session.Rollback() | |||
return | |||
} | |||
err = rule.DealUserVirtualCoin(session, md2.DealUserVirtualCoinReq{ | |||
Kind: "add", | |||
Title: enum.PersonEggGetByEnergyEggPointCoin.String(), | |||
TransferType: int(enum.PersonEggGetByEnergyEggPointCoin), | |||
CoinId: req.PersonEggEnergyCoinId, | |||
Uid: req.Uid, | |||
Amount: amountForTeam, | |||
}) | |||
if err != nil { | |||
fmt.Println("ActivityCoinAutoExchangeEggEnergy:::::err222:::", err) | |||
_ = session.Rollback() | |||
return | |||
} | |||
//3、修改sign记录 | |||
sign.IsCompleted = 1 | |||
_, err = eggSignInDb.EggSignInUpdateBySession(session, sign.Id, sign, "is_completed") | |||
if err != nil { | |||
fmt.Println("ActivityCoinAutoExchangeEggEnergy:::::err333:::", err) | |||
_ = session.Rollback() | |||
return err | |||
} | |||
return session.Commit() | |||
} |
@@ -1,76 +0,0 @@ | |||
package egg_energy | |||
import ( | |||
"code.fnuoos.com/EggPlanet/egg_system_rules.git/enum" | |||
md2 "code.fnuoos.com/EggPlanet/egg_system_rules.git/md" | |||
"code.fnuoos.com/EggPlanet/egg_system_rules.git/rule" | |||
enum2 "code.fnuoos.com/EggPlanet/egg_system_rules.git/rule/egg_energy/enum" | |||
"code.fnuoos.com/EggPlanet/egg_system_rules.git/rule/egg_energy/md" | |||
"code.fnuoos.com/EggPlanet/egg_system_rules.git/rule/egg_energy/svc" | |||
egg_system_rules "code.fnuoos.com/EggPlanet/egg_system_rules.git/utils" | |||
zhios_order_relate_logx "code.fnuoos.com/EggPlanet/egg_system_rules.git/utils/logx" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"fmt" | |||
"xorm.io/xorm" | |||
) | |||
// ActivityCoinAutoExchangeEggPersonEnergy 个人蛋蛋积分【开始】兑换成个人蛋蛋能量 | |||
func ActivityCoinAutoExchangeEggPersonEnergy(engine *xorm.Engine, req md.EggEnergyStructForAutoExchangeGreenEnergy, ch *rabbit.Channel) (err error) { | |||
session := engine.NewSession() | |||
defer func() { | |||
session.Close() | |||
if err := recover(); err != nil { | |||
_ = zhios_order_relate_logx.Error(err) | |||
} | |||
}() | |||
session.Begin() | |||
eggEnergyCoreData, cb, err := svc.GetEggEnergyCoreData(engine) | |||
if err != nil { | |||
return err | |||
} | |||
if cb != nil { | |||
defer cb() // 释放锁 | |||
} | |||
//1、计算涨价公式 | |||
err1, calcPriceIncreaseFormulaResp := CalcPriceIncreaseFormula(req.AutoExchangeNumsAmount, eggEnergyCoreData) | |||
if err1 != nil { | |||
_ = session.Rollback() | |||
return err1 | |||
} | |||
//2、更改动态数据 | |||
err = DealAvailableEggEnergyCoin(session, int(enum2.PersonalActivePointRedemption), eggEnergyCoreData, md.DealAvailableEggEnergyCoinReq{ | |||
Amount: calcPriceIncreaseFormulaResp.GetEggEnergyNums, | |||
AmountFee: "", | |||
BeforePrice: calcPriceIncreaseFormulaResp.BeforePrice, | |||
AfterPrice: calcPriceIncreaseFormulaResp.AfterPrice, | |||
BeforePlanetTotalValue: calcPriceIncreaseFormulaResp.BeforePlanetTotalValue, | |||
AfterPlanetTotalValue: calcPriceIncreaseFormulaResp.AfterPlanetTotalValue, | |||
BeforeEnergyTotalNums: calcPriceIncreaseFormulaResp.BeforeEnergyTotalNums, | |||
AfterEnergyTotalNums: calcPriceIncreaseFormulaResp.AfterEnergyTotalNums, | |||
}) | |||
if err != nil { | |||
fmt.Println("ActivityCoinAutoExchangeEggPersonEnergy:::::err111:::", err) | |||
_ = session.Rollback() | |||
return err | |||
} | |||
//3、增加用户对应蛋蛋能量数量 | |||
err = rule.DealUserVirtualCoin(session, md2.DealUserVirtualCoinReq{ | |||
Kind: "add", | |||
Title: enum.PersonEggGetByEnergyEggPointCoin.String(), | |||
TransferType: int(enum.PersonEggGetByEnergyEggPointCoin), | |||
CoinId: req.EnergyCoinId, | |||
Uid: req.Uid, | |||
Amount: egg_system_rules.StrToFloat64(calcPriceIncreaseFormulaResp.GetEggEnergyNums), | |||
}) | |||
if err != nil { | |||
fmt.Println("ActivityCoinAutoExchangeEggPersonEnergy:::::err222:::", err) | |||
_ = session.Rollback() | |||
return | |||
} | |||
return session.Commit() | |||
} |
@@ -1,76 +0,0 @@ | |||
package egg_energy | |||
import ( | |||
"code.fnuoos.com/EggPlanet/egg_system_rules.git/enum" | |||
md2 "code.fnuoos.com/EggPlanet/egg_system_rules.git/md" | |||
"code.fnuoos.com/EggPlanet/egg_system_rules.git/rule" | |||
enum2 "code.fnuoos.com/EggPlanet/egg_system_rules.git/rule/egg_energy/enum" | |||
"code.fnuoos.com/EggPlanet/egg_system_rules.git/rule/egg_energy/md" | |||
"code.fnuoos.com/EggPlanet/egg_system_rules.git/rule/egg_energy/svc" | |||
egg_system_rules "code.fnuoos.com/EggPlanet/egg_system_rules.git/utils" | |||
zhios_order_relate_logx "code.fnuoos.com/EggPlanet/egg_system_rules.git/utils/logx" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"fmt" | |||
"xorm.io/xorm" | |||
) | |||
// ActivityCoinAutoExchangeEggTeamEnergy 团队蛋蛋积分【开始】兑换成团队蛋蛋能量 | |||
func ActivityCoinAutoExchangeEggTeamEnergy(engine *xorm.Engine, req md.EggEnergyStructForAutoExchangeGreenEnergy, ch *rabbit.Channel) (err error) { | |||
session := engine.NewSession() | |||
defer func() { | |||
session.Close() | |||
if err := recover(); err != nil { | |||
_ = zhios_order_relate_logx.Error(err) | |||
} | |||
}() | |||
session.Begin() | |||
eggEnergyCoreData, cb, err := svc.GetEggEnergyCoreData(engine) | |||
if err != nil { | |||
return err | |||
} | |||
if cb != nil { | |||
defer cb() // 释放锁 | |||
} | |||
//1、计算涨价公式 | |||
err1, calcPriceIncreaseFormulaResp := CalcPriceIncreaseFormula(req.AutoExchangeNumsAmount, eggEnergyCoreData) | |||
if err1 != nil { | |||
_ = session.Rollback() | |||
return err1 | |||
} | |||
//2、更改动态数据 | |||
err = DealAvailableEggEnergyCoin(session, int(enum2.TeamActivePointRedemption), eggEnergyCoreData, md.DealAvailableEggEnergyCoinReq{ | |||
Amount: calcPriceIncreaseFormulaResp.GetEggEnergyNums, | |||
AmountFee: "", | |||
BeforePrice: calcPriceIncreaseFormulaResp.BeforePrice, | |||
AfterPrice: calcPriceIncreaseFormulaResp.AfterPrice, | |||
BeforePlanetTotalValue: calcPriceIncreaseFormulaResp.BeforePlanetTotalValue, | |||
AfterPlanetTotalValue: calcPriceIncreaseFormulaResp.AfterPlanetTotalValue, | |||
BeforeEnergyTotalNums: calcPriceIncreaseFormulaResp.BeforeEnergyTotalNums, | |||
AfterEnergyTotalNums: calcPriceIncreaseFormulaResp.AfterEnergyTotalNums, | |||
}) | |||
if err != nil { | |||
fmt.Println("ActivityCoinAutoExchangeEggTeamEnergy:::::err111:::", err) | |||
_ = session.Rollback() | |||
return err | |||
} | |||
//3、增加用户对应蛋蛋能量数量 | |||
err = rule.DealUserVirtualCoin(session, md2.DealUserVirtualCoinReq{ | |||
Kind: "add", | |||
Title: enum.TeamEggGetByEnergyEggPointCoin.String(), | |||
TransferType: int(enum.TeamEggGetByEnergyEggPointCoin), | |||
CoinId: req.EnergyCoinId, | |||
Uid: req.Uid, | |||
Amount: egg_system_rules.StrToFloat64(calcPriceIncreaseFormulaResp.GetEggEnergyNums), | |||
}) | |||
if err != nil { | |||
fmt.Println("ActivityCoinAutoExchangeEggTeamEnergy:::::err222:::", err) | |||
_ = session.Rollback() | |||
return | |||
} | |||
return session.Commit() | |||
} |
@@ -1,6 +1,7 @@ | |||
package egg_energy | |||
import ( | |||
db "code.fnuoos.com/EggPlanet/egg_models.git/src" | |||
"code.fnuoos.com/EggPlanet/egg_models.git/src/implement" | |||
"code.fnuoos.com/EggPlanet/egg_models.git/src/model" | |||
md2 "code.fnuoos.com/EggPlanet/egg_system_rules.git/rule/egg_energy/md" | |||
@@ -81,49 +82,74 @@ func ActivityCoinReadyExchangeEggEnergy(engine *xorm.Engine, uid int64, ch *rabb | |||
return errors.New("当前活跃值无法发起挖掘~") | |||
} | |||
//session := engine.NewSession() | |||
//defer func() { | |||
// session.Close() | |||
// if err := recover(); err != nil { | |||
// _ = zhios_order_relate_logx.Error(err) | |||
// } | |||
//}() | |||
//session.Begin() | |||
now := time.Now() | |||
//4、计算能兑换的个人活跃积分数量 | |||
var autoExchangeNumsByPersonAmountValue, autoExchangeNumsByTeamAmountValue string | |||
var autoExchangeNumsByPersonAmount, autoExchangeNumsByTeamAmount decimal.Decimal | |||
if egg_system_rules.StrToFloat64(personUserVirtualAmount.Amount) >= autoExchangeNumsByPerson { | |||
autoExchangeNumsByPersonValue, _ := decimal.NewFromString(personUserVirtualAmount.Amount) | |||
autoExchangeRateByPersonValue, _ := decimal.NewFromString(exchangeRulesStruct.AutoExchangeRateByPerson) | |||
autoExchangeNumsByPersonAmount := autoExchangeNumsByPersonValue.Mul(autoExchangeRateByPersonValue).Div(personActivePointsCoinExchangeRatioValue).String() //个人活跃积分数量*兑换百分比/兑换比例(与金额) | |||
//TODO::推入rabbitmq 异步处理 | |||
ch.Publish(md2.EggEnergyExchange, md2.EggEnergyStructForStartExchangeGreenEnergy{ | |||
Uid: uid, | |||
Amount: autoExchangeNumsByPersonValue.Mul(autoExchangeRateByPersonValue).String(), | |||
PointCoinId: coin1.Id, | |||
EnergyCoinId: eggEnergyBasicSetting.PersonEggEnergyCoinId, | |||
AutoExchangeNumsAmount: autoExchangeNumsByPersonAmount, | |||
StartExchangeTime: now.Format("2006-01-02 15:04:05"), | |||
EndExchangeTime: now.Add(time.Hour * time.Duration(egg_system_rules.StrToInt64(videoRewardSystem.EachRoundHour))).Format("2006-01-02 15:04:05"), | |||
}, md2.EggEnergyRoutKeyForStartExchangeGreenEnergyToPerson) | |||
autoExchangeNumsByPersonAmountValue = autoExchangeNumsByPersonValue.Mul(autoExchangeRateByPersonValue).Div(decimal.NewFromInt(100)).String() | |||
autoExchangeNumsByPersonAmount = autoExchangeNumsByPersonValue.Mul(autoExchangeRateByPersonValue).Div(decimal.NewFromInt(100)).Div(personActivePointsCoinExchangeRatioValue) //个人活跃积分数量*兑换百分比/兑换比例(与金额) | |||
} | |||
//5、计算能兑换的团队活跃积分数量 | |||
if egg_system_rules.StrToFloat64(teamUserVirtualAmount.Amount) >= autoExchangeNumsByTeam { | |||
autoExchangeNumsByTeamValue, _ := decimal.NewFromString(teamUserVirtualAmount.Amount) | |||
autoExchangeRateByTeamValue, _ := decimal.NewFromString(exchangeRulesStruct.AutoExchangeRateByTeam) | |||
autoExchangeNumsByTeamAmount := autoExchangeNumsByTeamValue.Mul(autoExchangeRateByTeamValue).Div(teamActivePointsCoinExchangeRatioValue).String() //团队活跃积分数量*兑换百分比/兑换比例(与金额) | |||
//TODO::推入rabbitmq 异步处理 | |||
ch.Publish(md2.EggEnergyExchange, md2.EggEnergyStructForStartExchangeGreenEnergy{ | |||
Uid: uid, | |||
Amount: autoExchangeNumsByTeamValue.Mul(autoExchangeRateByTeamValue).String(), | |||
PointCoinId: coin2.Id, | |||
EnergyCoinId: eggEnergyBasicSetting.TeamEggEnergyCoinId, | |||
AutoExchangeNumsAmount: autoExchangeNumsByTeamAmount, | |||
StartExchangeTime: now.Format("2006-01-02 15:04:05"), | |||
EndExchangeTime: now.Add(time.Hour * time.Duration(egg_system_rules.StrToInt64(videoRewardSystem.EachRoundHour))).Format("2006-01-02 15:04:05"), | |||
}, md2.EggEnergyRoutKeyForStartExchangeGreenEnergyToTeam) | |||
autoExchangeNumsByTeamAmountValue = autoExchangeNumsByTeamValue.Mul(autoExchangeRateByTeamValue).Div(decimal.NewFromInt(100)).String() | |||
autoExchangeNumsByTeamAmount = autoExchangeNumsByTeamValue.Mul(autoExchangeRateByTeamValue).Div(decimal.NewFromInt(100)).Div(teamActivePointsCoinExchangeRatioValue) //团队活跃积分数量*兑换百分比/兑换比例(与金额) | |||
} | |||
//6、插入签到记录 | |||
now := time.Now() | |||
eggSignInDb := implement.NewEggSignInDb(db.Db) | |||
var sign = &model.EggSignIn{ | |||
Uid: uid, | |||
StartTime: now.Format("2006-01-02 15:04:05"), | |||
EndTime: now.Add(time.Hour * time.Duration(egg_system_rules.StrToInt64(videoRewardSystem.EachRoundHour))).Format("2006-01-02 15:04:05"), | |||
TotalPersonEggPoints: autoExchangeNumsByPersonAmountValue, | |||
TotalTeamEggPoints: autoExchangeNumsByTeamAmountValue, | |||
EstimatePerSecondPersonEggEnergyValue: "", | |||
EstimatePerSecondTeamEggEnergyValue: "", | |||
TotalPersonEggPointsAmountValue: autoExchangeNumsByPersonAmount.String(), | |||
TotalTeamEggPointsAmountValue: autoExchangeNumsByTeamAmount.String(), | |||
IsCompleted: 0, | |||
} | |||
_, err = eggSignInDb.EggSignInInsert(sign) | |||
if err != nil { | |||
return err | |||
} | |||
//7、新增 `egg_energy_user_activity` 记录 | |||
var m model.EggEnergyUserActivity | |||
has, err := engine.Where("uid =? and date =?", uid, now.Format("2006-01-02")).Get(&m) | |||
if err != nil { | |||
return err | |||
} | |||
if !has { | |||
eggEnergyUserActivityDb := implement.NewEggEnergyUserActivityDb(db.Db) | |||
insertAffected, err1 := eggEnergyUserActivityDb.EggEnergyUserActivityInsert(&model.EggEnergyUserActivity{ | |||
Uid: uid, | |||
Date: now.Format("2006-01-02"), | |||
}) | |||
if err1 != nil { | |||
return err1 | |||
} | |||
if insertAffected <= 0 { | |||
return errors.New("插入活跃记录失败") | |||
} | |||
} | |||
//TODO::推入rabbitmq 异步处理 | |||
ch.Publish(md2.EggEnergyExchange, md2.EggEnergyStructForStartExchangeGreenEnergy{ | |||
Uid: uid, | |||
SignId: sign.Id, | |||
PersonEggEnergyCoinId: eggEnergyBasicSetting.PersonEggEnergyCoinId, | |||
TeamEggEnergyCoinId: eggEnergyBasicSetting.TeamEggEnergyCoinId, | |||
PersonPointCoinId: coin1.Id, | |||
PersonEnergyCoinId: eggEnergyBasicSetting.PersonEggEnergyCoinId, | |||
TeamPointCoinId: coin2.Id, | |||
TeamEnergyCoinId: eggEnergyBasicSetting.TeamEggEnergyCoinId, | |||
}, md2.EggEnergyRoutKeyForStartExchangeGreenEnergy) | |||
return | |||
} |
@@ -1,19 +1,23 @@ | |||
package egg_energy | |||
import ( | |||
"code.fnuoos.com/EggPlanet/egg_models.git/src/implement" | |||
"code.fnuoos.com/EggPlanet/egg_system_rules.git/enum" | |||
md2 "code.fnuoos.com/EggPlanet/egg_system_rules.git/md" | |||
"code.fnuoos.com/EggPlanet/egg_system_rules.git/rule" | |||
enum2 "code.fnuoos.com/EggPlanet/egg_system_rules.git/rule/egg_energy/enum" | |||
"code.fnuoos.com/EggPlanet/egg_system_rules.git/rule/egg_energy/md" | |||
"code.fnuoos.com/EggPlanet/egg_system_rules.git/rule/egg_energy/svc" | |||
egg_system_rules "code.fnuoos.com/EggPlanet/egg_system_rules.git/utils" | |||
zhios_order_relate_logx "code.fnuoos.com/EggPlanet/egg_system_rules.git/utils/logx" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"fmt" | |||
"github.com/shopspring/decimal" | |||
"xorm.io/xorm" | |||
) | |||
// ActivityCoinStartExchangeEggPersonEnergy 个人蛋蛋积分【开始】兑换成个人蛋蛋能量 | |||
func ActivityCoinStartExchangeEggPersonEnergy(engine *xorm.Engine, req md.EggEnergyStructForStartExchangeGreenEnergy, ch *rabbit.Channel) (err error) { | |||
// ActivityCoinStartExchangeEggEnergy 蛋蛋积分【开始】兑换成蛋蛋能量 | |||
func ActivityCoinStartExchangeEggEnergy(engine *xorm.Engine, req md.EggEnergyStructForStartExchangeGreenEnergy, ch *rabbit.Channel) (err error) { | |||
session := engine.NewSession() | |||
defer func() { | |||
session.Close() | |||
@@ -23,29 +27,127 @@ func ActivityCoinStartExchangeEggPersonEnergy(engine *xorm.Engine, req md.EggEne | |||
}() | |||
session.Begin() | |||
//1、扣除用户对应蛋蛋活跃积分数量 | |||
//1、查询sign 记录 | |||
eggSignInDb := implement.NewEggSignInDb(engine) | |||
sign, err := eggSignInDb.EggSignInGet(req.SignId) | |||
if err != nil { | |||
return err | |||
} | |||
//2、扣除用户对应蛋蛋活跃积分数量 | |||
err = rule.DealUserVirtualCoin(session, md2.DealUserVirtualCoinReq{ | |||
Kind: "sub", | |||
Title: enum.EggPointCoinToExchangeToPersonEggEnergy.String(), | |||
TransferType: int(enum.EggPointCoinToExchangeToPersonEggEnergy), | |||
CoinId: req.PointCoinId, | |||
CoinId: req.PersonPointCoinId, | |||
Uid: req.Uid, | |||
Amount: egg_system_rules.StrToFloat64(sign.TotalPersonEggPoints), | |||
}) | |||
if err != nil { | |||
fmt.Println("ActivityCoinStartExchangeEggEnergy:::::err111:::", err) | |||
_ = session.Rollback() | |||
return | |||
} | |||
err = rule.DealUserVirtualCoin(session, md2.DealUserVirtualCoinReq{ | |||
Kind: "sub", | |||
Title: enum.EggPointCoinToExchangeToTeamEggEnergy.String(), | |||
TransferType: int(enum.EggPointCoinToExchangeToTeamEggEnergy), | |||
CoinId: req.TeamEnergyCoinId, | |||
Uid: req.Uid, | |||
Amount: egg_system_rules.StrToFloat64(req.Amount), | |||
Amount: egg_system_rules.StrToFloat64(sign.TotalTeamEggPoints), | |||
}) | |||
if err != nil { | |||
fmt.Println("ActivityCoinStartExchangeEggPersonEnergy:::::err111:::", err) | |||
fmt.Println("ActivityCoinStartExchangeEggEnergy:::::er222:::", err) | |||
_ = session.Rollback() | |||
return | |||
} | |||
//3、进行兑换购买 | |||
eggEnergyCoreData, cb, err := svc.GetEggEnergyCoreData(engine) | |||
if err != nil { | |||
return err | |||
} | |||
if cb != nil { | |||
defer cb() // 释放锁 | |||
} | |||
//3.1、计算涨价公式 | |||
err1, calcPriceIncreaseFormulaRespForPerson := CalcPriceIncreaseFormula(sign.TotalPersonEggPointsAmountValue, eggEnergyCoreData) | |||
if err1 != nil { | |||
_ = session.Rollback() | |||
return err1 | |||
} | |||
err1, calcPriceIncreaseFormulaRespForTeam := CalcPriceIncreaseFormula(sign.TotalPersonEggPointsAmountValue, eggEnergyCoreData) | |||
if err1 != nil { | |||
_ = session.Rollback() | |||
return err1 | |||
} | |||
//3.2、更改动态数据 | |||
err = DealAvailableEggEnergyCoin(session, int(enum2.PersonalActivePointRedemption), eggEnergyCoreData, md.DealAvailableEggEnergyCoinReq{ | |||
Amount: calcPriceIncreaseFormulaRespForPerson.GetEggEnergyNums, | |||
AmountFee: "", | |||
BeforePrice: calcPriceIncreaseFormulaRespForPerson.BeforePrice, | |||
AfterPrice: calcPriceIncreaseFormulaRespForPerson.AfterPrice, | |||
BeforePlanetTotalValue: calcPriceIncreaseFormulaRespForPerson.BeforePlanetTotalValue, | |||
AfterPlanetTotalValue: calcPriceIncreaseFormulaRespForPerson.AfterPlanetTotalValue, | |||
BeforeEnergyTotalNums: calcPriceIncreaseFormulaRespForPerson.BeforeEnergyTotalNums, | |||
AfterEnergyTotalNums: calcPriceIncreaseFormulaRespForPerson.AfterEnergyTotalNums, | |||
}) | |||
if err != nil { | |||
fmt.Println("ActivityCoinStartExchangeEggEnergy:::::er333:::", err) | |||
_ = session.Rollback() | |||
return err | |||
} | |||
err = DealAvailableEggEnergyCoin(session, int(enum2.TeamActivePointRedemption), eggEnergyCoreData, md.DealAvailableEggEnergyCoinReq{ | |||
Amount: calcPriceIncreaseFormulaRespForTeam.GetEggEnergyNums, | |||
AmountFee: "", | |||
BeforePrice: calcPriceIncreaseFormulaRespForTeam.BeforePrice, | |||
AfterPrice: calcPriceIncreaseFormulaRespForTeam.AfterPrice, | |||
BeforePlanetTotalValue: calcPriceIncreaseFormulaRespForTeam.BeforePlanetTotalValue, | |||
AfterPlanetTotalValue: calcPriceIncreaseFormulaRespForTeam.AfterPlanetTotalValue, | |||
BeforeEnergyTotalNums: calcPriceIncreaseFormulaRespForTeam.BeforeEnergyTotalNums, | |||
AfterEnergyTotalNums: calcPriceIncreaseFormulaRespForTeam.AfterEnergyTotalNums, | |||
}) | |||
if err != nil { | |||
fmt.Println("ActivityCoinStartExchangeEggEnergy:::::err444:::", err) | |||
_ = session.Rollback() | |||
return err | |||
} | |||
//4、修改sign记录 | |||
startTime, _ := egg_system_rules.StringToTime(sign.StartTime) | |||
endTime, _ := egg_system_rules.StringToTime(sign.EndTime) | |||
seconds := endTime.Sub(startTime).Seconds() | |||
secondsValue := decimal.NewFromFloat(seconds) | |||
eggEnergyNumsForPersonValue, _ := decimal.NewFromString(calcPriceIncreaseFormulaRespForPerson.GetEggEnergyNums) | |||
eggEnergyNumsForTeamValue, _ := decimal.NewFromString(calcPriceIncreaseFormulaRespForTeam.GetEggEnergyNums) | |||
sign.EstimatePerSecondPersonEggEnergyValue = eggEnergyNumsForPersonValue.Div(secondsValue).String() | |||
sign.EstimatePerSecondTeamEggEnergyValue = eggEnergyNumsForTeamValue.Div(secondsValue).String() | |||
_, err = eggSignInDb.EggSignInUpdateBySession(session, sign.Id, sign, "estimate_per_second_person_egg_energy_value", "estimate_per_second_team_egg_energy_value") | |||
if err != nil { | |||
fmt.Println("ActivityCoinStartExchangeEggEnergy:::::err555:::", err) | |||
_ = session.Rollback() | |||
return err | |||
} | |||
err = session.Commit() | |||
if err != nil { | |||
fmt.Println("ActivityCoinStartExchangeEggEnergy:::::err666:::", err) | |||
_ = session.Rollback() | |||
return err | |||
} | |||
//TODO::推入rabbitmq 异步处理 | |||
ch.Publish(md.EggEnergyExchange, md.EggEnergyStructForAutoExchangeGreenEnergy{ | |||
Uid: req.Uid, | |||
EnergyCoinId: req.EnergyCoinId, | |||
AutoExchangeNumsAmount: req.AutoExchangeNumsAmount, | |||
StartExchangeTime: req.StartExchangeTime, | |||
EndExchangeTime: req.EndExchangeTime, | |||
}, md.EggEnergyRoutKeyForAutoExchangeGreenEnergyToPerson) | |||
return session.Commit() | |||
Uid: req.Uid, | |||
SignId: sign.Id, | |||
PersonEggEnergyCoinId: req.PersonEnergyCoinId, | |||
TeamEggEnergyCoinId: req.TeamEggEnergyCoinId, | |||
StartExchangeTime: sign.StartTime, | |||
EndExchangeTime: sign.EndTime, | |||
}, md.EggEnergyRoutKeyForAutoExchangeGreenEnergy) | |||
return | |||
} |
@@ -1,51 +0,0 @@ | |||
package egg_energy | |||
import ( | |||
"code.fnuoos.com/EggPlanet/egg_system_rules.git/enum" | |||
md2 "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/rule/egg_energy/md" | |||
egg_system_rules "code.fnuoos.com/EggPlanet/egg_system_rules.git/utils" | |||
zhios_order_relate_logx "code.fnuoos.com/EggPlanet/egg_system_rules.git/utils/logx" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"fmt" | |||
"xorm.io/xorm" | |||
) | |||
// ActivityCoinStartExchangeEggTeamEnergy 团队蛋蛋积分【开始】兑换成团队蛋蛋能量 | |||
func ActivityCoinStartExchangeEggTeamEnergy(engine *xorm.Engine, req md.EggEnergyStructForStartExchangeGreenEnergy, ch *rabbit.Channel) (err error) { | |||
session := engine.NewSession() | |||
defer func() { | |||
session.Close() | |||
if err := recover(); err != nil { | |||
_ = zhios_order_relate_logx.Error(err) | |||
} | |||
}() | |||
session.Begin() | |||
//1、扣除用户对应蛋蛋活跃积分数量 | |||
err = rule.DealUserVirtualCoin(session, md2.DealUserVirtualCoinReq{ | |||
Kind: "sub", | |||
Title: enum.EggPointCoinToExchangeToTeamEggEnergy.String(), | |||
TransferType: int(enum.EggPointCoinToExchangeToTeamEggEnergy), | |||
CoinId: req.PointCoinId, | |||
Uid: req.Uid, | |||
Amount: egg_system_rules.StrToFloat64(req.Amount), | |||
}) | |||
if err != nil { | |||
fmt.Println("ActivityCoinStartExchangeEggTeamEnergy:::::err111:::", err) | |||
_ = session.Rollback() | |||
return | |||
} | |||
//TODO::推入rabbitmq 异步处理 | |||
ch.Publish(md.EggEnergyExchange, md.EggEnergyStructForAutoExchangeGreenEnergy{ | |||
Uid: req.Uid, | |||
EnergyCoinId: req.EnergyCoinId, | |||
AutoExchangeNumsAmount: req.AutoExchangeNumsAmount, | |||
StartExchangeTime: req.StartExchangeTime, | |||
EndExchangeTime: req.EndExchangeTime, | |||
}, md.EggEnergyRoutKeyForAutoExchangeGreenEnergyToTeam) | |||
return session.Commit() | |||
} |
@@ -9,11 +9,14 @@ import ( | |||
md2 "code.fnuoos.com/EggPlanet/egg_system_rules.git/rule/egg_energy/md" | |||
egg_system_rules "code.fnuoos.com/EggPlanet/egg_system_rules.git/utils" | |||
"code.fnuoos.com/EggPlanet/egg_system_rules.git/utils/cache" | |||
"code.fnuoos.com/EggPlanet/egg_system_rules.git/utils/es" | |||
zhios_order_relate_logx "code.fnuoos.com/EggPlanet/egg_system_rules.git/utils/logx" | |||
es2 "code.fnuoos.com/go_rely_warehouse/zyos_go_es.git/es" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/olivere/elastic/v7" | |||
"github.com/shopspring/decimal" | |||
"strings" | |||
"time" | |||
@@ -21,7 +24,10 @@ import ( | |||
) | |||
// SettlementGiveActivityCoin 结算观看激励广告得到蛋蛋积分 | |||
func SettlementGiveActivityCoin(engine *xorm.Engine, uid int64, ch *rabbit.Channel) (err error) { | |||
func SettlementGiveActivityCoin(engine *xorm.Engine, user model.User, ch *rabbit.Channel) (err error) { | |||
uid := user.Id | |||
now := time.Now() | |||
//1、查找 `egg_energy_basic_setting` 基础设置 | |||
eggEnergyBasicSettingDb := implement.NewEggEnergyBasicSettingDb(engine) | |||
eggEnergyBasicSetting, err := eggEnergyBasicSettingDb.EggEnergyBasicSettingGetOneByParams(map[string]interface{}{ | |||
@@ -45,6 +51,7 @@ func SettlementGiveActivityCoin(engine *xorm.Engine, uid int64, ch *rabbit.Chann | |||
err = errors.New("视屏奖励机制设置未完全!") | |||
return | |||
} | |||
var rewardSystem []*md2.RewardSystemStruct | |||
err = json.Unmarshal([]byte(eggEnergyBasicSetting.RewardSystem), &rewardSystem) | |||
if err != nil { | |||
@@ -54,7 +61,38 @@ func SettlementGiveActivityCoin(engine *xorm.Engine, uid int64, ch *rabbit.Chann | |||
err = errors.New("未设置奖励机制!") | |||
return | |||
} | |||
rewardValue := egg_system_rules.StrToFloat64(videoRewardSystem.RewardValue) //奖励多少个活跃积分 | |||
rewardValue := egg_system_rules.StrToFloat64(videoRewardSystem.RewardValue) //TODO::奖励多少个活跃积分(根据ecpm, 新用户机制, 蛋蛋分机制) | |||
var newUserRewardRules *md2.NewUserRewardRules | |||
err = json.Unmarshal([]byte(eggEnergyBasicSetting.NewUserIncentiveRules), &newUserRewardRules) | |||
if err != nil { | |||
return | |||
} | |||
userCreateAt := egg_system_rules.String2Time(user.CreateAt) | |||
if int(now.Sub(userCreateAt).Hours()/24) <= newUserRewardRules.ContinueDays { | |||
rewardValue *= newUserRewardRules.RewardCoefficient | |||
} | |||
score := 60.00 | |||
esIndex := es.GetLatestEffectiveIndexFromAlias(now) | |||
esIndexName := md.EggEnergyUserEggScoreEsAlias + "_" + esIndex | |||
results, err1 := es2.FirstDoc(esIndexName, esIndex+"_"+egg_system_rules.Int64ToStr(user.Id)) | |||
if err1 != nil { | |||
if !elastic.IsNotFound(err1) { | |||
return err1 | |||
} | |||
} | |||
if !elastic.IsNotFound(err1) { | |||
var doc md.EggEnergyUserEggScoreEs | |||
err = json.Unmarshal(results.Source, &doc) | |||
if err != nil { | |||
return | |||
} | |||
score = doc.ScoreValue | |||
} | |||
if score > 60 { | |||
//TODO::按照蛋蛋分比重× | |||
} | |||
var rewardSystemMap = map[int]*md2.RewardSystemStruct{} | |||
for _, v := range rewardSystem { | |||
rewardSystemMap[v.Level] = v | |||
@@ -2,7 +2,6 @@ package egg_energy | |||
import ( | |||
"code.fnuoos.com/EggPlanet/egg_models.git/src/implement" | |||
"code.fnuoos.com/EggPlanet/egg_models.git/src/model" | |||
zhios_order_relate_utils "code.fnuoos.com/EggPlanet/egg_models.git/utils" | |||
"code.fnuoos.com/EggPlanet/egg_system_rules.git/rule/egg_energy/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
@@ -92,35 +91,7 @@ func HomePageStartSignIn(engine *xorm.Engine, req md.HomePageStartSignInReq) err | |||
})) | |||
return errors.New("非签到时间," + "请求账号:" + req.Phone + ",请求时间:" + now.Format("2006-01-02 15:04:05") + ",签到时间:" + eggSignIn.EndTime) | |||
} | |||
//2、新增 `egg_sign_in` 记录 | |||
endTime := now.Add(time.Hour * time.Duration(oneRoundDuration)).Format("2006-01-02 15:04:05") | |||
_, err = engine.Insert(&model.EggSignIn{ | |||
Uid: req.UID, | |||
StartTime: now.Format("2006-01-02 15:04:05"), | |||
EndTime: endTime, | |||
IsCompleted: 0, | |||
}) | |||
if err != nil { | |||
return err | |||
} | |||
//3、新增 `egg_energy_user_activity` 记录 | |||
var m model.EggEnergyUserActivity | |||
has, err := engine.Where("uid =? and date =?", req.UID, now.Format("2006-01-02")).Get(&m) | |||
if err != nil { | |||
return err | |||
} | |||
if !has { | |||
affected, err1 := engine.Insert(&model.EggEnergyUserActivity{ | |||
Uid: int(req.UID), | |||
Date: now.Format("2006-01-02"), | |||
}) | |||
if err1 != nil { | |||
return err1 | |||
} | |||
if affected <= 0 { | |||
return errors.New("插入活跃记录失败") | |||
} | |||
} | |||
ch, err := rabbit.Cfg.Pool.GetChannel() | |||
if err != nil { | |||
return err | |||
@@ -223,24 +223,9 @@ func settlementPublicGiveActivityCoin(engine *xorm.Engine, uid int64, ch *rabbit | |||
Uid: int64(vv.Uid), | |||
Amount: vv.RewardValue, | |||
}, md.EggEnergyRoutKeyForDealUserVirtualCoinData) | |||
//err = DealUserCoin(session, md.DealUserCoinReq{ | |||
// Kind: "add", | |||
// Mid: masterId, | |||
// Title: md.OneCirclesWatchAdRewardTeamActiveCoin, | |||
// TransferType: md.OneCirclesWatchAdRewardTeamActiveCoinForUserVirtualCoinFlow, | |||
// OrdId: "", | |||
// CoinId: oneCirclesPublicPlatoonBasicSetting.TeamActivePointsCoinId, | |||
// Uid: vv.Uid, | |||
// Amount: vv.RewardValue, | |||
//}) | |||
//if err != nil { | |||
// _ = session.Rollback() | |||
// fmt.Println("err:::::2222", err) | |||
// return err | |||
//} | |||
} | |||
err = session.Commit() | |||
if err != nil { | |||
err11 := session.Commit() | |||
if err11 != nil { | |||
_ = session.Rollback() | |||
return errors.New("事务提交失败") | |||
} | |||
@@ -92,7 +92,7 @@ type CalcPriceIncreaseFormulaResp struct { | |||
} | |||
type CalcPriceReductionFormulaResp struct { | |||
GetEggEnergyAmount string `json:"get_egg_energy_amount"` //得到蛋蛋能量的钱 | |||
GetEggEnergyAmount string `json:"get_egg_energy_amount"` //得到蛋蛋能量的钱` | |||
BeforePrice string `json:"before_price"` //变更前-价格 | |||
AfterPrice string `json:"after_price"` //变更后-价格 | |||
BeforePlanetTotalValue string `json:"before_planet_total_value"` //变更前-星球总价值 | |||
@@ -5,10 +5,8 @@ const EggEnergyExchange = "egg.energy" | |||
const ( | |||
EggEnergyRoutKeyForStarLevelDividend = "star_level_dividend" // 星级分红 | |||
EggEnergyRoutKeyForSettlementPublicGiveActivityCoin = "settlement_public_give_activity_coin" // 计算观看激励视屏得到活跃积分 | |||
EggEnergyRoutKeyForStartExchangeGreenEnergyToPerson = "start_exchange_egg_energy_to_person" // 开始兑换个人蛋蛋能量 | |||
EggEnergyRoutKeyForAutoExchangeGreenEnergyToPerson = "auto_exchange_egg_energy_to_person" // 自动兑换个人蛋蛋能量 | |||
EggEnergyRoutKeyForStartExchangeGreenEnergyToTeam = "start_exchange_egg_energy_to_team" // 开始兑换团队蛋蛋能量 | |||
EggEnergyRoutKeyForAutoExchangeGreenEnergyToTeam = "auto_exchange_egg_energy_to_team" // 自动兑换团队蛋蛋能量 | |||
EggEnergyRoutKeyForStartExchangeGreenEnergy = "start_exchange_egg_energy" // 开始兑换蛋蛋能量 | |||
EggEnergyRoutKeyForAutoExchangeGreenEnergy = "auto_exchange_egg_energy" // 自动兑换蛋蛋能量 | |||
EggEnergyRoutKeyForEggEnergyFundData = "fund_data" // 资金汇入 | |||
EggEnergyRoutKeyForPlatformRevenueData = "platform_revenue_data" // 平台收入 | |||
EggEnergyRoutKeyForDealUserVirtualCoinData = "deal_user_virtual_coin" // 处理给用户虚拟币积分 | |||
@@ -30,24 +28,25 @@ type EggEnergyStructForStarLevelDividends struct { | |||
SignDividend float64 `json:"sign_dividend"` | |||
} | |||
type EggEnergyStructForStartExchangeGreenEnergy struct { | |||
Uid int64 `json:"uid"` | |||
Amount string `json:"amount"` | |||
PointCoinId int `json:"point_coin_id"` | |||
EnergyCoinId int `json:"energy_coin_id"` | |||
AutoExchangeNumsAmount string `json:"auto_exchange_nums_amount"` | |||
StartExchangeTime string `json:"start_exchange_time"` //发起兑换时间 | |||
EndExchangeTime string `json:"end_exchange_time"` //截止兑换时间 | |||
} | |||
type EggEnergyStructForAutoExchangeGreenEnergy struct { | |||
Uid int64 `json:"uid"` | |||
EnergyCoinId int `json:"energy_coin_id"` | |||
AutoExchangeNumsAmount string `json:"auto_exchange_nums_amount"` | |||
StartExchangeTime string `json:"start_exchange_time"` //发起兑换时间 | |||
EndExchangeTime string `json:"end_exchange_time"` //截止兑换时间 | |||
Uid int64 `json:"uid"` | |||
SignId int64 `json:"sign_id"` | |||
PersonEggEnergyCoinId int `json:"person_egg_energy_coin_id"` | |||
TeamEggEnergyCoinId int `json:"team_egg_energy_coin_id"` | |||
StartExchangeTime string `json:"start_exchange_time"` //发起兑换时间 | |||
EndExchangeTime string `json:"end_exchange_time"` //截止兑换时间 | |||
} | |||
type EggEnergyStructForStartExchangeGreenEnergy struct { | |||
Uid int64 `json:"uid"` | |||
SignId int64 `json:"sign_id"` | |||
PersonEggEnergyCoinId int `json:"person_egg_energy_coin_id"` | |||
TeamEggEnergyCoinId int `json:"team_egg_energy_coin_id"` | |||
PersonPointCoinId int `json:"person_point_coin_id"` | |||
PersonEnergyCoinId int `json:"person_energy_coin_id"` | |||
TeamPointCoinId int `json:"team_point_coin_id"` | |||
TeamEnergyCoinId int `json:"team_energy_coin_id"` | |||
} | |||
type EggEnergyStructForPlatformRevenueData struct { | |||
ID int `json:"id"` | |||
Amount string `json:"amount"` // 资金汇入处理金额 | |||