From c8a67b300b1c4c3f1e0c69971835845ee53e3d3b Mon Sep 17 00:00:00 2001 From: huangjiajun <582604932@qq.com> Date: Mon, 25 Sep 2023 20:21:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/db/db_user.go | 6 + app/db/model/fin_withdraw_apply.go | 23 +++ consume/init.go | 1 + consume/md/consume_key.go | 10 ++ .../md/md_zhios_capital_pool_order_total.go | 4 + consume/zhios_withdraw_reward.go | 142 ++++++++++++++++++ go.mod | 4 +- 7 files changed, 189 insertions(+), 1 deletion(-) create mode 100644 app/db/model/fin_withdraw_apply.go create mode 100644 consume/zhios_withdraw_reward.go diff --git a/app/db/db_user.go b/app/db/db_user.go index 0da8d54..0bf07f3 100644 --- a/app/db/db_user.go +++ b/app/db/db_user.go @@ -326,3 +326,9 @@ func UserProfileFindByID(Db *xorm.Engine, id interface{}) (*model.UserProfile, e } return &m, nil } + +func UserFindByLevel(eg *xorm.Engine, level int) []model.User { + var data []model.User + eg.Where("level=?", level).Find(&data) + return data +} diff --git a/app/db/model/fin_withdraw_apply.go b/app/db/model/fin_withdraw_apply.go new file mode 100644 index 0000000..9c8d618 --- /dev/null +++ b/app/db/model/fin_withdraw_apply.go @@ -0,0 +1,23 @@ +package model + +import ( + "time" +) + +type FinWithdrawApply struct { + Id int64 `json:"id" xorm:"pk autoincr BIGINT(20)"` + Uid int `json:"uid" xorm:"not null default 0 comment('用户ID') index INT(10)"` + AdmId int `json:"adm_id" xorm:"not null default 0 comment('审核人ID,0为系统自动') INT(10)"` + Amount string `json:"amount" xorm:"not null default 0.00 comment('提现金额') DECIMAL(10,2)"` + Memo string `json:"memo" xorm:"not null default '' comment('备注,失败请备注原因') VARCHAR(500)"` + Type int `json:"type" xorm:"not null default 1 comment('提现类型;1:手动;2:自动') TINYINT(1)"` + WithdrawAccount string `json:"withdraw_account" xorm:"not null default '' comment('提现账号') VARCHAR(64)"` + WithdrawName string `json:"withdraw_name" xorm:"not null default '' comment('提现人姓名') VARCHAR(12)"` + Reason int `json:"reason" xorm:"not null default 0 comment('审核失败(驳回理由);1:当前账号不满足提现规则;2:账号异常;3:资金异常') TINYINT(1)"` + CreateAt time.Time `json:"create_at" xorm:"not null default CURRENT_TIMESTAMP comment('申请时间') TIMESTAMP"` + UpdateAt time.Time `json:"update_at" xorm:"not null default CURRENT_TIMESTAMP comment('处理时间') TIMESTAMP"` + State int `json:"state" xorm:"not null default 0 comment('0申请中,1通过,2完成,3失败') TINYINT(1)"` + WithdrawRefundType int `json:"withdraw_refund_type" xorm:"not null default 0 comment('') TINYINT(1)"` + WithdrawDealType int `json:"withdraw_deal_type" xorm:"not null default 0 comment('') TINYINT(1)"` + WithdrawMoney string `json:"withdraw_money" xorm:"not null default '' comment('') VARCHAR(255)" ` +} diff --git a/consume/init.go b/consume/init.go index 7968bd2..653b790 100644 --- a/consume/init.go +++ b/consume/init.go @@ -45,6 +45,7 @@ func initConsumes() { jobs[consumeMd.ZhiosCapitalPoolOrderTotalFunName] = ZhiosCapitalPoolOrderTotal jobs[consumeMd.ZhiosExpressOrderFail] = ZhiosExpressOrderFail + jobs[consumeMd.ZhiosWithdrawReward] = ZhiosWithdrawReward //jobs[consumeMd.ZhiosRechargeOrderFailDevFunName] = ZhiosRechargeOrderFailDev diff --git a/consume/md/consume_key.go b/consume/md/consume_key.go index 4d56706..b324c9e 100644 --- a/consume/md/consume_key.go +++ b/consume/md/consume_key.go @@ -210,6 +210,15 @@ var RabbitMqQueueKeyList = []*MqQueue{ BindKey: "", ConsumeFunName: "zhiosExpressOrderFail", }, + { + ExchangeName: "zhios.withdraw.reward.exchange", + Name: "zhios_withdraw_reward", + Type: DirectQueueType, + IsPersistent: false, + RoutKey: "withdraw_reward", + BindKey: "", + ConsumeFunName: "zhiosWithdrawReward", + }, } const ( @@ -230,6 +239,7 @@ const ( ZhiosRechargeOrderFailDevFunName = "ZhiosRechargeOrderFailDev" ZhiosCapitalPoolOrderTotalFunName = "ZhiosCapitalPoolOrderTotal" ZhiosExpressOrderFail = "zhiosExpressOrderFail" + ZhiosWithdrawReward = "zhiosWithdrawReward" ZhiosTikTokUpdateFunName = "ZhiosTikTokUpdate" ZhiosTikTokAllUpdateFunName = "ZhiosTikTokAllUpdate" CloudIssuanceAsyncMLoginFunName = "CloudIssuanceAsyncMLoginConsume" diff --git a/consume/md/md_zhios_capital_pool_order_total.go b/consume/md/md_zhios_capital_pool_order_total.go index ce14099..9d726ee 100644 --- a/consume/md/md_zhios_capital_pool_order_total.go +++ b/consume/md/md_zhios_capital_pool_order_total.go @@ -14,3 +14,7 @@ type ZhiosExpressOrderFails struct { Oid string `json:"oid"` IsFail string `json:"is_fail"` } +type ZhiosWithdraw struct { + Id string `json:"id"` + Mid string `json:"mid"` +} diff --git a/consume/zhios_withdraw_reward.go b/consume/zhios_withdraw_reward.go new file mode 100644 index 0000000..ab1d674 --- /dev/null +++ b/consume/zhios_withdraw_reward.go @@ -0,0 +1,142 @@ +package consume + +import ( + "applet/app/db" + "applet/app/db/model" + "applet/app/utils" + "applet/app/utils/logx" + "applet/consume/md" + "code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" + "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/rule" + "encoding/json" + "errors" + "fmt" + "github.com/streadway/amqp" + "github.com/tidwall/gjson" + "time" + "xorm.io/xorm" +) + +func ZhiosWithdrawReward(queue md.MqQueue) { + fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>") + ch, err := rabbit.Cfg.Pool.GetChannel() + if err != nil { + logx.Error(err) + return + } + defer ch.Release() + //1、将自己绑定到交换机上 + ch.Bind(queue.Name, queue.ExchangeName, queue.RoutKey) + //2、取出数据进行消费 + ch.Qos(20) + delivery := ch.Consume(queue.Name, false) + + var res amqp.Delivery + var ok bool + for { + res, ok = <-delivery + if ok == true { + //fmt.Println(string(res.Body)) + fmt.Println(">>>>>>>>>>>>>>>>CanalOrderConsume<<<<<<<<<<<<<<<<<<<<<<<<<") + err = handleZhiosWithdrawReward(res.Body) + //_ = res.Reject(false) + if err == nil { + _ = res.Ack(true) + } + } else { + panic(errors.New("error getting message")) + } + } + fmt.Println("get msg done") +} + +func handleZhiosWithdrawReward(msg []byte) error { + //1、解析canal采集至mq中queue的数据结构体 + var canalMsg *md.ZhiosWithdraw + fmt.Println(string(msg)) + var tmpString string + err := json.Unmarshal(msg, &tmpString) + if err != nil { + fmt.Println(err.Error()) + return err + } + fmt.Println(tmpString) + err = json.Unmarshal([]byte(tmpString), &canalMsg) + if err != nil { + return err + } + mid := canalMsg.Mid + eg := db.DBs[mid] + if eg == nil { + return nil + } + //判断用户是什么等级 + var apply model.FinWithdrawApply + get, err := eg.Where("id=?", canalMsg.Id).Get(&apply) + if get == false || err != nil { + return nil + } + if apply.Uid == 0 { + return nil + } + // + withdrawSetting := db.SysCfgGetWithDb(eg, mid, "withdraw_setting") + withdrawFirstBili := gjson.Get(withdrawSetting, "withdrawFirstBili").String() + publicWithdrawTeamBili := db.SysCfgGetWithDb(eg, mid, "public_withdraw_team_bili") + publicWithdrawTeamCount := db.SysCfgGetWithDb(eg, mid, "public_withdraw_team_count") + if utils.StrToFloat64(withdrawFirstBili) > 0 { + level := 0 + all, _ := db.UserLevlEgAll(eg) + for k, v := range all { + if k == 0 { + level = v.Id + } + } + //分给粉丝 + levelUser := db.UserFindByLevel(eg, level) + if len(levelUser) == 0 { + return nil + } + ids := make([]int64, 0) + for _, v := range levelUser { + ids = append(ids, int64(v.Uid)) + } + money := utils.FloatFormat(utils.StrToFloat64(apply.Amount)*(utils.StrToFloat64(withdrawFirstBili)/100)/float64(len(levelUser)), 6) + comm(eg, canalMsg.Id, ids, money, "全网提现分红", "withdraw_reward", "92") + } + if utils.StrToFloat64(publicWithdrawTeamBili) > 0 && utils.StrToFloat64(publicWithdrawTeamCount) > 0 { + //分给粉丝 + user, _ := rule.FindRandUser(eg, utils.StrToInt(publicWithdrawTeamCount)) + money := utils.FloatFormat(utils.StrToFloat64(apply.Amount)*(utils.StrToFloat64(publicWithdrawTeamBili)/100)/float64(len(user)), 6) + comm(eg, canalMsg.Id, user, money, "公排团队提现分红", "withdraw_team_reward", "93") + } + return nil +} +func comm(eg *xorm.Engine, id string, levelUser []int64, money float64, title, types, ordAction string) { + for _, v := range levelUser { + profile, err := db.UserProfileFindByID(eg, v) + if err != nil || profile == nil { + continue + } + oldAmount := profile.FinValid + profile.FinValid = utils.Float64ToStrByPrec(utils.StrToFloat64(profile.FinValid)+money, 6) + eg.Where("uid=?", profile.Uid).Update(profile) + var flow = model.FinUserFlow{ + Uid: int(v), + Type: 0, + Amount: utils.Float64ToStrByPrec(money, 6), + BeforeAmount: oldAmount, + AfterAmount: profile.FinValid, + OrdType: types, + OrdId: id, + OrdTitle: title, + OrdAction: utils.StrToInt(ordAction), + OrdTime: int(time.Now().Unix()), + State: 2, + CreateAt: time.Now(), + UpdateAt: time.Now(), + } + eg.Insert(&flow) + } + +} diff --git a/go.mod b/go.mod index fa9ea3e..a806c56 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( code.fnuoos.com/go_rely_warehouse/zyos_go_condition_statistics.git v1.1.2-0.20230518064344-fe7bba4f9ff8 code.fnuoos.com/go_rely_warehouse/zyos_go_es.git v1.0.0 code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git v0.0.4 + code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git v1.9.10-0.20230925093625-5df62f2a76c5 code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git v1.6.2-0.20230825083620-ef8b12df8cf8 code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git v1.1.21-0.20230911014653-22cc8e626d17 github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 @@ -27,7 +28,7 @@ require ( github.com/json-iterator/go v1.1.12 github.com/makiuchi-d/gozxing v0.1.1 github.com/robfig/cron/v3 v3.0.1 - github.com/shopspring/decimal v1.2.0 + github.com/shopspring/decimal v1.3.1 github.com/sony/sonyflake v1.0.0 github.com/streadway/amqp v1.0.0 github.com/swaggo/swag v1.7.0 @@ -78,6 +79,7 @@ require ( golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 // indirect golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect golang.org/x/net v0.0.0-20221004154528-8021a29435af // indirect + golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f // indirect golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 // indirect golang.org/x/text v0.3.7 // indirect golang.org/x/tools v0.1.0 // indirect