| | |
| | | // 返回结果 |
| | | 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)) { |
| | |
| | | // 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)!! |
| | |
| | | // 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) |
| | |
| | | // 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 |
| | | } |