历史温度暂时提交
parent
7012d4c67c
commit
34808ab31f
|
|
@ -1,17 +1,13 @@
|
||||||
package com.agri.system.controller;
|
package com.agri.system.controller;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
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 com.agri.common.annotation.Log;
|
import com.agri.common.annotation.Log;
|
||||||
import com.agri.common.core.controller.BaseController;
|
import com.agri.common.core.controller.BaseController;
|
||||||
import com.agri.common.core.domain.AjaxResult;
|
import com.agri.common.core.domain.AjaxResult;
|
||||||
|
|
@ -112,4 +108,14 @@ public class SysDtuDataController extends BaseController
|
||||||
{
|
{
|
||||||
return toAjax(sysDtuDataService.deleteSysDtuDataByIds(ids));
|
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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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<String> timeList;
|
||||||
|
|
||||||
|
private List<BigDecimal> temp1List;
|
||||||
|
|
||||||
|
private List<BigDecimal> temp2List;
|
||||||
|
|
||||||
|
private List<BigDecimal> temp3List;
|
||||||
|
|
||||||
|
private List<BigDecimal> temp4List;
|
||||||
|
|
||||||
|
private List<BigDecimal> humi1List;
|
||||||
|
|
||||||
|
private List<BigDecimal> humi2List;
|
||||||
|
|
||||||
|
private List<BigDecimal> humi3List;
|
||||||
|
|
||||||
|
private List<BigDecimal> humi4List;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -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<String> categories;
|
||||||
|
// 系列数据(温度/湿度)
|
||||||
|
private List<UChartsSeries> series;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
// 内部类:单条系列数据
|
||||||
|
public static class UChartsSeries {
|
||||||
|
private String name; // 系列名称(如"温度1")
|
||||||
|
private BigDecimal index;
|
||||||
|
private List<BigDecimal> data; // 系列数值
|
||||||
|
|
||||||
|
public UChartsSeries() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public UChartsSeries(String name, BigDecimal index, List<BigDecimal> data) {
|
||||||
|
this.name = name;
|
||||||
|
this.index = index;
|
||||||
|
this.data = data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public UChartsDataView() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public UChartsDataView(List<String> categories, List<UChartsSeries> series) {
|
||||||
|
this.categories = categories;
|
||||||
|
this.series = series;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package com.agri.system.mapper;
|
package com.agri.system.mapper;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
@ -67,4 +68,12 @@ public interface SysDtuDataMapper extends BaseMapper<SysDtuData>
|
||||||
public int deleteSysDtuDataByIds(Long[] ids);
|
public int deleteSysDtuDataByIds(Long[] ids);
|
||||||
|
|
||||||
List<Map<String, Object>> getLastDtuDataByImeiList(@Param("imeiList") List<String> imeiList);
|
List<Map<String, Object>> getLastDtuDataByImeiList(@Param("imeiList") List<String> imeiList);
|
||||||
|
|
||||||
|
|
||||||
|
List<SysDtuData> getHistoryData(
|
||||||
|
@Param("imei") String imei,
|
||||||
|
@Param("startTime") LocalDateTime startTime,
|
||||||
|
@Param("endTime") LocalDateTime endTime
|
||||||
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,11 @@
|
||||||
package com.agri.system.service;
|
package com.agri.system.service;
|
||||||
|
|
||||||
import com.agri.system.domain.SysDtuData;
|
import com.agri.system.domain.SysDtuData;
|
||||||
|
import com.agri.system.domain.vo.LiveDataView;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
@ -71,4 +74,7 @@ public interface ISysDtuDataService extends IService<SysDtuData>
|
||||||
|
|
||||||
List<Map<String, Object>> getLastDtuDataByImeiList(List<String> imeiList);
|
List<Map<String, Object>> getLastDtuDataByImeiList(List<String> imeiList);
|
||||||
|
|
||||||
|
LiveDataView getHistoryData(String imei, LocalDateTime startTime, LocalDateTime endTime);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,18 +2,25 @@ package com.agri.system.service.impl;
|
||||||
|
|
||||||
import com.agri.common.utils.DateUtils;
|
import com.agri.common.utils.DateUtils;
|
||||||
import com.agri.system.domain.SysDtuData;
|
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.mapper.SysDtuDataMapper;
|
||||||
import com.agri.system.service.ISysDtuDataService;
|
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 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.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.util.Assert;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.Collections;
|
import java.time.LocalTime;
|
||||||
import java.util.List;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.Map;
|
import java.util.*;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DTU温湿度上报数据Service业务层处理
|
* DTU温湿度上报数据Service业务层处理
|
||||||
|
|
@ -126,4 +133,73 @@ public class SysDtuDataServiceImpl extends ServiceImpl<SysDtuDataMapper, SysDtuD
|
||||||
return baseMapper.getLastDtuDataByImeiList(imeiList);
|
return baseMapper.getLastDtuDataByImeiList(imeiList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LiveDataView getHistoryData(String imei, LocalDateTime startTime, LocalDateTime endTime) {
|
||||||
|
// 非空校验
|
||||||
|
Assert.hasText(imei, "设备IMEI不能为空");
|
||||||
|
|
||||||
|
// 时间参数兜底
|
||||||
|
LocalDateTime finalStartTime = ObjectUtils.isEmpty(startTime)
|
||||||
|
? LocalDateTime.of(LocalDate.now(), LocalTime.MIN)
|
||||||
|
: startTime;
|
||||||
|
LocalDateTime finalEndTime = ObjectUtils.isEmpty(endTime)
|
||||||
|
? LocalDateTime.now()
|
||||||
|
: endTime;
|
||||||
|
|
||||||
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||||
|
|
||||||
|
List<SysDtuData> historyData = baseMapper.getHistoryData(imei, finalStartTime, finalEndTime);
|
||||||
|
LiveDataView liveDataView = new LiveDataView();
|
||||||
|
List<String> categories = new ArrayList<>();
|
||||||
|
List<BigDecimal> temp1List = new ArrayList<>();
|
||||||
|
List<BigDecimal> temp2List = new ArrayList<>();
|
||||||
|
List<BigDecimal> temp3List = new ArrayList<>();
|
||||||
|
List<BigDecimal> temp4List = new ArrayList<>();
|
||||||
|
List<BigDecimal> humi1List = new ArrayList<>();
|
||||||
|
List<BigDecimal> humi2List = new ArrayList<>();
|
||||||
|
List<BigDecimal> humi3List = new ArrayList<>();
|
||||||
|
List<BigDecimal> humi4List = new ArrayList<>();
|
||||||
|
|
||||||
|
// 工具方法:null转0
|
||||||
|
Function<BigDecimal, BigDecimal> 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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -152,4 +152,35 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
GROUP BY imei
|
GROUP BY imei
|
||||||
)
|
)
|
||||||
</select>
|
</select>
|
||||||
|
<select id="getHistoryData" resultType="com.agri.system.domain.SysDtuData">
|
||||||
|
SELECT
|
||||||
|
t.*
|
||||||
|
FROM (
|
||||||
|
SELECT
|
||||||
|
`imei`,
|
||||||
|
`time`,
|
||||||
|
temp1,
|
||||||
|
humi1,
|
||||||
|
temp2,
|
||||||
|
humi2,
|
||||||
|
temp3,
|
||||||
|
humi3,
|
||||||
|
temp4,
|
||||||
|
humi4,
|
||||||
|
ROW_NUMBER() OVER (
|
||||||
|
PARTITION BY DATE_FORMAT(`time`, '%Y-%m-%d %H:%i:00') - INTERVAL (MINUTE(`time`) % 5) MINUTE
|
||||||
|
ORDER BY `time` DESC
|
||||||
|
) AS rn
|
||||||
|
FROM
|
||||||
|
sys_dtu_data
|
||||||
|
WHERE
|
||||||
|
imei = #{imei}
|
||||||
|
AND
|
||||||
|
`time` >= #{startTime}
|
||||||
|
AND
|
||||||
|
`time` <= #{endTime}
|
||||||
|
) t
|
||||||
|
WHERE t.rn = 1
|
||||||
|
ORDER BY t.time ASC
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
Loading…
Reference in New Issue