瀏覽代碼

新增:最新的温度和湿度,24小时温度列表,24小时湿度列表

zhuoning 2 年之前
父節點
當前提交
4e85570ddc

+ 90 - 32
huimv-env-platform/huimv-env-manage/src/main/java/com/huimv/env/manage/service/impl/EnvTempServiceImpl.java

@@ -41,37 +41,91 @@ public class EnvTempServiceImpl extends ServiceImpl<EnvTempMapper, EnvTemp> impl
         String hours = paramMap.get("hours");
         //获取当前最新温度
         EnvTemp lastEnvTemp = _getLastTemp2(farmCode);
-        BigDecimal lastTempBd = null;
-        if(lastEnvTemp == null){
-            lastTempBd = new BigDecimal(0);
-        }else{
+        BigDecimal lastTempBd = new BigDecimal(0);
+        if(lastEnvTemp != null){
             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());
-        }
 
+        //获取当前最新湿度
+        EnvHumi lastEnvHumi = _getLastHumi2(farmCode);
+        BigDecimal lastHumiBd =  new BigDecimal(0);
+        if(lastEnvHumi != null){
+            lastHumiBd = lastEnvHumi.getHumi();
+        }
         //获取最后24小时的湿度数据曲线
-        List<EnvHumi> EnvHumiList = _getLast24HourHumi(farmCode,hours);
+        List<Map<String,Object>> envHumiList = _getLast24HourHumi(farmCode,Integer.parseInt(hours),lastEnvHumi);
 
         JSONObject resultJo = new JSONObject();
         resultJo.put("lastTemp",lastTempBd.toString());
         resultJo.put("lastHumi",lastHumiBd.toString());
-        resultJo.put("historyTemp",envTempList);
-        resultJo.put("historyHumi",EnvHumiList);
+        resultJo.put("tempList",envTempList);
+        resultJo.put("humiList",envHumiList);
         return new Result(ResultCode.SUCCESS,resultJo);
     }
 
     //获取最后24小时的湿度数据曲线
-    private List<EnvHumi> _getLast24HourHumi(String farmCode, String days) {
-        return null;
+    private List<Map<String,Object>> _getLast24HourHumi(String farmCode, Integer hours, EnvHumi lastEnvHumi) throws ParseException {
+        DateUtil dateUtil = new DateUtil();
+        //获取最后一条记录的小时
+        //计算之前24小时时间,
+        String endTimeText = dateUtil.formatDatetimeText(lastEnvHumi.getAddTime());
+        String startTimeText = dateUtil.getBeforeHoursDatetime(endTimeText,hours);
+        //读取24小时所有记录
+        QueryWrapper<EnvHumi> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_code",farmCode);
+        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();
+        String currentHour = "";
+        BigDecimal totalHumiBd = new BigDecimal(0);
+        int totalTimes = 0;
+        //计算每个小时的之和,并算平均数
+        for(EnvHumi envHumi:envHumiList){
+            String formatTime = dateUtil.formatTime1(envHumi.getAddTime());
+            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());
+                outList.add(outMap);
+            }else if(StringUtils.isNotBlank(currentHour) && formatTime.trim().equalsIgnoreCase(currentHour)){
+                totalTimes++;
+                totalHumiBd = totalHumiBd.add(envHumi.getHumi());
+            }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());
+                //
+                updateToHumiOutList(outMap,outList);
+                //3个变量重新赋值;
+                currentHour = formatTime;
+                totalHumiBd = envHumi.getHumi();
+                totalTimes = 1;
+                //将每个小时第一条数据加入到输出列表中
+                outMap.put("hour",currentHour);
+                outMap.put("temp",avgBd.toString());
+                outList.add(outMap);
+            }
+        }
+        return outList;
+    }
+
+    private void updateToHumiOutList(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());
+            }
+        }
     }
 
     //获取最后24小时的温度数据曲线
@@ -81,8 +135,6 @@ public class EnvTempServiceImpl extends ServiceImpl<EnvTempMapper, EnvTemp> impl
         //计算之前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小时所有记录
@@ -91,51 +143,47 @@ public class EnvTempServiceImpl extends ServiceImpl<EnvTempMapper, EnvTemp> impl
         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;
+        int totalTimes = 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;
+                totalTimes = 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++;
+                totalTimes++;
                 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);
+                //将每小时最后一条数据更新到输出列表中
+                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());
-                addOutList(outMap,outList);
-                System.out.println("1111111="+currentHour);
+                //
+                updateToTempOutList(outMap,outList);
                 //3个变量重新赋值;
                 currentHour = formatTime;
                 totalTempBd = envTemp.getTemp();
-                times = 1;
+                totalTimes = 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) {
+    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())){
@@ -226,6 +274,16 @@ public class EnvTempServiceImpl extends ServiceImpl<EnvTempMapper, EnvTemp> impl
         }
     }
 
+    //获取当前最新湿度
+    private EnvHumi _getLastHumi2(String farmCode) {
+        QueryWrapper<EnvHumi> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("farm_code",farmCode);
+        queryWrapper.orderByDesc("add_time");
+        queryWrapper.last("LIMIT 1");
+        return envHumiMapper.selectOne(queryWrapper);
+    }
+
+
     //读取最新温度
     private BigDecimal _getLastTemp(String farmCode) {
         QueryWrapper<EnvTemp> queryWrapper = new QueryWrapper<>();