From 8eac708bacb8f5d76d7b7a62b44880dbc09ef1d2 Mon Sep 17 00:00:00 2001
From: Joshi <3040996759@qq.com>
Date: Tue, 12 May 2026 15:04:00 +0800
Subject: [PATCH 1/6] =?UTF-8?q?feat(attendance):=20=E5=80=92=E7=8F=AD?=
=?UTF-8?q?=E9=80=BB=E8=BE=91=E9=87=8D=E6=9E=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 在WmsAttendanceScheduleMapper.xml中新增shiftStartTime2和shiftEndTime2字段映射
- 修改SQL查询语句以包含新的时间段字段
- 更新WmsAttendanceScheduleVo类添加shiftStartTime2和shiftEndTime2属性
- 修复倒班逻辑计算方式,调整周期天数判断条件
- 注释掉连续两天排班的相关业务逻辑
---
.../domain/vo/WmsAttendanceScheduleVo.java | 13 +++++++
.../WmsAttendanceScheduleServiceImpl.java | 37 ++++++++++---------
.../klp/WmsAttendanceScheduleMapper.xml | 4 +-
3 files changed, 35 insertions(+), 19 deletions(-)
diff --git a/klp-wms/src/main/java/com/klp/domain/vo/WmsAttendanceScheduleVo.java b/klp-wms/src/main/java/com/klp/domain/vo/WmsAttendanceScheduleVo.java
index 111f06d9..07c332d7 100644
--- a/klp-wms/src/main/java/com/klp/domain/vo/WmsAttendanceScheduleVo.java
+++ b/klp-wms/src/main/java/com/klp/domain/vo/WmsAttendanceScheduleVo.java
@@ -102,6 +102,19 @@ public class WmsAttendanceScheduleVo {
@ExcelProperty(value = "结束时间")
private java.util.Date shiftEndTime;
+ /**
+ * 班次开始时间2
+ */
+ @JsonFormat(pattern = "HH:mm")
+ @ExcelProperty(value = "开始时间2")
+ private java.util.Date shiftStartTime2;
+
+ /**
+ * 班次结束时间2
+ */
+ @JsonFormat(pattern = "HH:mm")
+ @ExcelProperty(value = "结束时间2")
+ private java.util.Date shiftEndTime2;
/**
* 工时
*/
diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceScheduleServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceScheduleServiceImpl.java
index 513cb453..8ceb4a8c 100644
--- a/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceScheduleServiceImpl.java
+++ b/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceScheduleServiceImpl.java
@@ -228,7 +228,8 @@ public class WmsAttendanceScheduleServiceImpl implements IWmsAttendanceScheduleS
// 判断是否为倒班日
long cycleDays = rule.getCycleDays() != null ? rule.getCycleDays() : 10;
- boolean isChangeDay = (daysFromStart + 1) % cycleDays == 0;
+ // boolean isChangeDay = (daysFromStart + 1) % cycleDays == 0;
+ boolean isChangeDay = daysFromStart > 0 && daysFromStart % cycleDays == 0;
if (isChangeDay) {
// 倒班日
@@ -241,24 +242,24 @@ public class WmsAttendanceScheduleServiceImpl implements IWmsAttendanceScheduleS
schedule.setShiftId(rule.getShiftB());
schedule.setShiftName(shiftB.getShiftName());
}
- // 下一天也使用倒班班次(工作18小时)
- LocalDate nextDay = currentDate.plusDays(1);
- if (!nextDay.isAfter(endDate) && !isScheduleExists(bo.getUserId(), nextDay)) {
- WmsAttendanceSchedule nextSchedule = new WmsAttendanceSchedule();
- nextSchedule.setUserId(bo.getUserId());
- nextSchedule.setWorkDate(java.sql.Date.valueOf(nextDay));
- if (changeShiftB != null) {
- nextSchedule.setShiftId(rule.getChangeShiftBId());
- nextSchedule.setShiftName(changeShiftB.getShiftName());
- } else {
- nextSchedule.setShiftId(rule.getShiftB());
- nextSchedule.setShiftName(shiftB.getShiftName());
- }
- schedules.add(nextSchedule);
- }
+// // 下一天也使用倒班班次(工作18小时)
+// LocalDate nextDay = currentDate.plusDays(1);
+// if (!nextDay.isAfter(endDate) && !isScheduleExists(bo.getUserId(), nextDay)) {
+// WmsAttendanceSchedule nextSchedule = new WmsAttendanceSchedule();
+// nextSchedule.setUserId(bo.getUserId());
+// nextSchedule.setWorkDate(java.sql.Date.valueOf(nextDay));
+// if (changeShiftB != null) {
+// nextSchedule.setShiftId(rule.getChangeShiftBId());
+// nextSchedule.setShiftName(changeShiftB.getShiftName());
+// } else {
+// nextSchedule.setShiftId(rule.getShiftB());
+// nextSchedule.setShiftName(shiftB.getShiftName());
+// }
+// schedules.add(nextSchedule);
+// }
isCurrentShiftA = false;
- currentDate = currentDate.plusDays(1); // 跳过下一天,因为已经处理了
- daysFromStart++;
+// currentDate = currentDate.plusDays(1); // 跳过下一天,因为已经处理了
+// daysFromStart++;
} else {
// 夜班转白班
if (changeShiftA != null) {
diff --git a/klp-wms/src/main/resources/mapper/klp/WmsAttendanceScheduleMapper.xml b/klp-wms/src/main/resources/mapper/klp/WmsAttendanceScheduleMapper.xml
index 52697c62..af0145d2 100644
--- a/klp-wms/src/main/resources/mapper/klp/WmsAttendanceScheduleMapper.xml
+++ b/klp-wms/src/main/resources/mapper/klp/WmsAttendanceScheduleMapper.xml
@@ -33,13 +33,15 @@
+
+
SELECT s.schedule_id, s.user_id, s.work_date, s.shift_id, s.shift_name, s.shift_group, s.remark,
e.name as employee_name, e.dept as employee_dept, e.job_type as employee_job_type,
- sh.shift_type, sh.start_time as shift_start_time, sh.end_time as shift_end_time, sh.work_hours
+ sh.shift_type, sh.start_time as shift_start_time, sh.end_time as shift_end_time, sh.start_time2 as shift_start_time2, sh.end_time2 as shift_end_time2, sh.work_hours
FROM wms_attendance_schedule s
LEFT JOIN wms_employee_info e ON s.user_id = e.info_id AND e.del_flag = 0
LEFT JOIN wms_attendance_shift sh ON s.shift_id = sh.shift_id AND sh.del_flag = 0
From a314e05e4d80dea31b503175e5c4cf493fc757b9 Mon Sep 17 00:00:00 2001
From: Joshi <3040996759@qq.com>
Date: Tue, 12 May 2026 15:15:08 +0800
Subject: [PATCH 2/6] =?UTF-8?q?feat(schedule):=20=E4=BF=AE=E6=94=B9?=
=?UTF-8?q?=E6=8E=92=E7=8F=AD=E7=94=9F=E6=88=90=E5=8A=9F=E8=83=BD=E6=94=AF?=
=?UTF-8?q?=E6=8C=81=E6=89=B9=E9=87=8F=E5=A4=84=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 将 IWmsAttendanceScheduleService.generateSchedule 方法参数改为 List 类型
- 更新 WmsAttendanceScheduleController 中的 generateSchedule 接口接收批量数据
- 在 WmsAttendanceScheduleServiceImpl 中实现循环处理多个排班生成请求
- 保持原有的单个排班生成逻辑不变,通过遍历列表实现批量功能
---
.../WmsAttendanceScheduleController.java | 4 +--
.../IWmsAttendanceScheduleService.java | 2 +-
.../WmsAttendanceScheduleServiceImpl.java | 26 ++++++++++---------
3 files changed, 17 insertions(+), 15 deletions(-)
diff --git a/klp-wms/src/main/java/com/klp/controller/WmsAttendanceScheduleController.java b/klp-wms/src/main/java/com/klp/controller/WmsAttendanceScheduleController.java
index a40b16e5..3963152c 100644
--- a/klp-wms/src/main/java/com/klp/controller/WmsAttendanceScheduleController.java
+++ b/klp-wms/src/main/java/com/klp/controller/WmsAttendanceScheduleController.java
@@ -103,8 +103,8 @@ public class WmsAttendanceScheduleController extends BaseController {
*/
@Log(title = "生成排班", businessType = BusinessType.INSERT)
@PostMapping("/generate")
- public R generateSchedule(@Validated @RequestBody GenerateScheduleBo bo) {
- iWmsAttendanceScheduleService.generateSchedule(bo);
+ public R generateSchedule(@Validated @RequestBody List boList) {
+ iWmsAttendanceScheduleService.generateSchedule(boList);
return R.ok();
}
}
diff --git a/klp-wms/src/main/java/com/klp/service/IWmsAttendanceScheduleService.java b/klp-wms/src/main/java/com/klp/service/IWmsAttendanceScheduleService.java
index b7a383fe..8483d9f7 100644
--- a/klp-wms/src/main/java/com/klp/service/IWmsAttendanceScheduleService.java
+++ b/klp-wms/src/main/java/com/klp/service/IWmsAttendanceScheduleService.java
@@ -51,5 +51,5 @@ public interface IWmsAttendanceScheduleService {
/**
* 生成排班
*/
- void generateSchedule(GenerateScheduleBo bo);
+ void generateSchedule(List boList);
}
diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceScheduleServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceScheduleServiceImpl.java
index 8ceb4a8c..353a70aa 100644
--- a/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceScheduleServiceImpl.java
+++ b/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceScheduleServiceImpl.java
@@ -134,20 +134,22 @@ public class WmsAttendanceScheduleServiceImpl implements IWmsAttendanceScheduleS
*/
@Override
@Transactional(rollbackFor = Exception.class)
- public void generateSchedule(GenerateScheduleBo bo) {
- LocalDate startDate = bo.getStartDate().toInstant().atZone(java.time.ZoneId.systemDefault()).toLocalDate();
- LocalDate endDate = bo.getEndDate().toInstant().atZone(java.time.ZoneId.systemDefault()).toLocalDate();
+ public void generateSchedule(List boList) {
+ for (GenerateScheduleBo bo : boList) {
+ LocalDate startDate = bo.getStartDate().toInstant().atZone(java.time.ZoneId.systemDefault()).toLocalDate();
+ LocalDate endDate = bo.getEndDate().toInstant().atZone(java.time.ZoneId.systemDefault()).toLocalDate();
- if (startDate.isAfter(endDate)) {
- throw new RuntimeException("开始时间不能大于结束时间");
- }
+ if (startDate.isAfter(endDate)) {
+ throw new RuntimeException("开始时间不能大于结束时间");
+ }
- if (bo.getRuleId() == null) {
- // 正常排班,不倒班
- generateNormalSchedule(bo, startDate, endDate);
- } else {
- // 倒班排班
- generateShiftSchedule(bo, startDate, endDate);
+ if (bo.getRuleId() == null) {
+ // 正常排班,不倒班
+ generateNormalSchedule(bo, startDate, endDate);
+ } else {
+ // 倒班排班
+ generateShiftSchedule(bo, startDate, endDate);
+ }
}
}
From d833bbd7fbb44d9bd24ca5765376c7a53f7eaa3d Mon Sep 17 00:00:00 2001
From: Joshi <3040996759@qq.com>
Date: Tue, 12 May 2026 15:23:47 +0800
Subject: [PATCH 3/6] =?UTF-8?q?refactor(WmsAttendanceScheduleService):=20?=
=?UTF-8?q?=E4=BC=98=E5=8C=96=E6=89=B9=E9=87=8F=E6=8F=92=E5=85=A5=E9=80=BB?=
=?UTF-8?q?=E8=BE=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 将循环单条插入改为批量插入方法
- 添加批量插入失败异常处理
- 提升批量插入性能和错误处理能力
---
.../klp/service/impl/WmsAttendanceScheduleServiceImpl.java | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceScheduleServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceScheduleServiceImpl.java
index 353a70aa..af1e48bf 100644
--- a/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceScheduleServiceImpl.java
+++ b/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceScheduleServiceImpl.java
@@ -292,8 +292,9 @@ public class WmsAttendanceScheduleServiceImpl implements IWmsAttendanceScheduleS
// 批量插入
if (!schedules.isEmpty()) {
- for (WmsAttendanceSchedule schedule : schedules) {
- baseMapper.insert(schedule);
+ boolean i = baseMapper.insertBatch(schedules);
+ if (!i) {
+ throw new RuntimeException("批量插入倒班排班失败");
}
}
}
From 736b786ff934dc659047ac873dbfc4296241ebb5 Mon Sep 17 00:00:00 2001
From: Joshi <3040996759@qq.com>
Date: Tue, 12 May 2026 15:55:41 +0800
Subject: [PATCH 4/6] =?UTF-8?q?feat(wms):=20=E6=B7=BB=E5=8A=A0=E8=80=83?=
=?UTF-8?q?=E5=8B=A4=E8=A7=84=E5=88=99=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 创建考勤规则实体类WmsAttendanceRule,包含迟到、早退、旷工相关配置字段
- 实现考勤规则业务对象WmsAttendanceRuleBo和视图对象WmsAttendanceRuleVo
- 开发考勤规则服务接口IWmsAttendanceRuleService及其实现类
- 构建考勤规则控制器WmsAttendanceRuleController,提供增删改查API
- 配置考勤规则数据访问层WmsAttendanceRuleMapper及对应的XML映射文件
- 实现考勤规则列表查询、详情获取、新增修改、删除导出等功能
- 添加数据验证、分页查询、Excel导出等基础功能支持
---
.../WmsAttendanceRuleController.java | 99 +++++++++++++++
.../com/klp/domain/WmsAttendanceRule.java | 66 ++++++++++
.../klp/domain/bo/WmsAttendanceRuleBo.java | 67 ++++++++++
.../klp/domain/vo/WmsAttendanceRuleVo.java | 83 +++++++++++++
.../klp/mapper/WmsAttendanceRuleMapper.java | 15 +++
.../service/IWmsAttendanceRuleService.java | 49 ++++++++
.../impl/WmsAttendanceRuleServiceImpl.java | 114 ++++++++++++++++++
.../mapper/klp/WmsAttendanceRuleMapper.xml | 25 ++++
8 files changed, 518 insertions(+)
create mode 100644 klp-wms/src/main/java/com/klp/controller/WmsAttendanceRuleController.java
create mode 100644 klp-wms/src/main/java/com/klp/domain/WmsAttendanceRule.java
create mode 100644 klp-wms/src/main/java/com/klp/domain/bo/WmsAttendanceRuleBo.java
create mode 100644 klp-wms/src/main/java/com/klp/domain/vo/WmsAttendanceRuleVo.java
create mode 100644 klp-wms/src/main/java/com/klp/mapper/WmsAttendanceRuleMapper.java
create mode 100644 klp-wms/src/main/java/com/klp/service/IWmsAttendanceRuleService.java
create mode 100644 klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceRuleServiceImpl.java
create mode 100644 klp-wms/src/main/resources/mapper/klp/WmsAttendanceRuleMapper.xml
diff --git a/klp-wms/src/main/java/com/klp/controller/WmsAttendanceRuleController.java b/klp-wms/src/main/java/com/klp/controller/WmsAttendanceRuleController.java
new file mode 100644
index 00000000..2b5f4e53
--- /dev/null
+++ b/klp-wms/src/main/java/com/klp/controller/WmsAttendanceRuleController.java
@@ -0,0 +1,99 @@
+package com.klp.controller;
+
+import java.util.List;
+import java.util.Arrays;
+
+import lombok.RequiredArgsConstructor;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.constraints.*;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import com.klp.common.annotation.RepeatSubmit;
+import com.klp.common.annotation.Log;
+import com.klp.common.core.controller.BaseController;
+import com.klp.common.core.domain.PageQuery;
+import com.klp.common.core.domain.R;
+import com.klp.common.core.validate.AddGroup;
+import com.klp.common.core.validate.EditGroup;
+import com.klp.common.enums.BusinessType;
+import com.klp.common.utils.poi.ExcelUtil;
+import com.klp.domain.vo.WmsAttendanceRuleVo;
+import com.klp.domain.bo.WmsAttendanceRuleBo;
+import com.klp.service.IWmsAttendanceRuleService;
+import com.klp.common.core.page.TableDataInfo;
+
+/**
+ * 考勤规则(迟到/早退/旷工规则配置)
+ *
+ * @author klp
+ * @date 2026-05-12
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/wms/attendanceRule")
+public class WmsAttendanceRuleController extends BaseController {
+
+ private final IWmsAttendanceRuleService iWmsAttendanceRuleService;
+
+ /**
+ * 查询考勤规则(迟到/早退/旷工规则配置)列表
+ */
+ @GetMapping("/list")
+ public TableDataInfo list(WmsAttendanceRuleBo bo, PageQuery pageQuery) {
+ return iWmsAttendanceRuleService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出考勤规则(迟到/早退/旷工规则配置)列表
+ */
+ @Log(title = "考勤规则(迟到/早退/旷工规则配置)", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(WmsAttendanceRuleBo bo, HttpServletResponse response) {
+ List list = iWmsAttendanceRuleService.queryList(bo);
+ ExcelUtil.exportExcel(list, "考勤规则(迟到/早退/旷工规则配置)", WmsAttendanceRuleVo.class, response);
+ }
+
+ /**
+ * 获取考勤规则(迟到/早退/旷工规则配置)详细信息
+ *
+ * @param ruleId 主键
+ */
+ @GetMapping("/{ruleId}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable Long ruleId) {
+ return R.ok(iWmsAttendanceRuleService.queryById(ruleId));
+ }
+
+ /**
+ * 新增考勤规则(迟到/早退/旷工规则配置)
+ */
+ @Log(title = "考勤规则(迟到/早退/旷工规则配置)", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody WmsAttendanceRuleBo bo) {
+ return toAjax(iWmsAttendanceRuleService.insertByBo(bo));
+ }
+
+ /**
+ * 修改考勤规则(迟到/早退/旷工规则配置)
+ */
+ @Log(title = "考勤规则(迟到/早退/旷工规则配置)", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody WmsAttendanceRuleBo bo) {
+ return toAjax(iWmsAttendanceRuleService.updateByBo(bo));
+ }
+
+ /**
+ * 删除考勤规则(迟到/早退/旷工规则配置)
+ *
+ * @param ruleIds 主键串
+ */
+ @Log(title = "考勤规则(迟到/早退/旷工规则配置)", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ruleIds}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable Long[] ruleIds) {
+ return toAjax(iWmsAttendanceRuleService.deleteWithValidByIds(Arrays.asList(ruleIds), true));
+ }
+}
diff --git a/klp-wms/src/main/java/com/klp/domain/WmsAttendanceRule.java b/klp-wms/src/main/java/com/klp/domain/WmsAttendanceRule.java
new file mode 100644
index 00000000..1062ea88
--- /dev/null
+++ b/klp-wms/src/main/java/com/klp/domain/WmsAttendanceRule.java
@@ -0,0 +1,66 @@
+package com.klp.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.klp.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+
+/**
+ * 考勤规则(迟到/早退/旷工规则配置)对象 wms_attendance_rule
+ *
+ * @author klp
+ * @date 2026-05-12
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("wms_attendance_rule")
+public class WmsAttendanceRule extends BaseEntity {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ * 主键ID
+ */
+ @TableId(value = "rule_id")
+ private Long ruleId;
+ /**
+ * 迟到警告阈值(分钟内仅警告,不扣款)
+ */
+ private Long lateWarn;
+ /**
+ * 迟到一级阈值(分钟)
+ */
+ private Long late1;
+ /**
+ * 迟到二级阈值(分钟)
+ */
+ private Long late2;
+ /**
+ * 迟到一级扣款(元/次)
+ */
+ private BigDecimal deduct1;
+ /**
+ * 迟到二级扣款(元/次)
+ */
+ private BigDecimal deduct2;
+ /**
+ * 超过多少分钟按旷工半天处理
+ */
+ private Long absentHalfDay;
+ /**
+ * 连续旷工多少天自动离职
+ */
+ private Long continuousAbsentDays;
+ /**
+ * 备注
+ */
+ private String remark;
+ /**
+ * 删除标记(0正常 1删除)
+ */
+ @TableLogic
+ private Long delFlag;
+
+}
diff --git a/klp-wms/src/main/java/com/klp/domain/bo/WmsAttendanceRuleBo.java b/klp-wms/src/main/java/com/klp/domain/bo/WmsAttendanceRuleBo.java
new file mode 100644
index 00000000..0ba75cc1
--- /dev/null
+++ b/klp-wms/src/main/java/com/klp/domain/bo/WmsAttendanceRuleBo.java
@@ -0,0 +1,67 @@
+package com.klp.domain.bo;
+
+import com.klp.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import javax.validation.constraints.*;
+
+import java.math.BigDecimal;
+
+/**
+ * 考勤规则(迟到/早退/旷工规则配置)业务对象 wms_attendance_rule
+ *
+ * @author klp
+ * @date 2026-05-12
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class WmsAttendanceRuleBo extends BaseEntity {
+
+ /**
+ * 主键ID
+ */
+ private Long ruleId;
+
+ /**
+ * 迟到警告阈值(分钟内仅警告,不扣款)
+ */
+ private Long lateWarn;
+
+ /**
+ * 迟到一级阈值(分钟)
+ */
+ private Long late1;
+
+ /**
+ * 迟到二级阈值(分钟)
+ */
+ private Long late2;
+
+ /**
+ * 迟到一级扣款(元/次)
+ */
+ private BigDecimal deduct1;
+
+ /**
+ * 迟到二级扣款(元/次)
+ */
+ private BigDecimal deduct2;
+
+ /**
+ * 超过多少分钟按旷工半天处理
+ */
+ private Long absentHalfDay;
+
+ /**
+ * 连续旷工多少天自动离职
+ */
+ private Long continuousAbsentDays;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+}
diff --git a/klp-wms/src/main/java/com/klp/domain/vo/WmsAttendanceRuleVo.java b/klp-wms/src/main/java/com/klp/domain/vo/WmsAttendanceRuleVo.java
new file mode 100644
index 00000000..5d7a73d7
--- /dev/null
+++ b/klp-wms/src/main/java/com/klp/domain/vo/WmsAttendanceRuleVo.java
@@ -0,0 +1,83 @@
+package com.klp.domain.vo;
+
+import java.math.BigDecimal;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.klp.common.annotation.ExcelDictFormat;
+import com.klp.common.convert.ExcelDictConvert;
+import lombok.Data;
+
+
+/**
+ * 考勤规则(迟到/早退/旷工规则配置)视图对象 wms_attendance_rule
+ *
+ * @author klp
+ * @date 2026-05-12
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class WmsAttendanceRuleVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键ID
+ */
+ @ExcelProperty(value = "主键ID")
+ private Long ruleId;
+
+ /**
+ * 迟到警告阈值(分钟内仅警告,不扣款)
+ */
+ @ExcelProperty(value = "迟到警告阈值", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(readConverterExp = "分=钟内仅警告,不扣款")
+ private Long lateWarn;
+
+ /**
+ * 迟到一级阈值(分钟)
+ */
+ @ExcelProperty(value = "迟到一级阈值", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(readConverterExp = "分=钟")
+ private Long late1;
+
+ /**
+ * 迟到二级阈值(分钟)
+ */
+ @ExcelProperty(value = "迟到二级阈值", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(readConverterExp = "分=钟")
+ private Long late2;
+
+ /**
+ * 迟到一级扣款(元/次)
+ */
+ @ExcelProperty(value = "迟到一级扣款", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(readConverterExp = "元=/次")
+ private BigDecimal deduct1;
+
+ /**
+ * 迟到二级扣款(元/次)
+ */
+ @ExcelProperty(value = "迟到二级扣款", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(readConverterExp = "元=/次")
+ private BigDecimal deduct2;
+
+ /**
+ * 超过多少分钟按旷工半天处理
+ */
+ @ExcelProperty(value = "超过多少分钟按旷工半天处理")
+ private Long absentHalfDay;
+
+ /**
+ * 连续旷工多少天自动离职
+ */
+ @ExcelProperty(value = "连续旷工多少天自动离职")
+ private Long continuousAbsentDays;
+
+ /**
+ * 备注
+ */
+ @ExcelProperty(value = "备注")
+ private String remark;
+
+
+}
diff --git a/klp-wms/src/main/java/com/klp/mapper/WmsAttendanceRuleMapper.java b/klp-wms/src/main/java/com/klp/mapper/WmsAttendanceRuleMapper.java
new file mode 100644
index 00000000..6c4d884c
--- /dev/null
+++ b/klp-wms/src/main/java/com/klp/mapper/WmsAttendanceRuleMapper.java
@@ -0,0 +1,15 @@
+package com.klp.mapper;
+
+import com.klp.domain.WmsAttendanceRule;
+import com.klp.domain.vo.WmsAttendanceRuleVo;
+import com.klp.common.core.mapper.BaseMapperPlus;
+
+/**
+ * 考勤规则(迟到/早退/旷工规则配置)Mapper接口
+ *
+ * @author klp
+ * @date 2026-05-12
+ */
+public interface WmsAttendanceRuleMapper extends BaseMapperPlus {
+
+}
diff --git a/klp-wms/src/main/java/com/klp/service/IWmsAttendanceRuleService.java b/klp-wms/src/main/java/com/klp/service/IWmsAttendanceRuleService.java
new file mode 100644
index 00000000..e7f3a6e9
--- /dev/null
+++ b/klp-wms/src/main/java/com/klp/service/IWmsAttendanceRuleService.java
@@ -0,0 +1,49 @@
+package com.klp.service;
+
+import com.klp.domain.WmsAttendanceRule;
+import com.klp.domain.vo.WmsAttendanceRuleVo;
+import com.klp.domain.bo.WmsAttendanceRuleBo;
+import com.klp.common.core.page.TableDataInfo;
+import com.klp.common.core.domain.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 考勤规则(迟到/早退/旷工规则配置)Service接口
+ *
+ * @author klp
+ * @date 2026-05-12
+ */
+public interface IWmsAttendanceRuleService {
+
+ /**
+ * 查询考勤规则(迟到/早退/旷工规则配置)
+ */
+ WmsAttendanceRuleVo queryById(Long ruleId);
+
+ /**
+ * 查询考勤规则(迟到/早退/旷工规则配置)列表
+ */
+ TableDataInfo queryPageList(WmsAttendanceRuleBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询考勤规则(迟到/早退/旷工规则配置)列表
+ */
+ List queryList(WmsAttendanceRuleBo bo);
+
+ /**
+ * 新增考勤规则(迟到/早退/旷工规则配置)
+ */
+ Boolean insertByBo(WmsAttendanceRuleBo bo);
+
+ /**
+ * 修改考勤规则(迟到/早退/旷工规则配置)
+ */
+ Boolean updateByBo(WmsAttendanceRuleBo bo);
+
+ /**
+ * 校验并批量删除考勤规则(迟到/早退/旷工规则配置)信息
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceRuleServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceRuleServiceImpl.java
new file mode 100644
index 00000000..abf822ca
--- /dev/null
+++ b/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceRuleServiceImpl.java
@@ -0,0 +1,114 @@
+package com.klp.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.klp.common.core.page.TableDataInfo;
+import com.klp.common.core.domain.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import com.klp.domain.bo.WmsAttendanceRuleBo;
+import com.klp.domain.vo.WmsAttendanceRuleVo;
+import com.klp.domain.WmsAttendanceRule;
+import com.klp.mapper.WmsAttendanceRuleMapper;
+import com.klp.service.IWmsAttendanceRuleService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 考勤规则(迟到/早退/旷工规则配置)Service业务层处理
+ *
+ * @author klp
+ * @date 2026-05-12
+ */
+@RequiredArgsConstructor
+@Service
+public class WmsAttendanceRuleServiceImpl implements IWmsAttendanceRuleService {
+
+ private final WmsAttendanceRuleMapper baseMapper;
+
+ /**
+ * 查询考勤规则(迟到/早退/旷工规则配置)
+ */
+ @Override
+ public WmsAttendanceRuleVo queryById(Long ruleId){
+ return baseMapper.selectVoById(ruleId);
+ }
+
+ /**
+ * 查询考勤规则(迟到/早退/旷工规则配置)列表
+ */
+ @Override
+ public TableDataInfo queryPageList(WmsAttendanceRuleBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询考勤规则(迟到/早退/旷工规则配置)列表
+ */
+ @Override
+ public List queryList(WmsAttendanceRuleBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(WmsAttendanceRuleBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.eq(bo.getLateWarn() != null, WmsAttendanceRule::getLateWarn, bo.getLateWarn());
+ lqw.eq(bo.getLate1() != null, WmsAttendanceRule::getLate1, bo.getLate1());
+ lqw.eq(bo.getLate2() != null, WmsAttendanceRule::getLate2, bo.getLate2());
+ lqw.eq(bo.getDeduct1() != null, WmsAttendanceRule::getDeduct1, bo.getDeduct1());
+ lqw.eq(bo.getDeduct2() != null, WmsAttendanceRule::getDeduct2, bo.getDeduct2());
+ lqw.eq(bo.getAbsentHalfDay() != null, WmsAttendanceRule::getAbsentHalfDay, bo.getAbsentHalfDay());
+ lqw.eq(bo.getContinuousAbsentDays() != null, WmsAttendanceRule::getContinuousAbsentDays, bo.getContinuousAbsentDays());
+ return lqw;
+ }
+
+ /**
+ * 新增考勤规则(迟到/早退/旷工规则配置)
+ */
+ @Override
+ public Boolean insertByBo(WmsAttendanceRuleBo bo) {
+ WmsAttendanceRule add = BeanUtil.toBean(bo, WmsAttendanceRule.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setRuleId(add.getRuleId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改考勤规则(迟到/早退/旷工规则配置)
+ */
+ @Override
+ public Boolean updateByBo(WmsAttendanceRuleBo bo) {
+ WmsAttendanceRule update = BeanUtil.toBean(bo, WmsAttendanceRule.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(WmsAttendanceRule entity){
+ //TODO 做一些数据校验,如唯一约束
+ }
+
+ /**
+ * 批量删除考勤规则(迟到/早退/旷工规则配置)
+ */
+ @Override
+ public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
+ if(isValid){
+ //TODO 做一些业务上的校验,判断是否需要校验
+ }
+ return baseMapper.deleteBatchIds(ids) > 0;
+ }
+}
diff --git a/klp-wms/src/main/resources/mapper/klp/WmsAttendanceRuleMapper.xml b/klp-wms/src/main/resources/mapper/klp/WmsAttendanceRuleMapper.xml
new file mode 100644
index 00000000..57d4b5c9
--- /dev/null
+++ b/klp-wms/src/main/resources/mapper/klp/WmsAttendanceRuleMapper.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From 693de2ad5e690ba85657b72650f9227063435100 Mon Sep 17 00:00:00 2001
From: Joshi <3040996759@qq.com>
Date: Tue, 12 May 2026 16:29:54 +0800
Subject: [PATCH 5/6] =?UTF-8?q?feat(wms):=20=E6=96=B0=E5=A2=9E=E8=80=83?=
=?UTF-8?q?=E5=8B=A4=E6=AF=94=E5=AF=B9=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 创建 AttendanceCheckBo 数据传输对象用于考勤比对参数传递
- 定义 IWmsAttendanceCheckService 接口及其实现类
- 创建 WmsAttendanceCheck 实体类存储考勤比对结果数据
- 开发 WmsAttendanceCheckController 提供考勤比对接口
- 实现考勤比对核心逻辑,支持上下班时间段考勤检查
- 集成打卡记录查询和考勤规则应用功能
- 添加考勤状态判断和扣款计算逻辑
- 实现连续旷工天数统计功能
- 创建考勤比对结果的增删改查接口
- 配置 MyBatis 映射文件和 Excel 导出功能
---
.../WmsAttendanceCheckController.java | 58 +++
.../com/klp/domain/WmsAttendanceCheck.java | 54 +++
.../com/klp/domain/bo/AttendanceCheckBo.java | 19 +
.../klp/domain/bo/WmsAttendanceCheckBo.java | 20 +
.../klp/domain/vo/WmsAttendanceCheckVo.java | 71 ++++
.../klp/mapper/WmsAttendanceCheckMapper.java | 8 +
.../service/IWmsAttendanceCheckService.java | 23 +
.../impl/WmsAttendanceCheckServiceImpl.java | 398 ++++++++++++++++++
.../mapper/klp/WmsAttendanceCheckMapper.xml | 44 ++
9 files changed, 695 insertions(+)
create mode 100644 klp-wms/src/main/java/com/klp/controller/WmsAttendanceCheckController.java
create mode 100644 klp-wms/src/main/java/com/klp/domain/WmsAttendanceCheck.java
create mode 100644 klp-wms/src/main/java/com/klp/domain/bo/AttendanceCheckBo.java
create mode 100644 klp-wms/src/main/java/com/klp/domain/bo/WmsAttendanceCheckBo.java
create mode 100644 klp-wms/src/main/java/com/klp/domain/vo/WmsAttendanceCheckVo.java
create mode 100644 klp-wms/src/main/java/com/klp/mapper/WmsAttendanceCheckMapper.java
create mode 100644 klp-wms/src/main/java/com/klp/service/IWmsAttendanceCheckService.java
create mode 100644 klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceCheckServiceImpl.java
create mode 100644 klp-wms/src/main/resources/mapper/klp/WmsAttendanceCheckMapper.xml
diff --git a/klp-wms/src/main/java/com/klp/controller/WmsAttendanceCheckController.java b/klp-wms/src/main/java/com/klp/controller/WmsAttendanceCheckController.java
new file mode 100644
index 00000000..bce2b9b0
--- /dev/null
+++ b/klp-wms/src/main/java/com/klp/controller/WmsAttendanceCheckController.java
@@ -0,0 +1,58 @@
+package com.klp.controller;
+
+import com.klp.common.annotation.Log;
+import com.klp.common.core.controller.BaseController;
+import com.klp.common.core.domain.PageQuery;
+import com.klp.common.core.domain.R;
+import com.klp.common.core.page.TableDataInfo;
+import com.klp.common.enums.BusinessType;
+import com.klp.domain.bo.AttendanceCheckBo;
+import com.klp.domain.bo.WmsAttendanceCheckBo;
+import com.klp.domain.vo.WmsAttendanceCheckVo;
+import com.klp.service.IWmsAttendanceCheckService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.Arrays;
+import java.util.List;
+
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/wms/attendanceCheck")
+public class WmsAttendanceCheckController extends BaseController {
+
+ private final IWmsAttendanceCheckService iWmsAttendanceCheckService;
+
+ @GetMapping("/list")
+ public TableDataInfo list(WmsAttendanceCheckBo bo, PageQuery pageQuery) {
+ return iWmsAttendanceCheckService.queryPageList(bo, pageQuery);
+ }
+
+ @GetMapping("/{checkId}")
+ public R getInfo(@PathVariable Long checkId) {
+ return R.ok(iWmsAttendanceCheckService.queryById(checkId));
+ }
+
+ @Log(title = "考勤比对", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{checkIds}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable Long[] checkIds) {
+ return toAjax(iWmsAttendanceCheckService.deleteWithValidByIds(Arrays.asList(checkIds), true));
+ }
+
+ @Log(title = "考勤比对", businessType = BusinessType.INSERT)
+ @PostMapping("/check")
+ public R checkAttendance(@Validated @RequestBody AttendanceCheckBo bo) {
+ iWmsAttendanceCheckService.checkAttendance(bo);
+ return R.ok();
+ }
+}
diff --git a/klp-wms/src/main/java/com/klp/domain/WmsAttendanceCheck.java b/klp-wms/src/main/java/com/klp/domain/WmsAttendanceCheck.java
new file mode 100644
index 00000000..4a7e58d1
--- /dev/null
+++ b/klp-wms/src/main/java/com/klp/domain/WmsAttendanceCheck.java
@@ -0,0 +1,54 @@
+package com.klp.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.klp.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("wms_attendance_check")
+public class WmsAttendanceCheck extends BaseEntity {
+
+ @TableId
+ private Long checkId;
+ private Long scheduleId;
+ private Long userId;
+ private String employeeName;
+ private Date workDate;
+ private Long shiftId;
+ private String shiftName;
+ private String shiftType;
+
+ private Date p1StartTime;
+ private Date p1EndTime;
+ private Date p1FirstCheck;
+ private Date p1LastCheck;
+ private Integer p1LateMinutes;
+ private Integer p1EarlyMinutes;
+ private String p1Status;
+ private BigDecimal p1Deduct;
+
+ private Date p2StartTime;
+ private Date p2EndTime;
+ private Date p2FirstCheck;
+ private Date p2LastCheck;
+ private Integer p2LateMinutes;
+ private Integer p2EarlyMinutes;
+ private String p2Status;
+ private BigDecimal p2Deduct;
+
+ private String absentType;
+ private Integer continuousAbsentDays;
+ private BigDecimal totalDeduct;
+ private String overallStatus;
+ private String remark;
+
+ @TableLogic
+ private Integer delFlag;
+}
diff --git a/klp-wms/src/main/java/com/klp/domain/bo/AttendanceCheckBo.java b/klp-wms/src/main/java/com/klp/domain/bo/AttendanceCheckBo.java
new file mode 100644
index 00000000..7837ce1d
--- /dev/null
+++ b/klp-wms/src/main/java/com/klp/domain/bo/AttendanceCheckBo.java
@@ -0,0 +1,19 @@
+package com.klp.domain.bo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+@Data
+public class AttendanceCheckBo {
+
+ @NotNull(message = "开始日期不能为空")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date startDate;
+
+ @NotNull(message = "结束日期不能为空")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date endDate;
+}
diff --git a/klp-wms/src/main/java/com/klp/domain/bo/WmsAttendanceCheckBo.java b/klp-wms/src/main/java/com/klp/domain/bo/WmsAttendanceCheckBo.java
new file mode 100644
index 00000000..5e3a95fb
--- /dev/null
+++ b/klp-wms/src/main/java/com/klp/domain/bo/WmsAttendanceCheckBo.java
@@ -0,0 +1,20 @@
+package com.klp.domain.bo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class WmsAttendanceCheckBo {
+
+ private Long userId;
+ private String employeeName;
+ private Long shiftId;
+
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date startDate;
+
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date endDate;
+}
diff --git a/klp-wms/src/main/java/com/klp/domain/vo/WmsAttendanceCheckVo.java b/klp-wms/src/main/java/com/klp/domain/vo/WmsAttendanceCheckVo.java
new file mode 100644
index 00000000..e9adc685
--- /dev/null
+++ b/klp-wms/src/main/java/com/klp/domain/vo/WmsAttendanceCheckVo.java
@@ -0,0 +1,71 @@
+package com.klp.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@ExcelIgnoreUnannotated
+public class WmsAttendanceCheckVo {
+
+ private Long checkId;
+ private Long scheduleId;
+ private Long userId;
+
+ @ExcelProperty(value = "员工姓名")
+ private String employeeName;
+
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @ExcelProperty(value = "日期")
+ private Date workDate;
+
+ @ExcelProperty(value = "班次")
+ private String shiftName;
+
+ @JsonFormat(pattern = "HH:mm")
+ private Date p1StartTime;
+ @JsonFormat(pattern = "HH:mm")
+ private Date p1EndTime;
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
+ private Date p1FirstCheck;
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
+ private Date p1LastCheck;
+ @ExcelProperty(value = "上午迟到(分钟)")
+ private Integer p1LateMinutes;
+ @ExcelProperty(value = "上午早退(分钟)")
+ private Integer p1EarlyMinutes;
+ @ExcelProperty(value = "上午状态")
+ private String p1Status;
+ @ExcelProperty(value = "上午扣款")
+ private BigDecimal p1Deduct;
+
+ @JsonFormat(pattern = "HH:mm")
+ private Date p2StartTime;
+ @JsonFormat(pattern = "HH:mm")
+ private Date p2EndTime;
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
+ private Date p2FirstCheck;
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
+ private Date p2LastCheck;
+ @ExcelProperty(value = "下午迟到(分钟)")
+ private Integer p2LateMinutes;
+ @ExcelProperty(value = "下午早退(分钟)")
+ private Integer p2EarlyMinutes;
+ @ExcelProperty(value = "下午状态")
+ private String p2Status;
+ @ExcelProperty(value = "下午扣款")
+ private BigDecimal p2Deduct;
+
+ @ExcelProperty(value = "旷工类型")
+ private String absentType;
+ @ExcelProperty(value = "连续旷工天数")
+ private Integer continuousAbsentDays;
+ @ExcelProperty(value = "总扣款")
+ private BigDecimal totalDeduct;
+ @ExcelProperty(value = "总体状态")
+ private String overallStatus;
+}
diff --git a/klp-wms/src/main/java/com/klp/mapper/WmsAttendanceCheckMapper.java b/klp-wms/src/main/java/com/klp/mapper/WmsAttendanceCheckMapper.java
new file mode 100644
index 00000000..ee3ae402
--- /dev/null
+++ b/klp-wms/src/main/java/com/klp/mapper/WmsAttendanceCheckMapper.java
@@ -0,0 +1,8 @@
+package com.klp.mapper;
+
+import com.klp.common.core.mapper.BaseMapperPlus;
+import com.klp.domain.WmsAttendanceCheck;
+import com.klp.domain.vo.WmsAttendanceCheckVo;
+
+public interface WmsAttendanceCheckMapper extends BaseMapperPlus {
+}
diff --git a/klp-wms/src/main/java/com/klp/service/IWmsAttendanceCheckService.java b/klp-wms/src/main/java/com/klp/service/IWmsAttendanceCheckService.java
new file mode 100644
index 00000000..f392c3f2
--- /dev/null
+++ b/klp-wms/src/main/java/com/klp/service/IWmsAttendanceCheckService.java
@@ -0,0 +1,23 @@
+package com.klp.service;
+
+import com.klp.common.core.page.TableDataInfo;
+import com.klp.common.core.domain.PageQuery;
+import com.klp.domain.bo.AttendanceCheckBo;
+import com.klp.domain.bo.WmsAttendanceCheckBo;
+import com.klp.domain.vo.WmsAttendanceCheckVo;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface IWmsAttendanceCheckService {
+
+ WmsAttendanceCheckVo queryById(Long checkId);
+
+ TableDataInfo queryPageList(WmsAttendanceCheckBo bo, PageQuery pageQuery);
+
+ List queryList(WmsAttendanceCheckBo bo);
+
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+
+ void checkAttendance(AttendanceCheckBo bo);
+}
diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceCheckServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceCheckServiceImpl.java
new file mode 100644
index 00000000..5c48a5ca
--- /dev/null
+++ b/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceCheckServiceImpl.java
@@ -0,0 +1,398 @@
+package com.klp.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.klp.common.core.domain.PageQuery;
+import com.klp.common.core.page.TableDataInfo;
+import com.klp.common.utils.StringUtils;
+import com.klp.domain.AttendanceRecords;
+import com.klp.domain.WmsAttendanceCheck;
+import com.klp.domain.WmsAttendanceRule;
+import com.klp.domain.bo.AttendanceCheckBo;
+import com.klp.domain.bo.AttendanceRecordsBo;
+import com.klp.domain.bo.WmsAttendanceCheckBo;
+import com.klp.domain.bo.WmsAttendanceScheduleBo;
+import com.klp.domain.vo.AttendanceRecordsVo;
+import com.klp.domain.vo.WmsAttendanceCheckVo;
+import com.klp.domain.vo.WmsAttendanceScheduleVo;
+import com.klp.mapper.WmsAttendanceCheckMapper;
+import com.klp.mapper.WmsAttendanceRuleMapper;
+import com.klp.service.IAttendanceRecordsService;
+import com.klp.service.IWmsAttendanceCheckService;
+import com.klp.service.IWmsAttendanceScheduleService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.time.Duration;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.ZoneId;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@RequiredArgsConstructor
+@Service
+public class WmsAttendanceCheckServiceImpl implements IWmsAttendanceCheckService {
+
+ private final WmsAttendanceCheckMapper baseMapper;
+ private final IWmsAttendanceScheduleService scheduleService;
+ private final IAttendanceRecordsService attendanceRecordsService;
+ private final WmsAttendanceRuleMapper ruleMapper;
+
+ @Override
+ public WmsAttendanceCheckVo queryById(Long checkId) {
+ return baseMapper.selectVoById(checkId);
+ }
+
+ @Override
+ public TableDataInfo queryPageList(WmsAttendanceCheckBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ @Override
+ public List queryList(WmsAttendanceCheckBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ @Override
+ public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
+ return baseMapper.deleteBatchIds(ids) > 0;
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(WmsAttendanceCheckBo bo) {
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.eq(bo.getUserId() != null, WmsAttendanceCheck::getUserId, bo.getUserId());
+ lqw.like(StringUtils.isNotBlank(bo.getEmployeeName()), WmsAttendanceCheck::getEmployeeName, bo.getEmployeeName());
+ lqw.eq(bo.getShiftId() != null, WmsAttendanceCheck::getShiftId, bo.getShiftId());
+ lqw.ge(bo.getStartDate() != null, WmsAttendanceCheck::getWorkDate, bo.getStartDate());
+ lqw.le(bo.getEndDate() != null, WmsAttendanceCheck::getWorkDate, bo.getEndDate());
+ lqw.orderByDesc(WmsAttendanceCheck::getWorkDate);
+ return lqw;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void checkAttendance(AttendanceCheckBo bo) {
+ WmsAttendanceScheduleBo scheduleBo = new WmsAttendanceScheduleBo();
+ scheduleBo.setStartDate(bo.getStartDate());
+ scheduleBo.setEndDate(bo.getEndDate());
+ List schedules = scheduleService.queryList(scheduleBo);
+
+ if (schedules.isEmpty()) {
+ return;
+ }
+
+ WmsAttendanceRule rule = getActiveRule();
+
+ LocalDate startLocal = toLocalDate(bo.getStartDate());
+ LocalDate endLocal = toLocalDate(bo.getEndDate());
+
+ for (WmsAttendanceScheduleVo schedule : schedules) {
+ if (schedule.getEmployeeName() == null || schedule.getShiftStartTime() == null) {
+ continue;
+ }
+
+ // 获取该员工该日期的所有打卡记录
+ List records = getRecords(schedule.getEmployeeName(), schedule.getWorkDate());
+
+ WmsAttendanceCheck check = buildCheck(schedule, rule, records);
+
+ // 删除已有的比对结果
+ baseMapper.delete(Wrappers.lambdaQuery()
+ .eq(WmsAttendanceCheck::getScheduleId, schedule.getScheduleId()));
+
+ baseMapper.insert(check);
+ }
+
+ // 更新连续旷工天数
+ updateContinuousAbsent(startLocal, endLocal);
+ }
+
+ private WmsAttendanceRule getActiveRule() {
+ LambdaQueryWrapper wrapper = Wrappers.lambdaQuery();
+ wrapper.eq(WmsAttendanceRule::getDelFlag, 0);
+ wrapper.last("LIMIT 1");
+ WmsAttendanceRule rule = ruleMapper.selectOne(wrapper);
+ if (rule == null) {
+ rule = new WmsAttendanceRule();
+ rule.setLateWarn(3L);
+ rule.setLate1(5L);
+ rule.setLate2(15L);
+ rule.setDeduct1(new BigDecimal("10"));
+ rule.setDeduct2(new BigDecimal("30"));
+ rule.setAbsentHalfDay(15L);
+ rule.setContinuousAbsentDays(3L);
+ }
+ return rule;
+ }
+
+ private List getRecords(String employeeName, Date workDate) {
+ AttendanceRecordsBo recordsBo = new AttendanceRecordsBo();
+ recordsBo.setEname(employeeName);
+ LocalDate ld = toLocalDate(workDate);
+ recordsBo.setChecktimeStart(toDate(ld.atStartOfDay()));
+ recordsBo.setChecktimeEnd(toDate(ld.atTime(LocalTime.of(23, 59, 59))));
+ List voList = attendanceRecordsService.queryList(recordsBo);
+ return voList.stream()
+ .map(v -> {
+ AttendanceRecords r = new AttendanceRecords();
+ r.setId(v.getId());
+ r.setEname(v.getEname());
+ r.setChecktime(v.getChecktime());
+ return r;
+ })
+ .sorted(Comparator.comparing(AttendanceRecords::getChecktime))
+ .collect(Collectors.toList());
+ }
+
+ private WmsAttendanceCheck buildCheck(WmsAttendanceScheduleVo schedule, WmsAttendanceRule rule, List records) {
+ WmsAttendanceCheck check = new WmsAttendanceCheck();
+ check.setScheduleId(schedule.getScheduleId());
+ check.setUserId(schedule.getUserId());
+ check.setEmployeeName(schedule.getEmployeeName());
+ check.setWorkDate(schedule.getWorkDate());
+ check.setShiftId(schedule.getShiftId());
+ check.setShiftName(schedule.getShiftName());
+ check.setShiftType(schedule.getShiftType());
+
+ boolean hasPeriod2 = schedule.getShiftStartTime2() != null && schedule.getShiftEndTime2() != null;
+
+ if (records.isEmpty()) {
+ check.setOverallStatus("absent_full");
+ check.setAbsentType("full_day");
+ return check;
+ }
+
+ List checkTimes = records.stream()
+ .map(r -> toLocalDateTime(r.getChecktime()).toLocalTime())
+ .collect(Collectors.toList());
+
+ if (hasPeriod2) {
+ // 正常班次:按时间中点划分上下午
+ LocalTime p1End = toLocalTime(schedule.getShiftEndTime());
+ LocalTime p2Start = toLocalTime(schedule.getShiftStartTime2());
+ LocalTime split = LocalTime.of(
+ (p1End.getHour() + p2Start.getHour()) / 2,
+ (p1End.getMinute() + p2Start.getMinute()) / 2);
+
+ List period1Times = new ArrayList<>();
+ List period2Times = new ArrayList<>();
+ for (LocalTime t : checkTimes) {
+ if (t.isBefore(split)) {
+ period1Times.add(t);
+ } else {
+ period2Times.add(t);
+ }
+ }
+
+ check.setP1StartTime(schedule.getShiftStartTime());
+ check.setP1EndTime(schedule.getShiftEndTime());
+ checkPeriod(check, rule, 1, period1Times, schedule.getShiftStartTime(), schedule.getShiftEndTime(), records);
+
+ check.setP2StartTime(schedule.getShiftStartTime2());
+ check.setP2EndTime(schedule.getShiftEndTime2());
+ checkPeriod(check, rule, 2, period2Times, schedule.getShiftStartTime2(), schedule.getShiftEndTime2(), records);
+ } else {
+ // 倒班:全天一个时段
+ check.setP1StartTime(schedule.getShiftStartTime());
+ check.setP1EndTime(schedule.getShiftEndTime());
+ checkPeriod(check, rule, 1, checkTimes, schedule.getShiftStartTime(), schedule.getShiftEndTime(), records);
+ }
+
+ // 总体判定
+ calculateOverall(check, rule);
+ return check;
+ }
+
+ private void checkPeriod(WmsAttendanceCheck check, WmsAttendanceRule rule, int period,
+ List periodTimes, Date expectedStart, Date expectedEnd,
+ List allRecords) {
+ if (periodTimes.isEmpty()) {
+ if (period == 1) {
+ check.setP1Status("missed");
+ } else {
+ check.setP2Status("missed");
+ }
+ return;
+ }
+
+ LocalTime expStart = toLocalTime(expectedStart);
+ LocalTime expEnd = toLocalTime(expectedEnd);
+ LocalTime firstCheck = periodTimes.get(0);
+ LocalTime lastCheck = periodTimes.get(periodTimes.size() - 1);
+
+ int lateMinutes = 0;
+ int earlyMinutes = 0;
+ BigDecimal deduct = BigDecimal.ZERO;
+ String status = "normal";
+
+ // 迟到判定:最早打卡 vs 理论上班时间
+ if (firstCheck.isAfter(expStart)) {
+ lateMinutes = (int) Duration.between(expStart, firstCheck).toMinutes();
+ if (lateMinutes > rule.getAbsentHalfDay()) {
+ status = "absent_half";
+ } else if (lateMinutes > rule.getLate2()) {
+ status = "absent_half";
+ } else if (lateMinutes > rule.getLate1()) {
+ status = "late_2";
+ deduct = deduct.add(rule.getDeduct2());
+ } else if (lateMinutes > rule.getLateWarn()) {
+ status = "late_1";
+ deduct = deduct.add(rule.getDeduct1());
+ } else {
+ status = "late_warn";
+ }
+ }
+
+ // 早退判定:最晚打卡 vs 理论下班时间
+ if (lastCheck.isBefore(expEnd)) {
+ int min = (int) Duration.between(lastCheck, expEnd).toMinutes();
+ if (min > rule.getAbsentHalfDay()) {
+ status = maxSeverity(status, "absent_half");
+ earlyMinutes = min;
+ } else if (min > rule.getLate2()) {
+ status = maxSeverity(status, "absent_half");
+ earlyMinutes = min;
+ } else if (min > rule.getLate1()) {
+ status = maxSeverity(status, "early_2");
+ deduct = deduct.add(rule.getDeduct2());
+ earlyMinutes = min;
+ } else if (min > rule.getLateWarn()) {
+ status = maxSeverity(status, "early_1");
+ deduct = deduct.add(rule.getDeduct1());
+ earlyMinutes = min;
+ } else {
+ if ("normal".equals(status)) {
+ status = "early_warn";
+ }
+ earlyMinutes = min;
+ }
+ }
+
+ // 找到对应的打卡时间
+ for (AttendanceRecords r : allRecords) {
+ LocalTime ct = toLocalDateTime(r.getChecktime()).toLocalTime();
+ if (ct.equals(firstCheck)) {
+ if (period == 1) check.setP1FirstCheck(r.getChecktime());
+ else check.setP2FirstCheck(r.getChecktime());
+ }
+ if (ct.equals(lastCheck)) {
+ if (period == 1) check.setP1LastCheck(r.getChecktime());
+ else check.setP2LastCheck(r.getChecktime());
+ }
+ }
+
+ if (period == 1) {
+ check.setP1LateMinutes(lateMinutes);
+ check.setP1EarlyMinutes(earlyMinutes);
+ check.setP1Status(status);
+ check.setP1Deduct(deduct);
+ } else {
+ check.setP2LateMinutes(lateMinutes);
+ check.setP2EarlyMinutes(earlyMinutes);
+ check.setP2Status(status);
+ check.setP2Deduct(deduct);
+ }
+ }
+
+ private String maxSeverity(String a, String b) {
+ List severity = java.util.Arrays.asList("normal", "late_warn", "early_warn", "late_1", "early_1", "late_2", "early_2", "absent_half");
+ int ai = severity.indexOf(a);
+ int bi = severity.indexOf(b);
+ return severity.get(Math.max(ai, bi));
+ }
+
+ private void calculateOverall(WmsAttendanceCheck check, WmsAttendanceRule rule) {
+ BigDecimal total = BigDecimal.ZERO;
+ boolean hasAbsentHalf = false;
+
+ if (check.getP1Deduct() != null) total = total.add(check.getP1Deduct());
+ if (check.getP2Deduct() != null) total = total.add(check.getP2Deduct());
+
+ check.setTotalDeduct(total);
+
+ if ("absent_half".equals(check.getP1Status()) || "absent_half".equals(check.getP2Status())) {
+ hasAbsentHalf = true;
+ }
+ if ("missed".equals(check.getP1Status()) && check.getP2StartTime() != null && "missed".equals(check.getP2Status())) {
+ check.setAbsentType("full_day");
+ check.setOverallStatus("absent_full");
+ return;
+ }
+ if (check.getP1StartTime() == null && check.getP2StartTime() == null) {
+ check.setAbsentType("full_day");
+ check.setOverallStatus("absent_full");
+ return;
+ }
+ if (hasAbsentHalf) {
+ check.setAbsentType("half_day");
+ check.setOverallStatus("absent_half");
+ return;
+ }
+
+ boolean abnormal = !"normal".equals(check.getP1Status()) || (check.getP2Status() != null && !"normal".equals(check.getP2Status()));
+ check.setOverallStatus(abnormal ? "abnormal" : "normal");
+ }
+
+ private void updateContinuousAbsent(LocalDate startDate, LocalDate endDate) {
+ List checks = baseMapper.selectList(Wrappers.lambdaQuery()
+ .ge(WmsAttendanceCheck::getWorkDate, toDate(startDate.atStartOfDay()))
+ .le(WmsAttendanceCheck::getWorkDate, toDate(endDate.atTime(LocalTime.of(23, 59, 59))))
+ .eq(WmsAttendanceCheck::getDelFlag, 0));
+
+ for (WmsAttendanceCheck check : checks) {
+ if (check.getAbsentType() != null) {
+ int continuous = countContinuousAbsent(check.getUserId(), toLocalDate(check.getWorkDate()));
+ check.setContinuousAbsentDays(continuous);
+ baseMapper.updateById(check);
+ }
+ }
+ }
+
+ private int countContinuousAbsent(Long userId, LocalDate workDate) {
+ int count = 0;
+ LocalDate date = workDate.minusDays(1);
+ while (true) {
+ WmsAttendanceCheck prev = baseMapper.selectOne(Wrappers.lambdaQuery()
+ .eq(WmsAttendanceCheck::getUserId, userId)
+ .eq(WmsAttendanceCheck::getWorkDate, toDate(date.atStartOfDay()))
+ .eq(WmsAttendanceCheck::getDelFlag, 0));
+ if (prev != null && prev.getAbsentType() != null) {
+ count++;
+ date = date.minusDays(1);
+ } else {
+ break;
+ }
+ }
+ return count;
+ }
+
+ private static LocalDate toLocalDate(Date date) {
+ return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+ }
+
+ private static LocalTime toLocalTime(Date date) {
+ if (date == null) return null;
+ return date.toInstant().atZone(ZoneId.systemDefault()).toLocalTime();
+ }
+
+ private static LocalDateTime toLocalDateTime(Date date) {
+ if (date == null) return null;
+ return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
+ }
+
+ private static Date toDate(LocalDateTime ldt) {
+ return Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant());
+ }
+}
diff --git a/klp-wms/src/main/resources/mapper/klp/WmsAttendanceCheckMapper.xml b/klp-wms/src/main/resources/mapper/klp/WmsAttendanceCheckMapper.xml
new file mode 100644
index 00000000..e0267684
--- /dev/null
+++ b/klp-wms/src/main/resources/mapper/klp/WmsAttendanceCheckMapper.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From 139f0ebb3e0ff8b428e9ede0ec0456a75c8e7efe Mon Sep 17 00:00:00 2001
From: Joshi <3040996759@qq.com>
Date: Tue, 12 May 2026 17:09:37 +0800
Subject: [PATCH 6/6] =?UTF-8?q?refactor(wms):=20=E9=87=8D=E6=9E=84?=
=?UTF-8?q?=E8=80=83=E5=8B=A4=E8=A7=84=E5=88=99=E5=AD=97=E6=AE=B5=E5=91=BD?=
=?UTF-8?q?=E5=90=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 将迟到一级相关字段从 late1 重命名为 lateOne
- 将迟到二级相关字段从 late2 重命名为 lateTwo
- 将迟到一级扣款字段从 deduct1 重命名为 deductOne
- 将迟到二级扣款字段从 deduct2 重命名为 deductTwo
- 更新所有相关的 getter/setter 方法调用
- 修改映射文件中的字段映射配置
- 更新查询条件中的字段引用
---
.../com/klp/domain/WmsAttendanceRule.java | 8 ++---
.../klp/domain/bo/WmsAttendanceRuleBo.java | 8 ++---
.../klp/domain/vo/WmsAttendanceRuleVo.java | 8 ++---
.../impl/WmsAttendanceCheckServiceImpl.java | 30 +++++++++----------
.../impl/WmsAttendanceRuleServiceImpl.java | 8 ++---
.../mapper/klp/WmsAttendanceRuleMapper.xml | 8 ++---
6 files changed, 35 insertions(+), 35 deletions(-)
diff --git a/klp-wms/src/main/java/com/klp/domain/WmsAttendanceRule.java b/klp-wms/src/main/java/com/klp/domain/WmsAttendanceRule.java
index 1062ea88..41045b71 100644
--- a/klp-wms/src/main/java/com/klp/domain/WmsAttendanceRule.java
+++ b/klp-wms/src/main/java/com/klp/domain/WmsAttendanceRule.java
@@ -32,19 +32,19 @@ public class WmsAttendanceRule extends BaseEntity {
/**
* 迟到一级阈值(分钟)
*/
- private Long late1;
+ private Long lateOne;
/**
* 迟到二级阈值(分钟)
*/
- private Long late2;
+ private Long lateTwo;
/**
* 迟到一级扣款(元/次)
*/
- private BigDecimal deduct1;
+ private BigDecimal deductOne;
/**
* 迟到二级扣款(元/次)
*/
- private BigDecimal deduct2;
+ private BigDecimal deductTwo;
/**
* 超过多少分钟按旷工半天处理
*/
diff --git a/klp-wms/src/main/java/com/klp/domain/bo/WmsAttendanceRuleBo.java b/klp-wms/src/main/java/com/klp/domain/bo/WmsAttendanceRuleBo.java
index 0ba75cc1..e1ab3110 100644
--- a/klp-wms/src/main/java/com/klp/domain/bo/WmsAttendanceRuleBo.java
+++ b/klp-wms/src/main/java/com/klp/domain/bo/WmsAttendanceRuleBo.java
@@ -31,22 +31,22 @@ public class WmsAttendanceRuleBo extends BaseEntity {
/**
* 迟到一级阈值(分钟)
*/
- private Long late1;
+ private Long lateOne;
/**
* 迟到二级阈值(分钟)
*/
- private Long late2;
+ private Long lateTwo;
/**
* 迟到一级扣款(元/次)
*/
- private BigDecimal deduct1;
+ private BigDecimal deductOne;
/**
* 迟到二级扣款(元/次)
*/
- private BigDecimal deduct2;
+ private BigDecimal deductTwo;
/**
* 超过多少分钟按旷工半天处理
diff --git a/klp-wms/src/main/java/com/klp/domain/vo/WmsAttendanceRuleVo.java b/klp-wms/src/main/java/com/klp/domain/vo/WmsAttendanceRuleVo.java
index 5d7a73d7..c107c851 100644
--- a/klp-wms/src/main/java/com/klp/domain/vo/WmsAttendanceRuleVo.java
+++ b/klp-wms/src/main/java/com/klp/domain/vo/WmsAttendanceRuleVo.java
@@ -38,28 +38,28 @@ public class WmsAttendanceRuleVo {
*/
@ExcelProperty(value = "迟到一级阈值", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "分=钟")
- private Long late1;
+ private Long lateOne;
/**
* 迟到二级阈值(分钟)
*/
@ExcelProperty(value = "迟到二级阈值", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "分=钟")
- private Long late2;
+ private Long lateTwo;
/**
* 迟到一级扣款(元/次)
*/
@ExcelProperty(value = "迟到一级扣款", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "元=/次")
- private BigDecimal deduct1;
+ private BigDecimal deductOne;
/**
* 迟到二级扣款(元/次)
*/
@ExcelProperty(value = "迟到二级扣款", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "元=/次")
- private BigDecimal deduct2;
+ private BigDecimal deductTwo;
/**
* 超过多少分钟按旷工半天处理
diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceCheckServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceCheckServiceImpl.java
index 5c48a5ca..d15e3144 100644
--- a/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceCheckServiceImpl.java
+++ b/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceCheckServiceImpl.java
@@ -127,10 +127,10 @@ public class WmsAttendanceCheckServiceImpl implements IWmsAttendanceCheckService
if (rule == null) {
rule = new WmsAttendanceRule();
rule.setLateWarn(3L);
- rule.setLate1(5L);
- rule.setLate2(15L);
- rule.setDeduct1(new BigDecimal("10"));
- rule.setDeduct2(new BigDecimal("30"));
+ rule.setLateOne(5L);
+ rule.setLateTwo(15L);
+ rule.setDeductOne(new BigDecimal("10"));
+ rule.setDeductTwo(new BigDecimal("30"));
rule.setAbsentHalfDay(15L);
rule.setContinuousAbsentDays(3L);
}
@@ -242,14 +242,14 @@ public class WmsAttendanceCheckServiceImpl implements IWmsAttendanceCheckService
lateMinutes = (int) Duration.between(expStart, firstCheck).toMinutes();
if (lateMinutes > rule.getAbsentHalfDay()) {
status = "absent_half";
- } else if (lateMinutes > rule.getLate2()) {
+ } else if (lateMinutes > rule.getLateTwo()) {
status = "absent_half";
- } else if (lateMinutes > rule.getLate1()) {
- status = "late_2";
- deduct = deduct.add(rule.getDeduct2());
+ } else if (lateMinutes > rule.getLateOne()) {
+ status = "late_two";
+ deduct = deduct.add(rule.getDeductTwo());
} else if (lateMinutes > rule.getLateWarn()) {
- status = "late_1";
- deduct = deduct.add(rule.getDeduct1());
+ status = "late_one";
+ deduct = deduct.add(rule.getDeductOne());
} else {
status = "late_warn";
}
@@ -261,16 +261,16 @@ public class WmsAttendanceCheckServiceImpl implements IWmsAttendanceCheckService
if (min > rule.getAbsentHalfDay()) {
status = maxSeverity(status, "absent_half");
earlyMinutes = min;
- } else if (min > rule.getLate2()) {
+ } else if (min > rule.getLateTwo()) {
status = maxSeverity(status, "absent_half");
earlyMinutes = min;
- } else if (min > rule.getLate1()) {
+ } else if (min > rule.getLateOne()) {
status = maxSeverity(status, "early_2");
- deduct = deduct.add(rule.getDeduct2());
+ deduct = deduct.add(rule.getDeductTwo());
earlyMinutes = min;
} else if (min > rule.getLateWarn()) {
status = maxSeverity(status, "early_1");
- deduct = deduct.add(rule.getDeduct1());
+ deduct = deduct.add(rule.getDeductOne());
earlyMinutes = min;
} else {
if ("normal".equals(status)) {
@@ -307,7 +307,7 @@ public class WmsAttendanceCheckServiceImpl implements IWmsAttendanceCheckService
}
private String maxSeverity(String a, String b) {
- List severity = java.util.Arrays.asList("normal", "late_warn", "early_warn", "late_1", "early_1", "late_2", "early_2", "absent_half");
+ List severity = java.util.Arrays.asList("normal", "late_warn", "early_warn", "late_one", "early_1", "late_two", "early_2", "absent_half");
int ai = severity.indexOf(a);
int bi = severity.indexOf(b);
return severity.get(Math.max(ai, bi));
diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceRuleServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceRuleServiceImpl.java
index abf822ca..0d80fbbd 100644
--- a/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceRuleServiceImpl.java
+++ b/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceRuleServiceImpl.java
@@ -61,10 +61,10 @@ public class WmsAttendanceRuleServiceImpl implements IWmsAttendanceRuleService {
Map params = bo.getParams();
LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getLateWarn() != null, WmsAttendanceRule::getLateWarn, bo.getLateWarn());
- lqw.eq(bo.getLate1() != null, WmsAttendanceRule::getLate1, bo.getLate1());
- lqw.eq(bo.getLate2() != null, WmsAttendanceRule::getLate2, bo.getLate2());
- lqw.eq(bo.getDeduct1() != null, WmsAttendanceRule::getDeduct1, bo.getDeduct1());
- lqw.eq(bo.getDeduct2() != null, WmsAttendanceRule::getDeduct2, bo.getDeduct2());
+ lqw.eq(bo.getLateOne() != null, WmsAttendanceRule::getLateOne, bo.getLateOne());
+ lqw.eq(bo.getLateTwo() != null, WmsAttendanceRule::getLateTwo, bo.getLateTwo());
+ lqw.eq(bo.getDeductOne() != null, WmsAttendanceRule::getDeductOne, bo.getDeductOne());
+ lqw.eq(bo.getDeductTwo() != null, WmsAttendanceRule::getDeductTwo, bo.getDeductTwo());
lqw.eq(bo.getAbsentHalfDay() != null, WmsAttendanceRule::getAbsentHalfDay, bo.getAbsentHalfDay());
lqw.eq(bo.getContinuousAbsentDays() != null, WmsAttendanceRule::getContinuousAbsentDays, bo.getContinuousAbsentDays());
return lqw;
diff --git a/klp-wms/src/main/resources/mapper/klp/WmsAttendanceRuleMapper.xml b/klp-wms/src/main/resources/mapper/klp/WmsAttendanceRuleMapper.xml
index 57d4b5c9..5cf61d2a 100644
--- a/klp-wms/src/main/resources/mapper/klp/WmsAttendanceRuleMapper.xml
+++ b/klp-wms/src/main/resources/mapper/klp/WmsAttendanceRuleMapper.xml
@@ -7,10 +7,10 @@
-
-
-
-
+
+
+
+