feat(system): 添加日志实例导出功能

- 新增 LogExportExcelVO 和 LogExportVO 类用于日志导出
- 在 LogInstanceController 中添加 exportLogInstanceExcel 方法处理导出请求
- 在 LogInstanceService 接口中添加 getLogInstanceExport 方法
- 在 LogInstanceServiceImpl 中实现 getLogInstanceExport 方法,用于获取日志导出列表
- 优化 BpmOAImprestController 中的代码结构
This commit is contained in:
furongxin 2025-03-06 12:52:23 +08:00
parent efb2fdfee0
commit d83dca6b87
6 changed files with 132 additions and 12 deletions

View File

@ -58,6 +58,7 @@ public class BpmOAImprestController {
BpmOAImprestDO imprest = imprestService.getImprest(id);
BpmOAImprestRespVO respVO = BpmOAImprestConvert.INSTANCE.convert(imprest);
if (respVO != null) {
if (respVO.getBankId() != null) {
// 获取收款账号信息
BankRespDTO bankRespDTO = bankApi.getBank(respVO.getBankId()).getCheckedData();
if (bankRespDTO != null) {
@ -65,6 +66,7 @@ public class BpmOAImprestController {
respVO.setNickname(bankRespDTO.getNickname());
respVO.setBankNo(bankRespDTO.getBankNo());
}
}
// 获取公司信息
DeptRespDTO company = deptApi.getDept(respVO.getCompanyId()).getCheckedData();

View File

@ -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<LogInstanceRespVO> list = logInstanceService.getLogInstancePage(pageReqVO, null).getRecords();
List<LogExportExcelVO> list = logInstanceService.getLogInstanceExport(reqVO);
// 导出 Excel
ExcelUtils.write(response, "日志实例的拓展.xls", "数据", LogInstanceRespVO.class,
BeanUtils.toBean(list, LogInstanceRespVO.class));
ExcelUtils.write(response, "日志实例的拓展.xls", "数据", LogExportExcelVO.class,
list);
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -92,4 +92,11 @@ public interface LogInstanceService {
* @return
*/
LogInstanceNextOrUpVO getNextOrUp(LogInstancePageReqVO dto, Long id, Integer pagingType);
/**
* 获取日志导出列表
* @param reqVO 请求参数
* @return 日志列表
*/
List<LogExportExcelVO> getLogInstanceExport(LogExportVO reqVO);
}

View File

@ -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<String> fields = logFormDO.getFields();
StringBuilder workLogContent = new StringBuilder();
@ -445,6 +447,67 @@ public class LogInstanceServiceImpl implements LogInstanceService {
return vo;
}
@Override
public List<LogExportExcelVO> getLogInstanceExport(LogExportVO reqVO) {
List<LogInstanceDO> list = logInstanceMapper.selectList(new LambdaQueryWrapperX<LogInstanceDO>()
.eqIfPresent(LogInstanceDO::getFormId, reqVO.getFormId())
.betweenIfPresent(LogInstanceDO::getTime, reqVO.getTime()));
List<LogExportExcelVO> result = new ArrayList<>();
if (CollUtil.isNotEmpty(list)) {
//模版ids过滤
Set<Long> workFormIds = list.stream().map(LogInstanceDO::getFormId).collect(Collectors.toSet());
// 查询模版列表
List<LogFormDO> formList = logFormService.getFormList(workFormIds);
Map<Long, LogFormDO> formMap = formList.stream().collect(Collectors.toMap(LogFormDO::getId, item -> item));
//查询用户信息列表
Set<Long> userIds = list.stream().map(LogInstanceDO::getStartUserId).collect(Collectors.toSet());
Map<Long, AdminUserDO> 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<String> 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<LogInstanceDO> getNeedWriteLogInstanceByTimeRange(Long fromId, List<String> time, Long userId) {
return logInstanceMapper.selectList(new LambdaQueryWrapper<LogInstanceDO>()