feiyu02
2024-01-09 c1becf4cbd2e99601ce011c14b8742427249cfb4
src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/AopDataAnalysis.kt
ÎļþÃû´Ó src/main/kotlin/cn/flightfeather/supervision/business/autooutput/score/AopDataAnalysis.kt ÐÞ¸Ä
@@ -1,4 +1,4 @@
package cn.flightfeather.supervision.business.autooutput.score
package cn.flightfeather.supervision.business.autooutput.dataanalysis
import cn.flightfeather.supervision.business.autooutput.AopOutput
import cn.flightfeather.supervision.business.autooutput.datasource.AopDataConfig
@@ -22,13 +22,21 @@
) {
    /**
     * ç»Ÿè®¡ä¸­é—´å­˜å‚¨ç»“æž„
     * ç»Ÿè®¡æ•°æ® ä¸´æ—¶å­˜å‚¨ç»“æž„
     */
    inner class TempResult(
        var total: Double = .0,
        var count: Int = 0,
    ){
        fun avg(): Double {
        var avg: Double = -1.0
            get() {
                if (field == -1.0) {
                    field = avg()
                }
                return field
            }
        private fun avg(): Double {
            return if (count == 0) {
                .0
            } else {
@@ -53,25 +61,39 @@
    /**
     * æ‰§è¡Œç»Ÿè®¡é€»è¾‘
     */
    fun execute() {
        val dAvg = districtAvg(source)
    fun execute(avg: Double? = null) {
        //计算区均值
        val dAvg = avg ?: districtAvg(source)
        println("均值:${dAvg}")
        //循环处理每个场景
        source?.loop { _, evaluationScene ->
            //获取原始监测数据
            val dataList = fetchDataResources(evaluationScene)
            //计算统计结果
            val tempExceedTimes = TempResult()
            val tempAvg = TempResult()
            val tempMax = TempResult()
            val tempMin = TempResult()
            var tempExceedTimes = TempResult()
            var tempAvg = TempResult()
            var tempMax = TempResult()
            var tempMin = TempResult()
            dataList.forEach {
                it.forEach {t ->
                // ç›‘测点有多台设备时,每台设备单独统计,取均值最高的为统计结果
                val _tempExceedTimes = TempResult()
                val _tempAvg = TempResult()
                val _tempMax = TempResult()
                val _tempMin = TempResult()
                it.forEach { t ->
                    t?.let {
                        exceedTimes(t, tempExceedTimes)
                        avg(t, tempAvg)
                        max(t, tempMax)
                        min(t, tempMin)
                        exceedTimes(t, _tempExceedTimes)
                        avg(t, _tempAvg)
                        max(t, _tempMax)
                        min(t, _tempMin)
                    }
                }
                // ä¿ç•™å‡å€¼æœ€é«˜çš„一台设备
                if (_tempAvg.avg > tempAvg.avg) {
                    tempExceedTimes = _tempExceedTimes
                    tempAvg = _tempAvg
                    tempMax = _tempMax
                    tempMin = _tempMin
                }
            }
            val dustDataResult = DustDataResult().apply {
@@ -79,7 +101,7 @@
                drSceneName = evaluationScene.scene.value?.name
                drTime = source?.config?.startTime
                drExceedTimes = tempExceedTimes.count
                drAvg = tempAvg.avg()
                drAvg = tempAvg.avg
                drMax = tempMax.total
                drMin = tempMin.total
                drOverAvgPer = overAvgRate(drAvg, dAvg)
@@ -125,7 +147,7 @@
    /**
     * è¶…月均值百分比
     */
    abstract fun overAvgRate(avg: Double, dAvg: Double?): Double
    abstract fun overAvgRate(avg: Double, dAvg: Double?): Double?
    /**
     * æ•°æ®ä¸ªæ•°