Browse Source

新增读取每天温度历史数据功能

zhuoning 2 years ago
parent
commit
cf9855c345

+ 5 - 0
huimv-env-platform/huimv-env-manage/src/main/java/com/huimv/env/manage/controller/EnvTempController.java

@@ -8,6 +8,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.text.ParseException;
 import java.util.Map;
 
 /**
@@ -32,4 +33,8 @@ public class EnvTempController {
         return  envTempService.getTempAndHumi(paramMap);
     }
 
+    @PostMapping("/getDayTempAndHumi")
+    public Result getDayTempAndHumi(@RequestBody Map<String,String> paramMap) throws ParseException {
+        return  envTempService.getDayTempAndHumi(paramMap);
+    }
 }

+ 3 - 0
huimv-env-platform/huimv-env-manage/src/main/java/com/huimv/env/manage/service/IEnvTempService.java

@@ -4,6 +4,7 @@ import com.huimv.env.manage.entity.EnvTemp;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.huimv.env.manage.utils.Result;
 
+import java.text.ParseException;
 import java.util.Map;
 
 /**
@@ -17,4 +18,6 @@ import java.util.Map;
 public interface IEnvTempService extends IService<EnvTemp> {
 
     Result getTempAndHumi(Map<String, String> paramMap);
+
+    Result getDayTempAndHumi(Map<String, String> paramMap) throws ParseException;
 }

+ 124 - 5
huimv-env-platform/huimv-env-manage/src/main/java/com/huimv/env/manage/service/impl/EnvTempServiceImpl.java

@@ -2,6 +2,7 @@ package com.huimv.env.manage.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.huimv.env.common.utils.DateUtil;
 import com.huimv.env.manage.entity.EnvHumi;
 import com.huimv.env.manage.entity.EnvTemp;
 import com.huimv.env.manage.mapper.EnvHumiMapper;
@@ -10,13 +11,13 @@ import com.huimv.env.manage.service.IEnvTempService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.huimv.env.manage.utils.Result;
 import com.huimv.env.manage.utils.ResultCode;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
+import java.text.ParseException;
+import java.util.*;
 
 /**
  * <p>
@@ -33,6 +34,116 @@ public class EnvTempServiceImpl extends ServiceImpl<EnvTempMapper, EnvTemp> impl
     @Autowired
     private EnvHumiMapper envHumiMapper;
 
+
+    @Override
+    public Result getDayTempAndHumi(Map<String, String> paramMap) throws ParseException {
+        String farmCode = paramMap.get("farmCode");
+        String hours = paramMap.get("hours");
+        //获取当前最新温度
+        EnvTemp lastEnvTemp = _getLastTemp2(farmCode);
+        BigDecimal lastTempBd = null;
+        if(lastEnvTemp == null){
+            lastTempBd = new BigDecimal(0);
+        }else{
+            lastTempBd = lastEnvTemp.getTemp();
+        }
+        //获取当前最新湿度
+        BigDecimal lastHumiBd = _getLastHumi(farmCode);
+
+        //获取最后24小时的温度数据曲线
+        List<Map<String,Object>> envTempList = _getLast24HourTemp(farmCode,Integer.parseInt(hours),lastEnvTemp);
+        System.out.println("envTempList.size >>>>>>>> "+envTempList.size());
+        for(int a=0;a<envTempList.size();a++){
+            Map hourMap = envTempList.get(a);
+            System.out.println("hourMap="+hourMap.toString());
+        }
+
+        //获取最后24小时的湿度数据曲线
+        List<EnvHumi> EnvHumiList = _getLast24HourHumi(farmCode,hours);
+
+        JSONObject resultJo = new JSONObject();
+        resultJo.put("lastTemp",lastTempBd.toString());
+        resultJo.put("lastHumi",lastHumiBd.toString());
+        resultJo.put("historyTemp",envTempList);
+        resultJo.put("historyHumi",EnvHumiList);
+        return new Result(ResultCode.SUCCESS,resultJo);
+    }
+
+    //获取最后24小时的湿度数据曲线
+    private List<EnvHumi> _getLast24HourHumi(String farmCode, String days) {
+        return null;
+    }
+
+    //获取最后24小时的温度数据曲线
+    private List<Map<String,Object>> _getLast24HourTemp(String farmCode, int hours, EnvTemp lastEnvTemp) throws ParseException {
+        DateUtil dateUtil = new DateUtil();
+        //获取最后一条记录的小时
+        //计算之前24小时时间,
+        String endTimeText = dateUtil.formatDatetimeText(lastEnvTemp.getAddTime());
+        String startTimeText = dateUtil.getBeforeHoursDatetime(endTimeText,hours);
+        System.out.println("startTime>>>>>>>>>>>>>>>>>>>>>"+startTimeText);
+        System.out.println("endTimeText>>>>>>>>>>>>>>>>>>>>>"+endTimeText);
+        Date startTime = dateUtil.parseDateTime(startTimeText);
+        Date endTime = dateUtil.parseDateTime(endTimeText);
+        //读取24小时所有记录
+        QueryWrapper<EnvTemp> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_code",farmCode);
+        queryWrapper.ge("add_time",startTime).le("add_time",endTime);
+        queryWrapper.orderByAsc("add_time");
+        List<EnvTemp> envTempList = envTempMapper.selectList(queryWrapper);
+        System.out.println("envTempList.size="+envTempList.size());
+
+        List<Map<String,Object>> outList = new ArrayList();
+        String currentHour = "";
+        BigDecimal totalTempBd = new BigDecimal(0);
+        int times = 0;
+        int x =0;
+        //计算每个小时的之和,并算平均数
+        for(EnvTemp envTemp:envTempList){
+            System.out.println("x="+(++x) + " "+envTemp.toString());
+            String formatTime = dateUtil.formatTime1(envTemp.getAddTime());
+            if(StringUtils.isBlank(currentHour)){
+                currentHour = formatTime;
+                totalTempBd = envTemp.getTemp();
+                times = 1;
+                Map<String,Object> outMap = new HashMap();
+                outMap.put("hour",currentHour);
+                outMap.put("temp",totalTempBd.toString());
+                outList.add(outMap);
+                System.out.println("第一条数据");
+            }else if(StringUtils.isNotBlank(currentHour) && formatTime.trim().equalsIgnoreCase(currentHour)){
+                times++;
+                totalTempBd = totalTempBd.add(envTemp.getTemp());
+                System.out.println("+++++++++");
+            }else  if(StringUtils.isNotBlank(currentHour) && !formatTime.trim().equalsIgnoreCase(currentHour)){
+                BigDecimal avgBd = totalTempBd.divide(new BigDecimal(times),1,BigDecimal.ROUND_HALF_UP);
+                Map<String,Object> outMap = new HashMap();
+                outMap.put("hour",currentHour);
+                outMap.put("temp",avgBd.toString());
+                addOutList(outMap,outList);
+                System.out.println("1111111="+currentHour);
+                //3个变量重新赋值;
+                currentHour = formatTime;
+                totalTempBd = envTemp.getTemp();
+                times = 1;
+                outMap.put("hour",currentHour);
+                outMap.put("temp",avgBd.toString());
+                outList.add(outMap);
+                System.out.println("2222>>>>>>>>>>"+currentHour);
+            }
+        }
+        return outList;
+    }
+
+    private void addOutList(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());
+            }
+        }
+    }
+
     /**
      * @Method      : getTempAndHumi
      * @Description : 1、读取当前温度和湿度 2、读取历史温度和湿度;
@@ -53,10 +164,10 @@ public class EnvTempServiceImpl extends ServiceImpl<EnvTempMapper, EnvTemp> impl
         //获取当前最新湿度
         BigDecimal lastHumiBd = _getLastHumi(farmCode);
 
-        //获取历史温度
+        //获取 N天历史温度数据曲线
         List<EnvTemp> EnvTempList = _getHistoryTemp(farmCode,days);
 
-        //获取历史湿度
+        //获取 N天历史湿度数据曲线
         List<EnvHumi> EnvHumiList = _getHistoryHumi(farmCode,days);
 
         JSONObject resultJo = new JSONObject();
@@ -128,4 +239,12 @@ public class EnvTempServiceImpl extends ServiceImpl<EnvTempMapper, EnvTemp> impl
             return lastEnvTemp.getTemp();
         }
     }
+
+    private EnvTemp _getLastTemp2(String farmCode) {
+        QueryWrapper<EnvTemp> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_code",farmCode);
+        queryWrapper.orderByDesc("add_time");
+        queryWrapper.last("LIMIT 1");
+        return envTempMapper.selectOne(queryWrapper);
+    }
 }