|
|
@@ -0,0 +1,202 @@
|
|
|
+package com.punchsettle.server.task;
|
|
|
+
|
|
|
+import com.punchsettle.server.atomic.entity.PunchInStatsMonth;
|
|
|
+import com.punchsettle.server.atomic.entity.PunchInStatsWeek;
|
|
|
+import com.punchsettle.server.atomic.entity.PunchInStatus;
|
|
|
+import com.punchsettle.server.atomic.entity.PunchInTask;
|
|
|
+import com.punchsettle.server.atomic.entity.PunchInTaskExt;
|
|
|
+import com.punchsettle.server.atomic.entity.PunchInTaskHistory;
|
|
|
+import com.punchsettle.server.atomic.service.IPunchInMultiTaskExtService;
|
|
|
+import com.punchsettle.server.atomic.service.IPunchInMultiTaskHistoryService;
|
|
|
+import com.punchsettle.server.atomic.service.IPunchInMultiTaskService;
|
|
|
+import com.punchsettle.server.atomic.service.IPunchInStatsMonthService;
|
|
|
+import com.punchsettle.server.atomic.service.IPunchInStatsWeekService;
|
|
|
+import com.punchsettle.server.atomic.service.IPunchInStatusService;
|
|
|
+import com.punchsettle.server.atomic.service.IPunchInTaskExtService;
|
|
|
+import com.punchsettle.server.atomic.service.IPunchInTaskHistoryService;
|
|
|
+import com.punchsettle.server.atomic.service.IPunchInTaskService;
|
|
|
+import com.punchsettle.server.constant.ArchiveStatusEnum;
|
|
|
+import com.punchsettle.server.constant.PunchInStatusEnum;
|
|
|
+import com.punchsettle.server.pojo.punchIn.PunchInStatsMonthQuery;
|
|
|
+import com.punchsettle.server.pojo.punchIn.PunchInStatsWeekQuery;
|
|
|
+import com.punchsettle.server.pojo.punchIn.PunchInStatusQuery;
|
|
|
+import com.punchsettle.server.pojo.punchIn.PunchInTaskExtQuery;
|
|
|
+import com.punchsettle.server.pojo.punchIn.PunchInTaskHistoryQuery;
|
|
|
+import com.punchsettle.server.pojo.punchIn.PunchInTaskQuery;
|
|
|
+import com.punchsettle.server.service.manager.ICalendarManager;
|
|
|
+import com.punchsettle.server.service.manager.IPunchInManager;
|
|
|
+import com.punchsettle.server.service.manager.ISettleManager;
|
|
|
+import com.punchsettle.server.utiis.DateUtils;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
+
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.time.temporal.TemporalField;
|
|
|
+import java.time.temporal.WeekFields;
|
|
|
+import java.util.Arrays;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Set;
|
|
|
+import java.util.function.Function;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author tyuio
|
|
|
+ * @version 1.0.0
|
|
|
+ * @date 2025/4/15 16:24
|
|
|
+ * @description 打卡定时任务
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+@Component
|
|
|
+public class PunchInCoreTask {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IPunchInManager punchInManager;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ISettleManager settleManager;
|
|
|
+
|
|
|
+ public void execute() {
|
|
|
+ log.info("========== 打卡定时任务 开始执行 ==========");
|
|
|
+
|
|
|
+ log.info("========== 打卡定时任务 结束执行 ==========");
|
|
|
+ }
|
|
|
+
|
|
|
+// public void punchInInTask(PunchInTask punchInTask, List<PunchInTaskExt> punchInTaskExtList,
|
|
|
+// PunchInTaskHistory punchInTaskHistory,
|
|
|
+// PunchInStatsWeek punchInStatsWeek, PunchInStatsMonth punchInStatsMonth, PunchInStatus punchInStatus,
|
|
|
+// ) {
|
|
|
+//
|
|
|
+// PunchInStatusEnum punchInStatusEnum = punchInManager.judgePunchInStatusInTask(punchInTask, punchInTaskHistory);
|
|
|
+//
|
|
|
+// int taskPoints = settleManager.calculatePointsInTask(punchInTask, punchInTaskExtList, punchInTaskHistory, punchInStatsWeek, punchInStatsMonth, punchInStatus);
|
|
|
+//
|
|
|
+// }
|
|
|
+//
|
|
|
+// public void punchInInMultiTask(PunchInStatus punchInStatus,
|
|
|
+// List<PunchInTaskHistory> punchInTaskHistoryList,
|
|
|
+// PunchInMultiTask punchInMultiTask, List<PunchInMultiTaskExt> punchInMultiTaskExtList,
|
|
|
+// PunchInMultiTaskHistory punchInMultiTaskHistory) {
|
|
|
+//
|
|
|
+// PunchInStatusEnum punchInStatusEnum1 =
|
|
|
+// punchInManager.judgePunchInStatusInMultiTask(punchInMultiTask, punchInTaskHistoryList);
|
|
|
+//
|
|
|
+// int multiTaskPoints = settleManager.calculatePointsInMultiTask(punchInMultiTask, punchInMultiTaskExtList,
|
|
|
+// punchInMultiTaskHistory, punchInStatus);
|
|
|
+//
|
|
|
+// }
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IPunchInTaskService punchInTaskService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IPunchInTaskExtService punchInTaskExtService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IPunchInTaskHistoryService punchInTaskHistoryService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IPunchInStatsMonthService punchInStatsMonthService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IPunchInStatsWeekService punchInStatsWeekService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IPunchInStatusService punchInStatusService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IPunchInMultiTaskService punchInMultiTaskService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IPunchInMultiTaskExtService punchInMultiTaskExtService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IPunchInMultiTaskHistoryService punchInMultiTaskHistoryService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ICalendarManager calendarManager;
|
|
|
+
|
|
|
+ public void manual(Long userId, String punchInDateStr) {
|
|
|
+ // 判断打卡日期是否节假日
|
|
|
+ boolean holidayFlag = calendarManager.judgeHoliday(punchInDateStr);
|
|
|
+ // 打卡日期
|
|
|
+ LocalDate punchInDate = LocalDate.parse(punchInDateStr);
|
|
|
+ // 本周是第几周
|
|
|
+ TemporalField weekOfYearField = WeekFields.ISO.weekOfYear();
|
|
|
+ int weekOfYear = punchInDate.get(weekOfYearField);
|
|
|
+
|
|
|
+ PunchInTaskHistoryQuery punchInTaskHistoryQuery = new PunchInTaskHistoryQuery();
|
|
|
+ punchInTaskHistoryQuery.setPunchInDate(punchInDateStr);
|
|
|
+ punchInTaskHistoryQuery.setUserIds(Arrays.asList(userId));
|
|
|
+ List<PunchInTaskHistory> punchInTaskHistories = punchInTaskHistoryService.queryByCondition(punchInTaskHistoryQuery);
|
|
|
+ if(CollectionUtils.isEmpty(punchInTaskHistories)) {
|
|
|
+ log.info("用户:{} 在打卡日期:{} 没有查询到打卡记录", userId, punchInDateStr);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ Set<Long> punchInTaskUniqueIdList = punchInTaskHistories.stream().map(PunchInTaskHistory::getPunchInTaskUniqueId).collect(Collectors.toSet());
|
|
|
+ PunchInTaskQuery punchInTaskQuery = new PunchInTaskQuery();
|
|
|
+ punchInTaskQuery.setTaskStatus(ArchiveStatusEnum.ACTIVE);
|
|
|
+ punchInTaskQuery.setTaskUniqueIds(punchInTaskUniqueIdList);
|
|
|
+ List<PunchInTask> punchInTasks = punchInTaskService.queryByCondition(punchInTaskQuery);
|
|
|
+ if(CollectionUtils.isEmpty(punchInTasks)) {
|
|
|
+ log.info("用户:{} 在打卡日期:{} 没有查询到打卡任务", userId, punchInDateStr);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Map<Long, PunchInTask> punchInTaskMap = punchInTasks.stream().collect(Collectors.toMap(PunchInTask::getTaskUniqueId, Function.identity(), (key1, key2) -> key1));
|
|
|
+
|
|
|
+ // 拓展表
|
|
|
+ Set<Long> punchInTaskIds = punchInTasks.stream().map(PunchInTask::getId).collect(Collectors.toSet());
|
|
|
+ PunchInTaskExtQuery punchInTaskExtQuery = new PunchInTaskExtQuery();
|
|
|
+ punchInTaskExtQuery.setPunchInTaskIds(punchInTaskIds);
|
|
|
+ List<PunchInTaskExt> punchInTaskExtList = punchInTaskExtService.queryByCondition(punchInTaskExtQuery);
|
|
|
+ Map<Long, List<PunchInTaskExt>> punchInTaskExtGroupList = punchInTaskExtList.stream().collect(Collectors.groupingBy(PunchInTaskExt::getPunchInTaskId));
|
|
|
+
|
|
|
+ // 打卡任务周数据统计
|
|
|
+ PunchInStatsWeekQuery punchInStatsWeekQuery = new PunchInStatsWeekQuery();
|
|
|
+ punchInStatsWeekQuery.setTaskUniqueIds(punchInTaskUniqueIdList);
|
|
|
+ punchInStatsWeekQuery.setStatsTime(DateUtils.getYearWeek(punchInDate));
|
|
|
+ List<PunchInStatsWeek> punchInStatsWeekList = punchInStatsWeekService.queryByCondition(punchInStatsWeekQuery);
|
|
|
+ Map<Long, PunchInStatsWeek> punchInStatsWeekMap = punchInStatsWeekList.stream().collect(Collectors.toMap(PunchInStatsWeek::getTaskUniqueId, Function.identity(), (key1, key2)->key1));
|
|
|
+
|
|
|
+ // 打卡任务月数据统计
|
|
|
+ PunchInStatsMonthQuery punchInStatsMonthQuery = new PunchInStatsMonthQuery();
|
|
|
+ punchInStatsMonthQuery.setTaskUniqueIds(punchInTaskUniqueIdList);
|
|
|
+ punchInStatsMonthQuery.setStatsTime(DateUtils.getYearWeek(punchInDate));
|
|
|
+ List<PunchInStatsMonth> punchInStatsMonthList = punchInStatsMonthService.queryByCondition(punchInStatsMonthQuery);
|
|
|
+ Map<Long, PunchInStatsMonth> punchInStatsMonthMap = punchInStatsMonthList.stream().collect(Collectors.toMap(PunchInStatsMonth::getTaskUniqueId, Function.identity(), (key1, key2)->key1));
|
|
|
+
|
|
|
+ // 打卡任务状态
|
|
|
+ PunchInStatusQuery punchInStatusQuery = new PunchInStatusQuery();
|
|
|
+ punchInStatusQuery.setTaskUniqueIds(punchInTaskUniqueIdList);
|
|
|
+ List<PunchInStatus> punchInStatusList = punchInStatusService.queryByCondition(punchInStatusQuery);
|
|
|
+ Map<Long, PunchInStatus> punchInStatusMap = punchInStatusList.stream().collect(Collectors.toMap(PunchInStatus::getPunchInTaskUniqueId, Function.identity(), (key1, key2)->key1));
|
|
|
+
|
|
|
+ List<PunchInTaskHistory> updatePunchInTaskHistories = punchInTaskHistories.stream().map(punchInTaskHistory -> {
|
|
|
+ PunchInTaskHistory updatePunchInTaskHistory = new PunchInTaskHistory();
|
|
|
+ updatePunchInTaskHistory.setId(punchInTaskHistory.getId());
|
|
|
+ updatePunchInTaskHistory.setPunchInStatus(PunchInStatusEnum.UNDONE);
|
|
|
+ // 设置打卡状态
|
|
|
+ PunchInTask punchInTask = punchInTaskMap.get(punchInTaskHistory.getPunchInTaskUniqueId());
|
|
|
+ PunchInStatusEnum punchInStatusResult = punchInManager.judgePunchInStatusInTask(punchInTask, punchInTaskHistory);
|
|
|
+ punchInTaskHistory.setPunchInStatus(punchInStatusResult);
|
|
|
+ updatePunchInTaskHistory.setPunchInStatus(punchInStatusResult);
|
|
|
+
|
|
|
+ // 计算积分
|
|
|
+ List<PunchInTaskExt> tempPunchInTaskExtList = punchInTaskExtGroupList.get(punchInTask.getId());
|
|
|
+ PunchInStatsWeek punchInStatsWeek = punchInStatsWeekMap.get(punchInTask.getTaskUniqueId());
|
|
|
+ PunchInStatsMonth punchInStatsMonth = punchInStatsMonthMap.get(punchInTask.getTaskUniqueId());
|
|
|
+ PunchInStatus punchInStatus = punchInStatusMap.get(punchInTask.getTaskUniqueId());
|
|
|
+ int taskPoints = settleManager.calculatePointsInTask(punchInTask, tempPunchInTaskExtList, punchInTaskHistory, punchInStatsWeek, punchInStatsMonth, punchInStatus);
|
|
|
+ updatePunchInTaskHistory.setSettlePoints(taskPoints);
|
|
|
+
|
|
|
+ // 还有其他的要设置
|
|
|
+
|
|
|
+ return updatePunchInTaskHistory;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ punchInTaskHistoryService.batchUpdate(updatePunchInTaskHistories);
|
|
|
+ }
|
|
|
+
|
|
|
+}
|