Ver código fonte

111111

111111
klzhangweiya 2 anos atrás
pai
commit
4065b6af26
36 arquivos alterados com 1432 adições e 39 exclusões
  1. 1 0
      .gitignore
  2. 19 1
      VB_DSM_V2.1/Scripts/Dockers/docker-compose-iwb.yml
  3. 2 2
      VB_DSM_V2.1/vbdsm-common/vbdsm-base/src/main/java/cn/vbdsm/common/config/CustomConfig.java
  4. 10 1
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-acquis-ws/src/main/java/cn/vbdsm/acquis/http/mvc/action/UploadDataAction.java
  5. 1 1
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-acquis-ws/src/main/java/cn/vbdsm/acquis/timer/RebuildTableTimer.java
  6. 4 4
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-acquis-ws/src/main/resources/local/db.properties
  7. 1 1
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-acquis-ws/src/main/resources/local/schedule.xml
  8. 1 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/pom.xml
  9. 15 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/Dockerfile
  10. 138 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/pom.xml
  11. 38 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/VbdsmHj212ModbusApplication.java
  12. 29 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/config/TcpServerProperties.java
  13. 19 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/config/WsProperties.java
  14. 56 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/handler/TcpServerHandler.java
  15. 62 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/server/TcpSocketServer.java
  16. 23 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/task/UploadDataTask.java
  17. 52 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/utils/AESUtil.java
  18. 65 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/utils/RandomHelper.java
  19. 16 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/utils/WsClientUtil.java
  20. 128 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/ws/DataListBuilder.java
  21. 190 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/ws/MockUploadWsService.java
  22. 16 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/ws/OnlineData.java
  23. 13 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/ws/data/MockMonitor.java
  24. 60 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/ws/data/RandomHarmonic.java
  25. 228 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/ws/data/RandomPower.java
  26. 111 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/ws/data/TerminalData.java
  27. 18 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/resources/application.yml
  28. 57 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/resources/logback.xml
  29. 12 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/resources/mock/3@YC10001.json
  30. 6 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/resources/static/index.html
  31. 13 0
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/test/java/cn/vbdsm/hj212/modbus/VbdsmHj212ModbusApplicationTests.java
  32. 3 9
      VB_DSM_V2.1/vbdsm-job/Dockerfile
  33. 6 2
      VB_DSM_V2.1/vbdsm-statistics/vbdsm-analysis/src/main/java/cn/vbdsm/analysis/timer/impl/RebuildTableTimer.java
  34. 5 5
      VB_DSM_V2.1/vbdsm-statistics/vbdsm-analysis/src/main/resources/local/db.properties
  35. 13 12
      VB_DSM_V2.1/vbdsm-statistics/vbdsm-analysis/src/main/resources/local/schedule.xml
  36. 1 1
      VB_DSM_V2.1/vbdsm-web/vbdsm-manage/src/main/java/cn/vbdsm/manage/dao/PowerUserDao.java

+ 1 - 0
.gitignore

@@ -66,3 +66,4 @@ build/
 !**/js/**/build/
 *.rar
 *.zip
+VB_DSM_V*/mock/*.json

+ 19 - 1
VB_DSM_V2.1/Scripts/Dockers/docker-compose-iwb.yml

@@ -182,7 +182,7 @@ services:
 
 
   vber-server-xxl-job:
-    build: ../../vbdsm-job/xxl-job-admin
+    build: ../../vbdsm-job
     image: vbdsm-job:2.1.0
     container_name: vbdsm-job
     restart: always
@@ -271,6 +271,24 @@ services:
     networks:
       - vbdsm-net
 
+  vber-server-hj212-modbus-test:
+    build: ../../vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus
+    image: vbdsm-hj212-mockdata-upload:2.1.0
+    container_name: vbdsm-hj212-mockdata-upload
+    restart: always
+    ports:
+      # 内部使用了7221端口
+      - "18888:8080"
+    environment:
+      - TZ
+      - SERVER_PORT
+    volumes:
+      # 日志文件
+      - /home/iwb/vbdsm/server-logs/hj212-upload-mockdata/:/vbdsm/logs/
+    privileged: true
+    networks:
+      - vbdsm-net
+
 networks:
   vbdsm-net:
     external: false

+ 2 - 2
VB_DSM_V2.1/vbdsm-common/vbdsm-base/src/main/java/cn/vbdsm/common/config/CustomConfig.java

@@ -58,9 +58,9 @@ public class CustomConfig extends PropertyPlaceholderConfigurer{
     private void resolvePlaceHolders(Properties properties) {  
         Iterator itr = properties.entrySet().iterator();  
         while ( itr.hasNext() ) {  
-            final Map.Entry entry = ( Map.Entry ) itr.next();  
+            final Map.Entry entry = (Map.Entry ) itr.next();
             final Object value = entry.getValue();  
-            if ( value != null && String.class.isInstance( value ) ) {  
+            if (value != null && String.class.isInstance( value ) ) {
                 final String resolved = resolvePlaceHolder(properties, (String)value );  
                 if ( !value.equals( resolved ) ) {  
                     if ( resolved == null ) {  

+ 10 - 1
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-acquis-ws/src/main/java/cn/vbdsm/acquis/http/mvc/action/UploadDataAction.java

@@ -4,6 +4,7 @@ import javax.core.common.ResultMsg;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import cn.vbdsm.acquis.timer.RebuildTableTimer;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -24,7 +25,8 @@ import cn.vbdsm.core.mvc.action.BaseAction;
 @RequestMapping("/web/upload")
 public class UploadDataAction extends BaseAction{
 	@Autowired private IUploadDataService uploadDataService;
-	
+	@Autowired private RebuildTableTimer timer;
+
 	/**
 	 * 批量设备数据上报
 	 * @param request
@@ -41,4 +43,11 @@ public class UploadDataAction extends BaseAction{
 		ResultMsg<?> result = uploadDataService.uploadAllData(local,key,content);
 		return super.callBackForJsonp(request, response, JSONObject.toJSONString(result));
 	}
+
+	@RequestMapping("baksql.json")
+	public ModelAndView bakSql(HttpServletRequest request,HttpServletResponse response){
+
+		timer.rebuildTable("t_test_01");
+		return super.callBackForJsonp(request, response,"");
+	}
 }

+ 1 - 1
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-acquis-ws/src/main/java/cn/vbdsm/acquis/timer/RebuildTableTimer.java

@@ -67,7 +67,7 @@ public class RebuildTableTimer {
 	 * @param tableName
 	 * @return
 	 */
-	private boolean rebuildTable(String tableName){
+	public boolean rebuildTable(String tableName){
 		String renameTable = tableName + "_bak";
 		
 		String dropSql = "DROP TABLE IF EXISTS " + renameTable;

+ 4 - 4
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-acquis-ws/src/main/resources/local/db.properties

@@ -1,20 +1,20 @@
 #sysbase database mysql config
 sysbase.mysql.jdbc.driverClassName=com.mysql.cj.jdbc.Driver
-sysbase.mysql.jdbc.url=jdbc:mysql://47.112.30.247:13306/vbdsm_sysbase?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&useSSL=false
+sysbase.mysql.jdbc.url=jdbc:mysql://47.112.30.247:23306/vbdsm_sysbase?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&useSSL=false
 sysbase.mysql.jdbc.username=root
 sysbase.mysql.jdbc.password=123456
 #curr database mysql config
 mysql.jdbc.driverClassName=com.mysql.cj.jdbc.Driver
-mysql.jdbc.url=jdbc:mysql://47.112.30.247:13306/vbdsm?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&useSSL=false
+mysql.jdbc.url=jdbc:mysql://47.112.30.247:23306/vbdsm?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&useSSL=false
 mysql.jdbc.username=root
 mysql.jdbc.password=123456
 #business database config
 db2023.mysql.jdbc.driverClassName=com.mysql.cj.jdbc.Driver
-db2023.mysql.jdbc.url=jdbc:mysql://47.112.30.247:13306/vbdsm_2023?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&useSSL=false
+db2023.mysql.jdbc.url=jdbc:mysql://47.112.30.247:23306/vbdsm_2023?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&useSSL=false
 db2023.mysql.jdbc.username=root
 db2023.mysql.jdbc.password=123456
 db2024.mysql.jdbc.driverClassName=com.mysql.cj.jdbc.Driver
-db2024.mysql.jdbc.url=jdbc:mysql://47.112.30.247:13306/vbdsm_2024?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&useSSL=false
+db2024.mysql.jdbc.url=jdbc:mysql://47.112.30.247:23306/vbdsm_2024?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&useSSL=false
 db2024.mysql.jdbc.username=root
 db2024.mysql.jdbc.password=123456
 #alibaba druid config

+ 1 - 1
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-acquis-ws/src/main/resources/local/schedule.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <timers> 
     <timer>clearLogsTimer.clearHistroyLog</timer>
-    <timer>rebuildTableTimer.rebuildTables</timer>
+<!--    <timer>rebuildTableTimer.rebuildTables</timer>-->
 </timers>

+ 1 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/pom.xml

@@ -14,6 +14,7 @@
         <module>vbdsm-hj212-server</module>
         <module>vbdsm-hj212-plugs</module>
         <module>vbdsm-hj212-socket</module>
+        <module>vbdsm-hj212-modbus</module>
     </modules>
     <parent>
         <groupId>org.springframework.boot</groupId>

+ 15 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/Dockerfile

@@ -0,0 +1,15 @@
+#FROM openjdk:8-jre-slim
+FROM iwbnet.jdk8:202
+MAINTAINER Vber
+
+ENV PARAMS="--server.port=8080"
+
+RUN mkdir -p /vbdsm/logs
+
+ENV TZ=Asia/Shanghai
+RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
+
+ADD ./target/vbdsm-hj212-modbus-*.jar /app.jar
+WORKDIR /vbdsm/logs
+
+ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /app.jar $PARAMS"]

+ 138 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/pom.xml

@@ -0,0 +1,138 @@
+<?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">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>cn.vbdsm</groupId>
+    <artifactId>vbdsm-hj212-modbus</artifactId>
+    <version>2.1.0</version>
+    <name>vbdsm-hj212-modbus</name>
+
+    <properties>
+        <java.version>1.8</java.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <spring-boot.version>2.6.13</spring-boot.version>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.8.20</version>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.18.28</version>
+            <optional>true</optional>
+        </dependency>
+
+        <dependency>
+            <groupId>io.netty</groupId>
+            <artifactId>netty-all</artifactId>
+            <version>4.1.94.Final</version>
+        </dependency>
+        <!--webservice-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web-services</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-frontend-jaxws</artifactId>
+            <version>3.1.6</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-transports-http</artifactId>
+            <version>3.1.6</version>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba.fastjson2</groupId>
+            <artifactId>fastjson2</artifactId>
+            <version>2.0.32</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.core.common</groupId>
+            <artifactId>core-common-utils</artifactId>
+            <version>1.0</version>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+<!--    <dependencyManagement>-->
+<!--        <dependencies>-->
+<!--            <dependency>-->
+<!--                <groupId>org.springframework.boot</groupId>-->
+<!--                <artifactId>spring-boot-dependencies</artifactId>-->
+<!--                <version>${spring-boot.version}</version>-->
+<!--                <type>pom</type>-->
+<!--                <scope>import</scope>-->
+<!--            </dependency>-->
+<!--        </dependencies>-->
+<!--    </dependencyManagement>-->
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-dependencies</artifactId>
+        <version>2.6.13</version>
+        <relativePath/>
+    </parent>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <fork>true</fork>
+<!--                    <classifier>exec</classifier>-->
+                    <mainClass>cn.vbdsm.hj212.modbus.VbdsmHj212ModbusApplication</mainClass>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.8.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <encoding>UTF-8</encoding>
+                </configuration>
+            </plugin>
+<!--            <plugin>-->
+<!--                <groupId>org.springframework.boot</groupId>-->
+<!--                <artifactId>spring-boot-maven-plugin</artifactId>-->
+<!--                <version>${spring-boot.version}</version>-->
+<!--                <configuration>-->
+<!--                    <mainClass>cn.vbdsm.hj212.modbus.VbdsmHj212ModbusApplication</mainClass>-->
+<!--                    <skip>true</skip>-->
+<!--                </configuration>-->
+<!--                <executions>-->
+<!--                    <execution>-->
+<!--                        <id>repackage</id>-->
+<!--                        <goals>-->
+<!--                            <goal>repackage</goal>-->
+<!--                        </goals>-->
+<!--                    </execution>-->
+<!--                </executions>-->
+<!--            </plugin>-->
+        </plugins>
+    </build>
+
+</project>

+ 38 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/VbdsmHj212ModbusApplication.java

@@ -0,0 +1,38 @@
+package cn.vbdsm.hj212.modbus;
+
+import cn.vbdsm.hj212.modbus.server.TcpSocketServer;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import  cn.vbdsm.hj212.modbus.ws.*;
+
+@SpringBootApplication
+@Slf4j
+@EnableScheduling
+public class VbdsmHj212ModbusApplication implements CommandLineRunner {
+    @Autowired
+    private TcpSocketServer tcpSocketServer;
+    @Autowired
+        private MockUploadWsService uploadDataService;
+
+    public static void main(String[] args) {
+        SpringApplication.run(VbdsmHj212ModbusApplication.class, args);
+    }
+
+    @Override
+    public void run(String... args) throws Exception {
+      uploadDataService.loadTerminals();
+//        tcpSocketServer.run();
+//        Runtime.getRuntime().addShutdownHook(new Thread(){
+//            @Override
+//            public void run() {
+//                log.info("socket server stop ...");
+//                tcpSocketServer.stop();
+//                log.info("socket server has stoped");
+//            }
+//        });
+    }
+}

+ 29 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/config/TcpServerProperties.java

@@ -0,0 +1,29 @@
+package cn.vbdsm.hj212.modbus.config;
+
+
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Getter
+@Setter
+@Component
+@ConfigurationProperties(prefix = "vbdsm.socket.server")
+public class TcpServerProperties {
+    private Integer bindPort = 18888;
+
+    private String bindIp = "0.0.0.0";
+
+    private Integer bossThreadNum = 1;
+
+    private Integer workThreadNum = 4;
+    public static TcpServerProperties defaultProperties() {
+        TcpServerProperties properties = new TcpServerProperties();
+        properties.bindPort = 18888;
+        properties.bindIp = "0.0.0.0";
+        properties.bossThreadNum = 1;
+        properties.workThreadNum = 4;
+        return properties;
+    }
+}

+ 19 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/config/WsProperties.java

@@ -0,0 +1,19 @@
+package cn.vbdsm.hj212.modbus.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "vbdsm.ws")
+public class WsProperties {
+
+    private String url;
+
+    private String method;
+
+    private String key;
+
+
+}

+ 56 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/handler/TcpServerHandler.java

@@ -0,0 +1,56 @@
+package cn.vbdsm.hj212.modbus.handler;
+
+import io.netty.channel.*;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.extern.slf4j.Slf4j;
+
+import java.net.InetSocketAddress;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+@Slf4j
+@ChannelHandler.Sharable
+@AllArgsConstructor
+public class TcpServerHandler extends ChannelDuplexHandler {
+    @Getter
+    private final Map<String, Channel> channels = new ConcurrentHashMap<String, Channel>(); // <ip:port, channel>
+
+    //private MessageDriverLoop loop;
+
+    @Override
+    public void channelActive(ChannelHandlerContext ctx) throws Exception {
+        InetSocketAddress address = (InetSocketAddress) ctx.channel().remoteAddress();
+        log.info("新的客户端连接:" + address.getAddress().getHostAddress() + ":" + address.getPort());
+//        channels.put(NettyUtils.toAddressString(address), ctx.channel());
+        super.channelActive(ctx);
+    }
+
+    @Override
+    public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+//        InetSocketAddress address = (InetSocketAddress) ctx.channel().remoteAddress();
+//        log.info("客户端失去连接:" + address.getAddress().getHostAddress() + ":" + address.getPort());
+//        channels.remove(NettyUtils.toAddressString(address));
+        super.channelActive(ctx);
+    }
+
+    @Override
+    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+//        IMessage message = (IMessage) msg;
+//        loop.putMessage(new IRequest(message, ctx));
+        log.info("接收数据包:{}", msg);
+    }
+
+
+    @Override
+    public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
+        ctx.write(msg, promise);
+    }
+
+    @Override
+    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause)
+            throws Exception {
+        log.error("io exception!", cause);
+        ctx.channel().close();
+    }
+}

+ 62 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/server/TcpSocketServer.java

@@ -0,0 +1,62 @@
+package cn.vbdsm.hj212.modbus.server;
+
+import cn.vbdsm.hj212.modbus.config.TcpServerProperties;
+import cn.vbdsm.hj212.modbus.handler.TcpServerHandler;
+import io.netty.bootstrap.ServerBootstrap;
+import io.netty.buffer.PooledByteBufAllocator;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelOption;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioServerSocketChannel;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import io.netty.util.concurrent.DefaultThreadFactory;
+import lombok.Getter;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+@Slf4j
+public class TcpSocketServer {
+    @Autowired
+    private TcpServerProperties properties;
+
+    @Getter
+    private Channel channel;
+    public void run(){
+        NioEventLoopGroup bossGroup = new NioEventLoopGroup(properties.getBossThreadNum(), new DefaultThreadFactory("NettyServerBoss", true));
+        NioEventLoopGroup workerGroup = new NioEventLoopGroup(properties.getWorkThreadNum(), new DefaultThreadFactory("NettyServerWorker", true));
+        ServerBootstrap bootstrap = new ServerBootstrap();
+
+        final TcpServerHandler serverHandler = new TcpServerHandler();
+        //channels = serverHandler.getChannels();
+        bootstrap.group(bossGroup, workerGroup)
+                .channel(NioServerSocketChannel.class)
+                .childOption(ChannelOption.TCP_NODELAY, Boolean.TRUE)
+                .childOption(ChannelOption.SO_REUSEADDR, Boolean.TRUE)
+                .childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT)
+                .childOption(ChannelOption.SO_KEEPALIVE, Boolean.TRUE)
+                .childHandler(new ChannelInitializer<NioSocketChannel>() {
+
+                    @Override
+                    protected void initChannel(NioSocketChannel ch) throws Exception {
+
+                        ch.pipeline()
+
+                                .addLast("handler", serverHandler);
+                    }
+                });
+        // bind
+        ChannelFuture channelFuture = bootstrap.bind(properties.getBindIp(), properties.getBindPort());
+        log.info("sever starting ....");
+        channelFuture.syncUninterruptibly();
+        channel = channelFuture.channel();
+        log.info("sever has started, ip:" + properties.getBindIp() + "," + "port:" + properties.getBindPort());
+    }
+
+    public void stop(){
+
+    }
+}

+ 23 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/task/UploadDataTask.java

@@ -0,0 +1,23 @@
+package cn.vbdsm.hj212.modbus.task;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+import cn.vbdsm.hj212.modbus.ws.*;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+@Component
+public class UploadDataTask {
+//    @Autowired
+//    private  UploadDataService uploadDataService;
+    @Autowired
+    private MockUploadWsService uploadWsService;
+
+    @Scheduled(cron = "0 0/5 * * * ?")
+    public void uploadData() throws Exception {
+        //uploadWsService.loadTerminals();
+        //System.out.println(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+    }
+}

+ 52 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/utils/AESUtil.java

@@ -0,0 +1,52 @@
+package cn.vbdsm.hj212.modbus.utils;
+
+import lombok.extern.slf4j.Slf4j;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
+@Slf4j
+public class AESUtil {
+    public static boolean checkKey(String key)
+    {
+        if (key == null) {
+            log.error("密码为空!");
+        }else if (key.length() != 16) {
+            log.error("Key:"+key+"长度不是16位!");
+        }
+        return true;
+    }
+    /***
+     * 加密
+     * @param sSrc
+     * @param key
+     * @return
+     * @throws Exception
+     */
+    public static String Encrypt(String sSrc, String key) throws Exception {
+        if(checkKey(key))
+        {
+            byte[] raw = key.getBytes("ASCII");
+            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
+            Cipher cipher = Cipher.getInstance("AES");
+            cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
+            byte[] encrypted = cipher.doFinal(sSrc.getBytes());
+//			System.out.println(">>>>>"+encrypted);
+            return byte2hex(encrypted).toLowerCase();
+        }
+        return null;
+    }
+    public static String byte2hex(byte[] b) {
+        String hs = "";
+        String stmp = "";
+        for (int n = 0; n < b.length; n++) {
+            stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
+            if (stmp.length() == 1)
+            {
+                hs = hs + "0" + stmp;
+            } else {
+                hs = hs + stmp;
+            }
+        }
+        return hs;
+    }
+}

+ 65 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/utils/RandomHelper.java

@@ -0,0 +1,65 @@
+package cn.vbdsm.hj212.modbus.utils;
+
+import cn.hutool.core.util.RandomUtil;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.Random;
+
+public  class RandomHelper {
+    /**
+     *  获取随机数
+     * @param middle  中间值
+     * @param deviation 根据中间值所取的上下偏差
+
+     * @return
+     */
+    public static BigDecimal getRandom(Integer middle, Integer deviation ) {
+        int max = middle + deviation;
+        int min = middle - deviation;
+        return RandomUtil.randomBigDecimal(new BigDecimal(min), new BigDecimal(max)).setScale(3,RoundingMode.UP);
+    }
+    /**
+     *  获取随机数
+     * @param middle  中间值
+     * @param deviation 根据中间值所取的上下偏差
+     * @param divisor  除数
+     * @return
+     */
+    public static BigDecimal getRandom(Integer middle, Integer deviation,Integer divisor) {
+
+        int max = middle + deviation;
+        int min = middle - deviation;
+        BigDecimal val = RandomUtil.randomBigDecimal(new BigDecimal(min), new BigDecimal(max));
+
+        return val.divide(new BigDecimal(divisor),RoundingMode.UP).setScale(3, RoundingMode.HALF_UP);
+
+    }
+
+    /**
+     *  获取随机数
+     * @param middle  中间值
+     * @param deviation 根据中间值所取的上下偏差
+     * @param divisor  除数
+     * @return
+     */
+    public static BigDecimal getRandom(BigDecimal middle, BigDecimal deviation,BigDecimal divisor) {
+        BigDecimal max = middle.add(deviation);
+        BigDecimal min = middle.subtract(deviation);
+        BigDecimal val = RandomUtil.randomBigDecimal(min, max);
+        return val.divide(divisor).setScale(3, RoundingMode.HALF_UP);
+    }
+
+    /**
+     *  获取随机数
+     * @param middle  中间值
+     * @param deviation 根据中间值所取的上下偏差
+     * @return
+     */
+    public static BigDecimal getRandom(BigDecimal middle, BigDecimal deviation ) {
+        BigDecimal max = middle.add(deviation);
+        BigDecimal min = middle.subtract(deviation);
+        return RandomUtil.randomBigDecimal(min, max);
+
+    }
+}

+ 16 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/utils/WsClientUtil.java

@@ -0,0 +1,16 @@
+package cn.vbdsm.hj212.modbus.utils;
+import org.apache.cxf.endpoint.Client;
+import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
+
+public class WsClientUtil {
+    public static String callWebSV(String wsdUrl, String operationName, String... params) throws Exception {
+        JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
+        Client client = dcf.createClient(wsdUrl);
+        //client.getOutInterceptors().add(new ClientLoginInterceptor(USER_NAME, PASS_WORD));
+        Object[] objects;
+        // invoke("方法名",参数1,参数2,参数3....);
+        objects = client.invoke(operationName, params);
+        return objects[0].toString();
+    }
+
+}

+ 128 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/ws/DataListBuilder.java

@@ -0,0 +1,128 @@
+package cn.vbdsm.hj212.modbus.ws;
+
+import cn.vbdsm.hj212.modbus.ws.data.RandomHarmonic;
+import cn.vbdsm.hj212.modbus.ws.data.RandomPower;
+
+
+import java.util.Map;
+import java.util.Objects;
+
+public class DataListBuilder {
+
+    public static void  buildDataList(String dataType, Map<String,String> resultMap, RandomPower power
+            , String ht, RandomHarmonic harmonic) {
+
+        if(Objects.equals(dataType, "01")){
+            resultMap.put("01", String.valueOf(power.getP()));
+            resultMap.put("02", String.valueOf(power.getPa()));
+            resultMap.put("03", String.valueOf(power.getPb()));
+            resultMap.put("04", String.valueOf(power.getPc()));
+            resultMap.put("05", String.valueOf(power.getQ()));
+            resultMap.put("06", String.valueOf(power.getQa()));
+            resultMap.put("07", String.valueOf(power.getQb()));
+            resultMap.put("08", String.valueOf(power.getQc()));
+            resultMap.put("09", String.valueOf(power.getPf()));
+            resultMap.put("10", String.valueOf(power.getPfa()));
+            resultMap.put("11", String.valueOf(power.getPfb()));
+            resultMap.put("12", String.valueOf(power.getPfc()));
+            resultMap.put("13", String.valueOf(power.getIa()));
+            resultMap.put("14", String.valueOf(power.getIb()));
+            resultMap.put("15", String.valueOf(power.getIc()));
+            resultMap.put("16", String.valueOf(power.getIz()));
+            resultMap.put("17", String.valueOf(power.getUa()));
+            resultMap.put("18", String.valueOf(power.getUb()));
+            resultMap.put("19", String.valueOf(power.getUc()));
+            resultMap.put("20", String.valueOf(power.getUab()));
+            resultMap.put("21", String.valueOf(power.getUbc()));
+            resultMap.put("22", String.valueOf(power.getUca()));
+            resultMap.put("23", String.valueOf(power.getPv()));
+            resultMap.put("24", String.valueOf(power.getF()));
+            resultMap.put("25", String.valueOf(power.getInbalance()));
+            resultMap.put("26", String.valueOf(power.getUnbalance()));
+            resultMap.put("27", String.valueOf(power.getUaw()));
+            resultMap.put("28", String.valueOf(power.getUbw()));
+            resultMap.put("29", String.valueOf(power.getUcw()));
+            resultMap.put("30", String.valueOf(power.getUabw()));
+            resultMap.put("31", String.valueOf(power.getUbcw()));
+            resultMap.put("32", String.valueOf(power.getUcaw()));
+            resultMap.put("33", String.valueOf(power.getFw()));
+            resultMap.put("34", String.valueOf(power.getT()));
+            resultMap.put("35", String.valueOf(power.getT2()));
+            resultMap.put("36", String.valueOf(power.getT3()));
+            resultMap.put("37", String.valueOf(power.getT4()));
+            resultMap.put("38", String.valueOf(power.getT5()));
+            resultMap.put("39", String.valueOf(power.getT6()));
+            resultMap.put("40", String.valueOf(power.getT7()));
+            resultMap.put("41", String.valueOf(power.getT8()));
+        }
+
+        if(Objects.equals(dataType, "02")){
+            resultMap.put("01", String.valueOf(power.getTpe()));
+            resultMap.put("02", String.valueOf(power.getTqe()));
+            resultMap.put("03", String.valueOf(power.getFpe()));
+            resultMap.put("04", String.valueOf(power.getFqe()));
+            resultMap.put("05", String.valueOf(power.getTps()));
+            resultMap.put("06", String.valueOf(power.getTqs()));
+            resultMap.put("07", String.valueOf(power.getFps()));
+            resultMap.put("08", String.valueOf(power.getFqs()));
+        }
+
+        if(Objects.equals(dataType, "03")){
+            resultMap.put("harmonicType", ht);
+
+            resultMap.put("01", String.valueOf(harmonic.getH3()));
+            resultMap.put("02", String.valueOf(harmonic.getH5()));
+            resultMap.put("03", String.valueOf(harmonic.getH7()));
+            resultMap.put("04", String.valueOf(harmonic.getH9()));
+            resultMap.put("05", String.valueOf(harmonic.getH11()));
+            resultMap.put("06", String.valueOf(harmonic.getH13()));
+            resultMap.put("07", String.valueOf(harmonic.getH15()));
+            resultMap.put("08", String.valueOf(harmonic.getH17()));
+            resultMap.put("09", String.valueOf(harmonic.getH19()));
+            resultMap.put("10", String.valueOf(harmonic.getH21()));
+            resultMap.put("11", String.valueOf(harmonic.getH23()));
+            resultMap.put("12", String.valueOf(harmonic.getH25()));
+            resultMap.put("13", String.valueOf(harmonic.getH27()));
+            resultMap.put("14", String.valueOf(harmonic.getH29()));
+            resultMap.put("15", String.valueOf(harmonic.getH31()));
+            resultMap.put("16", String.valueOf(harmonic.getHall()));
+            resultMap.put("17", String.valueOf(harmonic.getBaseU()));
+        }
+
+        if(Objects.equals(dataType, "04")){
+            resultMap.put("harmonicType", ht);
+            resultMap.put("01", String.valueOf(harmonic.getH3()));
+            resultMap.put("02", String.valueOf(harmonic.getH5()));
+            resultMap.put("03", String.valueOf(harmonic.getH7()));
+            resultMap.put("04", String.valueOf(harmonic.getH9()));
+            resultMap.put("05", String.valueOf(harmonic.getH11()));
+            resultMap.put("06", String.valueOf(harmonic.getH13()));
+            resultMap.put("07", String.valueOf(harmonic.getH15()));
+            resultMap.put("08", String.valueOf(harmonic.getH17()));
+            resultMap.put("09", String.valueOf(harmonic.getH19()));
+            resultMap.put("10", String.valueOf(harmonic.getH21()));
+            resultMap.put("11", String.valueOf(harmonic.getH23()));
+            resultMap.put("12", String.valueOf(harmonic.getH25()));
+            resultMap.put("13", String.valueOf(harmonic.getH27()));
+            resultMap.put("14", String.valueOf(harmonic.getH29()));
+            resultMap.put("15", String.valueOf(harmonic.getH31()));
+            resultMap.put("16", String.valueOf(harmonic.getHall()));
+            resultMap.put("17", String.valueOf(harmonic.getBaseI()));
+        }
+
+        if(Objects.equals(dataType, "05")){
+           //todo 电量整点表(编号: 05)  小时数据获取
+            resultMap.put("getDate", "");  //yyyyMMdd
+            resultMap.put("hour", "");  //HH
+            resultMap.put("01", String.valueOf(power.getTpe()));
+            resultMap.put("02", String.valueOf(power.getTqe()));
+            resultMap.put("03", String.valueOf(power.getFpe()));
+            resultMap.put("04", String.valueOf(power.getFqe()));
+            resultMap.put("05", String.valueOf(power.getTps()));
+            resultMap.put("06", String.valueOf(power.getTqs()));
+            resultMap.put("07", String.valueOf(power.getFps()));
+            resultMap.put("08", String.valueOf(power.getFqs()));
+        }
+
+    }
+}

+ 190 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/ws/MockUploadWsService.java

@@ -0,0 +1,190 @@
+package cn.vbdsm.hj212.modbus.ws;
+
+import cn.hutool.core.io.file.FileReader;
+import cn.hutool.core.util.StrUtil;
+import cn.vbdsm.hj212.modbus.config.WsProperties;
+import cn.vbdsm.hj212.modbus.utils.AESUtil;
+import cn.vbdsm.hj212.modbus.utils.RandomHelper;
+import cn.vbdsm.hj212.modbus.utils.WsClientUtil;
+import cn.vbdsm.hj212.modbus.ws.data.MockMonitor;
+import cn.vbdsm.hj212.modbus.ws.data.RandomHarmonic;
+import cn.vbdsm.hj212.modbus.ws.data.RandomPower;
+import cn.vbdsm.hj212.modbus.ws.data.TerminalData;
+
+import com.alibaba.fastjson2.JSON;
+import lombok.extern.slf4j.Slf4j;
+import lombok.var;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.ResourceLoader;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.stereotype.Component;
+
+
+import java.io.*;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+
+
+@Slf4j
+@Component
+public class MockUploadWsService {
+    @Autowired
+    private WsProperties wsProperties;
+
+    @Autowired
+    private MockMonitor mockMonitor;
+
+//    @Autowired
+//    private ResourceLoader resourceLoader;
+
+
+//    public void loadTerminals() throws Exception {
+//        var resolver = new PathMatchingResourcePatternResolver();
+//        var resources = resolver.getResources("classpath:mock/*.json");
+//        for (var resource:resources){
+//            File file = resource.getFile();
+//            TerminalData td = getTerminalData(file);
+//            RandomPower power = new RandomPower();
+//            if(td != null){
+//                setEngine(power,td);
+//                uploadData(td,power);
+//            }
+//        }
+//    }
+    public void loadTerminals() throws Exception {
+        String terminals = mockMonitor.getTerminals();
+        String[] coms = terminals.split("&");
+        for(String c : coms){
+            String[] cts = c.split("@");
+            String[] ts = cts[1].split(",");
+            for(String t : ts){
+                TerminalData td = getTerminal(cts[0],t);
+                RandomPower power = new RandomPower();
+                setEngine(power,td);
+                uploadData(td,power);
+            }
+        }
+    }
+
+    private TerminalData getTerminal(String companyId,String terminalId){
+        String filePath = StrUtil.format("./mock/{}@{}.json",companyId,terminalId);
+        //Resource fileResource =resourceLoader.getResource(filePath);
+        File file = null;
+        try {
+            file = new File(filePath);
+            if(file.exists()){
+                FileReader fr = new FileReader(file);
+                String ts = fr.readString();
+                return JSON.parseObject(ts, TerminalData.class);
+            }
+        } catch (Exception e) {
+            log.error("{}文件不存在",filePath);
+        }
+        return new TerminalData(terminalId,companyId);
+    }
+    private void setEngine(RandomPower power, TerminalData td){
+        var dp = RandomHelper.getRandom(22000,3000,100);
+        var de = RandomHelper.getRandom(6600,600,100);
+        var pe = td.getCurDayTotalP().equals(new BigDecimal(0))?new BigDecimal(0):td.getCurDayTotalP().add(dp);
+        var qe = td.getCurDayTotalE().equals(new BigDecimal(0))?new BigDecimal(0):td.getCurDayTotalE().add(de);
+        var ps = td.getTotal_p().add(dp);
+        var qs = td.getTotal_e().add(de);
+        power.setEngine(pe,qe,ps,qs);
+        td.SetDayTotalP(pe.equals(new BigDecimal(0))?new BigDecimal("0.01"):pe)
+                .SetTotalP(ps)
+                .SetDayTotalE(qe.equals(new BigDecimal(0))?new BigDecimal("0.01"):qe)
+                .SetTotalE(qs);
+
+        td.saveFileInfo();
+    }
+
+
+
+
+    public void uploadData( TerminalData td,RandomPower power) throws Exception {
+        String nowStr = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
+        long now = Long.parseLong(nowStr);
+        now = now - now % 500;
+        sendData("01",td,now,power);
+        sendData("02",td,now,power);
+        sendData("03",td,now,power);
+        sendData("04",td,now,power);
+    }
+
+    private void sendData(String type, TerminalData td ,Long date,RandomPower power) throws Exception {
+        OnlineData onlineData_power = new OnlineData();
+        onlineData_power.setCompanyId(td.getCompanyId());
+        onlineData_power.setDataType(type);
+        List<Map<String,String>> list = new ArrayList<>();
+        String terminalId = td.getTerminalId();
+        if(type.equals("01")||type.equals("02")){
+            Map<String,String> map = new HashMap<>();
+            map.put("terminalId",terminalId);
+            map.put("getTime", Long.toString(date));
+            DataListBuilder.buildDataList(type,map,power,
+                    "",null );
+            list.add(map);
+        }
+        else if(type.equals("03")){
+            Map<String, String> uaMap = createHi_HuMap(type, terminalId, "UA",date,power);
+            Map<String, String> ubMap = createHi_HuMap(type, terminalId, "UB", date,power);
+            Map<String, String> ucMap = createHi_HuMap(type, terminalId, "UC", date,power);
+            list.add(uaMap);
+            list.add(ubMap);
+            list.add(ucMap);
+        }else if(type.equals("04")){
+            Map<String, String> iaMap = createHi_HuMap(type, terminalId, "IA", date,power);
+            Map<String, String> ibMap = createHi_HuMap(type, terminalId, "IB", date,power);
+            Map<String, String> icMap = createHi_HuMap(type, terminalId, "IC", date,power);
+            list.add(iaMap);
+            list.add(ibMap);
+            list.add(icMap);
+        }
+
+
+        onlineData_power.setDataList(list);
+        String data = JSON.toJSONString(onlineData_power);
+        String content = null;
+        try {
+            content = AESUtil.Encrypt(data, wsProperties.getKey());
+            String result = WsClientUtil.callWebSV(wsProperties.getUrl(), wsProperties.getMethod(), content);
+            log.info("企业编号:{},设备号信息:{},上传结果:{}",td.getCompanyId(),terminalId,result);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private Map<String,String> createHi_HuMap(String type,String terminalId,String ht,Long date,RandomPower power){
+        Map<String,String> map = new HashMap<>();
+        map.put("terminalId",terminalId);
+        map.put("getTime", Long.toString(date));
+        RandomHarmonic randomHarmonic = new RandomHarmonic(ht);
+        switch (ht){
+            case "UA":
+                randomHarmonic.setBaseU(power.getUa());
+                break;
+            case "UB":
+                randomHarmonic.setBaseU(power.getUb());
+                break;
+            case "UC":
+                randomHarmonic.setBaseU(power.getUc());
+                break;
+            case "IA":
+                randomHarmonic.setBaseI(power.getIa());
+                break;
+            case "IB":
+                randomHarmonic.setBaseI(power.getIb());
+                break;
+            case "IC":
+                randomHarmonic.setBaseI(power.getIc());
+                break;
+
+        }
+        DataListBuilder.buildDataList(type,map,null,ht,randomHarmonic);
+        return map;
+    }
+}

+ 16 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/ws/OnlineData.java

@@ -0,0 +1,16 @@
+package cn.vbdsm.hj212.modbus.ws;
+
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+@Data
+public class OnlineData {
+
+    private String companyId;
+
+    private String dataType;
+
+    private List<Map<String,String>> dataList;
+}

+ 13 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/ws/data/MockMonitor.java

@@ -0,0 +1,13 @@
+package cn.vbdsm.hj212.modbus.ws.data;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Component
+@ConfigurationProperties(prefix = "vbdsm.monitor")
+@Data
+public class MockMonitor {
+    private String terminals;
+
+}

+ 60 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/ws/data/RandomHarmonic.java

@@ -0,0 +1,60 @@
+package cn.vbdsm.hj212.modbus.ws.data;
+
+import cn.hutool.core.util.RandomUtil;
+import cn.vbdsm.hj212.modbus.utils.RandomHelper;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class RandomHarmonic {
+    public String type ;
+    public BigDecimal h3 ;
+    public BigDecimal h5 ;
+    public BigDecimal h7 ;
+    public BigDecimal h9 ;
+    public BigDecimal h11 ;
+    public BigDecimal h13 ;
+    public BigDecimal h15 ;
+    public BigDecimal h17 ;
+    public BigDecimal h19 ;
+    public BigDecimal h21 ;
+    public BigDecimal h23 ;
+    public BigDecimal h25 ;
+    public BigDecimal h27 ;
+    public BigDecimal h29 ;
+    public BigDecimal h31 ;
+    public BigDecimal hall;
+    public BigDecimal baseI ;
+    public BigDecimal baseU ;
+
+    public RandomHarmonic(String type){
+        this.type = type;
+        this.hall = RandomHelper.getRandom(550,100,100);
+        this.setH3(GetVal());
+        this.setH5(GetVal());
+        this.setH7(GetVal());
+        this.setH9(GetVal());
+        this.setH11(GetVal());
+        this.setH13(GetVal());
+        this.setH15(GetVal());
+        this.setH17(GetVal());
+        this.setH19(GetVal());
+        this.setH21(GetVal());
+        this.setH23(GetVal());
+        this.setH25(GetVal());
+        this.setH27(GetVal());
+        this.setH29(GetVal());
+        this.setH31(GetVal());
+
+    }
+    private BigDecimal GetVal()
+    {
+        return RandomUtil.randomInt(0, 100) > 50 ? RandomHelper.getRandom(150, 50, 100) : new BigDecimal(0);
+    }
+
+
+}

+ 228 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/ws/data/RandomPower.java

@@ -0,0 +1,228 @@
+package cn.vbdsm.hj212.modbus.ws.data;
+
+import cn.hutool.core.util.ArrayUtil;
+import cn.hutool.core.util.RandomUtil;
+import cn.vbdsm.hj212.modbus.utils.RandomHelper;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+public class RandomPower {
+
+    private BigDecimal pa;
+    private BigDecimal pb;
+    private BigDecimal pc;
+    private BigDecimal p;
+
+    private BigDecimal qa;
+    private BigDecimal qb;
+    private BigDecimal qc;
+    private BigDecimal q;
+
+    private BigDecimal pfa;
+    private BigDecimal pfb;
+    private BigDecimal pfc;
+    private BigDecimal pf;
+
+    private BigDecimal ia;
+    private BigDecimal ib;
+    private BigDecimal ic ;
+    private BigDecimal iz ;
+    private BigDecimal ua ;
+    private BigDecimal ub ;
+    private BigDecimal uc ;
+    private BigDecimal uab ;
+    private BigDecimal ubc ;
+    private BigDecimal uca;
+
+    //需量负荷
+    private BigDecimal dp ;
+
+    //负荷率
+    private BigDecimal pv;
+
+   private BigDecimal uaw;
+   private BigDecimal ubw;
+   private BigDecimal ucw;
+   private BigDecimal uabw;
+   private BigDecimal ubcw;
+   private BigDecimal ucaw;
+   private BigDecimal fw;
+   private BigDecimal f;
+   private BigDecimal inbalance;
+   private BigDecimal unbalance;
+   private BigDecimal t;
+    private BigDecimal t2 ;
+    private BigDecimal t3;
+    private BigDecimal t4;
+    private BigDecimal t5 ;
+    private BigDecimal t6 ;
+    private BigDecimal t7 ;
+    private BigDecimal t8 ;
+
+    private BigDecimal tpe ;
+    private BigDecimal tqe ;
+    private BigDecimal fpe ;
+    private BigDecimal fqe ;
+    private BigDecimal tps ;
+    private BigDecimal tqs ;
+    private BigDecimal fps ;
+    private BigDecimal fqs ;
+
+
+    public  RandomPower (){
+        BigDecimal div_1000 = new BigDecimal(1000);
+        BigDecimal div_100 = new BigDecimal(100);
+        BigDecimal div_500 = new BigDecimal(500);
+        BigDecimal div_0 = new BigDecimal(0);
+        BigDecimal div_220 = new BigDecimal(220);
+        BigDecimal div_380 = new BigDecimal(380);
+        BigDecimal div_50 = new BigDecimal(50);
+        //todo 创建随机电能数据
+        //RandomPower power = new RandomPower();
+        List<BigDecimal> list_i = getI();
+        List<BigDecimal> list_u200 = getU_220();
+        List<BigDecimal> list_u380 = getU_380();
+        List<BigDecimal> list_pf = get_Pf();
+        this.setIa(list_i.get(0));
+        this.setIb(list_i.get(1));
+        this.setIc(list_i.get(2));
+
+        this.setUa(list_u200.get(0));
+        this.setUb(list_u200.get(1));
+        this.setUc(list_u200.get(2));
+
+        this.setUab(list_u380.get(0));
+        this.setUbc(list_u380.get(1));
+        this.setUca(list_u380.get(2));
+
+        this.setPfa(list_pf.get(0));
+        this.setPfb(list_pf.get(1));
+        this.setPfc(list_pf.get(2));
+
+        this.setF(RandomHelper.getRandom(5000,20,100));
+
+
+        this.setPa(ia.multiply(ua).multiply(pfa).divide(div_1000,RoundingMode.UP).setScale(3, RoundingMode.HALF_UP));
+        this.setPb(ib.multiply(ub).multiply(pfb).divide(div_1000,RoundingMode.UP).setScale(3, RoundingMode.HALF_UP));
+        this.setPc(ic.multiply(uc).multiply(pfc).divide(div_1000,RoundingMode.UP).setScale(3, RoundingMode.HALF_UP));
+        this.setP(pa.add(pb).add(pc));
+        this.setQa(ia.multiply(ua).multiply(new BigDecimal(1).subtract(pfa)).divide(div_1000, RoundingMode.HALF_UP).setScale(3, RoundingMode.HALF_UP));
+        this.setQb(ib.multiply(ub).multiply(new BigDecimal(1).subtract(pfb)).divide(div_1000, RoundingMode.HALF_UP).setScale(3, RoundingMode.HALF_UP));
+        this.setQc(ic.multiply(uc).multiply(new BigDecimal(1).subtract(pfc)).divide(div_1000, RoundingMode.HALF_UP).setScale(3, RoundingMode.HALF_UP));
+        this.setQ(qa.add(qb).add(qc));
+
+        BigDecimal allP = (ia.multiply(ua).divide(div_1000,RoundingMode.HALF_UP)).add(ib.multiply(ub).divide(div_1000, RoundingMode.HALF_UP)).add(ic.multiply(uc).divide(div_1000, RoundingMode.HALF_UP));
+        this.setPf(p.multiply(div_100).divide(allP, RoundingMode.HALF_UP).divide(div_100, RoundingMode.HALF_UP).setScale(3, RoundingMode.HALF_UP));
+
+        this.setIz(RandomHelper.getRandom(1100,100,10));
+        //需量负荷
+        this.setDp(RandomHelper.getRandom(p.multiply(div_1000),div_500,div_1000));
+        //负荷率
+        this.setPv(RandomHelper.getRandom(8500,1500,100));
+        this.setUaw(getUw(ua,div_220));
+        this.setUbw(getUw(ub,div_220));
+        this.setUcw(getUw(uc,div_220));
+        this.setUabw(getUw(uab,div_380));
+        this.setUbcw(getUw(ubc,div_380));
+        this.setUcaw(getUw(uca,div_380));
+
+        this.setFw(f.subtract(div_50));
+
+        this.setInbalance(getUnbalance_I());
+        this.setUnbalance(getUnbalance_U());
+
+        this.setT(RandomHelper.getRandom(42,3));
+        this.setT2(div_0);
+        this.setT3(div_0);
+        this.setT4(div_0);
+        this.setT5(div_0);
+        this.setT6(div_0);
+        this.setT7(div_0);
+        this.setT8(div_0);
+
+
+    }
+
+    public void setEngine(BigDecimal pe, BigDecimal qe, BigDecimal ps, BigDecimal qs){
+        this.tpe = pe;
+        this.tqe = qe;
+        this.fpe = new BigDecimal(0);
+        this.fqe = new BigDecimal(0);
+        this.tps = ps;
+        this.tqs = qs;
+        this.fps = new BigDecimal(0);
+        this.fqs = new BigDecimal(0);
+
+    }
+    private List<BigDecimal> getU_220()
+    {
+        int ran =  RandomUtil.randomInt(2303, 2308);
+        List<BigDecimal> result = new ArrayList<>();
+        result.add(RandomHelper.getRandom(new BigDecimal(ran*10),new BigDecimal(150),new BigDecimal(100)));
+        result.add(RandomHelper.getRandom(new BigDecimal(ran*10),new BigDecimal(250),new BigDecimal(100)));
+        result.add(RandomHelper.getRandom(new BigDecimal(ran*10),new BigDecimal(150),new BigDecimal(100)));
+        return result;
+
+    }
+    private List<BigDecimal> getU_380()
+    {
+        int ran =  RandomUtil.randomInt(4003, 4008);
+        List<BigDecimal> result = new ArrayList<>();
+        result.add(RandomHelper.getRandom(new BigDecimal(ran*10),new BigDecimal(150),new BigDecimal(100)));
+        result.add(RandomHelper.getRandom(new BigDecimal(ran*10),new BigDecimal(250),new BigDecimal(100)));
+        result.add(RandomHelper.getRandom(new BigDecimal(ran*10),new BigDecimal(150),new BigDecimal(100)));
+        return result;
+    }
+    private List<BigDecimal> getI(){
+        int ran = RandomUtil.randomInt(1000, 1200);
+        List<BigDecimal> result = new ArrayList<>();
+        result.add(RandomHelper.getRandom(ran*100,450,100));
+        result.add(RandomHelper.getRandom(ran*100,350,100));
+        result.add(RandomHelper.getRandom(ran*100,550,100));
+        return result;
+    }
+    public BigDecimal getUw(BigDecimal u, BigDecimal un)
+    {
+        BigDecimal w = (u.subtract(un)).multiply(new BigDecimal(100)).divide(un, RoundingMode.HALF_UP);
+        return w;
+    }
+
+    private List<BigDecimal> get_Pf()
+    {
+        int ran = RandomUtil.randomInt(955, 965);
+        List<BigDecimal> list = new ArrayList<BigDecimal>();
+        list.add(RandomHelper.getRandom(ran * 10, 50, 10000));
+        list.add(RandomHelper.getRandom(ran * 10, 50, 10000));
+        list.add(RandomHelper.getRandom(ran * 10, 50, 10000));
+        return list;
+    }
+
+    private BigDecimal getUnbalance_I()
+    {
+        BigDecimal[] arr = new BigDecimal[3];
+        arr[0] = ia;
+        arr[1] = ib;
+        arr[2] = ic;
+        BigDecimal max = ArrayUtil.max(arr);
+        BigDecimal min = ArrayUtil.min(arr);
+        return (max.subtract(min)).multiply(new BigDecimal(100)).divide(max, RoundingMode.HALF_UP).setScale(3, RoundingMode.HALF_UP);
+    }
+
+    private BigDecimal getUnbalance_U()
+    {
+        BigDecimal[] arr = new BigDecimal[3];
+        arr[0] = ua;
+        arr[1] = ub;
+        arr[2] = uc;
+        BigDecimal max = ArrayUtil.max(arr);
+        BigDecimal ave = ua.add(ub).add(uc).divide(new BigDecimal(3), RoundingMode.HALF_UP);
+        return  (max.subtract(ave)).multiply(new BigDecimal(100)).divide(ave, RoundingMode.HALF_UP).setScale(3, RoundingMode.HALF_UP);
+
+    }
+
+}

+ 111 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/java/cn/vbdsm/hj212/modbus/ws/data/TerminalData.java

@@ -0,0 +1,111 @@
+package cn.vbdsm.hj212.modbus.ws.data;
+
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson2.JSON;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.omg.CORBA.PUBLIC_MEMBER;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.ResourceLoader;
+
+import java.io.*;
+import java.math.BigDecimal;
+import java.net.URL;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TransferQueue;
+
+
+@Data
+@Slf4j
+public class TerminalData {
+
+
+    public TerminalData(){
+       // this.key = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+    }
+
+    public TerminalData(String terminalId,String companyId){
+      this.terminalId = terminalId;
+      this.companyId = companyId;
+    }
+
+    private  String terminalId;
+
+    private String companyId;
+
+    private Map<String, BigDecimal> dayTotal_p = new HashMap<>();
+
+    private Map<String,BigDecimal> dayTotal_e = new HashMap<>();
+
+    private BigDecimal total_p = new BigDecimal(0);
+
+    private BigDecimal total_e = new BigDecimal(0);
+
+    @JsonIgnore
+    private String key = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+
+    public BigDecimal getCurDayTotalP(){
+        return this.dayTotal_p.getOrDefault(this.key,new BigDecimal(0));
+    }
+    public BigDecimal getCurDayTotalE(){
+        return this.dayTotal_e.getOrDefault(this.key,new BigDecimal(0));
+    }
+
+    public TerminalData SetDayTotalP(BigDecimal d){
+        if(this.dayTotal_p.containsKey(key)){
+            dayTotal_p.remove(key);
+        }
+        dayTotal_p.put(key,d);
+        return this;
+    }
+    public TerminalData SetTotalP(BigDecimal d)
+    {
+        total_p = d;
+        return this;
+    }
+    public TerminalData SetDayTotalE(BigDecimal d){
+        if(this.dayTotal_e.containsKey(key)){
+            dayTotal_e.remove(key);
+        }
+        dayTotal_e.put(key,d);
+        return this;
+    }
+    public TerminalData SetTotalE(BigDecimal d)
+    {
+        total_e = d;
+        return this;
+    }
+
+
+    public void saveFileInfo()  {
+
+        String fileName = StrUtil.format("{}@{}.json",companyId,terminalId);
+        //ClassPathResource classPathResource = new ClassPathResource(StrUtil.format("mock"));
+        try {
+            //String resourcePath = classPathResource.getURL().toString().substring(6);
+            File saveDir = new File("./mock");
+            if (!saveDir.exists()) {
+                saveDir.mkdir();
+            }
+            File file = new File(saveDir.getAbsoluteFile()+ "/" + fileName);
+            if(!file.exists()){
+                file.createNewFile();
+            }
+            FileWriter fw = new FileWriter(file);
+            String content = JSON.toJSONString(this);
+            fw.write(content);
+            fw.flush();
+            fw.close();
+        } catch (IOException e) {
+            log.error("{}@{}.json文件保存失败!",companyId,terminalId);
+        }
+    }
+}

+ 18 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/resources/application.yml

@@ -0,0 +1,18 @@
+server:
+    port: 18080
+vbdsm:
+    socket:
+        server:
+            enable: true
+            bindPort: 18888 #服务器端口,默认是19999
+            bindIp: 0.0.0.0 #服务器ip 默认0.0.0.0
+            bossThreadNum: 1 #netty boss线程数 默认为1
+            workThreadNum: 4 #netty work线程数,默认为4
+    ws:
+        url: http://192.168.0.104:7100/services/UploadData?wsdl
+        method: UploadAllData
+        key: WOSHI123456MIYAO
+    monitor:
+        terminals: 3@YC0001,YC0002
+
+

+ 57 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/resources/logback.xml

@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="60 seconds" debug="false">
+    <property name="rootLevel" value="INFO"/>
+    <property name="appName" value="vbdsm-hj212-modbus-server"/>
+    <contextName>${appName}</contextName>
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger- %msg%n</pattern>
+            <charset>UTF-8</charset>
+        </encoder>
+    </appender>
+
+    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <FileNamePattern>${catalina.home:-.}/logs/${appName}.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
+            <maxFileSize>100MB</maxFileSize>
+            <maxHistory>30</maxHistory>
+            <totalSizeCap>2GB</totalSizeCap>
+        </rollingPolicy>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
+            <charset>UTF-8</charset>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>INFO</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <FileNamePattern>${catalina.home:-.}/logs/${appName}.%d{yyyy-MM-dd}.%i.error.log</FileNamePattern>
+            <maxFileSize>100MB</maxFileSize>
+            <maxHistory>30</maxHistory>
+            <totalSizeCap>2GB</totalSizeCap>
+        </rollingPolicy>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
+            <charset>UTF-8</charset>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>ERROR</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <logger name="org.springframework" level="warn"/>
+    <logger name="org.apache.http" level="warn"/>
+    <logger name="io.netty" level="info"/>
+    <root level="${rootLevel}">
+        <appender-ref ref="STDOUT"/>
+        <appender-ref ref="INFO"/>
+        <appender-ref ref="ERROR"/>
+    </root>
+</configuration>

+ 12 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/resources/mock/3@YC10001.json

@@ -0,0 +1,12 @@
+{
+  "terminalId": "YC10001",
+  "companyId": "3",
+  "dayTotal_p": {
+    "20230925": 0
+  },
+  "dayTotal_e": {
+    "20230925": 0
+  },
+  "total_p": 0,
+  "total_e": 0
+}

+ 6 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/main/resources/static/index.html

@@ -0,0 +1,6 @@
+<html>
+<body>
+<h1>hello word!!!</h1>
+<p>this is a html page</p>
+</body>
+</html>

+ 13 - 0
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-modbus/src/test/java/cn/vbdsm/hj212/modbus/VbdsmHj212ModbusApplicationTests.java

@@ -0,0 +1,13 @@
+package cn.vbdsm.hj212.modbus;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class VbdsmHj212ModbusApplicationTests {
+
+    @Test
+    void contextLoads() {
+    }
+
+}

+ 3 - 9
VB_DSM_V2.1/vbdsm-job/Dockerfile

@@ -1,21 +1,15 @@
-FROM tomcat:8.5.38
-MAINTAINER Vber
-
-RUN rm -rf webapps
-
-
-
 FROM openjdk:8-jre-slim
 MAINTAINER Vber
 
 ENV PARAMS="--server.port=8080"
-
+USER root
 RUN mkdir -p /vbdsm/logs
 
+
 ENV TZ=Asia/Shanghai
 RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
 
-ADD ./xxl-job-admin/target/xxl-job-admin-2.0.0.jar /app.jar
+ADD ./xxl-job-admin/target/xxl-job-admin-*.jar /app.jar
 
 WORKDIR /vbdsm/logs
 

+ 6 - 2
VB_DSM_V2.1/vbdsm-statistics/vbdsm-analysis/src/main/java/cn/vbdsm/analysis/timer/impl/RebuildTableTimer.java

@@ -78,11 +78,13 @@ public class RebuildTableTimer {
 			LOG.error("获取表结构信息失败" + e.getStackTrace());
 			return false;
 		}
+        rebuildSql = rebuildSql.replaceFirst("PRIMARY (.*) USING BTREE","PRIMARY $1 ,$1 USING BTREE");
 		//重置自增长值
 		rebuildSql = rebuildSql.replaceFirst("AUTO_INCREMENT=\\d+ ","");
 		
 		try{
-			//判断重命名后的表存不存在,如果存在则先将其删掉
+
+		   //判断重命名后的表存不存在,如果存在则先将其删掉
 			jdbc.update(dropSql);
 			//开始重命名表
 			jdbc.update(renameSql);
@@ -126,7 +128,9 @@ public class RebuildTableTimer {
 //		LOG.warn("开始重建" + t1 + "表...");
 //		boolean r1 = rebuildTable(t1);
 //		LOG.warn("重建完成,执行结果:" + r1);
-	
+
+
+
 		String t2 = analDateAvgDao.getTableName();
 		LOG.info("开始重建" + t2 + "表...");
 		boolean r2 = rebuildTable(t2);

+ 5 - 5
VB_DSM_V2.1/vbdsm-statistics/vbdsm-analysis/src/main/resources/local/db.properties

@@ -1,25 +1,25 @@
 #sysbase database mysql config
 sysbase.mysql.jdbc.driverClassName=com.mysql.cj.jdbc.Driver
-sysbase.mysql.jdbc.url=jdbc:mysql://47.112.30.247:13306/vbdsm_sysbase?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&useSSL=false
+sysbase.mysql.jdbc.url=jdbc:mysql://47.112.30.247:23306/vbdsm_sysbase?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&useSSL=false
 sysbase.mysql.jdbc.username=root
 sysbase.mysql.jdbc.password=123456
 #gov database mysql config
 gov.mysql.jdbc.driverClassName=com.mysql.cj.jdbc.Driver
-gov.mysql.jdbc.url=jdbc:mysql://47.112.30.247:13306/vbdsm_powergov?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&useSSL=false
+gov.mysql.jdbc.url=jdbc:mysql://47.112.30.247:23306/vbdsm_powergov?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&useSSL=false
 gov.mysql.jdbc.username=root
 gov.mysql.jdbc.password=123456
 #curr database mysql config
 curr.mysql.jdbc.driverClassName=com.mysql.cj.jdbc.Driver
-curr.mysql.jdbc.url=jdbc:mysql://47.112.30.247:13306/vbdsm?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&useSSL=false
+curr.mysql.jdbc.url=jdbc:mysql://47.112.30.247:23306/vbdsm?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&useSSL=false
 curr.mysql.jdbc.username=root
 curr.mysql.jdbc.password=123456
 #business database config
 db2023.mysql.jdbc.driverClassName=com.mysql.cj.jdbc.Driver
-db2023.mysql.jdbc.url=jdbc:mysql://47.112.30.247:13306/vbdsm_2023?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&useSSL=false
+db2023.mysql.jdbc.url=jdbc:mysql://47.112.30.247:23306/vbdsm_2023?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&useSSL=false
 db2023.mysql.jdbc.username=root
 db2023.mysql.jdbc.password=123456
 db2024.mysql.jdbc.driverClassName=com.mysql.cj.jdbc.Driver
-db2024.mysql.jdbc.url=jdbc:mysql://47.112.30.247:13306/vbdsm_2024?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&useSSL=false
+db2024.mysql.jdbc.url=jdbc:mysql://47.112.30.247:23306/vbdsm_2024?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&useSSL=false
 db2024.mysql.jdbc.username=root
 db2024.mysql.jdbc.password=123456
 #alibaba druid config

+ 13 - 12
VB_DSM_V2.1/vbdsm-statistics/vbdsm-analysis/src/main/resources/local/schedule.xml

@@ -4,36 +4,36 @@
    	<timer>clearLogsTimer.clearHistroyLog</timer>
    	<timer>clearBibleWaringInfoTimer.clearHistroy</timer>
    	<!-- <timer>energyPriceTimer.energyPrice</timer> -->
-   	
+
    	<timer>fgpTimer.companyFgp</timer>
    	<timer>fgpTimer.companyFgpForLastDate</timer>
    	<timer>fgpTimer.companyFgpFor7DaysAgo</timer>
    	<!-- <timer>fgpTimer.companyFgpForYestDayDate</timer> -->
-   	
+
    	<timer>fgpTimer.monitorFgpForEvery</timer>
    	<timer>fgpTimer.monitorFgpForLastDate</timer>
    	<timer>fgpTimer.monitorFgpFor7DaysAgo</timer>
    	<!-- <timer>fgpTimer.monitorFgpForYestDayDate</timer> -->
-   	
+
    	<timer>monitorLimitTimer.monitorDateTimer</timer>
    	<timer>monitorLimitTimer.monitorLastDateTimer</timer>
    	<timer>monitorLimitTimer.monitorMonthAndYearTimer</timer>
    	<timer>monitorLimitTimer.monitorLastYearTimer</timer>
-   	
+
     <timer>divisionLimitTimer.divisionDateTimer</timer>
    	<timer>divisionLimitTimer.divisionMonthTimer</timer>
-   	
+
    	<timer>powerOnlineTimer.powerTimer</timer>
    	<timer>powerOnlineTimer.powerDayTimer</timer>
-   	
+
    	<timer>shiftsEnergyTimer.today</timer>
    	<timer>shiftsEnergyTimer.yesterAndBefore</timer>
-   	
+
    	<timer>stationEnergyTimer.today</timer>
    	<timer>stationEnergyTimer.yesterAndBefore</timer>
-   	
+
    	<timer>enterpriseStateTimer.EnterpriseStateTimingTask</timer>
-   	
+
    	<timer>powerFactorAlarmTimer.powerFactorAlarm</timer>
    	<timer>voltageMessageAlarmTimer.voltageMessageAlarm</timer>
    	<timer>threePhaseUnbalanceTimer.threePhaseUnbalanceAlarm</timer>
@@ -42,14 +42,15 @@
    	<timer>zeroSequenceCurrentTimer.allCommand</timer>
    	<timer>phaseFaultTimer.allCommand</timer>
    	<timer>basicElectricityChargeTimer.allCommand</timer>
-   	
+
    	<timer>monitorOnlineTimer.updateMonitorOnline</timer>
-   	
+
    	<timer>waterGasHeatStatisticsTimer.integralPoint</timer>
    	<timer>waterGasHeatStatisticsTimer.dayMaximum</timer>
    	<timer>waterGasHeatStatisticsTimer.monthMaximum</timer>
    	<timer>waterGasHeatStatisticsTimer.yearMaximum</timer>
    	<timer>waterGasHeatStatisticsTimer.otherEnergydailyDosage</timer>
-   	
+
    	<timer>overWarnTimer.warnningInfoTimer</timer>
+   	<timer>rebuildTableTimer.rebuildTables</timer>
 </timers>

+ 1 - 1
VB_DSM_V2.1/vbdsm-web/vbdsm-manage/src/main/java/cn/vbdsm/manage/dao/PowerUserDao.java

@@ -55,7 +55,7 @@ public class PowerUserDao extends BaseDaoSupport<PowerUser, Long>{
 		if(null != isRoot && 1 == isRoot){
 			sql.append(" where  t1.id = t2.orgId and t1.orgType = 1");
 		}else{
-			sql.append(" ,t_site");
+			sql.append(" ,t_org_site t");
 			sql.append(" where t.orgId=t1.id and t1.id = t2.orgId and t1.orgType = 1");
 			sql.append(" and t.siteId = :siteId");
 			param.put("siteId", fromSite);