From 96194bd879c0482a78998b26dccb470791bfea63 Mon Sep 17 00:00:00 2001 From: cwchen <1048842385@qq.com> Date: Tue, 18 Feb 2025 20:22:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=88=E6=8A=A5=E8=A1=A8=E3=80=81=E6=9C=88?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E6=8A=A5=E8=A1=A8=E5=AF=BC=E5=87=BA=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/utils/DateTimeHelper.java | 20 +++++++++++ .../AttDetailByMonthController.java | 15 +++++--- .../AttendanceDetailsController.java | 7 ++++ .../system/att/dao/AttDetailByMonthDao.java | 9 +++++ .../system/att/dao/AttendanceDetailsDao.java | 19 ++++++++++ .../att/entity/AttClockingRecordVo.java | 35 +++++++++++++++++++ .../att/entity/AttDetailByMonthBean.java | 7 ++++ .../system/att/entity/AttMonthReportBean.java | 9 +++++ .../service/AttDetailByMonthServiceImpl.java | 6 +++- .../att/service/AttendanceDetailsService.java | 10 ++++++ .../service/AttendanceDetailsServiceImpl.java | 23 +++++++++--- .../system/download/ExportFileController.java | 16 +++++---- .../mapper/att/AttDetailByMonthMapper.xml | 9 +++-- .../mapper/att/AttendanceDetailsMapper.xml | 24 ++++++++++--- 14 files changed, 186 insertions(+), 23 deletions(-) create mode 100644 bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/AttClockingRecordVo.java diff --git a/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/DateTimeHelper.java b/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/DateTimeHelper.java index 08c0cf3..3764708 100644 --- a/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/DateTimeHelper.java +++ b/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/DateTimeHelper.java @@ -963,6 +963,26 @@ public class DateTimeHelper { return dateList.toArray(new String[0]); } + public static List getMonthStartAndEndDay(String startMonth, String endMonth){ + List list = new ArrayList<>(); + // 格式化器,用于解析年月字符串 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); + // 解析开始年月 + YearMonth start = YearMonth.parse(startMonth, formatter); + // 获取开始年月的第一天 + LocalDate startDate = start.atDay(1); + // 解析结束年月 + YearMonth end = YearMonth.parse(endMonth, formatter); + // 获取结束年月的最后一天 + LocalDate endDate = end.atEndOfMonth(); + // 输出结果 + System.out.println("开始年月的第一天: " + startDate); + System.out.println("结束年月的最后一天: " + endDate); + list.add(startDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); + list.add(endDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); + return list; + } + public static void main(String[] args) { boolean b = DateTimeHelper.compareTime2("2024-11-27 08:01:35","2024-11-27 08:01:43"); System.out.println(b); diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/controller/AttDetailByMonthController.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/controller/AttDetailByMonthController.java index b059ca4..8675e3d 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/controller/AttDetailByMonthController.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/controller/AttDetailByMonthController.java @@ -1,5 +1,6 @@ package com.bonus.system.att.controller; +import com.bonus.common.core.utils.DateTimeHelper; import com.bonus.common.core.utils.StringHelper; import com.bonus.common.core.utils.poi.ExcelUtil; import com.bonus.common.core.utils.poi.MultiSheetExcelExporter; @@ -167,10 +168,10 @@ public class AttDetailByMonthController extends BaseController { } MultiSheetExcelExporter exporter = new MultiSheetExcelExporter(); //将表格时间区间取出来做标题 - String title = bean.getAttCurrentMonth(); + String title = bean.getStartMonth() + " ~ " + bean.getEndMonth(); List attDayReportList = attDetailByMonthService.selectAttDetailList(bean); Sheet departmentSheet1 = exporter.createSheet("月异常报表详情"); - List departmentHeaders1 = Arrays.asList("序号", "姓名", "所属部门", "考勤月", "应考勤天数", "正常打卡天数", + List departmentHeaders1 = Arrays.asList("序号", "姓名", "所属部门", "考勤月","打卡记录", "应考勤天数", "正常打卡天数", "迟到天数", "早退天数", "旷工天数", "打卡地异常天数", "出入异常天数"); exporter.addHeaderRowAndTitle(departmentSheet1, departmentHeaders1, title); List> departmentData1 = new ArrayList<>(); @@ -180,6 +181,7 @@ public class AttDetailByMonthController extends BaseController { map.put("姓名", attDayReportList.get(i).getName()); map.put("所属部门", attDayReportList.get(i).getOrgName()); map.put("考勤月", attDayReportList.get(i).getAttCurrentMonth()); + map.put("打卡记录", attDayReportList.get(i).getClockingRecordNum()); map.put("应考勤天数", attDayReportList.get(i).getRequiredDays()); map.put("正常打卡天数", attDayReportList.get(i).getNormalNum()); map.put("迟到天数", attDayReportList.get(i).getLateNum()); @@ -203,8 +205,9 @@ public class AttDetailByMonthController extends BaseController { headers.put("9", "打卡地异常"); headers.put("99", "工作外出"); Map attStatus = getStringStringMap(); - if (StringHelper.isNotEmpty(bean.getAttCurrentMonth())) { - List monthFirstAndLast = getMonthFirstAndLast(bean.getAttCurrentMonth()); + if (StringHelper.isNotEmpty(bean.getStartMonth()) && StringHelper.isNotEmpty(bean.getEndMonth())) { +// List monthFirstAndLast = getMonthFirstAndLast(bean.getAttCurrentMonth()); + List monthFirstAndLast = DateTimeHelper.getMonthStartAndEndDay(bean.getStartMonth(),bean.getEndMonth()); AttDetailBean dayTable = new AttDetailBean(); dayTable.setStartDate(monthFirstAndLast.get(0)); dayTable.setEndDate(monthFirstAndLast.get(1)); @@ -221,7 +224,9 @@ public class AttDetailByMonthController extends BaseController { .forEach(entry -> { if ("99".equals(entry.getKey())) { AttDataDetailsBean att = new AttDataDetailsBean(); - att.setAttCurrentMonth(bean.getAttCurrentMonth()); + att.setStartDate(monthFirstAndLast.get(0)); + att.setEndDate(monthFirstAndLast.get(1)); +// att.setAttCurrentMonth(bean.getAttCurrentMonth()); if (bean.getOrgId() != null) { att.setOrgId(Long.valueOf(bean.getOrgId())); } else { 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 97237d4..647686f 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 @@ -348,6 +348,13 @@ public class AttendanceDetailsController extends BaseController { return getDataTableError(new ArrayList<>()); } + @GetMapping("/getClockingRecordListByUserId") + @Log(title = "考勤报表->月报表->打卡记录", businessType = BusinessType.QUERY) + public TableDataInfo getClockingRecordListByUserId(AttMonthReportBean bean) { + startPage(); + return getDataTable(attendanceDetailsService.getClockingRecordListByUserId(bean)); + } + /** * 月报表导出 */ diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/dao/AttDetailByMonthDao.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/dao/AttDetailByMonthDao.java index 33e9fe8..e64e236 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/dao/AttDetailByMonthDao.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/dao/AttDetailByMonthDao.java @@ -71,4 +71,13 @@ public interface AttDetailByMonthDao { List> getSonsById(int orgId); Map getSonsFinish(int orgId); + + /** + * 考勤报表->月异常报表->打卡记录 + * @param c + * @return int + * @author cwchen + * @date 2025/2/18 19:59 + */ + int getClockingRecordNum(@Param("c")AttDetailByMonthBean c); } 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 6a48525..4c23c12 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 @@ -1,6 +1,7 @@ package com.bonus.system.att.dao; import com.bonus.system.api.domain.MapVo; +import com.bonus.system.att.entity.AttClockingRecordVo; import com.bonus.system.att.entity.AttDataDetailsBean; import com.bonus.system.att.entity.AttDayReportBean; import com.bonus.system.att.entity.AttMonthReportBean; @@ -97,4 +98,22 @@ public interface AttendanceDetailsDao { List getOrgUserOutCountList(@Param("bean") AttDataDetailsBean bean); List getAttStatusList(); + + /** + * 查询打卡记录 + * @param c + * @return int + * @author cwchen + * @date 2025/2/18 14:32 + */ + int getClockingRecordNum(@Param("c") AttMonthReportBean c); + + /** + * 考勤报表->月报表->打卡记录 + * @param bean + * @return List + * @author cwchen + * @date 2025/2/18 15:59 + */ + List getClockingRecordListByUserId(AttMonthReportBean bean); } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/AttClockingRecordVo.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/AttClockingRecordVo.java new file mode 100644 index 0000000..565345c --- /dev/null +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/AttClockingRecordVo.java @@ -0,0 +1,35 @@ +package com.bonus.system.att.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + * @className:AttClockingRecordVo + * @author:cwchen + * @date:2025-02-18-15:00 + * @version:1.0 + * @description:考勤打卡记录-vo + */ +@Data +public class AttClockingRecordVo { + + + /**考勤日期*/ + @JsonFormat(pattern = "yyyy-MM-dd") + private Date attCurrentDay; + + /**考勤时间*/ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date attCurrentTime; + + /**考勤类型1上班2下班*/ + private String attType; + + /**打卡地址*/ + private String attAddress; + + /**备注*/ + private String remark; +} diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/AttDetailByMonthBean.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/AttDetailByMonthBean.java index 58483df..5eb192d 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/AttDetailByMonthBean.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/AttDetailByMonthBean.java @@ -96,6 +96,10 @@ public class AttDetailByMonthBean { @Excel(name = "请假天数") private double leaveNum; + /**打卡记录*/ + @Excel(name = "打卡记录") + private int clockingRecordNum; + private int[] orgIds; /** @@ -106,4 +110,7 @@ public class AttDetailByMonthBean { /** 部门列表 */ private List orgList; + private String startMonth; + private String endMonth; + } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/AttMonthReportBean.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/AttMonthReportBean.java index f87e687..69d60f2 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/AttMonthReportBean.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/AttMonthReportBean.java @@ -111,8 +111,17 @@ public class AttMonthReportBean { */ private Double outCount; + /**打卡记录*/ + @Excel(name = "打卡记录", sort = 14) + private int clockingRecordNum; + /** * 自己项目部所在分公司下的所有项目部id */ private List orgList; + + /**开始月份*/ + private String startMonth; + /**结束月份*/ + private String endMonth; } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttDetailByMonthServiceImpl.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttDetailByMonthServiceImpl.java index ae270b1..562b922 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttDetailByMonthServiceImpl.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttDetailByMonthServiceImpl.java @@ -79,7 +79,11 @@ public class AttDetailByMonthServiceImpl implements AttDetailByMonthService{ List list = new ArrayList<>(); try { list = attDetailByMonthDao.selectAttAllList(data); - + // 查询打卡记录 + list.forEach(c -> { + int clockingRecordNum = attDetailByMonthDao.getClockingRecordNum(c); + c.setClockingRecordNum(clockingRecordNum); + }); } catch (Exception e) { log.error("查询月异常报表列表", e); } 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 d29385f..50879ae 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 @@ -2,6 +2,7 @@ package com.bonus.system.att.service; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.system.api.domain.MapVo; +import com.bonus.system.att.entity.AttClockingRecordVo; import com.bonus.system.att.entity.AttDataDetailsBean; import com.bonus.system.att.entity.AttDayReportBean; import com.bonus.system.att.entity.AttMonthReportBean; @@ -111,4 +112,13 @@ public interface AttendanceDetailsService { List getOrgUserOutCountList(AttDataDetailsBean bean); List getAttStatusList(); + + /** + * 考勤报表->月报表->打卡记录 + * @param bean + * @return List + * @author cwchen + * @date 2025/2/18 16:00 + */ + List getClockingRecordListByUserId(AttMonthReportBean 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 c7dc696..83a44c8 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 @@ -7,10 +7,7 @@ import com.bonus.common.security.utils.SecurityUtils; import com.bonus.system.api.domain.MapVo; import com.bonus.system.api.domain.SysUser; import com.bonus.system.att.dao.AttendanceDetailsDao; -import com.bonus.system.att.entity.AttDataDetailsBean; -import com.bonus.system.att.entity.AttDayReportBean; -import com.bonus.system.att.entity.AttGroupBean; -import com.bonus.system.att.entity.AttMonthReportBean; +import com.bonus.system.att.entity.*; import com.bonus.system.att.tasks.AttTasks; import com.bonus.system.att.tasks.WechatTasks; import com.bonus.system.basic.domain.SysNotice; @@ -163,7 +160,13 @@ public class AttendanceDetailsServiceImpl implements AttendanceDetailsService { @Override public List getAttMonthReportList(AttMonthReportBean bean) { - return attendanceDetailsDao.getAttMonthReportList(bean); + List attMonthReportList = attendanceDetailsDao.getAttMonthReportList(bean); + // 查询打卡记录 + attMonthReportList.forEach(c -> { + int clockingRecordNum = attendanceDetailsDao.getClockingRecordNum(c); + c.setClockingRecordNum(clockingRecordNum); + }); + return attMonthReportList; } @Override @@ -268,4 +271,14 @@ public class AttendanceDetailsServiceImpl implements AttendanceDetailsService { return allList; } + @Override + public List getClockingRecordListByUserId(AttMonthReportBean bean) { + List list = new ArrayList<>(); + try { + list = attendanceDetailsDao.getClockingRecordListByUserId(bean); + } catch (Exception e) { + log.error(e.toString(),e); + } + return list; + } } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/download/ExportFileController.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/download/ExportFileController.java index fbf613a..37222eb 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/download/ExportFileController.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/download/ExportFileController.java @@ -8,6 +8,7 @@ import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelWriter; import com.bonus.common.core.constant.BusinessConstants; import com.bonus.common.core.enums.AttStatus; +import com.bonus.common.core.utils.DateTimeHelper; import com.bonus.common.core.utils.ExcelStyleUtil; import com.bonus.common.core.utils.StringHelper; import com.bonus.common.core.utils.StringUtils; @@ -672,10 +673,10 @@ public class ExportFileController { } MultiSheetExcelExporter exporter = new MultiSheetExcelExporter(); //将表格时间区间取出来做标题 - String title = bean.getMonth(); + String title = bean.getStartMonth() + " ~ " + bean.getEndMonth(); List attDayReportList = attendanceDetailsService.getAttMonthReportList(bean); Sheet departmentSheet1 = exporter.createSheet("月报表详情"); - List departmentHeaders1 = Arrays.asList("序号", "姓名", "所属部门", "考勤月", "应考勤天数", "正常打卡天数", + List departmentHeaders1 = Arrays.asList("序号", "姓名", "所属部门", "考勤月","打卡记录", "应考勤天数", "正常打卡天数", "迟到天数", "早退天数", "旷工天数", "请假天数", "打卡地异常天数", "出入异常天数", "轮休天数", "临时外出天数", "出差天数"); exporter.addHeaderRowAndTitle(departmentSheet1, departmentHeaders1, title); List> departmentData1 = new ArrayList<>(); @@ -684,7 +685,8 @@ public class ExportFileController { map.put("序号", i + 1); map.put("姓名", attDayReportList.get(i).getUserName()); map.put("所属部门", attDayReportList.get(i).getOrgName()); - map.put("考勤月", title); + map.put("考勤月", attDayReportList.get(i).getAttCurrentMonth()); + map.put("打卡记录", attDayReportList.get(i).getClockingRecordNum()); map.put("应考勤天数", attDayReportList.get(i).getRequiredDays()); map.put("正常打卡天数", attDayReportList.get(i).getNormalNum()); map.put("迟到天数", attDayReportList.get(i).getLateNum()); @@ -713,8 +715,8 @@ public class ExportFileController { headers.put("10", "出差详情"); headers.put("99", "工作外出"); Map attStatus = getStringStringMap(); - if (StringHelper.isNotEmpty(bean.getMonth())) { - List monthFirstAndLast = getMonthFirstAndLast(bean.getMonth()); + if (StringHelper.isNotEmpty(bean.getStartMonth()) && StringHelper.isNotEmpty(bean.getEndMonth())) { + List monthFirstAndLast = DateTimeHelper.getMonthStartAndEndDay(bean.getStartMonth(), bean.getEndMonth()); AttDetailBean dayTable = new AttDetailBean(); dayTable.setStartDate(monthFirstAndLast.get(0)); dayTable.setEndDate(monthFirstAndLast.get(1)); @@ -731,7 +733,9 @@ public class ExportFileController { .forEach(entry -> { if ("99".equals(entry.getKey())) { AttDataDetailsBean att = new AttDataDetailsBean(); - att.setAttCurrentMonth(bean.getMonth()); +// att.setAttCurrentMonth(bean.getMonth()); + att.setStartDate(monthFirstAndLast.get(0)); + att.setEndDate(monthFirstAndLast.get(1)); if (bean.getOrgId() != null) { att.setOrgId(bean.getOrgId()); }else{ diff --git a/bonus-modules/bonus-system/src/main/resources/mapper/att/AttDetailByMonthMapper.xml b/bonus-modules/bonus-system/src/main/resources/mapper/att/AttDetailByMonthMapper.xml index 5a8eb5f..1e060f0 100644 --- a/bonus-modules/bonus-system/src/main/resources/mapper/att/AttDetailByMonthMapper.xml +++ b/bonus-modules/bonus-system/src/main/resources/mapper/att/AttDetailByMonthMapper.xml @@ -64,8 +64,8 @@ left join att_group_person_relation p on p.user_id = amr.user_id where amr.is_active = 1 and p.is_active = 1 and amr.required_days != amr.normal_num - - and amr.att_current_month = #{bean.attCurrentMonth} + + and amr.att_current_month BETWEEN #{bean.startMonth} AND #{bean.endMonth} and INSTR(amr.name,#{bean.name}) > 0 @@ -271,4 +271,9 @@ where so.id = #{orgId} and is_active = 1 + + 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 ede1588..eb7b6d1 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 @@ -249,10 +249,11 @@ + + + +