- first compilable version of order handler.
This commit is contained in:
111
business/controller/waybill.go
Normal file
111
business/controller/waybill.go
Normal file
@@ -0,0 +1,111 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"git.rosy.net.cn/baseapi"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
"github.com/astaxie/beego/orm"
|
||||
)
|
||||
|
||||
const (
|
||||
WaybillStatusUnknown = 0
|
||||
|
||||
WaybillStatusNew = 5
|
||||
WaybillStatusAccepted = 10
|
||||
WaybillStatusDelivering = 20
|
||||
|
||||
WaybillStatusDelivered = 105
|
||||
WaybillStatusCanceled = 115
|
||||
WaybillStatusFailed = 120
|
||||
)
|
||||
|
||||
type WaybillController struct {
|
||||
}
|
||||
|
||||
var (
|
||||
WaybillMap SyncMapWithTimeout
|
||||
)
|
||||
|
||||
func (w *WaybillController) OnWaybillNew(bill *model.Waybill) (err error) {
|
||||
db := orm.NewOrm()
|
||||
bill.Status = WaybillStatusNew
|
||||
created, _, err := db.ReadOrCreate(bill, "VendorWaybillID", "WaybillVendorID")
|
||||
if err == nil {
|
||||
WaybillMap.Store(ComposeUniversalOrderID(bill.VendorWaybillID, bill.WaybillVendorID), bill.ID)
|
||||
if !created {
|
||||
baseapi.SugarLogger.Warnf("duplicated waybill:%v msg received", bill)
|
||||
}
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (w *WaybillController) OnWaybillAccepted(msg *model.OrderStatus) (err error) {
|
||||
msg.Status = WaybillStatusAccepted
|
||||
return w.addWaybillStatus(msg)
|
||||
}
|
||||
|
||||
func (w *WaybillController) OnWaybillAcceptCanceled(msg *model.OrderStatus) (err error) {
|
||||
msg.Status = WaybillStatusNew
|
||||
return w.addWaybillStatus(msg)
|
||||
}
|
||||
|
||||
func (w *WaybillController) OnWaybillDelivering(msg *model.OrderStatus) (err error) {
|
||||
msg.Status = WaybillStatusDelivering
|
||||
return w.addWaybillStatus(msg)
|
||||
}
|
||||
|
||||
func (w *WaybillController) OnWaybillDelivered(msg *model.OrderStatus) (err error) {
|
||||
msg.Status = WaybillStatusDelivered
|
||||
return w.addWaybillStatus(msg)
|
||||
}
|
||||
|
||||
func (w *WaybillController) OnWaybillCanceled(msg *model.OrderStatus) (err error) {
|
||||
msg.Status = WaybillStatusCanceled
|
||||
return w.addWaybillStatus(msg)
|
||||
}
|
||||
|
||||
func (w *WaybillController) OnWaybillFailed(msg *model.OrderStatus) (err error) {
|
||||
msg.Status = WaybillStatusFailed
|
||||
return w.addWaybillStatus(msg)
|
||||
}
|
||||
|
||||
func (w *WaybillController) OnWaybillOtherStatus(msg *model.OrderStatus) (err error) {
|
||||
msg.Status = OrderStatusEvent
|
||||
return w.addWaybillStatus(msg)
|
||||
}
|
||||
|
||||
func (w *WaybillController) addWaybillStatus(msg *model.OrderStatus) (err error) {
|
||||
order := &model.Waybill{
|
||||
VendorWaybillID: msg.VendorOrderID,
|
||||
WaybillVendorID: msg.VendorID,
|
||||
}
|
||||
db := orm.NewOrm()
|
||||
value, ok := OrderMap.Load(ComposeUniversalOrderID(msg.VendorOrderID, msg.VendorID))
|
||||
if !ok {
|
||||
globals.SugarLogger.Warnf("can not get order:%v, from cache", order)
|
||||
err = db.Read(order, "VendorWaybillID", "WaybillVendorID")
|
||||
} else {
|
||||
order.ID = value.(int64)
|
||||
}
|
||||
|
||||
if err == nil {
|
||||
if msg.Status != OrderStatusEvent {
|
||||
order.Status = msg.Status
|
||||
utils.CallFuncLogError(func() error {
|
||||
columns := []string{"Status"}
|
||||
if msg.Status >= OrderStatusDelivered {
|
||||
order.WaybillFinishedAt = msg.StatusTime
|
||||
columns = append(columns, "WaybillFinishedAt")
|
||||
}
|
||||
_, err := db.Update(order, columns...)
|
||||
return err
|
||||
}, "update order")
|
||||
}
|
||||
utils.CallFuncLogError(func() error {
|
||||
_, err := db.Insert(msg)
|
||||
return err
|
||||
}, "insert status")
|
||||
}
|
||||
return err
|
||||
}
|
||||
Reference in New Issue
Block a user