From a549d6bbd7cb6f2a0dda1234c1b4df072a9e1d61 Mon Sep 17 00:00:00 2001 From: riku <risaku@163.com> Date: 星期一, 18 十月 2021 09:34:05 +0800 Subject: [PATCH] 1. 新增车载、无人机和网格化三个单独的实时数据存储表 2. 新增数据转存方法,后续待补充转换中的数据预处理逻辑 --- src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/RealTimeDataServiceImpl.kt | 79 +++++++++++++++++++++++++++++++++++---- 1 files changed, 71 insertions(+), 8 deletions(-) diff --git a/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/RealTimeDataServiceImpl.kt b/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/RealTimeDataServiceImpl.kt index 287c2e1..75a581e 100644 --- a/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/RealTimeDataServiceImpl.kt +++ b/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/RealTimeDataServiceImpl.kt @@ -1,24 +1,25 @@ package com.flightfeather.uav.lightshare.service.impl +import com.flightfeather.uav.common.utils.DateUtil +import com.flightfeather.uav.common.utils.ExcelUtil import com.flightfeather.uav.common.utils.FileExchange import com.flightfeather.uav.common.utils.GsonUtils import com.flightfeather.uav.domain.entity.RealTimeData +import com.flightfeather.uav.domain.entity.toRowContent +import com.flightfeather.uav.domain.entity.toRowTitle import com.flightfeather.uav.domain.mapper.RealTimeDataMapper -import com.flightfeather.uav.lightshare.bean.BaseResponse -import com.flightfeather.uav.lightshare.bean.DataHead -import com.flightfeather.uav.lightshare.bean.DataImportResult -import com.flightfeather.uav.lightshare.bean.DataVo +import com.flightfeather.uav.lightshare.bean.* import com.flightfeather.uav.lightshare.service.RealTimeDataService import com.flightfeather.uav.socket.bean.AirData import com.github.pagehelper.PageHelper +import org.apache.poi.xssf.streaming.SXSSFWorkbook import org.springframework.stereotype.Service import org.springframework.web.multipart.MultipartFile import tk.mybatis.mapper.entity.Example import java.io.ByteArrayInputStream -import java.io.FileInputStream -import java.io.InputStream -import java.text.DateFormat import java.text.SimpleDateFormat +import java.util.* +import javax.servlet.http.HttpServletResponse @Service class RealTimeDataServiceImpl(val realTimeDataMapper: RealTimeDataMapper) : RealTimeDataService { @@ -46,11 +47,14 @@ } } }).forEach { + if (it.longitude == null || it.latitude == null) { + return@forEach + } result.add(DataVo( dateFormatter.format(it.dataTime), it.deviceCode, GsonUtils.parserJsonToArrayBeans(it.factors, AirData::class.java), - it.longitude.toDouble(), it.latitude.toDouble() + it.longitude?.toDouble(), it.latitude?.toDouble() )) } if (startTime == null && endTime == null) { @@ -86,4 +90,63 @@ } return BaseResponse(true, data = DataImportResult("")) } + + override fun outToWorkbook(deviceCode: String, startTime: String, endTime: String): SXSSFWorkbook { + val sTime = dateFormatter.parse(startTime) + val eTime = dateFormatter.parse(endTime) + var page = 1 + var totalPage = 1 + val pageSize = 10000 + val workbook = SXSSFWorkbook() + var rowIndex = 0 + while (page <= totalPage) { + val pageInfo = PageHelper.startPage<RealTimeData>(page, pageSize) + val r = realTimeDataMapper.selectByExample(Example(RealTimeData::class.java).apply { + createCriteria().andEqualTo("deviceCode", deviceCode) + .apply { + sTime?.let { andGreaterThanOrEqualTo("dataTime", it) } + eTime?.let { andLessThanOrEqualTo("dataTime", it) } + } + }) + if (r.isNotEmpty()) { + val heads = if (page == 1) { + println("[${DateUtil.instance.dateToString(Date(), DateUtil.DateStyle.YYYY_MM_DD_HH_MM_SS)}] totalPage: ${pageInfo.pages}") + getTableTitle(r[0]) + } else { + emptyList() + } + val contents = getTableContents(r) + print("[${DateUtil.instance.dateToString(Date(), DateUtil.DateStyle.YYYY_MM_DD_HH_MM_SS)}] currentPage: ${pageInfo.pageNum}......") + rowIndex = ExcelUtil.write(heads, contents, workbook, row = rowIndex) + println("output done") + } + totalPage = pageInfo.pages + page++ + } + return workbook + } + + override fun outToExcel(deviceCode: String, startTime: String, endTime: String, response: HttpServletResponse): HttpServletResponse { + val workbook = outToWorkbook(deviceCode, startTime, endTime) + + val out = response.outputStream + workbook.write(out) + workbook.close() + out.flush() + out.close() + + return response + } + + fun getTableTitle(d: RealTimeData): List<Array<String>> { + return listOf(d.toRowTitle()) + } + + fun getTableContents(list: List<RealTimeData>): List<Array<Any>> { + val contents = mutableListOf<Array<Any>>() + list.forEach { + contents.add(it.toRowContent()) + } + return contents + } } \ No newline at end of file -- Gitblit v1.9.3