导出CSV ,不分页

一.查询需要导出的数据

@GetMapping("/exportAuditLog")
	@PreAuthorize("hasRole('HIT_FINANCE')")
	public void export(AuditEventLogSearchRequest auditrequest, @OTPCodeInfo OneTimeCode oneTimeCode,
			SessionStatus status, HttpServletResponse response) throws Exception {
		Assert.notNull(oneTimeCode, "one time code can't empty or null");
		oneTimeCode.validationOtpCode();
		String principal = auditrequest.getPrincipal();
		String timemin = auditrequest.getTimemin();
		String timemax = auditrequest.getTimemax();
		String type = auditrequest.getType();
		// params
		Map<String, String> params = new HashMap<>();
		params.put("principal", principal);
		params.put("timemin", timemin);
		params.put("timemax", timemax);
		params.put("type", type);

		// add sort
		List<Sort.Order> orderList = new ArrayList<>();
		if (auditrequest.getCompositors() != null && auditrequest.getCompositors().size() != 0) {
			for (Compositor compositor : auditrequest.getCompositors()) {
				Sort.Order orders = new Sort.Order(compositor.getDirection(), compositor.getProperty());
				orderList.add(orders);
			}
		}
		else {
			Sort.Order order = Sort.Order.desc("timeStamp");
			orderList.add(order);
		}

		Page<Audit> auditContent = auditTrailLogService.searchAuditTrailLog(params, null);
		List<Audit> auditlogcontent = auditContent.getContent();

		String filename = "Auditlogload.csv";

		HttpHeaders headers = new HttpHeaders();
		// 下载显示的文件名,解决中文名称乱码问
		String downloadFielName = new String(filename.getBytes("UTF-8"), "UTF-8");
		// 通知浏览器以attachment(下载方式)打开图片
		headers.setContentDispositionFormData("attachment", downloadFielName);
		// application/octet-stream 二进制流数据(最常见的文件下载)
		headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
		String utf = "UTF-8";
		response.setContentType("application/ms-excel.numberformat:@");
		response.setCharacterEncoding(utf);
		response.setHeader("Pragma", "public");
		response.setHeader("Cache-Control", "max-age=30");
		response.setHeader("Content-Disposition", "attachment; filename=" + downloadFielName);
		process(auditlogcontent, response);
		String typelog = "Export Log";
		String message = "Export Log";
		auditEventLog.addAuditLog(typelog, message);
	}

	public void process(List<Audit> datalist, HttpServletResponse response) throws IOException {
		OutputStream output = response.getOutputStream();
		CsvWriter csvWriter = new CsvWriter(output, ',', Charset.forName("UTF-8"));
		String[] tableheader = { "Date Time", "User Name", "Event", "Log Details" };
		csvWriter.writeRecord(tableheader);
		for (Audit data : datalist) {
			String[] arr = new String[4];
			arr[0] = data.getTimeStamp().toString();
			arr[1] = data.getPrincipal();
			arr[2] = data.getType();
			arr[3] = data.getData();
			csvWriter.writeRecord(arr);
		}
		csvWriter.close();
		output.close();
	}

Service:

@Service
public class AuditTrailLogServiceImpl implements AuditTrailLogService {

	@Autowired
	private AuditRepository auditRepository;

	@Override
	public PageImpl<Audit> searchAuditTrailLog(Map<String, String> params, Pageable pageable) {

		return auditRepository.searchAuditSearchLog(params, pageable);
	}

}

Dao:

@Override
	@Transactional
	public PageImpl<Audit> searchAuditSearchLog(Map<String, String> params, Pageable pageable) {

		Long count = countByCondition(params);
		CriteriaBuilder cb = entityManager.getCriteriaBuilder();
		CriteriaQuery<Audit> cq = cb.createQuery(Audit.class);
		Root<Audit> root = cq.from(Audit.class);
		List<Predicate> predicates = buildQueryPredicate(params, root, cb);
		if (!predicates.isEmpty()) {
			cq.where(predicates.toArray(new Predicate[0]));
		}
		List<Order> sortOrder;
		if (pageable != null) {
			sortOrder = QueryUtils.toOrders(pageable.getSort(), root, cb);
		}
		else {
			Sort.Order orderId = Sort.Order.desc("timeStamp");
			List<Sort.Order> orders = new ArrayList<>();
			orders.add(orderId);
			sortOrder = QueryUtils.toOrders(Sort.by(orders), root, cb);
		}
		cq.orderBy(sortOrder);

		TypedQuery<Audit> query = entityManager.createQuery(cq);
			List<Audit> auditList;
		if (pageable != null) {
			query.setMaxResults(pageable.getPageSize());
			query.setFirstResult((int) pageable.getOffset());
			auditList = query.getResultList();
			return new PageImpl<>(auditList, pageable, count);
		}
		auditList = query.getResultList();
		return new PageImpl<>(auditList);


	}

	@Override
	@Transactional
	public Long countByCondition(Map<String, String> params) {
		CriteriaBuilder cb = entityManager.getCriteriaBuilder();
		CriteriaQuery<Long> cq = cb.createQuery(Long.class);
		Root<Audit> root = cq.from(Audit.class);
		cq.select(cb.count(root));
		List<Predicate> predicateList = buildQueryPredicate(params, root, cb);
		if (!predicateList.isEmpty()) {
			cq.where(predicateList.toArray(new Predicate[0]));
		}
		return entityManager.createQuery(cq).getSingleResult();
	}

	private List<Predicate> buildQueryPredicate(Map<String, String> params, Root<Audit> root, CriteriaBuilder cb) {
		List<Predicate> predicates = new ArrayList<>();
		String type = params.get("type");
		String timemin = params.get("timemin");
		String timemax = params.get("timemax");
		String principal = params.get("principal");
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date datetimeF = null;
		Date datetimeT = null;
		try {

			datetimeF = sdf.parse(timemin);
			datetimeT = sdf.parse(timemax);
		}
		catch (ParseException e) {
			e.getMessage();
		}
		Timestamp timestampF = new Timestamp(datetimeF.getTime());
		Timestamp timestampT = new Timestamp(datetimeT.getTime());

		if (!StringUtils.isEmpty(type)) {
			predicates.add(cb.equal(root.get("type"), type));
		}
		if (!StringUtils.isEmpty(principal)) {
			predicates.add(cb.like(root.get("principal"), "%" + principal + "%"));
		}
		if (!StringUtils.isEmpty(timemin)) {
			predicates.add(cb.greaterThanOrEqualTo(root.get("timeStamp").as(String.class), timestampF.toString()));
		}
		if (!StringUtils.isEmpty(timemax)) {
			String timeTo = timestampT.toString();
			String[] plit = timeTo.split(" ");
			timeTo = plit[0] + " 23:59:59";
			predicates.add(cb.lessThanOrEqualTo(root.get("timeStamp").as(String.class), timeTo));
		}
		return predicates;
	}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 layui table 中进行分页导出的实现,需要用到 layui 的 table 模块中的 exportFile 方法。该方法可以将 table 中的数据导出为 Excel 或 CSV 格式,并支持分页导出。 具体实现步骤如下: 1. 在 layui table 中添加一个导出按钮,用于触发导出操作。 ```html <button class="layui-btn layui-btn-sm export-btn">导出</button> ``` 2. 在 JavaScript 中绑定导出按钮的点击事件,并调用 table 模块的 exportFile 方法。 ```javascript layui.use(['table', 'util'], function() { var table = layui.table, util = layui.util; // 导出按钮点击事件 $('.export-btn').on('click', function() { // 获取当前 table 的数据和分页信息 var data = table.cache['table-id'], page = table.cache['table-id'].page; // 设置导出文件名 var filename = 'table-' + util.toDateString(new Date(), 'yyyyMMddHHmmss'); // 调用导出方法 table.exportFile(['列1', '列2', '列3'], data, filename, page); }); }); ``` 3. 在导出方法中,需要传入三个参数:表头、数据、文件名和分页信息。 ```javascript table.exportFile(['列1', '列2', '列3'], data, filename, page); ``` 其中,表头是一个数组,包含所有要导出的列的名称;数据是一个数组,包含所有要导出的数据;文件名是要导出的文件名,可以自定义;分页信息是一个对象,包含当前页码和每页显示的数据条数。 完整代码示例: ```html <table id="table-id" lay-filter="table-filter"></table> <button class="layui-btn layui-btn-sm export-btn">导出</button> <script> layui.use(['table', 'util'], function() { var table = layui.table, util = layui.util; // 渲染表格 table.render({ elem: '#table-id', url: '/api/data', cols: [[ {field: 'id', title: '编号'}, {field: 'name', title: '姓名'}, {field: 'age', title: '年龄'}, {field: 'gender', title: '性别'}, {field: 'address', title: '地址'} ]] }); // 导出按钮点击事件 $('.export-btn').on('click', function() { // 获取当前 table 的数据和分页信息 var data = table.cache['table-id'], page = table.cache['table-id'].page; // 设置导出文件名 var filename = 'table-' + util.toDateString(new Date(), 'yyyyMMddHHmmss'); // 调用导出方法 table.exportFile(['编号', '姓名', '年龄', '性别', '地址'], data, filename, page); }); }); </script> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值