From aecd1edbb8f11b6e0cf956c1c0930511600aa96b Mon Sep 17 00:00:00 2001 From: fl <3098731433@qq.com> Date: Wed, 7 May 2025 18:24:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=88=E6=8A=A5=E8=A1=A8=E5=A4=A9=E6=95=B0?= =?UTF-8?q?=E9=9A=8F=E6=97=B6=E8=AE=A1=E7=AE=97=E4=BF=AE=E6=94=B9=20?= =?UTF-8?q?=E8=80=83=E5=8B=A4=E6=98=8E=E7=BB=86=E6=8E=A8=E9=80=81=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../att/controller/AttHisPullController.java | 19 +++++- .../AttendanceDetailsController.java | 13 ++++ .../system/att/dao/AttendanceDetailsDao.java | 4 ++ .../att/service/AttendanceDetailsService.java | 9 ++- .../service/AttendanceDetailsServiceImpl.java | 59 +++++++++++++++++++ .../mapper/att/AttendanceDetailsMapper.xml | 11 ++++ 6 files changed, 113 insertions(+), 2 deletions(-) diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/controller/AttHisPullController.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/controller/AttHisPullController.java index b123a5d..6860eb7 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/controller/AttHisPullController.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/controller/AttHisPullController.java @@ -62,7 +62,6 @@ public class AttHisPullController extends BaseController { /** * 1.数据拉取(考勤)定时器 每隔1个小时获取一次数据 - * 2.考勤数据应用(步骤一:考勤数据更新) */ @GetMapping("/getAttDataPull") @Log(title = "考勤数据拉取->数据拉取(考勤)考勤数据更新", businessType = BusinessType.QUERY) @@ -72,6 +71,24 @@ public class AttHisPullController extends BaseController { Collections.reverse(dateList); for (String date : dateList) { attTask.getAttendanceData(date,2); + } + return toAjax(true); + }catch (Exception e){ + log.error(e.toString(),e); + } + return error("系统异常"); + } + + /** + * 2.考勤数据应用(步骤一:考勤数据更新) + */ + @GetMapping("/updateAttData") + @Log(title = "考勤数据拉取->数据拉取(考勤)考勤数据更新", businessType = BusinessType.QUERY) + public AjaxResult updateAttData( AttDataDetailsBean bean) { + try{ + List dateList = AttTimeUtil.getStrDateListBetween(bean.getStartDate(), bean.getEndDate()); + Collections.reverse(dateList); + for (String date : dateList) { attTask.updateAttData(date,2); } return toAjax(true); diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/controller/AttendanceDetailsController.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/controller/AttendanceDetailsController.java index 699a6cc..5a1b620 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/controller/AttendanceDetailsController.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/controller/AttendanceDetailsController.java @@ -442,4 +442,17 @@ public class AttendanceDetailsController extends BaseController { return getDataTableError(new ArrayList<>()); } + /** + * 获取数据看板-详细记录 + */ + @GetMapping("/updateAttMonthDays") + @Log(title = "考勤报表->月报表->月出勤天数重新计算", businessType = BusinessType.QUERY) + public AjaxResult updateAttMonthDays(AttMonthDaysMakeUpBean bean) { + try { + return attendanceDetailsService.updateAttMonthDays(bean); + } catch (Exception e) { + log.error(e.toString(), e); + } + return error("系统异常"); + } } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/dao/AttendanceDetailsDao.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/dao/AttendanceDetailsDao.java index 2bd4e6e..c7f00a4 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/dao/AttendanceDetailsDao.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/dao/AttendanceDetailsDao.java @@ -140,4 +140,8 @@ public interface AttendanceDetailsDao { * @date 2025/2/23 21:01 */ void addAttDataAuditRecord(List list); + + List getAttMonthReportListSimple(String attCurrentMonth); + + void batchUpdateMonthReportRequiredDay(List list); } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttendanceDetailsService.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttendanceDetailsService.java index 6cd470c..6b2875d 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttendanceDetailsService.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttendanceDetailsService.java @@ -118,9 +118,16 @@ public interface AttendanceDetailsService { List getClockingRecordListByUserId(AttMonthReportBean bean); /** - * + *出勤天数组成 * @param bean * @return */ List getAttMonthDaysMakeUp(AttMonthDaysMakeUpBean bean); + + /** + * 月出勤天数重新计算 + * @param bean + * @return + */ + AjaxResult updateAttMonthDays(AttMonthDaysMakeUpBean bean); } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttendanceDetailsServiceImpl.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttendanceDetailsServiceImpl.java index b4461cb..3454d7a 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttendanceDetailsServiceImpl.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttendanceDetailsServiceImpl.java @@ -415,4 +415,63 @@ public class AttendanceDetailsServiceImpl implements AttendanceDetailsService { } return listDays; } + + @Override + public AjaxResult updateAttMonthDays(AttMonthDaysMakeUpBean bean) { + String attCurrentMonth = bean.getAttCurrentMonth() + "-01"; + //先查所有人 + List list = attendanceDetailsDao.getAttMonthReportListSimple(bean.getAttCurrentMonth()); + for (AttMonthReportBean attMonthReportBean : list) { + bean.setUserId(attMonthReportBean.getUserId()); + //查询历史考勤规则,方便分组计算 + List dataList = attCalService.getAttSettingHistoryByUserAndDate(String.valueOf(attMonthReportBean.getUserId()),attCurrentMonth); + //查询那个人是否还在考勤组,如果不再了,就不需要不全当月剩余时间 + int i = attCalService.getPersonAttGroup(bean.getUserId()); + AtomicLong requiredDays = new AtomicLong(); + if(i>0){ + //以最后一个考勤规则补全剩下当月日期所有考勤规则数据 + // 获取最后一个数据的日期 + AttGroupBean lastData = dataList.get(dataList.size() - 1); + LocalDate lastDate = LocalDate.parse(lastData.getCurrentDay(), DateTimeFormatter.ofPattern("yyyy-MM-dd")); + // 获取当月的总天数 + int lastDayOfMonth = lastDate.lengthOfMonth(); + // 从最后一个日期开始补全当月剩下的日期 + for (int day = lastDate.getDayOfMonth() + 1; day <= lastDayOfMonth; day++) { + LocalDate newDate = lastDate.withDayOfMonth(day); + dataList.add(new AttGroupBean(lastData.getUserId(), lastData.getGroupId(), newDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))); + } + } + if (!dataList.isEmpty()) { + List> result = new ArrayList<>(); + List currentList = new ArrayList<>(); + //查出考勤组 + List groupList = attCalService.getSimplyGroupData(); + List holidays = attSourceDataDao.selectHolidayByMonth(attCurrentMonth); + Long currentGroupId = dataList.get(0).getGroupId(); + for (AttGroupBean data : dataList) { + if (!Objects.equals(data.getGroupId(), currentGroupId)) { + result.add(currentList); + currentList = new ArrayList<>(); + currentGroupId = data.getGroupId(); + } + currentList.add(data); + } + result.add(currentList); + result.forEach(v -> { + List collect = groupList.stream().filter(g -> Objects.equals(g.getGroupId(), v.get(0).getGroupId())).collect(Collectors.toList()); + if(!collect.isEmpty()){ + //应考勤天数 + List attDayList = WorkdayCalculator.getWorkDay(collect.get(0).getAttDay(), + collect.get(0).getIsHaveHoliday(), holidays, v.get(0).getCurrentDay(),v.get(v.size()-1).getCurrentDay()); + requiredDays.addAndGet(attDayList.size()); + } + }); + attMonthReportBean.setRequiredDays((int) requiredDays.get()); + } + } + if(!list.isEmpty()) { + attendanceDetailsDao.batchUpdateMonthReportRequiredDay(list); + } + return AjaxResult.success(); + } } diff --git a/bonus-modules/bonus-system/src/main/resources/mapper/att/AttendanceDetailsMapper.xml b/bonus-modules/bonus-system/src/main/resources/mapper/att/AttendanceDetailsMapper.xml index 394db2b..8dcd4e4 100644 --- a/bonus-modules/bonus-system/src/main/resources/mapper/att/AttendanceDetailsMapper.xml +++ b/bonus-modules/bonus-system/src/main/resources/mapper/att/AttendanceDetailsMapper.xml @@ -598,6 +598,11 @@ LEFT JOIN sys_user su ON su.user_id = adu.user_id WHERE adu.user_id = #{userId} AND adu.att_current_day = #{attCurrentDay} AND adu.org_id = #{orgId} LIMIT 1 + @@ -645,4 +650,10 @@ + + + update att_month_report set required_days = #{params.requiredDays} + where user_id = #{params.userId} and att_current_month = #{params.month} + + \ No newline at end of file