Compare commits
No commits in common. "dev" and "main" have entirely different histories.
|
@ -1,26 +0,0 @@
|
||||||
# ---> 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*
|
|
||||||
|
|
174
pom.xml
174
pom.xml
|
@ -1,174 +0,0 @@
|
||||||
<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">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
|
||||||
|
|
||||||
<groupId>com.integrated_yjb_dataDocking</groupId>
|
|
||||||
<artifactId>integrated_yjb_dataDocking</artifactId>
|
|
||||||
<version>1.0</version>
|
|
||||||
<packaging>jar</packaging>
|
|
||||||
|
|
||||||
<name>integrated_yjb_dataDocking</name>
|
|
||||||
<url>http://maven.apache.org</url>
|
|
||||||
|
|
||||||
<parent>
|
|
||||||
<groupId>org.springframework.boot</groupId>
|
|
||||||
<artifactId>spring-boot-starter-parent</artifactId>
|
|
||||||
<version>2.3.12.RELEASE</version>
|
|
||||||
<relativePath/>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<properties>
|
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
<jdk.version>1.8</jdk.version>
|
|
||||||
<knife4j.version>2.0.4</knife4j.version>
|
|
||||||
<hutool.version>5.8.25</hutool.version>
|
|
||||||
<lombok.version>1.16.18</lombok.version>
|
|
||||||
<jna.version>5.4.0</jna.version>
|
|
||||||
<spring-boot.version>2.3.12.RELEASE</spring-boot.version>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.springframework.boot</groupId>
|
|
||||||
<artifactId>spring-boot-starter-validation</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.ghgande</groupId>
|
|
||||||
<artifactId>j2mod</artifactId>
|
|
||||||
<version>3.1.1</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.postgresql</groupId>
|
|
||||||
<artifactId>postgresql</artifactId>
|
|
||||||
<version>42.5.0</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.alibaba</groupId>
|
|
||||||
<artifactId>fastjson</artifactId>
|
|
||||||
<version>1.2.44</version>
|
|
||||||
</dependency>
|
|
||||||
<!-- Spring Web -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.springframework.boot</groupId>
|
|
||||||
<artifactId>spring-boot-starter-web</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.springframework.boot</groupId>
|
|
||||||
<artifactId>spring-boot-starter-data-redis</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<!-- spring aop -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.springframework.boot</groupId>
|
|
||||||
<artifactId>spring-boot-starter-aop</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>mysql</groupId>
|
|
||||||
<artifactId>mysql-connector-java</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.mybatis.spring.boot</groupId>
|
|
||||||
<artifactId>mybatis-spring-boot-starter</artifactId>
|
|
||||||
<version>1.3.2</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.alibaba</groupId>
|
|
||||||
<artifactId>druid</artifactId>
|
|
||||||
<version>1.1.13</version>
|
|
||||||
<exclusions>
|
|
||||||
<exclusion>
|
|
||||||
<groupId>com.alibaba</groupId>
|
|
||||||
<artifactId>jconsole</artifactId>
|
|
||||||
</exclusion>
|
|
||||||
<exclusion>
|
|
||||||
<groupId>com.alibaba</groupId>
|
|
||||||
<artifactId>tools</artifactId>
|
|
||||||
</exclusion>
|
|
||||||
</exclusions>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- <dependency>-->
|
|
||||||
<!-- <groupId>com.baomidou</groupId>-->
|
|
||||||
<!-- <artifactId>mybatis-plus-boot-starter</artifactId>-->
|
|
||||||
<!-- <version>3.5.12</version>-->
|
|
||||||
<!-- </dependency>-->
|
|
||||||
<!--knife4j-->
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.github.xiaoymin</groupId>
|
|
||||||
<artifactId>knife4j-spring-boot-starter</artifactId>
|
|
||||||
<version>${knife4j.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!--Hutool工具包-->
|
|
||||||
<dependency>
|
|
||||||
<groupId>cn.hutool</groupId>
|
|
||||||
<artifactId>hutool-core</artifactId>
|
|
||||||
<version>${hutool.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!--lombok-->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.projectlombok</groupId>
|
|
||||||
<artifactId>lombok</artifactId>
|
|
||||||
<version>${lombok.version}</version>
|
|
||||||
<optional>true</optional>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!--jna-->
|
|
||||||
<dependency>
|
|
||||||
<groupId>net.java.dev.jna</groupId>
|
|
||||||
<artifactId>jna</artifactId>
|
|
||||||
<version>${jna.version}</version>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
<build>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
|
||||||
<version>3.1</version>
|
|
||||||
<configuration>
|
|
||||||
<source>${jdk.version}</source>
|
|
||||||
<target>${jdk.version}</target>
|
|
||||||
<encoding>${project.build.sourceEncoding}</encoding>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.springframework.boot</groupId>
|
|
||||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
|
||||||
<version>${spring-boot.version}</version>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<goals>
|
|
||||||
<goal>repackage</goal>
|
|
||||||
</goals>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
<resources>
|
|
||||||
<!-- 读取resource文件夹下的所有文件-->
|
|
||||||
<resource>
|
|
||||||
<directory>src/main/resources</directory>
|
|
||||||
<includes>
|
|
||||||
<include>**/*.*</include>
|
|
||||||
</includes>
|
|
||||||
</resource>
|
|
||||||
<resource>
|
|
||||||
<directory>res</directory>
|
|
||||||
<filtering>false</filtering>
|
|
||||||
<includes>
|
|
||||||
<include>**/*.properties</include>
|
|
||||||
<include>**/*.xml</include>
|
|
||||||
</includes>
|
|
||||||
</resource>
|
|
||||||
<resource>
|
|
||||||
<directory>libs</directory>
|
|
||||||
<filtering>false</filtering>
|
|
||||||
<includes>
|
|
||||||
<include>**/*.dll</include>
|
|
||||||
</includes>
|
|
||||||
</resource>
|
|
||||||
</resources>
|
|
||||||
</build>
|
|
||||||
</project>
|
|
|
@ -1,23 +0,0 @@
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,48 +0,0 @@
|
||||||
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();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,67 +0,0 @@
|
||||||
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();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,71 +0,0 @@
|
||||||
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();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,44 +0,0 @@
|
||||||
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<String, Object> redisTemplate(RedisConnectionFactory factory) {
|
|
||||||
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,23 +0,0 @@
|
||||||
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/");
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
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;
|
|
||||||
}
|
|
|
@ -1,149 +0,0 @@
|
||||||
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<Object, Object> implements Map<Object, Object> {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
Map<Object, Object> map = null;
|
|
||||||
HttpServletRequest request;
|
|
||||||
|
|
||||||
public PageData(HttpServletRequest request) {
|
|
||||||
this.request = request;
|
|
||||||
Map properties = request.getParameterMap();
|
|
||||||
Map<Object, Object> returnMap = new HashMap<Object, Object>();
|
|
||||||
Iterator<Object> entries = properties.entrySet().iterator();
|
|
||||||
Entry<Object, Object> entry;
|
|
||||||
String name = "";
|
|
||||||
String value = "";
|
|
||||||
while (entries.hasNext()) {
|
|
||||||
entry = (Entry<Object, Object>) entries.next();
|
|
||||||
name = (String) entry.getKey();
|
|
||||||
Object valueObj = entry.getValue();
|
|
||||||
if (null == valueObj) {
|
|
||||||
value = "";
|
|
||||||
} else if (valueObj instanceof String[]) {
|
|
||||||
String[] values = (String[]) valueObj;
|
|
||||||
for (int i = 0; i < values.length; i++) {
|
|
||||||
value = values[i] + ",";
|
|
||||||
}
|
|
||||||
value = value.substring(0, value.length() - 1);
|
|
||||||
} else {
|
|
||||||
value = valueObj.toString();
|
|
||||||
}
|
|
||||||
returnMap.put(name, value);
|
|
||||||
}
|
|
||||||
map = returnMap;
|
|
||||||
}
|
|
||||||
|
|
||||||
public PageData() {
|
|
||||||
map = new HashMap<Object, Object>();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Object get(Object key) {
|
|
||||||
Object obj = null;
|
|
||||||
if (map.get(key) instanceof Object[]) {
|
|
||||||
Object[] arr = (Object[]) map.get(key);
|
|
||||||
obj = request == null ? arr : (request.getParameter((String) key) == null ? arr : arr[0]);
|
|
||||||
} else {
|
|
||||||
obj = map.get(key);
|
|
||||||
}
|
|
||||||
return obj;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getString(Object key) {
|
|
||||||
return get(key) == null ? null : get(key).toString().trim();
|
|
||||||
}
|
|
||||||
public String getStringOrDefault(Object key,String defaultValue) {
|
|
||||||
return get(key) == null ? defaultValue : get(key).toString().trim();
|
|
||||||
}
|
|
||||||
@Override
|
|
||||||
public Object getOrDefault(Object key,Object defaultValue) {
|
|
||||||
return map.getOrDefault(key,defaultValue);
|
|
||||||
}
|
|
||||||
@Override
|
|
||||||
public Object put(Object key, Object value) {
|
|
||||||
if (value instanceof ClobProxyImpl) { // 读取oracle Clob类型数据
|
|
||||||
try {
|
|
||||||
ClobProxyImpl cpi = (ClobProxyImpl) value;
|
|
||||||
Reader is = cpi.getCharacterStream(); // 获取流
|
|
||||||
BufferedReader br = new BufferedReader(is);
|
|
||||||
String str = br.readLine();
|
|
||||||
StringBuffer sb = new StringBuffer();
|
|
||||||
while (str != null) { // 循环读取数据拼接到字符串
|
|
||||||
sb.append(str);
|
|
||||||
sb.append("\n");
|
|
||||||
str = br.readLine();
|
|
||||||
}
|
|
||||||
value = sb.toString();
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return map.put(key, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Object remove(Object key) {
|
|
||||||
return map.remove(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void clear() {
|
|
||||||
map.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean containsKey(Object key) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return map.containsKey(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean containsValue(Object value) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return map.containsValue(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Set entrySet() {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return map.entrySet();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isEmpty() {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return map.isEmpty();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Set keySet() {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return map.keySet();
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public void putAll(Map t) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
map.putAll(t);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int size() {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return map.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Collection values() {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return map.values();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,22 +0,0 @@
|
||||||
package com.netsdk.exception;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 自定义服务异常
|
|
||||||
* @author Yan Xu
|
|
||||||
* @version 1.0
|
|
||||||
* @date 2023/4/19
|
|
||||||
*/
|
|
||||||
public class ServiceException extends RuntimeException{
|
|
||||||
|
|
||||||
public ServiceException() {
|
|
||||||
super();
|
|
||||||
}
|
|
||||||
|
|
||||||
public ServiceException(String message) {
|
|
||||||
super(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ServiceException(Throwable cause) {
|
|
||||||
super(cause);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,14 +0,0 @@
|
||||||
package com.netsdk.mapper.datasource.other;
|
|
||||||
|
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author lin
|
|
||||||
*/
|
|
||||||
@Mapper
|
|
||||||
public interface OtherMapper {
|
|
||||||
ArrayList<HashMap<String, String>> getAllMqOrderList();
|
|
||||||
}
|
|
|
@ -1,17 +0,0 @@
|
||||||
package com.netsdk.service;
|
|
||||||
|
|
||||||
import com.ghgande.j2mod.modbus.procimg.ProcessImage;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author lin
|
|
||||||
*/
|
|
||||||
public interface DeviceService {
|
|
||||||
ProcessImage getGlProcessImage();
|
|
||||||
|
|
||||||
ProcessImage getZlProcessImage();
|
|
||||||
|
|
||||||
ProcessImage getLfProcessImage();
|
|
||||||
|
|
||||||
ProcessImage getMqProcessImage();
|
|
||||||
void initMqOrderList();
|
|
||||||
}
|
|
|
@ -1,332 +0,0 @@
|
||||||
package com.netsdk.service.impl;
|
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSONArray;
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
|
||||||
import com.alibaba.fastjson.JSONPObject;
|
|
||||||
import com.ghgande.j2mod.modbus.procimg.ProcessImage;
|
|
||||||
import com.ghgande.j2mod.modbus.procimg.SimpleDigitalIn;
|
|
||||||
import com.ghgande.j2mod.modbus.procimg.SimpleInputRegister;
|
|
||||||
import com.ghgande.j2mod.modbus.procimg.SimpleProcessImage;
|
|
||||||
import com.netsdk.mapper.datasource.other.OtherMapper;
|
|
||||||
import com.netsdk.service.DeviceService;
|
|
||||||
import com.netsdk.utils.OtherInputRegister;
|
|
||||||
import com.netsdk.utils.RedisUtil;
|
|
||||||
import com.netsdk.utils.SyncGlScheduledTasks;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author lin
|
|
||||||
*/
|
|
||||||
@Service
|
|
||||||
public class DeviceServiceImpl implements DeviceService {
|
|
||||||
@Resource
|
|
||||||
private RedisUtil redisUtil;
|
|
||||||
@Resource
|
|
||||||
private OtherMapper otherMapper;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ProcessImage getGlProcessImage() {
|
|
||||||
// 高炉设备初始话获取数据
|
|
||||||
JSONArray objects = JSONObject.parseArray((String) redisUtil.get("GL_LIST"));
|
|
||||||
// SBXH-GL-1 高炉#炉顶工作压力
|
|
||||||
// 高炉#炉顶放散阀联锁投入状态#东大放散阀状态-关到位 SBXH-GL-2-2
|
|
||||||
// 高炉#炉顶放散阀联锁投入状态#东大放散阀状态-开到位 SBXH-GL-2-1
|
|
||||||
// 高炉#炉顶放散阀联锁投入状态#西大放散阀状态-开到位 SBXH-GL-2-3
|
|
||||||
// 高炉#炉顶放散阀联锁投入状态#西大放散阀状态-关到位 SBXH-GL-2-4
|
|
||||||
SimpleProcessImage spi = new SimpleProcessImage();
|
|
||||||
// 离散输入(DI) 02 10000-1FFFF 10001-19999 只读位
|
|
||||||
SimpleInputRegister SBXH_GL_2_5 = new SimpleInputRegister();
|
|
||||||
SimpleInputRegister dynamicRegHig = new SimpleInputRegister(0);
|
|
||||||
SimpleInputRegister dynamicReglow = new SimpleInputRegister(0);
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-GL-1" + "hig", dynamicRegHig);
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-GL-1" + "low", dynamicReglow);
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-GL-2-5", SBXH_GL_2_5);
|
|
||||||
|
|
||||||
for (int i = 0; i < objects.size(); i++) {
|
|
||||||
JSONObject jsonObject = objects.getJSONObject(i);
|
|
||||||
if ("SBXH-GL-1".equals(jsonObject.getString("IPCDEVICE_ID"))) {
|
|
||||||
float intValue = jsonObject.getFloatValue("CURRENT_VALUE");
|
|
||||||
int bits = Float.floatToIntBits(intValue);
|
|
||||||
dynamicRegHig.setValue((bits >> 16) & 0xFFFF);
|
|
||||||
dynamicReglow.setValue(bits & 0xFFFF);
|
|
||||||
}
|
|
||||||
if ("SBXH-GL-2-5".equals(jsonObject.getString("IPCDEVICE_ID"))) {
|
|
||||||
double intValue = jsonObject.getDouble("CURRENT_VALUE");
|
|
||||||
SBXH_GL_2_5.setValue((int) intValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
// SBXH-GL-1 高炉#炉顶工作压力
|
|
||||||
// 输入寄存器(IR) 04 30000-3FFFF 30001-39999 只读16位值
|
|
||||||
spi.addInputRegister(dynamicRegHig);
|
|
||||||
spi.addInputRegister(dynamicReglow);
|
|
||||||
spi.addInputRegister(SBXH_GL_2_5);
|
|
||||||
int inputRegisterCount = spi.getInputRegisterCount();
|
|
||||||
for (int i = inputRegisterCount; i < 1000; i++) {
|
|
||||||
spi.addInputRegister(new SimpleInputRegister(0));
|
|
||||||
}
|
|
||||||
return spi;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ProcessImage getZlProcessImage() {
|
|
||||||
JSONArray objects = JSONObject.parseArray((String) redisUtil.get("ZL_LIST"));
|
|
||||||
SimpleProcessImage spi = new SimpleProcessImage();
|
|
||||||
initZlSimpleInputRegister(spi);
|
|
||||||
for (int i = 0; i < objects.size(); i++) {
|
|
||||||
JSONObject jsonObject = objects.getJSONObject(i);
|
|
||||||
float intValue = jsonObject.getFloatValue("CURRENT_VALUE");
|
|
||||||
if ("1".equals(jsonObject.getString("SIGNAL_TYPE"))) {
|
|
||||||
// 模拟量
|
|
||||||
SimpleInputRegister simpleInputRegister_hig = SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.get(jsonObject.getString("IPCDEVICE_ID") + "hig");
|
|
||||||
SimpleInputRegister simpleInputRegister_low = SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.get(jsonObject.getString("IPCDEVICE_ID") + "low");
|
|
||||||
if (simpleInputRegister_hig != null) {
|
|
||||||
int bits = Float.floatToIntBits(intValue);
|
|
||||||
simpleInputRegister_hig.setValue((bits >> 16) & 0xFFFF);
|
|
||||||
simpleInputRegister_low.setValue(bits & 0xFFFF);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
SimpleInputRegister simpleInputRegister = SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.get(jsonObject.getString("IPCDEVICE_ID"));
|
|
||||||
if (simpleInputRegister == null) continue;
|
|
||||||
// 开关量
|
|
||||||
simpleInputRegister.setValue((int) intValue);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 这个别删除、省局要求 寄存器数量不能少于1000个哪怕没数据
|
|
||||||
int inputRegisterCount = spi.getInputRegisterCount();
|
|
||||||
for (int i = inputRegisterCount; i < 1000; i++) {
|
|
||||||
spi.addInputRegister(new SimpleInputRegister(0));
|
|
||||||
}
|
|
||||||
return spi;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initZlSimpleInputRegister(SimpleProcessImage spi) {
|
|
||||||
SimpleInputRegister SBXH_ZL_1_1_hig = new SimpleInputRegister(0);
|
|
||||||
SimpleInputRegister SBXH_ZL_1_1_low = new SimpleInputRegister(0);
|
|
||||||
SimpleInputRegister SBXH_ZL_1_2_hig = new SimpleInputRegister(0);
|
|
||||||
SimpleInputRegister SBXH_ZL_1_2_low = new SimpleInputRegister(0);
|
|
||||||
SimpleInputRegister SBXH_ZL_2_1_hig = new SimpleInputRegister(0);
|
|
||||||
SimpleInputRegister SBXH_ZL_2_1_low = new SimpleInputRegister(0);
|
|
||||||
SimpleInputRegister SBXH_ZL_2_2_hig = new SimpleInputRegister(0);
|
|
||||||
SimpleInputRegister SBXH_ZL_2_2_low = new SimpleInputRegister(0);
|
|
||||||
SimpleInputRegister SBXH_ZL_4_1_hig = new SimpleInputRegister(0);
|
|
||||||
SimpleInputRegister SBXH_ZL_4_1_low = new SimpleInputRegister(0);
|
|
||||||
SimpleInputRegister SBXH_ZL_4_2_hig = new SimpleInputRegister(0);
|
|
||||||
SimpleInputRegister SBXH_ZL_4_2_low = new SimpleInputRegister(0);
|
|
||||||
SimpleInputRegister SBXH_ZL_5_1_hig = new SimpleInputRegister(0);
|
|
||||||
SimpleInputRegister SBXH_ZL_5_1_low = new SimpleInputRegister(0);
|
|
||||||
SimpleInputRegister SBXH_ZL_5_2_hig = new SimpleInputRegister(0);
|
|
||||||
SimpleInputRegister SBXH_ZL_5_2_low = new SimpleInputRegister(0);
|
|
||||||
|
|
||||||
|
|
||||||
// 水冷氧枪-氧气压力1#枪氧气压力
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-ZL-1-1" + "hig", SBXH_ZL_1_1_hig);
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-ZL-1-1" + "low", SBXH_ZL_1_1_low);
|
|
||||||
// 水冷氧枪-氧气压力2#枪氧气压力
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-ZL-1-2" + "hig", SBXH_ZL_1_2_hig);
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-ZL-1-2" + "low", SBXH_ZL_1_2_low);
|
|
||||||
// 水冷氧枪-冷却水进水流量 1#枪冷却水进水流量
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-ZL-2-1" + "hig", SBXH_ZL_2_1_hig);
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-ZL-2-1" + "low", SBXH_ZL_2_1_low);
|
|
||||||
// 水冷氧枪-冷却水进水流量 2#枪冷却水进水流量
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-ZL-2-2" + "hig", SBXH_ZL_2_2_hig);
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-ZL-2-2" + "low", SBXH_ZL_2_2_low);
|
|
||||||
// 水冷氧枪-冷却水出水温度1#枪冷却水出水温度
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-ZL-4-1" + "hig", SBXH_ZL_4_1_hig);
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-ZL-4-1" + "low", SBXH_ZL_4_1_low);
|
|
||||||
// 水冷氧枪-冷却水出水温度2#枪冷却水出水温度
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-ZL-4-2" + "hig", SBXH_ZL_4_2_hig);
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-ZL-4-2" + "low", SBXH_ZL_4_2_low);
|
|
||||||
// 水冷氧枪-冷却水进出水流量差 SBXH-ZL_5-1 1#枪冷却水进出水流量差
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-ZL_5-1" + "hig", SBXH_ZL_5_1_hig);
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-ZL_5-1" + "low", SBXH_ZL_5_1_low);
|
|
||||||
// 水冷氧枪-冷却水进出水流量差 SBXH-ZL_5-2 2#枪冷却水进出水流量差
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-ZL_5-2" + "hig", SBXH_ZL_5_2_hig);
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-ZL_5-2" + "low", SBXH_ZL_5_2_low);
|
|
||||||
|
|
||||||
|
|
||||||
// 氧气压力与氧枪自动升起联锁投入状态
|
|
||||||
SimpleInputRegister SBXH_ZL_5 = new SimpleInputRegister();
|
|
||||||
// 冷却水进水流量与氧枪自动升起联锁投入状态
|
|
||||||
SimpleInputRegister SBXH_ZL_6 = new SimpleInputRegister();
|
|
||||||
// 冷却水出水温度与氧枪自动升起联锁投入状态
|
|
||||||
SimpleInputRegister SBXH_ZL_7 = new SimpleInputRegister();
|
|
||||||
// 进出水流量差与氧枪自动升起联锁投入状态
|
|
||||||
SimpleInputRegister SBXH_ZL_8 = new SimpleInputRegister();
|
|
||||||
// 冷却水进出水流量差与炉体倾动联锁投入状态
|
|
||||||
SimpleInputRegister SBXH_ZL_9 = new SimpleInputRegister();
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-ZL-5", SBXH_ZL_5);
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-ZL-6", SBXH_ZL_6);
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-ZL-7", SBXH_ZL_7);
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-ZL-8", SBXH_ZL_8);
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-ZL-9", SBXH_ZL_9);
|
|
||||||
spi.addInputRegister(SBXH_ZL_1_1_hig);
|
|
||||||
spi.addInputRegister(SBXH_ZL_1_1_low);
|
|
||||||
spi.addInputRegister(SBXH_ZL_1_2_hig);
|
|
||||||
spi.addInputRegister(SBXH_ZL_1_2_low);
|
|
||||||
spi.addInputRegister(SBXH_ZL_2_1_hig);
|
|
||||||
spi.addInputRegister(SBXH_ZL_2_1_low);
|
|
||||||
spi.addInputRegister(SBXH_ZL_2_2_hig);
|
|
||||||
spi.addInputRegister(SBXH_ZL_2_2_low);
|
|
||||||
spi.addInputRegister(SBXH_ZL_5_1_hig);
|
|
||||||
spi.addInputRegister(SBXH_ZL_5_1_low);
|
|
||||||
spi.addInputRegister(SBXH_ZL_5_2_hig);
|
|
||||||
spi.addInputRegister(SBXH_ZL_5_2_low);
|
|
||||||
spi.addInputRegister(SBXH_ZL_4_1_hig);
|
|
||||||
spi.addInputRegister(SBXH_ZL_4_1_low);
|
|
||||||
spi.addInputRegister(SBXH_ZL_4_2_hig);
|
|
||||||
spi.addInputRegister(SBXH_ZL_4_2_low);
|
|
||||||
|
|
||||||
spi.addInputRegister(SBXH_ZL_5);
|
|
||||||
spi.addInputRegister(SBXH_ZL_6);
|
|
||||||
spi.addInputRegister(SBXH_ZL_7);
|
|
||||||
spi.addInputRegister(SBXH_ZL_8);
|
|
||||||
spi.addInputRegister(SBXH_ZL_9);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ProcessImage getLfProcessImage() {
|
|
||||||
JSONArray objects = JSONObject.parseArray((String) redisUtil.get("JL_LIST"));
|
|
||||||
SimpleProcessImage spi = new SimpleProcessImage();
|
|
||||||
initLfSimpleInputRegister(spi);
|
|
||||||
for (int i = 0; i < objects.size(); i++) {
|
|
||||||
JSONObject jsonObject = objects.getJSONObject(i);
|
|
||||||
float intValue = jsonObject.getFloatValue("CURRENT_VALUE");
|
|
||||||
if ("1".equals(jsonObject.getString("SIGNAL_TYPE"))) {
|
|
||||||
// 模拟量
|
|
||||||
SimpleInputRegister simpleInputRegister_hig = SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.get(jsonObject.getString("IPCDEVICE_ID") + "hig");
|
|
||||||
SimpleInputRegister simpleInputRegister_low = SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.get(jsonObject.getString("IPCDEVICE_ID") + "low");
|
|
||||||
if (simpleInputRegister_hig != null) {
|
|
||||||
int bits = Float.floatToIntBits(intValue);
|
|
||||||
simpleInputRegister_hig.setValue((bits >> 16) & 0xFFFF);
|
|
||||||
simpleInputRegister_low.setValue(bits & 0xFFFF);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
SimpleInputRegister simpleInputRegister = SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.get(jsonObject.getString("IPCDEVICE_ID"));
|
|
||||||
// SBXH-JL-3
|
|
||||||
SimpleInputRegister simpleInputRegister1 = SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.get(jsonObject.getString("IPCDEVICE_ID") + "_1");
|
|
||||||
if (simpleInputRegister1 != null) {
|
|
||||||
simpleInputRegister1.setValue((int) intValue);
|
|
||||||
}
|
|
||||||
if (simpleInputRegister == null) continue;
|
|
||||||
// 开关量
|
|
||||||
simpleInputRegister.setValue((int) intValue);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
int inputRegisterCount = spi.getInputRegisterCount();
|
|
||||||
for (int i = inputRegisterCount; i < 1000; i++) {
|
|
||||||
spi.addInputRegister(new SimpleInputRegister(0));
|
|
||||||
}
|
|
||||||
// 冷却水出水温度与电极自动断 电联锁投入状态
|
|
||||||
// 冷却水出水温度与电极升起联锁投入状态
|
|
||||||
// 进出水流量差与电极自动断电联锁投入状态
|
|
||||||
// 进出水流量差与电极升起联锁投入状态
|
|
||||||
return spi;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ProcessImage getMqProcessImage() {
|
|
||||||
JSONArray objects = JSONObject.parseArray((String) redisUtil.get("MQ_LIST"));
|
|
||||||
SimpleProcessImage spi = new SimpleProcessImage();
|
|
||||||
initMqSimpleInputRegister(spi);
|
|
||||||
for (int i = 0; i < objects.size(); i++) {
|
|
||||||
JSONObject jsonObject = objects.getJSONObject(i);
|
|
||||||
float intValue = jsonObject.getFloatValue("CURRENT_VALUE");
|
|
||||||
SimpleInputRegister simpleInputRegister = SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.get(jsonObject.getString("IPCDEVICE_ID"));
|
|
||||||
if (simpleInputRegister == null) continue;
|
|
||||||
// 开关量
|
|
||||||
simpleInputRegister.setValue((int) intValue);
|
|
||||||
}
|
|
||||||
int inputRegisterCount = spi.getInputRegisterCount();
|
|
||||||
for (int i = inputRegisterCount; i < 1000; i++) {
|
|
||||||
spi.addInputRegister(new SimpleInputRegister(0));
|
|
||||||
}
|
|
||||||
return spi;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void initMqOrderList() {
|
|
||||||
ArrayList<HashMap<String, String>> allMqOrderList = otherMapper.getAllMqOrderList();
|
|
||||||
for (HashMap<String, String> hashMap : allMqOrderList) {
|
|
||||||
SyncGlScheduledTasks.MQ_ORDER_MAP.put(Integer.parseInt(String.valueOf(hashMap.get("ID"))), hashMap.get("IPCDEVICE_ID"));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initMqSimpleInputRegister(SimpleProcessImage spi) {
|
|
||||||
int size = SyncGlScheduledTasks.MQ_ORDER_MAP.size();
|
|
||||||
for (int i = 0; i < size; i++) {
|
|
||||||
SimpleInputRegister simpleInputRegister = new SimpleInputRegister();
|
|
||||||
spi.addInputRegister(simpleInputRegister);
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put(SyncGlScheduledTasks.MQ_ORDER_MAP.get(i), simpleInputRegister);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initLfSimpleInputRegister(SimpleProcessImage spi) {
|
|
||||||
// 冷却水出水温度
|
|
||||||
// SBXH-JL-1-1 1#冷却水出水温度
|
|
||||||
// SBXH-JL-1-2 2#冷却水出水温度
|
|
||||||
//冷却水进出水流量差
|
|
||||||
// SBXH-JL-3-1 1#冷却水进出水流量差
|
|
||||||
// SBXH-JL-3-2 2#冷却水进出水流量差
|
|
||||||
SimpleInputRegister SBXH_JL_1_1_hig = new SimpleInputRegister(0);
|
|
||||||
SimpleInputRegister SBXH_JL_1_1_low = new SimpleInputRegister(0);
|
|
||||||
SimpleInputRegister SBXH_JL_1_2_hig = new SimpleInputRegister(0);
|
|
||||||
SimpleInputRegister SBXH_JL_1_2_low = new SimpleInputRegister(0);
|
|
||||||
SimpleInputRegister SBXH_JL_3_1_hig = new SimpleInputRegister(0);
|
|
||||||
SimpleInputRegister SBXH_JL_3_1_low = new SimpleInputRegister(0);
|
|
||||||
SimpleInputRegister SBXH_JL_3_2_hig = new SimpleInputRegister(0);
|
|
||||||
SimpleInputRegister SBXH_JL_3_2_low = new SimpleInputRegister(0);
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-JL-1-1" + "hig", SBXH_JL_1_1_hig);
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-JL-1-1" + "low", SBXH_JL_1_1_low);
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-JL-1-2" + "hig", SBXH_JL_1_2_hig);
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-JL-1-2" + "low", SBXH_JL_1_2_low);
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-JL-3-1" + "hig", SBXH_JL_3_1_hig);
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-JL-3-1" + "low", SBXH_JL_3_1_low);
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-JL-3-2" + "hig", SBXH_JL_3_2_hig);
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-JL-3-2" + "low", SBXH_JL_3_2_low);
|
|
||||||
// 冷却水出水温度与电极自动断电联锁投入状态 冷却水出水温度与电极升起联锁投入状态 1#炉盖回水温度联锁
|
|
||||||
SimpleInputRegister SBXH_JL_3 = new SimpleInputRegister();
|
|
||||||
SimpleInputRegister SBXH_JL_3_1 = new SimpleInputRegister();
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-JL-3", SBXH_JL_3);
|
|
||||||
// 冷却水出水温度与电极升起联锁投入状态 1#炉盖回水温度联锁
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-JL-3_1", SBXH_JL_3);
|
|
||||||
// 冷却水出水温度与电极自动断电联锁投入状态 冷却水出水温度与电极升起联锁投入状态 2#炉盖回水温度联锁
|
|
||||||
SimpleInputRegister SBXH_JL_4 = new SimpleInputRegister();
|
|
||||||
SimpleInputRegister SBXH_JL_4_1 = new SimpleInputRegister();
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-JL-4", SBXH_JL_4);
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-JL-4_1", SBXH_JL_4);
|
|
||||||
// 进出水流量差与电极自动断电联锁投入状态 进出水流量差与电极升起联锁投入状态 1#炉盖回水流量差联锁
|
|
||||||
SimpleInputRegister SBXH_JL_5 = new SimpleInputRegister();
|
|
||||||
SimpleInputRegister SBXH_JL_5_1 = new SimpleInputRegister();
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-JL-5", SBXH_JL_5);
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-JL-5_1", SBXH_JL_5);
|
|
||||||
// 进出水流量差与电极自动断电联锁投入状态 进出水流量差与电极升起联锁投入状态 2#炉盖回水流量差联锁
|
|
||||||
SimpleInputRegister SBXH_JL_6 = new SimpleInputRegister();
|
|
||||||
SimpleInputRegister SBXH_JL_6_1 = new SimpleInputRegister();
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-JL-6", SBXH_JL_6);
|
|
||||||
SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.put("SBXH-JL-6_1", SBXH_JL_6);
|
|
||||||
spi.addInputRegister(SBXH_JL_1_1_hig);
|
|
||||||
spi.addInputRegister(SBXH_JL_1_2_low);
|
|
||||||
spi.addInputRegister(SBXH_JL_1_2_hig);
|
|
||||||
spi.addInputRegister(SBXH_JL_1_2_low);
|
|
||||||
spi.addInputRegister(SBXH_JL_3_1_hig);
|
|
||||||
spi.addInputRegister(SBXH_JL_3_1_low);
|
|
||||||
spi.addInputRegister(SBXH_JL_3_2_hig);
|
|
||||||
spi.addInputRegister(SBXH_JL_3_2_low);
|
|
||||||
spi.addInputRegister(SBXH_JL_3);
|
|
||||||
spi.addInputRegister(SBXH_JL_4);
|
|
||||||
spi.addInputRegister(SBXH_JL_5);
|
|
||||||
spi.addInputRegister(SBXH_JL_6);
|
|
||||||
spi.addInputRegister(SBXH_JL_3_1);
|
|
||||||
spi.addInputRegister(SBXH_JL_4_1);
|
|
||||||
spi.addInputRegister(SBXH_JL_5_1);
|
|
||||||
spi.addInputRegister(SBXH_JL_6_1);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,42 +0,0 @@
|
||||||
package com.netsdk.utils;
|
|
||||||
|
|
||||||
import lombok.SneakyThrows;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import java.io.File;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 文件工具类
|
|
||||||
*
|
|
||||||
* @author Yan Xu
|
|
||||||
* @version 1.0
|
|
||||||
* @date 2021/8/7
|
|
||||||
* Copyright © goodits
|
|
||||||
*/
|
|
||||||
@Slf4j
|
|
||||||
public class FilePathUtils {
|
|
||||||
|
|
||||||
//路径前加.号代表项目根目录
|
|
||||||
private static final String DIR_PATH = "./static/img";
|
|
||||||
|
|
||||||
@SneakyThrows
|
|
||||||
public static String getUploadDir() {
|
|
||||||
//如果目录不存在,自动创建文件夹
|
|
||||||
File dir = new File(DIR_PATH);
|
|
||||||
if (!dir.exists()) {
|
|
||||||
//文件
|
|
||||||
boolean mkdir = dir.mkdirs();
|
|
||||||
if (Boolean.FALSE.equals(mkdir)) {
|
|
||||||
log.warn("创建目录{}失败", DIR_PATH);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return dir.getAbsolutePath();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getUrlPathByFileName(HttpServletRequest request, String fileName) {
|
|
||||||
return request.getScheme() + "://" + request.getServerName() + ":" +
|
|
||||||
request.getServerPort() + "/img/" + fileName;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
package com.netsdk.utils;
|
|
||||||
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
@Component
|
|
||||||
public class ModBusUtils {
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.netsdk.utils;
|
|
||||||
|
|
||||||
import com.ghgande.j2mod.modbus.procimg.IllegalAddressException;
|
|
||||||
import com.ghgande.j2mod.modbus.procimg.SimpleInputRegister;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author lin
|
|
||||||
*/
|
|
||||||
public class OtherInputRegister extends SimpleInputRegister {
|
|
||||||
public OtherInputRegister() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public synchronized void setFloatValue(float f) {
|
|
||||||
if (this.register == null) {
|
|
||||||
throw new IllegalAddressException();
|
|
||||||
}
|
|
||||||
// 将浮点数转换为32位整数
|
|
||||||
int intBits = Float.floatToIntBits(f);
|
|
||||||
|
|
||||||
// 拆分成两个16位寄存器
|
|
||||||
this.register[0] = (byte) ((intBits >> 16) & 0xFF);
|
|
||||||
// 高16位
|
|
||||||
this.register[1] = (byte) (intBits & 0xFF);
|
|
||||||
// 低16位
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,720 +0,0 @@
|
||||||
package com.netsdk.utils;
|
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.data.redis.core.RedisTemplate;
|
|
||||||
import org.springframework.data.redis.core.script.DefaultRedisScript;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
import org.springframework.util.CollectionUtils;
|
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
@Component
|
|
||||||
public final class RedisUtil {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private RedisTemplate<String, Object> redisTemplate;
|
|
||||||
|
|
||||||
// =============================common============================
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 指定缓存失效时间
|
|
||||||
*
|
|
||||||
* @param key 键
|
|
||||||
* @param time 时间(秒)
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public boolean expire(String key, long time) {
|
|
||||||
try {
|
|
||||||
if (time > 0) {
|
|
||||||
redisTemplate.expire(key, time, TimeUnit.SECONDS);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean expire(String key, long time, TimeUnit timeUnit) {
|
|
||||||
try {
|
|
||||||
if (time > 0) {
|
|
||||||
redisTemplate.expire(key, time, timeUnit);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据key 获取过期时间
|
|
||||||
*
|
|
||||||
* @param key 键 不能为null
|
|
||||||
* @return 时间(秒) 返回0代表为永久有效
|
|
||||||
*/
|
|
||||||
public long getExpire(String key) {
|
|
||||||
return redisTemplate.getExpire(key, TimeUnit.SECONDS);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 判断key是否存在
|
|
||||||
*
|
|
||||||
* @param key 键
|
|
||||||
* @return true 存在 false不存在
|
|
||||||
*/
|
|
||||||
public boolean hasKey(String key) {
|
|
||||||
try {
|
|
||||||
return redisTemplate.hasKey(key);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除缓存
|
|
||||||
*
|
|
||||||
* @param key 可以传一个值 或多个
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public void del(String... key) {
|
|
||||||
if (key != null && key.length > 0) {
|
|
||||||
if (key.length == 1) {
|
|
||||||
redisTemplate.delete(key[0]);
|
|
||||||
} else {
|
|
||||||
redisTemplate.delete(CollectionUtils.arrayToList(key));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ============================String=============================
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 普通缓存获取
|
|
||||||
*
|
|
||||||
* @param key 键
|
|
||||||
* @return 值
|
|
||||||
*/
|
|
||||||
public Object get(String key) {
|
|
||||||
return key == null ? null : redisTemplate.opsForValue().get(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 普通缓存放入
|
|
||||||
*
|
|
||||||
* @param key 键
|
|
||||||
* @param value 值
|
|
||||||
* @return true成功 false失败
|
|
||||||
*/
|
|
||||||
public boolean set(String key, Object value) {
|
|
||||||
try {
|
|
||||||
redisTemplate.opsForValue().set(key, value);
|
|
||||||
return true;
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 普通缓存放入并设置时间
|
|
||||||
*
|
|
||||||
* @param key 键
|
|
||||||
* @param value 值
|
|
||||||
* @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期
|
|
||||||
* @return true成功 false 失败
|
|
||||||
*/
|
|
||||||
|
|
||||||
public boolean set(String key, Object value, long time) {
|
|
||||||
try {
|
|
||||||
if (time > 0) {
|
|
||||||
redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
|
|
||||||
} else {
|
|
||||||
set(key, value);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public boolean set(String key, Object value, long time, TimeUnit timeUnit) {
|
|
||||||
try {
|
|
||||||
if (time > 0) {
|
|
||||||
redisTemplate.opsForValue().set(key, value, time, timeUnit);
|
|
||||||
} else {
|
|
||||||
set(key, value);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 递增
|
|
||||||
*
|
|
||||||
* @param key 键
|
|
||||||
* @param delta 要增加几(大于0)
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
|
|
||||||
public long incr(String key, long delta) {
|
|
||||||
if (delta < 0) {
|
|
||||||
throw new RuntimeException("递增因子必须大于0");
|
|
||||||
}
|
|
||||||
return redisTemplate.opsForValue().increment(key, delta);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 递减
|
|
||||||
*
|
|
||||||
* @param key 键
|
|
||||||
* @param delta 要减少几(小于0)
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public long decr(String key, long delta) {
|
|
||||||
if (delta < 0) {
|
|
||||||
throw new RuntimeException("递减因子必须大于0");
|
|
||||||
}
|
|
||||||
return redisTemplate.opsForValue().increment(key, -delta);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ================================Map=================================
|
|
||||||
|
|
||||||
/**
|
|
||||||
* HashGet
|
|
||||||
*
|
|
||||||
* @param key 键 不能为null
|
|
||||||
* @param item 项 不能为null
|
|
||||||
* @return 值
|
|
||||||
*/
|
|
||||||
public Object hget(String key, String item) {
|
|
||||||
return redisTemplate.opsForHash().get(key, item);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 只有当给定的键不存在时,才设置键值对
|
|
||||||
* @param hashKey 是哈希表的键,用于定位到Redis中的特定哈希表。
|
|
||||||
* @param key 键 不能为null
|
|
||||||
* @param value 项 不能为null
|
|
||||||
* @return 值
|
|
||||||
*/
|
|
||||||
public Object hPutIfAbsent(String hashKey, String key, Object value) {
|
|
||||||
return redisTemplate.opsForHash().putIfAbsent(hashKey, key, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取hashKey对应的所有键值
|
|
||||||
*
|
|
||||||
* @param key 键
|
|
||||||
* @return 对应的多个键值
|
|
||||||
*/
|
|
||||||
public Map<Object, Object> hmget(String key) {
|
|
||||||
return redisTemplate.opsForHash().entries(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* HashSet
|
|
||||||
*
|
|
||||||
* @param key 键
|
|
||||||
* @param map 对应多个键值
|
|
||||||
* @return true 成功 false 失败
|
|
||||||
*/
|
|
||||||
public boolean hmset(String key, Map<String, Object> map) {
|
|
||||||
try {
|
|
||||||
redisTemplate.opsForHash().putAll(key, map);
|
|
||||||
return true;
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* HashSet 并设置时间
|
|
||||||
*
|
|
||||||
* @param key 键
|
|
||||||
* @param map 对应多个键值
|
|
||||||
* @param time 时间(秒)
|
|
||||||
* @return true成功 false失败
|
|
||||||
*/
|
|
||||||
public boolean hmset(String key, Map<String, Object> map, long time) {
|
|
||||||
try {
|
|
||||||
redisTemplate.opsForHash().putAll(key, map);
|
|
||||||
if (time > 0) {
|
|
||||||
expire(key, time);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 向一张hash表中放入数据,如果不存在将创建
|
|
||||||
*
|
|
||||||
* @param key 键
|
|
||||||
* @param item 项
|
|
||||||
* @param value 值
|
|
||||||
* @return true 成功 false失败
|
|
||||||
*/
|
|
||||||
public boolean hset(String key, String item, Object value) {
|
|
||||||
try {
|
|
||||||
redisTemplate.opsForHash().put(key, item, value);
|
|
||||||
return true;
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 向一张hash表中放入数据,如果不存在将创建
|
|
||||||
*
|
|
||||||
* @param key 键
|
|
||||||
* @param item 项
|
|
||||||
* @param value 值
|
|
||||||
* @param time 时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间
|
|
||||||
* @return true 成功 false失败
|
|
||||||
*/
|
|
||||||
public boolean hset(String key, String item, Object value, long time) {
|
|
||||||
try {
|
|
||||||
redisTemplate.opsForHash().put(key, item, value);
|
|
||||||
if (time > 0) {
|
|
||||||
expire(key, time);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除hash表中的值
|
|
||||||
*
|
|
||||||
* @param key 键 不能为null
|
|
||||||
* @param item 项 可以使多个 不能为null
|
|
||||||
*/
|
|
||||||
public void hdel(String key, Object... item) {
|
|
||||||
redisTemplate.opsForHash().delete(key, item);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 判断hash表中是否有该项的值
|
|
||||||
*
|
|
||||||
* @param key 键 不能为null
|
|
||||||
* @param item 项 不能为null
|
|
||||||
* @return true 存在 false不存在
|
|
||||||
*/
|
|
||||||
public boolean hHasKey(String key, String item) {
|
|
||||||
return redisTemplate.opsForHash().hasKey(key, item);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* hash递增 如果不存在,就会创建一个 并把新增后的值返回
|
|
||||||
*
|
|
||||||
* @param key 键
|
|
||||||
* @param item 项
|
|
||||||
* @param by 要增加几(大于0)
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public double hincr(String key, String item, double by) {
|
|
||||||
return redisTemplate.opsForHash().increment(key, item, by);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* hash递减
|
|
||||||
*
|
|
||||||
* @param key 键
|
|
||||||
* @param item 项
|
|
||||||
* @param by 要减少记(小于0)
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public double hdecr(String key, String item, double by) {
|
|
||||||
return redisTemplate.opsForHash().increment(key, item, -by);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ============================set=============================
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据key获取Set中的所有值
|
|
||||||
*
|
|
||||||
* @param key 键
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public Set<Object> sGet(String key) {
|
|
||||||
try {
|
|
||||||
return redisTemplate.opsForSet().members(key);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据value从一个set中查询,是否存在
|
|
||||||
*
|
|
||||||
* @param key 键
|
|
||||||
* @param value 值
|
|
||||||
* @return true 存在 false不存在
|
|
||||||
*/
|
|
||||||
public boolean sHasKey(String key, Object value) {
|
|
||||||
try {
|
|
||||||
return redisTemplate.opsForSet().isMember(key, value);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 将数据放入set缓存
|
|
||||||
*
|
|
||||||
* @param key 键
|
|
||||||
* @param values 值 可以是多个
|
|
||||||
* @return 成功个数
|
|
||||||
*/
|
|
||||||
public long sSet(String key, Object... values) {
|
|
||||||
try {
|
|
||||||
return redisTemplate.opsForSet().add(key, values);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 将set数据放入缓存
|
|
||||||
*
|
|
||||||
* @param key 键
|
|
||||||
* @param time 时间(秒)
|
|
||||||
* @param values 值 可以是多个
|
|
||||||
* @return 成功个数
|
|
||||||
*/
|
|
||||||
public long sSetAndTime(String key, long time, Object... values) {
|
|
||||||
try {
|
|
||||||
Long count = redisTemplate.opsForSet().add(key, values);
|
|
||||||
if (time > 0) expire(key, time);
|
|
||||||
return count;
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取set缓存的长度
|
|
||||||
*
|
|
||||||
* @param key 键
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public long sGetSetSize(String key) {
|
|
||||||
try {
|
|
||||||
return redisTemplate.opsForSet().size(key);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 移除值为value的
|
|
||||||
*
|
|
||||||
* @param key 键
|
|
||||||
* @param values 值 可以是多个
|
|
||||||
* @return 移除的个数
|
|
||||||
*/
|
|
||||||
public long setRemove(String key, Object... values) {
|
|
||||||
try {
|
|
||||||
Long count = redisTemplate.opsForSet().remove(key, values);
|
|
||||||
return count;
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===============================list=================================
|
|
||||||
|
|
||||||
/** ------------------------list相关操作---------------------------- */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 通过索引获取列表中的元素
|
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @param index
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public Object lIndex(String key, long index) {
|
|
||||||
return redisTemplate.opsForList().index(key, index);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取列表指定范围内的元素
|
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @param start 开始位置, 0是开始位置
|
|
||||||
* @param end 结束位置, -1返回所有
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public List<Object> lRange(String key, long start, long end) {
|
|
||||||
return redisTemplate.opsForList().range(key, start, end);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 存储在list头部
|
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @param value
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public Long lLeftPush(String key, String value) {
|
|
||||||
return redisTemplate.opsForList().leftPush(key, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param key
|
|
||||||
* @param value
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public Long lLeftPushAll(String key, String... value) {
|
|
||||||
return redisTemplate.opsForList().leftPushAll(key, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param key
|
|
||||||
* @param value
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public Long lLeftPushAll(String key, Collection<String> value) {
|
|
||||||
return redisTemplate.opsForList().leftPushAll(key, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 当list存在的时候才加入
|
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @param value
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public Long lLeftPushIfPresent(String key, String value) {
|
|
||||||
return redisTemplate.opsForList().leftPushIfPresent(key, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 如果pivot存在,再pivot前面添加
|
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @param pivot
|
|
||||||
* @param value
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public Long lLeftPush(String key, String pivot, String value) {
|
|
||||||
return redisTemplate.opsForList().leftPush(key, pivot, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param key
|
|
||||||
* @param value
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public Long lRightPush(String key, String value) {
|
|
||||||
return redisTemplate.opsForList().rightPush(key, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param key
|
|
||||||
* @param value
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public Long lRightPushAll(String key, String... value) {
|
|
||||||
return redisTemplate.opsForList().rightPushAll(key, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param key
|
|
||||||
* @param value
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public Long lRightPushAll(String key, Collection<String> value) {
|
|
||||||
return redisTemplate.opsForList().rightPushAll(key, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 为已存在的列表添加值
|
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @param value
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public Long lRightPushIfPresent(String key, String value) {
|
|
||||||
return redisTemplate.opsForList().rightPushIfPresent(key, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 在pivot元素的右边添加值
|
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @param pivot
|
|
||||||
* @param value
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public Long lRightPush(String key, String pivot, String value) {
|
|
||||||
return redisTemplate.opsForList().rightPush(key, pivot, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 通过索引设置列表元素的值
|
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @param index 位置
|
|
||||||
* @param value
|
|
||||||
*/
|
|
||||||
public void lSet(String key, long index, String value) {
|
|
||||||
redisTemplate.opsForList().set(key, index, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 移出并获取列表的第一个元素
|
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @return 删除的元素
|
|
||||||
*/
|
|
||||||
public Object lLeftPop(String key) {
|
|
||||||
return redisTemplate.opsForList().leftPop(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
|
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @param timeout 等待时间
|
|
||||||
* @param unit 时间单位
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public Object lBLeftPop(String key, long timeout, TimeUnit unit) {
|
|
||||||
return redisTemplate.opsForList().leftPop(key, timeout, unit);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 移除并获取列表最后一个元素
|
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @return 删除的元素
|
|
||||||
*/
|
|
||||||
public Object lRightPop(String key) {
|
|
||||||
return redisTemplate.opsForList().rightPop(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
|
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @param timeout 等待时间
|
|
||||||
* @param unit 时间单位
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public Object lBRightPop(String key, long timeout, TimeUnit unit) {
|
|
||||||
return redisTemplate.opsForList().rightPop(key, timeout, unit);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 移除列表的最后一个元素,并将该元素添加到另一个列表并返回
|
|
||||||
*
|
|
||||||
* @param sourceKey
|
|
||||||
* @param destinationKey
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public Object lRightPopAndLeftPush(String sourceKey, String destinationKey) {
|
|
||||||
return redisTemplate.opsForList().rightPopAndLeftPush(sourceKey, destinationKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
|
|
||||||
*
|
|
||||||
* @param sourceKey
|
|
||||||
* @param destinationKey
|
|
||||||
* @param timeout
|
|
||||||
* @param unit
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public Object lBRightPopAndLeftPush(String sourceKey, String destinationKey, long timeout, TimeUnit unit) {
|
|
||||||
return redisTemplate.opsForList().rightPopAndLeftPush(sourceKey, destinationKey, timeout, unit);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除集合中值等于value得元素
|
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @param index index=0, 删除所有值等于value的元素; index>0, 从头部开始删除第一个值等于value的元素;
|
|
||||||
* index<0, 从尾部开始删除第一个值等于value的元素;
|
|
||||||
* @param value
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public Long lRemove(String key, long index, String value) {
|
|
||||||
return redisTemplate.opsForList().remove(key, index, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 裁剪list
|
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @param start
|
|
||||||
* @param end
|
|
||||||
*/
|
|
||||||
public void lTrim(String key, long start, long end) {
|
|
||||||
redisTemplate.opsForList().trim(key, start, end);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取列表长度
|
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public Long lLen(String key) {
|
|
||||||
return redisTemplate.opsForList().size(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 加锁方法
|
|
||||||
*
|
|
||||||
* @param lockKey 锁的键
|
|
||||||
* @param value 锁的值(通常为唯一标识,如时间戳或UUID)
|
|
||||||
* @param expireMs 锁的过期时间(毫秒)
|
|
||||||
* @return true 加锁成功 false 加锁失败
|
|
||||||
*/
|
|
||||||
public boolean lock(String lockKey, String value, long expireMs) {
|
|
||||||
try {
|
|
||||||
Boolean result = redisTemplate.opsForValue().setIfAbsent(lockKey, value, expireMs, TimeUnit.MILLISECONDS);
|
|
||||||
return Boolean.TRUE.equals(result);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 解锁方法
|
|
||||||
*
|
|
||||||
* @param lockKey 锁的键
|
|
||||||
* @param value 锁的值(用于校验是否为当前持有锁的客户端)
|
|
||||||
* @return true 解锁成功 false 解锁失败
|
|
||||||
*/
|
|
||||||
public boolean unlock(String lockKey, String value) {
|
|
||||||
try {
|
|
||||||
String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
|
|
||||||
Object result = redisTemplate.execute(new DefaultRedisScript<>(script, Long.class), Collections.singletonList(lockKey), value);
|
|
||||||
return result != null && (Long) result == 1L;
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,103 +0,0 @@
|
||||||
package com.netsdk.utils;
|
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSONArray;
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
|
||||||
import com.ghgande.j2mod.modbus.procimg.SimpleDigitalIn;
|
|
||||||
import com.ghgande.j2mod.modbus.procimg.SimpleInputRegister;
|
|
||||||
import org.springframework.scheduling.annotation.Async;
|
|
||||||
import org.springframework.scheduling.annotation.Scheduled;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.io.BufferedWriter;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileWriter;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author lin
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
public class SyncGlScheduledTasks {
|
|
||||||
// 开关量
|
|
||||||
// public static final Map<String, SimpleDigitalIn> SIMPLE_DIGITAL_INMAP = new LinkedHashMap<>(16);
|
|
||||||
public static final Map<String, SimpleInputRegister> SIMPLE_DIGITAL_INMAP_2 = new LinkedHashMap<>(16);
|
|
||||||
public static final Map<Integer, String> MQ_ORDER_MAP = new LinkedHashMap<>(16);
|
|
||||||
// 模拟量
|
|
||||||
// public static final Map<String, SimpleInputRegister> SIMPLE_INPUT_REGISTER_MAP = new LinkedHashMap<>(16);
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private RedisUtil redisUtil;
|
|
||||||
|
|
||||||
// 每五秒执行一次
|
|
||||||
@Scheduled(fixedDelay = 5000)
|
|
||||||
@Async
|
|
||||||
public void taskWithFixedDelay() {
|
|
||||||
JSONArray objects = JSONObject.parseArray((String) redisUtil.get("GL_LIST"));
|
|
||||||
JSONArray zLobjects = JSONObject.parseArray((String) redisUtil.get("ZL_LIST"));
|
|
||||||
JSONArray lFobjects = JSONObject.parseArray((String) redisUtil.get("JL_LIST"));
|
|
||||||
JSONArray mQobjects = JSONObject.parseArray((String) redisUtil.get("MQ_LIST"));
|
|
||||||
objects.addAll(zLobjects);
|
|
||||||
objects.addAll(lFobjects);
|
|
||||||
for (int i = 0; i < objects.size(); i++) {
|
|
||||||
JSONObject jsonObject = objects.getJSONObject(i);
|
|
||||||
float intValue = jsonObject.getFloatValue("CURRENT_VALUE");
|
|
||||||
|
|
||||||
if ("1".equals(jsonObject.getString("SIGNAL_TYPE"))) {
|
|
||||||
// 模拟量
|
|
||||||
SimpleInputRegister simpleInputRegister_hig = SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.get(jsonObject.getString("IPCDEVICE_ID") + "hig");
|
|
||||||
SimpleInputRegister simpleInputRegister_low = SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.get(jsonObject.getString("IPCDEVICE_ID") + "low");
|
|
||||||
if (simpleInputRegister_hig != null) {
|
|
||||||
int bits = Float.floatToIntBits(intValue);
|
|
||||||
simpleInputRegister_hig.setValue((bits >> 16) & 0xFFFF);
|
|
||||||
simpleInputRegister_low.setValue(bits & 0xFFFF);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
SimpleInputRegister simpleInputRegister = SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.get(jsonObject.getString("IPCDEVICE_ID"));
|
|
||||||
SimpleInputRegister simpleInputRegister1 = SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.get(jsonObject.getString("IPCDEVICE_ID")+"_1");
|
|
||||||
if (simpleInputRegister1 != null) {
|
|
||||||
simpleInputRegister1.setValue((int) intValue);
|
|
||||||
}
|
|
||||||
if (simpleInputRegister == null) continue;
|
|
||||||
// 开关量
|
|
||||||
simpleInputRegister.setValue((int) intValue);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (int i = 0; i < mQobjects.size(); i++) {
|
|
||||||
JSONObject jsonObject = mQobjects.getJSONObject(i);
|
|
||||||
float intValue = jsonObject.getFloatValue("CURRENT_VALUE");
|
|
||||||
SimpleInputRegister simpleInputRegister = SyncGlScheduledTasks.SIMPLE_DIGITAL_INMAP_2.get(jsonObject.getString("IPCDEVICE_ID"));
|
|
||||||
if (simpleInputRegister == null) continue;
|
|
||||||
// 开关量
|
|
||||||
simpleInputRegister.setValue((int) intValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
// @Scheduled(fixedDelay = 5000)
|
|
||||||
// @Async
|
|
||||||
// public void taskWithZlFixedDelay() {
|
|
||||||
// JSONArray objects = JSONObject.parseArray((String) redisUtil.get("ZL_LIST"));
|
|
||||||
// System.out.println("更新转炉炉数据:"+DateUtil.date2Str(new Date()));
|
|
||||||
// for (int i = 0; i < objects.size(); i++) {
|
|
||||||
// JSONObject jsonObject = objects.getJSONObject(i);
|
|
||||||
// double intValue = jsonObject.getDouble("CURRENT_VALUE");
|
|
||||||
// if ("2".equals(jsonObject.getString("SIGNAL_TYPE"))) {
|
|
||||||
// // 开关量
|
|
||||||
// SimpleDigitalIn simpleDigitalIn = SIMPLE_DIGITAL_INMAP.get(jsonObject.getString("IPCDEVICE_ID"));
|
|
||||||
// if (simpleDigitalIn != null) {
|
|
||||||
// SIMPLE_DIGITAL_INMAP.get(jsonObject.getString("IPCDEVICE_ID")).set((int) intValue == 1);
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// SimpleInputRegister simpleInputRegister = SIMPLE_INPUT_REGISTER_MAP.get(jsonObject.getString("IPCDEVICE_ID"));
|
|
||||||
// if (simpleInputRegister != null) {
|
|
||||||
// SIMPLE_INPUT_REGISTER_MAP.get(jsonObject.getString("IPCDEVICE_ID")).setValue((int) intValue);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,17 +0,0 @@
|
||||||
server:
|
|
||||||
port: 19393
|
|
||||||
spring:
|
|
||||||
application:
|
|
||||||
name: integrated_yjb_dataDocking
|
|
||||||
datasource:
|
|
||||||
driver-class-name: org.postgresql.Driver
|
|
||||||
url: jdbc:postgresql://10.199.64.30:15431/postgres?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=UTC
|
|
||||||
password: rT)?DjIGYM8k0h!
|
|
||||||
username: postgres
|
|
||||||
redis:
|
|
||||||
host: 10.199.64.30
|
|
||||||
password: 5.5pYdZqHxpR#9%W.
|
|
||||||
database: 1
|
|
||||||
port: 16379
|
|
||||||
modbus:
|
|
||||||
port: 18888
|
|
|
@ -1,12 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD SQL Map Config 3.0//EN"
|
|
||||||
"http://mybatis.org/dtd/mybatis-3-config.dtd">
|
|
||||||
<configuration>
|
|
||||||
|
|
||||||
<typeAliases>
|
|
||||||
<typeAlias type="com.netsdk.entity.PageData" alias="pd"/>
|
|
||||||
|
|
||||||
<!-- 这里添加实体类 -->
|
|
||||||
|
|
||||||
</typeAliases>
|
|
||||||
</configuration>
|
|
|
@ -1,10 +0,0 @@
|
||||||
<?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="com.netsdk.mapper.datasource.other.OtherMapper">
|
|
||||||
|
|
||||||
<select id="getAllMqOrderList" resultType="java.util.HashMap">
|
|
||||||
select *
|
|
||||||
from mq_docking
|
|
||||||
where ISDELETE = 0
|
|
||||||
</select>
|
|
||||||
</mapper>
|
|
Loading…
Reference in New Issue