From 2f821a76b10c7291da149a2d7b312de8f73dd099 Mon Sep 17 00:00:00 2001 From: aikai Date: Thu, 30 May 2024 20:55:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B9=B3=E5=9D=87=E5=B7=A5=E6=97=B6=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vo/TeamAttendanceStatisticsByCycleVO.java | 12 +++++++ .../attendance/fixed/AttendanceFixedDO.java | 1 + .../scheduling/AttendanceSchedulingDO.java | 8 ++--- .../attendance/AttendanceMissingCardJob.java | 33 +++++++++++++++++++ .../attendance/AttendanceStatisticsJob.java | 1 - .../attendance/AttendanceServiceImpl.java | 9 ++--- 6 files changed, 54 insertions(+), 10 deletions(-) create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/attendance/AttendanceMissingCardJob.java diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/app/attendance/vo/TeamAttendanceStatisticsByCycleVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/app/attendance/vo/TeamAttendanceStatisticsByCycleVO.java index 15fd9c3c..430dcb22 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/app/attendance/vo/TeamAttendanceStatisticsByCycleVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/app/attendance/vo/TeamAttendanceStatisticsByCycleVO.java @@ -1,5 +1,7 @@ package cn.iocoder.yudao.module.system.controller.app.attendance.vo; +import cn.hutool.core.date.BetweenFormatter; +import cn.hutool.core.date.DateUtil; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.experimental.Accessors; @@ -39,6 +41,9 @@ public class TeamAttendanceStatisticsByCycleVO { @Schema(description = "平均工时") private Long averageWorkingHours; + @Schema(description = "平均工时中文") + private String averageWorkingHourStr; + @Schema(description = "迟到次数") private Integer beLateNum; @@ -53,5 +58,12 @@ public class TeamAttendanceStatisticsByCycleVO { @Schema(description = "外勤次数") private Integer fieldServiceNum; + + + public void setAverageWorkingHours(Long averageWorkingHours) { + this.averageWorkingHours = averageWorkingHours; + this.averageWorkingHourStr = DateUtil.formatBetween(averageWorkingHours, BetweenFormatter.Level.MINUTE); + } + } } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/attendance/fixed/AttendanceFixedDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/attendance/fixed/AttendanceFixedDO.java index e4a4ad79..086c5de6 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/attendance/fixed/AttendanceFixedDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/attendance/fixed/AttendanceFixedDO.java @@ -38,6 +38,7 @@ public class AttendanceFixedDO extends BaseDO { /** * 班次id(为空表示休息) */ + @TableField(updateStrategy = FieldStrategy.IGNORED) private Long attendanceGroupShiftId; } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/attendance/scheduling/AttendanceSchedulingDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/attendance/scheduling/AttendanceSchedulingDO.java index 6b4baa4e..35663902 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/attendance/scheduling/AttendanceSchedulingDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/attendance/scheduling/AttendanceSchedulingDO.java @@ -1,11 +1,8 @@ package cn.iocoder.yudao.module.system.dal.dataobject.attendance.scheduling; -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.*; +import lombok.*; /** * 排班制考勤设置 DO @@ -38,6 +35,7 @@ public class AttendanceSchedulingDO extends BaseDO { /** * 班次id */ + @TableField(updateStrategy = FieldStrategy.IGNORED) private Long attendanceGroupShiftId; /** * 是否休息 0否 1是 diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/attendance/AttendanceMissingCardJob.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/attendance/AttendanceMissingCardJob.java new file mode 100644 index 00000000..e05dcce8 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/attendance/AttendanceMissingCardJob.java @@ -0,0 +1,33 @@ +package cn.iocoder.yudao.module.system.job.attendance; + +import cn.iocoder.yudao.framework.tenant.core.job.TenantJob; +import cn.iocoder.yudao.module.system.dal.mysql.attendance.punchrecord.AttendancePunchRecordMapper; +import cn.iocoder.yudao.module.system.service.attendance.punchrecord.AttendancePunchRecordService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +@Component +@Slf4j +public class AttendanceMissingCardJob { + + // TODO: 2024/4/22 - 每十分钟执行一次 将漏打卡的设为缺卡 这里的update要保证命中索引 保证是行锁 不然容易导致锁表 + + @Resource + private AttendancePunchRecordMapper attendancePunchRecordMapper; + + @XxlJob("attendanceMissingCardJob") + @TenantJob // --- ⚠️ 这个注解 会将租户列表拉出来 完了后逐个租户执行 定时任务需要注意 + public ReturnT execute() throws Exception { + log.info("开始 修改考勤缺卡"); + attendancePunchRecordMapper.selectList(new LambdaQueryWrapper<>()); + log.info("结束 修改考勤缺卡"); + // 返回执行成功 + return ReturnT.SUCCESS; + } + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/attendance/AttendanceStatisticsJob.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/attendance/AttendanceStatisticsJob.java index 8e9d1b5a..bc981280 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/attendance/AttendanceStatisticsJob.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/attendance/AttendanceStatisticsJob.java @@ -120,7 +120,6 @@ public class AttendanceStatisticsJob { LocalDateTime shouldPunchTime = LocalDateTime.ofInstant(DateUtils.buildHHmmTime(attendanceOnTheDayDTO.getTime()).toInstant(), ZoneId.systemDefault()); attendancePunchRecordDO.setShouldPunchTime(shouldPunchTime); attendancePunchRecordDOList.add(attendancePunchRecordDO); - // TODO: 2024/5/24 } } } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/AttendanceServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/AttendanceServiceImpl.java index 9e2f8a96..fe290bd1 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/AttendanceServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/AttendanceServiceImpl.java @@ -696,10 +696,11 @@ public class AttendanceServiceImpl implements AttendanceService { vo.setAbsenteeismList(absenteeismList); vo.setFieldServiceList(fieldServiceList); int sum = averageWorkingHours.stream().mapToInt(a -> a.getCalculateNum().getTotalAttendanceDays()).sum(); - vo.setTeamAttendanceStatisticsNumVO(new TeamAttendanceStatisticsByCycleVO.TeamAttendanceStatisticsNumVO() - .setAverageWorkingHours( - sum == 0 ? 0 : averageWorkingHours.stream().mapToLong(a -> a.getCalculateNum().getTotalWorkingHours()).sum() / sum - ) + TeamAttendanceStatisticsByCycleVO.TeamAttendanceStatisticsNumVO teamAttendanceStatisticsByCycleVO = new TeamAttendanceStatisticsByCycleVO.TeamAttendanceStatisticsNumVO(); + teamAttendanceStatisticsByCycleVO.setAverageWorkingHours( + sum == 0 ? 0 : averageWorkingHours.stream().mapToLong(a -> a.getCalculateNum().getTotalWorkingHours()).sum() / sum + ); + vo.setTeamAttendanceStatisticsNumVO(teamAttendanceStatisticsByCycleVO .setBeLateNum(beLateList.stream().mapToInt(a -> a.getCalculateNum().getTotalLateArrivalsNumber()).sum()) .setLeaveEarlyNum(leaveEarlyList.stream().mapToInt(a -> a.getCalculateNum().getTotalEarlyDeparturesNumber()).sum()) .setMissingCardNum(missingCardList.stream().mapToInt(a -> a.getCalculateNum().getTotalMissingCardsNumber()).sum())