From 9f204e8842e1688858889a67b702d9e19bb18b15 Mon Sep 17 00:00:00 2001
From: xieb <vip_xiaobin810@163.com>
Date: Mon, 02 Dec 2024 10:55:08 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/jtdev' into jtdev
---
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/controller/NettyHttpService.java | 28 +
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/resources/application-test.yml | 25 +
skjcmanager/skjcmanager-service-api/pom.xml | 1
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/webInterface/controller/test.java | 11
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/resources/application-dev.yml | 25 +
skjcmanager/skjcmanager-service-api/skjcmanager-by-api/pom.xml | 18
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/utils/HttpResponseUtils.java | 68 +++
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/config/NettyHttpConfig.java | 22 +
skjcmanager/skjcmanager-service/skjcmanager-by/pom.xml | 132 ++++++
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.java | 2
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/HttpUploadFileHandler.java | 325 ++++++++++++++++
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/utils/ExceptionUtils.java | 18
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/service/impl/BaiyiPicServiceImpl.java | 25 +
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/HttpUploadFileInitialzer.java | 74 +++
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/service/BaiyiPicService.java | 11
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/entity/XfByPic.java | 39 +
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/ByApplication.java | 27 +
skjcmanager/skjcmanager-service/pom.xml | 5
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.xml | 10
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/HttpUploadFileServer.java | 62 +++
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/entity/BaiyiPicEntity.java | 47 ++
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProgressReportServiceImpl.java | 3
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/resources/application-prod.yml | 25 +
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/mapper/BaiyiPicMapper.xml | 31 +
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/utils/BeenUtils.java | 70 +++
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/mapper/BaiyiPicMapper.java | 13
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/utils/UriUtils.java | 55 ++
27 files changed, 1,172 insertions(+), 0 deletions(-)
diff --git a/skjcmanager/skjcmanager-service-api/pom.xml b/skjcmanager/skjcmanager-service-api/pom.xml
index 5f16c0d..08f2940 100644
--- a/skjcmanager/skjcmanager-service-api/pom.xml
+++ b/skjcmanager/skjcmanager-service-api/pom.xml
@@ -26,6 +26,7 @@
<module>skjcmanager-xxljob-api</module>
<module>skjcmanager-nky-api</module>
<module>skjcmanager-pwd-api</module>
+ <module>skjcmanager-by-api</module>
</modules>
<dependencies>
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-by-api/pom.xml b/skjcmanager/skjcmanager-service-api/skjcmanager-by-api/pom.xml
new file mode 100644
index 0000000..2725907
--- /dev/null
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-by-api/pom.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <artifactId>skjcmanager-service-api</artifactId>
+ <groupId>cn.gistack</groupId>
+ <version>3.0.1.RELEASE</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>skjcmanager-by-api</artifactId>
+ <name>${project.artifactId}</name>
+ <version>${bladex.project.version}</version>
+ <packaging>jar</packaging>
+
+
+</project>
diff --git a/skjcmanager/skjcmanager-service/pom.xml b/skjcmanager/skjcmanager-service/pom.xml
index 79db0e9..1cea00d 100644
--- a/skjcmanager/skjcmanager-service/pom.xml
+++ b/skjcmanager/skjcmanager-service/pom.xml
@@ -26,6 +26,7 @@
<module>skjcmanager-xxljob</module>
<module>skjcmanager-nky</module>
<module>skjcmanager-pwd</module>
+ <module>skjcmanager-by</module>
</modules>
<dependencies>
@@ -56,6 +57,10 @@
<artifactId>skjcmanager-scope-api</artifactId>
<version>3.0.1.RELEASE</version>
</dependency>
+ <dependency>
+ <groupId>org.springblade</groupId>
+ <artifactId>blade-core-cloud</artifactId>
+ </dependency>
</dependencies>
</project>
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-by/pom.xml b/skjcmanager/skjcmanager-service/skjcmanager-by/pom.xml
new file mode 100644
index 0000000..8ddbbea
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-by/pom.xml
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <artifactId>skjcmanager-service</artifactId>
+ <groupId>cn.gistack</groupId>
+ <version>3.0.1.RELEASE</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>skjcmanager-by</artifactId>
+ <name>${project.artifactId}</name>
+ <version>${bladex.project.version}</version>
+ <packaging>jar</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.springblade</groupId>
+ <artifactId>blade-core-boot</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springblade</groupId>
+ <artifactId>blade-starter-swagger</artifactId>
+ </dependency>
+ <!--hk Hikvision AI 安全认证库-->
+ <dependency>
+ <groupId>com.hikvision.ga</groupId>
+ <artifactId>artemis-http-client</artifactId>
+ <version>1.1.3</version>
+ </dependency>
+ <!--引入 sms 短信 sdk -->
+
+ <!--开启多数据源-->
+ <dependency>
+ <groupId>org.springblade</groupId>
+ <artifactId>blade-core-auto</artifactId>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>cn.gistack</groupId>
+ <artifactId>skjcmanager-by-api</artifactId>
+ <version>3.0.1.RELEASE</version>
+ </dependency>
+ <dependency>
+ <groupId>cn.gistack</groupId>
+ <artifactId>skjcmanager-flow-api</artifactId>
+ <version>3.0.1.RELEASE</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>cn.gistack</groupId>
+ <artifactId>skjcmanager-user-api</artifactId>
+ <version>3.0.1.RELEASE</version>
+ </dependency>
+ <dependency>
+ <groupId>cn.gistack</groupId>
+ <artifactId>skjcmanager-alerts-api</artifactId>
+ <version>3.0.1.RELEASE</version>
+ </dependency>
+ <dependency>
+ <groupId>cn.gistack</groupId>
+ <artifactId>skjcmanager-nky-api</artifactId>
+ <version>3.0.1.RELEASE</version>
+ </dependency>
+ <dependency>
+ <groupId>cn.gistack</groupId>
+ <artifactId>skjcmanager-pwd-api</artifactId>
+ <version>3.0.1.RELEASE</version>
+ </dependency>
+ <dependency>
+ <groupId>cn.gistack</groupId>
+ <artifactId>skjcmanager-system-api</artifactId>
+ <version>3.0.1.RELEASE</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springblade</groupId>
+ <artifactId>blade-starter-excel</artifactId>
+ </dependency>
+
+
+ <dependency>
+ <groupId>cn.gistack</groupId>
+ <artifactId>skjcmanager-resource-api</artifactId>
+ <version>3.0.1.RELEASE</version>
+ </dependency>
+ <dependency>
+ <groupId>cn.hutool</groupId>
+ <artifactId>hutool-all</artifactId>
+ <version>5.8.25</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-mock</artifactId>
+ <version>2.0.8</version>
+ </dependency>
+
+ <dependency>
+ <groupId>io.netty</groupId>
+ <artifactId>netty-all</artifactId>
+ <version>4.1.50.Final</version>
+ </dependency>
+
+
+
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>com.spotify</groupId>
+ <artifactId>dockerfile-maven-plugin</artifactId>
+ <configuration>
+ <username>${docker.username}</username>
+ <password>${docker.password}</password>
+ <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
+ <tag>${project.version}</tag>
+ <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+ <buildArgs>
+ <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
+ </buildArgs>
+ <skip>false</skip>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/ByApplication.java b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/ByApplication.java
new file mode 100644
index 0000000..5c58763
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/ByApplication.java
@@ -0,0 +1,27 @@
+package cn.gistack.by;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springblade.core.cloud.client.BladeCloudApplication;
+import org.springblade.core.launch.BladeApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.boot.web.client.RestTemplateBuilder;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.annotation.Bean;
+import org.springframework.web.client.RestTemplate;
+
+
+@BladeCloudApplication
+@EnableFeignClients({"cn.gistack"})
+@MapperScan({"org.springblade.**.mapper.**","cn.gistack.by.**.mapper.**"})
+public class ByApplication {
+ public static void main(String[] args) {
+ BladeApplication.run("blade-by", ByApplication.class, args);
+ }
+
+// @Bean
+// public RestTemplate restTemplate(RestTemplateBuilder builder){
+// return builder.build();
+// }
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/HttpUploadFileHandler.java b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/HttpUploadFileHandler.java
new file mode 100644
index 0000000..32f5896
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/HttpUploadFileHandler.java
@@ -0,0 +1,325 @@
+package cn.gistack.by.nettyUpload;
+
+
+import cn.gistack.by.nettyUpload.config.NettyHttpConfig;
+import cn.gistack.by.nettyUpload.utils.BeenUtils;
+import cn.gistack.by.nettyUpload.utils.HttpResponseUtils;
+import cn.gistack.by.nettyUpload.utils.UriUtils;
+import cn.gistack.by.nettyUpload.utils.ExceptionUtils;
+import cn.gistack.by.picUpload.entity.BaiyiPicEntity;
+import cn.gistack.by.picUpload.entity.XfByPic;
+import cn.gistack.by.picUpload.service.BaiyiPicService;
+import cn.gistack.resource.feign.IOssClient;
+import cn.hutool.core.date.DateUtil;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufUtil;
+import io.netty.buffer.Unpooled;
+import io.netty.channel.ChannelFutureListener;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+import io.netty.handler.codec.http.*;
+import io.netty.handler.codec.http.multipart.*;
+import io.netty.util.CharsetUtil;
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.*;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import org.springframework.mock.web.MockMultipartFile;
+import org.springframework.web.multipart.MultipartFile;
+
+
+
+import static cn.gistack.by.nettyUpload.utils.ExceptionUtils.getStackString;
+
+/**
+ * 文件上传处理类
+ * @author chenhaijian
+ * @date 2020-05-21 14:45
+ */
+@Slf4j
+public class HttpUploadFileHandler extends SimpleChannelInboundHandler<FullHttpRequest> {
+
+ // http请求中可选参数
+ private static final String FILENAME_PARAM = "filename";
+ // http请求中必选的参数
+ private static final String FILE_EXTNAME_PARAM = "fileextname";
+
+
+ private static final String UPLOAD_DATA_URL = "/termite/syncDeviceState";
+ private static final String UPLOAD_FILE_URL = "/termite/termiteDataup";
+ private NettyHttpConfig nettyHttpConfig;
+
+ private BaiyiPicService baiyiPicService;
+
+ /**
+ * 对象存储构建类
+ */
+
+ private IOssClient iOssClient;
+
+ static {
+ // should delete file on exit (in normal exit)
+ DiskFileUpload.deleteOnExitTemporaryFile = true;
+ DiskFileUpload.baseDirectory = null; // system temp directory
+ DiskAttribute.deleteOnExitTemporaryFile = true; // should delete file on
+ // exit (in normal exit)
+ DiskAttribute.baseDirectory = null; // system temp directory
+
+
+ }
+
+ public HttpUploadFileHandler(NettyHttpConfig nettyHttpConfig, IOssClient iOssClient,BaiyiPicService baiyiPicService) {
+ this.nettyHttpConfig = nettyHttpConfig;
+ this.iOssClient = iOssClient;
+ this.baiyiPicService = baiyiPicService;
+
+ }
+
+
+ protected void channelRead0(ChannelHandlerContext ctx, FullHttpRequest fullRequest) throws Exception {
+ // Authorization验证
+ boolean isRequestValid = isValidHttpRequest(ctx, fullRequest);
+ if (!isRequestValid) {
+ HttpResponseUtils.sendResponseJson2(ctx, HttpResponseStatus.BAD_REQUEST, "验证失败",null);
+ return ;
+ }
+ // 请求路径验证
+ String urlyz = urlyz(ctx, fullRequest);
+ if (UPLOAD_FILE_URL.equals(urlyz)) { //传图片
+ HttpPostMultipartRequestDecoder test = new HttpPostMultipartRequestDecoder(fullRequest);
+ List<InterfaceHttpData> bodyHttpDatas = test.getBodyHttpDatas();
+ XfByPic xfByPic = new XfByPic();
+
+ for (InterfaceHttpData item : bodyHttpDatas ) {
+ if ( item instanceof Attribute){
+ Attribute attribute = (Attribute)item;
+ System.out.println("getName:::"+attribute.getName());
+ System.out.println("getValue:::"+attribute.getValue());
+ String value = attribute.getValue();
+ switch(attribute.getName()){
+ case "mnNo":
+ xfByPic.setMnNo(value);
+ break;
+ case "order":
+
+ xfByPic.setOrder(value);
+ break;
+ case "sn":
+ xfByPic.setSn(value);
+ break;
+ case "ap":
+ xfByPic.setAp(value);
+ break;
+ case "camera":
+ xfByPic.setCamera(value);
+ break;
+ case "hardware":
+ xfByPic.setHardware(value);
+ break;
+ case "rssi":
+ xfByPic.setRssi(value);
+ break;
+ case "software":
+ xfByPic.setSoftware(value);
+ break;
+ case "temperature":
+ xfByPic.setTemperature(value);
+ break;
+ case "voltage":
+ xfByPic.setVoltage(value);
+ break;
+ }
+
+
+ } else if (item instanceof FileUpload) {
+
+ FileUpload file = (FileUpload)item;
+ String filename = file.getFilename();
+
+ ByteArrayInputStream stream = new ByteArrayInputStream(ByteBufUtil.getBytes(file.getByteBuf()));
+ MockMultipartFile multipartFile
+ = new MockMultipartFile("11", filename, "application/octet-stream", stream);
+
+ String picurl = iOssClient.uploadFile(filename, multipartFile);
+ log.info("图片上传地址::"+picurl);
+ xfByPic.setImageurl(picurl);
+ }
+ }
+ xfByPic.setCreatedAt(new Date());
+ // 保存入库xfByPic
+ baiyiPicService.inserXfPicUrl(xfByPic);
+
+
+
+ } else if(UPLOAD_DATA_URL.equals(urlyz)) { //传数据
+ HttpPostMultipartRequestDecoder test = new HttpPostMultipartRequestDecoder(fullRequest);
+ List<InterfaceHttpData> bodyHttpDatas = test.getBodyHttpDatas();
+ for (InterfaceHttpData item : bodyHttpDatas ) {
+ if ( item instanceof Attribute){
+// FileUpload file = (FileUpload)item;
+// String filename = file.getFilename();
+// ByteArrayInputStream stream = new ByteArrayInputStream(ByteBufUtil.getBytes(file.getByteBuf()));
+// MockMultipartFile multipartFile
+// = new MockMultipartFile("11", filename, "application/octet-stream", stream);
+// String picurl = iOssClient.uploadFile(filename, multipartFile);
+// log.info("图片上传地址::"+picurl);
+
+ } else if (item instanceof FileUpload) {
+ System.out.println("Attribute:::"+item.getName());
+
+
+ }
+ }
+
+ } else {
+ HttpResponseUtils.sendResponseJson2(ctx, HttpResponseStatus.BAD_REQUEST, "验证失败",null);
+ return ;
+ }
+
+ HttpResponseUtils.sendResponseJson(ctx, HttpResponseStatus.OK, "上传成功");
+ }
+
+ // 请求路径验证
+ public String urlyz(ChannelHandlerContext ctx, FullHttpRequest request) {
+ try {
+
+ URI uri = UriUtils.getURI(request);
+ System.err.println("uri.getPath()::::"+uri.getPath());
+ System.err.println(""+uri.getPath());
+
+ if (uri.getPath().startsWith(UPLOAD_DATA_URL)) {
+ return UPLOAD_DATA_URL;
+ } else if (uri.getPath().startsWith(UPLOAD_FILE_URL)) {
+ return UPLOAD_FILE_URL;
+ }
+ } catch (Exception exception) {
+ exception.printStackTrace();
+ log.error(getStackString(exception));
+ return null;
+ }
+ return null;
+ }
+
+
+
+ public static MultipartFile convert(File file) throws IOException {
+
+ FileInputStream input = new FileInputStream(file);
+ MultipartFile multipartFile = new MockMultipartFile("file",
+ file.getName(), "application/octet-stream", input);
+
+ return multipartFile;
+ }
+
+ private String parseFilePath(FullHttpRequest fullRequest) throws URISyntaxException {
+ String dirPath = this.nettyHttpConfig.getFileSaveRootPath();
+ String fileName = this.parseFileName(fullRequest);
+
+ return dirPath + File.separator + fileName;
+ }
+
+ private RandomAccessFile getSaveFile(String filePath) {
+ try {
+ RandomAccessFile file = new RandomAccessFile(filePath, "rw");
+ return file;
+ } catch (Exception exception) {
+ log.error(getStackString(exception));
+ return null;
+ }
+ }
+
+ private boolean isValidHttpRequest(ChannelHandlerContext ctx, FullHttpRequest request) {
+ try {
+ URI uri = UriUtils.getURI(request);
+// log.info(uri.getPath());
+ // authorization效验
+ String authorization = request.headers().get("Authorization");
+ if(!this.nettyHttpConfig.getAuthorization().equals(authorization)) {
+ log.warn("Authorization校验失败!!");
+ // 校验不通过
+ HttpResponseUtils.sendResponseJson(ctx, HttpResponseStatus.UNAUTHORIZED, HttpResponseStatus.UNAUTHORIZED.toString());
+ // 校验不通过
+ return false;
+ }
+
+ // 密码校验
+// boolean authFlag = auth(ctx, uri);
+// if (!authFlag) {
+// // 校验不通过
+// HttpResponseUtils.sendResponseJson(ctx, HttpResponseStatus.UNAUTHORIZED, HttpResponseStatus.UNAUTHORIZED.toString());
+// // 校验不通过
+// return false;
+// }
+
+ // uri 路径校验
+// if (!uri.getPath().startsWith(UPLOAD_FILE_URL)) {
+// HttpResponseUtils.sendResponseJson(ctx, HttpResponseStatus.BAD_REQUEST,"the url must starts with /postfile");
+// return false;
+// }
+
+ return true;
+ } catch (Exception exception) {
+ exception.printStackTrace();
+ log.error(getStackString(exception));
+ return false;
+ }
+ }
+
+ private String parseFileName(FullHttpRequest fullRequest) throws URISyntaxException {
+ URI uri = UriUtils.getURI(fullRequest);
+ Map<String, String> queryParams = UriUtils.getQueryParams(uri);
+ try {
+ if (queryParams.containsKey(FILENAME_PARAM)) {
+ return queryParams.get(FILENAME_PARAM);
+ } else {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY_MM_dd_HH_MM_SS_sss");
+ String filePureName = dateFormat.format(new Date());
+ return filePureName + "." + queryParams.get(FILE_EXTNAME_PARAM);
+ }
+ } catch (Exception exception) {
+ log.error(ExceptionUtils.getStackString(exception));
+ return String.valueOf(System.currentTimeMillis());
+ }
+ }
+
+ private void writeResponse(ChannelHandlerContext ctx, String context) {
+ ByteBuf buf = Unpooled.copiedBuffer(context, CharsetUtil.UTF_8);
+ FullHttpResponse response = new DefaultFullHttpResponse(
+ HttpVersion.HTTP_1_1, HttpResponseStatus.OK, buf);
+ response.headers().set(HttpHeaderNames.CONTENT_TYPE, "text/html;charset=utf-8");
+ //设置短连接 addListener 写完马上关闭连接
+ ctx.channel().writeAndFlush(response).addListener(ChannelFutureListener.CLOSE);
+ }
+
+ /**
+ * 进行请求的密码校验
+ * @param ctx
+ * @param uri
+ * @return
+ */
+ private boolean auth(ChannelHandlerContext ctx, URI uri) {
+ Map<String, String> queryParams = UriUtils.getQueryParams(uri);
+ String passwd = queryParams.get("passwd");
+ if (this.nettyHttpConfig.getFileUpPasswd().equals(passwd)) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public void channelInactive(ChannelHandlerContext ctx) {
+ ctx.close();
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+ log.error(getStackString(cause));
+ cause.printStackTrace();
+ ctx.close();
+ }
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/HttpUploadFileInitialzer.java b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/HttpUploadFileInitialzer.java
new file mode 100644
index 0000000..418a949
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/HttpUploadFileInitialzer.java
@@ -0,0 +1,74 @@
+package cn.gistack.by.nettyUpload;
+
+
+import cn.gistack.by.nettyUpload.config.NettyHttpConfig;
+import cn.gistack.by.picUpload.service.BaiyiPicService;
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.handler.codec.http.HttpContentCompressor;
+import io.netty.handler.codec.http.HttpObjectAggregator;
+import io.netty.handler.codec.http.HttpRequestDecoder;
+import io.netty.handler.codec.http.HttpResponseEncoder;
+import io.netty.util.concurrent.DefaultEventExecutorGroup;
+import io.netty.util.concurrent.EventExecutorGroup;
+import io.netty.util.concurrent.RejectedExecutionHandler;
+import io.netty.util.concurrent.SingleThreadEventExecutor;
+import lombok.extern.slf4j.Slf4j;
+import cn.gistack.resource.feign.IOssClient;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.concurrent.ThreadFactory;
+
+/**
+ *
+ * @author chenhaijian
+ * @date 2020-05-21 14:42
+ */
+@Slf4j
+public class HttpUploadFileInitialzer extends ChannelInitializer<SocketChannel> {
+ /**
+ * 所有的工作线程的线程池。
+ */
+ private static EventExecutorGroup executorGroup = null;
+
+ private NettyHttpConfig nettyHttpConfig;
+
+
+ private IOssClient iOssClient;
+
+ private BaiyiPicService baiyiPicService;
+
+
+ public HttpUploadFileInitialzer(NettyHttpConfig nettyHttpConfig,IOssClient iOssClient,BaiyiPicService baiyiPicService) {
+ this.nettyHttpConfig = nettyHttpConfig;
+ this.iOssClient = iOssClient;
+ this.baiyiPicService = baiyiPicService;
+
+ if (executorGroup == null) {
+ ThreadFactory threadFactory = (new ThreadFactoryBuilder()).setNameFormat("netty-business-%d")
+ .setDaemon(false).build();
+ executorGroup = new DefaultEventExecutorGroup(nettyHttpConfig.getBusinessThreadsCoreNum(), threadFactory,
+ nettyHttpConfig.getBusinessThreadsQueueCapacity(),
+ new RejectedExecutionHandler() {
+ @Override
+ public void rejected(Runnable runnable, SingleThreadEventExecutor singleThreadEventExecutor) {
+ log.error("Server will discard the runnale {}.", runnable.toString());
+ singleThreadEventExecutor.shutdownGracefully();
+ }
+ });
+ }
+ }
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ pipeline.addLast("decoder", new HttpRequestDecoder());
+ pipeline.addLast("encoder", new HttpResponseEncoder());
+ pipeline.addLast(new HttpContentCompressor());
+ // 聚合器,负责将http聚合成完整的消息,而不是原始的多个部分
+ pipeline.addLast(new HttpObjectAggregator(nettyHttpConfig.getMaxContentLength()));
+ pipeline.addLast(executorGroup, "httpUploadFileHandler", new HttpUploadFileHandler(nettyHttpConfig,iOssClient,baiyiPicService));
+ }
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/HttpUploadFileServer.java b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/HttpUploadFileServer.java
new file mode 100644
index 0000000..42f7912
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/HttpUploadFileServer.java
@@ -0,0 +1,62 @@
+package cn.gistack.by.nettyUpload;
+
+
+import cn.gistack.by.nettyUpload.config.NettyHttpConfig;
+import cn.gistack.by.nettyUpload.utils.ExceptionUtils;
+import cn.gistack.by.picUpload.service.BaiyiPicService;
+import cn.gistack.resource.feign.IOssClient;
+import io.netty.bootstrap.ServerBootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelOption;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioServerSocketChannel;
+import io.netty.handler.logging.LogLevel;
+import io.netty.handler.logging.LoggingHandler;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * netty实现http协议上传文件 服务端
+ *
+ * @author Kai.Shan
+ * @date 2024-11-13 14:33
+ */
+@Slf4j
+public class HttpUploadFileServer implements Runnable {
+ private NettyHttpConfig nettyHttpConfig;
+
+ private IOssClient iOssClient;
+
+ private BaiyiPicService baiyiPicService;
+
+ public HttpUploadFileServer(NettyHttpConfig nettyHttpConfig, IOssClient iOssClient ,BaiyiPicService baiyiPicService) {
+ this.nettyHttpConfig = nettyHttpConfig;
+ this.iOssClient = iOssClient;
+ this.baiyiPicService = baiyiPicService;
+ }
+
+ public void run() {
+ NioEventLoopGroup bossGroup = new NioEventLoopGroup(this.nettyHttpConfig.getBossGroupThreads());
+ NioEventLoopGroup workerGroup = new NioEventLoopGroup(this.nettyHttpConfig.getWorkerGroupThreads());
+
+ try {
+ ServerBootstrap bootstrap = new ServerBootstrap();
+ bootstrap.group(bossGroup, workerGroup)
+ .channel(NioServerSocketChannel.class)
+ .option(ChannelOption.SO_BACKLOG, nettyHttpConfig.getNettySoBacklog())
+ .handler(new LoggingHandler(LogLevel.INFO))
+ .childHandler(new HttpUploadFileInitialzer(nettyHttpConfig,iOssClient,baiyiPicService));
+
+ Channel channel = bootstrap.bind(this.nettyHttpConfig.getServerSocketIp(),this.nettyHttpConfig.getServerSocketPort())
+ .sync().channel();
+ System.out.println("upload server started ....");
+
+ channel.closeFuture().sync();
+ } catch (Exception exception) {
+ exception.printStackTrace();
+ log.error(ExceptionUtils.getStackString(exception));
+ } finally {
+ bossGroup.shutdownGracefully();
+ workerGroup.shutdownGracefully();
+ }
+ }
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/config/NettyHttpConfig.java b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/config/NettyHttpConfig.java
new file mode 100644
index 0000000..39df832
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/config/NettyHttpConfig.java
@@ -0,0 +1,22 @@
+package cn.gistack.by.nettyUpload.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@ConfigurationProperties(prefix = "netty.http")
+@Component
+@Data
+public class NettyHttpConfig {
+ private String serverSocketIp;
+ private int serverSocketPort;
+ private int bossGroupThreads;
+ private int workerGroupThreads;
+ private int maxContentLength;
+ private int nettySoBacklog;
+ private String fileSaveRootPath;
+ private String fileUpPasswd;
+ private int businessThreadsQueueCapacity;
+ private int businessThreadsCoreNum;
+ private String authorization;
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/controller/NettyHttpService.java b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/controller/NettyHttpService.java
new file mode 100644
index 0000000..f709ceb
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/controller/NettyHttpService.java
@@ -0,0 +1,28 @@
+package cn.gistack.by.nettyUpload.controller;
+
+import cn.gistack.by.nettyUpload.HttpUploadFileServer;
+import cn.gistack.by.nettyUpload.config.NettyHttpConfig;
+import cn.gistack.by.picUpload.service.BaiyiPicService;
+import cn.gistack.resource.feign.IOssClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.PostConstruct;
+
+//@Component
+@RestController
+public class NettyHttpService {
+ @Autowired
+ private NettyHttpConfig nettyHttpConfig;
+
+ @Autowired
+ private IOssClient ossClient;
+
+ @Autowired
+ private BaiyiPicService baiyiPicService;
+
+ @PostConstruct
+ public void postConstructService() {
+ new Thread(new HttpUploadFileServer(nettyHttpConfig,ossClient,baiyiPicService)).start();
+ }
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/utils/BeenUtils.java b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/utils/BeenUtils.java
new file mode 100644
index 0000000..57f6897
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/utils/BeenUtils.java
@@ -0,0 +1,70 @@
+package cn.gistack.by.nettyUpload.utils;
+
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+@Component
+public class BeenUtils implements ApplicationContextAware {
+ /**
+ * 上下文对象实例
+ */
+ private static ApplicationContext applicationContext;
+
+ @Override
+ public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+ BeenUtils.applicationContext = applicationContext;
+ }
+
+ /**
+ * 获取applicationContext
+ *
+ * @return
+ */
+ public static ApplicationContext getApplicationContext() {
+ return applicationContext;
+ }
+
+ /**
+ * 通过name获取 Bean.
+ *
+ * @param name
+ * @return
+ */
+ public static Object getBean(String name) {
+ if (applicationContext == null){
+ throw new RuntimeException("applicationContext注入失败");
+ }
+ return getApplicationContext().getBean(name);
+ }
+
+ /**
+ * 通过class获取Bean.
+ *
+ * @param clazz
+ * @param <T>
+ * @return
+ */
+ public static <T> T getBean(Class<T> clazz) {
+ if (applicationContext == null){
+ throw new RuntimeException("applicationContext注入失败");
+ }
+ return getApplicationContext().getBean(clazz);
+ }
+
+ /**
+ * 通过name,以及Clazz返回指定的Bean
+ *
+ * @param name
+ * @param clazz
+ * @param <T>
+ * @return
+ */
+ public static <T> T getBean(String name, Class<T> clazz) {
+ if (applicationContext == null){
+ throw new RuntimeException("applicationContext注入失败");
+ }
+ return getApplicationContext().getBean(name, clazz);
+ }
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/utils/ExceptionUtils.java b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/utils/ExceptionUtils.java
new file mode 100644
index 0000000..66a4f8e
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/utils/ExceptionUtils.java
@@ -0,0 +1,18 @@
+package cn.gistack.by.nettyUpload.utils;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+public class ExceptionUtils {
+ /**
+ * 获取异常堆栈字符串。
+ *
+ * @param t {@link Throwable}
+ * @return
+ */
+ public static String getStackString(Throwable t) {
+ StringWriter sw = new StringWriter();
+ t.printStackTrace(new PrintWriter(sw, true));
+ return sw.getBuffer().toString();
+ }
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/utils/HttpResponseUtils.java b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/utils/HttpResponseUtils.java
new file mode 100644
index 0000000..4962f86
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/utils/HttpResponseUtils.java
@@ -0,0 +1,68 @@
+package cn.gistack.by.nettyUpload.utils;
+
+import com.alibaba.fastjson.JSONObject;
+import io.netty.buffer.Unpooled;
+import io.netty.channel.ChannelFutureListener;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.codec.http.DefaultFullHttpResponse;
+import io.netty.handler.codec.http.FullHttpResponse;
+import io.netty.handler.codec.http.HttpResponseStatus;
+import io.netty.util.CharsetUtil;
+
+import java.util.Map;
+
+import static io.netty.handler.codec.http.HttpHeaders.Names.CONTENT_TYPE;
+import static io.netty.handler.codec.http.HttpVersion.HTTP_1_1;
+
+/**
+ * response工具
+ * @author chenhaijian
+ * @date 2020-05-21 17:11
+ */
+public class HttpResponseUtils {
+
+ /**
+ * 向客户端发送消息提示
+ * @param ctx
+ * @param status
+ */
+ public static void sendError(ChannelHandlerContext ctx, HttpResponseStatus status) {
+ FullHttpResponse response = new DefaultFullHttpResponse(
+ HTTP_1_1, status, Unpooled.copiedBuffer("Failure: " + status.toString() + "\r\n", CharsetUtil.UTF_8));
+ response.headers().set(CONTENT_TYPE, "text/plain; charset=UTF-8");
+
+ ctx.writeAndFlush(response).addListener(ChannelFutureListener.CLOSE);
+ }
+
+ /**
+ * 向客户端发送消息提示
+ * @param ctx
+ * @param status
+ * @param message
+ */
+ public static void sendResponseJson(ChannelHandlerContext ctx, HttpResponseStatus status, String message) {
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put("code", status.code());
+ jsonObject.put("msg", message);
+
+ FullHttpResponse response = new DefaultFullHttpResponse(
+ HTTP_1_1, status, Unpooled.copiedBuffer(jsonObject.toJSONString(), CharsetUtil.UTF_8));
+ response.headers().set(CONTENT_TYPE, "application/json; charset=UTF-8");
+
+ ctx.writeAndFlush(response).addListener(ChannelFutureListener.CLOSE);
+ }
+
+ public static void sendResponseJson2(ChannelHandlerContext ctx, HttpResponseStatus status,
+ String message,Map<String, Object> map) {
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put("code", status.code());
+ jsonObject.put("msg", message);
+ jsonObject.put("data", map);
+
+ FullHttpResponse response = new DefaultFullHttpResponse(
+ HTTP_1_1, status, Unpooled.copiedBuffer(jsonObject.toJSONString(), CharsetUtil.UTF_8));
+ response.headers().set(CONTENT_TYPE, "application/json; charset=UTF-8");
+
+ ctx.writeAndFlush(response).addListener(ChannelFutureListener.CLOSE);
+ }
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/utils/UriUtils.java b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/utils/UriUtils.java
new file mode 100644
index 0000000..ba28cfc
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/utils/UriUtils.java
@@ -0,0 +1,55 @@
+package cn.gistack.by.nettyUpload.utils;
+
+import io.netty.handler.codec.http.HttpRequest;
+import org.apache.commons.lang3.StringUtils;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * URI 工具类
+ * @author chenhaijian
+ * @date 2020-05-21 16:43
+ */
+public class UriUtils {
+
+ /**
+ * 获取HttpRequest中的uri封装成URI对象
+ * @param httpRequest
+ * @return
+ * @throws URISyntaxException
+ */
+ public static URI getURI(HttpRequest httpRequest) throws URISyntaxException {
+ return new URI(httpRequest.uri());
+ }
+
+ /**
+ * 获取URI对象中的参数
+ * @param uri
+ * @return
+ */
+ public static Map<String, String> getQueryParams(URI uri) {
+ Map<String, String> params = new HashMap<>();
+ String query = uri.getQuery();
+ if (StringUtils.isNotBlank(query)) {
+ String[] paramsItems = query.split("&");
+ for (String item : paramsItems) {
+ String[] kv = item.split("=");
+ params.put(kv[0], kv[1]);
+ }
+ }
+ return params;
+ }
+
+ /**
+ * 获取HttpRequest中的 query params
+ * @param httpRequest
+ * @return
+ */
+ public static Map<String, String> getQueryParams(HttpRequest httpRequest) throws URISyntaxException {
+ URI uri = getURI(httpRequest);
+ return getQueryParams(uri);
+ }
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/entity/BaiyiPicEntity.java b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/entity/BaiyiPicEntity.java
new file mode 100644
index 0000000..1c7ebeb
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/entity/BaiyiPicEntity.java
@@ -0,0 +1,47 @@
+package cn.gistack.by.picUpload.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.util.Date;
+
+@Data
+public class BaiyiPicEntity {
+ @NotBlank(message = "设备编码不能为空")
+ @ApiModelProperty("设备编码")
+ private String mnNo;
+ @NotBlank(message = "白蚁图片地址不能为空")
+ @ApiModelProperty("白蚁图片地址")
+ private String picUrl;
+
+ @ApiModelProperty("白蚁图片状态")
+ private Integer picStatus;
+
+ @NotBlank(message = "白蚁设备安装的点位顺序不能为空")
+ @ApiModelProperty("白蚁设备安装的点位顺序")
+ private String order;
+ @ApiModelProperty("创建时间")
+ private Date createdAt;
+ @NotBlank(message = "观测时间不能为空")
+ @ApiModelProperty("观测时间")
+ private String obTime;
+ @NotBlank(message = "观测时间2不能为空")
+ @ApiModelProperty("观测时间2")
+ private Date obDate;
+ @NotBlank(message = "中心站地址不能为空")
+ @ApiModelProperty("中心站地址")
+ private Integer stationId;
+ @NotBlank(message = "站点名称不能为空")
+ @ApiModelProperty("站点名称")
+ private String stationName;
+ @NotBlank(message = "设备id不能为空")
+ @ApiModelProperty("设备id")
+ private Integer deviceId;
+ @NotBlank(message = "设备名称不能为空")
+ @ApiModelProperty("设备名称")
+ private String deviceName;
+ @NotBlank(message = "接收类型不能为空")
+ @ApiModelProperty("接收类型")
+ private Integer receiveType;
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/entity/XfByPic.java b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/entity/XfByPic.java
new file mode 100644
index 0000000..b2601db
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/entity/XfByPic.java
@@ -0,0 +1,39 @@
+package cn.gistack.by.picUpload.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.util.Date;
+
+@Data
+public class XfByPic {
+
+ @NotBlank(message = "设备编码不能为空")
+ @ApiModelProperty("RTU编码")
+ private String mnNo;
+
+ @NotBlank(message = "白蚁设备安装的点位顺序不能为空")
+ @ApiModelProperty("白蚁设备安装的点位顺序")
+ private String order;
+
+ @ApiModelProperty("白蚁设备编号顺序")
+ private String sn;
+
+ private String ap;
+ private String camera;
+ private String hardware;
+ private String imageurl;
+ private String rssi;
+ private String software;
+ private String temperature;
+ private String voltage;
+
+ @ApiModelProperty("创建时间")
+ private Date createdAt;
+
+
+
+
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/mapper/BaiyiPicMapper.java b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/mapper/BaiyiPicMapper.java
new file mode 100644
index 0000000..b5b0d55
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/mapper/BaiyiPicMapper.java
@@ -0,0 +1,13 @@
+package cn.gistack.by.picUpload.mapper;
+
+import cn.gistack.by.picUpload.entity.BaiyiPicEntity;
+import cn.gistack.by.picUpload.entity.XfByPic;
+import org.apache.ibatis.annotations.Param;
+
+public interface BaiyiPicMapper {
+
+ void inserpicData(@Param("item") BaiyiPicEntity entity);
+
+
+ void inserXfPicUrl(@Param("item") XfByPic entity);
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/mapper/BaiyiPicMapper.xml b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/mapper/BaiyiPicMapper.xml
new file mode 100644
index 0000000..2cf0ace
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/mapper/BaiyiPicMapper.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.gistack.by.picUpload.mapper.BaiyiPicMapper">
+
+
+ <insert id="inserpicData" >
+ insert into
+ SJZT_ODS."water_data_termites_pic"
+ ("mn_no", "pic_url", "pic_status", "order", "created_at", "ob_time",
+ "ob_date","station_id", "station_name", "device_id", "device_name", "receive_type")
+ VALUE
+ (
+ #{item.mnNo},#{item.picUrl},#{item.picStatus},#{item.order},#{item.createdAt},#{item.obTime},#{item.obDate},
+ #{item.stationId},#{item.stationName},#{item.deviceId},#{item.deviceName},#{item.receiveType}
+ )
+
+ </insert>
+
+ <insert id="inserXfPicUrl" >
+ insert into
+ SJZT_ODS."water_data_termites_url_xf"
+ ("mn_no", "order", "sn", "ap",
+ "camera","hardware", "imageurl", "rssi", "software", "temperature" , "voltage" ,"created_at")
+ VALUE
+ (
+ #{item.mnNo},#{item.order},#{item.sn},#{item.ap},#{item.camera},#{item.hardware},#{item.imageurl},
+ #{item.rssi},#{item.software},#{item.temperature},#{item.voltage},#{item.createdAt}
+ )
+
+ </insert>
+</mapper>
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/service/BaiyiPicService.java b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/service/BaiyiPicService.java
new file mode 100644
index 0000000..399fbd4
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/service/BaiyiPicService.java
@@ -0,0 +1,11 @@
+package cn.gistack.by.picUpload.service;
+
+
+import cn.gistack.by.picUpload.entity.BaiyiPicEntity;
+import cn.gistack.by.picUpload.entity.XfByPic;
+
+public interface BaiyiPicService {
+ void inserpicData(BaiyiPicEntity entity);
+
+ void inserXfPicUrl(XfByPic entity);
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/service/impl/BaiyiPicServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/service/impl/BaiyiPicServiceImpl.java
new file mode 100644
index 0000000..c68f7c9
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/service/impl/BaiyiPicServiceImpl.java
@@ -0,0 +1,25 @@
+package cn.gistack.by.picUpload.service.impl;
+
+import cn.gistack.by.picUpload.entity.BaiyiPicEntity;
+import cn.gistack.by.picUpload.entity.XfByPic;
+import cn.gistack.by.picUpload.mapper.BaiyiPicMapper;
+import cn.gistack.by.picUpload.service.BaiyiPicService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class BaiyiPicServiceImpl implements BaiyiPicService {
+
+ @Autowired
+ private BaiyiPicMapper baiyiPicMapper;
+
+ @Override
+ public void inserpicData(BaiyiPicEntity entity) {
+ baiyiPicMapper.inserpicData(entity);
+ }
+
+ @Override
+ public void inserXfPicUrl(XfByPic entity) {
+ baiyiPicMapper.inserXfPicUrl(entity);
+ }
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/webInterface/controller/test.java b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/webInterface/controller/test.java
new file mode 100644
index 0000000..66c4c02
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/webInterface/controller/test.java
@@ -0,0 +1,11 @@
+package cn.gistack.by.webInterface.controller;
+
+import cn.gistack.by.nettyUpload.config.NettyHttpConfig;
+import cn.gistack.resource.feign.IOssClient;
+
+public class test {
+
+ private NettyHttpConfig nettyHttpConfig;
+
+ private IOssClient iOssClient;
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/resources/application-dev.yml b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/resources/application-dev.yml
new file mode 100644
index 0000000..abc3184
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/resources/application-dev.yml
@@ -0,0 +1,25 @@
+#服务器端口
+server:
+ port: 8190
+
+#数据源配置
+spring:
+ datasource:
+ url: ${blade.datasource.dev.ztznwh.url}
+ username: ${blade.datasource.dev.ztznwh.username}
+ password: ${blade.datasource.dev.ztznwh.password}
+
+#netty配置
+netty:
+ http:
+ server-socket-ip: 127.0.0.1
+ server-socket-port: 8003
+ worker_group_threads: 32
+ boss_group_threads: 0
+ netty_so_backlog: 4096
+ max_content_length: 10485760
+ file_save_root_path: C:/Users/kelu/Desktop/111
+ file_up_passwd: fireinthehole
+ business_threads_queue_capacity: 10000
+ business_threads_core_num: 200
+ authorization: eyJraWQiOiJrMSIsImFsZyI6IlJTMjU2In0.eyJpc3MiOiJhZG1pbkBnaXN1bmkuY29tIiwiYXVkIjoidXVtcyIsImp0aSI6IjYwMGZiYmMyLWE1NDgtNGZmNC04ZGNhLTZkNTdkZjY1OTYxNyIsImlhdCI6MTcxNzcyNDA1MywibmJmIjoxNzE3NzIzNDUzLCJzdWIiOiJzdXBlciIsImV4cCI6MTcxNzc4NTQ5Mywia2V5IjoiMmQ5ZWY2MTNlYTkxNDc4MDhlOGZiYTMxYWNlOTE0NmEiLCJpZCI6IjEiLCJuYW1lIjoic3VwZXIiLCJuaWNrTmFtZSI6Iui2hee6p-euoeeQhuWRmCIsImFjY291bnQiOiJzdXBlciIsInR5cGUiOiIyIiwiY2xpZW50IjpudWxsLCJjbGllbnRfaWQiOiIiLCJ0b2tlblR5cGUiOiJVU0VSIn0.VzETse76m1rkRsMjst9kDr1oCnHrPq81pRs-34bjVXPDRiPT6ekVCm-63hLfoH4GAp25oTL9dWA1ax-t1KWlSzHUn82myEBokwCVWlkZZPVMzFMCgP_SNdFeYlvguVhige1nQ6B0wo5crGYKKsfllt0_bp98TFg3I3zF03WsORk7HlsZfsY7ROwYkXXkIgbdw5gIRYlZJ6W1MiMET9TOyAzWGJvEyTPewaW4XMoq-okZoAe_7gV2u_tylngqRCohxTSuA7xf59gK8OrstwTeId_qQp4remoEDdLJfYyzLXCX5xBKns8gw2i1MZfpq9rizDT-Qdz23VQDQdmeHWK7zQ
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/resources/application-prod.yml b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/resources/application-prod.yml
new file mode 100644
index 0000000..1d0cb82
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/resources/application-prod.yml
@@ -0,0 +1,25 @@
+#服务器端口
+server:
+ port: 8190
+
+#数据源配置
+spring:
+ datasource:
+ url: ${blade.datasource.prod.ztznwh.url}
+ username: ${blade.datasource.prod.ztznwh.username}
+ password: ${blade.datasource.prod.ztznwh.password}
+
+#netty配置
+netty:
+ http:
+ server-socket-ip: 127.0.0.1
+ server-socket-port: 8003
+ worker_group_threads: 32
+ boss_group_threads: 0
+ netty_so_backlog: 4096
+ max_content_length: 10485760
+ file_save_root_path: C:/Users/kelu/Desktop/111
+ file_up_passwd: fireinthehole
+ business_threads_queue_capacity: 10000
+ business_threads_core_num: 200
+ authorization: eyJraWQiOiJrMSIsImFsZyI6IlJTMjU2In0.eyJpc3MiOiJhZG1pbkBnaXN1bmkuY29tIiwiYXVkIjoidXVtcyIsImp0aSI6IjYwMGZiYmMyLWE1NDgtNGZmNC04ZGNhLTZkNTdkZjY1OTYxNyIsImlhdCI6MTcxNzcyNDA1MywibmJmIjoxNzE3NzIzNDUzLCJzdWIiOiJzdXBlciIsImV4cCI6MTcxNzc4NTQ5Mywia2V5IjoiMmQ5ZWY2MTNlYTkxNDc4MDhlOGZiYTMxYWNlOTE0NmEiLCJpZCI6IjEiLCJuYW1lIjoic3VwZXIiLCJuaWNrTmFtZSI6Iui2hee6p-euoeeQhuWRmCIsImFjY291bnQiOiJzdXBlciIsInR5cGUiOiIyIiwiY2xpZW50IjpudWxsLCJjbGllbnRfaWQiOiIiLCJ0b2tlblR5cGUiOiJVU0VSIn0.VzETse76m1rkRsMjst9kDr1oCnHrPq81pRs-34bjVXPDRiPT6ekVCm-63hLfoH4GAp25oTL9dWA1ax-t1KWlSzHUn82myEBokwCVWlkZZPVMzFMCgP_SNdFeYlvguVhige1nQ6B0wo5crGYKKsfllt0_bp98TFg3I3zF03WsORk7HlsZfsY7ROwYkXXkIgbdw5gIRYlZJ6W1MiMET9TOyAzWGJvEyTPewaW4XMoq-okZoAe_7gV2u_tylngqRCohxTSuA7xf59gK8OrstwTeId_qQp4remoEDdLJfYyzLXCX5xBKns8gw2i1MZfpq9rizDT-Qdz23VQDQdmeHWK7zQ
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/resources/application-test.yml b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/resources/application-test.yml
new file mode 100644
index 0000000..33d4e21
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-by/src/main/resources/application-test.yml
@@ -0,0 +1,25 @@
+#服务器端口
+server:
+ port: 8190
+
+#数据源配置
+spring:
+ datasource:
+ url: ${blade.datasource.test.ztznwh.url}
+ username: ${blade.datasource.test.ztznwh.username}
+ password: ${blade.datasource.test.ztznwh.password}
+
+#netty配置
+netty:
+ http:
+ server-socket-ip: 127.0.0.1
+ server-socket-port: 8003
+ worker_group_threads: 32
+ boss_group_threads: 0
+ netty_so_backlog: 4096
+ max_content_length: 10485760
+ file_save_root_path: C:/Users/kelu/Desktop/111
+ file_up_passwd: fireinthehole
+ business_threads_queue_capacity: 10000
+ business_threads_core_num: 200
+ authorization: eyJraWQiOiJrMSIsImFsZyI6IlJTMjU2In0.eyJpc3MiOiJhZG1pbkBnaXN1bmkuY29tIiwiYXVkIjoidXVtcyIsImp0aSI6IjYwMGZiYmMyLWE1NDgtNGZmNC04ZGNhLTZkNTdkZjY1OTYxNyIsImlhdCI6MTcxNzcyNDA1MywibmJmIjoxNzE3NzIzNDUzLCJzdWIiOiJzdXBlciIsImV4cCI6MTcxNzc4NTQ5Mywia2V5IjoiMmQ5ZWY2MTNlYTkxNDc4MDhlOGZiYTMxYWNlOTE0NmEiLCJpZCI6IjEiLCJuYW1lIjoic3VwZXIiLCJuaWNrTmFtZSI6Iui2hee6p-euoeeQhuWRmCIsImFjY291bnQiOiJzdXBlciIsInR5cGUiOiIyIiwiY2xpZW50IjpudWxsLCJjbGllbnRfaWQiOiIiLCJ0b2tlblR5cGUiOiJVU0VSIn0.VzETse76m1rkRsMjst9kDr1oCnHrPq81pRs-34bjVXPDRiPT6ekVCm-63hLfoH4GAp25oTL9dWA1ax-t1KWlSzHUn82myEBokwCVWlkZZPVMzFMCgP_SNdFeYlvguVhige1nQ6B0wo5crGYKKsfllt0_bp98TFg3I3zF03WsORk7HlsZfsY7ROwYkXXkIgbdw5gIRYlZJ6W1MiMET9TOyAzWGJvEyTPewaW4XMoq-okZoAe_7gV2u_tylngqRCohxTSuA7xf59gK8OrstwTeId_qQp4remoEDdLJfYyzLXCX5xBKns8gw2i1MZfpq9rizDT-Qdz23VQDQdmeHWK7zQ
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.java
index 39338cb..af8215b 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.java
@@ -46,4 +46,6 @@
List<Map<String, Object>> getRoleByIds(@Param("ids")List<Long> rids);
List<Long> getSgEngineerRole();
+
+ List<Map<String, Object>> getUserByIdsCounty(@Param("ids") List<Long> ids);
}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.xml b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.xml
index dc29b03..10a694d 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.xml
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.xml
@@ -246,6 +246,16 @@
</if>
</select>
+ <select id="getUserByIdsCounty" resultType="java.util.Map">
+ select u.id ,u.real_name ,d.full_name as deptName from ywxt.blade_user u inner join ywxt.blade_dept d on FIND_IN_SET(u.dept_id, d.id) > 0 where 1 = 1
+ <if test="ids != null and ids.size>0">
+ AND u.id in
+ <foreach collection="ids" item="item" index="index" open="(" separator="," close=")">
+ #{item}
+ </foreach>
+ </if>
+
+ </select>
<select id="selectProframId" resultType="java.lang.Long">
select program_id from ywxt.sg_device where id = #{deviceId}
</select>
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProgressReportServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProgressReportServiceImpl.java
index 1563306..6d5d124 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProgressReportServiceImpl.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProgressReportServiceImpl.java
@@ -318,8 +318,11 @@
sgProgressReportVO.setDeviceName("");}
List<SgReportUserDO> list = new LambdaQueryChainWrapper<>(sgReportUserMapper).eq(SgReportUserDO::getReportId,id).orderByAsc(SgReportUserDO::getApprovalOrder).list();
List<Long> ids = list.stream().map(SgReportUserDO::getUserId).collect(Collectors.toList());
+ List<Long> idsCounty = list.stream().filter(s->s.getRoleId().equals(1811657352658042882L)).map(SgReportUserDO::getUserId).collect(Collectors.toList());
List<Long> rids = list.stream().map(SgReportUserDO::getRoleId).collect(Collectors.toList());
List<Map<String,Object>> users = sgProgressReportMapper.getUserByIds(ids);
+ List<Map<String,Object>> usersCounty = sgProgressReportMapper.getUserByIdsCounty(idsCounty);
+ users.addAll(usersCounty);
List<Map<String,Object>> roles = sgProgressReportMapper.getRoleByIds(rids);
for (Map<String, Object> user : users) {
--
Gitblit v1.9.3