From e5903c2c3e742af346b7663d7ad1bc390d5a762a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=85=B4=E7=90=B3?= <1911390090@qq.com> Date: Thu, 26 Dec 2024 14:24:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=B0=94=E8=B1=A1=E6=A3=80?= =?UTF-8?q?=E6=B5=8B=E5=99=A8=E6=95=B0=E6=8D=AE=20=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...MeteorologicalDetectorDataServiceImpl.java | 41 +++++++++++++++++-- .../DcMeteorologicalDetectorDataMapper.xml | 39 ++++++++++-------- 2 files changed, 59 insertions(+), 21 deletions(-) diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcMeteorologicalDetectorDataServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcMeteorologicalDetectorDataServiceImpl.java index b1589c39..d9016490 100644 --- a/zc-business/src/main/java/com/zc/business/service/impl/DcMeteorologicalDetectorDataServiceImpl.java +++ b/zc-business/src/main/java/com/zc/business/service/impl/DcMeteorologicalDetectorDataServiceImpl.java @@ -1,6 +1,7 @@ package com.zc.business.service.impl; import com.ruoyi.common.utils.DateUtils; +import com.zc.business.domain.DcDevice; import com.zc.business.domain.DcMeteorologicalDetectorData; import com.zc.business.enums.UniversalEnum; import com.zc.business.mapper.DcMeteorologicalDetectorDataMapper; @@ -8,8 +9,10 @@ import com.zc.business.service.IDcMeteorologicalDetectorDataService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.List; -import java.util.Map; +import javax.annotation.Resource; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; /** * 气象检测器数据Service业务层处理 @@ -22,7 +25,8 @@ public class DcMeteorologicalDetectorDataServiceImpl implements IDcMeteorologica { @Autowired private DcMeteorologicalDetectorDataMapper dcMeteorologicalDetectorDataMapper; - + @Resource + private DcDeviceServiceImpl dcDeviceServiceImpl; /** * 查询气象检测器数据 @@ -113,7 +117,36 @@ public class DcMeteorologicalDetectorDataServiceImpl implements IDcMeteorologica @Override public List<DcMeteorologicalDetectorData> selectlistAll(DcMeteorologicalDetectorData dcMeteorologicalDetectorData) { - return dcMeteorologicalDetectorDataMapper.selectlistAll(dcMeteorologicalDetectorData); + Map<String,Object> parameter =new HashMap<>(); + + parameter.put("deviceType","3"); + List<DcDevice> dcDevices = dcDeviceServiceImpl.devicePileNumberQueryDevice(parameter); + Map<String, DcDevice> deviceStateMap = dcDevices.stream() + .filter(Objects::nonNull) // DcDevice 对象不为空 + .collect(Collectors.toMap( + DcDevice::getIotDeviceId, + Function.identity(), + (existing, replacement) -> existing) // 重复键,默认保留第一个值 + ); + List<DcMeteorologicalDetectorData> dcMeteorologicalDetectorDataList = dcMeteorologicalDetectorDataMapper.selectlistAll(dcMeteorologicalDetectorData); + // 遍历气象检测数据并设置对应的设备状态和桩号 + for (DcMeteorologicalDetectorData data : dcMeteorologicalDetectorDataList) { + String iotDeviceId = data.getIotDeviceId(); + if (deviceStateMap.containsKey(iotDeviceId)) { + DcDevice device = deviceStateMap.get(iotDeviceId); + // 设置设备状态 + data.setDeviceState(device.getDeviceState()); + // 设置桩号 + data.setStakeMark(device.getStakeMark()); + } + } + + // 按照桩号排序 + List<DcMeteorologicalDetectorData> sortedList = dcMeteorologicalDetectorDataList.stream() + .sorted(Comparator.comparing(DcMeteorologicalDetectorData::getStakeMark)) + .collect(Collectors.toList()); + + return sortedList; } @Override diff --git a/zc-business/src/main/resources/mapper/business/DcMeteorologicalDetectorDataMapper.xml b/zc-business/src/main/resources/mapper/business/DcMeteorologicalDetectorDataMapper.xml index c04132fe..4adc7534 100644 --- a/zc-business/src/main/resources/mapper/business/DcMeteorologicalDetectorDataMapper.xml +++ b/zc-business/src/main/resources/mapper/business/DcMeteorologicalDetectorDataMapper.xml @@ -200,27 +200,32 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" <select id="selectlistAll" parameterType="com.zc.business.domain.DcMeteorologicalDetectorData" resultMap="DcMeteorologicalDetectorDataResult"> SELECT - d.iot_device_id, d.stake_mark, d.direction, d.device_name, d.device_state, + m.iot_device_id, + m.device_name, m.create_time, - m.rainfall, m.visibility_type, m.visibility, m.atmospheric_pressure, - m.temperature, m.humidity, m.wind_direction, m.wind_speed, - m.precipitation_type, m.wet_slippery_coefficient, - m.remote_road_surface_temperature, m.remote_road_surface_status, + m.rainfall, + m.visibility_type, + m.visibility, + m.atmospheric_pressure, + m.temperature, + m.humidity, + m.wind_direction, + m.wind_speed, + m.precipitation_type, + m.wet_slippery_coefficient, + m.remote_road_surface_temperature, + m.remote_road_surface_status, m.water_film_ice_snow_value FROM - dc_device d - LEFT JOIN dc_meteorological_detector_data m - ON - d.iot_device_id = m.iot_device_id - AND m.create_time = ( - SELECT MAX(create_time) - FROM dc_meteorological_detector_data m2 - WHERE m2.iot_device_id = d.iot_device_id - ) - WHERE - d.device_type = 3 - ORDER BY d.stake_mark ASC; + JOIN ( + SELECT + iot_device_id, MAX(create_time) AS max_create_time + FROM + dc_meteorological_detector_data + GROUP BY + iot_device_id + ) latest ON m.iot_device_id = latest.iot_device_id AND m.create_time = latest.max_create_time; </select> <select id="selectDeviceNameList" parameterType="com.zc.business.domain.DcMeteorologicalDetectorData" resultMap="DcMeteorologicalDetectorDataResult"> SELECT