From d83dca6b87d092e391b3075d76537ef168f6a1fb Mon Sep 17 00:00:00 2001 From: furongxin <419481438@qq.com> Date: Thu, 6 Mar 2025 12:52:23 +0800 Subject: [PATCH] =?UTF-8?q?feat(system):=20=E6=B7=BB=E5=8A=A0=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E5=AE=9E=E4=BE=8B=E5=AF=BC=E5=87=BA=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 LogExportExcelVO 和 LogExportVO 类用于日志导出 - 在 LogInstanceController 中添加 exportLogInstanceExcel 方法处理导出请求 - 在 LogInstanceService 接口中添加 getLogInstanceExport 方法 - 在 LogInstanceServiceImpl 中实现 getLogInstanceExport 方法,用于获取日志导出列表 - 优化 BpmOAImprestController 中的代码结构 --- .../admin/oa/BpmOAImprestController.java | 14 ++-- .../admin/worklog/LogInstanceController.java | 10 +-- .../vo/loginstance/LogExportExcelVO.java | 33 ++++++++++ .../worklog/vo/loginstance/LogExportVO.java | 15 +++++ .../service/worklog/LogInstanceService.java | 7 ++ .../worklog/LogInstanceServiceImpl.java | 65 ++++++++++++++++++- 6 files changed, 132 insertions(+), 12 deletions(-) create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/loginstance/LogExportExcelVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/loginstance/LogExportVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAImprestController.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAImprestController.java index 35f4d254..2ccdea3b 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAImprestController.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAImprestController.java @@ -58,12 +58,14 @@ public class BpmOAImprestController { BpmOAImprestDO imprest = imprestService.getImprest(id); BpmOAImprestRespVO respVO = BpmOAImprestConvert.INSTANCE.convert(imprest); if (respVO != null) { - // 获取收款账号信息 - BankRespDTO bankRespDTO = bankApi.getBank(respVO.getBankId()).getCheckedData(); - if (bankRespDTO != null) { - respVO.setBankName(bankRespDTO.getBankName()); - respVO.setNickname(bankRespDTO.getNickname()); - respVO.setBankNo(bankRespDTO.getBankNo()); + if (respVO.getBankId() != null) { + // 获取收款账号信息 + BankRespDTO bankRespDTO = bankApi.getBank(respVO.getBankId()).getCheckedData(); + if (bankRespDTO != null) { + respVO.setBankName(bankRespDTO.getBankName()); + respVO.setNickname(bankRespDTO.getNickname()); + respVO.setBankNo(bankRespDTO.getBankNo()); + } } // 获取公司信息 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 7fb6816f..087946e3 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 @@ -306,12 +306,12 @@ public class LogInstanceController { @Operation(summary = "导出日志实例 Excel") @PreAuthorize("@ss.hasPermission('system:log-instance:export')") @OperateLog(type = EXPORT) - public void exportLogInstanceExcel(@Valid LogInstancePageReqVO pageReqVO, + public void exportLogInstanceExcel(@Valid LogExportVO reqVO, HttpServletResponse response) throws IOException { - pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - List list = logInstanceService.getLogInstancePage(pageReqVO, null).getRecords(); + + List list = logInstanceService.getLogInstanceExport(reqVO); // 导出 Excel - ExcelUtils.write(response, "日志实例的拓展.xls", "数据", LogInstanceRespVO.class, - BeanUtils.toBean(list, LogInstanceRespVO.class)); + ExcelUtils.write(response, "日志实例的拓展.xls", "数据", LogExportExcelVO.class, + list); } } \ 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/loginstance/LogExportExcelVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/loginstance/LogExportExcelVO.java new file mode 100644 index 00000000..87a0d907 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/loginstance/LogExportExcelVO.java @@ -0,0 +1,33 @@ +package cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance; + +import cn.iocoder.yudao.framework.common.validation.IdCard; +import cn.iocoder.yudao.framework.common.validation.Mobile; +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * 日志Excel 导出 VO + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Accessors(chain = false) // 设置 chain = false,避免用户导入有问题 +public class LogExportExcelVO { + + @ExcelProperty("用户名称") + private String nickname; + + @ExcelProperty("日期") + private String time; + + @ExcelProperty("标题") + private String title; + + @ExcelProperty("内容") + private String content; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/loginstance/LogExportVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/loginstance/LogExportVO.java new file mode 100644 index 00000000..606aaa50 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/loginstance/LogExportVO.java @@ -0,0 +1,15 @@ +package cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 日志实例导出 Response VO") +@Data +public class LogExportVO { + + @Schema(description = "日志模版编号") + private Long formId; + + @Schema(description = "时间范围") + private String[] time; +} 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 e81b7d9e..169fb170 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 @@ -92,4 +92,11 @@ public interface LogInstanceService { * @return */ LogInstanceNextOrUpVO getNextOrUp(LogInstancePageReqVO dto, Long id, Integer pagingType); + + /** + * 获取日志导出列表 + * @param reqVO 请求参数 + * @return 日志列表 + */ + List getLogInstanceExport(LogExportVO reqVO); } 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 c641c2fc..ca16217d 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,11 +1,13 @@ package cn.iocoder.yudao.module.system.service.worklog; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.json.JSONObject; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.date.DateUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptRespVO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.*; import cn.iocoder.yudao.module.system.convert.worklog.LogInstanceConvert; @@ -286,7 +288,7 @@ public class LogInstanceServiceImpl implements LogInstanceService { item.setAvatar(userDO.getAvatar()); } - //设置日志内部分 + //设置日志内部分an LogFormDO logFormDO = formMap.get(item.getFormId()); List fields = logFormDO.getFields(); StringBuilder workLogContent = new StringBuilder(); @@ -445,6 +447,67 @@ public class LogInstanceServiceImpl implements LogInstanceService { return vo; } + @Override + public List getLogInstanceExport(LogExportVO reqVO) { + List list = logInstanceMapper.selectList(new LambdaQueryWrapperX() + .eqIfPresent(LogInstanceDO::getFormId, reqVO.getFormId()) + .betweenIfPresent(LogInstanceDO::getTime, reqVO.getTime())); + + List result = new ArrayList<>(); + if (CollUtil.isNotEmpty(list)) { + + //模版ids过滤 + Set workFormIds = list.stream().map(LogInstanceDO::getFormId).collect(Collectors.toSet()); + + // 查询模版列表 + List formList = logFormService.getFormList(workFormIds); + Map formMap = formList.stream().collect(Collectors.toMap(LogFormDO::getId, item -> item)); + + //查询用户信息列表 + Set userIds = list.stream().map(LogInstanceDO::getStartUserId).collect(Collectors.toSet()); + Map userMap = adminUserService.getUserMap(userIds); + + //遍历 + for (LogInstanceDO item : list) { + LogExportExcelVO logExportExcelVO = new LogExportExcelVO(); + + // 设置时间 + logExportExcelVO.setTime(item.getTime()); + + //设置发起人用户名称和头像 + AdminUserDO userDO = userMap.get(item.getStartUserId()); + if (userDO != null) { + logExportExcelVO.setNickname(userDO.getNickname()); + } + + //设置日志内部分an + LogFormDO logFormDO = formMap.get(item.getFormId()); + List fields = logFormDO.getFields(); + if (!item.getFormVariables().isEmpty()) { + JSONObject workLogContentJson = new JSONObject(item.getFormVariables()); + for (String fieldItem : fields) { + JSONObject fieldJson = new JSONObject(fieldItem); + if ("upload".equals(fieldJson.getStr("type"))) { + continue; + } + String fieldStr = fieldJson.getStr("field"); + String title = fieldJson.getStr("title"); + if (fieldStr == null || title == null) { + continue; + } + String field = workLogContentJson.getStr(fieldStr); + logExportExcelVO.setTitle(title); + logExportExcelVO.setContent(field); + + result.add(logExportExcelVO); + } + } + } + } + + return result; + } + @Override public List getNeedWriteLogInstanceByTimeRange(Long fromId, List time, Long userId) { return logInstanceMapper.selectList(new LambdaQueryWrapper()