Files
kami_gateway/controllers/gateway/order_controller.go
sunxiaolong 8441ef727a 🎉初次代码上传
2023-11-12 21:58:38 +08:00

274 lines
7.0 KiB
Go

package gateway
import (
"context"
"encoding/json"
"errors"
"fmt"
"gateway/conf"
"gateway/models/order"
"gateway/query"
"gateway/service"
"gateway/supplier/third_party"
"gateway/utils"
"github.com/astaxie/beego/logs"
"github.com/beego/beego/v2/client/orm"
"github.com/beego/beego/v2/server/web"
"strings"
)
type OrderController struct {
web.Controller
}
func (c *OrderController) ShowErr(string2 string) {
web.ReadFromRequest(&c.Controller)
c.Data["flash"] = map[string]string{"error": string2}
c.TplName = "err/params.html"
}
type JsonResponse struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data interface{} `json:"data"`
}
// CardSuit 卡片提交
func (c *OrderController) CardSuit() {
params := make(map[string]string)
params["orderNo"] = strings.TrimSpace(c.GetString("orderid"))
params["exValue"] = strings.TrimSpace(c.GetString("card"))
orderInfo := order.GetOrderByMerchantOrderId(params["orderNo"])
if orderInfo.BankOrderId == "" || len(orderInfo.BankOrderId) == 0 {
jsonResponse := JsonResponse{
Code: 0,
Msg: "订单已被处理或者不存在。",
}
c.Data["json"] = &jsonResponse
c.ServeJSON()
return
}
if orderInfo.ExValue != "" {
jsonResponse := JsonResponse{
Code: 0,
Msg: "你已提交过卡密信息,无需重复提交。",
}
c.Data["json"] = &jsonResponse
c.ServeJSON()
return
}
if orderInfo.Status != "wait" {
logs.Error("阿达达,订单号=", orderInfo.BankOrderId)
return
}
o := orm.NewOrm()
err := o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error {
if orderInfo.Status != "wait" {
logs.Error("是否收到,订单号=", orderInfo.BankOrderId)
return errors.New(fmt.Sprintf("该订单已经处理,订单号= %s", orderInfo.BankOrderId))
}
//{"card_type":"171","data":"111111","face_type":"10","recovery_type":"2"}
cdata := third_party.CardInfo{
CardType: "171",
FaceType: fmt.Sprintf("%f", orderInfo.OrderAmount),
RecoveryType: "2",
Data: params["exValue"],
}
marshal, err := json.Marshal(cdata)
if err != nil {
return err
}
orderInfo.ExValue = string(marshal)
orderInfo.CardData = params["exValue"]
orderInfo.UpdateTime = utils.GetBasicDateTime()
if _, err := txOrm.Update(&orderInfo); err != nil || orderInfo.BankOrderId == "" {
logs.Error(fmt.Sprintf("solve pay success, update order info fail: %s, bankOrderId = %s", err, orderInfo.BankOrderId))
return err
}
return nil
})
if err == nil {
params["MerchantUid"] = orderInfo.MerchantUid
params["payWayCode"] = orderInfo.PayTypeCode
p := service.GetMerchantInfoByUID(params)
if p.Code == -1 {
jsonResponse := JsonResponse{
Code: 0,
Msg: p.Msg,
}
c.Data["json"] = &jsonResponse
c.ServeJSON()
return
}
p.OrderAmount = orderInfo.OrderAmount
//选择通道
p = service.ChooseRoad(p)
if p.Code == -1 {
jsonResponse := JsonResponse{
Code: 0,
Msg: p.Msg,
}
c.Data["json"] = &jsonResponse
c.ServeJSON()
return
}
supplierCode := "MF178"
supplier := third_party.GetPaySupplierByCode(supplierCode)
sdata := supplier.Syt(orderInfo, p.RoadInfo, p.MerchantInfo)
if sdata.Status == "-1" {
jsonResponse := JsonResponse{
Code: 0,
Msg: sdata.Msg,
}
c.Data["json"] = &jsonResponse
c.ServeJSON()
return
}
jsonResponse := JsonResponse{
Code: 1,
Msg: "提交成功,系统核对成功后,将返回原系统处理。",
}
c.Data["json"] = &jsonResponse
c.ServeJSON()
} else {
jsonResponse := JsonResponse{
Code: 0,
Msg: err.Error(),
}
c.Data["json"] = &jsonResponse
c.ServeJSON()
}
}
// OrderCreate 订单创建
func (c *OrderController) OrderCreate() {
//客户传递过来对参数 订单ID 支付类型 卡类型 卡面值
//判断订单是否存在 是否关闭 是否支付成功
//c.Data["flash"] = map[string]string{"error": string2}
params := make(map[string]string)
//获取客户端的ip
//clientIp := c.Ctx.Input.IP()
params["payWayCode"] = strings.TrimSpace(c.GetString("paycode"))
params["orderPrice"] = strings.TrimSpace(c.GetString("price"))
params["orderNo"] = strings.TrimSpace(c.GetString("orderid"))
params["notifyUrl"] = strings.TrimSpace(c.GetString("notifyurl"))
params["returnUrl"] = strings.TrimSpace(c.GetString("returnurl"))
params["orderPeriod"] = "1" //订单有效时间
params["PayTypeCode"] = "CARD_DH" //类型
//商户ID
params["payKey"] = strings.TrimSpace(c.GetString("paykey"))
if params["payWayCode"] == "" || params["orderPrice"] == "" || params["orderNo"] == "" {
c.ShowErr("参数有误,请检查再试试。")
return
}
p := service.GetMerchantInfo(params)
if p.Code == -1 {
c.ShowErr(p.Msg)
return
}
p.PayWayCode = params["payWayCode"]
p = service.OrderPriceIsValid(p)
if p.Code == -1 {
c.ShowErr(p.Msg)
return
}
orderInfo := order.GetOrderByMerchantOrderId(params["orderNo"])
p = service.ChooseRoad(p)
if p.Code == -1 {
c.ShowErr(p.Msg)
return
}
if orderInfo.BankOrderId == "" || len(orderInfo.BankOrderId) == 0 {
//生成订单记录
orderInfo, _ = service.GenerateRecord(p)
if p.Code == -1 {
c.ShowErr(p.Msg)
return
}
}
c.Data["Status"] = orderInfo.Status
c.Data["orderNo"] = params["orderNo"]
c.Data["price"] = params["orderPrice"]
c.TplName = "scan.html"
if orderInfo.Status == conf.WAIT {
c.Data["qrCode"] = "../static/new/febs/images/public/jx.png"
} else if orderInfo.Status == conf.SUCCESS || orderInfo.Status == conf.FAIL {
if orderInfo.Status == conf.SUCCESS {
c.Data["price"] = orderInfo.FactAmount
}
c.Data["UpdateTime"] = orderInfo.UpdateTime
}
}
func (c *OrderController) OrderQuery() {
bankOrderId := c.GetString("bankOrderId")
logs.Debug(fmt.Sprintf("获取到boss后台的银行id = %s", 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)
orderInfo.Operator = c.GetString("operator")
flag := false
if orderInfo.BankOrderId == "" {
logs.Error("该订单不存在,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()
}