- fix mtps delivery fee bug.

This commit is contained in:
gazebo
2018-07-19 19:12:54 +08:00
parent a56cb64f8e
commit 61157174e6
2 changed files with 37 additions and 50 deletions

View File

@@ -92,7 +92,7 @@ func (c *WaybillController) calculateDeliveryFee(bill *model.Waybill) (retVal in
db := orm.NewOrm() db := orm.NewOrm()
JxStoreID := jxutils.GetJxStoreIDFromOrder(order) JxStoreID := jxutils.GetJxStoreIDFromOrder(order)
num, err := db.Raw(` num, err := db.Raw(`
SELECT t2.price, t2.lng, t2.lat SELECT t2.price, t1.lng, t1.lat
FROM jxstore t1 FROM jxstore t1
JOIN mtpsdeliveryprice t2 ON t2.citycode = t1.area JOIN mtpsdeliveryprice t2 ON t2.citycode = t1.area
WHERE t1.storeid = ? WHERE t1.storeid = ?
@@ -102,7 +102,7 @@ func (c *WaybillController) calculateDeliveryFee(bill *model.Waybill) (retVal in
if err == nil && num == 1 { if err == nil && num == 1 {
delieveryFee = utils.Str2Int64(lists[0][0].(string)) delieveryFee = utils.Str2Int64(lists[0][0].(string))
} else { } 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 return 0
} }

View File

@@ -99,6 +99,7 @@ func (s *DefScheduler) OnOrderStatusChanged(status *model.OrderStatus) (err erro
func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill) (err error) { func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill) (err error) {
globals.SugarLogger.Debugf("OnWaybillStatusChanged, bill:%v", bill) globals.SugarLogger.Debugf("OnWaybillStatusChanged, bill:%v", bill)
savedOrderInfo := s.loadWatchOrderFromMap(bill.VendorOrderID, bill.OrderVendorID) savedOrderInfo := s.loadWatchOrderFromMap(bill.VendorOrderID, bill.OrderVendorID)
s.addWaybill2Map(savedOrderInfo, bill) // 这样写的原因是因为调试时程度从中途运行没有接受到WaybillStatusNew事件
if bill.Status == model.WaybillStatusNew { if bill.Status == model.WaybillStatusNew {
if bill.OrderVendorID == bill.WaybillVendorID { if bill.OrderVendorID == bill.WaybillVendorID {
if savedOrderInfo.timerStatus == model.OrderStatusFinishedPickup { if savedOrderInfo.timerStatus == model.OrderStatusFinishedPickup {
@@ -106,7 +107,6 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill) (err error) {
} else { } else {
globals.SugarLogger.Infof("OnWaybillStatusChanged met other timer, status:%d", savedOrderInfo.timerStatus) globals.SugarLogger.Infof("OnWaybillStatusChanged met other timer, status:%d", savedOrderInfo.timerStatus)
} }
err = s.addWaybill2Map(savedOrderInfo, bill)
} }
if savedOrderInfo.order.WaybillVendorID != model.VendorIDUnknown { if savedOrderInfo.order.WaybillVendorID != model.VendorIDUnknown {
globals.SugarLogger.Infof("OnWaybillStatusChanged multiple waybill created, bill:%v", bill) globals.SugarLogger.Infof("OnWaybillStatusChanged multiple waybill created, bill:%v", bill)
@@ -115,64 +115,52 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill) (err error) {
} }
} }
} else { } else {
findIt := false switch bill.Status {
for _, v := range savedOrderInfo.waybills { case model.WaybillStatusAccepted:
if v.VendorWaybillID == bill.VendorWaybillID && v.WaybillVendorID == bill.WaybillVendorID { s.stopTimer(savedOrderInfo) // todo 这里应该另外启动一个TIMER
findIt = true s.cancelOtherWaybills(savedOrderInfo, bill)
break
}
}
if findIt {
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) s.CurOrderManager.UpdateWaybillVendorID(bill)
savedOrderInfo.order.WaybillVendorID = bill.WaybillVendorID 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 { case model.WaybillStatusCanceled, model.WaybillStatusFailed:
globals.SugarLogger.Infof("OnWaybillStatusChanged can not find bill:%v in saved info", bill) 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 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 { for _, v := range savedOrderInfo.waybills {
if v.VendorWaybillID == bill.VendorWaybillID && v.WaybillVendorID == bill.WaybillVendorID { if v.VendorWaybillID == bill.VendorWaybillID && v.WaybillVendorID == bill.WaybillVendorID {
// 如果已经存在,不做处理 // 如果已经存在,不做处理
globals.SugarLogger.Infof("addWaybill2Map bill:%v already exists", bill) // globals.SugarLogger.Infof("addWaybill2Map bill:%v already exists", bill)
return nil return
} }
} }
savedOrderInfo.waybills = append(savedOrderInfo.waybills, bill) savedOrderInfo.waybills = append(savedOrderInfo.waybills, bill)
return nil
} }
func (s *DefScheduler) createWaybillOn3rdProviders(order *model.GoodsOrder, excludeBill *model.Waybill) (err error) { 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) { func (s *DefScheduler) swtich2SelfDeliverWithRetry(bill *model.Waybill, retryCount int, duration time.Duration) {
utils.CallFuncRetryAsync(func(index int) error { utils.CallFuncRetryAsync(func(index int) error {
err := s.GetPurchasePlatformFromVendorID(bill.OrderVendorID).Swtich2SelfDeliver(bill.VendorOrderID) err := s.GetPurchasePlatformFromVendorID(bill.OrderVendorID).Swtich2SelfDeliver(bill.VendorOrderID)
if err == nil { if err != nil && index == 0 {
s.removeWaybillFromMap(nil, bill) // todo 是否在这里删除运单,还是在运单事件里处理更好些?
} else if index == 0 {
// 如果购买平台转商家自送失败最终还是要取消3方物流 // 如果购买平台转商家自送失败最终还是要取消3方物流
s.GetDeliveryPlatformFromVendorID(bill.WaybillVendorID).CancelWaybill(bill) s.GetDeliveryPlatformFromVendorID(bill.WaybillVendorID).CancelWaybill(bill)
} }
@@ -276,9 +262,10 @@ func (s *DefScheduler) resetTimer(status int, savedOrderInfo *WatchOrderInfo, ga
} else { } else {
timeout = jxutils.GetRealTimeout(savedOrderInfo.order.StatusTime, config.Timeout) timeout = jxutils.GetRealTimeout(savedOrderInfo.order.StatusTime, config.Timeout)
} }
timeout += gap
globals.SugarLogger.Debugf("resetTimer timeout:%v, orderid:%v", timeout, savedOrderInfo.order.VendorOrderID) globals.SugarLogger.Debugf("resetTimer timeout:%v, orderid:%v", timeout, savedOrderInfo.order.VendorOrderID)
savedOrderInfo.timerStatus = status savedOrderInfo.timerStatus = status
savedOrderInfo.timer = time.AfterFunc(timeout+gap, func() { savedOrderInfo.timer = time.AfterFunc(timeout, func() {
config.TimeoutAction(savedOrderInfo.order) config.TimeoutAction(savedOrderInfo.order)
}) })
} }