diff --git a/api/errcode/errcode.go b/api/errcode/errcode.go index 9f346b69..d1d457b1 100644 --- a/api/errcode/errcode.go +++ b/api/errcode/errcode.go @@ -217,7 +217,7 @@ var ErrCodeMsgMap = map[ErrCode]string{ ErrCodeSingleDistributeHisSrvFail: "慧用工下发打款历史表服务错误", ErrCodeSingleDistributeHisNotExist: "慧用工下发打款历史表不存在", - ErrCodeCurrentSingleDistributeNotTerminated: "当前慧用工下发打款申请尚未结束", + ErrCodeCurrentSingleDistributeNotTerminated: "当前提现申请尚未结束", ErrCodeUnhandleableSingleDistributeStatus: "无法处理的下发打款状态", ErrCodeHvyogoSrvFail: "慧用工接口服务错误", diff --git a/api/errs/error.go b/api/errs/error.go index 683cf0e0..a4f351c5 100644 --- a/api/errs/error.go +++ b/api/errs/error.go @@ -1,8 +1,9 @@ package errs import ( - "github.com/pkg/errors" "service/api/errcode" + + "github.com/pkg/errors" ) func DealVasErr(err error) (errcode.ErrCode, error) { @@ -42,23 +43,24 @@ var ErrEcMap = map[error]errcode.ErrCode{ } var ( - ErrVasProductNotExists = errors.New("vas product not exists") - ErrVasNotMoneyProduct = errors.New("not money product") - ErrVasWalletNotExist = errors.New("vas wallet not exists") - ErrVasInvalidContactProduct = errors.New("invalid contact product") - ErrVasUserVasNotExist = errors.New("user vas not exists") - ErrVasNoEnoughCoin = errors.New("no enough coin") - ErrVasInvalidCoinPrice = errors.New("invalid coin price") - ErrVasInvalidOrder = errors.New("invalid order") - ErrVasOrderNotMatch = errors.New("order not match") - ErrVasOrderNotExists = errors.New("order not exists") - ErrVasNotUnlock = errors.New("not unlock") - ErrVasAlreadyUnlock = errors.New("already unlock") - ErrVasRepeatDeal = errors.New("repeat deal") - ErrVasInvalidCalcPrice = errors.New("invalid calc price") - ErrVasInvalidParam = errors.New("invalid param") - ErrVasNoEnoughWithdrawDias = errors.New("no enough withdraw dias") - ErrVasAlipayUniTransferFail = errors.New("alipay uni transfer fail") - ErrVasOverTodayWithdrawCnt = errors.New("over today withdraw cnt") - ErrVasRefundLimit = errors.New("账号已受限,解限请联系客服") + ErrVasProductNotExists = errors.New("vas product not exists") + ErrVasNotMoneyProduct = errors.New("not money product") + ErrVasWalletNotExist = errors.New("vas wallet not exists") + ErrVasInvalidContactProduct = errors.New("invalid contact product") + ErrVasUserVasNotExist = errors.New("user vas not exists") + ErrVasNoEnoughCoin = errors.New("no enough coin") + ErrVasInvalidCoinPrice = errors.New("invalid coin price") + ErrVasInvalidOrder = errors.New("invalid order") + ErrVasOrderNotMatch = errors.New("order not match") + ErrVasOrderNotExists = errors.New("order not exists") + ErrVasNotUnlock = errors.New("not unlock") + ErrVasAlreadyUnlock = errors.New("already unlock") + ErrVasRepeatDeal = errors.New("repeat deal") + ErrVasInvalidCalcPrice = errors.New("invalid calc price") + ErrVasInvalidParam = errors.New("invalid param") + ErrVasNoEnoughWithdrawDias = errors.New("no enough withdraw dias") + ErrVasAlipayUniTransferFail = errors.New("alipay uni transfer fail") + ErrVasOverTodayWithdrawCnt = errors.New("over today withdraw cnt") + ErrVasRefundLimit = errors.New("账号已受限,解限请联系客服") + ErrVasHvyogoSingleDistributionFail = errors.New("hvyogo single distribution fail") ) diff --git a/api/proto/hvyogo/proto/hvyogo_api.go b/api/proto/hvyogo/proto/hvyogo_api.go index a3b0638b..6f82715d 100644 --- a/api/proto/hvyogo/proto/hvyogo_api.go +++ b/api/proto/hvyogo/proto/hvyogo_api.go @@ -27,10 +27,10 @@ type ApiWorkerFindDetailData struct { StatusText string `json:"status_text" deepcopier:"field:StatusText"` // 返回信息 WorkerId string `json:"worker_id" deepcopier:"field:WorkerId"` // 自由职业者ID WorkerName string `json:"worker_name" deepcopier:"field:WorkerName"` // 自由职业者名称 - WorkerMobile string `json:"worker_mobile" deepcopier:"field:WorkerMobile"` // 自由职业者手机号 - IdentNo string `json:"ident_no" deepcopier:"field:IdentNo"` // 自由职业者证件号 + WorkerMobile string `json:"worker_mobile" deepcopier:"field:WorkerMobile" jcrypto:"rsa"` // 自由职业者手机号 + IdentNo string `json:"ident_no" deepcopier:"field:IdentNo" jcrypto:"rsa"` // 自由职业者证件号 CertificateType int `json:"certificate_type" deepcopier:"field:CertificateType"` // 自由职业者证件类型 - BankCardNo string `json:"bank_card_no" deepcopier:"field:BankCardNo"` // 收款账号 + BankCardNo string `json:"bank_card_no" deepcopier:"field:BankCardNo" jcrypto:"rsa"` // 收款账号 SignState int `json:"sign_state" deepcopier:"field:SignState"` // 签约状态 SignTime string `json:"sign_time" deepcopier:"field:SignTime"` // 签约时间 SignDesc string `json:"sign_desc" deepcopier:"field:SignDesc"` // 签约状态描述 @@ -50,7 +50,7 @@ type ApiWorkerFindDetailResp struct { type ApiSingleDistributeReq struct { base.BaseRequest ReceiptChannel int64 `json:"receipt_channel"` - WorkerAccount string `json:"worker_account"` + WorkerAccount string `json:"worker_account" jcrypto:"rsa"` DistributeAmount string `json:"distribute_amount"` } @@ -68,17 +68,17 @@ type ApiSingleDistributeResp struct { type ApiWorkerUpdateReq struct { base.BaseRequest - WorkerMobile string `json:"worker_mobile"` // 自由职业者手机号 - BankCard string `json:"bank_card"` // 收款账号 - ReceiptChannel int64 `json:"receipt_channel"` // 收款渠道 + WorkerMobile string `json:"worker_mobile" jcrypto:"rsa"` // 自由职业者手机号 + BankCard string `json:"bank_card" jcrypto:"rsa"` // 收款账号 + ReceiptChannel int64 `json:"receipt_channel"` // 收款渠道 } type ApiWorkerUpdateData struct { - StatusCode string `json:"status_code" deepcopier:"field:StatusCode"` // 返回码 - StatusText string `json:"status_text" deepcopier:"field:StatusText"` // 返回信息 - WorkerId string `json:"worker_id" deepcopier:"field:WorkerId"` // 自由职业者ID - WorkerMobile string `json:"worker_mobile" deepcopier:"field:WorkerMobile"` // 自由职业者手机号 - BankCardNo string `json:"bank_card_no" deepcopier:"field:BankCardNo"` // 收款账号 + StatusCode string `json:"status_code" deepcopier:"field:StatusCode"` // 返回码 + StatusText string `json:"status_text" deepcopier:"field:StatusText"` // 返回信息 + WorkerId string `json:"worker_id" deepcopier:"field:WorkerId"` // 自由职业者ID + WorkerMobile string `json:"worker_mobile" deepcopier:"field:WorkerMobile" jcrypto:"rsa"` // 自由职业者手机号 + BankCardNo string `json:"bank_card_no" deepcopier:"field:BankCardNo" jcrypto:"rsa"` // 收款账号 } type ApiWorkerUpdateResp struct { diff --git a/app/mix/controller/hvyogo_api.go b/app/mix/controller/hvyogo_api.go index 2970d0f3..28db908c 100644 --- a/app/mix/controller/hvyogo_api.go +++ b/app/mix/controller/hvyogo_api.go @@ -2,6 +2,7 @@ package controller import ( "service/api/errcode" + "service/api/message/response" hvyogoproto "service/api/proto/hvyogo/proto" "service/app/mix/service" "service/bizcommon/util" @@ -64,6 +65,11 @@ func ApiHvyogoSingleDistribute(ctx *gin.Context) { return } + if data.StatusCode != response.StatusCodeSuccess { + ReplyErrorMsg(ctx, data.StatusText) + return + } + ReplyOk(ctx, data) } diff --git a/app/mix/controller/init.go b/app/mix/controller/init.go index e71dd71e..adb5f009 100644 --- a/app/mix/controller/init.go +++ b/app/mix/controller/init.go @@ -67,30 +67,6 @@ func Init(r *gin.Engine) { // gateway网关,给客户端调用 //toCApiGroup := r.Group("/api", PrepareToC()) - // 支付相关 - vasPayGroup := r.Group("/api/vas", PrepareToC()) - vasPayGroup.POST("get_coins_product_list", middleware.JSONParamValidator(vasproto.GetCoinsProductListReq{}), GetCoinsProductList) - vasPayGroup.POST("get_membership_product_list", middleware.JSONParamValidator(vasproto.GetMembershipProductListReq{}), GetMembershipProductList) - vasPayGroup.POST("create_order", middleware.JSONParamValidator(vasproto.CreateOrderReq{}), middleware.JwtAuthenticator(), CreateOrder) - vasPayGroup.POST("create_order_wx_pub", middleware.JSONParamValidator(vasproto.CreateOrderReq{}), CreateOrderWxPub) - vasPayGroup.POST("one_step_unlock", middleware.JSONParamValidator(vasproto.OneStepUnlockContactReq{}), middleware.JwtAuthenticator(), OneStepUnlock) - vasPayGroup.POST("consumer_fill_contact", middleware.JSONParamValidator(vasproto.ConsumerFillContactReq{}), middleware.JwtAuthenticator(), ConsumerFillContact) - vasPayGroup.POST("get_add_wechat_list", middleware.JSONParamValidator(vasproto.GetAddWechatListReq{}), middleware.JwtAuthenticator(), GetAddWechatList) - vasPayGroup.POST("confirm_add_wechat", middleware.JSONParamValidator(vasproto.ConfirmAddWechatReq{}), middleware.JwtAuthenticator(), ConfirmAddWechat) - vasPayGroup.POST("get_unlock_wechat_list", middleware.JSONParamValidator(vasproto.GetUnlockWechatListReq{}), middleware.JwtAuthenticator(), GetUnlockWechatList) - vasPayGroup.POST("get_ch_list", middleware.JSONParamValidator(vasproto.GetCHListReq{}), middleware.JwtAuthenticator(), GetCHList) - vasPayGroup.POST("update_wechat", middleware.JSONParamValidator(vasproto.UpdateWechatReq{}), middleware.JwtAuthenticator(), UpdateWechat) - vasPayGroup.POST("query_wechat", middleware.JSONParamValidator(vasproto.QueryWechatReq{}), middleware.JwtAuthenticator(), QueryWechat) - vasPayGroup.POST("h5_direct_unlock_wechat", middleware.JSONParamValidator(vasproto.H5DirectUnlockWechatReq{}), middleware.JwtAuthenticator(), H5DirectUnlockWechat) - vasPayGroup.POST("h5_get_unlock_wechat_list", middleware.JSONParamValidator(vasproto.GetUnlockWechatListReq{}), middleware.JwtAuthenticator(), GetUnlockWechatList) - vasPayGroup.POST("withdraw_page", middleware.JSONParamValidator(vasproto.WithdrawPageReq{}), middleware.JwtAuthenticator(), WithdrawPage) - vasPayGroup.POST("withdraw_send_verifycode", middleware.JSONParamValidator(vasproto.WithdrawSendVerifycodeReq{}), middleware.JwtAuthenticator(), WithdrawSendVerifycode) - vasPayGroup.POST("withdraw_apply", middleware.JSONParamValidator(vasproto.WithdrawApplyReq{}), middleware.JwtAuthenticator(), WithdrawApply) - vasPayGroup.POST("deal_one_coin_order", middleware.JSONParamValidator(vasproto.DealOneCoinOrderReq{}), middleware.JwtAuthenticator(), DealOneCoinOrder) - vasPayGroup.POST("deal_one_order", middleware.JSONParamValidator(vasproto.DealOneOrderReq{}), DealOneOrder) - vasPayGroup.POST("moment_order_list", middleware.JSONParamValidator(vasproto.ZoneMomentOrderListReq{}), ZoneMomentOrderList) - vasPayGroup.POST("income_page", middleware.JSONParamValidator(vasproto.IncomePageReq{}), IncomePage) - // 验证码 apiVeriCodeGroup := r.Group("/api/veri_code", PrepareToC()) apiVeriCodeGroup.POST("send", middleware.JSONParamValidator(vericodeproto.ApiSendReq{}), middleware.RequestDecryptor(), ApiSendVeriCode) @@ -290,8 +266,8 @@ func Init(r *gin.Engine) { apiHvyogoGroup := r.Group("/api/hvyogo") apiHvyogoGroup.POST("query_agree_state", middleware.JSONParamValidator(hvyogoproto.ApiQueryAgreeStateReq{}), middleware.JwtAuthenticator(), ApiHvyogoQueryAgreeState) apiHvyogoGroup.POST("worker_find_detail", middleware.JSONParamValidator(hvyogoproto.ApiWorkerFindDetailReq{}), middleware.JwtAuthenticator(), ApiHvyogoWorkerFindDetail) - apiHvyogoGroup.POST("single_distribute", middleware.JSONParamValidator(hvyogoproto.ApiSingleDistributeReq{}), middleware.JwtAuthenticator(), ApiHvyogoSingleDistribute) - apiHvyogoGroup.POST("worker_update", middleware.JSONParamValidator(hvyogoproto.ApiWorkerUpdateReq{}), middleware.JwtAuthenticator(), ApiHvyogoWorkerUpdate) + apiHvyogoGroup.POST("single_distribute", middleware.JSONParamValidator(hvyogoproto.ApiSingleDistributeReq{}), middleware.JwtAuthenticator(), middleware.RequestDecryptor(), ApiHvyogoSingleDistribute) + apiHvyogoGroup.POST("worker_update", middleware.JSONParamValidator(hvyogoproto.ApiWorkerUpdateReq{}), middleware.JwtAuthenticator(), middleware.RequestDecryptor(), ApiHvyogoWorkerUpdate) // =============================== 以下是服务,只允许内网调用 =============================== @@ -303,6 +279,30 @@ func Init(r *gin.Engine) { opProductGroup.POST("delete", middleware.JSONParamValidator(productproto.OpDeleteReq{}), middleware.JwtAuthenticator(), OpDeleteProduct) opProductGroup.POST("list", middleware.JSONParamValidator(productproto.OpListReq{}), middleware.JwtAuthenticator(), OpGetProductList) + // 支付相关 + vasPayGroup := r.Group("/api/vas", PrepareToC()) + vasPayGroup.POST("get_coins_product_list", middleware.JSONParamValidator(vasproto.GetCoinsProductListReq{}), GetCoinsProductList) + vasPayGroup.POST("get_membership_product_list", middleware.JSONParamValidator(vasproto.GetMembershipProductListReq{}), GetMembershipProductList) + vasPayGroup.POST("create_order", middleware.JSONParamValidator(vasproto.CreateOrderReq{}), middleware.JwtAuthenticator(), CreateOrder) + vasPayGroup.POST("create_order_wx_pub", middleware.JSONParamValidator(vasproto.CreateOrderReq{}), CreateOrderWxPub) + vasPayGroup.POST("one_step_unlock", middleware.JSONParamValidator(vasproto.OneStepUnlockContactReq{}), middleware.JwtAuthenticator(), OneStepUnlock) + vasPayGroup.POST("consumer_fill_contact", middleware.JSONParamValidator(vasproto.ConsumerFillContactReq{}), middleware.JwtAuthenticator(), ConsumerFillContact) + vasPayGroup.POST("get_add_wechat_list", middleware.JSONParamValidator(vasproto.GetAddWechatListReq{}), middleware.JwtAuthenticator(), GetAddWechatList) + vasPayGroup.POST("confirm_add_wechat", middleware.JSONParamValidator(vasproto.ConfirmAddWechatReq{}), middleware.JwtAuthenticator(), ConfirmAddWechat) + vasPayGroup.POST("get_unlock_wechat_list", middleware.JSONParamValidator(vasproto.GetUnlockWechatListReq{}), middleware.JwtAuthenticator(), GetUnlockWechatList) + vasPayGroup.POST("get_ch_list", middleware.JSONParamValidator(vasproto.GetCHListReq{}), middleware.JwtAuthenticator(), GetCHList) + vasPayGroup.POST("update_wechat", middleware.JSONParamValidator(vasproto.UpdateWechatReq{}), middleware.JwtAuthenticator(), UpdateWechat) + vasPayGroup.POST("query_wechat", middleware.JSONParamValidator(vasproto.QueryWechatReq{}), middleware.JwtAuthenticator(), QueryWechat) + vasPayGroup.POST("h5_direct_unlock_wechat", middleware.JSONParamValidator(vasproto.H5DirectUnlockWechatReq{}), middleware.JwtAuthenticator(), H5DirectUnlockWechat) + vasPayGroup.POST("h5_get_unlock_wechat_list", middleware.JSONParamValidator(vasproto.GetUnlockWechatListReq{}), middleware.JwtAuthenticator(), GetUnlockWechatList) + vasPayGroup.POST("withdraw_page", middleware.JSONParamValidator(vasproto.WithdrawPageReq{}), middleware.JwtAuthenticator(), WithdrawPage) + vasPayGroup.POST("withdraw_send_verifycode", middleware.JSONParamValidator(vasproto.WithdrawSendVerifycodeReq{}), middleware.JwtAuthenticator(), WithdrawSendVerifycode) + vasPayGroup.POST("withdraw_apply", middleware.JSONParamValidator(vasproto.WithdrawApplyReq{}), middleware.JwtAuthenticator(), WithdrawApply) + vasPayGroup.POST("deal_one_coin_order", middleware.JSONParamValidator(vasproto.DealOneCoinOrderReq{}), middleware.JwtAuthenticator(), DealOneCoinOrder) + vasPayGroup.POST("deal_one_order", middleware.JSONParamValidator(vasproto.DealOneOrderReq{}), DealOneOrder) + vasPayGroup.POST("moment_order_list", middleware.JSONParamValidator(vasproto.ZoneMomentOrderListReq{}), ZoneMomentOrderList) + vasPayGroup.POST("income_page", middleware.JSONParamValidator(vasproto.IncomePageReq{}), IncomePage) + extVasPayGroup := r.Group("/ext/vas") extVasPayGroup.POST("alipay_callback", AlipayCallback) extVasPayGroup.POST("wxpay_callback", WxpayCallback) diff --git a/app/mix/dao/mongo.go b/app/mix/dao/mongo.go index 98f6bf92..66cf8dab 100644 --- a/app/mix/dao/mongo.go +++ b/app/mix/dao/mongo.go @@ -5415,6 +5415,24 @@ func (m *Mongo) ClearSingleDistributeLock(ctx *gin.Context, mid int64) (err erro return nil } +func (m *Mongo) GetAndDecSingleDistributeLock(ctx *gin.Context, mid int64) (singleDistributeLock *dbstruct.SingleDistributeLock, err error) { + col := m.getColSingleDistributeLock() + + change := qmgo.Change{ + Update: qmgo.M{"$inc": qmgo.M{"lock": -1}}, + Upsert: true, + ReturnNew: false, + } + + singleDistributeLockInstance := dbstruct.SingleDistributeLock{} + if err = col.Find(ctx, qmgo.M{"_id": mid}).Apply(change, &singleDistributeLockInstance); err != nil { + logger.Error("change error : %v", err) + return + } + + return &singleDistributeLockInstance, err +} + func (m *Mongo) GetSingleDistributeHisById(ctx *gin.Context, id string) (*dbstruct.SingleDistributeHis, error) { one := &dbstruct.SingleDistributeHis{} col := m.getColSingleDistributeHis() diff --git a/app/mix/dao/mysql.go b/app/mix/dao/mysql.go index 667ebe29..2f4c1738 100644 --- a/app/mix/dao/mysql.go +++ b/app/mix/dao/mysql.go @@ -1029,21 +1029,18 @@ func (m *Mysql) GetWithdrawOrdersByMid(ctx *gin.Context, tx *sqlx.Tx, mid, st, e // 从订单号获取提现订单 func (m *Mysql) GetWithdrawOrderById(ctx *gin.Context, tx *sqlx.Tx, id string) (wOrder *dbstruct.WithdrawOrder, err error) { - wOrder = &dbstruct.WithdrawOrder{} + var tmpOrder dbstruct.WithdrawOrder sqlStr := fmt.Sprintf("select * from %s where id=?", TableWithdrawOrder) if tx != nil { - err = tx.SelectContext(ctx, wOrder, sqlStr, id) + err = tx.GetContext(ctx, &tmpOrder, sqlStr, id) } else { db := m.getDBVas() - err = db.SelectContext(ctx, wOrder, sqlStr, id) - } - if err == sql.ErrNoRows { - err = nil - return + err = db.GetContext(ctx, &tmpOrder, sqlStr, id) } if err != nil { return } + wOrder = &tmpOrder return } diff --git a/app/mix/service/apiservice.go b/app/mix/service/apiservice.go index d6a1e706..12d12517 100644 --- a/app/mix/service/apiservice.go +++ b/app/mix/service/apiservice.go @@ -3494,25 +3494,40 @@ func (s *Service) ApiHvyogoSingleDistribute(ctx *gin.Context, req *hvyogoproto.A logger.Error("_DefaultSingleDistributeHis OpUpdate fail, err: %v", err) } - if resp.StatusCode != response.StatusCodeSuccess { - err = fmt.Errorf("single distribution fail") - return resp, err - } - return resp, nil } // 发起单侧提现申请 diamonds := int64(float64(distributeAmount) / 10) - resp, err := _DefaultVas.UnilaterallyHvyogoWithdrawApply(ctx, &vasproto.UnilaterallyWithdrawApplyReq{ + resp, err, isValidTimeErr := _DefaultVas.UnilaterallyHvyogoWithdrawApply(ctx, &vasproto.UnilaterallyWithdrawApplyReq{ BaseRequest: req.BaseRequest, Diamonds: diamonds, }, extWithdrawFunc) ec, err = errs.DealVasErr(err) if err != nil { logger.Error("WithdrawApply fail, req: %v, err: %v", util.ToJson(req), err) + if isValidTimeErr { //是验证时错误,锁-1 + _, err = _DefaultSingleDistributeHis.GetAndDecLock(ctx, req.BaseRequest.Mid) + if err != nil { + logger.Error("_DefaultSingleDistributeHis GetAndDecLock failed : %v", err) + ec, err = errcode.ErrCodeSingleDistributeHisSrvFail, nil + return + } + } + err = nil return } + // 下发打款接口未成功调用 + if resp.StatusCode != response.StatusCodeSuccess { + logger.Error("WithdrawApply fail, req: %v, err: %v", util.ToJson(req), resp.StatusText) + // 恢复锁 + _, err = _DefaultSingleDistributeHis.GetAndDecLock(ctx, req.BaseRequest.Mid) + if err != nil { + logger.Error("_DefaultSingleDistributeHis GetAndDecLock failed : %v", err) + ec, err = errcode.ErrCodeSingleDistributeHisSrvFail, nil + return + } + } // 组装返回结果 data = &hvyogoproto.ApiSingleDistributeData{} diff --git a/app/mix/service/logic/single_distribute_his.go b/app/mix/service/logic/single_distribute_his.go index 2ed3e7b3..e0d5116a 100644 --- a/app/mix/service/logic/single_distribute_his.go +++ b/app/mix/service/logic/single_distribute_his.go @@ -82,6 +82,15 @@ func (p *SingleDistributeHis) ClearLock(ctx *gin.Context, mid int64) error { return nil } +func (p *SingleDistributeHis) GetAndDecLock(ctx *gin.Context, mid int64) (*dbstruct.SingleDistributeLock, error) { + lock, err := p.store.GetAndDecSingleDistributeLock(ctx, mid) + if err != nil { + logger.Error("DecSingleDistributeLock fail, err: %v", err) + return nil, err + } + return lock, nil +} + func (p *SingleDistributeHis) GetById(ctx *gin.Context, id string) (*dbstruct.SingleDistributeHis, error) { list, err := p.store.GetSingleDistributeHisById(ctx, id) if err != nil { diff --git a/app/mix/service/logic/vas.go b/app/mix/service/logic/vas.go index 96fdc098..db696411 100644 --- a/app/mix/service/logic/vas.go +++ b/app/mix/service/logic/vas.go @@ -11,6 +11,7 @@ import ( "fmt" "service/api/base" "service/api/errs" + "service/api/message/response" accountproto "service/api/proto/account/proto" hvyogoproto "service/api/proto/hvyogo/proto" vasproto "service/api/proto/vas/proto" @@ -3825,19 +3826,20 @@ func (v *Vas) GetRefundRateGroupByMid(ctx *gin.Context, tx *sqlx.Tx) ([]*dbstruc } // 单侧提现申请 -func (v *Vas) UnilaterallyHvyogoWithdrawApply(ctx *gin.Context, req *vasproto.UnilaterallyWithdrawApplyReq, extWithdrawFunc func(orderId string) (*hvyogoproto.SingleDistributeVO, error)) (resp *hvyogoproto.SingleDistributeVO, err error) { +func (v *Vas) UnilaterallyHvyogoWithdrawApply(ctx *gin.Context, req *vasproto.UnilaterallyWithdrawApplyReq, extWithdrawFunc func(orderId string) (*hvyogoproto.SingleDistributeVO, error)) (resp *hvyogoproto.SingleDistributeVO, err error, isValidTimeErr bool) { var ( mid = req.Mid diamonds = req.Diamonds money = req.Diamonds * 10 ) + isValidTimeErr = false // 是否验证时错误 // 今日提现次数 st := util.GetTodayZeroTime().Unix() et := st + 86400 list, _ := v.store.GetWithdrawOrdersByMid(ctx, nil, mid, st, et) if len(list) > 0 { - err = errs.ErrVasOverTodayWithdrawCnt + err, isValidTimeErr = errs.ErrVasOverTodayWithdrawCnt, true return } @@ -3846,11 +3848,11 @@ func (v *Vas) UnilaterallyHvyogoWithdrawApply(ctx *gin.Context, req *vasproto.Un // 检查余额 wallet, _ := v.CheckWalletExist(ctx, nil, mid) if wallet == nil { - err = errs.ErrVasWalletNotExist + err, isValidTimeErr = errs.ErrVasWalletNotExist, true return } if wallet.GetWithdrawDiamonds() < diamonds { - err = errs.ErrVasNoEnoughWithdrawDias + err, isValidTimeErr = errs.ErrVasNoEnoughWithdrawDias, true return } @@ -3869,10 +3871,18 @@ func (v *Vas) UnilaterallyHvyogoWithdrawApply(ctx *gin.Context, req *vasproto.Un if err != nil { logger.Error("global err, req: %v, err: %v", util.ToJson(req), err) } - errTx := v.store.DealTxCR(tx, err) - if errTx != nil { - logger.Error("DealTxCR fail, err: %v", errTx) - return + if resp.StatusCode != response.StatusCodeSuccess { + errTx := v.store.DealTxCR(tx, errs.ErrVasHvyogoSingleDistributionFail) + if errTx != nil { + logger.Error("DealTxCR fail, err: %v", errTx) + return + } + } else { + errTx := v.store.DealTxCR(tx, err) + if errTx != nil { + logger.Error("DealTxCR fail, err: %v", errTx) + return + } } }() diff --git a/app/mix/service/vasservice.go b/app/mix/service/vasservice.go index 5b069451..7b1b94a7 100644 --- a/app/mix/service/vasservice.go +++ b/app/mix/service/vasservice.go @@ -3,7 +3,6 @@ package service import ( "encoding/base64" "fmt" - goproto "google.golang.org/protobuf/proto" "service/api/base" "service/api/errcode" "service/api/errs" @@ -20,6 +19,8 @@ import ( "strconv" "strings" + goproto "google.golang.org/protobuf/proto" + "github.com/gin-gonic/gin" ) @@ -472,6 +473,18 @@ func (s *Service) chListWithdraw(ctx *gin.Context, chList []*dbstruct.ConsumeHis if chDB.GetChange() < 0 { item.Change = fmt.Sprintf("%d钻石", chDB.GetChange()) } + case dbstruct.CHSTypeWithdrawDiamondHvyogo: + item.Desc = "钻石提现" + item.Change = changeMark + fmt.Sprintf("%d钻石", chDB.GetChange()) + if chDB.GetChange() < 0 { + item.Change = fmt.Sprintf("%d钻石", chDB.GetChange()) + } + case dbstruct.CHSTypeWithdrawDiamondReversal: + item.Desc = "钻石返还" + item.Change = changeMark + fmt.Sprintf("%d钻石", chDB.GetChange()) + if chDB.GetChange() < 0 { + item.Change = fmt.Sprintf("%d钻石", chDB.GetChange()) + } } list = append(list, item) } diff --git a/dbstruct/vas_mysql.go b/dbstruct/vas_mysql.go index 00b459a0..a3132d26 100644 --- a/dbstruct/vas_mysql.go +++ b/dbstruct/vas_mysql.go @@ -553,7 +553,7 @@ const ( CHSTypeWithdrawDiamondAuto = 40001 // 自动提现明细 CHSTypeWithdrawDiamondHvyogo = 40002 // 慧用工提现明细 - CHSTypeWithdrawDiamondReversal = 40002 // 提现冲正明细 + CHSTypeWithdrawDiamondReversal = 40003 // 提现冲正明细 ) type ConsumeHistory struct { diff --git a/etc/mix/mix-prod-offline.yaml b/etc/mix/mix-prod-offline.yaml index 908ad1c3..5cc77a0c 100644 --- a/etc/mix/mix-prod-offline.yaml +++ b/etc/mix/mix-prod-offline.yaml @@ -36,6 +36,10 @@ crypto: private_key: "" sha256: salts: "23XSka ZsMTz3 xdnKtT mx229Z aJ3VS7 ett3nV YDEgFB lBm57J 92hgkJ B0u9VF keyNK3 cB16Tm 63r1mX IUs471 ytbW7o ic8Pxw" + hyg_aes: + private_key: "qKFUnG7TMYdtnrz+UMBiLw==" + hyg_sha1withrsa: + private_key: "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAI5H9pLSrJelSNvOqQfhf0c5hcDEYreV5BggcwL5/ycLnSQNu/uBeg9YFewUW11l5KfX7u26ONSIphYB7Hld9BJxsqn2c+QItqAoAPwXyulv6oQIXO4+JGucEKQ5HFu21VQc25sjHwt2GgzxxhqndwJ3IfHGMBY/TAIvWyE8o9kFAgMBAAECgYBOGqL4pj2oYUtFnoSbluXPq3wI/cVTEi1MMUPxdlrijDWO/RscTU877RbbqbEd7DlBCgBW78sSoJDLs/KkDTdVtw9Q+NvXCp3Dwx7LXbyuMiWQBR+3ZvzwnYFQHSXMaLsk55+HTQPjIw7htNWA8yipCN8BUKf4mf+tWSnjOZ5FAQJBAMLzj19+nLr35bzgAx3oX7lk1X9cj/XYzIEAMVyvhC8qsRHy/Bsn/reia0ODPJbWeTiPzMkg5FfN1YyKrxRz5+0CQQC61guPS7G2ADSiVGNlpae4xcQXYJlwSLiXb4iPpU1hBDMa0Q+oMQAOjIv3E4Uj+IPh5MllSILlq1Jt70TgDOJ5AkEAhL3y0cMUVPqWo5Skiqi/BS1zcdVE8NE97liDQ+j+yF75Uo9wuczx03f0MXQavVosECdZ+Vk8Ic01qwyDShnhwQJAeji7pynlPyIzTF3YCA6uAXmeJYzT01g/KRGVTCLe07Bjng9VJrmnR905UpA6cKWJ4KRB+zfMKWJBshjr/YVwQQJBAIY4mh+pFFttaPloQ4ru3TsXwY80UYqep7iluFd/xZjMhgJFApTQoJJgYwRzAyhk39mfAw9WTd/Km1AiE/I/Kh0=" alipay: appid: "2021004115647165" @@ -158,3 +162,8 @@ yeepay: sd: host: "http://172.31.37.68:8500" service_name: "mix_online" + + +hvyogo: + cooperator_id: "C1248233014165520384" + position_id: "P1255937692118577152" \ No newline at end of file diff --git a/etc/mix/mix-prod.yaml b/etc/mix/mix-prod.yaml index fc846534..76e346b6 100644 --- a/etc/mix/mix-prod.yaml +++ b/etc/mix/mix-prod.yaml @@ -36,6 +36,10 @@ crypto: private_key: "" sha256: salts: "23XSka ZsMTz3 xdnKtT mx229Z aJ3VS7 ett3nV YDEgFB lBm57J 92hgkJ B0u9VF keyNK3 cB16Tm 63r1mX IUs471 ytbW7o ic8Pxw" + hyg_aes: + private_key: "qKFUnG7TMYdtnrz+UMBiLw==" + hyg_sha1withrsa: + private_key: "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAI5H9pLSrJelSNvOqQfhf0c5hcDEYreV5BggcwL5/ycLnSQNu/uBeg9YFewUW11l5KfX7u26ONSIphYB7Hld9BJxsqn2c+QItqAoAPwXyulv6oQIXO4+JGucEKQ5HFu21VQc25sjHwt2GgzxxhqndwJ3IfHGMBY/TAIvWyE8o9kFAgMBAAECgYBOGqL4pj2oYUtFnoSbluXPq3wI/cVTEi1MMUPxdlrijDWO/RscTU877RbbqbEd7DlBCgBW78sSoJDLs/KkDTdVtw9Q+NvXCp3Dwx7LXbyuMiWQBR+3ZvzwnYFQHSXMaLsk55+HTQPjIw7htNWA8yipCN8BUKf4mf+tWSnjOZ5FAQJBAMLzj19+nLr35bzgAx3oX7lk1X9cj/XYzIEAMVyvhC8qsRHy/Bsn/reia0ODPJbWeTiPzMkg5FfN1YyKrxRz5+0CQQC61guPS7G2ADSiVGNlpae4xcQXYJlwSLiXb4iPpU1hBDMa0Q+oMQAOjIv3E4Uj+IPh5MllSILlq1Jt70TgDOJ5AkEAhL3y0cMUVPqWo5Skiqi/BS1zcdVE8NE97liDQ+j+yF75Uo9wuczx03f0MXQavVosECdZ+Vk8Ic01qwyDShnhwQJAeji7pynlPyIzTF3YCA6uAXmeJYzT01g/KRGVTCLe07Bjng9VJrmnR905UpA6cKWJ4KRB+zfMKWJBshjr/YVwQQJBAIY4mh+pFFttaPloQ4ru3TsXwY80UYqep7iluFd/xZjMhgJFApTQoJJgYwRzAyhk39mfAw9WTd/Km1AiE/I/Kh0=" alipay: appid: "2021004115647165" @@ -158,4 +162,8 @@ yeepay: sd: host: "http://172.31.37.68:8500" - service_name: "mix_online" \ No newline at end of file + service_name: "mix_online" + +hvyogo: + cooperator_id: "C1248233014165520384" + position_id: "P1255937692118577152" \ No newline at end of file diff --git a/etc/mix/mix-test-offline.yaml b/etc/mix/mix-test-offline.yaml index bd8a147b..c84d96bf 100644 --- a/etc/mix/mix-test-offline.yaml +++ b/etc/mix/mix-test-offline.yaml @@ -159,4 +159,8 @@ yeepay: parent_merchant_no: "10090316660" merchant_no: "10090326142" notify_url: "https://testapi.tiefen.fun/ext/vas/yeepay_callback" - private_key: "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC8Zfd0RVnpmPuodc0N8XLLI8DWT4hTAyOlwbE5LLiiguG5W0AghvddreO73T51BGK4V05Taxdpv7j7KNl39OUzKA0tpmoLwC4f6II1Op4tY05NnUgOFbno01vE7cN5BWLwVA35dfgQm1jtzXECdTufavYH/qPCzpvd7OTbmdHonMVjanjz+XOfnFowxq8ap3F63ocF4LR3KalsC/cTvW7LYnendjjiFGbMm7DlLEUtHRZ0EzrmM6SVxXRcibKZd7Dy6QpNXLu615cJLui6eS/zmxG2pUoNI31ajh+ZybZ61/Lwsq3JylmXHoSu1WkydfHnIEbr1PasaoD//7BzySQzAgMBAAECggEAFZoRehT7nsPKU0ISnX8qXO2ADnK3HGGXREnFwtsEXqnoLOMwIqqnEWg/XQqcvzkeAqoMEpeMazUvBilkahM79pYokKvsq+VAxKrZxzWt7mFdGJwop2jJVM9rTdS/XZCHDCxvH8PtiiXt1/J++zuq9vgCNt91MoCTMaqYgS+NeIDS0UaNQ6AcwFqyY8XUUXe6phCr2NC9iyOeTXE4HhfuoNJd/H8zmVOYkrfzgYLU/uHhfskGFhCDIO/V3yxZy7K7Z74ECOifGNpH/QV7vK4OHI+2DEOAS0E8G2jNGR67OpmbM7Jgw/8k7xl9sB18zS+Eor1BsnIM8MKSR4ss624NEQKBgQDpwHa21ESDfjYBiDh8MhLnNPzIHHozIIimXd4o36nBgGqH8ciblSWg5KPZmL2U3rVucd6TF0qXZlX6FlsGfp6poKiRMyl8Knc3j3KiyAdpyP9k26ifve4YquOkhNMOaVqO5YJpmfVEppsWy2wA2p3USYecAhHc7KDTlz2TLhT80QKBgQDOVG5dosS/4AJQ4AKE5hd5d7qJfo/VeNx6i4MtMJ4IznO6IE2O1oHuUQOr+6n3QvIGhe1J3Tt8+rv7j1Wp3y16dAPxWJblPCYWw+a6wkNY5ByMeaMzvvLqU/WdyEQzAE7yUPBfxMuhZDEp3ndK/PVVqjR6NPDJ+Dhcel9ntMPBwwKBgFa7WBEcj9NueCF3ZuYGOmdZjNW/Y0QnNSzttWnbG4S13lFU0EeSPqUFURqDBwz+2bkCPUC8qqukiBBETUAKqVptRz6hCiqNIzEVY8asi7ufncvRiS7EbVzvw4me0yUMyFIvLIV8X7o6S19Y2VkzxM4o/k1Po0si7cW0318GATmRAoGBAJD4M79ooPLr0tS+QCbef/nhjNgUa70iuU8E/TrgIPmxDRDmp3fH8ezfUUQig+5uRB0fNnUikyyiAziiIh9D5vFV2HtXslYIZ/6w0EnCOo2XYRO2V1wBOy43paih0IFBIzcQdYPkguq3ue9gFtNCXqI8/7gpwFE4LWmUtbnpAW3/AoGAW9ma4+4+QfGOGb9N38IyzHcXiyAkteQMX72Hxb0HK+nz9QwGXObqFvwnJ7IV8aJ0ZAUGDUfTToorNRSnmPdnq4BG5uKisIONp5pe0ZchlhXAEgKZnCgVmrEHgtzv3U8ffOfbNjoTufI/ZZoyl+7Kr1+o32VikquuMxeNpR9T6Fw=" \ No newline at end of file + private_key: "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC8Zfd0RVnpmPuodc0N8XLLI8DWT4hTAyOlwbE5LLiiguG5W0AghvddreO73T51BGK4V05Taxdpv7j7KNl39OUzKA0tpmoLwC4f6II1Op4tY05NnUgOFbno01vE7cN5BWLwVA35dfgQm1jtzXECdTufavYH/qPCzpvd7OTbmdHonMVjanjz+XOfnFowxq8ap3F63ocF4LR3KalsC/cTvW7LYnendjjiFGbMm7DlLEUtHRZ0EzrmM6SVxXRcibKZd7Dy6QpNXLu615cJLui6eS/zmxG2pUoNI31ajh+ZybZ61/Lwsq3JylmXHoSu1WkydfHnIEbr1PasaoD//7BzySQzAgMBAAECggEAFZoRehT7nsPKU0ISnX8qXO2ADnK3HGGXREnFwtsEXqnoLOMwIqqnEWg/XQqcvzkeAqoMEpeMazUvBilkahM79pYokKvsq+VAxKrZxzWt7mFdGJwop2jJVM9rTdS/XZCHDCxvH8PtiiXt1/J++zuq9vgCNt91MoCTMaqYgS+NeIDS0UaNQ6AcwFqyY8XUUXe6phCr2NC9iyOeTXE4HhfuoNJd/H8zmVOYkrfzgYLU/uHhfskGFhCDIO/V3yxZy7K7Z74ECOifGNpH/QV7vK4OHI+2DEOAS0E8G2jNGR67OpmbM7Jgw/8k7xl9sB18zS+Eor1BsnIM8MKSR4ss624NEQKBgQDpwHa21ESDfjYBiDh8MhLnNPzIHHozIIimXd4o36nBgGqH8ciblSWg5KPZmL2U3rVucd6TF0qXZlX6FlsGfp6poKiRMyl8Knc3j3KiyAdpyP9k26ifve4YquOkhNMOaVqO5YJpmfVEppsWy2wA2p3USYecAhHc7KDTlz2TLhT80QKBgQDOVG5dosS/4AJQ4AKE5hd5d7qJfo/VeNx6i4MtMJ4IznO6IE2O1oHuUQOr+6n3QvIGhe1J3Tt8+rv7j1Wp3y16dAPxWJblPCYWw+a6wkNY5ByMeaMzvvLqU/WdyEQzAE7yUPBfxMuhZDEp3ndK/PVVqjR6NPDJ+Dhcel9ntMPBwwKBgFa7WBEcj9NueCF3ZuYGOmdZjNW/Y0QnNSzttWnbG4S13lFU0EeSPqUFURqDBwz+2bkCPUC8qqukiBBETUAKqVptRz6hCiqNIzEVY8asi7ufncvRiS7EbVzvw4me0yUMyFIvLIV8X7o6S19Y2VkzxM4o/k1Po0si7cW0318GATmRAoGBAJD4M79ooPLr0tS+QCbef/nhjNgUa70iuU8E/TrgIPmxDRDmp3fH8ezfUUQig+5uRB0fNnUikyyiAziiIh9D5vFV2HtXslYIZ/6w0EnCOo2XYRO2V1wBOy43paih0IFBIzcQdYPkguq3ue9gFtNCXqI8/7gpwFE4LWmUtbnpAW3/AoGAW9ma4+4+QfGOGb9N38IyzHcXiyAkteQMX72Hxb0HK+nz9QwGXObqFvwnJ7IV8aJ0ZAUGDUfTToorNRSnmPdnq4BG5uKisIONp5pe0ZchlhXAEgKZnCgVmrEHgtzv3U8ffOfbNjoTufI/ZZoyl+7Kr1+o32VikquuMxeNpR9T6Fw=" + +hvyogo: + cooperator_id: "C1252339226041655296" + position_id: "P1252701159697682432" \ No newline at end of file diff --git a/etc/mix/resource/esb_routing_table_config.xml b/etc/mix/resource/esb_routing_table_config.xml index e2c42568..83b1e8a1 100644 --- a/etc/mix/resource/esb_routing_table_config.xml +++ b/etc/mix/resource/esb_routing_table_config.xml @@ -1,7 +1,7 @@ - https://boapi.hvyogo.com/api/worker/agree/state - https://boapi.hvyogo.com/api/v2/hire/worker/findDetails - https://boapi.hvyogo.com/api/distribute/singleDistribute - https://boapi.hvyogo.com/api/v2/hire/worker/update + https://oapi.hvyogo.com/api/worker/agree/state + https://oapi.hvyogo.com/api/v2/hire/worker/findDetails + https://oapi.hvyogo.com/api/distribute/singleDistribute + https://oapi.hvyogo.com/api/v2/hire/worker/update \ No newline at end of file