| | |
| | | package com.flightfeather.uav.lightshare.service.impl |
| | | |
| | | import com.flightfeather.uav.common.exception.ResponseErrorException |
| | | 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.common.location.TrackSegment |
| | | import com.flightfeather.uav.domain.entity.* |
| | | import com.flightfeather.uav.domain.mapper.* |
| | | import com.flightfeather.uav.domain.repository.MissionRep |
| | | import com.flightfeather.uav.domain.repository.RealTimeDataRep |
| | | import com.flightfeather.uav.domain.repository.SegmentInfoRep |
| | | 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 java.time.format.DateTimeFormatter |
| | | import java.util.* |
| | | import javax.servlet.http.HttpServletResponse |
| | | import javax.swing.text.DateFormatter |
| | | import kotlin.math.sqrt |
| | | |
| | | @Service |
| | |
| | | private val realTimeDataGridOptMapper: RealTimeDataGridOptMapper, |
| | | private val realTimeDataGridMinMapper: RealTimeDataGridMinMapper, |
| | | private val missionMapper: MissionMapper, |
| | | private val missionRep: MissionRep, |
| | | private val realTimeDataRep: RealTimeDataRep, |
| | | private val segmentInfoRep: SegmentInfoRep, |
| | | ) : RealTimeDataService { |
| | | |
| | | @Value("\${filePath}") |
| | |
| | | private val fileExchange = FileExchange() |
| | | |
| | | override fun getSecondData( |
| | | deviceType: String?, |
| | | deviceCode: String?, |
| | | startTime: String?, |
| | | endTime: String?, |
| | |
| | | var pages = 0 |
| | | val result = mutableListOf<DataVo>() |
| | | |
| | | when (UWDeviceType.getType(deviceCode)) { |
| | | val _deviceType = if (deviceType != null) { |
| | | UWDeviceType.fromValue(deviceType) |
| | | } else { |
| | | UWDeviceType.getType(deviceCode) |
| | | } |
| | | when (_deviceType) { |
| | | UWDeviceType.VEHICLE -> { |
| | | val pageInfo = PageHelper.startPage<RealTimeDataVehicle>(_page, _perPage) |
| | | realTimeDataVehicleMapper.selectByExample(Example(RealTimeDataVehicle::class.java).apply { |
| | |
| | | example.orderBy("dataTime") |
| | | } |
| | | |
| | | override fun getSegmentData(missionCode: String): List<List<DataVo>> { |
| | | val mission = missionRep.findOne(missionCode) ?: throw BizException("任务不存在") |
| | | val data = realTimeDataRep.fetchData(mission) |
| | | |
| | | val segInfo = SegmentInfo().apply { this.missionCode = missionCode } |
| | | val segList = segmentInfoRep.findList(segInfo) |
| | | // return TrackSegment.segmentWithRoad(data).map { it.map { b -> b.toDataVo() } } |
| | | val res = mutableListOf<MutableList<DataVo>>() |
| | | res.add(mutableListOf()) |
| | | var index = 0 |
| | | data.forEach { |
| | | if (it.dataTime == null) return@forEach |
| | | if (it.dataTime!! <= segList[index]?.endTime) { |
| | | res[index].add(it.toDataVo()) |
| | | if (it.dataTime!! == segList[index]?.endTime) { |
| | | index++ |
| | | res.add(mutableListOf()) |
| | | } |
| | | } |
| | | } |
| | | // 移除最后一个空集合 |
| | | if (res.last().isEmpty()) res.removeLast() |
| | | return res |
| | | } |
| | | |
| | | override fun importData(file: MultipartFile): BaseResponse<DataImportResult> { |
| | | val f = ByteArrayInputStream(file.bytes) |
| | | fileExchange.exchangeBoatData("0c0000000001", f).forEach { |
| | |
| | | |
| | | 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() |
| | |
| | | deviceType = UWDeviceType.getType(code)?.value |
| | | deviceCode = code |
| | | } |
| | | missionMapper.selectOne(mission)?.run { throw ResponseErrorException("该设备该时段任务已存在,无法重复导入") } |
| | | missionMapper.selectOne(mission)?.run { throw BizException("该设备该时段任务已存在,无法重复导入") } |
| | | mission.apply { |
| | | startTime = first.dataTime |
| | | endTime = last.dataTime |
| | |
| | | val averageUtil = AverageUtil<RealTimeDataGridOpt, RealTimeDataGridMin>({ d -> |
| | | minFormatter.format(d.dataTime) |
| | | }, { list -> |
| | | list.avg() |
| | | list.avg() as RealTimeDataGridMin |
| | | }) |
| | | |
| | | while (total == -1 || page <= total) { |