修改门店评分BUG
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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"`
|
||||
|
||||
Reference in New Issue
Block a user