Просмотр исходного кода

【feat】【v3】
1.增加缓存的使用

ChenYL 10 месяцев назад
Родитель
Сommit
8f7a2379e1
19 измененных файлов с 301 добавлено и 64 удалено
  1. 1 1
      src/main/java/com/punchsettle/server/atomic/service/impl/StatPiTaskWeekServiceImpl.java
  2. 1 1
      src/main/java/com/punchsettle/server/atomic/service/impl/SysCalendarServiceImpl.java
  3. 70 0
      src/main/java/com/punchsettle/server/constant/CacheNameConstant.java
  4. 8 0
      src/main/java/com/punchsettle/server/service/controller/OpController.java
  5. 1 1
      src/main/java/com/punchsettle/server/service/controller/PunchInController.java
  6. 5 4
      src/main/java/com/punchsettle/server/service/controller/RewardController.java
  7. 2 1
      src/main/java/com/punchsettle/server/service/controller/SettleController.java
  8. 1 1
      src/main/java/com/punchsettle/server/service/controller/UserController.java
  9. 5 0
      src/main/java/com/punchsettle/server/service/manager/IOpManager.java
  10. 18 2
      src/main/java/com/punchsettle/server/service/manager/IPunchInManager.java
  11. 2 1
      src/main/java/com/punchsettle/server/service/manager/ISettleManager.java
  12. 1 2
      src/main/java/com/punchsettle/server/service/manager/IUserManager.java
  13. 32 2
      src/main/java/com/punchsettle/server/service/manager/impl/AccountManagerImpl.java
  14. 16 0
      src/main/java/com/punchsettle/server/service/manager/impl/OpManagerImpl.java
  15. 75 22
      src/main/java/com/punchsettle/server/service/manager/impl/PunchInManagerImpl.java
  16. 29 2
      src/main/java/com/punchsettle/server/service/manager/impl/RewardManagerImpl.java
  17. 6 2
      src/main/java/com/punchsettle/server/service/manager/impl/SettleManagerImpl.java
  18. 25 16
      src/main/java/com/punchsettle/server/service/manager/impl/StatManagerImpl.java
  19. 3 6
      src/main/java/com/punchsettle/server/service/manager/impl/UserManagerImpl.java

+ 1 - 1
src/main/java/com/punchsettle/server/service/manager/impl/StatPiTaskWeekServiceImpl.java → src/main/java/com/punchsettle/server/atomic/service/impl/StatPiTaskWeekServiceImpl.java

@@ -1,4 +1,4 @@
-package com.punchsettle.server.service.manager.impl;
+package com.punchsettle.server.atomic.service.impl;
 
 import com.punchsettle.server.atomic.entity.StatPiTaskWeek;
 import com.punchsettle.server.atomic.mapper.StatPiTaskWeekMapper;

+ 1 - 1
src/main/java/com/punchsettle/server/service/manager/impl/SysCalendarServiceImpl.java → src/main/java/com/punchsettle/server/atomic/service/impl/SysCalendarServiceImpl.java

@@ -1,4 +1,4 @@
-package com.punchsettle.server.service.manager.impl;
+package com.punchsettle.server.atomic.service.impl;
 
 import com.punchsettle.server.atomic.entity.SysCalendar;
 import com.punchsettle.server.atomic.mapper.SysCalendarMapper;

+ 70 - 0
src/main/java/com/punchsettle/server/constant/CacheNameConstant.java

@@ -27,4 +27,74 @@ public class CacheNameConstant {
      * 日期信息
      */
     public static final String CALENDAR = "calendar";
+
+    /**
+     * 积分折线图
+     */
+    public static final String STAT_POINTS_LINE = "statPointsLine";
+
+    /**
+     * 新用户折线图
+     */
+    public static final String STAT_NEW_USER_LINE = "statNewUserLine";
+
+    /**
+     * 任务折线图
+     */
+    public static final String STAT_TASK_LINE = "statTaskLine";
+
+    /**
+     * 积分结算记录
+     */
+    public static final String SETTLE_POINTS_HISTORY = "settlePointsHistory";
+
+    /**
+     * 奖励列表
+     */
+    public static final String REWARD_LIST = "rewardList";
+
+    /**
+     * 奖励兑换记录
+     */
+    public static final String REWARD_EXCHANGE_HISTORY = "rewardExchangeHistory";
+
+    /**
+     * 账户信息VO
+     */
+    public static final String ACCOUNT_INFO_VO = "accountInfoVO";
+
+    /**
+     * 账户列表
+     */
+    public static final String ACCOUNT_LIST = "accountList";
+
+    /**
+     * 账户转账记录
+     */
+    public static final String ACCOUNT_TRANSFER_HISTORY = "accountTransferHistory";
+
+    /**
+     * 指定用户的任务列表
+     */
+    public static final String TASK_LIST_FOR_USER = "taskListForUser";
+
+    /**
+     * 指定用户的打卡记录
+     */
+    public static final String TASK_HISTORY_LIST_FOR_USER = "taskHistoryListForUser";
+
+    /**
+     * 任务列表VO
+     */
+    public static final String TASK_LIST_VO = "taskList";
+
+    /**
+     * 任务统计数据
+     */
+    public static final String TASK_STAT = "taskStat";
+
+    /**
+     * 任务打卡记录
+     */
+    public static final String TASK_PUNCH_IN_HISTORY = "taskPunchInHistory";
 }

+ 8 - 0
src/main/java/com/punchsettle/server/service/controller/OpController.java

@@ -31,6 +31,14 @@ public class OpController {
         opManager.clearCache(cacheName);
     }
 
+    /**
+     * 清除所有缓存
+     */
+    @GetMapping("clearAllCache")
+    public void clearAllCache() {
+        opManager.clearAllCache();
+    }
+
     /**
      * 调用日历定时任务
      */

+ 1 - 1
src/main/java/com/punchsettle/server/service/controller/PunchInController.java

@@ -51,7 +51,7 @@ public class PunchInController {
      */
     @GetMapping("/queryTaskList")
     public List<PiTaskSimpleVO> queryTaskList() {
-        return punchInManager.queryTaskList(UserUtils.getCurrentUserId());
+        return punchInManager.queryTaskList();
     }
 
     /**

+ 5 - 4
src/main/java/com/punchsettle/server/service/controller/RewardController.java

@@ -2,10 +2,6 @@ package com.punchsettle.server.service.controller;
 
 import java.util.List;
 
-import com.punchsettle.server.pojo.reward.RewardExchangeHistoryVO;
-import com.punchsettle.server.pojo.reward.RewardExchangeRequest;
-import com.punchsettle.server.pojo.reward.RewardRequest;
-import jakarta.validation.constraints.NotNull;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.DeleteMapping;
@@ -15,9 +11,14 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import com.punchsettle.server.pojo.reward.RewardExchangeHistoryVO;
+import com.punchsettle.server.pojo.reward.RewardExchangeRequest;
+import com.punchsettle.server.pojo.reward.RewardRequest;
 import com.punchsettle.server.pojo.reward.RewardVO;
 import com.punchsettle.server.service.manager.IRewardManager;
 
+import jakarta.validation.constraints.NotNull;
+
 /**
  * @author tyuio
  * @version 1.0.0

+ 2 - 1
src/main/java/com/punchsettle/server/service/controller/SettleController.java

@@ -2,6 +2,7 @@ package com.punchsettle.server.service.controller;
 
 import java.util.List;
 
+import com.punchsettle.server.utiis.UserUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -34,6 +35,6 @@ public class SettleController {
      */
     @GetMapping("/querySettlePointsHistory")
     public List<SettlePointsHistoryVO> querySettlePointsHistory(@NotBlank(message = "结算月不能为空") String settleMonth) {
-    	return settleManager.querySettlePointsHistory(settleMonth);
+    	return settleManager.querySettlePointsHistory(UserUtils.getCurrentUserId(), settleMonth);
     }
 }

+ 1 - 1
src/main/java/com/punchsettle/server/service/controller/UserController.java

@@ -44,7 +44,7 @@ public class UserController {
      */
     @GetMapping("/queryUserInfo")
     public UserInfoVO queryUserInfo() {
-        return userManager.queryUserInfo(UserUtils.getCurrentUserId());
+        return userManager.queryUserInfo();
     }
 
     /**

+ 5 - 0
src/main/java/com/punchsettle/server/service/manager/IOpManager.java

@@ -14,6 +14,11 @@ public interface IOpManager {
      */
     void clearCache(String cacheName);
 
+    /**
+     * 清除所有缓存
+     */
+    void clearAllCache();
+
     /**
      * 调用日历定时任务
      */

+ 18 - 2
src/main/java/com/punchsettle/server/service/manager/IPunchInManager.java

@@ -2,6 +2,8 @@ package com.punchsettle.server.service.manager;
 
 import java.util.List;
 
+import com.punchsettle.server.atomic.entity.PiTask;
+import com.punchsettle.server.atomic.entity.PiTaskHistory;
 import com.punchsettle.server.pojo.punchIn.PiTaskHistoryStatVO;
 import com.punchsettle.server.pojo.punchIn.PiTaskRequest;
 import com.punchsettle.server.pojo.punchIn.PiTaskSimpleVO;
@@ -28,10 +30,9 @@ public interface IPunchInManager {
 
     /**
      * 查询打卡任务及其打卡记录
-     * @param currentUserId 当前用户id
      * @return
      */
-    List<PiTaskSimpleVO> queryTaskList(Long currentUserId);
+    List<PiTaskSimpleVO> queryTaskList();
 
     /**
      * 根据ID获取打卡任务
@@ -79,4 +80,19 @@ public interface IPunchInManager {
      * 查询打卡历史
      */
     List<PiTaskHistoryStatVO> queryPunchInHistory(String punchInDate);
+
+    /**
+     * 从缓存获取指定用户的任务列表
+     * @param userId
+     * @return
+     */
+    List<PiTask> getTaskListInCache(Long userId);
+
+    /**
+     * 从缓存获取指定用户的打卡记录
+     * @param userId 用户ID
+     * @param punchInDate 打卡日期
+     * @return
+     */
+    List<PiTaskHistory> getTaskHistoryListInCache(Long userId, String punchInDate);
 }

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

@@ -14,8 +14,9 @@ public interface ISettleManager {
 
     /**
      * 查询结算积分记录
+     * @param userId
      * @param settleMonth 结算月
      * @return
      */
-    List<SettlePointsHistoryVO> querySettlePointsHistory(String settleMonth);
+    List<SettlePointsHistoryVO> querySettlePointsHistory(Long userId, String settleMonth);
 }

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

@@ -21,10 +21,9 @@ public interface IUserManager {
 
     /**
      * 查询当前用户信息
-     * @param userId 用户id
      * @return
      */
-    UserInfoVO queryUserInfo(Long userId);
+    UserInfoVO queryUserInfo();
 
     /**
      * 修改昵称

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

@@ -7,6 +7,7 @@ import com.punchsettle.server.atomic.service.IAccountTransferHistoryService;
 import com.punchsettle.server.common.exception.BusinessException;
 import com.punchsettle.server.common.utils.Assert;
 import com.punchsettle.server.constant.AccountCategoryEnum;
+import com.punchsettle.server.constant.CacheNameConstant;
 import com.punchsettle.server.constant.TransferCategoryEnum;
 import com.punchsettle.server.pojo.account.AccountRequest;
 import com.punchsettle.server.pojo.account.AccountVO;
@@ -20,11 +21,14 @@ import com.punchsettle.server.utiis.UserUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.CacheManager;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import java.text.SimpleDateFormat;
+import java.time.LocalDate;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
@@ -49,7 +53,11 @@ public class AccountManagerImpl implements IAccountManager {
     @Autowired
     private IAccountTransferHistoryService accountTransferHistoryService;
 
+    @Autowired
+    private CacheManager cacheManager;
+
     @Override
+    @Cacheable(cacheNames = CacheNameConstant.ACCOUNT_INFO_VO, key = "T(com.punchsettle.server.utiis.UserUtils).getCurrentUserId()")
     public AccountInfoVO queryAccountInfo() {
         AccountInfoVO accountInfoVO = new AccountInfoVO();
         accountInfoVO.setAccountNum(0);
@@ -80,6 +88,7 @@ public class AccountManagerImpl implements IAccountManager {
     }
 
     @Override
+    @Cacheable(cacheNames = CacheNameConstant.ACCOUNT_LIST, key = "T(com.punchsettle.server.utiis.UserUtils).getCurrentUserId()")
     public List<AccountVO> queryAccountList() {
         // 查询账户数据
         AccountQuery accountQuery = new AccountQuery();
@@ -112,11 +121,13 @@ public class AccountManagerImpl implements IAccountManager {
     public void saveAccount(AccountRequest request) {
         Assert.isNullInBusiness(request, "账户名称不能为空");
 
+        Long userId = UserUtils.getCurrentUserId();
+
         // 新账户则创建
         if (Objects.isNull(request.getId())) {
             Account addAccount = new Account();
             addAccount.setAccountCategory(AccountCategoryEnum.GENERAL);
-            addAccount.setUserId(UserUtils.getCurrentUserId());
+            addAccount.setUserId(userId);
             addAccount.setPoints(0);
             addAccount.setAccountName(request.getAccountName());
             accountService.insert(addAccount);
@@ -129,6 +140,10 @@ public class AccountManagerImpl implements IAccountManager {
         updateAccount.setId(account.getId());
         updateAccount.setAccountName(request.getAccountName());
         accountService.batchUpdate(Arrays.asList(updateAccount));
+
+        // 清理缓存
+        cacheManager.getCache(CacheNameConstant.ACCOUNT_INFO_VO).evict(userId);
+        cacheManager.getCache(CacheNameConstant.ACCOUNT_LIST).evict(userId);
     }
 
     @Override
@@ -142,6 +157,11 @@ public class AccountManagerImpl implements IAccountManager {
             throw BusinessException.fail("请先清空积分后再删除");
         }
         accountService.deleteById(id);
+
+        // 清理缓存
+        Long userId = UserUtils.getCurrentUserId();
+        cacheManager.getCache(CacheNameConstant.ACCOUNT_INFO_VO).evict(userId);
+        cacheManager.getCache(CacheNameConstant.ACCOUNT_LIST).evict(userId);
     }
 
     @Override
@@ -149,6 +169,9 @@ public class AccountManagerImpl implements IAccountManager {
     public void transfer(TransferRequest request) {
         Assert.isNullInBusiness(request, "请传入转账信息");
 
+        // 当前用户ID
+        Long userId = UserUtils.getCurrentUserId();
+
         // 获取转出账户
         Account senderAccount = Optional.ofNullable(accountService.getById(request.getSenderAccountId())).orElseThrow(() -> BusinessException.fail("转出账户不存在"));
         // 转出账户的积分小于转账积分则不允许转出
@@ -166,7 +189,7 @@ public class AccountManagerImpl implements IAccountManager {
 
         // 转账记录 新增
         AccountTransferHistory accountTransferHistory = new AccountTransferHistory();
-        accountTransferHistory.setUserId(UserUtils.getCurrentUserId());
+        accountTransferHistory.setUserId(userId);
         accountTransferHistory.setSenderAccountId(request.getSenderAccountId());
         accountTransferHistory.setRecipientAccountId(request.getRecipientAccountId());
         accountTransferHistory.setTransferCategory(TransferCategoryEnum.TRANSFER);
@@ -187,9 +210,16 @@ public class AccountManagerImpl implements IAccountManager {
         updateRecipientAccount.setPoints(afterRecipientAccountPoints);
 
         accountService.batchUpdate(Arrays.asList(updateSenderAccount, updateRecipientAccount));
+
+        // 清理缓存
+        String transferMonth = DateUtils.getYearMonth(LocalDate.now());
+        cacheManager.getCache(CacheNameConstant.ACCOUNT_INFO_VO).evict(userId);
+        cacheManager.getCache(CacheNameConstant.ACCOUNT_LIST).evict(userId);
+        cacheManager.getCache(CacheNameConstant.ACCOUNT_TRANSFER_HISTORY).evict(String.format("%s_%s", userId, transferMonth));
     }
 
     @Override
+    @Cacheable(cacheNames = CacheNameConstant.ACCOUNT_TRANSFER_HISTORY, key = "T(com.punchsettle.server.utiis.UserUtils).getCurrentUserId()+'_'+#transferMonth", condition = "#transferMonth != null && !#transferMonth.isBlank()")
     public List<TransferHistoryVO> queryTransferHistory(String transferMonth) {
         Assert.isNullInBusiness(transferMonth, "转账月份不能为空");
 

+ 16 - 0
src/main/java/com/punchsettle/server/service/manager/impl/OpManagerImpl.java

@@ -9,7 +9,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.Cache;
 import org.springframework.cache.CacheManager;
 import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
 
+import java.util.Collection;
 import java.util.Objects;
 
 /**
@@ -40,6 +42,20 @@ public class OpManagerImpl implements IOpManager {
         cache.clear();
     }
 
+    @Override
+    public void clearAllCache() {
+        Collection<String> cacheNames = cacheManager.getCacheNames();
+        if (CollectionUtils.isEmpty(cacheNames)) {
+            return;
+        }
+        cacheNames.forEach(cacheName -> {
+            Cache cache = cacheManager.getCache(cacheName);
+            if (Objects.nonNull(cache)) {
+                cache.clear();
+            }
+        });
+    }
+
     @Override
     public void invokeCalendarTask() {
         calendarTask.execute();

+ 75 - 22
src/main/java/com/punchsettle/server/service/manager/impl/PunchInManagerImpl.java

@@ -1,6 +1,5 @@
 package com.punchsettle.server.service.manager.impl;
 
-import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
@@ -14,8 +13,12 @@ import java.util.Set;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
+import com.punchsettle.server.constant.CacheNameConstant;
+import com.punchsettle.server.utiis.SpringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.CacheManager;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
@@ -94,26 +97,19 @@ public class PunchInManagerImpl implements IPunchInManager {
     @Autowired
     private ICalendarManager calendarManager;
 
+    @Autowired
+    private CacheManager cacheManager;
+
     /**
      * 默认显示时间00:00:00.000
      */
     private static final LocalTime DEFAULT_DISPLAY_TIME = LocalTime.parse("00:00:00.000");
 
-    /**
-     * 数值100
-     */
-    private static final BigDecimal ONE_HUNDRED = new BigDecimal(100);
-
     @Override
     public List<PiTaskToDoVO> queryToDoList(Long currentUserId) {
         Assert.isNull(currentUserId);
         // 查询打卡任务
-        PiTaskQuery piTaskQuery = new PiTaskQuery();
-        piTaskQuery.setArchiveStatus(ArchiveStatusEnum.ACTIVE);
-        piTaskQuery.setTaskStatus(VersionStatusEnum.ACTIVE);
-        piTaskQuery.setUserIds(Arrays.asList(currentUserId));
-        List<PiTask> piTasks = piTaskService.queryByCondition(piTaskQuery);
-
+        List<PiTask> piTasks = SpringUtils.getBean(IPunchInManager.class).getTaskListInCache(currentUserId);
         if (CollectionUtils.isEmpty(piTasks)) {
             return List.of();
         }
@@ -125,15 +121,9 @@ public class PunchInManagerImpl implements IPunchInManager {
         LocalTime nowTime = LocalTime.now();
         // 当前是否节假日
         boolean holidayFlag = calendarManager.judgeHoliday(todayStr);
-        // 打卡任务唯一ID
-        Set<Long> taskUniqueIds = piTasks.stream().map(PiTask::getUniqueId).collect(Collectors.toSet());
 
         // 查询打卡记录
-        PiTaskHistoryQuery piTaskHistoryQuery = new PiTaskHistoryQuery();
-        piTaskHistoryQuery.setPunchInDate(todayStr);
-        piTaskHistoryQuery.setTaskUniqueIds(taskUniqueIds);
-        piTaskHistoryQuery.setUserIds(Arrays.asList(currentUserId));
-        List<PiTaskHistory> piTaskHistories = piTaskHistoryService.queryByCondition(piTaskHistoryQuery);
+        List<PiTaskHistory> piTaskHistories = SpringUtils.getBean(IPunchInManager.class).getTaskHistoryListInCache(currentUserId, todayStr);
         // 打卡任务唯一ID-打卡记录关联
         Map<Long, PiTaskHistory> piTaskHistoryMap = piTaskHistories.stream().collect(Collectors.toMap(PiTaskHistory::getTaskUniqueId, Function.identity(), (key1, key2) -> key1));
 
@@ -166,8 +156,9 @@ public class PunchInManagerImpl implements IPunchInManager {
     }
 
     @Override
-    public List<PiTaskSimpleVO> queryTaskList(Long currentUserId) {
-        Assert.isNull(currentUserId);
+    @Cacheable(cacheNames = CacheNameConstant.TASK_LIST_VO, key = "T(com.punchsettle.server.utiis.UserUtils).getCurrentUserId()")
+    public List<PiTaskSimpleVO> queryTaskList() {
+        Long currentUserId = UserUtils.getCurrentUserId();
         // 查询打卡任务
         PiTaskQuery piTaskQuery = new PiTaskQuery();
         piTaskQuery.setArchiveStatus(ArchiveStatusEnum.ACTIVE);
@@ -362,6 +353,11 @@ public class PunchInManagerImpl implements IPunchInManager {
             updatePiTask.setUniqueId(addPiTask.getId());
             piTaskService.update(updatePiTask);
         }
+
+        // 清楚缓存
+        Long currentUserId = UserUtils.getCurrentUserId();
+        cacheManager.getCache(CacheNameConstant.TASK_LIST_FOR_USER).evict(currentUserId);
+        cacheManager.getCache(CacheNameConstant.TASK_LIST_VO).evict(currentUserId);
     }
 
     @Override
@@ -374,6 +370,11 @@ public class PunchInManagerImpl implements IPunchInManager {
         addPiTask.setTaskStatus(VersionStatusEnum.DELETE);
 
         piTaskService.insert(addPiTask);
+
+        // 清楚缓存
+        Long currentUserId = UserUtils.getCurrentUserId();
+        cacheManager.getCache(CacheNameConstant.TASK_LIST_FOR_USER).evict(currentUserId);
+        cacheManager.getCache(CacheNameConstant.TASK_LIST_VO).evict(currentUserId);
     }
 
     @Override
@@ -383,6 +384,9 @@ public class PunchInManagerImpl implements IPunchInManager {
             BusinessException.throwFail("请传入待打卡的任务");
         }
 
+        // 当前用户ID
+        Long currentUserId = UserUtils.getCurrentUserId();
+
         PiTask piTask = Optional.ofNullable(piTaskService.getById(request.getId())).orElseThrow(() -> BusinessException.fail("无法查询到该打卡任务"));
         if (PunchInMethodEnum.TIMING.equals(piTask.getPunchInMethod()) && Objects.isNull(request.getTimeTrack())) {
             BusinessException.throwFail("打卡类型:计时,请传入时间记录");
@@ -400,7 +404,7 @@ public class PunchInManagerImpl implements IPunchInManager {
         if (Objects.isNull(oldPiTaskHistory)) {
             tempPiTaskHistory.setTaskUniqueId(piTask.getUniqueId());
             tempPiTaskHistory.setPunchInDate(punchInDate);
-            tempPiTaskHistory.setUserId(UserUtils.getCurrentUserId());
+            tempPiTaskHistory.setUserId(currentUserId);
             tempPiTaskHistory.setSettleResult(SettleResultEnum.UNSETTLED);
         } else {
             tempPiTaskHistory.setId(oldPiTaskHistory.getId());
@@ -436,6 +440,12 @@ public class PunchInManagerImpl implements IPunchInManager {
         } else {
             piTaskHistoryService.update(tempPiTaskHistory);
         }
+
+        // 清楚缓存
+        cacheManager.getCache(CacheNameConstant.TASK_LIST_VO).evict(currentUserId);
+        cacheManager.getCache(CacheNameConstant.TASK_PUNCH_IN_HISTORY).evict(String.format("%s_%s", currentUserId, punchInDate));
+        cacheManager.getCache(CacheNameConstant.TASK_HISTORY_LIST_FOR_USER).evict(String.format("%s_%s", currentUserId, punchInDate));
+        cacheManager.getCache(CacheNameConstant.TASK_STAT).evict(String.format("%s_%s", currentUserId, punchInDate.substring(0, 7)));
     }
 
     @Override
@@ -447,6 +457,11 @@ public class PunchInManagerImpl implements IPunchInManager {
         PiTask addPiTask = copyAndArchivePiTask(id);
         addPiTask.setArchiveStatus(ArchiveStatusEnum.ARCHIVE);
         piTaskService.insert(addPiTask);
+
+        // 清楚缓存
+        Long currentUserId = UserUtils.getCurrentUserId();
+        cacheManager.getCache(CacheNameConstant.TASK_LIST_FOR_USER).evict(currentUserId);
+        cacheManager.getCache(CacheNameConstant.TASK_LIST_VO).evict(currentUserId);
     }
 
     @Override
@@ -484,9 +499,18 @@ public class PunchInManagerImpl implements IPunchInManager {
 
         // 更新
         piTaskHistoryService.update(updatePiTaskHistory);
+
+        // 清楚缓存
+        Long currentUserId = UserUtils.getCurrentUserId();
+        String punchInDate = LocalDate.now().toString();
+        cacheManager.getCache(CacheNameConstant.TASK_LIST_VO).evict(currentUserId);
+        cacheManager.getCache(CacheNameConstant.TASK_PUNCH_IN_HISTORY).evict(String.format("%s_%s", currentUserId, punchInDate));
+        cacheManager.getCache(CacheNameConstant.TASK_HISTORY_LIST_FOR_USER).evict(String.format("%s_%s", currentUserId, punchInDate));
+        cacheManager.getCache(CacheNameConstant.TASK_STAT).evict(String.format("%s_%s", currentUserId, punchInDate.substring(0, 7)));
     }
 
     @Override
+    @Cacheable(cacheNames = CacheNameConstant.TASK_STAT, key = "T(com.punchsettle.server.utiis.UserUtils).getCurrentUserId()+'_'+#query.taskId+'_'+#query.statTime", condition = "#query.taskId != null && #query.statTime != null && !#query.statTime.isBlank()")
     public PiTaskStatVO queryStat(PiTaskStatQuery query) {
         // 当前用户ID
         Long currentUserId = UserUtils.getCurrentUserId();
@@ -581,6 +605,7 @@ public class PunchInManagerImpl implements IPunchInManager {
     }
 
     @Override
+    @Cacheable(cacheNames = CacheNameConstant.TASK_PUNCH_IN_HISTORY, key = "T(com.punchsettle.server.utiis.UserUtils).getCurrentUserId()+'_'+#punchInDate", condition = "#punchInDate != null && !#punchInDate.isBlank()")
     public List<PiTaskHistoryStatVO> queryPunchInHistory(String punchInDate) {
         Assert.isNullInBusiness(punchInDate, "打卡日期不能为空");
 
@@ -599,4 +624,32 @@ public class PunchInManagerImpl implements IPunchInManager {
             return piTaskHistoryStatVO;
         }).collect(Collectors.toList());
     }
+
+    @Override
+    @Cacheable(cacheNames = CacheNameConstant.TASK_LIST_FOR_USER, key = "#userId", condition = "#userId != null")
+    public List<PiTask> getTaskListInCache(Long userId) {
+        Assert.isNullInBusiness(userId, "用户ID不能为空");
+
+        PiTaskQuery piTaskQuery = new PiTaskQuery();
+        piTaskQuery.setArchiveStatus(ArchiveStatusEnum.ACTIVE);
+        piTaskQuery.setTaskStatus(VersionStatusEnum.ACTIVE);
+        piTaskQuery.setUserIds(Arrays.asList(userId));
+        List<PiTask> piTasks = piTaskService.queryByCondition(piTaskQuery);
+
+        return piTasks;
+    }
+
+    @Override
+    @Cacheable(cacheNames = CacheNameConstant.TASK_HISTORY_LIST_FOR_USER, key = "#userId+'_'+punchInDate", condition = "#userId != null && punchInDate != null && !punchInDate.isBlank()")
+    public List<PiTaskHistory> getTaskHistoryListInCache(Long userId, String punchInDate) {
+        Assert.isNullInBusiness(userId, "用户ID不能为空");
+        Assert.isNullInBusiness(punchInDate, "打卡日期不能为空");
+
+        PiTaskHistoryQuery piTaskHistoryQuery = new PiTaskHistoryQuery();
+        piTaskHistoryQuery.setPunchInDate(punchInDate);
+        piTaskHistoryQuery.setUserIds(Arrays.asList(userId));
+        List<PiTaskHistory> piTaskHistories = piTaskHistoryService.queryByCondition(piTaskHistoryQuery);
+
+        return piTaskHistories;
+    }
 }

+ 29 - 2
src/main/java/com/punchsettle/server/service/manager/impl/RewardManagerImpl.java

@@ -1,6 +1,7 @@
 package com.punchsettle.server.service.manager.impl;
 
 import java.text.SimpleDateFormat;
+import java.time.LocalDate;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
@@ -12,6 +13,8 @@ import java.util.stream.Collectors;
 
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.CacheManager;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
@@ -27,6 +30,7 @@ import com.punchsettle.server.atomic.service.IUserService;
 import com.punchsettle.server.common.constant.CommonEnableStatusEnum;
 import com.punchsettle.server.common.exception.BusinessException;
 import com.punchsettle.server.common.utils.Assert;
+import com.punchsettle.server.constant.CacheNameConstant;
 import com.punchsettle.server.constant.RewardExchangeMethodEnum;
 import com.punchsettle.server.constant.VersionStatusEnum;
 import com.punchsettle.server.pojo.account.AccountQuery;
@@ -60,7 +64,11 @@ public class RewardManagerImpl implements IRewardManager {
     @Autowired
     private IUserService userService;
 
+    @Autowired
+    private CacheManager cacheManager;
+
     @Override
+    @Cacheable(cacheNames = CacheNameConstant.REWARD_LIST, key = "T(com.punchsettle.server.utiis.UserUtils).getCurrentUserId()")
     public List<RewardVO> queryRewardList() {
         // 查询奖励列表
         RewardQuery rewardQuery = new RewardQuery();
@@ -125,6 +133,9 @@ public class RewardManagerImpl implements IRewardManager {
             updateReward.setRewardUniqueId(addReward.getId());
             rewardService.update(updateReward);
         }
+
+        // 移除缓存
+        cacheManager.getCache(CacheNameConstant.REWARD_LIST).evict(UserUtils.getCurrentUserId());
     }
 
     @Override
@@ -136,6 +147,9 @@ public class RewardManagerImpl implements IRewardManager {
         Reward addReward = copyAndArchive(id);
         addReward.setRewardStatus(VersionStatusEnum.DELETE);
         rewardService.insert(addReward);
+
+        // 移除缓存
+        cacheManager.getCache(CacheNameConstant.REWARD_LIST).evict(UserUtils.getCurrentUserId());
     }
 
     private Reward copyAndArchive(Long id) {
@@ -161,6 +175,9 @@ public class RewardManagerImpl implements IRewardManager {
     public void exchangeReward(RewardExchangeRequest request) {
         Assert.isNullInBusiness(request, "请传入奖励兑换信息");
 
+        // 当前用户ID
+        Long userId = UserUtils.getCurrentUserId();
+
         // 获取奖励信息
         Reward reward = Optional.ofNullable(rewardService.getById(request.getRewardId())).orElseThrow(() -> BusinessException.fail("无法查询到该奖励"));
         // 获取账户信息
@@ -179,7 +196,7 @@ public class RewardManagerImpl implements IRewardManager {
         Integer accountPointsAfterExchange = accountPointsBeforeExchange - exchangeTotalPoints;
 
         // 获取用户信息
-        User user = Optional.ofNullable(userService.getById(UserUtils.getCurrentUserId())).orElseThrow(() -> BusinessException.fail("无法查询到当前用户信息"));
+        User user = Optional.ofNullable(userService.getById(userId)).orElseThrow(() -> BusinessException.fail("无法查询到当前用户信息"));
         // 兑换前未使用积分
         Integer unusedPointsBeforeExchange = Optional.ofNullable(user.getUnusedPoints()).orElse(0);
         if (unusedPointsBeforeExchange.compareTo(exchangeTotalPoints) < 0) {
@@ -194,7 +211,7 @@ public class RewardManagerImpl implements IRewardManager {
 
         // 新增兑换记录
         RewardExchangeHistory addRewardExchangeHistory = new RewardExchangeHistory();
-        addRewardExchangeHistory.setUserId(UserUtils.getCurrentUserId());
+        addRewardExchangeHistory.setUserId(userId);
         addRewardExchangeHistory.setRewardId(reward.getId());
         addRewardExchangeHistory.setExchangeMethod(RewardExchangeMethodEnum.MANUAL);
         addRewardExchangeHistory.setExchangeCount(request.getExchangeCount());
@@ -218,9 +235,19 @@ public class RewardManagerImpl implements IRewardManager {
         updateAccount.setId(account.getId());
         updateAccount.setPoints(accountPointsAfterExchange);
         accountService.batchUpdate(Arrays.asList(updateAccount));
+
+        String exchangeMonth = DateUtils.getYearMonth(LocalDate.now());
+        cacheManager.getCache(CacheNameConstant.REWARD_LIST).evict(userId);
+        cacheManager.getCache(CacheNameConstant.REWARD_EXCHANGE_HISTORY).evict(String.format("%s_%s", userId, exchangeMonth));
+        cacheManager.getCache(CacheNameConstant.USER).evict(userId);
+        cacheManager.getCache(CacheNameConstant.USER_VO).evict(userId);
+        cacheManager.getCache(CacheNameConstant.ACCOUNT_INFO_VO).evict(userId);
+        cacheManager.getCache(CacheNameConstant.ACCOUNT_LIST).evict(userId);
+        cacheManager.getCache(CacheNameConstant.REWARD_EXCHANGE_HISTORY).evict(String.format("%s_%s", userId, exchangeMonth));
     }
 
     @Override
+    @Cacheable(cacheNames = CacheNameConstant.REWARD_EXCHANGE_HISTORY, key = "T(com.punchsettle.server.utiis.UserUtils).getCurrentUserId()+'_'+#exchangeMonth", condition = "#exchangeMonth != null && !#exchangeMonth.isBlank()")
     public List<RewardExchangeHistoryVO> queryRewardExchangeHistory(String exchangeMonth) {
         Assert.isNullInBusiness(exchangeMonth, "兑换月份不能为空");
 

+ 6 - 2
src/main/java/com/punchsettle/server/service/manager/impl/SettleManagerImpl.java

@@ -3,8 +3,10 @@ package com.punchsettle.server.service.manager.impl;
 import java.util.List;
 import java.util.stream.Collectors;
 
+import com.punchsettle.server.constant.CacheNameConstant;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
@@ -31,10 +33,12 @@ public class SettleManagerImpl implements ISettleManager {
     private ISettlePointsHistoryService settlePointsHistoryService;
 
     @Override
-    public List<SettlePointsHistoryVO> querySettlePointsHistory(String settleMonth) {
+    @Cacheable(cacheNames = CacheNameConstant.SETTLE_POINTS_HISTORY, key = "#userId+'_'+settleMonth", condition = "#userId != null && settleMont != null && !settleMonth.isBlank()")
+    public List<SettlePointsHistoryVO> querySettlePointsHistory(Long userId, String settleMonth) {
         Assert.isNullInBusiness(settleMonth, "结算月份不能为空");
+        Assert.isNullInBusiness(userId, "用户ID不能为空");
 
-        List<SettlePointsHistory> settlePointsHistories = settlePointsHistoryService.querySettlePointsHistory(UserUtils.getCurrentUserId(), settleMonth);
+        List<SettlePointsHistory> settlePointsHistories = settlePointsHistoryService.querySettlePointsHistory(userId, settleMonth);
         if (CollectionUtils.isEmpty(settlePointsHistories)) {
             return List.of();
         }

+ 25 - 16
src/main/java/com/punchsettle/server/service/manager/impl/StatManagerImpl.java

@@ -1,11 +1,27 @@
 package com.punchsettle.server.service.manager.impl;
 
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
 import com.punchsettle.server.atomic.entity.PiTaskHistory;
 import com.punchsettle.server.atomic.entity.StatNewUser;
 import com.punchsettle.server.atomic.entity.StatPoints;
 import com.punchsettle.server.atomic.service.IPiTaskHistoryService;
 import com.punchsettle.server.atomic.service.IStatNewUserService;
 import com.punchsettle.server.atomic.service.IStatPointsService;
+import com.punchsettle.server.constant.CacheNameConstant;
 import com.punchsettle.server.constant.PunchInResultEnum;
 import com.punchsettle.server.core.config.BizProperties;
 import com.punchsettle.server.pojo.punchIn.PiTaskHistoryQuery;
@@ -16,21 +32,6 @@ import com.punchsettle.server.pojo.ucharts.LineVO;
 import com.punchsettle.server.service.manager.IStatManager;
 import com.punchsettle.server.utiis.DateUtils;
 import com.punchsettle.server.utiis.UserUtils;
-import lombok.Data;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.springframework.util.CollectionUtils;
-
-import java.time.LocalDate;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.function.Function;
-import java.util.stream.Collectors;
 
 /**
  * @author myou
@@ -54,7 +55,10 @@ public class StatManagerImpl implements IStatManager {
     private BizProperties bizProperties;
 
     @Override
+    @Cacheable(cacheNames = CacheNameConstant.STAT_POINTS_LINE, key = "T(com.punchsettle.server.utiis.UserUtils).getCurrentUserId()")
     public LineVO queryStatPointsLine() {
+        Long currentUserId = UserUtils.getCurrentUserId();
+
         LocalDate endDate = LocalDate.now();
         LocalDate startDate = endDate.minusDays(bizProperties.getLineItemCount());
 
@@ -63,7 +67,7 @@ public class StatManagerImpl implements IStatManager {
         String[] lineCategories = dateRange.stream().map(LocalDate::toString).toArray(String[]::new);
 
         StatPointsQuery statPointsQuery = new StatPointsQuery();
-        statPointsQuery.setUserId(UserUtils.getCurrentUserId());
+        statPointsQuery.setUserId(currentUserId);
         statPointsQuery.setStatStartTime(startDate.toString());
         statPointsQuery.setStatEndTime(endDate.toString());
         List<StatPoints> statPointsList = statPointsService.queryByCondition(statPointsQuery);
@@ -104,6 +108,7 @@ public class StatManagerImpl implements IStatManager {
     }
 
     @Override
+    @Cacheable(cacheNames = CacheNameConstant.STAT_NEW_USER_LINE)
     public LineVO queryStatNewUserLine() {
         LocalDate endDate = LocalDate.now();
         LocalDate startDate = endDate.minusDays(bizProperties.getLineItemCount());
@@ -135,7 +140,10 @@ public class StatManagerImpl implements IStatManager {
     }
 
     @Override
+    @Cacheable(cacheNames = CacheNameConstant.STAT_TASK_LINE, key = "T(com.punchsettle.server.utiis.UserUtils).getCurrentUserId()")
     public LineVO queryStatTaskLine() {
+        Long currentUserId = UserUtils.getCurrentUserId();
+
         LocalDate endDate = LocalDate.now();
         LocalDate startDate = endDate.minusDays(bizProperties.getLineItemCount());
 
@@ -144,6 +152,7 @@ public class StatManagerImpl implements IStatManager {
         String[] lineCategories = dateRange.stream().map(LocalDate::toString).toArray(String[]::new);
 
         PiTaskHistoryQuery piTaskHistoryQuery = new PiTaskHistoryQuery();
+        piTaskHistoryQuery.setUserIds(Arrays.asList(currentUserId));
         piTaskHistoryQuery.setPunchInDateFrom(startDate.toString());
         piTaskHistoryQuery.setPunchInDateTo(endDate.toString());
         List<PiTaskHistory> piTaskHistoryList = piTaskHistoryService.queryByCondition(piTaskHistoryQuery);

+ 3 - 6
src/main/java/com/punchsettle/server/service/manager/impl/UserManagerImpl.java

@@ -59,9 +59,6 @@ public class UserManagerImpl implements IUserManager {
             user.setOpenId(wxMaJscode2SessionResult.getOpenid());
             user.setNickname(request.getNickname());
             userService.insert(user);
-
-            // 构建缓存
-            cacheManager.getCache(CacheNameConstant.USER).put(user.getId(), user);
         } else {
             User updateUser = new User();
             updateUser.setId(user.getId());
@@ -78,9 +75,9 @@ public class UserManagerImpl implements IUserManager {
     }
 
     @Override
-    @Cacheable(cacheNames = CacheNameConstant.USER_VO, key = "#userId", condition = "#userId != null")
-    public UserInfoVO queryUserInfo(Long userId) {
-        User user = userService.getById(userId);
+    @Cacheable(cacheNames = CacheNameConstant.USER_VO, key = "T(com.punchsettle.server.utiis.UserUtils).getCurrentUserId()")
+    public UserInfoVO queryUserInfo() {
+        User user = userService.getById(UserUtils.getCurrentUserId());
         UserInfoVO userInfoVO = new UserInfoVO();
         BeanUtils.copyProperties(user, userInfoVO);
         return userInfoVO;