Ver Fonte

【feat】【v3】
1.新增枚举类

ChenYL há 10 meses atrás
pai
commit
bd4775597b
21 ficheiros alterados com 399 adições e 91 exclusões
  1. 2 2
      doc/sql/update-v3.sql
  2. 2 2
      doc/技术文档.md
  3. 2 2
      src/main/java/com/punchsettle/server/atomic/entity/PunchInRecord.java
  4. 35 17
      src/main/java/com/punchsettle/server/atomic/entity/PunchInTask.java
  5. 12 5
      src/main/java/com/punchsettle/server/atomic/entity/PunchInTaskHistory.java
  6. 23 0
      src/main/java/com/punchsettle/server/constant/ArchiveStatusEnum.java
  7. 25 0
      src/main/java/com/punchsettle/server/constant/CompareRuleEnum.java
  8. 23 0
      src/main/java/com/punchsettle/server/constant/ConsecutiveStatusEnum.java
  9. 10 0
      src/main/java/com/punchsettle/server/constant/ExtraMethodEnum.java
  10. 23 0
      src/main/java/com/punchsettle/server/constant/FullAttendancePeriodEnum.java
  11. 26 0
      src/main/java/com/punchsettle/server/constant/PunchInMethodEnum.java
  12. 4 16
      src/main/java/com/punchsettle/server/constant/PunchInStatusEnum.java
  13. 35 0
      src/main/java/com/punchsettle/server/constant/PunchInStatusV1Enum.java
  14. 25 0
      src/main/java/com/punchsettle/server/constant/RepeatCategoryEnum.java
  15. 25 0
      src/main/java/com/punchsettle/server/constant/SettleStatusEnum.java
  16. 3 3
      src/main/java/com/punchsettle/server/pojo/punchin/PunchInCalendarDataVO.java
  17. 3 3
      src/main/java/com/punchsettle/server/pojo/punchin/PunchInRecordDataVO.java
  18. 14 0
      src/main/java/com/punchsettle/server/service/manager/IPunchInManager.java
  19. 2 2
      src/main/java/com/punchsettle/server/service/manager/ISettleManager.java
  20. 88 22
      src/main/java/com/punchsettle/server/service/manager/impl/PunchInManagerImpl.java
  21. 17 17
      src/main/java/com/punchsettle/server/service/manager/impl/SettleManagerImpl.java

+ 2 - 2
doc/sql/update-v3.sql

@@ -452,10 +452,10 @@ ADD COLUMN `holiday_time_track` time DEFAULT NULL COMMENT '时间记录(节假
 ADD COLUMN `full_attendance_status` varchar(10) DEFAULT NULL COMMENT '是否启用全勤奖励(ENABLED-启用,DISABLED-关闭)',
 ADD COLUMN `full_attendance_period` varchar(10) DEFAULT NULL COMMENT '全勤周期(周-WEEK,月-MONTH)',
 ADD COLUMN `full_attendance_fault_tolerance_cnt` int DEFAULT NULL COMMENT '全勤容错次数',
-ADD COLUMN `repeat_category` varchar(10) DEFAULT NULL COMMENT '重复周期类型(每日-EVERYDAY、法定工作日-WORKDAY、法定节假日(含周末)-HOLIADY、自定义(周一至周日)-CUSTOM)',
+ADD COLUMN `repeat_category` varchar(10) DEFAULT NULL COMMENT '重复周期类型(每日-EVERYDAY、法定工作日-WORKDAY、法定节假日(含周末)-HOLIDAY、自定义(周一至周日)-CUSTOM)',
 ADD COLUMN `repeat_custom_day` varchar(13) DEFAULT NULL COMMENT '自定义重复日(周一-1,周二-2,周三-3,周四-4,周五-5,周六-6,周日-7)',
 ADD COLUMN `extra_method` varchar(10) DEFAULT NULL COMMENT '额外奖励方式(无-NONE,固定-FIXED,区间-INTERVAL)',
-ADD COLUMN `extra_time_step` time DEFAULT NULL COMMENT '额外的时间间隔',
+ADD COLUMN `extra_time_step` int DEFAULT NULL COMMENT '额外的时间间隔(单位:分钟)',
 ADD COLUMN `grace_status` varchar(10) DEFAULT NULL COMMENT '是否启用宽限期(ENABLED-启用,DISABLED-关闭)',
 ADD COLUMN `grace_day` int DEFAULT NULL COMMENT '宽限期(单位:天)',
 ADD COLUMN `interrupted_day` int DEFAULT NULL COMMENT '打卡中断天数(单位:天)',

+ 2 - 2
doc/技术文档.md

@@ -492,10 +492,10 @@ ui设计工具:即时设计
 | full_attendance_status              | varchar(10)  | 是否启用全勤奖励(ENABLED-启用,DISABLED-关闭)                |          |
 | full_attendance_period              | varchar(10)  | 全勤周期(周-WEEK,月-MONTH)                                |          |
 | full_attendance_fault_tolerance_cnt | int          | 全勤容错次数                                                 |          |
-| repeat_category                     | varchar(10)  | 重复周期类型(每日-EVERYDAY、法定工作日-WORKDAY、法定节假日(含周末)-HOLIADY、自定义(周一至周日)-CUSTOM) |          |
+| repeat_category                     | varchar(10)  | 重复周期类型(每日-EVERYDAY、法定工作日-WORKDAY、法定节假日(含周末)-HOLIDAY、自定义(周一至周日)-CUSTOM) |          |
 | repeat_custom_day                   | varchar(13)  | 自定义重复日(周一-1,周二-2,周三-3,周四-4,周五-5,周六-6,周日-7) |          |
 | extra_method                        | varchar(10)  | 额外奖励方式(无-NONE,固定-FIXED,区间-INTERVAL)           |          |
-| extra_time_step                     | time         | 额外的时间间隔                                               |          |
+| extra_time_step                     | int          | 额外的时间间隔(单位:分钟)                                 |          |
 | extra_points                        | int          | 奖励的积分(额外)                                           |          |
 | grace_status                        | varchar(10)  | 是否启用宽限期(ENABLED-启用,DISABLED-关闭)                  |          |
 | grace_day                           | int          | 宽限期(单位:天)                                           |          |

+ 2 - 2
src/main/java/com/punchsettle/server/atomic/entity/PunchInRecord.java

@@ -8,7 +8,7 @@ import com.punchsettle.server.common.pojo.BaseEntity;
 import com.punchsettle.server.common.typehandler.EnumValueTypeHandler;
 import com.punchsettle.server.constant.PunchInCategoryEnum;
 import com.punchsettle.server.constant.PunchInRuleEnum;
-import com.punchsettle.server.constant.PunchInStatusEnum;
+import com.punchsettle.server.constant.PunchInStatusV1Enum;
 
 import jakarta.persistence.Column;
 import jakarta.persistence.Table;
@@ -59,7 +59,7 @@ public class PunchInRecord extends BaseEntity implements Serializable {
      */
     @ColumnType(typeHandler = EnumValueTypeHandler.class)
     @Column(name = "punch_in_status")
-    private PunchInStatusEnum punchInStatus;
+    private PunchInStatusV1Enum punchInStatus;
 
     /**
      * 结算时的结算奖励数

+ 35 - 17
src/main/java/com/punchsettle/server/atomic/entity/PunchInTask.java

@@ -2,9 +2,17 @@ package com.punchsettle.server.atomic.entity;
 
 import java.io.Serial;
 import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalTime;
 import java.util.Date;
 
 import com.punchsettle.server.common.pojo.BaseEntity;
+import com.punchsettle.server.constant.ArchiveStatusEnum;
+import com.punchsettle.server.constant.CommonStatusEnum;
+import com.punchsettle.server.constant.CompareRuleEnum;
+import com.punchsettle.server.constant.FullAttendancePeriodEnum;
+import com.punchsettle.server.constant.PunchInMethodEnum;
+import com.punchsettle.server.constant.RepeatCategoryEnum;
 import jakarta.persistence.Column;
 import jakarta.persistence.Table;
 import lombok.Data;
@@ -32,9 +40,10 @@ public class PunchInTask extends BaseEntity implements Serializable {
 
     /**
      * 任务状态(活跃-ACTIVE,归档-ARCHIVE)
+     * @see ArchiveStatusEnum
      */
     @Column(name = "task_status")
-    private String taskStatus;
+    private ArchiveStatusEnum taskStatus;
 
     /**
      * 任务修改版本
@@ -64,13 +73,14 @@ public class PunchInTask extends BaseEntity implements Serializable {
      * 结束日期
      */
     @Column(name = "end_date")
-    private Date endDate;
+    private LocalDate endDate;
 
     /**
      * 是否归档(活跃-ACTIVE,归档-ARCHIVE)
+     * @see ArchiveStatusEnum
      */
     @Column(name = "archive_status")
-    private String archiveStatus;
+    private ArchiveStatusEnum archiveStatus;
 
     /**
      * 显示顺序
@@ -82,19 +92,21 @@ public class PunchInTask extends BaseEntity implements Serializable {
      * 显示时间
      */
     @Column(name = "display_time")
-    private Date displayTime;
+    private LocalTime displayTime;
 
     /**
      * 打卡方式(单次打卡-SINGLE,计数-COUNT、计时-TIMING)
+     * @see PunchInMethodEnum
      */
     @Column(name = "punch_in_method")
-    private String punchInMethod;
+    private PunchInMethodEnum punchInMethod;
 
     /**
      * 比较规则(大于等于-GTE,小于等于-LTE)
+     * @see CompareRuleEnum
      */
     @Column(name = "compare_rule")
-    private String compareRule;
+    private CompareRuleEnum compareRule;
 
     /**
      * 次数记录
@@ -106,13 +118,14 @@ public class PunchInTask extends BaseEntity implements Serializable {
      * 时间记录
      */
     @Column(name = "time_track")
-    private Date timeTrack;
+    private LocalTime timeTrack;
 
     /**
      * 是否启用节假日奖励(ENABLED-启用,DISABLED-关闭)
+     * @see CommonStatusEnum
      */
     @Column(name = "holiday_status")
-    private String holidayStatus;
+    private CommonStatusEnum holidayStatus;
 
     /**
      * 次数记录(节假日用)
@@ -124,19 +137,21 @@ public class PunchInTask extends BaseEntity implements Serializable {
      * 时间记录(节假日用)
      */
     @Column(name = "holiday_time_track")
-    private Date holidayTimeTrack;
+    private LocalTime holidayTimeTrack;
 
     /**
      * 是否启用全勤奖励(ENABLED-启用,DISABLED-关闭)
+     * @see CommonStatusEnum
      */
     @Column(name = "full_attendance_status")
-    private String fullAttendanceStatus;
+    private CommonStatusEnum fullAttendanceStatus;
 
     /**
      * 全勤周期(周-WEEK,月-MONTH)
+     * @see FullAttendancePeriodEnum
      */
     @Column(name = "full_attendance_period")
-    private String fullAttendancePeriod;
+    private FullAttendancePeriodEnum fullAttendancePeriod;
 
     /**
      * 全勤容错次数
@@ -145,10 +160,11 @@ public class PunchInTask extends BaseEntity implements Serializable {
     private Integer fullAttendanceFaultToleranceCnt;
 
     /**
-     * 重复周期类型(每日-EVERYDAY、法定工作日-WORKDAY、法定节假日(含周末)-HOLIADY、自定义(周一至周日)-CUSTOM)
+     * 重复周期类型(每日-EVERYDAY、法定工作日-WORKDAY、法定节假日(含周末)-HOLIDAY、自定义(周一至周日)-CUSTOM)
+     * @see RepeatCategoryEnum
      */
     @Column(name = "repeat_category")
-    private String repeatCategory;
+    private RepeatCategoryEnum repeatCategory;
 
     /**
      * 自定义重复日(周一-1,周二-2,周三-3,周四-4,周五-5,周六-6,周日-7)
@@ -163,16 +179,17 @@ public class PunchInTask extends BaseEntity implements Serializable {
     private String extraMethod;
 
     /**
-     * 额外的时间间隔
+     * 额外的时间间隔(单位:分钟)
      */
     @Column(name = "extra_time_step")
-    private Date extraTimeStep;
+    private Integer extraTimeStep;
 
     /**
      * 是否启用宽限期(ENABLED-启用,DISABLED-关闭)
+     * @see CommonStatusEnum
      */
     @Column(name = "grace_status")
-    private String graceStatus;
+    private CommonStatusEnum graceStatus;
 
     /**
      * 宽限期(单位:天)
@@ -194,8 +211,9 @@ public class PunchInTask extends BaseEntity implements Serializable {
 
     /**
      * 是否启用自动打卡(ENABLED-启用,DISABLED-关闭)
+     * @see CommonStatusEnum
      */
     @Column(name = "auto_status")
-    private String autoStatus;
+    private CommonStatusEnum autoStatus;
 
 }

+ 12 - 5
src/main/java/com/punchsettle/server/atomic/entity/PunchInTaskHistory.java

@@ -2,9 +2,13 @@ package com.punchsettle.server.atomic.entity;
 
 import java.io.Serial;
 import java.io.Serializable;
-import java.util.Date;
+import java.time.LocalTime;
 
 import com.punchsettle.server.common.pojo.BaseEntity;
+import com.punchsettle.server.constant.ConsecutiveStatusEnum;
+import com.punchsettle.server.constant.PunchInStatusEnum;
+import com.punchsettle.server.constant.SettleStatusEnum;
+
 import jakarta.persistence.Column;
 import jakarta.persistence.Table;
 import lombok.Data;
@@ -44,9 +48,10 @@ public class PunchInTaskHistory extends BaseEntity implements Serializable {
 
     /**
      * 打卡状态(DONE-完成,UNDONE-未完成)
+     * @ssee PunchInStatusEnum
      */
     @Column(name = "punch_in_status")
-    private String punchInStatus;
+    private PunchInStatusEnum punchInStatus;
 
     /**
      * 次数记录
@@ -58,13 +63,14 @@ public class PunchInTaskHistory extends BaseEntity implements Serializable {
      * 时间记录
      */
     @Column(name = "time_track")
-    private Date timeTrack;
+    private LocalTime timeTrack;
 
     /**
      * 连续打卡状态(正常打卡-NORMAL、中断--INTERRUPTED)
+     * @see ConsecutiveStatusEnum
      */
     @Column(name = "consecutive_status")
-    private String consecutiveStatus;
+    private ConsecutiveStatusEnum consecutiveStatus;
 
     /**
      * 连续天数,第一天开始就等于1
@@ -80,9 +86,10 @@ public class PunchInTaskHistory extends BaseEntity implements Serializable {
 
     /**
      * 结算状态(未结算-UNSETTLED,宽限期跳过J-GRACE_SKIP,惩罚跳过-PENALTY_SKIP,已结算-SETTLED)
+     * @see SettleStatusEnum
      */
     @Column(name = "settle_status")
-    private String settleStatus;
+    private SettleStatusEnum settleStatus;
 
     /**
      * 结算时的打卡任务ID

+ 23 - 0
src/main/java/com/punchsettle/server/constant/ArchiveStatusEnum.java

@@ -0,0 +1,23 @@
+package com.punchsettle.server.constant;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @date 2025/4/9 12:33
+ * @description 归档状态枚举(活跃-ACTIVE,归档-ARCHIVE)
+ */
+@Getter
+@AllArgsConstructor
+public enum ArchiveStatusEnum {
+
+    ACTIVE("活跃"),
+    ARCHIVE("归档");
+
+    /**
+     * 名称
+     */
+    private String name;
+}

+ 25 - 0
src/main/java/com/punchsettle/server/constant/CompareRuleEnum.java

@@ -0,0 +1,25 @@
+package com.punchsettle.server.constant;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.punchsettle.server.common.annotation.EnumValue;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @date 2025/4/9 12:37
+ * @description 比较规则枚举(大于等于-GTE,小于等于-LTE)
+ */
+@Getter
+@AllArgsConstructor
+public enum CompareRuleEnum {
+
+    GTE("大于等于"),
+    LTE("小于等于");
+
+    /**
+     * 名称
+     */
+    private String name;
+}

+ 23 - 0
src/main/java/com/punchsettle/server/constant/ConsecutiveStatusEnum.java

@@ -0,0 +1,23 @@
+package com.punchsettle.server.constant;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @date 2025/4/9 12:24
+ * @description 连续打卡状态枚举(正常打卡-NORMAL、中断--INTERRUPTED)
+ */
+@Getter
+@AllArgsConstructor
+public enum ConsecutiveStatusEnum {
+
+    NORMAL("正常打卡"),
+    INTERRUPTED("中断打卡");
+
+    /**
+     * 名称
+     */
+    private String name;
+}

+ 10 - 0
src/main/java/com/punchsettle/server/constant/ExtraMethodEnum.java

@@ -0,0 +1,10 @@
+package com.punchsettle.server.constant;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @date 2025/4/9 12:45
+ * @description TODO
+ */
+public enum ExtraMethodEnum {
+}

+ 23 - 0
src/main/java/com/punchsettle/server/constant/FullAttendancePeriodEnum.java

@@ -0,0 +1,23 @@
+package com.punchsettle.server.constant;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @date 2025/4/9 12:41
+ * @description 全勤周期枚举(周-WEEK,月-MONTH)
+ */
+@Getter
+@AllArgsConstructor
+public enum FullAttendancePeriodEnum {
+
+    WEEK("周"),
+    MONTH("月");
+
+    /**
+     * 名称
+     */
+    private String name;
+}

+ 26 - 0
src/main/java/com/punchsettle/server/constant/PunchInMethodEnum.java

@@ -0,0 +1,26 @@
+package com.punchsettle.server.constant;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.punchsettle.server.common.annotation.EnumValue;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @date 2025/4/9 12:35
+ * @description 打卡方式枚举(单次打卡-SINGLE,计数-COUNT、计时-TIMING)
+ */
+@Getter
+@AllArgsConstructor
+public enum PunchInMethodEnum {
+
+    SINGLE("单次打卡"),
+    COUNT("计数打卡"),
+    TIMING("计时打卡");
+
+    /**
+     * 名称
+     */
+    private String name;
+}

+ 4 - 16
src/main/java/com/punchsettle/server/constant/PunchInStatusEnum.java

@@ -1,35 +1,23 @@
 package com.punchsettle.server.constant;
 
-import com.fasterxml.jackson.annotation.JsonValue;
-import com.punchsettle.server.common.annotation.EnumValue;
-
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 
 /**
  * @author tyuio
  * @version 1.0.0
- * @description 打卡状态(0-进行中,1-完成,2-未完成,3-补打卡),结算后修改状态,单次打卡除外
- * @date 2024/11/26 21:59
+ * @date 2025/4/9 12:22
+ * @description 打卡状态枚举(DONE-完成,UNDONE-未完成)
  */
 @Getter
 @AllArgsConstructor
 public enum PunchInStatusEnum {
 
-    DOING("进行中", 0),
-    FINISH("完成", 1),
-    UN_FINISH("未完成", 2),
-    REMAKE_FINISH("完成(补打卡)", 3);
+    DONE("完成"),
+    UNDONE("未完成");
 
     /**
      * 名称
      */
     private String name;
-
-    /**
-     * 编码
-     */
-    @JsonValue
-    @EnumValue
-    private Integer code;
 }

+ 35 - 0
src/main/java/com/punchsettle/server/constant/PunchInStatusV1Enum.java

@@ -0,0 +1,35 @@
+package com.punchsettle.server.constant;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.punchsettle.server.common.annotation.EnumValue;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description 打卡状态(0-进行中,1-完成,2-未完成,3-补打卡),结算后修改状态,单次打卡除外
+ * @date 2024/11/26 21:59
+ */
+@Getter
+@AllArgsConstructor
+public enum PunchInStatusV1Enum {
+
+    DOING("进行中", 0),
+    FINISH("完成", 1),
+    UN_FINISH("未完成", 2),
+    REMAKE_FINISH("完成(补打卡)", 3);
+
+    /**
+     * 名称
+     */
+    private String name;
+
+    /**
+     * 编码
+     */
+    @JsonValue
+    @EnumValue
+    private Integer code;
+}

+ 25 - 0
src/main/java/com/punchsettle/server/constant/RepeatCategoryEnum.java

@@ -0,0 +1,25 @@
+package com.punchsettle.server.constant;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @date 2025/4/9 12:42
+ * @description 重复周期类型枚举(每日-EVERYDAY、法定工作日-WORKDAY、法定节假日(含周末)-HOLIDAY、自定义(周一至周日)-CUSTOM)
+ */
+@Getter
+@AllArgsConstructor
+public enum RepeatCategoryEnum {
+
+    EVERYDAY("每日"),
+    WORKDAY("法定工作日"),
+    HOLIDAY("法定节假日(含周末)"),
+    CUSTOM("自定义(周一至周日)");
+
+    /**
+     * 名称
+     */
+    private String name;
+}

+ 25 - 0
src/main/java/com/punchsettle/server/constant/SettleStatusEnum.java

@@ -0,0 +1,25 @@
+package com.punchsettle.server.constant;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @date 2025/4/9 12:26
+ * @description 结算状态枚举(未结算-UNSETTLED,宽限期跳过J-GRACE_SKIP,惩罚跳过-PENALTY_SKIP,已结算-SETTLED)
+ */
+@Getter
+@AllArgsConstructor
+public enum SettleStatusEnum {
+
+    UNSETTLED("未结算"),
+    GRACE_SKIP("宽限期跳过"),
+    PENALTY_SKIP("惩罚跳过"),
+    SETTLED("已结算");
+
+    /**
+     * 名称
+     */
+    private String name;
+}

+ 3 - 3
src/main/java/com/punchsettle/server/pojo/punchin/PunchInCalendarDataVO.java

@@ -2,7 +2,7 @@ package com.punchsettle.server.pojo.punchin;
 
 import java.time.LocalTime;
 
-import com.punchsettle.server.constant.PunchInStatusEnum;
+import com.punchsettle.server.constant.PunchInStatusV1Enum;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -44,7 +44,7 @@ public class PunchInCalendarDataVO {
 
     /**
      * 打卡状态(0-进行中,1-完成,2-未完成) ,结算后修改状态,单次打卡除外
-     * @see PunchInStatusEnum
+     * @see PunchInStatusV1Enum
      */
-    private PunchInStatusEnum punchInStatus;
+    private PunchInStatusV1Enum punchInStatus;
 }

+ 3 - 3
src/main/java/com/punchsettle/server/pojo/punchin/PunchInRecordDataVO.java

@@ -3,7 +3,7 @@ package com.punchsettle.server.pojo.punchin;
 import java.time.LocalTime;
 
 import com.punchsettle.server.constant.PunchInCategoryEnum;
-import com.punchsettle.server.constant.PunchInStatusEnum;
+import com.punchsettle.server.constant.PunchInStatusV1Enum;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -35,9 +35,9 @@ public class PunchInRecordDataVO {
 
     /**
      * 打卡状态(0-进行中,1-完成,2-未完成) ,结算后修改状态,单次打卡除外
-     * @see PunchInStatusEnum
+     * @see PunchInStatusV1Enum
      */
-    private PunchInStatusEnum punchInStatus;
+    private PunchInStatusV1Enum punchInStatus;
 
     /**
      * 结算时的打卡类型(0-单次打卡,1-计数、2计时)

+ 14 - 0
src/main/java/com/punchsettle/server/service/manager/IPunchInManager.java

@@ -2,6 +2,11 @@ package com.punchsettle.server.service.manager;
 
 import java.util.List;
 
+import com.punchsettle.server.atomic.entity.PunchIn;
+import com.punchsettle.server.atomic.entity.PunchInStatus;
+import com.punchsettle.server.atomic.entity.PunchInTask;
+import com.punchsettle.server.atomic.entity.PunchInTaskHistory;
+import com.punchsettle.server.constant.PunchInStatusEnum;
 import com.punchsettle.server.pojo.punchin.PunchInDataQuery;
 import com.punchsettle.server.pojo.punchin.PunchInDataVO;
 import com.punchsettle.server.pojo.punchin.PunchInRecordRequest;
@@ -70,4 +75,13 @@ public interface IPunchInManager {
      * @return
      */
     PunchInDataVO queryPunchInData(PunchInDataQuery query);
+
+    /**
+     * 判断打卡状态
+     * @param punchInTask 当前打卡任务
+     * @param punchInTaskHistory 打卡记录
+     * @param holidayFlag 是否是节假日(是-true,否-false)
+     * @return
+     */
+    PunchInStatusEnum judgePunchInStatus(PunchInTask punchInTask, PunchInTaskHistory punchInTaskHistory, boolean holidayFlag);
 }

+ 2 - 2
src/main/java/com/punchsettle/server/service/manager/ISettleManager.java

@@ -6,7 +6,7 @@ import java.util.List;
 import com.punchsettle.server.atomic.entity.PunchIn;
 import com.punchsettle.server.atomic.entity.PunchInRecord;
 import com.punchsettle.server.constant.PunchInSettleTypeEnum;
-import com.punchsettle.server.constant.PunchInStatusEnum;
+import com.punchsettle.server.constant.PunchInStatusV1Enum;
 import com.punchsettle.server.pojo.settle.SettleQuery;
 import com.punchsettle.server.pojo.settle.SettleRequest;
 import com.punchsettle.server.pojo.settle.SettleVO;
@@ -34,7 +34,7 @@ public interface ISettleManager {
      * @param punchInRecord
      * @return PunchInStatusEnum
      */
-    PunchInStatusEnum judgePunchInStatus(PunchIn punchIn, PunchInRecord punchInRecord);
+    PunchInStatusV1Enum judgePunchInStatus(PunchIn punchIn, PunchInRecord punchInRecord);
 
     /**
      * 手动结算

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

@@ -24,13 +24,20 @@ import org.springframework.util.CollectionUtils;
 
 import com.punchsettle.server.atomic.entity.PunchIn;
 import com.punchsettle.server.atomic.entity.PunchInRecord;
+import com.punchsettle.server.atomic.entity.PunchInTask;
+import com.punchsettle.server.atomic.entity.PunchInTaskHistory;
 import com.punchsettle.server.atomic.service.IPunchInRecordService;
 import com.punchsettle.server.atomic.service.IPunchInService;
 import com.punchsettle.server.common.exception.BusinessException;
 import com.punchsettle.server.common.utils.Assert;
+import com.punchsettle.server.constant.CommonStatusEnum;
+import com.punchsettle.server.constant.CompareRuleEnum;
 import com.punchsettle.server.constant.PunchInCategoryEnum;
+import com.punchsettle.server.constant.PunchInMethodEnum;
+import com.punchsettle.server.constant.PunchInRuleEnum;
 import com.punchsettle.server.constant.PunchInSettleTypeEnum;
 import com.punchsettle.server.constant.PunchInStatusEnum;
+import com.punchsettle.server.constant.PunchInStatusV1Enum;
 import com.punchsettle.server.constant.PunchInStatusViewEnum;
 import com.punchsettle.server.pojo.punchin.PunchInCalendarDataVO;
 import com.punchsettle.server.pojo.punchin.PunchInDataQuery;
@@ -143,7 +150,8 @@ public class PunchInManagerImpl implements IPunchInManager {
                 PunchInRecord punchInRecord = weeklyRecordMap.get(weeklyDateStr);
 
                 // 根据过往打卡记录设置打卡状态
-                PunchInStatusViewEnum punchInStatus = judgePunchInStatus(today, weeklyDate, punchInCreationDate, punchIn, punchInRecord);
+                PunchInStatusViewEnum punchInStatus =
+                    judgePunchInStatus(today, weeklyDate, punchInCreationDate, punchIn, punchInRecord);
 
                 // 设置打卡记录
                 PunchInRecordVO punchInRecordVO = new PunchInRecordVO();
@@ -167,7 +175,8 @@ public class PunchInManagerImpl implements IPunchInManager {
         return punchInWithRecordVOS;
     }
 
-    private PunchInStatusViewEnum judgePunchInStatus(LocalDate today, LocalDate weeklyDate, LocalDate punchInCreationDate, PunchIn punchIn, PunchInRecord punchInRecord) {
+    private PunchInStatusViewEnum judgePunchInStatus(LocalDate today, LocalDate weeklyDate,
+        LocalDate punchInCreationDate, PunchIn punchIn, PunchInRecord punchInRecord) {
         // 一周某天还没到,无法打卡
         if (weeklyDate.isAfter(today)) {
             return PunchInStatusViewEnum.FUTURE_TIME;
@@ -180,17 +189,17 @@ public class PunchInManagerImpl implements IPunchInManager {
 
         // 一周某天在今天之前存在打卡记录,则需要判断是否完成打卡
         if (!Objects.isNull(punchInRecord) && weeklyDate.isBefore(today)) {
-            if (PunchInStatusEnum.FINISH.equals(punchInRecord.getPunchInStatus())
-                    ||PunchInStatusEnum.REMAKE_FINISH.equals(punchInRecord.getPunchInStatus())) {
+            if (PunchInStatusV1Enum.FINISH.equals(punchInRecord.getPunchInStatus())
+                || PunchInStatusV1Enum.REMAKE_FINISH.equals(punchInRecord.getPunchInStatus())) {
                 return PunchInStatusViewEnum.PUNCH_IN;
             }
         }
 
         // 一周的某天是今天,且存在打卡记录,则判断是否完成打卡
         if (weeklyDate.isEqual(today) && !Objects.isNull(punchInRecord)) {
-            PunchInStatusEnum punchInStatusEnum = settleManager.judgePunchInStatus(punchIn, punchInRecord);
-            if (PunchInStatusEnum.FINISH.equals(punchInStatusEnum)
-                || PunchInStatusEnum.REMAKE_FINISH.equals(punchInStatusEnum)) {
+            PunchInStatusV1Enum punchInStatusV1Enum = settleManager.judgePunchInStatus(punchIn, punchInRecord);
+            if (PunchInStatusV1Enum.FINISH.equals(punchInStatusV1Enum)
+                || PunchInStatusV1Enum.REMAKE_FINISH.equals(punchInStatusV1Enum)) {
                 return PunchInStatusViewEnum.PUNCH_IN;
             }
             // 当天存在打卡记录,但是还没满足打卡条件,则认为打卡状态未知
@@ -221,12 +230,12 @@ public class PunchInManagerImpl implements IPunchInManager {
         Assert.isNullInBusiness(request, "请传入任务信息");
 
         if (PunchInCategoryEnum.COUNT.equals(request.getCategory())
-                && (Objects.isNull(request.getRule()) || Objects.isNull(request.getCountTrack()))) {
+            && (Objects.isNull(request.getRule()) || Objects.isNull(request.getCountTrack()))) {
             throw BusinessException.fail("打卡类型:计数,比较规则和次数不能为空");
         }
 
         if (PunchInCategoryEnum.TIME.equals(request.getCategory())
-                && (Objects.isNull(request.getRule()) || Objects.isNull(request.getTimeTrack()))) {
+            && (Objects.isNull(request.getRule()) || Objects.isNull(request.getTimeTrack()))) {
             throw BusinessException.fail("打卡类型:计时,比较规则和时间不能为空");
         }
 
@@ -255,7 +264,7 @@ public class PunchInManagerImpl implements IPunchInManager {
         }
 
         PunchIn punchIn = Optional.ofNullable(punchInService.getById(request.getId()))
-                .orElseThrow(() -> BusinessException.fail("无法查询到该打卡任务"));
+            .orElseThrow(() -> BusinessException.fail("无法查询到该打卡任务"));
         if (PunchInCategoryEnum.TIME.equals(punchIn.getCategory()) && Objects.isNull(request.getTimeTrack())) {
             BusinessException.throwFail("打卡类型:计时,请传入时间记录");
         }
@@ -319,36 +328,42 @@ public class PunchInManagerImpl implements IPunchInManager {
         }
 
         // 获取打卡任务
-        PunchIn punchIn = Optional.ofNullable(punchInService.getById(request.getPunchInId())).orElseThrow(() -> BusinessException.fail("无法查询到该打卡任务"));
+        PunchIn punchIn = Optional.ofNullable(punchInService.getById(request.getPunchInId()))
+            .orElseThrow(() -> BusinessException.fail("无法查询到该打卡任务"));
         // 补打卡的打卡日期不能早于打卡任务创建日期
         if (punchInDate.isBefore(punchIn.getCreationTime().toLocalDateTime().toLocalDate())) {
             BusinessException.throwFail("补打卡日期不能早于打卡任务创建日期");
         }
 
-        settleManager.settleHandler(PunchInSettleTypeEnum.REMAKE, punchInDate, Arrays.asList(UserUtils.getCurrentUserId()), Arrays.asList(request.getPunchInId()));
+        settleManager.settleHandler(PunchInSettleTypeEnum.REMAKE, punchInDate,
+            Arrays.asList(UserUtils.getCurrentUserId()), Arrays.asList(request.getPunchInId()));
     }
 
     @Override
     public void revokePunchIn(PunchInRecordRequest request) {
         // 获取打卡任务
-        PunchIn punchIn = Optional.ofNullable(punchInService.getById(request.getPunchInId())).orElseThrow(() -> BusinessException.fail("无法查询到该打卡任务"));
+        PunchIn punchIn = Optional.ofNullable(punchInService.getById(request.getPunchInId()))
+            .orElseThrow(() -> BusinessException.fail("无法查询到该打卡任务"));
 
         PunchInRecordQuery punchInRecordQuery = new PunchInRecordQuery();
         punchInRecordQuery.setPunchInId(request.getPunchInId());
         punchInRecordQuery.setPunchInDate(LocalDate.now().toString());
         PunchInRecord punchInRecord = punchInRecordService.selectOneByCondition(punchInRecordQuery);
         if (Objects.isNull(punchInRecord)) {
-            log.info("打卡任务:{},打卡日期:{} 没有找到当天打卡记录,进行撤销", punchInRecordQuery.getPunchInId(), punchInRecordQuery.getPunchInDate());
+            log.info("打卡任务:{},打卡日期:{} 没有找到当天打卡记录,进行撤销", punchInRecordQuery.getPunchInId(),
+                punchInRecordQuery.getPunchInDate());
             return;
         }
 
         // 单次打卡/计时打卡 直接删除记录即可
-        if (PunchInCategoryEnum.SINGLE.equals(punchIn.getCategory()) || PunchInCategoryEnum.TIME.equals(punchIn.getCategory())) {
+        if (PunchInCategoryEnum.SINGLE.equals(punchIn.getCategory())
+            || PunchInCategoryEnum.TIME.equals(punchIn.getCategory())) {
             punchInRecordService.delete(punchInRecord.getId());
         }
 
         // 计数打卡,需要减去打卡次数
-        if (PunchInCategoryEnum.COUNT.equals(punchIn.getCategory()) && Optional.ofNullable(punchInRecord.getCountTrack()).orElse(0) > 0) {
+        if (PunchInCategoryEnum.COUNT.equals(punchIn.getCategory())
+            && Optional.ofNullable(punchInRecord.getCountTrack()).orElse(0) > 0) {
             PunchInRecord updateRecord = new PunchInRecord();
             updateRecord.setId(punchInRecord.getId());
             updateRecord.setCountTrack(punchInRecord.getCountTrack() - 1);
@@ -361,7 +376,8 @@ public class PunchInManagerImpl implements IPunchInManager {
 
     @Override
     public PunchInDataVO queryPunchInData(PunchInDataQuery query) {
-        PunchIn punchIn = Optional.ofNullable(punchInService.getById(query.getId())).orElseThrow(() -> BusinessException.fail("找到指定的打卡任务"));
+        PunchIn punchIn = Optional.ofNullable(punchInService.getById(query.getId()))
+            .orElseThrow(() -> BusinessException.fail("找到指定的打卡任务"));
 
         SimpleDateFormat sdf = DateUtils.buildDateFormat();
         YearMonth yearMonth = YearMonth.of(query.getYear(), query.getMonth());
@@ -387,8 +403,8 @@ public class PunchInManagerImpl implements IPunchInManager {
             BeanUtils.copyProperties(punchInRecord, punchInRecordDataVO);
             punchInRecordDtoList.add(punchInRecordDataVO);
 
-            if (PunchInStatusEnum.UN_FINISH.equals(punchInRecord.getPunchInStatus())
-                    || PunchInStatusEnum.DOING.equals(punchInRecord.getPunchInStatus())) {
+            if (PunchInStatusV1Enum.UN_FINISH.equals(punchInRecord.getPunchInStatus())
+                || PunchInStatusV1Enum.DOING.equals(punchInRecord.getPunchInStatus())) {
                 continue;
             }
             PunchInCalendarDataVO punchInCalendarDataVO = new PunchInCalendarDataVO();
@@ -401,11 +417,11 @@ public class PunchInManagerImpl implements IPunchInManager {
         // 计算全勤率
         BigDecimal punchInRate = BigDecimal.ZERO;
         // 要考虑任务刚创建的情况,任务较迟创建的话则使用任务创建时间
-        long dayLength = ChronoUnit.DAYS.between(firstOfMonth.isBefore(punchInCreationDate) ? punchInCreationDate : firstOfMonth, LocalDate.now());
+        long dayLength = ChronoUnit.DAYS
+            .between(firstOfMonth.isBefore(punchInCreationDate) ? punchInCreationDate : firstOfMonth, LocalDate.now());
         if (dayLength != 0) {
             punchInRate = BigDecimal.valueOf(punchInCalendarDataVOS.size())
-                    .divide(BigDecimal.valueOf(dayLength), 4, RoundingMode.HALF_DOWN)
-                    .multiply(ONE_HUNDRED);
+                .divide(BigDecimal.valueOf(dayLength), 4, RoundingMode.HALF_DOWN).multiply(ONE_HUNDRED);
         }
 
         // 构造返回结果
@@ -419,4 +435,54 @@ public class PunchInManagerImpl implements IPunchInManager {
 
         return punchInDataVO;
     }
+
+    @Override
+    public PunchInStatusEnum judgePunchInStatus(PunchInTask punchInTask, PunchInTaskHistory punchInTaskHistory, boolean holidayFlag) {
+        Assert.isNullInBusiness(punchInTask, "打卡任务不能为空 ");
+        // 没有打卡记录,直接没完成
+        if (Objects.isNull(punchInTaskHistory)) {
+            return PunchInStatusEnum.UNDONE;
+        }
+
+        // 单次打卡,不区分是否节假日
+        if (PunchInMethodEnum.SINGLE.equals(punchInTask.getPunchInMethod())) {
+            int countTrack = Optional.ofNullable(punchInTask.getCountTrack()).orElse(0);
+            return countTrack > 0 ? PunchInStatusEnum.DONE : PunchInStatusEnum.UNDONE;
+        }
+
+        // 打卡任务的节假日启用配置
+        CommonStatusEnum holidayStatus = Optional.ofNullable(punchInTask.getHolidayStatus()).orElse(CommonStatusEnum.DISABLED);
+        boolean enableHolidayFlag = CommonStatusEnum.ENABLED.equals(holidayStatus) && holidayFlag;
+
+        // 计数打卡,要区分是否节假日使用不同的判断标准
+        if (PunchInMethodEnum.COUNT.equals(punchInTask.getPunchInMethod())) {
+            
+            int countTrackTarget = Optional.ofNullable(enableHolidayFlag ? punchInTask.getHolidayCountTrack() : punchInTask.getCountTrack()).orElse(0);
+            int countTrack = Optional.ofNullable(punchInTaskHistory.getCountTrack()).orElse(0);
+            if (CompareRuleEnum.GTE.equals(punchInTask.getCompareRule()) && )
+            if (PunchInRuleEnum.GREATER_OR_EQUAL.equals(punchIn.getRule()) && recordCountTrack.compareTo(punchIn.getCountTrack()) == -1) {
+                return PunchInStatusV1Enum.UN_FINISH;
+            }
+            if (PunchInRuleEnum.LESS_OR_EQUAL.equals(punchIn.getRule()) && recordCountTrack.compareTo(punchIn.getCountTrack()) == 1) {
+                return PunchInStatusV1Enum.UN_FINISH;
+            }
+
+            return PunchInStatusV1Enum.FINISH;
+        }
+
+        // 计时打卡,要区分是否节假日使用不同的判断标准
+        if (PunchInCategoryEnum.TIME.equals(punchIn.getCategory())) {
+            LocalTime recordTimeTrack = Optional.ofNullable(punchInRecord.getTimeTrack()).orElse(LocalTime.parse("00:00:00.000"));
+            if (PunchInRuleEnum.GREATER_OR_EQUAL.equals(punchIn.getRule()) && recordTimeTrack.compareTo(punchIn.getTimeTrack()) == -1) {
+                return PunchInStatusV1Enum.UN_FINISH;
+            }
+            if (PunchInRuleEnum.LESS_OR_EQUAL.equals(punchIn.getRule()) && recordTimeTrack.compareTo(punchIn.getTimeTrack()) == 1) {
+                return PunchInStatusV1Enum.UN_FINISH;
+            }
+
+            return PunchInStatusV1Enum.FINISH;
+        }
+
+        return PunchInStatusEnum.UNDONE;
+    }
 }

+ 17 - 17
src/main/java/com/punchsettle/server/service/manager/impl/SettleManagerImpl.java

@@ -35,7 +35,7 @@ import com.punchsettle.server.common.utils.Assert;
 import com.punchsettle.server.constant.PunchInCategoryEnum;
 import com.punchsettle.server.constant.PunchInRuleEnum;
 import com.punchsettle.server.constant.PunchInSettleTypeEnum;
-import com.punchsettle.server.constant.PunchInStatusEnum;
+import com.punchsettle.server.constant.PunchInStatusV1Enum;
 import com.punchsettle.server.pojo.punchin.PunchInQuery;
 import com.punchsettle.server.pojo.punchin.PunchInRecordQuery;
 import com.punchsettle.server.pojo.settle.SettleInfoDto;
@@ -251,9 +251,9 @@ public class SettleManagerImpl implements ISettleManager {
                 continue;
             }
             // 判断是否满足打卡规则
-            PunchInStatusEnum punchInStatus = judgePunchInStatus(punchIn, punchInRecord);
+            PunchInStatusV1Enum punchInStatus = judgePunchInStatus(punchIn, punchInRecord);
             // 不是补卡或打卡任务未完成,则跳过
-            if (!PunchInSettleTypeEnum.REMAKE.equals(settleInfo.getSettleType()) && PunchInStatusEnum.UN_FINISH.equals(punchInStatus)) {
+            if (!PunchInSettleTypeEnum.REMAKE.equals(settleInfo.getSettleType()) && PunchInStatusV1Enum.UN_FINISH.equals(punchInStatus)) {
                 PunchInRecord updatePunchInRecord = buildPunchInRecordForSettle(punchIn);
                 updatePunchInRecord.setId(punchInRecord.getId());
                 updatePunchInRecord.setPunchInStatus(punchInStatus);
@@ -266,17 +266,17 @@ public class SettleManagerImpl implements ISettleManager {
                 punchInRecord = buildPunchInRecordForSettle(punchIn);
                 punchInRecord.setPunchInId(punchIn.getId());
                 punchInRecord.setPunchInDate(settleInfo.getSettleDateStr());
-                punchInRecord.setPunchInStatus(PunchInStatusEnum.REMAKE_FINISH);
+                punchInRecord.setPunchInStatus(PunchInStatusV1Enum.REMAKE_FINISH);
                 addPunchInRecords.add(punchInRecord);
             }
 
             // 补打卡,已有打卡记录但是不满足打卡规则,则需要对打卡记录做准备
-            if (PunchInSettleTypeEnum.REMAKE.equals(settleInfo.getSettleType()) && PunchInStatusEnum.UN_FINISH.equals(punchInStatus)) {
+            if (PunchInSettleTypeEnum.REMAKE.equals(settleInfo.getSettleType()) && PunchInStatusV1Enum.UN_FINISH.equals(punchInStatus)) {
                 fillTrack(punchIn, punchInRecord);
             }
 
             // 不是补卡,且打卡状态为完成,需要更新打卡状态为完成
-            if (Objects.isNull(punchInRecord.getPunchInStatus()) || PunchInStatusEnum.DOING.equals(punchInRecord.getPunchInStatus())) {
+            if (Objects.isNull(punchInRecord.getPunchInStatus()) || PunchInStatusV1Enum.DOING.equals(punchInRecord.getPunchInStatus())) {
                 PunchInRecord updatePunchInRecord = buildPunchInRecordForSettle(punchIn);
                 updatePunchInRecord.setId(punchInRecord.getId());
                 updatePunchInRecord.setPunchInStatus(punchInStatus);
@@ -321,44 +321,44 @@ public class SettleManagerImpl implements ISettleManager {
     }
 
     @Override
-    public PunchInStatusEnum judgePunchInStatus(PunchIn punchIn, PunchInRecord punchInRecord) {
+    public PunchInStatusV1Enum judgePunchInStatus(PunchIn punchIn, PunchInRecord punchInRecord) {
         // 没有打卡记录,直接没完成,包含单次打卡的情况无需额外判断
         if (Objects.isNull(punchInRecord)) {
-            return PunchInStatusEnum.UN_FINISH;
+            return PunchInStatusV1Enum.UN_FINISH;
         }
 
         // 单次打卡
         if (PunchInCategoryEnum.SINGLE.equals(punchIn.getCategory())) {
-            return PunchInStatusEnum.FINISH;
+            return PunchInStatusV1Enum.FINISH;
         }
 
         // 计数打卡
         if (PunchInCategoryEnum.COUNT.equals(punchIn.getCategory())) {
             Integer recordCountTrack = Optional.ofNullable(punchInRecord.getCountTrack()).orElse(0);
             if (PunchInRuleEnum.GREATER_OR_EQUAL.equals(punchIn.getRule()) && recordCountTrack.compareTo(punchIn.getCountTrack()) == -1) {
-                return PunchInStatusEnum.UN_FINISH;
+                return PunchInStatusV1Enum.UN_FINISH;
             }
             if (PunchInRuleEnum.LESS_OR_EQUAL.equals(punchIn.getRule()) && recordCountTrack.compareTo(punchIn.getCountTrack()) == 1) {
-                return PunchInStatusEnum.UN_FINISH;
+                return PunchInStatusV1Enum.UN_FINISH;
             }
 
-            return PunchInStatusEnum.FINISH;
+            return PunchInStatusV1Enum.FINISH;
         }
 
         // 计时打卡
         if (PunchInCategoryEnum.TIME.equals(punchIn.getCategory())) {
             LocalTime recordTimeTrack = Optional.ofNullable(punchInRecord.getTimeTrack()).orElse(LocalTime.parse("00:00:00.000"));
             if (PunchInRuleEnum.GREATER_OR_EQUAL.equals(punchIn.getRule()) && recordTimeTrack.compareTo(punchIn.getTimeTrack()) == -1) {
-                return PunchInStatusEnum.UN_FINISH;
+                return PunchInStatusV1Enum.UN_FINISH;
             }
             if (PunchInRuleEnum.LESS_OR_EQUAL.equals(punchIn.getRule()) && recordTimeTrack.compareTo(punchIn.getTimeTrack()) == 1) {
-                return PunchInStatusEnum.UN_FINISH;
+                return PunchInStatusV1Enum.UN_FINISH;
             }
 
-            return PunchInStatusEnum.FINISH;
+            return PunchInStatusV1Enum.FINISH;
         }
 
-        return PunchInStatusEnum.UN_FINISH;
+        return PunchInStatusV1Enum.UN_FINISH;
     }
 
     /**
@@ -408,7 +408,7 @@ public class SettleManagerImpl implements ISettleManager {
 
         // 获取一周的完成打卡的打卡记录,并且要排除结算日这天的记录
         List<PunchInRecord> weeklyFinishRecord = Optional.ofNullable(weeklyPunchInRecordMap.get(punchIn.getId())).orElse(new ArrayList<>())
-                .stream().filter(record -> !settleInfo.getSettleDateStr().equals(record.getPunchInDate()) && (PunchInStatusEnum.FINISH.equals(record.getPunchInStatus()) || PunchInStatusEnum.REMAKE_FINISH.equals(record.getPunchInStatus())))
+                .stream().filter(record -> !settleInfo.getSettleDateStr().equals(record.getPunchInDate()) && (PunchInStatusV1Enum.FINISH.equals(record.getPunchInStatus()) || PunchInStatusV1Enum.REMAKE_FINISH.equals(record.getPunchInStatus())))
                 .collect(Collectors.toList());
 
         // 1个是容错允许不打卡或未完成打卡,1个是当天的结算打卡来到这段逻辑就认为已经完成打卡,因此只要有5个完成打卡,则认为全勤