From 70ecbf5114a2dc7c541a38d33c38fe98e5b45903 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Tue, 24 Dec 2019 11:39:15 +0800 Subject: [PATCH] =?UTF-8?q?=E7=95=85=E9=94=80=E5=95=86=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 71 +++++++++++++++++++++++++++ business/model/dao/store_sku.go | 42 +++++++++++++++- controllers/cms_store_sku.go | 15 ++++++ routers/commentsRouter_controllers.go | 9 ++++ 4 files changed, 135 insertions(+), 2 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index dd3ac73b5..e12740783 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -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 diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index 712136722..506c1f76c 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -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 } diff --git a/controllers/cms_store_sku.go b/controllers/cms_store_sku.go index f99bdacd7..b9cfc6432 100644 --- a/controllers/cms_store_sku.go +++ b/controllers/cms_store_sku.go @@ -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" diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 2b51ceb30..aa31c9cb3 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -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",