diff --git a/business/lakala/lakala_incoming.go b/business/lakala/lakala_incoming.go index 085b7e801..7c67ff9a7 100644 --- a/business/lakala/lakala_incoming.go +++ b/business/lakala/lakala_incoming.go @@ -490,9 +490,7 @@ func SeparateUnBind(param *lakala.SeparateUnBindReq) error { } // SeparateQueryAmt 可分账金额查询 -func SeparateQueryAmt(merchantNo, logNo, logDate string) (*lakala.SeparateQueryAmtResp, error) { - logNo = lakala.GetOrderNumber(8) - logDate = utils.Time2TimeStrByFormat(time.Now(), "20060102") +func SeparateQueryAmt(merchantNo, logDate, logNo string) (*lakala.SeparateQueryAmtResp, error) { result, err := api.LaKaLaApi.SeparateQueryAmt(merchantNo, logNo, logDate) if err != nil { return nil, err @@ -519,7 +517,7 @@ func Separate(ctx *jxcontext.Context, param *lakala.OrderSeparateReq) (string, s param.OutSeparateNo = lakala.GetOrderNumber(10) param.NotifyUrl = lakala.CallbackLaKaLaSeparateUrl - status, separateNo, err := api.LaKaLaApi.Separate(param) + status, separateNo, logNo, err := api.LaKaLaApi.Separate(param) if err != nil { return "", "", err } @@ -532,6 +530,7 @@ func Separate(ctx *jxcontext.Context, param *lakala.OrderSeparateReq) (string, s FinishDate: "", TotalAmt: param.TotalAmt, Status: status, + LogNo: logNo, DetailData: string(recv), Remark: "分账", } diff --git a/business/model/lakala.go b/business/model/lakala.go index d71ef30d8..3f342910b 100644 --- a/business/model/lakala.go +++ b/business/model/lakala.go @@ -127,6 +127,7 @@ type LakalaSeparateAmt struct { CmdType string `orm:"column(cmd_type);size(32)" json:"cmdType"` // SEPARATE:分账 CANCEL:分账撤销FALLBACK:分账回退 SeparateNo string `orm:"column(separate_no);size(32)" json:"separateNo"` // 分账系统生成唯一流水 Status string `orm:"column(status);size(32)" json:"status1"` // 分账状态 + LogNo string `orm:"column(log_no);size(32)" json:"logNo"` // 交易流水号 //SeparateNo2 string `orm:"column(separate_no2);size(32)" json:"separateNo2"` // 分账撤销系统生成唯一流水 //Status2 string `orm:"column(status2);size(32)" json:"status2"` // 分账撤销状态 //SeparateNo3 string `orm:"column(separate_no3);size(32)" json:"separateNo3"` // 分账回退系统生成唯一流水 diff --git a/business/partner/purchase/jx/localjx/lakala_pay.go b/business/partner/purchase/jx/localjx/lakala_pay.go index 365b7f58f..57a51dc26 100644 --- a/business/partner/purchase/jx/localjx/lakala_pay.go +++ b/business/partner/purchase/jx/localjx/lakala_pay.go @@ -14,7 +14,7 @@ import ( ) // RefundBarCodeScannerOrderByLaKaLa 拉卡拉扫码枪退款 -func RefundBarCodeScannerOrderByLaKaLa(ctx *jxcontext.Context, vendorOrderId string, skuIds map[int]int, reason string) (err error) { +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) defer func() { @@ -29,64 +29,83 @@ func RefundBarCodeScannerOrderByLaKaLa(ctx *jxcontext.Context, vendorOrderId str goodsOrder, err := partner.CurOrderManager.LoadOrder(vendorOrderId, model.VendorIDJX) if err != nil { dao.Rollback(db, txDB) - return err + return nil, err } // 检查订单售后 refundType, refundMoney, err := checkJxAfsOrder(db, goodsOrder, vendorOrderId, skuIds) if err != nil { dao.Rollback(db, txDB) - return err + return nil, err } // 本地添加售后数据 afsOrder, orderSkuFinancial, afsOrderSkuFinancial, err := addRefundSku(ctx, goodsOrder, skuIds, reason, refundType) if err != nil { dao.Rollback(db, txDB) - return err + return nil, err } // 通知退款,等待回传 incoming, err := dao.GetStoreInfoByMerchantID(db, "", goodsOrder.JxStoreID, "", "") if err != nil { - return err - } - 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: "", + 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: "", + } - _, err = api.LaKaLaApi.RefundOrder(param) - if err != nil { - return err + 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 err + return nil, err } if err = dao.CreateMultiEntities(db, orderSkuFinancial); err != nil { dao.Rollback(db, txDB) - return err + return nil, err } if err = dao.CreateMultiEntities(db, afsOrderSkuFinancial); err != nil { dao.Rollback(db, txDB) - return err + return nil, err } goodsOrder.TotalShopMoney -= int64(refundMoney) dao.UpdateEntity(db, goodsOrder, "TotalShopMoney") dao.Commit(db, txDB) - return nil + return resp, nil } // QueryBarCodeRefundStatus 退款订单状态查询 diff --git a/business/partner/purchase/mtwm/order.go b/business/partner/purchase/mtwm/order.go index b6d96b769..6801a2ede 100644 --- a/business/partner/purchase/mtwm/order.go +++ b/business/partner/purchase/mtwm/order.go @@ -609,7 +609,7 @@ func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDelivery bo // 美团专送、快送、混合送、美团企客 logisticsCode := utils.Interface2String(orderDetail["logistics_code"]) isSelfDelivery = logisticsCode == mtwmapi.PeiSongTypeMTZSJM || logisticsCode == mtwmapi.PeiSongTypeMTZSPT || - logisticsCode == mtwmapi.PeiSongTypeMTZSZJ || logisticsCode == mtwmapi.PeiSongTypeKuaiDi || + logisticsCode == mtwmapi.PeiSongTypeMTZSZJ || logisticsCode == mtwmapi.PeiSongTypeKuaiDi || logisticsCode == mtwmapi.PeiSongTypeMTZSDL || logisticsCode == mtwmapi.PeiSongTypeMixed || logisticsCode == mtwmapi.PeiSongTypeQiKe || logisticsCode == mtwmapi.PeiSongTypeMixedExpressQiKe || logisticsCode == mtwmapi.PeiSongTypeFranchise || logisticsCode == mtwmapi.PeiSongTypeSelf || logisticsCode == mtwmapi.PeiSongTypeWholeCity || diff --git a/controllers/jx_order2.go b/controllers/jx_order2.go index d9df9151b..1a168da36 100644 --- a/controllers/jx_order2.go +++ b/controllers/jx_order2.go @@ -87,7 +87,7 @@ func (c *JxOrderController) RefundOnlineOrder() { case "tonglian": err = localjx.RefundBarCodeScannerOrder(params.Ctx, params.VendorOrderID, skuIds, params.Reason) case "lakala": - err = localjx.RefundBarCodeScannerOrderByLaKaLa(params.Ctx, params.VendorOrderID, skuIds, params.Reason) + retVal, err = localjx.RefundBarCodeScannerOrderByLaKaLa(params.Ctx, params.VendorOrderID, skuIds, params.Reason, "toStore") } return retVal, errCode, err diff --git a/controllers/lakala.go b/controllers/lakala.go index d94803f48..b8edb90a7 100644 --- a/controllers/lakala.go +++ b/controllers/lakala.go @@ -1,9 +1,11 @@ package controllers import ( + "encoding/json" "git.rosy.net.cn/baseapi/platformapi/lakala" "git.rosy.net.cn/baseapi/utils" lakalaServer "git.rosy.net.cn/jx-callback/business/lakala" + "git.rosy.net.cn/jx-callback/business/partner/purchase/jx/localjx" "github.com/astaxie/beego/server/web" ) @@ -548,12 +550,14 @@ func (c *LaKaLaController) SeparateUnBind() { // @Description 可分账金额查询 // @Param token header string true "认证token" // @Param merchantNo query string true "商户号" +// @Param logDate query string true "拉卡拉对账单交易日期[yyyyMMdd]" +// @Param logNo query string true "交易流水号" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult // @router /SeparateQueryAmt [get] func (c *LaKaLaController) SeparateQueryAmt() { c.callSeparateQueryAmt(func(params *tLakalaSeparateQueryAmtParams) (retVal interface{}, errCode string, err error) { - retVal, err = lakalaServer.SeparateQueryAmt(params.MerchantNo, "", "") + retVal, err = lakalaServer.SeparateQueryAmt(params.MerchantNo, params.LogDate, params.LogNo) return }) } @@ -1041,3 +1045,25 @@ func (c *LaKaLaController) CloseOrderByMini() { return }) } + +// AggregateRefundOrder 聚合支付退款 +// @Title 聚合支付退款 +// @Description 聚合支付退款 +// @Param token header string true "认证token" +// @Param vendorOrderID formData string true "订单ID" +// @Param skuIds formData string true "[key:value]退款商品 skuId:count,int" +// @Param Reason formData string false "退单原因" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /AggregateRefundOrder [post] +func (c *LaKaLaController) AggregateRefundOrder() { + c.callAggregateRefundOrder(func(params *tLakalaAggregateRefundOrderParams) (retVal interface{}, errCode string, err error) { + skuIds := make(map[int]int, 0) + if err = json.Unmarshal([]byte(params.SkuIds), &skuIds); err != nil { + return nil, "", err + } + + retVal, err = localjx.RefundBarCodeScannerOrderByLaKaLa(params.Ctx, params.VendorOrderID, skuIds, params.Reason, "aggregate") + return + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 79f90be0d..8e33eed4f 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -5194,6 +5194,15 @@ func init() { MethodParams: param.Make(), Filters: nil, Params: nil}) + // 聚合支付退款 + web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:LaKaLaController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:LaKaLaController"], + web.ControllerComments{ + Method: "AggregateRefundOrder", + Router: `/AggregateRefundOrder`, + AllowHTTPMethods: []string{"post"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) //web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:FnController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:FnController"], // web.ControllerComments{