From 746db0efbbafbe522297c4f2de96ae8023ad39bc Mon Sep 17 00:00:00 2001 From: aikai Date: Mon, 15 Apr 2024 09:35:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A5=E5=BF=97=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../framework/common/pojo/CommonResult.java | 6 + .../framework/common/util/date/DateUtils.java | 63 +++- .../rule/dept/DeptDataPermissionRule.java | 4 +- .../worklog/LogStatisticsController.java | 49 +++ .../worklog/WorkLogStatisticsController.java | 43 --- .../LogStatisticsDetailsListDTO.java | 17 ++ .../admin/worklog/vo/form/LogFormRuleVO.java | 14 + .../LogStatisticsDetailsListVO.java | 23 ++ .../vo/statistics/LogStatisticsDetailsVO.java | 41 +++ .../vo/statistics/LogStatisticsModelVO.java | 25 ++ .../vo/statistics/LogStatisticsPageReqVO.java | 47 +++ .../vo/statistics/LogStatisticsRespVO.java | 56 ++++ .../vo/statistics/LogStatisticsSaveReqVO.java | 39 +++ .../statistics/WorkLogStatisticsModelVO.java | 14 - .../LogStatisticsRecordPageReqVO.java | 35 +++ .../LogStatisticsRecordRespVO.java | 40 +++ .../LogStatisticsRecordSaveReqVO.java | 28 ++ .../app/comment/vo/CommentPageListVO.java | 5 + .../dal/dataobject/worklog/LogRuleDO.java | 14 +- .../dataobject/worklog/LogStatisticsDO.java | 63 ++++ .../worklog/LogStatisticsRecordDO.java | 47 +++ .../dal/mysql/worklog/LogFormMapper.java | 3 - .../dal/mysql/worklog/LogInstanceMapper.java | 10 +- .../mysql/worklog/LogStatisticsMapper.java | 63 ++++ .../worklog/LogStatisticsRecordMapper.java | 30 ++ .../dal/mysql/worklog/LogUseMapper.java | 2 +- .../config/DataPermissionConfiguration.java | 10 +- .../system/job/worklog/LogStatisticsJob.java | 119 ++++++++ .../service/worklog/LogFormService.java | 8 + .../service/worklog/LogFormServiceImpl.java | 33 +- .../service/worklog/LogInstanceService.java | 30 +- .../worklog/LogInstanceServiceImpl.java | 22 ++ .../service/worklog/LogRuleService.java | 8 + .../service/worklog/LogRuleServiceImpl.java | 7 + .../worklog/LogStatisticsRecordService.java | 64 ++++ .../LogStatisticsRecordServiceImpl.java | 67 +++++ .../service/worklog/LogStatisticsService.java | 84 ++++++ .../worklog/LogStatisticsServiceImpl.java | 283 ++++++++++++++++++ .../worklog/WorkLogStatisticsService.java | 17 -- .../worklog/WorkLogStatisticsServiceImpl.java | 62 ---- .../mapper/comment/WorkLogCommentMapper.xml | 1 + .../mapper/user/LogInstanceMapper.xml | 20 ++ .../mapper/worklog/LogStatisticsMapper.xml | 83 +++++ .../worklog/LogStatisticsRecordMapper.xml | 12 + .../mapper/worklog/WorkLogUseMapper.xml | 5 + 45 files changed, 1561 insertions(+), 155 deletions(-) create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogStatisticsController.java delete mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/WorkLogStatisticsController.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/dto/statistics/LogStatisticsDetailsListDTO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/form/LogFormRuleVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statistics/LogStatisticsDetailsListVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statistics/LogStatisticsDetailsVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statistics/LogStatisticsModelVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statistics/LogStatisticsPageReqVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statistics/LogStatisticsRespVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statistics/LogStatisticsSaveReqVO.java delete mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statistics/WorkLogStatisticsModelVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statisticsrecord/LogStatisticsRecordPageReqVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statisticsrecord/LogStatisticsRecordRespVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statisticsrecord/LogStatisticsRecordSaveReqVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/worklog/LogStatisticsDO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/worklog/LogStatisticsRecordDO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogStatisticsMapper.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogStatisticsRecordMapper.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/worklog/LogStatisticsJob.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogStatisticsRecordService.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogStatisticsRecordServiceImpl.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogStatisticsService.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogStatisticsServiceImpl.java delete mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/WorkLogStatisticsService.java delete mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/WorkLogStatisticsServiceImpl.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/worklog/LogStatisticsMapper.xml create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/worklog/LogStatisticsRecordMapper.xml diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/CommonResult.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/CommonResult.java index e29292dd..6ef916e7 100644 --- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/CommonResult.java +++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/CommonResult.java @@ -35,6 +35,11 @@ public class CommonResult implements Serializable { */ private String msg; + /** + * 时间戳 + */ + private long timestamp = System.currentTimeMillis(); + /** * 将传入的 result 对象,转换成另外一个泛型结果的对象 * @@ -65,6 +70,7 @@ public class CommonResult implements Serializable { result.code = GlobalErrorCodeConstants.SUCCESS.getCode(); result.data = data; result.msg = ""; + return result; } diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/DateUtils.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/DateUtils.java index 23f9edaa..56fbba2f 100644 --- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/DateUtils.java +++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/DateUtils.java @@ -1,16 +1,17 @@ package cn.iocoder.yudao.framework.common.util.date; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.LocalDateTimeUtil; import java.text.SimpleDateFormat; import java.time.*; +import java.util.ArrayList; import java.util.Calendar; import java.util.Date; +import java.util.List; /** * 时间工具类 - * - */ public class DateUtils { @@ -34,6 +35,7 @@ public class DateUtils { /** * 根据传入的时间格式,将Date对象,转换成对应的时间格式 + * * @param date * @param format * @return @@ -41,7 +43,7 @@ public class DateUtils { public static String dateFormat(Date date, String format) { SimpleDateFormat formatter = new SimpleDateFormat(format); String formattedDate = formatter.format(date); - return formattedDate ; + return formattedDate; } /** @@ -131,6 +133,42 @@ public class DateUtils { return calendar.getTime(); } + /** + * 创建指定时间 + * + * @param timeStr 时间字符串,格式为 HH:mm + * @return 指定时间 + */ + public static Date buildHHmmTime(String timeStr) { + String[] time = timeStr.split(":"); + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(time[0])); + calendar.set(Calendar.MINUTE, Integer.parseInt(time[1])); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + Date endTime = calendar.getTime(); + return calendar.getTime(); + } + + public static Date buildWeekHHmmTime(String timeStr) { + String[] time = timeStr.split(","); + int week = Integer.parseInt(time[0]); + boolean isItTheNextDay = false; + if (week == 7) { + isItTheNextDay = true; + } + week = (week + 1) == 8 ? 7 : (week + 1); + String[] hhmm = time[1].split(":"); + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.DAY_OF_WEEK, week); + calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hhmm[0])); + calendar.set(Calendar.MINUTE, Integer.parseInt(hhmm[1])); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + return isItTheNextDay ? DateUtil.offsetDay(calendar.getTime(), 1) : calendar.getTime(); + } + + public static Date max(Date a, Date b) { if (a == null) { return b; @@ -192,4 +230,23 @@ public class DateUtils { return LocalDateTimeUtil.isSameDay(date, LocalDateTime.now()); } + /** + * 获取两个时间区间 - 获取两个时间区间的所有日期 + * + * @param beginTime + * @param endTime + * @return + */ + public static List betweenDayStrList(String beginTime, String endTime) { + List list = new ArrayList<>(); + Date begin = DateUtil.parse(beginTime, "yyyy-MM-dd").toJdkDate(); + Date end = DateUtil.parse(endTime, "yyyy-MM-dd").toJdkDate(); + int num = (int) DateUtil.betweenDay(begin, end, true); + for (int i = 0; i <= num; i++) { + Date time = DateUtil.offsetDay(begin, i).toJdkDate(); + list.add(DateUtil.format(time, "yyyy-MM-dd")); + } + return list; + } + } diff --git a/yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/rule/dept/DeptDataPermissionRule.java b/yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/rule/dept/DeptDataPermissionRule.java index d40d7f5e..f33ae98c 100644 --- a/yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/rule/dept/DeptDataPermissionRule.java +++ b/yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/rule/dept/DeptDataPermissionRule.java @@ -58,7 +58,9 @@ public class DeptDataPermissionRule implements DataPermissionRule { // TODO: 2024/4/10 注意 - 如果需要降级低权的话 要把需要的表名称加在这里 并且在方法上开启数据权限 并且添加 DataPermissionConfiguration 对象 private static final List LOW_POWER_TABLES = Arrays.asList( - "bpm_process_instance_ext" + "bpm_process_instance_ext", + "work_log_use", + "work_log_statistics" ); /** 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 new file mode 100644 index 00000000..4200f0af --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogStatisticsController.java @@ -0,0 +1,49 @@ +package cn.iocoder.yudao.module.system.controller.admin.worklog; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.system.controller.admin.worklog.dto.statistics.LogStatisticsDetailsListDTO; +import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics.LogStatisticsDetailsListVO; +import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics.LogStatisticsModelVO; +import cn.iocoder.yudao.module.system.service.worklog.LogStatisticsService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 工作日志统计") +@RestController +@RequestMapping("/system/worklog/statistics") +@Validated +public class LogStatisticsController { + + @Resource + private LogStatisticsService logStatisticsService; + + @GetMapping("/myManageModel") + @Operation(summary = "获取我管理的模版") + public CommonResult> myManageModel() { + return success(logStatisticsService.myManageModel()); + } + + @GetMapping("/getStatistics") + @Operation(summary = "获取我管理的模版") + public CommonResult getStatistics(@ModelAttribute LogStatisticsDetailsListDTO dto) { + return success(logStatisticsService.getStatistics(dto)); + } + +// @GetMapping("/getNeedWrite") +// @Operation(summary = "获取需要填写的") +// public CommonResult> getNeedWrite() { +// List list = logStatisticsService.getNeedWrite(); +// return success(list); +// } + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/WorkLogStatisticsController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/WorkLogStatisticsController.java deleted file mode 100644 index 8ccdf9ec..00000000 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/WorkLogStatisticsController.java +++ /dev/null @@ -1,43 +0,0 @@ -package cn.iocoder.yudao.module.system.controller.admin.worklog; - -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.module.system.controller.admin.worklog.dto.statistics.WorkLogStatisticsModelDTO; -import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.form.LogFormUpdateReqVO; -import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics.WorkLogStatisticsModelVO; -import cn.iocoder.yudao.module.system.service.worklog.WorkLogStatisticsService; -import io.swagger.v3.oas.annotations.Operation; -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.validation.Valid; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - -@Tag(name = "管理后台 - 工作日志统计") -@RestController -@RequestMapping("/system/worklog/statistics") -@Validated -public class WorkLogStatisticsController { - - @Resource - private WorkLogStatisticsService workLogStatisticsService; - - @GetMapping("/myManageModel") - @Operation(summary = "获取我管理的模版") - public CommonResult> myManageModel(@ModelAttribute WorkLogStatisticsModelDTO dto) { - return success(workLogStatisticsService.myManageModel(dto)); - } - -// @PutMapping("/update") -// @Operation(summary = "更新动态表单") -// @PreAuthorize("@ss.hasPermission('worklog:form:update')") -// public CommonResult updateForm(@Valid @RequestBody LogFormUpdateReqVO updateReqVO) { -// formService.updateForm(updateReqVO); -// return success(true); -// } - -} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/dto/statistics/LogStatisticsDetailsListDTO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/dto/statistics/LogStatisticsDetailsListDTO.java new file mode 100644 index 00000000..677b2259 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/dto/statistics/LogStatisticsDetailsListDTO.java @@ -0,0 +1,17 @@ +package cn.iocoder.yudao.module.system.controller.admin.worklog.dto.statistics; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class LogStatisticsDetailsListDTO { + + @Schema(description = "模板编号") + private Long formId; + + @Schema(description = "开始时间 格式yyyy-MM-dd 如果是日报的话 开始时间结束时间都传同一天即可") + private String beginTime; + + @Schema(description = "结束时间 格式yyyy-MM-dd 如果是日报的话 开始时间结束时间都传同一天即可") + private String endTime; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/form/LogFormRuleVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/form/LogFormRuleVO.java new file mode 100644 index 00000000..e1a84e11 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/form/LogFormRuleVO.java @@ -0,0 +1,14 @@ +package cn.iocoder.yudao.module.system.controller.admin.worklog.vo.form; + +import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogFormDO; +import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogRuleDO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class LogFormRuleVO { + @Schema(description = "模版对象", example = "模版对象") + private LogFormDO formDO; + @Schema(description = "规则对象", example = "规则对象") + private LogRuleDO ruleDO; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statistics/LogStatisticsDetailsListVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statistics/LogStatisticsDetailsListVO.java new file mode 100644 index 00000000..83976b20 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statistics/LogStatisticsDetailsListVO.java @@ -0,0 +1,23 @@ +package cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +/** + * 动态表单 Base VO,提供给添加、修改、详细的子 VO 使用 + * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 + */ +@Data +public class LogStatisticsDetailsListVO { + @Schema(description = "按时提交") + private List onTime; + + @Schema(description = "迟交") + private List late; + + @Schema(description = "未提交") + private List unSubmitted; +} + 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 new file mode 100644 index 00000000..6ee0bf26 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statistics/LogStatisticsDetailsVO.java @@ -0,0 +1,41 @@ +package cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.TIME_ZONE_DEFAULT; + +@Data +public class LogStatisticsDetailsVO { + @Schema(description = "用户id") + private Long userId; + + @Schema(description = "名称") + private String nickname; + + @Schema(description = "头像") + private String avatar; + + @Schema(description = "部门id") + private Long deptId; + + @Schema(description = "部门名称") + private String deptName; + + @Schema(description = "日志id", example = "30875") + private Long logInstanceExtId; + + @Schema(description = "提交状态 1按时提交 2迟交 3未提交", example = "2") + private Integer status; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT) + private Date createTime; +} + diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statistics/LogStatisticsModelVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statistics/LogStatisticsModelVO.java new file mode 100644 index 00000000..6249cef1 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statistics/LogStatisticsModelVO.java @@ -0,0 +1,25 @@ +package cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics; + +import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogFormDO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 动态表单 Base VO,提供给添加、修改、详细的子 VO 使用 + * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 + */ +@Data +public class LogStatisticsModelVO extends LogFormDO { + @Schema(description = "按时提交数量") + private Integer onTimeNum = 0; + + @Schema(description = "迟交数量") + private Integer lateNum = 0; + + @Schema(description = "未提交数量") + private Integer unSubmittedNum = 0; + + @Schema(description = "提交范围") + private String commitTimeRange; +} + diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statistics/LogStatisticsPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statistics/LogStatisticsPageReqVO.java new file mode 100644 index 00000000..5fe48e74 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statistics/LogStatisticsPageReqVO.java @@ -0,0 +1,47 @@ +package cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 工作日志统计分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class LogStatisticsPageReqVO extends PageParam { + + @Schema(description = "模板编号", example = "27285") + private Long formId; + + @Schema(description = "模板规则编号", example = "17370") + private Long ruleId; + + @Schema(description = "用户id", example = "23689") + private Long userId; + + @Schema(description = "部门编号", example = "21782") + private Long deptId; + + @Schema(description = "日志id", example = "30875") + private Long logInstanceExtId; + + @Schema(description = "日志类型 1日报 2周报", example = "1") + private Integer type; + + @Schema(description = "提交状态 1按时提交 2迟交 3未提交", example = "2") + private Integer status; + + @Schema(description = "提交日期 格式 yyyy-MM-dd") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private String[] time; + + @Schema(description = "创建时间") + @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/worklog/vo/statistics/LogStatisticsRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statistics/LogStatisticsRespVO.java new file mode 100644 index 00000000..e3971441 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statistics/LogStatisticsRespVO.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 工作日志统计 Response VO") +@Data +@ExcelIgnoreUnannotated +public class LogStatisticsRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "29400") + @ExcelProperty("编号") + private Long id; + + @Schema(description = "模板编号", example = "27285") + @ExcelProperty("模板编号") + private Long formId; + + @Schema(description = "模板规则编号", example = "17370") + @ExcelProperty("模板规则编号") + private Long ruleId; + + @Schema(description = "用户id", example = "23689") + @ExcelProperty("用户id") + private Long userId; + + @Schema(description = "部门编号", example = "21782") + @ExcelProperty("部门编号") + private Long deptId; + + @Schema(description = "日志id", example = "30875") + @ExcelProperty("日志id") + private Long logInstanceExtId; + + @Schema(description = "日志类型 1日报 2周报", example = "1") + @ExcelProperty("日志类型 1日报 2周报") + private Integer type; + + @Schema(description = "提交状态 1按时提交 2迟交 3未提交", example = "2") + @ExcelProperty("提交状态 1按时提交 2迟交 3未提交") + private Integer status; + + @Schema(description = "提交日期 格式 yyyy-MM-dd") + @ExcelProperty("提交日期 格式 yyyy-MM-dd") + private String time; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @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/worklog/vo/statistics/LogStatisticsSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statistics/LogStatisticsSaveReqVO.java new file mode 100644 index 00000000..9d95bebe --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statistics/LogStatisticsSaveReqVO.java @@ -0,0 +1,39 @@ +package cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; +import java.util.*; + +@Schema(description = "管理后台 - 工作日志统计新增/修改 Request VO") +@Data +public class LogStatisticsSaveReqVO { + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "21181") + private Long id; + + @Schema(description = "模板编号", example = "27285") + private Long formId; + + @Schema(description = "模板规则编号", example = "17370") + private Long ruleId; + + @Schema(description = "用户id", example = "23689") + private Long userId; + + @Schema(description = "部门编号", example = "21782") + private Long deptId; + + @Schema(description = "日志id", example = "30875") + private Long logInstanceExtId; + + @Schema(description = "日志类型 1日报 2周报", example = "1") + private Integer type; + + @Schema(description = "提交状态 1按时提交 2迟交 3未提交", example = "2") + private Integer status; + + @Schema(description = "提交日期 格式 yyyy-MM-dd") + private String time; + +} \ 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/vo/statistics/WorkLogStatisticsModelVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statistics/WorkLogStatisticsModelVO.java deleted file mode 100644 index 19ac81a0..00000000 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statistics/WorkLogStatisticsModelVO.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics; - -import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogFormDO; -import lombok.Data; - -/** - * 动态表单 Base VO,提供给添加、修改、详细的子 VO 使用 - * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 - */ -@Data -public class WorkLogStatisticsModelVO extends LogFormDO { - - -} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statisticsrecord/LogStatisticsRecordPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statisticsrecord/LogStatisticsRecordPageReqVO.java new file mode 100644 index 00000000..dc583e80 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statisticsrecord/LogStatisticsRecordPageReqVO.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statisticsrecord; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 工作日志统计记录分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class LogStatisticsRecordPageReqVO extends PageParam { + + @Schema(description = "模板编号", example = "4029") + private Long formId; + + @Schema(description = "模板规则编号", example = "19133") + private Long ruleId; + + @Schema(description = "是否统计过 0否 1是") + private Integer statisticsFlag; + + @Schema(description = "统计日期 格式 yyyy-MM-dd") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private String[] time; + + @Schema(description = "创建时间") + @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/worklog/vo/statisticsrecord/LogStatisticsRecordRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statisticsrecord/LogStatisticsRecordRespVO.java new file mode 100644 index 00000000..7a4b864c --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statisticsrecord/LogStatisticsRecordRespVO.java @@ -0,0 +1,40 @@ +package cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statisticsrecord; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 工作日志统计记录 Response VO") +@Data +@ExcelIgnoreUnannotated +public class LogStatisticsRecordRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "18988") + @ExcelProperty("编号") + private Long id; + + @Schema(description = "模板编号", example = "4029") + @ExcelProperty("模板编号") + private Long formId; + + @Schema(description = "模板规则编号", example = "19133") + @ExcelProperty("模板规则编号") + private Long ruleId; + + @Schema(description = "是否统计过 0否 1是") + @ExcelProperty("是否统计过 0否 1是") + private Integer statisticsFlag; + + @Schema(description = "统计日期 格式 yyyy-MM-dd") + @ExcelProperty("统计日期 格式 yyyy-MM-dd") + private String time; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @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/worklog/vo/statisticsrecord/LogStatisticsRecordSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statisticsrecord/LogStatisticsRecordSaveReqVO.java new file mode 100644 index 00000000..ac56e169 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/statisticsrecord/LogStatisticsRecordSaveReqVO.java @@ -0,0 +1,28 @@ +package cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statisticsrecord; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; +import java.util.*; + +@Schema(description = "管理后台 - 工作日志统计记录新增/修改 Request VO") +@Data +public class LogStatisticsRecordSaveReqVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "18988") + private Long id; + + @Schema(description = "模板编号", example = "4029") + private Long formId; + + @Schema(description = "模板规则编号", example = "19133") + private Long ruleId; + + @Schema(description = "是否统计过 0否 1是") + private Integer statisticsFlag; + + @Schema(description = "统计日期 格式 yyyy-MM-dd") + private String time; + +} \ 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/app/comment/vo/CommentPageListVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/app/comment/vo/CommentPageListVO.java index 70812e1c..891b731d 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/app/comment/vo/CommentPageListVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/app/comment/vo/CommentPageListVO.java @@ -50,4 +50,9 @@ public class CommentPageListVO { @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "创建日期") private String createTime; + + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Schema(description = "发布日志时间") + private String workLogTime; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/worklog/LogRuleDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/worklog/LogRuleDO.java index e9633a88..12a166c5 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/worklog/LogRuleDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/worklog/LogRuleDO.java @@ -25,19 +25,23 @@ public class LogRuleDO extends BaseDO { @TableId private Long id; /** - * 日志类型 + * 模版id + */ + private Long formId; + /** + * 日志类型 1日报 2周报 3月报 4年报 */ private Integer type; /** - * 日报情况,需提交的日期 + * 日报情况,需提交的日期 1,2,3,4,5 周一 到 周五 */ private String weekDays; /** - * 提交开始时间段 + * 提交开始时间段 如果是日报的话 格式是 HH:mm 如果是周报的话 格式是 1,HH:mm 其中1代表的是周几 */ private String startTime; /** - * 提交结束时间段 + * 提交结束时间段 如果是日报的话 格式是 HH:mm 如果是周报的话 格式是 1,HH:mm 其中1代表的是周几 */ private String endTime; /** @@ -45,7 +49,7 @@ public class LogRuleDO extends BaseDO { */ private Integer remindTime; /** - * 统计时间段 + * 统计时间段 如果是日报的话 格式是 HH:mm 如果是周报的话 格式是 1,HH:mm 其中1代表的是周几 */ private String statisticalTime; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/worklog/LogStatisticsDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/worklog/LogStatisticsDO.java new file mode 100644 index 00000000..cf477fd6 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/worklog/LogStatisticsDO.java @@ -0,0 +1,63 @@ +package cn.iocoder.yudao.module.system.dal.dataobject.worklog; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 工作日志统计 DO + * + * @author 艾楷 + */ +@TableName("work_log_statistics") +@KeySequence("work_log_statistics_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class LogStatisticsDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + /** + * 模板编号 + */ + private Long formId; + /** + * 模板规则编号 + */ + private Long ruleId; + /** + * 用户id + */ + private Long userId; + /** + * 部门编号 + */ + private Long deptId; + /** + * 日志id + */ + private Long logInstanceExtId; + /** + * 日志类型 1日报 2周报 + */ + private Integer type; + /** + * 提交状态 1按时提交 2迟交 3未提交 + */ + private Integer status; + /** + * 提交日期 格式 yyyy-MM-dd + */ + private String time; + +} \ 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/worklog/LogStatisticsRecordDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/worklog/LogStatisticsRecordDO.java new file mode 100644 index 00000000..7bdd78e5 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/worklog/LogStatisticsRecordDO.java @@ -0,0 +1,47 @@ +package cn.iocoder.yudao.module.system.dal.dataobject.worklog; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 工作日志统计记录 DO + * + * @author 艾楷 + */ +@TableName("work_log_statistics_record") +@KeySequence("work_log_statistics_record_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class LogStatisticsRecordDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + /** + * 模板编号 + */ + private Long formId; + /** + * 模板规则编号 + */ + private Long ruleId; + /** + * 是否统计过 0否 1是 + */ + private Integer statisticsFlag; + /** + * 统计日期 格式 yyyy-MM-dd + */ + private String time; + +} \ 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/mysql/worklog/LogFormMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogFormMapper.java index cb3a6db6..3ae5174c 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogFormMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogFormMapper.java @@ -4,12 +4,9 @@ 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.QueryWrapperX; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.form.LogFormPageReqVO; -import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics.WorkLogStatisticsModelVO; import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogFormDO; import org.apache.ibatis.annotations.Mapper; -import java.util.List; - @Mapper public interface LogFormMapper extends BaseMapperX { diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogInstanceMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogInstanceMapper.java index 487a8cdd..c28a7d7a 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogInstanceMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogInstanceMapper.java @@ -5,10 +5,11 @@ 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.vo.loginstance.LogInstancePageReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogInstanceDO; -import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogReadDo; import cn.iocoder.yudao.module.system.service.worklog.dto.LogReadUserRespDTO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import java.util.Date; import java.util.List; /** @@ -39,4 +40,11 @@ public interface LogInstanceMapper extends BaseMapperX { } List selectRaedUser(Long deptId); + + /** + * 获取我管理的日志列表 + * + * @return + */ + List myManageLogInstanceByTimeRange(@Param("fromId") Long fromId, @Param("beginTime") Date beginTime, @Param("endTime") Date endTime); } \ 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/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 new file mode 100644 index 00000000..0d3ed227 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogStatisticsMapper.java @@ -0,0 +1,63 @@ +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.vo.statistics.LogStatisticsDetailsVO; +import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics.LogStatisticsPageReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogInstanceDO; +import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogStatisticsDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 工作日志统计 Mapper + * + * @author 艾楷 + */ +@Mapper +public interface LogStatisticsMapper extends BaseMapperX { + + default PageResult selectPage(LogStatisticsPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(LogStatisticsDO::getFormId, reqVO.getFormId()) + .eqIfPresent(LogStatisticsDO::getRuleId, reqVO.getRuleId()) + .eqIfPresent(LogStatisticsDO::getUserId, reqVO.getUserId()) + .eqIfPresent(LogStatisticsDO::getDeptId, reqVO.getDeptId()) + .eqIfPresent(LogStatisticsDO::getLogInstanceExtId, reqVO.getLogInstanceExtId()) + .eqIfPresent(LogStatisticsDO::getType, reqVO.getType()) + .eqIfPresent(LogStatisticsDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(LogStatisticsDO::getTime, reqVO.getTime()) + .betweenIfPresent(LogStatisticsDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(LogStatisticsDO::getId)); + } + + /** + * 获取为提交用户列表 + * + * @param formId + * @param thisTime + * @return + */ + List getUnSubmittedUser(@Param("formId") Long formId, @Param("thisTime") String thisTime); + + /** + * 获取统计 + * @param dateList + * @param formId + * @return + */ + List getStatistics(@Param("dateList") List dateList, @Param("formId") Long formId); + + /** + * 获取当天/本周的统计 + * + * @param formId + * @param dateList + * @return + */ + List getCurrentStatistics(@Param("formId") Long formId, @Param("dateList") List dateList); +} \ 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/mysql/worklog/LogStatisticsRecordMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogStatisticsRecordMapper.java new file mode 100644 index 00000000..a2d31573 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogStatisticsRecordMapper.java @@ -0,0 +1,30 @@ +package cn.iocoder.yudao.module.system.dal.mysql.worklog; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statisticsrecord.LogStatisticsRecordPageReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogStatisticsRecordDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 工作日志统计记录 Mapper + * + * @author 艾楷 + */ +@Mapper +public interface LogStatisticsRecordMapper extends BaseMapperX { + + default PageResult selectPage(LogStatisticsRecordPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(LogStatisticsRecordDO::getFormId, reqVO.getFormId()) + .eqIfPresent(LogStatisticsRecordDO::getRuleId, reqVO.getRuleId()) + .eqIfPresent(LogStatisticsRecordDO::getStatisticsFlag, reqVO.getStatisticsFlag()) + .betweenIfPresent(LogStatisticsRecordDO::getTime, reqVO.getTime()) + .betweenIfPresent(LogStatisticsRecordDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(LogStatisticsRecordDO::getId)); + } + +} \ 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/mysql/worklog/LogUseMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogUseMapper.java index b1b33be3..0ed21e48 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogUseMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogUseMapper.java @@ -18,5 +18,5 @@ public interface LogUseMapper extends BaseMapperX { * * @return */ - List getFormIdsByDataPermission(); + List getFormIdsByDataPermission(Long userId); } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/config/DataPermissionConfiguration.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/config/DataPermissionConfiguration.java index 296a087f..71931418 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/config/DataPermissionConfiguration.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/config/DataPermissionConfiguration.java @@ -1,15 +1,15 @@ package cn.iocoder.yudao.module.system.framework.datapermission.config; +import cn.iocoder.yudao.framework.datapermission.core.rule.dept.DeptDataPermissionRuleCustomizer; import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; -import cn.iocoder.yudao.framework.datapermission.core.rule.dept.DeptDataPermissionRuleCustomizer; +import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogStatisticsDO; +import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogUseDO; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * system 模块的数据权限 Configuration - * - */ @Configuration(proxyBeanMethods = false) public class DataPermissionConfiguration { @@ -20,8 +20,12 @@ public class DataPermissionConfiguration { // dept rule.addDeptColumn(AdminUserDO.class); rule.addDeptColumn(DeptDO.class, "id"); + rule.addDeptColumn(LogUseDO.class, "use_user_dept"); + rule.addDeptColumn(LogStatisticsDO.class, "dept_id"); // user rule.addUserColumn(AdminUserDO.class, "id"); + rule.addUserColumn(LogUseDO.class, "use_user_id"); + rule.addUserColumn(LogStatisticsDO.class, "user_id"); }; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/worklog/LogStatisticsJob.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/worklog/LogStatisticsJob.java new file mode 100644 index 00000000..f29e9e15 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/worklog/LogStatisticsJob.java @@ -0,0 +1,119 @@ +package cn.iocoder.yudao.module.system.job.worklog; + +import cn.hutool.core.date.DateUtil; +import cn.iocoder.yudao.framework.common.util.date.DateUtils; +import cn.iocoder.yudao.framework.tenant.core.job.TenantJob; +import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.form.LogFormRuleVO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogFormDO; +import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogRuleDO; +import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogStatisticsDO; +import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogStatisticsRecordDO; +import cn.iocoder.yudao.module.system.dal.mysql.worklog.LogStatisticsMapper; +import cn.iocoder.yudao.module.system.dal.mysql.worklog.LogStatisticsRecordMapper; +import cn.iocoder.yudao.module.system.service.worklog.LogFormService; +import cn.iocoder.yudao.module.system.service.worklog.LogStatisticsRecordService; +import cn.iocoder.yudao.module.system.service.worklog.LogStatisticsService; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +@Component +@Slf4j +public class LogStatisticsJob { + @Resource + private LogStatisticsService logStatisticsService; + @Resource + private LogFormService logFormService; + @Resource + private LogStatisticsMapper logStatisticsMapper; + @Resource + private LogStatisticsRecordService logStatisticsRecordService; + @Resource + private LogStatisticsRecordMapper logStatisticsRecordMapper; + + @XxlJob("logStatisticsJob") + @TenantJob // --- ⚠️ 这个注解 会将租户列表拉出来 完了后逐个租户执行 定时任务需要注意 + public ReturnT execute() throws Exception { + //获取参数 + //XxlJobContext xxlJobContext = XxlJobContext.getXxlJobContext(); + //String jobParam = xxlJobContext.getJobParam(); + //获取模版列表 - 从缓存中拿 - 修改模版或者新增模版的时候 删除缓存 todo 这里后面改成从缓存获取数据 + List list = logFormService.getLogFormRuleList(); + if (list.isEmpty()) { + return ReturnT.SUCCESS; + } + // -- 要判断当前规则 是不是已经统计过了 + Date thisDate = new Date(); + String thisTime = DateUtils.dateFormat(thisDate, DateUtils.FORMAT_YEAR_MONTH_DAY); + //获取模版列表 + List formIds = list.stream().map(LogFormRuleVO::getFormDO).map(LogFormDO::getId).collect(Collectors.toList()); + List statisticsRecordDOS = logStatisticsRecordService.getByFormIdsAndTime(formIds, thisTime); + Map map = statisticsRecordDOS.stream().collect(Collectors.toMap(LogStatisticsRecordDO::getFormId, v -> v, (k1, k2) -> k1)); + // -- 需要插入到统计中为提交 日志的记录 + List statisticsDOS = new ArrayList<>(); + List saveRecordDO = new ArrayList<>(); + for (LogFormRuleVO item : list) { + //拿到模版规则 + LogRuleDO logRuleDO = item.getRuleDO(); + LogFormDO logFormDO = item.getFormDO(); + if (logFormDO == null || logRuleDO == null) { + continue; + } + if (logRuleDO.getType() == 1) { + int weekNum = ((DateUtil.dayOfWeekEnum(thisDate).getValue() - 1) == 0 ? 7 : (DateUtil.dayOfWeekEnum(thisDate).getValue() - 1)); + List weekDays = Arrays.asList(logRuleDO.getWeekDays().split(",")); + // -- 还没有到统计的时间/不需要统计 - 跳出循环 + if (!weekDays.contains(Integer.toString(weekNum)) || thisDate.getTime() < DateUtils.buildHHmmTime(logRuleDO.getStatisticalTime()).getTime()) { + continue; + } + // -- 统计时间到了 - 判断是否已经统计过了 - 只需要统计谁没有提交就行 - 把没提交的记录插入到统计表中 - 其他的在新增日志里面就插入到统计表即可 + this.unSubmittedRecord(statisticsDOS, saveRecordDO, map, logFormDO, thisTime, logRuleDO); + } else if (logRuleDO.getType() == 2) { + Date statisticalTime = DateUtils.buildWeekHHmmTime(logRuleDO.getStatisticalTime()); + // -- 还没有到统计的时间 - 跳出循环 + if (thisDate.getTime() < statisticalTime.getTime()) { + continue; + } + this.unSubmittedRecord(statisticsDOS, saveRecordDO, map, logFormDO, thisTime, logRuleDO); + } + } + if (!statisticsDOS.isEmpty()) { + logStatisticsMapper.insertBatch(statisticsDOS); + } + if (!saveRecordDO.isEmpty()) { + logStatisticsRecordMapper.insertBatch(saveRecordDO); + } + // 返回执行成功 + return ReturnT.SUCCESS; + } + + + public void unSubmittedRecord(List statisticsDOS, List saveRecordDO, Map map, LogFormDO logFormDO, String thisTime, + LogRuleDO logRuleDO) { + // -- 统计时间到了 - 判断是否已经统计过了 - 只需要统计谁没有提交就行 - 把没提交的记录插入到统计表中 - 其他的在新增日志里面就插入到统计表即可 + LogStatisticsRecordDO logStatisticsRecordDO = map.get(logFormDO.getId()); + if (logStatisticsRecordDO == null || logStatisticsRecordDO.getStatisticsFlag() == 0) { + List users = logStatisticsService.getUnSubmittedUser(logFormDO.getId(), thisTime); + for (AdminUserDO user : users) { + LogStatisticsDO logStatisticsDO = new LogStatisticsDO(); + logStatisticsDO.setUserId(user.getId()); + logStatisticsDO.setFormId(logFormDO.getId()); + logStatisticsDO.setRuleId(logRuleDO.getId()); + logStatisticsDO.setDeptId(user.getDeptId()); + logStatisticsDO.setType(logRuleDO.getType()); + logStatisticsDO.setStatus(3); + logStatisticsDO.setTime(thisTime); + statisticsDOS.add(logStatisticsDO); + } + // -- 记录当前以统计 + saveRecordDO.add(new LogStatisticsRecordDO().setFormId(logFormDO.getId()) + .setRuleId(logRuleDO.getId()).setTime(thisTime).setStatisticsFlag(1)); + } + } +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogFormService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogFormService.java index dfeaf24c..4a4e1cda 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogFormService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogFormService.java @@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.form.LogFormCreateReqVO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.form.LogFormPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.form.LogFormRuleVO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.form.LogFormUpdateReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogFormDO; @@ -89,4 +90,11 @@ public interface LogFormService { * @return 动态表单分页 */ PageResult getFormPageByRule(LogFormPageReqVO pageReqVO); + + /** + * 获取考勤规则和模版列表 + * + * @return + */ + List getLogFormRuleList(); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogFormServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogFormServiceImpl.java index b31cdd37..1d7ad09b 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogFormServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogFormServiceImpl.java @@ -1,21 +1,26 @@ package cn.iocoder.yudao.module.system.service.worklog; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.json.JsonUtils; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.form.LogFormCreateReqVO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.form.LogFormPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.form.LogFormRuleVO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.form.LogFormUpdateReqVO; import cn.iocoder.yudao.module.system.convert.worklog.LogFormConvert; import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogFormDO; +import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogRuleDO; import cn.iocoder.yudao.module.system.dal.mysql.worklog.LogFormMapper; import cn.iocoder.yudao.module.system.enums.ErrorCodeConstants; import cn.iocoder.yudao.module.system.service.worklog.dto.LogFormFieldRespDTO; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.util.*; +import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -26,10 +31,12 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU */ @Service @Validated -public class LogFormServiceImpl implements LogFormService{ +public class LogFormServiceImpl implements LogFormService { @Resource private LogFormMapper formMapper; + @Resource + private LogRuleService logRuleService; @Override public Long createForm(LogFormCreateReqVO createReqVO) { @@ -90,6 +97,30 @@ public class LogFormServiceImpl implements LogFormService{ return formMapper.selectPageByRule(pageReqVO); } + @Override + public List getLogFormRuleList() { + //查询模版 + List formList = formMapper.selectList(new LambdaQueryWrapper() + .eq(LogFormDO::getStatus, 1) + .isNotNull(LogFormDO::getRuleId) + ); + List ruleIds = formList.stream().map(LogFormDO::getRuleId).collect(Collectors.toList()); + List logRuleDOS = new ArrayList<>(); + Map ruleMap = new HashMap<>(); + if (CollectionUtil.isNotEmpty(ruleIds)) { + logRuleDOS = logRuleService.getLogRuleByIds(ruleIds); + ruleMap = logRuleDOS.stream().collect(Collectors.toMap(LogRuleDO::getId, v -> v)); + } + List list = new ArrayList<>(); + for (LogFormDO logFormDO : formList) { + LogFormRuleVO vo = new LogFormRuleVO(); + vo.setFormDO(logFormDO); + vo.setRuleDO(ruleMap.get(logFormDO.getRuleId())); + list.add(vo); + } + return list; + } + /** * 校验 Field,避免 field 重复 * diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogInstanceService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogInstanceService.java index 15da52df..900dcfa6 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogInstanceService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogInstanceService.java @@ -7,6 +7,8 @@ import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.Lo import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogInstanceDO; import javax.validation.Valid; +import java.util.Date; +import java.util.List; /** * 日志实例的拓展 Service 接口 @@ -56,9 +58,35 @@ public interface LogInstanceService { /** * 获得我的日志的分页 * - * @param userId 用户编号 + * @param userId 用户编号 * @param pageReqVO 分页请求 * @return 流程实例的分页 */ PageResult getMyProcessInstancePage(Long userId, LogInstancePageReqVO pageReqVO); + + /** + * 获取我管理的日志列表(时间区间) + * + * @return + */ + List myManageLogInstanceByTimeRange(Long formId, Integer type, Date thisDate); + + /** + * 获取我管理的日志列表(时间区间) + * + * @param fromId + * @param beginTime + * @param endTime + * @return + */ + List myManageLogInstanceByTimeRange(Long fromId, Date beginTime, Date endTime); + +// /** +// * 获取我需要填写的日志 +// * +// * @param fromId +// * @param userId +// * @return +// */ +// List getNeedWriteLogInstanceByTimeRange(Long fromId, List time, Long userId); } \ 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/worklog/LogInstanceServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogInstanceServiceImpl.java index cb1b972b..ef24b928 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogInstanceServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogInstanceServiceImpl.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.system.service.worklog; +import cn.hutool.core.date.DateUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.LogInstancePageReqVO; @@ -14,10 +15,12 @@ import cn.iocoder.yudao.module.system.dal.mysql.worklog.LogInstanceMapper; import cn.iocoder.yudao.module.system.service.dict.DictDataService; import cn.iocoder.yudao.module.system.service.user.AdminUserService; import cn.iocoder.yudao.module.system.service.worklog.dto.LogReadUserRespDTO; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import java.util.Date; import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -132,4 +135,23 @@ public class LogInstanceServiceImpl implements LogInstanceService { return LogInstanceConvert.INSTANCE.convertPage(logInstanceMapper.selectMyPage(userId, pageReqVO)); } + + @Override + public List myManageLogInstanceByTimeRange(Long fromId, Integer type, Date thisDate) { + Date beginTime = type == 1 ? DateUtil.beginOfDay(thisDate) : DateUtil.beginOfWeek(thisDate); + Date endTime = type == 1 ? DateUtil.endOfDay(thisDate) : DateUtil.endOfWeek(thisDate); + return logInstanceMapper.myManageLogInstanceByTimeRange(fromId, beginTime, endTime); + } + + @Override + public List myManageLogInstanceByTimeRange(Long fromId, Date beginTime, Date endTime) { + return logInstanceMapper.myManageLogInstanceByTimeRange(fromId, beginTime, endTime); + } + +// @Override +// public List getNeedWriteLogInstanceByTimeRange(Long fromId, List time, Long userId) { +// return logInstanceMapper.selectList(new LambdaQueryWrapper() +// .eq(LogInstanceDO::getFormId,fromId) +// .in(LogInstanceDO::get)) +// } } \ 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/worklog/LogRuleService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogRuleService.java index b10221c6..091d9d24 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogRuleService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogRuleService.java @@ -60,4 +60,12 @@ public interface LogRuleService { * @return */ List getLogRuleByIds(List ruleIds); + + /** + * 通过模版id获取规则 + * + * @param formId + * @return + */ + LogRuleDO getLogRuleByFormId(Long formId); } \ 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/worklog/LogRuleServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogRuleServiceImpl.java index e2937a79..af7024c6 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogRuleServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogRuleServiceImpl.java @@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.rule.LogRulePa import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.rule.LogRuleSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogRuleDO; import cn.iocoder.yudao.module.system.dal.mysql.worklog.LogRuleMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -74,4 +75,10 @@ public class LogRuleServiceImpl implements LogRuleService { return logRuleMapper.selectBatchIds(ruleIds); } + @Override + public LogRuleDO getLogRuleByFormId(Long formId) { + return logRuleMapper.selectOne(new LambdaQueryWrapper() + .eq(LogRuleDO::getFormId, formId)); + } + } \ 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/worklog/LogStatisticsRecordService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogStatisticsRecordService.java new file mode 100644 index 00000000..34582ead --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogStatisticsRecordService.java @@ -0,0 +1,64 @@ +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.vo.statisticsrecord.LogStatisticsRecordPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statisticsrecord.LogStatisticsRecordSaveReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogStatisticsRecordDO; + +import javax.validation.Valid; +import java.util.List; + +/** + * 工作日志统计记录 Service 接口 + * + * @author 艾楷 + */ +public interface LogStatisticsRecordService { + + /** + * 创建工作日志统计记录 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createLogStatisticsRecord(@Valid LogStatisticsRecordSaveReqVO createReqVO); + + /** + * 更新工作日志统计记录 + * + * @param updateReqVO 更新信息 + */ + void updateLogStatisticsRecord(@Valid LogStatisticsRecordSaveReqVO updateReqVO); + + /** + * 删除工作日志统计记录 + * + * @param id 编号 + */ + void deleteLogStatisticsRecord(Long id); + + /** + * 获得工作日志统计记录 + * + * @param id 编号 + * @return 工作日志统计记录 + */ + LogStatisticsRecordDO getLogStatisticsRecord(Long id); + + /** + * 获得工作日志统计记录分页 + * + * @param pageReqVO 分页查询 + * @return 工作日志统计记录分页 + */ + PageResult getLogStatisticsRecordPage(LogStatisticsRecordPageReqVO pageReqVO); + + /** + * 获取统计记录 + * + * @param formIds + * @param thisTime + * @return + */ + List getByFormIdsAndTime(List formIds, String thisTime); +} \ 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/worklog/LogStatisticsRecordServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogStatisticsRecordServiceImpl.java new file mode 100644 index 00000000..169cbc62 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogStatisticsRecordServiceImpl.java @@ -0,0 +1,67 @@ +package cn.iocoder.yudao.module.system.service.worklog; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statisticsrecord.LogStatisticsRecordPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statisticsrecord.LogStatisticsRecordSaveReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogStatisticsRecordDO; +import cn.iocoder.yudao.module.system.dal.mysql.worklog.LogStatisticsRecordMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 工作日志统计记录 Service 实现类 + * + * @author 艾楷 + */ +@Service +@Validated +public class LogStatisticsRecordServiceImpl implements LogStatisticsRecordService { + + @Resource + private LogStatisticsRecordMapper logStatisticsRecordMapper; + + @Override + public Long createLogStatisticsRecord(LogStatisticsRecordSaveReqVO createReqVO) { + // 插入 + LogStatisticsRecordDO logStatisticsRecord = BeanUtils.toBean(createReqVO, LogStatisticsRecordDO.class); + logStatisticsRecordMapper.insert(logStatisticsRecord); + // 返回 + return logStatisticsRecord.getId(); + } + + @Override + public void updateLogStatisticsRecord(LogStatisticsRecordSaveReqVO updateReqVO) { + // 更新 + LogStatisticsRecordDO updateObj = BeanUtils.toBean(updateReqVO, LogStatisticsRecordDO.class); + logStatisticsRecordMapper.updateById(updateObj); + } + + @Override + public void deleteLogStatisticsRecord(Long id) { + // 删除 + logStatisticsRecordMapper.deleteById(id); + } + + @Override + public LogStatisticsRecordDO getLogStatisticsRecord(Long id) { + return logStatisticsRecordMapper.selectById(id); + } + + @Override + public PageResult getLogStatisticsRecordPage(LogStatisticsRecordPageReqVO pageReqVO) { + return logStatisticsRecordMapper.selectPage(pageReqVO); + } + + @Override + public List getByFormIdsAndTime(List formIds, String thisTime) { + return logStatisticsRecordMapper.selectList(new LambdaQueryWrapper() + .in(LogStatisticsRecordDO::getFormId, formIds) + .eq(LogStatisticsRecordDO::getTime, thisTime)); + } + +} \ 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/worklog/LogStatisticsService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogStatisticsService.java new file mode 100644 index 00000000..e9f853e8 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogStatisticsService.java @@ -0,0 +1,84 @@ +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.vo.statistics.LogStatisticsDetailsListVO; +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.statistics.LogStatisticsSaveReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; +import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogStatisticsDO; + +import javax.validation.Valid; +import java.util.List; + +public interface LogStatisticsService { + /** + * 创建工作日志统计 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createLogStatistics(@Valid LogStatisticsSaveReqVO createReqVO); + + /** + * 更新工作日志统计 + * + * @param updateReqVO 更新信息 + */ + void updateLogStatistics(@Valid LogStatisticsSaveReqVO updateReqVO); + + /** + * 删除工作日志统计 + * + * @param id 编号 + */ + void deleteLogStatistics(Long id); + + /** + * 获得工作日志统计 + * + * @param id 编号 + * @return 工作日志统计 + */ + LogStatisticsDO getLogStatistics(Long id); + + /** + * 获得工作日志统计分页 + * + * @param pageReqVO 分页查询 + * @return 工作日志统计分页 + */ + PageResult getLogStatisticsPage(LogStatisticsPageReqVO pageReqVO); + + /** + * 我管理的工作日志统计模版 + * + * @return + */ + List myManageModel(); + + /** + * 获取未提交用户 + * + * @param formId + * @param thisTime + * @return + */ + List getUnSubmittedUser(Long formId, String thisTime); + + /** + * 获取统计信息 + * + * @param dto + * @return + */ + LogStatisticsDetailsListVO getStatistics(LogStatisticsDetailsListDTO dto); + +// /** +// * 获取我填写的 +// * +// * @return +// */ +// List getNeedWrite(); +} 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 new file mode 100644 index 00000000..bf4e51f1 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogStatisticsServiceImpl.java @@ -0,0 +1,283 @@ +package cn.iocoder.yudao.module.system.service.worklog; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +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.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.vo.statistics.*; +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 com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.time.ZoneId; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 工作日志统计 Service 实现类 + * + * @author 艾楷 + */ +@Service +@Validated +public class LogStatisticsServiceImpl implements LogStatisticsService { + @Resource + private LogFormMapper logFormMapper; + @Resource + private LogInstanceService logInstanceService; + + @Resource + private LogRuleService logRuleService; + + @Resource + private LogUseMapper logUseMapper; + + @Resource + private LogStatisticsMapper logStatisticsMapper; + + @Override + public Long createLogStatistics(LogStatisticsSaveReqVO createReqVO) { + // 插入 + LogStatisticsDO logStatistics = BeanUtils.toBean(createReqVO, LogStatisticsDO.class); + logStatisticsMapper.insert(logStatistics); + // 返回 + return logStatistics.getId(); + } + + @Override + public void updateLogStatistics(LogStatisticsSaveReqVO updateReqVO) { + // 更新 + LogStatisticsDO updateObj = BeanUtils.toBean(updateReqVO, LogStatisticsDO.class); + logStatisticsMapper.updateById(updateObj); + } + + @Override + public void deleteLogStatistics(Long id) { + // 删除 + logStatisticsMapper.deleteById(id); + } + + + @Override + public LogStatisticsDO getLogStatistics(Long id) { + return logStatisticsMapper.selectById(id); + } + + @Override + public PageResult getLogStatisticsPage(LogStatisticsPageReqVO pageReqVO) { + return logStatisticsMapper.selectPage(pageReqVO); + } + + @Override + public List myManageModel() { + List list = new ArrayList<>(); + //获取模版ids - 当前登录用户的数据权限 查看日志模板使用者表 + List formIds = logUseMapper.getFormIdsByDataPermission(null); + if (formIds.isEmpty()) { + return Collections.emptyList(); + } + + List formList = new ArrayList<>(); + Map ruleMap = new HashMap<>(); + this.getFormAndRule(formIds, formList, ruleMap); + + + Date thisDate = new Date(); + Date beginDate = DateUtil.beginOfDay(thisDate); + Date beginWeek = DateUtil.beginOfWeek(thisDate); + for (LogFormDO logFormDO : formList) { + //拿到模版规则 + LogRuleDO logRuleDO = ruleMap.get(logFormDO.getRuleId()); + //判断当前模版是什么类型 - 然后再做统计 + //查询日志实例表 关联日志模版使用者作为数据权限过滤 + List instanceDOS = logInstanceService.myManageLogInstanceByTimeRange(logFormDO.getId(), logRuleDO.getType(), thisDate); + LogStatisticsModelVO vo = new LogStatisticsModelVO(); + BeanUtil.copyProperties(logFormDO, vo); + //查询下应该提交多少日志实例 - 直接通过模版id查询使用表 + Integer num = Math.toIntExact(logUseMapper.selectCount(new LambdaQueryWrapper() + .eq(LogUseDO::getFormId, logFormDO.getId()))); + if (logRuleDO.getType() == 1 && StrUtil.isNotEmpty(logRuleDO.getWeekDays())) { + // -- 判断今天是周几 和 需要提交的周做对比 + int weekNum = ((DateUtil.dayOfWeekEnum(thisDate).getValue() - 1) == 0 ? 7 : (DateUtil.dayOfWeekEnum(thisDate).getValue() - 1)); + List weekDays = Arrays.asList(logRuleDO.getWeekDays().split(",")); + if (weekDays.contains(Integer.toString(weekNum))) { + // -- 拼接获取到结束时间 + Date endTime = DateUtils.buildHHmmTime(logRuleDO.getEndTime()); + Date statisticalTime = DateUtils.buildHHmmTime(logRuleDO.getStatisticalTime()); + //按时提交数量 + Integer onTimeNum = Math.toIntExact(instanceDOS.stream().filter(a -> DateUtil.isIn(Date.from(a.getCreateTime().atZone(ZoneId.systemDefault()).toInstant()), beginDate, endTime)).count()); + //迟交数量 + Integer lateNum = Math.toIntExact(instanceDOS.stream().filter(a -> DateUtil.isIn(Date.from(a.getCreateTime().atZone(ZoneId.systemDefault()).toInstant()), endTime, statisticalTime)).count()); + //未提交数量 + Integer unSubmittedNum = num - onTimeNum - lateNum; + //按天统计 + vo.setOnTimeNum(onTimeNum); + vo.setUnSubmittedNum(unSubmittedNum); + vo.setLateNum(lateNum); + vo.setCommitTimeRange("当天" + logRuleDO.getEndTime() + "截止提交"); + } else { + vo.setCommitTimeRange("当天不需要提交"); + } + } else if (logRuleDO.getType() == 2) { + // -- 拼接获取到结束时间 + Date endTime = DateUtils.buildWeekHHmmTime(logRuleDO.getEndTime()); + Date statisticalTime = DateUtils.buildWeekHHmmTime(logRuleDO.getStatisticalTime()); + //按时提交数量 + Integer onTimeNum = Math.toIntExact(instanceDOS.stream().filter(a -> DateUtil.isIn(Date.from(a.getCreateTime().atZone(ZoneId.systemDefault()).toInstant()), beginWeek, endTime)).count()); + //迟交数量 + Integer lateNum = Math.toIntExact(instanceDOS.stream().filter(a -> DateUtil.isIn(Date.from(a.getCreateTime().atZone(ZoneId.systemDefault()).toInstant()), endTime, statisticalTime)).count()); + //未提交数量 + Integer unSubmittedNum = num - onTimeNum - lateNum; + //按天统计 + vo.setOnTimeNum(onTimeNum); + vo.setUnSubmittedNum(unSubmittedNum); + vo.setLateNum(lateNum); + vo.setCommitTimeRange("每周" + DateUtil.dayOfWeekEnum(endTime).toChinese() + (logRuleDO.getEndTime().split(",")[1]) + "截止提交"); + } + list.add(vo); + } + return list; + } + + /** + * 获取模版和规则 + * + * @param formIds + * @param formList + * @param ruleMap + */ + private void getFormAndRule(List formIds, List formList, Map ruleMap) { + //查询模版 + formList = logFormMapper.selectList(new LambdaQueryWrapper() + .in(LogFormDO::getId, formIds) + .eq(LogFormDO::getStatus, 1) + .isNotNull(LogFormDO::getRuleId) + ); + List ruleIds = formList.stream().map(LogFormDO::getRuleId).collect(Collectors.toList()); + List logRuleDOS = new ArrayList<>(); + if (CollectionUtil.isNotEmpty(ruleIds)) { + logRuleDOS = logRuleService.getLogRuleByIds(ruleIds); + ruleMap = logRuleDOS.stream().collect(Collectors.toMap(LogRuleDO::getId, v -> v)); + } + } + + @Override + public List getUnSubmittedUser(Long formId, String thisTime) { + return logStatisticsMapper.getUnSubmittedUser(formId, thisTime); + } + + @Override + public LogStatisticsDetailsListVO getStatistics(LogStatisticsDetailsListDTO dto) { + LogStatisticsDetailsListVO vo = new LogStatisticsDetailsListVO(); + // 获取规则 + LogRuleDO logRuleDO = logRuleService.getLogRuleByFormId(dto.getFormId()); + // 判断开始时间是否当天 / 是否本周 + boolean flag = false; + Date begin = DateUtil.parse(dto.getBeginTime(), "yyyy-MM-dd").toJdkDate(); + List logStatisticsDOS = new ArrayList<>(); + if (logRuleDO.getType() == 1) { + flag = DateUtil.isSameDay(begin, new Date()); + } else if (logRuleDO.getType() == 2) { + flag = DateUtil.isSameWeek(begin, new Date(), true); + } + List dateList = DateUtils.betweenDayStrList(dto.getBeginTime(), dto.getEndTime()); + // 这里将区间转换为具体的日期 因为mysql BETWEEN 会导致索引失效 + if (flag) { + logStatisticsDOS = logStatisticsMapper.getCurrentStatistics(dto.getFormId(), dateList); + } else { + logStatisticsDOS = logStatisticsMapper.getStatistics(dateList, dto.getFormId()); + } + List onTime = logStatisticsDOS.stream().filter(a -> a.getStatus() == 1).collect(Collectors.toList()); + List late = logStatisticsDOS.stream().filter(a -> a.getStatus() == 2).collect(Collectors.toList()); + List unSubmitted = logStatisticsDOS.stream().filter(a -> a.getStatus() == 3).collect(Collectors.toList()); + vo.setOnTime(onTime); + vo.setLate(late); + vo.setUnSubmitted(unSubmitted); + return vo; + } + +// @Override +// public List getNeedWrite() { +// List list = new ArrayList<>(); +// Long userId = WebFrameworkUtils.getLoginUserId(); +// //获取模版ids - 当前登录用户的数据权限 查看日志模板使用者表 +// List formIds = logUseMapper.getFormIdsByDataPermission(userId); +// if (formIds.isEmpty()) { +// return Collections.emptyList(); +// } +// //获取模版和规则 +// List formList = new ArrayList<>(); +// Map ruleMap = new HashMap<>(); +// this.getFormAndRule(formIds, formList, ruleMap); +// +// // TODO: 2024/4/14 待完善 +// +// Date thisDate = new Date(); +// Date beginDate = DateUtil.beginOfDay(thisDate); +// Date beginWeek = DateUtil.beginOfWeek(thisDate); +// for (LogFormDO logFormDO : formList) { +// //拿到模版规则 +// LogRuleDO logRuleDO = ruleMap.get(logFormDO.getRuleId()); +// //判断当前模版是什么类型 - 然后再做统计 +// //查询日志实例表 关联日志模版使用者作为数据权限过滤 +// //List instanceDOS = logInstanceService.myManageLogInstanceByTimeRange(logFormDO.getId(), logRuleDO.getType(), thisDate); +// LogStatisticsModelVO vo = new LogStatisticsModelVO(); +// BeanUtil.copyProperties(logFormDO, vo); +// //查询下应该提交多少日志实例 - 直接通过模版id查询使用表 +//// Integer num = Math.toIntExact(logUseMapper.selectCount(new LambdaQueryWrapper() +//// .eq(LogUseDO::getFormId, logFormDO.getId()))); +// if (logRuleDO.getType() == 1 && StrUtil.isNotEmpty(logRuleDO.getWeekDays())) { +// // -- 判断今天是周几 和 需要提交的周做对比 +// int weekNum = ((DateUtil.dayOfWeekEnum(thisDate).getValue() - 1) == 0 ? 7 : (DateUtil.dayOfWeekEnum(thisDate).getValue() - 1)); +// List weekDays = Arrays.asList(logRuleDO.getWeekDays().split(",")); +// if (weekDays.contains(Integer.toString(weekNum))) { +// // -- 拼接获取到结束时间 +// Date endTime = DateUtils.buildHHmmTime(logRuleDO.getEndTime()); +// Date statisticalTime = DateUtils.buildHHmmTime(logRuleDO.getStatisticalTime()); +// List instanceDOS = logInstanceService.getNeedWriteLogInstanceByTimeRange(logFormDO.getId(), logRuleDO.getType(), userId); +// //按时提交数量 +// Integer onTimeNum = Math.toIntExact(instanceDOS.stream().filter(a -> DateUtil.isIn(Date.from(a.getCreateTime().atZone(ZoneId.systemDefault()).toInstant()), beginDate, endTime)).count()); +// //迟交数量 +// Integer lateNum = Math.toIntExact(instanceDOS.stream().filter(a -> DateUtil.isIn(Date.from(a.getCreateTime().atZone(ZoneId.systemDefault()).toInstant()), endTime, statisticalTime)).count()); +// //未提交数量 +// Integer unSubmittedNum = num - onTimeNum - lateNum; +// //按天统计 +// vo.setOnTimeNum(onTimeNum); +// vo.setUnSubmittedNum(unSubmittedNum); +// vo.setLateNum(lateNum); +// vo.setCommitTimeRange("当天" + logRuleDO.getEndTime() + "截止提交"); +// } else { +// vo.setCommitTimeRange("当天不需要提交"); +// } +// } else if (logRuleDO.getType() == 2) { +// // -- 拼接获取到结束时间 +// Date endTime = DateUtils.buildWeekHHmmTime(logRuleDO.getEndTime()); +// Date statisticalTime = DateUtils.buildWeekHHmmTime(logRuleDO.getStatisticalTime()); +// //按时提交数量 +// Integer onTimeNum = Math.toIntExact(instanceDOS.stream().filter(a -> DateUtil.isIn(Date.from(a.getCreateTime().atZone(ZoneId.systemDefault()).toInstant()), beginWeek, endTime)).count()); +// //迟交数量 +// Integer lateNum = Math.toIntExact(instanceDOS.stream().filter(a -> DateUtil.isIn(Date.from(a.getCreateTime().atZone(ZoneId.systemDefault()).toInstant()), endTime, statisticalTime)).count()); +// //未提交数量 +// Integer unSubmittedNum = num - onTimeNum - lateNum; +// //按天统计 +// vo.setOnTimeNum(onTimeNum); +// vo.setUnSubmittedNum(unSubmittedNum); +// vo.setLateNum(lateNum); +// vo.setCommitTimeRange("每周" + DateUtil.dayOfWeekEnum(endTime).toChinese() + (logRuleDO.getEndTime().split(",")[1]) + "截止提交"); +// } +// list.add(vo); +// } +// 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/service/worklog/WorkLogStatisticsService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/WorkLogStatisticsService.java deleted file mode 100644 index faa10108..00000000 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/WorkLogStatisticsService.java +++ /dev/null @@ -1,17 +0,0 @@ -package cn.iocoder.yudao.module.system.service.worklog; - -import cn.iocoder.yudao.module.system.controller.admin.worklog.dto.statistics.WorkLogStatisticsModelDTO; -import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics.WorkLogStatisticsModelVO; - -import java.util.List; - -public interface WorkLogStatisticsService { - - /** - * 我管理的工作日志统计模版 - * - * @param dto - * @return - */ - List myManageModel(WorkLogStatisticsModelDTO dto); -} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/WorkLogStatisticsServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/WorkLogStatisticsServiceImpl.java deleted file mode 100644 index 4389ab89..00000000 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/WorkLogStatisticsServiceImpl.java +++ /dev/null @@ -1,62 +0,0 @@ -package cn.iocoder.yudao.module.system.service.worklog; - -import cn.hutool.core.collection.CollectionUtil; -import cn.iocoder.yudao.module.system.controller.admin.worklog.dto.statistics.WorkLogStatisticsModelDTO; -import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics.WorkLogStatisticsModelVO; -import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogFormDO; -import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogRuleDO; -import cn.iocoder.yudao.module.system.dal.mysql.worklog.LogFormMapper; -import cn.iocoder.yudao.module.system.dal.mysql.worklog.LogUseMapper; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import javax.annotation.Resource; -import java.util.*; -import java.util.stream.Collectors; - -/** - * 工作日志统计 Service 实现类 - * - * @author 艾楷 - */ -@Service -@Validated -public class WorkLogStatisticsServiceImpl implements WorkLogStatisticsService { - @Resource - private LogFormMapper logFormMapper; - - @Resource - private LogRuleService logRuleService; - - @Resource - private LogUseMapper logUseMapper; - - @Override - public List myManageModel(WorkLogStatisticsModelDTO dto) { - //获取模版ids - 当前登录用户的数据权限 查看日志模板使用者表 - // TODO: 2024/4/12 这里要测试下 数据权限问题 - List formIds = logUseMapper.getFormIdsByDataPermission(); - if (!formIds.isEmpty()) { - return Collections.emptyList(); - } - List formList = logFormMapper.selectList(new LambdaQueryWrapper() - .in(LogFormDO::getId, formIds) - .eq(LogFormDO::getStatus, 1) - .isNotNull(LogFormDO::getRuleId) - ); - List ruleIds = formList.stream().map(LogFormDO::getRuleId).collect(Collectors.toList()); - List logRuleDOS = new ArrayList<>(); - Map ruleMap = new HashMap<>(); - if (CollectionUtil.isNotEmpty(ruleIds)) { - logRuleDOS = logRuleService.getLogRuleByIds(ruleIds); - ruleMap = logRuleDOS.stream().collect(Collectors.toMap(LogRuleDO::getId, v -> v)); - } - for (LogFormDO logFormDO : formList) { - LogRuleDO logRuleDO = ruleMap.get(logFormDO.getRuleId()); - //统计谁 - - } - return null; - } -} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/comment/WorkLogCommentMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/comment/WorkLogCommentMapper.xml index 0ab17dbb..90c2a9d7 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/comment/WorkLogCommentMapper.xml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/comment/WorkLogCommentMapper.xml @@ -26,6 +26,7 @@ b.name as workLogName, b.form_variables AS workLogContent, b.form_id as workFormId, + b.create_time as workLogTime, a.create_time AS createTime FROM work_log_comment AS a diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/user/LogInstanceMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/user/LogInstanceMapper.xml index e115a2c1..46fad838 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/user/LogInstanceMapper.xml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/user/LogInstanceMapper.xml @@ -82,6 +82,26 @@ or ( result.dept_id = #{deptId} and result.data_scope = 3 ) or result.data_scope = 1 + 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 new file mode 100644 index 00000000..8b9d64e3 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/worklog/LogStatisticsMapper.xml @@ -0,0 +1,83 @@ + + + + + + + + + + \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/worklog/LogStatisticsRecordMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/worklog/LogStatisticsRecordMapper.xml new file mode 100644 index 00000000..411bc072 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/worklog/LogStatisticsRecordMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/worklog/WorkLogUseMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/worklog/WorkLogUseMapper.xml index d5c35f5d..5cda9cd7 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/worklog/WorkLogUseMapper.xml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/worklog/WorkLogUseMapper.xml @@ -14,5 +14,10 @@ select DISTINCT form_id from work_log_use + + + use_user_id = #{userId} + + \ No newline at end of file