Prechádzať zdrojové kódy

断路器集成调测

learshaw 5 mesiacov pred
rodič
commit
6d40fdede4

+ 0 - 0
ems/ems-cloud/Dockerfile → ems/ems-cloud/docker/Dockerfile


+ 8 - 0
ems/ems-cloud/docker/docker-run.sh

@@ -0,0 +1,8 @@
+# /bin/bash
+docker run -itd --name ems-server --privileged=true \
+  -p 0.0.0.0:9100:9100 \
+  -p 0.0.0.0:9200:9200 \
+  -p 0.0.0.0:9201:9201 \
+  -p 0.0.0.0:9202:9202 \
+  -p 0.0.0.0:9203:9203 \
+  ems-server:1.0

+ 0 - 0
ems/ems-cloud/start-all.sh → ems/ems-cloud/docker/start-all.sh


+ 66 - 52
ems/ems-cloud/ems-dev-adapter/src/main/java/com/ruoyi/ems/handle/GeekOpenCbHandler.java

@@ -18,8 +18,8 @@ import com.ruoyi.ems.core.MessageCache;
 import com.ruoyi.ems.core.MqttTemplate;
 import com.ruoyi.ems.domain.EmsDevice;
 import com.ruoyi.ems.domain.EmsObjAbilityCallLog;
-import com.ruoyi.ems.domain.EmsObjAttrDto;
 import com.ruoyi.ems.domain.EmsObjAttrValue;
+import com.ruoyi.ems.enums.DevObjType;
 import com.ruoyi.ems.model.AbilityPayload;
 import com.ruoyi.ems.model.MqttCacheMsg;
 import com.ruoyi.ems.service.IEmsDeviceService;
@@ -38,7 +38,6 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.Date;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
@@ -79,10 +78,12 @@ public class GeekOpenCbHandler extends MqttBaseHandler {
     /**
      * 缓存设备属性
      */
-    public static final Map<String, Map<String, String>> attrCache = new ConcurrentHashMap<>();
+    private static final Map<String, Map<String, String>> attrCache = new ConcurrentHashMap<>();
 
     private static final String TOPIC_PREFIX = "/device/dlq/";
 
+    private static final Integer DEVICE_OBJ_TYPE = DevObjType.DEVC.getCode();
+
     /**
      * 能力执行
      *
@@ -91,7 +92,7 @@ public class GeekOpenCbHandler extends MqttBaseHandler {
      */
     @Override
     public String call(AbilityPayload abilityParam) {
-        String retStr = null;
+        String retStr = "执行成功!";
 
         String messageId = IdUtils.generateMessageId();
         String deviceCode = abilityParam.getObjCode();
@@ -105,26 +106,34 @@ public class GeekOpenCbHandler extends MqttBaseHandler {
         // 写入日志
         EmsObjAbilityCallLog logItem = saveLog(abilityParam, sendTime, 1);
 
-        while (true) {
-            MqttCacheMsg cacheMsg = messageCache.getAndRemoveMqttMessage(messageId);
-
-            if (null != cacheMsg) {
-                if (checkResult(abilityParam, cacheMsg)) {
-                    retStr = "执行成功!";
-                    updateLog(logItem, cacheMsg, 1);
+        JSONObject sendObject = JSONObject.parseObject(abilityParam.getAbilityParam());
+        String type = sendObject.getString("type");
+
+        if (StringUtils.equals(type, "event") || StringUtils.equals(type, "setting")) {
+            while (true) {
+                MqttCacheMsg cacheMsg = messageCache.getAndRemoveMqttMessage(messageId);
+
+                if (null != cacheMsg) {
+                    String receiveParam = cacheMsg.getPayload();
+                    JSONObject receiveObject = JSONObject.parseObject(receiveParam);
+
+                    if (checkResult(sendObject, receiveObject)) {
+                        retStr = "执行成功!";
+                        updateLog(logItem, cacheMsg, 1);
+                    }
+                    else {
+                        retStr = "执行失败!";
+                        updateLog(logItem, cacheMsg, 2);
+                    }
+                    break;
                 }
-                else {
-                    retStr = "执行失败!";
-                    updateLog(logItem, cacheMsg, 2);
-                }
-                break;
-            }
 
-            ThreadUtils.sleep(100);
+                ThreadUtils.sleep(100);
 
-            if (System.currentTimeMillis() - sendTime > 60000) {
-                retStr = "响应超时!";
-                break;
+                if (System.currentTimeMillis() - sendTime > 60000) {
+                    retStr = "响应超时!";
+                    break;
+                }
             }
         }
 
@@ -144,12 +153,15 @@ public class GeekOpenCbHandler extends MqttBaseHandler {
                 String messageId = msgBody.getString("messageId");
 
                 if (StringUtils.equals("auto", messageId)) {
-                    updateAutoAttr(device, 2, msgBody);
+                    updateAutoAttr(device, msgBody);
                 }
                 else if (StringUtils.isNotEmpty(messageId)) {
                     MqttCacheMsg mqttCacheMsg = new MqttCacheMsg(messageId, deviceCode, new Date(), payload);
                     messageCache.addMqttMessage(messageId, mqttCacheMsg);
-                    updateBaseAttr(device, 2, msgBody);
+                    updateBaseAttr(device, msgBody);
+                }
+                else {
+                    updateBaseAttr(device, msgBody);
                 }
             }
             else {
@@ -175,33 +187,41 @@ public class GeekOpenCbHandler extends MqttBaseHandler {
      * 更新基础属性值
      *
      * @param device   设备信息
-     * @param objType  对象类型
      * @param jsonBody jsonBody 消息体
      */
-    private void updateBaseAttr(EmsDevice device, Integer objType, JSONObject jsonBody) {
-        checkForUpdate(objType, device, jsonBody, "key");
-        checkForUpdate(objType, device, jsonBody, "iccid");
-        checkForUpdate(objType, device, jsonBody, "signal");
-        checkForUpdate(objType, device, jsonBody, "version");
-        checkForUpdate(objType, device, jsonBody, "timerEnable");
-        checkForUpdate(objType, device, jsonBody, "timerInterval");
-        checkForUpdate(objType, device, jsonBody, "keyLock");
-        checkForUpdate(objType, device, jsonBody, "onState");
-        checkForUpdate(objType, device, jsonBody, "resetLock");
+    private void updateBaseAttr(EmsDevice device, JSONObject jsonBody) {
+        checkForUpdate(device, jsonBody, "key");
+        checkForUpdate(device, jsonBody, "iccid");
+        checkForUpdate(device, jsonBody, "imei");
+        checkForUpdate(device, jsonBody, "signal");
+        checkForUpdate(device, jsonBody, "version");
+        checkForUpdate(device, jsonBody, "timerEnable");
+        checkForUpdate(device, jsonBody, "timerInterval");
+        checkForUpdate(device, jsonBody, "keyLock");
+        checkForUpdate(device, jsonBody, "onState");
+        checkForUpdate(device, jsonBody, "resetLock");
+
+        // 协议信息
+        checkForUpdate(device, jsonBody, "protocol");
+        checkForUpdate(device, jsonBody, "clientId");
+        checkForUpdate(device, jsonBody, "server");
+        checkForUpdate(device, jsonBody, "port");
+        checkForUpdate(device, jsonBody, "username");
+        checkForUpdate(device, jsonBody, "publish");
+        checkForUpdate(device, jsonBody, "subcribe");
     }
 
     /**
      * 更新自动上报属性值
      *
      * @param device   设备信息
-     * @param objType  对象类型
      * @param jsonBody jsonBody 消息体
      */
-    private void updateAutoAttr(EmsDevice device, Integer objType, JSONObject jsonBody) {
-        checkForUpdate(objType, device, jsonBody, "voltage");
-        checkForUpdate(objType, device, jsonBody, "current");
-        checkForUpdate(objType, device, jsonBody, "power");
-        checkForUpdate(objType, device, jsonBody, "energy");
+    private void updateAutoAttr(EmsDevice device, JSONObject jsonBody) {
+        checkForUpdate(device, jsonBody, "voltage");
+        checkForUpdate(device, jsonBody, "current");
+        checkForUpdate(device, jsonBody, "power");
+        checkForUpdate(device, jsonBody, "energy");
     }
 
     /**
@@ -211,7 +231,7 @@ public class GeekOpenCbHandler extends MqttBaseHandler {
      * @param attrKey  属性key
      * @return true 更新,false 不更新
      */
-    private void checkForUpdate(Integer objType, EmsDevice device, JSONObject jsonBody, String attrKey) {
+    private void checkForUpdate(EmsDevice device, JSONObject jsonBody, String attrKey) {
         if (!jsonBody.containsKey(attrKey)) {
             return;
         }
@@ -219,7 +239,7 @@ public class GeekOpenCbHandler extends MqttBaseHandler {
 
         // Atomically initialize the cache entry if absent
         Map<String, String> attrMap = attrCache.computeIfAbsent(device.getDeviceCode(), k -> {
-            List<EmsObjAttrValue> attrList = objAttrValueService.selectByObjCode(objType, k);
+            List<EmsObjAttrValue> attrList = objAttrValueService.selectByObjCode(DEVICE_OBJ_TYPE, k);
             if (CollectionUtils.isNotEmpty(attrList)) {
                 return attrList.stream().collect(
                     Collectors.toMap(EmsObjAttrValue::getAttrKey, EmsObjAttrValue::getAttrValue, (v1, v2) -> v1,
@@ -232,9 +252,9 @@ public class GeekOpenCbHandler extends MqttBaseHandler {
 
         String cachedValue = attrMap.get(attrKey);
 
-        if (!StringUtils.equals(currentValue, cachedValue)){
-            EmsObjAttrValue attrValue = new EmsObjAttrValue(device.getDeviceCode(), objType, device.getDeviceModel(),
-                attrKey, currentValue);
+        if (!StringUtils.equals(currentValue, cachedValue)) {
+            EmsObjAttrValue attrValue = new EmsObjAttrValue(device.getDeviceCode(), DEVICE_OBJ_TYPE,
+                device.getDeviceModel(), attrKey, currentValue);
             objAttrValueService.mergeObjAttrValue(attrValue);
             updateCacheAfterSuccess(device, attrKey, currentValue);
         }
@@ -247,16 +267,10 @@ public class GeekOpenCbHandler extends MqttBaseHandler {
         });
     }
 
-    private boolean checkResult(AbilityPayload abilityParam, MqttCacheMsg cacheMsg) {
+    private boolean checkResult(JSONObject sendObject, JSONObject receiveObject) {
         boolean flag = true;
 
         try {
-            String sendParam = abilityParam.getAbilityParam();
-            String receiveParam = cacheMsg.getPayload();
-
-            JSONObject sendObject = JSONObject.parseObject(sendParam);
-            JSONObject receiveObject = JSONObject.parseObject(receiveParam);
-
             String type = sendObject.getString("type");
 
             if (StringUtils.equals(type, "event")) {

+ 1 - 1
ems/ems-cloud/ems-dev-adapter/src/main/resources/logback.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration scan="true" scanPeriod="60 seconds" debug="false">
     <!-- 日志存放路径 -->
-	<property name="log.path" value="logs/ems-server" />
+	<property name="log.path" value="logs/ems-dev-adapter" />
    <!-- 日志输出格式 -->
 	<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
 

+ 23 - 1
ems/ems-cloud/ems-server/src/main/java/com/ruoyi/ems/controller/EmsObjAttrController.java

@@ -1,5 +1,6 @@
 package com.ruoyi.ems.controller;
 
+import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import com.huashe.common.domain.AjaxResult;
 import com.ruoyi.common.core.web.controller.BaseController;
@@ -8,8 +9,10 @@ import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.ems.domain.EmsObjAttr;
 import com.ruoyi.ems.domain.EmsObjAttrDto;
+import com.ruoyi.ems.domain.MeterBoundaryRel;
 import com.ruoyi.ems.service.IEmsObjAttrService;
 import io.swagger.annotations.Api;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -21,7 +24,11 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * 能源对象属性Controller
@@ -67,8 +74,23 @@ public class EmsObjAttrController extends BaseController {
             json.put("objType", objType);
             json.put("objCode", objCode);
 
+            // 获取属性列表
             List<EmsObjAttrDto> attrDtos = attrService.selectObjAttrItem(objType, objCode);
-            json.put("attrs", attrDtos);
+
+            if (CollectionUtils.isNotEmpty(attrDtos)) {
+                Map<String, List<EmsObjAttrDto>> attrMap = attrDtos.stream()
+                    .collect(Collectors.groupingBy(EmsObjAttrDto::getAttrGroup, Collectors.toList()));
+
+                json.put("Base", attrMap.get("Base"));
+                json.put("Protocol", attrMap.get("Protocol"));
+                json.put("State", attrMap.get("State"));
+                json.put("Measure", attrMap.get("Measure"));
+            } else {
+                json.put("Base", new JSONArray());
+                json.put("Protocol",  new JSONArray());
+                json.put("State",  new JSONArray());
+                json.put("Measure",  new JSONArray());
+            }
 
             result = success(json);
         }

+ 6 - 6
ems/ems-core/src/main/java/com/ruoyi/ems/domain/EmsObjAttr.java

@@ -20,7 +20,7 @@ public class EmsObjAttr
     private String modelCode;
 
     /** 属性类型 */
-    private Integer attrType;
+    private String attrGroup;
 
     /** 属性标识 */
     private String attrKey;
@@ -55,12 +55,12 @@ public class EmsObjAttr
         return modelCode;
     }
 
-    public Integer getAttrType() {
-        return attrType;
+    public String getAttrGroup() {
+        return attrGroup;
     }
 
-    public void setAttrType(Integer attrType) {
-        this.attrType = attrType;
+    public void setAttrGroup(String attrGroup) {
+        this.attrGroup = attrGroup;
     }
 
     public void setAttrKey(String attrKey)
@@ -113,7 +113,7 @@ public class EmsObjAttr
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
             .append("id", getId())
             .append("modelCode", getModelCode())
-            .append("attrType", getAttrType())
+            .append("attrGroup", getAttrGroup())
             .append("attrKey", getAttrKey())
             .append("attrName", getAttrName())
             .append("attrUnit", getAttrUnit())

+ 5 - 5
ems/ems-core/src/main/java/com/ruoyi/ems/domain/EmsObjAttrDto.java

@@ -24,7 +24,7 @@ import java.util.Date;
  * @since [产品/模块版本]
  */
 public class EmsObjAttrDto {
-    private Integer attrType;
+    private String attrGroup;
 
     /** 属性标识 */
     private String attrKey;
@@ -41,12 +41,12 @@ public class EmsObjAttrDto {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date updateTime;
 
-    public Integer getAttrType() {
-        return attrType;
+    public String getAttrGroup() {
+        return attrGroup;
     }
 
-    public void setAttrType(Integer attrType) {
-        this.attrType = attrType;
+    public void setAttrGroup(String attrGroup) {
+        this.attrGroup = attrGroup;
     }
 
     public String getAttrKey() {

+ 24 - 0
ems/ems-core/src/main/java/com/ruoyi/ems/enums/AttrGroup.java

@@ -0,0 +1,24 @@
+/*
+ * 文 件 名:  AttrGroup
+ * 版    权:  华设设计集团股份有限公司
+ * 描    述:  <描述>
+ * 修 改 人:  lvwenbin
+ * 修改时间:  2025/3/5
+ * 跟踪单号:  <跟踪单号>
+ * 修改单号:  <修改单号>
+ * 修改内容:  <修改内容>
+ */
+package com.ruoyi.ems.enums;
+
+/**
+ * <一句话功能简述>
+ * <功能详细描述>
+ *
+ * @author lvwenbin
+ * @version [版本号, 2025/3/5]
+ * @see [相关类/方法]
+ * @since [产品/模块版本]
+ */
+public enum AttrGroup {
+
+}

+ 3 - 7
ems/ems-core/src/main/java/com/ruoyi/ems/service/impl/EmsObjAttrServiceImpl.java

@@ -18,7 +18,6 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -98,19 +97,16 @@ public class EmsObjAttrServiceImpl implements IEmsObjAttrService {
 
     @Override
     public List<EmsObjAttrDto> selectObjAttrItem(Integer objType, String objCode) {
-        List<EmsObjAttrDto> retList = null;
+        List<EmsObjAttrDto> ret = null;
 
         // 获取对象模型代码
         String modeCode = getModeCode(objType, objCode);
 
         if (StringUtils.isNotEmpty(modeCode)) {
-            retList = objAttrMapper.selectObjAttrDto(modeCode, objType, objCode);
-        }
-        else {
-            retList = new ArrayList<>();
+            ret = objAttrMapper.selectObjAttrDto(modeCode, objType, objCode);
         }
 
-        return retList;
+        return ret;
     }
 
     /**

+ 13 - 13
ems/ems-core/src/main/resources/mapper/ems/EmsObjAttrMapper.xml

@@ -7,7 +7,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <resultMap type="com.ruoyi.ems.domain.EmsObjAttr" id="ObjAttrResult">
         <result property="id"    column="id"    />
         <result property="modelCode"    column="model_code"    />
-        <result property="attrType"    column="attr_type"    />
+        <result property="attrGroup"    column="attr_group"    />
         <result property="attrKey"    column="attr_key"    />
         <result property="attrName"    column="attr_name"    />
         <result property="attrUnit"    column="attr_unit"    />
@@ -15,7 +15,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <resultMap type="com.ruoyi.ems.domain.EmsObjAttrDto" id="ObjAttrDtoResult">
-        <result property="attrType"    column="attr_type"    />
+        <result property="attrGroup"    column="attr_group"    />
         <result property="attrKey"    column="attr_key"    />
         <result property="attrName"    column="attr_name"    />
         <result property="attrValue"    column="attr_value"    />
@@ -24,14 +24,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <sql id="selectAdmEmsObjAttrVo">
-        select id, model_code, attr_type, attr_key, attr_name, attr_unit, attr_value_type from adm_ems_obj_attr
+        select id, model_code, attr_group, attr_key, attr_name, attr_unit, attr_value_type from adm_ems_obj_attr
     </sql>
 
     <select id="selectObjAttrList" parameterType="com.ruoyi.ems.domain.EmsObjAttr" resultMap="ObjAttrResult">
         <include refid="selectAdmEmsObjAttrVo"/>
         <where>  
             <if test="modelCode != null  and modelCode != ''"> and model_code = #{modelCode}</if>
-            <if test="attrType != null"> and attr_type = #{attrType}</if>
+            <if test="attr_group != null and attr_group != ''"> and attr_group = #{attrGroup}</if>
             <if test="attrKey != null  and attrKey != ''"> and attr_key = #{attrKey}</if>
             <if test="attrName != null  and attrName != ''"> and attr_name like concat('%', #{attrName}, '%')</if>
         </where>
@@ -40,16 +40,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="selectByModelCode" parameterType="java.lang.String" resultMap="ObjAttrResult">
         <include refid="selectAdmEmsObjAttrVo"/>
         where model_code = #{modelCode}
-        order by attr_type, attr_name
+        order by attr_group, attr_name
     </select>
 
     <select id="selectObjAttrDto"  resultMap="ObjAttrDtoResult">
         select
-            a.attr_key, a.attr_name,v.attr_value, e.attr_value_name, a.attr_type, v.update_time from  adm_ems_obj_attr a
+            a.attr_group, a.attr_key, a.attr_name, v.attr_value, e.attr_value_name, v.update_time from  adm_ems_obj_attr a
         left join
             (
                select
-                 attr_key, attr_value, update_time
+                  attr_key, attr_value, update_time
                from adm_ems_obj_attr_value
                where model_code = #{modelCode} and obj_type = #{objType} and obj_code = #{objCode}
             ) v on a.attr_key = v.attr_key
@@ -57,7 +57,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             adm_ems_obj_attr_enum e
            on a.model_code = e.model_code and a.attr_key = e.attr_key and v.attr_value = e.attr_value
         WHERE a.model_code = #{modelCode}
-        order by attr_type, attr_name
+        order by attr_group, attr_name
     </select>
     
     <select id="selectObjAttrById" parameterType="Long" resultMap="ObjAttrResult">
@@ -69,7 +69,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         insert into adm_ems_obj_attr
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="modelCode != null and modelCode != ''">model_code,</if>
-            <if test="attrType != null and attrType != ''">attr_type,</if>
+            <if test="attrGroup != null and attrGroup != ''">attr_group,</if>
             <if test="attrKey != null and attrKey != ''">attr_key,</if>
             <if test="attrName != null and attrName != ''">attr_name,</if>
             <if test="attrUnit != null">attr_unit,</if>
@@ -77,7 +77,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="modelCode != null and modelCode != ''">#{modelCode},</if>
-            <if test="attrType != null and attrType != ''">#{attrType},</if>
+            <if test="attrGroup != null and attrGroup != ''">#{attrGroup},</if>
             <if test="attrKey != null and attrKey != ''">#{attrKey},</if>
             <if test="attrName != null and attrName != ''">#{attrName},</if>
             <if test="attrUnit != null">#{attrUnit},</if>
@@ -86,10 +86,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </insert>
 
     <insert id="insertBatch" parameterType="java.util.List">
-        insert into adm_ems_obj_attr (model_code, attr_type, attr_key, attr_name, attr_unit, attr_value_type)
+        insert into adm_ems_obj_attr (model_code, attr_group, attr_key, attr_name, attr_unit, attr_value_type)
         values
         <foreach collection="list" item="item" index="index" separator=",">
-            (#{item.modelCode}, #{item.attrType}, #{item.attrKey}, #{item.attrName}, #{item.attrUnit}, #{item.attrValueType})
+            (#{item.modelCode}, #{item.attrGroup}, #{item.attrKey}, #{item.attrName}, #{item.attrUnit}, #{item.attrValueType})
         </foreach>
     </insert>
 
@@ -97,7 +97,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         update adm_ems_obj_attr
         <trim prefix="SET" suffixOverrides=",">
             <if test="modelCode != null and modelCode != ''">model_code = #{modelCode},</if>
-            <if test="attrType != null">attr_type = #{attrType},</if>
+            <if test="attrGroup != null and attrGroup !=''">attr_group = #{attrGroup},</if>
             <if test="attrKey != null and attrKey != ''">attr_key = #{attrKey},</if>
             <if test="attrName != null and attrName != ''">attr_name = #{attrName},</if>
             <if test="attrUnit != null">attr_unit = #{attrUnit},</if>

+ 22 - 14
ems/sql/ems_init_data.sql

@@ -264,20 +264,27 @@ INSERT INTO `adm_ems_obj_model` (`model_code`, `model_name`, `obj_type`, `abilit
 
 
 -- 对象属性DEMO数据
-INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_type`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 0, 'version', '固件版本号', NULL, 'Value');
-INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_type`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 0, 'iccid', '物联网卡ICCID号', NULL, 'Value');
-INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_type`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 0, 'imei', '设备imei', NULL, 'Value');
-INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_type`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 1, 'timerEnable', '上报定时开关', '', 'Enum');
-INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_type`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 1, 'timerInterval', '上报时间间隔', '秒(S)', 'Value');
-INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_type`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 1, 'signal', '信号强度', NULL, 'Value');
-INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_type`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 1, 'power', '实时功率', '瓦(W)', 'Value');
-INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_type`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 1, 'voltage', '实时电压', '伏特(V)', 'Value');
-INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_type`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 1, 'current', '实时电流值', '安培(A)', 'Value');
-INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_type`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 1, 'keyLock', '状态-按键锁定', NULL, 'Enum');
-INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_type`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 1, 'key', '状态-通断', NULL, 'Enum');
-INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_type`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 1, 'energy', '累计电量值', '千瓦时(kW·h)', 'Value');
-INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_type`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 1, 'resetLock', '重置锁', NULL, 'Enum');
-INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_type`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 1, 'onState', '设备上电的默认状态', '1', 'Enum');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 'Base', 'version', '固件版本号', NULL, 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 'Base', 'iccid', '物联网卡ICCID号', NULL, 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 'Base', 'imei', '设备imei', NULL, 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 'State', 'timerEnable', '上报定时开关', '', 'Enum');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 'State', 'timerInterval', '上报时间间隔', '秒(S)', 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 'State', 'signal', '信号强度', NULL, 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 'State', 'keyLock', '状态-按键锁定', NULL, 'Enum');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 'State', 'key', '状态-通断', NULL, 'Enum');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 'State', 'resetLock', '重置锁', NULL, 'Enum');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 'State', 'onState', '设备上电的默认状态', '1', 'Enum');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 'Measure', 'power', '实时功率', '瓦(W)', 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 'Measure', 'voltage', '实时电压', '伏特(V)', 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 'Measure', 'current', '实时电流值', '安培(A)', 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 'Measure', 'energy', '累计电量值', '千瓦时(kW·h)', 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 'Protocol', 'protocol', '协议', NULL, 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 'Protocol', 'server', 'MQTT地址', NULL, 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 'Protocol', 'port', 'MQTT端口', NULL, 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 'Protocol', 'clientId', '设备ID', NULL, 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 'Protocol', 'username', '用户名', NULL, 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 'Protocol', 'subcribe', '订阅主题', NULL, 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF_GEEKOPEN', 'Protocol', 'publish', '发布主题', NULL, 'Value');
 
 
 -- 对象属性DEMO数据
@@ -316,6 +323,7 @@ INSERT INTO `adm_ems_obj_ability` (`model_code`, `ability_key`, `ability_name`,
 INSERT INTO `adm_ems_obj_ability` (`model_code`, `ability_key`, `ability_name`, `ability_desc`, `ability_param`, `hidden_flag`) VALUES ('M_W2_QF_GEEKOPEN', 'settAutoReport', '设置电量信息定时上报', '开关(timerEnable:0:关闭上报 1:开启上报) 时间间隔(timerInterval: 上报时间间隔 单位秒)', '{\"type\":\"setting\",\"timerEnable\":1,\"timerInterval\":10}', 0);
 INSERT INTO `adm_ems_obj_ability` (`model_code`, `ability_key`, `ability_name`, `ability_desc`, `ability_param`, `hidden_flag`) VALUES ('M_W2_QF_GEEKOPEN', 'setReset', '重置/恢复出厂', '设备恢复出厂设置固定传\"reset\"', '{\"type\":\"setting\",\"system\":\"reset\"}', 0);
 INSERT INTO `adm_ems_obj_ability` (`model_code`, `ability_key`, `ability_name`, `ability_desc`, `ability_param`, `hidden_flag`) VALUES ('M_W2_QF_GEEKOPEN', 'setOnState', '设置设备上电默认状态', '0:记忆;1:关闭,即断开;2:开启,即通电,默认=1', '{\"type\":\"setting\",\"onState\":1}', 0);
+INSERT INTO `adm_ems_obj_ability` (`model_code`, `ability_key`, `ability_name`, `ability_desc`, `ability_param`, `hidden_flag`) VALUES ('M_W2_QF_GEEKOPEN', 'syncInfo', '同步基础信息', '获取设备状态信息', '{\"type\":\"info\"}', 0);
 INSERT INTO `adm_ems_obj_ability` (`model_code`, `ability_key`, `ability_name`, `ability_desc`, `ability_param`, `hidden_flag`) VALUES ('M_W2_QF_GEEKOPEN', 'syncProtocol', '同步设备通讯信息', '获取设备通讯信息', '{\"type\":\"protocol\"}', 0);
 INSERT INTO `adm_ems_obj_ability` (`model_code`, `ability_key`, `ability_name`, `ability_desc`, `ability_param`, `hidden_flag`) VALUES ('M_W2_QF_GEEKOPEN', 'syncStatistic', '同步设备电量信息', '获取设备电量信息', '{\"type\":\"statistic\"}', 1);
 

+ 19 - 19
ems/sql/ems_server.sql

@@ -571,7 +571,7 @@ drop table if exists adm_ems_obj_attr;
 create table adm_ems_obj_attr  (
   `id`              bigint(20)      not null auto_increment      comment '序号',
   `model_code`      varchar(64)     not null                     comment '模型code',
-  `attr_type`       int             default 0                    comment '属性类型',
+  `attr_group`      varchar(128)    not null                     comment '属性分组',
   `attr_key`        varchar(128)    not null                     comment '属性标识',
   `attr_name`       varchar(256)    default null                 comment '属性名称',
   `attr_unit`       varchar(32)     default null                 comment '属性单位',
@@ -582,24 +582,24 @@ create table adm_ems_obj_attr  (
 
 
 -- 对象属性初始数据
-INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_type`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2', 0, 'voltageLevel', '电压等级', 'kV', 'Value');
-INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_type`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2', 0, 'frequency', '电流频率', 'Hz', 'Value');
-INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_type`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_E5', 0, 'installedCapacity', '装机容量', 'kw', 'Value');
-INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_type`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_C1', 0, 'storageCapacity',   '储能容量', 'kW-h', 'Value');
-
-INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_type`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_T', 0, 'ratedCapacity', '额定容量', 'kVA', 'Value');
-INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_type`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_T', 0, 'ratedVoltage', '额定电压', 'kV', 'Value');
-INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_type`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_T', 0, 'ratedFrequency', '额定频率', 'Hz', 'Value');
-INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_type`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_T', 0, 'phaseNumber', '相数', '相', 'Value');
-
-INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_type`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QR', 0, 'ratedVoltage', '额定电压', 'V', 'Value');
-INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_type`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QR', 0, 'ratedCurrent', '额定电流', 'A', 'Value');
-INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_type`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QR', 0, 'triggerCurrent', '触发电流', 'A', 'Value');
-INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_type`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QR', 1, 'onOffState', '开关状态', null, 'Value');
-
-INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_type`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF', 0, 'ratedVoltage', '额定电压', 'V', 'Value');
-INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_type`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF', 0, 'ratedCurrent', '额定电流', 'A', 'Value');
-INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_type`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF', 1, 'onOffState', '开关状态', null, 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2', 'Base', 'voltageLevel', '电压等级', 'kV', 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2', 'Base', 'frequency', '电流频率', 'Hz', 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_E5', 'Base', 'installedCapacity', '装机容量', 'kw', 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_C1', 'Base', 'storageCapacity',   '储能容量', 'kW-h', 'Value');
+
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_T', 'Base', 'ratedCapacity', '额定容量', 'kVA', 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_T', 'Base', 'ratedVoltage', '额定电压', 'kV', 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_T', 'Base', 'ratedFrequency', '额定频率', 'Hz', 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_T', 'Base', 'phaseNumber', '相数', '相', 'Value');
+
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QR', 'Base', 'ratedVoltage', '额定电压', 'V', 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QR', 'Base', 'ratedCurrent', '额定电流', 'A', 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QR', 'Base', 'triggerCurrent', '触发电流', 'A', 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QR', 'State', 'onOffState', '开关状态', null, 'Value');
+
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF', 'Base', 'ratedVoltage', '额定电压', 'V', 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF', 'Base', 'ratedCurrent', '额定电流', 'A', 'Value');
+INSERT INTO `adm_ems_obj_attr` (`model_code`, `attr_group`, `attr_key`, `attr_name`, `attr_unit`, `attr_value_type`) VALUES ('M_W2_QF', 'State', 'onOffState', '开关状态', null, 'Value');
 
 
 -- ----------------------------