From 2814b0c55af9eeb5344e993752be7b08d97de19c Mon Sep 17 00:00:00 2001 From: Rosy-zhudan Date: Mon, 23 Sep 2019 16:58:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=97=E5=88=B0=E9=97=A8=E5=BA=97=E6=80=BB?= =?UTF-8?q?=E5=88=86=E6=8E=92=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/misc/store_score.go | 61 ++++++++++++++++++++++++++- business/model/dao/store_score.go | 41 +++++++++++++++++- business/model/store_score.go | 7 +++ controllers/cms_store.go | 26 ++++++++++++ routers/commentsRouter_controllers.go | 9 ++++ 5 files changed, 142 insertions(+), 2 deletions(-) diff --git a/business/jxstore/misc/store_score.go b/business/jxstore/misc/store_score.go index 1c613526c..e2a2985d4 100644 --- a/business/jxstore/misc/store_score.go +++ b/business/jxstore/misc/store_score.go @@ -4,6 +4,7 @@ import ( "fmt" "math" "reflect" + "sort" "sync" "time" @@ -749,7 +750,7 @@ func GetStoreScoreLevel(score int) int { func GetWeeklyStoreScore(storeID, weekIndexParam int) (outWeeklyStoreScoreDataList []*model.WeeklyStoreScore, err error) { db := dao.GetDB() - storeScoreList, err := dao.GetLatestWeeklyStoreScoreList(db, storeID, WeekNum) + storeScoreList, err := dao.GetWeeklyStoreScoreList(db, storeID, WeekNum) if err == nil && len(storeScoreList) > 0 { weeklyStoreScoreDataList := []*model.WeeklyStoreScore{} weekDataList := SplitToSingleWeekDataList(storeScoreList) @@ -798,3 +799,61 @@ func GetWeeklyStoreScore(storeID, weekIndexParam int) (outWeeklyStoreScoreDataLi return outWeeklyStoreScoreDataList, err } + +func GetStoreTotalScoreList(storeIDList []int, cityCode int, keyWord string, beginTime, endTime time.Time, isDesc bool, checkScoreLow, checkScoreHigh int) (outStoreTotalScoreList []*model.StoreTotalScore, err error) { + db := dao.GetDB() + storeTotalScoreMapData := make(map[int]*model.StoreTotalScore) + storeTotalScoreList, err := dao.GetStoreTotalScoreList(db, storeIDList, cityCode, keyWord, beginTime, endTime) + if err == nil && len(storeTotalScoreList) > 0 { + countDayNum := make(map[int]int) + for _, value := range storeTotalScoreList { + storeID := value.StoreID + if storeTotalScoreMapData[storeID] == nil { + storeTotalScore := &model.StoreTotalScore{} + storeTotalScore.StoreID = value.StoreID + storeTotalScore.StoreName = value.StoreName + storeTotalScore.CityName = value.CityName + storeTotalScoreMapData[storeID] = storeTotalScore + } + storeTotalScore := storeTotalScoreMapData[storeID] + storeTotalScore.StoreScore += value.StoreScore + countDayNum[storeID]++ + } + for storeID, value := range storeTotalScoreMapData { + value.StoreScore = int(math.Round(float64(value.StoreScore) / float64(countDayNum[storeID]))) + needAdd := true + if checkScoreLow > 0 && value.StoreScore < checkScoreLow { + needAdd = false + } + if checkScoreHigh > 0 && value.StoreScore > checkScoreHigh { + needAdd = false + } + if needAdd { + outStoreTotalScoreList = append(outStoreTotalScoreList, value) + } + } + if isDesc { + sort.Slice(outStoreTotalScoreList, func(i, j int) bool { + data1 := outStoreTotalScoreList[i] + data2 := outStoreTotalScoreList[j] + if data1.StoreScore == data2.StoreScore { + return data1.StoreID < data2.StoreID + } else { + return data1.StoreScore > data2.StoreScore + } + }) + } else { + sort.Slice(outStoreTotalScoreList, func(i, j int) bool { + data1 := outStoreTotalScoreList[i] + data2 := outStoreTotalScoreList[j] + if data1.StoreScore == data2.StoreScore { + return data1.StoreID < data2.StoreID + } else { + return data1.StoreScore < data2.StoreScore + } + }) + } + } + + return outStoreTotalScoreList, err +} diff --git a/business/model/dao/store_score.go b/business/model/dao/store_score.go index 604a3b52c..1e1251c00 100644 --- a/business/model/dao/store_score.go +++ b/business/model/dao/store_score.go @@ -1,6 +1,7 @@ package dao import ( + "fmt" "time" "git.rosy.net.cn/jx-callback/business/model" @@ -11,7 +12,7 @@ func InsertStoreScore(storeScore *model.StoreScore) error { return CreateEntity(nil, storeScore) } -func GetLatestWeeklyStoreScoreList(db *DaoDB, storeID, weekNum int) (storeScoreList []*model.StoreScoreEx, err error) { +func GetWeeklyStoreScoreList(db *DaoDB, storeID, weekNum int) (storeScoreList []*model.StoreScoreEx, err error) { sql := ` SELECT t2.name store_name, t1.* FROM store_score t1 JOIN store t2 ON t1.store_id = t2.id @@ -65,3 +66,41 @@ func CheckHasStoreScoreData(db *DaoDB, dateTime time.Time) (hasStoreScoreData bo hasStoreScoreData = count > 0 return hasStoreScoreData, err } + +func GetStoreTotalScoreList(db *DaoDB, storeIDList []int, cityCode int, keyWord string, beginTime, endTime time.Time) (storeTotalScoreList []*model.StoreTotalScore, err error) { + sql := ` + SELECT t2.id store_id, t2.name store_name, t3.name city_name, + SUM(t1.store_open_time + t1.sale_sku_count + t1.average_pickup_time + t1.bad_comment_order + t1.unfinish_order + + t1.absent_Goods_order + t1.promotion_sku + t1.full_vendor + t1.store_range + t1.sale_sku_price) store_score + FROM store_score t1 + JOIN store t2 ON t1.store_id = t2.id + JOIN place t3 ON t2.city_code = t3.code + WHERE DATE(t1.score_date) >= DATE(?) AND DATE(t1.score_date) <= DATE(?) + ` + sqlParams := []interface{}{ + beginTime, + endTime, + } + if len(storeIDList) > 0 { + sql += ` + AND t2.id in (` + GenQuestionMarks(len(storeIDList)) + `)` + sqlParams = append(sqlParams, storeIDList) + } + if cityCode > 0 { + sql += ` + AND t3.code = ?` + sqlParams = append(sqlParams, cityCode) + } + if keyWord != "" { + sql += ` + AND (t2.id LIKE ? OR t2.name LIKE ? OR t3.name LIKE ?)` + keyWord = fmt.Sprintf("%%%s%%", keyWord) + sqlParams = append(sqlParams, keyWord, keyWord, keyWord) + } + sql += ` + GROUP BY t1.store_id, t1.score_date + ` + err = GetRows(db, &storeTotalScoreList, sql, sqlParams) + + return storeTotalScoreList, err +} diff --git a/business/model/store_score.go b/business/model/store_score.go index 84596ee80..fe2239216 100644 --- a/business/model/store_score.go +++ b/business/model/store_score.go @@ -49,6 +49,13 @@ type WeeklyStoreScore struct { Level int `json:"level"` } +type StoreTotalScore struct { + StoreID int `orm:"column(store_id)" json:"storeID"` + StoreName string `orm:"column(store_name)" json:"storeName"` + StoreScore int `orm:"column(store_score)" json:"storeScore"` + CityName string `orm:"column(city_name)" json:"cityName"` +} + type StoreCount struct { StoreID int `orm:"column(store_id)"` Count int diff --git a/controllers/cms_store.go b/controllers/cms_store.go index 95b1c7b1b..eaa37ca97 100644 --- a/controllers/cms_store.go +++ b/controllers/cms_store.go @@ -456,3 +456,29 @@ func (c *StoreController) GetWeeklyStoreScore() { return retVal, "", err }) } + +// @Title 得到门店总分排名 +// @Description 得到门店总分排名 +// @Param token header string true "认证token" +// @Param storeIDs formData string false "京西门店ID列表" +// @Param cityCode formData int false "城市编码" +// @Param keyWord formData string false "关键字" +// @Param beginTime formData string true "开始日期" +// @Param endTime formData string true "结束日期" +// @Param isDesc formData bool true "是否降序" +// @Param checkScoreLow formData int false "在某个分数范围-低" +// @Param checkScoreHigh formData int false "在某个分数范围-高" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /GetStoreTotalScoreList [post] +func (c *StoreController) GetStoreTotalScoreList() { + c.callGetStoreTotalScoreList(func(params *tStoreGetStoreTotalScoreListParams) (retVal interface{}, errCode string, err error) { + var storeIDList []int + if err = jxutils.Strings2Objs(params.StoreIDs, &storeIDList); err == nil { + beginTime := utils.Str2Time(params.BeginTime) + endTime := utils.Str2Time(params.EndTime) + retVal, err = misc.GetStoreTotalScoreList(storeIDList, params.CityCode, params.KeyWord, beginTime, endTime, params.IsDesc, params.CheckScoreLow, params.CheckScoreHigh) + } + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index ce7539ee3..3758f0f22 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -1350,6 +1350,15 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"], + beego.ControllerComments{ + Method: "GetStoreTotalScoreList", + Router: `/GetStoreTotalScoreList`, + AllowHTTPMethods: []string{"post"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"], beego.ControllerComments{ Method: "GetStoreVendorMaps",