diff --git a/app/db/db_user_alipay_info.go b/app/db/db_user_alipay_info.go new file mode 100644 index 0000000..8b372a9 --- /dev/null +++ b/app/db/db_user_alipay_info.go @@ -0,0 +1,18 @@ +package db + +import ( + "applet/app/db/model" + "xorm.io/xorm" +) + +func GetUserAlipayInfo(eg *xorm.Engine, uid int) *model.UserAlipayInfo { + var data model.UserAlipayInfo + get, _ := eg.Where("uid=?", uid).Get(&data) + if get == false { + data = model.UserAlipayInfo{ + Uid: uid, + } + eg.Insert(&data) + } + return &data +} diff --git a/app/db/model/ord_list.go b/app/db/model/ord_list.go new file mode 100644 index 0000000..4f3be06 --- /dev/null +++ b/app/db/model/ord_list.go @@ -0,0 +1,56 @@ +package model + +type OrdList struct { + OrdId int64 `xorm:"pk autoincr BIGINT(20)" json:"ord_id"` + Uid int `xorm:"not null index INT(10)" json:"uid"` + PvdOid string `xorm:"not null index(IDX_PVD) VARCHAR(50)" json:"pvd_oid"` + ParentOrdId int64 `xorm:" BIGINT(20)" json:"parent_ord_id"` + Pvd string `xorm:"not null default '' index(IDX_PVD) index(IDX_PVD_ITEM) VARCHAR(8)" json:"pvd"` + ItemId string `xorm:"not null default '' index(IDX_PVD_ITEM) VARCHAR(50)" json:"item_id"` + ItemNum int `xorm:"not null default 1 TINYINT(3)" json:"item_num"` + ItemPrice float64 `xorm:"not null default 0.00 DOUBLE(10,2)" json:"item_price"` + ItemCommissionRate float64 `xorm:"not null default 0.00 DOUBLE(6,4)" json:"item_commission_rate"` + PaidPrice float64 `xorm:"not null default 0.00 DOUBLE(10,2)" json:"paid_price"` + OrderType int `xorm:"not null default 0 TINYINT(1)" json:"order_type"` + PriceType int `xorm:"not null default 0 INT(1)" json:"price_type"` + OrderCompare int `xorm:"not null default 0 TINYINT(1)" json:"order_compare"` + SubsidyFee float64 `xorm:"not null default 0.00 DOUBLE(8,2)" json:"subsidy_fee"` + SubsidyRate float64 `xorm:"not null default 0.0000 DOUBLE(10,4)" json:"subsidy_rate"` + UserCommission float64 `xorm:"not null default 0.000 DOUBLE(8,3)" json:"user_commission"` + UserReturnMoney float64 `xorm:"not null default 0.000 DOUBLE(8,3)" json:"user_return_money"` + UserCommissionRate float64 `xorm:"not null default 0.0000 DOUBLE(6,4)" json:"user_commission_rate"` + PvdCommission float64 `xorm:"not null default 0.0000 DOUBLE(8,4)" json:"pvd_commission"` + PvdCommissionRate float64 `xorm:"not null default 0.0000 DOUBLE(6,4)" json:"pvd_commission_rate"` + SysCommission float64 `xorm:"not null default 0.0000 DOUBLE(8,4)" json:"sys_commission"` + SysCommissionRate float64 `xorm:"not null default 0.0000 DOUBLE(6,4)" json:"sys_commission_rate"` + PlanCommissionId int `xorm:"not null default 0 INT(10)" json:"plan_commission_id"` + PlanCommissionState int `xorm:"not null default 0 TINYINT(1)" json:"plan_commission_state"` + Reason string `xorm:"not null default '' VARCHAR(32)" json:"reason"` + State int `xorm:"not null default 0 TINYINT(1)" json:"state"` + LockState int `xorm:"not null default 0 TINYINT(1)" json:"lock_state"` + CreateAt int `xorm:"not null default 0 INT(10)" json:"create_at"` + UpdateAt int `xorm:"not null default 0 INT(11)" json:"update_at"` + ConfirmAt int `xorm:"not null default 0 INT(10)" json:"confirm_at"` + CheckSuccessAt int `xorm:"not null default 0 INT(10)" json:"check_success_at"` + PvdSettleAt int `xorm:"not null default 0 INT(10)" json:"pvd_settle_at"` + SettleAt int `xorm:"not null default 0 INT(10)" json:"settle_at"` + ReturnMoneySettleAt int `xorm:"not null default 0 INT(10)" json:"return_money_settle_at"` + SubsidyAt int `xorm:"not null default 0 INT(10)" json:"subsidy_at"` + BenefitList string `xorm:"not null default '' index VARCHAR(200)" json:"benefit_list"` + BenefitAll float64 `xorm:"not null default 0.00 DOUBLE(10,3)" json:"benefit_all"` + Data string `xorm:"not null default '' VARCHAR(2000)" json:"data"` + UpdateFrom int `xorm:"not null default 0 TINYINT(1)" json:"update_from"` + CreateFrom int `xorm:"not null default 0 TINYINT(1)" json:"create_from"` + IsRefund int `xorm:"not null default 0 INT(1)" json:"is_refund"` + IsSendMsg int `xorm:"not null default 0 INT(1)" json:"is_send_msg"` + PvdPid string `xorm:"not null default '' VARCHAR(100)" json:"pvd_pid"` + CostPrice float64 `xorm:"not null default 0.00 FLOAT(10,2)" json:"cost_price"` + PlatformData string `xorm:"TEXT" json:"platform_data"` + IsTikTokTeamOrder int `xorm:"not null default 0 INT(1)" json:"is_tik_tok_team_order"` + TikTokTeamCommission string `json:"tik_tok_team_commission" xorm:"not null default 0.00 comment('') DECIMAL(20,8)"` + IsFastSign int `xorm:"not null default 0 INT(1)" json:"is_fast_sign"` + IsWaitReduce int `xorm:"not null default 0 INT(1)" json:"is_wait_reduce"` + FastSignId string `xorm:"not null default '' VARCHAR(100)" json:"fast_sign_id"` + TransferSignId string `xorm:"not null default '' VARCHAR(100)" json:"transfer_sign_id"` + IsTransfer int `xorm:"not null default 0 INT(1)" json:"is_transfer"` +} diff --git a/app/db/model/ord_list_relate.go b/app/db/model/ord_list_relate.go new file mode 100644 index 0000000..885ecac --- /dev/null +++ b/app/db/model/ord_list_relate.go @@ -0,0 +1,16 @@ +package model + +type OrdListRelate struct { + Id int64 `json:"id" xorm:"pk autoincr BIGINT(20)"` + Oid int64 `json:"oid" xorm:"not null default 0 comment('订单号') index unique(IDX_ORD) BIGINT(20)"` + Uid int `json:"uid" xorm:"not null default 0 comment('用户ID') unique(IDX_ORD) index INT(10)"` + Amount float64 `json:"amount" xorm:"not null default 0.00 comment('金额') DOUBLE(12,4)"` + ReturnMoney float64 `json:"return_money" xorm:"not null default 0.00 comment('返现金额') DOUBLE(10,2)"` + Pvd string `json:"pvd" xorm:"not null default '' comment('供应商taobao,jd,pdd,vip,suning,kaola') index VARCHAR(255)"` + CreateAt int `json:"create_at" xorm:"not null default 0 comment('订单创建时间') index INT(10)"` + Level int `json:"level" xorm:"not null default 0 comment('0自购 1直推 大于1:间推') INT(10)"` + Integral string `json:"integral" xorm:"default 0.0000 comment('积分') DECIMAL(12,4)"` + BlockIcons string `json:"block_icons" xorm:"default 0.0000 comment('区块币') DECIMAL(12,4)"` + Mode string `json:"mode" xorm:"not null default '' comment('分佣方案类型') VARCHAR(255)"` + AdditionalSubsidy string `json:"additional_subsidy" xorm:"not null default 0.00 comment('额外补贴 酒庄模式才有效') DECIMAL(16,6)"` +} diff --git a/app/db/model/user_alipay_info.go b/app/db/model/user_alipay_info.go new file mode 100644 index 0000000..29e2029 --- /dev/null +++ b/app/db/model/user_alipay_info.go @@ -0,0 +1,20 @@ +package model + +type UserAlipayInfo struct { + Id int `json:"id" xorm:"not null pk autoincr INT(11)"` + Uid int `json:"uid" xorm:"default 0 INT(11)"` + AlipayId string `json:"alipay_id" xorm:"default '' VARCHAR(50)"` + OauthInfo string `json:"oauth_info" xorm:"VARCHAR(1000)"` + IsSign int `json:"is_sign" xorm:"default 0 INT(1)"` + SignCreateId string `json:"sign_create_id" xorm:"VARCHAR(255)"` + Money string `json:"money" xorm:"default 0.000000 DECIMAL(20,6)"` + AliAccessToken string `json:"ali_access_token" xorm:"comment('支付宝访问令牌。通过该令牌调用需要授权类接口') VARCHAR(255)"` + ExpiresIn int `json:"expires_in" xorm:"comment('访问令牌的有效时间,单位是秒') INT(11)"` + RefreshToken string `json:"refresh_token" xorm:"comment('支付宝刷新令牌。通过该令牌可以刷新 access_token') VARCHAR(255)"` + ReExpiresIn int `json:"re_expires_in" xorm:"comment('刷新令牌的有效时间,单位是秒') INT(11)"` + CreditAgreementId string `json:"credit_agreement_id" xorm:"VARCHAR(255)"` + IsOpen int `json:"is_open" xorm:"default 0 INT(1)"` + RunTime int `json:"run_time" xorm:"default 0 INT(11)"` + AlipayName string `json:"alipay_name" xorm:"VARCHAR(255)"` + AlipayLogo string `json:"alipay_logo" xorm:"VARCHAR(255)"` +} diff --git a/consume/init.go b/consume/init.go index 66301c3..d626063 100644 --- a/consume/init.go +++ b/consume/init.go @@ -20,6 +20,9 @@ func initConsumes() { jobs[consumeMd.CanalOrderConsumeFunName] = CanalOrderConsume jobs[consumeMd.CanalGuideOrderConsumeFunName] = CanalGuideOrderConsume jobs[consumeMd.ZhiOsUserVisitIpAddressConsumeFunName] = ZhiOsUserVisitIpAddressConsume + jobs[consumeMd.ZhiosFastReturnOrderPayFunName] = ZhiosFastReturnOrderPay + jobs[consumeMd.ZhiosFastReturnOrderSuccessFunName] = ZhiosFastReturnOrderSuccess + jobs[consumeMd.ZhiosFastReturnOrderRefundFunName] = ZhiosFastReturnOrderRefund } func Run() { diff --git a/consume/md/consume_key.go b/consume/md/consume_key.go index 092d9b3..3721b09 100644 --- a/consume/md/consume_key.go +++ b/consume/md/consume_key.go @@ -38,10 +38,40 @@ var RabbitMqQueueKeyList = []*MqQueue{ BindKey: "", ConsumeFunName: "ZhiOsUserVisitIpAddressConsume", }, + { + ExchangeName: "zhios.order.fast.return.exchange", + Name: "zhios_fast_return_order_pay", + Type: DirectQueueType, + IsPersistent: false, + RoutKey: "order_pay", + BindKey: "", + ConsumeFunName: "ZhiosFastReturnOrderPay", + }, + { + ExchangeName: "zhios.order.fast.return.exchange", + Name: "zhios_fast_return_order_success", + Type: DirectQueueType, + IsPersistent: false, + RoutKey: "order_success", + BindKey: "", + ConsumeFunName: "ZhiosFastReturnOrderSuccess", + }, + { + ExchangeName: "zhios.order.fast.return.exchange", + Name: "zhios_fast_return_order_refund", + Type: DirectQueueType, + IsPersistent: false, + RoutKey: "order_refund", + BindKey: "", + ConsumeFunName: "ZhiosFastReturnOrderRefund", + }, } const ( CanalOrderConsumeFunName = "CanalOrderConsume" CanalGuideOrderConsumeFunName = "CanalGuideOrderConsume" ZhiOsUserVisitIpAddressConsumeFunName = "ZhiOsUserVisitIpAddressConsume" + ZhiosFastReturnOrderPayFunName = "ZhiosFastReturnOrderPay" + ZhiosFastReturnOrderSuccessFunName = "ZhiosFastReturnOrderSuccess" + ZhiosFastReturnOrderRefundFunName = "ZhiosFastReturnOrderRefund" ) diff --git a/consume/md/md_zhios_fast_return_order_pay.go b/consume/md/md_zhios_fast_return_order_pay.go new file mode 100644 index 0000000..db65739 --- /dev/null +++ b/consume/md/md_zhios_fast_return_order_pay.go @@ -0,0 +1,9 @@ +package md + +type ZhiosFatReturnOrderPay struct { + Uid string `json:"uid"` + Mid string `json:"mid"` + Oid string `json:"oid"` + Name string `json:"name"` + Prd string `json:"prd"` +} diff --git a/consume/zhios_fast_return_order_pay.go b/consume/zhios_fast_return_order_pay.go new file mode 100644 index 0000000..1d2b4e8 --- /dev/null +++ b/consume/zhios_fast_return_order_pay.go @@ -0,0 +1,184 @@ +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_pay.git/pay" + "encoding/json" + "errors" + "fmt" + "github.com/streadway/amqp" + "github.com/tidwall/gjson" + "xorm.io/xorm" +) + +func ZhiosFastReturnOrderPay(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(1) + 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 = handleZhiosFastReturnOrderPay(res.Body) + //_ = res.Reject(false) + fmt.Println(err) + if err == nil { + _ = res.Ack(true) + } + } else { + panic(errors.New("error getting message")) + } + } + fmt.Println("get msg done") +} + +func handleZhiosFastReturnOrderPay(msg []byte) error { + //1、解析canal采集至mq中queue的数据结构体 + var canalMsg *md.ZhiosFatReturnOrderPay + 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] + uid := utils.StrToInt(canalMsg.Uid) + oid := canalMsg.Oid + isFastReturn, info := CommCheckFastReturn(eg, uid, mid) + if isFastReturn == 0 { + return nil + } + var orderData model.OrdList + b, err2 := eg.Where("ord_id=?", oid).Get(&orderData) + if b == false || err2 != nil { + return errors.New("err") + } + if (orderData.IsFastSign == 1 && orderData.IsTransfer == 1) || orderData.State == 4 || orderData.IsWaitReduce > 0 { + return nil + } + var data1 model.OrdListRelate + get, err := eg.Where("uid=? and oid=? and level=?", uid, oid, 0).Get(&data1) + if get == false || err != nil { + return errors.New("err") + } + amount := int(data1.Amount * 100) + if amount <= 0 { + return nil + } + money := utils.Float64ToStr(float64(amount) / 100) + fmt.Println(money) + fastReturnMoney := db.SysCfgFindWithDb(eg, mid, "fast_return_money") + if utils.StrToFloat64(info.Money)+utils.StrToFloat64(money) > utils.StrToFloat64(fastReturnMoney["fast_return_money"]) { + return nil + } + if orderData.IsFastSign == 0 { + args := map[string]string{ + "out_order_no": oid, + "credit_agreement_id": info.CreditAgreementId, + "category_id": "pay_for_rebate_0001", + "order_amount": money, + "amount_type": "ORDER_AMOUNT", + "subject": canalMsg.Name + oid, + } + args = CommInfo(eg, mid, args) + fmt.Println(args) + order, err := pay.CreditagreementOrder(args) + if err != nil { + utils.FilePutContents(mid+"CreditagreementOrder_err", err.Error()) + } + utils.FilePutContents(mid+"CreditagreementOrder", utils.SerializeStr(order)) + if err != nil || order == nil { + return nil + } + if order.ZhimaCreditPayafteruseCreditbizorderOrderResponse.Code != "10000" { + return nil + } + orderData.IsFastSign = 1 + orderData.FastSignId = order.ZhimaCreditPayafteruseCreditbizorderOrderResponse.CreditBizOrderId + eg.Where("ord_id=?", oid).Cols("is_fast_sign,fast_sign_id").Update(&orderData) + sql := "UPDATE user_alipay_info SET money=money+? WHERE uid=?" + db.QueryNativeString(eg, sql, money, orderData.Uid) + } + if info.AlipayId != "" && orderData.IsTransfer != 1 { + //转账 + args1 := map[string]string{ + "out_biz_no": utils.Int64ToStr(orderData.OrdId), + "trans_amount": money, + "identity": info.AlipayId, + "identity_type": "ALIPAY_USER_ID", + "product_code": "TRANS_ACCOUNT_NO_PWD", + "biz_scene": "DIRECT_TRANSFER", + "order_title": canalMsg.Name + "秒返", + } + args1 = CommInfo(eg, mid, args1) + fmt.Println(utils.SerializeStr(args1)) + sign, err := pay.AlipayFundTransUniTransfer(args1) + if err != nil { + utils.FilePutContents(mid+"transfer_err", err.Error()) + } + fmt.Println(sign) + utils.FilePutContents(mid+"transfer", utils.SerializeStr(sign)) + if sign != nil && sign.AlipayFundTransUniTransferResponse.Code == "10000" { + orderData.TransferSignId = sign.AlipayFundTransUniTransferResponse.OrderId + if sign.AlipayFundTransUniTransferResponse.Status == "SUCCESS" { + orderData.IsTransfer = 1 + } else { + orderData.IsTransfer = 2 + } + eg.Where("ord_id=?", oid).Cols("is_transfer,transfer_sign_id").Update(&orderData) + } else { + fmt.Println(sign) + return errors.New("失败") + } + } + + return nil +} +func CommCheckFastReturn(eg *xorm.Engine, uid int, mid string) (int, *model.UserAlipayInfo) { + fastReturnOnoff := db.SysCfgFindWithDb(eg, mid, "fast_return_onoff") + info := db.GetUserAlipayInfo(eg, uid) + if info.IsSign == 0 || info.IsOpen == 0 || info.CreditAgreementId == "" || fastReturnOnoff["fast_return_onoff"] != "1" { + return 0, nil + } + return 1, info +} +func CommInfo(eg *xorm.Engine, mid string, args map[string]string) map[string]string { + fastReturnAlipay := db.SysCfgFindWithDb(eg, mid, "fast_return_alipay") + fastReturnAlipayInfo := fastReturnAlipay["fast_return_alipay"] + args["pay_app_cert_sn"] = gjson.Get(fastReturnAlipayInfo, "pay_app_cert_sn").String() + args["pay_alipayrsa_public_key"] = gjson.Get(fastReturnAlipayInfo, "pay_alipayrsa_public_key").String() + args["pay_ali_use_type"] = gjson.Get(fastReturnAlipayInfo, "pay_ali_use_type").String() + args["private_key"] = gjson.Get(fastReturnAlipayInfo, "private_key").String() + args["app_id"] = gjson.Get(fastReturnAlipayInfo, "app_id").String() + //args["pay_app_cert_sn"] = "25024da974663c98d943ec355e561863" + //args["pay_alipayrsa_public_key"] = "549086292366017b7710dcc74b7969c8" + //args["pay_ali_use_type"] = "1" + //args["private_key"] = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCunVhChSZGSjiuxNrvyd2a06XAT3J7NLH1fjWiy4HfdhH769xejqFdYFGvRrWCyXRNm/ionWmplzHBopnfTP/tbdoqM7HjZegORCDV3mnB4VVqFgXbrJHlh2lum75zysFbj/7pskGG/tzc8CdjbuTkqt3Z7EXBn8RyUvBi+42XAV51dg1k8DsucoSXuKBW6H2iR27HdDYsmsZmGMIa3NaOIq69i1vMq19bu+UsoBVFHA4DBzwwAHWZEiR+hFg99vhEDyby972kgnBCPnQL2Y8xiXufKpvKFzDCJ/aDNzoWhLfr7QAUKL3vleH8z53sQDy4hTYPLYPT2Y+gGAB6LPMpAgMBAAECggEAB3iL8iyoOpGqYy/g/ilw5dLwYI4Fo+fZRVulB9YVNG5kzpaE0zbfCJO6avlngrUD2N43gV9ayfrCEjrWwosU2B+/GdckYUpW52Va0ku10qnFcciHb6Kui1eD10uqlmGybCx5B56s1w3IfVt5E/QGrxHwdAZ75ZDkYs/RoSqKIE/IkfE3FpUYwBrj8vfvCsrzvThqTSXxq3KgyH8wzcSOca9UuO41po0n3my/4PdceBufMgm0sZS0IawOwuciXljXaCsRQ0Z9q2Wun5aYE5mGkUcVyZYbYl3of/VBBueq+egauvRq5n23JQ7UBCMpwZYgKrlHUTW2Szl8iibkVmMn0QKBgQDdzxeB/I0dg/UYs5lTjk9eQnyaEZhg+wulHnnhPkwPMAChUotzFa/r22ND+4Q/gLj9Q/6SzwOm8eFi20lX7teWJyEmy1/BWrRrhL/G7GMMg2zf4XWt4+TW7oSx4aHxCu2jbleUYqJ3f+eN4BfYSOKAwh1bxtAJmTxlhY7JwlLuOwKBgQDJh+U04CdJA6E0k8pkRa1XmR0K+zkQl8ksrj37zF91XCUejuLSu9a2ATPma/lgOT2DoV72f+a9Raqw7wR4r/iDQNucPkIUN/gyRfc4bRpIuUgm0W/RvHJc8WxmNuIrUigA2yaZE7SBWCDmphrueKY/WrOgWuVf2X4lBiMZBVGZ6wKBgQDExh+4tXALKzGYhFwVgD5xBNK9a7ae8pfWGD9Pz5ByOMeWVkBYDHlQ6AQcH1mnbG6wYE3Lt9Mpm5Ozu45JcB3Zm0URwYJlai584/uuYa9NPpqr0rwvU+mDs34MwHqF+IfxYMZZYVd4ZAPsHU2KFr66M3sQHEQa/9JQzjdqTfZ8WQKBgQCF6PmhT8xq1LGaORXD2RScX04QDOxXHTR8ru7a0GshlW/IxVLsignaeCQfWOGkUYSRYXmzOzt7yr3nwXpsIylzNXZ3dFr+Ck6uQRVLdht/9TV/La0qZRhsr7LCnHdeJ8ITB4u3LYPEamW6POcqTBrTgBZZV+yP6vnJ6jEKICGfrwKBgQDBpw0jV8/DO/8TXG6OuzdE+8HmF1umoQSo2NhmCAT1Khi0kuIZKoDdg0R/Y2Ccom5H8ROJIoHnviaDBM6IIDaBM//ifl/XgezVaB/oMa/OyXRs5xB/VW31RGyXRSO9maM5R/szXndzQ8rApodbKWxfn6uamDRJHYEWnAcFXTPkTA==" + //args["app_id"] = "2021003156691664" + return args +} diff --git a/consume/zhios_fast_return_order_refund.go b/consume/zhios_fast_return_order_refund.go new file mode 100644 index 0000000..eeabbcb --- /dev/null +++ b/consume/zhios_fast_return_order_refund.go @@ -0,0 +1,115 @@ +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_pay.git/pay" + "encoding/json" + "errors" + "fmt" + "github.com/streadway/amqp" +) + +func ZhiosFastReturnOrderRefund(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(1) + 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 = handleZhiosFastReturnOrderRefund(res.Body) + //_ = res.Reject(false) + if err == nil { + _ = res.Ack(true) + } + } else { + panic(errors.New("error getting message")) + } + } + fmt.Println("get msg done") +} + +func handleZhiosFastReturnOrderRefund(msg []byte) error { + //1、解析canal采集至mq中queue的数据结构体 + var canalMsg *md.ZhiosFatReturnOrderPay + 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] + uid := utils.StrToInt(canalMsg.Uid) + oid := canalMsg.Oid + var orderData model.OrdList + b, err2 := eg.Where("ord_id=?", oid).Get(&orderData) + if b == false || err2 != nil { + return errors.New("err") + } + if orderData.State != 4 || orderData.IsWaitReduce > 0 || orderData.FastSignId == "" { + return nil + } + var data1 model.OrdListRelate + get, err := eg.Where("uid=? and oid=? and level=?", uid, oid, 0).Get(&data1) + if get == false || err != nil { + return errors.New("err") + } + amount := int(data1.Amount * 100) + if amount <= 0 { + return nil + } + money := utils.Float64ToStr(float64(amount) / 100) + args := map[string]string{ + "out_trade_no": utils.Int64ToStr(orderData.OrdId), + "creditTradeScene": "CREDIT_PAY_UNCERTAIN_FEE", + "is_async_pay": "true", + "total_amount": money, + "auth_code": orderData.FastSignId, + "scene": "ZHIMA_CREDIT_CODE", + "subject": canalMsg.Name + "订单取消", + "product_code": "GENERAL_WITHHOLDING", + "notify_url": "", + } + if canalMsg.Prd == "true" { + args["notify_url"] = "http://api.zhiyingos.com/api/v1/alipay/reduce/callback?master_id=" + mid + } else { + args["notify_url"] = "http://inapi.izhyin.cn/api/v1/alipay/reduce/callback?master_id=" + mid + } + args = CommInfo(eg, mid, args) + fmt.Println(args) + tradePay, _ := pay.AlipayTradePay(args) + orderData.IsWaitReduce = 1 + if tradePay != nil && tradePay.AlipayTradePayResponse.Code == "10000" { + orderData.IsWaitReduce = 2 + sql := "UPDATE user_alipay_info SET money=money-? WHERE uid=?" + db.QueryNativeString(eg, sql, money, orderData.Uid) + } + eg.Where("ord_id=?", oid).Cols("is_wait_reduce").Update(&orderData) + + return nil +} diff --git a/consume/zhios_fast_return_order_success.go b/consume/zhios_fast_return_order_success.go new file mode 100644 index 0000000..4c4bf91 --- /dev/null +++ b/consume/zhios_fast_return_order_success.go @@ -0,0 +1,98 @@ +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_pay.git/pay" + "encoding/json" + "errors" + "fmt" + "github.com/streadway/amqp" +) + +func ZhiosFastReturnOrderSuccess(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(1) + 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 = handleZhiosFastReturnOrderSuccess(res.Body) + //_ = res.Reject(false) + if err == nil { + _ = res.Ack(true) + } + } else { + panic(errors.New("error getting message")) + } + } + fmt.Println("get msg done") +} + +func handleZhiosFastReturnOrderSuccess(msg []byte) error { + //1、解析canal采集至mq中queue的数据结构体 + var canalMsg *md.ZhiosFatReturnOrderPay + 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] + oid := canalMsg.Oid + var orderData model.OrdList + b, err2 := eg.Where("ord_id=?", oid).Get(&orderData) + if b == false || err2 != nil { + return errors.New("err") + } + if orderData.FastSignId == "" { + return errors.New("err") + } + args := map[string]string{ + "out_request_no": utils.Int64ToStr(orderData.OrdId), + "is_fulfilled": "false", + "credit_biz_order_id": orderData.FastSignId, + "remark": "", + } + if orderData.State != 4 { + args["is_fulfilled"] = "true" + } + args = CommInfo(eg, mid, args) + finish, err := pay.CreditagreementOrderFinish(args) + fmt.Println(finish) + if err != nil { + fmt.Println(err) + } + if err != nil || finish == nil { + return errors.New("err") + } + if finish.ZhimaCreditPayafteruseCreditbizorderFinishResponse.Code != "10000" { + return errors.New("err") + } + return nil +} diff --git a/go.mod b/go.mod index d522ac6..0c36d7c 100644 --- a/go.mod +++ b/go.mod @@ -3,12 +3,16 @@ module applet go 1.18 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.1-0.20230412095020-14ea57f9ee82 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 + github.com/cc14514/go-geoip2 v0.0.0-20190105051856-0a1854480a11 + github.com/cc14514/go-geoip2-db v0.0.0-20190106063142-7b6408a9812a github.com/dchest/uniuri v0.0.0-20200228104902-7aecb25e1fe5 - github.com/forgoer/openssl v0.0.0-20201023062029-c3112b0c8700 + github.com/forgoer/openssl v1.2.1 github.com/gin-contrib/sessions v0.0.3 github.com/gin-gonic/gin v1.8.0 github.com/go-playground/locales v0.14.0 @@ -23,7 +27,7 @@ require ( github.com/sony/sonyflake v1.0.0 github.com/streadway/amqp v1.0.0 github.com/swaggo/swag v1.7.0 - github.com/syyongx/php2go v0.9.6 + github.com/syyongx/php2go v0.9.7 github.com/tidwall/gjson v1.7.4 go.uber.org/zap v1.16.0 gopkg.in/natefinch/lumberjack.v2 v2.0.0 @@ -32,12 +36,9 @@ require ( ) require ( - code.fnuoos.com/go_rely_warehouse/zyos_go_es.git v1.0.0 // indirect github.com/KyleBanks/depth v1.2.1 // indirect github.com/PuerkitoBio/purell v1.1.1 // indirect github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect - github.com/cc14514/go-geoip2 v0.0.0-20190105051856-0a1854480a11 // indirect - github.com/cc14514/go-geoip2-db v0.0.0-20190106063142-7b6408a9812a // indirect github.com/gin-contrib/sse v0.1.0 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect github.com/go-openapi/jsonreference v0.19.5 // indirect @@ -48,6 +49,7 @@ require ( github.com/gorilla/context v1.1.1 // indirect github.com/gorilla/securecookie v1.1.1 // indirect github.com/gorilla/sessions v1.2.1 // indirect + github.com/iGoogle-ink/gopay v1.5.36 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/leodido/go-urn v1.2.1 // indirect github.com/mailru/easyjson v0.7.7 // indirect @@ -68,9 +70,9 @@ require ( go.uber.org/multierr v1.6.0 // indirect 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-20210405180319-a5a99cb37ef4 // indirect - golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac // indirect - golang.org/x/text v0.3.6 // indirect + golang.org/x/net v0.0.0-20221004154528-8021a29435af // 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 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect google.golang.org/protobuf v1.28.0 // indirect