- 防止运单事件反绕,导致连续的取消运单失败,比如运单(282585256173066)
This commit is contained in:
@@ -92,8 +92,12 @@ func (w *OrderManager) OnWaybillStatusChanged(bill *model.Waybill) (err error) {
|
|||||||
panic(r)
|
panic(r)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
duplicatedCount := 0
|
||||||
if bill.Status == model.WaybillStatusNew {
|
if bill.Status == model.WaybillStatusNew {
|
||||||
isDuplicated, err = w.onWaybillNew(bill, db)
|
isDuplicated, err = w.onWaybillNew(bill, db)
|
||||||
|
if isDuplicated {
|
||||||
|
duplicatedCount = 1
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if bill.Status == model.WaybillStatusAccepted { // 处理美团配送丢失新运单消息的情况
|
if bill.Status == model.WaybillStatusAccepted { // 处理美团配送丢失新运单消息的情况
|
||||||
if _, err2 := w.LoadWaybill(bill.VendorWaybillID, bill.WaybillVendorID); err2 != nil {
|
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 {
|
} else if bill.Status >= model.WaybillStatusEndBegin {
|
||||||
addParams["waybill_finished_at"] = bill.StatusTime
|
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 {
|
if err == nil {
|
||||||
dao.Commit(db)
|
dao.Commit(db)
|
||||||
if !isDuplicated {
|
if duplicatedCount == 0 {
|
||||||
scheduler.CurrentScheduler.OnWaybillStatusChanged(bill, false)
|
scheduler.CurrentScheduler.OnWaybillStatusChanged(bill, false)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -155,10 +162,11 @@ func (w *OrderManager) OnWaybillStatusChanged(bill *model.Waybill) (err error) {
|
|||||||
return err
|
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)
|
waybillStatus := model.Waybill2Status(bill)
|
||||||
isDuplicated, err = addOrderOrWaybillStatus(waybillStatus, db)
|
isDuplicated, err := addOrderOrWaybillStatus(waybillStatus, db)
|
||||||
if err == nil && !isDuplicated && waybillStatus.Status > model.WaybillStatusUnknown { // todo 这里应该和addOrderStatus一样的改法,状态不能回绕
|
if err == nil && !isDuplicated {
|
||||||
|
if waybillStatus.Status > model.WaybillStatusUnknown { // todo 这里应该和addOrderStatus一样的改法,状态不能回绕
|
||||||
params := utils.MergeMaps(orm.Params{
|
params := utils.MergeMaps(orm.Params{
|
||||||
"status": bill.Status,
|
"status": bill.Status,
|
||||||
"vendor_status": bill.VendorStatus,
|
"vendor_status": bill.VendorStatus,
|
||||||
@@ -168,8 +176,13 @@ func (w *OrderManager) addWaybillStatus(bill *model.Waybill, db *dao.DaoDB, addP
|
|||||||
_, err = db.Db.QueryTable("waybill").Filter("vendor_waybill_id", bill.VendorWaybillID).Filter("waybill_vendor_id", bill.WaybillVendorID).Filter("status__lte", bill.Status).Update(params)
|
_, 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
|
return err
|
||||||
}, "addWaybillStatus update waybill status, bill:%v", bill)
|
}, "addWaybillStatus update waybill status, bill:%v", bill)
|
||||||
|
} else {
|
||||||
|
duplicatedCount = -1
|
||||||
}
|
}
|
||||||
return isDuplicated, err
|
} else {
|
||||||
|
duplicatedCount = 1
|
||||||
|
}
|
||||||
|
return duplicatedCount, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *OrderManager) LoadWaybill(vendorWaybillID string, waybillVendorID int) (bill *model.Waybill, err error) {
|
func (c *OrderManager) LoadWaybill(vendorWaybillID string, waybillVendorID int) (bill *model.Waybill, err error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user