整理订单调整中对于DeliveryType相关的流程
This commit is contained in:
@@ -4,7 +4,6 @@ import (
|
||||
"fmt"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils/errlist"
|
||||
"git.rosy.net.cn/jx-callback/business/jxcallback/scheduler"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
@@ -65,9 +64,9 @@ func (c *BaseScheduler) SelfDeliveredAndUpdateStatus(ctx *jxcontext.Context, ven
|
||||
globals.SugarLogger.Infof("SelfDeliveredAndUpdateStatus orderID:%s userName:%s", vendorOrderID, userName)
|
||||
order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID)
|
||||
if err == nil {
|
||||
if c.GetStoreDeliveryType(order, nil) == scheduler.StoreDeliveryTypeByStore {
|
||||
if model.IsOrderDeliveryByStore(order) {
|
||||
err = c.SelfDeliverDelivered(order, userName)
|
||||
} else {
|
||||
} else if model.IsOrderDeliveryByPlatform(order) {
|
||||
err = c.Swtich2SelfDelivered(order, userName)
|
||||
}
|
||||
if err == nil {
|
||||
@@ -91,7 +90,7 @@ func (c *BaseScheduler) PickupGoodsAndUpdateStatus(ctx *jxcontext.Context, vendo
|
||||
globals.SugarLogger.Infof("PickupGoodsAndUpdateStatus orderID:%s userName:%s", vendorOrderID, userName)
|
||||
order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID)
|
||||
if err == nil {
|
||||
err = c.PickupGoods(order, c.GetStoreDeliveryType(order, nil) == scheduler.StoreDeliveryTypeByStore, userName)
|
||||
err = c.PickupGoods(order, model.IsOrderDeliveryByStore(order), userName)
|
||||
if err == nil {
|
||||
order.Status = model.OrderStatusFinishedPickup
|
||||
if err = partner.CurOrderManager.UpdateOrderStatusAndDeliveryFlag(order); err == nil {
|
||||
@@ -107,21 +106,6 @@ func (c *BaseScheduler) PickupGoodsAndUpdateStatus(ctx *jxcontext.Context, vendo
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *BaseScheduler) GetStoreDeliveryType(order *model.GoodsOrder, storeMap *model.StoreMap) (deliveryType int) {
|
||||
globals.SugarLogger.Debugf("GetStoreDeliveryType orderID:%s", order.VendorOrderID)
|
||||
jxStoreID := jxutils.GetSaleStoreIDFromOrder(order)
|
||||
if storeMap == nil {
|
||||
storeMap, _ = dao.FakeGetStoreMapByStoreID(nil, jxStoreID, order.VendorID)
|
||||
}
|
||||
|
||||
deliveryType = scheduler.StoreDeliveryTypeByPlatform // 缺省值
|
||||
if storeMap != nil {
|
||||
deliveryType = int(storeMap.DeliveryType)
|
||||
}
|
||||
globals.SugarLogger.Debugf("GetStoreDeliveryType orderID:%s, deliveryType:%d", order.VendorOrderID, deliveryType)
|
||||
return deliveryType
|
||||
}
|
||||
|
||||
func (c *BaseScheduler) AdjustOrder(ctx *jxcontext.Context, order *model.GoodsOrder, removedSkuList []*model.OrderSku, reason string) (err error) {
|
||||
if c.IsReallyCallPlatformAPI {
|
||||
err = partner.GetPurchaseOrderHandlerFromVendorID(order.VendorID).AdjustOrder(ctx, order, removedSkuList, reason)
|
||||
|
||||
@@ -67,7 +67,6 @@ type WatchOrderInfo struct {
|
||||
order *model.GoodsOrder // order里的信息是保持更新的
|
||||
|
||||
autoPickupTimeoutMinute int // 0表示禁用,1表示用缺省值time2AutoPickupMin,其它表示分钟数
|
||||
storeDeliveryType int
|
||||
|
||||
isDeliveryCompetition bool
|
||||
isNeedCreate3rdWaybill bool
|
||||
@@ -107,7 +106,6 @@ type DefScheduler struct {
|
||||
func NewWatchOrderInfo(order *model.GoodsOrder) (retVal *WatchOrderInfo) {
|
||||
retVal = &WatchOrderInfo{
|
||||
autoPickupTimeoutMinute: 1,
|
||||
storeDeliveryType: scheduler.StoreDeliveryTypeCrowdSourcing,
|
||||
waybills: map[int]*model.Waybill{},
|
||||
}
|
||||
retVal.SetOrder(order)
|
||||
@@ -130,14 +128,12 @@ func (s *WatchOrderInfo) updateOrderStoreFeature(order *model.GoodsOrder) (err e
|
||||
jxStoreID := jxutils.GetSaleStoreIDFromOrder(order)
|
||||
if jxStoreID > 0 {
|
||||
db := dao.GetDB()
|
||||
storeMap, err2 := dao.FakeGetStoreMapByStoreID(db, jxStoreID, order.VendorID)
|
||||
storeDetail, err2 := dao.GetStoreDetail(db, jxStoreID, order.VendorID)
|
||||
if err = err2; err != nil {
|
||||
return err
|
||||
}
|
||||
s.autoPickupTimeoutMinute = int(storeMap.AutoPickup)
|
||||
s.storeDeliveryType = FixedScheduler.GetStoreDeliveryType(order, storeMap)
|
||||
s.isDeliveryCompetition = storeMap.DeliveryCompetition != 0
|
||||
globals.SugarLogger.Debugf("updateOrderStoreFeature orderID:%s, s.storeDeliveryType:%d", order.VendorOrderID, s.storeDeliveryType)
|
||||
s.autoPickupTimeoutMinute = int(storeDetail.AutoPickup)
|
||||
s.isDeliveryCompetition = storeDetail.DeliveryCompetition != 0
|
||||
}
|
||||
return err
|
||||
}
|
||||
@@ -229,7 +225,7 @@ func init() {
|
||||
TimeoutGap: 0,
|
||||
},
|
||||
TimeoutAction: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) {
|
||||
if savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore && savedOrderInfo.order.DeliveryType != model.OrderDeliveryTypeSelfTake { // 自配送商家使用
|
||||
if model.IsOrderDeliveryByStore(savedOrderInfo.order) { // 自配送商家使用
|
||||
// 启动抢单TIMER
|
||||
sch.saveDeliveryFeeFromAndStartWatch(savedOrderInfo, savedOrderInfo.order.StatusTime)
|
||||
return sch.createWaybillOn3rdProviders(savedOrderInfo, 0, nil)
|
||||
@@ -237,7 +233,7 @@ func init() {
|
||||
return nil
|
||||
},
|
||||
ShouldSetTimer: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool {
|
||||
return savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore && savedOrderInfo.order.DeliveryType != model.OrderDeliveryTypeSelfTake
|
||||
return model.IsOrderDeliveryByStore(savedOrderInfo.order)
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -251,7 +247,7 @@ func init() {
|
||||
TimeoutAction: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) {
|
||||
// 饿百转自送的时机不太清楚,暂时禁用超时转自送,在饿百运单取消时还是会自动创建
|
||||
if savedOrderInfo.isDeliveryCompetition &&
|
||||
savedOrderInfo.storeDeliveryType != scheduler.StoreDeliveryTypeByStore &&
|
||||
model.IsOrderDeliveryByPlatform(savedOrderInfo.order) &&
|
||||
savedOrderInfo.order.VendorID == bill.WaybillVendorID &&
|
||||
savedOrderInfo.order.VendorID != model.VendorIDEBAI &&
|
||||
savedOrderInfo.order.DeliveryType != model.OrderDeliveryTypeSelfTake { // 非自配送商家使用
|
||||
@@ -261,7 +257,7 @@ func init() {
|
||||
},
|
||||
ShouldSetTimer: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool {
|
||||
return savedOrderInfo.isDeliveryCompetition &&
|
||||
savedOrderInfo.storeDeliveryType != scheduler.StoreDeliveryTypeByStore &&
|
||||
model.IsOrderDeliveryByPlatform(savedOrderInfo.order) &&
|
||||
savedOrderInfo.order.VendorID == bill.WaybillVendorID &&
|
||||
savedOrderInfo.order.VendorID != model.VendorIDEBAI &&
|
||||
savedOrderInfo.order.DeliveryType != model.OrderDeliveryTypeSelfTake
|
||||
@@ -278,7 +274,7 @@ func init() {
|
||||
if (order.Status >= model.OrderStatusFinishedPickup && order.Status < model.OrderStatusEndBegin) &&
|
||||
savedOrderInfo.isDeliveryCompetition &&
|
||||
savedOrderInfo.order.VendorID == bill.WaybillVendorID &&
|
||||
savedOrderInfo.storeDeliveryType != scheduler.StoreDeliveryTypeByStore &&
|
||||
model.IsOrderDeliveryByPlatform(savedOrderInfo.order) &&
|
||||
order.VendorID == model.VendorIDEBAI &&
|
||||
savedOrderInfo.order.DeliveryType != model.OrderDeliveryTypeSelfTake { // 非自配送商家使用
|
||||
return sch.createWaybillOn3rdProviders(savedOrderInfo, ebaiCancelWaybillMaxFee, nil)
|
||||
@@ -290,7 +286,7 @@ func init() {
|
||||
return (order.Status >= model.OrderStatusFinishedPickup && order.Status < model.OrderStatusEndBegin) &&
|
||||
savedOrderInfo.isDeliveryCompetition &&
|
||||
savedOrderInfo.order.VendorID == bill.WaybillVendorID &&
|
||||
savedOrderInfo.storeDeliveryType != scheduler.StoreDeliveryTypeByStore &&
|
||||
model.IsOrderDeliveryByPlatform(savedOrderInfo.order) &&
|
||||
order.VendorID == model.VendorIDEBAI &&
|
||||
savedOrderInfo.order.DeliveryType != model.OrderDeliveryTypeSelfTake
|
||||
},
|
||||
@@ -477,7 +473,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
|
||||
partner.CurOrderManager.UpdateOrderStatusAndDeliveryFlag(order)
|
||||
}
|
||||
} else {
|
||||
if savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore {
|
||||
if model.IsOrderDeliveryByStore(savedOrderInfo.order) {
|
||||
if err := s.SelfDeliverDelivering(savedOrderInfo.order, bill.CourierMobile); err != nil {
|
||||
partner.CurOrderManager.OnOrderMsg(order, "自送出设置失败", err.Error())
|
||||
}
|
||||
@@ -552,9 +548,9 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
|
||||
if !isPending {
|
||||
var err2 error
|
||||
if !model.IsWaybillPlatformOwn(bill) {
|
||||
if savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore {
|
||||
if model.IsOrderDeliveryByStore(order) {
|
||||
err2 = s.SelfDeliverDelivered(order, "")
|
||||
} else {
|
||||
} else if model.IsOrderDeliveryByPlatform(order) {
|
||||
err2 = s.Swtich2SelfDelivered(order, "")
|
||||
}
|
||||
}
|
||||
@@ -987,8 +983,8 @@ func (s *DefScheduler) updateBillsInfo(savedOrderInfo *WatchOrderInfo, bill *mod
|
||||
}
|
||||
|
||||
func (s *DefScheduler) autoPickupGood(savedOrderInfo *WatchOrderInfo) (err error) {
|
||||
if err = s.PickupGoods(savedOrderInfo.order, savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore, ""); err == nil {
|
||||
order := savedOrderInfo.order
|
||||
order := savedOrderInfo.order
|
||||
if err = s.PickupGoods(order, model.IsOrderDeliveryByStore(order), ""); err == nil {
|
||||
order.DeliveryFlag |= model.OrderDeliveryFlagMaskAutoPickup
|
||||
partner.CurOrderManager.UpdateOrderFields(order, []string{"DeliveryFlag"})
|
||||
} else if err == scheduler.ErrOrderStatusAlreadySatisfyCurOperation {
|
||||
@@ -1059,9 +1055,9 @@ func (s *DefScheduler) saveDeliveryFeeFromAndStartWatch(savedOrderInfo *WatchOrd
|
||||
}
|
||||
|
||||
func (s *DefScheduler) watchOrderWaybills(savedOrderInfo *WatchOrderInfo) {
|
||||
if savedOrderInfo.storeDeliveryType != scheduler.StoreDeliveryTypeByStore && savedOrderInfo.isDeliveryCompetition ||
|
||||
savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore {
|
||||
order2 := savedOrderInfo.order
|
||||
order2 := savedOrderInfo.order
|
||||
if model.IsOrderDeliveryByPlatform(order2) && savedOrderInfo.isDeliveryCompetition ||
|
||||
model.IsOrderDeliveryByStore(order2) {
|
||||
if order, err := partner.CurOrderManager.LoadOrder(order2.VendorOrderID, order2.VendorID); err == nil {
|
||||
savedOrderInfo.SetOrder(order)
|
||||
if isNeedWatch3rdWaybill(order) {
|
||||
|
||||
@@ -33,7 +33,7 @@ func (s *DefScheduler) SelfDeliveringAndUpdateStatus(ctx *jxcontext.Context, ven
|
||||
if err = s.isPossibleSwitch2SelfDelivery(order); err == nil {
|
||||
err = s.cancelOtherWaybillsCheckOrderDeliveryFlag(savedOrderInfo, nil, partner.CancelWaybillReasonOther, partner.CancelWaybillReasonStrActive)
|
||||
if err == nil {
|
||||
if savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore {
|
||||
if model.IsOrderDeliveryByStore(order) {
|
||||
if order.Status < model.OrderStatusDelivering {
|
||||
storeDetail, err2 := dao.GetStoreDetail(dao.GetDB(), order.StoreID, order.VendorID)
|
||||
phone := userName
|
||||
@@ -91,7 +91,7 @@ func (s *DefScheduler) canOrderCreateWaybillNormally(order *model.GoodsOrder) (e
|
||||
}
|
||||
|
||||
func (s *DefScheduler) isPossibleSwitch2SelfDelivery(order *model.GoodsOrder) (err error) {
|
||||
if scheduler.StoreDeliveryTypeByStore != s.GetStoreDeliveryType(order, nil) {
|
||||
if model.IsOrderDeliveryByPlatform(order) {
|
||||
if order.Status < model.OrderStatusFinishedPickup {
|
||||
err = fmt.Errorf("拣货完成后才能转自配送")
|
||||
} else if order.Status == model.OrderStatusFinishedPickup {
|
||||
|
||||
@@ -6,8 +6,6 @@ import (
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
"github.com/astaxie/beego/orm"
|
||||
)
|
||||
|
||||
// 带购物平台信息的
|
||||
@@ -97,13 +95,15 @@ func getStoreDetail(db *DaoDB, storeID, vendorID int, vendorStoreID string) (sto
|
||||
sql += " AND t2.vendor_store_id = ?"
|
||||
sqlParams = append(sqlParams, vendorStoreID)
|
||||
}
|
||||
storeDetail = &StoreDetail{}
|
||||
if err = GetRow(db, storeDetail, sql, sqlParams...); err == nil {
|
||||
if err = GetRow(db, &storeDetail, sql, sqlParams...); err == nil {
|
||||
storeDetail.PricePercentagePackObj = PricePercentagePack2Obj(storeDetail.PricePercentagePackStr)
|
||||
storeDetail.FreightDeductionPackObj = FreightDeductionPack2Obj(storeDetail.FreightDeductionPackStr)
|
||||
if vendorID == model.VendorIDJX {
|
||||
if storeDetail.VendorStoreID == "" {
|
||||
storeDetail.VendorStatus = storeDetail.Status
|
||||
storeDetail.PricePercentage = 100
|
||||
storeDetail.AutoPickup = 1
|
||||
storeDetail.DeliveryType = model.StoreDeliveryTypeByStore
|
||||
storeDetail.DeliveryCompetition = 1
|
||||
}
|
||||
return storeDetail, nil
|
||||
}
|
||||
@@ -339,49 +339,6 @@ func AddStoreCategoryMap(db *DaoDB, storeID, categoryID int, vendorID int, vendo
|
||||
return err
|
||||
}
|
||||
|
||||
func GetStoreMapByStoreID(db *DaoDB, storeID, vendorID int) (storeMap *model.StoreMap, err error) {
|
||||
if db == nil {
|
||||
db = GetDB()
|
||||
}
|
||||
storeMap = &model.StoreMap{
|
||||
StoreID: storeID,
|
||||
VendorID: vendorID,
|
||||
}
|
||||
storeMap.DeletedAt = utils.DefaultTimeValue
|
||||
if err = GetEntity(db, storeMap, model.FieldStoreID, model.FieldVendorID, model.FieldDeletedAt); err != nil {
|
||||
if err != orm.ErrNoRows {
|
||||
globals.SugarLogger.Warnf("GetStoreMapByStoreID storeID:%d, vendorID:%d read storeMap failed with error:%v", storeID, vendorID, err)
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
return storeMap, nil
|
||||
}
|
||||
|
||||
func FakeGetStoreMapByStoreID(db *DaoDB, storeID, vendorID int) (storeMap *model.StoreMap, err error) {
|
||||
vendorID2 := vendorID
|
||||
if model.IsSpecialVendorID(vendorID) {
|
||||
vendorID2 = model.VendorIDJD // 微商城与京西的属性以京东属性为准(以免再绑定)
|
||||
}
|
||||
if storeMap, err = GetStoreMapByStoreID(db, storeID, vendorID2); model.IsSpecialVendorID(vendorID) && IsNoRowsError(err) {
|
||||
err = nil
|
||||
storeMap = &model.StoreMap{
|
||||
StoreID: storeID,
|
||||
VendorID: vendorID2,
|
||||
Status: model.StoreStatusOpened,
|
||||
PricePercentage: 100,
|
||||
AutoPickup: 1,
|
||||
DeliveryType: model.StoreDeliveryTypeByStore,
|
||||
// DeliveryFee
|
||||
DeliveryCompetition: 1,
|
||||
IsSync: 1,
|
||||
}
|
||||
}
|
||||
if storeMap != nil && vendorID == model.VendorIDJX {
|
||||
storeMap.DeliveryType = model.StoreDeliveryTypeByStore
|
||||
}
|
||||
return storeMap, err
|
||||
}
|
||||
|
||||
func GetOpenedStoreCouriersByStoreID(db *DaoDB, storeID, vendorID int) (storeMaps []*model.StoreCourierMap, err error) {
|
||||
if db == nil {
|
||||
db = GetDB()
|
||||
|
||||
@@ -275,3 +275,13 @@ func IsOrderHaveWaybill(order *GoodsOrder) bool {
|
||||
func IsOrderHaveOwnWaybill(order *GoodsOrder) bool {
|
||||
return order.VendorID == order.WaybillVendorID && order.VendorWaybillID != ""
|
||||
}
|
||||
|
||||
// 订单的初始配送方式是否是门店自配送
|
||||
func IsOrderDeliveryByStore(order *GoodsOrder) bool {
|
||||
return order.DeliveryType == OrderDeliveryTypeStoreSelf
|
||||
}
|
||||
|
||||
// 订单的初始配送方式是否是平台负责配送
|
||||
func IsOrderDeliveryByPlatform(order *GoodsOrder) bool {
|
||||
return order.DeliveryType == OrderDeliveryTypePlatform
|
||||
}
|
||||
|
||||
@@ -59,6 +59,7 @@ func (c *PurchaseHandler) callbackMsg2Status(msg *CallbackMsg) *model.OrderStatu
|
||||
func (c *PurchaseHandler) onOrderNew(msg *CallbackMsg, subMsgType int, order *Data4Neworder) (retVal, errCode string, err error) {
|
||||
globals.SugarLogger.Debugf("onOrderNew orderID:%s", msg.ThingID)
|
||||
order.StoreID = int(utils.Str2Int64WithDefault(order.VendorStoreID, 0))
|
||||
order.DeliveryType = model.OrderDeliveryTypeStoreSelf
|
||||
order.GoodsOrder.Skus = order.Skus
|
||||
order.VendorID = model.VendorIDJX
|
||||
for _, v := range order.GoodsOrder.Skus {
|
||||
|
||||
Reference in New Issue
Block a user