- refactor
- load pending orders, fixed bug.
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user