This commit is contained in:
邹宗楠
2025-08-05 10:47:00 +08:00
parent f50d5197ff
commit cb974f7618
3 changed files with 111 additions and 44 deletions

View File

@@ -12,7 +12,7 @@ import (
"time"
)
// RefundBarCodeScannerOrderByLaKaLa 拉卡拉扫码枪退款
// RefundBarCodeScannerOrderByLaKaLa 拉卡拉退款
func RefundBarCodeScannerOrderByLaKaLa(ctx *jxcontext.Context, vendorOrderId string, skuIds map[int]int, reason string, refund string) (resp interface{}, err error) {
db := dao.GetDB()
txDB, _ := dao.Begin(db)
@@ -45,49 +45,6 @@ func RefundBarCodeScannerOrderByLaKaLa(ctx *jxcontext.Context, vendorOrderId str
return nil, err
}
// 通知退款,等待回传
incoming, err := dao.GetStoreInfoByMerchantID(db, "", goodsOrder.JxStoreID, "", "")
if err != nil {
return nil, err
}
switch refund {
case "toStore": // 收银台
param := &lakala.RefundOrderReq{
MerchantNo: incoming.MerchantNo,
TermNo: incoming.TermNo,
OutTradeNo: afsOrder.AfsOrderID,
RefundAmount: utils.Int2Str(refundMoney),
OriginBizType: "3",
OriginTradeDate: goodsOrder.OrderCreatedAt.Format("20060102"),
OriginLogNo: "",
OriginTradeNo: "",
OriginCardNo: "",
LocationInfo: nil,
RefundType: "",
}
resp, err = api.LaKaLaApi.RefundOrder(param)
if err != nil {
return nil, err
}
case "aggregate": // 聚合支付
param := &lakala.AggregateRefundReq{
MerchantNo: incoming.MerchantNo,
TermNo: incoming.TermNo,
OutTradeNo: afsOrder.AfsOrderID,
RefundAmount: utils.Int2Str(refundMoney),
RefundReason: reason,
OriginOutTradeNo: goodsOrder.VendorOrderID,
OriginTradeNo: "",
OriginLogNo: "",
LocationInfo: lakala.LocationInfoObj{RequestIp: ctx.GetRealRemoteIP()},
}
resp, err = api.LaKaLaApi.AggregateRefund(param)
if err != nil {
return nil, err
}
}
if err = dao.CreateEntity(db, afsOrder); err != nil {
dao.Rollback(db, txDB)
return nil, err
@@ -107,6 +64,102 @@ func RefundBarCodeScannerOrderByLaKaLa(ctx *jxcontext.Context, vendorOrderId str
return resp, nil
}
func RefundOrderByLaKaLa(ctx *jxcontext.Context, orderPay *model.OrderPay, afsOrder *model.AfsOrder, refundID string, refundFee int, refundDesc string) (orderPayRefund *model.OrderPayRefund, err error) {
var (
db = dao.GetDB()
)
order, err := partner.CurOrderManager.LoadOrder(orderPay.VendorOrderID, orderPay.VendorID)
if err != nil {
return nil, err
}
// 通知退款,等待回传
incoming, err := dao.GetStoreInfoByMerchantID(db, "", order.JxStoreID, "", "")
if err != nil {
return nil, err
}
switch orderPay.VendorPayType {
case lakala.PayWayAPP: // 收银台
param := &lakala.RefundOrderReq{
MerchantNo: incoming.MerchantNo2,
TermNo: incoming.TermNo,
OutTradeNo: afsOrder.AfsOrderID,
RefundAmount: utils.Int2Str(refundFee),
OriginBizType: "3",
OriginTradeDate: order.OrderCreatedAt.Format("20060102"),
OriginLogNo: "",
OriginTradeNo: order.VendorOrderID,
OriginCardNo: "",
LocationInfo: nil,
RefundType: "",
}
resp, err := api.LaKaLaApi.RefundOrder(param)
orderPayRefund = &model.OrderPayRefund{
RefundID: refundID,
VendorRefundID: resp.OriginTradeNo,
VendorOrderID: orderPay.VendorOrderID,
VendorID: orderPay.VendorID,
Status: model.RefundStatusYes,
TransactionID: resp.LogNo,
RefundFee: refundFee,
RefundCreatedAt: time.Now(),
}
if err == nil {
orderPayRefund.Status = model.RefundStatusYes
orderPayRefund.OriginalData = utils.Format4Output(resp, true)
orderPay.Status = model.PayStatusRefund
dao.UpdateEntity(db, orderPay, "Status")
} else {
orderPayRefund.Status = model.RefundStatusNo
orderPayRefund.OriginalData = err.Error()
}
dao.WrapAddIDCULDEntity(orderPayRefund, ctx.GetUserName())
dao.CreateEntity(db, orderPayRefund)
case lakala.PayWayMini, lakala.PayWayRegister: // 主扫被扫
param := &lakala.AggregateRefundReq{
MerchantNo: incoming.MerchantNo2,
TermNo: incoming.TermNo,
OutTradeNo: afsOrder.AfsOrderID,
RefundAmount: utils.Int2Str(refundFee),
RefundReason: refundDesc,
OriginOutTradeNo: order.VendorOrderID,
OriginTradeNo: "",
OriginLogNo: "",
LocationInfo: lakala.LocationInfoObj{RequestIp: ctx.GetRealRemoteIP()},
}
resp, err := api.LaKaLaApi.AggregateRefund(param)
orderPayRefund = &model.OrderPayRefund{
RefundID: refundID,
VendorRefundID: resp.OriginTradeNo,
VendorOrderID: orderPay.VendorOrderID,
VendorID: orderPay.VendorID,
Status: model.RefundStatusYes,
TransactionID: orderPay.TransactionID,
RefundFee: refundFee,
RefundCreatedAt: time.Now(),
}
if err == nil {
orderPayRefund.Status = model.RefundStatusYes
orderPayRefund.OriginalData = utils.Format4Output(resp, true)
orderPay.Status = model.PayStatusRefund
dao.UpdateEntity(db, orderPay, "Status")
} else {
orderPayRefund.Status = model.RefundStatusNo
orderPayRefund.OriginalData = err.Error()
}
dao.WrapAddIDCULDEntity(orderPayRefund, ctx.GetUserName())
dao.CreateEntity(db, orderPayRefund)
}
if order.TotalShopMoney == int64(refundFee) && err == nil {
order.Status = model.OrderStatusCanceled
order.VendorStatus = "laKaLaRefund"
dao.UpdateEntity(db, order, "Status", "VendorStatus")
}
return orderPayRefund, err
}
// QueryBarCodeRefundStatus 退款订单状态查询
func QueryBarCodeRefundStatus(afsOrderID string) (resp []*lakala.RefundOrderQueryResp, err error) {
db := dao.GetDB()

View File

@@ -3,6 +3,7 @@ package localjx
import (
"encoding/json"
"fmt"
"git.rosy.net.cn/jx-callback/business/partner"
"strings"
"time"
@@ -202,6 +203,16 @@ func RefundOrderByTL(ctx *jxcontext.Context, orderPay *model.OrderPay, refundID
orderPay.Status = model.PayStatusRefund
dao.UpdateEntity(db, orderPay)
order, err := partner.CurOrderManager.LoadOrder(orderPay.VendorOrderID, orderPay.VendorID)
if err != nil {
return nil, err
}
if order.TotalShopMoney == int64(refundFee) {
order.Status = model.OrderStatusCanceled
order.VendorStatus = "laKaLaRefund"
dao.UpdateEntity(db, order, "Status", "VendorStatus")
}
}
return orderPayRefund, err
}

View File

@@ -50,6 +50,9 @@ func (c *PurchaseHandler) AgreeOrRefuseRefund(ctx *jxcontext.Context, order *mod
if orderPays[0].PayType == model.PayTypeKuaiShou {
_, err = localjx.RefundOrderByKS(ctx, orderPays[0], order.VendorOrderID, int(order.SkuUserMoney), reason)
}
if orderPays[0].PayType == model.PayTypeLaKaLa {
_, err = localjx.RefundOrderByLaKaLa(ctx, orderPays[0], order, order.VendorOrderID, int(order.SkuUserMoney), reason)
}
if err != nil {
return err
} else {