- handle pending orders and waybills when starting.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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"]), ",")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user