From 34808ab31fdb77a1899b23ea0742a116d0f6db32 Mon Sep 17 00:00:00 2001 From: lld <15027638633@163.com> Date: Thu, 19 Mar 2026 14:00:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8E=86=E5=8F=B2=E6=B8=A9=E5=BA=A6=E6=9A=82?= =?UTF-8?q?=E6=97=B6=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SysDtuDataController.java | 22 +++-- .../agri/system/domain/vo/LiveDataView.java | 30 +++++++ .../system/domain/vo/UChartsDataView.java | 40 +++++++++ .../agri/system/mapper/SysDtuDataMapper.java | 9 ++ .../system/service/ISysDtuDataService.java | 6 ++ .../service/impl/SysDtuDataServiceImpl.java | 86 +++++++++++++++++-- .../mapper/system/SysDictDataMapper.xml | 2 +- .../mapper/system/SysDtuDataMapper.xml | 31 +++++++ 8 files changed, 212 insertions(+), 14 deletions(-) create mode 100644 agri-system/src/main/java/com/agri/system/domain/vo/LiveDataView.java create mode 100644 agri-system/src/main/java/com/agri/system/domain/vo/UChartsDataView.java diff --git a/agri-system/src/main/java/com/agri/system/controller/SysDtuDataController.java b/agri-system/src/main/java/com/agri/system/controller/SysDtuDataController.java index 6746c2c..8f30b5c 100644 --- a/agri-system/src/main/java/com/agri/system/controller/SysDtuDataController.java +++ b/agri-system/src/main/java/com/agri/system/controller/SysDtuDataController.java @@ -1,17 +1,13 @@ package com.agri.system.controller; +import java.time.LocalDateTime; import java.util.List; import javax.servlet.http.HttpServletResponse; + +import org.springframework.format.annotation.DateTimeFormat; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import com.agri.common.annotation.Log; import com.agri.common.core.controller.BaseController; import com.agri.common.core.domain.AjaxResult; @@ -112,4 +108,14 @@ public class SysDtuDataController extends BaseController { return toAjax(sysDtuDataService.deleteSysDtuDataByIds(ids)); } + + + @PreAuthorize("@ss.hasPermi('system:data:query')") + @GetMapping(value = "/getHistoryData") + public AjaxResult getHistoryData(@RequestParam("imei") String imei, + @RequestParam(value = "startTime",required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime startTime, + @RequestParam(value = "endTime",required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime endTime) + { + return success(sysDtuDataService.getHistoryData(imei,startTime,endTime)); + } } diff --git a/agri-system/src/main/java/com/agri/system/domain/vo/LiveDataView.java b/agri-system/src/main/java/com/agri/system/domain/vo/LiveDataView.java new file mode 100644 index 0000000..a2bdaa2 --- /dev/null +++ b/agri-system/src/main/java/com/agri/system/domain/vo/LiveDataView.java @@ -0,0 +1,30 @@ +package com.agri.system.domain.vo; + +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +@Data +public class LiveDataView { + + private List timeList; + + private List temp1List; + + private List temp2List; + + private List temp3List; + + private List temp4List; + + private List humi1List; + + private List humi2List; + + private List humi3List; + + private List humi4List; + +} diff --git a/agri-system/src/main/java/com/agri/system/domain/vo/UChartsDataView.java b/agri-system/src/main/java/com/agri/system/domain/vo/UChartsDataView.java new file mode 100644 index 0000000..f385480 --- /dev/null +++ b/agri-system/src/main/java/com/agri/system/domain/vo/UChartsDataView.java @@ -0,0 +1,40 @@ +package com.agri.system.domain.vo; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +@Data +public class UChartsDataView { + + // X轴分类(时间) + private List categories; + // 系列数据(温度/湿度) + private List series; + + @Data + // 内部类:单条系列数据 + public static class UChartsSeries { + private String name; // 系列名称(如"温度1") + private BigDecimal index; + private List data; // 系列数值 + + public UChartsSeries() { + } + + public UChartsSeries(String name, BigDecimal index, List data) { + this.name = name; + this.index = index; + this.data = data; + } + } + + public UChartsDataView() { + } + + public UChartsDataView(List categories, List series) { + this.categories = categories; + this.series = series; + } +} diff --git a/agri-system/src/main/java/com/agri/system/mapper/SysDtuDataMapper.java b/agri-system/src/main/java/com/agri/system/mapper/SysDtuDataMapper.java index a1a3738..165de1e 100644 --- a/agri-system/src/main/java/com/agri/system/mapper/SysDtuDataMapper.java +++ b/agri-system/src/main/java/com/agri/system/mapper/SysDtuDataMapper.java @@ -1,5 +1,6 @@ package com.agri.system.mapper; +import java.time.LocalDateTime; import java.util.List; import java.util.Map; @@ -67,4 +68,12 @@ public interface SysDtuDataMapper extends BaseMapper public int deleteSysDtuDataByIds(Long[] ids); List> getLastDtuDataByImeiList(@Param("imeiList") List imeiList); + + + List getHistoryData( + @Param("imei") String imei, + @Param("startTime") LocalDateTime startTime, + @Param("endTime") LocalDateTime endTime + ); + } diff --git a/agri-system/src/main/java/com/agri/system/service/ISysDtuDataService.java b/agri-system/src/main/java/com/agri/system/service/ISysDtuDataService.java index 6ec4dde..77c1a13 100644 --- a/agri-system/src/main/java/com/agri/system/service/ISysDtuDataService.java +++ b/agri-system/src/main/java/com/agri/system/service/ISysDtuDataService.java @@ -1,8 +1,11 @@ package com.agri.system.service; import com.agri.system.domain.SysDtuData; +import com.agri.system.domain.vo.LiveDataView; import com.baomidou.mybatisplus.extension.service.IService; +import java.time.LocalDateTime; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -71,4 +74,7 @@ public interface ISysDtuDataService extends IService List> getLastDtuDataByImeiList(List imeiList); + LiveDataView getHistoryData(String imei, LocalDateTime startTime, LocalDateTime endTime); + + } diff --git a/agri-system/src/main/java/com/agri/system/service/impl/SysDtuDataServiceImpl.java b/agri-system/src/main/java/com/agri/system/service/impl/SysDtuDataServiceImpl.java index 780a4ee..1effdc0 100644 --- a/agri-system/src/main/java/com/agri/system/service/impl/SysDtuDataServiceImpl.java +++ b/agri-system/src/main/java/com/agri/system/service/impl/SysDtuDataServiceImpl.java @@ -2,18 +2,25 @@ package com.agri.system.service.impl; import com.agri.common.utils.DateUtils; import com.agri.system.domain.SysDtuData; +import com.agri.system.domain.vo.LiveDataView; +import com.agri.system.domain.vo.UChartsDataView; import com.agri.system.mapper.SysDtuDataMapper; import com.agri.system.service.ISysDtuDataService; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.Assert; +import java.math.BigDecimal; +import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.function.Function; /** * DTU温湿度上报数据Service业务层处理 @@ -126,4 +133,73 @@ public class SysDtuDataServiceImpl extends ServiceImpl historyData = baseMapper.getHistoryData(imei, finalStartTime, finalEndTime); + LiveDataView liveDataView = new LiveDataView(); + List categories = new ArrayList<>(); + List temp1List = new ArrayList<>(); + List temp2List = new ArrayList<>(); + List temp3List = new ArrayList<>(); + List temp4List = new ArrayList<>(); + List humi1List = new ArrayList<>(); + List humi2List = new ArrayList<>(); + List humi3List = new ArrayList<>(); + List humi4List = new ArrayList<>(); + + // 工具方法:null转0 + Function nullToZero = bd -> bd == null ? BigDecimal.ZERO : bd; + + // 一次遍历收集所有数据(性能最优) + if (CollectionUtils.isNotEmpty(historyData)) { + historyData.forEach(dtuData -> { + categories.add(dtuData.getTime().format(formatter)); + temp1List.add(nullToZero.apply(dtuData.getTemp1())); + temp2List.add(nullToZero.apply(dtuData.getTemp2())); + temp3List.add(nullToZero.apply(dtuData.getTemp3())); + temp4List.add(nullToZero.apply(dtuData.getTemp4())); + humi1List.add(nullToZero.apply(dtuData.getHumi1())); + humi2List.add(nullToZero.apply(dtuData.getHumi2())); + humi3List.add(nullToZero.apply(dtuData.getHumi3())); + humi4List.add(nullToZero.apply(dtuData.getHumi4())); + }); + } + + // 设置返回数据 + liveDataView.setTimeList(categories); + liveDataView.setTemp1List(temp1List); + liveDataView.setTemp2List(temp2List); + liveDataView.setTemp3List(temp3List); + liveDataView.setTemp4List(temp4List); + liveDataView.setHumi1List(humi1List); + liveDataView.setHumi2List(humi2List); + liveDataView.setHumi3List(humi3List); + liveDataView.setHumi4List(humi4List); +// UChartsDataView uChartsData = new UChartsDataView(); +// uChartsData.setCategories(categories); +// uChartsData.setSeries(Arrays.asList( +// new UChartsDataView.UChartsSeries("温度1", BigDecimal.ZERO, temp1List), +// new UChartsDataView.UChartsSeries("温度2", BigDecimal.ZERO, temp2List), +// new UChartsDataView.UChartsSeries("温度3", BigDecimal.ZERO, temp3List), +// new UChartsDataView.UChartsSeries("温度4", BigDecimal.ZERO, temp4List), +// new UChartsDataView.UChartsSeries("湿度1", BigDecimal.ONE, humi1List), +// new UChartsDataView.UChartsSeries("湿度2", BigDecimal.ONE, humi2List), +// new UChartsDataView.UChartsSeries("湿度3", BigDecimal.ONE, humi3List), +// new UChartsDataView.UChartsSeries("湿度4", BigDecimal.ONE, humi4List) +// )); + return liveDataView; + } } diff --git a/agri-system/src/main/resources/mapper/system/SysDictDataMapper.xml b/agri-system/src/main/resources/mapper/system/SysDictDataMapper.xml index 82dd079..ead78c9 100644 --- a/agri-system/src/main/resources/mapper/system/SysDictDataMapper.xml +++ b/agri-system/src/main/resources/mapper/system/SysDictDataMapper.xml @@ -120,5 +120,5 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" sysdate() ) - + \ No newline at end of file diff --git a/agri-system/src/main/resources/mapper/system/SysDtuDataMapper.xml b/agri-system/src/main/resources/mapper/system/SysDtuDataMapper.xml index 331ee2b..db9c72b 100644 --- a/agri-system/src/main/resources/mapper/system/SysDtuDataMapper.xml +++ b/agri-system/src/main/resources/mapper/system/SysDtuDataMapper.xml @@ -152,4 +152,35 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" GROUP BY imei ) + \ No newline at end of file