修改门店评分BUG

This commit is contained in:
Rosy-zhudan
2019-09-09 14:42:01 +08:00
parent 4822f7741f
commit bb74874b12
2 changed files with 80 additions and 34 deletions

View File

@@ -17,8 +17,14 @@ import (
)
const (
GoldMedalScore = 90
SilverMedalScore = 80
BronzeMedalScore = 70
GoldMedalLevel = 1
SilverMedalLevel = 2
BronzeMedalLevel = 3
ItemTotalScore = 10
ItemCount = 10
StoreOpenTimeNormalTime = 12.0 //小时
SaleSkuNormalCount = 1000
@@ -30,8 +36,6 @@ const (
StoreRangeGoodRadius = 2.0 //千米
StoreRangeBadRadius = 1.0 //千米
SaleSkuPriceRatio = 90 //百分比
WeekDayCount = 7
)
var (
@@ -44,16 +48,16 @@ var (
model.VendorIDEBAI: true,
}
storeScoreFieldName = []string{
"StoreOpenTime",
"SaleSkuCount",
"AveragePickupTime",
"BadCommentOrder",
"UnfinishOrder",
"AbsentGoodsOrder",
"PromotionSku",
"FullVendor",
"StoreRange",
"SaleSkuPrice",
model.FieldStoreOpenTime,
model.FieldSaleSkuCount,
model.FieldAveragePickupTime,
model.FieldBadCommentOrder,
model.FieldUnfinishOrder,
model.FieldAbsentGoodsOrder,
model.FieldPromotionSku,
model.FieldFullVendor,
model.FieldStoreRange,
model.FieldSaleSkuPrice,
}
storeScoreDataWrapper StoreScoreDataWrapper
@@ -510,63 +514,90 @@ func Time2Week(t time.Time) int {
if yearDay <= firstWeekDays {
week = 1
} else {
week = (yearDay-firstWeekDays)/7 + 2
tempWeek := (float64(yearDay) - float64(firstWeekDays)) / float64(7)
week = int(math.Ceil(tempWeek)) + 1
}
return week
}
func SplitToSingelWeekDataList(storeScoreList []*model.StoreScore) (weekDataList [][]*model.StoreScore) {
func SplitToSingleWeekDataList(storeScoreList []*model.StoreScore) (weekDataList [][]*model.StoreScore) {
singelWeekData := []*model.StoreScore{}
count := 0
weekIndex := 0
for _, value := range storeScoreList {
singelWeekData = append(singelWeekData, value)
count++
if count == WeekDayCount {
if weekIndex == 0 {
weekIndex = Time2Week(value.CreatedAt)
}
if weekIndex == Time2Week(value.CreatedAt) {
singelWeekData = append(singelWeekData, value)
} else {
weekDataList = append(weekDataList, singelWeekData)
singelWeekData = []*model.StoreScore{}
count = 0
weekIndex = 0
singelWeekData = append(singelWeekData, value)
}
}
if len(singelWeekData) > 0 {
weekDataList = append(weekDataList, singelWeekData)
}
return weekDataList
}
func GetStoreScoreLevel(score int) int {
level := 0
if score >= GoldMedalScore {
level = GoldMedalLevel
} else if score >= SilverMedalScore {
level = SilverMedalLevel
} else if score >= BronzeMedalScore {
level = BronzeMedalLevel
}
return level
}
func GetWeeklyStoreScore(storeID, weekIndex int) (outWeeklyStoreScoreDataList []*model.WeeklyStoreScore, err error) {
db := dao.GetDB()
storeScoreList, err := dao.GetLatestWeeklyStoreScoreList(db, storeID, 5)
if err == nil && len(storeScoreList) > 0 {
weeklyStoreScoreDataList := []*model.WeeklyStoreScore{}
weekDataList := SplitToSingelWeekDataList(storeScoreList)
for weekIndex, weekDataList := range weekDataList {
weekDataList := SplitToSingleWeekDataList(storeScoreList)
for weekIndex, weekData := range weekDataList {
weeklyData := &model.WeeklyStoreScore{}
weeklyData.ID = weekIndex
weeklyData.ItemTotalScore = ItemTotalScore
weeklyData.StoreID = storeID
weeklyStoreScoreDataList = append(weeklyStoreScoreDataList, weeklyData)
weekDataListCount := len(weekDataList)
for dayIndex, dayData := range weekDataList {
weekDataCount := len(weekData)
for dayIndex, dayData := range weekData {
for _, fieldName := range storeScoreFieldName {
srcFieldValue := refutil.GetObjFieldByName(dayData, fieldName).(int)
destFieldValueR := refutil.GetObjFieldByName(weeklyData, fieldName).(int)
refutil.SetObjFieldByName(weeklyData, fieldName, destFieldValueR+srcFieldValue)
destFieldValue := refutil.GetObjFieldByName(weeklyData, fieldName).(int)
refutil.SetObjFieldByName(weeklyData, fieldName, destFieldValue+srcFieldValue)
}
if dayIndex == 0 {
weeklyData.EndTime = dayData.CreatedAt
} else if dayIndex == weekDataListCount-1 {
if weekDataCount == 1 {
weeklyData.BeginTime = dayData.CreatedAt
weeklyData.EndTime = dayData.CreatedAt
} else {
if dayIndex == 0 {
weeklyData.EndTime = dayData.CreatedAt
} else if dayIndex == weekDataCount-1 {
weeklyData.BeginTime = dayData.CreatedAt
}
}
weeklyData.StoreName = dayData.StoreName
}
for _, fieldName := range storeScoreFieldName {
destFieldValueR := refutil.GetObjFieldByName(weeklyData, fieldName).(int)
refutil.SetObjFieldByName(weeklyData, fieldName, int(math.Round(float64(destFieldValueR)/float64(weekDataListCount))))
destFieldValue := refutil.GetObjFieldByName(weeklyData, fieldName).(int)
refutil.SetObjFieldByName(weeklyData, fieldName, int(math.Round(float64(destFieldValue)/float64(weekDataCount))))
}
for _, fieldName := range storeScoreFieldName {
srcFieldValue := refutil.GetObjFieldByName(weeklyData, fieldName).(int)
destFieldValueR := refutil.GetObjFieldByName(weeklyData, "TotalScore").(int)
refutil.SetObjFieldByName(weeklyData, "TotalScore", destFieldValueR+srcFieldValue)
destFieldValue := refutil.GetObjFieldByName(weeklyData, model.FieldTotalScore).(int)
refutil.SetObjFieldByName(weeklyData, model.FieldTotalScore, destFieldValue+srcFieldValue)
}
weeklyData.Level = 0
weeklyData.Level = GetStoreScoreLevel(weeklyData.TotalScore)
}
if weekIndex == -1 {
outWeeklyStoreScoreDataList = weeklyStoreScoreDataList

View File

@@ -2,6 +2,21 @@ package model
import "time"
const (
FieldStoreOpenTime = "StoreOpenTime"
FieldSaleSkuCount = "SaleSkuCount"
FieldAveragePickupTime = "AveragePickupTime"
FieldBadCommentOrder = "BadCommentOrder"
FieldUnfinishOrder = "UnfinishOrder"
FieldAbsentGoodsOrder = "AbsentGoodsOrder"
FieldPromotionSku = "PromotionSku"
FieldFullVendor = "FullVendor"
FieldStoreRange = "StoreRange"
FieldSaleSkuPrice = "SaleSkuPrice"
FieldTotalScore = "TotalScore"
)
type StoreScore struct {
ID int `orm:"column(id)" json:"id"`
CreatedAt time.Time `orm:"auto_now_add;type(datetime)" json:"createdAt"`