价格统计

This commit is contained in:
苏尹岚
2020-01-03 10:54:31 +08:00
parent 15c1c347b2
commit 22b8f16701
3 changed files with 48 additions and 33 deletions

View File

@@ -2315,7 +2315,38 @@ func GetTopCategoriesByStoreIDs(ctx *jxcontext.Context, storeIDs []int) (skuCate
func RefershStoreSkusMidPrice(ctx *jxcontext.Context, storeIDs []int) (err error) {
db := dao.GetDB()
_, err = dao.RefershStoreSkusMidPrice(db, storeIDs)
if len(storeIDs) == 0 {
return err
}
var skuBindInfos []*StoreSkuBindInfo
for _, v := range storeIDs {
store, err := dao.GetStoreDetail(db, v, -1)
if err != nil {
return err
}
var payPercentage int
if payPercentage < 50 {
payPercentage = 70
} else {
payPercentage = store.PayPercentage
}
storeSkuList, err := dao.GetStoresSkusInfo(db, []int{v}, nil)
for _, storeSku := range storeSkuList {
priceReferList, err := dao.GetPriceReferSnapshotNoPage(db, []int{store.CityCode}, nil, []int{storeSku.SkuID}, utils.Time2Date(time.Now().AddDate(0, 0, -1)))
if err != nil {
return err
}
if len(priceReferList) > 0 {
skuBindInfo := &StoreSkuBindInfo{
StoreID: v,
NameID: priceReferList[0].NameID,
UnitPrice: priceReferList[0].MidUnitPrice * payPercentage / 100,
}
skuBindInfos = append(skuBindInfos, skuBindInfo)
}
}
updateStoresSkusWithoutSync(ctx, db, []int{v}, skuBindInfos, false)
}
if err == nil {
CreateStorePriceScore(ctx)
}

View File

@@ -107,7 +107,7 @@ func BeginSavePriceRefer(ctx *jxcontext.Context, cityCodes, skuIDs []int, isAsyn
}
for _, v := range storeList {
sql := `
SELECT DISTINCT b.city_code,a.store_id,a.unit_price,c.name_id
SELECT DISTINCT b.city_code, a.store_id, Round(a.unit_price/IF(b.pay_percentage < 50 , 70, b.pay_percentage) * 100) AS unit_price, c.name_id
FROM store_sku_bind a
JOIN store b ON b.id = a.store_id AND b.deleted_at = ? AND b.status != ?
JOIN sku c ON c.id = a.sku_id
@@ -142,19 +142,27 @@ func BeginSavePriceRefer(ctx *jxcontext.Context, cityCodes, skuIDs []int, isAsyn
}
dao.GetRows(db, &tList, sql, sqlParams...)
skuNameMap := make(map[int][]int)
for _, vv := range tList {
if len(tList) > 0 {
for _, vv := range tList {
skuNameMap[vv.NameID] = append(skuNameMap[vv.NameID], vv.UnitPrice)
if v.CityCode == 110100 && vv.NameID == 11410 {
fmt.Println(v.ID, vv)
}
}
if citySkuMap[v.CityCode] != nil {
if citySkuMap[v.CityCode][vv.NameID] != nil {
citySkuMap[v.CityCode][vv.NameID] = append(citySkuMap[v.CityCode][vv.NameID], vv.UnitPrice)
} else {
citySkuMap[v.CityCode][vv.NameID] = []int{vv.UnitPrice}
for nameID, unitPriceList := range skuNameMap {
if citySkuMap[v.CityCode][nameID] != nil {
citySkuMap[v.CityCode][nameID] = append(citySkuMap[v.CityCode][nameID], unitPriceList...)
} else {
citySkuMap[v.CityCode][nameID] = unitPriceList
}
}
} else {
skuNameMap[vv.NameID] = append(skuNameMap[vv.NameID], vv.UnitPrice)
citySkuMap[v.CityCode] = skuNameMap
}
}
}
fmt.Println(citySkuMap)
for k1, v := range citySkuMap {
skuNameMap := make(map[int]*model.PriceReferSnapshot)
for k2, _ := range v {
@@ -193,7 +201,7 @@ func BeginSavePriceRefer(ctx *jxcontext.Context, cityCodes, skuIDs []int, isAsyn
v.MidUnitPrice = resultMap[v.CityCode][v.NameID].MidUnitPrice
v.MaxUnitPrice = resultMap[v.CityCode][v.NameID].MaxUnitPrice
v.AvgUnitPrice = resultMap[v.CityCode][v.NameID].AvgUnitPrice
v.MaxUnitPrice = resultMap[v.CityCode][v.NameID].MaxUnitPrice
v.MinUnitPrice = resultMap[v.CityCode][v.NameID].MinUnitPrice
dao.UpdateEntity(db, v, "MidUnitPrice", "MaxUnitPrice", "MinUnitPrice", "AvgUnitPrice")
}
}

View File

@@ -1186,30 +1186,6 @@ func GetStoreSkuCategories(db *DaoDB, storeID, parentID int) (catList []*model.S
return catList, err
}
func RefershStoreSkusMidPrice(db *DaoDB, storeIDs []int) (count int64, err error) {
sql := `
UPDATE store_sku_bind a
JOIN store d ON d.id = a.store_id
JOIN price_refer_snapshot b ON a.sku_id = b.sku_id AND b.snapshot_at = ? AND d.city_code = b.city_code
SET a.unit_price = (b.mid_unit_price*IF(d.pay_percentage < 50,70,d.pay_percentage))/100
WHERE 1=1
`
sqlParams := []interface{}{
utils.Time2Date(time.Now().AddDate(0, 0, -1)),
}
if len(storeIDs) > 0 {
sql += " AND a.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")"
sqlParams = append(sqlParams, storeIDs)
}
sql += `
AND (a.price/IF(d.pay_percentage < 50,70,d.pay_percentage))*100 > b.mid_price
AND a.deleted_at = ?
AND a.status = ?
`
sqlParams = append(sqlParams, utils.DefaultTimeValue, model.SkuStatusNormal)
return ExecuteSQL(db, sql, sqlParams)
}
func GetStoreSkuNamePrice(db *DaoDB) (storeSkuNamePriceList []*model.StoreSkuNamePrice, err error) {
sql := `
SELECT *