From 535bd66fbd2223c5f10335ccccdde96019bbf71b Mon Sep 17 00:00:00 2001 From: stone <827672943@qq.com> Date: Wed, 10 May 2023 17:42:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=80=E5=8F=91=E6=89=8B=E5=8A=A8=EF=BC=8C?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=EF=BC=8C=E5=AE=9A=E6=97=B6=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/psdc/entity/PsdcControlLog.java | 7 +- .../main/java/com/psdc/entity/PsdcScene.java | 23 ++- .../main/java/com/psdc/entity/PsdcTimer.java | 32 +++++ .../main/java/com/psdc/entity/vo/SceneVo.java | 32 +++++ .../java/com/psdc/mapper/PsdcSceneMapper.java | 88 ++++++++++++ .../java/com/psdc/mapper/PsdcTimerMapper.java | 56 ++++++++ .../com/psdc/service/IPsdcDeviceService.java | 21 ++- .../com/psdc/service/IPsdcSceneService.java | 45 ++++++ .../com/psdc/service/IPsdcTimerService.java | 42 ++++++ .../service/impl/IPsdcSceneServiceImpl.java | 97 +++++++++++++ .../service/impl/PsdcDeviceServiceImpl.java | 82 ++++++++++- .../service/impl/PsdcTimerServiceImpl.java | 64 +++++++++ .../mapper/business/PsdcSceneMapper.xml | 111 ++++++++++++++ .../mapper/business/PsdcTimerMapper.xml | 136 ++++++++++++++++++ .../psdc/core/controller/BaseController.java | 6 + .../java/com/psdc/enums/ControlKeyEnum.java | 39 +++++ .../controller/control/ManualControl.java | 48 ++++++- .../psdc/controller/control/TimerControl.java | 10 ++ 18 files changed, 918 insertions(+), 21 deletions(-) create mode 100644 psdc-business/src/main/java/com/psdc/entity/PsdcTimer.java create mode 100644 psdc-business/src/main/java/com/psdc/entity/vo/SceneVo.java create mode 100644 psdc-business/src/main/java/com/psdc/mapper/PsdcSceneMapper.java create mode 100644 psdc-business/src/main/java/com/psdc/mapper/PsdcTimerMapper.java create mode 100644 psdc-business/src/main/java/com/psdc/service/IPsdcSceneService.java create mode 100644 psdc-business/src/main/java/com/psdc/service/IPsdcTimerService.java create mode 100644 psdc-business/src/main/java/com/psdc/service/impl/IPsdcSceneServiceImpl.java create mode 100644 psdc-business/src/main/java/com/psdc/service/impl/PsdcTimerServiceImpl.java create mode 100644 psdc-business/src/main/resources/mapper/business/PsdcSceneMapper.xml create mode 100644 psdc-business/src/main/resources/mapper/business/PsdcTimerMapper.xml create mode 100644 psdc-common/src/main/java/com/psdc/enums/ControlKeyEnum.java diff --git a/psdc-business/src/main/java/com/psdc/entity/PsdcControlLog.java b/psdc-business/src/main/java/com/psdc/entity/PsdcControlLog.java index 0664793..62b58e1 100644 --- a/psdc-business/src/main/java/com/psdc/entity/PsdcControlLog.java +++ b/psdc-business/src/main/java/com/psdc/entity/PsdcControlLog.java @@ -52,6 +52,10 @@ public class PsdcControlLog implements Serializable { * 控制结果描述 */ private String controlContext; + /** + * 控制结果:1-控制中,2-控制成功,3-控制失败 + */ + private Integer controlMethod; /** * 创建者 */ @@ -69,7 +73,7 @@ public class PsdcControlLog implements Serializable { */ private String updateTime; - public PsdcControlLog(Integer deviceId, String deviceName, String deviceSn, String controlKey, String controlValue, Integer controlResult,String controlContext, String createBy) { + public PsdcControlLog(Integer deviceId, String deviceName, String deviceSn, String controlKey, String controlValue,Integer controlMethod, Integer controlResult,String controlContext, String createBy) { this.deviceId = deviceId; this.deviceName = deviceName; this.deviceSn = deviceSn; @@ -77,6 +81,7 @@ public class PsdcControlLog implements Serializable { this.controlValue = controlValue; this.controlResult = controlResult; this.controlContext = controlContext; + this.controlMethod = controlMethod; this.createBy = createBy; } } \ No newline at end of file diff --git a/psdc-business/src/main/java/com/psdc/entity/PsdcScene.java b/psdc-business/src/main/java/com/psdc/entity/PsdcScene.java index 416618e..14bb853 100644 --- a/psdc-business/src/main/java/com/psdc/entity/PsdcScene.java +++ b/psdc-business/src/main/java/com/psdc/entity/PsdcScene.java @@ -14,12 +14,23 @@ import lombok.NoArgsConstructor; @NoArgsConstructor public class PsdcScene { - private long scene; - private String sceneName; - private long deviceId; - private String deviceSn; - private String sceneKey; - private String sceneValue; + /** 场景值 */ + private Integer sceneId ; + /** 场景名 */ + private String sceneName ; + /** 用户id */ + private Integer userId; + /** 设备id */ + private Integer deviceId ; + /** 设备sn */ + private String deviceSn ; + /** 控制键描述 */ + private String sceneContext ; + /** 控制键 */ + private String sceneKey ; + /** 控制值 */ + private String sceneValue ; + } diff --git a/psdc-business/src/main/java/com/psdc/entity/PsdcTimer.java b/psdc-business/src/main/java/com/psdc/entity/PsdcTimer.java new file mode 100644 index 0000000..f9e3d19 --- /dev/null +++ b/psdc-business/src/main/java/com/psdc/entity/PsdcTimer.java @@ -0,0 +1,32 @@ +package com.psdc.entity; + +import com.psdc.core.domain.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.stereotype.Component; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Component +public class PsdcTimer extends BaseEntity { + /** 定时控制任务主键 */ + private Integer timerId ; + /** 设备id */ + private Integer deviceId ; + /** 用户id */ + private Integer userId ; + /** 执行时间 */ + private String runtimer ; + /** 执行指令 */ + private String controlKey ; + /** 指令描述 */ + private String controlContext ; + /** 指令值 */ + private String controlValue ; + /** cron表达式 */ + private String cronText ; + /** 状态:1-开启,2-暂停 */ + private Integer timerStatus ; +} diff --git a/psdc-business/src/main/java/com/psdc/entity/vo/SceneVo.java b/psdc-business/src/main/java/com/psdc/entity/vo/SceneVo.java new file mode 100644 index 0000000..a7f605d --- /dev/null +++ b/psdc-business/src/main/java/com/psdc/entity/vo/SceneVo.java @@ -0,0 +1,32 @@ +package com.psdc.entity.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class SceneVo { + + + /** 场景值 */ + private Integer sceneId ; + /** 场景名 */ + private String sceneName ; + /** 用户id */ + private Integer userId; + /** 设备id */ + private Integer deviceId ; + /** 设备名称 */ + private String deviceName; + /** 设备sn */ + private String deviceSn ; + /** 控制键描述 */ + private String sceneContext ; + /** 控制键 */ + private String sceneKey ; + /** 控制值 */ + private String sceneValue ; + +} diff --git a/psdc-business/src/main/java/com/psdc/mapper/PsdcSceneMapper.java b/psdc-business/src/main/java/com/psdc/mapper/PsdcSceneMapper.java new file mode 100644 index 0000000..ace9d22 --- /dev/null +++ b/psdc-business/src/main/java/com/psdc/mapper/PsdcSceneMapper.java @@ -0,0 +1,88 @@ +package com.psdc.mapper; + +import com.psdc.entity.PsdcScene; +import com.psdc.entity.vo.SceneVo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 场景设定;(psdc_scene)表数据库访问层 + * @author : http://www.chiner.pro + * @date : 2023-5-10 + */ +@Mapper +public interface PsdcSceneMapper{ + /** + * 通过ID查询单条数据 + * + * @param undefinedId 主键 + * @return 实例对象 + */ + PsdcScene queryById(Integer sceneId); + + + /** + * 新增数据 + * + * @param psdcScene 实例对象 + * @return 影响行数 + */ + int insert(PsdcScene psdcScene); + + /** + * 更新数据 + * + * @param psdcScene 实例对象 + * @return 影响行数 + */ + int update(PsdcScene psdcScene); + /** + * 通过主键删除数据 + * + * @param undefinedId 主键 + * @return 影响行数 + */ + int deleteById(Integer sceneId); + + /** + * 根据用户ID查询策略信息 + * @param userId + * @return + */ + List queryByUserId(Long userId); + + /** + * 获取场景名称分组 + * @param userId + * @return + */ + List querySceneGroup(Long userId); + + /** + * 根据设备id获取配置场景 + * @param userId + * @param deviceId + * @return + */ + List querySceneByDeviceId(@Param(value = "userId") Long userId, + @Param(value = "deviceId") Integer deviceId); + + /** + * 根据设备id获取配置场景 + * @param userId + * @param deviceId + * @return + */ + List querySceneByDeviceIdAndSceneName(@Param(value = "userId") Long userId, + @Param(value = "deviceId") Integer deviceId, + @Param(value = "sceneName") String sceneName); + + /** + * 根据策略名称查询策略信息 + * @param sceneName + * @return + */ + List queryBySceneName(String sceneName); + } \ No newline at end of file diff --git a/psdc-business/src/main/java/com/psdc/mapper/PsdcTimerMapper.java b/psdc-business/src/main/java/com/psdc/mapper/PsdcTimerMapper.java new file mode 100644 index 0000000..c2297a5 --- /dev/null +++ b/psdc-business/src/main/java/com/psdc/mapper/PsdcTimerMapper.java @@ -0,0 +1,56 @@ +package com.psdc.mapper; + +import java.util.List; + +import com.psdc.entity.PsdcTimer; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.data.domain.Pageable; + + + /** + * 定时控制任务表;(psdc_timer)表数据库访问层 + * @date : 2023-5-10 + */ +@Mapper +public interface PsdcTimerMapper{ + /** + * 通过ID查询单条数据 + * + * @param timerId 主键 + * @return 实例对象 + */ + PsdcTimer queryById(Integer timerId); + /** + * 分页查询指定行数据 + * + * @param psdcTimer 查询条件 + * @param pageable 分页对象 + * @return 对象列表 + */ + List queryAllByLimit(PsdcTimer psdcTimer); + + /** + * 新增数据 + * + * @param psdcTimer 实例对象 + * @return 影响行数 + */ + int insert(PsdcTimer psdcTimer); + + + /** + * 更新数据 + * + * @param psdcTimer 实例对象 + * @return 影响行数 + */ + int update(PsdcTimer psdcTimer); + /** + * 通过主键删除数据 + * + * @param timerId 主键 + * @return 影响行数 + */ + int deleteById(Integer timerId); +} \ No newline at end of file diff --git a/psdc-business/src/main/java/com/psdc/service/IPsdcDeviceService.java b/psdc-business/src/main/java/com/psdc/service/IPsdcDeviceService.java index 31d39ce..095052e 100644 --- a/psdc-business/src/main/java/com/psdc/service/IPsdcDeviceService.java +++ b/psdc-business/src/main/java/com/psdc/service/IPsdcDeviceService.java @@ -3,6 +3,7 @@ package com.psdc.service; import com.psdc.entity.PsdcDevice; import com.psdc.entity.vo.DeviceStatusVo; +import java.util.HashMap; import java.util.List; public interface IPsdcDeviceService { @@ -64,6 +65,24 @@ public interface IPsdcDeviceService { * @param runStatus * @return */ - int controlDeviceStartAndStop(Integer deviceId,Integer runStatus,String controlBy); + int controlDeviceStartAndStop(Integer deviceId,Integer runStatus,String controlBy,Integer controlMethod); + /** + * 设置温度指令 + * + * @param deviceId + * @param data + */ + int setTemperature(Integer deviceId, List data, String controlBym,Integer controlMethod); + + /** + * 设置单条温度指令 + * @param deviceId + * @param key + * @param value + * @param controlBym + * @param controlMethod + * @return + */ + int setTemperature(Integer deviceId, String key,String value, String controlBym,Integer controlMethod); } diff --git a/psdc-business/src/main/java/com/psdc/service/IPsdcSceneService.java b/psdc-business/src/main/java/com/psdc/service/IPsdcSceneService.java new file mode 100644 index 0000000..eec088b --- /dev/null +++ b/psdc-business/src/main/java/com/psdc/service/IPsdcSceneService.java @@ -0,0 +1,45 @@ +package com.psdc.service; + +import com.psdc.entity.PsdcScene; +import com.psdc.entity.vo.SceneVo; + +import java.util.List; +import java.util.Map; + +/** + * 场景设定;(psdc_scene)表服务接口 + * @date : 2023-5-10 + */ +public interface IPsdcSceneService { + /** + * 通过ID查询单条数据 + * + * @param undefinedId 主键 + * @return 实例对象 + */ + PsdcScene queryById(Integer sceneId); + + /** + * 新增数据 + * + * @param psdcScene 实例对象 + * @return 实例对象 + */ + PsdcScene insert(PsdcScene psdcScene); + /** + * 更新数据 + * + * @param psdcScene 实例对象 + * @return 实例对象 + */ + PsdcScene update(PsdcScene psdcScene); + /** + * 通过主键删除数据 + * + * @param undefinedId 主键 + * @return 是否成功 + */ + boolean deleteById(Integer sceneId); + + List> getStrategyList(); +} \ No newline at end of file diff --git a/psdc-business/src/main/java/com/psdc/service/IPsdcTimerService.java b/psdc-business/src/main/java/com/psdc/service/IPsdcTimerService.java new file mode 100644 index 0000000..bcd7df3 --- /dev/null +++ b/psdc-business/src/main/java/com/psdc/service/IPsdcTimerService.java @@ -0,0 +1,42 @@ +package com.psdc.service; + +import com.psdc.entity.PsdcTimer; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; + + + /** + * 定时控制任务表;(psdc_timer)表服务接口 + * @date : 2023-5-10 + */ +public interface IPsdcTimerService { + /** + * 通过ID查询单条数据 + * + * @param timerId 主键 + * @return 实例对象 + */ + PsdcTimer queryById(Integer timerId); + + /** + * 新增数据 + * + * @param psdcTimer 实例对象 + * @return 实例对象 + */ + PsdcTimer insert(PsdcTimer psdcTimer); + /** + * 更新数据 + * + * @param psdcTimer 实例对象 + * @return 实例对象 + */ + PsdcTimer update(PsdcTimer psdcTimer); + /** + * 通过主键删除数据 + * + * @param timerId 主键 + * @return 是否成功 + */ + boolean deleteById(Integer timerId); +} \ No newline at end of file diff --git a/psdc-business/src/main/java/com/psdc/service/impl/IPsdcSceneServiceImpl.java b/psdc-business/src/main/java/com/psdc/service/impl/IPsdcSceneServiceImpl.java new file mode 100644 index 0000000..368f716 --- /dev/null +++ b/psdc-business/src/main/java/com/psdc/service/impl/IPsdcSceneServiceImpl.java @@ -0,0 +1,97 @@ +package com.psdc.service.impl; + +import com.psdc.entity.PsdcScene; +import com.psdc.entity.vo.SceneVo; +import com.psdc.mapper.PsdcSceneMapper; +import com.psdc.service.IPsdcSceneService; +import com.psdc.utils.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + + +/** + * 场景设定;(psdc_scene)表服务实现类 + * @date : 2023-5-10 + */ +@Service +public class IPsdcSceneServiceImpl implements IPsdcSceneService { + @Autowired + private PsdcSceneMapper psdcSceneMapper; + + /** + * 通过ID查询单条数据 + * + * @param sceneId 主键 + * @return 实例对象 + */ + public PsdcScene queryById(Integer sceneId){ + return psdcSceneMapper.queryById(sceneId); + } + + + + /** + * 新增数据 + * + * @param psdcScene 实例对象 + * @return 实例对象 + */ + public PsdcScene insert(PsdcScene psdcScene){ + psdcSceneMapper.insert(psdcScene); + return psdcScene; + } + + /** + * 更新数据 + * + * @param psdcScene 实例对象 + * @return 实例对象 + */ + public PsdcScene update(PsdcScene psdcScene){ + psdcSceneMapper.update(psdcScene); + return queryById(psdcScene.getSceneId()); + } + + /** + * 通过主键删除数据 + * + * @param undefinedId 主键 + * @return 是否成功 + */ + public boolean deleteById(Integer sceneId){ + int total = psdcSceneMapper.deleteById(sceneId); + return total > 0; + } + + @Override + public List> getStrategyList() { + List scenes = psdcSceneMapper.querySceneGroup(SecurityUtils.getUserId()); + List> collectList = scenes.stream() + .map(scene -> { + List sceneVoList = psdcSceneMapper.queryBySceneName(scene); + Integer[] flag = {null}; + List> collect = sceneVoList.stream() + .filter(sceneVo -> !Objects.equals(flag[0], sceneVo.getDeviceId())) + .peek(sceneVo -> flag[0] = sceneVo.getDeviceId()) + .map(sceneVo -> { + Map map1 = new HashMap<>(); + map1.put("device_name", sceneVo.getDeviceName()); + map1.put("device_id", sceneVo.getDeviceId()); + List sceneVoList1 = psdcSceneMapper.querySceneByDeviceIdAndSceneName(SecurityUtils.getUserId(), sceneVo.getDeviceId(), scene); + map1.put("value", sceneVoList1); + return map1; + }) + .collect(Collectors.toList()); + Map map = new HashMap<>(); + map.put("sceneName", scene); + map.put("data", collect); + return map; + }) + .collect(Collectors.toList()); + return collectList; + } +} \ No newline at end of file diff --git a/psdc-business/src/main/java/com/psdc/service/impl/PsdcDeviceServiceImpl.java b/psdc-business/src/main/java/com/psdc/service/impl/PsdcDeviceServiceImpl.java index 7eecc1c..111f7ab 100644 --- a/psdc-business/src/main/java/com/psdc/service/impl/PsdcDeviceServiceImpl.java +++ b/psdc-business/src/main/java/com/psdc/service/impl/PsdcDeviceServiceImpl.java @@ -3,6 +3,7 @@ package com.psdc.service.impl; import com.psdc.entity.PsdcControlLog; import com.psdc.entity.PsdcDevice; import com.psdc.entity.vo.DeviceStatusVo; +import com.psdc.enums.ControlKeyEnum; import com.psdc.exception.ControlException; import com.psdc.mapper.PsdcControlLogMapper; import com.psdc.mapper.PsdcDeviceMapper; @@ -13,7 +14,10 @@ import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; @Service @@ -104,29 +108,93 @@ public class PsdcDeviceServiceImpl implements IPsdcDeviceService{ * @return */ @Override - public int controlDeviceStartAndStop(Integer deviceId, Integer runStatus,String controlBy) { + public int controlDeviceStartAndStop(Integer deviceId, Integer runStatus,String controlBy,Integer controlMethod) { - String s = ""; + String value = ""; if(runStatus == 1){ - s = "启动"; + value = "启动"; } else if ( runStatus == 2 ) { - s = "停止"; + value = "停止"; } log.info("设备id:{}",deviceId); PsdcDevice psdcDevice = psdcDeviceMapper.queryById(deviceId); if(psdcDevice == null){ - psdcControlLogMapper.insert(new PsdcControlLog(deviceId,null,null,"设备启停",s,2,"未找到该设备",controlBy)); + psdcControlLogMapper.insert(new PsdcControlLog(deviceId,null,null,"设备启停",value,controlMethod,3,"未找到该设备",controlBy)); throw new ControlException("控制失败,未找到该设备"); } //TODO 发送MQTT指令 - // psdcControlLogMapper.insert(new PsdcControlLog(deviceId,psdcDevice.getDeviceName(),psdcDevice.getDeviceSn(),"设备启停",s,2,"等待终端响应超时",controlBy)); + // psdcControlLogMapper.insert(new PsdcControlLog(deviceId,psdcDevice.getDeviceName(),psdcDevice.getDeviceSn(),"设备启停",value,controlMethod,3,"手动控制,等待终端响应超时",controlBy)); //发送成功 - psdcControlLogMapper.insert(new PsdcControlLog(deviceId,psdcDevice.getDeviceName(),psdcDevice.getDeviceSn(),"设备启停",s,2,"控制成功",controlBy)); + psdcControlLogMapper.insert(new PsdcControlLog(deviceId,psdcDevice.getDeviceName(),psdcDevice.getDeviceSn(),"设备启停",value,controlMethod,2,"手动控制,控制成功",controlBy)); return psdcDeviceMapper.updateDevRunStatusByDevId(deviceId,runStatus); } + @Override + public int setTemperature(Integer deviceId, List data, String controlBy,Integer controlMethod) { + + + log.info("设备id:{}",deviceId); + log.info("控制指令:{}",data); + + + PsdcDevice psdcDevice = psdcDeviceMapper.queryById(deviceId); + if(psdcDevice == null){ + psdcControlLogMapper.insert(new PsdcControlLog(deviceId,null,null,"设定温度",null,controlMethod,3,"未找到该设备",controlBy)); + throw new ControlException("控制失败,未找到该设备"); + } + + AtomicInteger atomicInteger = new AtomicInteger(0); + + for (Map map: data) { + + String controlKey = map.get("controlKey").toString(); + String controlValue = map.get("controlValue").toString(); + String controlContext = ControlKeyEnum.getControlContext(controlKey); + //TODO 发送MQTT指令 + // psdcControlLogMapper.insert(new PsdcControlLog(deviceId,psdcDevice.getDeviceName(),psdcDevice.getDeviceSn(),controlContext,controlValue,controlMethod,2,"控制成功",controlBy)); + // psdcControlLogMapper.insert(new PsdcControlLog(deviceId,psdcDevice.getDeviceName(),psdcDevice.getDeviceSn(),controlContext,controlValue,controlMethod,3,"等待终端响应超时",controlBy)); + //发送成功 + + psdcControlLogMapper.insert(new PsdcControlLog(deviceId,psdcDevice.getDeviceName(),psdcDevice.getDeviceSn(),controlContext,controlValue,controlMethod,2,"控制成功",controlBy)); + atomicInteger.incrementAndGet(); + } + return atomicInteger.get(); + } + + /** + * 单条控制指令 + * @param deviceId + * @param key + * @param value + * @param controlBy + * @param controlMethod + * @return + */ + @Override + public int setTemperature(Integer deviceId, String key,String value, String controlBy,Integer controlMethod) { + + + log.info("设备id:{}",deviceId); + log.info("控制指令:{}",key); + log.info("控制内容:{}",value); + String controlContext = ControlKeyEnum.getControlContext(key); + + PsdcDevice psdcDevice = psdcDeviceMapper.queryById(deviceId); + if(psdcDevice == null){ + psdcControlLogMapper.insert(new PsdcControlLog(deviceId,null,null,controlContext,null,controlMethod,3,"未找到该设备",controlBy)); + throw new ControlException("控制失败,未找到该设备"); + } + + //TODO 发送MQTT指令 + // psdcControlLogMapper.insert(new PsdcControlLog(deviceId,psdcDevice.getDeviceName(),psdcDevice.getDeviceSn(),controlContext,value,controlMethod,2,"控制成功",controlBy)); + // psdcControlLogMapper.insert(new PsdcControlLog(deviceId,psdcDevice.getDeviceName(),psdcDevice.getDeviceSn(),controlContext,value,controlMethod,3,"等待终端响应超时",controlBy)); + //发送成功 + + return psdcControlLogMapper.insert(new PsdcControlLog(deviceId,psdcDevice.getDeviceName(),psdcDevice.getDeviceSn(),controlContext,value,controlMethod,2,"控制成功",controlBy)); + + } } \ No newline at end of file diff --git a/psdc-business/src/main/java/com/psdc/service/impl/PsdcTimerServiceImpl.java b/psdc-business/src/main/java/com/psdc/service/impl/PsdcTimerServiceImpl.java new file mode 100644 index 0000000..e2120f4 --- /dev/null +++ b/psdc-business/src/main/java/com/psdc/service/impl/PsdcTimerServiceImpl.java @@ -0,0 +1,64 @@ +package com.psdc.service.impl; + +import com.psdc.entity.PsdcTimer; +import com.psdc.mapper.PsdcTimerMapper; +import com.psdc.service.IPsdcTimerService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + + + /** + * 定时控制任务表;(psdc_timer)表服务实现类 + * @author : http://www.chiner.pro + * @date : 2023-5-10 + */ +@Service +public class PsdcTimerServiceImpl implements IPsdcTimerService { + @Autowired + private PsdcTimerMapper psdcTimerMapper; + + /** + * 通过ID查询单条数据 + * + * @param timerId 主键 + * @return 实例对象 + */ + public PsdcTimer queryById(Integer timerId){ + return psdcTimerMapper.queryById(timerId); + } + + + + /** + * 新增数据 + * + * @param psdcTimer 实例对象 + * @return 实例对象 + */ + public PsdcTimer insert(PsdcTimer psdcTimer){ + psdcTimerMapper.insert(psdcTimer); + return psdcTimer; + } + + /** + * 更新数据 + * + * @param psdcTimer 实例对象 + * @return 实例对象 + */ + public PsdcTimer update(PsdcTimer psdcTimer){ + psdcTimerMapper.update(psdcTimer); + return queryById(psdcTimer.getTimerId()); + } + + /** + * 通过主键删除数据 + * + * @param timerId 主键 + * @return 是否成功 + */ + public boolean deleteById(Integer timerId){ + int total = psdcTimerMapper.deleteById(timerId); + return total > 0; + } +} \ No newline at end of file diff --git a/psdc-business/src/main/resources/mapper/business/PsdcSceneMapper.xml b/psdc-business/src/main/resources/mapper/business/PsdcSceneMapper.xml new file mode 100644 index 0000000..5187978 --- /dev/null +++ b/psdc-business/src/main/resources/mapper/business/PsdcSceneMapper.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + insert into psdc_scene(scene_name,user_id,device_id,device_sn,scene_context,scene_key,scene_value) + values (#{sceneName},#{userId},#{deviceId},#{deviceSn},#{sceneContext},#{sceneKey},#{sceneValue}) + + + + + update psdc_scene + + + scene_name = #{sceneName}, + + + user_id = #{userId}, + + + device_id = #{deviceId}, + + + device_sn = #{deviceSn}, + + + scene_context = #{sceneContext}, + + + scene_key = #{sceneKey}, + + + scene_value = #{sceneValue}, + + + where scene_id = #{sceneId} + + + + + delete from psdc_scene where scene_id = #{sceneId} + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/psdc-business/src/main/resources/mapper/business/PsdcTimerMapper.xml b/psdc-business/src/main/resources/mapper/business/PsdcTimerMapper.xml new file mode 100644 index 0000000..f5e1030 --- /dev/null +++ b/psdc-business/src/main/resources/mapper/business/PsdcTimerMapper.xml @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + insert into psdc_timer(timer_id,device_id,user_id,runtimer,control_key,control_context,control_value,cron_text,timer_status,create_by,create_time,update_by,update_time) + values (#{timerId},#{deviceId},#{userId},#{runtimer},#{controlKey},#{controlContext},#{controlValue},#{cronText},#{timerStatus},#{createBy},#{createTime},#{updateBy},#{updateTime}) + + + + + + + update psdc_timer + + + timer_id = #{timerId}, + + + device_id = #{deviceId}, + + + user_id = #{userId}, + + + runtimer = #{runtimer}, + + + control_key = #{controlKey}, + + + control_context = #{controlContext}, + + + control_value = #{controlValue}, + + + cron_text = #{cronText}, + + + timer_status = #{timerStatus}, + + + create_by = #{createBy}, + + + create_time = #{createTime}, + + + update_by = #{updateBy}, + + + update_time = #{updateTime}, + + + where timer_id = #{timerId} + + + + + delete from psdc_timer where timer_id = #{timerId} + + \ No newline at end of file diff --git a/psdc-common/src/main/java/com/psdc/core/controller/BaseController.java b/psdc-common/src/main/java/com/psdc/core/controller/BaseController.java index 09e8784..2347518 100644 --- a/psdc-common/src/main/java/com/psdc/core/controller/BaseController.java +++ b/psdc-common/src/main/java/com/psdc/core/controller/BaseController.java @@ -60,6 +60,12 @@ public class BaseController PageUtils.startPage(); } + protected T myPage(JSONObject jsonObject,Class tClass){ + PageMethod.startPage(jsonObject.getInteger("pageNum"),jsonObject.getInteger("pageSize")); + T t = JSON.parseObject(String.valueOf(jsonObject), tClass); + return t; + } + /** * 设置请求排序数据 */ diff --git a/psdc-common/src/main/java/com/psdc/enums/ControlKeyEnum.java b/psdc-common/src/main/java/com/psdc/enums/ControlKeyEnum.java new file mode 100644 index 0000000..224aba4 --- /dev/null +++ b/psdc-common/src/main/java/com/psdc/enums/ControlKeyEnum.java @@ -0,0 +1,39 @@ +package com.psdc.enums; + +public enum ControlKeyEnum { + + + + TEMPERATURE("temp","设定温度"), + IN_TEMPERATURE("intemp","设定进水温度"), + OUT_TEMPERATURE("outtemp","设定出水温度"); + + /** + * 设备指令 + */ + private final String controlKey; + + /** + * 控制描述 + */ + private final String controlContext; + + ControlKeyEnum(String controlKey, String controlContext) { + this.controlKey = controlKey; + this.controlContext = controlContext; + } + + public String getControlContext() { + return controlContext; + } + + public static String getControlContext(String controlKey) { + switch (controlKey){ + case "temp":return TEMPERATURE.getControlContext(); + case "intemp":return IN_TEMPERATURE.getControlContext(); + case "outtemp":return OUT_TEMPERATURE.getControlContext(); + default:return null; + } + } +} + diff --git a/psdc-web/src/main/java/com/psdc/controller/control/ManualControl.java b/psdc-web/src/main/java/com/psdc/controller/control/ManualControl.java index 0a3089e..d3828fb 100644 --- a/psdc-web/src/main/java/com/psdc/controller/control/ManualControl.java +++ b/psdc-web/src/main/java/com/psdc/controller/control/ManualControl.java @@ -1,8 +1,6 @@ package com.psdc.controller.control; -import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; -import com.github.pagehelper.page.PageMethod; import com.psdc.core.controller.BaseController; import com.psdc.core.domain.AjaxResult; import com.psdc.core.page.TableDataInfo; @@ -10,16 +8,20 @@ import com.psdc.entity.PsdcControlLog; import com.psdc.entity.vo.DeviceStatusVo; import com.psdc.service.IPsdcControlLogService; import com.psdc.service.IPsdcDeviceService; +import com.psdc.service.IPsdcSceneService; import com.psdc.utils.SecurityUtils; -import org.apache.poi.ss.formula.functions.T; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; +import java.util.HashMap; import java.util.List; +import java.util.Map; @RestController +@Slf4j @RequestMapping("/control/manual") public class ManualControl extends BaseController { @@ -30,6 +32,9 @@ public class ManualControl extends BaseController { @Autowired private IPsdcControlLogService psdcControlLogService; + @Autowired + private IPsdcSceneService psdcSceneService; + /** * 查询设备状态列表 * @return @@ -49,7 +54,7 @@ public class ManualControl extends BaseController { @PreAuthorize("@ss.hasPermi('control:manual:startstop')") @PostMapping("/startAndStop") public AjaxResult deviceStartAndStop(@RequestBody JSONObject jsonObject){ - int i = psdcDeviceService.controlDeviceStartAndStop(jsonObject.getInteger("deviceId"), jsonObject.getInteger("runStatus"), SecurityUtils.getUsername()); + int i = psdcDeviceService.controlDeviceStartAndStop(jsonObject.getInteger("deviceId"), jsonObject.getInteger("runStatus"), SecurityUtils.getUsername(),1); if ( i == 1){ return AjaxResult.success("控制成功"); } else { @@ -57,17 +62,48 @@ public class ManualControl extends BaseController { } } + /** * 获取调控日志列表 */ @PreAuthorize("@ss.hasPermi('control:manual:controlLogList')") @PostMapping("/controlLogList") public TableDataInfo controlLogList(@RequestBody JSONObject jsonObject) { - PageMethod.startPage(jsonObject.getInteger("pageNum"),jsonObject.getInteger("pageSize")); - PsdcControlLog psdcControlLog = JSON.parseObject(String.valueOf(jsonObject), PsdcControlLog.class); + PsdcControlLog psdcControlLog = myPage(jsonObject, PsdcControlLog.class); List list = psdcControlLogService.query(psdcControlLog); return getDataTable(list); } + /** + * 获取策略控制 + * @return + */ + @PreAuthorize("@ss.hasPermi('control:manual:strategy')") + @GetMapping("/strategyList") + public AjaxResult getStrategyList(){ + List> strategyList = psdcSceneService.getStrategyList(); + return AjaxResult.success(strategyList); + } + + /** + * 设置温度 + * @param jsonObject + * @return + */ + @PreAuthorize("@ss.hasPermi('control:manual:temperature')") + @PostMapping("/setTemperature") + public AjaxResult setTemperature(@RequestBody JSONObject jsonObject){ + Integer deviceId = jsonObject.getInteger("deviceId"); + List data = jsonObject.getList("data", HashMap.class); + int i = psdcDeviceService.setTemperature(deviceId, data, SecurityUtils.getUsername(),1); + if (i == data.size()) { + return AjaxResult.success("控制成功"); + } else { + log.info("控制设备失败。返回数据库实际插入数据:{}",i); + return AjaxResult.error("控制失败,请联系管理员"); + } + } + + } diff --git a/psdc-web/src/main/java/com/psdc/controller/control/TimerControl.java b/psdc-web/src/main/java/com/psdc/controller/control/TimerControl.java index 91a30ab..0967975 100644 --- a/psdc-web/src/main/java/com/psdc/controller/control/TimerControl.java +++ b/psdc-web/src/main/java/com/psdc/controller/control/TimerControl.java @@ -1,4 +1,14 @@ package com.psdc.controller.control; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@Slf4j +@RequestMapping("/control/timer") public class TimerControl { + + + }