From 6e02ace766b6a7cec977b492a7fa31496ecb9110 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=B9=E4=BA=AE?= Date: Thu, 29 Jan 2026 18:59:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/api/RemoteAttDataService.java | 2 +- .../factory/RemoteAttDataFallbackFactory.java | 2 +- .../java/com/bonus/job/task/AttJobTask.java | 9 +- .../att/controller/AttAbnormalController.java | 182 ++++++++++++++++++ .../att/controller/AttInnerController.java | 7 +- .../AttendanceDetailsController.java | 91 ++++++++- .../WorkerRepairCardController.java | 2 +- .../bonus/system/att/dao/AttAbnormalDao.java | 30 +++ .../system/att/dao/AttSourceDataDao.java | 2 +- .../system/att/dao/AttendanceDetailsDao.java | 9 + .../system/att/entity/AttMonthReportBean.java | 30 ++- .../bonus/system/att/entity/AttRateBean.java | 120 ++++++++++++ .../system/att/entity/AttRateExportBean.java | 98 ++++++++++ .../system/att/entity/YearFullAttBean.java | 119 ++++++++++++ .../att/service/AttAbnormalService.java | 36 ++++ .../att/service/AttAbnormalServiceImpl.java | 50 +++++ .../system/att/service/AttCalService.java | 2 +- .../system/att/service/AttCalServiceImpl.java | 4 +- .../att/service/AttChangeServiceImpl.java | 6 +- .../att/service/AttendanceDetailsService.java | 11 +- .../service/AttendanceDetailsServiceImpl.java | 11 ++ .../bonus/system/att/tasks/NewAttTask.java | 16 -- .../mapper/att/AttAbnormalMapper.xml | 149 ++++++++++++++ .../resources/mapper/att/AttChangeMapper.xml | 7 +- .../mapper/att/AttSourceDataMapper.xml | 45 ++++- .../mapper/att/AttendanceDetailsMapper.xml | 26 ++- 26 files changed, 1020 insertions(+), 46 deletions(-) create mode 100644 bonus-modules/bonus-system/src/main/java/com/bonus/system/att/controller/AttAbnormalController.java create mode 100644 bonus-modules/bonus-system/src/main/java/com/bonus/system/att/dao/AttAbnormalDao.java create mode 100644 bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/AttRateBean.java create mode 100644 bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/AttRateExportBean.java create mode 100644 bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/YearFullAttBean.java create mode 100644 bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttAbnormalService.java create mode 100644 bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttAbnormalServiceImpl.java create mode 100644 bonus-modules/bonus-system/src/main/resources/mapper/att/AttAbnormalMapper.xml diff --git a/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/RemoteAttDataService.java b/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/RemoteAttDataService.java index 697cd88..aaecfee 100644 --- a/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/RemoteAttDataService.java +++ b/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/RemoteAttDataService.java @@ -77,7 +77,7 @@ public interface RemoteAttDataService { * @param today 日期 */ @PostMapping(value = "/attInner/getMonthReportFullAtt") - void getMonthReportFullAtt(@RequestParam(value = "today")String today, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + void getMonthReportFullAtt(@RequestParam(value = "month")String month, @RequestParam(value = "today")String today, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); /** * 请假数据回滚 diff --git a/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/factory/RemoteAttDataFallbackFactory.java b/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/factory/RemoteAttDataFallbackFactory.java index 2f838b9..2091e84 100644 --- a/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/factory/RemoteAttDataFallbackFactory.java +++ b/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/factory/RemoteAttDataFallbackFactory.java @@ -68,7 +68,7 @@ public class RemoteAttDataFallbackFactory implements FallbackFactory()); + } + + @GetMapping("/exportAttRateTypeList") + public void exportAttRateTypeList(HttpServletResponse response, AttRateBean bean) { + try { + List workerYearFullAttList = service.getAttRateTypeList(bean); + for (int i = 0; i < workerYearFullAttList.size(); i++) { + AttRateBean o = workerYearFullAttList.get(i); + o.setId(i + 1L); + } + extracted(workerYearFullAttList, AttRateBean.class, "考勤率列表", "考勤率列表", "考勤率列表", response); + } catch (Exception e) { + log.error(e.toString(), e); + } + } + + /** + * 获取考勤率详情 + */ +// @RequiresPermissions("att:change:list") + @GetMapping("/getAttRateTypeDetailsList") + @Log(title = "考勤报表->月考勤类型详情", businessType = BusinessType.QUERY) + public TableDataInfo getAttRateTypeDetailsList(AttRateBean bean) { + try{ + startPage(); + return getDataTable(service.getAttRateTypeDetailsList(bean)); + }catch (Exception e){ + log.error(e.toString(),e); + } + return getDataTableError(new ArrayList<>()); + } + + /** + * 获取迟到早退旷工列表 + */ +// @RequiresPermissions("att:change:list") + @GetMapping("/getAttAbnormalList") + @Log(title = "考勤报表->月考勤率异常(迟到早退旷工)", businessType = BusinessType.QUERY) + public TableDataInfo getAttAbnormalList(AttRateBean bean) { + try{ + startPage(); + return getDataTable(service.getAttAbnormalList(bean)); + }catch (Exception e){ + log.error(e.toString(),e); + } + return getDataTableError(new ArrayList<>()); + } + + @GetMapping("/exportAttAbnormalList") + public void exportAttAbnormalList(HttpServletResponse response, AttRateBean bean) { + try { + List workerYearFullAttList = service.getAttAbnormalList(bean); + // + List exportBeanList = workerYearFullAttList.stream() + .map(source -> { + AttRateExportBean target = new AttRateExportBean(); + BeanUtils.copyProperties(source, target); + return target; + }) + .collect(Collectors.toList()); + for (int i = 0; i < exportBeanList.size(); i++) { + AttRateExportBean o = exportBeanList.get(i); + o.setId(i + 1L); + } + String title = ""; + if(bean.getAttCurrentMonth() != null && StringHelper.isEmpty(bean.getAttCurrentMonth())){ + title = bean.getAttCurrentMonth() + "月迟到早退旷工列表"; + }else if(bean.getYear() != null && StringHelper.isEmpty(bean.getYear())){ + title = bean.getYear() + "年迟到早退旷工列表"; + }else{ + title = "迟到早退旷工列表"; + } + extracted(exportBeanList, AttRateExportBean.class, title, "迟到早退旷工列表", "迟到早退旷工列表", response); + } catch (Exception e) { + log.error(e.toString(), e); + } + } + + /** + * 获取考勤类型详情 + */ +// @RequiresPermissions("att:change:list") + @GetMapping("/getAttAbnormalDetailsList") + @Log(title = "考勤报表->月考勤类型详情", businessType = BusinessType.QUERY) + public TableDataInfo getAttAbnormalDetailsList(AttRateBean bean) { + try{ + startPage(); + return getDataTable(service.getAttTypeList(bean)); + }catch (Exception e){ + log.error(e.toString(),e); + } + return getDataTableError(new ArrayList<>()); + } + + + + + /** + * 导出excel文件 + * + * @param list 数据 + * @param clazz bean.class + * @param title 标题 + * @param sheetName sheet名字 + * @param fileName 文件名 + * @param response 响应 + * @throws IOException + */ + private static void extracted(List list, Class clazz, String title, String sheetName, String fileName, HttpServletResponse response) throws IOException { + ExportParams exportParams = new ExportParams(title, sheetName, ExcelType.XSSF); + exportParams.setStyle(ExcelStyleUtil.class); + Workbook workbook = ExcelExportUtil.exportExcel(exportParams, clazz, list); + response.setContentType("application/vnd.ms-excel"); + response.setHeader("content-disposition", "attachment;fileName=" + URLEncoder.encode(fileName + ".xlsx", "UTF-8")); + ServletOutputStream outputStream = response.getOutputStream(); + workbook.write(outputStream); + outputStream.close(); + workbook.close(); + } + +} diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/controller/AttInnerController.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/controller/AttInnerController.java index ceca871..8303850 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/controller/AttInnerController.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/controller/AttInnerController.java @@ -157,9 +157,12 @@ public class AttInnerController extends BaseController { */ @PostMapping("/getMonthReportFullAtt") @Log(title = "数据拉取(考勤)", businessType = BusinessType.QUERY) - public void getMonthReportFullAtt(String today) { + public void getMonthReportFullAtt(String month,String today) { try{ - attTask.getMonthReportFullAttTask(); + List list = attCalService.getNotFullAtt(today,month); + if(!list.isEmpty()){ + attCalService.updateMonthReportFullAtt(list,month); + } }catch (Exception e){ log.error(e.toString(),e); } 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 5a1b620..4ca1243 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 @@ -1,5 +1,9 @@ package com.bonus.system.att.controller; +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; +import com.bonus.common.core.utils.ExcelStyleUtil; import com.bonus.common.core.web.controller.BaseController; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.core.web.page.TableDataInfo; @@ -10,22 +14,25 @@ import com.bonus.common.security.utils.SecurityUtils; import com.bonus.system.api.domain.MapVo; import com.bonus.system.api.domain.SysRole; import com.bonus.system.api.domain.SysUser; -import com.bonus.system.att.entity.AttDataDetailsBean; -import com.bonus.system.att.entity.AttDayReportBean; -import com.bonus.system.att.entity.AttMonthDaysMakeUpBean; -import com.bonus.system.att.entity.AttMonthReportBean; +import com.bonus.system.att.entity.*; import com.bonus.system.att.service.AttendanceDetailsService; import com.bonus.system.basic.dao.SysOrgDao; import com.bonus.system.basic.dao.SysUserMapper; import com.bonus.system.basic.domain.SysOrg; +import com.bonus.system.basic.domain.SysOrgHistoryBean; import com.bonus.system.basic.service.SysOrgService; import com.bonus.system.dept.dao.ProDeptRoleDao; import com.bonus.system.holiday.dao.WorkReportDao; import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.usermodel.Workbook; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.net.URLEncoder; +import java.text.SimpleDateFormat; import java.util.*; /** @@ -455,4 +462,80 @@ public class AttendanceDetailsController extends BaseController { } return error("系统异常"); } + + /** + * 获取年全勤情况 + */ + @GetMapping("/getWorkerYearFullAttList") + @Log(title = "考勤报表->月报表->年全勤情况", businessType = BusinessType.QUERY) + public TableDataInfo getWorkerYearFullAttList(YearFullAttBean bean) { + try{ + startPage(); + return getDataTable(attendanceDetailsService.getWorkerYearFullAttList(bean)); + }catch (Exception e){ + log.error(e.toString(),e); + } + return getDataTableError(new ArrayList<>()); + } + + /** + * 年全勤导出 + * + * @param response + * @param bean + * @return void + * @author:fly + * @date:2025-03-07-10:30 + */ +// @RequiresPermissions("org:orgHis:export") + @GetMapping("/exportYearFullAtt") + public void exportYearFullAtt(HttpServletResponse response, YearFullAttBean bean) { + try { + List workerYearFullAttList = attendanceDetailsService.getWorkerYearFullAttList(bean); + for (int i = 0; i < workerYearFullAttList.size(); i++) { + YearFullAttBean o = workerYearFullAttList.get(i); + o.setId(i + 1L); + // + o.setOneMonth("1".equals(o.getOneMonth()) ? "全勤" : "未全勤"); + o.setTwoMonth("1".equals(o.getTwoMonth()) ? "全勤" : "未全勤"); + o.setThreeMonth("1".equals(o.getThreeMonth()) ? "全勤" : "未全勤"); + o.setFourMonth("1".equals(o.getFourMonth()) ? "全勤" : "未全勤"); + o.setFiveMonth("1".equals(o.getFiveMonth()) ? "全勤" : "未全勤"); + o.setSixMonth("1".equals(o.getSixMonth()) ? "全勤" : "未全勤"); + o.setSevenMonth("1".equals(o.getSevenMonth()) ? "全勤" : "未全勤"); + o.setEightMonth("1".equals(o.getEightMonth()) ? "全勤" : "未全勤"); + o.setNineMonth("1".equals(o.getNineMonth()) ? "全勤" : "未全勤"); + o.setTenMonth("1".equals(o.getTenMonth()) ? "全勤" : "未全勤"); + o.setElevenMonth("1".equals(o.getElevenMonth()) ? "全勤" : "未全勤"); + o.setTwelveMonth("1".equals(o.getTwelveMonth()) ? "全勤" : "未全勤"); + } + extracted(workerYearFullAttList, YearFullAttBean.class, bean.getYear() + "年全勤导出", "年全勤导出", "年全勤导出", response); + } catch (Exception e) { + log.error(e.toString(), e); + } + } + + /** + * 导出excel文件 + * + * @param list 数据 + * @param clazz bean.class + * @param title 标题 + * @param sheetName sheet名字 + * @param fileName 文件名 + * @param response 响应 + * @throws IOException + */ + private static void extracted(List list, Class clazz, String title, String sheetName, String fileName, HttpServletResponse response) throws IOException { + ExportParams exportParams = new ExportParams(title, sheetName, ExcelType.XSSF); + exportParams.setStyle(ExcelStyleUtil.class); + Workbook workbook = ExcelExportUtil.exportExcel(exportParams, clazz, list); + response.setContentType("application/vnd.ms-excel"); + response.setHeader("content-disposition", "attachment;fileName=" + URLEncoder.encode(fileName + ".xlsx", "UTF-8")); + ServletOutputStream outputStream = response.getOutputStream(); + workbook.write(outputStream); + outputStream.close(); + workbook.close(); + } + } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/controller/WorkerRepairCardController.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/controller/WorkerRepairCardController.java index f338a21..3114444 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/controller/WorkerRepairCardController.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/controller/WorkerRepairCardController.java @@ -97,7 +97,7 @@ public class WorkerRepairCardController extends BaseController { } /** - * 删除组织架构 + * 补卡删除 */ // @RequiresPermissions("att:org:change:remove") @PostMapping("/delRepairCard") diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/dao/AttAbnormalDao.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/dao/AttAbnormalDao.java new file mode 100644 index 0000000..56fa13b --- /dev/null +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/dao/AttAbnormalDao.java @@ -0,0 +1,30 @@ +package com.bonus.system.att.dao; + +import com.bonus.system.att.entity.AttChangeBean; +import com.bonus.system.att.entity.AttDetailBean; +import com.bonus.system.att.entity.AttRateBean; +import com.bonus.system.basic.domain.SysOrg; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 考勤规则变更-数据访问层 + * @author zys + */ +@Repository("AttAbnormalDao") +public interface AttAbnormalDao { + +/** + * 获取考勤率列表 + */ + List getAttRateTypeList(AttRateBean bean); + + List getAttRateTypeDetailsList(AttRateBean bean); + + List getAttAbnormalList(AttRateBean bean); + + List getAttTypeList(AttRateBean bean); + + +} 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 f3f8f3a..b583c3b 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 @@ -250,7 +250,7 @@ public interface AttSourceDataDao { * @param today * @return */ - List getNotFullAtt(String today); + List getNotFullAtt(@Param("today")String today, @Param("month")String month); int updateMonthReportFullAtt(@Param("list") List list, @Param("month") String month); } 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 c7f00a4..a8c055a 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 @@ -144,4 +144,13 @@ public interface AttendanceDetailsDao { List getAttMonthReportListSimple(String attCurrentMonth); void batchUpdateMonthReportRequiredDay(List list); + + /** + * 获取年满勤列表 + * @param bean + * @return List + * @author cwchen + * @date 2025/2/24 10:05 + */ + List getWorkerYearFullAttList(YearFullAttBean bean); } 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 26e3fb2..4ca9845 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 @@ -7,6 +7,7 @@ import java.util.List; /** * 考勤月报表 + * * @author zys */ @Data @@ -130,11 +131,15 @@ public class AttMonthReportBean { */ private Double outCount; - /**打卡记录*/ + /** + * 打卡记录 + */ @Excel(name = "打卡记录", sort = 14) private int clockingRecordNum; - /**是否全勤*/ + /** + * 是否全勤 + */ // @Excel(name = "是否全勤", sort = 17) private int isFullAtt; @@ -143,11 +148,26 @@ public class AttMonthReportBean { */ private List orgList; - /**开始月份*/ + /** + * 开始月份 + */ private String startMonth; - /**结束月份*/ + /** + * 结束月份 + */ private String endMonth; - /**考勤组成卑职*/ + /** + * 考勤组成卑职 + */ private String requiredDayRemark; + + /** + * 请假带薪 + */ + private String leavePaidNum; + /** + * 请假不带薪 + */ + private String leaveUnpaidNum; } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/AttRateBean.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/AttRateBean.java new file mode 100644 index 0000000..9b3486d --- /dev/null +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/AttRateBean.java @@ -0,0 +1,120 @@ +package com.bonus.system.att.entity; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import lombok.Data; + +/** + * 考勤数据 + * + * @author zys + */ +@Data +public class AttRateBean { + + + /** + * 序号 + */ + @Excel(name = "序号", width = 10.0, height = 20.0, orderNum = "0") + private Long id; + + /** + * 用户编号 + */ + private Long userId; + + /** + * 用户名称 + */ + @Excel(name = "姓名", width = 10.0, height = 20.0, orderNum = "1") + private String userName; + + /** + * 组织编号 + */ + private Long orgId; + + /** + * 组织名称 + */ + @Excel(name = "所属部门", width = 10.0, height = 20.0, orderNum = "2") + private String orgName; + + + /** + * 考勤月 + */ + @Excel(name = "考勤月", width = 10.0, height = 20.0, orderNum = "3") + private String attCurrentMonth; + + /** + * 考勤年 + */ + private String year; + + /** + * 月天数 + */ + @Excel(name = "应出勤天数", width = 10.0, height = 20.0, orderNum = "4") + private Double requiredDays; + + /** + * 考勤率 + */ + @Excel(name = "考勤率", width = 10.0, height = 20.0, orderNum = "5") + private String normalRate; + + /** + * 迟到率 + */ + @Excel(name = "迟到率", width = 10.0, height = 20.0, orderNum = "6") + private String lateRate; + + /** + * 旷工率 + */ + @Excel(name = "旷工率", width = 10.0, height = 20.0, orderNum = "7") + private String skippingRate; + + /** + * 早退率 + */ + @Excel(name = "早退率", width = 10.0, height = 20.0, orderNum = "8") + private String earlyRate; + + /** + * 带薪假率 + */ + @Excel(name = "带薪假率", width = 10.0, height = 20.0, orderNum = "9") + private String leavePaidRate; + + /** + * 不带薪假率 + */ + @Excel(name = "不带薪假率", width = 10.0, height = 20.0, orderNum = "10") + private String leaveUnpaidRate; + + /** + * 外勤天数 + */ + @Excel(name = "外勤天数", width = 10.0, height = 20.0, orderNum = "11") + private String outsideAttNum; + + + private Double lateNum; + private Double skippingNum; + private Double earlyNum; + + private String attStatus; + + /** + * 开始月 + */ + private String endMonth; + + /** + * 结束月 + */ + private String startMonth; + +} diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/AttRateExportBean.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/AttRateExportBean.java new file mode 100644 index 0000000..01d1389 --- /dev/null +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/AttRateExportBean.java @@ -0,0 +1,98 @@ +package com.bonus.system.att.entity; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import lombok.Data; + +/** + * 考勤数据 + * + * @author zys + */ +@Data +public class AttRateExportBean { + + + /** + * 序号 + */ + @Excel(name = "序号", width = 10.0, height = 20.0, orderNum = "0") + private Long id; + + /** + * 用户编号 + */ + private Long userId; + + /** + * 用户名称 + */ + @Excel(name = "姓名", width = 10.0, height = 20.0, orderNum = "1") + private String userName; + + /** + * 组织编号 + */ + private Long orgId; + + /** + * 组织名称 + */ + @Excel(name = "所属部门", width = 10.0, height = 20.0, orderNum = "2") + private String orgName; + + + + /** + * 考勤月 + */ + private String attCurrentMonth; + + /** + * 考勤年 + */ + private String year; + + /** + * 考勤率 + */ + private String normalRate; + + /** + * 迟到率 + */ + private String lateRate; + + /** + * 旷工率 + */ + private String skippingRate; + + /** + * 早退率 + */ + private String earlyRate; + + /** + * 带薪假率 + */ + private String leavePaidRate; + + /** + * 不带薪假率 + */ + private String leaveUnpaidRate; + + /** + * 外勤天数 + */ + private String outsideAttNum; + + @Excel(name = "迟到天数", width = 10.0, height = 20.0, orderNum = "3") + private Double lateNum; + @Excel(name = "旷工天数", width = 10.0, height = 20.0, orderNum = "4") + private Double skippingNum; + @Excel(name = "早退天数", width = 10.0, height = 20.0, orderNum = "5") + private Double earlyNum; + + private String attStatus; +} diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/YearFullAttBean.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/YearFullAttBean.java new file mode 100644 index 0000000..5f9ea71 --- /dev/null +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/entity/YearFullAttBean.java @@ -0,0 +1,119 @@ +package com.bonus.system.att.entity; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import lombok.Data; + + +/** + * 考勤数据 + * + * @author zys + */ +@Data +public class YearFullAttBean { + + /** + * 序号 + */ + @Excel(name = "序号", width = 10.0, height = 20.0) + private Long id; + + /** + * 用户编号 + */ + private Long userId; + + /** + * 用户名称 + */ + @Excel(name = "姓名", width = 10.0, height = 20.0) + private String userName; + + private Integer orgId; + + /** + * 组织名称 + */ + @Excel(name = "所属部门", width = 10.0, height = 20.0) + private String orgName; + + /** + * 年份 + */ + private String year; + + /** + * 第一月 + */ + @Excel(name = "一月", width = 10.0, height = 20.0) + private String oneMonth; + + /** + * 第二月 + */ + @Excel(name = "二月", width = 10.0, height = 20.0) + private String twoMonth; + + /** + * 第三月 + */ + @Excel(name = "三月", width = 10.0, height = 20.0) + private String threeMonth; + + /** + * 第四月 + */ + @Excel(name = "四月", width = 10.0, height = 20.0) + private String fourMonth; + + /** + * 第五月 + */ + @Excel(name = "五月", width = 10.0, height = 20.0) + private String fiveMonth; + + /** + * 第六月 + */ + @Excel(name = "六月", width = 10.0, height = 20.0) + private String sixMonth; + + /** + * 第七月 + */ + @Excel(name = "七月", width = 10.0, height = 20.0) + private String sevenMonth; + + /** + * 第八月 + */ + @Excel(name = "八月", width = 10.0, height = 20.0) + private String eightMonth; + + /** + * 第九月 + */ + @Excel(name = "九月", width = 10.0, height = 20.0) + private String nineMonth; + + /** + * 第十月 + */ + @Excel(name = "十月", width = 10.0, height = 20.0) + private String tenMonth; + + /** + * 第十一月 + */ + @Excel(name = "十一月", width = 10.0, height = 20.0) + private String elevenMonth; + + /** + * 第十二月 + */ + @Excel(name = "十二月", width = 10.0, height = 20.0) + private String twelveMonth; + + + +} diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttAbnormalService.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttAbnormalService.java new file mode 100644 index 0000000..0f0ae52 --- /dev/null +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttAbnormalService.java @@ -0,0 +1,36 @@ +package com.bonus.system.att.service; + +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.system.att.entity.AttChangeBean; +import com.bonus.system.att.entity.AttDetailBean; +import com.bonus.system.att.entity.AttRateBean; + +import java.util.List; + +/** + * 考勤规则变更-业务层 + * @author lsun + */ +public interface AttAbnormalService { + /** + * 获取考勤率列表 + */ + List getAttRateTypeList(AttRateBean bean); + + /** + * 获取考勤率详情 + */ + List getAttRateTypeDetailsList(AttRateBean bean); + + /** + * 获取考勤异常列表 + */ + List getAttAbnormalList(AttRateBean bean); + + /** + * 获取考勤类型详情 + */ + List getAttTypeList(AttRateBean bean); + + +} diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttAbnormalServiceImpl.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttAbnormalServiceImpl.java new file mode 100644 index 0000000..eec2620 --- /dev/null +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttAbnormalServiceImpl.java @@ -0,0 +1,50 @@ +package com.bonus.system.att.service; + +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.common.security.utils.SecurityUtils; +import com.bonus.system.att.dao.AttAbnormalDao; +import com.bonus.system.att.dao.AttChangeDao; +import com.bonus.system.att.entity.AttChangeBean; +import com.bonus.system.att.entity.AttDetailBean; +import com.bonus.system.att.entity.AttRateBean; +import com.bonus.system.basic.domain.SysOrg; +import lombok.extern.log4j.Log4j2; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Collections; +import java.util.List; + +/** + * 考勤 + * + * @author fly + */ +@Service("AttAbnormalService") +@Log4j2 +public class AttAbnormalServiceImpl implements AttAbnormalService { + + @Resource(name = "AttAbnormalDao") + private AttAbnormalDao dao; + + + @Override + public List getAttRateTypeList(AttRateBean bean) { + return dao.getAttRateTypeList(bean); + } + + @Override + public List getAttRateTypeDetailsList(AttRateBean bean) { + return dao.getAttRateTypeDetailsList(bean); + } + + @Override + public List getAttAbnormalList(AttRateBean bean) { + return dao.getAttAbnormalList(bean); + } + + @Override + public List getAttTypeList(AttRateBean bean) { + return dao.getAttTypeList(bean); + } +} 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 d59c576..8bf3164 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 @@ -149,7 +149,7 @@ public interface AttCalService { * @param today * @return */ - List getNotFullAtt(String today); + List getNotFullAtt(String today, String month); /** * 修改全勤 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 c469b1e..e22be08 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 @@ -530,8 +530,8 @@ public class AttCalServiceImpl implements AttCalService { * @return */ @Override - public List getNotFullAtt(String today) { - return attSourceDataDao.getNotFullAtt(today); + public List getNotFullAtt(String today,String month) { + return attSourceDataDao.getNotFullAtt(today, month); } /** diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttChangeServiceImpl.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttChangeServiceImpl.java index f0cdd84..dd38d6f 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttChangeServiceImpl.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/att/service/AttChangeServiceImpl.java @@ -88,8 +88,8 @@ public class AttChangeServiceImpl implements AttChangeService { attChangeDao.updateOrgIdByUserId(bean); //先去判断是否有该人员信息 AttChangeBean o = attChangeDao.getAttPerson(bean); - // 260124 加一个变动时间 changeTime - bean.setUpdateTime("2026-01-18"); + // 260124 加一个变动时间 UpdateTime +// bean.setUpdateTime("2026-01-18"); if(o!=null && o.getId()>0){ bean.setId(o.getId()); // 有 删除旧的添加新的 @@ -101,7 +101,7 @@ public class AttChangeServiceImpl implements AttChangeService { attChangeDao.updateAttSettingHis(bean); //添加变更记录 bean.setCreateUserId(SecurityUtils.getLoginUser().getSysUser().getUserId()+""); - attChangeDao.addAtt( bean); + attChangeDao.addAtt(bean); return AjaxResult.success(); }else{ return AjaxResult.error("修改人员信息失败"); 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 6b2875d..f969eb8 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 @@ -95,7 +95,7 @@ public interface AttendanceDetailsService { * @return list bean */ List getAttDayReportDetailsList(AttDataDetailsBean bean); - + List getAttDayReportDetailsListData(AttDataDetailsBean bean); List getOutCountList(AttDataDetailsBean bean); @@ -130,4 +130,13 @@ public interface AttendanceDetailsService { * @return */ AjaxResult updateAttMonthDays(AttMonthDaysMakeUpBean bean); + + /** + * 年度全勤统计 + * @param bean + * @return + */ + List getWorkerYearFullAttList(YearFullAttBean 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 f6fa391..dc95168 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 @@ -475,4 +475,15 @@ public class AttendanceDetailsServiceImpl implements AttendanceDetailsService { } return AjaxResult.success(); } + + /** + * 获取年满勤列表 + * @param bean + * @return + */ + @Override + public List getWorkerYearFullAttList(YearFullAttBean bean) { + return attendanceDetailsDao.getWorkerYearFullAttList(bean); + } + } 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 1ec8995..ece1227 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 @@ -174,22 +174,6 @@ public class NewAttTask { log.info("--------报表数据生成--月报表定时器完毕------"); } - /** - * 月报表--是否全勤 - */ - @Scheduled(cron = "0 0 23 * * ?") - @Async - public void getMonthReportFullAttTask() { - log.info("--------月报表--是否全勤定时器开启------"); - String today = DateUtil.today(); - List list = attCalService.getNotFullAtt(today); - if(!list.isEmpty()){ - String month = today.substring(0,7); - attCalService.updateMonthReportFullAtt(list,month); - } - log.info("--------月报表--是否全勤定时器完毕------"); - } - /** * 待考勤人员列表 diff --git a/bonus-modules/bonus-system/src/main/resources/mapper/att/AttAbnormalMapper.xml b/bonus-modules/bonus-system/src/main/resources/mapper/att/AttAbnormalMapper.xml new file mode 100644 index 0000000..286611a --- /dev/null +++ b/bonus-modules/bonus-system/src/main/resources/mapper/att/AttAbnormalMapper.xml @@ -0,0 +1,149 @@ + + + + + + + + + + + + diff --git a/bonus-modules/bonus-system/src/main/resources/mapper/att/AttChangeMapper.xml b/bonus-modules/bonus-system/src/main/resources/mapper/att/AttChangeMapper.xml index d886470..8971c0b 100644 --- a/bonus-modules/bonus-system/src/main/resources/mapper/att/AttChangeMapper.xml +++ b/bonus-modules/bonus-system/src/main/resources/mapper/att/AttChangeMapper.xml @@ -10,8 +10,8 @@ INSERT INTO `att_change`(`user_id`, `old_att_id`, `after_att_id`, `old_org_id`, `after_org_id`, - `create_user_id`) - VALUES (#{userId}, #{oldAttId}, #{afterAttId}, #{oldOrgId}, #{afterOrgId}, #{createUserId}) + `create_user_id`, change_date) + VALUES (#{userId}, #{oldAttId}, #{afterAttId}, #{oldOrgId}, #{afterOrgId}, #{createUserId}, #{updateTime}) @@ -50,7 +50,8 @@ org2.org_name as afterOrgName, att.create_user_id, su2.user_name as createName, - att.create_time as createTime + att.create_time as createTime, + att.change_date as updateTime FROM att_change att LEFT JOIN sys_user su ON su.user_id = att.user_id LEFT JOIN sys_organization org1 on org1.id = att.old_org_id 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 269387f..21c6e85 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 @@ -163,6 +163,8 @@ early_num = #{v.earlyNum}, skipping_num = #{v.skippingNum}, leave_num = #{v.leaveNum}, + leave_paid_num = #{v.leavePaidNum}, + leave_unpaid_num = #{v.leaveUnpaidNum}, address_error_num = #{v.addressErrorNum}, ein_error_num = #{v.einErrorNum}, rest_num = #{v.restNum}, @@ -275,6 +277,25 @@ (offWorkAttStatus IN (SELECT dict_value FROM sys_dict_data WHERE dict_type = 'att_status' AND is_leave = '1'), 0.5, 0)) AS leaveNum, + sum( + IF + (toWorkAttStatus IN + (SELECT dict_value FROM sys_dict_data WHERE dict_type = 'att_status' AND is_leave = '1' and is_paid = '1'), 0.5, + 0)) + sum( + IF + (offWorkAttStatus IN + (SELECT dict_value FROM sys_dict_data WHERE dict_type = 'att_status' AND is_leave = '1' and is_paid = '1'), 0.5, + 0)) AS leavePaidNum, + sum( + IF + (toWorkAttStatus IN + (SELECT dict_value FROM sys_dict_data WHERE dict_type = 'att_status' AND is_leave = '1' and is_paid = '0'), 0.5, + 0)) + sum( + IF + (offWorkAttStatus IN + (SELECT dict_value FROM sys_dict_data WHERE dict_type = 'att_status' AND is_leave = '1' and is_paid = '0'), 0.5, + 0)) AS leaveUnpaidNum, + IFNULL(sum(IF(toWorkAttStatus = 7, 0.5, 0)), 0) + IFNULL(sum(IF(offWorkAttStatus = 7, 0.5, 0)), 0) AS outNum, IFNULL(sum(IF(toWorkAttStatus = 8, 0.5, 0)), 0) + @@ -613,8 +634,30 @@ leave_apply WHERE is_active = 1 - AND leave_type not in ('年休假', '婚假', '丧假', '丧假') + AND leave_type IN (SELECT dict_label FROM sys_dict_data WHERE dict_type = 'att_status' AND is_leave = '1' AND is_paid = '0') + + AND #{today} between leave_start_date and leave_end_date + + + AND #{month} between left(leave_start_date,7) and left(leave_end_date,7) + + + UNION + + SELECT DISTINCT + user_id + FROM + leave_apply + WHERE + is_active = 1 + AND leave_type = '临时外出' AND is_business != 1 + + AND #{today} between leave_start_date and leave_end_date + + + AND #{month} between left(leave_start_date,7) and left(leave_end_date,7) + 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 0d84075..8bdc647 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 @@ -658,4 +658,28 @@ where user_id = #{params.userId} and att_current_month = #{params.month} - \ No newline at end of file + + +