From d0ad4fc5ebd7aef7fc6a7d4cb15b8f1fcc3ee13f Mon Sep 17 00:00:00 2001 From: aikai Date: Thu, 15 Aug 2024 09:38:41 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=20/=20=E8=B0=83=E6=95=B4=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E7=8E=AF=E5=A2=83ip?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application-dev.yaml | 4 +- .../src/main/resources/application-dev.yaml | 4 +- .../system/enums/ErrorCodeConstants.java | 1 + .../attendance/AttendanceController.java | 6 +++ .../worklog/LogStatisticsController.java | 8 ++++ ...ogStatisticsDetailsListGroupByUserDTO.java | 28 ++++++++++++++ .../vo/statistics/LogStatisticsDetailsVO.java | 5 +++ ...LogStatisticsDetailsListGroupByUserVO.java | 29 +++++++++++++++ .../LogStatisticsGroupByUserVO.java | 16 ++++++++ .../mysql/worklog/LogStatisticsMapper.java | 12 +++++- .../service/attendance/AttendanceService.java | 9 ++++- .../attendance/AttendanceServiceImpl.java | 9 +++++ .../service/worklog/LogStatisticsService.java | 10 +++++ .../worklog/LogStatisticsServiceImpl.java | 37 ++++++++++++++++++- .../src/main/resources/application-dev.yaml | 6 +-- .../mapper/worklog/LogStatisticsMapper.xml | 29 ++++++++++++++- .../src/main/resources/application-dev.yaml | 4 +- .../src/main/resources/application-dev.yaml | 4 +- 18 files changed, 206 insertions(+), 15 deletions(-) create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/dto/statistics/LogStatisticsDetailsListGroupByUserDTO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statisticsrecord/LogStatisticsDetailsListGroupByUserVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statisticsrecord/LogStatisticsGroupByUserVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/application-dev.yaml b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/application-dev.yaml index 5ceab8d8..51b49331 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/application-dev.yaml +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/application-dev.yaml @@ -40,13 +40,13 @@ spring: datasource: master: name: ruoyi-vue-pro - url: jdbc:mysql://192.168.1.101:3306/${spring.datasource.dynamic.datasource.slave.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://192.168.1.107:3306/${spring.datasource.dynamic.datasource.slave.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 driver-class-name: com.mysql.jdbc.Driver username: root password: root slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 name: ruoyi-vue-pro - url: jdbc:mysql://192.168.1.101:3306/${spring.datasource.dynamic.datasource.slave.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://192.168.1.107:3306/${spring.datasource.dynamic.datasource.slave.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 driver-class-name: com.mysql.jdbc.Driver username: root password: root diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-dev.yaml b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-dev.yaml index 21edd24c..444790ca 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-dev.yaml +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-dev.yaml @@ -40,13 +40,13 @@ spring: datasource: master: name: ruoyi-vue-pro - url: jdbc:mysql://192.168.1.101:3306/${spring.datasource.dynamic.datasource.slave.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://192.168.1.107:3306/${spring.datasource.dynamic.datasource.slave.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 driver-class-name: com.mysql.jdbc.Driver username: root password: root slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 name: ruoyi-vue-pro - url: jdbc:mysql://192.168.1.101:3306/${spring.datasource.dynamic.datasource.slave.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://192.168.1.107:3306/${spring.datasource.dynamic.datasource.slave.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 driver-class-name: com.mysql.jdbc.Driver username: root password: root diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java index 376cdaf8..140b5137 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java @@ -180,6 +180,7 @@ public interface ErrorCodeConstants { ErrorCode LOG_INSTANCE_NOT_EXISTS = new ErrorCode(1_009_010_002, "日志实例的拓展不存在"); ErrorCode LOG_RULE_NOT_EXISTS = new ErrorCode(1_009_010_003, "日志规则不存在"); + ErrorCode PLEASE_SELECT_A_TIME_RANGE = new ErrorCode(1_009_010_004, "请选择时间区间"); // ========== 站内信发送 1-003-001-000 ========== ErrorCode SCHEDULING_NOT_EXISTS = new ErrorCode(1_003_001_000, "排班制考勤设置不存在"); ErrorCode PUNCH_RECORD_NOT_EXISTS = new ErrorCode(1_003_002_000, "用户打卡记录不存在"); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/attendance/AttendanceController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/attendance/AttendanceController.java index 71abe353..cf24fa43 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/attendance/AttendanceController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/attendance/AttendanceController.java @@ -46,6 +46,12 @@ public class AttendanceController { return success(vo); } + @GetMapping("/getRulesByUserId") + @Operation(summary = "获取考勤规则根据用户id") + public CommonResult getRulesByUserId() { + AttendanceRulesVO vo = attendanceService.getRulesByUserId(); + return success(vo); + } @GetMapping("/statisticsByDay") @Operation(summary = "统计按天") diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogStatisticsController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogStatisticsController.java index 7f11e1ac..46afbbc2 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogStatisticsController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogStatisticsController.java @@ -5,12 +5,14 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; import cn.iocoder.yudao.module.system.controller.admin.worklog.dto.statistics.LogStatisticsDetailsListDTO; +import cn.iocoder.yudao.module.system.controller.admin.worklog.dto.statistics.LogStatisticsDetailsListGroupByUserDTO; import cn.iocoder.yudao.module.system.controller.admin.worklog.dto.statistics.MyManageModelDTO; import cn.iocoder.yudao.module.system.controller.admin.worklog.dto.statistics.NeedWriteHistoryDTO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics.LogStatisticsDetailsListVO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics.LogStatisticsDetailsVO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics.LogStatisticsExcelVO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics.LogStatisticsModelVO; +import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statisticsrecord.LogStatisticsDetailsListGroupByUserVO; import cn.iocoder.yudao.module.system.service.worklog.LogStatisticsService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -57,6 +59,12 @@ public class LogStatisticsController { return success(logStatisticsService.getStatistics(dto)); } + @GetMapping("/getStatisticsGroupByUser") + @Operation(summary = "获取日志统计(通过用户)") + public CommonResult> getStatisticsGroupByUser(@ModelAttribute LogStatisticsDetailsListGroupByUserDTO dto) { + return success(logStatisticsService.getStatisticsGroupByUser(dto)); + } + @GetMapping("/getNeedWrite") @Operation(summary = "获取需要填写的") public CommonResult> getNeedWrite() { diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/dto/statistics/LogStatisticsDetailsListGroupByUserDTO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/dto/statistics/LogStatisticsDetailsListGroupByUserDTO.java new file mode 100644 index 00000000..ce86348d --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/dto/statistics/LogStatisticsDetailsListGroupByUserDTO.java @@ -0,0 +1,28 @@ +package cn.iocoder.yudao.module.system.controller.admin.worklog.dto.statistics; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +@Data +public class LogStatisticsDetailsListGroupByUserDTO { + + @Schema(description = "开始时间 格式yyyy-MM-dd 如果是日报的话 开始时间结束时间都传同一天即可") + private String beginTime; + + @Schema(description = "结束时间 格式yyyy-MM-dd 如果是日报的话 开始时间结束时间都传同一天即可") + private String endTime; + + @Schema(description = "日志类型") + private Integer type; + + @Schema(description = "部门id") + private Long deptId; + + /** + * 时间列表 + */ + private List dateList; + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statistics/LogStatisticsDetailsVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statistics/LogStatisticsDetailsVO.java index 6ee0bf26..63e9b9fd 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statistics/LogStatisticsDetailsVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statistics/LogStatisticsDetailsVO.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics; +import com.alibaba.excel.annotation.ExcelProperty; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -30,6 +31,10 @@ public class LogStatisticsDetailsVO { @Schema(description = "日志id", example = "30875") private Long logInstanceExtId; + @Schema(description = "日志类型 1日报 2周报", example = "1") + @ExcelProperty("日志类型 1日报 2周报") + private Integer type; + @Schema(description = "提交状态 1按时提交 2迟交 3未提交", example = "2") private Integer status; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statisticsrecord/LogStatisticsDetailsListGroupByUserVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statisticsrecord/LogStatisticsDetailsListGroupByUserVO.java new file mode 100644 index 00000000..c24abef9 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statisticsrecord/LogStatisticsDetailsListGroupByUserVO.java @@ -0,0 +1,29 @@ +package cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statisticsrecord; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class LogStatisticsDetailsListGroupByUserVO { + + @Schema(description = "姓名") + private String nickName; + + @Schema(description = "部门名称") + private String deptName; + + @Schema(description = "日志类型") + private Integer type; + + @Schema(description = "应提交") + private Integer should; + + @Schema(description = "按时交") + private Integer onTime; + + @Schema(description = "迟交") + private Integer late; + + @Schema(description = "未提交") + private Integer notYet; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statisticsrecord/LogStatisticsGroupByUserVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statisticsrecord/LogStatisticsGroupByUserVO.java new file mode 100644 index 00000000..c209e320 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statisticsrecord/LogStatisticsGroupByUserVO.java @@ -0,0 +1,16 @@ +package cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statisticsrecord; + +import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics.LogStatisticsDetailsVO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class LogStatisticsGroupByUserVO extends LogStatisticsDetailsVO { + + @Schema(description = "姓名") + private String nickName; + + @Schema(description = "部门名称") + private String deptName; + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogStatisticsMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogStatisticsMapper.java index badd3b92..a932c4e5 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogStatisticsMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogStatisticsMapper.java @@ -3,10 +3,12 @@ package cn.iocoder.yudao.module.system.dal.mysql.worklog; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.system.controller.admin.worklog.dto.statistics.LogStatisticsDetailsListGroupByUserDTO; import cn.iocoder.yudao.module.system.controller.admin.worklog.dto.statistics.NeedWriteHistoryDTO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics.LogStatisticsDetailsVO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics.LogStatisticsModelVO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics.LogStatisticsPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statisticsrecord.LogStatisticsGroupByUserVO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogStatisticsDO; import cn.iocoder.yudao.module.system.service.worklog.dto.LogUseVO; @@ -82,4 +84,12 @@ public interface LogStatisticsMapper extends BaseMapperX { * @return */ List getNeedWriteHistory(@Param("dto") NeedWriteHistoryDTO dto, @Param("dateList") List dateList); -} \ No newline at end of file + + /** + * 根据用户分组日志统计 + * + * @param dto + * @return + */ + List getStatisticsGroupByUser(@Param("dto") LogStatisticsDetailsListGroupByUserDTO dto); +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/AttendanceService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/AttendanceService.java index 36fbb600..3563369f 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/AttendanceService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/AttendanceService.java @@ -106,4 +106,11 @@ public interface AttendanceService { * @param dto */ void exportAttendanceExcel(HttpServletResponse response, ExportAttendanceExcelDTO dto); -} \ No newline at end of file + + /** + * 根据用户获取考勤组规则 + * + * @return + */ + AttendanceRulesVO getRulesByUserId(); +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/AttendanceServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/AttendanceServiceImpl.java index 0d0ce89e..82529c59 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/AttendanceServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/AttendanceServiceImpl.java @@ -932,6 +932,15 @@ public class AttendanceServiceImpl implements AttendanceService { } } + @Override + public AttendanceRulesVO getRulesByUserId() { + AttendanceGroupDO activationGroup = attendanceGroupService.getByUserId(getLoginUserId()); + if (activationGroup == null) { + return null; + } + return this.getRules(activationGroup.getId()); + } + /** * 按日导出 diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogStatisticsService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogStatisticsService.java index 7942eda4..8457f836 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogStatisticsService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogStatisticsService.java @@ -2,9 +2,11 @@ package cn.iocoder.yudao.module.system.service.worklog; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.system.controller.admin.worklog.dto.statistics.LogStatisticsDetailsListDTO; +import cn.iocoder.yudao.module.system.controller.admin.worklog.dto.statistics.LogStatisticsDetailsListGroupByUserDTO; import cn.iocoder.yudao.module.system.controller.admin.worklog.dto.statistics.MyManageModelDTO; import cn.iocoder.yudao.module.system.controller.admin.worklog.dto.statistics.NeedWriteHistoryDTO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics.*; +import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statisticsrecord.LogStatisticsDetailsListGroupByUserVO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogRuleDO; import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogStatisticsDO; @@ -114,4 +116,12 @@ public interface LogStatisticsService { * @return */ List getMyManageModelStatistics(MyManageModelDTO dto); + + /** + * 根据用户分组日志统计 + * + * @param dto + * @return + */ + List getStatisticsGroupByUser(LogStatisticsDetailsListGroupByUserDTO dto); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogStatisticsServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogStatisticsServiceImpl.java index ae38b19a..9e3df9d4 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogStatisticsServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogStatisticsServiceImpl.java @@ -12,14 +12,18 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils; import cn.iocoder.yudao.module.system.controller.admin.worklog.dto.statistics.LogStatisticsDetailsListDTO; +import cn.iocoder.yudao.module.system.controller.admin.worklog.dto.statistics.LogStatisticsDetailsListGroupByUserDTO; import cn.iocoder.yudao.module.system.controller.admin.worklog.dto.statistics.MyManageModelDTO; import cn.iocoder.yudao.module.system.controller.admin.worklog.dto.statistics.NeedWriteHistoryDTO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics.*; +import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statisticsrecord.LogStatisticsDetailsListGroupByUserVO; +import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statisticsrecord.LogStatisticsGroupByUserVO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.dal.dataobject.worklog.*; import cn.iocoder.yudao.module.system.dal.mysql.worklog.LogFormMapper; import cn.iocoder.yudao.module.system.dal.mysql.worklog.LogStatisticsMapper; import cn.iocoder.yudao.module.system.dal.mysql.worklog.LogUseMapper; +import cn.iocoder.yudao.module.system.enums.ErrorCodeConstants; import cn.iocoder.yudao.module.system.service.worklog.dto.LogUseVO; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -30,6 +34,8 @@ import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; + /** * 工作日志统计 Service 实现类 * @@ -388,4 +394,33 @@ public class LogStatisticsServiceImpl implements LogStatisticsService { } return list; } -} \ No newline at end of file + + @Override + public List getStatisticsGroupByUser(LogStatisticsDetailsListGroupByUserDTO dto) { + List list = new ArrayList<>(); + List dateList = new ArrayList<>(); + if (dto.getBeginTime() != null && dto.getEndTime() != null) { + dateList = DateUtils.betweenDayStrList(dto.getBeginTime(), dto.getEndTime()); + } + if (dateList.isEmpty()) { + throw exception(ErrorCodeConstants.PLEASE_SELECT_A_TIME_RANGE); + } + dto.setDateList(dateList); + // 获取到所有数据 然后在java代码中分组 + List vos = logStatisticsMapper.getStatisticsGroupByUser(dto); + // 根据用户id/部门id分组 + Map> map = vos.stream().collect(Collectors.groupingBy(a -> a.getUserId() + "_" + a.getDeptId() + "_" + a.getType())); + for (Map.Entry> entry : map.entrySet()) { + LogStatisticsDetailsListGroupByUserVO vo = new LogStatisticsDetailsListGroupByUserVO(); + vo.setNickName(entry.getValue().get(0).getNickName()); + vo.setDeptName(entry.getValue().get(0).getDeptName()); + vo.setType(entry.getValue().get(0).getType()); + vo.setShould(entry.getValue().size()); + vo.setOnTime((int) entry.getValue().stream().filter(a -> a.getStatus() == 1).count()); + vo.setLate((int) entry.getValue().stream().filter(a -> a.getStatus() == 2).count()); + vo.setNotYet((int) entry.getValue().stream().filter(a -> a.getStatus() == 3).count()); + list.add(vo); + } + return list; + } +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml index aa997a1d..d8cc9a70 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml @@ -40,13 +40,13 @@ spring: datasource: master: name: ruoyi-vue-pro - url: jdbc:mysql://192.168.1.101:3306/${spring.datasource.dynamic.datasource.slave.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://192.168.1.107:3306/${spring.datasource.dynamic.datasource.slave.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 driver-class-name: com.mysql.jdbc.Driver username: root password: root slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 name: ruoyi-vue-pro - url: jdbc:mysql://192.168.1.101:3306/${spring.datasource.dynamic.datasource.slave.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://192.168.1.107:3306/${spring.datasource.dynamic.datasource.slave.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 driver-class-name: com.mysql.jdbc.Driver username: root password: root @@ -80,7 +80,7 @@ xxl: job: enabled: true # 是否开启调度中心,默认为 true 开启 admin: - addresses: http://192.168.1.101:9090/xxl-job-admin # 调度中心部署跟地址 + addresses: http://192.168.1.107:9090/xxl-job-admin # 调度中心部署跟地址 executor: appname: ${spring.application.name} # 执行器 AppName ip: # 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务"; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/worklog/LogStatisticsMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/worklog/LogStatisticsMapper.xml index a04fa97a..812e2ef4 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/worklog/LogStatisticsMapper.xml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/worklog/LogStatisticsMapper.xml @@ -151,4 +151,31 @@ - \ No newline at end of file + + diff --git a/yudao-module-wms/yudao-module-wms-biz/src/main/resources/application-dev.yaml b/yudao-module-wms/yudao-module-wms-biz/src/main/resources/application-dev.yaml index 21edd24c..444790ca 100644 --- a/yudao-module-wms/yudao-module-wms-biz/src/main/resources/application-dev.yaml +++ b/yudao-module-wms/yudao-module-wms-biz/src/main/resources/application-dev.yaml @@ -40,13 +40,13 @@ spring: datasource: master: name: ruoyi-vue-pro - url: jdbc:mysql://192.168.1.101:3306/${spring.datasource.dynamic.datasource.slave.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://192.168.1.107:3306/${spring.datasource.dynamic.datasource.slave.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 driver-class-name: com.mysql.jdbc.Driver username: root password: root slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 name: ruoyi-vue-pro - url: jdbc:mysql://192.168.1.101:3306/${spring.datasource.dynamic.datasource.slave.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://192.168.1.107:3306/${spring.datasource.dynamic.datasource.slave.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 driver-class-name: com.mysql.jdbc.Driver username: root password: root diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/application-dev.yaml b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/application-dev.yaml index d7a16484..f8193e20 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/application-dev.yaml +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/application-dev.yaml @@ -40,13 +40,13 @@ spring: datasource: master: name: ruoyi-vue-pro - url: jdbc:mysql://192.168.1.101:3306/${spring.datasource.dynamic.datasource.slave.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://192.168.1.107:3306/${spring.datasource.dynamic.datasource.slave.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 driver-class-name: com.mysql.jdbc.Driver username: root password: root slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 name: ruoyi-vue-pro - url: jdbc:mysql://192.168.1.101:3306/${spring.datasource.dynamic.datasource.slave.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://192.168.1.107:3306/${spring.datasource.dynamic.datasource.slave.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 driver-class-name: com.mysql.jdbc.Driver username: root password: root From 3939e029c381c54c5bce029e1f2ca65b72ddc63f Mon Sep 17 00:00:00 2001 From: aikai Date: Thu, 15 Aug 2024 14:59:14 +0800 Subject: [PATCH 2/3] =?UTF-8?q?1.=20/system/attendance/group/create=20?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E8=80=83=E5=8B=A4=E7=BB=84=20=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E8=B0=83=E6=95=B4=20=E7=94=B1=E5=8E=9F=E6=9D=A5?= =?UTF-8?q?=E7=9A=84=E8=80=83=E5=8B=A4=E7=BB=84=E7=AE=A1=E7=90=86=E5=91=98?= =?UTF-8?q?id=20userId=20=E6=94=B9=E4=B8=BA=20userIds=E5=8F=AF=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E4=BC=A0=E5=A4=9A=E4=B8=AA=20=E9=80=97=E5=8F=B7?= =?UTF-8?q?=E9=9A=94=E5=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2. /system/attendance/group/update 更新考勤组 参数调整 由原来的考勤组管理员id userId 改为 userIds可支持传多个 逗号隔开 3. /system/attendance/group/get 获得考勤组 响应参数调整 新增响应参数 groupSystems 考勤组管理员集合对象 内涵考勤组管理员名称 / 考勤组管理员id / 考勤组id 4. /system/attendance/group/page 获得考勤组分页 请求参数调整考勤组管理员id userId 改为 userIds可支持传多个 逗号隔开 响应参数调整 新增响应参数 systemNames 管理员名称列表逗号隔开 --- .../vo/AttendancePunchRecordVO.java | 6 +- .../group/AttendanceGroupController.java | 55 +++++---- .../group/vo/AttendanceGroupPageReqVO.java | 16 +-- .../admin/group/vo/AttendanceGroupRespVO.java | 23 ++-- .../group/vo/AttendanceGroupSaveReqVO.java | 12 +- .../vo/AttendanceGroupSystemRespVO.java | 20 ++++ .../vo/AttendancePunchRecordPageReqVO.java | 5 +- .../vo/AttendancePunchRecordRespVO.java | 6 +- .../vo/AttendancePunchRecordSaveReqVO.java | 7 +- .../worklog/LogStatisticsController.java | 11 ++ ...LogStatisticsDetailsListGroupByUserVO.java | 13 ++ .../attendance/group/AttendanceGroupDO.java | 12 +- .../groupsystem/AttendanceGroupSystemDO.java | 36 ++++++ .../punchrecord/AttendancePunchRecordDO.java | 2 +- .../group/AttendanceGroupMapper.java | 14 ++- .../AttendanceGroupSystemMapper.java | 34 ++++++ .../attendance/AttendanceServiceImpl.java | 6 +- .../group/AttendanceGroupServiceImpl.java | 45 +++---- .../AttendanceGroupSystemService.java | 53 +++++++++ .../AttendanceGroupSystemServiceImpl.java | 111 ++++++++++++++++++ .../mapper/group/AttendanceGroupMapper.xml | 46 +++++++- .../AttendanceGroupSystemMapper.xml | 37 ++++++ 22 files changed, 467 insertions(+), 103 deletions(-) create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/groupsystem/vo/AttendanceGroupSystemRespVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/attendance/groupsystem/AttendanceGroupSystemDO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/attendance/groupsystem/AttendanceGroupSystemMapper.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/groupsystem/AttendanceGroupSystemService.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/groupsystem/AttendanceGroupSystemServiceImpl.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/groupsystem/AttendanceGroupSystemMapper.xml diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/attendance/vo/AttendancePunchRecordVO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/attendance/vo/AttendancePunchRecordVO.java index 0ed3b125..702d6a27 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/attendance/vo/AttendancePunchRecordVO.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/attendance/vo/AttendancePunchRecordVO.java @@ -10,13 +10,13 @@ import java.time.LocalDateTime; * @author 艾楷 */ @Data -public class AttendancePunchRecordVO { +public class AttendancePunchRecordVO { /** * 编号 */ private Long id; /** - * 考勤组管理员id + * 考勤用户id */ private Long userId; /** @@ -135,4 +135,4 @@ public class AttendancePunchRecordVO { * 请假json对象 */ private String leaveJson; -} \ No newline at end of file +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/group/AttendanceGroupController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/group/AttendanceGroupController.java index b6956d2d..d3ef5404 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/group/AttendanceGroupController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/group/AttendanceGroupController.java @@ -1,33 +1,33 @@ package cn.iocoder.yudao.module.system.controller.admin.group; -import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.Operation; - -import javax.annotation.security.PermitAll; -import javax.validation.*; -import javax.servlet.http.*; -import java.util.*; -import java.io.IOException; - +import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; - import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*; - -import cn.iocoder.yudao.module.system.controller.admin.group.vo.*; +import cn.iocoder.yudao.module.system.controller.admin.group.vo.AttendanceGroupPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.group.vo.AttendanceGroupRespVO; +import cn.iocoder.yudao.module.system.controller.admin.group.vo.AttendanceGroupSaveReqVO; +import cn.iocoder.yudao.module.system.controller.admin.groupsystem.vo.AttendanceGroupSystemRespVO; import cn.iocoder.yudao.module.system.dal.dataobject.attendance.group.AttendanceGroupDO; import cn.iocoder.yudao.module.system.service.attendance.group.AttendanceGroupService; +import cn.iocoder.yudao.module.system.service.attendance.groupsystem.AttendanceGroupSystemService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; @Tag(name = "管理后台 - 考勤组") @RestController @@ -37,6 +37,8 @@ public class AttendanceGroupController { @Resource private AttendanceGroupService groupService; + @Resource + private AttendanceGroupSystemService groupSystemService; @PostMapping("/create") @Operation(summary = "创建考勤组") @@ -68,7 +70,10 @@ public class AttendanceGroupController { @PreAuthorize("@ss.hasPermission('attendance:group:query')") public CommonResult getGroup(@RequestParam("id") Long id) { AttendanceGroupDO group = groupService.getGroup(id); - return success(BeanUtils.toBean(group, AttendanceGroupRespVO.class)); + List groupSystems = groupSystemService.getGroupSystemVoByGroupId(id); + AttendanceGroupRespVO vo = BeanUtils.toBean(group, AttendanceGroupRespVO.class); + vo.setGroupSystems(groupSystems); + return success(vo); } @@ -93,12 +98,12 @@ public class AttendanceGroupController { @PreAuthorize("@ss.hasPermission('attendance:group:export')") @OperateLog(type = EXPORT) public void exportGroupExcel(@Valid AttendanceGroupPageReqVO pageReqVO, - HttpServletResponse response) throws IOException { + HttpServletResponse response) throws IOException { pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); List list = groupService.getGroupPage(pageReqVO).getList(); // 导出 Excel ExcelUtils.write(response, "考勤组.xls", "数据", AttendanceGroupRespVO.class, - BeanUtils.toBean(list, AttendanceGroupRespVO.class)); + BeanUtils.toBean(list, AttendanceGroupRespVO.class)); } -} \ No newline at end of file +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/group/vo/AttendanceGroupPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/group/vo/AttendanceGroupPageReqVO.java index cafa7a65..9b3a05b1 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/group/vo/AttendanceGroupPageReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/group/vo/AttendanceGroupPageReqVO.java @@ -1,12 +1,14 @@ package cn.iocoder.yudao.module.system.controller.admin.group.vo; -import com.alibaba.excel.annotation.ExcelProperty; -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; import org.springframework.format.annotation.DateTimeFormat; + import java.time.LocalDateTime; +import java.util.List; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; @@ -16,8 +18,8 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ @ToString(callSuper = true) public class AttendanceGroupPageReqVO extends PageParam { - @Schema(description = "考勤组管理员id", example = "15633") - private Long userId; + @Schema(description = "考勤组管理员ids", example = "15633") + private List userIds; @Schema(description = "群组名称", example = "李四") private String groupName; @@ -50,4 +52,4 @@ public class AttendanceGroupPageReqVO extends PageParam { @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] createTime; -} \ No newline at end of file +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/group/vo/AttendanceGroupRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/group/vo/AttendanceGroupRespVO.java index b51e07d3..488c2a04 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/group/vo/AttendanceGroupRespVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/group/vo/AttendanceGroupRespVO.java @@ -1,12 +1,13 @@ package cn.iocoder.yudao.module.system.controller.admin.group.vo; +import cn.iocoder.yudao.module.system.controller.admin.groupsystem.vo.AttendanceGroupSystemRespVO; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; +import lombok.Data; + import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; +import java.util.List; @Schema(description = "管理后台 - 考勤组 Response VO") @Data @@ -17,9 +18,13 @@ public class AttendanceGroupRespVO { @ExcelProperty("编号") private Long id; - @Schema(description = "考勤组管理员id", example = "15633") - @ExcelProperty("考勤组管理员id") - private Long userId; + @Schema(description = "考勤组管理员列表", example = "15633") + @ExcelProperty("考勤组管理员列表") + private List groupSystems; + + @Schema(description = "管理员名称列表逗号隔开", example = "李四") + @ExcelProperty("管理员名称列表逗号隔开") + private String systemNames; @Schema(description = "群组名称", example = "李四") @ExcelProperty("群组名称") @@ -62,4 +67,4 @@ public class AttendanceGroupRespVO { @ExcelProperty("创建时间") private LocalDateTime createTime; -} \ No newline at end of file +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/group/vo/AttendanceGroupSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/group/vo/AttendanceGroupSaveReqVO.java index dde5f75a..fe4f2ee4 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/group/vo/AttendanceGroupSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/group/vo/AttendanceGroupSaveReqVO.java @@ -1,11 +1,7 @@ package cn.iocoder.yudao.module.system.controller.admin.group.vo; -import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import javax.validation.constraints.*; -import java.util.*; +import lombok.Data; @Schema(description = "管理后台 - 考勤组新增/修改 Request VO") @Data @@ -14,8 +10,8 @@ public class AttendanceGroupSaveReqVO { @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "22881") private Long id; - @Schema(description = "考勤组管理员id", example = "15633") - private Long userId; + @Schema(description = "考勤组管理员ids", example = "15633") + private String userIds; @Schema(description = "群组名称", example = "李四") private String groupName; @@ -44,4 +40,4 @@ public class AttendanceGroupSaveReqVO { @Schema(description = "节假日自动排休 0否 1是") private Integer autoHolidaysFlag; -} \ No newline at end of file +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/groupsystem/vo/AttendanceGroupSystemRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/groupsystem/vo/AttendanceGroupSystemRespVO.java new file mode 100644 index 00000000..82e3848e --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/groupsystem/vo/AttendanceGroupSystemRespVO.java @@ -0,0 +1,20 @@ +package cn.iocoder.yudao.module.system.controller.admin.groupsystem.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class AttendanceGroupSystemRespVO { + @Schema(description = "id") + private Long id; + + @Schema(description = "考勤组管理员id") + private Long userId; + + @Schema(description = "考勤组管理员名称") + private String nickname; + + @Schema(description = "考勤组id") + private Long attendanceGroupId; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/punchrecord/vo/AttendancePunchRecordPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/punchrecord/vo/AttendancePunchRecordPageReqVO.java index d0fe2892..34872481 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/punchrecord/vo/AttendancePunchRecordPageReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/punchrecord/vo/AttendancePunchRecordPageReqVO.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.system.controller.admin.punchrecord.vo; import cn.iocoder.yudao.framework.common.pojo.PageParam; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -17,7 +18,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ @ToString(callSuper = true) public class AttendancePunchRecordPageReqVO extends PageParam { - @Schema(description = "考勤组管理员id", example = "11409") + @Schema(description = "考勤用户id", example = "11409") private Long userId; @Schema(description = "考勤组id", example = "22293") @@ -77,4 +78,4 @@ public class AttendancePunchRecordPageReqVO extends PageParam { @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] createTime; -} \ No newline at end of file +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/punchrecord/vo/AttendancePunchRecordRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/punchrecord/vo/AttendancePunchRecordRespVO.java index 19398066..417b8d5a 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/punchrecord/vo/AttendancePunchRecordRespVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/punchrecord/vo/AttendancePunchRecordRespVO.java @@ -17,8 +17,8 @@ public class AttendancePunchRecordRespVO { @ExcelProperty("编号") private Long id; - @Schema(description = "考勤组管理员id", example = "11409") - @ExcelProperty("考勤组管理员id") + @Schema(description = "考勤用户id", example = "11409") + @ExcelProperty("考勤用户id") private Long userId; @Schema(description = "考勤组id", example = "22293") @@ -103,4 +103,4 @@ public class AttendancePunchRecordRespVO { @Schema(description = "班次名称") @ExcelProperty("班次名称") private String attendanceGroupShiftName; -} \ No newline at end of file +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/punchrecord/vo/AttendancePunchRecordSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/punchrecord/vo/AttendancePunchRecordSaveReqVO.java index de2a6dec..096c8a23 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/punchrecord/vo/AttendancePunchRecordSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/punchrecord/vo/AttendancePunchRecordSaveReqVO.java @@ -1,12 +1,9 @@ package cn.iocoder.yudao.module.system.controller.admin.punchrecord.vo; -import cn.hutool.core.date.LocalDateTimeUtil; -import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.time.LocalDateTime; -import java.time.temporal.ChronoUnit; @Schema(description = "管理后台 - 用户打卡记录新增/修改 Request VO") @Data @@ -14,7 +11,7 @@ public class AttendancePunchRecordSaveReqVO { @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "65") private Long id; - @Schema(description = "考勤组管理员id", example = "11409") + @Schema(description = "考勤用户id", example = "11409") private Long userId; @Schema(description = "部门id", example = "11409") @@ -102,4 +99,4 @@ public class AttendancePunchRecordSaveReqVO { return null; } -} \ No newline at end of file +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogStatisticsController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogStatisticsController.java index 46afbbc2..8d013939 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogStatisticsController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogStatisticsController.java @@ -65,6 +65,17 @@ public class LogStatisticsController { return success(logStatisticsService.getStatisticsGroupByUser(dto)); } + @GetMapping("/export-excel-group-by-user") + @Operation(summary = "导出日志统计 Excel") + @OperateLog(type = EXPORT) + public void exportLogGroupByUserExcel(@ModelAttribute LogStatisticsDetailsListGroupByUserDTO dto, + HttpServletResponse response) throws IOException { + List list = logStatisticsService.getStatisticsGroupByUser(dto); + // 导出 Excel + ExcelUtils.write(response, "日志统计.xls", "日志统计", LogStatisticsDetailsListGroupByUserVO.class, + BeanUtils.toBean(list, LogStatisticsDetailsListGroupByUserVO.class)); + } + @GetMapping("/getNeedWrite") @Operation(summary = "获取需要填写的") public CommonResult> getNeedWrite() { diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statisticsrecord/LogStatisticsDetailsListGroupByUserVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statisticsrecord/LogStatisticsDetailsListGroupByUserVO.java index c24abef9..00795f93 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statisticsrecord/LogStatisticsDetailsListGroupByUserVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statisticsrecord/LogStatisticsDetailsListGroupByUserVO.java @@ -1,29 +1,42 @@ package cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statisticsrecord; +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @Data +@ExcelIgnoreUnannotated public class LogStatisticsDetailsListGroupByUserVO { @Schema(description = "姓名") + @ExcelProperty("姓名") private String nickName; @Schema(description = "部门名称") + @ExcelProperty("部门名称") private String deptName; @Schema(description = "日志类型") + @ExcelProperty(value = "日志类型", converter = DictConvert.class) + @DictFormat("work_log_type") private Integer type; @Schema(description = "应提交") + @ExcelProperty("应提交") private Integer should; @Schema(description = "按时交") + @ExcelProperty("按时交") private Integer onTime; @Schema(description = "迟交") + @ExcelProperty("迟交") private Integer late; @Schema(description = "未提交") + @ExcelProperty("未提交") private Integer notYet; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/attendance/group/AttendanceGroupDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/attendance/group/AttendanceGroupDO.java index bccab8ec..6ea8c5d9 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/attendance/group/AttendanceGroupDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/attendance/group/AttendanceGroupDO.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.system.dal.dataobject.attendance.group; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.*; @@ -31,10 +32,6 @@ public class AttendanceGroupDO extends BaseDO { */ @TableId private Long id; - /** - * 考勤组管理员id - */ - private Long userId; /** * 群组名称 */ @@ -72,6 +69,11 @@ public class AttendanceGroupDO extends BaseDO { */ private Integer autoHolidaysFlag; + /** + * 管理员名称列表逗号隔开 + */ + @TableField(exist = false) + private String systemNames; public static String getCodeByType(Integer type) { if (type == 1) { @@ -81,4 +83,4 @@ public class AttendanceGroupDO extends BaseDO { } } -} \ No newline at end of file +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/attendance/groupsystem/AttendanceGroupSystemDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/attendance/groupsystem/AttendanceGroupSystemDO.java new file mode 100644 index 00000000..b88a718a --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/attendance/groupsystem/AttendanceGroupSystemDO.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.system.dal.dataobject.attendance.groupsystem; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +/** + * 考勤组 DO + * + * @author 艾楷 + */ +@TableName("kq_attendance_group_system") +@KeySequence("kq_attendance_group_system_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AttendanceGroupSystemDO extends BaseDO { + /** + * 编号 + */ + @TableId + private Long id; + /** + * 考勤组管理员id + */ + private Long userId; + /** + * 考勤组id + */ + private Long attendanceGroupId; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/attendance/punchrecord/AttendancePunchRecordDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/attendance/punchrecord/AttendancePunchRecordDO.java index e1d7dc68..623b5f1b 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/attendance/punchrecord/AttendancePunchRecordDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/attendance/punchrecord/AttendancePunchRecordDO.java @@ -30,7 +30,7 @@ public class AttendancePunchRecordDO extends BaseDO { @TableId private Long id; /** - * 考勤组管理员id + * 考勤用户id */ private Long userId; /** diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/attendance/group/AttendanceGroupMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/attendance/group/AttendanceGroupMapper.java index 9fe48147..86303756 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/attendance/group/AttendanceGroupMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/attendance/group/AttendanceGroupMapper.java @@ -5,6 +5,8 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.system.controller.admin.group.vo.AttendanceGroupPageReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.attendance.group.AttendanceGroupDO; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -20,7 +22,6 @@ public interface AttendanceGroupMapper extends BaseMapperX { default PageResult selectPage(AttendanceGroupPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() - .eqIfPresent(AttendanceGroupDO::getUserId, reqVO.getUserId()) .likeIfPresent(AttendanceGroupDO::getGroupName, reqVO.getGroupName()) .eqIfPresent(AttendanceGroupDO::getType, reqVO.getType()) .eqIfPresent(AttendanceGroupDO::getPunchType, reqVO.getPunchType()) @@ -39,4 +40,13 @@ public interface AttendanceGroupMapper extends BaseMapperX { * @return */ List getByUserId(@Param("userId") Long userId); -} \ No newline at end of file + + /** + * 分页列表 + * + * @param vo + * @param page + * @return + */ + IPage selectPageList(@Param("vo") AttendanceGroupPageReqVO vo, @Param("page") Page page); +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/attendance/groupsystem/AttendanceGroupSystemMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/attendance/groupsystem/AttendanceGroupSystemMapper.java new file mode 100644 index 00000000..773beec2 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/attendance/groupsystem/AttendanceGroupSystemMapper.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.system.dal.mysql.attendance.groupsystem; + +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.system.controller.admin.groupsystem.vo.AttendanceGroupSystemRespVO; +import cn.iocoder.yudao.module.system.dal.dataobject.attendance.group.AttendanceGroupDO; +import cn.iocoder.yudao.module.system.dal.dataobject.attendance.groupsystem.AttendanceGroupSystemDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 考勤组 Mapper + * + * @author 艾楷 + */ +@Mapper +public interface AttendanceGroupSystemMapper extends BaseMapperX { + /** + * 根据考勤组id查询考勤组管理员 + * + * @param groupId + * @return + */ + List getGroupSystemVoByGroupId(@Param("groupId") Long groupId); + + /** + * 获取用户管理的考勤组 + * + * @param userId + * @return + */ + List getGroupSystemByUserId(@Param("userId") Long userId); +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/AttendanceServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/AttendanceServiceImpl.java index 82529c59..765cb6ed 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/AttendanceServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/AttendanceServiceImpl.java @@ -30,6 +30,7 @@ import cn.iocoder.yudao.module.system.handler.PunchHandler; import cn.iocoder.yudao.module.system.service.attendance.group.AttendanceGroupService; import cn.iocoder.yudao.module.system.service.attendance.groupshift.AttendanceGroupShiftService; import cn.iocoder.yudao.module.system.service.attendance.groupshiftitem.AttendanceGroupShiftItemService; +import cn.iocoder.yudao.module.system.service.attendance.groupsystem.AttendanceGroupSystemService; import cn.iocoder.yudao.module.system.service.attendance.groupuser.AttendanceGroupUserService; import cn.iocoder.yudao.module.system.service.attendance.punch.PunchService; import cn.iocoder.yudao.module.system.service.attendance.punch.dto.AttendanceOnTheDayDTO; @@ -90,6 +91,8 @@ public class AttendanceServiceImpl implements AttendanceService { @Resource private AttendanceGroupMapper attendanceGroupMapper; @Resource + private AttendanceGroupSystemService attendanceGroupSystemService; + @Resource private AttendanceGroupUserService attendanceGroupUserService; @Resource private PostMapper postMapper; @@ -865,8 +868,7 @@ public class AttendanceServiceImpl implements AttendanceService { public List getTheAttendanceGroupToWhichTheCurrentlyLoggedInUserBelongsAndWhetherTheyHaveAdministratorRights(Boolean allFlag) { Long userId = getLoginUserId(); List attendanceGroupSystemVOS = new ArrayList<>(); - List attendanceGroupDOS = attendanceGroupMapper.selectList(new LambdaQueryWrapper() - .eq(!allFlag, AttendanceGroupDO::getUserId, userId)); + List attendanceGroupDOS = attendanceGroupSystemService.getGroupSystemByUserId(userId); if (CollectionUtil.isEmpty(attendanceGroupDOS)) { return attendanceGroupSystemVOS; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/group/AttendanceGroupServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/group/AttendanceGroupServiceImpl.java index d57f7477..554f97d1 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/group/AttendanceGroupServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/group/AttendanceGroupServiceImpl.java @@ -1,42 +1,26 @@ package cn.iocoder.yudao.module.system.service.attendance.group; -import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.core.date.LocalDateTimeUtil; -import cn.hutool.core.map.MapUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.iocoder.yudao.framework.common.Constants; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.date.DateUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils; import cn.iocoder.yudao.module.system.controller.admin.group.vo.AttendanceGroupPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.group.vo.AttendanceGroupSaveReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.assets.AssetsDO; import cn.iocoder.yudao.module.system.dal.dataobject.attendance.group.AttendanceGroupDO; -import cn.iocoder.yudao.module.system.dal.dataobject.attendance.groupshiftitem.AttendanceGroupShiftItemDO; import cn.iocoder.yudao.module.system.dal.dataobject.attendance.groupuser.AttendanceGroupUserDO; -import cn.iocoder.yudao.module.system.dal.dataobject.attendance.punchrecord.AttendancePunchRecordDO; import cn.iocoder.yudao.module.system.dal.mysql.attendance.group.AttendanceGroupMapper; import cn.iocoder.yudao.module.system.dal.mysql.attendance.groupuser.AttendanceGroupUserMapper; -import cn.iocoder.yudao.module.system.service.attendance.AttendanceService; import cn.iocoder.yudao.module.system.service.attendance.fixed.AttendanceFixedService; -import cn.iocoder.yudao.module.system.service.attendance.groupshiftitem.AttendanceGroupShiftItemService; -import cn.iocoder.yudao.module.system.service.attendance.punch.dto.AttendanceOnTheDayDTO; -import cn.iocoder.yudao.module.system.service.attendance.punchrecord.AttendancePunchRecordService; +import cn.iocoder.yudao.module.system.service.attendance.groupsystem.AttendanceGroupSystemService; import cn.iocoder.yudao.module.system.service.attendance.scheduling.AttendanceSchedulingService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import org.springframework.context.annotation.Lazy; -import org.springframework.data.redis.core.StringRedisTemplate; +import com.baomidou.mybatisplus.core.metadata.IPage; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.temporal.ChronoUnit; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.GROUP_NOT_EXISTS; @@ -54,27 +38,24 @@ public class AttendanceGroupServiceImpl implements AttendanceGroupService { @Resource private AttendanceGroupMapper groupMapper; @Resource - private AttendancePunchRecordService attendancePunchRecordService; - @Resource private AttendanceGroupMapper attendanceGroupMapper; @Resource private AttendanceGroupUserMapper attendanceGroupUserMapper; @Resource - private AttendanceGroupShiftItemService attendanceGroupShiftItemService; - @Resource - @Lazy // 避免依赖循环 - private AttendanceService attendanceService; - @Resource private AttendanceFixedService attendanceFixedService; @Resource private AttendanceSchedulingService attendanceSchedulingService; + @Resource + private AttendanceGroupSystemService attendanceGroupSystemService; @Override public Long createGroup(AttendanceGroupSaveReqVO createReqVO) { - // 插入 AttendanceGroupDO group = BeanUtils.toBean(createReqVO, AttendanceGroupDO.class); groupMapper.insert(group); + //把考勤组用户ids拿出来 + // 插入 + attendanceGroupSystemService.batchCreateOrUpdate(createReqVO.getUserIds(), group.getId()); // 返回 return group.getId(); } @@ -86,6 +67,8 @@ public class AttendanceGroupServiceImpl implements AttendanceGroupService { // 更新 AttendanceGroupDO updateObj = BeanUtils.toBean(updateReqVO, AttendanceGroupDO.class); groupMapper.updateById(updateObj); + // 插入 + attendanceGroupSystemService.batchCreateOrUpdate(updateReqVO.getUserIds(), updateReqVO.getId()); } @Override @@ -99,6 +82,7 @@ public class AttendanceGroupServiceImpl implements AttendanceGroupService { } // 删除 groupMapper.deleteById(id); + attendanceGroupSystemService.delByGroupId(id); } private void validateGroupExists(Long id) { @@ -114,7 +98,8 @@ public class AttendanceGroupServiceImpl implements AttendanceGroupService { @Override public PageResult getGroupPage(AttendanceGroupPageReqVO pageReqVO) { - return groupMapper.selectPage(pageReqVO); + IPage page = groupMapper.selectPageList(pageReqVO, MyBatisUtils.buildPage(pageReqVO)); + return new PageResult<>(page.getRecords(), page.getTotal()); } @Override @@ -141,4 +126,4 @@ public class AttendanceGroupServiceImpl implements AttendanceGroupService { return ids; } -} \ No newline at end of file +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/groupsystem/AttendanceGroupSystemService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/groupsystem/AttendanceGroupSystemService.java new file mode 100644 index 00000000..c121543a --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/groupsystem/AttendanceGroupSystemService.java @@ -0,0 +1,53 @@ +package cn.iocoder.yudao.module.system.service.attendance.groupsystem; + +import cn.iocoder.yudao.module.system.controller.admin.groupsystem.vo.AttendanceGroupSystemRespVO; +import cn.iocoder.yudao.module.system.dal.dataobject.attendance.group.AttendanceGroupDO; +import cn.iocoder.yudao.module.system.dal.dataobject.attendance.groupsystem.AttendanceGroupSystemDO; + +import java.util.List; + +/** + * 考勤组管理员表 Service 接口 + * + * @author 艾楷 + */ +public interface AttendanceGroupSystemService { + /** + * 批量新增/修改考勤组管理员 + * + * @param userIds + * @param groupId + */ + void batchCreateOrUpdate(String userIds, Long groupId); + + /** + * 根据考勤组id获取考勤组管理员 + * + * @param groupId + * @return + */ + List getGroupSystemByGroupId(Long groupId); + + /** + * 根据考勤组id删除 + * + * @param groupId + */ + void delByGroupId(Long groupId); + + /** + * 根据考勤组id获取考勤管理员 + * + * @param groupId + * @return + */ + List getGroupSystemVoByGroupId(Long groupId); + + /** + * 获取用户管理的考勤组 + * + * @param userId + * @return + */ + List getGroupSystemByUserId(Long userId); +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/groupsystem/AttendanceGroupSystemServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/groupsystem/AttendanceGroupSystemServiceImpl.java new file mode 100644 index 00000000..b964c14f --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/attendance/groupsystem/AttendanceGroupSystemServiceImpl.java @@ -0,0 +1,111 @@ +package cn.iocoder.yudao.module.system.service.attendance.groupsystem; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; +import cn.iocoder.yudao.module.system.controller.admin.groupsystem.vo.AttendanceGroupSystemRespVO; +import cn.iocoder.yudao.module.system.dal.dataobject.attendance.group.AttendanceGroupDO; +import cn.iocoder.yudao.module.system.dal.dataobject.attendance.groupsystem.AttendanceGroupSystemDO; +import cn.iocoder.yudao.module.system.dal.mysql.attendance.groupsystem.AttendanceGroupSystemMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 考勤组管理员 实现类 + */ +@Service +@Slf4j +public class AttendanceGroupSystemServiceImpl implements AttendanceGroupSystemService { + + @Resource + private AttendanceGroupSystemMapper attendanceGroupSystemMapper; + + @Override + public void batchCreateOrUpdate(String userIds, Long groupId) { + if (StrUtil.isEmpty(userIds)) { + attendanceGroupSystemMapper.delete(new LambdaQueryWrapper() + .eq(AttendanceGroupSystemDO::getAttendanceGroupId, groupId)); + return; + } + + List ids = Arrays.stream(userIds.split(",")).map(Long::valueOf).collect(Collectors.toList()); + List list = this.getGroupSystemByGroupId(groupId); + if (list.isEmpty()) { + this.saveList(ids, groupId); + return; + } + List oldIds = list.stream().map(AttendanceGroupSystemDO::getUserId).collect(Collectors.toList()); + List newIds = new ArrayList<>(CollectionUtil.subtract(ids, oldIds)); + List delIds = new ArrayList<>(CollectionUtil.subtract(oldIds, ids)); + + if (!newIds.isEmpty()) { + this.saveList(newIds, groupId); + } + if (!delIds.isEmpty()) { + attendanceGroupSystemMapper.delete(new LambdaQueryWrapper() + .eq(AttendanceGroupSystemDO::getAttendanceGroupId, groupId) + .in(AttendanceGroupSystemDO::getUserId, delIds)); + } + } + + private void saveList(List userIds, Long groupId) { + List saveList = new ArrayList<>(); + for (Long id : userIds) { + AttendanceGroupSystemDO attendanceGroupSystemDO = new AttendanceGroupSystemDO(); + attendanceGroupSystemDO.setAttendanceGroupId(groupId); + attendanceGroupSystemDO.setUserId(id); + saveList.add(attendanceGroupSystemDO); + } + attendanceGroupSystemMapper.insertBatch(saveList); + } + + @Override + public List getGroupSystemByGroupId(Long groupId) { + return attendanceGroupSystemMapper.selectList(new LambdaQueryWrapper() + .eq(AttendanceGroupSystemDO::getAttendanceGroupId, groupId)); + } + + @Override + public void delByGroupId(Long groupId) { + attendanceGroupSystemMapper.delete(new LambdaQueryWrapper() + .eq(AttendanceGroupSystemDO::getAttendanceGroupId, groupId)); + } + + @Override + public List getGroupSystemVoByGroupId(Long groupId) { + return attendanceGroupSystemMapper.getGroupSystemVoByGroupId(groupId); + } + + @Override + public List getGroupSystemByUserId(Long userId) { + return attendanceGroupSystemMapper.getGroupSystemByUserId(userId); + } +} + + + + + + + + + + + + + + + + + + + + + + diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/group/AttendanceGroupMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/group/AttendanceGroupMapper.xml index 5bd22ea1..e457fe37 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/group/AttendanceGroupMapper.xml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/group/AttendanceGroupMapper.xml @@ -18,4 +18,48 @@ b.deleted = 0 and b.user_id = #{userId} - \ No newline at end of file + + diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/groupsystem/AttendanceGroupSystemMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/groupsystem/AttendanceGroupSystemMapper.xml new file mode 100644 index 00000000..94fb087c --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/groupsystem/AttendanceGroupSystemMapper.xml @@ -0,0 +1,37 @@ + + + + + + + + From abef64022e8025e785ffb2054c21d7227b50a556 Mon Sep 17 00:00:00 2001 From: aikai Date: Thu, 15 Aug 2024 17:35:39 +0800 Subject: [PATCH 3/3] =?UTF-8?q?`admin=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF`?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=BF=94=E5=9B=9E`=E6=89=8B=E6=9C=BA?= =?UTF-8?q?=E5=8F=B7`=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/admin/auth/vo/AuthPermissionInfoRespVO.java | 3 +++ .../iocoder/yudao/module/system/convert/auth/AuthConvert.java | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthPermissionInfoRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthPermissionInfoRespVO.java index 54aaa4dc..ad466154 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthPermissionInfoRespVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthPermissionInfoRespVO.java @@ -44,6 +44,9 @@ public class AuthPermissionInfoRespVO { @Schema(description = "用户头像", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/xx.jpg") private String avatar; + @Schema(description = "手机号") + private String mobile; + } @Schema(description = "管理后台 - 登录用户的菜单信息 Response VO") diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java index 8343547d..a1a73a40 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java @@ -29,7 +29,7 @@ public interface AuthConvert { default AuthPermissionInfoRespVO convert(AdminUserDO user, List roleList, List menuList) { return AuthPermissionInfoRespVO.builder() - .user(AuthPermissionInfoRespVO.UserVO.builder().id(user.getId()).nickname(user.getNickname()).avatar(user.getAvatar()).build()) + .user(AuthPermissionInfoRespVO.UserVO.builder().id(user.getId()).mobile(user.getMobile()).nickname(user.getNickname()).avatar(user.getAvatar()).build()) .roles(convertSet(roleList, RoleDO::getCode)) // 权限标识信息 .permissions(convertSet(menuList, MenuDO::getPermission))