| | |
| | | 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.service.ElectricityService |
| | | import com.flightfeather.uav.socket.bean.AirData |
| | | import com.github.pagehelper.PageHelper |
| | | import org.springframework.stereotype.Service |
| | | import tk.mybatis.mapper.entity.Example |
| | | import java.text.SimpleDateFormat |
| | | import java.time.LocalDateTime |
| | | import java.time.ZoneId |
| | | import java.time.format.DateTimeFormatter |
| | | |
| | | @Service |
| | | class ElectricityServiceImpl( |
| | |
| | | ) : ElectricityService { |
| | | |
| | | private var dateFormatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ss") |
| | | private var dateFormatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm") |
| | | |
| | | override fun getMinuteData( |
| | | deviceCode: String, startTime: String?, |
| | |
| | | |
| | | return BaseResponse(true, data = result) |
| | | } |
| | | |
| | | override fun getElectricityInfo(cId: String, startTime: String?, endTime: String?, page: Int?, perPage: Int?): BaseResponse<List<ElectricVo>> { |
| | | val perP = perPage ?: 60 |
| | | val p = page ?: 1 |
| | | val sTime = startTime?.let { dateFormatter.parse(it) } |
| | | val eTime = endTime?.let { dateFormatter.parse(it) } |
| | | val result = mutableListOf<ElectricVo>() |
| | | val deviceCodeList = companyDeviceMapper.selectByExample(Example(CompanyDevice::class.java).apply { |
| | | createCriteria().andEqualTo("cdCompanyId", cId) |
| | | }) |
| | | //产线风机 |
| | | var d1: String? = null |
| | | //废气净化装置 |
| | | var d2: String? = null |
| | | |
| | | deviceCodeList.forEach { |
| | | // FIXME: 2021/11/5 此处暂时写死,后续修改 |
| | | if (it?.cdDeviceCode == "31011020210602" || it?.cdDeviceCode == "31011020210603") { |
| | | d1 = it.cdDeviceCode |
| | | }else if (it?.cdDeviceCode == "31011020210601" || it?.cdDeviceCode == "31011020210604") { |
| | | d2 = it.cdDeviceCode |
| | | } |
| | | } |
| | | |
| | | var pageInfo = PageHelper.startPage<ElectricMinuteValue>(p, perP) |
| | | val dataList1 = electricMinuteValueMapper.selectByExample(Example(ElectricMinuteValue::class.java).apply { |
| | | createCriteria().andEqualTo("mvStatCode", d1) |
| | | .apply { |
| | | sTime?.let { andGreaterThanOrEqualTo("mvDataTime", it) } |
| | | eTime?.let { andLessThanOrEqualTo("mvDataTime", it) } |
| | | } |
| | | orderBy("mvDataTime").apply { |
| | | // 当请求接口不传递起始时间,默认获取最新的数据 |
| | | if (startTime == null && endTime == null) { |
| | | desc() |
| | | } |
| | | } |
| | | }) |
| | | if (startTime == null && endTime == null) { |
| | | dataList1.reverse() |
| | | } |
| | | pageInfo = PageHelper.startPage<ElectricMinuteValue>(p, perP) |
| | | val dataList2 = electricMinuteValueMapper.selectByExample(Example(ElectricMinuteValue::class.java).apply { |
| | | createCriteria().andEqualTo("mvStatCode", d2) |
| | | .apply { |
| | | sTime?.let { andGreaterThanOrEqualTo("mvDataTime", it) } |
| | | eTime?.let { andLessThanOrEqualTo("mvDataTime", it) } |
| | | } |
| | | orderBy("mvDataTime").apply { |
| | | // 当请求接口不传递起始时间,默认获取最新的数据 |
| | | if (startTime == null && endTime == null) { |
| | | desc() |
| | | } |
| | | } |
| | | }) |
| | | if (startTime == null && endTime == null) { |
| | | dataList2.reverse() |
| | | } |
| | | |
| | | // FIXME: 2021/11/5 返回结果需要根据两台设备的数据始末时间,选取最长的两个始末时间 |
| | | val sT = if (dataList1.isEmpty() && dataList2.isNotEmpty()) { |
| | | dataList2[0]?.mvDataTime |
| | | }else if (dataList1.isNotEmpty() && dataList2.isEmpty()) { |
| | | dataList1[0]?.mvDataTime |
| | | } else if (dataList1.isNotEmpty() && dataList2.isNotEmpty()) { |
| | | if (dataList1[0]?.mvDataTime?.after(dataList2[0]?.mvDataTime) == true) { |
| | | dataList2[0]?.mvDataTime |
| | | } else { |
| | | dataList1[0]?.mvDataTime |
| | | } |
| | | } else { |
| | | null |
| | | } |
| | | val eT = if (dataList1.isEmpty() && dataList2.isNotEmpty()) { |
| | | dataList2.last()?.mvDataTime |
| | | }else if (dataList1.isNotEmpty() && dataList2.isEmpty()) { |
| | | dataList1.last()?.mvDataTime |
| | | } else if (dataList1.isNotEmpty() && dataList2.isNotEmpty()) { |
| | | if (dataList1.last()?.mvDataTime?.after(dataList2.last()?.mvDataTime) == true) { |
| | | dataList1.last()?.mvDataTime |
| | | } else { |
| | | dataList2.last()?.mvDataTime |
| | | } |
| | | } else { |
| | | 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) { |
| | | while (!lsT.isAfter(leT)) { |
| | | val vo = ElectricVo(lsT.format(dateFormatter2)) |
| | | if (dataList1.isNotEmpty()) { |
| | | val d = dataList1[0] |
| | | val t = LocalDateTime.ofInstant(d?.mvDataTime?.toInstant(), ZoneId.systemDefault()).withSecond(0) |
| | | if (lsT.isEqual(t)) { |
| | | vo.apply { |
| | | d1eA = d?.mvElectricityA ?: .0 |
| | | d1eB = d?.mvElectricityB ?: .0 |
| | | d1eC = d?.mvElectricityC ?: .0 |
| | | d1Status = getStatus(d) |
| | | } |
| | | dataList1.removeAt(0) |
| | | } |
| | | } |
| | | if (dataList2.isNotEmpty()) { |
| | | val d = dataList2[0] |
| | | val t = LocalDateTime.ofInstant(d?.mvDataTime?.toInstant(), ZoneId.systemDefault()).withSecond(0) |
| | | if (lsT.isEqual(t)) { |
| | | vo.apply { |
| | | d2eA = d?.mvElectricityA ?: .0 |
| | | d2eB = d?.mvElectricityB ?: .0 |
| | | d2eC = d?.mvElectricityC ?: .0 |
| | | d2Status = getStatus(d) |
| | | } |
| | | dataList2.removeAt(0) |
| | | } |
| | | } |
| | | 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?): String { |
| | | var values = listOf(1, 100) |
| | | var status = listOf("0", "2", "3") |
| | | if (e == null) { |
| | | return status.first() |
| | | } |
| | | when (e.mvStatCode) { |
| | | "31011020210601" -> { |
| | | values = listOf(1, 100) |
| | | status = listOf("0", "2", "3") |
| | | } |
| | | "31011020210602" -> { |
| | | values = listOf(13, 30) |
| | | status = listOf("0", "2", "3") |
| | | } |
| | | "31011020210603" -> { |
| | | values = listOf(1, 50, 80) |
| | | status = listOf("0", "1", "2", "3") |
| | | } |
| | | "31011020210604" -> { |
| | | values = listOf(15, 90, 125) |
| | | status = listOf("0", "1", "2", "3") |
| | | } |
| | | } |
| | | val electricityList = mutableListOf<Double>() |
| | | electricityList.add(e.mvElectricityA) |
| | | electricityList.add(e.mvElectricityB) |
| | | electricityList.add(e.mvElectricityC) |
| | | |
| | | val avg = electricityList.average() |
| | | for (i in values.indices) { |
| | | if (avg < values[i]) { |
| | | return status[i] |
| | | } |
| | | } |
| | | return status.last() |
| | | } |
| | | } |