From 74ffc8ebf3a25d2e3cee758954ce6efc163cb864 Mon Sep 17 00:00:00 2001 From: feiyu02 <risaku@163.com> Date: 星期四, 02 十二月 2021 16:11:57 +0800 Subject: [PATCH] 1. 用电量日分析 --- src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/ElectricityServiceImpl.kt | 76 +++++++++++++++++++++---------------- 1 files changed, 43 insertions(+), 33 deletions(-) diff --git a/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/ElectricityServiceImpl.kt b/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/ElectricityServiceImpl.kt index 01496d2..f443876 100644 --- a/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/ElectricityServiceImpl.kt +++ b/src/main/kotlin/com/flightfeather/uav/lightshare/service/impl/ElectricityServiceImpl.kt @@ -1,25 +1,26 @@ package com.flightfeather.uav.lightshare.service.impl import com.flightfeather.uav.common.utils.DateUtil +import com.flightfeather.uav.dataprocess.ElectricDailyAnalysis import com.flightfeather.uav.domain.entity.CompanyDevice import com.flightfeather.uav.domain.entity.ElectricMinuteValue import com.flightfeather.uav.domain.entity.toAirData import com.flightfeather.uav.domain.mapper.CompanyDeviceMapper import com.flightfeather.uav.domain.mapper.ElectricMinuteValueMapper -import com.flightfeather.uav.lightshare.bean.BaseResponse -import com.flightfeather.uav.lightshare.bean.DataHead -import com.flightfeather.uav.lightshare.bean.DataVo -import com.flightfeather.uav.lightshare.bean.ElectricVo +import com.flightfeather.uav.lightshare.bean.* import com.flightfeather.uav.lightshare.eunm.ElectricityType import com.flightfeather.uav.lightshare.service.ElectricityService import com.flightfeather.uav.socket.bean.AirData import com.github.pagehelper.PageHelper +import org.springframework.format.annotation.DateTimeFormat import org.springframework.stereotype.Service import tk.mybatis.mapper.entity.Example import java.text.SimpleDateFormat +import java.time.LocalDate import java.time.LocalDateTime import java.time.ZoneId import java.time.format.DateTimeFormatter +import java.time.format.DateTimeParseException import kotlin.math.round @Service @@ -29,11 +30,9 @@ private var dateFormatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ss") private var dateFormatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm") + private var dateFormatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") - override fun getMinuteData( - deviceCode: String, startTime: String?, - endTime: String?, page: Int?, perPage: Int? - ): BaseResponse<List<ElectricMinuteValue>> { + override fun getMinuteData(deviceCode: String, startTime: String?, endTime: String?, page: Int?, perPage: Int?): BaseResponse<List<ElectricMinuteValue>> { val perP = perPage ?: 60 val p = page ?: 1 val sTime = startTime?.let { dateFormatter.parse(it) } @@ -201,7 +200,7 @@ d1eA = d?.mvElectricityA ?: .0 d1eB = d?.mvElectricityB ?: .0 d1eC = d?.mvElectricityC ?: .0 - val s = getStatus(d, d1) + val s = ElectricDailyAnalysis.getStatus(d, d1) d1Status = s.first d1StatusName = s.second d1Avg = s.third @@ -239,7 +238,7 @@ d2eA = d?.mvElectricityA ?: .0 d2eB = d?.mvElectricityB ?: .0 d2eC = d?.mvElectricityC ?: .0 - val s = getStatus(d, d2) + val s = ElectricDailyAnalysis.getStatus(d, d2) d2Status = s.first d2StatusName = s.second d2Avg = s.third @@ -277,32 +276,43 @@ return BaseResponse(true, head = DataHead(pageInfo.pageNum, pageInfo.pages), data = result) } - 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) } + override fun dailyStatistics(cId: String, startTime: String?, endTime: String?): BaseResponse<List<ElectricDailyInfo>> { + // 鏍规嵁浼佷笟id鑾峰彇瀵瑰簲璁惧 + val devices = companyDeviceMapper.selectByExample(Example(CompanyDevice::class.java).apply { + createCriteria().andEqualTo("cdCompanyId", cId) + }) + val deviceCodeList = mutableListOf<String>() + devices.forEach { it?.let { deviceCodeList.add(it.cdDeviceCode) }} + + val st:LocalDateTime + val et:LocalDateTime + // 褰撴病鏈夊紑濮嬫垨缁撴潫鏃堕棿鏃讹紝浣跨敤鏈�鏂颁竴鏉℃暟鎹椂闂寸殑褰撳ぉ浣滀负缁熻鏃堕棿 + if (startTime == null || endTime == null) { + val em = electricMinuteValueMapper.selectOneByExample(Example(ElectricMinuteValue::class.java).apply { + createCriteria().andIn("mvStatCode", deviceCodeList) + orderBy("mvDataTime").desc() + }) + val dataTime = LocalDateTime.ofInstant(em?.mvDataTime?.toInstant(), ZoneId.systemDefault()) + st = dataTime.withHour(0).withMinute(0).withSecond(0) + et = dataTime.withHour(23).withMinute(59).withSecond(59) + } + // 褰撴湁寮�濮嬬粨鏉熸椂闂存椂锛屽垽鏂牸寮忔槸鍚︽纭� + else { + try { + st = LocalDateTime.parse(startTime, dateFormatter3).withHour(0).withMinute(0).withSecond(0) + et = LocalDateTime.parse(endTime, dateFormatter3).withHour(23).withMinute(59).withSecond(59) + } catch (e: DateTimeParseException) { + return BaseResponse(false, "鏃堕棿鏍煎紡閿欒锛屽簲涓簓yyy-MM-dd hh:mm:dd") } } - 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 dataList = electricMinuteValueMapper.selectByExample(Example(ElectricMinuteValue::class.java).apply { + createCriteria().andIn("mvStatCode", deviceCodeList) + .andBetween("mvDataTime", st, et) + orderBy("mvDataTime") + }) + val result = ElectricDailyAnalysis.analysis(devices, dataList) - 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) + return BaseResponse(true, data = result) } } \ No newline at end of file -- Gitblit v1.9.3