| | |
| | | import com.flightfeather.uav.lightshare.bean.ElectricDailyInfo |
| | | import java.time.LocalDateTime |
| | | import java.time.ZoneId |
| | | import kotlin.math.round |
| | | |
| | | /** |
| | | * 用电量日分析 |
| | |
| | | if (dataMap[it.mvStatCode]?.containsKey(day) != true) dataMap[it.mvStatCode]?.put(day, mutableListOf()) |
| | | val dayList = dataMap[it.mvStatCode]?.get(day)!! |
| | | dayList.add(it) |
| | | // 数据对应状态 |
| | | val device = deviceMap[it.mvStatCode] |
| | | val status = getStatus(it, device) |
| | | |
| | | // 2.1 根据数据切换当前设备类型 |
| | | if (!dailyInfoMap.containsKey(day)) dailyInfoMap[day] = ElectricDailyInfo() |
| | | val dayResult = dailyInfoMap[day]!! |
| | | dayResult.day = day |
| | | dayResult.changeType(deviceMap[it.mvStatCode]) |
| | | dayResult.changeType(device) |
| | | // 2.2 每日获取的首个数据,即为当日该设备开启时间 |
| | | if (dayList.size == 1) dayResult.setStartTime(it.mvDataTime) |
| | | // 2.3 每个数据为分钟均值,总数代表开启时长 |
| | | dayResult.addRunTime(1) |
| | | // 2.4 统计当日设备运行时段(小时) |
| | | // 2.3 每日获取的首个为运行状态的数据,即为当日该设备正式运行开始时间 |
| | | dayResult.setRunningTime(status, it) |
| | | // 2.4 每个数据为分钟均值,总数代表开启时长 |
| | | dayResult.addRunTime(status) |
| | | // 2.5 统计当日设备运行时段(小时) |
| | | val hour = LocalDateTime.ofInstant(it.mvDataTime.toInstant(), ZoneId.systemDefault()).hour |
| | | dayResult.addRunPeriod(hour) |
| | | } |
| | | // 2.5 统计各台设备每日结束时间及分析结果 |
| | | // 2.6 统计各台设备每日结束时间及分析结果 |
| | | dataMap.forEach { (dCode, dayMap) -> |
| | | dayMap.forEach { (day, list) -> |
| | | dailyInfoMap[day]?.apply { |
| | | |
| | | changeType(deviceMap[dCode]) |
| | | setEndTime(list.last().mvDataTime) |
| | | } |
| | |
| | | |
| | | return result |
| | | } |
| | | |
| | | /** |
| | | * 获取设备当前运行状态 |
| | | * @param e 设备用电量监测数据 |
| | | * @param d 企业设备信息 |
| | | * @return 数据对应结果信息:<状态编号,状态描述,电流均值> |
| | | */ |
| | | fun getStatus(e: ElectricMinuteValue?, d: CompanyDevice?): Triple<String, String, Double> { |
| | | var values = mutableListOf<Int>().apply { |
| | | d?.cdLimits?.split(";")?.forEach { |
| | | it.toIntOrNull()?.let { i -> add(i) } |
| | | } |
| | | } |
| | | var status = d?.cdStatus?.split(";") ?: emptyList() |
| | | var statusNames = d?.cdStatusName?.split(";") ?: emptyList() |
| | | if (values.isEmpty()) values = mutableListOf(1, 100) |
| | | if (status.isEmpty()) status = listOf("0", "2", "3") |
| | | if (statusNames.isEmpty()) statusNames = listOf("待机", "运行", "超负荷") |
| | | if (e == null) { |
| | | return Triple(status.first(), statusNames.first(), .0) |
| | | } |
| | | |
| | | val electricityList = mutableListOf<Double>() |
| | | electricityList.add(e.mvElectricityA) |
| | | electricityList.add(e.mvElectricityB) |
| | | electricityList.add(e.mvElectricityC) |
| | | |
| | | val avg = round(electricityList.average() * 100) / 100 |
| | | for (i in values.indices) { |
| | | if (avg < values[i]) { |
| | | return Triple(status[i], statusNames[i], avg) |
| | | } |
| | | } |
| | | return Triple(status.last(), statusNames.last(), avg) |
| | | } |
| | | } |