feiyu02
2024-08-13 b8cc591541b88dd2bb93f111f8e8075842dce7ca
src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/AopDataAnalysis.kt
@@ -70,48 +70,58 @@
            //获取原始监测数据
            val dataList = fetchDataResources(evaluationScene)
            //计算统计结果
            var tempExceedTimes = TempResult()
            var tempAvg = TempResult()
            var tempMax = TempResult()
            var tempMin = TempResult()
//            var tempExceedTimes = TempResult()
//            var tempAvg = TempResult()
//            var tempMax = TempResult()
//            var tempMin = TempResult()
            dataList.forEach {
                // 监测点有多台设备时,每台设备单独统计,取均值最高的为统计结果
                val _tempExceedTimes = TempResult()
                val _tempAvg = TempResult()
                val _tempMax = TempResult()
                val _tempMin = TempResult()
                // 监测点有多台设备时,每台设备单独记录
                val deviceCode = if (it.isNotEmpty()) {
                    getDeviceCode(it[0])
                } else {
                    null
                }
                val tempExceedTimes = TempResult()
                val tempAvg = TempResult()
                val tempMax = TempResult()
                val tempMin = TempResult()
//                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
//                if (_tempAvg.avg > tempAvg.avg) {
//                    tempExceedTimes = _tempExceedTimes
//                    tempAvg = _tempAvg
//                    tempMax = _tempMax
//                    tempMin = _tempMin
//                }
                val dustDataResult = DustDataResult().apply {
                    drSceneId = evaluationScene.scene.value?.guid
                    drSceneName = evaluationScene.scene.value?.name
                    drDeviceCode = deviceCode
                    drTime = source?.config?.startTime
                    drExceedTimes = tempExceedTimes.count
                    drAvg = tempAvg.avg
                    drMax = tempMax.total
                    drMin = tempMin.total
                    drOverAvgPer = overAvgRate(drAvg, dAvg)
                    drDataNum = count(dataList)
                    // 当数据量为0时,超月度区均值百分比变为0
                    if (drDataNum == 0) drOverAvgPer = .0
                    drEffectiveRate = effectiveRate(dataList, evaluationScene)
                }
                //更新入库
                aopOutput.toDbDataResult(dustDataResult)
            }
            val dustDataResult = DustDataResult().apply {
                drSceneId = evaluationScene.scene.value?.guid
                drSceneName = evaluationScene.scene.value?.name
                drTime = source?.config?.startTime
                drExceedTimes = tempExceedTimes.count
                drAvg = tempAvg.avg
                drMax = tempMax.total
                drMin = tempMin.total
                drOverAvgPer = overAvgRate(drAvg, dAvg)
                drDataNum = count(dataList)
                // 当数据量为0时,超月度区均值百分比变为0
                if (drDataNum == 0) drOverAvgPer = .0
                drEffectiveRate = effectiveRate(dataList, evaluationScene)
            }
            //更新入库
            aopOutput.toDbDataResult(dustDataResult)
        }
    }
@@ -122,6 +132,11 @@
    abstract fun districtAvg(source: AopDataSource?): Double?
    /**
     * 获取设备编号
     */
    abstract fun getDeviceCode(data: T?): String?
    /**
     * 获取原始监测数据
     */
    abstract fun fetchDataResources(evaluationScene: AopDataSource.EvaluationScene): List<List<T?>>