feat(wms/attendance): 新增考勤连续旷工天数计算功能,为保证速度把步骤拆分成两步
1. 前端新增“计算连续旷工”按钮,调用后端重算接口并优化加载状态管理 2. 后端新增recalcContinuousAbsent方法及接口,支持按指定员工或时间范围重算连续旷工天数 3. 优化考勤检查页面按钮布局,明确“生成考勤结果”操作
This commit is contained in:
@@ -58,6 +58,13 @@ public class WmsAttendanceCheckController extends BaseController {
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
@Log(title = "重算连续旷工", businessType = BusinessType.UPDATE)
|
||||
@PostMapping("/recalcContinuousAbsent")
|
||||
public R<Void> recalcContinuousAbsent(@Validated @RequestBody AttendanceCheckBo bo) {
|
||||
iWmsAttendanceCheckService.recalcContinuousAbsent(bo);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
@Log(title = "考勤比对", businessType = BusinessType.UPDATE)
|
||||
@PutMapping
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody WmsAttendanceCheckBo bo) {
|
||||
|
||||
@@ -21,5 +21,7 @@ public interface IWmsAttendanceCheckService {
|
||||
|
||||
void checkAttendance(AttendanceCheckBo bo);
|
||||
|
||||
void recalcContinuousAbsent(AttendanceCheckBo bo);
|
||||
|
||||
Boolean updateByBo(WmsAttendanceCheckBo bo);
|
||||
}
|
||||
|
||||
@@ -124,9 +124,9 @@ public class WmsAttendanceCheckServiceImpl implements IWmsAttendanceCheckService
|
||||
// 获取当前有效的考勤规则
|
||||
WmsAttendanceRule rule = getActiveRule();
|
||||
|
||||
// 将日期转换为LocalDate类型
|
||||
LocalDate startLocal = toLocalDate(bo.getStartDate());
|
||||
LocalDate endLocal = toLocalDate(bo.getEndDate());
|
||||
// // 将日期转换为LocalDate类型
|
||||
// LocalDate startLocal = toLocalDate(bo.getStartDate());
|
||||
// LocalDate endLocal = toLocalDate(bo.getEndDate());
|
||||
|
||||
// 创建待处理的考勤计划列表
|
||||
List<WmsAttendanceScheduleVo> toProcess = new ArrayList<>();
|
||||
@@ -205,8 +205,26 @@ public class WmsAttendanceCheckServiceImpl implements IWmsAttendanceCheckService
|
||||
|
||||
// 批量插入考勤检查记录
|
||||
baseMapper.insertBatch(checksToInsert, BATCH_SIZE);
|
||||
}
|
||||
|
||||
// 更新连续缺勤记录
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void recalcContinuousAbsent(AttendanceCheckBo bo) {
|
||||
LocalDate startLocal = toLocalDate(bo.getStartDate());
|
||||
LocalDate endLocal = toLocalDate(bo.getEndDate());
|
||||
Set<Long> affectedUserIds;
|
||||
if (bo.getUserIds() != null && !bo.getUserIds().isEmpty()) {
|
||||
affectedUserIds = new HashSet<>(bo.getUserIds());
|
||||
} else {
|
||||
List<WmsAttendanceCheck> checks = baseMapper.selectList(Wrappers.<WmsAttendanceCheck>lambdaQuery()
|
||||
.select(WmsAttendanceCheck::getUserId)
|
||||
.ge(WmsAttendanceCheck::getWorkDate, toDate(startLocal.atStartOfDay()))
|
||||
.le(WmsAttendanceCheck::getWorkDate, toDate(endLocal.atTime(LocalTime.of(23, 59, 59))))
|
||||
.eq(WmsAttendanceCheck::getDelFlag, 0));
|
||||
affectedUserIds = checks.stream()
|
||||
.map(WmsAttendanceCheck::getUserId)
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
updateContinuousAbsent(startLocal, endLocal, affectedUserIds);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user