From 64dcc34d4670d481f7197eb2b13d416198bbfd2b Mon Sep 17 00:00:00 2001 From: fl <3098731433@qq.com> Date: Tue, 18 Feb 2025 11:11:38 +0800 Subject: [PATCH] =?UTF-8?q?=E8=80=83=E5=8B=A4=E8=AF=B7=E5=81=87=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/att/dao/AttSourceDataDao.java | 8 ++- .../bonus/system/att/entity/AttDataBean.java | 7 ++ .../system/att/service/AttCalService.java | 13 +++- .../system/att/service/AttCalServiceImpl.java | 66 +++++++++++++++++-- .../com/bonus/system/att/tasks/AttTasks.java | 2 +- .../bonus/system/att/tasks/NewAttTask.java | 12 +++- .../mapper/att/AttSourceDataMapper.xml | 58 ++++++++++------ 7 files changed, 135 insertions(+), 31 deletions(-) diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/dao/AttSourceDataDao.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/dao/AttSourceDataDao.java index ffef936..54d55ec 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/dao/AttSourceDataDao.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/dao/AttSourceDataDao.java @@ -134,7 +134,7 @@ public interface AttSourceDataDao { * 查询所有的请假数据 * @return list bean */ - List getLeaveData(); + List getLeaveData(String pushDate); void updateHisData(String date); @@ -225,4 +225,10 @@ public interface AttSourceDataDao { * @return */ List selectHolidayByDay(String pushDate); + + /** + * 请假数据更新--修改考勤状态 + * @param v + */ + void updateLeaveData(AttDataBean v); } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/AttDataBean.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/AttDataBean.java index 284bb2d..1bf2d5c 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/AttDataBean.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/AttDataBean.java @@ -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; + } } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttCalService.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttCalService.java index 3b21437..8f3f11b 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttCalService.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttCalService.java @@ -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); } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttCalServiceImpl.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttCalServiceImpl.java index 92901c8..c50d8bc 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttCalServiceImpl.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttCalServiceImpl.java @@ -220,12 +220,28 @@ public class AttCalServiceImpl implements AttCalService { } } + /** + * 请假数据应用(步骤二:请假数据更新) + * 法定节假日不会随时间变化,一天执行一次就可以了 + * @param pushDate 时间 + */ + @Override + public void updateLeaveData(String pushDate) { + /** + * 查出在考勤组人员的请假数据 + */ + List 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 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); + } + }); + } + } + + } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/tasks/AttTasks.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/tasks/AttTasks.java index 3b5ae56..4ff2e4e 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/tasks/AttTasks.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/tasks/AttTasks.java @@ -318,7 +318,7 @@ public class AttTasks { /** * 查出在考勤组人员的请假数据 */ - List leaveList = Optional.ofNullable(attSourceDataDao.getLeaveData()). + List leaveList = Optional.ofNullable(attSourceDataDao.getLeaveData(pushDate)). orElseGet(ArrayList::new); if (!leaveList.isEmpty()) { leaveList.forEach(leaveData -> threadLeaveData(leaveData, pushDate)); diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/tasks/NewAttTask.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/tasks/NewAttTask.java index d1de491..85c55aa 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/tasks/NewAttTask.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/tasks/NewAttTask.java @@ -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); + } + } \ No newline at end of file diff --git a/bonus-modules/bonus-system/src/main/resources/mapper/att/AttSourceDataMapper.xml b/bonus-modules/bonus-system/src/main/resources/mapper/att/AttSourceDataMapper.xml index 18b2263..e66de92 100644 --- a/bonus-modules/bonus-system/src/main/resources/mapper/att/AttSourceDataMapper.xml +++ b/bonus-modules/bonus-system/src/main/resources/mapper/att/AttSourceDataMapper.xml @@ -67,16 +67,16 @@ - 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 - (#{item.userId}, #{item.attCurrentDay}, #{item.attStatus}, #{item.attType}) + (#{item.userId}, #{item.orgId}, #{item.attCurrentDay}, #{item.attStatus}, #{item.attType}) ; - 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 - (#{item.userId}, #{item.attCurrentDay}, #{item.attStatus}, #{item.attType}) + (#{item.userId}, #{item.orgId}, #{item.attCurrentDay}, #{item.attStatus}, #{item.attType}) ; @@ -150,6 +150,26 @@ + + 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; + + delete from att_source_data @@ -391,23 +411,19 @@ 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} \ No newline at end of file