From 2e3010c8be4bf767490f507f98f63cd0d29f52f8 Mon Sep 17 00:00:00 2001 From: huangjiajun <582604932@qq.com> Date: Wed, 13 Sep 2023 16:40:39 +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_express_order.go | 83 ++++++ app/db/model/express_order.go | 50 ++++ app/db/offical/db_express_order.go | 23 ++ app/db/offical/db_master_list_cfg.go | 19 ++ app/db/offical/db_user_app_list.go | 15 ++ app/db/offical/model/express_agent_money.go | 7 + .../offical/model/express_agent_money_flow.go | 16 ++ app/db/offical/model/express_order.go | 53 ++++ app/db/offical/model/express_user_money.go | 8 + .../offical/model/express_user_money_flow.go | 16 ++ app/db/offical/model/master_list_cfg.go | 9 + app/db/offical/model/user_app_list.go | 33 +++ app/svc/svc_refund.go | 75 ++++++ consume/init.go | 1 + consume/md/consume_key.go | 10 + .../md/md_zhios_capital_pool_order_total.go | 6 + consume/zhios_express_order_fail.go | 246 ++++++++++++++++++ go.mod | 2 +- 18 files changed, 671 insertions(+), 1 deletion(-) create mode 100644 app/db/db_express_order.go create mode 100644 app/db/model/express_order.go create mode 100644 app/db/offical/db_express_order.go create mode 100644 app/db/offical/db_master_list_cfg.go create mode 100644 app/db/offical/db_user_app_list.go create mode 100644 app/db/offical/model/express_agent_money.go create mode 100644 app/db/offical/model/express_agent_money_flow.go create mode 100644 app/db/offical/model/express_order.go create mode 100644 app/db/offical/model/express_user_money.go create mode 100644 app/db/offical/model/express_user_money_flow.go create mode 100644 app/db/offical/model/master_list_cfg.go create mode 100644 app/db/offical/model/user_app_list.go create mode 100644 app/svc/svc_refund.go create mode 100644 consume/zhios_express_order_fail.go diff --git a/app/db/db_express_order.go b/app/db/db_express_order.go new file mode 100644 index 0000000..177a96e --- /dev/null +++ b/app/db/db_express_order.go @@ -0,0 +1,83 @@ +package db + +import ( + "applet/app/db/model" + model2 "applet/app/db/model" + "applet/app/utils/logx" + "xorm.io/xorm" +) + +func ExpressOrderRelateListByOid(Db *xorm.Engine, oid int64, pvd string) ([]*model2.OrdListRelate, error) { + var ol []*model2.OrdListRelate + err := Db.Where("oid=? and pvd=?", oid, pvd).Find(&ol) + if err != nil { + return nil, logx.Error(err) + } + return ol, nil +} + +func ExpressOrderListByNoSettledWithPage(Db *xorm.Engine, page int) ([]*model.ExpressOrder, error) { + perPage := 500 + startPlace := (page - 1) * perPage + var o []*model.ExpressOrder + err := Db.Where("settle_time =0 AND commission_time >0 and status=? and real_profit>0", "已完成").Limit(perPage, startPlace).Find(&o) + if err != nil { + return nil, err + } + return o, nil +} + +func GetExpressWithOid(eg *xorm.Engine, ordId string) *model.ExpressOrder { + var data model.ExpressOrder + get, _ := eg.Where(" oid=?", ordId).Get(&data) + if get { + return &data + } + return nil +} +func GetExpressWithWlOid(eg *xorm.Engine, ordId string) *model.ExpressOrder { + var data model.ExpressOrder + get, _ := eg.Where(" wl_oid=?", ordId).Get(&data) + if get { + return &data + } + return nil +} +func GetExpressWithOidSess(sess *xorm.Session, ordId string) *model.ExpressOrder { + var data model.ExpressOrder + get, _ := sess.Where(" oid=?", ordId).Get(&data) + if get { + return &data + } + return nil +} +func UpdateExpressSendOrd(engine *xorm.Engine, model *model.ExpressOrder, id interface{}, forceColums ...string) (int64, error) { + var ( + affected int64 + err error + ) + if forceColums != nil { + affected, err = engine.Where("oid=?", id).Cols(forceColums...).Update(model) + } else { + affected, err = engine.Where("oid=?", id).Update(model) + } + if err != nil { + return 0, err + } + return affected, nil +} +func UpdateExpressSendOrdSess(sess *xorm.Session, model *model.ExpressOrder, id interface{}, forceColums ...string) (int64, error) { + var ( + affected int64 + err error + ) + if forceColums != nil { + affected, err = sess.Where("oid=?", id).Cols(forceColums...).Update(model) + } else { + affected, err = sess.Where("oid=?", id).Update(model) + } + if err != nil { + return 0, err + } + return affected, nil +} diff --git a/app/db/model/express_order.go b/app/db/model/express_order.go new file mode 100644 index 0000000..be85d44 --- /dev/null +++ b/app/db/model/express_order.go @@ -0,0 +1,50 @@ +package model + +import ( + "time" +) + +type ExpressOrder struct { + Id int `json:"id" xorm:"not null pk autoincr INT(11)"` + Uid int `json:"uid" xorm:"default 0 INT(11)"` + Oid string `json:"oid" xorm:"VARCHAR(255)"` + PvdOid string `json:"pvd_oid" xorm:"VARCHAR(255)"` + CreateTime time.Time `json:"create_time" xorm:"DATETIME"` + PayTime time.Time `json:"pay_time" xorm:"DATETIME"` + SupplementPayTime time.Time `json:"supplement_pay_time" xorm:"comment('补交时间') DATETIME"` + Money string `json:"money" xorm:"default 0.00000000 comment('第一次') DECIMAL(20,8)"` + Profit string `json:"profit" xorm:"default 0.00000000 comment('利润') DECIMAL(20,8)"` + RealProfit string `json:"real_profit" xorm:"default 0.00000000 comment('利润') DECIMAL(20,8)"` + SupplementMoney string `json:"supplement_money" xorm:"default 0.00000000 DECIMAL(20,8)"` + IsPay int `json:"is_pay" xorm:"default 0 INT(1)"` + IsSupplementPay int `json:"is_supplement_pay" xorm:"default 0 INT(1)"` + Status string `json:"status" xorm:"VARCHAR(255)"` + Ext string `json:"ext" xorm:"TEXT"` + IsRefund int `json:"is_refund" xorm:"default 0 INT(1)"` + RefundTime time.Time `json:"refund_time" xorm:"DATETIME"` + IsCancel int `json:"is_cancel" xorm:"default 0 INT(1)"` + PayWay int `json:"pay_way" xorm:"default 0 INT(11)"` + CommissionTime int `json:"commission_time" xorm:"default 0 INT(11)"` + SettleTime int `json:"settle_time" xorm:"default 0 INT(11)"` + CancelTime time.Time `json:"cancel_time" xorm:"DATETIME"` + Info string `json:"info" xorm:"TEXT"` + SendInfo string `json:"send_info" xorm:"TEXT"` + WlOid string `json:"wl_oid" xorm:"VARCHAR(255)"` + EmpName string `json:"emp_name" xorm:"VARCHAR(255)"` + SenderPhone string `json:"sender_phone" xorm:"VARCHAR(255)"` + ReceiverPhone string `json:"receiver_phone" xorm:"VARCHAR(255)"` + CompanyCode string `json:"company_code" xorm:"VARCHAR(255)"` + ExpressFirstAddPrice string `json:"express_first_add_price" xorm:"VARCHAR(255)"` + ExpressSecondAddPrice string `json:"express_second_add_price" xorm:"VARCHAR(255)"` + AgentPay int `json:"agent_pay" xorm:"default 0 INT(11)"` + StationPay int `json:"station_pay" xorm:"default 0 INT(11)"` + AgentPrice string `json:"agent_price" xorm:"default 0.00 comment('第一次') DECIMAL(20,2)"` + StationPrice string `json:"station_price" xorm:"default 0.00 comment('第一次') DECIMAL(20,2)"` + PlatformPrice string `json:"platform_price" xorm:"default 0.00 comment('第一次') DECIMAL(20,2)"` + CreateMsg string `json:"create_msg" xorm:"TEXT"` + ApiMsg string `json:"api_msg" xorm:"TEXT"` + StationSupplementMoney string `json:"station_supplement_money" xorm:"default 0.00000000 DECIMAL(20,8)"` + AgentSupplementMoney string `json:"agent_supplement_money" xorm:"default 0.00000000 DECIMAL(20,8)"` + IsStationSupplementPay int `json:"is_station_supplement_pay" xorm:"default 0 INT(1)"` + IsAgentSupplementPay int `json:"is_agent_supplement_pay" xorm:"default 0 INT(1)"` +} diff --git a/app/db/offical/db_express_order.go b/app/db/offical/db_express_order.go new file mode 100644 index 0000000..fb01bb4 --- /dev/null +++ b/app/db/offical/db_express_order.go @@ -0,0 +1,23 @@ +package offical + +import ( + "applet/app/db" + "applet/app/db/offical/model" +) + +func GetExpressWithWlOid(ordId string) *model.ExpressOrder { + var data model.ExpressOrder + get, _ := db.Db.Where(" wl_oid=?", ordId).Get(&data) + if get { + return &data + } + return nil +} +func GetExpressWithOid(ordId string) *model.ExpressOrder { + var data model.ExpressOrder + get, _ := db.Db.Where(" oid=?", ordId).Get(&data) + if get { + return &data + } + return nil +} diff --git a/app/db/offical/db_master_list_cfg.go b/app/db/offical/db_master_list_cfg.go new file mode 100644 index 0000000..8db9298 --- /dev/null +++ b/app/db/offical/db_master_list_cfg.go @@ -0,0 +1,19 @@ +package offical + +import ( + "applet/app/db" + "applet/app/db/offical/model" +) + +func MasterListCfgGetOneData(uid, key string) string { + var cfgList model.MasterListCfg + has, err := db.Db.Where("`k`=? and uid=?", key, uid).Get(&cfgList) + if err != nil { + return "" + } + if has == false { + cfgList = model.MasterListCfg{Uid: uid, K: key} + db.Db.InsertOne(&cfgList) + } + return cfgList.V +} diff --git a/app/db/offical/db_user_app_list.go b/app/db/offical/db_user_app_list.go new file mode 100644 index 0000000..d85b936 --- /dev/null +++ b/app/db/offical/db_user_app_list.go @@ -0,0 +1,15 @@ +package offical + +import ( + "applet/app/db" + "applet/app/db/offical/model" +) + +func GetUserAppList(uid string) *model.UserAppList { + var data model.UserAppList + get, err := db.Db.Where("uuid=?", uid).Get(&data) + if get == false || err != nil { + return nil + } + return &data +} diff --git a/app/db/offical/model/express_agent_money.go b/app/db/offical/model/express_agent_money.go new file mode 100644 index 0000000..4502d1c --- /dev/null +++ b/app/db/offical/model/express_agent_money.go @@ -0,0 +1,7 @@ +package model + +type ExpressAgentMoney struct { + Id int `json:"id" xorm:"not null pk autoincr INT(11)"` + Uid int `json:"uid" xorm:"default 0 comment('代理id') INT(11)"` + Money string `json:"money" xorm:"default 0.00 DECIMAL(20,2)"` +} diff --git a/app/db/offical/model/express_agent_money_flow.go b/app/db/offical/model/express_agent_money_flow.go new file mode 100644 index 0000000..2696db9 --- /dev/null +++ b/app/db/offical/model/express_agent_money_flow.go @@ -0,0 +1,16 @@ +package model + +import ( + "time" +) + +type ExpressAgentMoneyFlow struct { + Id int `json:"id" xorm:"not null pk autoincr INT(11)"` + Uid int `json:"uid" xorm:"default 0 INT(11)"` + Type int `json:"type" xorm:"default 0 comment('0收入 1支出') INT(1)"` + Time time.Time `json:"time" xorm:"DATETIME"` + Amount string `json:"amount" xorm:"default 0.00 DECIMAL(20,2)"` + AfterAmount string `json:"after_amount" xorm:"default 0.00 DECIMAL(20,2)"` + Oid string `json:"oid" xorm:"VARCHAR(255)"` + Title string `json:"title" xorm:"VARCHAR(255)"` +} diff --git a/app/db/offical/model/express_order.go b/app/db/offical/model/express_order.go new file mode 100644 index 0000000..1dc396a --- /dev/null +++ b/app/db/offical/model/express_order.go @@ -0,0 +1,53 @@ +package model + +import ( + "time" +) + +type ExpressOrder struct { + Id int `json:"id" xorm:"not null pk autoincr INT(11)"` + Uid int `json:"uid" xorm:"default 0 INT(11)"` + Mid int `json:"mid" xorm:"default 0 INT(11)"` + AgentUid int `json:"agent_uid" xorm:"default 0 INT(11)"` + Oid string `json:"oid" xorm:"VARCHAR(255)"` + PvdOid string `json:"pvd_oid" xorm:"VARCHAR(255)"` + CreateTime time.Time `json:"create_time" xorm:"DATETIME"` + PayTime time.Time `json:"pay_time" xorm:"DATETIME"` + SupplementPayTime time.Time `json:"supplement_pay_time" xorm:"comment('补交时间') DATETIME"` + Money string `json:"money" xorm:"default 0.00000000 comment('第一次') DECIMAL(20,8)"` + Profit string `json:"profit" xorm:"default 0.00000000 comment('利润') DECIMAL(20,8)"` + RealProfit string `json:"real_profit" xorm:"default 0.00000000 comment('利润') DECIMAL(20,8)"` + SupplementMoney string `json:"supplement_money" xorm:"default 0.00000000 DECIMAL(20,8)"` + StationSupplementMoney string `json:"station_supplement_money" xorm:"default 0.00000000 DECIMAL(20,8)"` + AgentSupplementMoney string `json:"agent_supplement_money" xorm:"default 0.00000000 DECIMAL(20,8)"` + IsPay int `json:"is_pay" xorm:"default 0 INT(1)"` + IsStationSupplementPay int `json:"is_station_supplement_pay" xorm:"default 0 INT(1)"` + IsAgentSupplementPay int `json:"is_agent_supplement_pay" xorm:"default 0 INT(1)"` + IsSupplementPay int `json:"is_agent_supplement_pay" xorm:"default 0 INT(1)"` + Status string `json:"status" xorm:"VARCHAR(255)"` + Ext string `json:"ext" xorm:"TEXT"` + IsRefund int `json:"is_refund" xorm:"default 0 INT(1)"` + RefundTime time.Time `json:"refund_time" xorm:"DATETIME"` + IsCancel int `json:"is_cancel" xorm:"default 0 INT(1)"` + PayWay int `json:"pay_way" xorm:"default 0 INT(11)"` + CommissionTime int `json:"commission_time" xorm:"default 0 INT(11)"` + SettleTime int `json:"settle_time" xorm:"default 0 INT(11)"` + CancelTime time.Time `json:"cancel_time" xorm:"DATETIME"` + Info string `json:"info" xorm:"TEXT"` + SendInfo string `json:"send_info" xorm:"TEXT"` + WlOid string `json:"wl_oid" xorm:"VARCHAR(255)"` + EmpName string `json:"emp_name" xorm:"VARCHAR(255)"` + SenderPhone string `json:"sender_phone" xorm:"VARCHAR(255)"` + ReceiverPhone string `json:"receiver_phone" xorm:"VARCHAR(255)"` + CompanyCode string `json:"company_code" xorm:"VARCHAR(255)"` + ExpressFirstAddPrice string `json:"express_first_add_price" xorm:"VARCHAR(255)"` + ExpressSecondAddPrice string `json:"express_second_add_price" xorm:"VARCHAR(255)"` + OfficialExpressFirstAddPrice string `json:"official_express_first_add_price" xorm:"VARCHAR(255)"` + OfficialExpressSecondAddPrice string `json:"official_express_second_add_price" xorm:"VARCHAR(255)"` + AgentPay int `json:"agent_pay" xorm:"default 0 INT(11)"` + StationPay int `json:"station_pay" xorm:"default 0 INT(11)"` + AgentPrice string `json:"agent_price" xorm:"default 0.00 comment('第一次') DECIMAL(20,2)"` + StationPrice string `json:"station_price" xorm:"default 0.00 comment('第一次') DECIMAL(20,2)"` + PlatformPrice string `json:"platform_price" xorm:"default 0.00 comment('第一次') DECIMAL(20,2)"` + CreateMsg string `json:"create_msg" xorm:"TEXT"` +} diff --git a/app/db/offical/model/express_user_money.go b/app/db/offical/model/express_user_money.go new file mode 100644 index 0000000..3cc5fea --- /dev/null +++ b/app/db/offical/model/express_user_money.go @@ -0,0 +1,8 @@ +package model + +type ExpressUserMoney struct { + Id int `json:"id" xorm:"not null pk autoincr INT(11)"` + Uid int `json:"uid" xorm:"default 0 comment('代理id') INT(11)"` + AgentUid int `json:"agent_uid" xorm:"default 0 comment('代理id') INT(11)"` + Money string `json:"money" xorm:"default 0.00 DECIMAL(20,2)"` +} diff --git a/app/db/offical/model/express_user_money_flow.go b/app/db/offical/model/express_user_money_flow.go new file mode 100644 index 0000000..0a11665 --- /dev/null +++ b/app/db/offical/model/express_user_money_flow.go @@ -0,0 +1,16 @@ +package model + +import ( + "time" +) + +type ExpressUserMoneyFlow struct { + Id int `json:"id" xorm:"not null pk autoincr INT(11)"` + Uid int `json:"uid" xorm:"default 0 INT(11)"` + Type int `json:"type" xorm:"default 0 comment('0收入 1支出') INT(1)"` + Time time.Time `json:"time" xorm:"DATETIME"` + Amount string `json:"amount" xorm:"default 0.00 DECIMAL(20,2)"` + AfterAmount string `json:"after_amount" xorm:"default 0.00 DECIMAL(20,2)"` + Oid string `json:"oid" xorm:"VARCHAR(255)"` + Title string `json:"title" xorm:"VARCHAR(255)"` +} diff --git a/app/db/offical/model/master_list_cfg.go b/app/db/offical/model/master_list_cfg.go new file mode 100644 index 0000000..3963c50 --- /dev/null +++ b/app/db/offical/model/master_list_cfg.go @@ -0,0 +1,9 @@ +package model + +type MasterListCfg struct { + K string `json:"k" xorm:"not null VARCHAR(255)"` + V string `json:"v" xorm:"TEXT"` + Memo string `json:"memo" xorm:"VARCHAR(255)"` + Uid string `json:"uid" xorm:"comment('0是官方') VARCHAR(255)"` + Id int `json:"id" xorm:"not null pk autoincr INT(11)"` +} diff --git a/app/db/offical/model/user_app_list.go b/app/db/offical/model/user_app_list.go new file mode 100644 index 0000000..9720400 --- /dev/null +++ b/app/db/offical/model/user_app_list.go @@ -0,0 +1,33 @@ +package model + +type UserAppList struct { + Id int `json:"id" xorm:"not null pk autoincr INT(11)"` + Uuid int `json:"uuid" xorm:"not null comment('masterId') INT(10)"` + Uid int `json:"uid" xorm:"not null comment('用户ID') INT(10)"` + AppId int `json:"app_id" xorm:"not null comment('应用ID') INT(10)"` + PlanId string `json:"plan_id" xorm:"not null default '' comment('套餐ID') VARCHAR(100)"` + Expire int `json:"expire" xorm:"not null default 0 comment('过期时间') INT(10)"` + Name string `json:"name" xorm:"not null default '' comment('应用主名称') VARCHAR(32)"` + Icon string `json:"icon" xorm:"not null default '' comment('应用主图标') VARCHAR(250)"` + CreateTime int `json:"create_time" xorm:"not null default 0 comment('初次激活时间') INT(10)"` + RenewTime int `json:"renew_time" xorm:"not null default 0 comment('上次续费时间') INT(10)"` + Domain string `json:"domain" xorm:"not null default '' comment('域名') index VARCHAR(110)"` + DomainAlias string `json:"domain_alias" xorm:"not null default '' comment('域名别名') index VARCHAR(110)"` + Platform string `json:"platform" xorm:"not null default '' comment('平台信息 ios,android,applet') VARCHAR(100)"` + Info string `json:"info" xorm:"comment('平台名称如ios.name.#ddd;') TEXT"` + PayMode int `json:"pay_mode" xorm:"not null default 1 comment('付费模式,0授信,1付款') TINYINT(1)"` + Price float32 `json:"price" xorm:"not null default 0.00 comment('应用价格') FLOAT(10,2)"` + PricePay float32 `json:"price_pay" xorm:"not null default 0.00 comment('实际付款价格') FLOAT(10,2)"` + OfficialPrice float32 `json:"official_price" xorm:"not null default 0.00 comment('应用价格') FLOAT(10,2)"` + OfficialPricePay float32 `json:"official_price_pay" xorm:"not null default 0.00 comment('实际付款价格') FLOAT(10,2)"` + State int `json:"state" xorm:"not null default 0 comment('0未创建,1正常,2停用,3过期') TINYINT(1)"` + DeleteAt int `json:"delete_at" xorm:"not null default 0 TINYINT(1)"` + CustomAndroidCount int `json:"custom_android_count" xorm:"default 0 comment('客户端安卓包名重置次数') INT(11)"` + CustomIosCount int `json:"custom_ios_count" xorm:"default 0 comment('客户端ios包名重置次数') INT(11)"` + StoreAndroidCount int `json:"store_android_count" xorm:"default 0 comment('商家端安卓包名重置次数') INT(11)"` + StoreIosCount int `json:"store_ios_count" xorm:"default 0 comment('商家端ios包名重置次数') INT(11)"` + SmsPlatform string `json:"sms_platform" xorm:"default 'mob' comment('mob ljioe联江') VARCHAR(255)"` + IsClose int `json:"is_close" xorm:"default 0 comment('是否关闭') INT(1)"` + Puid int `json:"puid" xorm:"default 0 comment('') INT(11)"` + StoreRateInfo string `json:"store_rate_info" xorm:"comment('付呗商品进件费率') TEXT"` +} diff --git a/app/svc/svc_refund.go b/app/svc/svc_refund.go new file mode 100644 index 0000000..0787657 --- /dev/null +++ b/app/svc/svc_refund.go @@ -0,0 +1,75 @@ +package svc + +import ( + "applet/app/db" + "applet/app/db/model" + "applet/app/utils" + "applet/app/utils/logx" + "time" + "xorm.io/xorm" +) + +//公共处理记录 +func DealMoneyWithEg(eg *xorm.Engine, uid int, paidPrice string, orderAction int, ordId int64, id int64, goodsId int, ItemTitle string, ordType string, is_reduce int) { + if utils.StrToFloat64(paidPrice) == 0 { + return + } + //TODO 暂时退到余额 + session := eg.NewSession() + userProfile, err := db.UserProfileFindByIdWithSession(session, uid) + if err != nil || userProfile == nil { + _ = session.Rollback() + return + } + // 更新用户余额 + beforeAmount := userProfile.FinValid + var types = 0 + if is_reduce == 1 { + types = 1 + userProfile.FinValid = utils.AnyToString(utils.AnyToFloat64(userProfile.FinValid) - utils.StrToFloat64(paidPrice)) + } else { + userProfile.FinValid = utils.AnyToString(utils.AnyToFloat64(userProfile.FinValid) + utils.StrToFloat64(paidPrice)) + } + userProfile.FinTotal = userProfile.FinTotal + utils.StrToFloat32(paidPrice) + affected, err := db.UserProfileUpdateWithSession(session, uid, userProfile, "fin_valid", "fin_total") + if affected == 0 { + _ = session.Rollback() + return + } + if err != nil { + _ = session.Rollback() + return + } + // 开始写入流水 + FlowInsert(eg, uid, paidPrice, orderAction, ordId, id, goodsId, ItemTitle, ordType, types, beforeAmount, userProfile.FinValid) +} + +// 开始写入流水 +func FlowInsert(eg *xorm.Engine, uid int, paidPrice string, orderAction int, ordId int64, id int64, goodsId int, ItemTitle string, ordType string, types int, beforeAmount string, afterAmount string) { + session := eg.NewSession() + + now := time.Now() + if err := db.FinUserFlowInsertOneWithSession( + session, + &model.FinUserFlow{ + Type: types, + Uid: uid, + Amount: paidPrice, + BeforeAmount: beforeAmount, + AfterAmount: afterAmount, + OrdType: ordType, + OrdId: utils.Int64ToStr(ordId), + OrdAction: orderAction, + OrdDetail: utils.IntToStr(goodsId), + State: 2, + OtherId: id, + OrdTitle: ItemTitle, + OrdTime: int(now.Unix()), + CreateAt: now, + UpdateAt: now, + }); err != nil { + _ = session.Rollback() + _ = logx.Warn(err) + return + } +} diff --git a/consume/init.go b/consume/init.go index 5900c20..0172924 100644 --- a/consume/init.go +++ b/consume/init.go @@ -43,6 +43,7 @@ func initConsumes() { jobs[consumeMd.ZhiosTikTokAllUpdateFunName] = ZhiosTikTokAllUpdate jobs[consumeMd.ZhiosCapitalPoolOrderTotalFunName] = ZhiosCapitalPoolOrderTotal + jobs[consumeMd.ZhiosExpressOrderFail] = ZhiosExpressOrderFail //jobs[consumeMd.ZhiosRechargeOrderFailDevFunName] = ZhiosRechargeOrderFailDev diff --git a/consume/md/consume_key.go b/consume/md/consume_key.go index 25a6f8d..dff40f9 100644 --- a/consume/md/consume_key.go +++ b/consume/md/consume_key.go @@ -192,6 +192,15 @@ var RabbitMqQueueKeyList = []*MqQueue{ BindKey: "", ConsumeFunName: "ZhiosRechargeOrderFailDev", }, + { + ExchangeName: "zhios.express.order.exchange", + Name: "zhios_express_order_fail", + Type: DirectQueueType, + IsPersistent: false, + RoutKey: "order_fail", + BindKey: "", + ConsumeFunName: "zhiosExpressOrderFail", + }, } const ( @@ -211,6 +220,7 @@ const ( ZhiosRechargeOrderFailFunName = "ZhiosRechargeOrderFail" ZhiosRechargeOrderFailDevFunName = "ZhiosRechargeOrderFailDev" ZhiosCapitalPoolOrderTotalFunName = "ZhiosCapitalPoolOrderTotal" + ZhiosExpressOrderFail = "zhiosExpressOrderFail" 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 a7e21b9..ce14099 100644 --- a/consume/md/md_zhios_capital_pool_order_total.go +++ b/consume/md/md_zhios_capital_pool_order_total.go @@ -8,3 +8,9 @@ type ZhiosCapitalPoolOrderTotal struct { BonusLevelType int `json:"bonusLevelType"` Level string `json:"level"` } +type ZhiosExpressOrderFails struct { + Uid string `json:"uid"` + Mid string `json:"mid"` + Oid string `json:"oid"` + IsFail string `json:"is_fail"` +} diff --git a/consume/zhios_express_order_fail.go b/consume/zhios_express_order_fail.go new file mode 100644 index 0000000..15e25ca --- /dev/null +++ b/consume/zhios_express_order_fail.go @@ -0,0 +1,246 @@ +package consume + +import ( + "applet/app/db" + "applet/app/db/offical" + "applet/app/db/offical/model" + "applet/app/e" + "applet/app/svc" + "applet/app/utils" + "applet/app/utils/cache" + "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_third_party_api.git/express" + "encoding/json" + "errors" + "fmt" + "github.com/streadway/amqp" + "github.com/tidwall/gjson" + "time" +) + +func ZhiosExpressOrderFail(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 = handleZhiosExpressOrderFail(res.Body) + //_ = res.Reject(false) + if err == nil { + _ = res.Ack(true) + } + } else { + panic(errors.New("error getting message")) + } + } + fmt.Println("get msg done") +} + +func handleZhiosExpressOrderFail(msg []byte) error { + //1、解析canal采集至mq中queue的数据结构体 + var canalMsg *md.ZhiosExpressOrderFails + 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 + } + //判断订单是否订单失败 + ord := db.GetExpressWithOid(eg, canalMsg.Oid) + officialOrd := offical.GetExpressWithOid(canalMsg.Oid) + if ord.Status == "已退回" { + return nil + } + base := CommBase(mid) + if canalMsg.IsFail != "1" { //查下订单详情 + param := map[string]interface{}{ + "clientOrderNo": canalMsg.Oid, + } + order, _ := express.ShowOrder(base, param) + if gjson.Get(order, "code").Int() == 500 || gjson.Get(order, "code").String() != "00" || gjson.Get(order, "data.status").String() == "CANCELED" { + ord.Status = "订单失败" + } + } + if ord.Status == "订单失败" || ord.Status == "已取消" { + ord.Status = "已退回" + ord.IsRefund = 1 + ord.RefundTime = time.Now() + officialOrd.Status = "已退回" + officialOrd.IsRefund = 1 + officialOrd.RefundTime = time.Now() + eg.Where("oid=?", ord.Oid).Update(ord) + db.Db.Where("oid=?", officialOrd.Oid).Update(officialOrd) + svc.DealMoneyWithEg(eg, ord.Uid, ord.Money, 56, utils.StrToInt64(ord.Oid), 0, 0, "快递退款", "express", 0) + if ord.AgentPay == 1 { + agentDeduct(ord.Oid, base, ord.AgentPrice) + } + if ord.StationPay == 1 { + stationDeduct(mid, ord.Oid, base, ord.StationPrice) + } + } + return nil +} + +//站长预存款扣除 +func stationDeduct(dbName, oid string, base map[string]string, price string) (error, int) { + eg := db.Db + var user model.ExpressUserMoney + get, err := eg.Where("uid=? and agent_uid=?", dbName, base["puid"]).Get(&user) + if get == false || err != nil { + return e.NewErr(400, "站点预存款不足!"), 0 + } + user.Money = utils.Float64ToStr(utils.StrToFloat64(user.Money) + utils.StrToFloat64(price)) + _, err = eg.Where("id=?", user.Id).Update(&user) + if err != nil { + return e.NewErr(400, "站点预存款扣除失败!"), 0 + } + var flow = &model.ExpressUserMoneyFlow{ + Uid: user.Uid, + Type: 0, + Time: time.Now(), + Amount: price, + AfterAmount: user.Money, + Oid: oid, + Title: "快递退款", + } + _, err = eg.Insert(flow) + if err != nil { + return e.NewErr(400, "站点预存款扣除失败!"), 0 + } + return nil, 1 +} +func agentDeduct(oid string, base map[string]string, price string) (error, int) { + eg := db.Db + var user model.ExpressAgentMoney + get, err := eg.Where("uid=?", base["puid"]).Get(&user) + if get == false || err != nil { + return e.NewErr(400, "平台预存款不足!"), 0 + } + user.Money = utils.Float64ToStr(utils.StrToFloat64(user.Money) + utils.StrToFloat64(price)) + _, err = eg.Where("id=?", user.Id).Update(&user) + if err != nil { + return e.NewErr(400, "平台预存款扣除失败!"), 0 + } + var flow = &model.ExpressAgentMoneyFlow{ + Uid: user.Uid, + Type: 0, + Time: time.Now(), + Amount: price, + AfterAmount: user.Money, + Oid: oid, + Title: "快递退款", + } + _, err = eg.Insert(flow) + if err != nil { + return e.NewErr(400, "平台预存款扣除失败!"), 0 + } + return nil, 1 +} + +func AppUserListPuid(mid string) string { + appList := offical.GetUserAppList(mid) + uid := "0" + if appList != nil && appList.Puid > 0 { + uid = utils.IntToStr(appList.Puid) + } + return uid +} + +func CommBase(mid string) map[string]string { + puid := AppUserListPuid(mid) + key := puid + "_official_express_info" + stringStr, err := cache.GetString(key) + stringMap := make(map[string]string) + json.Unmarshal([]byte(stringStr), &stringMap) + if len(stringMap) == 0 || err != nil { + expressType := offical.MasterListCfgGetOneData(puid, "express_type") + expressUrl := offical.MasterListCfgGetOneData(puid, "express_url") + expressClientId := offical.MasterListCfgGetOneData(puid, "express_client_id") + expressKey := offical.MasterListCfgGetOneData(puid, "express_key") + expressMinSendMoney := offical.MasterListCfgGetOneData(puid, "express_min_send_money") //最低预存款 + expressFeeSendMoney := offical.MasterListCfgGetOneData(puid, "express_fee_send_money") //充值预存款手续费 + expressFirstPayBili := offical.MasterListCfgGetOneData(puid, "express_first_pay_bili") //首重加价 + expressSecondPayBili := offical.MasterListCfgGetOneData(puid, "express_second_pay_bili") //续重加价 + stringMap = map[string]string{ + "puid": puid, + "express_type": expressType, + "express_url": expressUrl, + "express_key": expressKey, + "express_client_id": expressClientId, + "express_min_send_money": "", + "express_fee_send_money": "", + "express_first_pay_bili": "", + "express_second_pay_bili": "", + "official_express_min_send_money": expressMinSendMoney, + "official_express_fee_send_money": expressFeeSendMoney, + "official_express_first_pay_bili": expressFirstPayBili, + "official_express_second_pay_bili": expressSecondPayBili, + } + //如果是官方 不是代理就没有代理的设置 + //如果是代理 就有代理的设置 + if utils.StrToInt(puid) > 0 { + stringMap["express_min_send_money"] = expressMinSendMoney + stringMap["express_fee_send_money"] = expressFeeSendMoney + stringMap["express_first_pay_bili"] = expressFirstPayBili + stringMap["express_second_pay_bili"] = expressSecondPayBili + if stringMap["express_type"] == "1" { //代理自有渠道,智莺的加价不用了 + stringMap["official_express_min_send_money"] = "" + stringMap["official_express_fee_send_money"] = "" + stringMap["official_express_first_pay_bili"] = "" + stringMap["official_express_second_pay_bili"] = "" + } + } + cache.SetEx(key, utils.SerializeStr(stringMap), 300) + + } + if utils.StrToInt(puid) > 0 && stringMap["express_type"] != "1" { //跟随官方 + key1 := "0_official_express_info" + stringStr1, err1 := cache.GetString(key1) + stringMap1 := make(map[string]string) + json.Unmarshal([]byte(stringStr1), &stringMap1) + if len(stringMap1) == 0 || err1 != nil { //如果是代理 但只有官方设置 + stringMap1 = make(map[string]string) + + stringMap1["express_url"] = offical.MasterListCfgGetOneData("0", "express_url") + stringMap1["express_client_id"] = offical.MasterListCfgGetOneData("0", "express_client_id") + stringMap1["express_key"] = offical.MasterListCfgGetOneData("0", "express_key") + stringMap1["official_express_min_send_money"] = offical.MasterListCfgGetOneData("0", "express_min_send_money") //最低预存款 + stringMap1["official_express_fee_send_money"] = offical.MasterListCfgGetOneData("0", "express_fee_send_money") //充值预存款手续费 + stringMap1["official_express_first_pay_bili"] = offical.MasterListCfgGetOneData("0", "express_first_pay_bili") //首重加价 + stringMap1["official_express_second_pay_bili"] = offical.MasterListCfgGetOneData("0", "express_second_pay_bili") //续重加价 + cache.SetEx(key1, utils.SerializeStr(stringMap1), 300) + } + for k, v := range stringMap1 { + stringMap[k] = v + } + } + return stringMap +} diff --git a/go.mod b/go.mod index 8fdf7fa..fa9ea3e 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( 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_pay.git v1.6.2-0.20230825083620-ef8b12df8cf8 - code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git v1.1.21-0.20230703061209-fc6ac71cc155 + 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 github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 github.com/boombuler/barcode v1.0.1