考勤请假数据重构

This commit is contained in:
fl 2025-02-18 11:11:38 +08:00
parent a0df3e03f6
commit 64dcc34d46
7 changed files with 135 additions and 31 deletions

View File

@ -134,7 +134,7 @@ public interface AttSourceDataDao {
* 查询所有的请假数据
* @return list bean
*/
List<LeaveBean> getLeaveData();
List<LeaveBean> getLeaveData(String pushDate);
void updateHisData(String date);
@ -225,4 +225,10 @@ public interface AttSourceDataDao {
* @return
*/
List<Holiday> selectHolidayByDay(String pushDate);
/**
* 请假数据更新--修改考勤状态
* @param v
*/
void updateLeaveData(AttDataBean v);
}

View File

@ -75,4 +75,11 @@ public class AttDataBean {
this.orgId = orgId;
this.userId = userId;
}
public AttDataBean(String attCurrentDay, String attStatus, String attType, Long userId) {
this.attCurrentDay = attCurrentDay;
this.attStatus = attStatus;
this.attType = attType;
this.userId = userId;
}
}

View File

@ -13,9 +13,10 @@ public interface AttCalService {
void getAttendanceData(String pushDate, int pushType);
/**
* 插入模板数据
* @param pushDate
* @param pushType
* 人员考勤模版数据默认是未打卡
* 每天早上0点30执行一次
* @param pushDate 时间
* @param pushType 1:自动推送当天 2:手动历史
*/
void insertAttTempData(String pushDate, int pushType);
@ -47,4 +48,10 @@ public interface AttCalService {
* @param pushDate 时间
*/
void updateLegalHolidayData(String pushDate);
/**
* 请假数据应用步骤二请假数据更新
* 法定节假日不会随时间变化一天执行一次就可以了
* @param pushDate 时间
*/
void updateLeaveData(String pushDate);
}

View File

@ -220,12 +220,28 @@ public class AttCalServiceImpl implements AttCalService {
}
}
/**
* 请假数据应用步骤二请假数据更新
* 法定节假日不会随时间变化一天执行一次就可以了
* @param pushDate 时间
*/
@Override
public void updateLeaveData(String pushDate) {
/**
* 查出在考勤组人员的请假数据
*/
List<LeaveBean> leaveList = Optional.ofNullable(attSourceDataDao.getLeaveData(pushDate)).
orElseGet(ArrayList::new);
if (!leaveList.isEmpty()) {
leaveList.forEach(this::threadLeaveData);
}
}
/**
* 插入模板数据
*
* @param pushDate
* @param pushType 1定时 2手动
* 人员考勤模版数据默认是未打卡
* 每天早上0点30执行一次
* @param pushDate 时间
* @param pushType 1:自动推送当天 2:手动历史
*/
@Override
public void insertAttTempData(String pushDate, int pushType) {
@ -795,4 +811,46 @@ public class AttCalServiceImpl implements AttCalService {
}
}
/**
* 根据请假数据去更新考勤数据
*/
private void threadLeaveData(LeaveBean c) {
//1.将请假区间变成日期集合
// if(c.getUserId() == 263){
// System.out.println("米娜");
// }
List<String> dateLists = AttTimeUtil.getStrDateListBetween(c.getLeaveStartDate(), c.getLeaveEndDate());
if (!dateLists.isEmpty()) {
// //根据开始时间结束时间获取节假日的日期集合
dateLists.forEach(v -> {
boolean tf = false;
AttDataBean toWorkBean = new AttDataBean(v, c.getAttStatus(), "1",
c.getUserId());
AttDataBean offWorkBean = new AttDataBean(v, c.getAttStatus(), "2",
c.getUserId());
//开始和结束的那天是否只请了半天
if (c.getLeaveStartDate().equals(v)) {
if (c.getLeaveStartInterval().equals("2")) {
attSourceDataDao.updateLeaveData(offWorkBean);
} else {
tf = true;
}
} else if (c.getLeaveEndDate().equals(v)) {
if (c.getLeaveEndInterval().equals("1")) {
attSourceDataDao.updateLeaveData(toWorkBean);
} else {
tf = true;
}
} else {
tf = true;
}
if (tf) {
attSourceDataDao.updateLeaveData(toWorkBean);
attSourceDataDao.updateLeaveData(offWorkBean);
}
});
}
}
}

View File

@ -318,7 +318,7 @@ public class AttTasks {
/**
* 查出在考勤组人员的请假数据
*/
List<LeaveBean> leaveList = Optional.ofNullable(attSourceDataDao.getLeaveData()).
List<LeaveBean> leaveList = Optional.ofNullable(attSourceDataDao.getLeaveData(pushDate)).
orElseGet(ArrayList::new);
if (!leaveList.isEmpty()) {
leaveList.forEach(leaveData -> threadLeaveData(leaveData, pushDate));

View File

@ -118,8 +118,18 @@ public class NewAttTask {
* @param pushDate 时间
*/
private void updateLegalHolidayData(String pushDate) {
//旷工状态更新
//法假数据更新
attCalService.updateLegalHolidayData(pushDate);
}
/**
* 请假数据应用步骤二请假数据更新
* 法定节假日不会随时间变化一天执行一次就可以了
* @param pushDate 时间
*/
private void updateLeaveData(String pushDate) {
//请假数据更新
attCalService.updateLeaveData(pushDate);
}
}

View File

@ -67,16 +67,16 @@
</insert>
<insert id="insertAttDataList">
insert into att_data(user_id, att_current_day, att_status, att_type)
insert into att_data(user_id, org_id, att_current_day, att_status, att_type)
values
<foreach collection="list" item="item" separator=",">
(#{item.userId}, #{item.attCurrentDay}, #{item.attStatus}, #{item.attType})
(#{item.userId}, #{item.orgId}, #{item.attCurrentDay}, #{item.attStatus}, #{item.attType})
</foreach>
;
insert into att_data_update(user_id, att_current_day, att_status, att_type)
insert into att_data_update(user_id, org_id, att_current_day, att_status, att_type)
values
<foreach collection="list" item="item" separator=",">
(#{item.userId}, #{item.attCurrentDay}, #{item.attStatus}, #{item.attType})
(#{item.userId}, #{item.orgId}, #{item.attCurrentDay}, #{item.attStatus}, #{item.attType})
</foreach>
;
</insert>
@ -150,6 +150,26 @@
</foreach>
</update>
<update id="updateLeaveData">
update att_data
set att_status = CASE
WHEN att_status = '11' THEN att_status
ELSE #{v.attStatus}
END
where user_id = #{v.userId}
and att_current_day = #{v.attCurrentDay}
and att_type = #{v.attType};
update att_data_update
set att_status = CASE
WHEN att_status = '11' THEN att_status
ELSE #{v.attStatus}
END
where user_id = #{v.userId}
and att_current_day = #{v.attCurrentDay}
and att_type = #{v.attType}
and is_update = 0;
</update>
<delete id="updateHisData">
delete
from att_source_data
@ -391,23 +411,19 @@
</select>
<select id="getLeaveData" resultType="com.bonus.system.att.entity.LeaveBean">
SELECT agpr.org_id,
ag.att_type,
la.*,
SELECT la.*,
sdd.dict_value AS attStatus
FROM leave_apply la
LEFT JOIN sys_dict_data sdd ON sdd.dict_label =
IF
(la.leave_type IS NOT NULL, la.leave_type, la.type)
AND sdd.dict_type = 'att_status'
LEFT JOIN att_group_person_relation agpr ON la.user_id = agpr.user_id
LEFT JOIN att_group ag ON ag.id = agpr.group_id
AND ag.is_active = '1'
WHERE la.is_active = 1
AND la.examine_status = 1
AND sdd.dict_value IS NOT NULL
AND agpr.is_active = 1
ORDER BY leave_start_date DESC
AND leave_start_date BETWEEN #{pushDate} - INTERVAL 3 DAY
and #{pushDate}
ORDER BY
</select>
<select id="getLeaveDataByUserId" resultType="java.lang.Integer">
@ -445,20 +461,22 @@
<select id="getAttPerson" resultType="com.bonus.system.att.entity.AttDataBean">
SELECT su.user_id,
ash.group_id,
suo.org_id,
'1' AS attType,
'0' AS attStatus
FROM att_setting_history ash
LEFT JOIN sys_user su ON ash.user_id = su.user_id
AND su.is_active = 1
left join sys_user_org suo ON su.user_id = suo.user_id
WHERE ash.current_day = #{pushDate}
UNION
SELECT su.user_id,
ash.group_id,
suo.org_id,
'2' AS attType,
'0' AS attStatus
FROM att_setting_history ash
LEFT JOIN sys_user su ON ash.user_id = su.user_id
AND su.is_active = 1
left join sys_user_org suo ON su.user_id = suo.user_id
WHERE ash.current_day = #{pushDate}
</select>
<select id="getAttDataPerson" resultType="java.lang.Long">
@ -486,19 +504,17 @@
WHERE
att_current_day = #{pushDate}
AND att_status = 0
And is_update = 0
And is_update = 0
<if test='attType = ""'>
AND att_type = #{attType}
</if>
</select>
<select id="selectHolidayByDay" resultType="com.bonus.system.att.entity.Holiday">
SELECT
*
FROM
sys_holiday
SELECT *
FROM sys_holiday
WHERE
date = #{pushDate}
AND type = '1'
date = #{pushDate}
AND type = '1'
</select>
</mapper>