- fix bug in onWaybillNew, jd and elm self waybillID always as orderID

This commit is contained in:
gazebo
2018-07-27 15:06:51 +08:00
parent be1ee10fe6
commit 7ac054afed
3 changed files with 26 additions and 13 deletions

View File

@@ -56,7 +56,7 @@ func (c *OrderController) OnOrderNew(order *model.GoodsOrder, msgVendorStatus st
status.VendorStatus = msgVendorStatus
isDuplicated, err := addOrderOrWaybillStatus(status, db)
if err == nil && !isDuplicated {
if err = c.saveOrder(order, false, db); err == nil {
if isDuplicated, err = c.saveOrder(order, false, db); err == nil && !isDuplicated {
err = scheduler.CurrentScheduler.OnOrderNew(order, false)
weixinmsg.NotifyNewOrder(order)
}
@@ -89,7 +89,7 @@ func (c *OrderController) OnOrderAdjust(order *model.GoodsOrder, msgVendorStatus
if err != nil {
return err
}
if err = c.saveOrder(order, true, db); err == nil {
if isDuplicated, err = c.saveOrder(order, true, db); err == nil && !isDuplicated {
// 因为订单调度器需要的是真实状态所以用order的状态
err = scheduler.CurrentScheduler.OnOrderNew(order, false)
err = scheduler.CurrentScheduler.OnOrderStatusChanged(model.Order2Status(order), false)
@@ -111,7 +111,7 @@ func (c *OrderController) OnOrderStatusChanged(orderStatus *model.OrderStatus) (
}
// private
func (c *OrderController) saveOrder(order *model.GoodsOrder, isAdjust bool, db orm.Ormer) (err error) {
func (c *OrderController) saveOrder(order *model.GoodsOrder, isAdjust bool, db orm.Ormer) (isDuplicated bool, err error) {
// 忽略查找JX信息错误
c.updateOrderOtherInfo(order, db)
order.ID = 0
@@ -157,6 +157,7 @@ func (c *OrderController) saveOrder(order *model.GoodsOrder, isAdjust bool, db o
}
}
} else {
isDuplicated = true
order.DuplicatedCount++
db.Update(order, "DuplicatedCount")
db.Commit()
@@ -166,7 +167,7 @@ func (c *OrderController) saveOrder(order *model.GoodsOrder, isAdjust bool, db o
db.Rollback()
globals.SugarLogger.Warnf("saveOrder create order:%v, error:%v", order, err)
}
return err
return isDuplicated, err
}
func (c *OrderController) updateOrderSkuOtherInfo(orderSkus []*model.OrderSku, db orm.Ormer) (err error) {

View File

@@ -40,22 +40,33 @@ func (w *WaybillController) LoadPendingWaybills() []*model.Waybill {
return bills
}
func (w *WaybillController) onWaybillNew(bill *model.Waybill, db orm.Ormer) (isDuplicated bool, err error) {
isDuplicated, err = addOrderOrWaybillStatus(model.Waybill2Status(bill), db)
func (w *WaybillController) onWaybillNew(bill2 *model.Waybill, db orm.Ormer) (isDuplicated bool, err error) {
globals.SugarLogger.Debugf("onWaybillNew bill:%v", bill2)
isDuplicated, err = addOrderOrWaybillStatus(model.Waybill2Status(bill2), db)
if err == nil && !isDuplicated {
bill.ID = 0
bill.WaybillCreatedAt = bill.StatusTime
bill.WaybillFinishedAt = utils.DefaultTimeValue
globals.SugarLogger.Debugf("onWaybillNew bill:%v", bill)
bill2.ID = 0
bill2.WaybillCreatedAt = bill2.StatusTime
bill2.WaybillFinishedAt = utils.DefaultTimeValue
billCopied := *bill2
bill := &billCopied
created, _, err2 := db.ReadOrCreate(bill, "VendorWaybillID", "WaybillVendorID")
if err = err2; err == nil {
if !created {
bill.DuplicatedCount++
db.Update(bill, "DuplicatedCount")
globals.SugarLogger.Infof("onWaybillNew duplicated bill:%v msg received", bill)
if bill2.VendorOrderID == bill2.VendorWaybillID { // 购物平台(比如京东)重新建的运单,单号始终是与订单相同的
bill2.ID = bill.ID
bill2.DuplicatedCount = bill.DuplicatedCount
db.Update(bill2) //更新所有字段
} else {
db.Update(bill, "DuplicatedCount")
isDuplicated = true
globals.SugarLogger.Infof("onWaybillNew duplicated bill:%v msg received", bill2)
}
} else {
*bill2 = *bill
}
} else {
globals.SugarLogger.Warnf("onWaybillNew create bill:%v, error:%v", bill, err)
globals.SugarLogger.Warnf("onWaybillNew create bill:%v, error:%v", bill2, err)
}
}
return isDuplicated, err

View File

@@ -243,6 +243,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
func (s *DefScheduler) addWaybill2Map(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) {
for _, v := range savedOrderInfo.waybills {
if v.VendorWaybillID == bill.VendorWaybillID && v.WaybillVendorID == bill.WaybillVendorID {
*v = *bill // 同步数据
// 如果已经存在,不做处理
globals.SugarLogger.Warnf("addWaybill2Map bill:%v already exists", bill)
return