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