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 416aa1a1..5a98d0eb 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 @@ -13,10 +13,16 @@ import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.Lo 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.convert.worklog.LogInstanceConvert; +import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; +import cn.iocoder.yudao.module.system.service.dept.DeptService; +import cn.iocoder.yudao.module.system.service.permission.PermissionService; +import cn.iocoder.yudao.module.system.service.permission.RoleService; import cn.iocoder.yudao.module.system.service.user.AdminUserService; import cn.iocoder.yudao.module.system.service.worklog.LogInstanceService; import cn.iocoder.yudao.module.system.service.worklog.LogReadService; +import cn.iocoder.yudao.module.system.service.worklog.LogUseService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -35,6 +41,7 @@ import java.util.List; import java.util.Map; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; @@ -53,6 +60,18 @@ public class LogInstanceController { @Resource private AdminUserService adminUserService; + @Resource + private RoleService roleService; + + @Resource + private PermissionService permissionService; + + @Resource + private LogUseService logUseService; + + @Resource + private DeptService deptService; + @PostMapping("/create") @Operation(summary = "创建日志实例") @PreAuthorize("@ss.hasPermission('system:log-instance:create')") @@ -132,8 +151,19 @@ public class LogInstanceController { @PreAuthorize("@ss.hasPermission('system:view-log:query')") public CommonResult> getReadDept() { - List deptInfo = logInstanceService.getDeptInfo(); - return success(deptInfo); + // 获得用户角色 + List userRoles = roleService.getRoleListFromCache(permissionService.getUserRoleIdListByUserId(getLoginUserId())); + List codes = convertList(userRoles, RoleDO::getCode); + if (codes.contains("super_admin")) { + + List deptIds = logUseService.getUseDeptList(); + List deptDOS = deptService.getDeptList(deptIds); + + return success(BeanUtils.toBean(deptDOS, DeptRespVO.class)); + }else { + List deptInfo = logInstanceService.getDeptInfo(); + return success(deptInfo); + } } @GetMapping("/get-upLog") 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 a3988e1b..bf0ddc5c 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 @@ -12,10 +12,7 @@ import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.Lo import cn.iocoder.yudao.module.system.convert.worklog.LogInstanceConvert; 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.dataobject.worklog.*; 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; @@ -37,6 +34,7 @@ import java.util.*; import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; @@ -304,10 +302,16 @@ public class LogInstanceServiceImpl implements LogInstanceService { @Override public List getDeptInfo() { - List logInstanceDOS = logInstanceMapper.selectList(); - List deptIds = logInstanceDOS.stream() - .map(LogInstanceDO::getDeptId) // 获取每个LogInstanceDO的 deptId - .collect(Collectors.toList()); // 收集成List + // 根据日志规则 获取当前登录用户可以查看日志的用户信息 + List logInstanceIds = logReadService.getReadListByReadUserId(getLoginUserId()); + List startUserIds = convertList(logInstanceIds, LogReadDo::getStartUserId); + List adminUserDOS = adminUserService.getUserList(startUserIds); + + // 获得部门信息 + List deptIds = adminUserDOS.stream() + .map(AdminUserDO::getDeptId) + .distinct() + .collect(Collectors.toList()); List deptDOS = deptService.getDeptList(deptIds); return BeanUtils.toBean(deptDOS, DeptRespVO.class); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogReadService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogReadService.java index 5070432d..b5088150 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogReadService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogReadService.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.system.service.worklog; +import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogReadDo; import cn.iocoder.yudao.module.system.service.worklog.dto.LogReadUserRespDTO; import javax.validation.Valid; @@ -34,4 +35,11 @@ public interface LogReadService { * @param userId 查看者用户编号 */ void updateReadStatus(Long logId, Long userId); + + /** + * 获取当前登录用户可查看的日志列表 + * @param userId 用户编号 + * @return 日志列表 + */ + List getReadListByReadUserId(Long userId); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogReadServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogReadServiceImpl.java index 0628adfb..a9574072 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogReadServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogReadServiceImpl.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.service.worklog; import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogReadDo; import cn.iocoder.yudao.module.system.dal.mysql.worklog.LogReadMapper; import cn.iocoder.yudao.module.system.service.worklog.dto.LogReadUserRespDTO; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -64,4 +65,14 @@ public class LogReadServiceImpl implements LogReadService{ logReadMapper.updateReadStatus(logId, userId); } + + @Override + public List getReadListByReadUserId(Long userId) { + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.select("DISTINCT start_user_id"); + queryWrapper.eq("read_user_id", userId); + + return logReadMapper.selectList(queryWrapper); + } } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogUseService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogUseService.java index d4f93f23..59e28380 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogUseService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogUseService.java @@ -62,4 +62,9 @@ public interface LogUseService { * @param formId 模板编号 */ void deletByFormId(Long formId); + + /** + * 获取需要填写日志的部门列表 + */ + List getUseDeptList(); } \ 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/LogUseServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogUseServiceImpl.java index cef46aea..9e6af3f9 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogUseServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogUseServiceImpl.java @@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogUseDO; import cn.iocoder.yudao.module.system.dal.mysql.worklog.LogUseMapper; import cn.iocoder.yudao.module.system.service.worklog.dto.LogUseSaveReqDTO; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -93,4 +94,14 @@ public class LogUseServiceImpl implements LogUseService { logUseMapper.delete(LogUseDO::getFormId, formId); } + + @Override + public List getUseDeptList() { + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.select("DISTINCT use_user_dept"); + + List logUseDOS = logUseMapper.selectList(queryWrapper); + return convertList(logUseDOS, LogUseDO::getUseUserDept); + } } \ No newline at end of file