diff --git a/business/jxstore/misc/store_score.go b/business/jxstore/misc/store_score.go index f16909a2f..857201b5a 100644 --- a/business/jxstore/misc/store_score.go +++ b/business/jxstore/misc/store_score.go @@ -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 diff --git a/business/model/store_score.go b/business/model/store_score.go index 845c19d24..13e121088 100644 --- a/business/model/store_score.go +++ b/business/model/store_score.go @@ -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"`