平均工时调整
This commit is contained in:
parent
c38622562d
commit
2f821a76b1
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -38,6 +38,7 @@ public class AttendanceFixedDO extends BaseDO {
|
||||
/**
|
||||
* 班次id(为空表示休息)
|
||||
*/
|
||||
@TableField(updateStrategy = FieldStrategy.IGNORED)
|
||||
private Long attendanceGroupShiftId;
|
||||
|
||||
}
|
@ -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是
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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())
|
||||
|
Loading…
Reference in New Issue
Block a user