|
|
@@ -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;
|
|
|
+ }
|
|
|
}
|