- timer task shceuled to order goroutine to avoid concurrent problem.

This commit is contained in:
gazebo
2018-07-22 23:11:20 +08:00
parent 52ac5ca64a
commit ae214d38b9
10 changed files with 55 additions and 32 deletions

View File

@@ -5,7 +5,7 @@ import (
"time"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/baseapi/utils/routinepool"
"git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/scheduler"
_ "git.rosy.net.cn/jx-callback/business/scheduler/defsch" // 导入缺省订单调度器
@@ -20,11 +20,9 @@ const (
var (
OrderManager *OrderController
WaybillManager *WaybillController
routinePool *routinepool.Pool
)
func init() {
routinePool = routinepool.New(1000, 1000)
OrderManager = NewOrderManager()
WaybillManager = NewWaybillManager()
scheduler.CurrentScheduler.RegisterOrderManager(OrderManager)
@@ -51,13 +49,6 @@ func addOrderOrWaybillStatus(status *model.OrderStatus, db orm.Ormer) (isDuplica
return isDuplicated, err
}
func CallMsgHandler(handler func(), primaryID string) {
// handler()
routinePool.CallFun(func() {
handler()
}, primaryID)
}
func GetDataCityCodeFromOrder(order *model.GoodsOrder) (retVal string, err error) {
var sql string
if order.VendorID == model.VendorIDJD {
@@ -110,47 +101,47 @@ func LoadPendingOrders() {
orderNew := *order
orderNew.Status = model.OrderStatusNew
orderNew.StatusTime = order.OrderCreatedAt
routinePool.CallFunAsync(func() {
jxutils.CallMsgHandlerAsync(func() {
scheduler.CurrentScheduler.OnOrderNew(&orderNew)
}, order.VendorOrderID)
for _, bill := range billsMap[order.VendorOrderID] {
if order.Status > model.OrderStatusNew && !isNoNewSent && order.StatusTime.Sub(bill.WaybillCreatedAt) < 0 {
isNoNewSent = true
order2 := *order
routinePool.CallFunAsync(func() {
jxutils.CallMsgHandlerAsync(func() {
scheduler.CurrentScheduler.OnOrderStatusChanged(model.Order2Status(&order2))
}, order.VendorOrderID)
}
billNew := *bill
billNew.Status = model.OrderStatusNew
billNew.StatusTime = order.OrderCreatedAt
routinePool.CallFunAsync(func() {
jxutils.CallMsgHandlerAsync(func() {
scheduler.CurrentScheduler.OnWaybillStatusChanged(&billNew)
}, bill.VendorOrderID)
if order.Status > model.OrderStatusNew && !isNoNewSent && order.StatusTime.Sub(bill.StatusTime) < 0 {
isNoNewSent = true
order2 := *order
routinePool.CallFunAsync(func() {
jxutils.CallMsgHandlerAsync(func() {
scheduler.CurrentScheduler.OnOrderStatusChanged(model.Order2Status(&order2))
}, order.VendorOrderID)
}
if bill.Status > model.WaybillStatusNew {
bill2 := *bill
routinePool.CallFunAsync(func() {
jxutils.CallMsgHandlerAsync(func() {
scheduler.CurrentScheduler.OnWaybillStatusChanged(&bill2)
}, bill.VendorOrderID)
}
if order.Status > model.OrderStatusNew && !isNoNewSent {
isNoNewSent = true
order2 := *order
routinePool.CallFunAsync(func() {
jxutils.CallMsgHandlerAsync(func() {
scheduler.CurrentScheduler.OnOrderStatusChanged(model.Order2Status(&order2))
}, order.VendorOrderID)
}
}
if order.Status > model.OrderStatusNew && !isNoNewSent {
order2 := *order
routinePool.CallFunAsync(func() {
jxutils.CallMsgHandlerAsync(func() {
scheduler.CurrentScheduler.OnOrderStatusChanged(model.Order2Status(&order2))
}, order.VendorOrderID)
}