得到门店总分排名
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"sort"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -749,7 +750,7 @@ func GetStoreScoreLevel(score int) int {
|
|||||||
|
|
||||||
func GetWeeklyStoreScore(storeID, weekIndexParam int) (outWeeklyStoreScoreDataList []*model.WeeklyStoreScore, err error) {
|
func GetWeeklyStoreScore(storeID, weekIndexParam int) (outWeeklyStoreScoreDataList []*model.WeeklyStoreScore, err error) {
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
storeScoreList, err := dao.GetLatestWeeklyStoreScoreList(db, storeID, WeekNum)
|
storeScoreList, err := dao.GetWeeklyStoreScoreList(db, storeID, WeekNum)
|
||||||
if err == nil && len(storeScoreList) > 0 {
|
if err == nil && len(storeScoreList) > 0 {
|
||||||
weeklyStoreScoreDataList := []*model.WeeklyStoreScore{}
|
weeklyStoreScoreDataList := []*model.WeeklyStoreScore{}
|
||||||
weekDataList := SplitToSingleWeekDataList(storeScoreList)
|
weekDataList := SplitToSingleWeekDataList(storeScoreList)
|
||||||
@@ -798,3 +799,61 @@ func GetWeeklyStoreScore(storeID, weekIndexParam int) (outWeeklyStoreScoreDataLi
|
|||||||
|
|
||||||
return outWeeklyStoreScoreDataList, err
|
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
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package dao
|
package dao
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.rosy.net.cn/jx-callback/business/model"
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
@@ -11,7 +12,7 @@ func InsertStoreScore(storeScore *model.StoreScore) error {
|
|||||||
return CreateEntity(nil, storeScore)
|
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 := `
|
sql := `
|
||||||
SELECT t2.name store_name, t1.* FROM store_score t1
|
SELECT t2.name store_name, t1.* FROM store_score t1
|
||||||
JOIN store t2 ON t1.store_id = t2.id
|
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
|
hasStoreScoreData = count > 0
|
||||||
return hasStoreScoreData, err
|
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
|
||||||
|
}
|
||||||
|
|||||||
@@ -49,6 +49,13 @@ type WeeklyStoreScore struct {
|
|||||||
Level int `json:"level"`
|
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 {
|
type StoreCount struct {
|
||||||
StoreID int `orm:"column(store_id)"`
|
StoreID int `orm:"column(store_id)"`
|
||||||
Count int
|
Count int
|
||||||
|
|||||||
@@ -456,3 +456,29 @@ func (c *StoreController) GetWeeklyStoreScore() {
|
|||||||
return retVal, "", err
|
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
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -1350,6 +1350,15 @@ func init() {
|
|||||||
Filters: nil,
|
Filters: nil,
|
||||||
Params: 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.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "GetStoreVendorMaps",
|
Method: "GetStoreVendorMaps",
|
||||||
|
|||||||
Reference in New Issue
Block a user