Browse Source

优化订阅设备RocketMQ、定时触发、采集值三个条件下获取租户Id的逻辑;优化规则引擎-配置规则接口,在插入数据到规则设备表前增加设备Id、属性Id和规则Id唯一校验的判断,解决重复插入数据的问题;

james 1 tuần trước cách đây
mục cha
commit
b7b0c8a76f

+ 4 - 4
service-rule/service-rule-biz/src/main/java/com/usky/rule/crons/TriggerCronTask.java

@@ -94,10 +94,10 @@ public class TriggerCronTask implements ApplicationContextAware, InitializingBea
             }
         }
 
-        List<SpaceTrigger> spaceTriggers = this.ruleEngineService.getSpaceTriggers(ruleEngineDetail.getTriggers());
-        if (deviceTriggers != null && !spaceTriggers.isEmpty()) {
-            this.spaceTriggerCache.put(ruleEngineId, spaceTriggers);
-        }
+//        List<SpaceTrigger> spaceTriggers = this.ruleEngineService.getSpaceTriggers(ruleEngineDetail.getTriggers());
+//        if (deviceTriggers != null && !spaceTriggers.isEmpty()) {
+//            this.spaceTriggerCache.put(ruleEngineId, spaceTriggers);
+//        }
 
     }
 

+ 1 - 1
service-rule/service-rule-biz/src/main/java/com/usky/rule/mapper/RuleEngineDeviceMapper.java

@@ -9,7 +9,7 @@ public interface RuleEngineDeviceMapper {
     /** tenantId 为空时不按租户过滤 */
     List<RuleEngineDevice> selectByDeviceAndIdentifier(@Param("deviceId") String deviceId,
                                                         @Param("identifier") String identifier,
-                                                        @Param("productId") Long productId,
+                                                        @Param("ruleEngineId") Long ruleEngineId,
                                                         @Param("tenantId") Integer tenantId);
     int insert(RuleEngineDevice row);
     int deleteByRuleEngineId(@Param("ruleEngineId") Long ruleEngineId);

+ 5 - 0
service-rule/service-rule-biz/src/main/java/com/usky/rule/service/impl/RuleEngineServiceImpl.java

@@ -266,6 +266,11 @@ public class RuleEngineServiceImpl extends AbstractCrudService<RuleEngineMapper,
                     List<SimpleVO> devices = c.getDevices();
                     List<Condition> conditionsList = c.getConditions();
                     devices.forEach((d) -> conditionsList.forEach((conditions) -> {
+                        List<RuleEngineDevice> list = ruleEngineDeviceMapper.selectByDeviceAndIdentifier(d.getId(),conditions.getIdentifier(),ruleEngineId,null);
+                        if (list != null && !list.isEmpty()) {
+                            return;
+                        }
+
                         RuleEngineDevice dev = new RuleEngineDevice();
                         dev.setRuleEngineId(ruleEngineId);
                         dev.setDeviceId(d.getId());

+ 22 - 6
service-rule/service-rule-biz/src/main/java/com/usky/rule/subscribe/TriggerDeviceUtil.java

@@ -4,6 +4,9 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.usky.common.core.util.JsonUtils;
 import com.usky.common.security.utils.SecurityUtils;
+import com.usky.demo.RemoteTsdbProxyService;
+import com.usky.demo.domain.LastInnerQueryVO;
+import com.usky.demo.domain.LastInnerResultVO;
 import com.usky.rule.domain.RuleEngineDevice;
 import com.usky.rule.mapper.RuleEngineDeviceMapper;
 import com.usky.rule.util.DateTimeUtil;
@@ -34,11 +37,7 @@ import com.usky.rule.service.RuleEngineService;
 import java.math.BigDecimal;
 import java.time.Duration;
 import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import com.usky.rule.vo.log.BaseLog;
@@ -57,6 +56,8 @@ public class TriggerDeviceUtil {
     private DeviceTriggerIncludeMinuteCache historyRecordCache;
     @Autowired
     private RuleEngineDeviceMapper ruleEngineDeviceMapper;
+    @Autowired
+    private RemoteTsdbProxyService remoteTsdbProxyService;
     private static final Integer maxNumberOfReminders = 1;
     private static final ExpressionParser parser = new SpelExpressionParser();
 
@@ -293,6 +294,7 @@ public class TriggerDeviceUtil {
             label49:
             for(DeviceConstraint deviceConstraint : deviceConstraints) {
                 String deviceId = ((SimpleVO)deviceConstraint.getDevices().get(0)).getId();
+                String deviceUuid = deviceConstraint.getDevices().get(0).getDeviceUuid();
                 DeviceTriggerLog deviceTriggerLog = new DeviceTriggerLog();
                 List<Condition> meetConstraintConditionList = new ArrayList();
                 deviceTriggerLog.setId(deviceId);
@@ -319,7 +321,21 @@ public class TriggerDeviceUtil {
                     }
 
                     String deviceIdentifier = identifierCondition.getIdentifier();
-                    BigDecimal currValue = this.getCurrDeviceIdentifierValue(deviceId, deviceIdentifier);
+                    //BigDecimal currValue = this.getCurrDeviceIdentifierValue(deviceId, deviceIdentifier);
+                    LastInnerQueryVO lastInnerQueryVO = new LastInnerQueryVO();
+                    lastInnerQueryVO.setDeviceuuid(Collections.singletonList(deviceUuid));
+                    lastInnerQueryVO.setMetrics(Collections.singletonList(deviceIdentifier));
+                    List<LastInnerResultVO> currValueList = remoteTsdbProxyService.queryLastDeviceData(lastInnerQueryVO);
+                    BigDecimal currValue = currValueList.stream()
+                            .filter(Objects::nonNull)
+                            .map(LastInnerResultVO::getMetrics)
+                            .filter(Objects::nonNull)
+                            .flatMap(metrics -> metrics.values().stream())
+                            .filter(Objects::nonNull)
+                            .map(String::valueOf)
+                            .map(BigDecimal::new)
+                            .findFirst()
+                            .orElse(null);
                     if (currValue == null) {
                         boolConstraintExp.append(false);
                     } else {

+ 15 - 1
service-rule/service-rule-biz/src/main/java/com/usky/rule/util/RuleEngineUtil.java

@@ -92,6 +92,12 @@ public class RuleEngineUtil {
             ruleEngineLog.setCreateTime(now);
             ruleEngineLog.setCreatedBy("admin");
             ruleEngineLog.setUpdatedBy("admin");
+            ruleEngineLog.setTenantId(1);
+            if(SecurityUtils.getUsername() != null) {
+                ruleEngineLog.setCreatedBy(SecurityUtils.getUsername());
+                ruleEngineLog.setUpdatedBy(SecurityUtils.getUsername());
+                ruleEngineLog.setTenantId(SecurityUtils.getTenantId());
+            }
             ruleEngineLog.setTime(now);
             this.ruleEngineLogService.save(ruleEngineLog);
         }
@@ -208,9 +214,17 @@ public class RuleEngineUtil {
                     String name = device.getName();
                     String deviceUuid = device.getDeviceUuid();
                     String gatewayUuid = device.getGatewayUuid();
-                    Integer tenantId = SecurityUtils.getTenantId();
+                    Integer tenantId = device.getTenantId();
+
                     long userId = SecurityUtils.getUserId();
+                    if(userId == 0){
+                        userId = 1L;
+                    }
+
                     String userName = SecurityUtils.getUsername();
+                    if(userName == null){
+                        userName = "admin";
+                    }
 
                     Map<String, Object> map = new HashMap<>();
                     map.put("method", "control");

+ 1 - 0
service-rule/service-rule-biz/src/main/java/com/usky/rule/vo/visualization/AlarmSimpleVO.java

@@ -7,4 +7,5 @@ public class AlarmSimpleVO {
     private String deviceId;
     private String deviceName;
     private String commAddress;
+    private Integer tenantId;
 }

+ 2 - 0
service-rule/service-rule-biz/src/main/java/com/usky/rule/vo/visualization/SimpleVO.java

@@ -10,4 +10,6 @@ public class SimpleVO {
     private String name;
     private String deviceUuid;
     private String gatewayUuid;
+    private String commAddress;
+    private Integer tenantId;
 }

+ 1 - 1
service-rule/service-rule-biz/src/main/resources/mapper/RuleEngineDeviceMapper.xml

@@ -16,7 +16,7 @@
     </resultMap>
     <select id="selectByDeviceAndIdentifier" resultMap="Base">
         SELECT * FROM rule_engine_device
-        WHERE device_id = #{deviceId} AND identifier = #{identifier} AND product_id = #{productId}
+        WHERE device_id = #{deviceId} AND identifier = #{identifier} and rule_engine_id = #{ruleEngineId}
         <if test="tenantId != null">AND tenant_id = #{tenantId}</if>
     </select>
     <insert id="insert" useGeneratedKeys="true" keyProperty="id">

+ 3 - 1
service-rule/service-rule-biz/src/main/resources/mapper/RuleEngineMapper.xml

@@ -17,7 +17,9 @@
     </resultMap>
 
     <delete id="deleteById">DELETE FROM rule_engine WHERE id=#{id}</delete>
-    <select id="selectById" resultMap="Base">SELECT * FROM rule_engine WHERE id=#{id} and tenant_id = #{tenantId}</select>
+    <select id="selectById" resultMap="Base">SELECT * FROM rule_engine WHERE id=#{id}
+        <if test="tenantId != null">AND tenant_id = #{tenantId}</if>
+    </select>
     <update id="updateStatus">UPDATE rule_engine SET status=#{status}, update_time=NOW() WHERE id=#{id}</update>
     <select id="selectEnabledByProjectId" resultMap="Base">
         SELECT * FROM rule_engine WHERE project_id=#{projectId} AND status=1