Jelajahi Sumber

【feat】【v3】
1.优化代码逻辑

ChenYL 10 bulan lalu
induk
melakukan
237f406cb9

+ 9 - 4
doc/sql/update-v3.sql

@@ -365,7 +365,7 @@ CREATE TABLE `pi_status` (
   `repeat_prev_total_count_in_week` int NOT NULL COMMENT '本周需打卡数(变更重复类型前)',
   `repeat_start_date_in_month` date DEFAULT NULL COMMENT '本月重复周期开始时间',
   `repeat_prev_total_count_in_month` int NOT NULL COMMENT '本月需打卡数(变更重复类型前)',
-  `stat_time_in_week` char(8) NOT NULL COMMENT '统计周数(格式:yyyy-周数)',
+  `stat_time_in_week` char(8) NOT NULL COMMENT '统计周数(格式:yyyy-W周数)',
   `punch_in_total_count_in_week` int NOT NULL COMMENT '本周需打卡数',
   `punch_in_count_in_week` int NOT NULL COMMENT '本周已打卡数',
   `punch_in_done_count_in_week` int NOT NULL COMMENT '本周完成打卡数',
@@ -405,7 +405,7 @@ CREATE TABLE `pi_status_history` (
   `repeat_prev_total_count_in_week` int NOT NULL COMMENT '本周需打卡数(变更重复类型前)',
   `repeat_start_date_in_month` date DEFAULT NULL COMMENT '本月重复周期开始时间',
   `repeat_prev_total_count_in_month` int NOT NULL COMMENT '本月需打卡数(变更重复类型前)',
-  `stat_time_in_week` char(8) NOT NULL COMMENT '统计周数(格式:yyyy-周数)',
+  `stat_time_in_week` char(8) NOT NULL COMMENT '统计周数(格式:yyyy-W周数)',
   `punch_in_total_count_in_week` int NOT NULL COMMENT '本周需打卡数',
   `punch_in_count_in_week` int NOT NULL COMMENT '本周已打卡数',
   `punch_in_done_count_in_week` int NOT NULL COMMENT '本周完成打卡数',
@@ -770,13 +770,13 @@ ALTER TABLE punch_settle.pi_status_history MODIFY COLUMN points_in_week int NULL
 ALTER TABLE punch_settle.pi_status_history MODIFY COLUMN punch_in_done_count_in_week int NULL COMMENT '本周完成打卡数';
 ALTER TABLE punch_settle.pi_status_history MODIFY COLUMN punch_in_count_in_week int NULL COMMENT '本周已打卡数';
 ALTER TABLE punch_settle.pi_status_history MODIFY COLUMN punch_in_total_count_in_week int NULL COMMENT '本周需打卡数';
-ALTER TABLE punch_settle.pi_status_history MODIFY COLUMN stat_time_in_week char(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '统计周数(格式:yyyy-周数)';
+ALTER TABLE punch_settle.pi_status_history MODIFY COLUMN stat_time_in_week char(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '统计周数(格式:yyyy-W周数)';
 ALTER TABLE punch_settle.pi_status_history MODIFY COLUMN repeat_prev_total_count_in_month int NULL COMMENT '本月需打卡数(变更重复类型前)';
 ALTER TABLE punch_settle.pi_status_history MODIFY COLUMN repeat_prev_total_count_in_week int NULL COMMENT '本周需打卡数(变更重复类型前)';
 
 ALTER TABLE punch_settle.pi_status MODIFY COLUMN repeat_prev_total_count_in_week int NULL COMMENT '本周需打卡数(变更重复类型前)';
 ALTER TABLE punch_settle.pi_status MODIFY COLUMN repeat_prev_total_count_in_month int NULL COMMENT '本月需打卡数(变更重复类型前)';
-ALTER TABLE punch_settle.pi_status MODIFY COLUMN stat_time_in_week char(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '统计周数(格式:yyyy-周数)';
+ALTER TABLE punch_settle.pi_status MODIFY COLUMN stat_time_in_week char(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '统计周数(格式:yyyy-W周数)';
 ALTER TABLE punch_settle.pi_status MODIFY COLUMN punch_in_total_count_in_week int NULL COMMENT '本周需打卡数';
 ALTER TABLE punch_settle.pi_status MODIFY COLUMN punch_in_count_in_week int NULL COMMENT '本周已打卡数';
 ALTER TABLE punch_settle.pi_status MODIFY COLUMN punch_in_done_count_in_week int NULL COMMENT '本周完成打卡数';
@@ -794,3 +794,8 @@ ALTER TABLE punch_settle.account_transfer_history MODIFY COLUMN sa_points_before
 ALTER TABLE punch_settle.account_transfer_history MODIFY COLUMN sa_points_after_transfer int NULL COMMENT '转出账户转出后积分';
 
 ALTER TABLE punch_settle.reward MODIFY COLUMN reward_unique_id bigint NULL COMMENT '奖励唯一id';
+
+ALTER TABLE punch_settle.pi_task ADD manual_archive_date date NULL COMMENT '手动归档日期';
+ALTER TABLE punch_settle.pi_task CHANGE manual_archive_date manual_archive_date date NULL COMMENT '手动归档日期' AFTER archive_status;
+ALTER TABLE punch_settle.pi_task CHANGE end_date auto_archive_date date NULL COMMENT '自动归档日期';
+ALTER TABLE punch_settle.pi_task MODIFY COLUMN auto_archive_date date NULL COMMENT '自动归档日期';

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

@@ -2,6 +2,7 @@ package com.punchsettle.server.service.controller;
 
 import java.time.LocalDate;
 
+import com.punchsettle.server.task.StatPiTask;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -120,4 +121,12 @@ public class OpController {
     public void rewardAutoExchange() {
         SpringUtils.getBean(RewardAutoExchangeTask.class).execute();
     }
+
+    /**
+     * 统计打卡数据
+     */
+    @GetMapping("statTask")
+    public void statTask() {
+        SpringUtils.getBean(StatPiTask.class).execute();
+    }
 }

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

@@ -42,7 +42,7 @@ public class SettleTaskRelaHistoryServiceImpl implements ISettleTaskRelaHistoryS
         Weekend<SettleTaskRelaHistory> weekend = WeekendUtils.createExcludeAuditFields(SettleTaskRelaHistory.class);
         WeekendCriteria<SettleTaskRelaHistory, Object> criteria = weekend.weekendCriteria();
         if (!CollectionUtils.isEmpty(query.getUserIds())) {
-            criteria.andIn(SettleTaskRelaHistory::getId, query.getUserIds());
+            criteria.andIn(SettleTaskRelaHistory::getUserId, query.getUserIds());
         }
         if (StringUtils.hasText(query.getSettleDateLike())) {
             criteria.andLike(SettleTaskRelaHistory::getSettleDate, String.format("%s%%", query.getSettleDateLike()));

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

@@ -43,7 +43,7 @@ public class PiTaskAutoArchiveTask {
         PiTaskQuery piTaskQuery = new PiTaskQuery();
         piTaskQuery.setTaskStatus(VersionStatusEnum.ACTIVE);
         piTaskQuery.setArchiveStatus(ArchiveStatusEnum.ACTIVE);
-        piTaskQuery.setEndDateLt(LocalDate.now());
+        piTaskQuery.setAutoArchiveDateLt(LocalDate.now());
         List<PiTask> piTasks = piTaskService.queryByCondition(piTaskQuery);
 
         if (CollectionUtils.isEmpty(piTasks)) {

+ 10 - 2
src/main/java/com/punchsettle/server/task/StatPiTask.java

@@ -58,12 +58,20 @@ public class StatPiTask {
         LocalDate firstDayOfWeek = DateUtils.getFirstDayOfWeek(statTime);
         // 周日
         LocalDate lastDayOfWeek = DateUtils.getLastDayOfWeek(statTime);
+        // 本月第一天
+        LocalDate firstDayOfMonth = DateUtils.getFirstDayOfMonth(statTime);
+        // 本月最后一天
+        LocalDate lastDayOfMonth = DateUtils.getLastDayOfMonth(statTime);
+        // 本年第一天
+        LocalDate firstDayOfYear = DateUtils.getFirstDayOfYear(statTime);
+        // 本年最后一天
+        LocalDate lastDayOfYear = DateUtils.getLastDayOfYear(statTime);
 
         for (List<Long> tempUserIds : Lists.partition(userIds, 20)) {
             try {
                 statManager.statPiTaskData(statPiTaskWeekService, StatPeriodEnum.WEEK, tempUserIds, statTime, firstDayOfWeek, lastDayOfWeek);
-                statManager.statPiTaskData(statPiTaskMonthService, StatPeriodEnum.MONTH, tempUserIds, statTime, firstDayOfWeek, lastDayOfWeek);
-                statManager.statPiTaskData(statPiTaskYearService, StatPeriodEnum.YEAR, tempUserIds, statTime, firstDayOfWeek, lastDayOfWeek);
+                statManager.statPiTaskData(statPiTaskMonthService, StatPeriodEnum.MONTH, tempUserIds, statTime, firstDayOfMonth, lastDayOfMonth);
+                statManager.statPiTaskData(statPiTaskYearService, StatPeriodEnum.YEAR, tempUserIds, statTime, firstDayOfYear, lastDayOfYear);
             } catch (Exception e) {
                 log.error("打卡任务数据统计定时任务执行异常", e);
             }

+ 28 - 1
src/main/java/com/punchsettle/server/utiis/DateUtils.java

@@ -104,6 +104,25 @@ public class DateUtils {
         return firstDayOfMonth.plusDays(date.lengthOfMonth() - 1);
     }
 
+    /**
+     * 获取所在年的第一天
+     * @param date
+     * @return
+     */
+    public static LocalDate getFirstDayOfYear(LocalDate date) {
+        // 找到给定日期所在年份的第一天
+        return LocalDate.of(date.getYear(), 1, 1);
+    }
+
+    /**
+     * 获取所在年的最后一天
+     * @param date
+     * @return
+     */
+    public static LocalDate getLastDayOfYear(LocalDate date) {
+        return LocalDate.of(date.getYear(), 12, 31);
+    }
+
     /**
      * 获取日期所在月的日期列表(1号~30号/31号)
      * @param date 指定日期
@@ -143,7 +162,7 @@ public class DateUtils {
     /**
      * 获取年份和周数(ISO 8601 标准)
      * @param date
-     * @return 格式:yyyy-WWW,例如:2023-W01
+     * @return 格式:yyyy-WXX,例如:2023-W01
      */
     public static String getYearWeek(LocalDate date) {
         // 使用 ISO 标准计算周数和年份
@@ -166,4 +185,12 @@ public class DateUtils {
         return String.format("%d-%02d", year, month);
     }
 
+    /**
+     * 获取年份(ISO 8601 标准)
+     * @param date
+     * @return 格式:yyyy,例如:2023
+     */
+    public static String getYear(LocalDate date) {
+        return String.valueOf(date.getYear());
+    }
 }

+ 30 - 2
src/test/java/com/punchsettle/server/utiis/DateUtilsTest.java

@@ -42,6 +42,16 @@ class DateUtilsTest {
      */
     private LocalDate lastDayOfMonth = LocalDate.parse("2025-04-30");
 
+    /**
+     * 本年第一天
+     */
+    private LocalDate firstDayOfYear = LocalDate.parse("2025-01-01");
+
+    /**
+     * 本年最后一天
+     */
+    private LocalDate lastDayOfYear = LocalDate.parse("2025-12-31");
+
     @Test
     void getFirstDayOfWeek() {
         LocalDate actualFirstDayOfMonth = DateUtils.getFirstDayOfWeek(today);
@@ -111,7 +121,25 @@ class DateUtilsTest {
 
     @Test
     void getYearMonth() {
-        String yearMonth = DateUtils.getYearMonth(today);
-        Assertions.assertEquals("2025-04", yearMonth);
+        String actualYearMonth = DateUtils.getYearMonth(today);
+        Assertions.assertEquals("2025-04", actualYearMonth);
+    }
+
+    @Test
+    void getFirstDayOfYear() {
+        LocalDate actualFirstDayOfYear = DateUtils.getFirstDayOfYear(today);
+        Assertions.assertEquals(firstDayOfYear, actualFirstDayOfYear);
+    }
+
+    @Test
+    void getLastDayOfYear() {
+        LocalDate actualLastDayOfYear = DateUtils.getLastDayOfYear(today);
+        Assertions.assertEquals(lastDayOfYear, actualLastDayOfYear);
+    }
+
+    @Test
+    void getYear() {
+        String actualYear = DateUtils.getYear(today);
+        Assertions.assertEquals("2025", actualYear);
     }
 }