From bf3bf9ff25ac106b556b2427cc382c8fcca63bff Mon Sep 17 00:00:00 2001 From: feiyu02 <risaku@163.com> Date: 星期二, 02 七月 2024 17:38:33 +0800 Subject: [PATCH] 1. 新增走航报告自动道路识别模块 --- src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/RealTimeDataServiceImpl.kt | 109 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 92 insertions(+), 17 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 54815f4..f90a5e6 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,33 +1,33 @@ package com.flightfeather.uav.lightshare.service.impl +import com.flightfeather.uav.common.exception.BizException 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.biz.dataprocess.AverageUtil import com.flightfeather.uav.domain.entity.* 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 import com.flightfeather.uav.repository.AirDataRepository -import com.flightfeather.uav.socket.bean.AirData 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.beans.factory.annotation.Value import org.springframework.stereotype.Service import org.springframework.web.multipart.MultipartFile import tk.mybatis.mapper.entity.Example import java.io.ByteArrayInputStream +import java.io.File 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 @@ -38,14 +38,25 @@ private val realTimeDataUavMapper: RealTimeDataUavMapper, private val realTimeDataGridMapper: RealTimeDataGridMapper, private val realTimeDataGridOptMapper: RealTimeDataGridOptMapper, - private val realTimeDataGridMinMapper: RealTimeDataGridMinMapper + private val realTimeDataGridMinMapper: RealTimeDataGridMinMapper, + private val missionMapper: MissionMapper, ) : RealTimeDataService { + + @Value("\${filePath}") + lateinit var filePath: String 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?, type: Int?, 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) } @@ -128,7 +139,12 @@ } } - override fun getNextData(deviceCode: String, updateTime: String, page: Int?, perPage: Int?): BaseResponse<List<DataVo>> { + override fun getNextData( + deviceCode: String, + updateTime: String, + page: Int?, + perPage: Int?, + ): BaseResponse<List<DataVo>> { val _perPage = perPage ?: 60 val _page = page ?: 1 val pageInfo = PageHelper.startPage<RealTimeData>(_page, _perPage) @@ -170,11 +186,53 @@ fileExchange.exchangeBoatData("0c0000000001", f).forEach { realTimeDataMapper.insert(it) } - return BaseResponse(true, data = DataImportResult("")) + return BaseResponse(true, data = DataImportResult("鎴愬姛")) } - override fun importJinanData(file: MultipartFile): BaseResponse<DataImportResult> { - TODO("Not yet implemented") + override fun importJinanData(code: String, file: MultipartFile): DataImportResult { + val f = ByteArrayInputStream(file.bytes) +// val result = fileExchange.exchangeVehicleData(code, f) + val result = fileExchange.exchangeJinanData(code, f) + if (result.isNotEmpty()) { + val first = result.first() + val t = DateUtil.instance.dateToString(first.dataTime, DateUtil.DateStyle.YYYY_MM_DD) + val last = result.last() + val mission = Mission().apply { + val tag = code.substring(0, 2) + "-" + code.substring(code.length - 2, code.length) + missionCode = "SH-JA-${tag}-${t}" + deviceType = UWDeviceType.getType(code)?.value + deviceCode = code + } + missionMapper.selectOne(mission)?.run { throw BizException("璇ヨ澶囪鏃舵浠诲姟宸插瓨鍦紝鏃犳硶閲嶅瀵煎叆") } + mission.apply { + startTime = first.dataTime + endTime = last.dataTime + } + missionMapper.insert(mission) + realTimeDataVehicleMapper.insertList(result) + } + return DataImportResult("鎴愬姛") + } + + override fun downloadTemplate(response: HttpServletResponse): Boolean { + val fileName = "JinAn-Template.xlsx" + val path = (Thread.currentThread().contextClassLoader?.getResource("/")?.path + ?: "src/main/resources") + "/templates/" + fileName + val file = File(path) + if (file.exists()) { + val fName = Base64.getEncoder().encodeToString(fileName.toByteArray()) + response.apply { + setHeader("Content-Disposition", "attachment;filename=$fName") + setHeader("fileName", fName) + addHeader("Access-Control-Expose-Headers", "fileName") + contentType = "application/vnd.ms-excel;charset=UTF-8" + setHeader("Pragma", "no-cache") + setHeader("Cache-Control", "no-cache") + setDateHeader("Expires", 0) + } + response.outputStream.write(file.readBytes()) + } + return true } override fun outToWorkbook(deviceCode: String, startTime: String, endTime: String): SXSSFWorkbook { @@ -196,13 +254,19 @@ }) if (r.isNotEmpty()) { val heads = if (page == 1) { - println("[${DateUtil.instance.dateToString(Date(), DateUtil.DateStyle.YYYY_MM_DD_HH_MM_SS)}] totalPage: ${pageInfo.pages}") + 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}......") + 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") } @@ -212,7 +276,12 @@ return workbook } - override fun outToExcel(deviceCode: String, startTime: String, endTime: String, response: HttpServletResponse): HttpServletResponse { + override fun outToExcel( + deviceCode: String, + startTime: String, + endTime: String, + response: HttpServletResponse, + ): HttpServletResponse { val workbook = outToWorkbook(deviceCode, startTime, endTime) val out = response.outputStream @@ -236,7 +305,13 @@ return contents } - override 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) } @@ -296,10 +371,10 @@ var count = 0 val minFormatter = SimpleDateFormat("yyyy-MM-dd HH:mm") - val averageUtil = AverageUtil<RealTimeDataGridOpt, RealTimeDataGridMin>({d -> + val averageUtil = AverageUtil<RealTimeDataGridOpt, RealTimeDataGridMin>({ d -> minFormatter.format(d.dataTime) - },{list -> - list.avg() + }, { list -> + list.avg() as RealTimeDataGridMin }) while (total == -1 || page <= total) { -- Gitblit v1.9.3