diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index 05b1b97ac..a722de1ca 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -201,13 +201,8 @@ func (c *OrderManager) saveOrder(order *model.GoodsOrder, isAdjust bool, db orm. func (c *OrderManager) updateOrderSkuOtherInfo(order *model.GoodsOrder, db orm.Ormer) (err error) { globals.SugarLogger.Debugf("updateOrderSkuOtherInfo orderID:%s, VendorStoreID:%s", order.VendorOrderID, order.VendorStoreID) - jxStoreID := jxutils.GetJxStoreIDFromOrder(order) + jxStoreID := jxutils.GetShowStoreIDFromOrder(order) - // 这里的jxStoreID表示的是展示商品所属的门店,如果是微商城,以JxStoreID为准 - // 所以而JxStoreID是由vendorStoreID经store_map表示查询得到的,所以要求绑定微商城店时,要给准确的微商城店号 - if order.VendorID == model.VendorIDWSC { - jxStoreID = order.JxStoreID - } if jxStoreID == 0 { if order.VendorID != model.VendorIDEBAI { globals.SugarLogger.Infof("updateOrderSkuOtherInfo [运营]订单在京西与平台都找不到京西门店信息orderID:%s, VendorStoreID:%s", order.VendorOrderID, order.VendorStoreID) diff --git a/business/jxcallback/scheduler/basesch/basesch_ext.go b/business/jxcallback/scheduler/basesch/basesch_ext.go index 9d11ee525..322ea7602 100644 --- a/business/jxcallback/scheduler/basesch/basesch_ext.go +++ b/business/jxcallback/scheduler/basesch/basesch_ext.go @@ -76,7 +76,7 @@ func (c *BaseScheduler) PickupGoodsAndUpdateStatus(ctx *jxcontext.Context, vendo } func getStoreDeliveryType(order *model.GoodsOrder) (deliveryType int) { - jxStoreID := jxutils.GetJxStoreIDFromOrder(order) + jxStoreID := jxutils.GetSaleStoreIDFromOrder(order) if globals.OrderUseNewTable || jxStoreID == globals.DebugStoreID { deliveryType = scheduler.StoreDeliveryTypeByPlatform // 缺省值 if storeMap, _ := dao.GetStoreMapByStoreID(nil, jxStoreID, order.VendorID); storeMap != nil { diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index 522bb8fe0..bc1a3254a 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -106,7 +106,7 @@ func (s *WatchOrderInfo) SetOrder(order *model.GoodsOrder) (retVal *model.GoodsO func (s *WatchOrderInfo) updateOrderStoreFeature(order *model.GoodsOrder) (err error) { globals.SugarLogger.Debugf("updateOrderStoreFeature orderID:%s", order.VendorOrderID) - jxStoreID := jxutils.GetJxStoreIDFromOrder(order) + jxStoreID := jxutils.GetSaleStoreIDFromOrder(order) if globals.OrderUseNewTable || jxStoreID == globals.DebugStoreID { if jxStoreID > 0 { db := dao.GetDB() @@ -203,7 +203,7 @@ func init() { if order.ConsigneeMobile2 != "" { mobile = order.ConsigneeMobile2 } - _ = sch.handleAutoAcceptOrder(order.VendorOrderID, order.VendorID, mobile, jxutils.GetJxStoreIDFromOrder(order), nil, func(isAcceptIt bool) error { + _ = sch.handleAutoAcceptOrder(order.VendorOrderID, order.VendorID, mobile, jxutils.GetSaleStoreIDFromOrder(order), nil, func(isAcceptIt bool) error { if err = sch.AcceptOrRefuseOrder(order, isAcceptIt, ""); err != nil && err != scheduler.ErrOrderStatusAlreadySatisfyCurOperation { // 为了解决京东新消息与接单消息乱序的问题 if errWithCode, ok := err.(*utils.ErrorWithCode); ok && errWithCode.Level() == 1 && errWithCode.IntCode() == -1 { @@ -337,7 +337,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo s.ProxyCancelWaybill(order, bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonStrNotAcceptIntime) } else if order.WaybillVendorID != model.VendorIDUnknown { globals.SugarLogger.Debugf("OnWaybillStatusChanged multiple waybill created, bill:%v", bill) - if order.VendorID == bill.WaybillVendorID { // 是购物平台运单 + if s.IsOrderPlatformWaybill(bill) { // 是购物平台运单 if order.VendorID != order.WaybillVendorID { // 既有运单不是购物平台运单 globals.SugarLogger.Infof("OnWaybillStatusChanged bill:%v purchase platform bill came later than others, strange!!!", bill) oldBill := savedOrderInfo.waybills[order.WaybillVendorID] @@ -355,7 +355,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo } } // 只有购物平台的新运单消息才会启动抢单TIMER - if bill.OrderVendorID == bill.WaybillVendorID { + if s.IsOrderPlatformWaybill(bill) { s.resetTimer(savedOrderInfo, bill, isPending) } } else { @@ -366,14 +366,14 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo isBillAlreadyCandidate := s.isBillCandidate(order, bill) // todo 购买平台的运单,优先级最高,但这样写也可能带来问题,即在这个时间,因为之前3方已经接单,已经发出了转自送请求(而且可能成功了),所以加个状态判断 if order.WaybillVendorID == model.VendorIDUnknown || - (order.VendorID == bill.WaybillVendorID && order.VendorID != order.WaybillVendorID && (order.DeliveryFlag&model.OrderDeliveryFlagMaskPurcahseDisabled) == 0) { + (s.IsOrderPlatformWaybill(bill) && order.VendorID != order.WaybillVendorID && (order.DeliveryFlag&model.OrderDeliveryFlagMaskPurcahseDisabled) == 0) { if order.WaybillVendorID != model.VendorIDUnknown { // 进到这里的原因是,在这个时间点,购物平台物流已经抢单(但抢单消息还没有被收到)(比如:818810379000941) globals.SugarLogger.Infof("OnWaybillStatusChanged orderID:%s purchase platform waybill arrvied later, may case problem", order.VendorOrderID) } s.updateOrderByBill(order, bill, false) s.cancelOtherWaybills(savedOrderInfo, bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonStrNotAcceptIntime) - if bill.WaybillVendorID != bill.OrderVendorID { + if !s.IsOrderPlatformWaybill(bill) { if savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore { s.SelfDeliverDelivering(savedOrderInfo.order, "") } else { @@ -450,7 +450,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo case model.WaybillStatusDelivered: s.resetTimer(savedOrderInfo, bill, isPending) s.removeWaybillFromMap(savedOrderInfo, bill.WaybillVendorID) - if order.VendorID != bill.WaybillVendorID && !isPending { + if !s.IsOrderPlatformWaybill(bill) && !isPending { if savedOrderInfo.storeDeliveryType == scheduler.StoreDeliveryTypeByStore { s.SelfDeliverDelievered(order, "") } else { @@ -483,7 +483,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo func (s *DefScheduler) addWaybill2Map(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) { if _, ok := savedOrderInfo.waybills[bill.WaybillVendorID]; ok { - if bill.WaybillVendorID != bill.OrderVendorID { // 购买平台重复发相同号的新运单是正常的,京东就是 + if !s.IsOrderPlatformWaybill(bill) { // 购买平台重复发相同号的新运单是正常的,京东就是 globals.SugarLogger.Warnf("addWaybill2Map bill:%v already exists", bill) } } @@ -551,7 +551,7 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf db.Insert(tmpLog) } } else { - globals.SugarLogger.Debugf("createWaybillOn3rdProviders, orderID:%s, store:%d dont't support 3rd delivery platform", order.VendorOrderID, jxutils.GetJxStoreIDFromOrder(order)) + globals.SugarLogger.Debugf("createWaybillOn3rdProviders, orderID:%s, store:%d dont't support 3rd delivery platform", order.VendorOrderID, jxutils.GetSaleStoreIDFromOrder(order)) } } else { globals.SugarLogger.Debugf("createWaybillOn3rdProviders, orderID:%s, status:%d doesn't match model.OrderStatusFinishedPickup, bypass", order.VendorOrderID, order.Status) @@ -567,7 +567,7 @@ func (s *DefScheduler) cancelOtherWaybills(savedOrderInfo *WatchOrderInfo, bill2 if (savedOrderInfo.order.DeliveryFlag & model.OrderDeliveryFlagMaskScheduleDisabled) == 0 { toBeDeleted := []*model.Waybill{} for _, v := range savedOrderInfo.waybills { - if (v.OrderVendorID != v.WaybillVendorID) && (bill2Keep == nil || !(v.WaybillVendorID == bill2Keep.WaybillVendorID && v.VendorWaybillID == bill2Keep.VendorWaybillID)) { + if !s.IsOrderPlatformWaybill(v) && (bill2Keep == nil || !(v.WaybillVendorID == bill2Keep.WaybillVendorID && v.VendorWaybillID == bill2Keep.VendorWaybillID)) { err2 := s.ProxyCancelWaybill(savedOrderInfo.order, v, cancelReasonID, cancelReason) if err2 == nil { toBeDeleted = append(toBeDeleted, v) @@ -851,3 +851,9 @@ func OnDefSchConfChanged(key, value string) { } } } + +// 判断是否是购买平台自有物流 +// 对于京东,饿百来说,就是其自有的物流,对于微商城来说,是达达 +func (s *DefScheduler) IsOrderPlatformWaybill(bill *model.Waybill) bool { + return bill.OrderVendorID == bill.WaybillVendorID || (bill.OrderVendorID == model.VendorIDWSC && bill.WaybillVendorID == model.VendorIDDada) +} diff --git a/business/jxutils/jxutils.go b/business/jxutils/jxutils.go index 00bf51029..e6b9c0d76 100644 --- a/business/jxutils/jxutils.go +++ b/business/jxutils/jxutils.go @@ -54,13 +54,29 @@ func (m *SyncMapWithTimeout) Delete(key interface{}) { m.timers.Delete(key) } -func GetJxStoreIDFromOrder(order *model.GoodsOrder) (retVal int) { +func getJxStoreIDFromOrder(order *model.GoodsOrder) (retVal int) { if order.JxStoreID != 0 { return order.JxStoreID } return order.StoreID } +// 此函数得到的是order的销售门店京西ID,与GetJxStoreIDFromOrder的区别是order.StoreID的解释不同,参考其它相关资料 +func GetSaleStoreIDFromOrder(order *model.GoodsOrder) (retVal int) { + if order.VendorID != model.VendorIDWSC { + return getJxStoreIDFromOrder(order) + } + return order.StoreID +} + +// 此函数得到的是order的商品的展示门店京西ID,与GetJxStoreIDFromOrder的区别是order.StoreID的解释不同,参考其它相关资料 +func GetShowStoreIDFromOrder(order *model.GoodsOrder) (retVal int) { + if order.VendorID != model.VendorIDWSC { + return getJxStoreIDFromOrder(order) + } + return order.JxStoreID +} + func SplitUniversalOrderID(universalOrderID string) (orderID string, vendorID int) { index := strings.Index(universalOrderID, "|") if index != -1 { diff --git a/business/jxutils/weixinmsg/weixinmsg.go b/business/jxutils/weixinmsg/weixinmsg.go index fd05f61f0..0384d92b8 100644 --- a/business/jxutils/weixinmsg/weixinmsg.go +++ b/business/jxutils/weixinmsg/weixinmsg.go @@ -199,7 +199,7 @@ func NotifyNewOrder(order *model.GoodsOrder) (err error) { "color": WX_NEW_ORDER_TEMPLATE_COLOR, }, } - storeID := jxutils.GetJxStoreIDFromOrder(order) + storeID := jxutils.GetSaleStoreIDFromOrder(order) return SendMsgToStore(storeID, WX_NEWORDER_TEMPLATE_ID, fmt.Sprintf("%s%d", WX_TO_ORDER_PAGE_URL, storeID), WX_MINI_TO_ORDER_PAGE_URL, data) } @@ -264,7 +264,7 @@ func NotifyWaybillStatus(bill *model.Waybill, order *model.GoodsOrder, isBillAlr "color": WX_NEW_ORDER_TEMPLATE_COLOR, }, } - return SendMsgToStore(jxutils.GetJxStoreIDFromOrder(order), templateID, "", "", data) + return SendMsgToStore(jxutils.GetSaleStoreIDFromOrder(order), templateID, "", "", data) } return nil } diff --git a/business/model/dao/dao_bz.go b/business/model/dao/dao_bz.go index c62cda227..c8769204c 100644 --- a/business/model/dao/dao_bz.go +++ b/business/model/dao/dao_bz.go @@ -150,7 +150,7 @@ func GetStoreMapByStoreID(db *DaoDB, storeID, vendorID int) (storeMap *model.Sto 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 storefeature failed with error:%v", storeID, vendorID, err) + globals.SugarLogger.Warnf("GetStoreMapByStoreID storeID:%d, vendorID:%d read storeMap failed with error:%v", storeID, vendorID, err) } return nil, err } diff --git a/business/partner/delivery/dada/waybill.go b/business/partner/delivery/dada/waybill.go index 218255f41..325d6dc71 100644 --- a/business/partner/delivery/dada/waybill.go +++ b/business/partner/delivery/dada/waybill.go @@ -167,8 +167,8 @@ func (c *DeliveryHandler) CancelWaybill(bill *model.Waybill, cancelReasonID int, func (c *DeliveryHandler) getDataCityCodeFromOrder(order *model.GoodsOrder, db orm.Ormer) (retVal string, err error) { var sql string - if globals.OrderUseNewTable || jxutils.GetJxStoreIDFromOrder(order) == globals.DebugStoreID { - jxStoreID := jxutils.GetJxStoreIDFromOrder(order) + jxStoreID := jxutils.GetSaleStoreIDFromOrder(order) + if globals.OrderUseNewTable || jxStoreID == globals.DebugStoreID { sql = ` SELECT t2.tel_code FROM store t1 @@ -206,7 +206,7 @@ func (c *DeliveryHandler) getDataCityCodeFromOrder(order *model.GoodsOrder, db o WHERE t0.elm_store_id = ? ` } else { // todo 为什么不统一用jxstoreid来找? - storeID = int64(jxutils.GetJxStoreIDFromOrder(order)) + storeID = int64(jxutils.GetSaleStoreIDFromOrder(order)) sql = ` SELECT t2.tel_code FROM jxstore t1 diff --git a/business/partner/delivery/mtps/waybill.go b/business/partner/delivery/mtps/waybill.go index 67d95b903..455d3eb52 100644 --- a/business/partner/delivery/mtps/waybill.go +++ b/business/partner/delivery/mtps/waybill.go @@ -114,7 +114,7 @@ func (c *DeliveryHandler) calculateOrderDeliveryFee(order *model.GoodsOrder, bil if db == nil { db = orm.NewOrm() } - jxStoreID := jxutils.GetJxStoreIDFromOrder(order) + jxStoreID := jxutils.GetSaleStoreIDFromOrder(order) var lng, lat float64 if globals.OrderUseNewTable || jxStoreID == globals.DebugStoreID { priceInfo := &struct { @@ -294,9 +294,10 @@ func (c *DeliveryHandler) getDeliveryID(order *model.GoodsOrder, db orm.Ormer) ( } func (c *DeliveryHandler) getMTPSShopID(order *model.GoodsOrder, db orm.Ormer) (retVal string, err error) { - if globals.OrderUseNewTable || jxutils.GetJxStoreIDFromOrder(order) == globals.DebugStoreID { + saleStoreID := jxutils.GetSaleStoreIDFromOrder(order) + if globals.OrderUseNewTable || saleStoreID == globals.DebugStoreID { db2 := dao.WrapDB(db) - storeCourierList, err2 := dao.GetStoreCouriersByStoreID(db2, jxutils.GetJxStoreIDFromOrder(order), model.VendorIDMTPS) + storeCourierList, err2 := dao.GetStoreCouriersByStoreID(db2, saleStoreID, model.VendorIDMTPS) if err = err2; err != nil && err != orm.ErrNoRows { return "", err } @@ -311,15 +312,14 @@ func (c *DeliveryHandler) getMTPSShopID(order *model.GoodsOrder, db orm.Ormer) ( } sql := "SELECT zs_store_id FROM jx_to_zs_store_map WHERE jx_store_id = ?" var lists []orm.ParamsList - JxStoreID := jxutils.GetJxStoreIDFromOrder(order) - num, err := db.Raw(sql, JxStoreID).ValuesList(&lists) + num, err := db.Raw(sql, saleStoreID).ValuesList(&lists) if err == nil && num == 1 { retVal = lists[0][0].(string) if beego.BConfig.RunMode == "dev" { retVal = "test_0001" } } else { - globals.SugarLogger.Infof("getMTPSShopID can not find mtps store info for orderID:%s, store:%d, num:%d, error:%v", order.VendorOrderID, JxStoreID, num, err) + globals.SugarLogger.Infof("getMTPSShopID can not find mtps store info for orderID:%s, store:%d, num:%d, error:%v", order.VendorOrderID, saleStoreID, num, err) if err == nil { err = ErrCanNotFindMTPSStore } @@ -327,7 +327,7 @@ func (c *DeliveryHandler) getMTPSShopID(order *model.GoodsOrder, db orm.Ormer) ( tmpLog := &legacymodel.TempLog{ VendorOrderID: order.VendorOrderID, RefVendorOrderID: order.VendorOrderID, - Msg: fmt.Sprintf("getMTPSShopID can not find mtps store info for orderID:%s, store:%d, num:%d, error:%v", order.VendorOrderID, JxStoreID, num, err), + Msg: fmt.Sprintf("getMTPSShopID can not find mtps store info for orderID:%s, store:%d, num:%d, error:%v", order.VendorOrderID, saleStoreID, num, err), } db.Insert(tmpLog) } diff --git a/business/partner/purchase/jd/order_legacy_comment.go b/business/partner/purchase/jd/order_legacy_comment.go index 0b47dbfd4..88c31c7f0 100644 --- a/business/partner/purchase/jd/order_legacy_comment.go +++ b/business/partner/purchase/jd/order_legacy_comment.go @@ -106,7 +106,7 @@ func (c *PurchaseHandler) onOrderComment(msg *jdapi.CallbackOrderMsg) (err error order, err2 := partner.CurOrderManager.LoadOrder(msg.BillID, model.VendorIDJD) if err = err2; err == nil { - comment.Jxstoreid = utils.Int2Str(jxutils.GetJxStoreIDFromOrder(order)) + comment.Jxstoreid = utils.Int2Str(jxutils.GetSaleStoreIDFromOrder(order)) comment.Userphone = order.ConsigneeMobile } }