feat(system): 添加日志实例导出功能
- 新增 LogExportExcelVO 和 LogExportVO 类用于日志导出 - 在 LogInstanceController 中添加 exportLogInstanceExcel 方法处理导出请求 - 在 LogInstanceService 接口中添加 getLogInstanceExport 方法 - 在 LogInstanceServiceImpl 中实现 getLogInstanceExport 方法,用于获取日志导出列表 - 优化 BpmOAImprestController 中的代码结构
This commit is contained in:
parent
efb2fdfee0
commit
d83dca6b87
@ -58,6 +58,7 @@ public class BpmOAImprestController {
|
|||||||
BpmOAImprestDO imprest = imprestService.getImprest(id);
|
BpmOAImprestDO imprest = imprestService.getImprest(id);
|
||||||
BpmOAImprestRespVO respVO = BpmOAImprestConvert.INSTANCE.convert(imprest);
|
BpmOAImprestRespVO respVO = BpmOAImprestConvert.INSTANCE.convert(imprest);
|
||||||
if (respVO != null) {
|
if (respVO != null) {
|
||||||
|
if (respVO.getBankId() != null) {
|
||||||
// 获取收款账号信息
|
// 获取收款账号信息
|
||||||
BankRespDTO bankRespDTO = bankApi.getBank(respVO.getBankId()).getCheckedData();
|
BankRespDTO bankRespDTO = bankApi.getBank(respVO.getBankId()).getCheckedData();
|
||||||
if (bankRespDTO != null) {
|
if (bankRespDTO != null) {
|
||||||
@ -65,6 +66,7 @@ public class BpmOAImprestController {
|
|||||||
respVO.setNickname(bankRespDTO.getNickname());
|
respVO.setNickname(bankRespDTO.getNickname());
|
||||||
respVO.setBankNo(bankRespDTO.getBankNo());
|
respVO.setBankNo(bankRespDTO.getBankNo());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 获取公司信息
|
// 获取公司信息
|
||||||
DeptRespDTO company = deptApi.getDept(respVO.getCompanyId()).getCheckedData();
|
DeptRespDTO company = deptApi.getDept(respVO.getCompanyId()).getCheckedData();
|
||||||
|
@ -306,12 +306,12 @@ public class LogInstanceController {
|
|||||||
@Operation(summary = "导出日志实例 Excel")
|
@Operation(summary = "导出日志实例 Excel")
|
||||||
@PreAuthorize("@ss.hasPermission('system:log-instance:export')")
|
@PreAuthorize("@ss.hasPermission('system:log-instance:export')")
|
||||||
@OperateLog(type = EXPORT)
|
@OperateLog(type = EXPORT)
|
||||||
public void exportLogInstanceExcel(@Valid LogInstancePageReqVO pageReqVO,
|
public void exportLogInstanceExcel(@Valid LogExportVO reqVO,
|
||||||
HttpServletResponse response) throws IOException {
|
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
|
// 导出 Excel
|
||||||
ExcelUtils.write(response, "日志实例的拓展.xls", "数据", LogInstanceRespVO.class,
|
ExcelUtils.write(response, "日志实例的拓展.xls", "数据", LogExportExcelVO.class,
|
||||||
BeanUtils.toBean(list, LogInstanceRespVO.class));
|
list);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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;
|
||||||
|
}
|
@ -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;
|
||||||
|
}
|
@ -92,4 +92,11 @@ public interface LogInstanceService {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
LogInstanceNextOrUpVO getNextOrUp(LogInstancePageReqVO dto, Long id, Integer pagingType);
|
LogInstanceNextOrUpVO getNextOrUp(LogInstancePageReqVO dto, Long id, Integer pagingType);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取日志导出列表
|
||||||
|
* @param reqVO 请求参数
|
||||||
|
* @return 日志列表
|
||||||
|
*/
|
||||||
|
List<LogExportExcelVO> getLogInstanceExport(LogExportVO reqVO);
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
package cn.iocoder.yudao.module.system.service.worklog;
|
package cn.iocoder.yudao.module.system.service.worklog;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONObject;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.date.DateUtils;
|
import cn.iocoder.yudao.framework.common.util.date.DateUtils;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
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.dept.vo.dept.DeptRespVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.*;
|
import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.*;
|
||||||
import cn.iocoder.yudao.module.system.convert.worklog.LogInstanceConvert;
|
import cn.iocoder.yudao.module.system.convert.worklog.LogInstanceConvert;
|
||||||
@ -286,7 +288,7 @@ public class LogInstanceServiceImpl implements LogInstanceService {
|
|||||||
item.setAvatar(userDO.getAvatar());
|
item.setAvatar(userDO.getAvatar());
|
||||||
}
|
}
|
||||||
|
|
||||||
//设置日志内部分
|
//设置日志内部分an
|
||||||
LogFormDO logFormDO = formMap.get(item.getFormId());
|
LogFormDO logFormDO = formMap.get(item.getFormId());
|
||||||
List<String> fields = logFormDO.getFields();
|
List<String> fields = logFormDO.getFields();
|
||||||
StringBuilder workLogContent = new StringBuilder();
|
StringBuilder workLogContent = new StringBuilder();
|
||||||
@ -445,6 +447,67 @@ public class LogInstanceServiceImpl implements LogInstanceService {
|
|||||||
return vo;
|
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
|
@Override
|
||||||
public List<LogInstanceDO> getNeedWriteLogInstanceByTimeRange(Long fromId, List<String> time, Long userId) {
|
public List<LogInstanceDO> getNeedWriteLogInstanceByTimeRange(Long fromId, List<String> time, Long userId) {
|
||||||
return logInstanceMapper.selectList(new LambdaQueryWrapper<LogInstanceDO>()
|
return logInstanceMapper.selectList(new LambdaQueryWrapper<LogInstanceDO>()
|
||||||
|
Loading…
Reference in New Issue
Block a user