From 01eae19a4870033e879a3faa6749eece92926cab Mon Sep 17 00:00:00 2001 From: feiyu02 <risaku@163.com> Date: 星期五, 26 一月 2024 17:10:55 +0800 Subject: [PATCH] 1. 新增多项yml配置文件 2. 新增导入静安监测数据功能模块(未完成) --- src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/RealTimeDataServiceImpl.kt | 115 +++++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 95 insertions(+), 20 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 ed3f0f2..54815f4 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,15 +1,13 @@ package com.flightfeather.uav.lightshare.service.impl +import com.flightfeather.uav.common.scaleMap 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.dataprocess.AverageUtil import com.flightfeather.uav.domain.entity.* -import com.flightfeather.uav.domain.mapper.RealTimeDataGridMapper -import com.flightfeather.uav.domain.mapper.RealTimeDataMapper -import com.flightfeather.uav.domain.mapper.RealTimeDataUavMapper -import com.flightfeather.uav.domain.mapper.RealTimeDataVehicleMapper +import com.flightfeather.uav.domain.mapper.* import com.flightfeather.uav.lightshare.bean.* import com.flightfeather.uav.lightshare.service.RealTimeDataService import com.flightfeather.uav.model.epw.EPWDataPrep @@ -18,16 +16,19 @@ import com.flightfeather.uav.socket.eunm.UWDeviceType import com.github.pagehelper.PageHelper import org.apache.poi.xssf.streaming.SXSSFWorkbook +import org.springframework.beans.BeanUtils import org.springframework.stereotype.Service import org.springframework.web.multipart.MultipartFile import tk.mybatis.mapper.entity.Example import java.io.ByteArrayInputStream import java.text.SimpleDateFormat import java.time.LocalDateTime +import java.time.ZoneId import java.time.format.DateTimeFormatter import java.util.* import javax.servlet.http.HttpServletResponse import javax.swing.text.DateFormatter +import kotlin.math.sqrt @Service class RealTimeDataServiceImpl( @@ -35,14 +36,16 @@ private val airDataRepository: AirDataRepository, private val realTimeDataVehicleMapper: RealTimeDataVehicleMapper, private val realTimeDataUavMapper: RealTimeDataUavMapper, - private val realTimeDataGridMapper: RealTimeDataGridMapper + private val realTimeDataGridMapper: RealTimeDataGridMapper, + private val realTimeDataGridOptMapper: RealTimeDataGridOptMapper, + private val realTimeDataGridMinMapper: RealTimeDataGridMinMapper ) : RealTimeDataService { private var dateFormatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ss") private var dateFormatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm") private val fileExchange = FileExchange() - override fun getSecondData(deviceCode: String?, startTime: String?, endTime: String?, page: Int?, perPage: Int?): BaseResponse<List<DataVo>> { + override fun getSecondData(deviceCode: String?, startTime: String?, endTime: String?, type: Int?, page: Int?, perPage: Int?): BaseResponse<List<DataVo>> { val _perPage = perPage ?: 60 val _page = page ?: 1 val sTime = startTime?.let { dateFormatter.parse(it) } @@ -70,12 +73,24 @@ pages = pageInfo.pages } UWDeviceType.GRID -> { - val pageInfo = PageHelper.startPage<RealTimeDataGrid>(_page, _perPage) - realTimeDataGridMapper.selectByExample(Example(RealTimeDataGrid::class.java).apply { - getSecondDataExample(this, deviceCode, sTime, eTime) - }).forEach { result.add(it.toDataVo()) } - pageNum = pageInfo.pageNum - pages = pageInfo.pages + // 缃戞牸鍖栫洃娴嬬绾у�� + if (type == null || type == 0) { + val pageInfo = PageHelper.startPage<RealTimeDataGrid>(_page, _perPage) + realTimeDataGridMapper.selectByExample(Example(RealTimeDataGrid::class.java).apply { + getSecondDataExample(this, deviceCode, sTime, eTime) + }).forEach { result.add(it.toDataVo()) } + pageNum = pageInfo.pageNum + pages = pageInfo.pages + } + // 缃戞牸鍖栫洃娴嬪垎閽熷�� + else if (type == 1) { + val pageInfo = PageHelper.startPage<RealTimeDataGridMin>(_page, _perPage) + realTimeDataGridMinMapper.selectByExample(Example(RealTimeDataGridMin::class.java).apply { + getSecondDataExample(this, deviceCode, sTime, eTime) + }).forEach { result.add(it.toDataVo()) } + pageNum = pageInfo.pageNum + pages = pageInfo.pages + } } else -> { // 浠庡師濮嬫暟鎹〃涓幏鍙栨暟鎹� @@ -158,6 +173,10 @@ return BaseResponse(true, data = DataImportResult("")) } + override fun importJinanData(file: MultipartFile): BaseResponse<DataImportResult> { + TODO("Not yet implemented") + } + override fun outToWorkbook(deviceCode: String, startTime: String, endTime: String): SXSSFWorkbook { val sTime = dateFormatter.parse(startTime) val eTime = dateFormatter.parse(endTime) @@ -217,7 +236,7 @@ return contents } - private fun getOriginData(deviceCode: String?, startTime: String?, endTime: String?, page: Int?, perPage: Int?): BaseResponse<List<DataVo>> { + override fun getOriginData(deviceCode: String?, startTime: String?, endTime: String?, page: Int?, perPage: Int?): BaseResponse<List<DataVo>> { val _perPage = perPage ?: 60 val _page = page ?: 1 val sTime = startTime?.let { dateFormatter.parse(it) } @@ -253,7 +272,7 @@ var count = 0 while (total == -1 || page <= total) { - println("------start------") + println("------鏁版嵁棰勫鐞唖tart------") val res = getOriginData("0d0000000001", "2021-07-05 19:47:01", "2021-11-05 00:00:00", page, 50000) res.head?.let { total = it.totalPage @@ -272,23 +291,22 @@ } override fun averageData(): BaseResponse<String> { - val epwDataPrep = EPWDataPrep() var page = 1 var total = -1 var count = 0 val minFormatter = SimpleDateFormat("yyyy-MM-dd HH:mm") - val averageUtil = AverageUtil<RealTimeDataGrid>({d -> + val averageUtil = AverageUtil<RealTimeDataGridOpt, RealTimeDataGridMin>({d -> minFormatter.format(d.dataTime) },{list -> list.avg() }) while (total == -1 || page <= total) { - println("------start------") + println("------鍧囧�艰绠梥tart------") - val p = PageHelper.startPage<RealTimeDataGrid>(page, 50000) - val res = realTimeDataGridMapper.selectByExample(Example(RealTimeDataGrid::class.java).apply { + val p = PageHelper.startPage<RealTimeDataGridOpt>(page, 50000) + val res = realTimeDataGridOptMapper.selectByExample(Example(RealTimeDataGridOpt::class.java).apply { createCriteria().andBetween("dataTime", "2021-06-01 00:00:00", "2021-11-05 00:00:00") }) @@ -299,7 +317,8 @@ } println("褰撳墠椤垫暟锛�$page") averageUtil.avg(res).forEach { - + realTimeDataGridMinMapper.insert(it) + count++ } page++ @@ -307,4 +326,60 @@ return BaseResponse(count > 0, data = "鎻掑叆鏁版嵁: ${count}鏉�") } + + override fun dataCalibration(): BaseResponse<String> { + var page = 1 + var total = -1 + var count = 0 + val sT = "2021-06-19 00:00:00" + val eT = "2021-10-21 00:00:00" + + println("------鏁版嵁浼樺寲start------") + while (total == -1 || page <= total) { + // 棰勫鐞嗗悗鐨勭綉鏍煎寲鏁版嵁 + val p = PageHelper.startPage<RealTimeDataGrid>(page, 50000) + val dataList1 = realTimeDataGridMapper.selectByExample(Example(RealTimeDataGrid::class.java).apply { + createCriteria().andBetween("dataTime", sT, eT) + }) + // 鍘熷鏁版嵁锛圚2S锛� + val res = getOriginData("0d0000000001", sT, eT, page, 50000) + val dataList2 = res.data ?: emptyList() + + total = p.pages + + if (page == 1) { + println("鎬婚〉鏁帮細$total") + } + println("褰撳墠椤垫暟锛�$page") + + for (i in dataList1.indices) { + if (i >= dataList2.size) break + val d1 = dataList1[i] + val d2 = dataList2[i] + // 鍒ゆ柇灏忔椂锛岃幏鍙栧搴旀椂娈电殑浼樺寲绯绘暟 + val h = LocalDateTime.ofInstant(d1.dataTime?.toInstant(), ZoneId.systemDefault()).hour + val scaleList = scaleMap[h] ?: continue + d1.apply { + // 鍚勯澶勭悊鍚庣殑鍥犲瓙锛堥櫎H2S锛変箻绯绘暟 + no2 = no2?.times(scaleList[0]) + co = co?.times(scaleList[1]) + so2 = so2?.times(scaleList[3]) + o3 = o3?.times(scaleList[4]) + voc = voc?.times(scaleList[7]) + + // 鍗曠嫭鎶婂師濮嬬殑H2S涔樹互绯绘暟 + h2s = d2.values?.get(2)?.factorData?.toFloat()?.times(scaleList[2]) + h2s = h2s?.let { sqrt(it) * 2 } + } + + // 鏇存柊绉掔骇鍊� + val opt = RealTimeDataGridOpt() + BeanUtils.copyProperties(d1, opt) + count += realTimeDataGridOptMapper.insert(opt) + } + page++ + } + + return BaseResponse(count > 0, data = "鎻掑叆鏁版嵁: ${count}鏉�") + } } \ No newline at end of file -- Gitblit v1.9.3