From b1207b4bbeb3a4991eaa01413c2dd3e3550404d9 Mon Sep 17 00:00:00 2001 From: aikai Date: Mon, 15 Apr 2024 13:10:33 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E4=BE=9D=E8=B5=96=E5=BE=AA?= =?UTF-8?q?=E7=8E=AF=20-=20=E6=8F=90=E4=BA=A4=E6=97=A5=E5=BF=97=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E4=BF=AE=E6=94=B9=E6=97=A5=E5=BF=97=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?=20-?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/worklog/LogInstanceController.java | 6 +- .../worklog/LogStatisticsController.java | 2 +- .../service/user/AdminUserServiceImpl.java | 10 +-- .../worklog/LogInstanceServiceImpl.java | 47 ++++++++--- .../service/worklog/LogStatisticsService.java | 7 ++ .../worklog/LogStatisticsServiceImpl.java | 79 ++++++++++++------- .../src/main/resources/logback-spring.xml | 4 +- 7 files changed, 102 insertions(+), 53 deletions(-) diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogInstanceController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogInstanceController.java index 1598a41a..d1445ec8 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogInstanceController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogInstanceController.java @@ -48,7 +48,7 @@ public class LogInstanceController { private LogReadService logReadService; @Resource - private AdminUserService userService; + private AdminUserService adminUserService; @PostMapping("/create") @Operation(summary = "创建日志实例") @@ -136,8 +136,8 @@ public class LogInstanceController { Map> usrMap = logReadService.getUserId(logId); - List unReadUserInfo = BeanUtils.toBean(userService.getUserList(usrMap.get(0)), UserRespVO.class); - List readUserInfo = BeanUtils.toBean(userService.getUserList(usrMap.get(1)), UserRespVO.class); + List unReadUserInfo = BeanUtils.toBean(adminUserService.getUserList(usrMap.get(0)), UserRespVO.class); + List readUserInfo = BeanUtils.toBean(adminUserService.getUserList(usrMap.get(1)), UserRespVO.class); Map unReadMap = new HashMap<>(); Map readMap = new HashMap<>(); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogStatisticsController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogStatisticsController.java index 94bfe5f5..595ba0d3 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogStatisticsController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogStatisticsController.java @@ -41,7 +41,7 @@ public class LogStatisticsController { } @GetMapping("/getStatistics") - @Operation(summary = "获取我管理的模版") + @Operation(summary = "获取日志统计") public CommonResult getStatistics(@ModelAttribute LogStatisticsDetailsListDTO dto) { return success(logStatisticsService.getStatistics(dto)); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java index fdad8b0c..124549bf 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java @@ -25,7 +25,6 @@ import cn.iocoder.yudao.module.system.service.dept.DeptService; import cn.iocoder.yudao.module.system.service.dept.PostService; import cn.iocoder.yudao.module.system.service.permission.PermissionService; import cn.iocoder.yudao.module.system.service.tenant.TenantService; -import cn.iocoder.yudao.module.system.service.worklog.LogInstanceService; import com.google.common.annotations.VisibleForTesting; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -75,9 +74,6 @@ public class AdminUserServiceImpl implements AdminUserService { @Resource private UserPostMapper userPostMapper; - @Resource - private LogInstanceService logInstanceService; - @Resource private FileApi fileApi; @@ -436,7 +432,7 @@ public class AdminUserServiceImpl implements AdminUserService { } UserImportRespVO respVO = UserImportRespVO.builder().createUsernames(new ArrayList<>()).updateUsernames(new ArrayList<>()).failureUsernames(new LinkedHashMap<>()).build(); importUsers.forEach(importUser -> { - //校验,判断是否有不符合的原因 + //校验,判断是否有不符合的原因 try { if (!isUpdateSupport) { validateUserForCreateOrUpdate(null, null, importUser.getMobile(), importUser.getEmail(), null, null); @@ -537,9 +533,9 @@ public class AdminUserServiceImpl implements AdminUserService { String idCard = updateUser.getIdcard(); //通过身份证号码 获得出生日期 - LocalDate date = LocalDate.parse(idCard.substring(6,14)); + LocalDate date = LocalDate.parse(idCard.substring(6, 14)); //通过身份证号码 获得性别 - Integer sex = Integer.parseInt(idCard.substring(16,17)) % 2 == 0 ? 2 : 1; + Integer sex = Integer.parseInt(idCard.substring(16, 17)) % 2 == 0 ? 2 : 1; //通过身份证号码 获得年龄 Integer age = nowDate.getYear() - date.getYear(); 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 b93dba58..d8cc0927 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,26 +1,29 @@ package cn.iocoder.yudao.module.system.service.worklog; import cn.hutool.core.date.DateUtil; -import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.hutool.json.JSONObject; +import cn.iocoder.yudao.framework.common.util.date.DateUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptRespVO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.LogInstancePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.LogInstanceRespVO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.LogInstanceSaveReqVO; +import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics.LogStatisticsSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; 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.LogInstanceDO; 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.mysql.worklog.LogInstanceMapper; import cn.iocoder.yudao.module.system.enums.ErrorCodeConstants; import cn.iocoder.yudao.module.system.service.dept.DeptService; 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 com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -32,8 +35,6 @@ import java.time.format.DateTimeFormatter; import java.time.temporal.WeekFields; import java.util.*; import java.util.stream.Collectors; -import java.util.Date; -import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; @@ -69,6 +70,11 @@ public class LogInstanceServiceImpl implements LogInstanceService { @Resource private LogReadService logReadService; + @Resource + @Lazy + private LogStatisticsService logStatisticsService; + + @Override public Long createLogInstance(LogInstanceSaveReqVO createReqVO) { @@ -76,22 +82,22 @@ public class LogInstanceServiceImpl implements LogInstanceService { validateLogInstanceByType(createReqVO); LogInstanceDO logInstance = BeanUtils.toBean(createReqVO, LogInstanceDO.class); - + //获取当前登录用户id + Long userId = getLoginUserId(); //获取日志类型 LogFormDO logFormDo = logFormService.getForm(createReqVO.getFormId()); - Long count = logUseService.getCountByUser(logFormDo.getId(), getLoginUserId()); + Long count = logUseService.getCountByUser(logFormDo.getId(), userId); if (count == 0L) { throw exception(LOG_FORM_NOT_USE); } //获取部门信息 - AdminUserDO adminUserDO = adminUserService.getUser(getLoginUserId()); + AdminUserDO adminUserDO = adminUserService.getUser(userId); //获取规则信息 LogRuleDO logRuleDO = logRuleService.getLogRule(logFormDo.getRuleId()); - //设置发起人用户编号 - logInstance.setStartUserId(getLoginUserId()); + logInstance.setStartUserId(userId); //设置发起人部门编号 logInstance.setDeptId(adminUserDO.getDeptId()); //设置发起人用户名称 @@ -107,10 +113,27 @@ public class LogInstanceServiceImpl implements LogInstanceService { // 插入 logInstanceMapper.insert(logInstance); - + // 插入到统计中 + Date endTime = null; +// Date statisticalTime = DateUtils.buildWeekHHmmTime(logRuleDO.getStatisticalTime()); + Date thisDate = new Date(); + if (logRuleDO.getType() == 1) { + endTime = DateUtils.buildHHmmTime(logRuleDO.getEndTime()); + } else if (logRuleDO.getType() == 2) { + endTime = DateUtils.buildWeekHHmmTime(logRuleDO.getEndTime()); + } + logStatisticsService.saveOrUpdate(new LogStatisticsDO() + .setFormId(logFormDo.getId()) + .setRuleId(logRuleDO.getId()) + .setUserId(userId) + .setDeptId(adminUserDO.getDeptId()) + .setLogInstanceExtId(logInstance.getId()) + .setType(logRuleDO.getType()) + .setTime(createReqVO.getTime()) + .setStatus(thisDate.getTime() < endTime.getTime() ? 1 : 2) + ); //创建日志时,查询可以查看发起人日志的用户组 用线程控制 new Thread(() -> { - List respDTOS = logInstanceMapper.selectRaedUser(adminUserDO.getDeptId()); logReadService.createLogRule(respDTOS, logInstance.getId(), logInstance.getStartUserId()); }).start(); @@ -133,7 +156,7 @@ public class LogInstanceServiceImpl implements LogInstanceService { LocalDate nowTime = LocalDate.now(); //根据日志类型判断 - switch (createReqVO.getType()){ + switch (createReqVO.getType()) { //日志类型为日报 case 1: diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogStatisticsService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogStatisticsService.java index 0d6391ed..d0ccbe40 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogStatisticsService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogStatisticsService.java @@ -86,4 +86,11 @@ public interface LogStatisticsService { * @return */ List exportLogRuleExcel(LogStatisticsDetailsListDTO dto); + + /** + * 新增或者修改统计表 + * + * @param logStatisticsDO + */ + void saveOrUpdate(LogStatisticsDO logStatisticsDO); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogStatisticsServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogStatisticsServiceImpl.java index a659afac..109e77e7 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogStatisticsServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogStatisticsServiceImpl.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.system.service.worklog; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; @@ -17,6 +18,7 @@ import cn.iocoder.yudao.module.system.dal.mysql.worklog.LogStatisticsMapper; import cn.iocoder.yudao.module.system.dal.mysql.worklog.LogUseMapper; import cn.iocoder.yudao.module.system.service.worklog.dto.LogUseVO; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -91,7 +93,18 @@ public class LogStatisticsServiceImpl implements LogStatisticsService { List formList = new ArrayList<>(); Map ruleMap = new HashMap<>(); - this.getFormAndRule(formIds, formList, 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)); + } Date thisDate = new Date(); @@ -121,7 +134,7 @@ public class LogStatisticsServiceImpl implements LogStatisticsService { //迟交数量 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; + Integer unSubmittedNum = Math.max((num - onTimeNum - lateNum), 0); //按天统计 vo.setOnTimeNum(onTimeNum); vo.setUnSubmittedNum(unSubmittedNum); @@ -139,7 +152,7 @@ public class LogStatisticsServiceImpl implements LogStatisticsService { //迟交数量 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; + Integer unSubmittedNum = Math.max((num - onTimeNum - lateNum), 0); //按天统计 vo.setOnTimeNum(onTimeNum); vo.setUnSubmittedNum(unSubmittedNum); @@ -151,28 +164,6 @@ public class LogStatisticsServiceImpl implements LogStatisticsService { 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); @@ -220,7 +211,18 @@ public class LogStatisticsServiceImpl implements LogStatisticsService { //获取模版和规则 List formList = new ArrayList<>(); Map ruleMap = new HashMap<>(); - this.getFormAndRule(formIds, formList, 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)); + } Date thisDate = new Date(); Date beginDate = null; @@ -279,10 +281,11 @@ public class LogStatisticsServiceImpl implements LogStatisticsService { boolean flag = false; Date begin = DateUtil.parse(dto.getBeginTime(), "yyyy-MM-dd").toJdkDate(); List logStatisticsDOS = new ArrayList<>(); + Date thisDate = new Date(); if (logRuleDO.getType() == 1) { - flag = DateUtil.isSameDay(begin, new Date()); + flag = DateUtil.isSameDay(begin, thisDate); } else if (logRuleDO.getType() == 2) { - flag = DateUtil.isSameWeek(begin, new Date(), true); + flag = DateUtil.isSameWeek(begin, thisDate, true); } List dateList = DateUtils.betweenDayStrList(dto.getBeginTime(), dto.getEndTime()); // 这里将区间转换为具体的日期 因为mysql BETWEEN 会导致索引失效 @@ -293,4 +296,24 @@ public class LogStatisticsServiceImpl implements LogStatisticsService { } return logStatisticsDOS; } + + @Override + public void saveOrUpdate(LogStatisticsDO logStatisticsDO) { + if (logStatisticsDO.getStatus() == 1) { + logStatisticsMapper.insert(logStatisticsDO); + return; + } + List logStatisticsDOS = logStatisticsMapper.selectList(new LambdaQueryWrapper() + .eq(LogStatisticsDO::getUserId, logStatisticsDO.getUserId()) + .eq(LogStatisticsDO::getFormId, logStatisticsDO.getFormId()) + .eq(LogStatisticsDO::getTime, logStatisticsDO.getTime())); + if (CollUtil.isEmpty(logStatisticsDOS)) { + logStatisticsMapper.insert(logStatisticsDO); + } else { + logStatisticsMapper.update(logStatisticsDO, new LambdaUpdateWrapper() + .eq(LogStatisticsDO::getUserId, logStatisticsDO.getUserId()) + .eq(LogStatisticsDO::getFormId, logStatisticsDO.getFormId()) + .eq(LogStatisticsDO::getTime, logStatisticsDO.getTime())); + } + } } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/logback-spring.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/logback-spring.xml index b1b9f3fa..b62890e3 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/logback-spring.xml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/logback-spring.xml @@ -58,7 +58,7 @@ - + @@ -66,7 +66,7 @@ - +