用GetStoreSkuPriceAndWeight替换之前订单中更新订单商品信息逻辑
This commit is contained in:
@@ -21,13 +21,6 @@ import (
|
|||||||
"github.com/astaxie/beego/orm"
|
"github.com/astaxie/beego/orm"
|
||||||
)
|
)
|
||||||
|
|
||||||
type tStoreSkuBindAndVendorSkuID struct {
|
|
||||||
VendorSkuID int64 `orm:"column(vendor_sku_id)"`
|
|
||||||
SkuID int `orm:"column(sku_id)"`
|
|
||||||
Weight int
|
|
||||||
Price int
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -323,49 +316,25 @@ func (c *OrderManager) updateOrderSkuOtherInfo(order *model.GoodsOrder, db *dao.
|
|||||||
}
|
}
|
||||||
orderSkus := order.Skus
|
orderSkus := order.Skus
|
||||||
|
|
||||||
vendorSkuIDs := make([]int64, 0)
|
var vendorSkuIDs []string
|
||||||
for _, v := range orderSkus {
|
for _, v := range orderSkus {
|
||||||
intVendorSkuID := utils.Str2Int64WithDefault(v.VendorSkuID, 0)
|
if v.VendorSkuID != "" {
|
||||||
if intVendorSkuID != 0 {
|
vendorSkuIDs = append(vendorSkuIDs, v.VendorSkuID)
|
||||||
vendorSkuIDs = append(vendorSkuIDs, intVendorSkuID)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(vendorSkuIDs) > 0 {
|
if len(vendorSkuIDs) > 0 {
|
||||||
tableName := "t2"
|
l, err := dao.GetStoreSkuPriceAndWeight(db, order.VendorStoreID, order.VendorID, vendorSkuIDs)
|
||||||
if model.MultiStoresVendorMap[order.VendorID] == 1 {
|
if err != nil {
|
||||||
tableName = "t1"
|
|
||||||
}
|
|
||||||
fieldPrefix := dao.ConvertDBFieldPrefix(model.VendorNames[order.VendorID])
|
|
||||||
sql := `
|
|
||||||
SELECT %s.%s_id vendor_sku_id, t1.id sku_id, t2.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)
|
|
||||||
if order.VendorID == model.VendorIDJX {
|
|
||||||
sql = `
|
|
||||||
SELECT t1.id vendor_sku_id, t1.id sku_id, t2.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 t1.id IN (-1, ` + dao.GenQuestionMarks(len(vendorSkuIDs)) + ")"
|
|
||||||
}
|
|
||||||
var skuInfos []*tStoreSkuBindAndVendorSkuID
|
|
||||||
if err = dao.GetRows(db, &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
|
return err
|
||||||
}
|
}
|
||||||
skumapper := make(map[int64]*tStoreSkuBindAndVendorSkuID)
|
skumapper := storeSkuPriceAndWeight2Map(l)
|
||||||
for _, v := range skuInfos {
|
|
||||||
skumapper[v.VendorSkuID] = v
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, v := range orderSkus {
|
for _, v := range orderSkus {
|
||||||
v.VendorOrderID = order.VendorOrderID
|
v.VendorOrderID = order.VendorOrderID
|
||||||
v.VendorID = order.VendorID
|
v.VendorID = order.VendorID
|
||||||
|
|
||||||
intVendorSkuID := utils.Str2Int64WithDefault(v.VendorSkuID, 0)
|
intVendorSkuID := utils.Str2Int64WithDefault(v.VendorSkuID, 0)
|
||||||
if intVendorSkuID != 0 && v.VendorSkuID != "-70000" { // todo hard code
|
if intVendorSkuID != 0 && v.VendorSkuID != "-70000" { // todo hard code
|
||||||
skuBindInfo := skumapper[intVendorSkuID]
|
skuBindInfo := skumapper[v.VendorSkuID]
|
||||||
if skuBindInfo == nil {
|
if skuBindInfo == nil {
|
||||||
globals.SugarLogger.Infof("updateOrderSkuOtherInfo [运营%s]%s订单sku找不到门店价格(或商品映射),orderID:%s, StoreID:%d, VendorSkuID:%s, sku:%v", opNumStr, model.VendorChineseNames[order.VendorID], order.VendorOrderID, jxStoreID, v.VendorSkuID, v)
|
globals.SugarLogger.Infof("updateOrderSkuOtherInfo [运营%s]%s订单sku找不到门店价格(或商品映射),orderID:%s, StoreID:%d, VendorSkuID:%s, sku:%v", opNumStr, model.VendorChineseNames[order.VendorID], order.VendorOrderID, jxStoreID, v.VendorSkuID, v)
|
||||||
} else {
|
} else {
|
||||||
@@ -392,6 +361,14 @@ func (c *OrderManager) updateOrderSkuOtherInfo(order *model.GoodsOrder, db *dao.
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func storeSkuPriceAndWeight2Map(l []*dao.StoreSkuPriceAndWeight) (skuMapper map[string]*dao.StoreSkuPriceAndWeight) {
|
||||||
|
skuMapper = make(map[string]*dao.StoreSkuPriceAndWeight)
|
||||||
|
for _, v := range l {
|
||||||
|
skuMapper[v.VendorSkuID] = v
|
||||||
|
}
|
||||||
|
return skuMapper
|
||||||
|
}
|
||||||
|
|
||||||
func updateSingleOrderEarningPrice(order *model.GoodsOrder, db *dao.DaoDB) {
|
func updateSingleOrderEarningPrice(order *model.GoodsOrder, db *dao.DaoDB) {
|
||||||
jxStoreID := jxutils.GetShowStoreIDFromOrder(order)
|
jxStoreID := jxutils.GetShowStoreIDFromOrder(order)
|
||||||
skuIDMap := make(map[int]int)
|
skuIDMap := make(map[int]int)
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package orderman
|
package orderman
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
@@ -237,12 +236,11 @@ func (c *OrderManager) updateAfsOrderSkuOtherInfo(db *dao.DaoDB, order *model.Af
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
orderSkus := order.Skus
|
orderSkus := order.Skus
|
||||||
vendorSkuIDs := make([]int64, 0)
|
var vendorSkuIDs []string
|
||||||
skuIDMap := make(map[int]int)
|
skuIDMap := make(map[int]int)
|
||||||
for _, v := range orderSkus {
|
for _, v := range orderSkus {
|
||||||
intVendorSkuID := utils.Str2Int64WithDefault(v.VendorSkuID, 0)
|
if v.VendorSkuID != "" {
|
||||||
if intVendorSkuID != 0 {
|
vendorSkuIDs = append(vendorSkuIDs, v.VendorSkuID)
|
||||||
vendorSkuIDs = append(vendorSkuIDs, intVendorSkuID)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if skuID := jxutils.GetSkuIDFromOrderSkuFinancial(v); skuID > 0 {
|
if skuID := jxutils.GetSkuIDFromOrderSkuFinancial(v); skuID > 0 {
|
||||||
@@ -250,26 +248,12 @@ func (c *OrderManager) updateAfsOrderSkuOtherInfo(db *dao.DaoDB, order *model.Af
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(vendorSkuIDs) > 0 {
|
if len(vendorSkuIDs) > 0 {
|
||||||
tableName := "t2"
|
l, err := dao.GetStoreSkuPriceAndWeight(db, order.VendorStoreID, order.VendorID, vendorSkuIDs)
|
||||||
if model.MultiStoresVendorMap[order.VendorID] == 1 {
|
if err != nil {
|
||||||
tableName = "t1"
|
|
||||||
}
|
|
||||||
fieldPrefix := dao.ConvertDBFieldPrefix(model.VendorNames[order.VendorID])
|
|
||||||
sql := `
|
|
||||||
SELECT %s.%s_id vendor_sku_id, t1.id sku_id, t2.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
|
|
||||||
if err = dao.GetRows(db, &skuInfos, sql, utils.DefaultTimeValue, jxStoreID, utils.DefaultTimeValue, vendorSkuIDs); err != nil {
|
|
||||||
globals.SugarLogger.Errorf("updateAfsOrderSkuOtherInfo can not get sku info for orderID:%s, error:%v", order.VendorOrderID, err)
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
skumapper := make(map[int64]*tStoreSkuBindAndVendorSkuID)
|
skumapper := storeSkuPriceAndWeight2Map(l)
|
||||||
for _, v := range skuInfos {
|
|
||||||
skumapper[v.VendorSkuID] = v
|
|
||||||
}
|
|
||||||
var actStoreSkuMap *jxutils.ActStoreSkuMap
|
var actStoreSkuMap *jxutils.ActStoreSkuMap
|
||||||
if len(skuIDMap) > 0 {
|
if len(skuIDMap) > 0 {
|
||||||
if order2, err2 := c.LoadOrder(order.VendorOrderID, order.VendorID); err2 == nil {
|
if order2, err2 := c.LoadOrder(order.VendorOrderID, order.VendorID); err2 == nil {
|
||||||
@@ -292,7 +276,7 @@ func (c *OrderManager) updateAfsOrderSkuOtherInfo(db *dao.DaoDB, order *model.Af
|
|||||||
|
|
||||||
intVendorSkuID := utils.Str2Int64WithDefault(v.VendorSkuID, 0)
|
intVendorSkuID := utils.Str2Int64WithDefault(v.VendorSkuID, 0)
|
||||||
if intVendorSkuID != 0 && v.VendorSkuID != "-70000" { // todo hard code
|
if intVendorSkuID != 0 && v.VendorSkuID != "-70000" { // todo hard code
|
||||||
skuBindInfo := skumapper[intVendorSkuID]
|
skuBindInfo := skumapper[v.VendorSkuID]
|
||||||
if skuBindInfo == nil {
|
if skuBindInfo == nil {
|
||||||
globals.SugarLogger.Infof("updateAfsOrderSkuOtherInfo [运营%s]%s订单sku找不到门店价格(或商品映射),orderID:%s, StoreID:%d, VendorSkuID:%s, sku:%v", opNumStr, model.VendorChineseNames[order.VendorID], order.VendorOrderID, jxStoreID, v.VendorSkuID, v)
|
globals.SugarLogger.Infof("updateAfsOrderSkuOtherInfo [运营%s]%s订单sku找不到门店价格(或商品映射),orderID:%s, StoreID:%d, VendorSkuID:%s, sku:%v", opNumStr, model.VendorChineseNames[order.VendorID], order.VendorOrderID, jxStoreID, v.VendorSkuID, v)
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -207,6 +207,13 @@ type SkuNameAndPlace struct {
|
|||||||
Type int `json:"type"`
|
Type int `json:"type"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type StoreSkuPriceAndWeight struct {
|
||||||
|
VendorSkuID string `orm:"column(vendor_sku_id)"`
|
||||||
|
SkuID int `orm:"column(sku_id)"`
|
||||||
|
Weight int
|
||||||
|
Price int
|
||||||
|
}
|
||||||
|
|
||||||
// todo 应该通过需要同步的skuid来驱动同步分类,而不是当前这种分开的逻辑
|
// todo 应该通过需要同步的skuid来驱动同步分类,而不是当前这种分开的逻辑
|
||||||
// 单门店模式厂商适用
|
// 单门店模式厂商适用
|
||||||
// 从store_sku_bind中,得到所有依赖的商家分类信息
|
// 从store_sku_bind中,得到所有依赖的商家分类信息
|
||||||
@@ -631,6 +638,42 @@ func oldGetFullStoreSkus(db *DaoDB, vendorID, storeID int) (skus []*StoreSkuSync
|
|||||||
return skus, err
|
return skus, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetStoreSkuPriceAndWeight(db *DaoDB, vendorStoreID string, vendorID int, vendorSkuIDs []string) (l []*StoreSkuPriceAndWeight, err error) {
|
||||||
|
var vendorSkuIDField, sqlThingMap string
|
||||||
|
var thingMapParams []interface{}
|
||||||
|
if vendorID == model.VendorIDJX {
|
||||||
|
vendorSkuIDField = "t1.id"
|
||||||
|
} else if model.MultiStoresVendorMap[vendorID] != 0 {
|
||||||
|
sqlThingMap = `
|
||||||
|
LEFT JOIN thing_map t4 ON t4.thing_type = ? AND t4.thing_id = t1.id AND t4.deleted_at = ? AND t4.vendor_id = t3.vendor_id AND t4.vendor_org_code = t3.vendor_org_code`
|
||||||
|
thingMapParams = []interface{}{
|
||||||
|
model.ThingTypeSku, utils.DefaultTimeValue,
|
||||||
|
}
|
||||||
|
vendorSkuIDField = "t4.vendor_thing_id"
|
||||||
|
} else {
|
||||||
|
vendorSkuIDField = fmt.Sprintf("t2.%s_id", ConvertDBFieldPrefix(model.VendorNames[vendorID]))
|
||||||
|
}
|
||||||
|
sql := fmt.Sprintf(`
|
||||||
|
SELECT %s vendor_sku_id, t1.id sku_id, t2.price, t1.weight
|
||||||
|
FROM sku t1
|
||||||
|
LEFT JOIN store_sku_bind t2 ON t2.sku_id = t1.id AND t2.deleted_at = ?
|
||||||
|
LEFT JOIN store_map t3 ON t3.store_id = t2.store_id AND t3.vendor_id = ? AND t3.vendor_store_id = ? AND t2.deleted_at = ?
|
||||||
|
%s
|
||||||
|
WHERE %s IN (`+GenQuestionMarks(len(vendorSkuIDs))+`)`, vendorSkuIDField, sqlThingMap, vendorSkuIDField)
|
||||||
|
sqlParams := []interface{}{
|
||||||
|
utils.DefaultTimeValue,
|
||||||
|
vendorID, vendorStoreID, utils.DefaultTimeValue,
|
||||||
|
}
|
||||||
|
sqlParams = append(sqlParams, thingMapParams...)
|
||||||
|
if vendorID == model.VendorIDJX {
|
||||||
|
sqlParams = append(sqlParams, utils.StringSlice2Int(vendorSkuIDs))
|
||||||
|
} else {
|
||||||
|
sqlParams = append(sqlParams, vendorSkuIDs)
|
||||||
|
}
|
||||||
|
err = GetRows(db, &l, sql, sqlParams...)
|
||||||
|
return l, err
|
||||||
|
}
|
||||||
|
|
||||||
// 这个函数之前是要设置没有删除或同步标志不为0的,会导致将同步标志不为0且删除了的把标志去掉,现在改为只设置没有删除的
|
// 这个函数之前是要设置没有删除或同步标志不为0的,会导致将同步标志不为0且删除了的把标志去掉,现在改为只设置没有删除的
|
||||||
func SetStoreSkuSyncStatus(db *DaoDB, vendorID int, storeIDs []int, skuIDs []int, syncStatus int) (num int64, err error) {
|
func SetStoreSkuSyncStatus(db *DaoDB, vendorID int, storeIDs []int, skuIDs []int, syncStatus int) (num int64, err error) {
|
||||||
globals.SugarLogger.Debugf("SetStoreSkuSyncStatus, storeIDs:%v, vendorID:%d", storeIDs, vendorID)
|
globals.SugarLogger.Debugf("SetStoreSkuSyncStatus, storeIDs:%v, vendorID:%d", storeIDs, vendorID)
|
||||||
|
|||||||
Reference in New Issue
Block a user