From 70c9ca73f137f84d2caf3e7e3e922c70ea2d09c6 Mon Sep 17 00:00:00 2001 From: XMnhwj_BackTechnologyDevelopment <3512363680@qq.com> Date: Tue, 20 Jun 2023 15:31:33 +0800 Subject: [PATCH] =?UTF-8?q?2023-06-20=2015:29:46=20=E9=85=8D=E5=90=88?= =?UTF-8?q?=E5=89=8D=E7=AB=AF=E6=96=B9=E9=9D=A2=EF=BC=8C=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=AE=8C=E5=96=84=E7=AD=96=E7=95=A5=E7=AE=A1=E7=90=86=E7=9A=84?= =?UTF-8?q?=E5=A2=9E=E3=80=81=E5=88=A0=E3=80=81=E6=94=B9=E6=9F=A5=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=8C=E7=8E=B0=E5=9C=A8=E7=9B=AE=E5=89=8D=E5=9F=BA?= =?UTF-8?q?=E6=9C=AC=E4=B8=8A=E6=B2=A1=E6=9C=89=E6=B2=A1=E6=9C=89=E5=A4=AA?= =?UTF-8?q?=E5=A4=A7=E9=97=AE=E9=A2=98=E4=BA=86!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../psdc/entity/request/PsdcSceneRequest.java | 4 +- .../com/psdc/entity/res/PsdcSceneRes.java | 28 ++- .../com/psdc/mapper/PsdcStrategyMapper.java | 15 ++ .../com/psdc/service/IPsdcSceneService.java | 5 +- .../service/impl/PsdcSceneServiceImpl.java | 178 +++++++++++++----- .../mapper/business/PsdcDeviceMapper.xml | 2 + .../mapper/business/PsdcStrategyMapper.xml | 42 ++++- .../manager/PsdcSceneController.java | 2 +- 8 files changed, 216 insertions(+), 60 deletions(-) diff --git a/psdc-business/src/main/java/com/psdc/entity/request/PsdcSceneRequest.java b/psdc-business/src/main/java/com/psdc/entity/request/PsdcSceneRequest.java index 793d3d9..358aae2 100644 --- a/psdc-business/src/main/java/com/psdc/entity/request/PsdcSceneRequest.java +++ b/psdc-business/src/main/java/com/psdc/entity/request/PsdcSceneRequest.java @@ -24,8 +24,10 @@ public class PsdcSceneRequest { /** 场景名 */ private String sceneName ; - /** 策略码 */ + /** 场景策略码 */ private Long sceneCode; + /** 模式策略码 */ + private Long strategyCode; /** 用户id */ private Long userId; /** 设备id */ diff --git a/psdc-business/src/main/java/com/psdc/entity/res/PsdcSceneRes.java b/psdc-business/src/main/java/com/psdc/entity/res/PsdcSceneRes.java index 39a7724..934b287 100644 --- a/psdc-business/src/main/java/com/psdc/entity/res/PsdcSceneRes.java +++ b/psdc-business/src/main/java/com/psdc/entity/res/PsdcSceneRes.java @@ -7,6 +7,7 @@ import lombok.NoArgsConstructor; import org.springframework.stereotype.Component; import java.util.List; +import java.util.Map; /** * @Author:Stone @@ -21,6 +22,10 @@ import java.util.List; @NoArgsConstructor public class PsdcSceneRes { + /** + * 步骤序号 + */ + private Integer ID; /** 场景值 */ private Integer sceneId ; /** 场景名称 */ @@ -51,17 +56,22 @@ public class PsdcSceneRes { private String judgeElement ; /** 判断条件元素的数据值 */ private String judgeData ; + /** + * 步骤标题 + */ + private String title; + /** + * 选择设备集合 + */ + private List checkedSblb; + /** + * 可控设备列表 + */ + private List sblb; - 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; - } - public PsdcSceneRes(Integer sceneId, String sceneName, Long sceneCode, Long userId, String createTime, String sceneRemark, Integer isJudge, Integer judgeDevice, String judgeElement, String judgeData) { + public PsdcSceneRes(Integer ID, Integer sceneId, String sceneName, Long sceneCode, Long userId, String createTime, String sceneRemark, Integer isJudge, Integer judgeDevice, String judgeElement, String judgeData) { + this.ID = ID; this.sceneId = sceneId; this.sceneName = sceneName; this.sceneCode = sceneCode; diff --git a/psdc-business/src/main/java/com/psdc/mapper/PsdcStrategyMapper.java b/psdc-business/src/main/java/com/psdc/mapper/PsdcStrategyMapper.java index b97254f..7452225 100644 --- a/psdc-business/src/main/java/com/psdc/mapper/PsdcStrategyMapper.java +++ b/psdc-business/src/main/java/com/psdc/mapper/PsdcStrategyMapper.java @@ -37,4 +37,19 @@ public interface PsdcStrategyMapper { * @return 影响行数 */ Integer insert(PsdcStrategy psdcStrategy); + + /** + * 更新数据 + * + * @param psdcStrategy 实例对象 + * @return 影响行数 + */ + Integer update(PsdcStrategy psdcStrategy); + + /** + * 通过策略名称删除模式策略 + * @param sceneCode + * @return + */ + Integer deleteByStrategyName(@Param(value = "sceneCode") Long sceneCode); } diff --git a/psdc-business/src/main/java/com/psdc/service/IPsdcSceneService.java b/psdc-business/src/main/java/com/psdc/service/IPsdcSceneService.java index 294fc34..68fc3cd 100644 --- a/psdc-business/src/main/java/com/psdc/service/IPsdcSceneService.java +++ b/psdc-business/src/main/java/com/psdc/service/IPsdcSceneService.java @@ -4,6 +4,7 @@ import com.psdc.entity.PsdcScene; import com.psdc.entity.PsdcStrategy; import com.psdc.entity.request.PsdcSceneRequest; import com.psdc.entity.res.PsdcSceneRes; +import com.psdc.entity.vo.DeviceVo; import com.psdc.entity.vo.StrategyVo; import java.util.List; @@ -25,12 +26,14 @@ public interface IPsdcSceneService { List queryScene(Long strategyCode); + List selUserAllControlDevs(Long userId, List devVoList); + /** * 更新数据 * @param scenes 实例对象 * @return 实例对象 */ - Boolean update(PsdcSceneRes scenes); + Boolean update(StrategyVo scenes); /** * 通过策略名称删除数据 diff --git a/psdc-business/src/main/java/com/psdc/service/impl/PsdcSceneServiceImpl.java b/psdc-business/src/main/java/com/psdc/service/impl/PsdcSceneServiceImpl.java index 4a10ddb..8e8af42 100644 --- a/psdc-business/src/main/java/com/psdc/service/impl/PsdcSceneServiceImpl.java +++ b/psdc-business/src/main/java/com/psdc/service/impl/PsdcSceneServiceImpl.java @@ -1,15 +1,14 @@ package com.psdc.service.impl; +import com.psdc.entity.PsdcDevice; import com.psdc.entity.PsdcStrategy; import com.psdc.entity.request.PsdcSceneRequest; import com.psdc.entity.res.PsdcSceneRes; import com.psdc.entity.vo.DeviceVo; +import com.psdc.entity.vo.ModelVo; import com.psdc.entity.vo.SceneVo; import com.psdc.entity.vo.StrategyVo; -import com.psdc.mapper.PsdcModelMapper; -import com.psdc.mapper.PsdcSceneMapper; -import com.psdc.mapper.PsdcStrategyMapper; -import com.psdc.mapper.SysUserMapper; +import com.psdc.mapper.*; import com.psdc.service.IPsdcSceneService; import com.psdc.utils.SecurityUtils; import lombok.extern.slf4j.Slf4j; @@ -35,10 +34,10 @@ public class PsdcSceneServiceImpl implements IPsdcSceneService { private PsdcSceneMapper psdcSceneMapper; @Resource - private SysUserMapper sysUserMapper; + private PsdcModelMapper psdcModelMapper; @Resource - private PsdcModelMapper psdcModelMapper; + private PsdcDeviceMapper psdcDeviceMapper; @Resource private PsdcStrategyMapper psdcStrategyMapper; @@ -46,7 +45,6 @@ public class PsdcSceneServiceImpl implements IPsdcSceneService { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - /** * 新增数据 * @@ -60,12 +58,14 @@ public class PsdcSceneServiceImpl implements IPsdcSceneService { String userName = SecurityUtils.getUsername(); List scenesList = new ArrayList<>(); String s = null; - for (PsdcSceneRes sc : scenes.getScenesList()){ + // System.out.println("\n步骤集合: " + scenes.getScenesList() + "\n,步骤条数: " + scenes.getScenesList().size() + "\n"); + for (int i = scenes.getScenesList().size() - 1; i >= 0; i--) { Date date2 = new Date(); - long timestamp = getSecondTimestampTwo(date2); - s = timestamp + ","; + PsdcSceneRes sc = scenes.getScenesList().get(i); + long timestamp = getSecondTimestampTwo(date2) - i; + s = timestamp + "," + s; for (DeviceVo dev : sc.getDeviceVos()) { - for (Map m : dev.getTempList()){ + for (Map m : dev.getTempList()) { String desc = (String) m.get("label"); String tempValue = (String) m.get("value"); String sceneKey = sceneKey(desc); @@ -77,6 +77,7 @@ public class PsdcSceneServiceImpl implements IPsdcSceneService { } } } + s = s.substring(0, s.length() - 5); PsdcStrategy strategy = new PsdcStrategy(userId, scenes.getStrategyName(), getSecondTimestampTwo(date), s, scenes.getStrategyInfo(), userName, sdf.format(date)); try { @@ -105,21 +106,66 @@ public class PsdcSceneServiceImpl implements IPsdcSceneService { Long userId = SecurityUtils.getUserId(); List ary = new ArrayList<>(); List list = psdcStrategyMapper.queryByUser(userId, strategyCode); - for (PsdcStrategy srt : list){ + int i = 1; + for (PsdcStrategy srt : list) { String[] codes = srt.getScenes().split(","); List list2 = new ArrayList<>(); - for (String s : codes){ + for (String s : codes) { List list3 = findSceneByUserAndSceneName(Long.parseLong(s)); - if (null != list3 && list3.size() > 0){ - list2.add(list3.get(0)); + if (null != list3 && list3.size() > 0) { + PsdcSceneRes res = list3.get(0); + List devVoList = res.getDeviceVos(); + List ary2 = new ArrayList<>(); + for (DeviceVo d : devVoList) { + ary2.add(d.getDeviceId()); + } + res.setID(i); + res.setTitle("第" + i + "步"); + res.setCheckedSblb(ary2); + res.setSblb(selUserAllControlDevs(userId, devVoList)); + i++; + list2.add(res); } } + i = 1; StrategyVo strategyVo = new StrategyVo(srt.getStrategyId(), userId, srt.getStrategyName(), Math.toIntExact(srt.getStrategyCode()), list2, srt.getStrategyInfo(), srt.getCreateTime()); ary.add(strategyVo); } return ary; } + @Override + public List selUserAllControlDevs(Long userId, List devVoList) { + List list = psdcDeviceMapper.controlQueryByUserId(userId); + List maps = new ArrayList<>(); + for (PsdcDevice dev : list) { + Map map = new HashMap<>(); + map.put("deviceId", dev.getDeviceId()); + map.put("deviceName", dev.getDeviceName()); + for (DeviceVo vo : devVoList) { + if (dev.getDeviceId().equals(vo.getDeviceId())) { + map.put("controlKey", vo.getTempValue()); + } else { + List maps2 = new ArrayList<>(); + Map map2 = new HashMap<>(); + map2.put("label", "控制启停"); + map2.put("value", "Start-Stop"); + maps2.add(map2); + List models = psdcModelMapper.selDevIsControlByModelName(dev.getDeviceModel()); + for (ModelVo model : models) { + Map map3 = new HashMap<>(); + map3.put("label", model.getIoDesc()); + map3.put("value", model.getRelationField()); + maps2.add(map3); + } + map.put("controlKey", maps2); + } + } + maps.add(map); + } + return maps; + } + /** * 更新数据 * @@ -128,30 +174,61 @@ public class PsdcSceneServiceImpl implements IPsdcSceneService { */ @Override @Transactional(propagation = REQUIRES_NEW) - public Boolean update(PsdcSceneRes scenes) { - psdcSceneMapper.deleteBySceneName(scenes.getSceneCode()); + public Boolean update(StrategyVo scenes) { Long userId = SecurityUtils.getUserId(); - Date date = new Date(); - String userName = sysUserMapper.selectUserById(userId).getUserName(); + Long code = Long.valueOf(scenes.getStrategyCode()); + String userName = SecurityUtils.getUsername(); List scenesList = new ArrayList<>(); - for (DeviceVo dev : scenes.getDeviceVos()) { - for (Map m : dev.getTempList()){ - String desc = (String) m.get("label"); - String tempValue = (String) m.get("value"); - String sceneKey = sceneKey(desc); - SceneVo sceneVo = new SceneVo(scenes.getSceneName(), scenes.getSceneCode(), userId, scenes.getIsJudge(), - scenes.getJudgeDevice(), scenes.getJudgeElement(), scenes.getJudgeData(), dev.getDeviceId(), - desc, sceneKey, tempValue, scenes.getSceneRemark()); - scenesList.add(sceneVo); + String s = null; + Date date = new Date(); + Long thisSceneCode = null; + for (int i = scenes.getScenesList().size() - 1; i >= 0; i--) { + PsdcSceneRes sc = scenes.getScenesList().get(i); + if (null != sc.getSceneCode() && !"".equals(sc.getSceneCode())){ + thisSceneCode = sc.getSceneCode(); + } else { + thisSceneCode = getSecondTimestampTwo(date); + } + s = thisSceneCode + "," + s; + psdcSceneMapper.deleteBySceneName(sc.getSceneCode()); + for (DeviceVo dev : sc.getDeviceVos()) { + for (Map m : dev.getTempList()) { + String desc = (String) m.get("label"); + String tempValue = (String) m.get("value"); + String sceneKey = sceneKey(desc); + SceneVo sceneVo = new SceneVo(sc.getSceneName(), thisSceneCode, userId, sc.getIsJudge(), + sc.getJudgeDevice(), sc.getJudgeElement(), sc.getJudgeData(), dev.getDeviceId(), + desc, sceneKey, tempValue, sc.getSceneRemark()); + sceneVo.setCreateBy(userName); + sceneVo.setCreateTime(sdf.format(date)); + scenesList.add(sceneVo); + } } } - - try { - for (SceneVo sc : scenesList) { - sc.setCreateBy(userName); - sc.setCreateTime(sdf.format(date)); + s = s.substring(0, s.length() - 5); +/* for (PsdcSceneRes sc : scenes.getScenesList()){ + s = sc.getSceneCode() + "," + s; + psdcSceneMapper.deleteBySceneName(sc.getSceneCode()); + for (DeviceVo dev : sc.getDeviceVos()) { + for (Map m : dev.getTempList()){ + String desc = (String) m.get("label"); + String tempValue = (String) m.get("value"); + String sceneKey = sceneKey(desc); + SceneVo sceneVo = new SceneVo(sc.getSceneName(), sc.getSceneCode(), userId, sc.getIsJudge(), + sc.getJudgeDevice(), sc.getJudgeElement(), sc.getJudgeData(), dev.getDeviceId(), + desc, sceneKey, tempValue, sc.getSceneRemark()); + sceneVo.setCreateBy(userName); + sceneVo.setCreateTime(sdf.format(date)); + scenesList.add(sceneVo); + } } + }*/ + PsdcStrategy strategy = new PsdcStrategy(userId, scenes.getStrategyName(), code, s, scenes.getStrategyInfo(), userName, sdf.format(date)); + strategy.setUpdateBy(userName); + strategy.setUpdateTime(sdf.format(date)); + try { psdcSceneMapper.InsertSceneData(scenesList); + psdcStrategyMapper.update(strategy); return true; } catch (Exception e) { e.printStackTrace(); @@ -167,12 +244,23 @@ public class PsdcSceneServiceImpl implements IPsdcSceneService { * @return 是否成功 */ @Override + @Transactional(propagation = REQUIRES_NEW) public Boolean deleteByScene(PsdcSceneRequest scene) { int count = 0; - if (null != scene.getSceneCode() && !"".equals(scene.getSceneCode())) { - count = psdcSceneMapper.deleteBySceneName(scene.getSceneCode()); + Long userId = SecurityUtils.getUserId(); + Long code = scene.getStrategyCode(); + List list = psdcStrategyMapper.queryByUser(userId, code); + for (PsdcStrategy scr : list) { + String[] split = scr.getScenes().split(","); + for (String s : split) { + if (null != s && !"".equals(s)) { + count = count + psdcSceneMapper.deleteBySceneName(Long.parseLong(s)); + } + } } - if (count > 0) { + int strategyName = psdcStrategyMapper.deleteByStrategyName(code); + + if (count > 0 && strategyName > 0) { return true; } else { return false; @@ -204,7 +292,7 @@ public class PsdcSceneServiceImpl implements IPsdcSceneService { map.put("value", sv.getSceneValue()); list.add(map); deviceVo.setTempValue(list); - if (1 == listByCode.size() || i == listByCode.size() - 1){ + if (1 == listByCode.size() || i == listByCode.size() - 1) { ary.add(deviceVo); } @@ -242,7 +330,9 @@ public class PsdcSceneServiceImpl implements IPsdcSceneService { Long userId = SecurityUtils.getUserId(); String sceneName = ""; List sceneRes = psdcSceneMapper.queryScenes(userId, sceneCode); - for (PsdcSceneRes psr : sceneRes) { + + for (int h = 0; h < sceneRes.size(); h++) { + PsdcSceneRes psr = sceneRes.get(h); Long code = psr.getSceneCode(); List listByCode = psdcSceneMapper.findSceneByUserAndSceneCode(userId, code, sceneName); List ary = new ArrayList<>(); @@ -261,7 +351,7 @@ public class PsdcSceneServiceImpl implements IPsdcSceneService { map.put("value", sv.getSceneValue()); list.add(map); deviceVo.setTempValue(list); - if (1 == listByCode.size() || i == listByCode.size() - 1){ + if (1 == listByCode.size() || i == listByCode.size() - 1) { ary.add(deviceVo); } @@ -308,11 +398,11 @@ public class PsdcSceneServiceImpl implements IPsdcSceneService { return Long.valueOf(timestamp); } - private String sceneKey(String desc){ - String s = desc.substring(0,2); - switch (s){ - case "开启": - return "open"; + private String sceneKey(String desc) { + String s = desc.substring(0, 2); + switch (s) { + case "控制启停": + return "open-close"; case "关闭": return "close"; default: diff --git a/psdc-business/src/main/resources/mapper/business/PsdcDeviceMapper.xml b/psdc-business/src/main/resources/mapper/business/PsdcDeviceMapper.xml index e5e79e8..6aae0a9 100644 --- a/psdc-business/src/main/resources/mapper/business/PsdcDeviceMapper.xml +++ b/psdc-business/src/main/resources/mapper/business/PsdcDeviceMapper.xml @@ -9,6 +9,7 @@ + @@ -362,6 +363,7 @@ user_id, device_type, device_sn, + device_model, device_name, hard_version, soft_version, diff --git a/psdc-business/src/main/resources/mapper/business/PsdcStrategyMapper.xml b/psdc-business/src/main/resources/mapper/business/PsdcStrategyMapper.xml index 26f416b..9ab1ac7 100644 --- a/psdc-business/src/main/resources/mapper/business/PsdcStrategyMapper.xml +++ b/psdc-business/src/main/resources/mapper/business/PsdcStrategyMapper.xml @@ -29,13 +29,47 @@ Group By strategy_code - - Insert into psdc_strategy(user_id,strategy_name,strategy_code,scenes,strategy_info,create_by,create_time,update_by,update_time) Values (#{userId},#{strategyName},#{strategyCode},#{scenes},#{strategyInfo},#{createBy},#{createTime},#{updateBy},#{updateTime}) + + + Delete From psdc_strategy Where strategy_code = #{sceneCode} + + + + + Update psdc_strategy + + + strategy_name = #{strategyName}, + + + scenes = #{scenes}, + + + strategy_info = #{strategyInfo}, + + + update_by = #{updateBy}, + + + update_time = #{updateTime}, + + + + + And user_id = #{userId} + + + And strategy_code = #{strategyCode} + + + + + \ No newline at end of file diff --git a/psdc-web/src/main/java/com/psdc/controller/manager/PsdcSceneController.java b/psdc-web/src/main/java/com/psdc/controller/manager/PsdcSceneController.java index 9e8839b..aa785b3 100644 --- a/psdc-web/src/main/java/com/psdc/controller/manager/PsdcSceneController.java +++ b/psdc-web/src/main/java/com/psdc/controller/manager/PsdcSceneController.java @@ -81,7 +81,7 @@ public class PsdcSceneController extends BaseController { @PreAuthorize("@ss.hasPermi('system:cl:list')") @Log(title = "策略管理", businessType = BusinessType.UPDATE) @PutMapping - public AjaxResult edit(@Validated @RequestBody PsdcSceneRes scenes) { + public AjaxResult edit(@Validated @RequestBody StrategyVo scenes) { return toAjax(psdcSceneService.update(scenes)); }