package com.dota.nexus.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dota.nexus.entity.Anniversary; import com.dota.nexus.entity.AnniversaryEnum; import com.dota.nexus.entity.vo.AnniversaryVO; import com.dota.nexus.mapper.AnniversaryMapper; import com.dota.nexus.service.AnniversaryService; import org.springframework.stereotype.Service; import java.time.LocalDate; import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; @Service public class AnniversaryServiceImpl extends ServiceImpl implements AnniversaryService { @Override public List getFuture() { var anniversaries = this.baseMapper.selectList(null); var list = new ArrayList(); var now = LocalDate.now(); for (Anniversary anniversary : anniversaries) { // 周年,变成今年或者明年 if (anniversary.getType() == AnniversaryEnum.ANNIVERSARY) { LocalDate date = anniversary.getDate(); date = date.withYear(now.getYear()); if (date.isBefore(now)) { date = date.withYear(now.getYear() + 1); } list.add(new AnniversaryVO(anniversary.getName(), date.toString(), (int) ChronoUnit.DAYS.between(now, date))); } else if (anniversary.getType() == AnniversaryEnum.COMMEMORATION && !anniversary.getDate().isBefore(now)) { list.add(new AnniversaryVO(anniversary.getName(), anniversary.getDate().toString(), (int) ChronoUnit.DAYS.between(now, anniversary.getDate()))); } } list.sort(Comparator.comparingInt(AnniversaryVO::distance)); return list; } @Override public List getPast() { var q = new LambdaQueryWrapper(); q.eq(Anniversary::getType, AnniversaryEnum.COMMEMORATION); var anniversaries = this.baseMapper.selectList(q); var now = LocalDate.now(); return anniversaries.stream().map(a -> new AnniversaryVO(a.getName(), a.getDate().toString(), (int) ChronoUnit.DAYS.between(now, a.getDate()))).sorted((a,b)->b.distance()-a.distance()).collect(Collectors.toList()); } }