Prechádzať zdrojové kódy

新增 停止灌溉时候 重置所有设备状态为关闭

zhaiyifei 8 mesiacov pred
rodič
commit
5d1e54e917

+ 17 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/sf/controller/IotDeviceSfController.java

@@ -386,6 +386,23 @@ public class IotDeviceSfController extends BaseController {
     }
 
     /**
+     * 开始自动灌溉
+     * @param
+     * @return
+     */
+    @PostMapping("/auto/stop")
+    public AjaxResult autoStop(@RequestBody IotSfConfigCmdReqVo reqVo){
+        String devBid = reqVo.getDevBid();
+        ValidateUtil.validateDevBid(devBid);
+        IotDeviceBaseFunReqVo iotDeviceBaseFunReqVo = new IotDeviceBaseFunReqVo();
+        iotDeviceBaseFunReqVo.setDevBid(devBid);
+        iotDeviceBaseFunReqVo.setMethodName("autoStop");
+        iotDeviceBaseFunReqVo.setParam(reqVo);
+        String taskId = iotDeviceCommonService.func(iotDeviceBaseFunReqVo);
+        return new AjaxResult(ErrorCode.SUCCESS.getCode(), "下发成功,等待设备响应结果", taskId);
+    }
+
+    /**
      * 下发水肥机指令
      *
      * @return

+ 12 - 0
src/main/java/com/yunfeiyun/agmp/iotm/device/sf/service/IIotSfCommService.java

@@ -409,6 +409,18 @@ public class IIotSfCommService extends IotDeviceBaseServiceImpl implements IotDe
         return null;
     }
 
+
+    /**
+     * 停止自动灌溉
+     *
+     * @param reqVo 包含设备添加请求的参数,包括设备标识(devBid)等
+     * @param reqVo
+     */
+    public String autoStop(IotSfConfigCmdReqVo reqVo) {
+        // 由具体子类实现
+        return null;
+    }
+
     /**
      * 获取灌溉记录列表
      *

+ 76 - 39
src/main/java/com/yunfeiyun/agmp/iotm/device/sf/service/impl/IotRunHaoSfServiceImpl.java

@@ -739,7 +739,6 @@ public class IotRunHaoSfServiceImpl extends IIotSfCommService {
 
         Map<String, EnumSfElementType> sfTypeMap = new HashMap<>();
         sfTypeMap.put(runMode, null);
-        sfTypeMap.put(runStatus, null);
 
         Map<EnumSfElementType, Integer> sfTypeValueMap = new HashMap<>();
         for(IotSfElementfactorInfoVo element : resultList){
@@ -779,51 +778,37 @@ public class IotRunHaoSfServiceImpl extends IIotSfCommService {
                 continue;
             }
             String v = devConfig.getString(key);
-            // 停止灌溉操作
-            if(Objects.equals(key, runStatus)){
-                if(!"1".equals(zdsd)){
-                    throw new IotBizException(IotErrorCode.PARAM_INVALID.getCode(),"请先切换到自动模式");
-                }
-                if(!"0".equals(v)){
-                    throw new IotBizException(IotErrorCode.PARAM_INVALID.getCode(),"仅支持停止灌溉");
-                }
-            }else{
-                if("1".equals(zdsd)){
-                    throw new IotBizException(IotErrorCode.PARAM_INVALID.getCode(),"请先切换到手动模式");
+            if("1".equals(zdsd)){
+                throw new IotBizException(IotErrorCode.PARAM_INVALID.getCode(),"请先切换到手动模式");
+            }
+            EnumSfElementType elementType = sfTypeMap.get(key);
+            if(elementType == EnumSfElementType.WATER_SOURCE && Objects.equals(v, "1")){
+                // 请先打开阀
+                Integer va = sfTypeValueMap.get(EnumSfElementType.SOLENOID_VALVE);
+                if(va == 0){
+                    throw new IotBizException(IotErrorCode.PARAM_INVALID.getCode(),"请先打开阀门");
                 }
-                EnumSfElementType elementType = sfTypeMap.get(key);
-                if(elementType == EnumSfElementType.WATER_SOURCE && Objects.equals(v, "1")){
-                    // 请先打开阀
-                    Integer va = sfTypeValueMap.get(EnumSfElementType.SOLENOID_VALVE);
+            }else if(elementType == EnumSfElementType.FERTILIZER){
+                Integer va = sfTypeValueMap.get(EnumSfElementType.SUCTION);
+                if(Objects.equals(v, "1")){
                     if(va == 0){
-                        throw new IotBizException(IotErrorCode.PARAM_INVALID.getCode(),"请先打开阀");
+                        throw new IotBizException(IotErrorCode.PARAM_INVALID.getCode(),"请先打开阀");
                     }
-                }else if(elementType == EnumSfElementType.FERTILIZER){
-                    Integer va = sfTypeValueMap.get(EnumSfElementType.SUCTION);
-                    if(Objects.equals(v, "1")){
-                        if(va == 0){
-                            throw new IotBizException(IotErrorCode.PARAM_INVALID.getCode(),"请先打开肥阀");
-                        }
-                    }else {
-                        if(va != 0){
-                            throw new IotBizException(IotErrorCode.PARAM_INVALID.getCode(),"请先关闭肥阀");
-                        }
+                }else {
+                    if(va != 0){
+                        throw new IotBizException(IotErrorCode.PARAM_INVALID.getCode(),"请先关闭肥阀");
                     }
-                }else if(elementType == EnumSfElementType.SOLENOID_VALVE && Objects.equals(v, "0")){
-                    Integer sova = sfTypeValueMap.get(EnumSfElementType.SOLENOID_VALVE);
-                    if(sova - 1 <= 0){
-                        Integer va = sfTypeValueMap.get(EnumSfElementType.WATER_SOURCE);
-                        if(va != 0){
-                            throw new IotBizException(IotErrorCode.PARAM_INVALID.getCode(),"请先关闭水源泵");
-                        }
+                }
+            }else if(elementType == EnumSfElementType.SOLENOID_VALVE && Objects.equals(v, "0")){
+                Integer sova = sfTypeValueMap.get(EnumSfElementType.SOLENOID_VALVE);
+                if(sova - 1 <= 0){
+                    Integer va = sfTypeValueMap.get(EnumSfElementType.WATER_SOURCE);
+                    if(va != 0){
+                        throw new IotBizException(IotErrorCode.PARAM_INVALID.getCode(),"请先关闭水源泵");
                     }
-
                 }
-            }
-        }
 
-        if(devConfig.containsKey(runStatus)){
-            devConfig.put("Num-dqqf", "0");
+            }
         }
 
         IotSfConfigCmdReqVo cmdReqVo = new IotSfConfigCmdReqVo();
@@ -1091,4 +1076,56 @@ public class IotRunHaoSfServiceImpl extends IIotSfCommService {
         cmdReqVo.setData(sendJson);
         return sendConfigCmd(cmdReqVo);
     }
+
+    /**
+     * 停止自动灌溉
+     *
+     * @param reqVo 包含设备添加请求的参数,包括设备标识(devBid)等
+     * @param reqVo
+     */
+    public String autoStop(IotSfConfigCmdReqVo reqVo) {
+        String devBid = reqVo.getDevBid();
+        IotDevice iotDevice = iotDeviceService.selectIotDeviceByDevBid(devBid);
+        if(iotDevice == null){
+            throw new IotBizException(IotErrorCode.INVALID_DEVICE_ID.getCode(), "设备不存在");
+        }
+
+        DevOperateUtil.sendConfigCmdCheck(iotDevice);
+
+        JSONObject runStatusData = getRunStatus(devBid);
+        if("0".equals(runStatusData.getString("Btn-zdsd"))){
+            throw new IotBizException(IotErrorCode.PARAM_INVALID.getCode(), "请先切换到自动模式");
+        }
+
+        IotSfElementfactorListReqVo selectReqVo = new IotSfElementfactorListReqVo();
+
+        List<String> sfTypeList = new ArrayList<>();
+        sfTypeList.add(EnumSfElementType.WATER_SOURCE.getCode());
+        sfTypeList.add(EnumSfElementType.FERTILIZER.getCode());
+        sfTypeList.add(EnumSfElementType.SUCTION.getCode());
+        sfTypeList.add(EnumSfElementType.MIXING.getCode());
+        sfTypeList.add(EnumSfElementType.SOLENOID_VALVE.getCode());
+        sfTypeList.add(EnumSfElementType.GROUP.getCode());
+        selectReqVo.setSfTypeList(sfTypeList);
+        selectReqVo.setDevBid(devBid);
+        selectReqVo.setTid(SecurityUtils.getTid());
+
+        List<IotSfElementfactor> elementfactorList = iotSfElementfactorService.selectIotSfElementfactorList(selectReqVo);
+
+        JSONObject sendJson = new JSONObject();
+        for(IotSfElementfactor elementfactor : elementfactorList){
+            String sfCode = elementfactor.getSfCode();
+            sendJson.put(sfCode, "0");
+        }
+
+        sendJson.put("Num-dqqf", "0");
+        sendJson.put("Btn-yjqd", "0");
+
+        IotSfConfigCmdReqVo cmdReqVo = new IotSfConfigCmdReqVo();
+        cmdReqVo.setDevBid(devBid);
+        cmdReqVo.setCmd(CmdDef.RunHaoSfCmdDef.CMD_CONFIG);
+        cmdReqVo.setIotDevice(iotDevice);
+        cmdReqVo.setData(sendJson);
+        return sendConfigCmd(cmdReqVo);
+    }
 }