ProgramService.java 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package com.smcic.api.epg.service.impl;
  2. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  3. import com.github.benmanes.caffeine.cache.Cache;
  4. import com.github.benmanes.caffeine.cache.Caffeine;
  5. import com.google.common.collect.ImmutableMap;
  6. import com.smcic.api.epg.entity.Program;
  7. import com.smcic.api.epg.entity.EpgDisableConfig;
  8. import com.smcic.api.epg.mapper.ProgramMapper;
  9. import com.smcic.api.epg.service.IProgramService;
  10. import lombok.extern.slf4j.Slf4j;
  11. import org.springframework.stereotype.Service;
  12. import javax.annotation.Resource;
  13. import java.time.LocalDateTime;
  14. import java.time.format.DateTimeFormatter;
  15. import java.util.ArrayList;
  16. import java.util.Comparator;
  17. import java.util.List;
  18. import java.util.Map;
  19. import java.util.concurrent.TimeUnit;
  20. import java.util.stream.Collectors;
  21. @Service
  22. @Slf4j
  23. public class ProgramService extends ServiceImpl<ProgramMapper, Program> implements IProgramService {
  24. @Resource
  25. private EpgDisableConfigService epgDisableConfigService;
  26. @Resource
  27. private KeywordDisableConfigService keywordDisableConfigService;
  28. private final Cache<Integer, Object> cache = Caffeine.newBuilder().expireAfterWrite(10, TimeUnit.MINUTES).build();
  29. DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
  30. public List<Map<String, Object>> getProgramList(Integer channelId) {
  31. System.out.println("-------------------获取epg-----------------------");
  32. LocalDateTime now = LocalDateTime.now();
  33. LocalDateTime end = LocalDateTime.of(now.getYear(), now.getMonth(), now.getDayOfMonth(), 23, 59, 59);
  34. LocalDateTime start = end.minusDays(7).plusSeconds(1);
  35. List<Map<String, Object>> rs = new ArrayList<>();
  36. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
  37. DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("M月d日");
  38. Map<String, EpgDisableConfig> sspDisableConfigMap = epgDisableConfigService.cfMap(channelId, start, end);
  39. baseMapper.listByChannel(channelId, start, end).stream().peek(program -> {
  40. String k = program.getTitle() + "_" + program.getStartTime().format(formatter2);
  41. if(sspDisableConfigMap.containsKey(k)){
  42. program.setStatus(sspDisableConfigMap.get(k).getStatus());
  43. }else{
  44. program.setStatus(0);
  45. }
  46. }).collect(Collectors.groupingBy(Program::getBroadcastDate)).forEach((k, v) -> {
  47. int status = 0;
  48. for(Program program : v){
  49. if (program.getStatus() == 1) {
  50. status = 1;
  51. break;
  52. }
  53. }
  54. rs.add(ImmutableMap.of("date", k.format(formatter), "status", status, "title", k.format(formatter1), "epg", v));
  55. });
  56. rs.sort(Comparator.comparing((Map<String, Object> o) -> o.get("date").toString()));
  57. return rs;
  58. }
  59. public List<Map<String, Object>> cacheEpg(Integer channelId) {
  60. return (List<Map<String, Object>>)cache.get(channelId, key -> getDisableProgramList(channelId));
  61. }
  62. public void setCache(Integer channelId){
  63. // log.info("更新缓存 {}", channelId);
  64. cache.put(channelId, getDisableProgramList(channelId));
  65. }
  66. public List<Map<String, Object>> getDisableProgramList(Integer channelId) {
  67. LocalDateTime now = LocalDateTime.now();
  68. LocalDateTime end = LocalDateTime.of(now.getYear(), now.getMonth(), now.getDayOfMonth(), 23, 59, 59);
  69. LocalDateTime start = end.minusDays(7).plusSeconds(1);
  70. List<Map<String, Object>> rs = new ArrayList<>();
  71. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
  72. DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("M月d日");
  73. Map<String, EpgDisableConfig> sspDisableConfigMap = epgDisableConfigService.cfMap(channelId, start, end);
  74. List<String> keywords = keywordDisableConfigService.disableKeywords(channelId, start, end);
  75. baseMapper.listByChannel(channelId, start, end).stream().filter(program -> {
  76. if(sspDisableConfigMap.containsKey(program.getTitle() + "_" + program.getStartTime().format(formatter2))){
  77. return true;
  78. }
  79. for(String keyword :keywords){
  80. if(program.getTitle().contains(keyword)){
  81. return true;
  82. }
  83. }
  84. return false;
  85. })
  86. .peek(program -> program.setStatus(1)).collect(Collectors.groupingBy(Program::getBroadcastDate))
  87. .forEach((k, v) -> rs.add(ImmutableMap.of("date", k.format(formatter), "title", k.format(formatter1), "epg", v)));
  88. rs.sort(Comparator.comparing((Map<String, Object> o) -> o.get("date").toString()));
  89. return rs;
  90. }
  91. }