| | |
| | | put(22, listOf(1.357157189f, 1.155444400f, 1.184586476f, 1.085940877f, 0.841801847f, 1.0f, 1.0f, 1.018320115f)) |
| | | put(23, listOf(1.312873355f, 1.191067031f, 1.189618093f, 1.106982786f, 0.848180982f, 1.0f, 1.0f, 1.019044077f)) |
| | | } |
| | | |
| | | //ç½æ ¼åçæµè®¾å¤ç»çº¬åº¦ï¼gpsï¼ |
| | | const val GridLng = 121.235813 |
| | | const val GridLat = 30.835898 |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.flightfeather.uav.common.utils |
| | | |
| | | import kotlin.math.PI |
| | | import kotlin.math.cos |
| | | import kotlin.math.sin |
| | | |
| | | object MapUtil { |
| | | |
| | | private const val Ea = 6378137 //赤éåå¾ |
| | | private const val Eb = 6356725 //æåå¾ |
| | | |
| | | /** |
| | | * æ ¹æ®åæ ç¹ãè·ç¦»åè§åº¦ï¼è·åå¦ä¸ä¸ªåæ |
| | | * @param pos åæ ç¹(GPSç³») |
| | | * @param len è·ç¦»ï¼ç±³ï¼ |
| | | * @param radian 弧度 |
| | | */ |
| | | fun getPointByLen(pos: Pair<Double, Double>, len: Double, radian: Double): Pair<Double, Double> { |
| | | val dx = len * sin(radian) |
| | | val dy = len * cos(radian) |
| | | val ec = Eb + (Ea - Eb) * (90.0 - pos.second) / 90.0 |
| | | val ed = ec * cos(pos.second * PI / 180) |
| | | val lng = (dx / ed + pos.first * PI / 180.0) * 180.0 / PI |
| | | val lat = (dy / ec + pos.second * PI / 180.0) * 180.0 / PI |
| | | return Pair(lng, lat) |
| | | } |
| | | } |
| | |
| | | var ciAddress: String? = null |
| | | |
| | | /** |
| | | * ä¸å¿ç»åº¦ |
| | | */ |
| | | |
| | | var ciLongitude: BigDecimal? = null |
| | | |
| | | /** |
| | | * ä¸å¿çº¬åº¦ |
| | | */ |
| | | |
| | | var ciLatitude: BigDecimal? = null |
| | | |
| | | /** |
| | | * ç»ç»æºæä»£ç |
| | | */ |
| | | |
| | |
| | | private var pfRunTime: Int = 0 |
| | | private var pfRunPeriod = mutableListOf<Int>() |
| | | |
| | | private var rTimeDiff:Int = 0 //æ£å¼è¿è¡æ¶é´å·® |
| | | private var sResult:Boolean = false //设å¤å¼å¯æ¯å¦åè§ |
| | | private var eTimeDiff: Int = 0 //å
³éæ¶é´å·® |
| | | private var eResult: Boolean = false //设å¤å
³éæ¯å¦åè§ |
| | | private var runningTimeDiff = 0 //è¿è¡æ¶é¿å·® |
| | | private var rResult:Boolean = false //è¿è¡è¿ç¨æ¯å¦åè§ |
| | | private var dailyResult: String = ""// 彿¥åæç»ææè¿° |
| | | var rTimeDiff:Int = 0 //æ£å¼è¿è¡æ¶é´å·® |
| | | var sResult:Boolean = false //设å¤å¼å¯æ¯å¦åè§ |
| | | var eTimeDiff: Int = 0 //å
³éæ¶é´å·® |
| | | var eResult: Boolean = false //设å¤å
³éæ¯å¦åè§ |
| | | var runningTimeDiff = 0 //è¿è¡æ¶é¿å·® |
| | | var rResult:Boolean = false //è¿è¡è¿ç¨æ¯å¦åè§ |
| | | var dailyResult: String = ""// 彿¥åæç»ææè¿° |
| | | |
| | | // å½å设å¤ç±»åï¼ç¨äºæå
¥æ°æ®æ¶å³å®èµå¼å段 |
| | | private var deviceType: ElectricityType = ElectricityType.ProductionLine |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.flightfeather.uav.lightshare.bean |
| | | |
| | | import com.flightfeather.uav.model.BaseModel |
| | | import com.flightfeather.uav.model.BaseSOP |
| | | |
| | | /** |
| | | * é£é©åæç½æ ¼å¯¹è±¡ |
| | | * Date: 2021/12/8 |
| | | */ |
| | | class GridVo(sourceName: String) : BaseSOP("", sourceName, "") { |
| | | // å·¦ä¸åæ |
| | | var lb: Pair<Double, Double>? = null |
| | | |
| | | // å³ä¸åæ |
| | | var rt: Pair<Double, Double>? = null |
| | | |
| | | // æéç»æ<çæµå å, æéç»æ> |
| | | var result = mutableMapOf<String, Double>() |
| | | |
| | | // ç¸å¯¹å½±åç级ï¼0ï¼å½±åæå¤§ï¼å33%ï¼ï¼1ï¼å½±åéä¸ï¼ä¸é´33%ï¼ï¼2ï¼å½±åè½»å¾®ï¼æå33%ï¼ |
| | | var level = mutableMapOf<String, Int>() |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.flightfeather.uav.lightshare.service |
| | | |
| | | import com.flightfeather.uav.lightshare.bean.BaseResponse |
| | | import com.flightfeather.uav.lightshare.bean.GridVo |
| | | import com.flightfeather.uav.socket.eunm.UWDeviceType |
| | | |
| | | interface EPWModelService { |
| | | |
| | | /** |
| | | * ç½æ ¼åæåæ |
| | | * @param type æ°æ®æºç±»å @see [UWDeviceType], 0a,0b,0c,0d |
| | | * @param len ç½æ ¼é¿åº¦ |
| | | */ |
| | | fun getEpwModelResult(deviceCode: String, startTime: String, endTime: String, len: Double): BaseResponse<List<GridVo>> |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.flightfeather.uav.lightshare.service.impl |
| | | |
| | | import com.flightfeather.uav.common.GridLat |
| | | import com.flightfeather.uav.common.GridLng |
| | | import com.flightfeather.uav.common.utils.MapUtil |
| | | import com.flightfeather.uav.lightshare.bean.BaseResponse |
| | | import com.flightfeather.uav.lightshare.bean.GridVo |
| | | import com.flightfeather.uav.lightshare.service.EPWModelService |
| | | import com.flightfeather.uav.lightshare.service.RealTimeDataService |
| | | import com.flightfeather.uav.model.epw.EPWGridModel |
| | | import com.flightfeather.uav.model.epw.EPWModel |
| | | import com.flightfeather.uav.socket.eunm.UWDeviceType |
| | | import org.springframework.stereotype.Service |
| | | import kotlin.math.PI |
| | | |
| | | @Service |
| | | class EPWModelServiceImpl( |
| | | private val realTimeDataService: RealTimeDataService, |
| | | ) : EPWModelService { |
| | | |
| | | val epwModel = EPWGridModel() |
| | | |
| | | override fun getEpwModelResult(deviceCode: String, startTime: String, endTime: String, len: Double): BaseResponse<List<GridVo>> { |
| | | if (deviceCode.length < 2) return BaseResponse(false, "设å¤ç¼å·æ ¼å¼é误") |
| | | val type = deviceCode.substring(0, 2) |
| | | // ç¡®å®æ°æ®æºç±»åï¼åºå为âå®ç¹çæµæ°æ®âåâç§»å¨çæµæ°æ®ä¸¤ç§â |
| | | val gridType = when (type) { |
| | | UWDeviceType.UAV.value -> '0' |
| | | UWDeviceType.VEHICLE.value -> '0' |
| | | UWDeviceType.GRID.value -> '1' |
| | | UWDeviceType.BOAT.value -> 'f' |
| | | else -> 'f' |
| | | } |
| | | if (gridType == 'f') return BaseResponse(false) |
| | | |
| | | val points = mutableListOf<GridVo>() |
| | | // æ ¹æ®ä¸åç±»åï¼ç¡®å®ä¸åçç½æ ¼çææ¹å¼ï¼å¾åºç½æ ¼ä¸å¿ç¹éå(ç½æ ¼é»è®¤éç¨æ£æ¹å½¢) |
| | | // èµ°èªçæµ |
| | | if (gridType == '0') { |
| | | // TODO: 2021/12/6 èµ°èªçæµç½æ ¼ç¹çæ |
| | | } |
| | | // å®ç¹çæµ |
| | | else if (gridType == '1') { |
| | | // FIXME: 2021/12/6 æ¤å¤ä¸ºäºæµè¯ææ¶å°ç«ç¹ç»çº¬åº¦åæ»ï¼åç»éè¿æ°æ®åºé
ç½®è·å |
| | | val center = Pair(121.235813, 30.835898) |
| | | // a.ç¡®å®ç½æ ¼é¿åº¦å¯¹åºçåæ å·®å¼ |
| | | val p1 = MapUtil.getPointByLen(center, len, PI / 2)//æ£ä¸æ¹åï¼90°ï¼çåæ ç¹ |
| | | val p2 = MapUtil.getPointByLen(center, len, PI)//æ£åæ¹åï¼180°ï¼çåæ ç¹ |
| | | val dx = p1.first - center.first |
| | | val dy = center.second - p2.second |
| | | // b.ç¡®å®åè¾¹æå¤å°ä¸ªç½æ ¼(è§å®çæµç¹å¨ä¸å¿ç½æ ¼çä¸ç¹ä¸ï¼å æ¤åè¾¹ç½æ ¼æ°ä¸å®ä¸ºå¥æ°) |
| | | val totalLen = 2000 // ç½æ ¼èå´ï¼è¾¹é¿ä¸º20åç±³çæ£æ¹å½¢ |
| | | val gridNum = ((totalLen / 2 / len).toInt() - 1) * 2 + 1 |
| | | // c.ç¡®å®å·¦ä¸è§ç½æ ¼å·¦ä¸åå³ä¸ç两个对è§ç¹åæ |
| | | //ä¸å¿ç¹åæ |
| | | val g1CenterLng = center.first - (gridNum - 1) / 2 * dx//ç»åº¦åå° |
| | | val g1CenterLat = center.second + (gridNum - 1) / 2 * dy//纬度å¢å |
| | | //å·¦ä¸åæ |
| | | val g1LB = Pair(g1CenterLng - dx / 2, g1CenterLat - dy / 2) |
| | | //å³ä¸åæ |
| | | val g1RT = Pair(g1CenterLng + dx / 2, g1CenterLat + dy / 2) |
| | | // d.å¾åºææç½æ ¼ç两个对è§ç¹åæ |
| | | for (x in 0 until gridNum) { |
| | | for (y in 0 until gridNum) { |
| | | points.add(GridVo("$x-$y").apply { |
| | | this.lb = Pair(g1LB.first + dx * x, g1LB.second - dy * y) |
| | | this.rt = Pair(g1RT.first + dx * x, g1RT.second - dy * y) |
| | | this.ciLongitude = (lb!!.first + dx / 2).toBigDecimal() |
| | | this.ciLatitude = (lb!!.second + dy / 2).toBigDecimal() |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | // 计ç®åä¸å¿ç¹æ±¡æé£é©æéç»æå¹¶èµäºå¯¹åºå½±åç级 |
| | | var page = 1 |
| | | var totalPage = -1 |
| | | while (totalPage == -1 || page <= totalPage) { |
| | | realTimeDataService.getSecondData(deviceCode, startTime, endTime, 0, page, 5000).apply { |
| | | if (totalPage == -1) { |
| | | totalPage = head?.totalPage ?: 0 |
| | | } |
| | | val dataList = data ?: emptyList() |
| | | |
| | | // FIXME: 2021/7/13 æ¤å¤ä¸ºäºæµè¯ææ¶å°ç«ç¹ç»çº¬åº¦åæ»ï¼åç»éè¿æ°æ®åºé
ç½®è·å |
| | | dataList.forEach { |
| | | if (it.lng == 0.0 && it.lat == 0.0) { |
| | | it.lng = GridLng |
| | | it.lat = GridLat |
| | | } |
| | | } |
| | | |
| | | epwModel.execute(dataList, points, true) |
| | | page++ |
| | | } |
| | | } |
| | | val r = epwModel.outputResult() |
| | | |
| | | val max = mutableMapOf<String, Double>()//è®°å½æ¯ç§çæµå åçæå¤§å¼ |
| | | // val min = mutableMapOf<String, Double>()//è®°å½æ¯ç§çæµå åçæå°å¼ |
| | | //为æ¯ä¸ªç½æ ¼èµå¼æéç»æå¹¶ä¸çéåçæµå åçæå¤§æå°å¼ |
| | | points.forEach { |
| | | val key = "${it.sourceName};${it.index}" |
| | | val d = r[key] |
| | | d?.forEach { (t, u) -> |
| | | it.result[t] = u["综å(${t})"]?.average ?: .0 |
| | | |
| | | //çéæå¤§å¼ |
| | | if (!max.containsKey(t)) { |
| | | max[t] = it.result[t]!! |
| | | } else { |
| | | if (max[t]!! < it.result[t]!!) { |
| | | max[t] = it.result[t]!! |
| | | } |
| | | } |
| | | // //çéæå°å¼ |
| | | // if (!min.containsKey(t)) { |
| | | // min[t] = it.result[t]!! |
| | | // } else { |
| | | // if (min[t]!! > it.result[t]!!) { |
| | | // min[t] = it.result[t]!! |
| | | // } |
| | | // } |
| | | } |
| | | } |
| | | // æ ¹æ®æå¤§æå°å¼ï¼è®¡ç®æ¯ä¸ªç½æ ¼çåçæµå åçå½±åç级(0->2)(å½±å大->å°) |
| | | points.forEach { |
| | | it.result.forEach{ (k, v) -> |
| | | max[k]?.let {m -> |
| | | val level = when (v / m) { |
| | | in 0.6666..1.0 -> 0 |
| | | in 0.3333..0.6665 -> 1 |
| | | in .0..0.3332 -> 2 |
| | | else -> 2 |
| | | } |
| | | it.level[k] = level |
| | | } |
| | | } |
| | | } |
| | | return BaseResponse(true, data = points) |
| | | } |
| | | } |
| | |
| | | if (startTime == null && endTime == null) { |
| | | dataList1.reverse() |
| | | } |
| | | pageInfo = PageHelper.startPage<ElectricMinuteValue>(p, perP) |
| | | if (dataList1.isEmpty()) return BaseResponse(true, data = result) |
| | | |
| | | // pageInfo = PageHelper.startPage<ElectricMinuteValue>(p, perP) |
| | | val dataList2 = electricMinuteValueMapper.selectByExample(Example(ElectricMinuteValue::class.java).apply { |
| | | createCriteria().andEqualTo("mvStatCode", d2?.cdDeviceCode) |
| | | .apply { |
| | | sTime?.let { andGreaterThanOrEqualTo("mvDataTime", it) } |
| | | andGreaterThanOrEqualTo("mvDataTime", sTime ?: dataList1[0].mvDataTime) |
| | | eTime?.let { andLessThanOrEqualTo("mvDataTime", it) } |
| | | } |
| | | orderBy("mvDataTime").apply { |
| | |
| | | |
| | | import com.flightfeather.uav.lightshare.service.DeviceService |
| | | import io.swagger.annotations.Api |
| | | import org.springframework.web.bind.annotation.GetMapping |
| | | import org.springframework.web.bind.annotation.RequestMapping |
| | | import org.springframework.web.bind.annotation.RestController |
| | | |
| | |
| | | @RequestMapping("air/device") |
| | | class DeviceInfoController(private val deviceService: DeviceService) { |
| | | |
| | | @GetMapping("/all") |
| | | fun getDeviceInfo() = deviceService.getDeviceInfo() |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.flightfeather.uav.lightshare.web |
| | | |
| | | import com.flightfeather.uav.lightshare.service.EPWModelService |
| | | import io.swagger.annotations.Api |
| | | import org.springframework.web.bind.annotation.GetMapping |
| | | import org.springframework.web.bind.annotation.RequestMapping |
| | | import org.springframework.web.bind.annotation.RequestParam |
| | | import org.springframework.web.bind.annotation.RestController |
| | | |
| | | @Api(tags = ["污ææéåæAPIæ¥å£"]) |
| | | @RestController |
| | | @RequestMapping("air/analysis") |
| | | class EPWModelController (private val epwModelService: EPWModelService){ |
| | | |
| | | @GetMapping("/epw") |
| | | fun epwModel( |
| | | @RequestParam(value = "deviceCode", required = true) deviceCode: String, |
| | | @RequestParam(value = "startTime", required = true) startTime: String, |
| | | @RequestParam(value = "endTime", required = true) endTime: String, |
| | | @RequestParam(value = "len", required = true) len: Double, |
| | | ) = epwModelService.getEpwModelResult(deviceCode, startTime, endTime, len) |
| | | } |
| | |
| | | * æ±¡ææºå½±åç¨åº¦æéåææ¨¡å |
| | | * åºç±» |
| | | */ |
| | | abstract class BaseModel<M : BaseMData, S : BaseSOP> { |
| | | abstract class BaseModel<M : BaseMData> { |
| | | |
| | | data class ResultCell( |
| | | var total: Double = 0.0, |
| | |
| | | } |
| | | } |
| | | |
| | | abstract var dataPrep: BaseDataPrep<M, S> |
| | | abstract var dataPrep: BaseDataPrep<M, BaseSOP> |
| | | |
| | | // æéå åï¼å¨è¿è¡è®¡ç®åææ¶ä½¿ç¨ççæµå å |
| | | abstract var factorTypes: List<FactorType> |
| | | |
| | | // æéå¼ï¼å¤ç§æéè¿è¡ä¹ç§¯è®¡ç® |
| | | abstract var weights: List<BaseWeight<M, S>> |
| | | abstract var weights: List<BaseWeight<M, BaseSOP>> |
| | | |
| | | // 计ç®ç»æ |
| | | private val rMap = mutableMapOf<String, MutableMap<String, MutableMap<String, ResultCell>>>() |
| | | |
| | | // ç»æçéæ¹å¼ |
| | | abstract var sections: List<BaseSection<M, S>> |
| | | abstract var sections: List<BaseSection<M, BaseSOP>> |
| | | |
| | | /** |
| | | * æ±¡ææºå½±åç¨åº¦è®¡ç® |
| | | * @param mDataList çæµæ°æ®éå |
| | | * @param sopList æ±¡ææºéå |
| | | */ |
| | | fun execute(mDataList: List<M>, sopList: List<S>, hasNext: Boolean = false) { |
| | | fun execute(mDataList: List<M>, sopList: List<BaseSOP>, hasNext: Boolean = false) { |
| | | if (!hasNext) rMap.clear() |
| | | |
| | | //1. æ°æ®é¢å¤ç |
| | |
| | | * @param mData çæµæ°æ® |
| | | * @param sop æ±¡ææº |
| | | */ |
| | | private fun weightCompute(mData: M, sop: S) { |
| | | private fun weightCompute(mData: M, sop: BaseSOP) { |
| | | val effect = BaseEffect(sop.sourceId, sop.sourceName, sop.index) |
| | | |
| | | // å°åçæµæ°æ®æç
§æé计ç®åºç»æå¼ |
| | |
| | | /** |
| | | * æ±¡ææºæ°æ®åæ³æ§æ£æ¥ |
| | | */ |
| | | abstract fun sopCheck(s: S): Boolean |
| | | abstract fun sopCheck(s: BaseSOP): Boolean |
| | | } |
| | |
| | | package com.flightfeather.uav.model |
| | | |
| | | import java.math.BigDecimal |
| | | |
| | | /** |
| | | * Source of pollution |
| | | * æ±¡ææº åºç±» |
| | |
| | | var sourceId: String, |
| | | var sourceName: String, |
| | | var index: String |
| | | ) |
| | | ) { |
| | | /** |
| | | * ä¸å¿ç»åº¦ |
| | | */ |
| | | |
| | | var ciLongitude: BigDecimal? = null |
| | | |
| | | /** |
| | | * ä¸å¿çº¬åº¦ |
| | | */ |
| | | |
| | | var ciLatitude: BigDecimal? = null |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.flightfeather.uav.model |
| | | |
| | | class NoTag : BaseTag() { |
| | | override var name: String = "æ åç±»" |
| | | } |
| | |
| | | import com.flightfeather.uav.lightshare.bean.CompanySOP |
| | | import com.flightfeather.uav.lightshare.bean.DataVo |
| | | import com.flightfeather.uav.model.BaseDataPrep |
| | | import com.flightfeather.uav.model.BaseSOP |
| | | import com.flightfeather.uav.socket.bean.AirData |
| | | import com.flightfeather.uav.socket.bean.AirDataPackage |
| | | import com.flightfeather.uav.socket.eunm.FactorType |
| | |
| | | import kotlin.math.round |
| | | import kotlin.math.sqrt |
| | | |
| | | class EPWDataPrep : BaseDataPrep<DataVo, CompanySOP>() { |
| | | class EPWDataPrep : BaseDataPrep<DataVo, BaseSOP>() { |
| | | |
| | | // ååæ£ç´¢çæ°æ®è®°å½æ° |
| | | private val ncal = 15 |
| | |
| | | return mDataList |
| | | } |
| | | |
| | | override fun sopPrep(sopList: List<CompanySOP>): List<CompanySOP> { |
| | | override fun sopPrep(sopList: List<BaseSOP>): List<BaseSOP> { |
| | | return sopList |
| | | } |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.flightfeather.uav.model.epw |
| | | |
| | | import com.flightfeather.uav.lightshare.bean.DataVo |
| | | import com.flightfeather.uav.model.* |
| | | import com.flightfeather.uav.socket.eunm.FactorType |
| | | import java.math.BigDecimal |
| | | |
| | | /** |
| | | * ç½æ ¼åæéåææ¨¡å |
| | | * æ ¹æ®èµ°èªçæµæ°æ®ãå®ç¹çæµæ°æ®ï¼ç»åé£éãé£åãçæµç¹ä¸ç½æ ¼ä¸å¿çç¸å¯¹ä½ç½®çå ç´ ï¼è®¡ç®ç½æ ¼åºåå¯¹çæµåºåçå½±åç¨åº¦ |
| | | * @author riku |
| | | */ |
| | | class EPWGridModel : BaseModel<DataVo>() { |
| | | // é»è®¤çæµç¹ç»çº¬åº¦ |
| | | var defaultLocation: Pair<Double, Double>? = null |
| | | set(value) { |
| | | weights = listOf(WindDirWeight(value), WindDisWeight(value)) |
| | | } |
| | | override var dataPrep: BaseDataPrep<DataVo, BaseSOP> = EPWDataPrep() |
| | | override var factorTypes: List<FactorType> = WeightType.weightType |
| | | override var weights: List<BaseWeight<DataVo, BaseSOP>> = listOf(WindDirWeight(defaultLocation), WindDisWeight(defaultLocation)) |
| | | override var sections: List<BaseSection<DataVo, BaseSOP>> = listOf(NoSection()) |
| | | |
| | | override fun mDataCheck(m: DataVo): Boolean = !(m.lng == null || m.lng == 0.0 || m.lat == null || m.lat == 0.0) |
| | | |
| | | override fun sopCheck(s: BaseSOP): Boolean = |
| | | !(s.ciLongitude == null || s.ciLongitude == BigDecimal(0) || s.ciLatitude == null || s.ciLatitude == BigDecimal(0)) |
| | | } |
| | |
| | | * æ ¹æ®èµ°èªçæµæ°æ®ï¼ç»åé£éãé£åãçæµç¹ä¸ä¼ä¸çç¸å¯¹ä½ç½®çå ç´ ï¼è®¡ç®ä¼ä¸å¯¹çæµåºåçå½±åç¨åº¦ |
| | | * @author riku |
| | | */ |
| | | class EPWModel : BaseModel<DataVo, CompanySOP>() { |
| | | class EPWModel : BaseModel<DataVo>() { |
| | | |
| | | // é»è®¤çæµç¹ç»çº¬åº¦ |
| | | var defaultLocation: Pair<Double, Double>? = null |
| | |
| | | weights = listOf(WindDirWeight(value), WindDisWeight(value)) |
| | | } |
| | | |
| | | override var dataPrep: BaseDataPrep<DataVo, CompanySOP> = EPWDataPrep() |
| | | override var dataPrep: BaseDataPrep<DataVo, BaseSOP> = EPWDataPrep() |
| | | |
| | | override var factorTypes: List<FactorType> = WeightType.weightType |
| | | |
| | | override var weights: List<BaseWeight<DataVo, CompanySOP>> = listOf(WindDirWeight(defaultLocation), WindDisWeight(defaultLocation)) |
| | | override var weights: List<BaseWeight<DataVo, BaseSOP>> = listOf(WindDirWeight(defaultLocation), WindDisWeight(defaultLocation)) |
| | | |
| | | override var sections: List<BaseSection<DataVo, CompanySOP>> = listOf(TimeSection()) |
| | | override var sections: List<BaseSection<DataVo, BaseSOP>> = listOf(TimeSection()) |
| | | |
| | | override fun mDataCheck(m: DataVo): Boolean = !(m.lng == null || m.lng == 0.0 || m.lat == null || m.lat == 0.0) |
| | | |
| | | override fun sopCheck(s: CompanySOP): Boolean = |
| | | override fun sopCheck(s: BaseSOP): Boolean = |
| | | !(s.ciLongitude == null || s.ciLongitude == BigDecimal(0) || s.ciLatitude == null || s.ciLatitude == BigDecimal(0)) |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.flightfeather.uav.model.epw |
| | | |
| | | import com.flightfeather.uav.lightshare.bean.DataVo |
| | | import com.flightfeather.uav.model.* |
| | | |
| | | /** |
| | | * ä¸ååç±»ç»è®¡ |
| | | */ |
| | | class NoSection : BaseSection<DataVo, BaseSOP>() { |
| | | override val sectionValues: List<Double> = listOf(1.0) |
| | | |
| | | override val sectionType: List<String> = listOf("综å") |
| | | |
| | | override val tagClz: Class<out BaseTag> = NoTag::class.java |
| | | |
| | | override fun onSectionValue(mData: DataVo, sop: BaseSOP, effect: BaseEffect): Double { |
| | | return .0 |
| | | } |
| | | } |
| | |
| | | |
| | | import com.flightfeather.uav.lightshare.bean.CompanySOP |
| | | import com.flightfeather.uav.lightshare.bean.DataVo |
| | | import com.flightfeather.uav.model.BaseEffect |
| | | import com.flightfeather.uav.model.BaseSection |
| | | import com.flightfeather.uav.model.BaseTag |
| | | import com.flightfeather.uav.model.TimeTag |
| | | import com.flightfeather.uav.model.* |
| | | |
| | | /** |
| | | * æ¶æ®µåç±»ç»è®¡ |
| | | * [6,9,12,14,17,20]; [6,9)为æ©ä¸ï¼ä¹å便¬¡ä¸ºä¸åï¼ä¸åï¼ä¸åï¼åæåæä¸ |
| | | */ |
| | | class TimeSection : BaseSection<DataVo, CompanySOP>() { |
| | | class TimeSection : BaseSection<DataVo, BaseSOP>() { |
| | | |
| | | override val sectionValues: List<Double> = listOf(6.0, 9.0, 12.0, 14.0, 17.0, 20.0) |
| | | |
| | |
| | | |
| | | override val constType: List<String> = listOf("综å") |
| | | |
| | | override fun onSectionValue(mData: DataVo, sop: CompanySOP, effect: BaseEffect): Double { |
| | | override fun onSectionValue(mData: DataVo, sop: BaseSOP, effect: BaseEffect): Double { |
| | | return getHour(mData.time!!) |
| | | } |
| | | |
| | |
| | | |
| | | import com.flightfeather.uav.lightshare.bean.CompanySOP |
| | | import com.flightfeather.uav.lightshare.bean.DataVo |
| | | import com.flightfeather.uav.model.BaseSOP |
| | | import com.flightfeather.uav.model.BaseWeight |
| | | import com.flightfeather.uav.socket.eunm.FactorType |
| | | import kotlin.math.PI |
| | |
| | | /** |
| | | * é£åæé |
| | | */ |
| | | class WindDirWeight(var defaultLocation: Pair<Double, Double>?) : BaseWeight<DataVo, CompanySOP>() { |
| | | class WindDirWeight(var defaultLocation: Pair<Double, Double>?) : BaseWeight<DataVo, BaseSOP>() { |
| | | |
| | | override val tag: String = "é£åæé" |
| | | |
| | |
| | | |
| | | override val weights: List<Double> = listOf(1.0, 0.8, 0.5, 0.2, 0.1) |
| | | |
| | | override fun onWeightFactor(mData: DataVo, sop: CompanySOP): Double { |
| | | override fun onWeightFactor(mData: DataVo, sop: BaseSOP): Double { |
| | | val p1 = if (mData.lng == null || mData.lat == null || mData.lng == .0 || mData.lat == .0) defaultLocation else Pair(mData.lng!!, mData.lat!!) |
| | | p1 ?: return .0 |
| | | val p2 = Pair(sop.ciLongitude!!.toDouble(), sop.ciLatitude!!.toDouble()) |
| | |
| | | |
| | | import com.flightfeather.uav.lightshare.bean.CompanySOP |
| | | import com.flightfeather.uav.lightshare.bean.DataVo |
| | | import com.flightfeather.uav.model.BaseSOP |
| | | import com.flightfeather.uav.model.BaseWeight |
| | | import com.flightfeather.uav.socket.eunm.FactorType |
| | | import kotlin.math.abs |
| | |
| | | * é£éè·ç¦»æé |
| | | * çæµç¹ä¸æ±¡ææºä¹é´çç©çè·ç¦»ä¸å½åé£éå¾åºçæé |
| | | */ |
| | | class WindDisWeight(var defaultLocation: Pair<Double, Double>?) : BaseWeight<DataVo, CompanySOP>() { |
| | | class WindDisWeight(var defaultLocation: Pair<Double, Double>?) : BaseWeight<DataVo, BaseSOP>() { |
| | | |
| | | override val tag: String = "é£éè·ç¦»æé" |
| | | |
| | |
| | | |
| | | override val weights: List<Double> = listOf(1.0, 0.8, 0.6, 0.5, 0.3, 0.0) |
| | | |
| | | override fun onWeightFactor(mData: DataVo, sop: CompanySOP): Double? { |
| | | override fun onWeightFactor(mData: DataVo, sop: BaseSOP): Double? { |
| | | val p1 = if (mData.lng == null || mData.lat == null || mData.lng == .0 || mData.lat == .0) defaultLocation else Pair(mData.lng!!, mData.lat!!) |
| | | p1 ?: return .0 |
| | | val p2 = Pair(sop.ciLongitude!!.toDouble(), sop.ciLatitude!!.toDouble()) |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.flightfeather.uav.lightshare.service.impl |
| | | |
| | | import com.flightfeather.uav.lightshare.service.EPWModelService |
| | | import com.flightfeather.uav.lightshare.service.ElectricityService |
| | | import junit.framework.TestCase |
| | | import org.junit.Test |
| | | import org.junit.runner.RunWith |
| | | import org.springframework.beans.factory.annotation.Autowired |
| | | import org.springframework.boot.test.context.SpringBootTest |
| | | import org.springframework.test.context.junit4.SpringRunner |
| | | |
| | | @RunWith(SpringRunner::class) |
| | | @SpringBootTest |
| | | class EPWModelServiceImplTest : TestCase() { |
| | | |
| | | @Autowired |
| | | lateinit var epwModelService: EPWModelService |
| | | |
| | | @Test |
| | | fun testGetEpwModelResult() { |
| | | val r= epwModelService.getEpwModelResult("0d0000000001", "2021-07-01 00:00:00", "2021-07-01 23:59:59", 1000.0) |
| | | println(r) |
| | | } |
| | | } |