diff --git a/psdc-business/src/main/java/com/psdc/entity/PsdcStrategyLog.java b/psdc-business/src/main/java/com/psdc/entity/PsdcStrategyLog.java index 8486ef8..342dcca 100644 --- a/psdc-business/src/main/java/com/psdc/entity/PsdcStrategyLog.java +++ b/psdc-business/src/main/java/com/psdc/entity/PsdcStrategyLog.java @@ -6,8 +6,10 @@ import lombok.NoArgsConstructor; import org.springframework.stereotype.Component; import java.io.Serializable; +import java.util.List; +import java.util.Map; - /** +/** * @author : stone * @date : 2023-6-11 */ @@ -45,6 +47,7 @@ public class PsdcStrategyLog implements Serializable,Cloneable{ private String oneUseEnergy; // 单位时长用电 private Double sceneUseEnergy; // 总用电量 private String runSceneName; // 正在执行步骤名称 + private Map tempInAry; // 室内温度变化曲线 public PsdcStrategyLog(Long strategyCode, String startTime, String allSceneCodes,Integer runtimeStatus, Double inFrontAvgtemp, Double outFrontAvgtemp) { this.strategyCode = strategyCode; diff --git a/psdc-business/src/main/java/com/psdc/mapper/PsdcDeviceMapper.java b/psdc-business/src/main/java/com/psdc/mapper/PsdcDeviceMapper.java index 9ef115c..79ab043 100644 --- a/psdc-business/src/main/java/com/psdc/mapper/PsdcDeviceMapper.java +++ b/psdc-business/src/main/java/com/psdc/mapper/PsdcDeviceMapper.java @@ -44,6 +44,10 @@ public interface PsdcDeviceMapper{ Integer upDevStatus(@Param(value = "devStatus") Integer devStatus, @Param(value = "devId") Integer devId); + Integer selDevCounts(@Param(value = "userId") Long userId, + @Param(value = "deviceModel") String deviceModel, + @Param(value = "deviceAddress") String deviceAddress); + /** * 分页查询指定行数据 diff --git a/psdc-business/src/main/java/com/psdc/mapper/PsdcElectricHtdataMapper.java b/psdc-business/src/main/java/com/psdc/mapper/PsdcElectricHtdataMapper.java index 39af0d6..01fc8fb 100644 --- a/psdc-business/src/main/java/com/psdc/mapper/PsdcElectricHtdataMapper.java +++ b/psdc-business/src/main/java/com/psdc/mapper/PsdcElectricHtdataMapper.java @@ -35,6 +35,10 @@ public interface PsdcElectricHtdataMapper{ @Param(value = "beginTime") String begin_time, @Param(value = "endTime") String end_time); + Integer selHtCount(@Param(value = "deviceId") Integer deviceId, + @Param(value = "beginTime") String begin_time, + @Param(value = "endTime") String end_time); + /** * 分页查询指定行数据 diff --git a/psdc-business/src/main/java/com/psdc/mapper/PsdcStrategyLogMapper.java b/psdc-business/src/main/java/com/psdc/mapper/PsdcStrategyLogMapper.java index 269afc3..4d9e34d 100644 --- a/psdc-business/src/main/java/com/psdc/mapper/PsdcStrategyLogMapper.java +++ b/psdc-business/src/main/java/com/psdc/mapper/PsdcStrategyLogMapper.java @@ -33,6 +33,9 @@ public interface PsdcStrategyLogMapper { PsdcStrategyLog selMyRunStrategy(@Param("userId") Long userId, @Param("code") Integer status); + List selTodayNewLog(@Param("userId") Long userId, + @Param("code") Integer status); + /** * 新增数据 * diff --git a/psdc-business/src/main/java/com/psdc/mapper/PsdcThermometerHtdataMapper.java b/psdc-business/src/main/java/com/psdc/mapper/PsdcThermometerHtdataMapper.java index 93f829f..15edc2d 100644 --- a/psdc-business/src/main/java/com/psdc/mapper/PsdcThermometerHtdataMapper.java +++ b/psdc-business/src/main/java/com/psdc/mapper/PsdcThermometerHtdataMapper.java @@ -42,6 +42,10 @@ public interface PsdcThermometerHtdataMapper{ @Param(value = "beginTime") String begin_time, @Param(value = "endTime") String end_time); + Integer selHtCount(@Param(value = "deviceId") Integer deviceId, + @Param(value = "beginTime") String begin_time, + @Param(value = "endTime") String end_time); + /** * 统计总行数 diff --git a/psdc-business/src/main/java/com/psdc/mqtt/MyMQTTCallback.java b/psdc-business/src/main/java/com/psdc/mqtt/MyMQTTCallback.java index 8523751..b3548f1 100644 --- a/psdc-business/src/main/java/com/psdc/mqtt/MyMQTTCallback.java +++ b/psdc-business/src/main/java/com/psdc/mqtt/MyMQTTCallback.java @@ -83,7 +83,7 @@ public class MyMQTTCallback implements MqttCallback { log.info("实时数据,开始入库!"); // 更新实时数据,历史数据 dataAndPowerSaveBean.saveDevRtData(jsonObject); - } else if ("result".equals(str)) { + } else if ("resulta".equals(str)) { log.info("控制结果数据,开始入库!"); controlResultSave.saveDevRtData(jsonObject); } diff --git a/psdc-business/src/main/java/com/psdc/mqtt/savedata/DataAndPowerSave.java b/psdc-business/src/main/java/com/psdc/mqtt/savedata/DataAndPowerSave.java index 53b97fa..0894e4d 100644 --- a/psdc-business/src/main/java/com/psdc/mqtt/savedata/DataAndPowerSave.java +++ b/psdc-business/src/main/java/com/psdc/mqtt/savedata/DataAndPowerSave.java @@ -64,6 +64,8 @@ public class DataAndPowerSave { String time1 = timestamp.split("T")[1]; int hour = Integer.parseInt(time1.substring(0, 8).split(":")[0]); int min = Integer.parseInt(time1.substring(0, 8).split(":")[1]); + String begin = date1 + " " + time1.substring(0,5) + ":00"; + String end = date1 + " " + time1.substring(0,5) + ":59"; String upDateTime = date1 + " " + time1.substring(0, 8); // 根据设备id获取数据,查看设备库中是否有该设备,若没有该设备,则不对该设备的数据进行实时数据库入库操作 @@ -113,7 +115,10 @@ public class DataAndPowerSave { peht.setTotp(P); peht.setTotwh(TotWh); peht.setUseDeiffen(useEnergy); - electricHtDataMapper.insert(peht); + int count5 = electricHtDataMapper.selHtCount(deviceId, begin, end); + if (count5 < 1){ + electricHtDataMapper.insert(peht); + } // 根据设备id查询设备功率表中该设备的条数 int count3 = devicePowerHtData96Mapper.todayPowerCount(deviceId, samDate); @@ -151,7 +156,10 @@ public class DataAndPowerSave { ptht.setThermometerValue(NowTemp); ptht.setThermometerValueIn(InTemp); ptht.setThermometerValueOut(OutTemp); - thermometerHtDataMapper.insert(ptht); + int count6 = thermometerHtDataMapper.selHtCount(deviceId, begin, end); + if (count6 < 1){ + thermometerHtDataMapper.insert(ptht); + } } deviceMapper.upDevStatus(devStatus(devStatus), deviceId); diff --git a/psdc-business/src/main/java/com/psdc/service/impl/PsdcStrategyLogService.java b/psdc-business/src/main/java/com/psdc/service/impl/PsdcStrategyLogService.java index ea0dfe5..04ad251 100644 --- a/psdc-business/src/main/java/com/psdc/service/impl/PsdcStrategyLogService.java +++ b/psdc-business/src/main/java/com/psdc/service/impl/PsdcStrategyLogService.java @@ -1,13 +1,9 @@ package com.psdc.service.impl; -import com.psdc.entity.PsdcScene; -import com.psdc.entity.PsdcStrategy; -import com.psdc.entity.PsdcStrategyLog; +import com.psdc.entity.*; +import com.psdc.entity.res.PsdcThermometerDataRes; import com.psdc.entity.vo.SceneVo; -import com.psdc.mapper.PsdcElectricHtdataMapper; -import com.psdc.mapper.PsdcSceneMapper; -import com.psdc.mapper.PsdcStrategyLogMapper; -import com.psdc.mapper.PsdcStrategyMapper; +import com.psdc.mapper.*; import com.psdc.service.IPsdcStrategyLogService; import com.psdc.utils.SecurityUtils; import org.springframework.stereotype.Service; @@ -16,7 +12,7 @@ import javax.annotation.Resource; import java.text.DecimalFormat; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.List; +import java.util.*; /** * @Author:戴仕崑 @@ -37,6 +33,12 @@ public class PsdcStrategyLogService implements IPsdcStrategyLogService { PsdcSceneMapper sceneMapper; @Resource PsdcElectricHtdataMapper electricHtDataMapper; + @Resource + PsdcThermometerHtdataMapper thermometerHtDataMapper; + @Resource + PsdcThermometerRtdataMapper thermometerRtDataMapper; + @Resource + PsdcDeviceMapper deviceMapper; DecimalFormat df = new DecimalFormat("#.00"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @@ -65,8 +67,6 @@ public class PsdcStrategyLogService implements IPsdcStrategyLogService { Integer deviceId = sv.getDeviceId(); Double energy = electricHtDataMapper.selTodayUseEnergy(deviceId, psl.getStartTime(), psl.getEndTime()); strategyUseEnergy = strategyUseEnergy + energy; -// System.out.println("\n策略名称: " + psl.getStrategyName() + ",步骤名称: " + sv.getSceneName() -// + ",设备名称: " + sv.getDeviceName() + ",当前用能: " + energy + ",目前累计用能: " + strategyUseEnergy + "。\n"); } @@ -91,10 +91,57 @@ public class PsdcStrategyLogService implements IPsdcStrategyLogService { psl.setOneUseEnergy(s); } + + Date date ; + try { + date = sdf.parse(psl.getStartTime()); + } catch (ParseException e) { + e.printStackTrace(); + date = new Date(); + } + long twoHour = date.getTime() - 7200000; + date.setTime(twoHour); + String tb = sdf.format(date); + long tomorrow = twoHour + 86400000; + date.setTime(tomorrow); + String te = sdf.format(date); + System.out.println("策略名称: " + psl.getStrategyName() + ",开始=" + tb + ",结束=" + te + "。\n"); + Integer countIn = deviceMapper.selDevCounts(userId, "温度传感器", "室内"); + List listTempIn = new ArrayList(); // 今天室内历史温度集合 + List timesIn = new ArrayList(); // 今天室内历史温度时间轴 + Map map = new HashMap<>(); + List tempInList = thermometerHtDataMapper.selTodayThermometer2("室内", tb, te); + getaDouble(countIn, listTempIn, timesIn, tempInList); + map.put("listTempIn", listTempIn); + map.put("timesIn", timesIn); + psl.setTempInAry(map); + } return logList; } + private void getaDouble(int count, List listTemp, List times, List tempList) { + if (tempList.size() == 0) { + count = 1; + } + try { + long time1 = 0; + for (int i = 0; i < tempList.size(); i++) { + PsdcThermometerHtdata scr1 = tempList.get(i); + long time2 = sdf.parse(scr1.getUpdateTime()).getTime(); + long time3 = time2 - time1; + if(time3 >= 900000){ + Double evIn = scr1.getThermometerValue() / count; + listTemp.add(Double.parseDouble(df.format(evIn))); + times.add(scr1.getUpdateTime().split(" ")[1].substring(0,5)); + time1 = sdf.parse(scr1.getUpdateTime()).getTime(); + } + } + } catch (Exception e){ + e.printStackTrace(); + } + } + @Override public PsdcStrategyLog selMyNewLog(Long code) { return strategyLogMapper.selMyNewLog(SecurityUtils.getUserId(), code); diff --git a/psdc-business/src/main/java/com/psdc/service/impl/PsdcThermometerHtdataServiceImpl.java b/psdc-business/src/main/java/com/psdc/service/impl/PsdcThermometerHtdataServiceImpl.java index 1eb49fa..180aac1 100644 --- a/psdc-business/src/main/java/com/psdc/service/impl/PsdcThermometerHtdataServiceImpl.java +++ b/psdc-business/src/main/java/com/psdc/service/impl/PsdcThermometerHtdataServiceImpl.java @@ -12,6 +12,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.text.DecimalFormat; +import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -41,6 +42,7 @@ public class PsdcThermometerHtdataServiceImpl implements IPsdcThermometerHtdataS SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMdd"); SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH"); + SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 DecimalFormat df = new DecimalFormat("#.00"); @Override @@ -67,19 +69,30 @@ public class PsdcThermometerHtdataServiceImpl implements IPsdcThermometerHtdataS // 循环遍历今天历史数据对象集合 List htdata = psdcThermometerHtdataMapper.selTodayThermometer(d, tb, te); - for (PsdcThermometerHtdata h : htdata) { - if (null != h.getThermometerValue()) { - listTemp.add(h.getThermometerValue()); - } - if (null != h.getThermometerValueIn()) { - listIn.add(h.getThermometerValueIn()); - } - if (null != h.getThermometerValueOut()) { - listOut.add(h.getThermometerValueOut()); + try { + long time1 = 0; + for (int i = 0; i < htdata.size(); i++) { + PsdcThermometerHtdata h = htdata.get(i); + long time2 = sdf4.parse(h.getUpdateTime()).getTime(); + long time3 = time2 - time1; + if(time3 >= 900000){ + if (null != h.getThermometerValue()) { + listTemp.add(h.getThermometerValue()); + } + if (null != h.getThermometerValueIn()) { + listIn.add(h.getThermometerValueIn()); + } + if (null != h.getThermometerValueOut()) { + listOut.add(h.getThermometerValueOut()); + } + + String t = h.getUpdateTime().split(" ")[1].substring(0, 5); + times.add(t); + time1 = sdf4.parse(h.getUpdateTime()).getTime(); + } } - - String t = h.getUpdateTime().split(" ")[1].substring(0, 5); - times.add(t); + } catch (Exception e){ + e.printStackTrace(); } Double useEnergy = psdcElectricHtdataMapper.selTodayUseEnergy(d, tb, te); @@ -167,17 +180,29 @@ public class PsdcThermometerHtdataServiceImpl implements IPsdcThermometerHtdataS return ary; } - private Double getaDouble(Double houseTemp, int count, List listTemp, List times, List tempList) { + private Double getaDouble(Double houseTemp, int count, List listTemp, List times, List tempList) { if (tempList.size() == 0) { count = 1; } - for (PsdcThermometerHtdata scr1 : tempList) { - Double evIn = scr1.getThermometerValue() / count; - listTemp.add(Double.parseDouble(df.format(evIn))); - times.add(scr1.getUpdateTime().split(" ")[1].substring(0,5)); + try { + long time1 = 0; + for (int i = 0; i < tempList.size(); i++) { + PsdcThermometerHtdata scr1 = tempList.get(i); + long time2 = sdf4.parse(scr1.getUpdateTime()).getTime(); + long time3 = time2 - time1; + if(time3 >= 900000){ + Double evIn = scr1.getThermometerValue() / count; + listTemp.add(Double.parseDouble(df.format(evIn))); + times.add(scr1.getUpdateTime().split(" ")[1].substring(0,5)); + time1 = sdf4.parse(scr1.getUpdateTime()).getTime(); + } + } + houseTemp = houseTemp / count; + return houseTemp; + } catch (Exception e){ + e.printStackTrace(); + return 0.0; } - houseTemp = houseTemp / count; - return houseTemp; } /** @@ -196,18 +221,30 @@ public class PsdcThermometerHtdataServiceImpl implements IPsdcThermometerHtdataS List times = new ArrayList(); // 时间轴 // 循环遍历今天历史数据对象集合 List htdata = psdcThermometerHtdataMapper.selTodayThermometer(deviceId, tb, te); - for (PsdcThermometerHtdata h : htdata) { - if (null != h.getThermometerValueIn()) { - listIn.add(h.getThermometerValueIn()); - } - if (null != h.getThermometerValueOut()) { - listOut.add(h.getThermometerValueOut()); - } - if (null != h.getThermometerValue()) { - listTemps.add(h.getThermometerValue()); + try { + long time1 = 0; + for (int i = 0; i < htdata.size(); i++) { + PsdcThermometerHtdata h = htdata.get(i); + long time2 = sdf4.parse(h.getUpdateTime()).getTime(); + long time3 = time2 - time1; + if(time3 >= 900000){ + if (null != h.getThermometerValue()) { + listTemps.add(h.getThermometerValue()); + } + if (null != h.getThermometerValueIn()) { + listIn.add(h.getThermometerValueIn()); + } + if (null != h.getThermometerValueOut()) { + listOut.add(h.getThermometerValueOut()); + } + + String t = h.getUpdateTime().split(" ")[1].substring(0, 5); + times.add(t); + time1 = sdf4.parse(h.getUpdateTime()).getTime(); + } } - String t = h.getUpdateTime().split(" ")[1].substring(0, 5); - times.add(t); + } catch (Exception e){ + e.printStackTrace(); } AjaxResult ajax = AjaxResult.success().put("tempIn", listIn).put("tempOut", listOut).put("temps", listTemps).put("times", times); return ajax; diff --git a/psdc-business/src/main/resources/mapper/business/PsdcDeviceMapper.xml b/psdc-business/src/main/resources/mapper/business/PsdcDeviceMapper.xml index 5d6e5e1..23ae59e 100644 --- a/psdc-business/src/main/resources/mapper/business/PsdcDeviceMapper.xml +++ b/psdc-business/src/main/resources/mapper/business/PsdcDeviceMapper.xml @@ -358,6 +358,21 @@ Update psdc_device Set device_status = #{devStatus} Where device_id = ${devId} + + + + + + + Update psdc_strategy_log diff --git a/psdc-business/src/main/resources/mapper/business/PsdcThermometerHtdataMapper.xml b/psdc-business/src/main/resources/mapper/business/PsdcThermometerHtdataMapper.xml index d12f538..97d9a8f 100644 --- a/psdc-business/src/main/resources/mapper/business/PsdcThermometerHtdataMapper.xml +++ b/psdc-business/src/main/resources/mapper/business/PsdcThermometerHtdataMapper.xml @@ -51,11 +51,27 @@ And date_format(pth.update_time,'%Y-%m-%d %H:%i:%S') <= date_format(#{endTime},'%Y-%m-%d %H:%i:%S') - GROUP BY pth.update_time + GROUP BY date_format(pth.update_time,'%Y-%m-%d %H:%i') ORDER BY pth.update_time + + +