Files
kami_gateway/internal/controllers/gateway/order_controller.go
2024-09-03 21:52:44 +08:00

155 lines
3.6 KiB
Go

package gateway
import (
"fmt"
"gateway/internal/config"
"gateway/internal/models/merchant"
"gateway/internal/models/order"
"gateway/internal/models/response"
"gateway/internal/schema/query"
"gateway/internal/service"
"gateway/internal/utils"
"strconv"
"strings"
"github.com/astaxie/beego/logs"
"github.com/beego/beego/v2/server/web"
"github.com/bytedance/sonic"
)
type OrderController struct {
web.Controller
}
func (c *OrderController) OrderQuery() {
bankOrderId := c.GetString("bankOrderId")
logs.Debug(fmt.Sprintf("获取到boss后台的银行id = %s", bankOrderId))
qy := query.SupplierOrderQueryResult(bankOrderId)
c.Ctx.WriteString(qy)
return
}
func (c *OrderController) OrderUpdate() {
bankOrderId := c.GetString("bankOrderId")
solveType := c.GetString("solveType")
orderInfo := order.GetOrderByBankOrderId(bankOrderId)
orderInfo.Operator = c.GetString("operator")
flag := false
if orderInfo.BankOrderId == "" {
logs.Error("该订单不存在,bankOrderId=", bankOrderId)
} else {
switch solveType {
case config.SUCCESS:
flag = service.SolvePaySuccess(bankOrderId, orderInfo.FactAmount, orderInfo.BankTransId)
case config.FAIL:
flag = service.SolvePayFail(bankOrderId, orderInfo.BankTransId)
case config.FREEZE_AMOUNT:
// 将这笔订单进行冻结
flag = service.SolveOrderFreeze(bankOrderId)
case config.UNFREEZE_AMOUNT:
// 将这笔订单金额解冻
flag = service.SolveOrderUnfreeze(bankOrderId)
case config.REFUND:
if orderInfo.Status == config.SUCCESS {
flag = service.SolveRefund(bankOrderId)
}
case config.ORDERROLL:
if orderInfo.Status == config.SUCCESS {
flag = service.SolveOrderRoll(bankOrderId)
}
default:
logs.Error("不存在这样的处理类型")
}
if flag {
c.Ctx.WriteString(config.SUCCESS)
} else {
c.Ctx.WriteString(config.FAIL)
}
}
c.StopRun()
}
func (c *OrderController) MerchantQuery() {
appKey := strings.TrimSpace(c.GetString("appKey"))
orderNo := strings.TrimSpace(c.GetString("orderNo"))
timestamp := strings.TrimSpace(c.GetString("timestamp"))
sign := strings.TrimSpace(c.GetString("sign"))
if appKey == "" || orderNo == "" || timestamp == "" || sign == "" {
resp := response.Resp{
Code: -1,
Msg: "参数错误",
}
_ = c.JSONResp(resp)
_ = c.ServeJSON()
return
}
merchantInfo := merchant.GetMerchantByPasskey(appKey)
if merchantInfo.Id == 0 {
resp := response.Resp{
Code: -1,
Msg: "key错误",
}
_ = c.JSONResp(resp)
_ = c.ServeJSON()
return
}
params := map[string]string{}
params["appKey"] = appKey
params["orderNo"] = orderNo
params["timestamp"] = timestamp
tmpSign := utils.GetMD5SignMF(params, merchantInfo.MerchantSecret)
if tmpSign != sign {
resp := response.Resp{
Code: -1,
Msg: "签名错误",
}
_ = c.JSONResp(resp)
_ = c.ServeJSON()
return
}
orderInfo := order.GetOrderByMerchantOrderId(orderNo)
if orderInfo.Id == 0 {
resp := response.Resp{
Code: -1,
Msg: "订单不存在",
}
_ = c.JSONResp(resp)
_ = c.ServeJSON()
return
}
exValue, err := sonic.GetFromString(orderInfo.ExValue)
if err != nil {
resp := response.Resp{
Code: -1,
Msg: "内部错误",
}
_ = c.JSONResp(resp)
_ = c.ServeJSON()
return
}
cardNo, _ := exValue.Get("cardNo").String()
cardPwd, _ := exValue.Get("data").String()
resp := response.Resp{
Code: 0,
Msg: "订单获取成功",
Data: response.OrderQueryResp{
OrderNo: orderInfo.BankOrderId,
CardNo: cardNo,
CardPwd: cardPwd,
Status: orderInfo.Status,
FaceVal: orderInfo.FactAmount,
Amount: strconv.FormatFloat(orderInfo.ShowAmount, 'f', -1, 64),
},
}
_ = c.JSONResp(resp)
_ = c.ServeJSON()
}