|  | @@ -1,17 +1,16 @@
 | 
	
		
			
				|  |  |  package com.tzld.piaoquan.recommend.server.service.score4recall.strategy;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -import com.alibaba.fastjson.JSONArray;
 | 
	
		
			
				|  |  | -import com.alibaba.fastjson.JSONObject;
 | 
	
		
			
				|  |  |  import com.tzld.piaoquan.recommend.server.service.score.ScorerConfigInfo;
 | 
	
		
			
				|  |  |  import com.tzld.piaoquan.recommend.server.service.score4recall.AbstractScorer4Recall;
 | 
	
		
			
				|  |  |  import com.tzld.piaoquan.recommend.server.service.score4recall.model4recall.Model4RecallKeyValue;
 | 
	
		
			
				|  |  | -import com.tzld.piaoquan.recommend.server.util.ListMerger;
 | 
	
		
			
				|  |  |  import org.apache.commons.lang3.StringUtils;
 | 
	
		
			
				|  |  |  import org.apache.commons.lang3.tuple.Pair;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import java.time.LocalDateTime;
 | 
	
		
			
				|  |  |  import java.time.format.DateTimeFormatter;
 | 
	
		
			
				|  |  | -import java.util.*;
 | 
	
		
			
				|  |  | +import java.util.ArrayList;
 | 
	
		
			
				|  |  | +import java.util.List;
 | 
	
		
			
				|  |  | +import java.util.Map;
 | 
	
		
			
				|  |  |  import java.util.stream.Collectors;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -33,76 +32,74 @@ public class BlessRecallScore extends AbstractScorer4Recall {
 | 
	
		
			
				|  |  |          if (model == null || model.kv == null) {
 | 
	
		
			
				|  |  |              return new ArrayList<>();
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        LocalDateTime now = LocalDateTime.now();
 | 
	
		
			
				|  |  | -        // 节日祝福-每年
 | 
	
		
			
				|  |  | -        List<Pair<Long, Double>> yearResult = new ArrayList<>();
 | 
	
		
			
				|  |  | -        String yearlyFestivalTimeRange = params.get("yearly_festival_time_range");
 | 
	
		
			
				|  |  | -        if (StringUtils.isBlank(yearlyFestivalTimeRange)) {
 | 
	
		
			
				|  |  | -            return new ArrayList<>();
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        JSONObject jsonObject = JSONObject.parseObject(yearlyFestivalTimeRange);
 | 
	
		
			
				|  |  | -        for (String festival : jsonObject.keySet()) {
 | 
	
		
			
				|  |  | -            try {
 | 
	
		
			
				|  |  | -                JSONArray jsonArray = jsonObject.getJSONArray(festival);
 | 
	
		
			
				|  |  | -                if (jsonArray == null) {
 | 
	
		
			
				|  |  | -                    continue;
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -                List<String> timeRangeList = jsonArray.toJavaList(String.class);
 | 
	
		
			
				|  |  | -                if (isFestivalTime(now, timeRangeList)) {
 | 
	
		
			
				|  |  | -                    Pair<LocalDateTime, LocalDateTime> startTimeAndEndTime = getStartTimeAndEndTime(timeRangeList.get(0));
 | 
	
		
			
				|  |  | -                    if (startTimeAndEndTime == null) {
 | 
	
		
			
				|  |  | -                        continue;
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                    // 节日峰值设置为结束时间的当天的7点
 | 
	
		
			
				|  |  | -                    double weight = DynamicGaussianFunction.calculateValue(LocalDateTime.now(), startTimeAndEndTime.getLeft(),
 | 
	
		
			
				|  |  | -                            startTimeAndEndTime.getRight(), startTimeAndEndTime.getRight().withHour(7));
 | 
	
		
			
				|  |  | -                    List<Pair<Long, Double>> festivalLists = model.kv.getOrDefault(festival, new ArrayList<>());
 | 
	
		
			
				|  |  | -                    if (festivalLists.isEmpty()) {
 | 
	
		
			
				|  |  | -                        continue;
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                    festivalLists = festivalLists.stream().map(pair -> Pair.of(pair.getLeft(), weight))
 | 
	
		
			
				|  |  | -                            .limit(Math.min(50, festivalLists.size()))
 | 
	
		
			
				|  |  | -                            .collect(Collectors.toList());
 | 
	
		
			
				|  |  | -                    yearResult.addAll(festivalLists);
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -            } catch (Exception e) {
 | 
	
		
			
				|  |  | -                e.printStackTrace();
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        List<Pair<Long, Double>> dayResult = new ArrayList<>();
 | 
	
		
			
				|  |  | -        // 每日祝福-每天固定时间段
 | 
	
		
			
				|  |  | -        String dailyFestivalTimeRange = params.get("daily_bless_time_range");
 | 
	
		
			
				|  |  | -        if (StringUtils.isBlank(dailyFestivalTimeRange)) {
 | 
	
		
			
				|  |  | -            return new ArrayList<>();
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        JSONObject dailyFestivalTimeRangeJson = JSONObject.parseObject(dailyFestivalTimeRange);
 | 
	
		
			
				|  |  | -        for (String bless : dailyFestivalTimeRangeJson.keySet()) {
 | 
	
		
			
				|  |  | -            try {
 | 
	
		
			
				|  |  | -                String timeRange = dailyFestivalTimeRangeJson.getString(bless);
 | 
	
		
			
				|  |  | -                if (isFestivalTime(now, Collections.singletonList(timeRange))) {
 | 
	
		
			
				|  |  | -                    List<Pair<Long, Double>> festivalLists = model.kv.getOrDefault(bless, new ArrayList<>());
 | 
	
		
			
				|  |  | -                    if (festivalLists.isEmpty()) {
 | 
	
		
			
				|  |  | -                        continue;
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                    festivalLists = festivalLists.stream().map(pair -> Pair.of(pair.getLeft(), 0.0))
 | 
	
		
			
				|  |  | -                            .limit(Math.min(50, festivalLists.size()))
 | 
	
		
			
				|  |  | -                            .collect(Collectors.toList());
 | 
	
		
			
				|  |  | -                    dayResult.addAll(festivalLists);
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -            } catch (Exception e) {
 | 
	
		
			
				|  |  | -                e.printStackTrace();
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | +//        LocalDateTime now = LocalDateTime.now();
 | 
	
		
			
				|  |  | +//        // 节日祝福-每年
 | 
	
		
			
				|  |  | +//        List<Pair<Long, Double>> yearResult = new ArrayList<>();
 | 
	
		
			
				|  |  | +//        String yearlyFestivalTimeRange = params.get("yearly_festival_time_range");
 | 
	
		
			
				|  |  | +//        if (StringUtils.isBlank(yearlyFestivalTimeRange)) {
 | 
	
		
			
				|  |  | +//            return new ArrayList<>();
 | 
	
		
			
				|  |  | +//        }
 | 
	
		
			
				|  |  | +//        JSONObject jsonObject = JSONObject.parseObject(yearlyFestivalTimeRange);
 | 
	
		
			
				|  |  | +//        for (String festival : jsonObject.keySet()) {
 | 
	
		
			
				|  |  | +//            try {
 | 
	
		
			
				|  |  | +//                JSONArray jsonArray = jsonObject.getJSONArray(festival);
 | 
	
		
			
				|  |  | +//                if (jsonArray == null) {
 | 
	
		
			
				|  |  | +//                    continue;
 | 
	
		
			
				|  |  | +//                }
 | 
	
		
			
				|  |  | +//                //                if (isFestivalTime(now, timeRangeList)) {
 | 
	
		
			
				|  |  | +////                    Pair<LocalDateTime, LocalDateTime> startTimeAndEndTime = getStartTimeAndEndTime(timeRangeList.get(0));
 | 
	
		
			
				|  |  | +////                    if (startTimeAndEndTime == null) {
 | 
	
		
			
				|  |  | +////                        continue;
 | 
	
		
			
				|  |  | +////                    }
 | 
	
		
			
				|  |  | +//                    // 节日峰值设置为结束时间的当天的7点
 | 
	
		
			
				|  |  | +////                    double weight = DynamicGaussianFunction.calculateValue(LocalDateTime.now(), startTimeAndEndTime.getLeft(),
 | 
	
		
			
				|  |  | +////                            startTimeAndEndTime.getRight(), startTimeAndEndTime.getRight().withHour(7));
 | 
	
		
			
				|  |  | +//                    List<Pair<Long, Double>> festivalLists = model.kv.getOrDefault(festival, new ArrayList<>());
 | 
	
		
			
				|  |  | +//                    if (festivalLists.isEmpty()) {
 | 
	
		
			
				|  |  | +//                        continue;
 | 
	
		
			
				|  |  | +//                    }
 | 
	
		
			
				|  |  | +//                    festivalLists = festivalLists.stream().map(pair -> Pair.of(pair.getLeft(), 0.0))
 | 
	
		
			
				|  |  | +//                            .limit(Math.min(200, festivalLists.size()))
 | 
	
		
			
				|  |  | +//                            .collect(Collectors.toList());
 | 
	
		
			
				|  |  | +//                    yearResult.addAll(festivalLists);
 | 
	
		
			
				|  |  | +////                }
 | 
	
		
			
				|  |  | +//            } catch (Exception e) {
 | 
	
		
			
				|  |  | +//                e.printStackTrace();
 | 
	
		
			
				|  |  | +//            }
 | 
	
		
			
				|  |  | +//        }
 | 
	
		
			
				|  |  | +//        List<Pair<Long, Double>> dayResult = new ArrayList<>();
 | 
	
		
			
				|  |  | +//        // 每日祝福-每天固定时间段
 | 
	
		
			
				|  |  | +//        String dailyFestivalTimeRange = params.get("daily_bless_time_range");
 | 
	
		
			
				|  |  | +//        if (StringUtils.isBlank(dailyFestivalTimeRange)) {
 | 
	
		
			
				|  |  | +//            return new ArrayList<>();
 | 
	
		
			
				|  |  | +//        }
 | 
	
		
			
				|  |  | +//        JSONObject dailyFestivalTimeRangeJson = JSONObject.parseObject(dailyFestivalTimeRange);
 | 
	
		
			
				|  |  | +//        for (String bless : dailyFestivalTimeRangeJson.keySet()) {
 | 
	
		
			
				|  |  | +//            try {
 | 
	
		
			
				|  |  | +//                String timeRange = dailyFestivalTimeRangeJson.getString(bless);
 | 
	
		
			
				|  |  | +//                if (isFestivalTime(now, Collections.singletonList(timeRange))) {
 | 
	
		
			
				|  |  | +//                    List<Pair<Long, Double>> festivalLists = model.kv.getOrDefault(bless, new ArrayList<>());
 | 
	
		
			
				|  |  | +//                    if (festivalLists.isEmpty()) {
 | 
	
		
			
				|  |  | +//                        continue;
 | 
	
		
			
				|  |  | +//                    }
 | 
	
		
			
				|  |  | +//                    festivalLists = festivalLists.stream().map(pair -> Pair.of(pair.getLeft(), 0.0))
 | 
	
		
			
				|  |  | +//                            .limit(Math.min(50, festivalLists.size()))
 | 
	
		
			
				|  |  | +//                            .collect(Collectors.toList());
 | 
	
		
			
				|  |  | +//                    dayResult.addAll(festivalLists);
 | 
	
		
			
				|  |  | +//                }
 | 
	
		
			
				|  |  | +//            } catch (Exception e) {
 | 
	
		
			
				|  |  | +//                e.printStackTrace();
 | 
	
		
			
				|  |  | +//            }
 | 
	
		
			
				|  |  | +//        }
 | 
	
		
			
				|  |  |          // 常规祝福类的小程序-任意时间
 | 
	
		
			
				|  |  |          List<Pair<Long, Double>> anyResult = new ArrayList<>();
 | 
	
		
			
				|  |  |          List<Pair<Long, Double>> festivalLists = model.kv.getOrDefault("祝福", new ArrayList<>());
 | 
	
		
			
				|  |  |          if (!festivalLists.isEmpty()) {
 | 
	
		
			
				|  |  |              festivalLists = festivalLists.stream().map(pair -> Pair.of(pair.getLeft(), 0.0))
 | 
	
		
			
				|  |  | -                    .limit(Math.min(50, festivalLists.size()))
 | 
	
		
			
				|  |  |                      .collect(Collectors.toList());
 | 
	
		
			
				|  |  |              anyResult.addAll(festivalLists);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        return ListMerger.mergeLists(yearResult, dayResult, anyResult);
 | 
	
		
			
				|  |  | +        return anyResult;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public Pair<LocalDateTime, LocalDateTime> getStartTimeAndEndTime(String timeRangeList) {
 |