畅销商品

This commit is contained in:
苏尹岚
2019-12-24 11:39:15 +08:00
parent a1bdf6cde3
commit 70ecbf5114
4 changed files with 135 additions and 2 deletions

View File

@@ -2169,6 +2169,77 @@ func GetTopSkusByStoreIDs(ctx *jxcontext.Context, storeIDs []int) (storeSkuNameE
return storeSkuNameExt, err
}
func GetTopSkusByCityCode(ctx *jxcontext.Context, cityCode, storeID int) (skuNameAndPlaceList []*dao.SkuNameAndPlace, err error) {
db := dao.GetDB()
orderCreate := time.Now().AddDate(0, -1, 0)
skuNameAndPlace, err := dao.GetTopSkusByCityCode(db, cityCode, orderCreate)
if storeID > 0 {
var skuNameList []*model.SkuName
//未关注不可售的商品nameID列表
sql := `
SELECT DISTINCT b.name_id
FROM store_sku_bind a
JOIN sku b ON a.sku_id = b.id AND b.deleted_at = ?
WHERE a.deleted_at = ?
AND a.store_id = ?
AND a.status <> ?
AND b.name_id NOT IN(SELECT DISTINCT b.name_id
FROM store_sku_bind a
JOIN sku b ON a.sku_id = b.id AND b.deleted_at = ?
WHERE a.deleted_at = ?
AND a.store_id = ?
AND a.status = ?)
UNION
SELECT DISTINCT a.name_id
FROM sku a
LEFT JOIN (SELECT DISTINCT b.name_id
FROM store_sku_bind a
JOIN sku b ON a.sku_id = b.id
WHERE a.deleted_at = ?
AND store_id = ?)b ON a.name_id = b.name_id
WHERE a.status = ?
AND a.deleted_at = ?
AND b.name_id IS NULL
`
sqlParams := []interface{}{
utils.DefaultTimeValue,
utils.DefaultTimeValue,
storeID,
model.StoreSkuBindStatusNormal,
utils.DefaultTimeValue,
utils.DefaultTimeValue,
storeID,
model.StoreSkuBindStatusNormal,
utils.DefaultTimeValue,
storeID,
model.StoreSkuBindStatusNormal,
utils.DefaultTimeValue,
}
err = dao.GetRows(db, &skuNameList, sql, sqlParams...)
var skuNameMap = make(map[int]*model.SkuName)
for _, v := range skuNameList {
skuNameMap[v.ID] = v
}
for _, v := range skuNameAndPlace {
if skuNameMap[v.ID] != nil {
skuNameAndPlaceList = append(skuNameAndPlaceList, v)
}
}
} else {
skuNameAndPlace = skuNameAndPlaceList
}
i := 1
for _, v := range skuNameAndPlaceList {
v.Sequence = i
i++
}
if len(skuNameAndPlaceList) <= 100 {
return skuNameAndPlaceList, err
} else {
return skuNameAndPlaceList[0:100], err
}
}
func GetTopCategoriesByStoreIDs(ctx *jxcontext.Context, storeIDs []int) (skuCategory []*model.SkuCategory, err error) {
var (
skuCategory2 []*model.SkuCategory

View File

@@ -18,6 +18,7 @@ var (
model.VendorIDMTWM: "mtwm_url",
model.VendorIDEBAI: "ebai_url",
}
salePriceLimit = 100
)
type SkuStoreCatInfo struct {
@@ -195,6 +196,14 @@ type StoreSkuExt struct {
Times int `json:"times"`
}
type SkuNameAndPlace struct {
model.SkuName
CityCode int `json:"cityCode"`
CityName string `json:"cityName"`
Sequence int `json:"sequence"`
Count int `json:"count"`
}
// todo 应该通过需要同步的skuid来驱动同步分类而不是当前这种分开的逻辑
// 单门店模式厂商适用
// 从store_sku_bind中得到所有依赖的商家分类信息
@@ -1027,7 +1036,7 @@ func GetTopSkusByStoreIDs(db *DaoDB, storeIDs []int) (storeSkuNameExt []*StoreSk
ORDER BY t1.count DESC
LIMIT ?
`
sqlParams = append(sqlParams, 100, 30)
sqlParams = append(sqlParams, salePriceLimit, 30)
err = GetRows(db, &storeSkuNameExt, sql, sqlParams...)
var skuNamesInfo = &StoreSkuNamesInfo{
SkuNames: storeSkuNameExt,
@@ -1063,6 +1072,35 @@ func GetTopSkusByStoreIDs(db *DaoDB, storeIDs []int) (storeSkuNameExt []*StoreSk
return storeSkuNameExt, err
}
func GetTopSkusByCityCode(db *DaoDB, cityCode int, orderCreate time.Time) (skuNameAndPlace []*SkuNameAndPlace, err error) {
sql := `
SELECT t1.*, t2.*
FROM
(SELECT SUM(b.count) count, c.name_id, e.name city_name, d.city_code,
FROM goods_order a
JOIN order_sku b ON a.vendor_order_id = b.vendor_order_id AND a.vendor_id = b.vendor_id
JOIN sku c ON b.sku_id = c.id AND c.deleted_at = ?
JOIN store d ON d.id = a.store_id AND d.deleted_at = ? AND d.city_code = ?
JOIN place e ON e.code = d.city_code
WHERE 1=1
AND b.sale_price > ?
AND a.created_at BETWEEN ? and NOW()
GROUP BY 2,3,4
ORDER BY count DESC
)t1
JOIN sku_name t2 ON t2.id = t1.name_id
`
sqlParams := []interface{}{
utils.DefaultTimeValue,
utils.DefaultTimeValue,
cityCode,
salePriceLimit,
orderCreate,
}
err = GetRows(db, &skuNameAndPlace, sql, sqlParams...)
return skuNameAndPlace, err
}
func GetTopCategoriesByStoreIDs(db *DaoDB, storeIDs []int, limit int) (skuCategory []*model.SkuCategory, err error) {
sql := `
SELECT DISTINCT t5.* FROM(
@@ -1102,7 +1140,7 @@ func GetTopCategoriesByStoreIDs(db *DaoDB, storeIDs []int, limit int) (skuCatego
Order by t4.count DESC)t5
LIMIT ?
`
sqlParams = append(sqlParams, time.Now().AddDate(0, -1, 0), 100, 2, utils.DefaultTimeValue, 1, limit)
sqlParams = append(sqlParams, time.Now().AddDate(0, -1, 0), salePriceLimit, 2, utils.DefaultTimeValue, 1, limit)
err = GetRows(db, &skuCategory, sql, sqlParams...)
return skuCategory, err
}

View File

@@ -465,6 +465,21 @@ func (c *StoreSkuController) GetTopSkusByStoreIDs() {
})
}
// @Title 根据城市信息查找推荐商品(按销量)
// @Description 根据城市信息查找推荐商品(按销量)
// @Param token header string false "认证token"
// @Param cityCode query int true "城市id"
// @Param storeID query int false "门店id"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetTopSkusByCityCode [get]
func (c *StoreSkuController) GetTopSkusByCityCode() {
c.callGetTopSkusByCityCode(func(params *tStoreSkuGetTopSkusByCityCodeParams) (retVal interface{}, errCode string, err error) {
retVal, err = cms.GetTopSkusByCityCode(params.Ctx, params.CityCode, params.StoreID)
return retVal, "", err
})
}
// @Title 根据门店信息查找推荐分类(按商品销量)
// @Description 根据门店信息查找推荐分类(按商品销量)
// @Param token header string false "认证token"

View File

@@ -1674,6 +1674,15 @@ func init() {
Filters: nil,
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"],
beego.ControllerComments{
Method: "GetTopSkusByCityCode",
Router: `/GetTopSkusByCityCode`,
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"],
beego.ControllerComments{
Method: "GetTopSkusByStoreIDs",