导出表格这里的问题就是数据量特别大的时候,导出表格会特别慢,同事跟我讲的是,使用分页可以实现分批导出。。。
导出表格这里其实弄了很久,最后还是我牺牲了自己的电脑借他,让谢凯2号指教的
首先,packageOrderPO里传过来的数据包括
packageOrderPO.pageIndex = 1(前端传过来的数据都是从1开始)
packageOrderPO.pageSize = 100(条件查询出来的已发货包裹的总数)
这些数据都是从前端传过来,由前端定好的
override fun export(packageOrderPO: QueryPackageOrderPO, response: HttpServletResponse) {
var count = packageOrderPO.pageSize!!
val csvDataBf = StringBuffer()
csvDataBf.append("序号,后台订单号,申请人,申请人姓名,申请人电话")
csvDataBf.append("\n")
var id = 1
var pageIndex = 0
//这里的size是一次放在内存的大小,如果几百万的数据一下子放在内存。。。那要炸了。。
//这样要快一些,大小为10可以适当大一些
val size = 10
val totalNum = count
var pageTotal = when(totalNum % size){
0 -> totalNum / size
else -> totalNum / size + 1
}
while(pageIndex < pageTotal) {
val qSort = QSort(QCustomerPackage.customerPackage.updatedAt.desc())
val pageRequest = PageRequest(pageIndex, size, qSort)
val list = packageOrderService.find(createQueryExpression(packageOrderPO)!!, pageRequest).toList()
val volist = customerPackage2Vo(list!!)
volist!!.forEach {
处理表格部分。。。省略代码。。将就着看吧。。。
csvDataBf.append("\n")
id++
}
pageIndex ++
}
val sdf = SimpleDateFormat("yyyyMMddhhmmss")
CsvUtils.saveCsv("package_order" + sdf.format(Calendar.getInstance().time), csvDataBf.toString(),
response)
}