package com.welampiot.controller; 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; import com.welampiot.vo.NetworkVO; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; /** * ClassName: NetworkController * Package: com.welampiot.controller * Description: * * @Author: zhj_Start * @Create: 2023/7/25 - 15:22 * @Version: v1.0 */ @RestController @CrossOrigin @RequestMapping("/network") public class NetworkController { @Autowired private NetworkService networkService; @Autowired private ToolUtils toolUtils; @Autowired private NetInfoService netInfoService; @Autowired private UserService userService; /** * 网关详情 * @param request sectionList、网关id * @return 网关详情 */ @RequestMapping(value = "/details", method = RequestMethod.POST) public BaseResult details(HttpServletRequest request) { Integer version = (Integer) toolUtils.getRequestContent(request,"version",1); Integer networkId = (Integer) toolUtils.getRequestContent(request,"networkId",1); if (networkId == 0) return toolUtils.response(InterfaceResultEnum.LACK_PARAM_ERROR,version); NetworkDTO networkDTO = new NetworkDTO(); networkDTO.setVersion(version); networkDTO.setId(networkId); NetworkDTO dto = networkService.getNetworkDetails(networkDTO); if (dto == null) return toolUtils.response(InterfaceResultEnum.PARAM_FAIL,version); // 协议类型(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) 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"); } else if (dto.getFreBandInfo() == 3) { dto.setFreBandInfoStr("US902"); } else if (dto.getFreBandInfo() == 2) { dto.setFreBandInfoStr("AU915"); } else if (dto.getFreBandInfo() == 1) { dto.setFreBandInfoStr("EU863"); } else { dto.setFreBandInfoStr("CN470"); } if (dto.getArea() == null) { dto.setArea(""); } if (dto.getSection() == null) { dto.setSection(""); } NetworkVO networkVO = new NetworkVO(); BeanUtils.copyProperties(dto,networkVO); return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,networkVO); } /** * 网关下拉列表 * @param request sectionList * @return 网关下拉列表 */ @PostMapping("/nav") private BaseResult nav(HttpServletRequest request){ Integer version = (Integer) toolUtils.getRequestContent(request,"version",1); NetworkDTO dto = new NetworkDTO(); dto.setSectionList(toolUtils.getSectionList(request)); List networkNavList = networkService.getNetworkNavList(dto); NetworkVO networkVO = new NetworkVO(); networkVO.setList(networkNavList); return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,networkVO); } /** * 网关列表 * @param request sectionList,分页,关键字搜索 * @return 网关列表 */ @PostMapping("/netInfoList") private BaseResult netInfoList(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); 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")); NetInfoVO netInfoVO = new NetInfoVO(); netInfoVO.setPage(count * (page - 1)); netInfoVO.setCount(count); netInfoVO.setAreaId(areaId); netInfoVO.setSectionId(sectionId); netInfoVO.setKeyword(keyword); netInfoVO.setSectionList(toolUtils.getSectionList(request)); List netInfoList = netInfoService.getNetInfoListByNetInfoVO(netInfoVO); Integer netInfoTotal = netInfoService.getNetInfoTotal(netInfoVO); double ceil = Math.ceil((double) netInfoTotal / count); NetInfoVO netInfoVO1 = new NetInfoVO(); netInfoVO1.setList(netInfoList); netInfoVO1.setTotal((int) ceil); return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,netInfoVO1); } /** * 网关统计信息 * @param request sectionList * @return 网关统计信息 */ @PostMapping("/netInfoData") private BaseResult netInfoData(HttpServletRequest request){ Integer version = (Integer) toolUtils.getRequestContent(request,"version",1); NetInfoVO netInfoVO = new NetInfoVO(); netInfoVO.setSectionList(toolUtils.getSectionList(request)); Integer total = netInfoService.getNetInfoTotal(netInfoVO); Integer onlineTotal = netInfoService.getNetInfoOnlineTotal(netInfoVO); Integer welTotal = netInfoService.getNetInfoWelTotal(netInfoVO); Integer solarTotal = netInfoService.getNetInfoSolarTotal(netInfoVO); Integer ethTotal = netInfoService.getNetInfoETHTotal(netInfoVO); Integer fourTotal = netInfoService.getNetInfo4GTotal(netInfoVO); Integer failTotal = netInfoService.getNetInfoFailTotal(netInfoVO); NetInfoVO netInfoVO1 = new NetInfoVO(); netInfoVO1.setTotal(total); netInfoVO1.setOnlineCount(onlineTotal); netInfoVO1.setWelCount(welTotal); netInfoVO1.setSolarCount(solarTotal); netInfoVO1.setEthCount(ethTotal); netInfoVO1.setFourGCount(fourTotal); netInfoVO1.setFailCount(failTotal); return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,netInfoVO1); } /** * 网关详情 * @param request 网关id * @return 网关详情 */ @PostMapping("/netInfo") private BaseResult netInfo(HttpServletRequest request){ Integer version = (Integer) toolUtils.getRequestContent(request,"version",1); Integer netId = (Integer) toolUtils.getRequestContent(request,"netId",1); if (netId == 0) return toolUtils.response(InterfaceResultEnum.LACK_PARAM_ERROR,version); NetInfoDTO netInfoDTO = netInfoService.getNetInfoDetailsByNetId(netId); NetInfoDetailVO netInfoDetailVO = new NetInfoDetailVO(); if (netInfoDTO == null) return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,netInfoDetailVO); BeanUtils.copyProperties(netInfoDTO,netInfoDetailVO); return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,netInfoDetailVO); } /** * 添加网关 * @param request 网关属性 * @return 添加网关 */ @PostMapping("/addNet") private BaseResult addNet(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); String netId = (String) toolUtils.getRequestContent(request,"netId",2); String netName = (String) toolUtils.getRequestContent(request,"netName",2); if (sectionId == 0) return toolUtils.response(InterfaceResultEnum.LACK_SECTION_ERROR,version); if (areaId == 0) return toolUtils.response(InterfaceResultEnum.LACK_AREA_ERROR,version); if (netId.length() == 0 || netName.length() == 0) return toolUtils.response(InterfaceResultEnum.LACK_NEED_PARAM,version); NetInfoDTO netInfoDTO = new NetInfoDTO(); netInfoDTO.setNetId(netId); netInfoDTO.setSectionId(sectionId); if (netInfoService.checkNetInfoData(netInfoDTO) > 0) return toolUtils.response(InterfaceResultEnum.NET_ID_UNIQUE_ERROR,version); netInfoDTO = new NetInfoDTO(); netInfoDTO.setSectionId(sectionId); netInfoDTO.setNetName(netName); if (netInfoService.checkNetInfoData(netInfoDTO) > 0) return toolUtils.response(InterfaceResultEnum.NET_NAME_UNIQUE_ERROR,version); netInfoDTO.setAreaId(areaId); netInfoDTO.setNetId(netId); long l = System.currentTimeMillis(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String format = simpleDateFormat.format(l); netInfoDTO.setUpdateTime(format); netInfoService.addNetInfoData(netInfoDTO); return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version); } /** * 修改网关信息 * @param request 网关属性 * @return 修改网关信息 */ @PostMapping("/updateNetInfo") private BaseResult updateNetInfo(HttpServletRequest request){ Integer version = (Integer) toolUtils.getRequestContent(request,"version",1); Integer id = (Integer) toolUtils.getRequestContent(request,"id",1); Integer areaId = (Integer) toolUtils.getRequestContent(request,"areaId",1); Integer sectionId = (Integer) toolUtils.getRequestContent(request,"sectionId",1); String netId = (String) toolUtils.getRequestContent(request,"netId",2); String netName = (String) toolUtils.getRequestContent(request,"netName",2); if (id == 0) return toolUtils.response(InterfaceResultEnum.LACK_PARAM_ERROR,version); if (sectionId == 0) return toolUtils.response(InterfaceResultEnum.LACK_SECTION_ERROR,version); if (areaId == 0) return toolUtils.response(InterfaceResultEnum.LACK_AREA_ERROR,version); if (netId.length() == 0 || netName.length() == 0) return toolUtils.response(InterfaceResultEnum.LACK_NEED_PARAM,version); NetInfoDTO netInfoDTO = new NetInfoDTO(); netInfoDTO.setId(id); netInfoDTO.setNetId(netId); netInfoDTO.setSectionId(sectionId); if (netInfoService.checkNetInfoData(netInfoDTO) > 0) return toolUtils.response(InterfaceResultEnum.NET_ID_UNIQUE_ERROR,version); netInfoDTO = new NetInfoDTO(); netInfoDTO.setId(id); netInfoDTO.setSectionId(sectionId); netInfoDTO.setNetName(netName); if (netInfoService.checkNetInfoData(netInfoDTO) > 0) return toolUtils.response(InterfaceResultEnum.NET_NAME_UNIQUE_ERROR,version); netInfoDTO.setAreaId(areaId); netInfoDTO.setNetId(netId); long l = System.currentTimeMillis(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String format = simpleDateFormat.format(l); netInfoDTO.setUpdateTime(format); netInfoService.updateNetInfoData(netInfoDTO); return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version); } /** * sim列表信息 * @param request sectionList,分页 * @return sim列表信息 */ @PostMapping("/simList") private BaseResult simList(HttpServletRequest request) throws ParseException { Integer version = (Integer) toolUtils.getRequestContent(request,"version",1); Integer page = (Integer) toolUtils.getRequestContent(request,"page",1); Integer count = (Integer) toolUtils.getRequestContent(request,"count",1); Integer areaId = (Integer) toolUtils.getRequestContent(request,"areaId",1); Integer sectionId = (Integer) toolUtils.getRequestContent(request,"sectionId",1); Integer expirationStatus = (Integer) toolUtils.getRequestContent(request,"expirationStatus",1); if (page == 0) page = 1; if (count == 0) count = 16; NetworkVO networkVO = new NetworkVO(); networkVO.setPage(count * (page - 1)); networkVO.setCount(count); networkVO.setAreaId(areaId); networkVO.setSectionId(sectionId); networkVO.setExpirationStatus(expirationStatus); networkVO.setVersion(version); networkVO.setSectionList(toolUtils.getSectionList(request)); List simList = networkService.getSimList(networkVO); for (NetworkDTO dto : simList) { if (dto.getExpirationTime() != null && !dto.getExpirationTime().isEmpty()) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = simpleDateFormat.parse(dto.getExpirationTime()); long time = date.getTime(); // 过期时间戳 long currentTimeMillis = System.currentTimeMillis(); // 当前时间戳 if (currentTimeMillis > time) { // 已过期 dto.setExpirationStatus(3); } else { long l = time - currentTimeMillis; if (l > 30 * 24 * 3600 * 1000L) { // 正常 dto.setExpirationStatus(1); } else { // 快过期(大于当前时间30天以内) dto.setExpirationStatus(2); } } } } Integer total = networkService.getSimTotal(networkVO); NetworkVO networkVO1 = new NetworkVO(); networkVO1.setList(simList); 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 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 titleList = Arrays.asList(title.split(",")); List> contentList = new ArrayList<>(); for (NetworkDTO n : list) { List 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); } /** * 批量导入流量到期信息 * @param networkVO 网络 * @return 导入流量到期信息 */ @PostMapping("/simBatchInput") private BaseResult simBatchInput(NetworkVO networkVO) { int version = networkVO.getVersion() == null ? 0 : networkVO.getVersion(); Integer type = networkVO.getType(); if (type == null) return toolUtils.response(InterfaceResultEnum.LACK_PARAM_ERROR,version); MultipartFile file = networkVO.getFile(); if (type == 1) { // 验证 if (file.isEmpty()) return toolUtils.response(InterfaceResultEnum.LACK_PARAM_ERROR,version); List maps = ExcelUtil.inExcel(file); List msg = new ArrayList<>(); List simData = new ArrayList<>(); if (maps.size() > 0) { for (Map m : maps) { NetworkDTO networkDTO = new NetworkDTO(); String iccId = m.get(0).toString(); String date = m.get(1).toString(); networkDTO.setIccId(iccId); networkDTO.setDate(date); simData.add(networkDTO); if (networkService.checkSimIdCount(iccId) == 0) { if (version == 0) { msg.add("设备不存在"); } else if (version == 1) { msg.add("Device does not exist"); } else { msg.add("Оборудования не существует"); } } } } NetworkVO networkVO1 = new NetworkVO(); networkVO1.setMsg(msg); networkVO1.setSimData(simData); return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,networkVO1); } else { // 创建 List simData = networkVO.getSimData(); for (NetworkDTO n : simData) { String date = n.getDate(); String iccId = n.getIccId(); NetworkDTO networkDTO = new NetworkDTO(); networkDTO.setExpirationTime(date); networkDTO.setSimId(iccId); networkService.updateSimDate(networkDTO); } } return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version); } }