Преглед изворни кода

调整连接信息的编辑和新增逻辑

liuyaowen пре 1 година
родитељ
комит
41b98f6bf0

+ 2 - 0
src/main/java/com/yunfeiyun/agmp/iotm/web/mapper/IotDeviceMapper.java

@@ -65,4 +65,6 @@ public interface IotDeviceMapper
     public int deleteIotDeviceByDevBid(String devBid);
 
     List<IotDeviceListResVo> selectIotDeviceListByType(IotDeviceListReqVo reqVo);
+
+    int setConnNullByDevBids(List<IotDevice> iotDeviceList);
 }

+ 73 - 32
src/main/java/com/yunfeiyun/agmp/iotm/web/service/impl/IotDeviceconnServiceImpl.java

@@ -1,8 +1,10 @@
 package com.yunfeiyun.agmp.iotm.web.service.impl;
 
 import com.alibaba.fastjson2.JSONArray;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.yunfeiyun.agmp.common.constant.ErrorCode;
 import com.yunfeiyun.agmp.common.utils.DateUtils;
+import com.yunfeiyun.agmp.common.utils.ObjectUtil;
 import com.yunfeiyun.agmp.common.utils.SecurityUtils;
 import com.yunfeiyun.agmp.common.utils.StringUtils;
 import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
@@ -28,7 +30,10 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 设备连接配置Service业务层处理
@@ -71,7 +76,8 @@ public class IotDeviceconnServiceImpl implements IIotDeviceconnService
 
         if(IotDeviceconnTypeEnum.COMMON.getCode().equals(devconnType)){
             IotDeviceconn iotDeviceconn = new IotDeviceconn();
-            iotDeviceconn.setDevconnBid(iotDeviceconn.getUUId());
+            String bid = reqVo.getCommonConnBid();
+            iotDeviceconn.setDevconnBid(StringUtils.isEmpty(bid)?iotDeviceconn.getUUId():bid);
             iotDeviceconn.setDevtypeBid(devtypeBid);
             iotDeviceconn.setDevconnType(devconnType);
             iotDeviceconn.setDevconnName(IotDeviceconnTypeEnum.COMMON.getName());
@@ -108,7 +114,7 @@ public class IotDeviceconnServiceImpl implements IIotDeviceconnService
                 }
 
                 IotDeviceconn iotDeviceconn = new IotDeviceconn();
-                String bid = iotDeviceconn.getDevconnBid();
+                String bid = devconnConfigInfo.getDevconnBid();
                 iotDeviceconn.setDevconnBid(StringUtils.isEmpty(bid)?iotDeviceconn.getUUId():bid);
                 iotDeviceconn.setDevtypeBid(devtypeBid);
                 iotDeviceconn.setDevconnType(devconnType);
@@ -215,16 +221,15 @@ public class IotDeviceconnServiceImpl implements IIotDeviceconnService
         }
         return updatePrivateConn(reqVo,iotDeviceconnList);
     }
-    // 编辑通用连接
+    // 编辑通用连接,通用连接-》通用连接,无需任何操作
+    // 通用变私有-》删除租户的通用连接信息,但无需删除物联网的通用连接,创建租户的私有连接,并将设备绑定,发送更新设备连接消息
     private int updateCommonConn(IotDeviceconnEditReqVo reqVo,List<IotDeviceconn> oldConnList){
         int result = 0;
         // 连接配置之前为通用连接
         if(IotDeviceconnTypeEnum.COMMON.getCode().equals(reqVo.getDevconnType())){
             // 如果编辑后仍为通用连接,则不做任何处理
             result++;
-            return result;
         }else {
-            // 编辑后变为私有连接
             if(reqVo.getDevconnConfigList().size() == 1){
                 // 如果新的私有连接信息只有1条
                 IotDeviceconn iotDeviceconn = oldConnList.get(0);
@@ -241,17 +246,16 @@ public class IotDeviceconnServiceImpl implements IIotDeviceconnService
                 result = result + addDeviceconn(reqVo.getNewDevtypeBid(),reqVo.getDevconnType(),reqVo.getDevconnConfigList(),null,true);
                 // TODO: 此处用于解绑设备的旧配置以及创建新配置,后续可以优化
                 for(IotDevice iotDevice : iotDeviceList){
-                    IotDeviceEditMqModel iotDeviceEditMqModel = new IotDeviceEditMqModel();
-                    iotDeviceEditMqModel.setOldIotDevice(iotDevice);
-                    IotDevice newIotDevice = new IotDevice();
+                    IotDevice newIotDevice =new IotDevice();
                     BeanUtils.copyProperties(iotDevice,newIotDevice);
                     newIotDevice.setDevconnBid(newConfig.getDevconnBid());
-                    iotDeviceEditMqModel.setNewIotDevice(newIotDevice);
                     iotDeviceMapper.updateIotDevice(newIotDevice);
+                    IotDeviceEditMqModel iotDeviceEditMqModel = new IotDeviceEditMqModel();
+                    iotDeviceEditMqModel.setOldIotDevice(iotDevice);
+                    iotDeviceEditMqModel.setNewIotDevice(newIotDevice);
                     sendToIotsMsgService.sendIotDeviceUpdateMsg(iotDeviceEditMqModel);
                 }
                 // 删除旧连接
-               return result;
             }else {
                 // 如果新的私有连接信息有多条
                 // 先删除该租户的旧的连接配置,但不重新建立连接
@@ -263,11 +267,22 @@ public class IotDeviceconnServiceImpl implements IIotDeviceconnService
                 iotDeviceconnAddReqVo.setDevconnConfigList(reqVo.getDevconnConfigList());
                 result = result + addDeviceconn(iotDeviceconnAddReqVo);
                 // 新增私有连接
-                return result;
+                IotDeviceconn iotDeviceconn = oldConnList.get(0);
+                IotDevice iotDeviceQuery = new IotDevice();
+                iotDeviceQuery.setDevconnBid(iotDeviceconn.getDevconnBid());
+                // 查询旧设备信息
+                List<IotDevice> iotDeviceList = iotDeviceService.selectIotDeviceList(iotDeviceQuery);
+                iotDeviceMapper.setConnNullByDevBids(iotDeviceList);
+                // 解绑设备连接
+                for(IotDevice iotDevice : iotDeviceList){
+                    sendToIotsMsgService.sendIotDeviceDeleteMsg(iotDevice);
+                }
             }
         }
+        return result;
     }
 
+
     // 编辑私有连接
     private int updatePrivateConn(IotDeviceconnEditReqVo reqVo,List<IotDeviceconn> iotDeviceconnList){
         int result = 0;
@@ -277,34 +292,60 @@ public class IotDeviceconnServiceImpl implements IIotDeviceconnService
             IotDevice iotDeviceQuery = new IotDevice();
             iotDeviceQuery.setDevtypeBid(reqVo.getOldDevtypeBid());
             List<IotDevice> iotDeviceList = iotDeviceService.selectIotDeviceList(iotDeviceQuery);
-            // 先删除该租户的旧的
+            // 先删除该租户的旧的私有连接,该接口会自动解绑设备
             result = result + deleteIotDeviceconnByBids(iotDeviceconnList,true);
             String newConnBid = iotDeviceQuery.getUUId();
             // 创建该租户新的通用连接
             result = result + addDeviceconn(reqVo.getNewDevtypeBid(),reqVo.getDevconnType(),reqVo.getDevconnConfigList(),newConnBid,true);
             for(IotDevice iotDevice : iotDeviceList){
-                IotDeviceEditMqModel iotDeviceEditMqModel = new IotDeviceEditMqModel();
-                iotDeviceEditMqModel.setOldIotDevice(iotDevice);
-                IotDevice newIotDevice = new IotDevice();
-                BeanUtils.copyProperties(iotDevice,newIotDevice);
-                newIotDevice.setDevconnBid(newConnBid);
-                iotDeviceEditMqModel.setNewIotDevice(newIotDevice);
-                iotDeviceMapper.updateIotDevice(newIotDevice);
-                sendToIotsMsgService.sendIotDeviceUpdateMsg(iotDeviceEditMqModel);
+                iotDevice.setDevconnBid(newConnBid);
+                iotDeviceMapper.updateIotDevice(iotDevice);
+                sendToIotsMsgService.sendIotDeviceInsertMsg(iotDevice);
             }
         }else {
-            // 编辑后仍为私有连接
-            // 编辑后变为通用连接
-            IotDevice iotDeviceQuery = new IotDevice();
-            iotDeviceQuery.setDevtypeBid(reqVo.getOldDevtypeBid());
-            List<IotDevice> iotDeviceList = iotDeviceService.selectIotDeviceList(iotDeviceQuery);
-            // 先删除该租户的旧的
-            result = result +  deleteIotDeviceconnByBids(iotDeviceconnList,true);
-            // 创建该租户新的通用连接
-            result = result + addDeviceconn(reqVo.getNewDevtypeBid(),reqVo.getDevconnType(),reqVo.getDevconnConfigList(),null,true);
-            for(IotDevice iotDevice : iotDeviceList){
-                iotDevice.setDevconnBid(null);
-                iotDeviceMapper.updateIotDevice(iotDevice);
+            if(reqVo.getDevconnConfigList().size() == 1){
+                // 如果新的私有连接信息只有1条
+                IotDeviceconn iotDeviceconn = iotDeviceconnList.get(0);
+                IotDevice iotDeviceQuery = new IotDevice();
+                iotDeviceQuery.setDevconnBid(iotDeviceconn.getDevconnBid());
+                // 查询旧设备信息
+                List<IotDevice> iotDeviceList = iotDeviceService.selectIotDeviceList(iotDeviceQuery);
+                // 创建新连接
+                IotDevconnConfigInfoVo newConfig = reqVo.getDevconnConfigList().get(0);
+                newConfig.setDevconnBid(iotDeviceconn.getUUId());
+                // 先删除该租户的旧的私有连接,该接口会自动解绑设备
+                result = result + deleteIotDeviceconnByBids(iotDeviceconnList,true);
+                // 再创建该租户的新的私有连接信息
+                result = result + addDeviceconn(reqVo.getNewDevtypeBid(),reqVo.getDevconnType(),reqVo.getDevconnConfigList(),null,true);
+                // TODO: 此处用于解绑设备的旧配置以及创建新配置,后续可以优化
+                for(IotDevice iotDevice : iotDeviceList){
+                    iotDevice.setDevconnBid(newConfig.getDevconnBid());
+                    iotDeviceMapper.updateIotDevice(iotDevice);
+                    sendToIotsMsgService.sendIotDeviceInsertMsg(iotDevice);
+                }
+                // 删除旧连接
+            }else {
+                // 删除所有的旧连接,创建新连接,
+                deleteIotDeviceconnByBids(iotDeviceconnList,true);
+                // 新增连接
+                // 创建私有连接
+                IotDeviceconnAddReqVo iotDeviceconnAddReqVo = new IotDeviceconnAddReqVo();
+                iotDeviceconnAddReqVo.setDevtypeBid(reqVo.getOldDevtypeBid());
+                iotDeviceconnAddReqVo.setDevconnType(reqVo.getDevconnType());
+                iotDeviceconnAddReqVo.setDevconnConfigList(reqVo.getDevconnConfigList());
+                result = result + addDeviceconn(iotDeviceconnAddReqVo);
+
+                Map<String,IotDevconnConfigInfoVo> updateConn = reqVo.getDevconnConfigList().stream().filter(item->StringUtils.isNotEmpty(item.getDevconnBid())).collect(Collectors.toMap(IotDevconnConfigInfoVo::getDevconnBid, item->item));
+                // 由于旧连接删除时会取消订阅设备,所以需要重新订阅配置没有变的设备
+                IotDevice iotDeviceQuery = new IotDevice();
+                iotDeviceQuery.setDevtypeBid(reqVo.getOldDevtypeBid());
+                List<IotDevice> iotDeviceList = iotDeviceMapper.selectIotDeviceList(iotDeviceQuery);
+                for(IotDevice iotDevice : iotDeviceList){
+                    if(null != updateConn.get(iotDevice.getDevconnBid())) {
+                        // 说明该设备的连接配置没有变化,需要重新订阅
+                        sendToIotsMsgService.sendIotDeviceInsertMsg(iotDevice);
+                    }
+                }
             }
         }
         return result;

+ 169 - 135
src/main/resources/mapper/IotDeviceMapper.xml

@@ -1,101 +1,111 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.yunfeiyun.agmp.iotm.web.mapper.IotDeviceMapper">
 
     <resultMap type="IotDevice" id="IotDeviceResult">
-        <result property="id"    column="id"    />
-        <result property="devBid"    column="devBid"    />
-        <result property="tid"    column="tid"    />
-        <result property="devtypeBid"    column="devtypeBid"    />
-        <result property="firmBid"    column="firmBid"    />
-        <result property="devclassBid"    column="devclassBid"    />
-        <result property="devconnBid"    column="devconnBid"    />
-        <result property="devtypeName"    column="devtypeName"    />
-        <result property="devclassName"    column="devclassName"    />
-        <result property="devCode"    column="devCode"    />
-        <result property="devName"    column="devName"    />
-        <result property="devVersion"    column="devVersion"    />
-        <result property="devStatus"    column="devStatus"    />
-        <result property="devProvince"    column="devProvince"    />
-        <result property="devCity"    column="devCity"    />
-        <result property="devDistrict"    column="devDistrict"    />
-        <result property="devLng"    column="devLng"    />
-        <result property="devLat"    column="devLat"    />
-        <result property="devPositionstatus"    column="devPositionstatus"    />
-        <result property="devPositiontype"    column="devPositiontype"    />
-        <result property="devTag"    column="devTag"    />
-        <result property="devRecogtype"    column="devRecogtype"    />
-        <result property="devNetworktype"    column="devNetworktype"    />
-        <result property="devOfflinedate"    column="devOfflinedate"    />
-        <result property="devProvincealign"    column="devProvincealign"    />
-        <result property="devCityalign"    column="devCityalign"    />
-        <result property="devDistrictalign"    column="devDistrictalign"    />
-        <result property="devLngalign"    column="devLngalign"    />
-        <result property="devLatalign"    column="devLatalign"    />
-        <result property="devContacts"    column="devContacts"    />
-        <result property="devTel"    column="devTel"    />
-        <result property="devCreator"    column="devCreator"    />
-        <result property="devModifier"    column="devModifier"    />
-        <result property="devUpdateddate"    column="devUpdateddate"    />
-        <result property="devModifieddate"    column="devModifieddate"    />
-        <result property="devCreateddate"    column="devCreateddate"    />
-        <result property="devDelstatus"    column="devDelstatus"    />
-        <result property="devOnlinedate"    column="devOnlinedate"    />
-        <result property="devSubtype"    column="devSubtype"    />
-        <result property="devOriginalid"    column="devOriginalid"    />
-        <result property="extInfo"    column="extInfo"    />
+        <result property="id" column="id"/>
+        <result property="devBid" column="devBid"/>
+        <result property="tid" column="tid"/>
+        <result property="devtypeBid" column="devtypeBid"/>
+        <result property="firmBid" column="firmBid"/>
+        <result property="devclassBid" column="devclassBid"/>
+        <result property="devconnBid" column="devconnBid"/>
+        <result property="devtypeName" column="devtypeName"/>
+        <result property="devclassName" column="devclassName"/>
+        <result property="devCode" column="devCode"/>
+        <result property="devName" column="devName"/>
+        <result property="devVersion" column="devVersion"/>
+        <result property="devStatus" column="devStatus"/>
+        <result property="devProvince" column="devProvince"/>
+        <result property="devCity" column="devCity"/>
+        <result property="devDistrict" column="devDistrict"/>
+        <result property="devLng" column="devLng"/>
+        <result property="devLat" column="devLat"/>
+        <result property="devPositionstatus" column="devPositionstatus"/>
+        <result property="devPositiontype" column="devPositiontype"/>
+        <result property="devTag" column="devTag"/>
+        <result property="devRecogtype" column="devRecogtype"/>
+        <result property="devNetworktype" column="devNetworktype"/>
+        <result property="devOfflinedate" column="devOfflinedate"/>
+        <result property="devProvincealign" column="devProvincealign"/>
+        <result property="devCityalign" column="devCityalign"/>
+        <result property="devDistrictalign" column="devDistrictalign"/>
+        <result property="devLngalign" column="devLngalign"/>
+        <result property="devLatalign" column="devLatalign"/>
+        <result property="devContacts" column="devContacts"/>
+        <result property="devTel" column="devTel"/>
+        <result property="devCreator" column="devCreator"/>
+        <result property="devModifier" column="devModifier"/>
+        <result property="devUpdateddate" column="devUpdateddate"/>
+        <result property="devModifieddate" column="devModifieddate"/>
+        <result property="devCreateddate" column="devCreateddate"/>
+        <result property="devDelstatus" column="devDelstatus"/>
+        <result property="devOnlinedate" column="devOnlinedate"/>
+        <result property="devSubtype" column="devSubtype"/>
+        <result property="devOriginalid" column="devOriginalid"/>
+        <result property="extInfo" column="extInfo"/>
     </resultMap>
 
     <sql id="selectIotDeviceVo">
         SELECT d.* ,dt.devtypeName, dc.devclassName,dt.devtypePreview devPic
         FROM IotDevice AS d
-            LEFT JOIN TosDevicetype AS dt ON dt.devtypeBid = d.devtypeBid
-            LEFT JOIN TosDeviceclass AS dc ON dc.devclassBid = d.devclassBid
+        LEFT JOIN TosDevicetype AS dt ON dt.devtypeBid = d.devtypeBid
+        LEFT JOIN TosDeviceclass AS dc ON dc.devclassBid = d.devclassBid
     </sql>
 
     <select id="selectIotDeviceList" parameterType="IotDevice" resultMap="IotDeviceResult">
         <include refid="selectIotDeviceVo"/>
         <where>
             d.tid = #{tid} and d.devDelstatus = '0'
-            <if test="devBid != null  and devBid != ''"> and d.devBid = #{devBid}</if>
-            <if test="devtypeBid != null  and devtypeBid != ''"> and d.devtypeBid = #{devtypeBid}</if>
-            <if test="firmBid != null  and firmBid != ''"> and d.firmBid = #{firmBid}</if>
-            <if test="devclassBid != null  and devclassBid != ''"> and d.devclassBid = #{devclassBid}</if>
-            <if test="devconnBid != null  and devconnBid != ''"> and d.devconnBid = #{devconnBid}</if>
-            <if test="devCode != null  and devCode != ''"> and d.devCode = #{devCode}</if>
-            <if test="devName != null  and devName != ''"> and d.devName like concat('%', #{devName}, '%')</if>
-            <if test="devVersion != null  and devVersion != ''"> and d.devVersion = #{devVersion}</if>
-            <if test="devStatus != null  and devStatus != ''"> and d.devStatus = #{devStatus}</if>
-            <if test="devProvince != null  and devProvince != ''"> and d.devProvince = #{devProvince}</if>
-            <if test="devCity != null  and devCity != ''"> and d.devCity = #{devCity}</if>
-            <if test="devDistrict != null  and devDistrict != ''"> and d.devDistrict = #{devDistrict}</if>
-            <if test="devLng != null "> and d.devLng = #{devLng}</if>
-            <if test="devLat != null "> and d.devLat = #{devLat}</if>
-            <if test="devPositionstatus != null  and devPositionstatus != ''"> and d.devPositionstatus = #{devPositionstatus}</if>
-            <if test="devPositiontype != null  and devPositiontype != ''"> and d.devPositiontype = #{devPositiontype}</if>
-            <if test="devTag != null  and devTag != ''"> and d.devTag = #{devTag}</if>
-            <if test="devRecogtype != null  and devRecogtype != ''"> and d.devRecogtype = #{devRecogtype}</if>
-            <if test="devNetworktype != null  and devNetworktype != ''"> and d.devNetworktype = #{devNetworktype}</if>
-            <if test="devOfflinedate != null  and devOfflinedate != ''"> and d.devOfflinedate = #{devOfflinedate}</if>
-            <if test="devProvincealign != null  and devProvincealign != ''"> and d.devProvincealign = #{devProvincealign}</if>
-            <if test="devCityalign != null  and devCityalign != ''"> and d.devCityalign = #{devCityalign}</if>
-            <if test="devDistrictalign != null  and devDistrictalign != ''"> and d.devDistrictalign = #{devDistrictalign}</if>
-            <if test="devLngalign != null "> and d.devLngalign = #{devLngalign}</if>
-            <if test="devLatalign != null "> and d.devLatalign = #{devLatalign}</if>
-            <if test="devContacts != null  and devContacts != ''"> and d.devContacts = #{devContacts}</if>
-            <if test="devTel != null  and devTel != ''"> and d.devTel = #{devTel}</if>
-            <if test="devCreator != null  and devCreator != ''"> and d.devCreator = #{devCreator}</if>
-            <if test="devModifier != null  and devModifier != ''"> and d.devModifier = #{devModifier}</if>
-            <if test="devUpdateddate != null  and devUpdateddate != ''"> and d.devUpdateddate = #{devUpdateddate}</if>
-            <if test="devModifieddate != null  and devModifieddate != ''"> and d.devModifieddate = #{devModifieddate}</if>
-            <if test="devCreateddate != null  and devCreateddate != ''"> and d.devCreateddate = #{devCreateddate}</if>
-            <if test="devOnlinedate != null  and devOnlinedate != ''"> and d.devOnlinedate = #{devOnlinedate}</if>
-            <if test="devSubtype != null  and devSubtype != ''"> and d.devSubtype = #{devSubtype}</if>
-            <if test="devOriginalid != null  and devOriginalid != ''"> and d.devOriginalid = #{devOriginalid}</if>
-            <if test="devHostingstatus != null  and devHostingstatus != ''"> and d.devHostingstatus = #{devHostingstatus}</if>
-            <if test="extInfo != null  and extInfo != ''"> and d.extInfo = #{extInfo}</if>
+            <if test="devBid != null  and devBid != ''">and d.devBid = #{devBid}</if>
+            <if test="devtypeBid != null  and devtypeBid != ''">and d.devtypeBid = #{devtypeBid}</if>
+            <if test="firmBid != null  and firmBid != ''">and d.firmBid = #{firmBid}</if>
+            <if test="devclassBid != null  and devclassBid != ''">and d.devclassBid = #{devclassBid}</if>
+            <if test="devconnBid != null  and devconnBid != ''">and d.devconnBid = #{devconnBid}</if>
+            <if test="devCode != null  and devCode != ''">and d.devCode = #{devCode}</if>
+            <if test="devName != null  and devName != ''">and d.devName like concat('%', #{devName}, '%')</if>
+            <if test="devVersion != null  and devVersion != ''">and d.devVersion = #{devVersion}</if>
+            <if test="devStatus != null  and devStatus != ''">and d.devStatus = #{devStatus}</if>
+            <if test="devProvince != null  and devProvince != ''">and d.devProvince = #{devProvince}</if>
+            <if test="devCity != null  and devCity != ''">and d.devCity = #{devCity}</if>
+            <if test="devDistrict != null  and devDistrict != ''">and d.devDistrict = #{devDistrict}</if>
+            <if test="devLng != null ">and d.devLng = #{devLng}</if>
+            <if test="devLat != null ">and d.devLat = #{devLat}</if>
+            <if test="devPositionstatus != null  and devPositionstatus != ''">and d.devPositionstatus =
+                #{devPositionstatus}
+            </if>
+            <if test="devPositiontype != null  and devPositiontype != ''">and d.devPositiontype = #{devPositiontype}
+            </if>
+            <if test="devTag != null  and devTag != ''">and d.devTag = #{devTag}</if>
+            <if test="devRecogtype != null  and devRecogtype != ''">and d.devRecogtype = #{devRecogtype}</if>
+            <if test="devNetworktype != null  and devNetworktype != ''">and d.devNetworktype = #{devNetworktype}</if>
+            <if test="devOfflinedate != null  and devOfflinedate != ''">and d.devOfflinedate = #{devOfflinedate}</if>
+            <if test="devProvincealign != null  and devProvincealign != ''">and d.devProvincealign =
+                #{devProvincealign}
+            </if>
+            <if test="devCityalign != null  and devCityalign != ''">and d.devCityalign = #{devCityalign}</if>
+            <if test="devDistrictalign != null  and devDistrictalign != ''">and d.devDistrictalign =
+                #{devDistrictalign}
+            </if>
+            <if test="devLngalign != null ">and d.devLngalign = #{devLngalign}</if>
+            <if test="devLatalign != null ">and d.devLatalign = #{devLatalign}</if>
+            <if test="devContacts != null  and devContacts != ''">and d.devContacts = #{devContacts}</if>
+            <if test="devTel != null  and devTel != ''">and d.devTel = #{devTel}</if>
+            <if test="devCreator != null  and devCreator != ''">and d.devCreator = #{devCreator}</if>
+            <if test="devModifier != null  and devModifier != ''">and d.devModifier = #{devModifier}</if>
+            <if test="devUpdateddate != null  and devUpdateddate != ''">and d.devUpdateddate = #{devUpdateddate}</if>
+            <if test="devModifieddate != null  and devModifieddate != ''">and d.devModifieddate = #{devModifieddate}
+            </if>
+            <if test="devCreateddate != null  and devCreateddate != ''">and d.devCreateddate = #{devCreateddate}</if>
+            <if test="devOnlinedate != null  and devOnlinedate != ''">and d.devOnlinedate = #{devOnlinedate}</if>
+            <if test="devSubtype != null  and devSubtype != ''">and d.devSubtype = #{devSubtype}</if>
+            <if test="devOriginalid != null  and devOriginalid != ''">and d.devOriginalid = #{devOriginalid}</if>
+            <if test="devHostingstatus != null  and devHostingstatus != ''">and d.devHostingstatus =
+                #{devHostingstatus}
+            </if>
+            <if test="extInfo != null  and extInfo != ''">and d.extInfo = #{extInfo}</if>
 
         </where>
     </select>
@@ -111,45 +121,57 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="selectIotDeviceVo"/>
         <where>
             d.tid = #{tid} and d.devDelstatus = '0'
-            <if test="devBid != null  and devBid != ''"> and d.devBid = #{devBid}</if>
-            <if test="devtypeBid != null  and devtypeBid != ''"> and d.devtypeBid = #{devtypeBid}</if>
-            <if test="firmBid != null  and firmBid != ''"> and d.firmBid = #{firmBid}</if>
-            <if test="devclassBid != null  and devclassBid != ''"> and d.devclassBid = #{devclassBid}</if>
-            <if test="devconnBid != null  and devconnBid != ''"> and d.devconnBid = #{devconnBid}</if>
-            <if test="devCode != null  and devCode != ''"> and d.devCode = #{devCode}</if>
-            <if test="devName != null  and devName != ''"> and d.devName like concat('%', #{devName}, '%')</if>
-            <if test="devStatus != null  and devStatus != ''"> and d.devStatus = #{devStatus}</if>
-            <if test="devProvince != null  and devProvince != ''"> and d.devProvince = #{devProvince}</if>
-            <if test="devCity != null  and devCity != ''"> and d.devCity = #{devCity}</if>
-            <if test="devDistrict != null  and devDistrict != ''"> and d.devDistrict = #{devDistrict}</if>
-            <if test="devLng != null "> and d.devLng = #{devLng}</if>
-            <if test="devLat != null "> and d.devLat = #{devLat}</if>
-            <if test="devPositionstatus != null  and devPositionstatus != ''"> and d.devPositionstatus = #{devPositionstatus}</if>
-            <if test="devPositiontype != null  and devPositiontype != ''"> and d.devPositiontype = #{devPositiontype}</if>
-            <if test="devTag != null  and devTag != ''"> and d.devTag = #{devTag}</if>
-            <if test="devRecogtype != null  and devRecogtype != ''"> and d.devRecogtype = #{devRecogtype}</if>
-            <if test="devNetworktype != null  and devNetworktype != ''"> and d.devNetworktype = #{devNetworktype}</if>
-            <if test="devOfflinedate != null  and devOfflinedate != ''"> and d.devOfflinedate = #{devOfflinedate}</if>
-            <if test="devProvincealign != null  and devProvincealign != ''"> and d.devProvincealign = #{devProvincealign}</if>
-            <if test="devCityalign != null  and devCityalign != ''"> and d.devCityalign = #{devCityalign}</if>
-            <if test="devDistrictalign != null  and devDistrictalign != ''"> and d.devDistrictalign = #{devDistrictalign}</if>
-            <if test="devLngalign != null "> and d.devLngalign = #{devLngalign}</if>
-            <if test="devLatalign != null "> and d.devLatalign = #{devLatalign}</if>
-            <if test="devContacts != null  and devContacts != ''"> and d.devContacts = #{devContacts}</if>
-            <if test="devTel != null  and devTel != ''"> and d.devTel like concat('%', #{devTel}, '%')</if>
-            <if test="devCreator != null  and devCreator != ''"> and d.devCreator = #{devCreator}</if>
-            <if test="devModifier != null  and devModifier != ''"> and d.devModifier = #{devModifier}</if>
-            <if test="devUpdateddate != null  and devUpdateddate != ''"> and d.devUpdateddate = #{devUpdateddate}</if>
-            <if test="devModifieddate != null  and devModifieddate != ''"> and d.devModifieddate = #{devModifieddate}</if>
-            <if test="devCreateddate != null  and devCreateddate != ''"> and d.devCreateddate = #{devCreateddate}</if>
+            <if test="devBid != null  and devBid != ''">and d.devBid = #{devBid}</if>
+            <if test="devtypeBid != null  and devtypeBid != ''">and d.devtypeBid = #{devtypeBid}</if>
+            <if test="firmBid != null  and firmBid != ''">and d.firmBid = #{firmBid}</if>
+            <if test="devclassBid != null  and devclassBid != ''">and d.devclassBid = #{devclassBid}</if>
+            <if test="devconnBid != null  and devconnBid != ''">and d.devconnBid = #{devconnBid}</if>
+            <if test="devCode != null  and devCode != ''">and d.devCode = #{devCode}</if>
+            <if test="devName != null  and devName != ''">and d.devName like concat('%', #{devName}, '%')</if>
+            <if test="devStatus != null  and devStatus != ''">and d.devStatus = #{devStatus}</if>
+            <if test="devProvince != null  and devProvince != ''">and d.devProvince = #{devProvince}</if>
+            <if test="devCity != null  and devCity != ''">and d.devCity = #{devCity}</if>
+            <if test="devDistrict != null  and devDistrict != ''">and d.devDistrict = #{devDistrict}</if>
+            <if test="devLng != null ">and d.devLng = #{devLng}</if>
+            <if test="devLat != null ">and d.devLat = #{devLat}</if>
+            <if test="devPositionstatus != null  and devPositionstatus != ''">and d.devPositionstatus =
+                #{devPositionstatus}
+            </if>
+            <if test="devPositiontype != null  and devPositiontype != ''">and d.devPositiontype = #{devPositiontype}
+            </if>
+            <if test="devTag != null  and devTag != ''">and d.devTag = #{devTag}</if>
+            <if test="devRecogtype != null  and devRecogtype != ''">and d.devRecogtype = #{devRecogtype}</if>
+            <if test="devNetworktype != null  and devNetworktype != ''">and d.devNetworktype = #{devNetworktype}</if>
+            <if test="devOfflinedate != null  and devOfflinedate != ''">and d.devOfflinedate = #{devOfflinedate}</if>
+            <if test="devProvincealign != null  and devProvincealign != ''">and d.devProvincealign =
+                #{devProvincealign}
+            </if>
+            <if test="devCityalign != null  and devCityalign != ''">and d.devCityalign = #{devCityalign}</if>
+            <if test="devDistrictalign != null  and devDistrictalign != ''">and d.devDistrictalign =
+                #{devDistrictalign}
+            </if>
+            <if test="devLngalign != null ">and d.devLngalign = #{devLngalign}</if>
+            <if test="devLatalign != null ">and d.devLatalign = #{devLatalign}</if>
+            <if test="devContacts != null  and devContacts != ''">and d.devContacts = #{devContacts}</if>
+            <if test="devTel != null  and devTel != ''">and d.devTel like concat('%', #{devTel}, '%')</if>
+            <if test="devCreator != null  and devCreator != ''">and d.devCreator = #{devCreator}</if>
+            <if test="devModifier != null  and devModifier != ''">and d.devModifier = #{devModifier}</if>
+            <if test="devUpdateddate != null  and devUpdateddate != ''">and d.devUpdateddate = #{devUpdateddate}</if>
+            <if test="devModifieddate != null  and devModifieddate != ''">and d.devModifieddate = #{devModifieddate}
+            </if>
+            <if test="devCreateddate != null  and devCreateddate != ''">and d.devCreateddate = #{devCreateddate}</if>
 
-            <if test="devOnlinedate != null  and devOnlinedate != ''"> and d.devOnlinedate = #{devOnlinedate}</if>
-            <if test="devSubtype != null  and devSubtype != ''"> and d.devSubtype = #{devSubtype}</if>
-            <if test="devOriginalid != null  and devOriginalid != ''"> and d.devOriginalid = #{devOriginalid}</if>
-            <if test="devHostingstatus != null  and devHostingstatus != ''"> and d.devHostingstatus = #{devHostingstatus}</if>
-            <if test="extInfo != null  and extInfo != ''"> and d.extInfo = #{extInfo}</if>
-            <if test="devVersion != null  and devVersion != ''"> and d.devVersion = #{devVersion}</if>
-            <if test="devQuery != null and devQuery != ''">and (d.devCode like CONCAT("%",#{devQuery},"%") or d.devName like CONCAT("%",#{devQuery},"%"))</if>
+            <if test="devOnlinedate != null  and devOnlinedate != ''">and d.devOnlinedate = #{devOnlinedate}</if>
+            <if test="devSubtype != null  and devSubtype != ''">and d.devSubtype = #{devSubtype}</if>
+            <if test="devOriginalid != null  and devOriginalid != ''">and d.devOriginalid = #{devOriginalid}</if>
+            <if test="devHostingstatus != null  and devHostingstatus != ''">and d.devHostingstatus =
+                #{devHostingstatus}
+            </if>
+            <if test="extInfo != null  and extInfo != ''">and d.extInfo = #{extInfo}</if>
+            <if test="devVersion != null  and devVersion != ''">and d.devVersion = #{devVersion}</if>
+            <if test="devQuery != null and devQuery != ''">and (d.devCode like CONCAT("%",#{devQuery},"%") or d.devName
+                like CONCAT("%",#{devQuery},"%"))
+            </if>
             <if test="devtypeBidList != null  and devtypeBidList.size() > 0">
                 and d.devtypeBid in
                 <foreach collection="devtypeBidList" item="item" open="(" close=")" separator=",">
@@ -203,7 +225,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="devOriginalid != null">devOriginalid,</if>
             <if test="devHostingstatus != null">devHostingstatus,</if>
             <if test="extInfo != null">extInfo,</if>
-         </trim>
+        </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="devBid != null">#{devBid},</if>
             <if test="tid != null">#{tid},</if>
@@ -245,28 +267,32 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="devOriginalid != null">#{devOriginalid},</if>
             <if test="devHostingstatus != null">#{devHostingstatus},</if>
             <if test="extInfo != null">#{extInfo},</if>
-         </trim>
+        </trim>
     </insert>
 
     <insert id="insertIotDeviceByBatch" parameterType="list" useGeneratedKeys="true" keyProperty="id">
         insert into IotDevice (
-            devBid, tid, devtypeBid, firmBid, devclassBid, devconnBid, devCode, devName, devVersion, devStatus,
-            devProvince, devCity, devDistrict, devLng, devLat, devPositionstatus, devPositiontype, devTag, devRecogtype,
-            devNetworktype, devOfflinedate, devProvincealign, devCityalign, devDistrictalign, devLngalign, devLatalign,
-            devContacts, devTel, devCreator, devModifier, devUpdateddate, devModifieddate, devCreateddate, devDelstatus,
-            devOnlinedate, devSubtype, devOriginalid, devHostingstatus, extInfo
+        devBid, tid, devtypeBid, firmBid, devclassBid, devconnBid, devCode, devName, devVersion, devStatus,
+        devProvince, devCity, devDistrict, devLng, devLat, devPositionstatus, devPositiontype, devTag, devRecogtype,
+        devNetworktype, devOfflinedate, devProvincealign, devCityalign, devDistrictalign, devLngalign, devLatalign,
+        devContacts, devTel, devCreator, devModifier, devUpdateddate, devModifieddate, devCreateddate, devDelstatus,
+        devOnlinedate, devSubtype, devOriginalid, devHostingstatus, extInfo
         )
         values
         <foreach collection="list" item="item" index="index" separator=",">
             (
-                #{item.devBid}, #{item.tid}, #{item.devtypeBid}, #{item.firmBid}, #{item.devclassBid}, #{item.devconnBid},
-                #{item.devCode}, #{item.devName}, #{item.devVersion}, #{item.devStatus}, #{item.devProvince}, #{item.devCity},
-                #{item.devDistrict}, #{item.devLng}, #{item.devLat}, #{item.devPositionstatus}, #{item.devPositiontype},
-                #{item.devTag}, #{item.devRecogtype}, #{item.devNetworktype}, #{item.devOfflinedate}, #{item.devProvincealign},
-                #{item.devCityalign}, #{item.devDistrictalign}, #{item.devLngalign}, #{item.devLatalign}, #{item.devContacts},
-                #{item.devTel}, #{item.devCreator}, #{item.devModifier}, #{item.devUpdateddate}, #{item.devModifieddate},
-                #{item.devCreateddate}, #{item.devDelstatus}, #{item.devOnlinedate}, #{item.devSubtype}, #{item.devOriginalid},
-                #{item.devHostingstatus}, #{item.extInfo}
+            #{item.devBid}, #{item.tid}, #{item.devtypeBid}, #{item.firmBid}, #{item.devclassBid}, #{item.devconnBid},
+            #{item.devCode}, #{item.devName}, #{item.devVersion}, #{item.devStatus}, #{item.devProvince},
+            #{item.devCity},
+            #{item.devDistrict}, #{item.devLng}, #{item.devLat}, #{item.devPositionstatus}, #{item.devPositiontype},
+            #{item.devTag}, #{item.devRecogtype}, #{item.devNetworktype}, #{item.devOfflinedate},
+            #{item.devProvincealign},
+            #{item.devCityalign}, #{item.devDistrictalign}, #{item.devLngalign}, #{item.devLatalign},
+            #{item.devContacts},
+            #{item.devTel}, #{item.devCreator}, #{item.devModifier}, #{item.devUpdateddate}, #{item.devModifieddate},
+            #{item.devCreateddate}, #{item.devDelstatus}, #{item.devOnlinedate}, #{item.devSubtype},
+            #{item.devOriginalid},
+            #{item.devHostingstatus}, #{item.extInfo}
             )
         </foreach>
     </insert>
@@ -316,6 +342,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </trim>
         where devBid = #{devBid}
     </update>
+    <update id="setConnNullByDevBids">
+        update IotDevice set devconnBid = null
+        where
+        devBid in
+        <foreach collection="list" item="item" open="(" separator="," close=")">
+            #{item.devBid}
+        </foreach>
+    </update>
 
     <delete id="deleteIotDeviceByDevBid" parameterType="String">
         update IotDevice set devDelstatus = '1'