DailySignService.java 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package com.izouma.nineth.service;
  2. import com.izouma.nineth.domain.AirDrop;
  3. import com.izouma.nineth.domain.DailySign;
  4. import com.izouma.nineth.domain.DropTarget;
  5. import com.izouma.nineth.domain.User;
  6. import com.izouma.nineth.dto.PageQuery;
  7. import com.izouma.nineth.enums.AirDropType;
  8. import com.izouma.nineth.exception.BusinessException;
  9. import com.izouma.nineth.repo.DailySignRepo;
  10. import com.izouma.nineth.repo.UserRepo;
  11. import com.izouma.nineth.utils.JpaUtils;
  12. import lombok.AllArgsConstructor;
  13. import org.redisson.liveobject.resolver.LongGenerator;
  14. import org.springframework.data.domain.Page;
  15. import org.springframework.stereotype.Service;
  16. import java.time.LocalDate;
  17. import java.util.ArrayList;
  18. import java.util.Collections;
  19. import java.util.List;
  20. @Service
  21. @AllArgsConstructor
  22. public class DailySignService {
  23. private DailySignRepo dailySignRepo;
  24. private AirDropService airDropService;
  25. private SysConfigService sysConfigService;
  26. private UserRepo userRepo;
  27. public Page<DailySign> all(PageQuery pageQuery) {
  28. return dailySignRepo
  29. .findAll(JpaUtils.toSpecification(pageQuery, DailySign.class), JpaUtils.toPageRequest(pageQuery));
  30. }
  31. public void sign(Long userId) {
  32. LocalDate today = LocalDate.now();
  33. DailySign record = dailySignRepo.findFirstByUserIdAndDate(userId, today);
  34. if (record != null) {
  35. throw new BusinessException("今日已经签到,请明天再来");
  36. }
  37. DailySign dailySign = new DailySign();
  38. dailySign.setUserId(userId);
  39. dailySign.setDate(today);
  40. dailySignRepo.save(dailySign);
  41. checkDays(userId);
  42. }
  43. public List<DailySign> search(Long userId, LocalDate start, LocalDate end) {
  44. return dailySignRepo.findAllByUserIdAndDateBetween(userId, start, end);
  45. }
  46. public void checkDays(Long userId) {
  47. LocalDate start = LocalDate.of(2023, 1, 19);
  48. LocalDate end = LocalDate.of(2023, 1, 29);
  49. List<DailySign> signs = search(userId, start, end);
  50. if (signs.size() == 10) {
  51. airDrop(userId);
  52. }
  53. }
  54. public void airDrop(Long userId) {
  55. Long collectionId = Long.valueOf(sysConfigService.getString("sign_collectionId"));
  56. User user = userRepo.findById(userId).orElseThrow(new BusinessException("暂无该用户"));
  57. airDropService.create(AirDrop.builder()
  58. .name("春节签到空投福卡")
  59. .remark("dailySign:" + userId)
  60. .type(AirDropType.asset)
  61. .userIds(Collections.singletonList(userId))
  62. .collectionId(collectionId)
  63. .targets(Collections
  64. .singletonList(new DropTarget(user.getId(), user.getPhone(), user
  65. .getNickname(), 1)))
  66. .auto(true)
  67. .companyId(1L)
  68. .build());
  69. }
  70. }