Browse Source

阀门控制

lin 4 năm trước cách đây
mục cha
commit
373691360e

+ 14 - 0
smart-city-platform/src/main/java/com/bz/smart_city/dto/ValveCommandRequestDTO.java

@@ -0,0 +1,14 @@
+package com.bz.smart_city.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("阀门命令请求")
+@Data
+public class ValveCommandRequestDTO {
+    @ApiModelProperty(name = "水表编码,设备唯一标识" , required = true)
+    String meterCode;
+    @ApiModelProperty(name = "阀门状态  0:关阀 1:开阀" , required = true)
+    String valveStatus;
+}

+ 24 - 24
smart-city-platform/src/main/java/com/bz/smart_city/service/impl/DeviceServiceImpl.java

@@ -1406,36 +1406,36 @@ public  class DeviceServiceImpl implements DeviceService {
             }
             }
         }
         }
 
 
+        ValveCommandRequestDTO valveCommandRequest = new ValveCommandRequestDTO();
+        valveCommandRequest.setValveStatus(sendValveStatus);
+
+        //1、下发开关阀门
         if(device.getDeviceType()==30){
         if(device.getDeviceType()==30){
-            //1、下发开关阀门
-            Map<String,Object> map = new HashMap<>();
-            Map<String,Object> paras = new HashMap<>();
-            paras.put("electronicNo",device.getWaterMeterNo());
-            paras.put("valveStatus", sendValveStatus);//阀门状态  0:关阀 1:开阀
-            map.put("params", paras);
-            map.put("method", "WriteValve");
-            easylinkinUtils.sendDownlink(device.getDeviceNo(),map);
+            valveCommandRequest.setMeterCode(device.getWaterMeterNo());
+            easylinkinUtils.sendDownlink(device.getDeviceNo(),valveCommandRequest);
         }else if(device.getDeviceType()==19)
         }else if(device.getDeviceType()==19)
         {
         {
-            Boolean valveStatus = false;
-            if(sendValveStatus.equals("1")){
-                valveStatus = true;
-            }
-            gdAgentUtils.setMeterValve(deviceId,valveStatus);
+            valveCommandRequest.setMeterCode(String.valueOf(deviceId));
+            gdAgentUtils.setMeterValve(valveCommandRequest);
+        }
+        else if(device.getDeviceType()==34)
+        {
+            valveCommandRequest.setMeterCode(device.getDeviceNo());
+            JSONObject commandResult = udipEtlDataCommandService.commandSendV2(device.getUdipId(),valveCommandRequest);
+
+            //2、插入开关阀门记录
+            DeviceValveRecord deviceValveRecord = new DeviceValveRecord();
+            deviceValveRecord.setDeviceId(deviceId);
+            deviceValveRecord.setSendValveStatus(Integer.valueOf(sendValveStatus));
+            deviceValveRecord.setSendStatus(1);
+            deviceValveRecord.setCommandId(commandResult.getString("commandId"));
+            deviceValveRecord.setRemark("");
+            deviceValveRecordService.insertSelective(deviceValveRecord);
         }else
         }else
         {
         {
             if (device.getUdipId() != null && !"".equals(device.getUdipId())) {
             if (device.getUdipId() != null && !"".equals(device.getUdipId())) {
-                //1、下发开关阀门
-                Map<String,Object> map = new HashMap<>();
-                map.put("electronicNo","AAAAAAAAAAAAAA");
-                map.put("valveStatus", sendValveStatus);//阀门状态  0:关阀 1:开阀
-                DataCommandRequestDTO dataCommandRequest = new DataCommandRequestDTO();
-                dataCommandRequest.setDeviceId(device.getUdipId());
-                dataCommandRequest.setUnitIdentifier(device.getDeviceNo());
-                dataCommandRequest.setReceiveTime(new Date());
-                dataCommandRequest.setMethod("WriteValve");
-                dataCommandRequest.setParams(map);
-                JSONObject commandResult = udipEtlDataCommandService.commandSend(dataCommandRequest);
+                valveCommandRequest.setMeterCode(device.getDeviceNo());
+                JSONObject commandResult = udipEtlDataCommandService.commandSend(device.getUdipId(),valveCommandRequest);
 
 
                 //2、插入开关阀门记录
                 //2、插入开关阀门记录
                 DeviceValveRecord deviceValveRecord = new DeviceValveRecord();
                 DeviceValveRecord deviceValveRecord = new DeviceValveRecord();

+ 23 - 10
smart-city-platform/src/main/java/com/bz/smart_city/service/udip/EasylinkinUtils.java

@@ -2,6 +2,7 @@ package com.bz.smart_city.service.udip;
 
 
 import com.bz.smart_city.commom.exception.ServiceException;
 import com.bz.smart_city.commom.exception.ServiceException;
 import com.bz.smart_city.commom.util.HttpRequest;
 import com.bz.smart_city.commom.util.HttpRequest;
+import com.bz.smart_city.dto.ValveCommandRequestDTO;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
@@ -14,16 +15,9 @@ import java.util.Map;
 @Service
 @Service
 public class EasylinkinUtils {
 public class EasylinkinUtils {
 
 
-    public void sendDownlink(String deviceNo, Map<String, Object> mapData){
-        Lora188Parser lora188Parser = new Lora188Parser();
-        Map<String,Object> resultMap = lora188Parser.protocolToRawData(mapData);
-        Integer status = (Integer) resultMap.get("status");
-        String data = "";
-        if(status == 1){
-            data = (String) resultMap.get("data");
-        }else {
-            throw new ServiceException(-900, "协议解析错误");
-        }
+    public void sendDownlink(String deviceNo, ValveCommandRequestDTO valveCommandRequestDTO){
+
+        String data = parser(valveCommandRequestDTO);
 
 
         String url = "http://api.easylinkin.com/api/v1/application/downlink?";
         String url = "http://api.easylinkin.com/api/v1/application/downlink?";
         Map<String,Object> map = new HashMap<>();
         Map<String,Object> map = new HashMap<>();
@@ -48,4 +42,23 @@ public class EasylinkinUtils {
         }
         }
 
 
     }
     }
+
+    private String parser(ValveCommandRequestDTO valveCommandRequest){
+        Map<String,Object> map = new HashMap<>();
+        Map<String,Object> paras = new HashMap<>();
+        paras.put("electronicNo",valveCommandRequest.getMeterCode());
+        paras.put("valveStatus", valveCommandRequest.getValveStatus());//阀门状态  0:关阀 1:开阀
+        map.put("params", paras);
+        map.put("method", "WriteValve");
+        Lora188Parser lora188Parser = new Lora188Parser();
+        Map<String,Object> resultMap = lora188Parser.protocolToRawData(map);
+        Integer status = (Integer) resultMap.get("status");
+        String data = "";
+        if(status == 1){
+            data = (String) resultMap.get("data");
+            return data;
+        }else {
+            throw new ServiceException(-900, "协议解析错误");
+        }
+    }
 }
 }

+ 10 - 3
smart-city-platform/src/main/java/com/bz/smart_city/service/udip/GdAgentUtils.java

@@ -6,6 +6,7 @@ import com.bz.smart_city.commom.model.AjaxMessage;
 import com.bz.smart_city.dao.ConcentratorCheckMapper;
 import com.bz.smart_city.dao.ConcentratorCheckMapper;
 import com.bz.smart_city.dao.WaterRelatedDeviceMapper;
 import com.bz.smart_city.dao.WaterRelatedDeviceMapper;
 import com.bz.smart_city.dto.DeviceDto;
 import com.bz.smart_city.dto.DeviceDto;
+import com.bz.smart_city.dto.ValveCommandRequestDTO;
 import com.bz.smart_city.entity.ConcentratorCheck;
 import com.bz.smart_city.entity.ConcentratorCheck;
 import com.bz.smart_city.entity.Device;
 import com.bz.smart_city.entity.Device;
 import com.bz.smart_city.service.ConcentratorCheckService;
 import com.bz.smart_city.service.ConcentratorCheckService;
@@ -155,11 +156,17 @@ public class GdAgentUtils {
         return null;
         return null;
     }
     }
     //开关阀门
     //开关阀门
-    public Integer setMeterValve(Long deviceId, Boolean valveStatus){
-        log.info("begin setMeterValve deviceId={},valveStatus={}",deviceId,valveStatus);
+    public Integer setMeterValve(ValveCommandRequestDTO valveCommandRequest){
+        log.info("begin setMeterValve valveCommandRequest={},",JSON.toJSONString(valveCommandRequest));
+
+        Boolean valveStatus = false;
+        if(valveCommandRequest.getValveStatus().equals("1")){
+            valveStatus = true;
+        }
+
         String url = gdAgentUrl+"/readmeter/setMeterValve?deviceId={deviceId}&valveStatus={valveStatus}";
         String url = gdAgentUrl+"/readmeter/setMeterValve?deviceId={deviceId}&valveStatus={valveStatus}";
         Map<String,String> map = new HashMap<String,String>();
         Map<String,String> map = new HashMap<String,String>();
-        map.put("deviceId",deviceId.toString());
+        map.put("deviceId",valveCommandRequest.getMeterCode());
         map.put("valveStatus",valveStatus.toString());
         map.put("valveStatus",valveStatus.toString());
         ConcentratorInfo concentratorInfo = restTemplate.getForObject(url, ConcentratorInfo.class,map);
         ConcentratorInfo concentratorInfo = restTemplate.getForObject(url, ConcentratorInfo.class,map);
         log.info("concentratorInfo ={}", JSON.toJSONString(concentratorInfo));
         log.info("concentratorInfo ={}", JSON.toJSONString(concentratorInfo));

+ 52 - 1
smart-city-platform/src/main/java/com/bz/smart_city/service/udip/UdipEtlDataCommandService.java

@@ -7,6 +7,7 @@ import com.bz.smart_city.commom.util.HttpClientUtils;
 import com.bz.smart_city.commom.util.HttpRequest;
 import com.bz.smart_city.commom.util.HttpRequest;
 import com.bz.smart_city.dto.DeviceTypeDto;
 import com.bz.smart_city.dto.DeviceTypeDto;
 import com.bz.smart_city.dto.UdipUnitDTO;
 import com.bz.smart_city.dto.UdipUnitDTO;
+import com.bz.smart_city.dto.ValveCommandRequestDTO;
 import com.bz.smart_city.dto.udip.DataCommandRequestDTO;
 import com.bz.smart_city.dto.udip.DataCommandRequestDTO;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
@@ -15,6 +16,9 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.io.IOException;
 import java.io.IOException;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
 
 
 @Slf4j
 @Slf4j
 @Service
 @Service
@@ -24,7 +28,53 @@ public class UdipEtlDataCommandService {
     @Autowired
     @Autowired
     ObjectMapper objectMapper;
     ObjectMapper objectMapper;
 
 
-    public JSONObject commandSend(DataCommandRequestDTO dataCommandRequest){
+    public JSONObject commandSend(String udipId, ValveCommandRequestDTO valveCommandRequest){
+
+        Map<String,Object> map = new HashMap<>();
+        map.put("electronicNo","AAAAAAAAAAAAAA");
+        map.put("valveStatus", valveCommandRequest.getValveStatus());//阀门状态  0:关阀 1:开阀
+        DataCommandRequestDTO dataCommandRequest = new DataCommandRequestDTO();
+        dataCommandRequest.setDeviceId(udipId);
+        dataCommandRequest.setUnitIdentifier(valveCommandRequest.getMeterCode());
+        dataCommandRequest.setReceiveTime(new Date());
+        dataCommandRequest.setMethod("WriteValve");
+        dataCommandRequest.setParams(map);
+
+        String url = unitUrl+"/center/command/send";
+        try {
+            String json = objectMapper.writeValueAsString(dataCommandRequest);
+            log.info("udipUnit json:"+ json);
+            //String result = HttpRequest.doPost(url, JSON.toJSONString(json));
+            String result = HttpClientUtils.doPostWithJson(url, json);
+            log.info("msg result=" + result);
+            JSONObject jsonObject = JSONObject.parseObject(result);
+            Integer status = jsonObject.getInteger("status");
+            if(status == 0){
+                JSONObject data = jsonObject.getJSONObject("data");
+                //return data.getString("commandId");
+                return data;
+            }else {
+                log.debug(jsonObject.getString("msg"));
+                throw new ServiceException(-900, jsonObject.getString("msg"));
+            }
+        } catch (Exception e) {
+            log.debug(e.getMessage());
+            throw new ServiceException(-900, "下发指令错误");
+        }
+    }
+
+    public JSONObject commandSendV2(String udipId, ValveCommandRequestDTO valveCommandRequest){
+
+        Map<String,Object> map = new HashMap<>();
+        map.put("meterCode",valveCommandRequest.getMeterCode());
+        map.put("valveStatus", valveCommandRequest.getValveStatus());//阀门状态  0:关阀 1:开阀
+        DataCommandRequestDTO dataCommandRequest = new DataCommandRequestDTO();
+        dataCommandRequest.setDeviceId(udipId);
+        dataCommandRequest.setUnitIdentifier(valveCommandRequest.getMeterCode());
+        dataCommandRequest.setReceiveTime(new Date());
+        dataCommandRequest.setMethod("WriteValve");
+        dataCommandRequest.setParams(map);
+
         String url = unitUrl+"/center/command/send";
         String url = unitUrl+"/center/command/send";
         try {
         try {
             String json = objectMapper.writeValueAsString(dataCommandRequest);
             String json = objectMapper.writeValueAsString(dataCommandRequest);
@@ -47,4 +97,5 @@ public class UdipEtlDataCommandService {
             throw new ServiceException(-900, "下发指令错误");
             throw new ServiceException(-900, "下发指令错误");
         }
         }
     }
     }
+
 }
 }