2023-07-20 15:38:46 优化完善策略执行下发设备调控逻辑!

2023-07-20 15:42:07 完成能耗对比策略执行前、后室内温度曲线查询接口!
2023-07-20 15:45:02  优化完善温度曲线查询方式,数据库存储依旧为1min入库1条数据,而在前端页面以间隔15mins的方式显示温度曲线!
master
魔神煜修罗皇 2 years ago
parent ad0d7ac973
commit 6191827dac
  1. 5
      psdc-business/src/main/java/com/psdc/entity/PsdcStrategyLog.java
  2. 4
      psdc-business/src/main/java/com/psdc/mapper/PsdcDeviceMapper.java
  3. 4
      psdc-business/src/main/java/com/psdc/mapper/PsdcElectricHtdataMapper.java
  4. 3
      psdc-business/src/main/java/com/psdc/mapper/PsdcStrategyLogMapper.java
  5. 4
      psdc-business/src/main/java/com/psdc/mapper/PsdcThermometerHtdataMapper.java
  6. 2
      psdc-business/src/main/java/com/psdc/mqtt/MyMQTTCallback.java
  7. 12
      psdc-business/src/main/java/com/psdc/mqtt/savedata/DataAndPowerSave.java
  8. 67
      psdc-business/src/main/java/com/psdc/service/impl/PsdcStrategyLogService.java
  9. 97
      psdc-business/src/main/java/com/psdc/service/impl/PsdcThermometerHtdataServiceImpl.java
  10. 15
      psdc-business/src/main/resources/mapper/business/PsdcDeviceMapper.xml
  11. 16
      psdc-business/src/main/resources/mapper/business/PsdcElectricHtdataMapper.xml
  12. 8
      psdc-business/src/main/resources/mapper/business/PsdcStrategyLogMapper.xml
  13. 18
      psdc-business/src/main/resources/mapper/business/PsdcThermometerHtdataMapper.xml

@ -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;

@ -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);
/**
* 分页查询指定行数据

@ -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);
/**
* 分页查询指定行数据

@ -33,6 +33,9 @@ public interface PsdcStrategyLogMapper {
PsdcStrategyLog selMyRunStrategy(@Param("userId") Long userId,
@Param("code") Integer status);
List<PsdcStrategyLog> selTodayNewLog(@Param("userId") Long userId,
@Param("code") Integer status);
/**
* 新增数据
*

@ -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);
/**
* 统计总行数

@ -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);
}

@ -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);

@ -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<Double> listTempIn = new ArrayList(); // 今天室内历史温度集合
List<String> timesIn = new ArrayList(); // 今天室内历史温度时间轴
Map<String, Object> map = new HashMap<>();
List<PsdcThermometerHtdata> 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<Double> listTemp, List<String> times, List<PsdcThermometerHtdata> 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);

@ -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<PsdcThermometerHtdata> 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<Double> listTemp, List<String> times, List<PsdcThermometerHtdata> tempList) {
private Double getaDouble(Double houseTemp, int count, List<Double> listTemp, List<String> times, List<PsdcThermometerHtdata> 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<String> times = new ArrayList(); // 时间轴
// 循环遍历今天历史数据对象集合
List<PsdcThermometerHtdata> 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;

@ -358,6 +358,21 @@
Update psdc_device Set device_status = #{devStatus} Where device_id = ${devId}
</update>
<select id="selDevCounts" resultType="java.lang.Integer">
Select Count(1) From psdc_device
<where>
<if test="userId != null and userId != ''">
And user_id = ${userId}
</if>
<if test="deviceModel != null and deviceModel != ''">
And device_model = #{deviceModel}
</if>
<if test="deviceAddress != null and deviceAddress != ''">
and device_address Like concat('%', #{deviceAddress}, '%')
</if>
</where>
</select>
<!-- 根据设备id查询设备名称-->
<select id="queryDeviceNameByDeviceId" resultType="string">
select device_name from psdc_device where device_id = #{deviceId}

@ -103,6 +103,22 @@
</select>
<select id="selHtCount" resultType="java.lang.Integer">
Select Count(1) From psdc_electric_htdata
<where>
<if test="deviceId != null and deviceId != ''">
device_id = #{deviceId}
</if>
<if test="beginTime != null and beginTime != ''"><!-- 开始时间检索 -->
And date_format(update_time,'%Y-%m-%d %H:%i:%S') &gt;= date_format(#{beginTime},'%Y-%m-%d %H:%i:%S')
</if>
<if test="endTime != null and endTime != ''"><!-- 结束时间检索 -->
And date_format(update_time,'%Y-%m-%d %H:%i:%S') &lt;= date_format(#{endTime},'%Y-%m-%d %H:%i:%S')
</if>
</where>
</select>
<!--分页查询指定行数据-->
<select id="queryAllByLimit" resultMap="PsdcElectricHtdataMap">
select

@ -56,6 +56,14 @@
Order By start_time Desc LIMIT 0,1
</select>
<select id="selTodayNewLog" resultMap="PsdcStrategyLogMap">
Select psl.strategy_code, strategy_name, MAX(start_time) As start_time From psdc_strategy_log psl
Left Join psdc_strategy ps On ps.strategy_code = psl.strategy_code
Where psl.runtime_status = #{code} And user_id = ${userId}
GROUP BY strategy_code
ORDER BY start_time
</select>
<!-- 更新数据 -->
<update id="updateRunRes">
Update psdc_strategy_log

@ -51,11 +51,27 @@
And date_format(pth.update_time,'%Y-%m-%d %H:%i:%S') &lt;= date_format(#{endTime},'%Y-%m-%d %H:%i:%S')
</if>
</where>
GROUP BY pth.update_time
GROUP BY date_format(pth.update_time,'%Y-%m-%d %H:%i')
ORDER BY pth.update_time
</select>
<select id="selHtCount" resultType="java.lang.Integer">
Select Count(1) From psdc_thermometer_htdata pth
<where>
<if test="deviceId != null and deviceId != ''">
And device_id = #{deviceId}
</if>
<if test="beginTime != null and beginTime != ''"><!-- 开始时间检索 -->
And date_format(pth.update_time,'%Y-%m-%d %H:%i:%S') &gt;= date_format(#{beginTime},'%Y-%m-%d %H:%i:%S')
</if>
<if test="endTime != null and endTime != ''"><!-- 结束时间检索 -->
And date_format(pth.update_time,'%Y-%m-%d %H:%i:%S') &lt;= date_format(#{endTime},'%Y-%m-%d %H:%i:%S')
</if>
</where>
</select>
<!--分页查询指定行数据-->
<select id="queryAllByLimit" resultMap="PsdcThermometerHtdataMap">
Select

Loading…
Cancel
Save