From 61157174e633960ea414e905e7989084584f0b1b Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 19 Jul 2018 19:12:54 +0800 Subject: [PATCH] - fix mtps delivery fee bug. --- business/controller/mtps/waybill.go | 4 +- business/scheduler/defsch/defsch.go | 83 ++++++++++++----------------- 2 files changed, 37 insertions(+), 50 deletions(-) diff --git a/business/controller/mtps/waybill.go b/business/controller/mtps/waybill.go index 656f6fc17..89c0e361f 100644 --- a/business/controller/mtps/waybill.go +++ b/business/controller/mtps/waybill.go @@ -92,7 +92,7 @@ func (c *WaybillController) calculateDeliveryFee(bill *model.Waybill) (retVal in db := orm.NewOrm() JxStoreID := jxutils.GetJxStoreIDFromOrder(order) num, err := db.Raw(` - SELECT t2.price, t2.lng, t2.lat + SELECT t2.price, t1.lng, t1.lat FROM jxstore t1 JOIN mtpsdeliveryprice t2 ON t2.citycode = t1.area WHERE t1.storeid = ? @@ -102,7 +102,7 @@ func (c *WaybillController) calculateDeliveryFee(bill *model.Waybill) (retVal in if err == nil && num == 1 { delieveryFee = utils.Str2Int64(lists[0][0].(string)) } else { - globals.SugarLogger.Warnf("calculateDeliveryFee can not cal delivery fee for orderid:%s", order.VendorOrderID) + globals.SugarLogger.Warnf("calculateDeliveryFee can not cal delivery fee for orderid:%s, num:%d, error:%v", order.VendorOrderID, num, err) return 0 } diff --git a/business/scheduler/defsch/defsch.go b/business/scheduler/defsch/defsch.go index ae9e0843b..70f62bc88 100644 --- a/business/scheduler/defsch/defsch.go +++ b/business/scheduler/defsch/defsch.go @@ -99,6 +99,7 @@ func (s *DefScheduler) OnOrderStatusChanged(status *model.OrderStatus) (err erro func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill) (err error) { globals.SugarLogger.Debugf("OnWaybillStatusChanged, bill:%v", bill) savedOrderInfo := s.loadWatchOrderFromMap(bill.VendorOrderID, bill.OrderVendorID) + s.addWaybill2Map(savedOrderInfo, bill) // 这样写的原因是因为调试时,程度从中途运行,没有接受到WaybillStatusNew事件 if bill.Status == model.WaybillStatusNew { if bill.OrderVendorID == bill.WaybillVendorID { if savedOrderInfo.timerStatus == model.OrderStatusFinishedPickup { @@ -106,7 +107,6 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill) (err error) { } else { globals.SugarLogger.Infof("OnWaybillStatusChanged met other timer, status:%d", savedOrderInfo.timerStatus) } - err = s.addWaybill2Map(savedOrderInfo, bill) } if savedOrderInfo.order.WaybillVendorID != model.VendorIDUnknown { globals.SugarLogger.Infof("OnWaybillStatusChanged multiple waybill created, bill:%v", bill) @@ -115,64 +115,52 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill) (err error) { } } } else { - findIt := false - for _, v := range savedOrderInfo.waybills { - if v.VendorWaybillID == bill.VendorWaybillID && v.WaybillVendorID == bill.WaybillVendorID { - findIt = true - break - } - } - if findIt { - switch bill.Status { - case model.WaybillStatusAccepted: - s.stopTimer(savedOrderInfo) // todo 这里应该另外启动一个TIMER - s.cancelOtherWaybills(savedOrderInfo, bill) + switch bill.Status { + case model.WaybillStatusAccepted: + s.stopTimer(savedOrderInfo) // todo 这里应该另外启动一个TIMER + s.cancelOtherWaybills(savedOrderInfo, bill) + s.CurOrderManager.UpdateWaybillVendorID(bill) + savedOrderInfo.order.WaybillVendorID = bill.WaybillVendorID + case model.WaybillStatusAcceptCanceled: + s.createWaybillOn3rdProviders(savedOrderInfo.order, bill) + if savedOrderInfo.order.WaybillVendorID == bill.WaybillVendorID { + bill.WaybillVendorID = model.VendorIDUnknown s.CurOrderManager.UpdateWaybillVendorID(bill) savedOrderInfo.order.WaybillVendorID = bill.WaybillVendorID - case model.WaybillStatusAcceptCanceled: - s.createWaybillOn3rdProviders(savedOrderInfo.order, bill) - if savedOrderInfo.order.WaybillVendorID == bill.WaybillVendorID { - bill.WaybillVendorID = model.VendorIDUnknown - s.CurOrderManager.UpdateWaybillVendorID(bill) - savedOrderInfo.order.WaybillVendorID = bill.WaybillVendorID - } - case model.WaybillStatusCanceled, model.WaybillStatusFailed: - s.removeWaybillFromMap(savedOrderInfo, bill) - if savedOrderInfo.order.WaybillVendorID == bill.WaybillVendorID { - s.createWaybillOn3rdProviders(savedOrderInfo.order, nil) - - bill.WaybillVendorID = model.VendorIDUnknown - s.CurOrderManager.UpdateWaybillVendorID(bill) - savedOrderInfo.order.WaybillVendorID = bill.WaybillVendorID - } - case model.WaybillStatusDelivering: - if savedOrderInfo.order.VendorID != bill.WaybillVendorID { - s.GetPurchasePlatformFromVendorID(bill.OrderVendorID).SelfDeliverDelievering(savedOrderInfo.order) - } - case model.WaybillStatusDelivered: - if savedOrderInfo.order.VendorID != bill.WaybillVendorID { - s.GetPurchasePlatformFromVendorID(bill.OrderVendorID).SelfDeliverDelievered(savedOrderInfo.order) - } - s.removeWaybillFromMap(savedOrderInfo, bill) } - } else { - globals.SugarLogger.Infof("OnWaybillStatusChanged can not find bill:%v in saved info", bill) + case model.WaybillStatusCanceled, model.WaybillStatusFailed: + s.removeWaybillFromMap(savedOrderInfo, bill) + if savedOrderInfo.order.WaybillVendorID == bill.WaybillVendorID { + s.createWaybillOn3rdProviders(savedOrderInfo.order, nil) + + bill.WaybillVendorID = model.VendorIDUnknown + s.CurOrderManager.UpdateWaybillVendorID(bill) + savedOrderInfo.order.WaybillVendorID = bill.WaybillVendorID + } + case model.WaybillStatusDelivering: + if savedOrderInfo.order.VendorID != bill.WaybillVendorID { + s.GetPurchasePlatformFromVendorID(bill.OrderVendorID).SelfDeliverDelievering(savedOrderInfo.order) + } + case model.WaybillStatusDelivered: + if savedOrderInfo.order.VendorID != bill.WaybillVendorID { + s.GetPurchasePlatformFromVendorID(bill.OrderVendorID).SelfDeliverDelievered(savedOrderInfo.order) + } + s.removeWaybillFromMap(savedOrderInfo, bill) } } return nil } -func (s *DefScheduler) addWaybill2Map(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) { +func (s *DefScheduler) addWaybill2Map(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) { for _, v := range savedOrderInfo.waybills { if v.VendorWaybillID == bill.VendorWaybillID && v.WaybillVendorID == bill.WaybillVendorID { // 如果已经存在,不做处理 - globals.SugarLogger.Infof("addWaybill2Map bill:%v already exists", bill) - return nil + // globals.SugarLogger.Infof("addWaybill2Map bill:%v already exists", bill) + return } } savedOrderInfo.waybills = append(savedOrderInfo.waybills, bill) - return nil } func (s *DefScheduler) createWaybillOn3rdProviders(order *model.GoodsOrder, excludeBill *model.Waybill) (err error) { @@ -207,9 +195,7 @@ func (s *DefScheduler) cancelOtherWaybills(savedOrderInfo *WatchOrderInfo, bill func (s *DefScheduler) swtich2SelfDeliverWithRetry(bill *model.Waybill, retryCount int, duration time.Duration) { utils.CallFuncRetryAsync(func(index int) error { err := s.GetPurchasePlatformFromVendorID(bill.OrderVendorID).Swtich2SelfDeliver(bill.VendorOrderID) - if err == nil { - s.removeWaybillFromMap(nil, bill) // todo 是否在这里删除运单,还是在运单事件里处理更好些? - } else if index == 0 { + if err != nil && index == 0 { // 如果购买平台转商家自送失败,最终还是要取消3方物流 s.GetDeliveryPlatformFromVendorID(bill.WaybillVendorID).CancelWaybill(bill) } @@ -276,9 +262,10 @@ func (s *DefScheduler) resetTimer(status int, savedOrderInfo *WatchOrderInfo, ga } else { timeout = jxutils.GetRealTimeout(savedOrderInfo.order.StatusTime, config.Timeout) } + timeout += gap globals.SugarLogger.Debugf("resetTimer timeout:%v, orderid:%v", timeout, savedOrderInfo.order.VendorOrderID) savedOrderInfo.timerStatus = status - savedOrderInfo.timer = time.AfterFunc(timeout+gap, func() { + savedOrderInfo.timer = time.AfterFunc(timeout, func() { config.TimeoutAction(savedOrderInfo.order) }) }