diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index 464d1fc3f..32dde01f5 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -14,8 +14,6 @@ import ( "strings" "time" - "git.rosy.net.cn/jx-callback/business/jxstore/misc" - "git.rosy.net.cn/baseapi/platformapi/tao_vegetable" "git.rosy.net.cn/jx-callback/business/partner/purchase/mtwm" @@ -5929,7 +5927,7 @@ func GetHomePageByLocation(ctx *jxcontext.Context, lng, lat float64, needWalkDis return nil, "获取门店品牌信息失败", err } //获取门店每周评分 - if scores, err := misc.GetWeeklyStoreScore(v.ID, 0); err == nil && len(scores) > 0 { + if scores, err := GetWeeklyStoreScore(v.ID, 0); err == nil && len(scores) > 0 { storeScore = scores[0].TotalScore } @@ -6460,3 +6458,125 @@ func GetVendorStoreBind(vendorStoreId string, vendorId int) (int, error) { func BindJxPrintToStore(storeId int64, printSn, printKey string) error { return dao.BindJXPrintToStore(storeId, printSn, printKey) } + +var ( + storeScoreFieldName = []string{ + model.FieldStoreOpenTime, + model.FieldSaleSkuCount, + model.FieldAveragePickupTime, + model.FieldBadCommentOrder, + model.FieldUnfinishOrder, + model.FieldAbsentGoodsOrder, + model.FieldPromotionSku, + model.FieldFullVendor, + model.FieldStoreRange, + model.FieldSaleSkuPrice, + } +) + +func GetWeeklyStoreScore(storeID, weekIndexParam int) (outWeeklyStoreScoreDataList []*model.WeeklyStoreScore, err error) { + db := dao.GetDB() + storeScoreList, err := dao.GetWeeklyStoreScoreList(db, storeID, 1) + if err == nil && len(storeScoreList) > 0 { + weeklyStoreScoreDataList := []*model.WeeklyStoreScore{} + weekDataList := SplitToSingleWeekDataList(storeScoreList) + for weekIndex, weekData := range weekDataList { + weeklyData := &model.WeeklyStoreScore{} + weeklyData.ID = weekIndex + weeklyData.ItemTotalScore = 10 + weeklyData.StoreID = storeID + weeklyStoreScoreDataList = append(weeklyStoreScoreDataList, weeklyData) + weekDataCount := len(weekData) + for dayIndex, dayData := range weekData { + for _, fieldName := range storeScoreFieldName { + srcFieldValue := refutil.GetObjFieldByName(dayData, fieldName).(int) + destFieldValue := refutil.GetObjFieldByName(weeklyData, fieldName).(int) + refutil.SetObjFieldByName(weeklyData, fieldName, destFieldValue+srcFieldValue) + } + if weekDataCount == 1 { + weeklyData.BeginTime = dayData.ScoreDate + weeklyData.EndTime = dayData.ScoreDate + } else { + if dayIndex == 0 { + weeklyData.EndTime = dayData.ScoreDate + } else if dayIndex == weekDataCount-1 { + weeklyData.BeginTime = dayData.ScoreDate + } + } + weeklyData.StoreName = dayData.StoreName + } + for _, fieldName := range storeScoreFieldName { + 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) + destFieldValue := refutil.GetObjFieldByName(weeklyData, model.FieldTotalScore).(int) + refutil.SetObjFieldByName(weeklyData, model.FieldTotalScore, destFieldValue+srcFieldValue) + } + weeklyData.Level = GetStoreScoreLevel(weeklyData.TotalScore) + } + if weekIndexParam == -1 { + outWeeklyStoreScoreDataList = weeklyStoreScoreDataList + } else { + //fmt.Println("testss", utils.Format4Output(weeklyStoreScoreDataList, false)) + outWeeklyStoreScoreDataList = []*model.WeeklyStoreScore{weeklyStoreScoreDataList[weekIndexParam]} + } + } + + return outWeeklyStoreScoreDataList, err +} +func SplitToSingleWeekDataList(storeScoreList []*model.StoreScoreEx) (weekDataList [][]*model.StoreScoreEx) { + singleWeekData := []*model.StoreScoreEx{} + weekIndex := 0 + for _, value := range storeScoreList { + if weekIndex == 0 { + weekIndex = Time2Week(value.ScoreDate) + } + if weekIndex == Time2Week(value.ScoreDate) { + singleWeekData = append(singleWeekData, value) + } else { + weekDataList = append(weekDataList, singleWeekData) + singleWeekData = []*model.StoreScoreEx{} + weekIndex = 0 + singleWeekData = append(singleWeekData, value) + } + } + if len(singleWeekData) > 0 { + weekDataList = append(weekDataList, singleWeekData) + } + + return weekDataList +} +func GetStoreScoreLevel(score int) int { + level := 0 + if score >= 90 { + level = 1 + } else if score >= 80 { + level = 2 + } else if score >= 70 { + level = 3 + } + + return level +} + +func Time2Week(t time.Time) int { + yearDay := t.YearDay() + yearFirstDay := t.AddDate(0, 0, -yearDay+1) + firstDayInWeek := int(yearFirstDay.Weekday()) + + firstWeekDays := 1 + if firstDayInWeek != 0 { + firstWeekDays = 7 - firstDayInWeek + 1 + } + var week int + if yearDay <= firstWeekDays { + week = 1 + } else { + tempWeek := (float64(yearDay) - float64(firstWeekDays)) / float64(7) + week = int(math.Ceil(tempWeek)) + 1 + } + + return week +}