diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9154f4c
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,26 @@
+# ---> Java
+# Compiled class file
+*.class
+
+# Log file
+*.log
+
+# BlueJ files
+*.ctxt
+
+# Mobile Tools for Java (J2ME)
+.mtj.tmp/
+
+# Package Files #
+*.jar
+*.war
+*.nar
+*.ear
+*.zip
+*.tar.gz
+*.rar
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+replay_pid*
+
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..0128c24
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,174 @@
+
+ 4.0.0
+
+ com.integrated_yjb_dataDocking
+ integrated_yjb_dataDocking
+ 1.0
+ jar
+
+ integrated_yjb_dataDocking
+ http://maven.apache.org
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.3.12.RELEASE
+
+
+
+
+ UTF-8
+ 1.8
+ 2.0.4
+ 5.8.25
+ 1.16.18
+ 5.4.0
+ 2.3.12.RELEASE
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
+
+ com.ghgande
+ j2mod
+ 3.1.1
+
+
+ org.postgresql
+ postgresql
+ 42.5.0
+
+
+ com.alibaba
+ fastjson
+ 1.2.44
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+
+ org.springframework.boot
+ spring-boot-starter-aop
+
+
+ mysql
+ mysql-connector-java
+
+
+ org.mybatis.spring.boot
+ mybatis-spring-boot-starter
+ 1.3.2
+
+
+ com.alibaba
+ druid
+ 1.1.13
+
+
+ com.alibaba
+ jconsole
+
+
+ com.alibaba
+ tools
+
+
+
+
+
+
+
+
+
+
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+ ${knife4j.version}
+
+
+
+
+ cn.hutool
+ hutool-core
+ ${hutool.version}
+
+
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+ true
+
+
+
+
+ net.java.dev.jna
+ jna
+ ${jna.version}
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.1
+
+ ${jdk.version}
+ ${jdk.version}
+ ${project.build.sourceEncoding}
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ ${spring-boot.version}
+
+
+
+ repackage
+
+
+
+
+
+
+
+
+ src/main/resources
+
+ **/*.*
+
+
+
+ res
+ false
+
+ **/*.properties
+ **/*.xml
+
+
+
+ libs
+ false
+
+ **/*.dll
+
+
+
+
+
diff --git a/readme.md b/readme.md
index 9d07aa0..e86b136 100644
--- a/readme.md
+++ b/readme.md
@@ -1 +1,3 @@
-111
\ No newline at end of file
+# integrated_yjb_dataDocking
+
+龙钢与省厅modbus协议对接
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/DahuaApplication.java b/src/main/java/com/netsdk/DahuaApplication.java
new file mode 100644
index 0000000..c798f24
--- /dev/null
+++ b/src/main/java/com/netsdk/DahuaApplication.java
@@ -0,0 +1,23 @@
+package com.netsdk;
+
+import com.ghgande.j2mod.modbus.slave.ModbusSlave;
+import com.ghgande.j2mod.modbus.slave.ModbusSlaveFactory;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+/**
+ * 主启动
+ *
+ * @author Yan Xu
+ * @version 1.0
+ * @date 2021/8/6
+ * Copyright © goodits
+ */
+@SpringBootApplication
+@EnableScheduling
+public class DahuaApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(DahuaApplication.class,args);
+ }
+}
diff --git a/src/main/java/com/netsdk/StartModBusTcpServer.java b/src/main/java/com/netsdk/StartModBusTcpServer.java
new file mode 100644
index 0000000..e5f752f
--- /dev/null
+++ b/src/main/java/com/netsdk/StartModBusTcpServer.java
@@ -0,0 +1,48 @@
+package com.netsdk;
+
+import com.ghgande.j2mod.modbus.slave.ModbusSlave;
+import com.ghgande.j2mod.modbus.slave.ModbusSlaveFactory;
+import com.netsdk.service.DeviceService;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+/**
+ * spring boot 启动后启动 modbusTcp服务
+ *
+ * @author lin
+ */
+@Component
+@Order(value = 1)
+public class StartModBusTcpServer implements ApplicationRunner {
+
+ @Resource
+ private DeviceService deviceService;
+
+
+ // 线圈(Coils) 01,05,15 00000-09999 读写 开关量输出new SimpleDigitalOut(true);
+ // 离散输入(DI) 02 10000-19999 只读 开关量输入new SimpleDigitalIn(false);
+ // 保持寄存器 读写 new SimpleRegister(251);
+ // 输入寄存器 只读 new SimpleInputRegister(45);
+ @Override
+ public void run(ApplicationArguments args) throws Exception {
+ deviceService.initMqOrderList();
+ // 离散输入(DI) 02 10000-1FFFF 10001-19999 只读位
+ // 输入寄存器(IR) 04 30000-3FFFF 30001-39999 只读16位值
+ ModbusSlave slave = ModbusSlaveFactory.createTCPSlave(1888, 5);
+ // 高炉
+ slave.addProcessImage(1, deviceService.getGlProcessImage());
+ // 转炉
+ slave.addProcessImage(2, deviceService.getZlProcessImage());
+ // 精炼炉
+ slave.addProcessImage(3, deviceService.getLfProcessImage());
+ // 煤气报警器
+ slave.addProcessImage(4, deviceService.getMqProcessImage());
+ slave.open();
+
+ }
+}
diff --git a/src/main/java/com/netsdk/config/Knife4jConfiguration.java b/src/main/java/com/netsdk/config/Knife4jConfiguration.java
new file mode 100644
index 0000000..434b190
--- /dev/null
+++ b/src/main/java/com/netsdk/config/Knife4jConfiguration.java
@@ -0,0 +1,67 @@
+package com.netsdk.config;
+
+import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
+import com.google.common.base.Predicates;
+import springfox.documentation.service.Contact;
+import org.springframework.boot.autoconfigure.web.ServerProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+/**
+ * 接口文档配置
+ * @author Yan Xu
+ * @version 1.0
+ * @date 2021/8/7
+ * Copyright © goodits
+ */
+@Configuration
+@EnableSwagger2
+@EnableKnife4j
+public class Knife4jConfiguration {
+
+
+ private final ServerProperties serverProperties;
+ private final SysInfoProperties sysInfoProperties;
+
+ public Knife4jConfiguration(ServerProperties serverProperties, SysInfoProperties sysInfoProperties) {
+ this.serverProperties = serverProperties;
+ this.sysInfoProperties = sysInfoProperties;
+ }
+
+ private ApiInfo apiInfo() {
+ String serviceUrl = "http://localhost:" + serverProperties.getPort();
+ return new ApiInfoBuilder()
+ .title(sysInfoProperties.getChineseName()+"后台接口文档")
+ .description(sysInfoProperties.getDescription())
+ .termsOfServiceUrl(serviceUrl)
+ .version(sysInfoProperties.getVersion())
+ .contact(new Contact(sysInfoProperties.getPic(), null, "2366528143@qq.com"))
+ .build();
+ }
+
+ @Bean(value = "defaultApi2")
+ public Docket defaultApi2() {
+ return new Docket(DocumentationType.SWAGGER_2)
+ .apiInfo(apiInfo())
+ //分组名称
+ .groupName("defaultApi2")
+ .select()
+ //这里指定Controller扫描包路径
+ //.apis(RequestHandlerSelectors.basePackage("com.goodits.controller"))
+ // 对所有api进行监控
+ .apis(RequestHandlerSelectors.any())
+ //错误路径不监控
+ .paths(Predicates.not(PathSelectors.regex("/error.*")))
+ //服务质量检测路径不监控
+ .paths(Predicates.not(PathSelectors.regex("/actuator.*")))
+ .paths(PathSelectors.any())
+ .build();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/config/MasterDataSourceConfig.java b/src/main/java/com/netsdk/config/MasterDataSourceConfig.java
new file mode 100644
index 0000000..3fd4236
--- /dev/null
+++ b/src/main/java/com/netsdk/config/MasterDataSourceConfig.java
@@ -0,0 +1,71 @@
+package com.netsdk.config;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.mybatis.spring.SqlSessionFactoryBean;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.core.io.DefaultResourceLoader;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+
+import javax.sql.DataSource;
+
+/**
+ * 说明:第一数据源配置
+ * 作者:luoxiaobao
+ * 官网:www.qdkjchina.com
+ */
+@Configuration
+@MapperScan(basePackages = MasterDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "masterSqlSessionFactory") //扫描 Mapper 接口并容器管理
+public class MasterDataSourceConfig {
+
+ static final String PACKAGE = "com.netsdk.mapper.datasource"; //master 目录
+ static final String MAPPER_LOCATION = "classpath:mybatis/datasource/*/*.xml"; //扫描的 xml 目录
+ static final String CONFIG_LOCATION = "classpath:mybatis/datasource/mybatis-config.xml"; //自定义的mybatis config 文件位置
+ static final String TYPE_ALIASES_PACKAGE = "com.netsdk.entity"; //扫描的 实体类 目录
+
+ @Value("${spring.datasource.url}")
+ private String url;
+
+ @Value("${spring.datasource.username}")
+ private String user;
+
+ @Value("${spring.datasource.password}")
+ private String password;
+
+ @Value("${spring.datasource.driver-class-name}")
+ private String driverClass;
+
+ @Bean(name = "masterDataSource")
+ @Primary
+ public DataSource masterDataSource() {
+ DruidDataSource dataSource = new DruidDataSource();
+ dataSource.setDriverClassName(driverClass);
+ dataSource.setUrl(url);
+ dataSource.setUsername(user);
+ dataSource.setPassword(password);
+ return dataSource;
+ }
+
+ @Bean(name = "masterTransactionManager")
+ @Primary
+ public DataSourceTransactionManager masterTransactionManager() {
+ return new DataSourceTransactionManager(masterDataSource());
+ }
+
+ @Bean(name = "masterSqlSessionFactory")
+ @Primary
+ public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource masterDataSource)throws Exception {
+ final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
+ sessionFactory.setDataSource(masterDataSource);
+ sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MasterDataSourceConfig.MAPPER_LOCATION));
+ sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(MasterDataSourceConfig.CONFIG_LOCATION));
+ sessionFactory.setTypeAliasesPackage(MasterDataSourceConfig.TYPE_ALIASES_PACKAGE);
+ return sessionFactory.getObject();
+ }
+}
diff --git a/src/main/java/com/netsdk/config/RedisConfig.java b/src/main/java/com/netsdk/config/RedisConfig.java
new file mode 100644
index 0000000..af56555
--- /dev/null
+++ b/src/main/java/com/netsdk/config/RedisConfig.java
@@ -0,0 +1,44 @@
+package com.netsdk.config;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+/**
+ * 说明:Redis
+
+
+ */
+@Configuration
+public class RedisConfig {
+
+ @Bean
+ @SuppressWarnings("all")
+ public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
+ RedisTemplate template = new RedisTemplate();
+ template.setConnectionFactory(factory);
+ Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
+ ObjectMapper om = new ObjectMapper();
+ om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+ om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
+ jackson2JsonRedisSerializer.setObjectMapper(om);
+ StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
+ // key采用String的序列化方式
+ template.setKeySerializer(stringRedisSerializer);
+ // hash的key也采用String的序列化方式
+ template.setHashKeySerializer(stringRedisSerializer);
+ // value序列化方式采用jackson
+ template.setValueSerializer(jackson2JsonRedisSerializer);
+ // hash的value序列化方式采用jackson
+ template.setHashValueSerializer(jackson2JsonRedisSerializer);
+ template.afterPropertiesSet();
+ return template;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/config/StaticFileConfig.java b/src/main/java/com/netsdk/config/StaticFileConfig.java
new file mode 100644
index 0000000..3ad174e
--- /dev/null
+++ b/src/main/java/com/netsdk/config/StaticFileConfig.java
@@ -0,0 +1,23 @@
+package com.netsdk.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+/**
+ * 静态文件访问映射
+ *
+ * @author Yan Xu
+ * @version 1.0
+ * @date 2021/8/7
+ * Copyright © goodits
+ */
+@Configuration
+public class StaticFileConfig implements WebMvcConfigurer {
+
+ @Override
+ public void addResourceHandlers(ResourceHandlerRegistry registry) {
+ //访问 /img/**会被解析为/static/img/**
+ registry.addResourceHandler("/img/**").addResourceLocations("classpath:/static/img/");
+ }
+}
diff --git a/src/main/java/com/netsdk/config/SysInfoProperties.java b/src/main/java/com/netsdk/config/SysInfoProperties.java
new file mode 100644
index 0000000..802accb
--- /dev/null
+++ b/src/main/java/com/netsdk/config/SysInfoProperties.java
@@ -0,0 +1,27 @@
+package com.netsdk.config;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+// 注册为组件
+@EnableConfigurationProperties
+// 启用配置自动注入功能
+@ConfigurationProperties(prefix = "project")
+//指定类对应的配置项前缀
+@ApiModel(description = "系统描述")
+public class SysInfoProperties {
+ @ApiModelProperty(value = "应用中文名")
+ private String chineseName;
+ @ApiModelProperty(value = "应用描述")
+ private String description;
+ @ApiModelProperty(value = "版本")
+ private String version;
+ @ApiModelProperty(value = "开发")
+ private String pic;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/entity/PageData.java b/src/main/java/com/netsdk/entity/PageData.java
new file mode 100644
index 0000000..b5458ef
--- /dev/null
+++ b/src/main/java/com/netsdk/entity/PageData.java
@@ -0,0 +1,149 @@
+package com.netsdk.entity;
+
+import com.alibaba.druid.proxy.jdbc.ClobProxyImpl;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.BufferedReader;
+import java.io.Reader;
+import java.util.*;
+
+/**
+ * 说明:参数封装Map
+
+
+ */
+public class PageData extends HashMap