diff --git a/business/controller/order.go b/business/controller/order.go index 48b2061ae..facd39d29 100644 --- a/business/controller/order.go +++ b/business/controller/order.go @@ -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) { diff --git a/business/controller/waybill.go b/business/controller/waybill.go index 58484ee7a..c079f5fca 100644 --- a/business/controller/waybill.go +++ b/business/controller/waybill.go @@ -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 diff --git a/business/scheduler/defsch/defsch.go b/business/scheduler/defsch/defsch.go index ae74dac50..9487c08db 100644 --- a/business/scheduler/defsch/defsch.go +++ b/business/scheduler/defsch/defsch.go @@ -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