| | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; |
| | | import cn.iocoder.yudao.framework.translate.core.TranslateUtils; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; |
| | | import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogPageReqVO; |
| | | import cn.iocoder.yudao.module.system.controller.admin.logger.vo.operatelog.OperateLogRespVO; |
| | | import cn.iocoder.yudao.module.system.dal.dataobject.logger.OperateLogDO; |
| | | import cn.iocoder.yudao.module.system.service.logger.OperateLogService; |
| | | import org.dromara.core.trans.anno.TransMethodResult; |
| | | import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; |
| | | import cn.iocoder.yudao.module.system.service.user.AdminUserService; |
| | | import io.swagger.v3.oas.annotations.Operation; |
| | | import io.swagger.v3.oas.annotations.Parameter; |
| | | import io.swagger.v3.oas.annotations.tags.Tag; |
| | |
| | | |
| | | import java.io.IOException; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | import java.util.Objects; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | |
| | | @Resource |
| | | private OperateLogService operateLogService; |
| | | |
| | | @Resource |
| | | private AdminUserService adminUserService; |
| | | |
| | | @GetMapping("/get") |
| | | @Operation(summary = "查看操作日志") |
| | | @Parameter(name = "id", description = "编号", required = true, example = "1024") |
| | | @PreAuthorize("@ss.hasPermission('system:operate-log:query')") |
| | | public CommonResult<OperateLogRespVO> getOperateLog(@RequestParam("id") Long id) { |
| | | OperateLogDO operateLog = operateLogService.getOperateLog(id); |
| | | return success(BeanUtils.toBean(operateLog, OperateLogRespVO.class)); |
| | | if (operateLog == null) { |
| | | return success(null); |
| | | } |
| | | return success(buildResponses(List.of(operateLog)).get(0)); |
| | | } |
| | | |
| | | @GetMapping("/page") |
| | | @Operation(summary = "查看操作日志分页列表") |
| | | @PreAuthorize("@ss.hasPermission('system:operate-log:query')") |
| | | @TransMethodResult |
| | | public CommonResult<PageResult<OperateLogRespVO>> pageOperateLog(@Valid OperateLogPageReqVO pageReqVO) { |
| | | PageResult<OperateLogDO> pageResult = operateLogService.getOperateLogPage(pageReqVO); |
| | | return success(BeanUtils.toBean(pageResult, OperateLogRespVO.class)); |
| | | return success(new PageResult<>(buildResponses(pageResult.getList()), pageResult.getTotal())); |
| | | } |
| | | |
| | | @Operation(summary = "导出操作日志") |
| | | @GetMapping("/export-excel") |
| | | @PreAuthorize("@ss.hasPermission('system:operate-log:export')") |
| | | @TransMethodResult |
| | | @ApiAccessLog(operateType = EXPORT) |
| | | public void exportOperateLog(HttpServletResponse response, @Valid OperateLogPageReqVO exportReqVO) throws IOException { |
| | | exportReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); |
| | | List<OperateLogDO> list = operateLogService.getOperateLogPage(exportReqVO).getList(); |
| | | ExcelUtils.write(response, "操作日志.xls", "数据列表", OperateLogRespVO.class, |
| | | TranslateUtils.translate(BeanUtils.toBean(list, OperateLogRespVO.class))); |
| | | buildResponses(list)); |
| | | } |
| | | |
| | | /** 批量填充操作人,列表、详情及导出采用相同规则,不依赖自动翻译。 */ |
| | | private List<OperateLogRespVO> buildResponses(List<OperateLogDO> logs) { |
| | | List<OperateLogRespVO> responses = BeanUtils.toBean(logs, OperateLogRespVO.class); |
| | | Set<Long> userIds = responses.stream() |
| | | .filter(log -> Objects.equals(log.getUserType(), UserTypeEnum.ADMIN.getValue())) |
| | | .map(OperateLogRespVO::getUserId).filter(Objects::nonNull).collect(Collectors.toSet()); |
| | | Map<Long, AdminUserDO> users = userIds.isEmpty() ? Map.of() : adminUserService.getUserMap(userIds); |
| | | for (OperateLogRespVO log : responses) { |
| | | if (log.getUserId() == null) { |
| | | log.setUserName("未知操作人"); |
| | | continue; |
| | | } |
| | | AdminUserDO user = Objects.equals(log.getUserType(), UserTypeEnum.ADMIN.getValue()) |
| | | ? users.get(log.getUserId()) : null; |
| | | if (user != null) { |
| | | log.setUserName(StrUtil.blankToDefault(user.getNickname(), |
| | | StrUtil.blankToDefault(user.getUsername(), "用户(编号:" + log.getUserId() + ")"))); |
| | | } else { |
| | | String userType = Objects.equals(log.getUserType(), UserTypeEnum.MEMBER.getValue()) ? "会员" : "用户"; |
| | | log.setUserName(userType + "(编号:" + log.getUserId() + ")"); |
| | | } |
| | | } |
| | | return responses; |
| | | } |
| | | |
| | | } |