- write legacy jxoder almost ok.

This commit is contained in:
gazebo
2018-07-17 18:01:49 +08:00
parent 77d1ea1d77
commit f9096a7b17
14 changed files with 342 additions and 272 deletions

View File

@@ -3,13 +3,13 @@ package controller
import (
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/scheduler"
"git.rosy.net.cn/jx-callback/globals"
"github.com/astaxie/beego/orm"
)
// 所有公共接口调用前要求在order里或status中设置合适的Status
type WaybillController struct {
WaybillMap SyncMapWithTimeout
}
func NewWaybillManager() *WaybillController {
@@ -24,13 +24,15 @@ func (w *WaybillController) onWaybillNew(bill *model.Waybill) (err error) {
bill.ID = 0
created, _, err2 := db.ReadOrCreate(bill, "VendorWaybillID", "WaybillVendorID")
if err = err2; err == nil {
w.WaybillMap.Store(ComposeUniversalOrderID(bill.VendorWaybillID, bill.WaybillVendorID), bill.ID)
if !created {
bill.DuplicatedCount++
db.Update(bill, "DuplicatedCount")
globals.SugarLogger.Infof("duplicated bill:%v vendorID:%d, msg received", bill.VendorWaybillID, bill.WaybillVendorID)
}
err = OrderManager.OnWaybillStatusChanged(bill, db)
err = scheduler.CurrentScheduler.OnWaybillStatusChanged(bill)
if globals.HandleLegacyJxOrder {
w.legacyWaybillStatusChanged(bill, db)
}
} else {
globals.SugarLogger.Warnf("create bill:%v, error:%v", bill, err)
}
@@ -47,7 +49,10 @@ func (w *WaybillController) OnWaybillStatusChanged(bill *model.Waybill) (err err
db := orm.NewOrm()
isDuplicated, err2 := w.addWaybillStatus(bill, db)
if err = err2; err == nil && !isDuplicated {
err = OrderManager.OnWaybillStatusChanged(bill, db)
err = scheduler.CurrentScheduler.OnWaybillStatusChanged(bill)
if globals.HandleLegacyJxOrder {
w.legacyWaybillStatusChanged(bill, db)
}
}
}
return err
@@ -57,14 +62,17 @@ func (w *WaybillController) onWaybillAccepted(bill *model.Waybill) (err error) {
db := orm.NewOrm()
isDuplicated, err := w.addWaybillStatus(bill, db)
if !isDuplicated {
if err = w.updateWaybillPKID(bill, db); err == nil {
utils.CallFuncLogError(func() error {
_, err = db.Update(bill, "CourierName", "CourierMobile")
return err
}, "update waybill info")
if err == nil {
err = OrderManager.OnWaybillStatusChanged(bill, db)
}
params := orm.Params{
"courier_name": bill.CourierName,
"courier_mobile": bill.CourierMobile,
}
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)
}
}
return err
@@ -76,46 +84,32 @@ func (w *WaybillController) addWaybillStatus(bill *model.Waybill, db orm.Ormer)
}
waybillStatus := w.waybill2Status(bill)
isDuplicated, err = addOrderOrWaybillStatus(waybillStatus, db)
if !isDuplicated && waybillStatus.Status > model.WaybillStatusUnknown {
if err = w.updateWaybillPKID(bill, db); err == nil {
bill.Status = waybillStatus.Status
bill.VendorStatus = waybillStatus.VendorStatus
utils.CallFuncLogError(func() error {
columns := []string{"Status", "VendorStatus"}
if waybillStatus.Status >= model.OrderStatusEndBegin {
bill.WaybillFinishedAt = waybillStatus.StatusTime
columns = append(columns, "WaybillFinishedAt")
}
_, err = db.Update(bill, columns...)
return err
}, "update waybill")
if !isDuplicated && waybillStatus.Status > model.WaybillStatusNew {
params := orm.Params{
"status": bill.Status,
"vendor_status": bill.VendorStatus,
}
if bill.Status >= model.WaybillStatusEndBegin {
params["waybill_finished_at"] = bill.WaybillCreatedAt
}
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 status")
}
return isDuplicated, err
}
func (w *WaybillController) waybill2Status(bill *model.Waybill) (retVal *model.OrderStatus) {
retVal = &model.OrderStatus{
VendorOrderID: bill.VendorWaybillID,
VendorID: bill.WaybillVendorID,
OrderType: model.OrderTypeWaybill,
Status: bill.Status,
VendorStatus: bill.VendorStatus,
StatusTime: bill.WaybillCreatedAt,
VendorOrderID: bill.VendorWaybillID,
VendorID: bill.WaybillVendorID,
OrderType: model.OrderTypeWaybill,
RefVendorOrderID: bill.VendorOrderID,
RefVendorID: bill.OrderVendorID,
Status: bill.Status,
VendorStatus: bill.VendorStatus,
StatusTime: bill.WaybillCreatedAt,
}
return retVal
}
func (w *WaybillController) updateWaybillPKID(bill *model.Waybill, db orm.Ormer) (err error) {
if value, ok := w.WaybillMap.Load(ComposeUniversalOrderID(bill.VendorWaybillID, bill.WaybillVendorID)); !ok {
err = db.Read(bill, "VendorWaybillID", "WaybillVendorID")
// todo 这里应该要报警,但测试阶段先去掉
// utils.CallFuncLogError(func() error {
// err = db.Read(bill, "VendorWaybillID", "WaybillVendorID")
// return err
// }, "can not get waybill info from db")
} else {
bill.ID = value.(int64)
}
return err
}