From dd9afa4248dcb85e49468204c682b82ee53856e4 Mon Sep 17 00:00:00 2001 From: gazebo Date: Fri, 10 Aug 2018 15:21:33 +0800 Subject: [PATCH 1/4] - handle ShopPrice. --- business/controller/order.go | 72 +++++++++++++++++++++-------- business/scheduler/defsch/defsch.go | 7 ++- 2 files changed, 60 insertions(+), 19 deletions(-) diff --git a/business/controller/order.go b/business/controller/order.go index 212ca03a6..5f4cb6bd6 100644 --- a/business/controller/order.go +++ b/business/controller/order.go @@ -6,6 +6,7 @@ import ( "git.rosy.net.cn/baseapi" "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/jxutils/weixinmsg" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/scheduler" @@ -172,44 +173,79 @@ func (c *OrderController) saveOrder(order *model.GoodsOrder, isAdjust bool, db o return isDuplicated, err } -func (c *OrderController) updateOrderSkuOtherInfo(orderSkus []*model.OrderSku, db orm.Ormer) (err error) { +func (c *OrderController) updateOrderSkuOtherInfo(order *model.GoodsOrder, db orm.Ormer) (err error) { + jxStoreID := jxutils.GetJxStoreIDFromOrder(order) + if jxStoreID == 0 { + globals.SugarLogger.Infof("updateOrderSkuOtherInfo [运营]订单找不到京西门店信息orderID:%s", order.VendorOrderID) + return nil + } + orderSkus := order.Skus var sql string if orderSkus[0].VendorID == model.VendorIDJD { sql = ` - SELECT t1.jdskuid, t1.skuid + SELECT t1.jdskuid, t1.skuid, t2.price FROM skumapper t1 - /* JOIN jx_sku t2 ON t1.skuid = t2.id */ - WHERE t1.jdskuid IN ( + LEFT JOIN jx_sku_store_bind t2 ON t1.skuid = t2.jxskuid AND t2.jxstoreid = ? + WHERE t1.jdskuid IN (-1, ` } else if orderSkus[0].VendorID == model.VendorIDELM { - // 饿了么当前没有存映射关系 - return nil + sql = ` + SELECT t2.jxskuid, t2.jxskuid, t2.price + FROM jx_sku_store_bind t2 + WHERE t2.jxstoreid = ? AND t2.jxskuid IN (-1, + ` } else { panic(fmt.Sprintf("wrong vendorid:%d", orderSkus[0].VendorID)) } - jdskuids := []interface{}{} + sqlParams := []interface{}{jxStoreID} for _, v := range orderSkus { - sql += "?," - jdskuids = append(jdskuids, int(utils.Str2Int64(v.VendorSkuID))) + if orderSkus[0].VendorID == model.VendorIDJD { + sql += "?," + sqlParams = append(sqlParams, int(utils.Str2Int64(v.VendorSkuID))) + } else if v.SkuID != 0 { + sql += "?," + sqlParams = append(sqlParams, v.SkuID) + } } sql = sql[:len(sql)-1] + ")" var lists []orm.ParamsList - if num, err := db.Raw(sql, jdskuids...).ValuesList(&lists); err == nil && num > 0 { - skumapper := make(map[string]string) + if num, err := db.Raw(sql, sqlParams...).ValuesList(&lists); err == nil { + skumapper := make(map[string]orm.ParamsList) for _, v := range lists { - skumapper[v[0].(string)] = v[1].(string) + skumapper[v[0].(string)] = v } // globals.SugarLogger.Debug(skumapper) for _, v := range orderSkus { - if jxskuid, ok := skumapper[v.VendorSkuID]; ok { - v.JxSkuID = int(utils.Str2Int64(jxskuid)) + if orderSkus[0].VendorID == model.VendorIDJD { + if values, ok := skumapper[v.VendorSkuID]; ok { + v.JxSkuID = int(utils.Str2Int64(utils.Interface2String(values[1]))) + v.ShopPrice = utils.Str2Int64WithDefault(utils.Interface2String(values[2]), 0) + order.ShopPrice += v.ShopPrice + if v.ShopPrice == 0 { + globals.SugarLogger.Infof("updateOrderSkuOtherInfo [运营]京东订单sku门店价格为零,orderID:%s sku:%v", order.VendorOrderID, v) + } + } else { + globals.SugarLogger.Infof("updateOrderSkuOtherInfo [运营]京东订单sku找不到门店价格,orderID:%s sku:%v", order.VendorOrderID, v) + } } else { - globals.SugarLogger.Infof("updateOrderSkuOtherInfo can not find sku map:%v", v) + if v.SkuID != 0 { + if values, ok := skumapper[utils.Int2Str(v.SkuID)]; ok { + v.ShopPrice = utils.Str2Int64WithDefault(utils.Interface2String(values[2]), 0) + order.ShopPrice += v.ShopPrice + if v.ShopPrice == 0 { + globals.SugarLogger.Infof("updateOrderSkuOtherInfo [运营]饿了么订单sku门店价格为零,orderID:%s sku:%v", order.VendorOrderID, v) + } + } else { + globals.SugarLogger.Infof("updateOrderSkuOtherInfo [运营]饿了么订单sku找不到门店价格,orderID:%s sku:%v", order.VendorOrderID, v) + } + } else { + globals.SugarLogger.Infof("updateOrderSkuOtherInfo [运营]饿了么订单sku没有京西信息,orderID:%s sku:%v", order.VendorOrderID, v) + } } } } else { - globals.SugarLogger.Errorf("updateOrderSkuOtherInfo can not get sku info for orderID:%s, num:%d, error:%v", orderSkus[0].VendorOrderID, num, err) + globals.SugarLogger.Errorf("updateOrderSkuOtherInfo can not get sku info for orderID:%s, num:%d, error:%v", order.VendorOrderID, num, err) } return err } @@ -237,9 +273,9 @@ func (c *OrderController) updateOrderOtherInfo(order *model.GoodsOrder, db orm.O if num, err := db.Raw(sql, utils.Str2Int64(order.VendorStoreID)).ValuesList(&lists); err == nil && num == 1 { order.JxStoreID = int(utils.Str2Int64(lists[0][0].(string))) } else { - globals.SugarLogger.Warnf("updateOrderOtherInfo can not find store info for orderID:%s, store:%s, num:%d, error:%v", order.VendorOrderID, order.VendorStoreID, num, err) + globals.SugarLogger.Infof("updateOrderOtherInfo [运营]订单orderID:%s找不到相应的京西门店信息,请处理, store:%s, num:%d, error:%v", order.VendorOrderID, order.VendorStoreID, num, err) } - err = c.updateOrderSkuOtherInfo(order.Skus, db) + err = c.updateOrderSkuOtherInfo(order, db) return err } diff --git a/business/scheduler/defsch/defsch.go b/business/scheduler/defsch/defsch.go index 86334f8d9..118ebd995 100644 --- a/business/scheduler/defsch/defsch.go +++ b/business/scheduler/defsch/defsch.go @@ -217,6 +217,11 @@ func (s *DefScheduler) OnOrderStatusChanged(status *model.OrderStatus, isPending if status.LockStatus == model.OrderStatusUnknown && status.Status > model.OrderStatusUnknown { // 只处理状态转换,一般消息不处理 s.resetTimer(savedOrderInfo, nil, isPending) if status.Status >= model.OrderStatusEndBegin { + if status.Status == model.OrderStatusDelivered || status.Status == model.OrderStatusFinished { + if curWaybill := savedOrderInfo.waybills[savedOrderInfo.order.WaybillVendorID]; curWaybill != nil { + globals.SugarLogger.Warnf("OnOrderStatusChanged [运营]订单orderID:%s可能被手动点击送达,有可能导致当前有效运单:%s被非正常取消", status.VendorOrderID, curWaybill.VendorWaybillID) + } + } s.cancelOtherWaybills(savedOrderInfo, nil) s.orderMap.Delete(jxutils.GetUniversalOrderIDFromOrderStatus(status)) } @@ -402,7 +407,7 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf err = scheduler.ErrCanNotCreateAtLeastOneWaybill } } else { - globals.SugarLogger.Warnf("createWaybillOn3rdProviders, orderID:%s failed %d times, stop schedule", order.VendorOrderID, savedOrderInfo.retryCount-1) + globals.SugarLogger.Warnf("createWaybillOn3rdProviders [运营]同一订单orderID:%s尝试了%d次创建运单失败, 停止调度,如果还需要发单,请人工处理", order.VendorOrderID, savedOrderInfo.retryCount-1) tmpLog := &legacymodel.TempLog{ VendorOrderID: order.VendorOrderID, From f87a98c4ca8307814edcd3652dec6db7908ae243 Mon Sep 17 00:00:00 2001 From: gazebo Date: Fri, 10 Aug 2018 15:46:33 +0800 Subject: [PATCH 2/4] - AccessFreshFood finally failed. --- legacy/freshfood/freshfood.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/legacy/freshfood/freshfood.go b/legacy/freshfood/freshfood.go index 004bb2f43..bd7ccac04 100644 --- a/legacy/freshfood/freshfood.go +++ b/legacy/freshfood/freshfood.go @@ -137,7 +137,7 @@ func (f *API) AccessFreshFood(apiStr string, params url.Values) error { } } if err != nil || response.StatusCode != 200 { - globals.SugarLogger.Infof("AccessFreshFood Call %s error:%v, url:%s, response: %v", fullURL, err, fullURL, response) + globals.SugarLogger.Infof("AccessFreshFood finally failed Call %s error:%v, url:%s, response: %v", fullURL, err, fullURL, response) if err != nil { return err } From 5d66c1f6aa3897695d25c43cb16464f82560c6eb Mon Sep 17 00:00:00 2001 From: gazebo Date: Fri, 10 Aug 2018 15:53:35 +0800 Subject: [PATCH 3/4] - change elm vendor_sku_id from skuId to vfoodId. --- business/controller/elm/order.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/business/controller/elm/order.go b/business/controller/elm/order.go index 168a0ea52..a9fed6200 100644 --- a/business/controller/elm/order.go +++ b/business/controller/elm/order.go @@ -179,7 +179,7 @@ func (c *OrderController) GetOrder(orderID string) (order *model.GoodsOrder, err VendorID: model.VendorIDELM, Count: int(utils.MustInterface2Int64(product["quantity"])), SkuID: int(utils.Str2Int64WithDefault(utils.Interface2String(product["extendCode"]), 0)), - VendorSkuID: utils.Int64ToStr(utils.MustInterface2Int64(product["skuId"])), + VendorSkuID: utils.Int64ToStr(utils.MustInterface2Int64(product["vfoodId"])), SkuName: product["name"].(string), SalePrice: jxutils.StandardPrice2Int(utils.MustInterface2Float64(product["price"])), Weight: int(math.Round(utils.Interface2FloatWithDefault(product["weight"], 0.0))), From c3b5e669d4ac77cb65f34f17221c7c437c646bdc Mon Sep 17 00:00:00 2001 From: gazebo Date: Fri, 10 Aug 2018 16:38:52 +0800 Subject: [PATCH 4/4] - savedOrderInfo.retryCount++ only when actually created at least one waybill. --- business/scheduler/defsch/defsch.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/business/scheduler/defsch/defsch.go b/business/scheduler/defsch/defsch.go index 118ebd995..f9dd6fb3c 100644 --- a/business/scheduler/defsch/defsch.go +++ b/business/scheduler/defsch/defsch.go @@ -390,7 +390,6 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf globals.SugarLogger.Debugf("createWaybillOn3rdProviders, orderID:%s, status:%d, excludeBill:%v", order.VendorOrderID, order.Status, excludeBill) if order.LockStatus == model.OrderStatusUnknown && order.Status >= model.OrderStatusFinishedPickup && order.Status < model.OrderStatusEndBegin { // 订单在配送中被取消时就是配送中状态 if savedOrderInfo.isNeed3rdDelivery { - savedOrderInfo.retryCount++ if savedOrderInfo.retryCount <= maxWaybillRetryCount { successCount := 0 for _, vendorID := range savedOrderInfo.supported3rdCarriers { @@ -401,18 +400,19 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf } } if successCount != 0 { + savedOrderInfo.retryCount++ err = nil } else { globals.SugarLogger.Infof("createWaybillOn3rdProviders, orderID:%s all failed", order.VendorOrderID) err = scheduler.ErrCanNotCreateAtLeastOneWaybill } } else { - globals.SugarLogger.Warnf("createWaybillOn3rdProviders [运营]同一订单orderID:%s尝试了%d次创建运单失败, 停止调度,如果还需要发单,请人工处理", order.VendorOrderID, savedOrderInfo.retryCount-1) + globals.SugarLogger.Warnf("createWaybillOn3rdProviders [运营]同一订单orderID:%s尝试了%d次创建运单失败, 停止调度,如果还需要发单,请人工处理", order.VendorOrderID, savedOrderInfo.retryCount) tmpLog := &legacymodel.TempLog{ VendorOrderID: order.VendorOrderID, RefVendorOrderID: order.VendorOrderID, - Msg: fmt.Sprintf("createWaybillOn3rdProviders, orderID:%s failed %d times, stop schedule", order.VendorOrderID, savedOrderInfo.retryCount-1), + Msg: fmt.Sprintf("createWaybillOn3rdProviders, orderID:%s failed %d times, stop schedule", order.VendorOrderID, savedOrderInfo.retryCount), } db := orm.NewOrm() db.Insert(tmpLog)