- jxstorefeature support added.
This commit is contained in:
@@ -9,7 +9,6 @@ import (
|
||||
"git.rosy.net.cn/jx-callback/business/controller"
|
||||
"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/globals"
|
||||
"git.rosy.net.cn/jx-callback/globals/api"
|
||||
"github.com/astaxie/beego/orm"
|
||||
@@ -23,7 +22,7 @@ type WaybillController struct {
|
||||
}
|
||||
|
||||
func init() {
|
||||
scheduler.CurrentScheduler.RegisterDeliveryPlatform(model.VendorIDDada, new(WaybillController))
|
||||
//scheduler.CurrentScheduler.RegisterDeliveryPlatform(model.VendorIDDada, new(WaybillController))
|
||||
}
|
||||
|
||||
func (c *WaybillController) OnWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaapi.CallbackResponse) {
|
||||
|
||||
@@ -8,7 +8,6 @@ import (
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/controller"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
"git.rosy.net.cn/jx-callback/business/legacyorder"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/business/scheduler"
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
@@ -198,16 +197,10 @@ func (c *WaybillController) CancelWaybill(bill *model.Waybill) (err error) {
|
||||
return nil
|
||||
}
|
||||
|
||||
// todo 生成mtps deliveryid,为了兼容,现在取jxorder中的id
|
||||
func (c *WaybillController) getDeliveryID(order *model.GoodsOrder, db orm.Ormer) (retVal int64, err error) {
|
||||
jxorder := &legacyorder.Jxorder2{
|
||||
OrderId: utils.Str2Int64(order.VendorOrderID),
|
||||
}
|
||||
err = utils.CallFuncLogError(func() error {
|
||||
err2 := db.Read(jxorder, "OrderId")
|
||||
return err2
|
||||
}, "getDeliveryID, orderID:%s", order.VendorOrderID)
|
||||
return int64(jxorder.Id), err
|
||||
// jxorder表当前已经有50多万条记录了,加100万避免冲突
|
||||
// 508505
|
||||
return order.ID + 1000000, nil
|
||||
}
|
||||
|
||||
func (c *WaybillController) getMTPSShopID(order *model.GoodsOrder, db orm.Ormer) (retVal string, err error) {
|
||||
|
||||
12
business/model/jxstorefeature.go
Normal file
12
business/model/jxstorefeature.go
Normal file
@@ -0,0 +1,12 @@
|
||||
package model
|
||||
|
||||
type Jxstorefeature struct {
|
||||
Id int `orm:"column(storeid);pk"`
|
||||
Autopickup int8 `orm:"column(autopickup);null"`
|
||||
Transmtzs int8 `orm:"column(transmtzs);null"` // 定义为饿了么平台的订单是否支持三方配送
|
||||
Deliverycompetition int8 `orm:"column(deliverycompetition);null"` // 定义为京东到家 平台的订单是否支持三方配送
|
||||
}
|
||||
|
||||
func (t *Jxstorefeature) TableName() string {
|
||||
return "jxstorefeature"
|
||||
}
|
||||
@@ -25,7 +25,6 @@ const (
|
||||
|
||||
type WatchOrderInfo struct {
|
||||
order *model.GoodsOrder // order里的信息是保持更新的
|
||||
dirty int // 因为京东事件序列New与Accepted有极少数情况下会错序,处理延迟加载
|
||||
waybills []*model.Waybill // 这个waybills里的状态信息是不真实的,只使用id相关的信息
|
||||
timerStatus int
|
||||
timer *time.Timer
|
||||
@@ -211,19 +210,23 @@ func (s *DefScheduler) removeWaybillFromMap(savedOrderInfo *WatchOrderInfo, bill
|
||||
|
||||
func (s *DefScheduler) createWaybillOn3rdProviders(order *model.GoodsOrder, excludeBill *model.Waybill) (err error) {
|
||||
globals.SugarLogger.Debugf("createWaybillOn3rdProviders, orderID:%s, excludeBill:%v", order.VendorOrderID, excludeBill)
|
||||
successCount := 0
|
||||
for vendorID := range s.DeliveryPlatformHandlers {
|
||||
if excludeBill == nil || vendorID != excludeBill.WaybillVendorID {
|
||||
if err = s.CreateWaybill(vendorID, order); err == nil {
|
||||
successCount++
|
||||
if s.isOrderSupport3rdDelivery(order) {
|
||||
successCount := 0
|
||||
for vendorID := range s.DeliveryPlatformHandlers {
|
||||
if excludeBill == nil || vendorID != excludeBill.WaybillVendorID {
|
||||
if err = s.CreateWaybill(vendorID, order); err == nil {
|
||||
successCount++
|
||||
}
|
||||
}
|
||||
}
|
||||
if successCount != 0 {
|
||||
return nil
|
||||
}
|
||||
globals.SugarLogger.Warnf("createWaybillOn3rdProviders, orderID:%s all failed", order.VendorOrderID)
|
||||
return scheduler.ErrCanNotCreateAtLeastOneWaybill
|
||||
}
|
||||
if successCount != 0 {
|
||||
return nil
|
||||
}
|
||||
globals.SugarLogger.Warnf("createWaybillOn3rdProviders, orderID:%s all failed", order.VendorOrderID)
|
||||
return scheduler.ErrCanNotCreateAtLeastOneWaybill
|
||||
globals.SugarLogger.Debugf("createWaybillOn3rdProviders, orderID:%s, store:%d dont't support 3rd delivery platform", order.VendorOrderID, jxutils.GetJxStoreIDFromOrder(order))
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *DefScheduler) cancelOtherWaybills(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) {
|
||||
@@ -264,13 +267,12 @@ func (s *DefScheduler) loadSavedOrderFromMap(status *model.OrderStatus) *WatchOr
|
||||
if savedInfo, ok := s.orderMap.Load(universalOrderID); ok {
|
||||
realSavedInfo = savedInfo.(*WatchOrderInfo)
|
||||
}
|
||||
if realSavedInfo == nil || realSavedInfo.dirty == 1 {
|
||||
if realSavedInfo == nil || !model.IsOrderSolid(realSavedInfo.order) {
|
||||
if realSavedInfo == nil {
|
||||
realSavedInfo = new(WatchOrderInfo)
|
||||
s.orderMap.Store(universalOrderID, realSavedInfo)
|
||||
} else {
|
||||
realSavedInfo.dirty = 0
|
||||
globals.SugarLogger.Infof("loadSavedOrderFromMap order is dirty, orderID:%s, load it", status.RefVendorOrderID)
|
||||
globals.SugarLogger.Infof("loadSavedOrderFromMap order is incomplete, orderID:%s, load it", status.RefVendorOrderID)
|
||||
}
|
||||
if order, err := s.CurOrderManager.LoadOrder(status.RefVendorOrderID, status.RefVendorID); err == nil {
|
||||
realSavedInfo.order = order
|
||||
@@ -283,7 +285,6 @@ func (s *DefScheduler) loadSavedOrderFromMap(status *model.OrderStatus) *WatchOr
|
||||
OrderCreatedAt: status.StatusTime,
|
||||
WaybillVendorID: model.VendorIDUnknown,
|
||||
}
|
||||
realSavedInfo.dirty = 1
|
||||
globals.SugarLogger.Infof("loadSavedOrderFromMap can not load order orderID:%s", status.VendorOrderID)
|
||||
}
|
||||
}
|
||||
@@ -351,7 +352,6 @@ func (s *DefScheduler) handleAutoAcceptOrder(orderID string, vendorID int, userM
|
||||
globals.SugarLogger.Infof("order:%s, vendorID:%d, mobile is empty, should accept order", orderID, vendorID)
|
||||
handleType = 1
|
||||
}
|
||||
|
||||
if handleType == 1 {
|
||||
handler(true)
|
||||
} else if handleType == -1 {
|
||||
@@ -387,3 +387,21 @@ func (s *DefScheduler) updateOrderByStatus(order *model.GoodsOrder, status *mode
|
||||
order.StatusTime = status.StatusTime
|
||||
return order
|
||||
}
|
||||
|
||||
func (s *DefScheduler) isOrderSupport3rdDelivery(order *model.GoodsOrder) (retVal bool) {
|
||||
storefeature := &model.Jxstorefeature{
|
||||
Id: jxutils.GetJxStoreIDFromOrder(order),
|
||||
}
|
||||
db := orm.NewOrm()
|
||||
utils.CallFuncLogError(func() error {
|
||||
err := db.Read(storefeature, "Id")
|
||||
if err == nil {
|
||||
if (order.VendorID == model.VendorIDJD && storefeature.Deliverycompetition == 1) ||
|
||||
(order.VendorID == model.VendorIDELM && storefeature.Transmtzs == 1) {
|
||||
retVal = true
|
||||
}
|
||||
}
|
||||
return err
|
||||
}, "isOrderSupport3rdDelivery")
|
||||
return retVal
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user