| | |
| | | import java.time.LocalDateTime |
| | | import java.time.ZoneId |
| | | import java.time.format.DateTimeFormatter |
| | | import kotlin.math.round |
| | | |
| | | @Service |
| | | class ElectricityServiceImpl( |
| | |
| | | null |
| | | } |
| | | |
| | | var lsT = LocalDateTime.ofInstant(sT?.toInstant(), ZoneId.systemDefault()).withSecond(0) |
| | | val leT = LocalDateTime.ofInstant(eT?.toInstant(), ZoneId.systemDefault()).withSecond(0) |
| | | if (sT == null || eT == null) { |
| | | return BaseResponse(true, data = result) |
| | | } |
| | | |
| | | if (sT != null && eT != null) { |
| | | var lsT = LocalDateTime.ofInstant(sT.toInstant(), ZoneId.systemDefault()).withSecond(0) |
| | | val leT = LocalDateTime.ofInstant(eT.toInstant(), ZoneId.systemDefault()).withSecond(0) |
| | | |
| | | // 根据两台设备的最长起始时间,计算其中每一分钟的对应均值 |
| | | while (!lsT.isAfter(leT)) { |
| | | // 两台设备的数据根据时间合并为一个结构体 |
| | | val vo = ElectricVo(lsT.format(dateFormatter2)) |
| | | |
| | | // FIXME: 2021/11/22 此处由于前端设备的采样时间不标准 ,采样周期并不是严格的1分钟,导致采样时间有时会缺少1分钟的数据 |
| | | // FIXME: 2021/11/22 因此,当某一分钟该设备数据轮空时,采用前一个数据作为填充 |
| | | if (dataList1.isNotEmpty()) { |
| | | val d = dataList1[0] |
| | | val t = LocalDateTime.ofInstant(d?.mvDataTime?.toInstant(), ZoneId.systemDefault()).withSecond(0) |
| | |
| | | val s = getStatus(d, d1) |
| | | d1Status = s.first |
| | | d1StatusName = s.second |
| | | d1Avg = s.third |
| | | } |
| | | dataList1.removeAt(0) |
| | | } else { |
| | | result.lastOrNull()?.let { |
| | | vo.apply { |
| | | d1eA = it.d1eA |
| | | d1eB = it.d1eB |
| | | d1eC = it.d1eC |
| | | d1Status = it.d1Status |
| | | d1StatusName = it.d1StatusName |
| | | d1Avg = it.d1Avg |
| | | } |
| | | } |
| | | } |
| | | } else { |
| | | result.lastOrNull()?.let { |
| | | vo.apply { |
| | | d1eA = it.d1eA |
| | | d1eB = it.d1eB |
| | | d1eC = it.d1eC |
| | | d1Status = it.d1Status |
| | | d1StatusName = it.d1StatusName |
| | | d1Avg = it.d1Avg |
| | | } |
| | | } |
| | | } |
| | | if (dataList2.isNotEmpty()) { |
| | |
| | | val s = getStatus(d, d2) |
| | | d2Status = s.first |
| | | d2StatusName = s.second |
| | | d2Avg = s.third |
| | | } |
| | | dataList2.removeAt(0) |
| | | } else { |
| | | result.lastOrNull()?.let { |
| | | vo.apply { |
| | | d2eA = it.d2eA |
| | | d2eB = it.d2eB |
| | | d2eC = it.d2eC |
| | | d2Status = it.d2Status |
| | | d2StatusName = it.d2StatusName |
| | | d2Avg = it.d2Avg |
| | | } |
| | | } |
| | | } |
| | | } else { |
| | | result.lastOrNull()?.let { |
| | | vo.apply { |
| | | d2eA = it.d2eA |
| | | d2eB = it.d2eB |
| | | d2eC = it.d2eC |
| | | d2Status = it.d2Status |
| | | d2StatusName = it.d2StatusName |
| | | d2Avg = it.d2Avg |
| | | } |
| | | } |
| | | } |
| | | result.add(vo) |
| | | |
| | | lsT = lsT.plusMinutes(1) |
| | | } |
| | | } |
| | | |
| | | return BaseResponse(true, head = DataHead(pageInfo.pageNum, pageInfo.pages), data = result) |
| | | } |
| | | |
| | | // FIXME: 2021/11/5 此处暂时写死,后续修改 |
| | | private fun getStatus(e: ElectricMinuteValue?, d: CompanyDevice?): Pair<String, String> { |
| | | private 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) } |
| | |
| | | if (status.isEmpty()) status = listOf("0", "2", "3") |
| | | if (statusNames.isEmpty()) statusNames = listOf("待机", "运行", "超负荷") |
| | | if (e == null) { |
| | | return Pair(status.first(), statusNames.first()) |
| | | return Triple(status.first(), statusNames.first(), .0) |
| | | } |
| | | |
| | | val electricityList = mutableListOf<Double>() |
| | |
| | | electricityList.add(e.mvElectricityB) |
| | | electricityList.add(e.mvElectricityC) |
| | | |
| | | val avg = electricityList.average() |
| | | val avg = round(electricityList.average() * 100) / 100 |
| | | for (i in values.indices) { |
| | | if (avg < values[i]) { |
| | | return Pair(status[i], statusNames[i]) |
| | | return Triple(status[i], statusNames[i], avg) |
| | | } |
| | | } |
| | | return Pair(status.last(), statusNames.last()) |
| | | return Triple(status.last(), statusNames.last(), avg) |
| | | } |
| | | } |