Forráskód Böngészése

【feat】【v3】
1.晚上定时任务设置

ChenYL 10 hónapja
szülő
commit
bbf5cf2a7a

+ 11 - 5
doc/技术文档.md

@@ -445,11 +445,17 @@ ui设计工具:即时设计
 
 ## 定时任务
 
-| 定时任务名称 | 执行时间                 | cron表达式  | 实现类       |
-| ------------ | ------------------------ | ----------- | ------------ |
-| 日历定时任务 | 每年1月1日零点零一秒执行 | 1 0 0 1 1 ? | CalendarTask |
-|              |                          |             |              |
-|              |                          |             |              |
+| 定时任务名称               | 执行时间             | cron表达式   | 实现类                 |
+| -------------------------- | -------------------- | ------------ | ---------------------- |
+| 拉取全年日历数据           | 每年1月1日零点零一秒 | 1 0 0 1 1 ?  | CalendarTask           |
+| 结算积分                   | 每天凌晨0点10分      | 0 10 0 * * ? | SettlePointsTask       |
+| 结算后积分分发             | 每天凌晨0点40分      | 0 40 0 * * ? | SettleDistributeTask   |
+| 打卡任务自动归档           | 每天凌晨1点05分      | 0 5 1 * * ?  | PiTaskAutoArchiveTask  |
+| 打卡任务自动打卡           | 每天凌晨1点15分      | 0 15 1 * * ? | PiTaskAutoPunchInTask  |
+| 奖励自动兑换               | 每天凌晨1点30分      | 0 30 1 * * ? | RewardAutoExchangeTask |
+| 新用户数据统计             | 每天凌晨2点          | 0 0 2 * * ?  | StatNewUserTask        |
+| 积分数据统计               | 每天凌晨2点15分      | 0 15 2 * * ? | StatPointsTask         |
+| 任务数据统计(周,月,年) | 每天凌晨2点30分      | 0 30 2 * * ? | StatTask               |
 
 
 

+ 1 - 2
src/main/java/com/punchsettle/server/service/manager/IAccountManager.java

@@ -59,9 +59,8 @@ public interface IAccountManager {
 
     /**
      * 创建基本账户
-     * @param userId
      */
-    void createBasicAccount(Long userId);
+    void createBasicAccount();
 
     /**
      * 清除账户相关缓存

+ 5 - 2
src/main/java/com/punchsettle/server/service/manager/impl/AccountManagerImpl.java

@@ -258,13 +258,16 @@ public class AccountManagerImpl implements IAccountManager {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void createBasicAccount(Long userId) {
+    public void createBasicAccount() {
+        Long currentUserId = UserUtils.getCurrentUserId();
         Account account = new Account();
-        account.setUserId(userId);
+        account.setUserId(currentUserId);
         account.setPoints(0);
         account.setAccountName("基本账户");
         account.setAccountCategory(AccountCategoryEnum.BASIC);
         accountService.insert(account);
+        // 清除缓存
+        clearCache(currentUserId);
     }
 
     @Override

+ 4 - 5
src/main/java/com/punchsettle/server/service/manager/impl/PunchInManagerImpl.java

@@ -14,10 +14,6 @@ import java.util.Set;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
-import com.punchsettle.server.atomic.entity.SettleTaskRelaHistory;
-import com.punchsettle.server.atomic.service.ISettleTaskRelaHistoryService;
-import com.punchsettle.server.constant.SettleResultEnum;
-import com.punchsettle.server.pojo.settle.SettleTaskRelaHistoryQuery;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.Cacheable;
@@ -30,9 +26,11 @@ import com.punchsettle.server.atomic.StatPiTask;
 import com.punchsettle.server.atomic.entity.PiStatus;
 import com.punchsettle.server.atomic.entity.PiTask;
 import com.punchsettle.server.atomic.entity.PiTaskHistory;
+import com.punchsettle.server.atomic.entity.SettleTaskRelaHistory;
 import com.punchsettle.server.atomic.service.IPiStatusService;
 import com.punchsettle.server.atomic.service.IPiTaskHistoryService;
 import com.punchsettle.server.atomic.service.IPiTaskService;
+import com.punchsettle.server.atomic.service.ISettleTaskRelaHistoryService;
 import com.punchsettle.server.atomic.service.IStatPiTaskMonthService;
 import com.punchsettle.server.atomic.service.IStatPiTaskYearService;
 import com.punchsettle.server.common.constant.CommonEnableStatusEnum;
@@ -46,6 +44,7 @@ import com.punchsettle.server.constant.PunchInMethodEnum;
 import com.punchsettle.server.constant.PunchInResultEnum;
 import com.punchsettle.server.constant.PunchInResultViewEnum;
 import com.punchsettle.server.constant.RepeatCategoryEnum;
+import com.punchsettle.server.constant.SettleResultEnum;
 import com.punchsettle.server.constant.StatPeriodEnum;
 import com.punchsettle.server.constant.VersionStatusEnum;
 import com.punchsettle.server.pojo.punchIn.PiTaskHistoryQuery;
@@ -60,6 +59,7 @@ import com.punchsettle.server.pojo.punchIn.PiTaskToDoVO;
 import com.punchsettle.server.pojo.punchIn.PiTaskVO;
 import com.punchsettle.server.pojo.punchIn.PunchInHistoryVO;
 import com.punchsettle.server.pojo.punchIn.PunchInRequest;
+import com.punchsettle.server.pojo.settle.SettleTaskRelaHistoryQuery;
 import com.punchsettle.server.pojo.stat.StatPiTaskQuery;
 import com.punchsettle.server.pojo.ucharts.LineSeriesVO;
 import com.punchsettle.server.pojo.ucharts.LineVO;
@@ -831,6 +831,5 @@ public class PunchInManagerImpl implements IPunchInManager {
         if (deleteStat) {
             cacheManager.batchEvictLike(Arrays.asList(CacheNameConstant.STAT_TASK), String.valueOf(userId));
         }
-
     }
 }

+ 49 - 1
src/main/java/com/punchsettle/server/service/manager/impl/UserManagerImpl.java

@@ -1,10 +1,20 @@
 package com.punchsettle.server.service.manager.impl;
 
 import java.math.BigDecimal;
+import java.time.LocalTime;
 import java.util.Objects;
 
+import com.punchsettle.server.common.constant.CommonEnableStatusEnum;
+import com.punchsettle.server.constant.PunchInExtraMethodEnum;
+import com.punchsettle.server.constant.PunchInMethodEnum;
+import com.punchsettle.server.constant.RepeatCategoryEnum;
 import com.punchsettle.server.constant.UserCategoryEnum;
+import com.punchsettle.server.pojo.punchIn.PiTaskRequest;
+import com.punchsettle.server.pojo.reward.RewardRequest;
 import com.punchsettle.server.service.manager.IAccountManager;
+import com.punchsettle.server.service.manager.IPunchInManager;
+import com.punchsettle.server.service.manager.IRewardManager;
+import com.punchsettle.server.utiis.SpringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.CacheManager;
@@ -25,6 +35,7 @@ import cn.binarywang.wx.miniapp.api.WxMaService;
 import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
 import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.common.error.WxErrorException;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * @author tyuio
@@ -51,7 +62,13 @@ public class UserManagerImpl implements IUserManager {
     @Autowired
     private IAccountManager accountManager;
 
+    @Autowired
+    private IRewardManager rewardManager;
+
+    private static final LocalTime ZERO_TIME = LocalTime.parse("00:00:00.000");
+
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public String login(LoginRequest request) throws WxErrorException {
         // 微信登录
         WxMaJscode2SessionResult wxMaJscode2SessionResult = wxMaService.jsCode2SessionInfo(request.getCode());
@@ -71,7 +88,13 @@ public class UserManagerImpl implements IUserManager {
             user.setTotalConsumeAmount(BigDecimal.ZERO);
             user.setTotalWinAmount(BigDecimal.ZERO);
             userService.insert(user);
-            accountManager.createBasicAccount(user.getId());
+
+            // 把用户信息设置如入上下文
+            UserUtils.setCurrentId(user.getId());
+            // 创建基本账户
+            accountManager.createBasicAccount();
+            //创建示例数据
+            createDemoData();
         } else {
             User updateUser = new User();
             updateUser.setId(user.getId());
@@ -115,4 +138,29 @@ public class UserManagerImpl implements IUserManager {
     public User getByIdWithCache(Long id) {
         return userService.getById(id);
     }
+
+    /**
+     * 创建示例数据
+     */
+    private void createDemoData() {
+        PiTaskRequest taskRequest = new PiTaskRequest();
+        taskRequest.setTaskName("锻炼");
+        taskRequest.setDescription("每天锻炼20分钟");
+        taskRequest.setDisplayOrder(10);
+        taskRequest.setDisplayTime(ZERO_TIME);
+        taskRequest.setRepeatCategory(RepeatCategoryEnum.EVERYDAY);
+        taskRequest.setPunchInMethod(PunchInMethodEnum.SINGLE);
+        taskRequest.setExtraMethod(PunchInExtraMethodEnum.NONE);
+        taskRequest.setHolidayStatus(CommonEnableStatusEnum.DISABLED);
+        taskRequest.setFullAttendanceStatus(CommonEnableStatusEnum.DISABLED);
+        taskRequest.setContinueStatus(CommonEnableStatusEnum.DISABLED);
+        taskRequest.setAutoStatus(CommonEnableStatusEnum.DISABLED);
+        SpringUtils.getBean(IPunchInManager.class).saveTask(taskRequest);
+
+        RewardRequest request = new RewardRequest();
+        request.setRewardName("刮1次刮刮乐 ");
+        request.setAutoStatus(CommonEnableStatusEnum.DISABLED);
+        request.setExchangePoints(1);
+        rewardManager.saveReward(request);
+    }
 }

+ 1 - 1
src/main/java/com/punchsettle/server/task/CalendarTask.java

@@ -14,7 +14,7 @@ import lombok.extern.slf4j.Slf4j;
  * @author tyuio
  * @version 1.0.0
  * @date 2025/4/14 12:57
- * @description 日历定时任务,每年1月1日零点零一秒执行
+ * @description 拉取全脸日历数据 定时任务(每年1月1日零点零一秒)
  */
 @Slf4j
 @Component

+ 3 - 1
src/main/java/com/punchsettle/server/task/PiTaskAutoArchiveTask.java

@@ -9,6 +9,7 @@ import java.util.stream.Collectors;
 
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
@@ -26,7 +27,7 @@ import lombok.extern.slf4j.Slf4j;
  * @author tyuio
  * @version 1.0.0
  * @date 2025/5/7 15:00
- * @description 打卡任务自动归档 定时任务
+ * @description 打卡任务自动归档 定时任务(每天凌晨1点05分)
  */
 @Slf4j
 @Component
@@ -38,6 +39,7 @@ public class PiTaskAutoArchiveTask {
     @Autowired
     private IPunchInManager punchInManager;
 
+    @Scheduled(cron = "0 5 1 * * ?")
     @Transactional(rollbackFor = Exception.class)
     public void execute() {
         log.info("========== 打卡任务自动归档定时任务 开始执行 ==========");

+ 3 - 1
src/main/java/com/punchsettle/server/task/PiTaskAutoPunchInTask.java

@@ -17,6 +17,7 @@ import com.punchsettle.server.constant.PunchInResultEnum;
 import com.punchsettle.server.pojo.punchIn.PiTaskHistoryQuery;
 import com.punchsettle.server.service.manager.ICalendarManager;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
@@ -35,7 +36,7 @@ import lombok.extern.slf4j.Slf4j;
  * @author tyuio
  * @version 1.0.0
  * @date 2025/5/7 15:15
- * @description 打卡任务自动打卡定时任务
+ * @description 打卡任务自动打卡 定时任务(每天凌晨1点15分)
  */
 @Slf4j
 @Component
@@ -58,6 +59,7 @@ public class PiTaskAutoPunchInTask {
     @Autowired
     private IPunchInManager punchInManager;
 
+    @Scheduled(cron = "0 15 1 * * ?")
     @Transactional(rollbackFor = Exception.class)
     public void execute() {
         log.info("========== 打卡任务自动打卡定时任务 开始执行 ==========");

+ 3 - 1
src/main/java/com/punchsettle/server/task/RewardAutoExchangeTask.java

@@ -9,6 +9,7 @@ import java.util.function.Function;
 import java.util.stream.Collectors;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
@@ -35,7 +36,7 @@ import lombok.extern.slf4j.Slf4j;
  * @author tyuio
  * @version 1.0.0
  * @date 2025/5/7 14:45
- * @description 奖励自动兑换 定时任务
+ * @description 奖励自动兑换 定时任务(每天凌晨1点30分)
  */
 @Slf4j
 @Component
@@ -56,6 +57,7 @@ public class RewardAutoExchangeTask {
     @Autowired
     private IRewardManager rewardManager;
 
+    @Scheduled(cron = "0 30 1 * * ?")
     @Transactional(rollbackFor = Exception.class)
     public void execute() {
         log.info("========== 奖励自动兑换定时任务 开始执行 ==========");

+ 3 - 1
src/main/java/com/punchsettle/server/task/SettleDistributeTask.java

@@ -3,6 +3,7 @@ package com.punchsettle.server.task;
 import com.punchsettle.server.service.manager.ISettleManager;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 import java.time.LocalDate;
@@ -11,7 +12,7 @@ import java.time.LocalDate;
  * @author tyuio
  * @version 1.0.0
  * @date 2025/5/6 19:31
- * @description 结算后积分分发 定时任务
+ * @description 结算后积分分发 定时任务(每天凌晨0点40分)
  */
 @Slf4j
 @Component
@@ -20,6 +21,7 @@ public class SettleDistributeTask {
     @Autowired
     private ISettleManager settleManager;
 
+    @Scheduled(cron = "0 40 0 * * ?")
     public void execute() {
         log.info("========== 积分分发定时任务 开始执行 ==========");
         // 结算日期

+ 3 - 1
src/main/java/com/punchsettle/server/task/SettlePointsTask.java

@@ -11,6 +11,7 @@ import com.punchsettle.server.pojo.settle.SettleUserHistoryQuery;
 import com.punchsettle.server.service.manager.ISettleManager;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 
@@ -24,7 +25,7 @@ import java.util.stream.Collectors;
  * @author tyuio
  * @version 1.0.0
  * @date 2025/4/15 16:24
- * @description 结算积分 定时任务
+ * @description 结算积分 定时任务(每天凌晨0点10分)
  */
 @Slf4j
 @Component
@@ -42,6 +43,7 @@ public class SettlePointsTask {
     @Autowired
     private ISettleUserHistoryService settleUserHistoryService;
 
+    @Scheduled(cron = "0 10 0 * * ?")
     public void execute() {
         log.info("========== 打卡结算定时任务 开始执行 ==========");
 

+ 3 - 1
src/main/java/com/punchsettle/server/task/StatNewUserTask.java

@@ -3,6 +3,7 @@ package com.punchsettle.server.task;
 import java.time.LocalDate;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 import com.punchsettle.server.service.manager.IStatManager;
@@ -13,7 +14,7 @@ import lombok.extern.slf4j.Slf4j;
  * @author tyuio
  * @version 1.0.0
  * @date 2025/5/6 12:36
- * @description 新用户数据统计
+ * @description 新用户数据统计 定时任务(每天凌晨2点)
  */
 @Slf4j
 @Component
@@ -22,6 +23,7 @@ public class StatNewUserTask {
     @Autowired
     private IStatManager statManager;
 
+    @Scheduled(cron = "0 0 2 * * ?")
     public void execute() {
         log.info("========== 新用户数据统计定时任务 结束执行 ==========");
 

+ 3 - 1
src/main/java/com/punchsettle/server/task/StatPointsTask.java

@@ -4,6 +4,7 @@ import java.time.LocalDate;
 import java.util.List;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 
@@ -16,7 +17,7 @@ import lombok.extern.slf4j.Slf4j;
  * @author tyuio
  * @version 1.0.0
  * @date 2025/5/8 19:18
- * @description 积分数据统计 任务
+ * @description 积分数据统计 定时任务(每天凌晨2点15分)
  */
 @Slf4j
 @Component
@@ -28,6 +29,7 @@ public class StatPointsTask {
     @Autowired
     private IStatManager statManager;
 
+    @Scheduled(cron = "0 15 2 * * ?")
     public void execute() {
         log.info("========== 积分数据统计定时任务 开始执行 ==========");
 

+ 3 - 1
src/main/java/com/punchsettle/server/task/StatTask.java

@@ -6,6 +6,7 @@ import java.util.List;
 import com.punchsettle.server.constant.CacheNameConstant;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.CacheManager;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 
@@ -24,7 +25,7 @@ import lombok.extern.slf4j.Slf4j;
  * @author tyuio
  * @version 1.0.0
  * @date 2025/5/6 20:14
- * @description 打卡任务统计(周,月,年) 定时任务
+ * @description 打卡任务统计(周,月,年) 定时任务(每天凌晨2点30分)
  */
 @Slf4j
 @Component
@@ -48,6 +49,7 @@ public class StatTask {
     @Autowired
     private CacheManager cacheManager;
 
+    @Scheduled(cron = "0 30 2 * * ?")
     public void execute() {
         log.info("========== 打卡任务数据统计定时任务 开始执行 ==========");