From dc53e2e46bfd412af7a1c3e9597f779becaad8b7 Mon Sep 17 00:00:00 2001 From: Rosy-zhudan Date: Thu, 19 Sep 2019 16:57:24 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E5=9F=8E=E5=B8=82=E5=95=86=E5=93=81?= =?UTF-8?q?=E9=94=80=E9=87=8F=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/misc/store_sku_sales.go | 125 +++++++++++++++++++++++ business/model/dao/store_sku_sales.go | 69 +++++++++++++ business/model/store_sku_sales.go | 16 +++ controllers/cms_sku.go | 15 +++ routers/commentsRouter_controllers.go | 9 ++ 5 files changed, 234 insertions(+) create mode 100644 business/jxstore/misc/store_sku_sales.go create mode 100644 business/model/dao/store_sku_sales.go create mode 100644 business/model/store_sku_sales.go diff --git a/business/jxstore/misc/store_sku_sales.go b/business/jxstore/misc/store_sku_sales.go new file mode 100644 index 000000000..50ece6a35 --- /dev/null +++ b/business/jxstore/misc/store_sku_sales.go @@ -0,0 +1,125 @@ +package misc + +import ( + "math" + "sync" + + "git.rosy.net.cn/jx-callback/business/jxstore/cms" + "git.rosy.net.cn/jx-callback/business/jxutils" + "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" + "git.rosy.net.cn/jx-callback/business/jxutils/tasksch" + "git.rosy.net.cn/jx-callback/business/model" + "git.rosy.net.cn/jx-callback/business/model/dao" +) + +const ( + DayNum = 30 //请求天数 + LimitNum = 100 //最大数据限制 +) + +func GetStoreSkuSalesInfo(ctx *jxcontext.Context, storeID int) (outStoreSkuSales []*model.StoreSkuSales, err error) { + db := dao.GetDB() + //得到所有门店 + storeList, _ := GetStoreList(ctx) + storeList = GetFilterStoreListEx(storeList, nil) + storeMapData := make(map[int]*cms.StoreExt) + for _, value := range storeList { + storeMapData[value.ID] = value + } + curStoreInfo := storeMapData[storeID] + cityCode := curStoreInfo.CityCode + + //获取本市商品总销量 + citySkuSalesCntMap := make(map[int]int) + citySkuSalesCntList, _ := dao.GetSkuSalesCntList(db, -1, cityCode, DayNum, LimitNum, nil) + citySkuIDs := []int{} + for _, value := range citySkuSalesCntList { + citySkuSalesCntMap[value.SkuID] = value.Count + citySkuIDs = append(citySkuIDs, value.SkuID) + } + + //获取本店商品总销量 + storeSkuSalesCntMap := make(map[int]int) + storeSkuSalesCntList, _ := dao.GetSkuSalesCntList(db, storeID, cityCode, DayNum, -1, citySkuIDs) + for _, value := range storeSkuSalesCntList { + storeSkuSalesCntMap[value.SkuID] = value.Count + } + + //获取本店商品差评数量 + storeSkuBadCommentCntMap := make(map[int]int) + storeSkuBadCommentCntList, _ := dao.GetSkuBadCommentCntList(db, storeID, DayNum) + for _, value := range storeSkuBadCommentCntList { + storeSkuBadCommentCntMap[value.SkuID] = value.Count + } + + //得到当前门店商品数据 + storeSkuData, _ := cms.GetStoreSkus(ctx, storeID, citySkuIDs, true, "", true, map[string]interface{}{}, 0, -1) + storeSkuMapData := make(map[int]*cms.StoreSkuNameExt) + for _, value := range storeSkuData.SkuNames { + for _, skuInfo := range value.Skus2 { + storeSkuMapData[skuInfo.SkuID] = value + } + } + + //得到5KM内的所有门店 + rangeStoreList := GetRangeStoreList(storeID, curStoreInfo.FloatLng, curStoreInfo.FloatLat, SaleSkuCheckRange, storeList) + + //得到5KM内的所有门店的商品的价格 + allStoreSkus := make(map[int]map[int]int) + var locker sync.RWMutex + taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + storeInfo := batchItemList[0].(*cms.StoreExt) + storeID := storeInfo.ID + jxSkuInfoData, _ := cms.GetStoreSkus(ctx, storeID, citySkuIDs, true, "", true, map[string]interface{}{}, 0, -1) + jxSkuPriceMapData := make(map[int]int) + for _, value := range jxSkuInfoData.SkuNames { + for _, skuInfo := range value.Skus2 { + jxSkuPriceMapData[skuInfo.SkuID] = skuInfo.BindPrice + } + } + locker.Lock() + defer locker.Unlock() + allStoreSkus[storeID] = jxSkuPriceMapData + return retVal, err + } + taskParallel := tasksch.NewParallelTask("得到所有门店商品", nil, ctx, taskFunc, rangeStoreList) + taskParallel.Run() + taskParallel.GetResult(0) + + //计算商品的平均价格 + skusTotalPrice := make(map[int]int) + skusCount := make(map[int]int) + skusAveragePrice := make(map[int]int) + for _, storeInfo := range rangeStoreList { + storeID := storeInfo.ID + storeSkuMapData := allStoreSkus[storeID] + for skuID, skuPrice := range storeSkuMapData { + skusTotalPrice[skuID] += skuPrice + skusCount[skuID]++ + } + } + for id, totalPrice := range skusTotalPrice { + skusAveragePrice[id] = int(math.Round(float64(totalPrice) / float64(skusCount[id]))) + } + + //输出商品销量统计结果 + for _, value := range citySkuSalesCntList { + skuID := value.SkuID + if _, ok := storeSkuSalesCntMap[skuID]; ok { + storeSkuSales := &model.StoreSkuSales{} + storeSkuSales.SkuID = skuID + skuInfo := storeSkuMapData[skuID] + if skuInfo != nil { + storeSkuSales.SkuName = skuInfo.Name + storeSkuSales.SkuPrice = jxutils.IntPrice2StandardCurrencyString(int64(skuInfo.Skus2[0].BindPrice)) + storeSkuSales.SkuAvgPrice = jxutils.IntPrice2StandardCurrencyString(int64(skusAveragePrice[skuID])) + storeSkuSales.BadCommentCnt = storeSkuBadCommentCntMap[skuID] + storeSkuSales.StoreSkuSalesCnt = storeSkuSalesCntMap[skuID] + storeSkuSales.CitySkuSalesCnt = citySkuSalesCntMap[skuID] + outStoreSkuSales = append(outStoreSkuSales, storeSkuSales) + } + } + } + + return outStoreSkuSales, err +} diff --git a/business/model/dao/store_sku_sales.go b/business/model/dao/store_sku_sales.go new file mode 100644 index 000000000..0f9f4e999 --- /dev/null +++ b/business/model/dao/store_sku_sales.go @@ -0,0 +1,69 @@ +package dao + +import ( + "git.rosy.net.cn/jx-callback/business/model" +) + +func GetSkuSalesCntList(db *DaoDB, storeID, cityCode, dayNum, limit int, skuIDs []int) (skuCountList []*model.SkuCount, err error) { + sql := ` + SELECT t2.jx_sku_id sku_id, SUM(t2.count) count + FROM goods_order t1 + JOIN order_sku t2 on t1.vendor_order_id = t2.vendor_order_id and t1.vendor_id = t2.vendor_id + JOIN store t3 on t1.jx_store_id = t3.id + WHERE DATE(t1.order_finished_at) BETWEEN DATE_SUB(CURDATE(), INTERVAL ? DAY) and CURDATE() + AND t1.status = ? + AND t2.jx_sku_id <> 0 + AND t3.city_code = ? + ` + if dayNum < 0 { + dayNum = 30 + } + sqlParams := []interface{}{ + dayNum - 1, + model.OrderStatusFinished, + cityCode, + } + if storeID > 0 { + sql += ` + AND t1.jx_store_id = ? + ` + sqlParams = append(sqlParams, storeID) + } + if len(skuIDs) > 0 { + sql += ` + AND t2.jx_sku_id IN (` + GenQuestionMarks(len(skuIDs)) + `)` + sqlParams = append(sqlParams, skuIDs) + } + sql += ` + GROUP BY jx_sku_id + ORDER BY count DESC + ` + if limit > 0 { + sql += ` + LIMIT ? + ` + sqlParams = append(sqlParams, limit) + } + err = GetRows(db, &skuCountList, sql, sqlParams) + return skuCountList, err +} + +func GetSkuBadCommentCntList(db *DaoDB, storeID, dayNum int) (skuCountList []*model.SkuCount, err error) { + sql := ` + SELECT t2.jx_sku_id sku_id, COUNT(*) count + FROM jx_bad_comments t1 + JOIN order_sku t2 ON t1.order_id = t2.vendor_order_id + WHERE DATE(t1.createtime) BETWEEN DATE_SUB(CURDATE(), INTERVAL ? DAY) and CURDATE() + AND t1.jxstoreid = ? + GROUP BY t2.jx_sku_id + ` + if dayNum < 0 { + dayNum = 30 + } + sqlParams := []interface{}{ + dayNum - 1, + storeID, + } + err = GetRows(db, &skuCountList, sql, sqlParams) + return skuCountList, err +} diff --git a/business/model/store_sku_sales.go b/business/model/store_sku_sales.go new file mode 100644 index 000000000..909a7f574 --- /dev/null +++ b/business/model/store_sku_sales.go @@ -0,0 +1,16 @@ +package model + +type StoreSkuSales struct { + SkuID int `json:"skuID"` + SkuName string `json:"skuName"` + SkuPrice string `json:"skuPrice"` + SkuAvgPrice string `json:"skuAvgPrice"` + BadCommentCnt int `json:"badCommentCnt"` + StoreSkuSalesCnt int `json:"storeSkuSalesCnt"` + CitySkuSalesCnt int `json:"citySkuSalesCnt"` +} + +type SkuCount struct { + SkuID int `orm:"column(sku_id)"` + Count int +} diff --git a/controllers/cms_sku.go b/controllers/cms_sku.go index af1750251..11e26496c 100644 --- a/controllers/cms_sku.go +++ b/controllers/cms_sku.go @@ -3,6 +3,7 @@ package controllers import ( "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxstore/cms" + "git.rosy.net.cn/jx-callback/business/jxstore/misc" "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" @@ -359,3 +360,17 @@ func (c *SkuController) SortCategorySkus() { return retVal, "", err }) } + +// @Title 按照当前城市近30天销量排序,显示本店价格,附近5公里平均价格,差评数量,本店销量情况,本市总销量, +// @Description 按照当前城市近30天销量排序,显示本店价格,附近5公里平均价格,差评数量,本店销量情况,本市总销量, +// @Param token header string true "认证token" +// @Param storeID query int true "京西门店ID" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /GetStoreSkuSalesInfo [get] +func (c *SkuController) GetStoreSkuSalesInfo() { + c.callGetStoreSkuSalesInfo(func(params *tSkuGetStoreSkuSalesInfoParams) (retVal interface{}, errCode string, err error) { + retVal, err = misc.GetStoreSkuSalesInfo(params.Ctx, params.StoreID) + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 5baa4b15a..ce7539ee3 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -1161,6 +1161,15 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"], + beego.ControllerComments{ + Method: "GetStoreSkuSalesInfo", + Router: `/GetStoreSkuSalesInfo`, + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"], beego.ControllerComments{ Method: "GetVendorCategories", From 13039620881709f595fe834927d2675fc3cc31d0 Mon Sep 17 00:00:00 2001 From: Rosy-zhudan Date: Thu, 19 Sep 2019 17:10:09 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E4=BF=AE=E6=94=B9BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/model/dao/store_sku_sales.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/business/model/dao/store_sku_sales.go b/business/model/dao/store_sku_sales.go index 0f9f4e999..47cc675da 100644 --- a/business/model/dao/store_sku_sales.go +++ b/business/model/dao/store_sku_sales.go @@ -10,7 +10,7 @@ func GetSkuSalesCntList(db *DaoDB, storeID, cityCode, dayNum, limit int, skuIDs FROM goods_order t1 JOIN order_sku t2 on t1.vendor_order_id = t2.vendor_order_id and t1.vendor_id = t2.vendor_id JOIN store t3 on t1.jx_store_id = t3.id - WHERE DATE(t1.order_finished_at) BETWEEN DATE_SUB(CURDATE(), INTERVAL ? DAY) and CURDATE() + WHERE DATE(t1.order_finished_at) BETWEEN DATE_SUB(CURDATE(), INTERVAL ? DAY) and DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND t1.status = ? AND t2.jx_sku_id <> 0 AND t3.city_code = ? @@ -19,7 +19,7 @@ func GetSkuSalesCntList(db *DaoDB, storeID, cityCode, dayNum, limit int, skuIDs dayNum = 30 } sqlParams := []interface{}{ - dayNum - 1, + dayNum, model.OrderStatusFinished, cityCode, } @@ -53,7 +53,7 @@ func GetSkuBadCommentCntList(db *DaoDB, storeID, dayNum int) (skuCountList []*mo SELECT t2.jx_sku_id sku_id, COUNT(*) count FROM jx_bad_comments t1 JOIN order_sku t2 ON t1.order_id = t2.vendor_order_id - WHERE DATE(t1.createtime) BETWEEN DATE_SUB(CURDATE(), INTERVAL ? DAY) and CURDATE() + WHERE DATE(t1.createtime) BETWEEN DATE_SUB(CURDATE(), INTERVAL ? DAY) and DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND t1.jxstoreid = ? GROUP BY t2.jx_sku_id ` @@ -61,7 +61,7 @@ func GetSkuBadCommentCntList(db *DaoDB, storeID, dayNum int) (skuCountList []*mo dayNum = 30 } sqlParams := []interface{}{ - dayNum - 1, + dayNum, storeID, } err = GetRows(db, &skuCountList, sql, sqlParams) From 6d90f5117d6a3fb57ec9c735d2c5c9834df93fc4 Mon Sep 17 00:00:00 2001 From: Rosy-zhudan Date: Thu, 19 Sep 2019 17:43:56 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E5=A4=84=E7=90=86err?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/misc/store_sku_sales.go | 59 ++++++++++++++++-------- 1 file changed, 41 insertions(+), 18 deletions(-) diff --git a/business/jxstore/misc/store_sku_sales.go b/business/jxstore/misc/store_sku_sales.go index 50ece6a35..16315fa4c 100644 --- a/business/jxstore/misc/store_sku_sales.go +++ b/business/jxstore/misc/store_sku_sales.go @@ -20,8 +20,12 @@ const ( func GetStoreSkuSalesInfo(ctx *jxcontext.Context, storeID int) (outStoreSkuSales []*model.StoreSkuSales, err error) { db := dao.GetDB() //得到所有门店 - storeList, _ := GetStoreList(ctx) - storeList = GetFilterStoreListEx(storeList, nil) + storeList, err := GetStoreList(ctx) + if err == nil { + storeList = GetFilterStoreListEx(storeList, nil) + } else { + return nil, err + } storeMapData := make(map[int]*cms.StoreExt) for _, value := range storeList { storeMapData[value.ID] = value @@ -31,34 +35,50 @@ func GetStoreSkuSalesInfo(ctx *jxcontext.Context, storeID int) (outStoreSkuSales //获取本市商品总销量 citySkuSalesCntMap := make(map[int]int) - citySkuSalesCntList, _ := dao.GetSkuSalesCntList(db, -1, cityCode, DayNum, LimitNum, nil) + citySkuSalesCntList, err := dao.GetSkuSalesCntList(db, -1, cityCode, DayNum, LimitNum, nil) citySkuIDs := []int{} - for _, value := range citySkuSalesCntList { - citySkuSalesCntMap[value.SkuID] = value.Count - citySkuIDs = append(citySkuIDs, value.SkuID) + if err == nil { + for _, value := range citySkuSalesCntList { + citySkuSalesCntMap[value.SkuID] = value.Count + citySkuIDs = append(citySkuIDs, value.SkuID) + } + } else { + return nil, err } //获取本店商品总销量 storeSkuSalesCntMap := make(map[int]int) - storeSkuSalesCntList, _ := dao.GetSkuSalesCntList(db, storeID, cityCode, DayNum, -1, citySkuIDs) - for _, value := range storeSkuSalesCntList { - storeSkuSalesCntMap[value.SkuID] = value.Count + storeSkuSalesCntList, err := dao.GetSkuSalesCntList(db, storeID, cityCode, DayNum, -1, citySkuIDs) + if err == nil { + for _, value := range storeSkuSalesCntList { + storeSkuSalesCntMap[value.SkuID] = value.Count + } + } else { + return nil, err } //获取本店商品差评数量 storeSkuBadCommentCntMap := make(map[int]int) - storeSkuBadCommentCntList, _ := dao.GetSkuBadCommentCntList(db, storeID, DayNum) - for _, value := range storeSkuBadCommentCntList { - storeSkuBadCommentCntMap[value.SkuID] = value.Count + storeSkuBadCommentCntList, err := dao.GetSkuBadCommentCntList(db, storeID, DayNum) + if err == nil { + for _, value := range storeSkuBadCommentCntList { + storeSkuBadCommentCntMap[value.SkuID] = value.Count + } + } else { + return nil, err } //得到当前门店商品数据 - storeSkuData, _ := cms.GetStoreSkus(ctx, storeID, citySkuIDs, true, "", true, map[string]interface{}{}, 0, -1) storeSkuMapData := make(map[int]*cms.StoreSkuNameExt) - for _, value := range storeSkuData.SkuNames { - for _, skuInfo := range value.Skus2 { - storeSkuMapData[skuInfo.SkuID] = value + storeSkuData, err := cms.GetStoreSkus(ctx, storeID, citySkuIDs, true, "", true, map[string]interface{}{}, 0, -1) + if err == nil { + for _, value := range storeSkuData.SkuNames { + for _, skuInfo := range value.Skus2 { + storeSkuMapData[skuInfo.SkuID] = value + } } + } else { + return nil, err } //得到5KM内的所有门店 @@ -70,7 +90,7 @@ func GetStoreSkuSalesInfo(ctx *jxcontext.Context, storeID int) (outStoreSkuSales taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { storeInfo := batchItemList[0].(*cms.StoreExt) storeID := storeInfo.ID - jxSkuInfoData, _ := cms.GetStoreSkus(ctx, storeID, citySkuIDs, true, "", true, map[string]interface{}{}, 0, -1) + jxSkuInfoData, err := cms.GetStoreSkus(ctx, storeID, citySkuIDs, true, "", true, map[string]interface{}{}, 0, -1) jxSkuPriceMapData := make(map[int]int) for _, value := range jxSkuInfoData.SkuNames { for _, skuInfo := range value.Skus2 { @@ -84,7 +104,10 @@ func GetStoreSkuSalesInfo(ctx *jxcontext.Context, storeID int) (outStoreSkuSales } taskParallel := tasksch.NewParallelTask("得到所有门店商品", nil, ctx, taskFunc, rangeStoreList) taskParallel.Run() - taskParallel.GetResult(0) + _, err = taskParallel.GetResult(0) + if err != nil { + return nil, err + } //计算商品的平均价格 skusTotalPrice := make(map[int]int) From 201411d32566bc8a2887cb8f9f0ed1007c8f363f Mon Sep 17 00:00:00 2001 From: Rosy-zhudan Date: Thu, 19 Sep 2019 18:32:12 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E5=95=86=E5=93=81?= =?UTF-8?q?=E9=94=80=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/misc/store_sku_sales.go | 40 +++++++++++++++--------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/business/jxstore/misc/store_sku_sales.go b/business/jxstore/misc/store_sku_sales.go index 16315fa4c..97ca1c5a0 100644 --- a/business/jxstore/misc/store_sku_sales.go +++ b/business/jxstore/misc/store_sku_sales.go @@ -126,23 +126,35 @@ func GetStoreSkuSalesInfo(ctx *jxcontext.Context, storeID int) (outStoreSkuSales } //输出商品销量统计结果 - for _, value := range citySkuSalesCntList { - skuID := value.SkuID - if _, ok := storeSkuSalesCntMap[skuID]; ok { - storeSkuSales := &model.StoreSkuSales{} - storeSkuSales.SkuID = skuID - skuInfo := storeSkuMapData[skuID] - if skuInfo != nil { - storeSkuSales.SkuName = skuInfo.Name - storeSkuSales.SkuPrice = jxutils.IntPrice2StandardCurrencyString(int64(skuInfo.Skus2[0].BindPrice)) - storeSkuSales.SkuAvgPrice = jxutils.IntPrice2StandardCurrencyString(int64(skusAveragePrice[skuID])) - storeSkuSales.BadCommentCnt = storeSkuBadCommentCntMap[skuID] - storeSkuSales.StoreSkuSalesCnt = storeSkuSalesCntMap[skuID] - storeSkuSales.CitySkuSalesCnt = citySkuSalesCntMap[skuID] - outStoreSkuSales = append(outStoreSkuSales, storeSkuSales) + skuAndNameMapData := make(map[int]*model.SkuAndName) + if len(storeSkuMapData) < len(citySkuIDs) { + skuAndNameList, err := dao.GetSkus(db, citySkuIDs, nil, nil, nil) + if err == nil { + for _, value := range skuAndNameList { + skuAndNameMapData[value.ID] = value } } } + for _, value := range citySkuSalesCntList { + skuID := value.SkuID + storeSkuSales := &model.StoreSkuSales{} + storeSkuSales.SkuID = skuID + if storeSkuMapData[skuID] != nil { + storeSkuSales.SkuName = storeSkuMapData[skuID].Name + storeSkuSales.SkuPrice = jxutils.IntPrice2StandardCurrencyString(int64(storeSkuMapData[skuID].Skus2[0].BindPrice)) + } else if skuAndNameMapData[skuID] != nil { + storeSkuSales.SkuName = skuAndNameMapData[skuID].Name + storeSkuSales.SkuPrice = "0" + } else { + storeSkuSales.SkuName = "N/A" + storeSkuSales.SkuPrice = "0" + } + storeSkuSales.SkuAvgPrice = jxutils.IntPrice2StandardCurrencyString(int64(skusAveragePrice[skuID])) + storeSkuSales.BadCommentCnt = storeSkuBadCommentCntMap[skuID] + storeSkuSales.StoreSkuSalesCnt = storeSkuSalesCntMap[skuID] + storeSkuSales.CitySkuSalesCnt = citySkuSalesCntMap[skuID] + outStoreSkuSales = append(outStoreSkuSales, storeSkuSales) + } return outStoreSkuSales, err } From 62d941d3f7f9ea9dbc36f973c069823cb2d8026f Mon Sep 17 00:00:00 2001 From: Rosy-zhudan Date: Fri, 20 Sep 2019 11:12:18 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E5=9F=8E=E5=B8=82=E5=95=86=E5=93=81?= =?UTF-8?q?=E9=94=80=E9=87=8F=E7=BB=9F=E8=AE=A1-=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/misc/store_sku_sales.go | 25 +++++++++++++++++------- business/model/store_sku_sales.go | 1 + 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/business/jxstore/misc/store_sku_sales.go b/business/jxstore/misc/store_sku_sales.go index 97ca1c5a0..5ba3f19de 100644 --- a/business/jxstore/misc/store_sku_sales.go +++ b/business/jxstore/misc/store_sku_sales.go @@ -139,15 +139,26 @@ func GetStoreSkuSalesInfo(ctx *jxcontext.Context, storeID int) (outStoreSkuSales skuID := value.SkuID storeSkuSales := &model.StoreSkuSales{} storeSkuSales.SkuID = skuID - if storeSkuMapData[skuID] != nil { - storeSkuSales.SkuName = storeSkuMapData[skuID].Name - storeSkuSales.SkuPrice = jxutils.IntPrice2StandardCurrencyString(int64(storeSkuMapData[skuID].Skus2[0].BindPrice)) - } else if skuAndNameMapData[skuID] != nil { - storeSkuSales.SkuName = skuAndNameMapData[skuID].Name - storeSkuSales.SkuPrice = "0" + storeSkuInfo := storeSkuMapData[skuID] + skuAndNameInfo := skuAndNameMapData[skuID] + if storeSkuInfo != nil { + skuName := storeSkuInfo.SkuName + skuInfo := storeSkuInfo.Skus2[0] + storeSkuSales.SkuName = jxutils.ComposeSkuName(skuName.Prefix, skuName.Name, skuInfo.Comment, skuName.Unit, skuInfo.SkuSpecQuality, skuInfo.SkuSpecUnit, 0) + storeSkuSales.SkuImage = storeSkuInfo.Img + storeSkuSales.SkuPrice = jxutils.IntPrice2StandardCurrencyString(int64(storeSkuInfo.Skus2[0].BindPrice)) + } else if skuAndNameInfo != nil { + skuNameList, err := dao.GetSkuNames(db, []int{skuAndNameInfo.NameID}) + prefix := "" + if err == nil && len(skuNameList) > 0 { + storeSkuSales.SkuImage = skuNameList[0].Img + prefix = skuNameList[0].Prefix + } + storeSkuSales.SkuName = jxutils.ComposeSkuName(prefix, skuAndNameInfo.Name, skuAndNameInfo.Comment, skuAndNameInfo.Unit, skuAndNameInfo.SpecQuality, skuAndNameInfo.SpecUnit, 0) + storeSkuSales.SkuPrice = "N/A" } else { storeSkuSales.SkuName = "N/A" - storeSkuSales.SkuPrice = "0" + storeSkuSales.SkuPrice = "N/A" } storeSkuSales.SkuAvgPrice = jxutils.IntPrice2StandardCurrencyString(int64(skusAveragePrice[skuID])) storeSkuSales.BadCommentCnt = storeSkuBadCommentCntMap[skuID] diff --git a/business/model/store_sku_sales.go b/business/model/store_sku_sales.go index 909a7f574..2f6bc3bba 100644 --- a/business/model/store_sku_sales.go +++ b/business/model/store_sku_sales.go @@ -3,6 +3,7 @@ package model type StoreSkuSales struct { SkuID int `json:"skuID"` SkuName string `json:"skuName"` + SkuImage string `json:"skuImage"` SkuPrice string `json:"skuPrice"` SkuAvgPrice string `json:"skuAvgPrice"` BadCommentCnt int `json:"badCommentCnt"` From f9017508509ff5740f5f4a4dbe58dd3020da388c Mon Sep 17 00:00:00 2001 From: Rosy-zhudan Date: Fri, 20 Sep 2019 15:04:22 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E4=BF=AE=E6=94=B9SQL=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E7=9A=84=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/model/dao/store_sku_sales.go | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/business/model/dao/store_sku_sales.go b/business/model/dao/store_sku_sales.go index 47cc675da..5c8b05940 100644 --- a/business/model/dao/store_sku_sales.go +++ b/business/model/dao/store_sku_sales.go @@ -1,6 +1,9 @@ package dao import ( + "time" + + "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/model" ) @@ -10,7 +13,7 @@ func GetSkuSalesCntList(db *DaoDB, storeID, cityCode, dayNum, limit int, skuIDs FROM goods_order t1 JOIN order_sku t2 on t1.vendor_order_id = t2.vendor_order_id and t1.vendor_id = t2.vendor_id JOIN store t3 on t1.jx_store_id = t3.id - WHERE DATE(t1.order_finished_at) BETWEEN DATE_SUB(CURDATE(), INTERVAL ? DAY) and DATE_SUB(CURDATE(), INTERVAL 1 DAY) + WHERE t1.order_finished_at >= ? AND t1.order_finished_at < ? AND t1.status = ? AND t2.jx_sku_id <> 0 AND t3.city_code = ? @@ -18,8 +21,11 @@ func GetSkuSalesCntList(db *DaoDB, storeID, cityCode, dayNum, limit int, skuIDs if dayNum < 0 { dayNum = 30 } + beginTime := utils.GetCurDate().Add(-time.Hour * 24 * time.Duration(dayNum)) + endTime := utils.GetCurDate() sqlParams := []interface{}{ - dayNum, + beginTime, + endTime, model.OrderStatusFinished, cityCode, } @@ -53,15 +59,18 @@ func GetSkuBadCommentCntList(db *DaoDB, storeID, dayNum int) (skuCountList []*mo SELECT t2.jx_sku_id sku_id, COUNT(*) count FROM jx_bad_comments t1 JOIN order_sku t2 ON t1.order_id = t2.vendor_order_id - WHERE DATE(t1.createtime) BETWEEN DATE_SUB(CURDATE(), INTERVAL ? DAY) and DATE_SUB(CURDATE(), INTERVAL 1 DAY) + WHERE t1.createtime >= ? AND t1.createtime < ? AND t1.jxstoreid = ? GROUP BY t2.jx_sku_id ` if dayNum < 0 { dayNum = 30 } + beginTime := utils.GetCurDate().Add(-time.Hour * 24 * time.Duration(dayNum)) + endTime := utils.GetCurDate() sqlParams := []interface{}{ - dayNum, + beginTime, + endTime, storeID, } err = GetRows(db, &skuCountList, sql, sqlParams) From ea0358f00d930b5cd32dbada6553a19d33cbf7ed Mon Sep 17 00:00:00 2001 From: Rosy-zhudan Date: Fri, 20 Sep 2019 16:11:08 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9C=AA=E6=89=BE?= =?UTF-8?q?=E5=88=B0=E9=97=A8=E5=BA=97=E7=9A=84=E5=BC=82=E5=B8=B8=E6=8D=95?= =?UTF-8?q?=E6=8D=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/misc/store_sku_sales.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/business/jxstore/misc/store_sku_sales.go b/business/jxstore/misc/store_sku_sales.go index 5ba3f19de..ec5173695 100644 --- a/business/jxstore/misc/store_sku_sales.go +++ b/business/jxstore/misc/store_sku_sales.go @@ -1,6 +1,8 @@ package misc import ( + "errors" + "fmt" "math" "sync" @@ -31,6 +33,9 @@ func GetStoreSkuSalesInfo(ctx *jxcontext.Context, storeID int) (outStoreSkuSales storeMapData[value.ID] = value } curStoreInfo := storeMapData[storeID] + if curStoreInfo == nil { + return nil, errors.New(fmt.Sprintf("未找到商店:[%d]", storeID)) + } cityCode := curStoreInfo.CityCode //获取本市商品总销量