Quellcode durchsuchen

更新读取24小时环境数据接口,将温度和湿度列表合并。

zhuoning vor 2 Jahren
Ursprung
Commit
d83a141cb5

+ 114 - 96
huimv-env-platform/huimv-env-manage/src/main/java/com/huimv/env/manage/service/impl/EnvTempServiceImpl.java

@@ -21,7 +21,7 @@ import java.util.*;
 
 /**
  * <p>
- *  服务实现类
+ * 服务实现类
  * </p>
  *
  * @author author
@@ -41,80 +41,99 @@ public class EnvTempServiceImpl extends ServiceImpl<EnvTempMapper, EnvTemp> impl
         String hours = paramMap.get("hours");
         String unitId = paramMap.get("unitId");
         //获取当前最新温度
-        EnvTemp lastEnvTemp = _getLastTemp2(farmCode,unitId);
+        EnvTemp lastEnvTemp = _getLastTemp2(farmCode, unitId);
         BigDecimal lastTempBd = new BigDecimal(0);
-        if(lastEnvTemp != null){
+        if (lastEnvTemp != null) {
             lastTempBd = lastEnvTemp.getTemp();
         }
 
         //获取最后24小时的温度数据曲线
-        List<Map<String,Object>> envTempList = _getLast24HourTemp(farmCode,Integer.parseInt(hours),lastEnvTemp,unitId);
+        List<Map<String, Object>> envTempList = _getLast24HourTemp(farmCode, Integer.parseInt(hours), lastEnvTemp, unitId);
 
         //获取当前最新湿度
-        EnvHumi lastEnvHumi = _getLastHumi2(farmCode,unitId);
-        BigDecimal lastHumiBd =  new BigDecimal(0);
-        if(lastEnvHumi != null){
+        EnvHumi lastEnvHumi = _getLastHumi2(farmCode, unitId);
+        BigDecimal lastHumiBd = new BigDecimal(0);
+        if (lastEnvHumi != null) {
             lastHumiBd = lastEnvHumi.getHumi();
         }
         //获取最后24小时的湿度数据曲线
-        List<Map<String,Object>> envHumiList = _getLast24HourHumi(farmCode,Integer.parseInt(hours),lastEnvHumi,unitId);
+        List<Map<String, Object>> envHumiList = _getLast24HourHumi(farmCode, Integer.parseInt(hours), lastEnvHumi, unitId);
+
+        //合并温度和湿度
+        List<Map<String, Object>> mergeList = _mergeTempAndHumi(envTempList, envHumiList);
 
         JSONObject resultJo = new JSONObject();
-        resultJo.put("lastTemp",lastTempBd.toString());
-        resultJo.put("lastHumi",lastHumiBd.toString());
-        resultJo.put("tempList",envTempList);
-        resultJo.put("humiList",envHumiList);
-        return new Result(ResultCode.SUCCESS,resultJo);
+        resultJo.put("lastTemp", lastTempBd.toString());
+        resultJo.put("lastHumi", lastHumiBd.toString());
+//        resultJo.put("tempList",envTempList);
+//        resultJo.put("humiList",envHumiList);
+        resultJo.put("allList", mergeList);
+        return new Result(ResultCode.SUCCESS, resultJo);
+    }
+
+    //合并温度和湿度
+    private List<Map<String, Object>> _mergeTempAndHumi(List<Map<String, Object>> envTempList, List<Map<String, Object>> envHumiList) {
+        for (int a = 0; a < envTempList.size(); a++) {
+            Map<String, Object> tempMap = envTempList.get(a);
+            for (int b = 0; b < envHumiList.size(); b++) {
+                Map<String, Object> humiMap = envHumiList.get(b);
+                if (tempMap.get("hour").equals(humiMap.get("hour"))) {
+                    tempMap.put("humi", humiMap.get("humi"));
+                    break;
+                }
+            }
+        }
+        return envTempList;
     }
 
     //获取最后24小时的湿度数据曲线
-    private List<Map<String,Object>> _getLast24HourHumi(String farmCode, Integer hours, EnvHumi lastEnvHumi,String unitId) throws ParseException {
+    private List<Map<String, Object>> _getLast24HourHumi(String farmCode, Integer hours, EnvHumi lastEnvHumi, String unitId) throws ParseException {
         DateUtil dateUtil = new DateUtil();
         //获取最后一条记录的小时
         //计算之前24小时时间,
         String endTimeText = dateUtil.formatDatetimeText(lastEnvHumi.getAddTime());
-        String startTimeText = dateUtil.getBeforeHoursDatetime(endTimeText,hours);
+        String startTimeText = dateUtil.getBeforeHoursDatetime(endTimeText, hours);
         //读取24小时所有记录
         QueryWrapper<EnvHumi> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("farm_code",farmCode);
-        queryWrapper.eq(StringUtils.isNotBlank(unitId),"unit_id",unitId);
-        queryWrapper.ge("add_time",dateUtil.parseDateTime(startTimeText)).le("add_time",dateUtil.parseDateTime(endTimeText));
+        queryWrapper.eq("farm_code", farmCode);
+        queryWrapper.eq(StringUtils.isNotBlank(unitId), "unit_id", unitId);
+        queryWrapper.ge("add_time", dateUtil.parseDateTime(startTimeText)).le("add_time", dateUtil.parseDateTime(endTimeText));
         queryWrapper.orderByAsc("add_time");
         List<EnvHumi> envHumiList = envHumiMapper.selectList(queryWrapper);
 
-        List<Map<String,Object>> outList = new ArrayList();
+        List<Map<String, Object>> outList = new ArrayList();
         String currentHour = "";
         BigDecimal totalHumiBd = new BigDecimal(0);
         int totalTimes = 0;
         //计算每个小时的之和,并算平均数
-        for(EnvHumi envHumi:envHumiList){
+        for (EnvHumi envHumi : envHumiList) {
             String formatTime = dateUtil.formatTime1(envHumi.getAddTime());
-            if(StringUtils.isBlank(currentHour)){
+            if (StringUtils.isBlank(currentHour)) {
                 currentHour = formatTime;
                 totalHumiBd = envHumi.getHumi();
                 totalTimes = 1;
-                Map<String,Object> outMap = new HashMap();
-                outMap.put("hour",currentHour);
-                outMap.put("temp",totalHumiBd.toString());
+                Map<String, Object> outMap = new HashMap();
+                outMap.put("hour", currentHour);
+                outMap.put("humi", totalHumiBd.toString());
                 outList.add(outMap);
-            }else if(StringUtils.isNotBlank(currentHour) && formatTime.trim().equalsIgnoreCase(currentHour)){
+            } else if (StringUtils.isNotBlank(currentHour) && formatTime.trim().equalsIgnoreCase(currentHour)) {
                 totalTimes++;
                 totalHumiBd = totalHumiBd.add(envHumi.getHumi());
-            }else  if(StringUtils.isNotBlank(currentHour) && !formatTime.trim().equalsIgnoreCase(currentHour)){
+            } else if (StringUtils.isNotBlank(currentHour) && !formatTime.trim().equalsIgnoreCase(currentHour)) {
                 //将每小时最后一条数据更新到输出列表中
-                BigDecimal avgBd = totalHumiBd.divide(new BigDecimal(totalTimes),1,BigDecimal.ROUND_HALF_UP);
-                Map<String,Object> outMap = new HashMap();
-                outMap.put("hour",currentHour);
-                outMap.put("temp",avgBd.toString());
+                BigDecimal avgBd = totalHumiBd.divide(new BigDecimal(totalTimes), 1, BigDecimal.ROUND_HALF_UP);
+                Map<String, Object> outMap = new HashMap();
+                outMap.put("hour", currentHour);
+                outMap.put("humi", avgBd.toString());
                 //
-                updateToHumiOutList(outMap,outList);
+                updateToHumiOutList(outMap, outList);
                 //3个变量重新赋值;
                 currentHour = formatTime;
                 totalHumiBd = envHumi.getHumi();
                 totalTimes = 1;
                 //将每个小时第一条数据加入到输出列表中
-                outMap.put("hour",currentHour);
-                outMap.put("temp",avgBd.toString());
+                outMap.put("hour", currentHour);
+                outMap.put("humi", avgBd.toString());
                 outList.add(outMap);
             }
         }
@@ -122,88 +141,87 @@ public class EnvTempServiceImpl extends ServiceImpl<EnvTempMapper, EnvTemp> impl
     }
 
     private void updateToHumiOutList(Map<String, Object> oneMap, List<Map<String, Object>> outList) {
-        for(int a=0;a<outList.size();a++){
+        for (int a = 0; a < outList.size(); a++) {
             Map outMap = outList.get(a);
-            if(outMap.get("hour").toString().equalsIgnoreCase(oneMap.get("hour").toString())){
-                outMap.put("temp",oneMap.get("temp").toString());
+            if (outMap.get("hour").toString().equalsIgnoreCase(oneMap.get("hour").toString())) {
+                outMap.put("humi", oneMap.get("humi").toString());
             }
         }
     }
 
     //获取最后24小时的温度数据曲线
-    private List<Map<String,Object>> _getLast24HourTemp(String farmCode, int hours, EnvTemp lastEnvTemp,String unitId) throws ParseException {
+    private List<Map<String, Object>> _getLast24HourTemp(String farmCode, int hours, EnvTemp lastEnvTemp, String unitId) throws ParseException {
         DateUtil dateUtil = new DateUtil();
         //获取最后一条记录的小时
         //计算之前24小时时间,
         String endTimeText = dateUtil.formatDatetimeText(lastEnvTemp.getAddTime());
-        String startTimeText = dateUtil.getBeforeHoursDatetime(endTimeText,hours);
+        String startTimeText = dateUtil.getBeforeHoursDatetime(endTimeText, hours);
         Date startTime = dateUtil.parseDateTime(startTimeText);
         Date endTime = dateUtil.parseDateTime(endTimeText);
         //读取24小时所有记录
         QueryWrapper<EnvTemp> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq(StringUtils.isNotBlank(unitId),"unit_id",unitId);
-        queryWrapper.eq("farm_code",farmCode);
-        queryWrapper.ge("add_time",startTime).le("add_time",endTime);
+        queryWrapper.eq(StringUtils.isNotBlank(unitId), "unit_id", unitId);
+        queryWrapper.eq("farm_code", farmCode);
+        queryWrapper.ge("add_time", startTime).le("add_time", endTime);
         queryWrapper.orderByAsc("add_time");
         List<EnvTemp> envTempList = envTempMapper.selectList(queryWrapper);
 
-        List<Map<String,Object>> outList = new ArrayList();
+        List<Map<String, Object>> outList = new ArrayList();
         String currentHour = "";
         BigDecimal totalTempBd = new BigDecimal(0);
         int totalTimes = 0;
         //计算每个小时的之和,并算平均数
-        for(EnvTemp envTemp:envTempList){
+        for (EnvTemp envTemp : envTempList) {
             String formatTime = dateUtil.formatTime1(envTemp.getAddTime());
-            if(StringUtils.isBlank(currentHour)){
+            if (StringUtils.isBlank(currentHour)) {
                 currentHour = formatTime;
                 totalTempBd = envTemp.getTemp();
                 totalTimes = 1;
-                Map<String,Object> outMap = new HashMap();
-                outMap.put("hour",currentHour);
-                outMap.put("temp",totalTempBd.toString());
+                Map<String, Object> outMap = new HashMap();
+                outMap.put("hour", currentHour);
+                outMap.put("temp", totalTempBd.toString());
                 outList.add(outMap);
-            }else if(StringUtils.isNotBlank(currentHour) && formatTime.trim().equalsIgnoreCase(currentHour)){
+            } else if (StringUtils.isNotBlank(currentHour) && formatTime.trim().equalsIgnoreCase(currentHour)) {
                 totalTimes++;
                 totalTempBd = totalTempBd.add(envTemp.getTemp());
-            }else  if(StringUtils.isNotBlank(currentHour) && !formatTime.trim().equalsIgnoreCase(currentHour)){
+            } else if (StringUtils.isNotBlank(currentHour) && !formatTime.trim().equalsIgnoreCase(currentHour)) {
                 //将每小时最后一条数据更新到输出列表中
-                BigDecimal avgBd = totalTempBd.divide(new BigDecimal(totalTimes),1,BigDecimal.ROUND_HALF_UP);
-                Map<String,Object> outMap = new HashMap();
-                outMap.put("hour",currentHour);
-                outMap.put("temp",avgBd.toString());
+                BigDecimal avgBd = totalTempBd.divide(new BigDecimal(totalTimes), 1, BigDecimal.ROUND_HALF_UP);
+                Map<String, Object> outMap = new HashMap();
+                outMap.put("hour", currentHour);
+                outMap.put("temp", avgBd.toString());
                 //
-                updateToTempOutList(outMap,outList);
+                updateToTempOutList(outMap, outList);
                 //3个变量重新赋值;
                 currentHour = formatTime;
                 totalTempBd = envTemp.getTemp();
                 totalTimes = 1;
                 //将每个小时第一条数据加入到输出列表中
-                outMap.put("hour",currentHour);
-                outMap.put("temp",avgBd.toString());
+                outMap.put("hour", currentHour);
+                outMap.put("temp", avgBd.toString());
                 outList.add(outMap);
             }
         }
         return outList;
     }
 
-    private void updateToTempOutList(Map<String,Object> oneMap, List<Map<String,Object>> outList) {
-        for(int a=0;a<outList.size();a++){
+    private void updateToTempOutList(Map<String, Object> oneMap, List<Map<String, Object>> outList) {
+        for (int a = 0; a < outList.size(); a++) {
             Map outMap = outList.get(a);
-            if(outMap.get("hour").toString().equalsIgnoreCase(oneMap.get("hour").toString())){
-                outMap.put("temp",oneMap.get("temp").toString());
+            if (outMap.get("hour").toString().equalsIgnoreCase(oneMap.get("hour").toString())) {
+                outMap.put("temp", oneMap.get("temp").toString());
             }
         }
     }
 
     /**
-     * @Method      : getTempAndHumi
+     * @Method : getTempAndHumi
      * @Description : 1、读取当前温度和湿度 2、读取历史温度和湿度;
-     * @Params      : [paramMap]
-     * @Return      : com.huimv.env.manage.utils.Result
-     *
-     * @Author      : ZhuoNing
-     * @Date        : 2022/10/26
-     * @Time        : 15:29
+     * @Params : [paramMap]
+     * @Return : com.huimv.env.manage.utils.Result
+     * @Author : ZhuoNing
+     * @Date : 2022/10/26
+     * @Time : 15:29
      */
     @Override
     public Result getTempAndHumi(Map<String, String> paramMap) {
@@ -216,31 +234,31 @@ public class EnvTempServiceImpl extends ServiceImpl<EnvTempMapper, EnvTemp> impl
         BigDecimal lastHumiBd = _getLastHumi(farmCode);
 
         //获取 N天历史温度数据曲线
-        List<EnvTemp> EnvTempList = _getHistoryTemp(farmCode,days);
+        List<EnvTemp> EnvTempList = _getHistoryTemp(farmCode, days);
 
         //获取 N天历史湿度数据曲线
-        List<EnvHumi> EnvHumiList = _getHistoryHumi(farmCode,days);
+        List<EnvHumi> EnvHumiList = _getHistoryHumi(farmCode, days);
 
         JSONObject resultJo = new JSONObject();
-        resultJo.put("lastTemp",lastTempBd.toString());
-        resultJo.put("lastHumi",lastHumiBd.toString());
-        resultJo.put("tempList",EnvTempList);
-        resultJo.put("humiList",EnvHumiList);
-        return new Result(ResultCode.SUCCESS,resultJo);
+        resultJo.put("lastTemp", lastTempBd.toString());
+        resultJo.put("lastHumi", lastHumiBd.toString());
+        resultJo.put("tempList", EnvTempList);
+        resultJo.put("humiList", EnvHumiList);
+        return new Result(ResultCode.SUCCESS, resultJo);
     }
 
     //获取历史湿度
     private List<EnvHumi> _getHistoryHumi(String farmCode, String days) {
 //汇总每天温度总数
-        List<Map<String,Object>> historyHumiList = envHumiMapper.selectHistory(farmCode,Integer.parseInt(days));
+        List<Map<String, Object>> historyHumiList = envHumiMapper.selectHistory(farmCode, Integer.parseInt(days));
         //计算次数
-        List<Integer> timesList = envHumiMapper.getDayTimes(farmCode,Integer.parseInt(days));
+        List<Integer> timesList = envHumiMapper.getDayTimes(farmCode, Integer.parseInt(days));
         List outList = new ArrayList();
-        for(int a=historyHumiList.size()-1;a>=0;a--){
+        for (int a = historyHumiList.size() - 1; a >= 0; a--) {
             Map humiMap = historyHumiList.get(a);
             Integer total = timesList.get(a);
-            BigDecimal newHumiBd = new BigDecimal(humiMap.get("humi").toString()).divide(new BigDecimal(total),1, BigDecimal.ROUND_HALF_UP);
-            humiMap.put("humi",newHumiBd.toString());
+            BigDecimal newHumiBd = new BigDecimal(humiMap.get("humi").toString()).divide(new BigDecimal(total), 1, BigDecimal.ROUND_HALF_UP);
+            humiMap.put("humi", newHumiBd.toString());
             outList.add(humiMap);
         }
         return outList;
@@ -249,15 +267,15 @@ public class EnvTempServiceImpl extends ServiceImpl<EnvTempMapper, EnvTemp> impl
     //获取历史温度
     private List<EnvTemp> _getHistoryTemp(String farmCode, String days) {
         //汇总每天温度总数
-        List<Map<String,Object>> historyTempList = envTempMapper.selectHistory(farmCode,Integer.parseInt(days));
+        List<Map<String, Object>> historyTempList = envTempMapper.selectHistory(farmCode, Integer.parseInt(days));
         //计算次数
-        List<Integer> timesList = envTempMapper.getDayTimes(farmCode,Integer.parseInt(days));
+        List<Integer> timesList = envTempMapper.getDayTimes(farmCode, Integer.parseInt(days));
         List outList = new ArrayList();
-        for(int a=historyTempList.size()-1;a>=0;a--){
+        for (int a = historyTempList.size() - 1; a >= 0; a--) {
             Map tempMap = historyTempList.get(a);
             Integer total = timesList.get(a);
-            BigDecimal newTempBd = new BigDecimal(tempMap.get("temp").toString()).divide(new BigDecimal(total),1, BigDecimal.ROUND_HALF_UP);
-            tempMap.put("temp",newTempBd.toString());
+            BigDecimal newTempBd = new BigDecimal(tempMap.get("temp").toString()).divide(new BigDecimal(total), 1, BigDecimal.ROUND_HALF_UP);
+            tempMap.put("temp", newTempBd.toString());
             outList.add(tempMap);
         }
         return outList;
@@ -266,22 +284,22 @@ public class EnvTempServiceImpl extends ServiceImpl<EnvTempMapper, EnvTemp> impl
     //获取当前最新湿度
     private BigDecimal _getLastHumi(String farmCode) {
         QueryWrapper<EnvHumi> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("farm_code",farmCode);
+        queryWrapper.eq("farm_code", farmCode);
         queryWrapper.orderByDesc("add_time");
         queryWrapper.last("LIMIT 1");
         EnvHumi lastEnvHumi = envHumiMapper.selectOne(queryWrapper);
-        if(lastEnvHumi == null){
+        if (lastEnvHumi == null) {
             return new BigDecimal(0);
-        }else{
+        } else {
             return lastEnvHumi.getHumi();
         }
     }
 
     //获取当前最新湿度
-    private EnvHumi _getLastHumi2(String farmCode,String unitId) {
+    private EnvHumi _getLastHumi2(String farmCode, String unitId) {
         QueryWrapper<EnvHumi> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq(StringUtils.isNotBlank(unitId),"unit_id",unitId);
-        queryWrapper.eq("farm_code",farmCode);
+        queryWrapper.eq(StringUtils.isNotBlank(unitId), "unit_id", unitId);
+        queryWrapper.eq("farm_code", farmCode);
         queryWrapper.orderByDesc("add_time");
         queryWrapper.last("LIMIT 1");
         return envHumiMapper.selectOne(queryWrapper);
@@ -291,21 +309,21 @@ public class EnvTempServiceImpl extends ServiceImpl<EnvTempMapper, EnvTemp> impl
     //读取最新温度
     private BigDecimal _getLastTemp(String farmCode) {
         QueryWrapper<EnvTemp> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("farm_code",farmCode);
+        queryWrapper.eq("farm_code", farmCode);
         queryWrapper.orderByDesc("add_time");
         queryWrapper.last("LIMIT 1");
         EnvTemp lastEnvTemp = envTempMapper.selectOne(queryWrapper);
-        if(lastEnvTemp == null){
+        if (lastEnvTemp == null) {
             return new BigDecimal(0);
-        }else{
+        } else {
             return lastEnvTemp.getTemp();
         }
     }
 
-    private EnvTemp _getLastTemp2(String farmCode,String unitId) {
+    private EnvTemp _getLastTemp2(String farmCode, String unitId) {
         QueryWrapper<EnvTemp> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq(StringUtils.isNotBlank(unitId),"unit_id",unitId);
-        queryWrapper.eq("farm_code",farmCode);
+        queryWrapper.eq(StringUtils.isNotBlank(unitId), "unit_id", unitId);
+        queryWrapper.eq("farm_code", farmCode);
         queryWrapper.orderByDesc("add_time");
         queryWrapper.last("LIMIT 1");
         return envTempMapper.selectOne(queryWrapper);