固定班制的新增业务

This commit is contained in:
dy
2025-07-16 19:15:27 +08:00
parent 365ec14925
commit 63dd804ced
16 changed files with 160 additions and 31 deletions

View File

@@ -42,7 +42,7 @@ public class AttendanceClockDate extends TenantEntity {
/** /**
* 日期类型(0:单个日期,1:时间段) * 日期类型(0:单个日期,1:时间段)
*/ */
private Long dateType; private Integer dateType;
/** /**
* 开始日期 * 开始日期

View File

@@ -6,6 +6,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.io.Serial; import java.io.Serial;
import java.util.List;
/** /**
* 考勤组基本信息对象 attendance_group * 考勤组基本信息对象 attendance_group
@@ -40,7 +41,8 @@ public class AttendanceGroup extends TenantEntity {
/** /**
* 考勤类型(0:固定班制,1:排班制) * 考勤类型(0:固定班制,1:排班制)
*/ */
private Long attendanceType; private Integer attendanceType;
} }

View File

@@ -28,14 +28,19 @@ public class AttendanceWeekSet extends TenantEntity {
private Long id; private Long id;
/** /**
* 固定班制关联id * 考勤组固定班制关联id
*/ */
private Long fixedScheduleId; private Long groupId;
/** /**
* 星期1代表周一7代表周日 * 星期1代表周一7代表周日
*/ */
private Long dayOfWeek; private Integer dayOfWeek;
/**
* 是否休息0不休息1休息
*/
private Integer isRest;
} }

View File

@@ -30,17 +30,17 @@ public class AttendanceWeeksetShift extends TenantEntity {
/** /**
* 班次id * 班次id
*/ */
private Long weekId; private Long shiftId;
/** /**
* 固定班制的的工作日id * 固定班制的的工作日id
*/ */
private Long shiftSetId; private Long weekSetId;
/** /**
* 排班制的排班周期id * 排班制的排班周期id
*/ */
private Long scheduleSchedule; private Long scheduleId;
} }

View File

@@ -1,5 +1,6 @@
package org.dromara.property.domain.bo; package org.dromara.property.domain.bo;
import org.dromara.property.domain.AttendanceClockDate;
import org.dromara.property.domain.AttendanceGroup; import org.dromara.property.domain.AttendanceGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.AddGroup;
@@ -9,6 +10,9 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*; import jakarta.validation.constraints.*;
import java.util.Date;
import java.util.List;
/** /**
* 考勤组基本信息业务对象 attendance_group * 考勤组基本信息业务对象 attendance_group
* *
@@ -41,5 +45,18 @@ public class AttendanceGroupBo extends BaseEntity {
*/ */
private Long attendanceType; private Long attendanceType;
/**
*前端传班次id
*/
private Long shiftId;
List<Integer> weekList;
//前端传必须打卡还是无需打卡
private Integer mustNoCheck;
private AttendanceClockDate clockDate;
} }

View File

@@ -52,12 +52,12 @@ public class AttendanceShiftBo extends BaseEntity {
/** /**
* 状态0off1on * 状态0off1on
*/ */
private Long status; private Integer status;
/** /**
* 是否休息0不休息1休息 * 是否休息0不休息1休息
*/ */
private Long isRest; private Integer isRest;
/** /**
* 休息开始时间 * 休息开始时间

View File

@@ -27,14 +27,19 @@ public class AttendanceWeekSetBo extends BaseEntity {
private Long id; private Long id;
/** /**
* 固定班制关联id * 考勤组固定班制关联id
*/ */
private Long fixedScheduleId; private Long groupId;
/** /**
* 星期1代表周一7代表周日 * 星期1代表周一7代表周日
*/ */
private Long dayOfWeek; private Long dayOfWeek;
/**
* 是否休息0不休息1休息
*/
private Integer isRest;
} }

View File

@@ -29,17 +29,17 @@ public class AttendanceWeeksetShiftBo extends BaseEntity {
/** /**
* 班次id * 班次id
*/ */
private Long weekId; private Long shiftId;
/** /**
* 固定班制的的工作日id * 固定班制的的工作日id
*/ */
private Long shiftSetId; private Long weekSetId;
/** /**
* 排班制的排班周期id * 排班制的排班周期id
*/ */
private Long scheduleSchedule; private Long scheduleId;
} }

View File

@@ -9,5 +9,18 @@ public class StatusConstant {
public static final Integer REST = 1; public static final Integer REST = 1;
public static final Integer DONTREST = 0; public static final Integer DONTREST = 0;
//考勤类型0固定班制 1排班制
public static final Integer FIXEDSCHEDULE = 0;
public static final Integer SHIFTSCHEDULE = 1;
//是否必须打卡is_must_check 1必须打卡 0不用打卡
public static final Integer MUSTCHECK = 1;
public static final Integer NOCHECK = 0;
//日期类型0单个日期 1日期范围
public static final Integer SINGLEDATE = 0;
public static final Integer DATERANGE = 1;
} }

View File

@@ -7,11 +7,12 @@ import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert; import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper; import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data; import lombok.Data;
import org.dromara.property.domain.AttendanceWeekSet;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
@@ -53,4 +54,7 @@ public class AttendanceGroupVo implements Serializable {
private Long attendanceType; private Long attendanceType;
List<AttendanceWeekSet> weekList;
} }

View File

@@ -60,14 +60,14 @@ public class AttendanceShiftVo implements Serializable {
*/ */
@ExcelProperty(value = "状态", converter = ExcelDictConvert.class) @ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "0=off1on") @ExcelDictFormat(readConverterExp = "0=off1on")
private Long status; private Integer status;
/** /**
* 是否休息0不休息1休息 * 是否休息0不休息1休息
*/ */
@ExcelProperty(value = "是否休息", converter = ExcelDictConvert.class) @ExcelProperty(value = "是否休息", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "0=不休息1休息") @ExcelDictFormat(readConverterExp = "0=不休息1休息")
private Long isRest; private Integer isRest;
/** /**
* 休息开始时间 * 休息开始时间

View File

@@ -37,8 +37,8 @@ public class AttendanceWeekSetVo implements Serializable {
/** /**
* 固定班制关联id * 固定班制关联id
*/ */
@ExcelProperty(value = "固定班制关联id") @ExcelProperty(value = "考勤组固定班制关联id")
private Long fixedScheduleId; private Long groupId;
/** /**
* 星期1代表周一7代表周日 * 星期1代表周一7代表周日
@@ -47,5 +47,10 @@ public class AttendanceWeekSetVo implements Serializable {
@ExcelDictFormat(readConverterExp = "1=代表周一7代表周日") @ExcelDictFormat(readConverterExp = "1=代表周一7代表周日")
private Long dayOfWeek; private Long dayOfWeek;
/**
* 是否休息0不休息1休息
*/
private Integer isRest;
} }

View File

@@ -38,19 +38,19 @@ public class AttendanceWeeksetShiftVo implements Serializable {
* 班次id * 班次id
*/ */
@ExcelProperty(value = "班次id") @ExcelProperty(value = "班次id")
private Long weekId; private Long shiftId;
/** /**
* 固定班制的的工作日id * 固定班制的的工作日id
*/ */
@ExcelProperty(value = "固定班制的的工作日id") @ExcelProperty(value = "固定班制的的工作日id")
private Long shiftSetId; private Long weekSetId;
/** /**
* 排班制的排班周期id * 排班制的排班周期id
*/ */
@ExcelProperty(value = "排班制的排班周期id") @ExcelProperty(value = "排班制的排班周期id")
private Long scheduleSchedule; private Long scheduleId;
} }

View File

@@ -9,16 +9,23 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.property.domain.*;
import org.dromara.property.domain.constant.StatusConstant;
import org.dromara.property.mapper.AttendanceClockDateMapper;
import org.dromara.property.mapper.AttendanceFixedScheduleMapper;
import org.dromara.property.mapper.AttendanceWeekSetMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.dromara.property.domain.bo.AttendanceGroupBo; import org.dromara.property.domain.bo.AttendanceGroupBo;
import org.dromara.property.domain.vo.AttendanceGroupVo; import org.dromara.property.domain.vo.AttendanceGroupVo;
import org.dromara.property.domain.AttendanceGroup;
import org.dromara.property.mapper.AttendanceGroupMapper; import org.dromara.property.mapper.AttendanceGroupMapper;
import org.dromara.property.service.IAttendanceGroupService; import org.dromara.property.service.IAttendanceGroupService;
import org.springframework.transaction.annotation.Transactional;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Collection; import java.util.Collection;
import java.util.Objects;
/** /**
* 考勤组基本信息Service业务层处理 * 考勤组基本信息Service业务层处理
@@ -33,6 +40,10 @@ public class AttendanceGroupServiceImpl implements IAttendanceGroupService {
private final AttendanceGroupMapper baseMapper; private final AttendanceGroupMapper baseMapper;
private final AttendanceWeekSetMapper weekSetMapper;
private final AttendanceClockDateMapper attendanceClockDateMapper;
/** /**
* 查询考勤组基本信息 * 查询考勤组基本信息
* *
@@ -40,7 +51,7 @@ public class AttendanceGroupServiceImpl implements IAttendanceGroupService {
* @return 考勤组基本信息 * @return 考勤组基本信息
*/ */
@Override @Override
public AttendanceGroupVo queryById(Long id){ public AttendanceGroupVo queryById(Long id) {
return baseMapper.selectVoById(id); return baseMapper.selectVoById(id);
} }
@@ -86,17 +97,84 @@ public class AttendanceGroupServiceImpl implements IAttendanceGroupService {
* @param bo 考勤组基本信息 * @param bo 考勤组基本信息
* @return 是否新增成功 * @return 是否新增成功
*/ */
@Transactional(rollbackFor = Exception.class)
@Override @Override
public Boolean insertByBo(AttendanceGroupBo bo) { public Boolean insertByBo(AttendanceGroupBo bo) {
AttendanceGroup add = MapstructUtils.convert(bo, AttendanceGroup.class); AttendanceGroup add = MapstructUtils.convert(bo, AttendanceGroup.class);
validEntityBeforeSave(add); validEntityBeforeSave(add);
//1.向考勤组表插入数据
boolean flag = baseMapper.insert(add) > 0; boolean flag = baseMapper.insert(add) > 0;
if (flag) { if (flag) {
assert add != null;
bo.setId(add.getId()); bo.setId(add.getId());
} }
//2.判断考勤是固定班制还是排班制
if (Objects.equals(add.getAttendanceType(), StatusConstant.FIXEDSCHEDULE)) {
//2.1固定班制,向周期表插入数据
//拿到考勤组的id,遍历weekList
for (Integer week : bo.getWeekList()) {
//向工作表中插入数据
AttendanceWeekSet weekSet = new AttendanceWeekSet();
weekSet.setGroupId(add.getId());
weekSet.setDayOfWeek(week);
}
//通过考勤组的id拿到周期表的所有关联id
List<AttendanceWeekSet> weekSets = weekSetMapper.selectList(Wrappers.<AttendanceWeekSet>lambdaQuery().eq(AttendanceWeekSet::getGroupId, add.getId()));
//2.2遍历周期表,向班次和周设置表的中间表插入数据
for (AttendanceWeekSet weekSet : weekSets) {
AttendanceWeeksetShift attendanceWeeksetShift = new AttendanceWeeksetShift();
attendanceWeeksetShift.setWeekSetId(weekSet.getId());
attendanceWeeksetShift.setShiftId(bo.getShiftId());
}
//todo: 法定节假日自动排休
//4.新增打卡日期表
//4.1判断是必须打卡还是无需打卡
//(1)必须打卡,向打卡日期表中插入数据
if (Objects.equals(bo.getMustNoCheck(), StatusConstant.MUSTCHECK)) {
judgeDate(bo);
}
//(2)无需打卡,向打卡日期表中插入数据
else if (Objects.equals(bo.getMustNoCheck(), StatusConstant.NOCHECK)) {
judgeDate(bo);
}
}
if (Objects.equals(add.getAttendanceType(), StatusConstant.SHIFTSCHEDULE)) {
//2.2排班制,向天数表中插入数据
AttendanceScheduleCycle attendanceScheduleCycle = new AttendanceScheduleCycle();
}
return flag; return flag;
} }
private void judgeDate(AttendanceGroupBo bo) {
//3.1.1判断是时间段还是单个日期
//如果为单个日期,向打卡日期表中插入数据
if (Objects.equals(bo.getClockDate().getDateType(), StatusConstant.SINGLEDATE)) {
insertAttendaanceClockDate(bo);
//设置结束时间为开始时间
bo.getClockDate().setEndDate(bo.getClockDate().getStartDate());
}
//如果为时间段,向打卡日期表中插入数据
else if (Objects.equals(bo.getClockDate().getDateType(), StatusConstant.DATERANGE)) {
insertAttendaanceClockDate(bo);
}
}
private void insertAttendaanceClockDate(AttendanceGroupBo bo) {
//向attendance_clock_date表中插入数据
AttendanceClockDate attendanceClockDate = new AttendanceClockDate();
BeanUtils.copyProperties(bo.getClockDate(), attendanceClockDate);
attendanceClockDateMapper.insert(attendanceClockDate);
}
/** /**
* 修改考勤组基本信息 * 修改考勤组基本信息
* *
@@ -113,7 +191,7 @@ public class AttendanceGroupServiceImpl implements IAttendanceGroupService {
/** /**
* 保存前的数据校验 * 保存前的数据校验
*/ */
private void validEntityBeforeSave(AttendanceGroup entity){ private void validEntityBeforeSave(AttendanceGroup entity) {
//TODO 做一些数据校验,如唯一约束 //TODO 做一些数据校验,如唯一约束
} }
@@ -126,7 +204,7 @@ public class AttendanceGroupServiceImpl implements IAttendanceGroupService {
*/ */
@Override @Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){ if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验 //TODO 做一些业务上的校验,判断是否需要校验
} }
return baseMapper.deleteByIds(ids) > 0; return baseMapper.deleteByIds(ids) > 0;

View File

@@ -74,7 +74,7 @@ public class AttendanceWeekSetServiceImpl implements IAttendanceWeekSetService {
Map<String, Object> params = bo.getParams(); Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<AttendanceWeekSet> lqw = Wrappers.lambdaQuery(); LambdaQueryWrapper<AttendanceWeekSet> lqw = Wrappers.lambdaQuery();
lqw.orderByAsc(AttendanceWeekSet::getId); lqw.orderByAsc(AttendanceWeekSet::getId);
lqw.eq(bo.getFixedScheduleId() != null, AttendanceWeekSet::getFixedScheduleId, bo.getFixedScheduleId()); // lqw.eq(bo.getFixedScheduleId() != null, AttendanceWeekSet::getFixedScheduleId, bo.getFixedScheduleId());
lqw.eq(bo.getDayOfWeek() != null, AttendanceWeekSet::getDayOfWeek, bo.getDayOfWeek()); lqw.eq(bo.getDayOfWeek() != null, AttendanceWeekSet::getDayOfWeek, bo.getDayOfWeek());
return lqw; return lqw;
} }

View File

@@ -74,9 +74,9 @@ public class AttendanceWeeksetShiftServiceImpl implements IAttendanceWeeksetShif
Map<String, Object> params = bo.getParams(); Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<AttendanceWeeksetShift> lqw = Wrappers.lambdaQuery(); LambdaQueryWrapper<AttendanceWeeksetShift> lqw = Wrappers.lambdaQuery();
lqw.orderByAsc(AttendanceWeeksetShift::getId); lqw.orderByAsc(AttendanceWeeksetShift::getId);
lqw.eq(bo.getWeekId() != null, AttendanceWeeksetShift::getWeekId, bo.getWeekId()); // lqw.eq(bo.getWeekId() != null, AttendanceWeeksetShift::getWeekId, bo.getWeekId());
lqw.eq(bo.getShiftSetId() != null, AttendanceWeeksetShift::getShiftSetId, bo.getShiftSetId()); // lqw.eq(bo.getShiftSetId() != null, AttendanceWeeksetShift::getShiftSetId, bo.getShiftSetId());
lqw.eq(bo.getScheduleSchedule() != null, AttendanceWeeksetShift::getScheduleSchedule, bo.getScheduleSchedule()); lqw.eq(bo.getScheduleId() != null, AttendanceWeeksetShift::getScheduleId, bo.getScheduleId());
return lqw; return lqw;
} }