feiyu02
2021-12-30 88ae069fcf657c1790bb04b444e150c06f04e5f6
src/main/kotlin/com/flightfeather/uav/common/utils/FileExchange.kt
@@ -1,14 +1,20 @@
package com.flightfeather.uav.common.utils
import com.alibaba.fastjson.JSONObject
import com.flightfeather.uav.domain.entity.RealTimeData
import com.flightfeather.uav.socket.bean.AirData
import org.apache.poi.hssf.usermodel.HSSFWorkbook
import org.apache.poi.xssf.streaming.SXSSFWorkbook
import java.io.File
import java.io.FileInputStream
import java.io.FileOutputStream
import java.io.InputStream
import java.text.SimpleDateFormat
import java.util.*
/**
 * 无人船采集数据格式转换
 */
class FileExchange {
    companion object {
@@ -19,6 +25,109 @@
        private const val PH = "65558"
        private val format = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
    }
    fun exchangeBoatData(deviceCode: String, file: InputStream): List<RealTimeData> {
        val workbook = HSSFWorkbook(file)
        val sheet = workbook.getSheetAt(0)
        val dataList = mutableListOf<RealTimeData>()
        val lastData = mutableListOf<Double>()
        for (i in 1 until sheet.lastRowNum) {
            val row = sheet.getRow(i)
            val time = row.getCell(2).numericCellValue.toLong() * 1000
            val lat = row.getCell(4).numericCellValue
            val lng = row.getCell(5).numericCellValue
            val value = row.getCell(6).stringCellValue
            //时间
            val datetime = Date(time)
            //监测因子
            val jO = JSONObject.parseObject(value)
            var tmp = jO.getDoubleValue(TMP)
            var spC = jO.getDoubleValue(SPCOND)
            var tur = jO.getDoubleValue(TUR)
            var dO = jO.getDoubleValue(DO)
            var ph = jO.getDoubleValue(PH)
            if (lastData.isEmpty()) {
                lastData.addAll(listOf(tmp, spC, tur, dO, ph))
            } else {
                if (tmp == .0) tmp = lastData[0]
                if (spC == .0) spC = lastData[1]
                if (tur == .0) tur = lastData[2]
                if (dO == .0) dO = lastData[3]
                if (ph == .0) ph = lastData[4]
            }
            lastData[0] = tmp
            lastData[1] = spC
            lastData[2] = tur
            lastData[3] = dO
            lastData[4] = ph
            val factorsList = mutableListOf<AirData>()
            factorsList.apply {
                add(AirData().apply {
                    factorId = "1"
                    factorName = "TMP"
                    factorData = tmp
                    physicalQuantity = 0.0
                })
                add(AirData().apply {
                    factorId = "2"
                    factorName = "spC"
                    factorData = spC
                    physicalQuantity = 0.0
                })
                add(AirData().apply {
                    factorId = "3"
                    factorName = "tur"
                    factorData = tur
                    physicalQuantity = 0.0
                })
                add(AirData().apply {
                    factorId = "4"
                    factorName = "DO"
                    factorData = dO
                    physicalQuantity = 0.0
                })
                add(AirData().apply {
                    factorId = "5"
                    factorName = "PH"
                    factorData = ph
                    physicalQuantity = 0.0
                })
                add(AirData().apply {
                    factorId = "12"
                    factorName = "LNG"
                    factorData = lng
                    physicalQuantity = 0.0
                })
                add(AirData().apply {
                    factorId = "13"
                    factorName = "LAT"
                    factorData = lat
                    physicalQuantity = 0.0
                })
            }
            val factors = JSONObject.toJSON(factorsList).toString()
            dataList.add(RealTimeData().apply {
                this.deviceCode = deviceCode
                latitude = lat.toBigDecimal()
                longitude = lng.toBigDecimal()
                dataTime = datetime
                createTime = Date()
                this.factors = factors
            })
        }
        return dataList
    }
    fun doTask() {
@@ -75,7 +184,7 @@
        }
        val newWorkBook = HSSFWorkbook()
        val newWorkBook = SXSSFWorkbook(10000)
        ExcelUtil.write2(heads, contents, newWorkBook, "data")
        newWorkBook.write(out)
@@ -164,7 +273,7 @@
            contents.add(cList.toTypedArray())
        }
        val newWorkBook = HSSFWorkbook()
        val newWorkBook = SXSSFWorkbook(10000)
        ExcelUtil.write2(heads, contents, newWorkBook, "data")
        newWorkBook.write(out)