2023-05-29 15:26:18 优化完善场景策略管理查询接口!

master
魔神煜修罗皇 2 years ago
parent ce34a9afc4
commit 3fc6c73edf
  1. 49
      psdc-business/src/main/java/com/psdc/entity/res/PsdcSceneRes.java
  2. 34
      psdc-business/src/main/java/com/psdc/entity/vo/DeviceVo.java
  3. 13
      psdc-business/src/main/java/com/psdc/entity/vo/SceneVo.java
  4. 5
      psdc-business/src/main/java/com/psdc/mapper/PsdcSceneMapper.java
  5. 3
      psdc-business/src/main/java/com/psdc/service/IPsdcSceneService.java
  6. 108
      psdc-business/src/main/java/com/psdc/service/impl/PsdcSceneServiceImpl.java
  7. 30
      psdc-business/src/main/resources/mapper/business/PsdcSceneMapper.xml
  8. 6
      psdc-web/src/main/java/com/psdc/controller/manager/PsdcSceneController.java

@ -0,0 +1,49 @@
package com.psdc.entity.res;
import com.psdc.entity.vo.DeviceVo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @AuthorStone
* @Projectpsdc
* @FilenamePsdcSceneRes
* @Date2023/5/29 9:07
* @Version 1.0
*/
@Data
@Component
@AllArgsConstructor
@NoArgsConstructor
public class PsdcSceneRes {
/** 场景值 */
private Integer sceneId ;
/** 场景名称 */
private String sceneName ;
/** 策略码 */
private Long sceneCode;
/** 用户id */
private Long userId;
/** 创建时间 */
private String createTime ;
/** 场景策略备注 */
private String sceneRemark ;
/**
* 具体设备温度管理场景策略集合
*/
private List<DeviceVo> deviceVos;
public PsdcSceneRes(Integer sceneId, String sceneName, Long sceneCode, Long userId, String createTime, String sceneRemark) {
this.sceneId = sceneId;
this.sceneName = sceneName;
this.sceneCode = sceneCode;
this.userId = userId;
this.createTime = createTime;
this.sceneRemark = sceneRemark;
}
}

@ -0,0 +1,34 @@
package com.psdc.entity.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;
/**
* @AuthorStone
* @Projectpsdc
* @FilenameDeviceVo
* @Date2023/5/29 10:26
* @Version 1.0
*/
@Data
@Component
@AllArgsConstructor
@NoArgsConstructor
public class DeviceVo {
/** 设备id */
private Integer deviceId ;
/** 设备名称 */
private String deviceName ;
/** 设备sn */
private String deviceSn ;
/** 进水温度 */
private String intemp ;
/** 出水温度 */
private String outtemp ;
/** 温度 */
private String temp ;
}

@ -4,6 +4,8 @@ import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ -32,6 +34,17 @@ public class SceneVo {
private String sceneKey ;
/** 控制值 */
private String sceneValue ;
/** 场景策略备注 */
private String sceneRemark ;
/** 创建人 */
private String createBy ;
/** 创建时间 */
private String createTime ;
/** 修改人 */
private String updateBy ;
/** 修改时间 */
private Date updateTime ;
public SceneVo(String sceneName, Integer deviceId, String sceneContext, String sceneKey, String sceneValue) {
this.sceneName = sceneName;

@ -109,7 +109,10 @@ public interface PsdcSceneMapper{
*/
List<SceneVo> queryBySceneName(String sceneName);
List<SceneVo> findSceneByUserAndSceneName(@Param(value = "userId") Long userId,
List<SceneVo> findSceneByUserAndSceneCode(@Param(value = "userId") Long userId,
@Param(value = "sceneCode") Long sceneCode,
@Param(value = "sceneName") String sceneName);
List <SceneVo> queryScenes(@Param(value = "userId") Long userId,
@Param(value = "sceneCode") Long sceneCode);
}

@ -2,6 +2,7 @@ package com.psdc.service;
import com.psdc.entity.PsdcScene;
import com.psdc.entity.request.PsdcSceneRequest;
import com.psdc.entity.res.PsdcSceneRes;
import com.psdc.entity.vo.SceneVo;
import java.util.List;
@ -39,5 +40,5 @@ public interface IPsdcSceneService {
List<Map<String, Object>> getStrategyList();
List<SceneVo> findSceneByUserAndSceneName(Long sceneCode);
List<PsdcSceneRes> findSceneByUserAndSceneName(Long sceneCode);
}

@ -2,6 +2,8 @@ package com.psdc.service.impl;
import com.psdc.entity.PsdcScene;
import com.psdc.entity.request.PsdcSceneRequest;
import com.psdc.entity.res.PsdcSceneRes;
import com.psdc.entity.vo.DeviceVo;
import com.psdc.entity.vo.SceneVo;
import com.psdc.mapper.PsdcSceneMapper;
import com.psdc.service.IPsdcSceneService;
@ -19,6 +21,7 @@ import static org.springframework.transaction.annotation.Propagation.REQUIRES_NE
/**
* 场景设定;(psdc_scene)表服务实现类
*
* @date : 2023-5-10
*/
@Slf4j
@ -30,32 +33,33 @@ public class PsdcSceneServiceImpl implements IPsdcSceneService {
/**
* 新增数据
*
* @param scenes 实例对象集合
* @return Boolean
*/
@Override
public Boolean insert(PsdcSceneRequest scenes){
public Boolean insert(PsdcSceneRequest scenes) {
Date date = new Date();
long timestamp = getSecondTimestampTwo(date);
long userId = SecurityUtils.getUserId();
List<SceneVo> scenesList = new ArrayList<>();
if (null != scenes.getIntemp() && !"".equals(scenes.getIntemp())){
if (null != scenes.getIntemp() && !"".equals(scenes.getIntemp())) {
SceneVo sceneVo;
sceneVo = new SceneVo(scenes.getSceneName(), scenes.getDeviceId(), "进水温度", "intemp", scenes.getIntemp());
scenesList.add(sceneVo);
}
if (null != scenes.getOuttemp() && !"".equals(scenes.getOuttemp())){
if (null != scenes.getOuttemp() && !"".equals(scenes.getOuttemp())) {
SceneVo sceneVo = new SceneVo(scenes.getSceneName(), scenes.getDeviceId(), "出水温度", "outtemp", scenes.getOuttemp());
scenesList.add(sceneVo);
}
if (null != scenes.getTemp() && !"".equals(scenes.getTemp())){
if (null != scenes.getTemp() && !"".equals(scenes.getTemp())) {
SceneVo sceneVo = new SceneVo(scenes.getSceneName(), scenes.getDeviceId(), "温度", "temp", scenes.getTemp());
scenesList.add(sceneVo);
}
try {
for (SceneVo sc : scenesList){
for (SceneVo sc : scenesList) {
sc.setSceneCode(timestamp);
sc.setUserId(userId);
}
@ -70,6 +74,7 @@ public class PsdcSceneServiceImpl implements IPsdcSceneService {
/**
* 在原有策略基础上增加设备温度管理
*
* @param scenes
* @return
*/
@ -79,22 +84,22 @@ public class PsdcSceneServiceImpl implements IPsdcSceneService {
List<SceneVo> scenesList = new ArrayList<>();
String sceneName = psdcSceneMapper.querySceneNameById(scenes.getSceneCode());
Integer deviceId = scenes.getDeviceId();
if (null != scenes.getIntemp() && !"".equals(scenes.getIntemp())){
if (null != scenes.getIntemp() && !"".equals(scenes.getIntemp())) {
SceneVo sceneVo = new SceneVo(sceneName, deviceId, "进水温度", "intemp", scenes.getIntemp());
scenesList.add(sceneVo);
}
if (null != scenes.getOuttemp() && !"".equals(scenes.getOuttemp())){
if (null != scenes.getOuttemp() && !"".equals(scenes.getOuttemp())) {
SceneVo sceneVo = new SceneVo(sceneName, deviceId, "出水温度", "outtemp", scenes.getOuttemp());
scenesList.add(sceneVo);
}
if (null != scenes.getTemp() && !"".equals(scenes.getTemp())){
if (null != scenes.getTemp() && !"".equals(scenes.getTemp())) {
SceneVo sceneVo = new SceneVo(sceneName, deviceId, "温度", "temp", scenes.getTemp());
scenesList.add(sceneVo);
}
try {
for (SceneVo sc : scenesList){
for (SceneVo sc : scenesList) {
sc.setSceneCode(scenes.getSceneCode());
sc.setUserId(userId);
}
@ -134,18 +139,19 @@ public class PsdcSceneServiceImpl implements IPsdcSceneService {
/**
* 通过策略名称删除数据
*
* @param scene
* @return 是否成功
*/
@Override
public Boolean deleteByScene(PsdcSceneRequest scene) {
int count = 0;
if (null != scene.getSceneCode() && !"".equals(scene.getSceneCode())){
if (null != scene.getSceneCode() && !"".equals(scene.getSceneCode())) {
count = psdcSceneMapper.deleteBySceneName(scene.getSceneCode());
} else {
count = psdcSceneMapper.deleteById(scene.getSceneId());
}
if (count > 0){
if (count > 0) {
return true;
} else {
return false;
@ -182,25 +188,95 @@ public class PsdcSceneServiceImpl implements IPsdcSceneService {
}
@Override
public List<SceneVo> findSceneByUserAndSceneName(Long sceneCode) {
public List<PsdcSceneRes> findSceneByUserAndSceneName(Long sceneCode) {
Long userId = SecurityUtils.getUserId();
String sceneName = "";
return psdcSceneMapper.findSceneByUserAndSceneName(userId, sceneCode, sceneName);
List<PsdcSceneRes> sceneRes = new ArrayList<>();
List<SceneVo> list = psdcSceneMapper.findSceneByUserAndSceneCode(userId, sceneCode, sceneName);
List<SceneVo> sceneVos = psdcSceneMapper.queryScenes(userId, sceneCode);
for (SceneVo sv : sceneVos) {
PsdcSceneRes res = new PsdcSceneRes(sv.getSceneId(), sv.getSceneName(), sv.getSceneCode(), sv.getUserId(), sv.getCreateTime(), sv.getSceneRemark());
sceneRes.add(res);
}
for (PsdcSceneRes psr : sceneRes) {
Long code = psr.getSceneCode();
List<SceneVo> listByCode = new ArrayList<>();
for (SceneVo sv : list) {
if (code == sv.getSceneCode()) { // 判断是否为同个策略
listByCode.add(sv);
}
}
List<DeviceVo> ary = new ArrayList<>();
Integer deviceId = listByCode.get(0).getDeviceId();
DeviceVo deviceVo = new DeviceVo();
for (int i = 0; i < listByCode.size(); i++) {
SceneVo sv = listByCode.get(i);
if (deviceId == sv.getDeviceId()) {
deviceVo.setDeviceId(sv.getDeviceId());
deviceVo.setDeviceName(sv.getDeviceName());
deviceVo.setDeviceSn(sv.getDeviceSn());
switch (sv.getSceneKey()) {
case "intemp":
deviceVo.setIntemp(sv.getSceneValue());
break;
case "outtemp":
deviceVo.setOuttemp(sv.getSceneValue());
break;
case "temp":
deviceVo.setTemp(sv.getSceneValue());
break;
}
} else {
ary.add(deviceVo);
deviceId = sv.getDeviceId();
deviceVo = new DeviceVo();
deviceVo.setDeviceId(sv.getDeviceId());
deviceVo.setDeviceName(sv.getDeviceName());
deviceVo.setDeviceSn(sv.getDeviceSn());
if (i == listByCode.size() - 1){ // 判断是否为最后1个元素
switch (sv.getSceneKey()) {
case "intemp":
deviceVo.setIntemp(sv.getSceneValue());
case "outtemp":
deviceVo.setOuttemp(sv.getSceneValue());
case "temp":
deviceVo.setTemp(sv.getSceneValue());
}
ary.add(deviceVo);
} else {
switch (sv.getSceneKey()) {
case "intemp":
deviceVo.setIntemp(sv.getSceneValue());
break;
case "outtemp":
deviceVo.setOuttemp(sv.getSceneValue());
break;
case "temp":
deviceVo.setTemp(sv.getSceneValue());
break;
}
}
}
}
psr.setDeviceVos(ary);
}
return sceneRes;
}
/**
* 获取精确到秒的时间戳
*
* @param date
* @return
*/
public static long getSecondTimestampTwo(Date date){
public static long getSecondTimestampTwo(Date date) {
if (null == date) {
return 0;
}
String timestamp = String.valueOf(date.getTime()/1000);
String timestamp = String.valueOf(date.getTime() / 1000);
return Long.valueOf(timestamp);
}
}

@ -24,6 +24,11 @@
<result property="sceneContext" column="scene_context" />
<result property="sceneKey" column="scene_key" />
<result property="sceneValue" column="scene_value" />
<result property="sceneRemark" column="scene_remark" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
</resultMap>
<!-- 通过ID查询单条数据 -->
@ -119,7 +124,8 @@
<!-- 根据用户ID查询策略信息-->
<select id="queryByUserId" resultMap="SceneVoMap">
Select ps.scene_id,ps.scene_name,ps.scene_code,ps.user_id,pd.device_name,ps.device_id,pd.device_sn,ps.scene_context,ps.scene_key,ps.scene_value
Select ps.scene_id,ps.scene_name,ps.scene_code,ps.user_id,pd.device_name,ps.device_id,pd.device_sn,ps.scene_context,ps.scene_key,ps.scene_value,
ps.scene_remark,ps.create_by,ps.create_time,ps.update_by,ps.update_time
From psdc_scene ps
Left join sys_user su on ps.user_id = su.user_id
Left join psdc_device pd on ps.device_id = pd.device_id
@ -161,8 +167,9 @@
Where ps.scene_name Like concat('%', #{sceneName}, '%')
</select>
<select id="findSceneByUserAndSceneName" resultMap="SceneVoMap">
Select ps.scene_id,ps.scene_name,ps.scene_code,ps.user_id,pd.device_name,ps.device_id,pd.device_sn,ps.scene_context,ps.scene_key,ps.scene_value
<select id="findSceneByUserAndSceneCode" resultMap="SceneVoMap">
Select ps.scene_id,ps.scene_name,ps.scene_code,ps.user_id,pd.device_name,ps.device_id,pd.device_sn,ps.scene_context,ps.scene_key,ps.scene_value,
ps.scene_remark,ps.scene_remark,ps.create_by,ps.create_time,ps.update_by,ps.update_time
From psdc_scene ps
Left join sys_user su On su.user_id = ps.user_id
Left join psdc_device pd On pd.device_id = ps.device_id
@ -179,5 +186,22 @@
</where>
</select>
<select id="queryScenes" resultMap="SceneVoMap">
Select ps.scene_id,ps.scene_name,ps.scene_code,ps.user_id,pd.device_name,ps.device_id,pd.device_sn,ps.scene_context,ps.scene_key,ps.scene_value,
ps.scene_remark,ps.scene_remark,ps.create_by,ps.create_time,ps.update_by,ps.update_time
From psdc_scene ps
Left join sys_user su On su.user_id = ps.user_id
Left join psdc_device pd On pd.device_id = ps.device_id
<where>
<if test="userId != null and userId != ''">
And su.user_id = #{userId}
</if>
<if test="sceneCode != null and sceneCode != ''">
And ps.scene_code = #{sceneCode}
</if>
</where>
Group By ps.scene_code
</select>
</mapper>

@ -1,6 +1,7 @@
package com.psdc.controller.manager;
import com.alibaba.fastjson2.JSONObject;
import com.github.pagehelper.page.PageMethod;
import com.psdc.annotation.Log;
import com.psdc.core.controller.BaseController;
import com.psdc.core.domain.AjaxResult;
@ -8,6 +9,7 @@ import com.psdc.core.page.TableDataInfo;
import com.psdc.entity.PsdcDevice;
import com.psdc.entity.PsdcScene;
import com.psdc.entity.request.PsdcSceneRequest;
import com.psdc.entity.res.PsdcSceneRes;
import com.psdc.entity.vo.SceneVo;
import com.psdc.enums.BusinessType;
import com.psdc.service.IPsdcSceneService;
@ -55,8 +57,8 @@ public class PsdcSceneController extends BaseController {
@RequestMapping(value = "/list", method = RequestMethod.POST)
public TableDataInfo list(@RequestBody JSONObject jsonObject) {
startPage();
PsdcScene sceneVo = myPage(jsonObject, PsdcScene.class);
List<SceneVo> list = psdcSceneService.findSceneByUserAndSceneName(sceneVo.getSceneCode());
PsdcSceneRequest sceneVo = myPage(jsonObject, PsdcSceneRequest.class);
List<PsdcSceneRes> list = psdcSceneService.findSceneByUserAndSceneName(sceneVo.getSceneCode());
return getDataTable(list);
}

Loading…
Cancel
Save