From 44a33a9d06a3a684fbf7be78d8542d239b4885e7 Mon Sep 17 00:00:00 2001 From: gazebo Date: Fri, 30 Nov 2018 17:19:44 +0800 Subject: [PATCH] - handle vendorSkuID is not numeric in updateOrderSkuOtherInfo --- business/jxcallback/orderman/order.go | 78 ++++++++++++++------------- 1 file changed, 42 insertions(+), 36 deletions(-) diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index d0bc61d3a..4f15df437 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -205,53 +205,59 @@ func (c *OrderManager) updateOrderSkuOtherInfo(order *model.GoodsOrder, db orm.O var sql string if globals.OrderUseNewTable || jxStoreID == globals.DebugStoreID { - vendorSkuIDs := make([]int64, len(orderSkus)) - for k, v := range orderSkus { - vendorSkuIDs[k] = utils.Str2Int64(v.VendorSkuID) + vendorSkuIDs := make([]int64, 0) + for _, v := range orderSkus { + intVendorSkuID := utils.Str2Int64WithDefault(v.VendorSkuID, 0) + if intVendorSkuID != 0 { + vendorSkuIDs = append(vendorSkuIDs, intVendorSkuID) + } } - if order.VendorID == model.VendorIDELM { // todo 临时用 - sql = ` + if len(vendorSkuIDs) > 0 { + if order.VendorID == model.VendorIDELM { // todo 临时用 + sql = ` SELECT t1.sku_id vendor_sku_id, IF(t1.custom_sku_id = -1, 0, t1.custom_sku_id) sku_id, t2.unit_price, t3.weight FROM eb_sku_id_map t1 LEFT JOIN store_sku_bind t2 ON t1.custom_sku_id = t2.sku_id AND t2.deleted_at = ? AND t2.store_id = ? LEFT JOIN sku t3 ON t1.custom_sku_id = t3.id AND t3.deleted_at = ? WHERE t1.sku_id IN (-1,` + dao.GenQuestionMarks(len(vendorSkuIDs)) + ")" - } else { - tableName := "t2" - if model.MultiStoresVendorMap[order.VendorID] == 1 { - tableName = "t1" - } - fieldPrefix := dao.ConvertDBFieldPrefix(model.VendorNames[order.VendorID]) - sql = ` + } else { + tableName := "t2" + if model.MultiStoresVendorMap[order.VendorID] == 1 { + tableName = "t1" + } + fieldPrefix := dao.ConvertDBFieldPrefix(model.VendorNames[order.VendorID]) + sql = ` SELECT %s.%s_id vendor_sku_id, t1.id sku_id, t2.unit_price, t1.weight FROM sku t1 LEFT JOIN store_sku_bind t2 ON t1.id = t2.sku_id AND t2.deleted_at = ? AND t2.store_id = ? WHERE t1.deleted_at = ? AND %s.%s_id IN (-1, ` + dao.GenQuestionMarks(len(vendorSkuIDs)) + ")" - sql = fmt.Sprintf(sql, tableName, fieldPrefix, tableName, fieldPrefix) - } - var skuInfos []*tStoreSkuBindAndVendorSkuID - db2 := dao.WrapDB(db) - if err = dao.GetRows(db2, &skuInfos, sql, utils.DefaultTimeValue, jxStoreID, utils.DefaultTimeValue, vendorSkuIDs); err != nil { - globals.SugarLogger.Errorf("updateOrderSkuOtherInfo can not get sku info for orderID:%s, error:%v", order.VendorOrderID, err) - return err - } - skumapper := make(map[int64]*tStoreSkuBindAndVendorSkuID) - for _, v := range skuInfos { - skumapper[v.VendorSkuID] = v - } + sql = fmt.Sprintf(sql, tableName, fieldPrefix, tableName, fieldPrefix) + } + var skuInfos []*tStoreSkuBindAndVendorSkuID + db2 := dao.WrapDB(db) + if err = dao.GetRows(db2, &skuInfos, sql, utils.DefaultTimeValue, jxStoreID, utils.DefaultTimeValue, vendorSkuIDs); err != nil { + globals.SugarLogger.Errorf("updateOrderSkuOtherInfo can not get sku info for orderID:%s, error:%v", order.VendorOrderID, err) + return err + } + skumapper := make(map[int64]*tStoreSkuBindAndVendorSkuID) + for _, v := range skuInfos { + skumapper[v.VendorSkuID] = v + } - for _, v := range orderSkus { - if v.VendorSkuID != "-70000" { // todo hard code - skuBindInfo := skumapper[utils.Str2Int64(v.VendorSkuID)] - if skuBindInfo == nil { - globals.SugarLogger.Infof("updateOrderSkuOtherInfo [运营%s]%s订单sku找不到门店价格(或商品映射),orderID:%s, StoreID:%d, VendorSkuID:%s, sku:%v", opNum, model.VendorChineseNames[order.VendorID], order.VendorOrderID, jxStoreID, v.VendorSkuID, v) - } else { - v.JxSkuID = skuBindInfo.SkuID - v.ShopPrice = int64(skuBindInfo.UnitPrice) - v.Weight = skuBindInfo.Weight // 以本地信息中的WEIGHT为准 - order.ShopPrice += v.ShopPrice * int64(v.Count) - if skuBindInfo.UnitPrice == 0 { - globals.SugarLogger.Infof("updateOrderSkuOtherInfo [运营%s]%s订单sku门店价格为零(一般原因为没有门店价格信息),orderID:%s, StoreID:%d, SkuID:%d, sku:%v", opNum, model.VendorChineseNames[order.VendorID], order.VendorOrderID, jxStoreID, v.JxSkuID, v) + for _, v := range orderSkus { + intVendorSkuID := utils.Str2Int64WithDefault(v.VendorSkuID, 0) + if intVendorSkuID != 0 && v.VendorSkuID != "-70000" { // todo hard code + skuBindInfo := skumapper[intVendorSkuID] + if skuBindInfo == nil { + globals.SugarLogger.Infof("updateOrderSkuOtherInfo [运营%s]%s订单sku找不到门店价格(或商品映射),orderID:%s, StoreID:%d, VendorSkuID:%s, sku:%v", opNum, model.VendorChineseNames[order.VendorID], order.VendorOrderID, jxStoreID, v.VendorSkuID, v) + } else { + v.JxSkuID = skuBindInfo.SkuID + v.ShopPrice = int64(skuBindInfo.UnitPrice) + v.Weight = skuBindInfo.Weight // 以本地信息中的WEIGHT为准 + order.ShopPrice += v.ShopPrice * int64(v.Count) + if skuBindInfo.UnitPrice == 0 { + globals.SugarLogger.Infof("updateOrderSkuOtherInfo [运营%s]%s订单sku门店价格为零(一般原因为没有门店价格信息),orderID:%s, StoreID:%d, SkuID:%d, sku:%v", opNum, model.VendorChineseNames[order.VendorID], order.VendorOrderID, jxStoreID, v.JxSkuID, v) + } } } }