瀏覽代碼

【feat】【v3】
1.修复单元测试中发现的问题
2.增加测试用例

ChenYL 11 月之前
父節點
當前提交
33172bb834

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

@@ -56,12 +56,12 @@ public class PunchInManagerImpl implements IPunchInManager {
 
         // 法定工作日
         if (RepeatCategoryEnum.WORKDAY.equals(piTask.getRepeatCategory())) {
-            return !calendarManager.judgeHoliday(repeatDateStr);
+            return calendarManager.judgeWorkday(repeatDateStr);
         }
 
         // 法定节假日(含周末)
         if (RepeatCategoryEnum.HOLIDAY.equals(piTask.getRepeatCategory())) {
-            return !calendarManager.judgeHoliday(repeatDateStr);
+            return calendarManager.judgeHoliday(repeatDateStr);
         }
 
         // 自定义
@@ -89,7 +89,7 @@ public class PunchInManagerImpl implements IPunchInManager {
 
         // 单次打卡,不区分是否节假日
         if (PunchInMethodEnum.SINGLE.equals(piTask.getPunchInMethod())) {
-            int countTrack = Optional.ofNullable(piTask.getCountTrack()).orElse(0);
+            int countTrack = Optional.ofNullable(piTaskHistory.getCountTrack()).orElse(0);
             return countTrack > 0 ? PunchInResultEnum.DONE : PunchInResultEnum.UNDONE;
         }
 
@@ -203,7 +203,7 @@ public class PunchInManagerImpl implements IPunchInManager {
                 return ContinueStageEnum.NORMAL_STAGE;
             }
 
-            // 连续中断次数大于等于设置的中断次数,重新进入宽限期
+            // 连续中断次数大于等于设置的中断次数,重新进入宽限期,这里加1是因为需要加上本次的中断次数
             if (piStatus.getContinueInterruptedCount() + 1 > continueTask.getContinueInterruptedCount()) {
                 return ContinueStageEnum.GRACE_STAGE;
             }
@@ -215,7 +215,7 @@ public class PunchInManagerImpl implements IPunchInManager {
         if (ContinueStageEnum.PENALTY_STAGE.equals(piStatus.getContinueStage())) {
             // 仍处于惩罚期
             if (punchInDate.compareTo(piStatus.getStageEndDate()) <= 0) {
-                return ContinueStageEnum.GRACE_STAGE;
+                return ContinueStageEnum.PENALTY_STAGE;
             }
 
             return ContinueStageEnum.NORMAL_STAGE;

+ 74 - 16
src/test/java/com/punchsettle/server/service/manager/impl/PunchInManagerImplTest.java

@@ -1,6 +1,19 @@
 package com.punchsettle.server.service.manager.impl;
 
+import java.time.LocalDate;
+import java.time.LocalTime;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.ActiveProfiles;
+
 import com.punchsettle.server.atomic.entity.PiMultiTask;
+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.common.constant.CommonEnableStatusEnum;
@@ -10,17 +23,6 @@ import com.punchsettle.server.constant.PunchInMethodEnum;
 import com.punchsettle.server.constant.PunchInResultEnum;
 import com.punchsettle.server.constant.RepeatCategoryEnum;
 import com.punchsettle.server.service.manager.IPunchInManager;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.ActiveProfiles;
-
-import java.time.LocalDate;
-import java.time.LocalTime;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
 
 /**
  * @author tyuio
@@ -159,7 +161,7 @@ class PunchInManagerImplTest {
         piTaskHistory12.setPunchInDate("2025-04-26");
         piTaskHistory12.setTimeTrack(LocalTime.parse("04:00:00.000"));
         PunchInResultEnum punchInResult12 = punchInManager.judgePunchInResultInTask(piTask12, piTaskHistory12);
-        Assertions.assertEquals(PunchInResultEnum.UNDONE, punchInResult12);
+        Assertions.assertEquals(PunchInResultEnum.DONE, punchInResult12);
 
     }
 
@@ -198,7 +200,7 @@ class PunchInManagerImplTest {
         piMultiTask3.setPunchInDoneCount(4);
         List<PiTaskHistory> piTaskHistoryList3 = Arrays.asList(piTaskHistory1, piTaskHistory2, piTaskHistory3, piTaskHistory4);
         PunchInResultEnum punchInResult3 = punchInManager.judgePunchInResultInMultiTask(piMultiTask3, piTaskHistoryList3);
-        Assertions.assertEquals(PunchInResultEnum.DONE, punchInResult3);
+        Assertions.assertEquals(PunchInResultEnum.UNDONE, punchInResult3);
     }
 
     @Test
@@ -227,8 +229,64 @@ class PunchInManagerImplTest {
         ContinueStageEnum continueStage1 = punchInManager.judgeContinueStage(piTask1, null, null, null);
         Assertions.assertEquals(ContinueStageEnum.NONE, continueStage1);
 
-        PiTask piTask2 = new PiTask();
-        piTask2.setContinueStatus(CommonEnableStatusEnum.ENABLED);
-        piTask2.setGraceDay(7);
+        PiTask piTask = new PiTask();
+        piTask.setContinueStatus(CommonEnableStatusEnum.ENABLED);
+        piTask.setGraceDay(7);
+        piTask.setContinueInterruptedCount(3);
+
+        // 宽限期-还在宽限期限内
+        PiStatus piStatus2 = new PiStatus();
+        piStatus2.setContinueStage(ContinueStageEnum.GRACE_STAGE);
+        piStatus2.setStageStartDate(LocalDate.parse("2025-04-23"));
+        ContinueStageEnum continueStage2 = punchInManager.judgeContinueStage(piTask, null, piStatus2, LocalDate.parse("2025-04-25"));
+        Assertions.assertEquals(ContinueStageEnum.GRACE_STAGE, continueStage2);
+
+        // 宽限期-已超过宽限期限,但是未完成打卡
+        PiStatus piStatus3 = new PiStatus();
+        piStatus3.setContinueStage(ContinueStageEnum.GRACE_STAGE);
+        piStatus3.setStageStartDate(LocalDate.parse("2025-04-23"));
+        ContinueStageEnum continueStage3 = punchInManager.judgeContinueStage(piTask, PunchInResultEnum.UNDONE, piStatus3, LocalDate.parse("2025-05-01"));
+        Assertions.assertEquals(ContinueStageEnum.GRACE_STAGE, continueStage3);
+
+        // 宽限期-已超过宽限期限,且已完成打卡,进入正常打卡期
+        PiStatus piStatus4 = new PiStatus();
+        piStatus4.setContinueStage(ContinueStageEnum.GRACE_STAGE);
+        piStatus4.setStageStartDate(LocalDate.parse("2025-04-23"));
+        ContinueStageEnum continueStage4 = punchInManager.judgeContinueStage(piTask, PunchInResultEnum.DONE, piStatus4, LocalDate.parse("2025-05-01"));
+        Assertions.assertEquals(ContinueStageEnum.NORMAL_STAGE, continueStage4);
+
+        // 正常打卡期-完成打卡则继续是正常打卡期
+        PiStatus piStatus5 = new PiStatus();
+        piStatus5.setContinueStage(ContinueStageEnum.NORMAL_STAGE);
+        ContinueStageEnum continueStage5 = punchInManager.judgeContinueStage(piTask, PunchInResultEnum.DONE, piStatus5, LocalDate.parse("2025-05-01"));
+        Assertions.assertEquals(ContinueStageEnum.NORMAL_STAGE, continueStage5);
+
+        // 正常打卡期-连续中断次数小于等于设置的中断次数 进入惩罚期
+        PiStatus piStatus6 = new PiStatus();
+        piStatus6.setContinueStage(ContinueStageEnum.NORMAL_STAGE);
+        piStatus6.setContinueInterruptedCount(2);
+        ContinueStageEnum continueStage6 = punchInManager.judgeContinueStage(piTask, PunchInResultEnum.UNDONE, piStatus6, LocalDate.parse("2025-05-01"));
+        Assertions.assertEquals(ContinueStageEnum.PENALTY_STAGE, continueStage6);
+
+        // 正常打卡期-连续中断次数大于等于设置的中断次数 重新进入宽限期
+        PiStatus piStatus7 = new PiStatus();
+        piStatus7.setContinueStage(ContinueStageEnum.NORMAL_STAGE);
+        piStatus7.setContinueInterruptedCount(3);
+        ContinueStageEnum continueStage7 = punchInManager.judgeContinueStage(piTask, PunchInResultEnum.UNDONE, piStatus7, LocalDate.parse("2025-05-01"));
+        Assertions.assertEquals(ContinueStageEnum.GRACE_STAGE, continueStage7);
+
+        // 惩罚期-仍处于惩罚期
+        PiStatus piStatus8 = new PiStatus();
+        piStatus8.setContinueStage(ContinueStageEnum.PENALTY_STAGE);
+        piStatus8.setStageEndDate(LocalDate.parse("2025-04-27"));
+        ContinueStageEnum continueStage8 = punchInManager.judgeContinueStage(piTask, PunchInResultEnum.UNDONE, piStatus8, LocalDate.parse("2025-04-23"));
+        Assertions.assertEquals(ContinueStageEnum.PENALTY_STAGE, continueStage8);
+
+        // 惩罚期-超出惩罚期,进入正常打卡期
+        PiStatus piStatus9 = new PiStatus();
+        piStatus9.setContinueStage(ContinueStageEnum.PENALTY_STAGE);
+        piStatus9.setStageEndDate(LocalDate.parse("2025-04-27"));
+        ContinueStageEnum continueStage9 = punchInManager.judgeContinueStage(piTask, PunchInResultEnum.UNDONE, piStatus9, LocalDate.parse("2025-04-28"));
+        Assertions.assertEquals(ContinueStageEnum.NORMAL_STAGE, continueStage9);
     }
 }