From 132e6a9fd72bf246231f18c02f94110b45057be2 Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 22 May 2019 14:52:36 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E9=98=B2=E6=AD=A2=E8=BF=90=E5=8D=95?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E5=8F=8D=E7=BB=95=EF=BC=8C=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E8=BF=9E=E7=BB=AD=E7=9A=84=E5=8F=96=E6=B6=88=E8=BF=90=E5=8D=95?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=EF=BC=8C=E6=AF=94=E5=A6=82=E8=BF=90=E5=8D=95?= =?UTF-8?q?=EF=BC=88282585256173066=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/waybill.go | 43 ++++++++++++++++--------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/business/jxcallback/orderman/waybill.go b/business/jxcallback/orderman/waybill.go index 6a95a8c79..64bc2cc1a 100644 --- a/business/jxcallback/orderman/waybill.go +++ b/business/jxcallback/orderman/waybill.go @@ -92,8 +92,12 @@ func (w *OrderManager) OnWaybillStatusChanged(bill *model.Waybill) (err error) { panic(r) } }() + duplicatedCount := 0 if bill.Status == model.WaybillStatusNew { isDuplicated, err = w.onWaybillNew(bill, db) + if isDuplicated { + duplicatedCount = 1 + } } else { if bill.Status == model.WaybillStatusAccepted { // 处理美团配送丢失新运单消息的情况 if _, err2 := w.LoadWaybill(bill.VendorWaybillID, bill.WaybillVendorID); err2 != nil { @@ -126,11 +130,14 @@ func (w *OrderManager) OnWaybillStatusChanged(bill *model.Waybill) (err error) { } else if bill.Status >= model.WaybillStatusEndBegin { addParams["waybill_finished_at"] = bill.StatusTime } - isDuplicated, err = w.addWaybillStatus(bill, db, addParams) + duplicatedCount, err = w.addWaybillStatus(bill, db, addParams) + if err != nil { + return err + } } if err == nil { dao.Commit(db) - if !isDuplicated { + if duplicatedCount == 0 { scheduler.CurrentScheduler.OnWaybillStatusChanged(bill, false) } } else { @@ -155,21 +162,27 @@ func (w *OrderManager) OnWaybillStatusChanged(bill *model.Waybill) (err error) { return err } -func (w *OrderManager) addWaybillStatus(bill *model.Waybill, db *dao.DaoDB, addParams orm.Params) (isDuplicated bool, err error) { +func (w *OrderManager) addWaybillStatus(bill *model.Waybill, db *dao.DaoDB, addParams orm.Params) (duplicatedCount int, err error) { waybillStatus := model.Waybill2Status(bill) - isDuplicated, err = addOrderOrWaybillStatus(waybillStatus, db) - if err == nil && !isDuplicated && waybillStatus.Status > model.WaybillStatusUnknown { // todo 这里应该和addOrderStatus一样的改法,状态不能回绕 - params := utils.MergeMaps(orm.Params{ - "status": bill.Status, - "vendor_status": bill.VendorStatus, - "status_time": bill.StatusTime, - }, addParams) - utils.CallFuncLogError(func() error { - _, err = db.Db.QueryTable("waybill").Filter("vendor_waybill_id", bill.VendorWaybillID).Filter("waybill_vendor_id", bill.WaybillVendorID).Filter("status__lte", bill.Status).Update(params) - return err - }, "addWaybillStatus update waybill status, bill:%v", bill) + isDuplicated, err := addOrderOrWaybillStatus(waybillStatus, db) + if err == nil && !isDuplicated { + if waybillStatus.Status > model.WaybillStatusUnknown { // todo 这里应该和addOrderStatus一样的改法,状态不能回绕 + params := utils.MergeMaps(orm.Params{ + "status": bill.Status, + "vendor_status": bill.VendorStatus, + "status_time": bill.StatusTime, + }, addParams) + utils.CallFuncLogError(func() error { + _, err = db.Db.QueryTable("waybill").Filter("vendor_waybill_id", bill.VendorWaybillID).Filter("waybill_vendor_id", bill.WaybillVendorID).Filter("status__lte", bill.Status).Update(params) + return err + }, "addWaybillStatus update waybill status, bill:%v", bill) + } else { + duplicatedCount = -1 + } + } else { + duplicatedCount = 1 } - return isDuplicated, err + return duplicatedCount, err } func (c *OrderManager) LoadWaybill(vendorWaybillID string, waybillVendorID int) (bill *model.Waybill, err error) {