442 lines
12 KiB
Java
442 lines
12 KiB
Java
package jnpf.entity.attendance;
|
||
|
||
import com.baomidou.mybatisplus.annotation.FieldStrategy;
|
||
import com.baomidou.mybatisplus.annotation.TableField;
|
||
import com.baomidou.mybatisplus.annotation.TableName;
|
||
import jnpf.base.entity.SuperBaseEntity;
|
||
import jnpf.enums.attendance.AttendanceTypeEnum;
|
||
import jnpf.model.attendance.vo.attendance.OvertimeRuleDetailVo;
|
||
import jnpf.util.DateDetail;
|
||
import lombok.EqualsAndHashCode;
|
||
import lombok.Getter;
|
||
import lombok.NoArgsConstructor;
|
||
import lombok.Setter;
|
||
|
||
import java.io.Serializable;
|
||
import java.math.BigDecimal;
|
||
import java.math.RoundingMode;
|
||
import java.util.Date;
|
||
import java.util.Objects;
|
||
|
||
/**
|
||
* 考勤组-每日出勤规则
|
||
*
|
||
* @author yanwenfu
|
||
* @create 2023-11-22
|
||
*/
|
||
|
||
@Getter
|
||
@Setter
|
||
@NoArgsConstructor
|
||
@EqualsAndHashCode(callSuper = true)
|
||
@TableName(value = "ftb_attendance_daily_rule")
|
||
public class FtbAttendanceDailyRule extends SuperBaseEntity.SuperCUDBaseEntity<String> implements Serializable {
|
||
|
||
private static final long serialVersionUID = 7692755431988353300L;
|
||
|
||
/**
|
||
* 考勤组id
|
||
*/
|
||
@TableField(value = "F_GroupId")
|
||
private String groupId;
|
||
|
||
/**
|
||
* 班次类型 0全天班次 1上午班次 2下午班次
|
||
*/
|
||
@TableField(value = "F_SchedulesType")
|
||
private Integer schedulesType;
|
||
/**
|
||
* 是否自己的考勤组(0未产生借调 1被借调 2借调)
|
||
*/
|
||
@TableField(value = "F_SelfGroup")
|
||
private Integer selfGroup;
|
||
|
||
/**
|
||
* 班次时段id
|
||
*/
|
||
@TableField(value = "F_PeriodId")
|
||
private String periodId;
|
||
/**
|
||
* 班次时段信息
|
||
*/
|
||
@TableField(value = "F_PeriodInfo")
|
||
private String periodInfo;
|
||
/**
|
||
* 班次id
|
||
*/
|
||
@TableField(value = "F_ShiftId")
|
||
private String shiftId;
|
||
|
||
/**
|
||
* 日期
|
||
*/
|
||
@TableField(value = "F_Day")
|
||
private Date day;
|
||
|
||
/**
|
||
* 用户id
|
||
*/
|
||
@TableField(value = "F_UserId")
|
||
private String userId;
|
||
|
||
/**
|
||
* 允许迟到(0否 1是)
|
||
*/
|
||
@TableField(value = "F_LateEnable")
|
||
private Integer lateEnable;
|
||
|
||
/**
|
||
* 允许早退(0否 1是)
|
||
*/
|
||
@TableField(value = "F_EarlyEnable")
|
||
private Integer earlyEnable;
|
||
|
||
/**
|
||
* 允许休息时间(0否 1是)
|
||
*/
|
||
@TableField(value = "F_BreakEnable")
|
||
private Integer breakEnable;
|
||
|
||
/**
|
||
* 允许次日下班(0否 1是)
|
||
*/
|
||
@TableField(value = "F_NextDayEnable")
|
||
private Integer nextDayEnable;
|
||
|
||
/**
|
||
* 打卡开始时间点
|
||
*/
|
||
@TableField(value = "F_ClockStartPoint")
|
||
private Date clockStartPoint;
|
||
|
||
/**
|
||
* 上班时间点
|
||
*/
|
||
@TableField(value = "F_InPoint")
|
||
private Date inPoint;
|
||
/**
|
||
* 是否上班边界覆盖(0未覆盖 1加班覆盖 2借调覆盖 3请假覆盖)
|
||
*/
|
||
@TableField(value = "F_InUnbounded")
|
||
private Integer inUnbounded;
|
||
/**
|
||
* 上班是否被外出覆盖(0未覆盖 1覆盖)
|
||
*/
|
||
@TableField(value = "F_InStepOutType")
|
||
private Integer inStepOutType;
|
||
/**
|
||
* 上班被外出覆盖申请id
|
||
*/
|
||
@TableField(value = "F_InStepOutApplyId")
|
||
private String inStepOutApplyId;
|
||
/**
|
||
* 原上班时间点
|
||
*/
|
||
@TableField(value = "F_OriginInPoint")
|
||
private Date originInPoint;
|
||
|
||
/**
|
||
* 迟到时间点
|
||
*/
|
||
@TableField(value = "F_LatePoint")
|
||
private Date latePoint;
|
||
/**
|
||
* 是否晚走晚到
|
||
*/
|
||
@TableField(value = "F_IsLateOutLateIn")
|
||
private Integer isLateOutLateIn;
|
||
/**
|
||
* 原始迟到时间点
|
||
*/
|
||
@TableField(value = "F_OriginalLatePoint")
|
||
private Date originalLatePoint;
|
||
|
||
|
||
/**
|
||
* 上班缺卡时间点
|
||
*/
|
||
@TableField(value = "F_InLackPoint")
|
||
private Date inLackPoint;
|
||
|
||
public Date getOriginBreakStartPoint() {
|
||
return Objects.nonNull(originBreakStartPoint) ? originBreakStartPoint : breakStartPoint;
|
||
}
|
||
|
||
public Date getOriginBreakEndPoint() {
|
||
return Objects.nonNull(originBreakEndPoint)? originBreakEndPoint : breakEndPoint;
|
||
}
|
||
|
||
public Date getOriginOutPoint() {
|
||
return Objects.nonNull(originOutPoint)? originOutPoint : outPoint;
|
||
}
|
||
|
||
public Date getOriginInPoint() {
|
||
return Objects.nonNull(originInPoint)? originInPoint : inPoint;
|
||
}
|
||
|
||
/**
|
||
* 休息开始时间点
|
||
*/
|
||
@TableField(value = "F_BreakStartPoint", updateStrategy = FieldStrategy.IGNORED)
|
||
private Date breakStartPoint;
|
||
/**
|
||
* 休息开始时间点
|
||
*/
|
||
@TableField(value = "F_OriginBreakStartPoint", updateStrategy = FieldStrategy.IGNORED)
|
||
private Date originBreakStartPoint;
|
||
|
||
/**
|
||
* 休息结束时间点
|
||
*/
|
||
@TableField(value = "F_BreakEndPoint", updateStrategy = FieldStrategy.IGNORED)
|
||
private Date breakEndPoint;
|
||
/**
|
||
* 休息结束时间点
|
||
*/
|
||
@TableField(value = "F_OriginBreakEndPoint", updateStrategy = FieldStrategy.IGNORED)
|
||
private Date originBreakEndPoint;
|
||
|
||
/**
|
||
* 早退时间点
|
||
*/
|
||
@TableField(value = "F_EarlyPoint")
|
||
private Date earlyPoint;
|
||
|
||
/**
|
||
* 下班时间点
|
||
*/
|
||
@TableField(value = "F_OutPoint")
|
||
private Date outPoint;
|
||
/**
|
||
* 是否下班边界覆盖(0未覆盖 1加班覆盖 2借调覆盖 3请假覆盖)
|
||
*/
|
||
@TableField(value = "F_OutUnbounded")
|
||
private Integer outUnbounded;
|
||
/**
|
||
* 下班是否被外出覆盖(0未覆盖 1覆盖)
|
||
*/
|
||
@TableField(value = "F_OutStepOutType")
|
||
private Integer outStepOutType;
|
||
/**
|
||
* 下班被外出覆盖申请id
|
||
*/
|
||
@TableField(value = "F_OutStepOutApplyId")
|
||
private String outStepOutApplyId;
|
||
/**
|
||
* 原下班时间点
|
||
*/
|
||
@TableField(value = "F_OriginOutPoint")
|
||
private Date originOutPoint;
|
||
|
||
/**
|
||
* 下班缺卡时间点
|
||
*/
|
||
@TableField(value = "F_OutLackPoint")
|
||
private Date outLackPoint;
|
||
|
||
/**
|
||
* 出勤类型(1: 普班, 2: 休, 3: 假, 4: 假(带薪), 5: 加班)
|
||
*/
|
||
@TableField(value = "F_AttendanceType")
|
||
private Integer attendanceType;
|
||
/**
|
||
* 申请id
|
||
*/
|
||
@TableField(value = "F_ApplyId")
|
||
private String applyId;
|
||
/**
|
||
* 审核数据展示标识(1 起效,0 失效,2 打卡不展示,3 考勤组剔除人员待删除,9 标识出差,10 标识外出)
|
||
*/
|
||
@TableField(value = "F_ApplyViewEnable")
|
||
private Integer applyViewEnable;
|
||
/**
|
||
* 申请事件开始时间
|
||
*/
|
||
@TableField(value = "F_ApplyStart")
|
||
private Date applyStart;
|
||
/**
|
||
* 请假天数
|
||
*/
|
||
@TableField(value = "F_LeaveDay")
|
||
private BigDecimal leaveDay;
|
||
/**
|
||
* 申请单位(1小时 2日 3半日)
|
||
*/
|
||
@TableField(value = "F_ApplyUnit")
|
||
private Integer applyUnit;
|
||
/**
|
||
* 请假申请参数
|
||
*/
|
||
@TableField(value = "F_LeaveParam")
|
||
private String leaveParam;
|
||
|
||
|
||
public void setInPoint(Date inPoint) {
|
||
this.inPoint = inPoint;
|
||
calValidDuration();
|
||
}
|
||
|
||
public void calInLackPoint(Date inLackPoint) {
|
||
if (Objects.isNull(inLackPoint)) {
|
||
return;
|
||
}
|
||
this.inLackPoint = inLackPoint.after(this.outPoint) ? this.outPoint : inLackPoint;
|
||
}
|
||
|
||
public void calLatePoint(Date latePoint) {
|
||
if (Objects.isNull(latePoint)) {
|
||
return;
|
||
}
|
||
this.latePoint = latePoint.after(this.outPoint) ? this.outPoint : latePoint;
|
||
}
|
||
|
||
public void setBreakStartPoint(Date breakStartPoint) {
|
||
this.breakStartPoint = breakStartPoint;
|
||
calValidDuration();
|
||
}
|
||
|
||
public void setBreakEndPoint(Date breakEndPoint) {
|
||
this.breakEndPoint = breakEndPoint;
|
||
calValidDuration();
|
||
}
|
||
|
||
public void setOutPoint(Date outPoint) {
|
||
this.outPoint = outPoint;
|
||
calValidDuration();
|
||
}
|
||
|
||
/**
|
||
* 申请事件结束时间
|
||
*/
|
||
@TableField(value = "F_ApplyEnd")
|
||
private Date applyEnd;
|
||
/**
|
||
* 有效时长
|
||
*/
|
||
@TableField(value = "F_ValidDuration")
|
||
private Integer validDuration;
|
||
/**
|
||
* 时段工时
|
||
*/
|
||
@TableField(value = "F_PeriodWorkDay")
|
||
private BigDecimal periodWorkDay;
|
||
/**
|
||
* 计薪工时
|
||
*/
|
||
@TableField(value = "F_PayrollHours")
|
||
private BigDecimal payrollHours;
|
||
/**
|
||
* 原始有效时长
|
||
*/
|
||
@TableField(value = "F_OriginValidDuration")
|
||
private Integer originValidDuration;
|
||
|
||
public BigDecimal getPayrollHours() {
|
||
if(Objects.nonNull(payrollHours)) {
|
||
return payrollHours;
|
||
}
|
||
if (Objects.isNull(validDuration)) {
|
||
return BigDecimal.ZERO;
|
||
}
|
||
return BigDecimal.valueOf(validDuration).divide(BigDecimal.valueOf(60), 4, RoundingMode.HALF_UP);
|
||
}
|
||
|
||
/**
|
||
* 排序
|
||
*/
|
||
@TableField(value = "F_Sort")
|
||
private Integer sort;
|
||
/**
|
||
* 是否固定班 3自动排休调休上班 2为划线排班
|
||
*/
|
||
@TableField(value = "F_FixedMark")
|
||
private Integer fixedMark;
|
||
|
||
/** 隐藏(0:不隐藏, 1:上班隐藏) */
|
||
@TableField(exist = false)
|
||
private String inHideStatus = "0";
|
||
/** 隐藏(0:不隐藏, 1:下班隐藏) */
|
||
@TableField(exist = false)
|
||
private String outHideStatus = "0";
|
||
/** 上班无需打卡(true:是, false:否) */
|
||
@TableField(exist = false)
|
||
private boolean onWorkIgnore = false;
|
||
/** 下班无需打卡(true:是, false:否) */
|
||
@TableField(exist = false)
|
||
private boolean offWorkIgnore = false;
|
||
/** 行号 */
|
||
@TableField(exist = false)
|
||
private Integer rn;
|
||
/** 消息(离岗、回岗) */
|
||
@TableField(exist = false)
|
||
private String msg;
|
||
/** 加班规则 */
|
||
@TableField(exist = false)
|
||
private OvertimeRuleDetailVo overtimeRuleDetail;
|
||
/** 无审批加班 */
|
||
@TableField(exist = false)
|
||
private Integer overtime = 0;
|
||
/** 目标日期 */
|
||
@TableField(exist = false)
|
||
private String targetDate;
|
||
/** 实际日期(目标日期/目标日期-1) */
|
||
@TableField(exist = false)
|
||
private String queryDate;
|
||
|
||
@TableField(exist = false)
|
||
private Boolean isInsert = Boolean.FALSE;
|
||
@TableField(exist = false)
|
||
private Boolean isDelete = Boolean.FALSE;
|
||
public void delete(){
|
||
this.isDelete = true;
|
||
}
|
||
|
||
public void calValidDuration() {
|
||
if (Objects.equals(this.getAttendanceType(), AttendanceTypeEnum.LEAVE.getCode()) || Objects.equals(this.getAttendanceType(), AttendanceTypeEnum.ORDINARY.getCode())|| Objects.equals(this.getAttendanceType(), AttendanceTypeEnum.REST.getCode()) || Objects.equals(this.getAttendanceType(), AttendanceTypeEnum.WORKOVERTIME.getCode())) {
|
||
if (Objects.isNull(this.getInPoint())) {
|
||
return;
|
||
}
|
||
if (Objects.isNull(this.getOutPoint())) {
|
||
return;
|
||
}
|
||
this.setValidDuration(DateDetail.calculateMinuteDiff(this.getInPoint(), this.getOutPoint()));
|
||
if (Objects.isNull(this.getBreakEnable()) || this.getBreakEnable() == 0) {
|
||
return;
|
||
}
|
||
if (Objects.isNull(this.getBreakStartPoint())) {
|
||
return;
|
||
}
|
||
if (Objects.isNull(this.getBreakEndPoint())) {
|
||
return;
|
||
}
|
||
this.setValidDuration(this.getValidDuration() - DateDetail.calculateMinuteDiff(this.getBreakStartPoint(), this.getBreakEndPoint()));
|
||
}
|
||
}
|
||
public void calOriginValidDuration() {
|
||
if (Objects.equals(this.getAttendanceType(), AttendanceTypeEnum.LEAVE.getCode()) || Objects.equals(this.getAttendanceType(), AttendanceTypeEnum.ORDINARY.getCode())|| Objects.equals(this.getAttendanceType(), AttendanceTypeEnum.REST.getCode()) || Objects.equals(this.getAttendanceType(), AttendanceTypeEnum.WORKOVERTIME.getCode())) {
|
||
if (Objects.isNull(this.getOriginInPoint())) {
|
||
return;
|
||
}
|
||
if (Objects.isNull(this.getOriginOutPoint())) {
|
||
return;
|
||
}
|
||
this.setOriginValidDuration(DateDetail.calculateMinuteDiff(this.getOriginInPoint(), this.getOriginOutPoint()));
|
||
if (Objects.isNull(this.getBreakEnable()) || this.getBreakEnable() == 0) {
|
||
return;
|
||
}
|
||
if (Objects.isNull(this.getOriginBreakStartPoint())) {
|
||
return;
|
||
}
|
||
if (Objects.isNull(this.getOriginBreakEndPoint())) {
|
||
return;
|
||
}
|
||
this.setOriginValidDuration(this.getOriginValidDuration() - DateDetail.calculateMinuteDiff(this.getOriginBreakStartPoint(), this.getOriginBreakEndPoint()));
|
||
}
|
||
}
|
||
|
||
|
||
public void insertTrue() {
|
||
this.isInsert = Boolean.TRUE;
|
||
}
|
||
}
|