diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index f26759cff..328c4d5fa 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -432,7 +432,7 @@ func GetStoresSkusNew(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus bo if globals.EnableNewAct { err = updateActPrice4StoreSkuNameNew(db, storeIDs, skuIDs, skuNamesInfo) } else { - err = updateActPrice4StoreSkuName(db, storeIDs, skuIDs, skuNamesInfo) + // err = updateActPrice4StoreSkuName(db, storeIDs, skuIDs, skuNamesInfo) } globals.SugarLogger.Debugf("GetStoresSkusNew updateActPrice4StoreSkuName:%v", time.Now().Sub(beginTime)) } @@ -453,40 +453,40 @@ func GetStoreAndSkuIDsFromInfo(skuNamesInfo *StoreSkuNamesInfo) (storeIDs, skuID return jxutils.IntMap2List(storeIDMap), jxutils.IntMap2List(skuIDMap) } -func updateActPrice4StoreSkuName(db *dao.DaoDB, storeIDs, skuIDs []int, skuNamesInfo *StoreSkuNamesInfo) (err error) { - // 活动商品信息 - jxSkuPriceMap, err := dao.GetPromotionSkuPriceMap(db, model.VendorIDJX, storeIDs, skuIDs, time.Now(), time.Now()) - if err != nil { - globals.SugarLogger.Errorf("updateActPrice4StoreSkuName can not get sku promotion info for error:%v", err) - return err - } - jdSkuPriceMap, err2 := dao.GetPromotionSkuPriceMap(db, model.VendorIDJD, storeIDs, skuIDs, time.Now(), time.Now()) - if err = err2; err != nil { - globals.SugarLogger.Errorf("updateActPrice4StoreSkuName can not get sku promotion info for error:%v", err) - return err - } - for _, skuName := range skuNamesInfo.SkuNames { - if len(skuName.Skus2) > 0 { - for _, v := range skuName.Skus2 { - index := dao.GenSkuPriceMapKey(skuName.StoreID, v.SkuID) - if jdSkuPriceMap[index] != nil { - v.ActPrice = jdSkuPriceMap[index].Price - } - if jxSkuPriceMap[index] != nil { - v.EarningPrice = jxSkuPriceMap[index].EarningPrice - } +// func updateActPrice4StoreSkuName(db *dao.DaoDB, storeIDs, skuIDs []int, skuNamesInfo *StoreSkuNamesInfo) (err error) { +// // 活动商品信息 +// jxSkuPriceMap, err := dao.GetPromotionSkuPriceMap(db, model.VendorIDJX, storeIDs, skuIDs, time.Now(), time.Now()) +// if err != nil { +// globals.SugarLogger.Errorf("updateActPrice4StoreSkuName can not get sku promotion info for error:%v", err) +// return err +// } +// jdSkuPriceMap, err2 := dao.GetPromotionSkuPriceMap(db, model.VendorIDJD, storeIDs, skuIDs, time.Now(), time.Now()) +// if err = err2; err != nil { +// globals.SugarLogger.Errorf("updateActPrice4StoreSkuName can not get sku promotion info for error:%v", err) +// return err +// } +// for _, skuName := range skuNamesInfo.SkuNames { +// if len(skuName.Skus2) > 0 { +// for _, v := range skuName.Skus2 { +// index := dao.GenSkuPriceMapKey(skuName.StoreID, v.SkuID) +// if jdSkuPriceMap[index] != nil { +// v.ActPrice = jdSkuPriceMap[index].Price +// } +// if jxSkuPriceMap[index] != nil { +// v.EarningPrice = jxSkuPriceMap[index].EarningPrice +// } - v.RealEarningPrice = v.EarningPrice - if v.RealEarningPrice == 0 { - v.RealEarningPrice = int(jxutils.CaculateSkuEarningPrice(int64(v.BindPrice), int64(v.BindPrice), skuName.PayPercentage)) - } - } - } else { - skuName.UnitPrice = skuName.Price - } - } - return err -} +// v.RealEarningPrice = v.EarningPrice +// if v.RealEarningPrice == 0 { +// v.RealEarningPrice = int(jxutils.CaculateSkuEarningPrice(int64(v.BindPrice), int64(v.BindPrice), skuName.PayPercentage)) +// } +// } +// } else { +// skuName.UnitPrice = skuName.Price +// } +// } +// return err +// } func updateActPrice4StoreSkuNameNew(db *dao.DaoDB, storeIDs, skuIDs []int, skuNamesInfo *StoreSkuNamesInfo) (err error) { jxSkuPriceMap, err := dao.GetPromotionSkuPriceMap(db, model.VendorIDJX, storeIDs, skuIDs, time.Now(), time.Now()) @@ -500,21 +500,16 @@ func updateActPrice4StoreSkuNameNew(db *dao.DaoDB, storeIDs, skuIDs []int, skuNa globals.SugarLogger.Errorf("updateActPrice4StoreSkuNameNew can not get sku promotion info for error:%v", err) return err } - actStoreSkuMap := make(map[int64]*model.ActStoreSku2) - for _, v := range actStoreSkuList { - index := jxutils.Combine2Int(v.StoreID, v.SkuID) - if actStoreSkuMap[index] == nil || actStoreSkuMap[index].ActualActPrice > v.ActualActPrice { - actStoreSkuMap[index] = v - } - } + actStoreSkuMap := jxutils.NewActStoreSkuMap(actStoreSkuList, true) for _, skuName := range skuNamesInfo.SkuNames { if len(skuName.Skus2) > 0 { for _, v := range skuName.Skus2 { - index := dao.GenSkuPriceMapKey(skuName.StoreID, v.SkuID) - if actStoreSkuMap[index] != nil { - v.ActPrice = int(actStoreSkuMap[index].ActualActPrice) + actStoreSku := actStoreSkuMap.GetActStoreSku(skuName.StoreID, v.SkuID, -1) + if actStoreSku != nil { + v.ActPrice = int(actStoreSku.ActualActPrice) } + index := dao.GenSkuPriceMapKey(skuName.StoreID, v.SkuID) if jxSkuPriceMap[index] != nil { v.EarningPrice = jxSkuPriceMap[index].EarningPrice } @@ -593,230 +588,230 @@ func updateSaleInfo4StoreSkuName(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs // 商品不可售,直接排除 // 如果门店商品是可售状态,那么会忽略区域限制。否则有区域限制 -func GetStoresSkusOld(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus bool, keyword string, isBySku bool, params map[string]interface{}, offset, pageSize int) (skuNamesInfo *StoreSkuNamesInfo, err error) { - db := dao.GetDB() - sql, sqlParams, err := getGetStoresSkusBaseSQL(db, storeIDs, skuIDs, isFocus, keyword, isBySku, params) - if err != nil { - return nil, err - } - sql += ` - GROUP BY - t1.id, - t1.created_at, - t1.updated_at, - t1.last_operator, - t1.deleted_at, - t1.prefix, - t1.name, - t1.brand_id, - t1.category_id, - t1.is_global, - t1.unit, - t1.price, - t1.img, - t1.elm_img_hash_code, - t3.id, - t3.name, - t3.pay_percentage` - if isBySku { - sql += `, - t2.id` - } - sqlData := ` - SELECT - SQL_CALC_FOUND_ROWS - t1.id, - t1.created_at, - t1.updated_at, - t1.last_operator, - t1.deleted_at, - t1.prefix, - t1.name, - t1.brand_id, - t1.category_id, - t1.is_global, - t1.unit, - t1.price, - t1.img, - t1.elm_img_hash_code, - t3.id store_id, - t3.name store_name, - t3.pay_percentage, - CONCAT("[", GROUP_CONCAT(DISTINCT CONCAT('{"id":', t2.id, ',"comment":"', t2.comment, '","status":', t2.status, ',"createdAt":"', - CONCAT(REPLACE(IF(t4.created_at IS NULL, '1970-01-01 00:00:00', t4.created_at)," ","T"),"+08:00"), '","updatedAt":"', CONCAT(REPLACE(IF(t4.updated_at IS NULL, '1970-01-01 00:00:00', t4.updated_at)," ","T"),"+08:00"), - '","lastOperator":"', IF(t4.last_operator IS NULL, '', t4.last_operator), '","specQuality":', t2.spec_quality, ',"specUnit":"', t2.spec_unit, '","weight":', t2.weight, - ',"categoryID":', t2.category_id, ',"nameID":', t2.name_id, ',"subStoreID":', IF(t4.sub_store_id IS NULL, 0, t4.sub_store_id), - ',"price":', IF(t4.price IS NULL, 0, t4.price), ',"unitPrice":', IF(t4.unit_price IS NULL, t1.price, t4.unit_price), - ',"storeSkuStatus":', IF(t4.status IS NULL, 0, t4.status), - ',"jdID":', t2.jd_id, ',"jdSyncStatus":', IF(t4.jd_sync_status IS NULL, 0, t4.jd_sync_status), - ',"ebaiID":', IF(t4.ebai_id IS NULL, 0, t4.ebai_id), ',"ebaiSyncStatus":', IF(t4.ebai_sync_status IS NULL, 0, t4.ebai_sync_status), - ',"mtwmID":', IF(t4.mtwm_id IS NULL, 0, t4.mtwm_id), ',"mtwmSyncStatus":', IF(t4.mtwm_sync_status IS NULL, 0, t4.mtwm_sync_status), - ',"wscID":', IF(t4.wsc_id IS NULL, 0, t4.wsc_id), ',"wscSyncStatus":', IF(t4.wsc_sync_status IS NULL, 0, t4.wsc_sync_status), - "}")), "]") skus_str - ` + sql + ` - ORDER BY t1.id DESC - LIMIT ? OFFSET ?` - pageSize = jxutils.FormalizePageSize(pageSize) - sqlOffset := offset - sqlPageSize := pageSize - isSaleInfo := params["stFromTime"] != nil - if isSaleInfo { - sqlOffset = 0 - sqlPageSize = jxutils.FormalizePageSize(-1) - } - sqlParams = append(sqlParams, sqlPageSize, sqlOffset) - skuNamesInfo = &StoreSkuNamesInfo{} - // globals.SugarLogger.Debug(sqlData) - dao.Begin(db) - defer func() { - if r := recover(); r != nil { - dao.Rollback(db) - panic(r) - } - }() - // globals.SugarLogger.Debug(sqlData, sqlParams) - if err = dao.GetRows(db, &skuNamesInfo.SkuNames, sqlData, sqlParams...); err == nil { - skuNamesInfo.TotalCount = dao.GetLastTotalRowCount(db) - dao.Commit(db) +// func GetStoresSkusOld(ctx *jxcontext.Context, storeIDs, skuIDs []int, isFocus bool, keyword string, isBySku bool, params map[string]interface{}, offset, pageSize int) (skuNamesInfo *StoreSkuNamesInfo, err error) { +// db := dao.GetDB() +// sql, sqlParams, err := getGetStoresSkusBaseSQL(db, storeIDs, skuIDs, isFocus, keyword, isBySku, params) +// if err != nil { +// return nil, err +// } +// sql += ` +// GROUP BY +// t1.id, +// t1.created_at, +// t1.updated_at, +// t1.last_operator, +// t1.deleted_at, +// t1.prefix, +// t1.name, +// t1.brand_id, +// t1.category_id, +// t1.is_global, +// t1.unit, +// t1.price, +// t1.img, +// t1.elm_img_hash_code, +// t3.id, +// t3.name, +// t3.pay_percentage` +// if isBySku { +// sql += `, +// t2.id` +// } +// sqlData := ` +// SELECT +// SQL_CALC_FOUND_ROWS +// t1.id, +// t1.created_at, +// t1.updated_at, +// t1.last_operator, +// t1.deleted_at, +// t1.prefix, +// t1.name, +// t1.brand_id, +// t1.category_id, +// t1.is_global, +// t1.unit, +// t1.price, +// t1.img, +// t1.elm_img_hash_code, +// t3.id store_id, +// t3.name store_name, +// t3.pay_percentage, +// CONCAT("[", GROUP_CONCAT(DISTINCT CONCAT('{"id":', t2.id, ',"comment":"', t2.comment, '","status":', t2.status, ',"createdAt":"', +// CONCAT(REPLACE(IF(t4.created_at IS NULL, '1970-01-01 00:00:00', t4.created_at)," ","T"),"+08:00"), '","updatedAt":"', CONCAT(REPLACE(IF(t4.updated_at IS NULL, '1970-01-01 00:00:00', t4.updated_at)," ","T"),"+08:00"), +// '","lastOperator":"', IF(t4.last_operator IS NULL, '', t4.last_operator), '","specQuality":', t2.spec_quality, ',"specUnit":"', t2.spec_unit, '","weight":', t2.weight, +// ',"categoryID":', t2.category_id, ',"nameID":', t2.name_id, ',"subStoreID":', IF(t4.sub_store_id IS NULL, 0, t4.sub_store_id), +// ',"price":', IF(t4.price IS NULL, 0, t4.price), ',"unitPrice":', IF(t4.unit_price IS NULL, t1.price, t4.unit_price), +// ',"storeSkuStatus":', IF(t4.status IS NULL, 0, t4.status), +// ',"jdID":', t2.jd_id, ',"jdSyncStatus":', IF(t4.jd_sync_status IS NULL, 0, t4.jd_sync_status), +// ',"ebaiID":', IF(t4.ebai_id IS NULL, 0, t4.ebai_id), ',"ebaiSyncStatus":', IF(t4.ebai_sync_status IS NULL, 0, t4.ebai_sync_status), +// ',"mtwmID":', IF(t4.mtwm_id IS NULL, 0, t4.mtwm_id), ',"mtwmSyncStatus":', IF(t4.mtwm_sync_status IS NULL, 0, t4.mtwm_sync_status), +// ',"wscID":', IF(t4.wsc_id IS NULL, 0, t4.wsc_id), ',"wscSyncStatus":', IF(t4.wsc_sync_status IS NULL, 0, t4.wsc_sync_status), +// "}")), "]") skus_str +// ` + sql + ` +// ORDER BY t1.id DESC +// LIMIT ? OFFSET ?` +// pageSize = jxutils.FormalizePageSize(pageSize) +// sqlOffset := offset +// sqlPageSize := pageSize +// isSaleInfo := params["stFromTime"] != nil +// if isSaleInfo { +// sqlOffset = 0 +// sqlPageSize = jxutils.FormalizePageSize(-1) +// } +// sqlParams = append(sqlParams, sqlPageSize, sqlOffset) +// skuNamesInfo = &StoreSkuNamesInfo{} +// // globals.SugarLogger.Debug(sqlData) +// dao.Begin(db) +// defer func() { +// if r := recover(); r != nil { +// dao.Rollback(db) +// panic(r) +// } +// }() +// // globals.SugarLogger.Debug(sqlData, sqlParams) +// if err = dao.GetRows(db, &skuNamesInfo.SkuNames, sqlData, sqlParams...); err == nil { +// skuNamesInfo.TotalCount = dao.GetLastTotalRowCount(db) +// dao.Commit(db) - // 活动商品信息 - jxSkuPriceMap, err2 := dao.GetPromotionSkuPriceMap(db, model.VendorIDJX, storeIDs, skuIDs, time.Now(), time.Now()) - if err = err2; err != nil { - globals.SugarLogger.Errorf("GetStoresSkus can not get sku promotion info for error:%v", err) - return nil, err - } - jdSkuPriceMap, err2 := dao.GetPromotionSkuPriceMap(db, model.VendorIDJD, storeIDs, skuIDs, time.Now(), time.Now()) - if err = err2; err != nil { - globals.SugarLogger.Errorf("GetStoresSkus can not get sku promotion info for error:%v", err) - return nil, err - } - for _, skuName := range skuNamesInfo.SkuNames { - if skuName.SkusStr != "" { - if err = utils.UnmarshalUseNumber([]byte(skuName.SkusStr), &skuName.Skus); err != nil { - return nil, err - } - if len(skuName.Skus) > 0 { - skuName.UnitPrice = int(utils.MustInterface2Int64(skuName.Skus[0]["unitPrice"])) - for _, v := range skuName.Skus { - index := dao.GenSkuPriceMapKey(skuName.StoreID, int(utils.MustInterface2Int64(v["id"]))) - if jdSkuPriceMap[index] != nil { - v["actPrice"] = jdSkuPriceMap[index].Price - } else { - v["actPrice"] = 0 - } +// // 活动商品信息 +// jxSkuPriceMap, err2 := dao.GetPromotionSkuPriceMap(db, model.VendorIDJX, storeIDs, skuIDs, time.Now(), time.Now()) +// if err = err2; err != nil { +// globals.SugarLogger.Errorf("GetStoresSkus can not get sku promotion info for error:%v", err) +// return nil, err +// } +// jdSkuPriceMap, err2 := dao.GetPromotionSkuPriceMap(db, model.VendorIDJD, storeIDs, skuIDs, time.Now(), time.Now()) +// if err = err2; err != nil { +// globals.SugarLogger.Errorf("GetStoresSkus can not get sku promotion info for error:%v", err) +// return nil, err +// } +// for _, skuName := range skuNamesInfo.SkuNames { +// if skuName.SkusStr != "" { +// if err = utils.UnmarshalUseNumber([]byte(skuName.SkusStr), &skuName.Skus); err != nil { +// return nil, err +// } +// if len(skuName.Skus) > 0 { +// skuName.UnitPrice = int(utils.MustInterface2Int64(skuName.Skus[0]["unitPrice"])) +// for _, v := range skuName.Skus { +// index := dao.GenSkuPriceMapKey(skuName.StoreID, int(utils.MustInterface2Int64(v["id"]))) +// if jdSkuPriceMap[index] != nil { +// v["actPrice"] = jdSkuPriceMap[index].Price +// } else { +// v["actPrice"] = 0 +// } - earningPrice := 0 - if jxSkuPriceMap[index] != nil { - earningPrice = jxSkuPriceMap[index].EarningPrice - } - v["earningPrice"] = earningPrice +// earningPrice := 0 +// if jxSkuPriceMap[index] != nil { +// earningPrice = jxSkuPriceMap[index].EarningPrice +// } +// v["earningPrice"] = earningPrice - realEarningPrice := earningPrice - if realEarningPrice == 0 { - shopPrice := utils.Interface2Int64WithDefault(v["price"], 0) - realEarningPrice = int(jxutils.CaculateSkuEarningPrice(shopPrice, shopPrice, skuName.PayPercentage)) - } - v["realEarningPrice"] = realEarningPrice +// realEarningPrice := earningPrice +// if realEarningPrice == 0 { +// shopPrice := utils.Interface2Int64WithDefault(v["price"], 0) +// realEarningPrice = int(jxutils.CaculateSkuEarningPrice(shopPrice, shopPrice, skuName.PayPercentage)) +// } +// v["realEarningPrice"] = realEarningPrice - delete(v, "unitPrice") - } - } else { - skuName.UnitPrice = skuName.Price - } - } - } - if isSaleInfo { - var ( - saleInfoList []*SkuSaleInfo - skuIDs []int - timeList []time.Time - fromCount, toCount int - ) - saleInfoMap := make(map[int64]*SkuSaleInfo) - for _, skuName := range skuNamesInfo.SkuNames { - for _, sku := range skuName.Skus { - skuIDs = append(skuIDs, int(utils.MustInterface2Int64(sku["id"]))) - } - } - toTimeStr := "" - if params["stToTime"] != nil { - toTimeStr = params["stToTime"].(string) - } - if timeList, err = jxutils.BatchStr2Time(params["stFromTime"].(string), toTimeStr); err != nil { - return nil, err - } - if params["stFromCount"] != nil { - fromCount = params["stFromCount"].(int) - } - toCount = math.MaxInt32 - if params["stToCount"] != nil { - toCount = params["stToCount"].(int) - } - // 不能用SQL筛除,否则不能区分是没有销量,还是不在条件中 - if saleInfoList, err = GetStoresSkusSaleInfo(ctx, storeIDs, skuIDs, timeList[0], timeList[1], 0, math.MaxInt32); err != nil { - return nil, err - } - for _, saleInfo := range saleInfoList { - saleInfoMap[int64(saleInfo.StoreID)*100000+int64(saleInfo.SkuID)] = saleInfo - } - var newSkuNames []*StoreSkuNameExt - for _, skuName := range skuNamesInfo.SkuNames { - var newSkus []map[string]interface{} - storeID2 := int64(skuName.StoreID) * 100000 - for _, sku := range skuName.Skus { - saleInfo := saleInfoMap[storeID2+utils.MustInterface2Int64(sku["id"])] - if saleInfo == nil && fromCount == 0 { - saleInfo = &SkuSaleInfo{} - } - if saleInfo != nil && saleInfo.Count >= fromCount && saleInfo.Count <= toCount { - sku["times"] = saleInfo.Times - sku["count"] = saleInfo.Count - newSkus = append(newSkus, sku) - } - } - if len(newSkus) > 0 { - skuName.Skus = newSkus - newSkuNames = append(newSkuNames, skuName) - } - } - skuNamesInfo.TotalCount = len(newSkuNames) - skuNamesInfo.SkuNames = nil - if offset < skuNamesInfo.TotalCount { - endIndex := offset + pageSize - if endIndex > skuNamesInfo.TotalCount { - endIndex = skuNamesInfo.TotalCount - } - skuNamesInfo.SkuNames = newSkuNames[offset:endIndex] - } - } - if globals.EnablePendingChange { - if isGetOpRequest, ok := params["isGetOpRequest"].(bool); ok && isGetOpRequest { - nameIDs := make([]int, len(skuNamesInfo.SkuNames)) - for k, skuName := range skuNamesInfo.SkuNames { - nameIDs[k] = skuName.ID - } - pagedInfo, err2 := GetStoreOpRequests(ctx, utils.DefaultTimeValue, utils.DefaultTimeValue, "", storeIDs, nameIDs, nil, []int{model.RequestStatusNew}, 0, -1) - if err = err2; err != nil { - return nil, err - } - requestList := pagedInfo.Data.([]*StoreOpRequestInfo) - requestMap := make(map[int]*StoreOpRequestInfo) - for _, requestOp := range requestList { - requestMap[requestOp.ItemID] = requestOp - } - for _, skuName := range skuNamesInfo.SkuNames { - if requestOp := requestMap[skuName.ID]; requestOp != nil { - skuName.PendingUnitPrice = requestOp.IntParam1 - skuName.PendingOpType = requestOp.Type - } - } - } - } - } else { - dao.Rollback(db) - } - return skuNamesInfo, err -} +// delete(v, "unitPrice") +// } +// } else { +// skuName.UnitPrice = skuName.Price +// } +// } +// } +// if isSaleInfo { +// var ( +// saleInfoList []*SkuSaleInfo +// skuIDs []int +// timeList []time.Time +// fromCount, toCount int +// ) +// saleInfoMap := make(map[int64]*SkuSaleInfo) +// for _, skuName := range skuNamesInfo.SkuNames { +// for _, sku := range skuName.Skus { +// skuIDs = append(skuIDs, int(utils.MustInterface2Int64(sku["id"]))) +// } +// } +// toTimeStr := "" +// if params["stToTime"] != nil { +// toTimeStr = params["stToTime"].(string) +// } +// if timeList, err = jxutils.BatchStr2Time(params["stFromTime"].(string), toTimeStr); err != nil { +// return nil, err +// } +// if params["stFromCount"] != nil { +// fromCount = params["stFromCount"].(int) +// } +// toCount = math.MaxInt32 +// if params["stToCount"] != nil { +// toCount = params["stToCount"].(int) +// } +// // 不能用SQL筛除,否则不能区分是没有销量,还是不在条件中 +// if saleInfoList, err = GetStoresSkusSaleInfo(ctx, storeIDs, skuIDs, timeList[0], timeList[1], 0, math.MaxInt32); err != nil { +// return nil, err +// } +// for _, saleInfo := range saleInfoList { +// saleInfoMap[int64(saleInfo.StoreID)*100000+int64(saleInfo.SkuID)] = saleInfo +// } +// var newSkuNames []*StoreSkuNameExt +// for _, skuName := range skuNamesInfo.SkuNames { +// var newSkus []map[string]interface{} +// storeID2 := int64(skuName.StoreID) * 100000 +// for _, sku := range skuName.Skus { +// saleInfo := saleInfoMap[storeID2+utils.MustInterface2Int64(sku["id"])] +// if saleInfo == nil && fromCount == 0 { +// saleInfo = &SkuSaleInfo{} +// } +// if saleInfo != nil && saleInfo.Count >= fromCount && saleInfo.Count <= toCount { +// sku["times"] = saleInfo.Times +// sku["count"] = saleInfo.Count +// newSkus = append(newSkus, sku) +// } +// } +// if len(newSkus) > 0 { +// skuName.Skus = newSkus +// newSkuNames = append(newSkuNames, skuName) +// } +// } +// skuNamesInfo.TotalCount = len(newSkuNames) +// skuNamesInfo.SkuNames = nil +// if offset < skuNamesInfo.TotalCount { +// endIndex := offset + pageSize +// if endIndex > skuNamesInfo.TotalCount { +// endIndex = skuNamesInfo.TotalCount +// } +// skuNamesInfo.SkuNames = newSkuNames[offset:endIndex] +// } +// } +// if globals.EnablePendingChange { +// if isGetOpRequest, ok := params["isGetOpRequest"].(bool); ok && isGetOpRequest { +// nameIDs := make([]int, len(skuNamesInfo.SkuNames)) +// for k, skuName := range skuNamesInfo.SkuNames { +// nameIDs[k] = skuName.ID +// } +// pagedInfo, err2 := GetStoreOpRequests(ctx, utils.DefaultTimeValue, utils.DefaultTimeValue, "", storeIDs, nameIDs, nil, []int{model.RequestStatusNew}, 0, -1) +// if err = err2; err != nil { +// return nil, err +// } +// requestList := pagedInfo.Data.([]*StoreOpRequestInfo) +// requestMap := make(map[int]*StoreOpRequestInfo) +// for _, requestOp := range requestList { +// requestMap[requestOp.ItemID] = requestOp +// } +// for _, skuName := range skuNamesInfo.SkuNames { +// if requestOp := requestMap[skuName.ID]; requestOp != nil { +// skuName.PendingUnitPrice = requestOp.IntParam1 +// skuName.PendingOpType = requestOp.Type +// } +// } +// } +// } +// } else { +// dao.Rollback(db) +// } +// return skuNamesInfo, err +// } func getValidStoreVendorMap(db *dao.DaoDB, storeIDs []int) (realVendorMap map[int]int, err error) { storeMapList, err := dao.GetStoresMapList(db, nil, storeIDs, model.StoreStatusAll, model.StoreIsSyncYes, "") diff --git a/business/jxutils/jxutils_act.go b/business/jxutils/jxutils_act.go new file mode 100644 index 000000000..7e9ce4d8e --- /dev/null +++ b/business/jxutils/jxutils_act.go @@ -0,0 +1,39 @@ +package jxutils + +import "git.rosy.net.cn/jx-callback/business/model" + +type ActStoreSkuMap struct { + actStoreSkuMap map[int64]map[int]*model.ActStoreSku2 +} + +func NewActStoreSkuMap(actStoreSkuList []*model.ActStoreSku2, isActPrice bool) (actMap *ActStoreSkuMap) { + actMap = &ActStoreSkuMap{} + actStoreSkuMap := make(map[int64]map[int]*model.ActStoreSku2) + for _, v := range actStoreSkuList { + index := Combine2Int(v.StoreID, v.SkuID) + if actStoreSkuMap[index] == nil { + actStoreSkuMap[index] = make(map[int]*model.ActStoreSku2) + } + if actStoreSkuMap[index][v.VendorID] == nil || + (isActPrice && actStoreSkuMap[index][v.VendorID].ActualActPrice > v.ActualActPrice) || + (!isActPrice && actStoreSkuMap[index][v.VendorID].EarningPrice > v.EarningPrice) { + actStoreSkuMap[index][v.VendorID] = v + } + } + actMap.actStoreSkuMap = actStoreSkuMap + return actMap +} + +func (a *ActStoreSkuMap) GetActStoreSku(storeID, skuID, vendorID int) (storeSku *model.ActStoreSku2) { + index := Combine2Int(storeID, skuID) + if a.actStoreSkuMap[index] != nil { + if vendorID < 0 { + for k := range a.actStoreSkuMap[index] { + vendorID = k + break + } + } + storeSku = a.actStoreSkuMap[index][vendorID] + } + return storeSku +}