From ed81859f2c330135c4dd8367be3ade3bf16b0704 Mon Sep 17 00:00:00 2001 From: yj <913944315@qq.com> Date: Tue, 6 Feb 2024 10:02:51 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=83=A8=E7=BD=B2=E5=86=85?= =?UTF-8?q?=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/common/LocalDateConverter.java | 42 --- .../config/common/LocalDateTimeConverter.java | 41 --- .../device_car/config/common/RESTClient.java | 281 ------------------ .../xr/device_car/config/udp/UdbConfig.java | 33 -- .../config/udp/UdpClientConfig.java | 68 ----- .../config/utils/EasyExcelUtil.java | 139 --------- .../xr/device_car/config/utils/HkComUtil.java | 52 ---- .../config/utils/HttpResponseBean.java | 55 ---- .../xr/device_car/config/utils/MinioUtil.java | 72 ----- .../device_car/config/utils/OnvifUtils.java | 141 --------- .../config/utils/PythonExecutor.java | 231 -------------- .../MeterInitializationController.java | 177 ----------- .../controller/SendUdpLogController.java | 3 - .../modules/analysis/entity/SendUdpLog.java | 2 - .../main/resources/digest/AbsoluteMove.wsdl | 12 - .../digest/GetDeviceInformation.wsdl | 6 - .../src/main/resources/digest/GetPTZ.wsdl | 6 - .../src/main/resources/digest/GetPresets.wsdl | 8 - .../main/resources/digest/GetProfiles.wsdl | 6 - .../main/resources/digest/GetSnapshotUrl.wsdl | 8 - .../src/main/resources/digest/GetStatus.wsdl | 8 - .../main/resources/digest/GetStreamUri.wsdl | 25 -- .../src/main/resources/digest/GotoPreset.wsdl | 9 - .../common/config/HttpResponseBean.java | 55 ---- .../common/utils/AnalysisXml.java | 150 ---------- .../common/utils/OnvifUtils.java | 152 ---------- .../common/utils/RESTClient.java | 281 ------------------ .../main/resources/digest/AbsoluteMove.wsdl | 12 - .../digest/GetDeviceInformation.wsdl | 6 - .../src/main/resources/digest/GetPTZ.wsdl | 6 - .../src/main/resources/digest/GetPresets.wsdl | 8 - .../main/resources/digest/GetProfiles.wsdl | 6 - .../main/resources/digest/GetSnapshotUrl.wsdl | 8 - .../src/main/resources/digest/GetStatus.wsdl | 8 - .../main/resources/digest/GetStreamUri.wsdl | 25 -- .../src/main/resources/digest/GotoPreset.wsdl | 9 - 36 files changed, 2151 deletions(-) delete mode 100644 device_cars/src/main/java/com/xr/device_car/config/common/LocalDateConverter.java delete mode 100644 device_cars/src/main/java/com/xr/device_car/config/common/LocalDateTimeConverter.java delete mode 100644 device_cars/src/main/java/com/xr/device_car/config/common/RESTClient.java delete mode 100644 device_cars/src/main/java/com/xr/device_car/config/udp/UdbConfig.java delete mode 100644 device_cars/src/main/java/com/xr/device_car/config/udp/UdpClientConfig.java delete mode 100644 device_cars/src/main/java/com/xr/device_car/config/utils/EasyExcelUtil.java delete mode 100644 device_cars/src/main/java/com/xr/device_car/config/utils/HkComUtil.java delete mode 100644 device_cars/src/main/java/com/xr/device_car/config/utils/HttpResponseBean.java delete mode 100644 device_cars/src/main/java/com/xr/device_car/config/utils/MinioUtil.java delete mode 100644 device_cars/src/main/java/com/xr/device_car/config/utils/OnvifUtils.java delete mode 100644 device_cars/src/main/java/com/xr/device_car/config/utils/PythonExecutor.java delete mode 100644 device_cars/src/main/java/com/xr/device_car/modules/analysis/controller/MeterInitializationController.java delete mode 100644 device_cars/src/main/resources/digest/AbsoluteMove.wsdl delete mode 100644 device_cars/src/main/resources/digest/GetDeviceInformation.wsdl delete mode 100644 device_cars/src/main/resources/digest/GetPTZ.wsdl delete mode 100644 device_cars/src/main/resources/digest/GetPresets.wsdl delete mode 100644 device_cars/src/main/resources/digest/GetProfiles.wsdl delete mode 100644 device_cars/src/main/resources/digest/GetSnapshotUrl.wsdl delete mode 100644 device_cars/src/main/resources/digest/GetStatus.wsdl delete mode 100644 device_cars/src/main/resources/digest/GetStreamUri.wsdl delete mode 100644 device_cars/src/main/resources/digest/GotoPreset.wsdl delete mode 100644 device_udpclent/src/main/java/com/xr/device_udpclent/common/config/HttpResponseBean.java delete mode 100644 device_udpclent/src/main/java/com/xr/device_udpclent/common/utils/AnalysisXml.java delete mode 100644 device_udpclent/src/main/java/com/xr/device_udpclent/common/utils/OnvifUtils.java delete mode 100644 device_udpclent/src/main/java/com/xr/device_udpclent/common/utils/RESTClient.java delete mode 100644 device_udpclent/src/main/resources/digest/AbsoluteMove.wsdl delete mode 100644 device_udpclent/src/main/resources/digest/GetDeviceInformation.wsdl delete mode 100644 device_udpclent/src/main/resources/digest/GetPTZ.wsdl delete mode 100644 device_udpclent/src/main/resources/digest/GetPresets.wsdl delete mode 100644 device_udpclent/src/main/resources/digest/GetProfiles.wsdl delete mode 100644 device_udpclent/src/main/resources/digest/GetSnapshotUrl.wsdl delete mode 100644 device_udpclent/src/main/resources/digest/GetStatus.wsdl delete mode 100644 device_udpclent/src/main/resources/digest/GetStreamUri.wsdl delete mode 100644 device_udpclent/src/main/resources/digest/GotoPreset.wsdl diff --git a/device_cars/src/main/java/com/xr/device_car/config/common/LocalDateConverter.java b/device_cars/src/main/java/com/xr/device_car/config/common/LocalDateConverter.java deleted file mode 100644 index 5d45c3f..0000000 --- a/device_cars/src/main/java/com/xr/device_car/config/common/LocalDateConverter.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.xr.device_car.config.common; - -import com.alibaba.excel.converters.Converter; -import com.alibaba.excel.enums.CellDataTypeEnum; -import com.alibaba.excel.metadata.GlobalConfiguration; -import com.alibaba.excel.metadata.data.ReadCellData; -import com.alibaba.excel.metadata.data.WriteCellData; -import com.alibaba.excel.metadata.property.ExcelContentProperty; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; - -/** - * @Author: ChenTaoTao - * @Date: 2022/3/28 10:07 - * @Describe: - */ -public class LocalDateConverter implements Converter { - - @Override - public Class supportJavaTypeKey() { - return LocalDate.class; - } - - @Override - public CellDataTypeEnum supportExcelTypeKey() { - return CellDataTypeEnum.STRING; - } - - - @Override - public LocalDate convertToJavaData(ReadCellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { - return LocalDate.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd")); - } - - @Override - public WriteCellData convertToExcelData(LocalDate value, ExcelContentProperty contentProperty, - GlobalConfiguration globalConfiguration) { - return new WriteCellData<>(value.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); - } - -} diff --git a/device_cars/src/main/java/com/xr/device_car/config/common/LocalDateTimeConverter.java b/device_cars/src/main/java/com/xr/device_car/config/common/LocalDateTimeConverter.java deleted file mode 100644 index 72e555f..0000000 --- a/device_cars/src/main/java/com/xr/device_car/config/common/LocalDateTimeConverter.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.xr.device_car.config.common; - -import com.alibaba.excel.converters.Converter; -import com.alibaba.excel.enums.CellDataTypeEnum; -import com.alibaba.excel.metadata.GlobalConfiguration; -import com.alibaba.excel.metadata.data.ReadCellData; -import com.alibaba.excel.metadata.data.WriteCellData; -import com.alibaba.excel.metadata.property.ExcelContentProperty; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -/** - * @Author: ChenTaoTao - * @Date: 2022/3/28 10:07 - * @Describe: - */ -public class LocalDateTimeConverter implements Converter { - @Override - public Class supportJavaTypeKey() { - return LocalDateTime.class; - } - - @Override - public CellDataTypeEnum supportExcelTypeKey() { - return CellDataTypeEnum.STRING; - } - - - @Override - public LocalDateTime convertToJavaData(ReadCellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { - return LocalDateTime.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); - } - - @Override - public WriteCellData convertToExcelData(LocalDateTime value, ExcelContentProperty contentProperty, - GlobalConfiguration globalConfiguration) { - return new WriteCellData<>(value.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); - } - -} diff --git a/device_cars/src/main/java/com/xr/device_car/config/common/RESTClient.java b/device_cars/src/main/java/com/xr/device_car/config/common/RESTClient.java deleted file mode 100644 index e57e74e..0000000 --- a/device_cars/src/main/java/com/xr/device_car/config/common/RESTClient.java +++ /dev/null @@ -1,281 +0,0 @@ -package com.xr.device_car.config.common; - -import com.xr.device_car.config.utils.HttpResponseBean; -import org.apache.http.*; -import org.apache.http.client.HttpRequestRetryHandler; -import org.apache.http.client.config.CookieSpecs; -import org.apache.http.client.config.RequestConfig; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.client.protocol.HttpClientContext; -import org.apache.http.conn.ssl.NoopHostnameVerifier; -import org.apache.http.conn.ssl.SSLConnectionSocketFactory; -import org.apache.http.entity.ContentType; -import org.apache.http.entity.StringEntity; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; -import org.apache.http.protocol.HttpContext; -import org.apache.http.ssl.SSLContextBuilder; -import org.apache.http.util.EntityUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.util.StringUtils; - -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLHandshakeException; -import java.io.IOException; -import java.net.ConnectException; -import java.util.Arrays; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - - -/** - * Http请求客户端 - * @author ChenYongHeng - * @since 2019/5/27 - */ -public class RESTClient { - - - private static Logger log = LoggerFactory.getLogger(RESTClient.class); - - - - private volatile static RESTClient HttpClientConnectionPool; - - private static final String USERAGENT = "SZ-JAVA"; - private static final String CHARSET = "UTF-8"; - - private static final int MAX_TOTAL_CONNECTIONS = 200; - private static final int MAX_ROUTE_CONNECTIONS = 100; - - - /** - * 连接时间 - */ - private static final int CONNECT_TIMEOUT = 5000; - /** - * 获取内容时间 - */ - private static final int SOCKET_TIMEOUT = 30000; - - private static PoolingHttpClientConnectionManager cm = null; - - - private static CloseableHttpClient HTTP_CLIENTS; - - /** - * 初始化连接池 - */ - static{ - try { - cm = new PoolingHttpClientConnectionManager(); - cm.setMaxTotal(MAX_TOTAL_CONNECTIONS); - // 默认设置为2 - cm.setDefaultMaxPerRoute(MAX_ROUTE_CONNECTIONS); - // 客户端请求的默认设置 - RequestConfig defaultRequestConfig = RequestConfig.custom() - .setSocketTimeout(SOCKET_TIMEOUT) - .setConnectTimeout(CONNECT_TIMEOUT) - .setConnectionRequestTimeout(CONNECT_TIMEOUT) - .setRedirectsEnabled(false) - .setCookieSpec(CookieSpecs.STANDARD_STRICT) - .build(); - - // 请求重试处理 - HttpRequestRetryHandler httpRequestRetryHandler = new HttpRequestRetryHandler() { - @Override - public boolean retryRequest(IOException exception, - int executionCount, HttpContext context) { - // 如果超过最大重试次数,那么就不要继续了 - if (executionCount >= 2) { - return false; - } - - // 如果服务器丢掉了连接,那么就重试 - if (exception instanceof NoHttpResponseException) { - return true; - } - // 不要重试SSL握手异常 - if (exception instanceof SSLHandshakeException) { - return false; - } - HttpRequest request = (HttpRequest) context.getAttribute(HttpClientContext.HTTP_REQUEST); - boolean idempotent = !(request instanceof HttpEntityEnclosingRequest); - // 如果请求被认为是幂等的,那么就重试 - if (idempotent) { - return true; - } - - return false; - } - - }; - // https 信任所有 - SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, (chain, authType) -> true).build(); - HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE; - SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext, hostnameVerifier); - - HTTP_CLIENTS = HttpClients.custom() - .setConnectionManager(cm) - .setDefaultRequestConfig(defaultRequestConfig) - .setRetryHandler(httpRequestRetryHandler) - //https - .setSSLSocketFactory(sslSocketFactory) - .build(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - - - - private RESTClient(){} - - /** - * 获取HttpClientConnectionPool对象,这是单例方法 - * - * @return - */ - public static RESTClient getClientConnectionPool() { - if (HttpClientConnectionPool == null) { - synchronized (RESTClient.class) { - if (HttpClientConnectionPool == null) { - HttpClientConnectionPool = new RESTClient(); - } - } - } - return HttpClientConnectionPool; - } - - - - - /** - * 一般情况下是AuthToken使用 - * @param url - * @param xmlFileName - * @return - */ - public HttpResponseBean postXML(String url, String xmlFileName){ - return postXML( url, xmlFileName,""); - } - - - - /** - * 一般情况下是DigestBean使用 - * @param url - * @param xmlFileName - * @param auth - * @return - */ - public HttpResponseBean postXML(String url,String xmlFileName,String auth){ - HttpPost httpPost = new HttpPost(url); - String seqNum = String.valueOf(System.currentTimeMillis()); - httpPost.setHeader(HttpHeaders.CONTENT_TYPE, "application/soap+xml; charset=utf-8"); - if(StringUtils.hasLength(xmlFileName))httpPost.setEntity(new StringEntity(xmlFileName, ContentType.APPLICATION_JSON)); - if(StringUtils.hasLength(auth)) httpPost.setHeader("Authorization",auth); - log.info(seqNum+">>> "+httpPost.toString()); - log.info(seqNum+"Body>>> " +xmlFileName); - return httpPost(httpPost,seqNum); - } - - /** - * Post方法封装,发送post请求,获取响应内容 - */ - public String fetchByPostMethod(String url, String jsonStr) { - String resultStr = null; - HttpPost httpPost = httpPostAddHeader(url, jsonStr); - String seqNum = String.valueOf(System.currentTimeMillis()); - log.info(seqNum + ">>> " + httpPost.toString()); - log.info(seqNum + "Body>>> " + jsonStr); - HttpResponse response; - try { - response = HTTP_CLIENTS.execute(httpPost); - HttpEntity entity = response.getEntity(); - resultStr = EntityUtils.toString(entity, CHARSET); - EntityUtils.consume(entity); - } catch (IOException ce) {// 服务器请求失败 - log.error(ce.getMessage()); - } finally { - httpPost.abort(); - } - log.info(seqNum + "<<< " + resultStr); - return resultStr; - } - - /** - * 添加头部信息 - * @param url - * @param jsonStr - * @return - */ - private HttpPost httpPostAddHeader(String url, String jsonStr){ - HttpPost httpPost = new HttpPost(url); - httpPost.setEntity(new StringEntity(jsonStr, ContentType.APPLICATION_JSON)); - httpPost.addHeader(HttpHeaders.USER_AGENT, USERAGENT); - httpPost.addHeader(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON.toString()); - return httpPost; - } - - - - - /** - * httppost - * @param httpPost - * @param seqNum - * @return - */ - private HttpResponseBean httpPost(HttpPost httpPost,String seqNum ) { - String resultStr = null; - HttpResponse response = null; - try{ - response = HTTP_CLIENTS.execute(httpPost); - int statusCode = response.getStatusLine().getStatusCode(); - if(statusCode == HttpStatus.SC_UNAUTHORIZED) { - //如果是401直接返回 - return new HttpResponseBean(null, Arrays.asList(response.getAllHeaders()),response.getStatusLine().getStatusCode()); - } - HttpEntity entity = response.getEntity(); - resultStr = EntityUtils.toString(entity,CHARSET); - EntityUtils.consume(entity); - }catch (ConnectException ce){// 服务器请求失败 - log.error("ConnectException fetchByPostMethod---->>>{}",ce.getMessage()); - } catch (IOException e) { - log.error("IOException fetchByPostMethod---->>>{}",e.getMessage()); - }finally { - httpPost.abort(); - } - log.info(seqNum+"<<< "+resultStr); - if(response != null) return new HttpResponseBean(resultStr, Arrays.asList(response.getAllHeaders()),response.getStatusLine().getStatusCode()); - return null; - } - - - - - /** - * 正则获取字符编码 - * @param content_type - * @return - */ - private static String getCharSetFromContentType(String content_type){ - String regex = "charset=\\s*(\\S*[^;])"; - Pattern pattern = Pattern.compile(regex,Pattern.DOTALL); - Matcher matcher = pattern.matcher(content_type); - if(matcher.find()){ - return matcher.group(1); - - }else{ - return null; - } - } - - - -} diff --git a/device_cars/src/main/java/com/xr/device_car/config/udp/UdbConfig.java b/device_cars/src/main/java/com/xr/device_car/config/udp/UdbConfig.java deleted file mode 100644 index 9efbac5..0000000 --- a/device_cars/src/main/java/com/xr/device_car/config/udp/UdbConfig.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.xr.device_car.config.udp; - -import com.xr.device_car.modules.analysis.entity.MeterConfig; -import com.xr.device_car.modules.analysis.entity.MeterReadingRecord; -import lombok.Data; - -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.List; -import java.util.Random; - -@Data -public class UdbConfig { - - //获取资源信息配置报文 - public static String getUdbConfig(List list){ - StringBuffer buffer=new StringBuffer(); - SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - buffer.append(new Date().getTime()+ new Random().nextInt(9000)+1000).append("\t"); - buffer.append(""); - buffer.append(""); - for(MeterConfig config:list){ - buffer.append("站序号").append("\t");//站序号 - buffer.append(config.getId()).append("\t");//监控索引号 - buffer.append("中山站").append("/").append(config.getOwningInterval()).append("/").append(config.getDeviceName()).append("/").append(config.getMeterName()).append("\t");//设备名称=站名称+间隔名称+设备名称+开关名称 - buffer.append(config.getMeterCode()).append("\t");//实物ID目前取表计ID - buffer.append("否").append(";");//是否联动信号目前取否,目前结尾符号位; - } - buffer.append(""); - return buffer.toString(); - } - -} diff --git a/device_cars/src/main/java/com/xr/device_car/config/udp/UdpClientConfig.java b/device_cars/src/main/java/com/xr/device_car/config/udp/UdpClientConfig.java deleted file mode 100644 index c98bf62..0000000 --- a/device_cars/src/main/java/com/xr/device_car/config/udp/UdpClientConfig.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.xr.device_car.config.udp; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.xr.device_car.config.utils.StaticPropUtil; -import com.xr.device_car.modules.analysis.entity.SendUdpLog; -import com.xr.device_car.modules.analysis.service.SendUdpLogService; -import io.netty.bootstrap.Bootstrap; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelOption; -import io.netty.channel.EventLoopGroup; -import io.netty.channel.SimpleChannelInboundHandler; -import io.netty.channel.nio.NioEventLoopGroup; -import io.netty.channel.socket.DatagramChannel; -import io.netty.channel.socket.DatagramPacket; -import io.netty.channel.socket.nio.NioDatagramChannel; -import io.netty.util.CharsetUtil; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.net.InetSocketAddress; -import java.text.SimpleDateFormat; -import java.util.Date; - -@Configuration -public class UdpClientConfig { - - @Autowired - private SendUdpLogService sendUdpLogService; - - @Bean - public DatagramChannel udpChannel() { - EventLoopGroup group = new NioEventLoopGroup(); - try { - Bootstrap bootstrap = new Bootstrap(); - bootstrap.group(group) - .channel(NioDatagramChannel.class) - .option(ChannelOption.SO_BROADCAST, true) - .handler(new SimpleChannelInboundHandler() { - @Override - protected void channelRead0(ChannelHandlerContext ctx, DatagramPacket msg) throws Exception { - // 处理接收到的数据 - String data = msg.content().toString(CharsetUtil.UTF_8); - QueryWrapper queryWrapper=new QueryWrapper(); - queryWrapper.eq("message_id",data.split(":")[0]); - SendUdpLog sendUdpLog = sendUdpLogService.getOne(queryWrapper); - if(sendUdpLog !=null){ - sendUdpLog.setResTime(new Date()); - sendUdpLog.setResMsg(data); - sendUdpLogService.updateById(sendUdpLog); - } - System.out.println("Received data: " + data); - } - }); - - return (DatagramChannel) bootstrap.bind(0).sync().channel(); - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - @Bean - public InetSocketAddress udpServerAddress() { - return new InetSocketAddress(StaticPropUtil.udpHost, StaticPropUtil.udpPort); - } - -} diff --git a/device_cars/src/main/java/com/xr/device_car/config/utils/EasyExcelUtil.java b/device_cars/src/main/java/com/xr/device_car/config/utils/EasyExcelUtil.java deleted file mode 100644 index 4d26d3a..0000000 --- a/device_cars/src/main/java/com/xr/device_car/config/utils/EasyExcelUtil.java +++ /dev/null @@ -1,139 +0,0 @@ -package com.xr.device_car.config.utils; - -import com.alibaba.excel.EasyExcel; -import com.alibaba.excel.metadata.Head; -import com.alibaba.excel.write.handler.CellWriteHandler; -import com.alibaba.excel.write.handler.RowWriteHandler; -import com.alibaba.excel.write.handler.SheetWriteHandler; -import com.alibaba.excel.write.handler.context.RowWriteHandlerContext; -import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; -import com.alibaba.excel.write.metadata.holder.WriteTableHolder; -import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder; -import com.alibaba.excel.write.metadata.style.WriteCellStyle; -import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; -import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.extension.api.R; -import com.xr.device_car.config.common.LocalDateConverter; -import com.xr.device_car.config.common.LocalDateTimeConverter; -import com.xr.device_car.modules.analysis.entity.xslx.SendUdpLogXslx; -import lombok.extern.slf4j.Slf4j; -import org.apache.poi.ss.usermodel.*; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -/** - * @Author: ChenTaoTao - * @Date: 2022/3/19 16:51 - * @Describe: 文件导出 - */ -@Slf4j -public class EasyExcelUtil { - public static void writeExcel(HttpServletResponse response, List data, Class tClass, String name){ - try { - List list=convertList(data,tClass); - String dateStr = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); - name = name+dateStr; - //防止下载时中文乱码 - name = new String(name.getBytes("UTF-8"), "ISO-8859-1"); - response.setContentType("application/vnd.ms-excel"); - response.setCharacterEncoding("utf-8"); - //添加这个是防止前端拿不到Content-disposition - response.setHeader("Content-Disposition", "attachment;filename=" + name+".xlsx"); - response.setHeader("Access-Control-Expose-Headers","Content-disposition"); - // 这里需要设置不关闭流 - EasyExcel.write(response.getOutputStream(), tClass).autoCloseStream(Boolean.FALSE).sheet(name).registerConverter(new LocalDateConverter()).registerConverter(new LocalDateTimeConverter()) - .registerWriteHandler(getCellStyleStrategy()).doWrite(list); - } catch (Exception e) { - log.error("文件导出失败,错误信息{}",e); - // 重置response - response.reset(); - response.setContentType("application/json"); - response.setCharacterEncoding("utf-8"); - R r = R.failed("文件下载失败"); - try { - response.getWriter().println(JSON.toJSONString(r)); - } catch (IOException ioException) { - ioException.printStackTrace(); - } - } - } - - - private static HorizontalCellStyleStrategy getCellStyleStrategy() { - // 创建标题样式和内容样式 - WriteCellStyle headerStyle = new WriteCellStyle(); - headerStyle.setBorderLeft(BorderStyle.THIN); - headerStyle.setBorderTop(BorderStyle.THIN); - headerStyle.setBorderRight(BorderStyle.THIN); - headerStyle.setBorderBottom(BorderStyle.THIN); - - WriteCellStyle contentStyle = new WriteCellStyle(); - contentStyle.setBorderLeft(BorderStyle.THIN); - contentStyle.setBorderTop(BorderStyle.THIN); - contentStyle.setBorderRight(BorderStyle.THIN); - contentStyle.setBorderBottom(BorderStyle.THIN); - - return new HorizontalCellStyleStrategy(headerStyle,contentStyle); - } - - public static List convertList(List list, Class targetClass) throws NoSuchFieldException, IllegalAccessException, ParseException, NoSuchMethodException, InvocationTargetException, InstantiationException { - List resultList = new ArrayList<>(); - - for (T sourceObj : list) { - S targetObj = targetClass.getDeclaredConstructor().newInstance(); - Field[] sourceFields = sourceObj.getClass().getDeclaredFields(); - Field[] targetFields = targetClass.getDeclaredFields(); - - for (Field sourceField : sourceFields) { - Field targetField = getField(targetFields, sourceField.getName()); - if (targetField != null) { - sourceField.setAccessible(true); - targetField.setAccessible(true); - - Object sourceValue = sourceField.get(sourceObj); - Object targetValue = convertFieldValue(sourceValue, targetField.getType(),sourceField.getType()); - - targetField.set(targetObj, targetValue); - } - } - - resultList.add(targetObj); - } - - return resultList; - } - - private static Field getField(Field[] fields, String fieldName) { - for (Field field : fields) { - if (field.getName().equals(fieldName)) { - return field; - } - } - return null; - } - - private static Object convertFieldValue(Object value, Class targetType,Class type1) throws ParseException { - if (type1 == String.class) { - return value.toString(); - } else if (targetType == String.class && value instanceof Date) { - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - return dateFormat.format(value); - } - return value; - } - - - - -} diff --git a/device_cars/src/main/java/com/xr/device_car/config/utils/HkComUtil.java b/device_cars/src/main/java/com/xr/device_car/config/utils/HkComUtil.java deleted file mode 100644 index c03d80a..0000000 --- a/device_cars/src/main/java/com/xr/device_car/config/utils/HkComUtil.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.xr.device_car.config.utils; - -import com.xr.device_car.modules.analysis.entity.BallheadPT; -import com.xr.device_car.modules.analysis.entity.DeviceCamera; -import com.xr.device_car.modules.analysis.entity.OnvifAuthBean; -import com.xr.device_car.modules.analysis.entity.OnvifBean; -import org.springframework.util.CollectionUtils; - -import java.awt.image.BufferedImage; -import java.util.List; - -public class HkComUtil { - - public static BufferedImage getBole(DeviceCamera device) throws Exception{ //拉取枪机图片 - OnvifAuthBean onvifBean= new OnvifAuthBean(device.getDeviceIp(),80,device.getAccount(),device.getPassword()); - String url= OnvifBean.getRequestUrl(onvifBean); - String auth = OnvifUtils.getAuthorization("digest",onvifBean,"digest/GetProfiles.wsdl", url); - System.out.println("鉴权:"+auth); - //获取Token - List profileTokens = OnvifUtils.getProfileTokens(onvifBean,auth); - System.out.println("Token:"+profileTokens); - onvifBean.setAuth(auth); - if(!CollectionUtils.isEmpty(profileTokens)){ - String snapshotUrl=null; - String token = profileTokens.get(0); - BallheadPT ballheadPT=OnvifUtils.getPtzStatus(token,onvifBean); - //如果类型是球机转换指定点位 - if(device.getDeviceType().equals("3") && OnvifUtils.ptzCamera(token,onvifBean,device.getX(),device.getY(),device.getZ())){ - Thread.sleep(1000); - //拉取图片 - snapshotUrl = OnvifUtils.getSnapshotUrl(token,onvifBean); - if(snapshotUrl!=null){ - //转回原来位置 - OnvifUtils.ptzCamera(token,onvifBean,ballheadPT.getX(),ballheadPT.getY(),ballheadPT.getZ()); - } - //如果类型是固定枪机,直接获取图片 - }else{ - snapshotUrl = OnvifUtils.getSnapshotUrl(token,onvifBean); - } - //返回图片地址 - return Files.urlByImages(snapshotUrl,device.getAccount(),device.getPassword()); - } - return null; - } -} - - - - - - - diff --git a/device_cars/src/main/java/com/xr/device_car/config/utils/HttpResponseBean.java b/device_cars/src/main/java/com/xr/device_car/config/utils/HttpResponseBean.java deleted file mode 100644 index 6be8fc7..0000000 --- a/device_cars/src/main/java/com/xr/device_car/config/utils/HttpResponseBean.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.xr.device_car.config.utils; - -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import org.apache.http.Header; -import org.apache.http.HttpStatus; - -import java.util.List; - -@Setter -@Getter -@AllArgsConstructor -@NoArgsConstructor -public class HttpResponseBean { - private String body; - private List
headers; - private Integer status; - - /** - * 获取头部信息。 - * @param name - * @return - */ - public Header getFirstHeader(final String name) { - for (int i = 0; i < this.headers.size(); i++) { - final Header header = this.headers.get(i); - if (header.getName().equalsIgnoreCase(name)) { - return header; - } - } - return null; - } - - /*** - * 判断是否成功 - */ - public static boolean isSuccess(HttpResponseBean httpResponseBean){ - return httpResponseBean!= null && HttpStatus.SC_OK ==httpResponseBean.getStatus(); - } - - - /*** - * 判断是否是401 - */ - public static boolean isUnAuthorzied(HttpResponseBean httpResponseBean){ - return httpResponseBean!= null && HttpStatus.SC_UNAUTHORIZED ==httpResponseBean.getStatus(); - } - - public HttpResponseBean(String body) { - this.body = body; - } -} - diff --git a/device_cars/src/main/java/com/xr/device_car/config/utils/MinioUtil.java b/device_cars/src/main/java/com/xr/device_car/config/utils/MinioUtil.java deleted file mode 100644 index dcd7af6..0000000 --- a/device_cars/src/main/java/com/xr/device_car/config/utils/MinioUtil.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.xr.device_car.config.utils; - -import io.minio.MinioClient; -import io.minio.errors.*; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.web.multipart.MultipartFile; -import org.xmlpull.v1.XmlPullParserException; - -import java.io.*; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; -import java.util.UUID; - -public class MinioUtil { - - private final static Logger log= LoggerFactory.getLogger(MinioUtil.class); - - private static MinioClient minioClient; - - private static MinioClient minioInit(){ - try { - if(minioClient == null){ - minioClient = new MinioClient(StaticPropUtil.minioUrl, StaticPropUtil.minioAccess, StaticPropUtil.minioSecret); - } - } catch (InvalidEndpointException e) { - throw new RuntimeException(e); - } catch (InvalidPortException e) { - throw new RuntimeException(e); - } - return minioClient; - } - - public static String uploadMultipartFile(MultipartFile file) throws Exception { - MinioClient minioClient = minioInit(); - InputStream is = file.getInputStream(); - //使用uuid生成新的唯一文件名 - String fileName = UUID.randomUUID().toString().replace("-", "") + file.getOriginalFilename(); - //获取文件类型 - String contentType = file.getContentType();//把文件放置Minio桶 - minioClient.putObject("meter", fileName, is, contentType); - //获取访问路径 - String url = minioClient.presignedGetObject("meter", fileName); - if (url != null) { - //返回路径不为空,即上传文件成功 - return url.split("\\?")[0]; - } else { - //上传失败 - return"上传失败"; - } - } - - public static String uploadFile(File file) throws IOException, InvalidArgumentException, InvalidBucketNameException, InsufficientDataException, XmlPullParserException, ErrorResponseException, NoSuchAlgorithmException, NoResponseException, InvalidKeyException, InternalException, InvalidExpiresRangeException { - MinioClient minioClient = minioInit(); - InputStream is = new FileInputStream(file); - //使用uuid生成新的唯一文件名 - String fileName = UUID.randomUUID().toString().replace("-", "") + file.getName(); - //获取文件类型 - String contentType = fileName.substring(fileName.lastIndexOf(".")+1);//把文件放置Minio桶 - minioClient.putObject("meter", fileName, is, contentType); - //获取访问路径 - String url = minioClient.presignedGetObject("meter", fileName); - if (url != null) { - //返回路径不为空,即上传文件成功 - return url.split("\\?")[0]; - } else { - //上传失败 - return"上传失败"; - } - } - -} diff --git a/device_cars/src/main/java/com/xr/device_car/config/utils/OnvifUtils.java b/device_cars/src/main/java/com/xr/device_car/config/utils/OnvifUtils.java deleted file mode 100644 index beab0ce..0000000 --- a/device_cars/src/main/java/com/xr/device_car/config/utils/OnvifUtils.java +++ /dev/null @@ -1,141 +0,0 @@ -package com.xr.device_car.config.utils; - -import com.xr.device_car.config.common.RESTClient; -import com.xr.device_car.modules.analysis.entity.BallheadPT; -import com.xr.device_car.modules.analysis.entity.DigestBean; -import com.xr.device_car.modules.analysis.entity.OnvifAuthBean; -import com.xr.device_car.modules.analysis.entity.OnvifBean; -import org.springframework.core.io.ClassPathResource; -import org.springframework.util.StringUtils; - -import java.util.List; - -import static com.xr.device_car.config.common.Const.HEADERS_ONVIF_WWW_AUTHENTICATE; - - -public class OnvifUtils { - - - /** - * 获取鉴权 - * @param authType - * @param requestOnvifBean - * @param wsdl - * @param requestUrl - * @return - */ - public static String getAuthorization(String authType, OnvifBean requestOnvifBean, String wsdl, String requestUrl) { - //参数 - // 读取GetProfiles.wsdl - String getProfiles = FileUtil.fileReader(new ClassPathResource(wsdl)); - HttpResponseBean httpResponseBean = RESTClient.getClientConnectionPool() - .postXML(requestUrl, getProfiles); - //如果是401的话 获取WWW-Authenticate 重新请求 - if (HttpResponseBean.isUnAuthorzied(httpResponseBean)) { - DigestBean digestBean = new DigestBean().getDigestBean(authType,requestOnvifBean, httpResponseBean.getFirstHeader(HEADERS_ONVIF_WWW_AUTHENTICATE).getValue()); - return digestBean.getToken(); - } - return null; - } - - - /** - * 获取Token - * @param requestOnvifBean - * @param auth - * @return - */ - public static List getProfileTokens(OnvifBean requestOnvifBean, String auth) { - //请求url - String requestUrl = OnvifBean.getRequestUrl(requestOnvifBean); - //参数 - // 读取GetProfiles.wsdl - String getProfiles = FileUtil.fileReader(new ClassPathResource("digest/GetProfiles.wsdl")); - HttpResponseBean httpResponseBean = RESTClient.getClientConnectionPool() - .postXML(requestUrl, getProfiles,auth); - if(httpResponseBean != null) { - String resultStr = httpResponseBean.getBody(); - if (HttpResponseBean.isSuccess(httpResponseBean) && StringUtils.hasLength(resultStr)) { - return AnalysisXml.analysisTokens(resultStr); - } - - } - return null; - } - - - - - /** - * 获取截图地址 - * @param profileToken token - * @param requestOnvifBean - * @return - */ - public static String getSnapshotUrl(String profileToken, OnvifAuthBean requestOnvifBean) { - String requestUrl = OnvifBean.getRequestUrl(requestOnvifBean); - //参数 - // 读取GetProfiles.wsdl - String snapshotUrlWsdl = FileUtil.fileReader(new ClassPathResource("digest/GetSnapshotUrl.wsdl")); - HttpResponseBean httpResponseBean = RESTClient.getClientConnectionPool() - .postXML(requestUrl, String.format(snapshotUrlWsdl,profileToken),requestOnvifBean.getAuth()); - String resultStr = httpResponseBean.getBody(); - if(StringUtils.hasLength(resultStr) && HttpResponseBean.isSuccess(httpResponseBean)) { - return AnalysisXml.analysisSnapshotUrl(resultStr); - } - return null; - } - //绝对位置转动球机 - public static boolean ptzCamera(String profileToken,OnvifAuthBean requestOnvifBean,String x,String y,String z){ - String requestUrl = OnvifBean.getRequestUrl(requestOnvifBean); - String snapshotUrlWsdl = FileUtil.fileReader(new ClassPathResource("digest/AbsoluteMove.wsdl")); - String wsdl = String.format(snapshotUrlWsdl,profileToken,x,y,z); - HttpResponseBean httpResponseBean = RESTClient.getClientConnectionPool() - .postXML(requestUrl, wsdl,requestOnvifBean.getAuth()); - String resultStr = httpResponseBean.getBody(); - if(StringUtils.hasLength(resultStr) && HttpResponseBean.isSuccess(httpResponseBean)) { - return true; - } - return false; - } - //获取球机当前位置 - public static BallheadPT getPtzStatus(String token,OnvifAuthBean requestOnvifBean){ - String requestUrl = OnvifBean.getRequestUrl(requestOnvifBean); - String snap = FileUtil.fileReader(new ClassPathResource("digest/GetStatus.wsdl")); - String wsdl = String.format(snap,token); - HttpResponseBean httpResponseBean = RESTClient.getClientConnectionPool() - .postXML(requestUrl, wsdl,requestOnvifBean.getAuth()); - String resultStr = httpResponseBean.getBody(); - if(StringUtils.hasLength(resultStr) && HttpResponseBean.isSuccess(httpResponseBean)) { - return AnalysisXml.getStatus(resultStr); - } - return null; - } - //获取所有预置点 - public static List getBallHeadPts(String profileToken,OnvifAuthBean requestOnvifBean){ - String requestUrl = OnvifBean.getRequestUrl(requestOnvifBean); - String snapshotUrlWsdl = FileUtil.fileReader(new ClassPathResource("digest/GetPresets.wsdl")); - String wsdl = String.format(snapshotUrlWsdl,profileToken); - HttpResponseBean httpResponseBean = RESTClient.getClientConnectionPool() - .postXML(requestUrl, wsdl,requestOnvifBean.getAuth()); - String resultStr = httpResponseBean.getBody(); - if(StringUtils.hasLength(resultStr) && HttpResponseBean.isSuccess(httpResponseBean)) { - return AnalysisXml.getBallheadPTs(resultStr); - } - return null; - } - - //前往指定预置点 - public static boolean gotoBallHeadPts(String profileToken, OnvifAuthBean requestOnvifBean, BallheadPT ballheadPT){ - String requestUrl = OnvifBean.getRequestUrl(requestOnvifBean); - String snapshotUrlWsdl = FileUtil.fileReader(new ClassPathResource("digest/GotoPreset.wsdl")); - String wsdl = String.format(snapshotUrlWsdl,profileToken,ballheadPT.getId()); - HttpResponseBean httpResponseBean = RESTClient.getClientConnectionPool() - .postXML(requestUrl, wsdl,requestOnvifBean.getAuth()); - String resultStr = httpResponseBean.getBody(); - if(StringUtils.hasLength(resultStr) && HttpResponseBean.isSuccess(httpResponseBean)) { - return true; - } - return false; - } -} diff --git a/device_cars/src/main/java/com/xr/device_car/config/utils/PythonExecutor.java b/device_cars/src/main/java/com/xr/device_car/config/utils/PythonExecutor.java deleted file mode 100644 index 67d6302..0000000 --- a/device_cars/src/main/java/com/xr/device_car/config/utils/PythonExecutor.java +++ /dev/null @@ -1,231 +0,0 @@ -package com.xr.device_car.config.utils; - -import cn.hutool.extra.spring.SpringUtil; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.xr.device_car.modules.analysis.entity.MeterInitialization; -import com.xr.device_car.modules.analysis.service.IMeterInitializationService; -import com.xr.device_car.modules.analysis.service.MeterConfigService; -import com.xr.device_car.modules.analysis.service.impl.MeterInitializationServiceImpl; - -import java.io.*; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -public class PythonExecutor { - - - public static void main(String[] args) throws Exception { - try { - String pythonPath = StaticPropUtil.pythonPath; - - ProcessBuilder processBuilder = new ProcessBuilder(pythonPath); - // 启动子进程 - Process process = processBuilder.start(); - BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(process.getOutputStream())); - bw.write("import sys\n"); - bw.write("sys.path.append(\"D:\\smartGrid\\smartGrid\\models\")\n"); - bw.write("import indicatorLightStatus as ils\n"); - bw.write("import switchRecognition as sr\n"); - bw.write("import liquidLevel as ll\n"); - bw.write("liquid_level_image_path = 'D:\\smartGrid\\smartGrid\\weights\\DIGITAL_METER (41).JPG'\n"); - bw.write("ll.calculate_rgb_min_max([[112,\"D:\\smartGrid\\smartGrid\\weights\\DIGITAL_METER (41).JPG\"]])\n"); - bw.write("print(\"Liquid level weights initialized.\")\n"); - bw.write("liquid_level_image_path = 'D:\\smartGrid\\smartGrid\\weights\\DIGITAL_METER (10).JPG'\n"); - bw.write("liquid_level = ll.calculate_liquid_level([112,liquid_level_image_path])\n"); - bw.write("print(f\"Liquid level: {liquid_level}\")\n"); - - bw.close(); - - - // 获取子进程的输出流 - BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); - - String line; - // 读取输出 - while ((line = reader.readLine()) != null) { - System.out.println(line); - } - - // 等待进程执行完成 - int exitCode = process.waitFor(); - System.out.println("Exit Code: " + exitCode); - - } catch (IOException | InterruptedException e) { - e.printStackTrace(); - } - - } - - private static boolean meterInit(String code) throws Exception { - String pythonPath = StaticPropUtil.pythonPath; - String modelPath = StaticPropUtil.modelPath; - - ProcessBuilder processBuilder = new ProcessBuilder(pythonPath); - // 启动子进程 - Process process = processBuilder.start(); - BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(process.getOutputStream())); - bw.write("import sys\n"); - String imports = "sys.path.append(\"%s\")\n"; - bw.write(String.format(imports, modelPath)); - bw.write("import indicatorLightStatus as ils\n"); - bw.write("import switchRecognition as sr\n"); - bw.write("import liquidLevel as ll\n"); - bw.write(code); - bw.write("print(\"success\")\n"); - bw.close(); - BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); - - List list = new ArrayList<>(); - String line; - // 读取输出 - while ((line = reader.readLine()) != null) { - list.add(line); - System.out.println(line); - } - - BufferedReader exception = new BufferedReader(new InputStreamReader(process.getErrorStream())); - List list1 = new ArrayList<>(); - String line1; - // 读取输出 - while ((line1 = exception.readLine()) != null) { - list1.add(line1); - System.out.println(line1); - } - - // 等待进程执行完成 - int exitCode = process.waitFor(); - System.out.println("Exit Code: " + exitCode); - if (list.contains("success") && list1.isEmpty()) { - return true; - } - return false; - } - - /** - * 初始化算法 - * id 表计配置ID - * sfType 4 灯光 3 开关 5 液位计 - */ - public static boolean meterInit(Integer id, String sfType) throws Exception { - IMeterInitializationService meterInitializationService = SpringUtil.getBean(MeterInitializationServiceImpl.class); - QueryWrapper query = new QueryWrapper<>(); - query.eq("meter_id", id); - query.orderByAsc("serial"); - List list = meterInitializationService.list(query); - List path = list.stream().map(n -> n.getImgAddress()).collect(Collectors.toList()); - String ph = ""; - for (String str : path) { - str = str.replace("\\", "\\\\"); - ph += "\"" + str + "\"" + ","; - } - ph = ph.substring(0, ph.length() - 1); - String code = ""; - if (sfType.equals("4")) { - List> list1 = new ArrayList<>(); - List list2 = new ArrayList<>(); - list2.add(id); - List list3 = new ArrayList<>(); - list3.add(ph); - list2.add(list3); - list1.add(list2); - code = "ils.calculate_luminance_threshold(" + Arrays.toString(list1.toArray()) + ")\n"; - } - if (sfType.equals("3")) { - List list1 = new ArrayList<>(); - path.add(0, id + ""); - list1.add(ph); - code = "sr.initialize(" + Arrays.toString(list1.toArray()) + ")\n"; - } - if (sfType.equals("5")) { - List list1 = new ArrayList<>(); -// list1.add(id.toString()); - //path.add(0, id + ""); - list1.add(ph); -// String params = String.join( list1); - //Arrays.toString(list1.toArray()) - code = "ll.calculate_rgb_min_max("+"[["+id+ ","+ ph +"]]"+")\n"; - } - return meterInit(code); - - } - - /** - * 读取结果 - * id 表计id - * path 图片路径 - * sfType 1 灯光 2 开关 3 液位计 4 指针 - */ - public static String readNumber(Integer id, String path, String sfType) throws Exception { - String pythonPath = StaticPropUtil.pythonPath; - String modelPath = StaticPropUtil.modelPath; - - ProcessBuilder processBuilder = new ProcessBuilder(pythonPath); - // 启动子进程 - Process process = processBuilder.start(); - BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(process.getOutputStream())); - bw.write("import sys\n"); - String imports = "sys.path.append(\"%s\")\n"; - bw.write(String.format(imports, modelPath)); - bw.write("import indicatorLightStatus as ils\n"); - bw.write("import switchRecognition as sr\n"); - bw.write("import liquidLevel as ll\n"); - bw.write("indicator_light_image_path = '" + path + "'\n"); - if (sfType.equals("4")) { - bw.write("value = ils.check_indicator_light_status(" + id + ",indicator_light_image_path)\n"); - } - if (sfType.equals("3")) { - bw.write("value = sr.read_numbers(" + id + ",indicator_light_image_path)\n"); - } - if (sfType.equals("5")) { - bw.write("value = ll.calculate_liquid_level([" + id + ",indicator_light_image_path,\"down\"])\n"); - } - if (sfType.equals("0")) { - bw.write("rotate_angle, value = pr.getPointerAngleAndNum(" + id + ", indicator_light_image_path)\n"); - } - bw.write("print(f\"value:{value}\")"); - bw.close(); - BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); - List list = new ArrayList<>(); - String line; - // 读取输出 - while ((line = reader.readLine()) != null) { - list.add(line); - } - - BufferedReader exception = new BufferedReader(new InputStreamReader(process.getErrorStream())); - List list1 = new ArrayList<>(); - String line1; - // 读取输出 - while ((line1 = exception.readLine()) != null) { - list.add(line1); - } - - -// if(list.contains("value")){ -// String value = list.get(list.indexOf("value")).split(":")[1]; -// File file = new File(path); -// if(file.exists()){ -// file.delete(); -// } -// return value; -// } - for (String element : list) { - if (element.contains("value")) { - String[] parts = element.split(":"); - File file = new File(path); - if (file.exists()) { - file.delete(); - } - if (parts.length > 1) { - String result = parts[1].trim(); - return result; - } - } - } - return null; - } - - -} diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/controller/MeterInitializationController.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/controller/MeterInitializationController.java deleted file mode 100644 index fcb6e9b..0000000 --- a/device_cars/src/main/java/com/xr/device_car/modules/analysis/controller/MeterInitializationController.java +++ /dev/null @@ -1,177 +0,0 @@ -package com.xr.device_car.modules.analysis.controller; - - -import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.xr.device_car.config.common.Result; -import com.xr.device_car.config.utils.*; -import com.xr.device_car.modules.analysis.entity.DeviceCamera; -import com.xr.device_car.modules.analysis.entity.MeterConfig; -import com.xr.device_car.modules.analysis.entity.MeterInitialization; -import com.xr.device_car.modules.analysis.entity.MeterType; -import com.xr.device_car.modules.analysis.service.DeviceCameraService; -import com.xr.device_car.modules.analysis.service.IMeterInitializationService; -import com.xr.device_car.modules.analysis.service.MeterConfigService; -import com.xr.device_car.modules.analysis.service.MeterTypeService; -import io.minio.MinioClient; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.web.bind.annotation.*; - -import org.springframework.web.multipart.MultipartFile; - -import javax.servlet.http.HttpServletRequest; -import java.io.File; -import java.io.InputStream; -import java.util.*; - -import java.awt.image.BufferedImage; - -/** - *

- * 表计算法初始化 前端控制器 - *

- * - * @author gaoby - * @since 2023-11-20 - */ -@RestController -@RequestMapping("/meterInitialization") -@RequiredArgsConstructor -public class MeterInitializationController { - @Value("${upLoad.file}") - private String uploadDir; - - private final MeterConfigService meterConfigService; - - private final DeviceCameraService deviceCameraService; - - private final IMeterInitializationService iMeterInitializationService; - - private final MeterTypeService meterTypeService; - - @PostMapping("pullImages") - public Result pullImages(MeterInitialization meterInitialization){ - MeterConfig config=meterConfigService.getById(meterInitialization.getMeterId()); - DeviceCamera deviceCamera = deviceCameraService.getById(config.getCameraId()); - BufferedImage bufferedImage=null; - try { - if(deviceCamera.getDeviceType().equals("1")|| deviceCamera.getDeviceType().equals("2")){ - bufferedImage= AdbUtil.getCamDevice(); - } - if(deviceCamera.getDeviceType().equals("3") || deviceCamera.getDeviceType().equals("4")){ // 拉取球机 - bufferedImage= HkComUtil.getBole(deviceCamera); - } - long l = new Date().getTime(); - String path = StaticPropUtil.imagePath +l+".png"; - File file=Files.saveImageForPath(bufferedImage,path); - String url = MinioUtil.uploadFile(file); - - QueryWrapper queryWrapper=new QueryWrapper<>(); - queryWrapper.eq("meter_id",meterInitialization.getMeterId()); - queryWrapper.orderByDesc("serial"); - List meterInitialization1=iMeterInitializationService.list(queryWrapper); - MeterInitialization meterInitialization2 = getMeterInitialization(meterInitialization, meterInitialization1, path,url); - iMeterInitializationService.save(meterInitialization2); - }catch (Exception e){ - e.printStackTrace(); - return Result.error(e.getMessage()); - } - return Result.OK("拉取成功!"); - } - - private static MeterInitialization getMeterInitialization(MeterInitialization meterInitialization, List meterInitialization1, String path,String url) { - MeterInitialization meterInitialization2=new MeterInitialization(); - meterInitialization2.setMeterId(meterInitialization.getMeterId()); - if(meterInitialization1.isEmpty()){ - meterInitialization2.setSerial(0); - }else{ - meterInitialization2.setSerial(meterInitialization1.get(0).getSerial()+1); - } - meterInitialization2.setValue(meterInitialization.getValue()); - meterInitialization2.setImgAddress(path); - meterInitialization2.setImg(url); - return meterInitialization2; - } - - @PostMapping("/uploadImg") - public Result uploadImg(@RequestParam("imgFile") MultipartFile imgFile,@RequestParam("value") String value,@RequestParam("serial") String serial,@RequestParam("meterId") String meterId) throws Exception { - if (!imgFile.isEmpty()) { - // 获取文件名 - String fileName = Objects.requireNonNull(imgFile.getOriginalFilename()); - File folder = new File(StaticPropUtil.imagePath); - // 检查文件夹是否存在,如果不存在就创建它 - if (!folder.exists()) { - folder.mkdirs(); // 创建文件夹及其父文件夹(如果不存在) - } - // 构建上传路径 - String filePath = StaticPropUtil.imagePath + File.separator + fileName; - String imgAddress = StaticPropUtil.imagePath + fileName; - // 保存文件 - File dest = new File(filePath); - imgFile.transferTo(dest); - // 上传至minIo服务器 - String url = MinioUtil.uploadMultipartFile(imgFile); - if (url.equals("上传失败")){ - Result.error("图片上传至服务器异常"); - } - MeterInitialization meterInitialization = new MeterInitialization(); - meterInitialization.setImg(url); - meterInitialization.setImgAddress(imgAddress); - meterInitialization.setMeterId(Integer.valueOf(meterId)); - meterInitialization.setSerial(Integer.valueOf(serial)); - meterInitialization.setValue(value); - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("meter_id",meterInitialization.getMeterId()); - iMeterInitializationService.save(meterInitialization); - return Result.OK("上传成功!"); - } - return Result.error("上传图片异常,请联系管理员"); - } - - - @PostMapping(value = "/queryPageList") - public Result queryPageList(MeterInitialization meterInitialization, HttpServletRequest req)throws Exception{ -// Page pg = StringFormatterUtil.returnPage(req); - QueryWrapper wrapper = StringFormatterUtil.returnQuery(req); - // meterId - if (ObjectUtil.isNotEmpty(meterInitialization.getMeterId())){ - wrapper.eq("meter_id",meterInitialization.getMeterId()); - } - wrapper.orderByAsc("serial"); - List meterInitializationList = iMeterInitializationService.list(wrapper); - return Result.OK(meterInitializationList); - } - - - - @PostMapping(value = "/delImg") - public Result delImg(Integer id) throws Exception { - iMeterInitializationService.removeById(id); - return Result.OK("删除成功!"); - } - - /** - * 初始化算法 - */ - @PostMapping("initMeter") - public Result initMeter(Integer meterId){ - try{ - MeterConfig meterConfig=meterConfigService.getById(meterId); - MeterType meterType = meterTypeService.getById(meterConfig.getTypeId()); - if(PythonExecutor.meterInit(meterId,meterType.getMeterShape())){ - meterConfig.setInitStatus("1"); - meterConfigService.updateById(meterConfig); - }else{ - return Result.error("初始化失败"); - } - }catch (Exception e){ - e.printStackTrace(); - return Result.error(e.getMessage()); - } - return Result.OK("初始化完成"); - } - -} - diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/controller/SendUdpLogController.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/controller/SendUdpLogController.java index 1e574c4..ddd7ac4 100644 --- a/device_cars/src/main/java/com/xr/device_car/modules/analysis/controller/SendUdpLogController.java +++ b/device_cars/src/main/java/com/xr/device_car/modules/analysis/controller/SendUdpLogController.java @@ -1,11 +1,9 @@ package com.xr.device_car.modules.analysis.controller; -import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.xr.device_car.config.utils.EasyExcelUtil; import com.xr.device_car.config.utils.StringFormatterUtil; import com.xr.device_car.modules.analysis.entity.SendUdpLog; import com.xr.device_car.modules.analysis.entity.xslx.SendUdpLogXslx; @@ -17,7 +15,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.io.IOException; import java.util.*; @RestController diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/entity/SendUdpLog.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/entity/SendUdpLog.java index 544c5ff..91d3490 100644 --- a/device_cars/src/main/java/com/xr/device_car/modules/analysis/entity/SendUdpLog.java +++ b/device_cars/src/main/java/com/xr/device_car/modules/analysis/entity/SendUdpLog.java @@ -1,6 +1,5 @@ package com.xr.device_car.modules.analysis.entity; -import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -9,7 +8,6 @@ import java.io.Serializable; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; -import com.xr.device_car.config.common.LocalDateTimeConverter; import lombok.Data; /** diff --git a/device_cars/src/main/resources/digest/AbsoluteMove.wsdl b/device_cars/src/main/resources/digest/AbsoluteMove.wsdl deleted file mode 100644 index 7bb64b3..0000000 --- a/device_cars/src/main/resources/digest/AbsoluteMove.wsdl +++ /dev/null @@ -1,12 +0,0 @@ - - - - - %s - - - - - - - \ No newline at end of file diff --git a/device_cars/src/main/resources/digest/GetDeviceInformation.wsdl b/device_cars/src/main/resources/digest/GetDeviceInformation.wsdl deleted file mode 100644 index 9b65996..0000000 --- a/device_cars/src/main/resources/digest/GetDeviceInformation.wsdl +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/device_cars/src/main/resources/digest/GetPTZ.wsdl b/device_cars/src/main/resources/digest/GetPTZ.wsdl deleted file mode 100644 index 5de3704..0000000 --- a/device_cars/src/main/resources/digest/GetPTZ.wsdl +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/device_cars/src/main/resources/digest/GetPresets.wsdl b/device_cars/src/main/resources/digest/GetPresets.wsdl deleted file mode 100644 index de30d8c..0000000 --- a/device_cars/src/main/resources/digest/GetPresets.wsdl +++ /dev/null @@ -1,8 +0,0 @@ - - - - - %s - - - \ No newline at end of file diff --git a/device_cars/src/main/resources/digest/GetProfiles.wsdl b/device_cars/src/main/resources/digest/GetProfiles.wsdl deleted file mode 100644 index 92dc2cd..0000000 --- a/device_cars/src/main/resources/digest/GetProfiles.wsdl +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/device_cars/src/main/resources/digest/GetSnapshotUrl.wsdl b/device_cars/src/main/resources/digest/GetSnapshotUrl.wsdl deleted file mode 100644 index 3b6f76a..0000000 --- a/device_cars/src/main/resources/digest/GetSnapshotUrl.wsdl +++ /dev/null @@ -1,8 +0,0 @@ - - - - - %s - - - \ No newline at end of file diff --git a/device_cars/src/main/resources/digest/GetStatus.wsdl b/device_cars/src/main/resources/digest/GetStatus.wsdl deleted file mode 100644 index 15f1e73..0000000 --- a/device_cars/src/main/resources/digest/GetStatus.wsdl +++ /dev/null @@ -1,8 +0,0 @@ - - - - - %s - - - \ No newline at end of file diff --git a/device_cars/src/main/resources/digest/GetStreamUri.wsdl b/device_cars/src/main/resources/digest/GetStreamUri.wsdl deleted file mode 100644 index b8fae91..0000000 --- a/device_cars/src/main/resources/digest/GetStreamUri.wsdl +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - %s - %s - %s - %s - - - - - - - - RTP-Unicast - - %s - - - %s - - - \ No newline at end of file diff --git a/device_cars/src/main/resources/digest/GotoPreset.wsdl b/device_cars/src/main/resources/digest/GotoPreset.wsdl deleted file mode 100644 index 330014e..0000000 --- a/device_cars/src/main/resources/digest/GotoPreset.wsdl +++ /dev/null @@ -1,9 +0,0 @@ - - - - - %s - %s - - - \ No newline at end of file diff --git a/device_udpclent/src/main/java/com/xr/device_udpclent/common/config/HttpResponseBean.java b/device_udpclent/src/main/java/com/xr/device_udpclent/common/config/HttpResponseBean.java deleted file mode 100644 index f7bf1bf..0000000 --- a/device_udpclent/src/main/java/com/xr/device_udpclent/common/config/HttpResponseBean.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.xr.device_udpclent.common.config; - -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import org.apache.http.Header; -import org.apache.http.HttpStatus; - -import java.util.List; - -@Setter -@Getter -@AllArgsConstructor -@NoArgsConstructor -public class HttpResponseBean { - private String body; - private List
headers; - private Integer status; - - /** - * 获取头部信息。 - * @param name - * @return - */ - public Header getFirstHeader(final String name) { - for (int i = 0; i < this.headers.size(); i++) { - final Header header = this.headers.get(i); - if (header.getName().equalsIgnoreCase(name)) { - return header; - } - } - return null; - } - - /*** - * 判断是否成功 - */ - public static boolean isSuccess(HttpResponseBean httpResponseBean){ - return httpResponseBean!= null && HttpStatus.SC_OK ==httpResponseBean.getStatus(); - } - - - /*** - * 判断是否是401 - */ - public static boolean isUnAuthorzied(HttpResponseBean httpResponseBean){ - return httpResponseBean!= null && HttpStatus.SC_UNAUTHORIZED ==httpResponseBean.getStatus(); - } - - public HttpResponseBean(String body) { - this.body = body; - } -} - diff --git a/device_udpclent/src/main/java/com/xr/device_udpclent/common/utils/AnalysisXml.java b/device_udpclent/src/main/java/com/xr/device_udpclent/common/utils/AnalysisXml.java deleted file mode 100644 index 9dce134..0000000 --- a/device_udpclent/src/main/java/com/xr/device_udpclent/common/utils/AnalysisXml.java +++ /dev/null @@ -1,150 +0,0 @@ -package com.xr.device_udpclent.common.utils; - -import com.xr.device_udpclent.models.entity.BallheadPT; -import net.logstash.logback.encoder.org.apache.commons.lang.StringEscapeUtils; -import org.dom4j.Document; -import org.dom4j.Element; -import org.dom4j.io.SAXReader; - -import java.io.ByteArrayInputStream; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - -public class AnalysisXml { - - - /** - * 解析xml[Profiles] 获取 token - * @param resultStr - * @return - */ - public static List analysisTokens(String resultStr){ - // 解析body - // 转换返回结果中的特殊字符,返回的结果中会将xml转义,此处需要反转移 - String xmlStr = StringEscapeUtils.unescapeXml(resultStr); - SAXReader reader = new SAXReader(); - try { - Document document = reader.read(new ByteArrayInputStream(xmlStr.getBytes(StandardCharsets.UTF_8))); - Element root = document.getRootElement(); - List elements = root.element("Body").element("GetProfilesResponse").elements("Profiles"); - return elements.stream().map(element -> element.attribute("token").getText()).collect(Collectors.toList()); - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - /** - * 解析xml[ProfilesName] 获取 token - * @param resultStr - * @return - */ - public static List analysisProfiles(String resultStr){ - // 解析body - // 转换返回结果中的特殊字符,返回的结果中会将xml转义,此处需要反转移 - String xmlStr = StringEscapeUtils.unescapeXml(resultStr); - SAXReader reader = new SAXReader(); - try { - Document document = reader.read(new ByteArrayInputStream(xmlStr.getBytes(StandardCharsets.UTF_8))); - Element root = document.getRootElement(); - List elements = root.element("Body").element("GetProfilesResponse").elements("Preset"); - return elements.stream().map(element -> element.element("Name").getText() - ).collect(Collectors.toList()); - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - /** - * 解析xml[MediaUri] 获取 token - * @param resultStr - * @return - */ - public static String analysisSnapshotUrl(String resultStr){ - // 解析body - // 转换返回结果中的特殊字符,返回的结果中会将xml转义,此处需要反转移 - String xmlStr = StringEscapeUtils.unescapeXml(resultStr).replace("&", "&"); - SAXReader reader = new SAXReader(); - try { - Document document = reader.read(new ByteArrayInputStream(xmlStr.getBytes(StandardCharsets.UTF_8))); - Element rootElement = document.getRootElement(); - Element element = rootElement.element("Body").element("GetSnapshotUriResponse").element("MediaUri"); - return String.valueOf(element.elements("Uri").get(0).getData()); - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - - /** - * 解析xml[MediaUri] 获取 streamUrl - * @param resultStr - * @return - */ - public static String analysisStreamUrl(String resultStr){ - // 解析body - // 转换返回结果中的特殊字符,返回的结果中会将xml转义,此处需要反转移 - String xmlStr = StringEscapeUtils.unescapeXml(resultStr).replace("&", "&"); - SAXReader reader = new SAXReader(); - try { - Document document = reader.read(new ByteArrayInputStream(xmlStr.getBytes(StandardCharsets.UTF_8))); - Element rootElement = document.getRootElement(); - Element element = rootElement.element("Body").element("GetStreamUriResponse").element("MediaUri"); - return String.valueOf(element.elements("Uri").get(0).getData()); - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - public static List getBallheadPTs(String resultStr){ - List ballheadPTS=new ArrayList<>(); - String xmlStr = StringEscapeUtils.unescapeXml(resultStr).replace("&", "&"); - SAXReader reader = new SAXReader(); - try { - Document document = reader.read(new ByteArrayInputStream(xmlStr.getBytes(StandardCharsets.UTF_8))); - Element root = document.getRootElement(); - List elements = root.element("Body").element("GetPresetsResponse").elements("Preset"); - for(Element element:elements){ - BallheadPT pt=new BallheadPT(); - String id = element.attribute(0).getValue(); - pt.setId(id); - String name = String.valueOf(element.element("Name").getText()); - pt.setName(name); - List ele=element.elements("PTZPosition"); - pt.setX(String.valueOf(ele.get(0).element("PanTilt").attribute(0).getValue())); - pt.setY(String.valueOf(ele.get(0).element("PanTilt").attribute(1).getValue())); - pt.setZ(String.valueOf(ele.get(0).element("Zoom").attribute(0).getValue())); - ballheadPTS.add(pt); - } - } catch (Exception e) { - e.printStackTrace(); - } - return ballheadPTS; - } - - public static BallheadPT getStatus(String resultStr){ - String xmlStr = StringEscapeUtils.unescapeXml(resultStr).replace("&", "&"); - SAXReader reader = new SAXReader(); - try { - Document document = reader.read(new ByteArrayInputStream(xmlStr.getBytes(StandardCharsets.UTF_8))); - Element root = document.getRootElement(); - Element element = root.element("Body").element("GetStatusResponse").element("PTZStatus").element("Position"); - String x=String.valueOf(element.element("PanTilt").attribute(0).getValue()); - String y=String.valueOf(element.element("PanTilt").attribute(1).getValue()); - String z=String.valueOf(element.element("Zoom").attribute(0).getValue()); - BallheadPT pt=new BallheadPT(); - pt.setX(x); - pt.setY(y); - pt.setZ(z); - return pt; - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - -} diff --git a/device_udpclent/src/main/java/com/xr/device_udpclent/common/utils/OnvifUtils.java b/device_udpclent/src/main/java/com/xr/device_udpclent/common/utils/OnvifUtils.java deleted file mode 100644 index 428e81a..0000000 --- a/device_udpclent/src/main/java/com/xr/device_udpclent/common/utils/OnvifUtils.java +++ /dev/null @@ -1,152 +0,0 @@ -package com.xr.device_udpclent.common.utils; - -import com.xr.device_udpclent.common.config.HttpResponseBean; -import com.xr.device_udpclent.common.config.OnvifAuthBean; -import com.xr.device_udpclent.models.entity.BallheadPT; -import com.xr.device_udpclent.models.entity.DigestBean; -import com.xr.device_udpclent.models.entity.OnvifBean; -import org.apache.http.auth.AuthScope; -import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.impl.auth.DigestScheme; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.springframework.core.io.ClassPathResource; -import org.springframework.util.StringUtils; - -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.net.HttpURLConnection; -import java.net.URL; -import java.nio.charset.StandardCharsets; -import java.util.Base64; -import java.util.List; - -import static com.xr.device_udpclent.common.config.Const.HEADERS_ONVIF_WWW_AUTHENTICATE; - -public class OnvifUtils { - - - /** - * 获取鉴权 - * @param authType - * @param requestOnvifBean - * @param wsdl - * @param requestUrl - * @return - */ - public static String getAuthorization(String authType, OnvifBean requestOnvifBean, String wsdl, String requestUrl) { - //参数 - // 读取GetProfiles.wsdl - String getProfiles = FileUtil.fileReader(new ClassPathResource(wsdl)); - HttpResponseBean httpResponseBean = RESTClient.getClientConnectionPool() - .postXML(requestUrl, getProfiles); - //如果是401的话 获取WWW-Authenticate 重新请求 - if (HttpResponseBean.isUnAuthorzied(httpResponseBean)) { - DigestBean digestBean = new DigestBean().getDigestBean(authType,requestOnvifBean, httpResponseBean.getFirstHeader(HEADERS_ONVIF_WWW_AUTHENTICATE).getValue()); - return digestBean.getToken(); - } - return null; - } - - - /** - * 获取Token - * @param requestOnvifBean - * @param auth - * @return - */ - public static List getProfileTokens(OnvifBean requestOnvifBean, String auth) { - //请求url - String requestUrl = OnvifBean.getRequestUrl(requestOnvifBean); - //参数 - // 读取GetProfiles.wsdl - String getProfiles = FileUtil.fileReader(new ClassPathResource("digest/GetProfiles.wsdl")); - HttpResponseBean httpResponseBean = RESTClient.getClientConnectionPool() - .postXML(requestUrl, getProfiles,auth); - if(httpResponseBean != null) { - String resultStr = httpResponseBean.getBody(); - if (HttpResponseBean.isSuccess(httpResponseBean) && StringUtils.hasLength(resultStr)) { - return AnalysisXml.analysisTokens(resultStr); - } - - } - return null; - } - - - - - /** - * 获取截图地址 - * @param profileToken token - * @param requestOnvifBean - * @return - */ - public static String getSnapshotUrl(String profileToken, OnvifAuthBean requestOnvifBean) { - String requestUrl = OnvifBean.getRequestUrl(requestOnvifBean); - //参数 - // 读取GetProfiles.wsdl - String snapshotUrlWsdl = FileUtil.fileReader(new ClassPathResource("digest/GetSnapshotUrl.wsdl")); - HttpResponseBean httpResponseBean = RESTClient.getClientConnectionPool() - .postXML(requestUrl, String.format(snapshotUrlWsdl,profileToken),requestOnvifBean.getAuth()); - String resultStr = httpResponseBean.getBody(); - if(StringUtils.hasLength(resultStr) && HttpResponseBean.isSuccess(httpResponseBean)) { - return AnalysisXml.analysisSnapshotUrl(resultStr); - } - return null; - } - //绝对位置转动球机 - public static boolean ptzCamera(String profileToken,OnvifAuthBean requestOnvifBean,String x,String y,String z){ - String requestUrl = OnvifBean.getRequestUrl(requestOnvifBean); - String snapshotUrlWsdl = FileUtil.fileReader(new ClassPathResource("digest/AbsoluteMove.wsdl")); - String wsdl = String.format(snapshotUrlWsdl,profileToken,x,y,z); - HttpResponseBean httpResponseBean = RESTClient.getClientConnectionPool() - .postXML(requestUrl, wsdl,requestOnvifBean.getAuth()); - String resultStr = httpResponseBean.getBody(); - if(StringUtils.hasLength(resultStr) && HttpResponseBean.isSuccess(httpResponseBean)) { - return true; - } - return false; - } - //获取球机当前位置 - public static BallheadPT getPtzStatus(String token,OnvifAuthBean requestOnvifBean){ - String requestUrl = OnvifBean.getRequestUrl(requestOnvifBean); - String snap = FileUtil.fileReader(new ClassPathResource("digest/GetStatus.wsdl")); - String wsdl = String.format(snap,token); - HttpResponseBean httpResponseBean = RESTClient.getClientConnectionPool() - .postXML(requestUrl, wsdl,requestOnvifBean.getAuth()); - String resultStr = httpResponseBean.getBody(); - if(StringUtils.hasLength(resultStr) && HttpResponseBean.isSuccess(httpResponseBean)) { - return AnalysisXml.getStatus(resultStr); - } - return null; - } - //获取所有预置点 - public static List getBallHeadPts(String profileToken,OnvifAuthBean requestOnvifBean){ - String requestUrl = OnvifBean.getRequestUrl(requestOnvifBean); - String snapshotUrlWsdl = FileUtil.fileReader(new ClassPathResource("digest/GetPresets.wsdl")); - String wsdl = String.format(snapshotUrlWsdl,profileToken); - HttpResponseBean httpResponseBean = RESTClient.getClientConnectionPool() - .postXML(requestUrl, wsdl,requestOnvifBean.getAuth()); - String resultStr = httpResponseBean.getBody(); - if(StringUtils.hasLength(resultStr) && HttpResponseBean.isSuccess(httpResponseBean)) { - return AnalysisXml.getBallheadPTs(resultStr); - } - return null; - } - - //前往指定预置点 - public static boolean gotoBallHeadPts(String profileToken,OnvifAuthBean requestOnvifBean,BallheadPT ballheadPT){ - String requestUrl = OnvifBean.getRequestUrl(requestOnvifBean); - String snapshotUrlWsdl = FileUtil.fileReader(new ClassPathResource("digest/GotoPreset.wsdl")); - String wsdl = String.format(snapshotUrlWsdl,profileToken,ballheadPT.getId()); - HttpResponseBean httpResponseBean = RESTClient.getClientConnectionPool() - .postXML(requestUrl, wsdl,requestOnvifBean.getAuth()); - String resultStr = httpResponseBean.getBody(); - if(StringUtils.hasLength(resultStr) && HttpResponseBean.isSuccess(httpResponseBean)) { - return true; - } - return false; - } -} diff --git a/device_udpclent/src/main/java/com/xr/device_udpclent/common/utils/RESTClient.java b/device_udpclent/src/main/java/com/xr/device_udpclent/common/utils/RESTClient.java deleted file mode 100644 index 70fa448..0000000 --- a/device_udpclent/src/main/java/com/xr/device_udpclent/common/utils/RESTClient.java +++ /dev/null @@ -1,281 +0,0 @@ -package com.xr.device_udpclent.common.utils; - -import com.xr.device_udpclent.common.config.HttpResponseBean; -import org.apache.http.*; -import org.apache.http.client.HttpRequestRetryHandler; -import org.apache.http.client.config.CookieSpecs; -import org.apache.http.client.config.RequestConfig; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.client.protocol.HttpClientContext; -import org.apache.http.conn.ssl.NoopHostnameVerifier; -import org.apache.http.conn.ssl.SSLConnectionSocketFactory; -import org.apache.http.entity.ContentType; -import org.apache.http.entity.StringEntity; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; -import org.apache.http.protocol.HttpContext; -import org.apache.http.ssl.SSLContextBuilder; -import org.apache.http.util.EntityUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.util.StringUtils; - -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLHandshakeException; -import java.io.IOException; -import java.net.ConnectException; -import java.util.Arrays; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - - -/** - * Http请求客户端 - * @author ChenYongHeng - * @since 2019/5/27 - */ -public class RESTClient { - - - private static Logger log = LoggerFactory.getLogger(RESTClient.class); - - - - private volatile static RESTClient HttpClientConnectionPool; - - private static final String USERAGENT = "SZ-JAVA"; - private static final String CHARSET = "UTF-8"; - - private static final int MAX_TOTAL_CONNECTIONS = 200; - private static final int MAX_ROUTE_CONNECTIONS = 100; - - - /** - * 连接时间 - */ - private static final int CONNECT_TIMEOUT = 5000; - /** - * 获取内容时间 - */ - private static final int SOCKET_TIMEOUT = 30000; - - private static PoolingHttpClientConnectionManager cm = null; - - - private static CloseableHttpClient HTTP_CLIENTS; - - /** - * 初始化连接池 - */ - static{ - try { - cm = new PoolingHttpClientConnectionManager(); - cm.setMaxTotal(MAX_TOTAL_CONNECTIONS); - // 默认设置为2 - cm.setDefaultMaxPerRoute(MAX_ROUTE_CONNECTIONS); - // 客户端请求的默认设置 - RequestConfig defaultRequestConfig = RequestConfig.custom() - .setSocketTimeout(SOCKET_TIMEOUT) - .setConnectTimeout(CONNECT_TIMEOUT) - .setConnectionRequestTimeout(CONNECT_TIMEOUT) - .setRedirectsEnabled(false) - .setCookieSpec(CookieSpecs.STANDARD_STRICT) - .build(); - - // 请求重试处理 - HttpRequestRetryHandler httpRequestRetryHandler = new HttpRequestRetryHandler() { - @Override - public boolean retryRequest(IOException exception, - int executionCount, HttpContext context) { - // 如果超过最大重试次数,那么就不要继续了 - if (executionCount >= 2) { - return false; - } - - // 如果服务器丢掉了连接,那么就重试 - if (exception instanceof NoHttpResponseException) { - return true; - } - // 不要重试SSL握手异常 - if (exception instanceof SSLHandshakeException) { - return false; - } - HttpRequest request = (HttpRequest) context.getAttribute(HttpClientContext.HTTP_REQUEST); - boolean idempotent = !(request instanceof HttpEntityEnclosingRequest); - // 如果请求被认为是幂等的,那么就重试 - if (idempotent) { - return true; - } - - return false; - } - - }; - // https 信任所有 - SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, (chain, authType) -> true).build(); - HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE; - SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext, hostnameVerifier); - - HTTP_CLIENTS = HttpClients.custom() - .setConnectionManager(cm) - .setDefaultRequestConfig(defaultRequestConfig) - .setRetryHandler(httpRequestRetryHandler) - //https - .setSSLSocketFactory(sslSocketFactory) - .build(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - - - - private RESTClient(){} - - /** - * 获取HttpClientConnectionPool对象,这是单例方法 - * - * @return - */ - public static RESTClient getClientConnectionPool() { - if (HttpClientConnectionPool == null) { - synchronized (RESTClient.class) { - if (HttpClientConnectionPool == null) { - HttpClientConnectionPool = new RESTClient(); - } - } - } - return HttpClientConnectionPool; - } - - - - - /** - * 一般情况下是AuthToken使用 - * @param url - * @param xmlFileName - * @return - */ - public HttpResponseBean postXML(String url, String xmlFileName){ - return postXML( url, xmlFileName,""); - } - - - - /** - * 一般情况下是DigestBean使用 - * @param url - * @param xmlFileName - * @param auth - * @return - */ - public HttpResponseBean postXML(String url,String xmlFileName,String auth){ - HttpPost httpPost = new HttpPost(url); - String seqNum = String.valueOf(System.currentTimeMillis()); - httpPost.setHeader(HttpHeaders.CONTENT_TYPE, "application/soap+xml; charset=utf-8"); - if(StringUtils.hasLength(xmlFileName))httpPost.setEntity(new StringEntity(xmlFileName, ContentType.APPLICATION_JSON)); - if(StringUtils.hasLength(auth)) httpPost.setHeader("Authorization",auth); - log.info(seqNum+">>> "+httpPost.toString()); - log.info(seqNum+"Body>>> " +xmlFileName); - return httpPost(httpPost,seqNum); - } - - /** - * Post方法封装,发送post请求,获取响应内容 - */ - public String fetchByPostMethod(String url, String jsonStr) { - String resultStr = null; - HttpPost httpPost = httpPostAddHeader(url, jsonStr); - String seqNum = String.valueOf(System.currentTimeMillis()); - log.info(seqNum + ">>> " + httpPost.toString()); - log.info(seqNum + "Body>>> " + jsonStr); - HttpResponse response; - try { - response = HTTP_CLIENTS.execute(httpPost); - HttpEntity entity = response.getEntity(); - resultStr = EntityUtils.toString(entity, CHARSET); - EntityUtils.consume(entity); - } catch (IOException ce) {// 服务器请求失败 - log.error(ce.getMessage()); - } finally { - httpPost.abort(); - } - log.info(seqNum + "<<< " + resultStr); - return resultStr; - } - - /** - * 添加头部信息 - * @param url - * @param jsonStr - * @return - */ - private HttpPost httpPostAddHeader(String url, String jsonStr){ - HttpPost httpPost = new HttpPost(url); - httpPost.setEntity(new StringEntity(jsonStr, ContentType.APPLICATION_JSON)); - httpPost.addHeader(HttpHeaders.USER_AGENT, USERAGENT); - httpPost.addHeader(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON.toString()); - return httpPost; - } - - - - - /** - * httppost - * @param httpPost - * @param seqNum - * @return - */ - private HttpResponseBean httpPost(HttpPost httpPost,String seqNum ) { - String resultStr = null; - HttpResponse response = null; - try{ - response = HTTP_CLIENTS.execute(httpPost); - int statusCode = response.getStatusLine().getStatusCode(); - if(statusCode == HttpStatus.SC_UNAUTHORIZED) { - //如果是401直接返回 - return new HttpResponseBean(null, Arrays.asList(response.getAllHeaders()),response.getStatusLine().getStatusCode()); - } - HttpEntity entity = response.getEntity(); - resultStr = EntityUtils.toString(entity,CHARSET); - EntityUtils.consume(entity); - }catch (ConnectException ce){// 服务器请求失败 - log.error("ConnectException fetchByPostMethod---->>>{}",ce.getMessage()); - } catch (IOException e) { - log.error("IOException fetchByPostMethod---->>>{}",e.getMessage()); - }finally { - httpPost.abort(); - } - log.info(seqNum+"<<< "+resultStr); - if(response != null) return new HttpResponseBean(resultStr, Arrays.asList(response.getAllHeaders()),response.getStatusLine().getStatusCode()); - return null; - } - - - - - /** - * 正则获取字符编码 - * @param content_type - * @return - */ - private static String getCharSetFromContentType(String content_type){ - String regex = "charset=\\s*(\\S*[^;])"; - Pattern pattern = Pattern.compile(regex,Pattern.DOTALL); - Matcher matcher = pattern.matcher(content_type); - if(matcher.find()){ - return matcher.group(1); - - }else{ - return null; - } - } - - - -} diff --git a/device_udpclent/src/main/resources/digest/AbsoluteMove.wsdl b/device_udpclent/src/main/resources/digest/AbsoluteMove.wsdl deleted file mode 100644 index 7bb64b3..0000000 --- a/device_udpclent/src/main/resources/digest/AbsoluteMove.wsdl +++ /dev/null @@ -1,12 +0,0 @@ - - - - - %s - - - - - - - \ No newline at end of file diff --git a/device_udpclent/src/main/resources/digest/GetDeviceInformation.wsdl b/device_udpclent/src/main/resources/digest/GetDeviceInformation.wsdl deleted file mode 100644 index 9b65996..0000000 --- a/device_udpclent/src/main/resources/digest/GetDeviceInformation.wsdl +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/device_udpclent/src/main/resources/digest/GetPTZ.wsdl b/device_udpclent/src/main/resources/digest/GetPTZ.wsdl deleted file mode 100644 index 5de3704..0000000 --- a/device_udpclent/src/main/resources/digest/GetPTZ.wsdl +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/device_udpclent/src/main/resources/digest/GetPresets.wsdl b/device_udpclent/src/main/resources/digest/GetPresets.wsdl deleted file mode 100644 index de30d8c..0000000 --- a/device_udpclent/src/main/resources/digest/GetPresets.wsdl +++ /dev/null @@ -1,8 +0,0 @@ - - - - - %s - - - \ No newline at end of file diff --git a/device_udpclent/src/main/resources/digest/GetProfiles.wsdl b/device_udpclent/src/main/resources/digest/GetProfiles.wsdl deleted file mode 100644 index 92dc2cd..0000000 --- a/device_udpclent/src/main/resources/digest/GetProfiles.wsdl +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/device_udpclent/src/main/resources/digest/GetSnapshotUrl.wsdl b/device_udpclent/src/main/resources/digest/GetSnapshotUrl.wsdl deleted file mode 100644 index 3b6f76a..0000000 --- a/device_udpclent/src/main/resources/digest/GetSnapshotUrl.wsdl +++ /dev/null @@ -1,8 +0,0 @@ - - - - - %s - - - \ No newline at end of file diff --git a/device_udpclent/src/main/resources/digest/GetStatus.wsdl b/device_udpclent/src/main/resources/digest/GetStatus.wsdl deleted file mode 100644 index 15f1e73..0000000 --- a/device_udpclent/src/main/resources/digest/GetStatus.wsdl +++ /dev/null @@ -1,8 +0,0 @@ - - - - - %s - - - \ No newline at end of file diff --git a/device_udpclent/src/main/resources/digest/GetStreamUri.wsdl b/device_udpclent/src/main/resources/digest/GetStreamUri.wsdl deleted file mode 100644 index b8fae91..0000000 --- a/device_udpclent/src/main/resources/digest/GetStreamUri.wsdl +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - %s - %s - %s - %s - - - - - - - - RTP-Unicast - - %s - - - %s - - - \ No newline at end of file diff --git a/device_udpclent/src/main/resources/digest/GotoPreset.wsdl b/device_udpclent/src/main/resources/digest/GotoPreset.wsdl deleted file mode 100644 index 330014e..0000000 --- a/device_udpclent/src/main/resources/digest/GotoPreset.wsdl +++ /dev/null @@ -1,9 +0,0 @@ - - - - - %s - %s - - - \ No newline at end of file