PunchInManagerImplTest.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. package com.punchsettle.server.service.manager.impl;
  2. import java.time.LocalDate;
  3. import java.time.LocalTime;
  4. import java.util.ArrayList;
  5. import java.util.Arrays;
  6. import java.util.List;
  7. import org.junit.jupiter.api.Assertions;
  8. import org.junit.jupiter.api.Test;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.boot.test.context.SpringBootTest;
  11. import org.springframework.test.context.ActiveProfiles;
  12. import com.punchsettle.server.atomic.entity.PiMultiTask;
  13. import com.punchsettle.server.atomic.entity.PiStatus;
  14. import com.punchsettle.server.atomic.entity.PiTask;
  15. import com.punchsettle.server.atomic.entity.PiTaskHistory;
  16. import com.punchsettle.server.common.constant.CommonEnableStatusEnum;
  17. import com.punchsettle.server.constant.CompareRuleEnum;
  18. import com.punchsettle.server.constant.ContinueStageEnum;
  19. import com.punchsettle.server.constant.PunchInMethodEnum;
  20. import com.punchsettle.server.constant.PunchInResultEnum;
  21. import com.punchsettle.server.constant.RepeatCategoryEnum;
  22. import com.punchsettle.server.service.manager.IPunchInCoreManager;
  23. /**
  24. * @author tyuio
  25. * @version 1.0.0
  26. * @date 2025/4/23 14:15
  27. * @description TODO
  28. */
  29. @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
  30. @ActiveProfiles(value={"dev", "test"})
  31. class PunchInManagerImplTest {
  32. @Autowired
  33. private IPunchInCoreManager punchInManager;
  34. @Test
  35. void judgeRepeat() {
  36. PiTask piTask1 = new PiTask();
  37. piTask1.setRepeatCategory(RepeatCategoryEnum.EVERYDAY);
  38. Assertions.assertTrue(punchInManager.judgeRepeat(piTask1, "2025-04-23"));
  39. PiTask piTask2 = new PiTask();
  40. piTask2.setRepeatCategory(RepeatCategoryEnum.WORKDAY);
  41. Assertions.assertTrue(punchInManager.judgeRepeat(piTask2, "2025-04-23"));
  42. PiTask piTask3 = new PiTask();
  43. piTask3.setRepeatCategory(RepeatCategoryEnum.WORKDAY);
  44. Assertions.assertFalse(punchInManager.judgeRepeat(piTask3, "2025-04-26"));
  45. PiTask piTask4 = new PiTask();
  46. piTask4.setRepeatCategory(RepeatCategoryEnum.HOLIDAY);
  47. Assertions.assertFalse(punchInManager.judgeRepeat(piTask4, "2025-04-23"));
  48. PiTask piTask5 = new PiTask();
  49. piTask5.setRepeatCategory(RepeatCategoryEnum.HOLIDAY);
  50. Assertions.assertTrue(punchInManager.judgeRepeat(piTask5, "2025-04-26"));
  51. }
  52. @Test
  53. void judgePunchInResultInTask() {
  54. PiTask piTask1 = new PiTask();
  55. PunchInResultEnum punchInResult1 = punchInManager.judgePunchInResultInTask(piTask1, null);
  56. Assertions.assertEquals(PunchInResultEnum.UNDONE, punchInResult1);
  57. PiTask piTask2 = new PiTask();
  58. piTask2.setPunchInMethod(PunchInMethodEnum.SINGLE);
  59. PiTaskHistory piTaskHistory2 = new PiTaskHistory();
  60. PunchInResultEnum punchInResult2 = punchInManager.judgePunchInResultInTask(piTask2, piTaskHistory2);
  61. Assertions.assertEquals(PunchInResultEnum.UNDONE, punchInResult2);
  62. PiTask piTask3 = new PiTask();
  63. piTask3.setPunchInMethod(PunchInMethodEnum.SINGLE);
  64. PiTaskHistory piTaskHistory3 = new PiTaskHistory();
  65. piTaskHistory3.setCountTrack(2);
  66. PunchInResultEnum punchInResult3 = punchInManager.judgePunchInResultInTask(piTask3, piTaskHistory3);
  67. Assertions.assertEquals(PunchInResultEnum.DONE, punchInResult3);
  68. PiTask piTask4 = new PiTask();
  69. piTask4.setPunchInMethod(PunchInMethodEnum.COUNT);
  70. piTask4.setCompareRule(CompareRuleEnum.GTE);
  71. piTask4.setCountTrack(2);
  72. PiTaskHistory piTaskHistory4 = new PiTaskHistory();
  73. piTaskHistory4.setCountTrack(2);
  74. PunchInResultEnum punchInResult4 = punchInManager.judgePunchInResultInTask(piTask4, piTaskHistory4);
  75. Assertions.assertEquals(PunchInResultEnum.DONE, punchInResult4);
  76. PiTask piTask5 = new PiTask();
  77. piTask5.setPunchInMethod(PunchInMethodEnum.COUNT);
  78. piTask5.setCompareRule(CompareRuleEnum.GTE);
  79. piTask5.setCountTrack(2);
  80. PiTaskHistory piTaskHistory5 = new PiTaskHistory();
  81. piTaskHistory5.setCountTrack(1);
  82. PunchInResultEnum punchInResult5 = punchInManager.judgePunchInResultInTask(piTask5, piTaskHistory5);
  83. Assertions.assertEquals(PunchInResultEnum.UNDONE, punchInResult5);
  84. PiTask piTask6 = new PiTask();
  85. piTask6.setPunchInMethod(PunchInMethodEnum.COUNT);
  86. piTask6.setCompareRule(CompareRuleEnum.LTE);
  87. piTask6.setCountTrack(2);
  88. PiTaskHistory piTaskHistory6 = new PiTaskHistory();
  89. piTaskHistory6.setCountTrack(2);
  90. PunchInResultEnum punchInResult6 = punchInManager.judgePunchInResultInTask(piTask6, piTaskHistory6);
  91. Assertions.assertEquals(PunchInResultEnum.DONE, punchInResult6);
  92. PiTask piTask7 = new PiTask();
  93. piTask7.setPunchInMethod(PunchInMethodEnum.COUNT);
  94. piTask7.setCompareRule(CompareRuleEnum.LTE);
  95. piTask7.setCountTrack(2);
  96. PiTaskHistory piTaskHistory7 = new PiTaskHistory();
  97. piTaskHistory7.setCountTrack(3);
  98. PunchInResultEnum punchInResult7 = punchInManager.judgePunchInResultInTask(piTask7, piTaskHistory7);
  99. Assertions.assertEquals(PunchInResultEnum.UNDONE, punchInResult7);
  100. PiTask piTask8 = new PiTask();
  101. piTask8.setPunchInMethod(PunchInMethodEnum.TIMING);
  102. piTask8.setCompareRule(CompareRuleEnum.GTE);
  103. piTask8.setTimeTrack(LocalTime.parse("06:00:00.000"));
  104. PiTaskHistory piTaskHistory8 = new PiTaskHistory();
  105. piTaskHistory8.setTimeTrack(LocalTime.parse("06:00:00.000"));
  106. PunchInResultEnum punchInResult8 = punchInManager.judgePunchInResultInTask(piTask8, piTaskHistory8);
  107. Assertions.assertEquals(PunchInResultEnum.DONE, punchInResult8);
  108. PiTask piTask9 = new PiTask();
  109. piTask9.setPunchInMethod(PunchInMethodEnum.TIMING);
  110. piTask9.setCompareRule(CompareRuleEnum.GTE);
  111. piTask9.setTimeTrack(LocalTime.parse("06:00:00.000"));
  112. PiTaskHistory piTaskHistory9 = new PiTaskHistory();
  113. piTaskHistory9.setTimeTrack(LocalTime.parse("05:00:00.000"));
  114. PunchInResultEnum punchInResult9 = punchInManager.judgePunchInResultInTask(piTask9, piTaskHistory9);
  115. Assertions.assertEquals(PunchInResultEnum.UNDONE, punchInResult9);
  116. PiTask piTask10 = new PiTask();
  117. piTask10.setPunchInMethod(PunchInMethodEnum.TIMING);
  118. piTask10.setCompareRule(CompareRuleEnum.LTE);
  119. piTask10.setTimeTrack(LocalTime.parse("06:00:00.000"));
  120. PiTaskHistory piTaskHistory10 = new PiTaskHistory();
  121. piTaskHistory10.setTimeTrack(LocalTime.parse("06:00:00.000"));
  122. PunchInResultEnum punchInResult10 = punchInManager.judgePunchInResultInTask(piTask10, piTaskHistory10);
  123. Assertions.assertEquals(PunchInResultEnum.DONE, punchInResult10);
  124. PiTask piTask11 = new PiTask();
  125. piTask11.setPunchInMethod(PunchInMethodEnum.TIMING);
  126. piTask11.setCompareRule(CompareRuleEnum.LTE);
  127. piTask11.setTimeTrack(LocalTime.parse("06:00:00.000"));
  128. PiTaskHistory piTaskHistory11 = new PiTaskHistory();
  129. piTaskHistory11.setTimeTrack(LocalTime.parse("07:00:00.000"));
  130. PunchInResultEnum punchInResult11 = punchInManager.judgePunchInResultInTask(piTask11, piTaskHistory11);
  131. Assertions.assertEquals(PunchInResultEnum.UNDONE, punchInResult11);
  132. PiTask piTask12 = new PiTask();
  133. piTask12.setHolidayStatus(CommonEnableStatusEnum.ENABLED);
  134. piTask12.setPunchInMethod(PunchInMethodEnum.TIMING);
  135. piTask12.setCompareRule(CompareRuleEnum.GTE);
  136. piTask12.setTimeTrack(LocalTime.parse("06:00:00.000"));
  137. piTask12.setHolidayTimeTrack(LocalTime.parse("04:00:00.000"));
  138. PiTaskHistory piTaskHistory12 = new PiTaskHistory();
  139. piTaskHistory12.setPunchInDate("2025-04-26");
  140. piTaskHistory12.setTimeTrack(LocalTime.parse("04:00:00.000"));
  141. PunchInResultEnum punchInResult12 = punchInManager.judgePunchInResultInTask(piTask12, piTaskHistory12);
  142. Assertions.assertEquals(PunchInResultEnum.DONE, punchInResult12);
  143. }
  144. @Test
  145. void judgePunchInResultInMultiTask() {
  146. PiMultiTask piMultiTask1 = new PiMultiTask();
  147. piMultiTask1.setTaskPointsStatus(CommonEnableStatusEnum.ENABLED);
  148. List<PiTaskHistory> piTaskHistoryList1 = new ArrayList<>();
  149. PunchInResultEnum punchInResult1 = punchInManager.judgePunchInResultInMultiTask(piMultiTask1, piTaskHistoryList1);
  150. Assertions.assertEquals(PunchInResultEnum.UNDONE, punchInResult1);
  151. PiMultiTask piMultiTask11 = new PiMultiTask();
  152. piMultiTask11.setTaskPointsStatus(CommonEnableStatusEnum.DISABLED);
  153. List<PiTaskHistory> piTaskHistoryList11 = new ArrayList<>();
  154. PunchInResultEnum punchInResult11 = punchInManager.judgePunchInResultInMultiTask(piMultiTask11, piTaskHistoryList11);
  155. Assertions.assertEquals(PunchInResultEnum.UNDONE, punchInResult11);
  156. PiTaskHistory piTaskHistory1 = new PiTaskHistory();
  157. piTaskHistory1.setPunchInResult(PunchInResultEnum.DONE);
  158. PiTaskHistory piTaskHistory2 = new PiTaskHistory();
  159. piTaskHistory2.setPunchInResult(PunchInResultEnum.DONE);
  160. PiTaskHistory piTaskHistory3 = new PiTaskHistory();
  161. piTaskHistory3.setPunchInResult(PunchInResultEnum.DONE);
  162. PiTaskHistory piTaskHistory4 = new PiTaskHistory();
  163. piTaskHistory4.setPunchInResult(PunchInResultEnum.UNDONE);
  164. PiMultiTask piMultiTask2 = new PiMultiTask();
  165. piMultiTask2.setTaskPointsStatus(CommonEnableStatusEnum.ENABLED);
  166. piMultiTask2.setPunchInDoneCount(3);
  167. List<PiTaskHistory> piTaskHistoryList2 = Arrays.asList(piTaskHistory1, piTaskHistory2, piTaskHistory3, piTaskHistory4);
  168. PunchInResultEnum punchInResult2 = punchInManager.judgePunchInResultInMultiTask(piMultiTask2, piTaskHistoryList2);
  169. Assertions.assertEquals(PunchInResultEnum.DONE, punchInResult2);
  170. PiMultiTask piMultiTask3 = new PiMultiTask();
  171. piMultiTask3.setTaskPointsStatus(CommonEnableStatusEnum.ENABLED);
  172. piMultiTask3.setPunchInDoneCount(4);
  173. List<PiTaskHistory> piTaskHistoryList3 = Arrays.asList(piTaskHistory1, piTaskHistory2, piTaskHistory3, piTaskHistory4);
  174. PunchInResultEnum punchInResult3 = punchInManager.judgePunchInResultInMultiTask(piMultiTask3, piTaskHistoryList3);
  175. Assertions.assertEquals(PunchInResultEnum.UNDONE, punchInResult3);
  176. }
  177. @Test
  178. void getPunchInTotalCountInRange() {
  179. LocalDate today = LocalDate.parse("2025-04-23");
  180. LocalDate firstDayOfWeek = LocalDate.parse("2025-04-21");
  181. LocalDate lastDayOfWeek = LocalDate.parse("2025-04-27");
  182. int punchInTotalCount1 = punchInManager.getPunchInTotalCountInRange(RepeatCategoryEnum.EVERYDAY, null, firstDayOfWeek, lastDayOfWeek);
  183. Assertions.assertEquals(7, punchInTotalCount1);
  184. int punchInTotalCount2 = punchInManager.getPunchInTotalCountInRange(RepeatCategoryEnum.CUSTOM, "1,2,7,6", firstDayOfWeek, lastDayOfWeek);
  185. Assertions.assertEquals(4, punchInTotalCount2);
  186. int punchInTotalCount3 = punchInManager.getPunchInTotalCountInRange(RepeatCategoryEnum.WORKDAY, null, firstDayOfWeek, lastDayOfWeek);
  187. Assertions.assertEquals(6, punchInTotalCount3);
  188. int punchInTotalCount4 = punchInManager.getPunchInTotalCountInRange(RepeatCategoryEnum.HOLIDAY, null, firstDayOfWeek, lastDayOfWeek);
  189. Assertions.assertEquals(1, punchInTotalCount4);
  190. }
  191. @Test
  192. void judgeContinueStage() {
  193. PiTask piTask1 = new PiTask();
  194. piTask1.setContinueStatus(CommonEnableStatusEnum.DISABLED);
  195. ContinueStageEnum continueStage1 = punchInManager.judgeContinueStage(piTask1, null, null, null);
  196. Assertions.assertEquals(ContinueStageEnum.NONE, continueStage1);
  197. PiTask piTask = new PiTask();
  198. piTask.setContinueStatus(CommonEnableStatusEnum.ENABLED);
  199. piTask.setGraceDay(7);
  200. piTask.setContinueInterruptedCount(3);
  201. // 宽限期-还在宽限期限内
  202. PiStatus piStatus2 = new PiStatus();
  203. piStatus2.setContinueStage(ContinueStageEnum.GRACE_STAGE);
  204. piStatus2.setStageStartDate(LocalDate.parse("2025-04-23"));
  205. ContinueStageEnum continueStage2 = punchInManager.judgeContinueStage(piTask, null, piStatus2, LocalDate.parse("2025-04-25"));
  206. Assertions.assertEquals(ContinueStageEnum.GRACE_STAGE, continueStage2);
  207. // 宽限期-已超过宽限期限,但是未完成打卡
  208. PiStatus piStatus3 = new PiStatus();
  209. piStatus3.setContinueStage(ContinueStageEnum.GRACE_STAGE);
  210. piStatus3.setStageStartDate(LocalDate.parse("2025-04-23"));
  211. ContinueStageEnum continueStage3 = punchInManager.judgeContinueStage(piTask, PunchInResultEnum.UNDONE, piStatus3, LocalDate.parse("2025-05-01"));
  212. Assertions.assertEquals(ContinueStageEnum.GRACE_STAGE, continueStage3);
  213. // 宽限期-已超过宽限期限,且已完成打卡,进入正常打卡期
  214. PiStatus piStatus4 = new PiStatus();
  215. piStatus4.setContinueStage(ContinueStageEnum.GRACE_STAGE);
  216. piStatus4.setStageStartDate(LocalDate.parse("2025-04-23"));
  217. ContinueStageEnum continueStage4 = punchInManager.judgeContinueStage(piTask, PunchInResultEnum.DONE, piStatus4, LocalDate.parse("2025-05-01"));
  218. Assertions.assertEquals(ContinueStageEnum.NORMAL_STAGE, continueStage4);
  219. // 正常打卡期-完成打卡则继续是正常打卡期
  220. PiStatus piStatus5 = new PiStatus();
  221. piStatus5.setContinueStage(ContinueStageEnum.NORMAL_STAGE);
  222. ContinueStageEnum continueStage5 = punchInManager.judgeContinueStage(piTask, PunchInResultEnum.DONE, piStatus5, LocalDate.parse("2025-05-01"));
  223. Assertions.assertEquals(ContinueStageEnum.NORMAL_STAGE, continueStage5);
  224. // 正常打卡期-连续中断次数小于等于设置的中断次数 进入惩罚期
  225. PiStatus piStatus6 = new PiStatus();
  226. piStatus6.setContinueStage(ContinueStageEnum.NORMAL_STAGE);
  227. piStatus6.setContinueInterruptedCount(2);
  228. ContinueStageEnum continueStage6 = punchInManager.judgeContinueStage(piTask, PunchInResultEnum.UNDONE, piStatus6, LocalDate.parse("2025-05-01"));
  229. Assertions.assertEquals(ContinueStageEnum.PENALTY_STAGE, continueStage6);
  230. // 正常打卡期-连续中断次数大于等于设置的中断次数 重新进入宽限期
  231. PiStatus piStatus7 = new PiStatus();
  232. piStatus7.setContinueStage(ContinueStageEnum.NORMAL_STAGE);
  233. piStatus7.setContinueInterruptedCount(3);
  234. ContinueStageEnum continueStage7 = punchInManager.judgeContinueStage(piTask, PunchInResultEnum.UNDONE, piStatus7, LocalDate.parse("2025-05-01"));
  235. Assertions.assertEquals(ContinueStageEnum.GRACE_STAGE, continueStage7);
  236. // 惩罚期-仍处于惩罚期
  237. PiStatus piStatus8 = new PiStatus();
  238. piStatus8.setContinueStage(ContinueStageEnum.PENALTY_STAGE);
  239. piStatus8.setStageEndDate(LocalDate.parse("2025-04-27"));
  240. ContinueStageEnum continueStage8 = punchInManager.judgeContinueStage(piTask, PunchInResultEnum.UNDONE, piStatus8, LocalDate.parse("2025-04-23"));
  241. Assertions.assertEquals(ContinueStageEnum.PENALTY_STAGE, continueStage8);
  242. // 惩罚期-超出惩罚期,进入正常打卡期
  243. PiStatus piStatus9 = new PiStatus();
  244. piStatus9.setContinueStage(ContinueStageEnum.PENALTY_STAGE);
  245. piStatus9.setStageEndDate(LocalDate.parse("2025-04-27"));
  246. ContinueStageEnum continueStage9 = punchInManager.judgeContinueStage(piTask, PunchInResultEnum.UNDONE, piStatus9, LocalDate.parse("2025-04-28"));
  247. Assertions.assertEquals(ContinueStageEnum.NORMAL_STAGE, continueStage9);
  248. }
  249. }