package com.izouma.nineth.service; import com.izouma.nineth.domain.AirDrop; import com.izouma.nineth.domain.DailySign; import com.izouma.nineth.domain.DropTarget; import com.izouma.nineth.domain.User; import com.izouma.nineth.dto.PageQuery; import com.izouma.nineth.enums.AirDropType; import com.izouma.nineth.exception.BusinessException; import com.izouma.nineth.repo.DailySignRepo; import com.izouma.nineth.repo.UserRepo; import com.izouma.nineth.utils.JpaUtils; import lombok.AllArgsConstructor; import org.redisson.liveobject.resolver.LongGenerator; import org.springframework.data.domain.Page; import org.springframework.stereotype.Service; import java.time.LocalDate; import java.util.ArrayList; import java.util.Collections; import java.util.List; @Service @AllArgsConstructor public class DailySignService { private DailySignRepo dailySignRepo; private AirDropService airDropService; private SysConfigService sysConfigService; private UserRepo userRepo; public Page all(PageQuery pageQuery) { return dailySignRepo .findAll(JpaUtils.toSpecification(pageQuery, DailySign.class), JpaUtils.toPageRequest(pageQuery)); } public void sign(Long userId) { LocalDate today = LocalDate.now(); DailySign record = dailySignRepo.findFirstByUserIdAndDate(userId, today); if (record != null) { throw new BusinessException("今日已经签到,请明天再来"); } DailySign dailySign = new DailySign(); dailySign.setUserId(userId); dailySign.setDate(today); dailySignRepo.save(dailySign); checkDays(userId); } public List search(Long userId, LocalDate start, LocalDate end) { return dailySignRepo.findAllByUserIdAndDateBetween(userId, start, end); } public void checkDays(Long userId) { LocalDate start = LocalDate.of(2023, 1, 19); LocalDate end = LocalDate.of(2023, 1, 29); List signs = search(userId, start, end); if (signs.size() == 10) { airDrop(userId); } } public void airDrop(Long userId) { Long collectionId = Long.valueOf(sysConfigService.getString("sign_collectionId")); User user = userRepo.findById(userId).orElseThrow(new BusinessException("暂无该用户")); airDropService.create(AirDrop.builder() .name("春节签到空投福卡") .remark("dailySign:" + userId) .type(AirDropType.asset) .userIds(Collections.singletonList(userId)) .collectionId(collectionId) .targets(Collections .singletonList(new DropTarget(user.getId(), user.getPhone(), user .getNickname(), 1))) .auto(true) .companyId(1L) .build()); } }