123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- package com.smcic.api.epg.service.impl;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.github.benmanes.caffeine.cache.Cache;
- import com.github.benmanes.caffeine.cache.Caffeine;
- import com.google.common.collect.ImmutableMap;
- import com.smcic.api.epg.entity.Program;
- import com.smcic.api.epg.entity.EpgDisableConfig;
- import com.smcic.api.epg.mapper.ProgramMapper;
- import com.smcic.api.epg.service.IProgramService;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.stereotype.Service;
- import javax.annotation.Resource;
- import java.time.LocalDateTime;
- import java.time.format.DateTimeFormatter;
- import java.util.ArrayList;
- import java.util.Comparator;
- import java.util.List;
- import java.util.Map;
- import java.util.concurrent.TimeUnit;
- import java.util.stream.Collectors;
- @Service
- @Slf4j
- public class ProgramService extends ServiceImpl<ProgramMapper, Program> implements IProgramService {
- @Resource
- private EpgDisableConfigService epgDisableConfigService;
- @Resource
- private KeywordDisableConfigService keywordDisableConfigService;
- private final Cache<Integer, Object> cache = Caffeine.newBuilder().expireAfterWrite(10, TimeUnit.MINUTES).build();
- DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
- public List<Map<String, Object>> getProgramList(Integer channelId) {
- System.out.println("-------------------获取epg-----------------------");
- LocalDateTime now = LocalDateTime.now();
- LocalDateTime end = LocalDateTime.of(now.getYear(), now.getMonth(), now.getDayOfMonth(), 23, 59, 59);
- LocalDateTime start = end.minusDays(7).plusSeconds(1);
- List<Map<String, Object>> rs = new ArrayList<>();
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
- DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("M月d日");
- Map<String, EpgDisableConfig> sspDisableConfigMap = epgDisableConfigService.cfMap(channelId, start, end);
- baseMapper.listByChannel(channelId, start, end).stream().peek(program -> {
- String k = program.getTitle() + "_" + program.getStartTime().format(formatter2);
- if(sspDisableConfigMap.containsKey(k)){
- program.setStatus(sspDisableConfigMap.get(k).getStatus());
- }else{
- program.setStatus(0);
- }
- }).collect(Collectors.groupingBy(Program::getBroadcastDate)).forEach((k, v) -> {
- int status = 0;
- for(Program program : v){
- if (program.getStatus() == 1) {
- status = 1;
- break;
- }
- }
- rs.add(ImmutableMap.of("date", k.format(formatter), "status", status, "title", k.format(formatter1), "epg", v));
- });
- rs.sort(Comparator.comparing((Map<String, Object> o) -> o.get("date").toString()));
- return rs;
- }
- public List<Map<String, Object>> cacheEpg(Integer channelId) {
- return (List<Map<String, Object>>)cache.get(channelId, key -> getDisableProgramList(channelId));
- }
- public void setCache(Integer channelId){
- // log.info("更新缓存 {}", channelId);
- cache.put(channelId, getDisableProgramList(channelId));
- }
- public List<Map<String, Object>> getDisableProgramList(Integer channelId) {
- LocalDateTime now = LocalDateTime.now();
- LocalDateTime end = LocalDateTime.of(now.getYear(), now.getMonth(), now.getDayOfMonth(), 23, 59, 59);
- LocalDateTime start = end.minusDays(7).plusSeconds(1);
- List<Map<String, Object>> rs = new ArrayList<>();
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
- DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("M月d日");
- Map<String, EpgDisableConfig> sspDisableConfigMap = epgDisableConfigService.cfMap(channelId, start, end);
- List<String> keywords = keywordDisableConfigService.disableKeywords(channelId, start, end);
- baseMapper.listByChannel(channelId, start, end).stream().filter(program -> {
- if(sspDisableConfigMap.containsKey(program.getTitle() + "_" + program.getStartTime().format(formatter2))){
- return true;
- }
- for(String keyword :keywords){
- if(program.getTitle().contains(keyword)){
- return true;
- }
- }
- return false;
- })
- .peek(program -> program.setStatus(1)).collect(Collectors.groupingBy(Program::getBroadcastDate))
- .forEach((k, v) -> rs.add(ImmutableMap.of("date", k.format(formatter), "title", k.format(formatter1), "epg", v)));
- rs.sort(Comparator.comparing((Map<String, Object> o) -> o.get("date").toString()));
- return rs;
- }
- }
|