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

网关列表,添加编辑删除网关

zhj 2 лет назад
Родитель
Сommit
a371f9ff65

+ 1 - 0
src/main/java/com/welampiot/common/InterfaceResultEnum.java

@@ -181,6 +181,7 @@ public enum InterfaceResultEnum {
     DEV_ADDRESS_UNIQUE_ERROR("0370","设备地址重复","Device address duplication","Повторение адреса оборудования"),
     FILE_DELETE_FAIL("0371","文件删除失败","File deletion failure","Удаление файла не удалось"),
     FILE_NO_EXIST_ERROR("0372","文件不存在","File does not exist","Документов не существует"),
+    NETWORK_DELETE_FAIL("0373","存在灯控使用改网关,无法删除","There is a lamp control to use the gateway, can not be deleted","Управление светом использует переключатели, которые невозможно удалить"),
     ;
     private String code;
     private String msgCn;

+ 176 - 41
src/main/java/com/welampiot/controller/NetworkController.java

@@ -4,8 +4,11 @@ import com.welampiot.common.BaseResult;
 import com.welampiot.common.InterfaceResultEnum;
 import com.welampiot.dto.NetInfoDTO;
 import com.welampiot.dto.NetworkDTO;
+import com.welampiot.dto.UserDTO;
 import com.welampiot.service.NetInfoService;
 import com.welampiot.service.NetworkService;
+import com.welampiot.service.UserService;
+import com.welampiot.utils.ExcelUtil;
 import com.welampiot.utils.ToolUtils;
 import com.welampiot.vo.NetInfoDetailVO;
 import com.welampiot.vo.NetInfoVO;
@@ -17,6 +20,8 @@ import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletRequest;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 
@@ -39,6 +44,8 @@ public class NetworkController {
     private ToolUtils toolUtils;
     @Autowired
     private NetInfoService netInfoService;
+    @Autowired
+    private UserService userService;
 
     /**
      * 网关详情
@@ -58,47 +65,8 @@ public class NetworkController {
         // 协议类型(0 = lorawan, 1 = lora mesh, 2 = rf mesh, 3 = nbIot,
         // 4 = gprs_direct, 5 = zigbee, 6 = LoraWAN, 7 = oneNet, 8 = eMqtt,
         // 9 = LC-6B11-J, 10 = WE-CON-4G20(双路控制), 11 = PLC(有单灯,也有双灯控制器), 12 = 铂胜lora)
-        switch (dto.getProtocolType()) {
-            case 12 :
-                dto.setProtocolTypeStr("铂胜lora");
-                break;
-            case 11 :
-                dto.setProtocolTypeStr("PLC(有单灯,也有双灯控制器)");
-                break;
-            case 10 :
-                dto.setProtocolTypeStr("WE-CON-4G20(双路控制)");
-                break;
-            case 9 :
-                dto.setProtocolTypeStr("LC-6B11-J");
-                break;
-            case 8 :
-                dto.setProtocolTypeStr("eMqtt");
-                break;
-            case 7 :
-                dto.setProtocolTypeStr("oneNet");
-                break;
-            case 6 :
-                dto.setProtocolTypeStr("LoraWAN");
-                break;
-            case 5 :
-                dto.setProtocolTypeStr("zigbee");
-                break;
-            case 4 :
-                dto.setProtocolTypeStr("gprs_direct");
-                break;
-            case 3 :
-                dto.setProtocolTypeStr("nbIot");
-                break;
-            case 2 :
-                dto.setProtocolTypeStr("rf mesh");
-                break;
-            case 1 :
-                dto.setProtocolTypeStr("lora mesh");
-                break;
-            default :
-                dto.setProtocolTypeStr("lorawan");
-                break;
-        }
+        String protocolTypeStr = ToolUtils.getProtocolTypeStr(dto.getProtocolType());
+        dto.setProtocolTypeStr(protocolTypeStr);
         // 频段信息(0 CN470,1 EU863,2 AU915,3 US902,4 AS923)
         if (dto.getFreBandInfo() == 4) {
             dto.setFreBandInfoStr("AS923");
@@ -337,4 +305,171 @@ public class NetworkController {
         networkVO1.setTotal(total);
         return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,networkVO1);
     }
+
+    /**
+     * 网关列表
+     * @param request sectionList,分页,关键字搜索
+     * @return 网关列表
+     */
+    @PostMapping("/getList")
+    private BaseResult<?> getList(HttpServletRequest request) {
+        Integer version = (Integer) toolUtils.getRequestContent(request,"version",1);
+        Integer areaId = (Integer) toolUtils.getRequestContent(request,"areaId",1);
+        Integer sectionId = (Integer) toolUtils.getRequestContent(request,"sectionId",1);
+        Integer download = (Integer) toolUtils.getRequestContent(request,"download",1);
+        String keyword = (String) toolUtils.getRequestContent(request,"keyword",2);
+        int page = request.getParameter("page") == null ? 1 : Integer.parseInt(request.getParameter("page"));
+        int count = request.getParameter("count") == null ? 16 : Integer.parseInt(request.getParameter("count"));
+        NetworkVO networkVO = new NetworkVO();
+        if (download == 0) {
+            networkVO.setPage(count * (page - 1));
+            networkVO.setCount(count);
+        }
+        networkVO.setAreaId(areaId);
+        networkVO.setSectionId(sectionId);
+        networkVO.setKeyword(keyword);
+        networkVO.setVersion(version);
+        networkVO.setSectionList(toolUtils.getSectionList(request));
+        List<NetworkDTO> list = networkService.getNetworkList(networkVO);
+        list.forEach(dto -> dto.setProtocolTypeStr(ToolUtils.getProtocolTypeStr(dto.getProtocolType())));
+        NetworkVO networkVO1 = new NetworkVO();
+        networkVO1.setList(list);
+        if (download == 1) {
+            String title;
+            if (version == 0) {
+                title = "序号,网关名称,SN码,在线状态,协议类型,型号,区域,路段,经度,纬度,路灯数";
+            } else if (version == 1) {
+                title = "Serial Number,Gateway Name,SN Code,Online Status,Protocol Type,Model," +
+                        "Area,Road Section,Longitude,Latitude,Number of Street Lights";
+            } else {
+                title = "Серийный номер,название шлюза,код SN,состояние онлайн,тип протокола,модель," +
+                        "область,участок,долгота,широта,количество уличные фонари";
+            }
+            List<String> titleList = Arrays.asList(title.split(","));
+            List<List<String>> contentList = new ArrayList<>();
+            for (NetworkDTO n : list) {
+                List<String> newString = new ArrayList<>();
+                newString.add(String.valueOf(list.indexOf(n) + 1));
+                newString.add(n.getNetworkName());
+                newString.add(n.getDeviceSn());
+                if (version == 0) {
+                    if (n.getStatus() == 0) {
+                        newString.add("离线");
+                    } else {
+                        newString.add("在线");
+                    }
+                } else if (version == 1) {
+                    if (n.getStatus() == 0) {
+                        newString.add("offline");
+                    } else {
+                        newString.add("online");
+                    }
+                } else {
+                    if (n.getStatus() == 0) {
+                        newString.add("отключ");
+                    } else {
+                        newString.add("Онлайн -");
+                    }
+                }
+                newString.add(n.getProtocolTypeStr());
+                newString.add(n.getModel());
+                newString.add(n.getArea());
+                newString.add(n.getSection());
+                newString.add(n.getLongitude());
+                newString.add(n.getLatitude());
+                newString.add(String.valueOf(n.getLampCount()));
+                contentList.add(newString);
+            }
+            String path = ExcelUtil.outExcel(titleList, contentList);
+            networkVO1.setPath(path);
+        }
+        return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,networkVO1);
+    }
+
+    /**
+     * 添加/编辑网关(单个)
+     * @param vo 网关属性
+     * @return 添加/编辑网关(单个)
+     */
+    @PostMapping("/save")
+    private BaseResult<?> save(NetworkVO vo) {
+        if (vo.getVersion() == null) vo.setVersion(0);
+        Integer version = vo.getVersion();
+        String username = vo.getUsername();
+        if (username == null || username.isEmpty())
+            return toolUtils.response(InterfaceResultEnum.LACK_PARAM_ERROR,version);
+        UserDTO userDTO = userService.queryUserIdByUsername(username);
+        if (userDTO == null) return toolUtils.response(InterfaceResultEnum.PARAM_FAIL,version);
+        String networkName = vo.getNetworkName();
+        if (networkName == null || networkName.trim().isEmpty())
+            return toolUtils.response(InterfaceResultEnum.LACK_DEV_NAME_ERROR,version);
+        String deviceSn = vo.getDeviceSn();
+        if (deviceSn == null || deviceSn.isEmpty())
+            return toolUtils.response(InterfaceResultEnum.LACK_DEV_SN_ERROR,version);
+        Integer protocolType = vo.getProtocolType();
+        if (protocolType == null)
+            return toolUtils.response(InterfaceResultEnum.LACK_PROTOCOL_TYPE_ERROR,version);
+        Integer areaId = vo.getAreaId();
+        if (areaId == null || areaId == 0)
+            return toolUtils.response(InterfaceResultEnum.LACK_AREA_ERROR,version);
+        Integer sectionId = vo.getSectionId();
+        if (sectionId == null || sectionId == 0)
+            return toolUtils.response(InterfaceResultEnum.LACK_SECTION_ERROR,version);
+        NetworkDTO networkDTO = new NetworkDTO();
+        BeanUtils.copyProperties(vo,networkDTO);
+        NetworkDTO dto = new NetworkDTO();
+        dto.setSectionId(sectionId);
+        dto.setNetworkName(networkName);
+        NetworkVO networkVO = new NetworkVO();
+        if (vo.getId() == null || vo.getId() == 0) { // 添加
+            if (networkService.checkNetworkData(dto) > 0)
+                return toolUtils.response(InterfaceResultEnum.DEV_NAME_UNIQUE_ERROR,version);
+            dto = new NetworkDTO();
+            dto.setDeviceSn(deviceSn);
+            if (networkService.checkNetworkData(dto) > 0)
+                return toolUtils.response(InterfaceResultEnum.DEV_SN_UNIQUE_ERROR,version);
+            long l = System.currentTimeMillis();
+            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            String format = simpleDateFormat.format(l);
+            networkDTO.setCreateTime(format);
+            networkDTO.setUserId(userDTO.getId());
+            networkService.addNetworkData(networkDTO);
+            Integer id = networkDTO.getId();
+            networkVO.setId(id);
+        } else { // 编辑
+            dto.setId(vo.getId());
+            if (networkService.checkNetworkData(dto) > 0)
+                return toolUtils.response(InterfaceResultEnum.DEV_NAME_UNIQUE_ERROR,version);
+            dto = new NetworkDTO();
+            dto.setId(vo.getId());
+            dto.setDeviceSn(deviceSn);
+            if (networkService.checkNetworkData(dto) > 0)
+                return toolUtils.response(InterfaceResultEnum.DEV_SN_UNIQUE_ERROR,version);
+            networkService.updateNetworkData(networkDTO);
+            networkVO.setId(vo.getId());
+        }
+        return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,networkVO);
+    }
+
+    /**
+     * 删除网关
+     * @param vo 网关id
+     * @return 删除网关
+     */
+    @PostMapping("/del")
+    private BaseResult<?> del(NetworkVO vo) {
+        if (vo.getVersion() == null) vo.setVersion(0);
+        Integer version = vo.getVersion();
+        String networkId = vo.getNetworkId();
+        if (networkId == null || networkId.isEmpty())
+            return toolUtils.response(InterfaceResultEnum.LACK_PARAM_ERROR,version);
+        String[] split = networkId.split(",");
+        for (String s : split) {
+            Integer id = Integer.valueOf(s);
+            Integer count = networkService.findLampInfoCountByNetworkId(id);
+            if (count > 0) return toolUtils.response(InterfaceResultEnum.NETWORK_DELETE_FAIL,version);
+            networkService.deleteNetworkData(id);
+        }
+        return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version);
+    }
 }

+ 7 - 0
src/main/java/com/welampiot/dao/NetworkDao.java

@@ -2,6 +2,7 @@ package com.welampiot.dao;
 
 import com.welampiot.dto.NetworkDTO;
 import com.welampiot.vo.NetworkVO;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -13,4 +14,10 @@ public interface NetworkDao {
     List<NetworkDTO> getNetworkNavList(NetworkDTO networkDTO);
     List<NetworkDTO> getSimList(NetworkVO vo);
     Integer getSimTotal(NetworkVO vo);
+    List<NetworkDTO> getNetworkList(NetworkVO vo);
+    void addNetworkData(NetworkDTO dto);
+    void updateNetworkData(NetworkDTO dto);
+    Integer checkNetworkData(NetworkDTO dto);
+    Integer findLampInfoCountByNetworkId(@Param("networkId") Integer networkId);
+    void deleteNetworkData(@Param("id") Integer id);
 }

+ 1 - 0
src/main/java/com/welampiot/dto/NetworkDTO.java

@@ -24,6 +24,7 @@ public class NetworkDTO {
     private Integer freBandInfo; // 频段信息
     private String freBandInfoStr;
     private String simCard;
+    private String regPack; // 注册包
     private String model;
     private String operator;
     private Integer status;

+ 6 - 0
src/main/java/com/welampiot/service/NetworkService.java

@@ -13,4 +13,10 @@ public interface NetworkService {
     List<NetworkDTO> getNetworkNavList(NetworkDTO networkDTO);
     List<NetworkDTO> getSimList(NetworkVO vo);
     Integer getSimTotal(NetworkVO vo);
+    List<NetworkDTO> getNetworkList(NetworkVO vo);
+    void addNetworkData(NetworkDTO dto);
+    void updateNetworkData(NetworkDTO dto);
+    Integer checkNetworkData(NetworkDTO dto);
+    Integer findLampInfoCountByNetworkId(Integer networkId);
+    void deleteNetworkData(Integer id);
 }

+ 30 - 0
src/main/java/com/welampiot/service/impl/NetworkServiceImpl.java

@@ -123,4 +123,34 @@ public class NetworkServiceImpl implements NetworkService {
     public Integer getSimTotal(NetworkVO vo) {
         return networkDao.getSimTotal(vo);
     }
+
+    @Override
+    public List<NetworkDTO> getNetworkList(NetworkVO vo) {
+        return networkDao.getNetworkList(vo);
+    }
+
+    @Override
+    public void addNetworkData(NetworkDTO dto) {
+        networkDao.addNetworkData(dto);
+    }
+
+    @Override
+    public void updateNetworkData(NetworkDTO dto) {
+        networkDao.updateNetworkData(dto);
+    }
+
+    @Override
+    public Integer checkNetworkData(NetworkDTO dto) {
+        return networkDao.checkNetworkData(dto);
+    }
+
+    @Override
+    public Integer findLampInfoCountByNetworkId(Integer networkId) {
+        return networkDao.findLampInfoCountByNetworkId(networkId);
+    }
+
+    @Override
+    public void deleteNetworkData(Integer id) {
+        networkDao.deleteNetworkData(id);
+    }
 }

+ 51 - 0
src/main/java/com/welampiot/utils/ToolUtils.java

@@ -844,4 +844,55 @@ public class ToolUtils {
         }
         return value;
     }
+
+    /**
+     * 获取协议类型字符串
+     * @param protocolType 协议类型
+     * @return 协议类型字符串
+     */
+    public static String getProtocolTypeStr(Integer protocolType) {
+        String protocolTypeStr;
+        switch (protocolType) {
+            case 12 :
+                protocolTypeStr = ("铂胜lora");
+                break;
+            case 11 :
+                protocolTypeStr = ("PLC(有单灯,也有双灯控制器)");
+                break;
+            case 10 :
+                protocolTypeStr = ("WE-CON-4G20(双路控制)");
+                break;
+            case 9 :
+                protocolTypeStr = ("LC-6B11-J");
+                break;
+            case 8 :
+                protocolTypeStr = ("eMqtt");
+                break;
+            case 7 :
+                protocolTypeStr = ("oneNet");
+                break;
+            case 6 :
+                protocolTypeStr = ("LoraWAN");
+                break;
+            case 5 :
+                protocolTypeStr = ("zigbee");
+                break;
+            case 4 :
+                protocolTypeStr = ("gprs_direct");
+                break;
+            case 3 :
+                protocolTypeStr = ("nbIot");
+                break;
+            case 2 :
+                protocolTypeStr = ("rf mesh");
+                break;
+            case 1 :
+                protocolTypeStr = ("lora mesh");
+                break;
+            default :
+                protocolTypeStr = ("lorawan");
+                break;
+        }
+        return protocolTypeStr;
+    }
 }

+ 6 - 0
src/main/java/com/welampiot/vo/NetworkVO.java

@@ -17,6 +17,10 @@ import java.util.List;
 @Data
 public class NetworkVO {
     private Integer id;
+    private String networkId;
+    private String regPack;
+    private Integer loopCount;
+    private String username;
     private String networkName;
     private String deviceSn;
     private Integer protocolType; // 协议类型
@@ -36,6 +40,8 @@ public class NetworkVO {
     private Integer page;
     private Integer count;
     private Integer version;
+    private String keyword;
+    private String path;
     private Integer expirationStatus;
     private List<String> sectionList;
     private Integer total;

+ 150 - 0
src/main/resources/mapper/NetworkMapper.xml

@@ -179,4 +179,154 @@
         </if>
     </select>
     
+    <select id="getNetworkList" resultType="NetworkDTO">
+        select n.id,n.devicesn as deviceSn,n.status,n.protocoltype as protocolType,n.network_name as networkName,
+               n.model,n.lampcount as lampCount,n.longitude,n.latitude,s.name as section
+               <choose>
+                   <when test="version == 0">
+                       ,gl.chinese_name as area
+                   </when>
+                   <when test="version == 1">
+                       ,gl.english_name as area
+                   </when>
+                   <otherwise>
+                       ,gl.ru_name as area
+                   </otherwise>
+               </choose>
+        from network n
+        left join section s on s.id = n.sectionid
+        left join global_location gl on s.pid = gl.id
+        where 1=1
+        <if test="areaId != null and areaId != 0">
+            and n.areaid = #{areaId}
+        </if>
+        <if test="sectionId != null and sectionId != 0">
+            and n.sectionid = #{sectionId}
+        </if>
+        <if test="keyword != null and keyword != ''">
+            and (n.network_name like '%${keyword}%' or n.devicesn like '%${keyword}%')
+        </if>
+        <if test="sectionList != null and !sectionList.isEmpty()">
+            and n.sectionid in
+            <foreach collection="sectionList" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="page >= 0 and count > 0">
+            limit #{page},#{count}
+        </if>
+    </select>
+
+    <insert id="addNetworkData" parameterType="NetworkDTO" useGeneratedKeys="true" keyProperty="id">
+        insert into network(network_name,devicesn,protocoltype,areaid,sectionid,
+                            <if test="regPack != null and regPack != ''">
+                                regpack,
+                            </if>
+                            <if test="loopCount != null">
+                                loopcount,
+                            </if>
+                            <if test="longitude != null and longitude != ''">
+                                longitude,
+                            </if>
+                            <if test="latitude != null and latitude != ''">
+                                latitude,
+                            </if>
+                            <if test="freBandInfo != null">
+                                fre_band_info,
+                            </if>
+                            <if test="simCard != null and simiCard != ''">
+                                simcard,
+                            </if>
+                            <if test="operator != null and operator != ''">
+                                operator,
+                            </if>
+                            createtime,
+                            userId)
+        values (#{networkName},#{deviceSn},#{protocolType},#{areaId},#{sectionId},
+                <if test="regPack != null and regPack != ''">
+                    #{regPack},
+                </if>
+                <if test="loopCount != null">
+                    #{loopCount},
+                </if>
+                <if test="longitude != null and longitude != ''">
+                    #{longitdue},
+                </if>
+                <if test="latitude != null and latitude != ''">
+                    #{latitude},
+                </if>
+                <if test="freBandInfo != null">
+                    #{freBandInfo},
+                </if>
+                <if test="simCard != null and simiCard != ''">
+                    #{simCard},
+                </if>
+                <if test="operator != null and operator != ''">
+                    #{operator},
+                </if>
+                #{createTime},#{userId})
+    </insert>
+
+    <update id="updateNetworkData" parameterType="NetworkDTO">
+        update network n
+        set
+            n.devicesn = #{deviceSn},
+            n.network_name = #{networkName},
+            n.protocoltype = #{protocolType},
+            <if test="regPack != null and regPack != ''">
+                n.regpack = #{regPack},
+            </if>
+            <if test="loopCount != null">
+                n.loopcount = #{loopCount},
+            </if>
+            <if test="longitude != null and longitude != ''">
+                n.longitude = #{longitude},
+            </if>
+            <if test="latitude != null and latitude != ''">
+                n.latitude = #{latitude},
+            </if>
+            <if test="freBandInfo != null and freBandInfo != ''">
+                n.fre_band_info = #{freBandInfo},
+            </if>
+            <if test="simCard != null and simCard != ''">
+                n.simcard = #{simCard},
+            </if>
+            <if test="operator != null and operator != ''">
+                n.operator = #{operator},
+            </if>
+            n.areaid = #{areaId},
+            n.sectionid = #{sectionId}
+        where n.id = #{id}
+    </update>
+
+    <select id="checkNetworkData" resultType="Integer">
+        select count(*)
+        from network n
+        where 1=1
+        <if test="sectionId != null and sectionId != 0">
+            and n.sectionid = #{sectionId}
+        </if>
+        <if test="networkName != null and networkName != ''">
+            and n.network_name = #{networkName}
+        </if>
+        <if test="deviceSn != null and deviceSn != ''">
+            and n.devicesn = #{deviceSn}
+        </if>
+        <if test="id != null and id != 0">
+            and n.id != #{id}
+        </if>
+    </select>
+
+    <select id="findLampInfoCountByNetworkId" resultType="Integer">
+        select count(*)
+        from lampinfo l
+        where l.networkid = #{networkId}
+    </select>
+
+    <delete id="deleteNetworkData">
+        delete
+        from network
+        where id = #{id};
+    </delete>
+    
 </mapper>