From aaca0e21af2aab19e1915b77f60d223f03e9ac12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E5=AE=97=E6=A5=A0?= Date: Tue, 16 May 2023 14:51:50 +0800 Subject: [PATCH] 1 --- business/jxcallback/orderman/order.go | 115 +++++++++++++++--- .../jxcallback/scheduler/defsch/defsch.go | 8 +- 2 files changed, 103 insertions(+), 20 deletions(-) diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index 511904858..44c43d772 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -458,38 +458,115 @@ func ResetCreateWaybillFee(db *dao.DaoDB, order *model.GoodsOrder, bill *model.W if bill.WaybillVendorID != model.VendorIDMTPS && bill.WaybillVendorID != model.VendorIDDada && bill.WaybillVendorID != model.VendorIDFengNiao && bill.WaybillVendorID != model.VendorIDUUPT { return nil } + // 订单被取消了,所有运单应该也被取消了,检查是否退还配送费 // 1.查询订单创建的所有运单,三方配送运单(达达,蜂鸟,uu,美团配送),平台自配送订单不参与 if handlerInfo := partner.GetDeliveryPlatformFromVendorID(bill.WaybillVendorID); handlerInfo != nil { + // 这一步必须要做,可能不是最后取消订单,需要更新违约金和取消状态 deductFee, err := handlerInfo.Handler.GetDeliverLiquidatedDamages(bill.VendorOrderID, bill.VendorWaybillID) if err != nil { return err } - if deductFee == 0 { - return nil + if deductFee != model.NO { + // 更新运单实际扣除费用 + bill.ActualFee = deductFee + bill.DesiredFee = deductFee + _, err = dao.UpdateEntity(db, bill, "ActualFee", "DesiredFee") } - // 更新运单实际扣除费用 - bill.ActualFee = deductFee - dao.UpdateEntity(db, bill, "ActualFee") - - // 门店账户金额扣除 + // 获取订单运单详情列表 store, _ := dao.GetStoreDetail(db, jxutils.GetSaleStoreIDFromOrder(order), order.VendorID, order.VendorOrgCode) - // 门店发单,扣除门店余额 - if store != nil && store.CreateDeliveryType == model.YES { - partner.CurStoreAcctManager.InsertStoreAcctExpendAndUpdateStoreAcctBalance(jxcontext.AdminCtx, store.ID, int(deductFee), partner.StoreAcctTypeExpendCreateWaybillDeductFee, bill.VendorOrderID, bill.VendorWaybillID, 0) + // 门店发单,支付运单违约金 + if store != nil && store.CreateDeliveryType == model.YES && deductFee != model.NO { + err = partner.CurStoreAcctManager.InsertStoreAcctExpendAndUpdateStoreAcctBalance(jxcontext.AdminCtx, store.ID, int(deductFee), partner.StoreAcctTypeExpendCreateWaybillDeductFee, bill.VendorOrderID, bill.VendorWaybillID, 0) + if err != nil { + globals.SugarLogger.Errorf("InsertStoreAcctIncomeAndUpdateStoreAcctBalance 483 : %v", err) + } } if store != nil && store.CreateDeliveryType == model.NO { - // 获取运单的支出记录 - orderBill, _ := dao.GetBrandBill(db, store.BrandID, order.VendorOrderID, model.BrandBillTypeExpend, model.BrandBillFeeTypeDelivery, order.VendorWaybillID) - if len(orderBill) == 0 { - partner.CurStoreAcctManager.InsertBrandBill(jxcontext.AdminCtx, store.BrandID, int(deductFee), model.BrandBillTypeExpend, model.BrandBillFeeTypeDeductFee, order.VendorOrderID, order.VendorWaybillID) - } else { - // 退回扣除的配送费 - partner.CurStoreAcctManager.InsertBrandBill(jxcontext.AdminCtx, store.BrandID, orderBill[0].Price, model.BrandBillTypeIncome, model.BrandBillFeeTypeDeductFee, order.VendorOrderID, order.VendorWaybillID) - // 支出配送费违约金 - partner.CurStoreAcctManager.InsertBrandBill(jxcontext.AdminCtx, store.BrandID, int(deductFee), model.BrandBillTypeExpend, model.BrandBillFeeTypeDeductFee, order.VendorOrderID, order.VendorWaybillID) + err = partner.CurStoreAcctManager.InsertBrandBill(jxcontext.AdminCtx, store.BrandID, int(deductFee), model.BrandBillTypeExpend, model.BrandBillFeeTypeDeductFee, order.VendorOrderID, order.VendorWaybillID) + if err != nil { + globals.SugarLogger.Errorf("InsertBrandBill 489 : %v", err) + } + //// 获取运单的支出记录 + //orderBill, _ := dao.GetBrandBill(db, store.BrandID, order.VendorOrderID, model.BrandBillTypeExpend, model.BrandBillFeeTypeDelivery, order.VendorWaybillID) + //if len(orderBill) == 0 { + //} else { + // // 退回扣除的配送费 + // partner.CurStoreAcctManager.InsertBrandBill(jxcontext.AdminCtx, store.BrandID, orderBill[0].Price, model.BrandBillTypeIncome, model.BrandBillFeeTypeDeductFee, order.VendorOrderID, order.VendorWaybillID) + // // 支出配送费违约金 + // partner.CurStoreAcctManager.InsertBrandBill(jxcontext.AdminCtx, store.BrandID, int(deductFee), model.BrandBillTypeExpend, model.BrandBillFeeTypeDeductFee, order.VendorOrderID, order.VendorWaybillID) + //} + } + + // 所有运单停止调度之后才开始退还余额 + bills, err := dao.GetWaybills(db, order.VendorOrderID, nil) + if err != nil { + return err + } + + // 所有取消的运单 + cancelWaybill := make(map[string]*model.Waybill, 0) + //finishWaybill := make(map[string]*model.Waybill, 0) + //deliveryWaybill := make(map[string]*model.Waybill, 0) + for _, v := range bills { + if v.Status == model.WaybillStatusCanceled && v.VendorWaybillID != bill.VendorWaybillID { + cancelWaybill[v.VendorWaybillID] = v + } + //if (v.Status == model.WaybillStatusDelivered || v.Status == model.OrderStatusFinished) && v.VendorWaybillID != bill.VendorWaybillID { + // finishWaybill[v.VendorWaybillID] = v + //} + //if v.Status < model.WaybillStatusDelivered && v.VendorWaybillID != bill.VendorWaybillID { + // deliveryWaybill[v.VendorOrderID] = v + //} + } + cancelWaybill[bill.VendorWaybillID] = bill + // 还有配送中的订单,暂不退款 + //if len(deliveryWaybill) != model.NO { + // return nil + //} + //// 如果已经有完成订单 + //if len(finishWaybill) != model.NO { + // var cancelDeductFee int64 = 0 + // var tipFee int64 = 0 + // for _, v := range cancelWaybill { + // cancelDeductFee += v.ActualFee + // tipFee += v.TipFee + // } + // + //} + // 已经全部运单取消,退款结算 + if len(bills) == len(cancelWaybill) { + // 门店结算,全部支出 + if store.CreateDeliveryType == model.YES { + // 此订单支出的费用 + expendType := []int{partner.StoreAcctTypeExpendCreateWaybillEx, partner.StoreAcctTypeExpendCreateWaybillTip, partner.StoreAcctTypeExpendCreateWaybill2ndMore, partner.StoreAcctTypeExpendCreateWaybillDeductFee, partner.StoreAcctTypeRealFeeExpend} + billExpend, err := dao.GetStoreAcctExpendTotal(db, store.ID, expendType, bill.VendorOrderID, utils.ZeroTimeValue, utils.ZeroTimeValue) + if err != nil { + globals.SugarLogger.Errorf("GetStoreAcctExpendTotal 545 err :%v", err) + return err + } + // 此订单退还的费用 + incomeType := []int{partner.StoreAcctTypeRealFeeIncome, partner.StoreAcctTypeIncomeCancelTemp, partner.StoreAcctTypeIncomeCancelReal} + billIncome, err := dao.GetStoreAcctIncomeTotal(db, store.ID, incomeType, bill.VendorOrderID, utils.ZeroTimeValue, utils.ZeroTimeValue) + if err != nil { + globals.SugarLogger.Errorf("GetStoreAcctIncomeTotal 551 err :%v", err) + return err + } + var allFee int = 0 + for _, v := range bills { + allFee += int(v.ActualFee) + allFee += int(v.TipFee) + } + globals.SugarLogger.Errorf("计算错误:订单支出费用应该=退还费用+运单支出费用,支出费用:%d,已经退还费用:%d,剩余退还费用:%d", billExpend, billIncome, billExpend-billIncome) + if allFee != billExpend-billIncome { + globals.SugarLogger.Errorf("计算错误:订单支出费用应该=退还费用+运单支出费用,支出费用:%d,已经退还费用:%d,剩余退还费用:%d", billExpend, billIncome, billExpend-billIncome) + } + } + // 品牌结算 + if store.CreateDeliveryType == model.NO { + } } } diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index 2216a0d95..f5e517296 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -2,7 +2,10 @@ package defsch import ( "fmt" + "git.rosy.net.cn/baseapi/platformapi/dadaapi" + "git.rosy.net.cn/baseapi/platformapi/fnpsapi" "git.rosy.net.cn/baseapi/platformapi/mtpsapi" + "git.rosy.net.cn/baseapi/platformapi/uuptapi" "git.rosy.net.cn/jx-callback/business/jxutils/smsmsg" "math/rand" "strings" @@ -637,7 +640,10 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo //} // 当运单时三方配送时,美团状态20 if bill.WaybillVendorID == model.VendorIDDada || bill.WaybillVendorID == model.VendorIDMTPS || bill.WaybillVendorID == model.VendorIDFengNiao || bill.WaybillVendorID == model.VendorIDUUPT { - if (bill.VendorStatus == utils.Int64ToStr(mtpsapi.OrderStatusPickedUp) && bill.OrderVendorID == model.VendorIDMTWM) || bill.Status == model.WaybillStatusCourierArrived { + if (bill.VendorStatus == utils.Int64ToStr(mtpsapi.OrderStatusPickedUp) && bill.OrderVendorID == model.VendorIDMTWM) || + (bill.VendorStatus == utils.Int64ToStr(dadaapi.OrderStatusDelivering) && bill.OrderVendorID == model.VendorIDDada) || + (bill.VendorStatus == utils.Int64ToStr(fnpsapi.OrderStatusArrived) && bill.OrderVendorID == model.VendorIDFengNiao) || + (bill.VendorStatus == uuptapi.StateArrivedStore && bill.OrderVendorID == model.VendorIDUUPT) { if storeDetail, err2 := dao.GetStoreDetail(dao.GetDB(), jxutils.GetSaleStoreIDFromOrder(order), order.VendorID, ""); err2 == nil { if storeDetail.CreateDeliveryType == model.YES { s.updateStoreAccount(order, bill)