| | |
| | | |
| | | import com.flightfeather.monitor.domain.ds1.entity.* |
| | | import com.flightfeather.monitor.enumration.dust.ExceptionType |
| | | import java.time.LocalDate |
| | | import java.time.ZoneId |
| | | import java.util.* |
| | | import kotlin.math.round |
| | | |
| | | /** |
| | | * 扬尘监测数据风险分析基类 |
| | |
| | | /** |
| | | * 每轮次的初始化 |
| | | */ |
| | | fun roundInit() { |
| | | resultList.add(RiskValue()) |
| | | fun roundInit(mnCode: String, date: LocalDate) { |
| | | resultList.add(RiskValue().apply { |
| | | this.mnCode = mnCode |
| | | lst = Date.from(date.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant()) |
| | | type = "day" |
| | | }) |
| | | } |
| | | |
| | | /** |
| | |
| | | riskExceedRate(res, list) |
| | | riskExceptionRepetitionRate(res, dList) |
| | | riskExceptionType(res, dList) |
| | | onDone(res) |
| | | } |
| | | |
| | | /** |
| | | * 在线率风险值 |
| | | */ |
| | | fun riskOnlineRate(riskValue: RiskValue, data: DustStatisticsValue) { |
| | | val dayOnline = data.dayOnline.substring(0, data.dayOnline.lastIndex).toDouble() / 100 |
| | | riskValue.onlineRisk = 1 - dayOnline |
| | | val dayOnline = data.dayOnline |
| | | riskValue.onlineRisk = round((1 - dayOnline) * 10000) / 10000 |
| | | } |
| | | |
| | | /** |
| | | * 有效率风险值 |
| | | */ |
| | | fun riskValidRate(riskValue: RiskValue, data: DustStatisticsValue) { |
| | | val dayValid = data.dayValid.substring(0, data.dayValid.lastIndex).toDouble() / 100 |
| | | riskValue.validRisk = 1 - dayValid |
| | | val dayValid = data.dayValid |
| | | riskValue.validRisk = round((1 - dayValid) * 10000) / 10000 |
| | | } |
| | | |
| | | /** |
| | |
| | | var v2 = 0 |
| | | // 日临近超标次数/7 |
| | | var v3 = 0 |
| | | list.forEach {d -> |
| | | list.forEach { d -> |
| | | if (d == null) return@forEach |
| | | when { |
| | | d.dustValue >= 2.0 -> v2++ |
| | |
| | | var v1 = 0 |
| | | var v2 = 0 |
| | | var v3 = 0 |
| | | list.forEach { d-> |
| | | list.forEach { d -> |
| | | if (d == null) return@forEach |
| | | when (d.exceptionType) { |
| | | ExceptionType.TYPE4.value -> v1++ |
| | |
| | | ExceptionType.TYPE6.value -> v3++ |
| | | } |
| | | } |
| | | val e1 = upperLimit((v1 - 1) / 4.0) |
| | | val e2 = upperLimit((v2 - 1) / 3.0) |
| | | val e3 = upperLimit((v3 - 1) / 2.0) |
| | | riskValue.typicalExceptionRepetitionRate = upperLimit(e1 + e2 + e3) |
| | | val e1 = settingRange((v1 - 1) / 4.0) |
| | | val e2 = settingRange((v2 - 1) / 3.0) |
| | | val e3 = settingRange((v3 - 1) / 2.0) |
| | | riskValue.typicalExceptionRepetitionRate = settingRange(e1 + e2 + e3) |
| | | } |
| | | |
| | | /** |
| | |
| | | riskValue.exceptionTypeAggregation = exceptionTypes.size / 6.0 |
| | | } |
| | | |
| | | fun onDone(riskValue: RiskValue) { |
| | | riskValue.type = "day" |
| | | } |
| | | |
| | | private fun upperLimit(d:Double):Double = if (d > 1) 1.0 else d |
| | | private fun settingRange(d: Double): Double = if (d > 1) 1.0 else if (d < 0) .0 else d |
| | | } |