平均工时调整

This commit is contained in:
aikai 2024-05-30 20:55:32 +08:00
parent c38622562d
commit 2f821a76b1
6 changed files with 54 additions and 10 deletions

View File

@ -1,5 +1,7 @@
package cn.iocoder.yudao.module.system.controller.app.attendance.vo; 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 io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
@ -39,6 +41,9 @@ public class TeamAttendanceStatisticsByCycleVO {
@Schema(description = "平均工时") @Schema(description = "平均工时")
private Long averageWorkingHours; private Long averageWorkingHours;
@Schema(description = "平均工时中文")
private String averageWorkingHourStr;
@Schema(description = "迟到次数") @Schema(description = "迟到次数")
private Integer beLateNum; private Integer beLateNum;
@ -53,5 +58,12 @@ public class TeamAttendanceStatisticsByCycleVO {
@Schema(description = "外勤次数") @Schema(description = "外勤次数")
private Integer fieldServiceNum; private Integer fieldServiceNum;
public void setAverageWorkingHours(Long averageWorkingHours) {
this.averageWorkingHours = averageWorkingHours;
this.averageWorkingHourStr = DateUtil.formatBetween(averageWorkingHours, BetweenFormatter.Level.MINUTE);
}
} }
} }

View File

@ -38,6 +38,7 @@ public class AttendanceFixedDO extends BaseDO {
/** /**
* 班次id为空表示休息 * 班次id为空表示休息
*/ */
@TableField(updateStrategy = FieldStrategy.IGNORED)
private Long attendanceGroupShiftId; private Long attendanceGroupShiftId;
} }

View File

@ -1,11 +1,8 @@
package cn.iocoder.yudao.module.system.dal.dataobject.attendance.scheduling; 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 cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.*;
import lombok.*;
/** /**
* 排班制考勤设置 DO * 排班制考勤设置 DO
@ -38,6 +35,7 @@ public class AttendanceSchedulingDO extends BaseDO {
/** /**
* 班次id * 班次id
*/ */
@TableField(updateStrategy = FieldStrategy.IGNORED)
private Long attendanceGroupShiftId; private Long attendanceGroupShiftId;
/** /**
* 是否休息 0否 1是 * 是否休息 0否 1是

View File

@ -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<String> execute() throws Exception {
log.info("开始 修改考勤缺卡");
attendancePunchRecordMapper.selectList(new LambdaQueryWrapper<>());
log.info("结束 修改考勤缺卡");
// 返回执行成功
return ReturnT.SUCCESS;
}
}

View File

@ -120,7 +120,6 @@ public class AttendanceStatisticsJob {
LocalDateTime shouldPunchTime = LocalDateTime.ofInstant(DateUtils.buildHHmmTime(attendanceOnTheDayDTO.getTime()).toInstant(), ZoneId.systemDefault()); LocalDateTime shouldPunchTime = LocalDateTime.ofInstant(DateUtils.buildHHmmTime(attendanceOnTheDayDTO.getTime()).toInstant(), ZoneId.systemDefault());
attendancePunchRecordDO.setShouldPunchTime(shouldPunchTime); attendancePunchRecordDO.setShouldPunchTime(shouldPunchTime);
attendancePunchRecordDOList.add(attendancePunchRecordDO); attendancePunchRecordDOList.add(attendancePunchRecordDO);
// TODO: 2024/5/24
} }
} }
} }

View File

@ -696,10 +696,11 @@ public class AttendanceServiceImpl implements AttendanceService {
vo.setAbsenteeismList(absenteeismList); vo.setAbsenteeismList(absenteeismList);
vo.setFieldServiceList(fieldServiceList); vo.setFieldServiceList(fieldServiceList);
int sum = averageWorkingHours.stream().mapToInt(a -> a.getCalculateNum().getTotalAttendanceDays()).sum(); int sum = averageWorkingHours.stream().mapToInt(a -> a.getCalculateNum().getTotalAttendanceDays()).sum();
vo.setTeamAttendanceStatisticsNumVO(new TeamAttendanceStatisticsByCycleVO.TeamAttendanceStatisticsNumVO() TeamAttendanceStatisticsByCycleVO.TeamAttendanceStatisticsNumVO teamAttendanceStatisticsByCycleVO = new TeamAttendanceStatisticsByCycleVO.TeamAttendanceStatisticsNumVO();
.setAverageWorkingHours( teamAttendanceStatisticsByCycleVO.setAverageWorkingHours(
sum == 0 ? 0 : averageWorkingHours.stream().mapToLong(a -> a.getCalculateNum().getTotalWorkingHours()).sum() / sum sum == 0 ? 0 : averageWorkingHours.stream().mapToLong(a -> a.getCalculateNum().getTotalWorkingHours()).sum() / sum
) );
vo.setTeamAttendanceStatisticsNumVO(teamAttendanceStatisticsByCycleVO
.setBeLateNum(beLateList.stream().mapToInt(a -> a.getCalculateNum().getTotalLateArrivalsNumber()).sum()) .setBeLateNum(beLateList.stream().mapToInt(a -> a.getCalculateNum().getTotalLateArrivalsNumber()).sum())
.setLeaveEarlyNum(leaveEarlyList.stream().mapToInt(a -> a.getCalculateNum().getTotalEarlyDeparturesNumber()).sum()) .setLeaveEarlyNum(leaveEarlyList.stream().mapToInt(a -> a.getCalculateNum().getTotalEarlyDeparturesNumber()).sum())
.setMissingCardNum(missingCardList.stream().mapToInt(a -> a.getCalculateNum().getTotalMissingCardsNumber()).sum()) .setMissingCardNum(missingCardList.stream().mapToInt(a -> a.getCalculateNum().getTotalMissingCardsNumber()).sum())