@@ -0,0 +1,40 @@ | |||||
package db | |||||
import ( | |||||
"applet/app/db" | |||||
"applet/app/flexible_employment/db/model" | |||||
"applet/app/utils/logx" | |||||
"xorm.io/xorm" | |||||
) | |||||
type NewFlexibleEmploymentPuiaoBasicDb struct { | |||||
Db *xorm.Engine `json:"model"` | |||||
} | |||||
func (flexibleEmploymentPupiaoBasicDb *NewFlexibleEmploymentPuiaoBasicDb) Set() { // set方法 | |||||
flexibleEmploymentPupiaoBasicDb.Db = db.Db | |||||
} | |||||
func (flexibleEmploymentPupiaoBasicDb *NewFlexibleEmploymentPuiaoBasicDb) GetBasic(masterId string) (m *model.NewFlexibleEmploymentPupiaoBasic, err error) { | |||||
m = new(model.NewFlexibleEmploymentPupiaoBasic) | |||||
has, err := flexibleEmploymentPupiaoBasicDb.Db.Where("master_id = ?", masterId).Get(m) | |||||
if err != nil { | |||||
return nil, logx.Error(err) | |||||
} | |||||
if has == false { | |||||
return nil, nil | |||||
} | |||||
return m, nil | |||||
} | |||||
func (flexibleEmploymentPupiaoBasicDb *NewFlexibleEmploymentPuiaoBasicDb) GetBasicByAppId(appKey string) (m *model.NewFlexibleEmploymentPupiaoBasic, err error) { | |||||
m = new(model.NewFlexibleEmploymentPupiaoBasic) | |||||
has, err := flexibleEmploymentPupiaoBasicDb.Db.Where("app_key = ?", appKey).Get(m) | |||||
if err != nil { | |||||
return nil, logx.Error(err) | |||||
} | |||||
if has == false { | |||||
return nil, nil | |||||
} | |||||
return m, nil | |||||
} |
@@ -0,0 +1,44 @@ | |||||
package db | |||||
import ( | |||||
commDb "applet/app/db" | |||||
"applet/app/flexible_employment/db/model" | |||||
"applet/app/utils/logx" | |||||
"xorm.io/xorm" | |||||
) | |||||
type NewFlexibleEmploymentPupiaoOrdDb struct { | |||||
Db *xorm.Engine `json:"model"` | |||||
} | |||||
func (NewFlexibleEmploymentPupiaoOrdDb *NewFlexibleEmploymentPupiaoOrdDb) Set(masterId string) { // set方法 | |||||
NewFlexibleEmploymentPupiaoOrdDb.Db = commDb.DBs[masterId] | |||||
} | |||||
func (NewFlexibleEmploymentPupiaoOrdDb *NewFlexibleEmploymentPupiaoOrdDb) Get(outBatchNo string) (m *model.NewFlexibleEmploymentPupiaoOrd, err error) { | |||||
m = new(model.NewFlexibleEmploymentPupiaoOrd) | |||||
has, err := NewFlexibleEmploymentPupiaoOrdDb.Db.Where("out_batch_no = ?", outBatchNo).Get(m) | |||||
if err != nil { | |||||
return nil, logx.Error(err) | |||||
} | |||||
if has == false { | |||||
return nil, nil | |||||
} | |||||
return m, nil | |||||
} | |||||
func (NewFlexibleEmploymentPupiaoOrdDb *NewFlexibleEmploymentPupiaoOrdDb) Update(id interface{}, m *model.NewFlexibleEmploymentPupiaoOrd, forceColums ...string) (int64, error) { | |||||
var ( | |||||
affected int64 | |||||
err error | |||||
) | |||||
if forceColums != nil { | |||||
affected, err = NewFlexibleEmploymentPupiaoOrdDb.Db.Where("id=?", id).Cols(forceColums...).Update(m) | |||||
} else { | |||||
affected, err = NewFlexibleEmploymentPupiaoOrdDb.Db.Where("id=?", id).Update(m) | |||||
} | |||||
if err != nil { | |||||
return 0, err | |||||
} | |||||
return affected, nil | |||||
} |
@@ -0,0 +1,13 @@ | |||||
package model | |||||
type NewFlexibleEmploymentPupiaoBasic struct { | |||||
Id int `json:"id" xorm:"not null pk autoincr INT(11)"` | |||||
MasterId int `json:"master_id" xorm:"not null default 0 comment('站长ID') INT(11)"` | |||||
AppKey string `json:"app_key" xorm:"not null default '' comment('Appkey') VARCHAR(255)"` | |||||
SecretKey string `json:"secret_key" xorm:"not null default '' comment('Serctkey') VARCHAR(255)"` | |||||
MerchantId string `json:"merchant_id" xorm:"not null default '' comment('商户id') VARCHAR(255)"` | |||||
AgreementId string `json:"agreement_id" xorm:"not null default '' comment('协议id') VARCHAR(255)"` | |||||
CallbackUrl string `json:"callback_url" xorm:"not null default '' comment('回调地址') VARCHAR(255)"` | |||||
CreateAt string `json:"create_at" xorm:"not null default 'CURRENT_TIMESTAMP' comment('创建时间') DATETIME"` | |||||
UpdateAt string `json:"update_at" xorm:"not null default 'CURRENT_TIMESTAMP' comment('更新时间') DATETIME"` | |||||
} |
@@ -0,0 +1,19 @@ | |||||
package model | |||||
type NewFlexibleEmploymentPupiaoOrd struct { | |||||
Id int `json:"id" xorm:"not null pk autoincr INT(11)"` | |||||
Uid int `json:"uid" xorm:"not null default 0 comment('用户id') INT(11)"` | |||||
WithdrawApplyId int64 `json:"withdraw_apply_id" xorm:"not null default 0 comment('提现记录ID') BIGINT(20)"` | |||||
OutBatchNo string `json:"out_batch_no" xorm:"not null default '' comment('外部商户批次订单号') VARCHAR(255)"` | |||||
PlatformBatchNo string `json:"platform_batch_no" xorm:"not null default '' comment('平台批次订单号') VARCHAR(255)"` | |||||
TotalAmount string `json:"total_amount" xorm:"not null default 0.00 comment('总金额') DECIMAL(8,2)"` | |||||
BatchStatus int `json:"batch_status" xorm:"not null default 0 comment('发放状态(0:待发放 1:发放成功 2:发放取消)') TINYINT(1)"` | |||||
SettleType string `json:"settle_type" xorm:"not null default '' comment('结算方式(CARD:银行卡,ALIPAY:支付宝)') CHAR(50)"` | |||||
PayeeNo string `json:"payee_no" xorm:"not null default '' comment('收款人账户') CHAR(50)"` | |||||
PayeePhone string `json:"payee_phone" xorm:"not null default '' comment('收款人手机号') CHAR(50)"` | |||||
PayeeName string `json:"payee_name" xorm:"not null default '' comment('收款人姓名') CHAR(50)"` | |||||
PayeeIdCard string `json:"payee_id_card" xorm:"not null default '' comment('收款人身份证号') CHAR(50)"` | |||||
CallbackData string `json:"callback_data" xorm:"not null comment('回调通知') TEXT"` | |||||
CreateAt string `json:"create_at" xorm:"not null default 'CURRENT_TIMESTAMP' comment('创建时间') DATETIME"` | |||||
UpdateAt string `json:"update_at" xorm:"not null default 'CURRENT_TIMESTAMP' comment('更新时间') DATETIME"` | |||||
} |
@@ -0,0 +1,13 @@ | |||||
package model | |||||
type NewFlexibleEmploymentPupiaoUserInfo struct { | |||||
Id int `json:"id" xorm:"not null pk autoincr INT(11)"` | |||||
Uid int `json:"uid" xorm:"not null default 0 INT(11)"` | |||||
Name string `json:"name" xorm:"not null default '' comment('姓名') VARCHAR(255)"` | |||||
Mobile string `json:"mobile" xorm:"not null default '' comment('手机号') VARCHAR(255)"` | |||||
Identity string `json:"identity" xorm:"not null default '' comment('证件号码') VARCHAR(255)"` | |||||
BankAccountNo string `json:"bank_account_no" xorm:"not null default '' comment('默认银行账号') VARCHAR(255)"` | |||||
AlipayAccountNo string `json:"alipay_account_no" xorm:"not null default '' comment('默认支付宝账号') VARCHAR(255)"` | |||||
CreateAt string `json:"create_at" xorm:"not null default 'CURRENT_TIMESTAMP' comment('创建时间') DATETIME"` | |||||
UpdateAt string `json:"update_at" xorm:"not null default 'CURRENT_TIMESTAMP' comment('更新时间') DATETIME"` | |||||
} |
@@ -0,0 +1,16 @@ | |||||
package enum | |||||
type NewPuPiaoMethodName string | |||||
const ( | |||||
MerchantExportApiPayPayApi = "/merchant/exportApi/pay/payApi" | |||||
) | |||||
func (gt NewPuPiaoMethodName) String() string { | |||||
switch gt { | |||||
case MerchantExportApiPayPayApi: | |||||
return "委托代征佣金发放API" | |||||
default: | |||||
return "未知" | |||||
} | |||||
} |
@@ -0,0 +1,178 @@ | |||||
package flexible_employment | |||||
import ( | |||||
"applet/app/cfg" | |||||
"applet/app/utils" | |||||
"crypto/md5" | |||||
"encoding/hex" | |||||
"encoding/json" | |||||
"fmt" | |||||
"io/ioutil" | |||||
"net/http" | |||||
"net/url" | |||||
"sort" | |||||
"strings" | |||||
"time" | |||||
) | |||||
type PuPiaoService struct { | |||||
BaseURL string | |||||
MerchantNo string | |||||
AgreementId string | |||||
AppKey string | |||||
SecretKey string | |||||
} | |||||
const NewUrlForPrd = "https://admin.linglong.net.cn" | |||||
const NewUrlForDev = "http://saas-merchant-test.youjiayun.com" | |||||
func NewNewPuPiao(appKey, secretKey, merchantNo, agreementId string) *PuPiaoService { | |||||
var baseURL string | |||||
if cfg.Prd { | |||||
baseURL = NewUrlForPrd | |||||
} else { | |||||
baseURL = NewUrlForDev | |||||
} | |||||
return &PuPiaoService{ | |||||
BaseURL: baseURL, | |||||
MerchantNo: merchantNo, | |||||
AgreementId: agreementId, | |||||
AppKey: appKey, | |||||
SecretKey: secretKey, | |||||
} | |||||
} | |||||
func (as *PuPiaoService) Encrypt(data map[string]interface{}) string { | |||||
utils.FilePutContents("new_pupiao_encrypt", utils.SerializeStr(data)) | |||||
// 排序键 | |||||
keys := make([]string, 0, len(data)) | |||||
for k := range data { | |||||
keys = append(keys, k) | |||||
} | |||||
sort.Strings(keys) | |||||
var str = as.SecretKey | |||||
for _, k := range keys { | |||||
v := data[k] | |||||
if k == "payDetailList" { | |||||
strByte, _ := json.Marshal(v) | |||||
var tmpMap []map[string]string | |||||
json.Unmarshal(strByte, &tmpMap) | |||||
str += fmt.Sprintf("[{\"detailOrderNo\":\"%s\",\"amount\":\"%s\",\"phone\":\"%s\",\"idCard\":\"%s\",\"accountNo\":\"%s\",\"userName\":\"%s\"}]", | |||||
tmpMap[0]["detailOrderNo"], | |||||
tmpMap[0]["amount"], | |||||
tmpMap[0]["phone"], | |||||
tmpMap[0]["idCard"], | |||||
tmpMap[0]["accountNo"], | |||||
tmpMap[0]["userName"], | |||||
) | |||||
} else { | |||||
toString, _ := utils.InterfaceToString(v) | |||||
str += toString | |||||
} | |||||
} | |||||
return utils.MD5ToLower32(str) | |||||
} | |||||
func (as *PuPiaoService) CurlPost(url string, data map[string]interface{}) (map[string]interface{}, error) { | |||||
sign := as.Encrypt(data) | |||||
jsonData, err := json.Marshal(data) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
req, err := http.NewRequest("POST", url, strings.NewReader(string(jsonData))) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
req.Header.Set("Content-Type", "application/json; charset=utf-8") | |||||
req.Header.Set("orderId", fmt.Sprintf("%d%d", time.Now().Unix(), time.Now().Nanosecond())) | |||||
req.Header.Set("merchantNo", as.MerchantNo) | |||||
req.Header.Set("agreementId", as.AgreementId) | |||||
req.Header.Set("sign", sign) | |||||
req.Header.Set("appKey", as.AppKey) | |||||
req.Header.Set("requireTime", time.Now().Format("2006-01-02 15:04:05")) | |||||
client := &http.Client{} | |||||
resp, err := client.Do(req) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
defer resp.Body.Close() | |||||
body, err := ioutil.ReadAll(resp.Body) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
var result map[string]interface{} | |||||
err = json.Unmarshal(body, &result) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
return result, nil | |||||
} | |||||
func (as *PuPiaoService) EncryptGet(data url.Values) string { | |||||
// 将 data 转换为 sorted keys 字符串 | |||||
var keys []string | |||||
for k := range data { | |||||
keys = append(keys, k) | |||||
} | |||||
sort.Strings(keys) | |||||
var str strings.Builder | |||||
str.WriteString(as.SecretKey) | |||||
for _, k := range keys { | |||||
values := data[k] | |||||
// 如果 key 有多个值,这里简单处理为只取第一个值 | |||||
if len(values) > 0 { | |||||
str.WriteString(values[0]) | |||||
} | |||||
} | |||||
hasher := md5.New() | |||||
hasher.Write([]byte(str.String())) | |||||
return hex.EncodeToString(hasher.Sum(nil)) | |||||
} | |||||
func (as *PuPiaoService) CurlGet(uri string, data url.Values) (map[string]interface{}, error) { | |||||
sign := as.EncryptGet(data) | |||||
// 附加查询参数到 URL | |||||
query := url.Values{} | |||||
for k, v := range data { | |||||
query.Add(k, v[0]) // 假设每个 key 只有一个值 | |||||
} | |||||
query.Add("sign", sign) | |||||
fullURL := uri + "?" + query.Encode() | |||||
req, err := http.NewRequest("GET", fullURL, nil) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
req.Header.Set("orderId", fmt.Sprintf("%d", time.Now().Unix())) | |||||
req.Header.Set("merchantNo", as.MerchantNo) | |||||
req.Header.Set("agreementId", as.AgreementId) | |||||
req.Header.Set("appKey", as.AppKey) | |||||
req.Header.Set("requireTime", time.Now().Format("2006-01-02 15:04:05")) | |||||
client := &http.Client{} | |||||
resp, err := client.Do(req) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
defer resp.Body.Close() | |||||
body, err := ioutil.ReadAll(resp.Body) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
var result map[string]interface{} | |||||
err = json.Unmarshal(body, &result) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
return result, nil | |||||
} |
@@ -100,6 +100,7 @@ func initConsumes() { | |||||
jobs[consumeMd.WithdrawConsumeFunName] = WithdrawConsume | jobs[consumeMd.WithdrawConsumeFunName] = WithdrawConsume | ||||
jobs[consumeMd.FlexibleEmploymentWithdrawForGongMaoConsumeFunName] = FlexibleEmploymentWithdrawForGongMaoConsume | jobs[consumeMd.FlexibleEmploymentWithdrawForGongMaoConsumeFunName] = FlexibleEmploymentWithdrawForGongMaoConsume | ||||
jobs[consumeMd.FlexibleEmploymentWithdrawForPupiaoConsumeFunName] = FlexibleEmploymentWithdrawForPupiaoConsume | jobs[consumeMd.FlexibleEmploymentWithdrawForPupiaoConsumeFunName] = FlexibleEmploymentWithdrawForPupiaoConsume | ||||
jobs[consumeMd.NewFlexibleEmploymentWithdrawForPupiaoConsumeFunName] = NewFlexibleEmploymentWithdrawForPupiaoConsume | |||||
jobs[consumeMd.ServiceAwardDividendRelationConsumeFunName] = ServiceAwardDividendRelationConsume | jobs[consumeMd.ServiceAwardDividendRelationConsumeFunName] = ServiceAwardDividendRelationConsume | ||||
//jobs[consumeMd.ZhiosMallGreenCoinConsumeFunName] = ZhiosMallGreenCoinConsume //绿色双链积分 | //jobs[consumeMd.ZhiosMallGreenCoinConsumeFunName] = ZhiosMallGreenCoinConsume //绿色双链积分 | ||||
@@ -596,6 +596,15 @@ var RabbitMqQueueKeyList = []*MqQueue{ | |||||
BindKey: "", | BindKey: "", | ||||
ConsumeFunName: "FlexibleEmploymentWithdrawForPupiaoConsume", | ConsumeFunName: "FlexibleEmploymentWithdrawForPupiaoConsume", | ||||
}, | }, | ||||
{ | |||||
ExchangeName: "zhios.app.user.withdraw.apply.flexible.employment.exchange", | |||||
Name: "zhios_app_user_withdraw_apply_new_pupiao_queue", | |||||
Type: DirectQueueType, | |||||
IsPersistent: false, | |||||
RoutKey: "new_pupiao", | |||||
BindKey: "", | |||||
ConsumeFunName: "NewFlexibleEmploymentWithdrawForPupiaoConsume", | |||||
}, | |||||
{ | { | ||||
ExchangeName: "installment.payment", | ExchangeName: "installment.payment", | ||||
Name: "zhios_installment_payment_auto_repaid", | Name: "zhios_installment_payment_auto_repaid", | ||||
@@ -679,6 +688,7 @@ const ( | |||||
WithdrawConsumeFunName = "WithdrawConsume" | WithdrawConsumeFunName = "WithdrawConsume" | ||||
FlexibleEmploymentWithdrawForGongMaoConsumeFunName = "FlexibleEmploymentWithdrawForGongMaoConsume" | FlexibleEmploymentWithdrawForGongMaoConsumeFunName = "FlexibleEmploymentWithdrawForGongMaoConsume" | ||||
FlexibleEmploymentWithdrawForPupiaoConsumeFunName = "FlexibleEmploymentWithdrawForPupiaoConsume" | FlexibleEmploymentWithdrawForPupiaoConsumeFunName = "FlexibleEmploymentWithdrawForPupiaoConsume" | ||||
NewFlexibleEmploymentWithdrawForPupiaoConsumeFunName = "NewFlexibleEmploymentWithdrawForPupiaoConsume" | |||||
ZhiosTaskTotal = "zhiosTaskTotal" | ZhiosTaskTotal = "zhiosTaskTotal" | ||||
ZhiosUserProfileInviteCode = "ZhiosUserProfileInviteCode" | ZhiosUserProfileInviteCode = "ZhiosUserProfileInviteCode" | ||||
ZhiosAutoUnFreeze = "ZhiosAutoUnFreeze" | ZhiosAutoUnFreeze = "ZhiosAutoUnFreeze" | ||||
@@ -0,0 +1,184 @@ | |||||
package consume | |||||
import ( | |||||
"applet/app/cfg" | |||||
"applet/app/db" | |||||
db2 "applet/app/flexible_employment/db" | |||||
"applet/app/flexible_employment/enum" | |||||
"applet/app/flexible_employment/svc" | |||||
"applet/app/lib/flexible_employment" | |||||
"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/one_circles" | |||||
"encoding/json" | |||||
"errors" | |||||
"fmt" | |||||
"github.com/streadway/amqp" | |||||
"time" | |||||
) | |||||
func NewFlexibleEmploymentWithdrawForPupiaoConsume(queue md.MqQueue) { | |||||
fmt.Println(">>>>>>>>>>>>NewFlexibleEmploymentWithdrawForPupiaoConsume>>>>>>>>>>>>") | |||||
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) | |||||
one_circles.Init(cfg.RedisAddr) | |||||
var res amqp.Delivery | |||||
var ok bool | |||||
for { | |||||
res, ok = <-delivery | |||||
if ok == true { | |||||
err = handleNewFlexibleEmploymentWithdrawForPupiaoConsume(res.Body) | |||||
fmt.Println("err ::: ", err) | |||||
if err != nil { | |||||
fmt.Println("NewFlexibleEmploymentWithdrawForPupiaoConsume_ERR:::::", err.Error()) | |||||
//_ = res.Reject(true) | |||||
_ = res.Reject(false) | |||||
var msg interface{} | |||||
json.Unmarshal(res.Body, &msg) | |||||
if err.Error() == "Connection timed out" { | |||||
//TODO::重新推回队列末尾,避免造成队列堵塞 | |||||
ch.Publish(queue.ExchangeName, msg, queue.RoutKey) | |||||
} else { | |||||
//TODO::推入新的队列中备份 | |||||
utils.FilePutContents("NewFlexibleEmploymentWithdrawForPupiaoConsume_ERR", utils.SerializeStr(err.Error())) | |||||
ch.Publish("zhios.app.user.withdraw.apply.exception.exchange", msg, "new_pupiao") | |||||
} | |||||
} else { | |||||
err = res.Ack(true) | |||||
} | |||||
} else { | |||||
panic(errors.New("error getting message")) | |||||
} | |||||
} | |||||
fmt.Println("get msg done") | |||||
} | |||||
func handleNewFlexibleEmploymentWithdrawForPupiaoConsume(msgData []byte) error { | |||||
var ms string | |||||
err := json.Unmarshal(msgData, &ms) | |||||
if err != nil { | |||||
return err | |||||
} | |||||
time.Sleep(time.Microsecond * 200) // 等待200毫秒 | |||||
//1、解析mq中queue的数据结构体 | |||||
var msg struct { | |||||
Uid string `json:"uid"` | |||||
Nickname string `json:"nickname"` | |||||
MasterId string `json:"master_id"` | |||||
AppName string `json:"app_name"` | |||||
ApplyOrder string `json:"apply_order"` | |||||
ActualAmount string `json:"actual_amount"` | |||||
Oid string `json:"oid"` | |||||
MobCfg interface{} `json:"mob_cfg"` | |||||
} | |||||
err = json.Unmarshal([]byte(ms), &msg) | |||||
if err != nil { | |||||
return err | |||||
} | |||||
fmt.Println("pupiao_message:::::::::::>>>>>>>>>") | |||||
fmt.Println(msg) | |||||
if db.DBs[msg.MasterId] == nil { | |||||
return nil | |||||
} | |||||
engine := db.DBs[msg.MasterId] | |||||
//1、查找对应记录 | |||||
flexibleEmploymentPupiaoOrdDb := db2.NewFlexibleEmploymentPupiaoOrdDb{} | |||||
flexibleEmploymentPupiaoOrdDb.Set(msg.MasterId) | |||||
flexibleEmploymentPupiaoOrd, err := flexibleEmploymentPupiaoOrdDb.Get(msg.Oid) | |||||
if err != nil { | |||||
return err | |||||
} | |||||
if flexibleEmploymentPupiaoOrd == nil { | |||||
return errors.New("未查询到对应订单记录") | |||||
} | |||||
flexibleEmploymentPuiaoBasicDb := db2.NewFlexibleEmploymentPuiaoBasicDb{} | |||||
flexibleEmploymentPuiaoBasicDb.Set() | |||||
basic, err := flexibleEmploymentPuiaoBasicDb.GetBasic(msg.MasterId) | |||||
if err != nil { | |||||
return err | |||||
} | |||||
//2、发起制单 | |||||
puPiao := flexible_employment.NewNewPuPiao(basic.AppKey, basic.SecretKey, basic.MerchantId, basic.AgreementId) | |||||
var userAESData = []map[string]string{ | |||||
{ | |||||
"detailOrderNo": "o_" + utils.Int64ToStr(flexibleEmploymentPupiaoOrd.WithdrawApplyId), | |||||
"amount": flexibleEmploymentPupiaoOrd.TotalAmount, | |||||
"phone": flexibleEmploymentPupiaoOrd.PayeePhone, | |||||
"idCard": flexibleEmploymentPupiaoOrd.PayeeIdCard, | |||||
"accountNo": flexibleEmploymentPupiaoOrd.PayeeNo, | |||||
"userName": flexibleEmploymentPupiaoOrd.PayeeName, | |||||
}, | |||||
} | |||||
var bankType = "1" //银行卡 | |||||
var payMethod = "1" //银行卡 | |||||
if flexibleEmploymentPupiaoOrd.SettleType == "ALIPAY" { | |||||
bankType = "3" | |||||
payMethod = "2" | |||||
} | |||||
result, err := puPiao.CurlPost(enum.OpenApiPaymentReceiveOrder, map[string]interface{}{ | |||||
"bizOrderNo": flexibleEmploymentPupiaoOrd.OutBatchNo, | |||||
"totalCount": "1", | |||||
"totalAmount": flexibleEmploymentPupiaoOrd.TotalAmount, | |||||
"bankType": bankType, //打款通道 1银行卡 3支付宝&安全发 6微信或微工卡 | |||||
"payMethod": payMethod, //收款方式 1银行卡 2支付宝 6微信 | |||||
"payDetailList": userAESData, | |||||
"callbackUrl": basic.CallbackUrl, | |||||
}) | |||||
if err != nil { | |||||
return err | |||||
} | |||||
var response struct { | |||||
Code int `json:"code"` | |||||
Msg string `json:"msg"` | |||||
Data struct { | |||||
PlatformOrderNo string `json:"platformOrderNo"` | |||||
BizOrderNo string `json:"bizOrderNo"` | |||||
} `json:"data"` | |||||
} | |||||
if err = json.Unmarshal(utils.Serialize(result), &response); err != nil { | |||||
return err | |||||
} | |||||
if response.Code != 200 { | |||||
flexibleEmploymentPupiaoOrd.BatchStatus = 3 | |||||
updateAck, err := flexibleEmploymentPupiaoOrdDb.Update(flexibleEmploymentPupiaoOrd.Id, flexibleEmploymentPupiaoOrd, "batch_status") | |||||
if err != nil { | |||||
return err | |||||
} | |||||
if updateAck <= 0 { | |||||
return errors.New("更新 new_flexible_employment_pupiao_ord 状态失败") | |||||
} | |||||
//TODO::制单失败,将处理提现失败状态 | |||||
finWithdrawApply, err := db.UserWithDrawApplyByUIDById(engine, utils.Int64ToStr(flexibleEmploymentPupiaoOrd.WithdrawApplyId)) | |||||
if err != nil { | |||||
return err | |||||
} | |||||
session := engine.NewSession() | |||||
defer session.Close() | |||||
session.Begin() | |||||
err = svc.DealFailResultForPuPiao(session, finWithdrawApply, msg.MasterId, response.Msg) | |||||
if err != nil { | |||||
_ = session.Rollback() | |||||
return err | |||||
} | |||||
return session.Commit() | |||||
} | |||||
return nil | |||||
} |