- refactor

- load pending orders, fixed bug.
This commit is contained in:
gazebo
2018-07-22 00:19:38 +08:00
parent b9e59e1197
commit 77c1dd07b5
18 changed files with 168 additions and 145 deletions

View File

@@ -19,7 +19,7 @@ func NewWaybillManager() *WaybillController {
return &WaybillController{}
}
func (w *WaybillController) LoadPendingWaybills() {
func (w *WaybillController) LoadPendingWaybills() []*model.Waybill {
db := orm.NewOrm()
var bills []*model.Waybill
_, err := db.Raw(`
@@ -36,29 +36,17 @@ func (w *WaybillController) LoadPendingWaybills() {
time.Now().Add(-pendingOrderGapMax), model.WaybillStatusEndBegin).QueryRows(&bills)
if err != nil {
globals.SugarLogger.Warnf("init load pending waybills error:%v", err)
return
}
globals.SugarLogger.Info(len(bills))
for _, v := range bills {
v2 := v
routinePool.CallFunAsync(func() {
if v2.Status != model.WaybillStatusNew {
savedStatus := v2.Status
v2.Status = model.WaybillStatusNew
scheduler.CurrentScheduler.OnWaybillStatusChanged(v2)
v2.Status = savedStatus
}
scheduler.CurrentScheduler.OnWaybillStatusChanged(v2)
}, v2.VendorOrderID)
return nil
}
return bills
}
func (w *WaybillController) onWaybillNew(bill *model.Waybill) (err error) {
db := orm.NewOrm()
isDuplicated, err := addOrderOrWaybillStatus(model.Waybill2Status(bill), db)
if !isDuplicated {
bill.WaybillFinishedAt = utils.DefaultTimeValue
func (w *WaybillController) onWaybillNew(bill *model.Waybill, db orm.Ormer) (isDuplicated bool, err error) {
isDuplicated, err = addOrderOrWaybillStatus(model.Waybill2Status(bill), db)
if err == nil && !isDuplicated {
bill.ID = 0
bill.WaybillCreatedAt = bill.StatusTime
bill.WaybillFinishedAt = utils.DefaultTimeValue
created, _, err2 := db.ReadOrCreate(bill, "VendorWaybillID", "WaybillVendorID")
if err = err2; err == nil {
if !created {
@@ -66,54 +54,36 @@ func (w *WaybillController) onWaybillNew(bill *model.Waybill) (err error) {
db.Update(bill, "DuplicatedCount")
globals.SugarLogger.Infof("duplicated bill:%v vendorID:%d, msg received", bill.VendorWaybillID, bill.WaybillVendorID)
}
err = scheduler.CurrentScheduler.OnWaybillStatusChanged(bill)
if globals.HandleLegacyJxOrder {
w.legacyWaybillStatusChanged(bill, db)
}
} else {
globals.SugarLogger.Warnf("create bill:%v, error:%v", bill, err)
}
}
return err
return isDuplicated, err
}
func (w *WaybillController) OnWaybillStatusChanged(bill *model.Waybill) (err error) {
var isDuplicated bool
db := orm.NewOrm()
if bill.Status == model.WaybillStatusNew {
err = w.onWaybillNew(bill)
} else if bill.Status == model.WaybillStatusAccepted {
err = w.onWaybillAccepted(bill)
isDuplicated, err = w.onWaybillNew(bill, db)
} else {
db := orm.NewOrm()
isDuplicated, err2 := w.addWaybillStatus(bill, db)
if err = err2; err == nil && !isDuplicated {
err = scheduler.CurrentScheduler.OnWaybillStatusChanged(bill)
if globals.HandleLegacyJxOrder {
w.legacyWaybillStatusChanged(bill, db)
var addParams orm.Params
if bill.Status == model.WaybillStatusAccepted {
addParams = orm.Params{
"courier_name": bill.CourierName,
"courier_mobile": bill.CourierMobile,
"desired_fee": bill.DesiredFee,
}
}
isDuplicated, err = w.addWaybillStatus(bill, db, addParams)
}
if bill.Status == model.WaybillStatusAccepted || bill.Status == model.WaybillStatusDelivered {
if order, err2 := OrderManager.LoadOrder(bill.VendorOrderID, bill.OrderVendorID); err2 == nil {
weixinmsg.NotifyWaybillStatus(bill, order)
if err == nil && !isDuplicated {
scheduler.CurrentScheduler.OnWaybillStatusChanged(bill)
if bill.Status == model.WaybillStatusAccepted || bill.Status == model.WaybillStatusDelivered {
if order, err2 := OrderManager.LoadOrder(bill.VendorOrderID, bill.OrderVendorID); err2 == nil {
weixinmsg.NotifyWaybillStatus(bill, order)
}
}
}
return err
}
func (w *WaybillController) onWaybillAccepted(bill *model.Waybill) (err error) {
db := orm.NewOrm()
isDuplicated, err := w.addWaybillStatus(bill, db)
if !isDuplicated {
params := orm.Params{
"courier_name": bill.CourierName,
"courier_mobile": bill.CourierMobile,
"desired_fee": bill.DesiredFee,
}
utils.CallFuncLogError(func() error {
_, err = db.QueryTable("waybill").Filter("vendor_waybill_id", bill.VendorWaybillID).Filter("waybill_vendor_id", bill.WaybillVendorID).Update(params)
return err
}, "update waybill courier info")
err = scheduler.CurrentScheduler.OnWaybillStatusChanged(bill)
if globals.HandleLegacyJxOrder {
w.legacyWaybillStatusChanged(bill, db)
}
@@ -121,19 +91,17 @@ func (w *WaybillController) onWaybillAccepted(bill *model.Waybill) (err error) {
return err
}
func (w *WaybillController) addWaybillStatus(bill *model.Waybill, db orm.Ormer) (isDuplicated bool, err error) {
if db == nil {
db = orm.NewOrm()
}
func (w *WaybillController) addWaybillStatus(bill *model.Waybill, db orm.Ormer, addParams orm.Params) (isDuplicated bool, err error) {
waybillStatus := model.Waybill2Status(bill)
isDuplicated, err = addOrderOrWaybillStatus(waybillStatus, db)
if !isDuplicated && waybillStatus.Status > model.WaybillStatusNew {
params := orm.Params{
if err == nil && !isDuplicated && waybillStatus.Status > model.WaybillStatusNew {
params := utils.MergeMaps(orm.Params{
"status": bill.Status,
"vendor_status": bill.VendorStatus,
}
"status_time": bill.StatusTime,
}, addParams)
if bill.Status >= model.WaybillStatusEndBegin {
params["waybill_finished_at"] = bill.WaybillCreatedAt
params["waybill_finished_at"] = bill.StatusTime
}
utils.CallFuncLogError(func() error {
_, err = db.QueryTable("waybill").Filter("vendor_waybill_id", bill.VendorWaybillID).Filter("waybill_vendor_id", bill.WaybillVendorID).Update(params)