mirror of
https://github.com/kongyuebin1/dongfeng-pay.git
synced 2024-12-24 19:02:24 +08:00
将boss系统的逻辑移到了gateway系统
This commit is contained in:
parent
7cd2e963ad
commit
2a7be69a37
70
gateway/controllers/gateway/order_controller.go
Normal file
70
gateway/controllers/gateway/order_controller.go
Normal file
@ -0,0 +1,70 @@
|
||||
package gateway
|
||||
|
||||
import (
|
||||
"gateway/conf"
|
||||
"gateway/models/order"
|
||||
"gateway/query"
|
||||
"gateway/service"
|
||||
"github.com/astaxie/beego/logs"
|
||||
"github.com/beego/beego/v2/server/web"
|
||||
)
|
||||
|
||||
type OrderController struct {
|
||||
web.Controller
|
||||
}
|
||||
|
||||
func (c *OrderController) OrderQuery() {
|
||||
bankOrderId := c.GetString("bankOrderId")
|
||||
logs.Debug("获取到boss后台的银行id = " + bankOrderId)
|
||||
|
||||
qy := query.SupplierOrderQueryResult(bankOrderId)
|
||||
|
||||
if qy {
|
||||
c.Ctx.WriteString("success")
|
||||
} else {
|
||||
c.Ctx.WriteString("fail")
|
||||
}
|
||||
c.StopRun()
|
||||
}
|
||||
|
||||
func (c *OrderController) OrderUpdate() {
|
||||
bankOrderId := c.GetString("bankOrderId")
|
||||
solveType := c.GetString("solveType")
|
||||
orderInfo := order.GetOrderByBankOrderId(bankOrderId)
|
||||
flag := false
|
||||
if orderInfo.BankOrderId == "" {
|
||||
logs.Error("该订单不存在,bankOrderId=", bankOrderId)
|
||||
} else if orderInfo.Status != conf.SUCCESS {
|
||||
logs.Notice("该订单没有完成支付,不能进行此操作,bankOrderId = ", bankOrderId)
|
||||
} else {
|
||||
switch solveType {
|
||||
case conf.SUCCESS:
|
||||
flag = service.SolvePaySuccess(bankOrderId, orderInfo.FactAmount, orderInfo.BankTransId)
|
||||
case conf.FAIL:
|
||||
flag = service.SolvePayFail(bankOrderId, orderInfo.BankTransId)
|
||||
case conf.FREEZE_AMOUNT:
|
||||
//将这笔订单进行冻结
|
||||
flag = service.SolveOrderFreeze(bankOrderId)
|
||||
case conf.UNFREEZE_AMOUNT:
|
||||
//将这笔订单金额解冻
|
||||
flag = service.SolveOrderUnfreeze(bankOrderId)
|
||||
case conf.REFUND:
|
||||
if orderInfo.Status == conf.SUCCESS {
|
||||
flag = service.SolveRefund(bankOrderId)
|
||||
}
|
||||
case conf.ORDERROLL:
|
||||
if orderInfo.Status == conf.SUCCESS {
|
||||
flag = service.SolveOrderRoll(bankOrderId)
|
||||
}
|
||||
default:
|
||||
logs.Error("不存在这样的处理类型")
|
||||
}
|
||||
if flag {
|
||||
c.Ctx.WriteString(conf.SUCCESS)
|
||||
} else {
|
||||
c.Ctx.WriteString(conf.FAIL)
|
||||
}
|
||||
}
|
||||
|
||||
c.StopRun()
|
||||
}
|
@ -12,8 +12,12 @@ package gateway
|
||||
import (
|
||||
"fmt"
|
||||
"gateway/conf"
|
||||
"gateway/models/payfor"
|
||||
"gateway/models/road"
|
||||
"gateway/pay_for"
|
||||
"gateway/response"
|
||||
"gateway/supplier/third_party"
|
||||
"github.com/astaxie/beego/logs"
|
||||
"github.com/beego/beego/v2/server/web"
|
||||
"strings"
|
||||
)
|
||||
@ -69,6 +73,45 @@ func (c *PayForGateway) PayForQuery() {
|
||||
_ = c.ServeJSON()
|
||||
}
|
||||
|
||||
/*
|
||||
** 查询上游的代付结果
|
||||
*/
|
||||
func (c *PayForGateway) QuerySupplierPayForResult() {
|
||||
bankOrderId := strings.TrimSpace(c.GetString("bankOrderId"))
|
||||
p := payfor.GetPayForByBankOrderId(bankOrderId)
|
||||
if p.RoadUid == "" {
|
||||
c.Ctx.WriteString("fail")
|
||||
} else {
|
||||
roadInfo := road.GetRoadInfoByRoadUid(p.RoadUid)
|
||||
supplierCode := roadInfo.ProductUid
|
||||
supplier := third_party.GetPaySupplierByCode(supplierCode)
|
||||
res := supplier.PayFor(p)
|
||||
logs.Debug("代付查询结果:", res)
|
||||
c.Ctx.WriteString("success")
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
** 接收boss发送过来的代付手动处理结果
|
||||
*/
|
||||
func (c *PayForGateway) SolvePayForResult() {
|
||||
resultType := strings.TrimSpace(c.GetString("resultType"))
|
||||
bankOrderId := strings.TrimSpace(c.GetString("bankOrderId"))
|
||||
|
||||
p := payfor.GetPayForByBankOrderId(bankOrderId)
|
||||
if p.BankOrderId == "" {
|
||||
c.Ctx.WriteString(conf.FAIL)
|
||||
}
|
||||
|
||||
if resultType == conf.PAYFOR_FAIL {
|
||||
pay_for.PayForFail(p)
|
||||
} else if resultType == conf.PAYFOR_SUCCESS {
|
||||
pay_for.PayForSuccess(p)
|
||||
}
|
||||
|
||||
c.Ctx.WriteString(conf.SUCCESS)
|
||||
}
|
||||
|
||||
/*
|
||||
* 商户查找余额
|
||||
*/
|
||||
|
@ -39,22 +39,6 @@ type MerchantDeployInfo struct {
|
||||
|
||||
const MERCHANT_DEPLOY_INFO = "merchant_deploy_info"
|
||||
|
||||
func InsertMerchantDeployInfo(merchantDeployInfo MerchantDeployInfo) bool {
|
||||
o := orm.NewOrm()
|
||||
_, err := o.Insert(&merchantDeployInfo)
|
||||
if err != nil {
|
||||
logs.Error("insert merchant deploy info fail: ", err)
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func IsExistByUidAndPayType(uid, payType string) bool {
|
||||
o := orm.NewOrm()
|
||||
isEixst := o.QueryTable(MERCHANT_DEPLOY_INFO).Filter("merchant_uid", uid).Filter("pay_type", payType).Exist()
|
||||
return isEixst
|
||||
}
|
||||
|
||||
func GetMerchantDeployByUidAndPayType(uid, payType string) MerchantDeployInfo {
|
||||
o := orm.NewOrm()
|
||||
var merchantDeployInfo MerchantDeployInfo
|
||||
@ -65,15 +49,6 @@ func GetMerchantDeployByUidAndPayType(uid, payType string) MerchantDeployInfo {
|
||||
return merchantDeployInfo
|
||||
}
|
||||
|
||||
func GetMerchantDeployByUid(uid string) (ms []MerchantDeployInfo) {
|
||||
o := orm.NewOrm()
|
||||
_, err := o.QueryTable(MERCHANT_DEPLOY_INFO).Filter("merchant_uid", uid).All(&ms)
|
||||
if err != nil {
|
||||
logs.Error("get merchant deploy by uid fail:", err)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
|
||||
func GetMerchantDeployByHour(hour int) []MerchantDeployInfo {
|
||||
o := orm.NewOrm()
|
||||
var merchantDeployList []MerchantDeployInfo
|
||||
@ -84,52 +59,3 @@ func GetMerchantDeployByHour(hour int) []MerchantDeployInfo {
|
||||
|
||||
return merchantDeployList
|
||||
}
|
||||
func DeleteMerchantDeployByUidAndPayType(uid, payType string) bool {
|
||||
o := orm.NewOrm()
|
||||
_, err := o.QueryTable(MERCHANT_DEPLOY_INFO).Filter("merchant_uid", uid).Filter("pay_type", payType).Delete()
|
||||
if err != nil {
|
||||
logs.Error("delete merchant deploy by uid and payType fail: ", err)
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func UpdateMerchantDeploy(merchantDeploy MerchantDeployInfo) bool {
|
||||
o := orm.NewOrm()
|
||||
_, err := o.Update(&merchantDeploy)
|
||||
if err != nil {
|
||||
logs.Error("update merchant deploy fail: ", err)
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func GetMerchantDeployLenByMap(params map[string]string) int {
|
||||
o := orm.NewOrm()
|
||||
qs := o.QueryTable(MERCHANT_DEPLOY_INFO)
|
||||
for k, v := range params {
|
||||
if len(v) > 0 {
|
||||
qs = qs.Filter(k, v)
|
||||
}
|
||||
}
|
||||
cnt, err := qs.Count()
|
||||
if err != nil {
|
||||
logs.Error("get merchant deploy len by map fail: ", err)
|
||||
}
|
||||
return int(cnt)
|
||||
}
|
||||
|
||||
func GetMerchantDeployListByMap(params map[string]string, displayCount, offset int) (md []MerchantDeployInfo) {
|
||||
o := orm.NewOrm()
|
||||
qs := o.QueryTable(MERCHANT_DEPLOY_INFO)
|
||||
for k, v := range params {
|
||||
if len(v) > 0 {
|
||||
qs = qs.Filter(k, v)
|
||||
}
|
||||
}
|
||||
_, err := qs.Limit(displayCount, offset).OrderBy("-update_time").All(&md)
|
||||
if err != nil {
|
||||
logs.Error("get merchant deploy list by map fail: ", err)
|
||||
}
|
||||
return md
|
||||
}
|
||||
|
@ -32,23 +32,29 @@ const (
|
||||
LimitTimes = 5 //最多查询5次
|
||||
)
|
||||
|
||||
func SupplierOrderQueryResult(bankOrderId string) bool {
|
||||
orderInfo := order.GetOrderByBankOrderId(bankOrderId)
|
||||
if orderInfo.BankOrderId == "" || len(orderInfo.BankOrderId) == 0 {
|
||||
logs.Error("不存在这样的订单,订单查询结束")
|
||||
return false
|
||||
}
|
||||
if orderInfo.Status != "" && orderInfo.Status != "wait" {
|
||||
logs.Error(fmt.Sprintf("该订单=%s,已经处理完毕,", bankOrderId))
|
||||
return false
|
||||
}
|
||||
supplierCode := orderInfo.PayProductCode
|
||||
supplier := third_party.GetPaySupplierByCode(supplierCode)
|
||||
flag := supplier.PayQuery(orderInfo)
|
||||
return flag
|
||||
}
|
||||
|
||||
/*
|
||||
** 该接口是查询上游的订单
|
||||
*/
|
||||
func solveSupplierOrderQuery(task OrderQueryTask) {
|
||||
bankOrderId := task.BankOrderId
|
||||
orderInfo := order.GetOrderByBankOrderId(bankOrderId)
|
||||
if orderInfo.BankOrderId == "" || len(orderInfo.BankOrderId) == 0 {
|
||||
logs.Error("不存在这样的订单,订单查询结束")
|
||||
return
|
||||
}
|
||||
if orderInfo.Status != "" && orderInfo.Status != "wait" {
|
||||
logs.Error(fmt.Sprintf("该订单=%s,已经处理完毕,", bankOrderId))
|
||||
return
|
||||
}
|
||||
supplierCode := orderInfo.PayProductCode
|
||||
supplier := third_party.GetPaySupplierByCode(supplierCode)
|
||||
flag := supplier.PayQuery(orderInfo)
|
||||
|
||||
flag := SupplierOrderQueryResult(bankOrderId)
|
||||
if flag {
|
||||
logs.Info("订单查询成功, bankOrderId:", bankOrderId)
|
||||
} else {
|
||||
|
@ -16,4 +16,9 @@ func init() {
|
||||
web.Router("/gateway/balance", &gateway.PayForGateway{}, "*:Balance")
|
||||
// 接收银行回调
|
||||
web.Router("/daili/notify", &third_party.DaiLiImpl{}, "*:PayNotify")
|
||||
|
||||
web.Router("/gateway/supplier/order/query", &gateway.OrderController{}, "*:OrderQuery")
|
||||
web.Router("/gateway/update/order", &gateway.OrderController{}, "*:OrderUpdate")
|
||||
web.Router("/gateway/supplier/payfor/query", &gateway.PayForGateway{}, "QuerySupplierPayForResult")
|
||||
web.Router("/solve/payfor/result", &gateway.PayForGateway{}, "SolvePayForResult")
|
||||
}
|
||||
|
@ -152,7 +152,6 @@ func SolvePayFail(bankOrderId, transId string) bool {
|
||||
err := o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error {
|
||||
|
||||
var orderTmp order.OrderInfo
|
||||
//bankOrderId := orderInfo.BankOrderId
|
||||
if err := txOrm.Raw("select * from order_info where bank_order_id = ?", bankOrderId).QueryRow(&orderTmp); err != nil || orderTmp.BankOrderId == "" {
|
||||
return err
|
||||
}
|
||||
|
@ -95,15 +95,15 @@ func settle(orderSettle order.OrderSettleInfo, orderProfit order.OrderProfitInfo
|
||||
}
|
||||
} else {
|
||||
merchantLoad := new(merchant.MerchantLoadInfo)
|
||||
if err := txOrm.Raw("select * from merchant_load_info where merchant_uid=? and road_uid=? and load_date=? for update").
|
||||
if err := txOrm.Raw("select * from merchant_load_info where merchant_uid=? and road_uid=? and load_date=? for update", orderSettle.MerchantUid, orderSettle.RoadUid, date).
|
||||
QueryRow(merchantLoad); err != nil || merchantLoad.UpdateTime == "" {
|
||||
logs.Error(fmt.Sprintf("结算过程,select merchant load info失败,错误信息:#{err}"))
|
||||
logs.Error(fmt.Sprintf("结算过程,select merchant load info失败,错误信息:%s", err))
|
||||
return err
|
||||
} else {
|
||||
merchantLoad.UpdateTime = utils.GetBasicDateTime()
|
||||
merchantLoad.LoadAmount += loadAmount
|
||||
if _, err := txOrm.Update(merchantLoad); err != nil {
|
||||
logs.Error(fmt.Sprintf("结算过程,update merchant load info失败,失败信息:#{err}"))
|
||||
logs.Error(fmt.Sprintf("结算过程,update merchant load info失败,失败信息:%s", err))
|
||||
return err
|
||||
}
|
||||
}
|
||||
@ -148,14 +148,15 @@ func MerchantLoadSolve() {
|
||||
params := make(map[string]string)
|
||||
params["status"] = conf.NO
|
||||
params["merchant_uid"] = merchantDeploy.MerchantUid
|
||||
params["load_date"] = loadDate
|
||||
params["load_date__lte"] = loadDate
|
||||
|
||||
merchantLoadList := merchant.GetMerchantLoadInfoByMap(params)
|
||||
for _, merchantLoad := range merchantLoadList {
|
||||
if MerchantAbleAmount(merchantLoad) {
|
||||
logs.Info(fmt.Sprintf("商户uid= %s,押款金额=%f,押款通道= %s, 解款成功", merchantLoad.MerchantUid, merchantLoad.LoadAmount, merchantLoad.RoadUid))
|
||||
} else {
|
||||
logs.Error(fmt.Sprintf("商户uid=%s,押款金额=%f,押款通道=%s, 解款失败", merchantLoad.MerchantUid, merchantLoad.LoadAmount, merchantLoad.RoadUid))
|
||||
logs.Error(fmt.Sprintf("商户uid=%s,押款金额=%f,押款通道=%s, 解款失败",
|
||||
merchantLoad.MerchantUid, merchantLoad.LoadAmount, merchantLoad.RoadUid))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
16
gateway/supplier/third_party/daili.go
vendored
16
gateway/supplier/third_party/daili.go
vendored
@ -170,6 +170,22 @@ func (c *DaiLiImpl) PayNotify() {
|
||||
}
|
||||
|
||||
func (c *DaiLiImpl) PayQuery(orderInfo order.OrderInfo) bool {
|
||||
|
||||
tradeStatus := "SUCCESS"
|
||||
trxNo := orderInfo.BankOrderId
|
||||
factAmount := 100.00
|
||||
if tradeStatus == "SUCCESS" {
|
||||
//调用支付成功的接口,做加款更新操作,需要把实际支付金额传入
|
||||
if !service.SolvePaySuccess(orderInfo.BankOrderId, factAmount, trxNo) {
|
||||
return false
|
||||
}
|
||||
} else if tradeStatus == "FAILED" {
|
||||
if !service.SolvePayFail(orderInfo.BankOrderId, "") {
|
||||
return false
|
||||
}
|
||||
} else {
|
||||
logs.Info("订单状态处于:" + tradeStatus + ";bankOrderId:" + orderInfo.BankOrderId)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user