diff --git a/business/partner/purchase/jx/localjx/lakala_pay.go b/business/partner/purchase/jx/localjx/lakala_pay.go index d5e445acc..da55aaf99 100644 --- a/business/partner/purchase/jx/localjx/lakala_pay.go +++ b/business/partner/purchase/jx/localjx/lakala_pay.go @@ -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() diff --git a/business/partner/purchase/jx/localjx/tonglianpay.go b/business/partner/purchase/jx/localjx/tonglianpay.go index 4a200f759..8d54443e9 100644 --- a/business/partner/purchase/jx/localjx/tonglianpay.go +++ b/business/partner/purchase/jx/localjx/tonglianpay.go @@ -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 } diff --git a/business/partner/purchase/jx/order_afs.go b/business/partner/purchase/jx/order_afs.go index 7b34ce0c3..9a4862608 100644 --- a/business/partner/purchase/jx/order_afs.go +++ b/business/partner/purchase/jx/order_afs.go @@ -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 {