Просмотр исходного кода

优化设备添加检测唯一性逻辑,避免设备重复添加

zhaiyifei 10 месяцев назад
Родитель
Сommit
b7dd7b18d9

+ 17 - 23
src/main/java/com/yunfeiyun/agmp/iotm/web/service/impl/IotDeviceServiceImpl.java

@@ -7,8 +7,6 @@ import com.yunfeiyun.agmp.common.utils.StringUtils;
 import com.yunfeiyun.agmp.iot.common.constant.mqtt.IotMqttConstant;
 import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
 import com.yunfeiyun.agmp.iot.common.domain.IotDeviceconn;
-import com.yunfeiyun.agmp.iotm.web.domain.resvo.IotHomeDeviceStatResVo;
-import com.yunfeiyun.agmp.iotm.web.domain.resvo.IotHomeTypeStatResVo;
 import com.yunfeiyun.agmp.iot.common.enums.IotDeviceDelStatusEnum;
 import com.yunfeiyun.agmp.iot.common.enums.IotDeviceStatusTypeEnum;
 import com.yunfeiyun.agmp.iot.common.exception.IotBizException;
@@ -23,6 +21,8 @@ import com.yunfeiyun.agmp.iotm.web.domain.reqvo.IotDeviceEditReqVo;
 import com.yunfeiyun.agmp.iotm.web.domain.reqvo.IotDeviceListReqVo;
 import com.yunfeiyun.agmp.iotm.web.domain.reqvo.IotDeviceModifyReqVo;
 import com.yunfeiyun.agmp.iotm.web.domain.resvo.IotDeviceListResVo;
+import com.yunfeiyun.agmp.iotm.web.domain.resvo.IotHomeDeviceStatResVo;
+import com.yunfeiyun.agmp.iotm.web.domain.resvo.IotHomeTypeStatResVo;
 import com.yunfeiyun.agmp.iotm.web.mapper.IotDeviceMapper;
 import com.yunfeiyun.agmp.iotm.web.service.IIotDeviceService;
 import com.yunfeiyun.agmp.iotm.web.service.IIotDeviceconnService;
@@ -33,10 +33,8 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 设备基础Service业务层处理
@@ -382,26 +380,22 @@ public class IotDeviceServiceImpl implements IIotDeviceService {
 
     @Override
     public String checkIotDeviceExist(String devtypeBid, String[] devCode) {
-        List<IotDevice> iotDeviceList = selectIotDeviceList(new IotDevice(), false);
-        Set<String> devCodeSet = new HashSet<>();
-        Set<String> devTopicSet = new HashSet<>();
+        List<String> devtypeBidList = IotMqttConstant.getDevtypeBidList(devtypeBid);
+        IotDevice selectIotDevice = new IotDevice();
+        selectIotDevice.setDevtypeBidList(devtypeBidList);
+        List<IotDevice> iotDeviceList = selectIotDeviceList(selectIotDevice, false);
+
+        Set<String> newDevCodeSet = new HashSet<>(Arrays.asList(devCode));
+        Set<String> oldDevCodeSet = new HashSet<>();
         for (IotDevice iotDevice : iotDeviceList) {
-            devCodeSet.add(iotDevice.getDevtypeBid() + iotDevice.getDevCode());
-            String topic = IotMqttConstant.getReportTopicByDevtype(iotDevice.getDevtypeBid());
-            if (StringUtils.isNotEmpty(topic)) {
-                devTopicSet.add(IotMqttConstant.getReportTopicByDevtype(iotDevice.getDevtypeBid()) + iotDevice.getDevCode());
-            }
+            oldDevCodeSet.add(iotDevice.getDevCode());
         }
-        String topic = IotMqttConstant.getReportTopicByDevtype(devtypeBid);
-        for (String code : devCode) {
-            String key = devtypeBid + code;
-            // 同一个mqtt Topic只能有一个设备
-            // 同一个设备类型下不能有重复的设备编号
-            if (devTopicSet.contains(topic + code) || devCodeSet.contains(key)) {
-                return code;
-            }
+        Set<String> intersectionSet =  oldDevCodeSet.stream().filter(newDevCodeSet::contains).collect(Collectors.toCollection(HashSet::new));
+        String intersectionCode = null;
+        if(!intersectionSet.isEmpty()){
+            intersectionCode = intersectionSet.stream().findFirst().orElse(null);
         }
-        return null;
+        return intersectionCode;
     }
 
     @Override

+ 7 - 0
src/main/resources/mapper/IotDeviceMapper.xml

@@ -108,6 +108,13 @@
             </if>
             <if test="extInfo != null  and extInfo != ''">and d.extInfo = #{extInfo}</if>
 
+            <if test="devtypeBidList != null  and devtypeBidList.size() > 0">
+                and d.devtypeBid in
+                <foreach collection="devtypeBidList" item="item" open="(" close=")" separator=",">
+                    #{item}
+                </foreach>
+            </if>
+
         </where>
     </select>