- handle pending orders and waybills when starting.

This commit is contained in:
gazebo
2018-07-21 12:57:20 +08:00
parent 65eeef9966
commit 1958f24705
12 changed files with 134 additions and 50 deletions

View File

@@ -2,6 +2,7 @@ package controller
import (
"fmt"
"time"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/baseapi/utils/routinepool"
@@ -12,6 +13,10 @@ import (
"github.com/astaxie/beego/orm"
)
const (
pendingOrderGapMax = 2 * 24 * time.Hour // 每次重启机子时,要检查几天内的订单状态
)
var (
OrderManager *OrderController
WaybillManager *WaybillController

View File

@@ -142,6 +142,7 @@ func (c *OrderController) getOrderInfo(orderID string) (order *model.GoodsOrder,
OrderSeq: int(utils.MustInterface2Int64(result["daySn"])),
OrderCreatedAt: utils.Str2Time(result["createdAt"].(string)),
OriginalData: utils.FilterMb4(string(utils.MustMarshal(result))),
ActualPayPrice: jxutils.StandardPrice2Int(utils.MustInterface2Float64(result["totalPrice"])),
Skus: []*model.OrderSku{},
}
deliveryGeo := strings.Split(utils.Interface2String(result["deliveryGeo"]), ",")

View File

@@ -81,6 +81,7 @@ func (c *OrderController) getOrderInfo(msg *jdapi.CallbackOrderMsg) (order *mode
OrderSeq: int(utils.MustInterface2Int64(result["orderNum"])),
OrderCreatedAt: utils.Str2Time(result["orderStartTime"].(string)),
OriginalData: utils.FilterMb4(string(utils.MustMarshal(result))),
ActualPayPrice: utils.MustInterface2Int64(result["orderBuyerPayableMoney"]),
Skus: []*model.OrderSku{},
}
coordinateType := utils.Interface2Int64WithDefault(result["buyerCoordType"], 1)
@@ -166,7 +167,7 @@ func (c *OrderController) callbackMsg2Status(msg *jdapi.CallbackOrderMsg) *model
// PurchasePlatformHandler
func (c *OrderController) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptIt bool) (err error) {
globals.SugarLogger.Infof("AcceptOrRefuseOrder order:%v", order)
globals.SugarLogger.Infof("AcceptOrRefuseOrder order:%v", order.VendorOrderID)
return nil
_, err = api.JdAPI.OrderAcceptOperate(order.VendorOrderID, isAcceptIt)

View File

@@ -2,6 +2,7 @@ package controller
import (
"fmt"
"time"
"git.rosy.net.cn/jx-callback/business/scheduler"
@@ -21,6 +22,29 @@ func NewOrderManager() *OrderController {
return &OrderController{}
}
func (c *OrderController) LoadPendingOrders() {
db := orm.NewOrm()
var orders []*model.GoodsOrder
_, err := db.Raw(`
SELECT *
FROM goods_order
WHERE order_created_at >= ?
AND status < ?
ORDER by order_created_at
`, time.Now().Add(-pendingOrderGapMax), model.OrderStatusEndBegin).QueryRows(&orders)
if err != nil {
globals.SugarLogger.Warnf("init load pending orders error:%v", err)
return
}
globals.SugarLogger.Info(len(orders))
for _, v := range orders {
v2 := v
routinePool.CallFunAsync(func() {
scheduler.CurrentScheduler.OnOrderNew(v2)
}, v2.VendorOrderID)
}
}
func (c *OrderController) OnOrderNew(order *model.GoodsOrder) (err error) {
db := orm.NewOrm()
order.StatusTime = order.OrderCreatedAt

View File

@@ -1,6 +1,8 @@
package controller
import (
"time"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils/weixinmsg"
"git.rosy.net.cn/jx-callback/business/model"
@@ -17,6 +19,40 @@ func NewWaybillManager() *WaybillController {
return &WaybillController{}
}
func (w *WaybillController) LoadPendingWaybills() {
db := orm.NewOrm()
var bills []*model.Waybill
_, err := db.Raw(`
SELECT t1.*
FROM waybill t1
JOIN goods_order t2 ON t2.vendor_order_id = t1.vendor_order_id
AND t2.vendor_id = t1.order_vendor_id
AND t2.order_created_at >= ?
AND t2.status < ?
WHERE waybill_created_at >= ?
AND t1.status < ?
ORDER by waybill_created_at
`, time.Now().Add(-pendingOrderGapMax), model.WaybillStatusEndBegin,
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)
}
}
func (w *WaybillController) onWaybillNew(bill *model.Waybill) (err error) {
db := orm.NewOrm()
isDuplicated, err := addOrderOrWaybillStatus(model.Waybill2Status(bill), db)