- jxstorefeature support added.

This commit is contained in:
gazebo
2018-07-23 18:35:48 +08:00
parent 479ce46200
commit 857f2cae45
4 changed files with 50 additions and 28 deletions

View File

@@ -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) {

View File

@@ -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) {

View 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"
}

View File

@@ -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
}