feiyu02
2021-12-30 88ae069fcf657c1790bb04b444e150c06f04e5f6
src/main/kotlin/com/flightfeather/uav/dataprocess/ElectricDailyAnalysis.kt
@@ -19,11 +19,11 @@
        // 返回结果
        val result = mutableListOf<ElectricDailyInfo>()
        // 每日统计信息
        val dailyInfoMap = mutableMapOf<String, ElectricDailyInfo>()
        val dailyInfoMap = mutableMapOf<Int, ElectricDailyInfo>()
        // 1.数据准备
        val deviceMap = mutableMapOf<String, CompanyDevice>()
        val dataMap = mutableMapOf<String, MutableMap<String, MutableList<ElectricMinuteValue>>>()
        val dataMap = mutableMapOf<String, MutableMap<Int, MutableList<ElectricMinuteValue>>>()
        deviceList.forEach {
            // 监测数据
            if (!dataMap.containsKey(it.cdDeviceCode)) {
@@ -35,7 +35,8 @@
        // 2.轮询数据,统计每日的各项特征
        dataList.forEach {
            // 获取日期
            val day = DateUtil.instance.dateToString(it.mvDataTime, DateUtil.DateStyle.YYYY_MM_DD) ?: ""
            val date = DateUtil.instance.dateToString(it.mvDataTime, DateUtil.DateStyle.YYYYMMDD) ?: ""
            val day = date.toIntOrNull() ?: 0
            // 每日对应一组数据
            if (dataMap[it.mvStatCode]?.containsKey(day) != true) dataMap[it.mvStatCode]?.put(day, mutableListOf())
            val dayList = dataMap[it.mvStatCode]?.get(day)!!
@@ -47,7 +48,8 @@
            // 2.1 根据数据切换当前设备类型
            if (!dailyInfoMap.containsKey(day)) dailyInfoMap[day] = ElectricDailyInfo()
            val dayResult = dailyInfoMap[day]!!
            dayResult.day = day
            dayResult.day = DateUtil.instance.dateToString(it.mvDataTime, DateUtil.DateStyle.YYYY_MM_DD) ?: ""
            dayResult.dayIndex = day
            dayResult.changeType(device)
            // 2.2 每日获取的首个数据,即为当日该设备开启时间
            if (dayList.size == 1) dayResult.setStartTime(it.mvDataTime)
@@ -58,18 +60,41 @@
            // 2.5 统计当日设备运行时段(小时)
            val hour = LocalDateTime.ofInstant(it.mvDataTime.toInstant(), ZoneId.systemDefault()).hour
            dayResult.addRunPeriod(hour)
            // 2.6 累计用电量
            dayResult.addPower(it)
            // 2.7 设备首次从运行变为待机或关闭状态时,认为是设备的关闭时间
            dayResult.setEndTime(status, it)
        }
        // 2.6 统计各台设备每日结束时间及分析结果
        // 2.6 统计各台设备分析结果
        dataMap.forEach { (dCode, dayMap) ->
            dayMap.forEach { (day, list) ->
                dailyInfoMap[day]?.apply {
                    changeType(deviceMap[dCode])
                    setEndTime(list.last().mvDataTime)
                    setEndTime2(list.last().mvDataTime)
                    getResult()
                }
            }
        }
        dailyInfoMap.forEach { (_,v)-> result += v }
        result.sortBy { it.dayIndex }
        for (i in result.indices) {
            if (i > 0) {
                val last = result[i - 1]
                val d = result[i]
                // 针对两种设备,当昨天的设备未关闭,且今天的开启时间为0点0分内时,认为设备跨日运行
                if (last.plETimeStr == null && d.plRTimeStr?.substring(11, 16) == "00:00") {
                    d.plRTimeStr = null
                    d.rTimeDiff = null
                    d.sResult = true
                }
                if (last.pfETimeStr == null && d.pfRTimeStr?.substring(11, 16) == "00:00") {
                    d.pfRTimeStr = null
                    d.rTimeDiff = null
                    d.sResult = true
                }
            }
        }
        return result
    }