diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/casic/controller/MapDataController.java b/src/main/java/com/casic/controller/MapDataController.java new file mode 100644 index 0000000..b897b95 --- /dev/null +++ b/src/main/java/com/casic/controller/MapDataController.java @@ -0,0 +1,47 @@ +package com.casic.controller; + +import com.casic.service.MapDataService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/overview") +public class MapDataController { + + private final MapDataService mapDataService; + + public MapDataController(MapDataService mapDataService) { + this.mapDataService = mapDataService; + } + + /** + * 获取列表 + */ + @RequestMapping(value = "/wellList") + public Object getWellList(@RequestParam(required = false) String keywords, + @RequestParam(required = false) String wellType, + @RequestParam(required = false) String deptid, + @RequestParam(required = false) String isAlarm) { + + return mapDataService.getWellList(keywords,wellType,deptid,isAlarm); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/alarmNow") + public Object alarmNow() { + return mapDataService.getNowAlarmRecords(); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/wellInfo") + public Object getWellInfo(@RequestParam(value = "devcode", required = true) String devcode, + @RequestParam(value = "deviceType", required = true) String deviceType) { + return mapDataService.getWellInfo(devcode,deviceType); + } +} diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/casic/controller/MapDataController.java b/src/main/java/com/casic/controller/MapDataController.java new file mode 100644 index 0000000..b897b95 --- /dev/null +++ b/src/main/java/com/casic/controller/MapDataController.java @@ -0,0 +1,47 @@ +package com.casic.controller; + +import com.casic.service.MapDataService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/overview") +public class MapDataController { + + private final MapDataService mapDataService; + + public MapDataController(MapDataService mapDataService) { + this.mapDataService = mapDataService; + } + + /** + * 获取列表 + */ + @RequestMapping(value = "/wellList") + public Object getWellList(@RequestParam(required = false) String keywords, + @RequestParam(required = false) String wellType, + @RequestParam(required = false) String deptid, + @RequestParam(required = false) String isAlarm) { + + return mapDataService.getWellList(keywords,wellType,deptid,isAlarm); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/alarmNow") + public Object alarmNow() { + return mapDataService.getNowAlarmRecords(); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/wellInfo") + public Object getWellInfo(@RequestParam(value = "devcode", required = true) String devcode, + @RequestParam(value = "deviceType", required = true) String deviceType) { + return mapDataService.getWellInfo(devcode,deviceType); + } +} diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java new file mode 100644 index 0000000..04f8d97 --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -0,0 +1,210 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + public ScreenDataController(ScreenDataService screenDataService) { + this.screenDataService = screenDataService; + } + + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/line-length") + public Object getLineLength(String beginTime, String endTime) { +// return screenDataService.getLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + " \"deptName\":\"圣井燃气\",\n" + + " \"totalLength\":440\n" + + " },\n" + + " {\n" + + " \"deptName\":\"华气燃气\",\n" + + " \"totalLength\":810\n" + + " },\n" + + " {\n" + + " \"typeName\":\"中燃燃气\",\n" + + " \"totalLength\":500\n" + + " },\n" + + " {\n" + + " \"typeName\":\"正和燃气\",\n" + + " \"totalLength\":520\n" + + " },\n" + + " {\n" + + " \"typeName\":\"华罚燃气\",\n" + + " \"totalLength\":630\n" + + " }\n" + + " ]"; + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + /** + * 分类汇总燃气管线监管人员的类型和数量 + */ + @RequestMapping("/staff") + public Object getObvserStaff(String beginTime, String endTime) { +// return screenDataService.getObvserStaff(beginTime, endTime); + return "{\n" + + " \t\"总人数\":2022,\n" + + "\t\"staffDataList\":[\n" + + " {\n" + + "\t\t\"岗位名称\":\"管理人员\",\n" + + "\t\t\"总计\":72\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"运维人员\",\n" + + "\t\t\"总计\":874\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"施工人员\",\n" + + "\t\t\"总计\":456\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"统计人员\",\n" + + "\t\t\"总计\":745\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"技术人员\",\n" + + "\t\t\"总计\":455\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"监管人员\",\n" + + "\t\t\"总计\":644\n" + + " }]\n" + + " }"; + } + + /** + * 以道路的维度来统计汇总燃气管线的长度和权属单位 + */ + @RequestMapping("/road-line-length") + public Object getRoadLineLength(String beginTime, String endTime) { +// return screenDataService.getRoadLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + "\t\t\"所属道路\":\"双山西街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"圣井燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"世纪大道\",\n" + + "\t\t\"管线长度/km\":54,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"桃水大街\",\n" + + "\t\t\"管线长度/km\":32,\n" + + "\t\t\"权属单位\":\"中燃燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"鲁态大街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " }\n" + + "]"; + } + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + +// /** +// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/list") +// public Object getDeviceList(String beginTime, String endTime) { +// return screenDataService.getDeviceList(beginTime,endTime); +// } +// +// /** +// * 包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/Info") +// public Object getDeviceInfo(String wellCode,String deviceType) { +// return screenDataService.getDeviceInfo(wellCode,deviceType); +// } + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + /** + * 显示云台的报警信息 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/casic/controller/MapDataController.java b/src/main/java/com/casic/controller/MapDataController.java new file mode 100644 index 0000000..b897b95 --- /dev/null +++ b/src/main/java/com/casic/controller/MapDataController.java @@ -0,0 +1,47 @@ +package com.casic.controller; + +import com.casic.service.MapDataService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/overview") +public class MapDataController { + + private final MapDataService mapDataService; + + public MapDataController(MapDataService mapDataService) { + this.mapDataService = mapDataService; + } + + /** + * 获取列表 + */ + @RequestMapping(value = "/wellList") + public Object getWellList(@RequestParam(required = false) String keywords, + @RequestParam(required = false) String wellType, + @RequestParam(required = false) String deptid, + @RequestParam(required = false) String isAlarm) { + + return mapDataService.getWellList(keywords,wellType,deptid,isAlarm); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/alarmNow") + public Object alarmNow() { + return mapDataService.getNowAlarmRecords(); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/wellInfo") + public Object getWellInfo(@RequestParam(value = "devcode", required = true) String devcode, + @RequestParam(value = "deviceType", required = true) String deviceType) { + return mapDataService.getWellInfo(devcode,deviceType); + } +} diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java new file mode 100644 index 0000000..04f8d97 --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -0,0 +1,210 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + public ScreenDataController(ScreenDataService screenDataService) { + this.screenDataService = screenDataService; + } + + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/line-length") + public Object getLineLength(String beginTime, String endTime) { +// return screenDataService.getLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + " \"deptName\":\"圣井燃气\",\n" + + " \"totalLength\":440\n" + + " },\n" + + " {\n" + + " \"deptName\":\"华气燃气\",\n" + + " \"totalLength\":810\n" + + " },\n" + + " {\n" + + " \"typeName\":\"中燃燃气\",\n" + + " \"totalLength\":500\n" + + " },\n" + + " {\n" + + " \"typeName\":\"正和燃气\",\n" + + " \"totalLength\":520\n" + + " },\n" + + " {\n" + + " \"typeName\":\"华罚燃气\",\n" + + " \"totalLength\":630\n" + + " }\n" + + " ]"; + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + /** + * 分类汇总燃气管线监管人员的类型和数量 + */ + @RequestMapping("/staff") + public Object getObvserStaff(String beginTime, String endTime) { +// return screenDataService.getObvserStaff(beginTime, endTime); + return "{\n" + + " \t\"总人数\":2022,\n" + + "\t\"staffDataList\":[\n" + + " {\n" + + "\t\t\"岗位名称\":\"管理人员\",\n" + + "\t\t\"总计\":72\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"运维人员\",\n" + + "\t\t\"总计\":874\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"施工人员\",\n" + + "\t\t\"总计\":456\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"统计人员\",\n" + + "\t\t\"总计\":745\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"技术人员\",\n" + + "\t\t\"总计\":455\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"监管人员\",\n" + + "\t\t\"总计\":644\n" + + " }]\n" + + " }"; + } + + /** + * 以道路的维度来统计汇总燃气管线的长度和权属单位 + */ + @RequestMapping("/road-line-length") + public Object getRoadLineLength(String beginTime, String endTime) { +// return screenDataService.getRoadLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + "\t\t\"所属道路\":\"双山西街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"圣井燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"世纪大道\",\n" + + "\t\t\"管线长度/km\":54,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"桃水大街\",\n" + + "\t\t\"管线长度/km\":32,\n" + + "\t\t\"权属单位\":\"中燃燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"鲁态大街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " }\n" + + "]"; + } + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + +// /** +// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/list") +// public Object getDeviceList(String beginTime, String endTime) { +// return screenDataService.getDeviceList(beginTime,endTime); +// } +// +// /** +// * 包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/Info") +// public Object getDeviceInfo(String wellCode,String deviceType) { +// return screenDataService.getDeviceInfo(wellCode,deviceType); +// } + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + /** + * 显示云台的报警信息 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/cms/CmsDataMapper.java b/src/main/java/com/casic/dao/cms/CmsDataMapper.java new file mode 100644 index 0000000..e57975e --- /dev/null +++ b/src/main/java/com/casic/dao/cms/CmsDataMapper.java @@ -0,0 +1,23 @@ +package com.casic.dao.cms; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface CmsDataMapper { + + Integer countElectronicDevice(); + + List> countElectronicTask(); + + Integer getTotalWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getCompleteWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalEvent(@Param("beginTime") String beginTime, @Param("endTime") String endTime); +} diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/casic/controller/MapDataController.java b/src/main/java/com/casic/controller/MapDataController.java new file mode 100644 index 0000000..b897b95 --- /dev/null +++ b/src/main/java/com/casic/controller/MapDataController.java @@ -0,0 +1,47 @@ +package com.casic.controller; + +import com.casic.service.MapDataService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/overview") +public class MapDataController { + + private final MapDataService mapDataService; + + public MapDataController(MapDataService mapDataService) { + this.mapDataService = mapDataService; + } + + /** + * 获取列表 + */ + @RequestMapping(value = "/wellList") + public Object getWellList(@RequestParam(required = false) String keywords, + @RequestParam(required = false) String wellType, + @RequestParam(required = false) String deptid, + @RequestParam(required = false) String isAlarm) { + + return mapDataService.getWellList(keywords,wellType,deptid,isAlarm); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/alarmNow") + public Object alarmNow() { + return mapDataService.getNowAlarmRecords(); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/wellInfo") + public Object getWellInfo(@RequestParam(value = "devcode", required = true) String devcode, + @RequestParam(value = "deviceType", required = true) String deviceType) { + return mapDataService.getWellInfo(devcode,deviceType); + } +} diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java new file mode 100644 index 0000000..04f8d97 --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -0,0 +1,210 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + public ScreenDataController(ScreenDataService screenDataService) { + this.screenDataService = screenDataService; + } + + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/line-length") + public Object getLineLength(String beginTime, String endTime) { +// return screenDataService.getLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + " \"deptName\":\"圣井燃气\",\n" + + " \"totalLength\":440\n" + + " },\n" + + " {\n" + + " \"deptName\":\"华气燃气\",\n" + + " \"totalLength\":810\n" + + " },\n" + + " {\n" + + " \"typeName\":\"中燃燃气\",\n" + + " \"totalLength\":500\n" + + " },\n" + + " {\n" + + " \"typeName\":\"正和燃气\",\n" + + " \"totalLength\":520\n" + + " },\n" + + " {\n" + + " \"typeName\":\"华罚燃气\",\n" + + " \"totalLength\":630\n" + + " }\n" + + " ]"; + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + /** + * 分类汇总燃气管线监管人员的类型和数量 + */ + @RequestMapping("/staff") + public Object getObvserStaff(String beginTime, String endTime) { +// return screenDataService.getObvserStaff(beginTime, endTime); + return "{\n" + + " \t\"总人数\":2022,\n" + + "\t\"staffDataList\":[\n" + + " {\n" + + "\t\t\"岗位名称\":\"管理人员\",\n" + + "\t\t\"总计\":72\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"运维人员\",\n" + + "\t\t\"总计\":874\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"施工人员\",\n" + + "\t\t\"总计\":456\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"统计人员\",\n" + + "\t\t\"总计\":745\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"技术人员\",\n" + + "\t\t\"总计\":455\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"监管人员\",\n" + + "\t\t\"总计\":644\n" + + " }]\n" + + " }"; + } + + /** + * 以道路的维度来统计汇总燃气管线的长度和权属单位 + */ + @RequestMapping("/road-line-length") + public Object getRoadLineLength(String beginTime, String endTime) { +// return screenDataService.getRoadLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + "\t\t\"所属道路\":\"双山西街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"圣井燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"世纪大道\",\n" + + "\t\t\"管线长度/km\":54,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"桃水大街\",\n" + + "\t\t\"管线长度/km\":32,\n" + + "\t\t\"权属单位\":\"中燃燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"鲁态大街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " }\n" + + "]"; + } + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + +// /** +// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/list") +// public Object getDeviceList(String beginTime, String endTime) { +// return screenDataService.getDeviceList(beginTime,endTime); +// } +// +// /** +// * 包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/Info") +// public Object getDeviceInfo(String wellCode,String deviceType) { +// return screenDataService.getDeviceInfo(wellCode,deviceType); +// } + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + /** + * 显示云台的报警信息 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/cms/CmsDataMapper.java b/src/main/java/com/casic/dao/cms/CmsDataMapper.java new file mode 100644 index 0000000..e57975e --- /dev/null +++ b/src/main/java/com/casic/dao/cms/CmsDataMapper.java @@ -0,0 +1,23 @@ +package com.casic.dao.cms; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface CmsDataMapper { + + Integer countElectronicDevice(); + + List> countElectronicTask(); + + Integer getTotalWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getCompleteWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalEvent(@Param("beginTime") String beginTime, @Param("endTime") String endTime); +} diff --git a/src/main/java/com/casic/dao/smartwell/MapDataMapper.java b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java new file mode 100644 index 0000000..8e56978 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java @@ -0,0 +1,25 @@ +package com.casic.dao.smartwell; + +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface MapDataMapper { + + List getWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNotAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNowAlarmRecords(); + + String getDictNameByCode(@Param("wellType") String wellType); + + Map getDeviceStatus(@Param("devcode") String devcode, @Param("tableName") String tableName, @Param("dataField") String dataField); +} diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/casic/controller/MapDataController.java b/src/main/java/com/casic/controller/MapDataController.java new file mode 100644 index 0000000..b897b95 --- /dev/null +++ b/src/main/java/com/casic/controller/MapDataController.java @@ -0,0 +1,47 @@ +package com.casic.controller; + +import com.casic.service.MapDataService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/overview") +public class MapDataController { + + private final MapDataService mapDataService; + + public MapDataController(MapDataService mapDataService) { + this.mapDataService = mapDataService; + } + + /** + * 获取列表 + */ + @RequestMapping(value = "/wellList") + public Object getWellList(@RequestParam(required = false) String keywords, + @RequestParam(required = false) String wellType, + @RequestParam(required = false) String deptid, + @RequestParam(required = false) String isAlarm) { + + return mapDataService.getWellList(keywords,wellType,deptid,isAlarm); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/alarmNow") + public Object alarmNow() { + return mapDataService.getNowAlarmRecords(); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/wellInfo") + public Object getWellInfo(@RequestParam(value = "devcode", required = true) String devcode, + @RequestParam(value = "deviceType", required = true) String deviceType) { + return mapDataService.getWellInfo(devcode,deviceType); + } +} diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java new file mode 100644 index 0000000..04f8d97 --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -0,0 +1,210 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + public ScreenDataController(ScreenDataService screenDataService) { + this.screenDataService = screenDataService; + } + + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/line-length") + public Object getLineLength(String beginTime, String endTime) { +// return screenDataService.getLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + " \"deptName\":\"圣井燃气\",\n" + + " \"totalLength\":440\n" + + " },\n" + + " {\n" + + " \"deptName\":\"华气燃气\",\n" + + " \"totalLength\":810\n" + + " },\n" + + " {\n" + + " \"typeName\":\"中燃燃气\",\n" + + " \"totalLength\":500\n" + + " },\n" + + " {\n" + + " \"typeName\":\"正和燃气\",\n" + + " \"totalLength\":520\n" + + " },\n" + + " {\n" + + " \"typeName\":\"华罚燃气\",\n" + + " \"totalLength\":630\n" + + " }\n" + + " ]"; + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + /** + * 分类汇总燃气管线监管人员的类型和数量 + */ + @RequestMapping("/staff") + public Object getObvserStaff(String beginTime, String endTime) { +// return screenDataService.getObvserStaff(beginTime, endTime); + return "{\n" + + " \t\"总人数\":2022,\n" + + "\t\"staffDataList\":[\n" + + " {\n" + + "\t\t\"岗位名称\":\"管理人员\",\n" + + "\t\t\"总计\":72\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"运维人员\",\n" + + "\t\t\"总计\":874\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"施工人员\",\n" + + "\t\t\"总计\":456\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"统计人员\",\n" + + "\t\t\"总计\":745\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"技术人员\",\n" + + "\t\t\"总计\":455\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"监管人员\",\n" + + "\t\t\"总计\":644\n" + + " }]\n" + + " }"; + } + + /** + * 以道路的维度来统计汇总燃气管线的长度和权属单位 + */ + @RequestMapping("/road-line-length") + public Object getRoadLineLength(String beginTime, String endTime) { +// return screenDataService.getRoadLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + "\t\t\"所属道路\":\"双山西街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"圣井燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"世纪大道\",\n" + + "\t\t\"管线长度/km\":54,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"桃水大街\",\n" + + "\t\t\"管线长度/km\":32,\n" + + "\t\t\"权属单位\":\"中燃燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"鲁态大街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " }\n" + + "]"; + } + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + +// /** +// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/list") +// public Object getDeviceList(String beginTime, String endTime) { +// return screenDataService.getDeviceList(beginTime,endTime); +// } +// +// /** +// * 包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/Info") +// public Object getDeviceInfo(String wellCode,String deviceType) { +// return screenDataService.getDeviceInfo(wellCode,deviceType); +// } + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + /** + * 显示云台的报警信息 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/cms/CmsDataMapper.java b/src/main/java/com/casic/dao/cms/CmsDataMapper.java new file mode 100644 index 0000000..e57975e --- /dev/null +++ b/src/main/java/com/casic/dao/cms/CmsDataMapper.java @@ -0,0 +1,23 @@ +package com.casic.dao.cms; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface CmsDataMapper { + + Integer countElectronicDevice(); + + List> countElectronicTask(); + + Integer getTotalWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getCompleteWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalEvent(@Param("beginTime") String beginTime, @Param("endTime") String endTime); +} diff --git a/src/main/java/com/casic/dao/smartwell/MapDataMapper.java b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java new file mode 100644 index 0000000..8e56978 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java @@ -0,0 +1,25 @@ +package com.casic.dao.smartwell; + +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface MapDataMapper { + + List getWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNotAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNowAlarmRecords(); + + String getDictNameByCode(@Param("wellType") String wellType); + + Map getDeviceStatus(@Param("devcode") String devcode, @Param("tableName") String tableName, @Param("dataField") String dataField); +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java new file mode 100644 index 0000000..0294b14 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -0,0 +1,43 @@ +package com.casic.dao.smartwell; + + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SmartwellDataMapper { + + List> countDeviceByType(); + + List> getTypeName(); + + List> countAlarmType(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getDeviceListByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countDeviceNumber(); + + Integer countAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countDeviceNumberByDept(); + + List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countRoadNumber(); + + List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDeviceList(); + + List> getDeptNameList(); + +} diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/casic/controller/MapDataController.java b/src/main/java/com/casic/controller/MapDataController.java new file mode 100644 index 0000000..b897b95 --- /dev/null +++ b/src/main/java/com/casic/controller/MapDataController.java @@ -0,0 +1,47 @@ +package com.casic.controller; + +import com.casic.service.MapDataService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/overview") +public class MapDataController { + + private final MapDataService mapDataService; + + public MapDataController(MapDataService mapDataService) { + this.mapDataService = mapDataService; + } + + /** + * 获取列表 + */ + @RequestMapping(value = "/wellList") + public Object getWellList(@RequestParam(required = false) String keywords, + @RequestParam(required = false) String wellType, + @RequestParam(required = false) String deptid, + @RequestParam(required = false) String isAlarm) { + + return mapDataService.getWellList(keywords,wellType,deptid,isAlarm); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/alarmNow") + public Object alarmNow() { + return mapDataService.getNowAlarmRecords(); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/wellInfo") + public Object getWellInfo(@RequestParam(value = "devcode", required = true) String devcode, + @RequestParam(value = "deviceType", required = true) String deviceType) { + return mapDataService.getWellInfo(devcode,deviceType); + } +} diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java new file mode 100644 index 0000000..04f8d97 --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -0,0 +1,210 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + public ScreenDataController(ScreenDataService screenDataService) { + this.screenDataService = screenDataService; + } + + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/line-length") + public Object getLineLength(String beginTime, String endTime) { +// return screenDataService.getLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + " \"deptName\":\"圣井燃气\",\n" + + " \"totalLength\":440\n" + + " },\n" + + " {\n" + + " \"deptName\":\"华气燃气\",\n" + + " \"totalLength\":810\n" + + " },\n" + + " {\n" + + " \"typeName\":\"中燃燃气\",\n" + + " \"totalLength\":500\n" + + " },\n" + + " {\n" + + " \"typeName\":\"正和燃气\",\n" + + " \"totalLength\":520\n" + + " },\n" + + " {\n" + + " \"typeName\":\"华罚燃气\",\n" + + " \"totalLength\":630\n" + + " }\n" + + " ]"; + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + /** + * 分类汇总燃气管线监管人员的类型和数量 + */ + @RequestMapping("/staff") + public Object getObvserStaff(String beginTime, String endTime) { +// return screenDataService.getObvserStaff(beginTime, endTime); + return "{\n" + + " \t\"总人数\":2022,\n" + + "\t\"staffDataList\":[\n" + + " {\n" + + "\t\t\"岗位名称\":\"管理人员\",\n" + + "\t\t\"总计\":72\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"运维人员\",\n" + + "\t\t\"总计\":874\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"施工人员\",\n" + + "\t\t\"总计\":456\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"统计人员\",\n" + + "\t\t\"总计\":745\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"技术人员\",\n" + + "\t\t\"总计\":455\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"监管人员\",\n" + + "\t\t\"总计\":644\n" + + " }]\n" + + " }"; + } + + /** + * 以道路的维度来统计汇总燃气管线的长度和权属单位 + */ + @RequestMapping("/road-line-length") + public Object getRoadLineLength(String beginTime, String endTime) { +// return screenDataService.getRoadLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + "\t\t\"所属道路\":\"双山西街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"圣井燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"世纪大道\",\n" + + "\t\t\"管线长度/km\":54,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"桃水大街\",\n" + + "\t\t\"管线长度/km\":32,\n" + + "\t\t\"权属单位\":\"中燃燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"鲁态大街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " }\n" + + "]"; + } + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + +// /** +// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/list") +// public Object getDeviceList(String beginTime, String endTime) { +// return screenDataService.getDeviceList(beginTime,endTime); +// } +// +// /** +// * 包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/Info") +// public Object getDeviceInfo(String wellCode,String deviceType) { +// return screenDataService.getDeviceInfo(wellCode,deviceType); +// } + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + /** + * 显示云台的报警信息 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/cms/CmsDataMapper.java b/src/main/java/com/casic/dao/cms/CmsDataMapper.java new file mode 100644 index 0000000..e57975e --- /dev/null +++ b/src/main/java/com/casic/dao/cms/CmsDataMapper.java @@ -0,0 +1,23 @@ +package com.casic.dao.cms; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface CmsDataMapper { + + Integer countElectronicDevice(); + + List> countElectronicTask(); + + Integer getTotalWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getCompleteWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalEvent(@Param("beginTime") String beginTime, @Param("endTime") String endTime); +} diff --git a/src/main/java/com/casic/dao/smartwell/MapDataMapper.java b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java new file mode 100644 index 0000000..8e56978 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java @@ -0,0 +1,25 @@ +package com.casic.dao.smartwell; + +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface MapDataMapper { + + List getWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNotAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNowAlarmRecords(); + + String getDictNameByCode(@Param("wellType") String wellType); + + Map getDeviceStatus(@Param("devcode") String devcode, @Param("tableName") String tableName, @Param("dataField") String dataField); +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java new file mode 100644 index 0000000..0294b14 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -0,0 +1,43 @@ +package com.casic.dao.smartwell; + + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SmartwellDataMapper { + + List> countDeviceByType(); + + List> getTypeName(); + + List> countAlarmType(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getDeviceListByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countDeviceNumber(); + + Integer countAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countDeviceNumberByDept(); + + List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countRoadNumber(); + + List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDeviceList(); + + List> getDeptNameList(); + +} diff --git a/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java new file mode 100644 index 0000000..e6ba279 --- /dev/null +++ b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java @@ -0,0 +1,32 @@ +package com.casic.dao.spantilt; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface TiltDataMapper { + /** + * 已安装设备 + * + * @return + */ + Integer countColudDevice(); + + /** + * 警告 + * + * @return + */ + Integer countColudAlarm(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + + /** + * 云台报警信息 + * + * @return + */ + List> countColudAlarmRecords(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + +} diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/casic/controller/MapDataController.java b/src/main/java/com/casic/controller/MapDataController.java new file mode 100644 index 0000000..b897b95 --- /dev/null +++ b/src/main/java/com/casic/controller/MapDataController.java @@ -0,0 +1,47 @@ +package com.casic.controller; + +import com.casic.service.MapDataService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/overview") +public class MapDataController { + + private final MapDataService mapDataService; + + public MapDataController(MapDataService mapDataService) { + this.mapDataService = mapDataService; + } + + /** + * 获取列表 + */ + @RequestMapping(value = "/wellList") + public Object getWellList(@RequestParam(required = false) String keywords, + @RequestParam(required = false) String wellType, + @RequestParam(required = false) String deptid, + @RequestParam(required = false) String isAlarm) { + + return mapDataService.getWellList(keywords,wellType,deptid,isAlarm); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/alarmNow") + public Object alarmNow() { + return mapDataService.getNowAlarmRecords(); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/wellInfo") + public Object getWellInfo(@RequestParam(value = "devcode", required = true) String devcode, + @RequestParam(value = "deviceType", required = true) String deviceType) { + return mapDataService.getWellInfo(devcode,deviceType); + } +} diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java new file mode 100644 index 0000000..04f8d97 --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -0,0 +1,210 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + public ScreenDataController(ScreenDataService screenDataService) { + this.screenDataService = screenDataService; + } + + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/line-length") + public Object getLineLength(String beginTime, String endTime) { +// return screenDataService.getLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + " \"deptName\":\"圣井燃气\",\n" + + " \"totalLength\":440\n" + + " },\n" + + " {\n" + + " \"deptName\":\"华气燃气\",\n" + + " \"totalLength\":810\n" + + " },\n" + + " {\n" + + " \"typeName\":\"中燃燃气\",\n" + + " \"totalLength\":500\n" + + " },\n" + + " {\n" + + " \"typeName\":\"正和燃气\",\n" + + " \"totalLength\":520\n" + + " },\n" + + " {\n" + + " \"typeName\":\"华罚燃气\",\n" + + " \"totalLength\":630\n" + + " }\n" + + " ]"; + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + /** + * 分类汇总燃气管线监管人员的类型和数量 + */ + @RequestMapping("/staff") + public Object getObvserStaff(String beginTime, String endTime) { +// return screenDataService.getObvserStaff(beginTime, endTime); + return "{\n" + + " \t\"总人数\":2022,\n" + + "\t\"staffDataList\":[\n" + + " {\n" + + "\t\t\"岗位名称\":\"管理人员\",\n" + + "\t\t\"总计\":72\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"运维人员\",\n" + + "\t\t\"总计\":874\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"施工人员\",\n" + + "\t\t\"总计\":456\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"统计人员\",\n" + + "\t\t\"总计\":745\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"技术人员\",\n" + + "\t\t\"总计\":455\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"监管人员\",\n" + + "\t\t\"总计\":644\n" + + " }]\n" + + " }"; + } + + /** + * 以道路的维度来统计汇总燃气管线的长度和权属单位 + */ + @RequestMapping("/road-line-length") + public Object getRoadLineLength(String beginTime, String endTime) { +// return screenDataService.getRoadLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + "\t\t\"所属道路\":\"双山西街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"圣井燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"世纪大道\",\n" + + "\t\t\"管线长度/km\":54,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"桃水大街\",\n" + + "\t\t\"管线长度/km\":32,\n" + + "\t\t\"权属单位\":\"中燃燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"鲁态大街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " }\n" + + "]"; + } + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + +// /** +// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/list") +// public Object getDeviceList(String beginTime, String endTime) { +// return screenDataService.getDeviceList(beginTime,endTime); +// } +// +// /** +// * 包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/Info") +// public Object getDeviceInfo(String wellCode,String deviceType) { +// return screenDataService.getDeviceInfo(wellCode,deviceType); +// } + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + /** + * 显示云台的报警信息 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/cms/CmsDataMapper.java b/src/main/java/com/casic/dao/cms/CmsDataMapper.java new file mode 100644 index 0000000..e57975e --- /dev/null +++ b/src/main/java/com/casic/dao/cms/CmsDataMapper.java @@ -0,0 +1,23 @@ +package com.casic.dao.cms; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface CmsDataMapper { + + Integer countElectronicDevice(); + + List> countElectronicTask(); + + Integer getTotalWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getCompleteWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalEvent(@Param("beginTime") String beginTime, @Param("endTime") String endTime); +} diff --git a/src/main/java/com/casic/dao/smartwell/MapDataMapper.java b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java new file mode 100644 index 0000000..8e56978 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java @@ -0,0 +1,25 @@ +package com.casic.dao.smartwell; + +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface MapDataMapper { + + List getWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNotAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNowAlarmRecords(); + + String getDictNameByCode(@Param("wellType") String wellType); + + Map getDeviceStatus(@Param("devcode") String devcode, @Param("tableName") String tableName, @Param("dataField") String dataField); +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java new file mode 100644 index 0000000..0294b14 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -0,0 +1,43 @@ +package com.casic.dao.smartwell; + + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SmartwellDataMapper { + + List> countDeviceByType(); + + List> getTypeName(); + + List> countAlarmType(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getDeviceListByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countDeviceNumber(); + + Integer countAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countDeviceNumberByDept(); + + List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countRoadNumber(); + + List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDeviceList(); + + List> getDeptNameList(); + +} diff --git a/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java new file mode 100644 index 0000000..e6ba279 --- /dev/null +++ b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java @@ -0,0 +1,32 @@ +package com.casic.dao.spantilt; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface TiltDataMapper { + /** + * 已安装设备 + * + * @return + */ + Integer countColudDevice(); + + /** + * 警告 + * + * @return + */ + Integer countColudAlarm(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + + /** + * 云台报警信息 + * + * @return + */ + List> countColudAlarmRecords(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + +} diff --git a/src/main/java/com/casic/model/AlarmNowView.java b/src/main/java/com/casic/model/AlarmNowView.java new file mode 100644 index 0000000..6eebafc --- /dev/null +++ b/src/main/java/com/casic/model/AlarmNowView.java @@ -0,0 +1,108 @@ +package com.casic.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +public class AlarmNowView { + + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date alarmTime; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + +} diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/casic/controller/MapDataController.java b/src/main/java/com/casic/controller/MapDataController.java new file mode 100644 index 0000000..b897b95 --- /dev/null +++ b/src/main/java/com/casic/controller/MapDataController.java @@ -0,0 +1,47 @@ +package com.casic.controller; + +import com.casic.service.MapDataService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/overview") +public class MapDataController { + + private final MapDataService mapDataService; + + public MapDataController(MapDataService mapDataService) { + this.mapDataService = mapDataService; + } + + /** + * 获取列表 + */ + @RequestMapping(value = "/wellList") + public Object getWellList(@RequestParam(required = false) String keywords, + @RequestParam(required = false) String wellType, + @RequestParam(required = false) String deptid, + @RequestParam(required = false) String isAlarm) { + + return mapDataService.getWellList(keywords,wellType,deptid,isAlarm); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/alarmNow") + public Object alarmNow() { + return mapDataService.getNowAlarmRecords(); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/wellInfo") + public Object getWellInfo(@RequestParam(value = "devcode", required = true) String devcode, + @RequestParam(value = "deviceType", required = true) String deviceType) { + return mapDataService.getWellInfo(devcode,deviceType); + } +} diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java new file mode 100644 index 0000000..04f8d97 --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -0,0 +1,210 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + public ScreenDataController(ScreenDataService screenDataService) { + this.screenDataService = screenDataService; + } + + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/line-length") + public Object getLineLength(String beginTime, String endTime) { +// return screenDataService.getLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + " \"deptName\":\"圣井燃气\",\n" + + " \"totalLength\":440\n" + + " },\n" + + " {\n" + + " \"deptName\":\"华气燃气\",\n" + + " \"totalLength\":810\n" + + " },\n" + + " {\n" + + " \"typeName\":\"中燃燃气\",\n" + + " \"totalLength\":500\n" + + " },\n" + + " {\n" + + " \"typeName\":\"正和燃气\",\n" + + " \"totalLength\":520\n" + + " },\n" + + " {\n" + + " \"typeName\":\"华罚燃气\",\n" + + " \"totalLength\":630\n" + + " }\n" + + " ]"; + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + /** + * 分类汇总燃气管线监管人员的类型和数量 + */ + @RequestMapping("/staff") + public Object getObvserStaff(String beginTime, String endTime) { +// return screenDataService.getObvserStaff(beginTime, endTime); + return "{\n" + + " \t\"总人数\":2022,\n" + + "\t\"staffDataList\":[\n" + + " {\n" + + "\t\t\"岗位名称\":\"管理人员\",\n" + + "\t\t\"总计\":72\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"运维人员\",\n" + + "\t\t\"总计\":874\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"施工人员\",\n" + + "\t\t\"总计\":456\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"统计人员\",\n" + + "\t\t\"总计\":745\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"技术人员\",\n" + + "\t\t\"总计\":455\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"监管人员\",\n" + + "\t\t\"总计\":644\n" + + " }]\n" + + " }"; + } + + /** + * 以道路的维度来统计汇总燃气管线的长度和权属单位 + */ + @RequestMapping("/road-line-length") + public Object getRoadLineLength(String beginTime, String endTime) { +// return screenDataService.getRoadLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + "\t\t\"所属道路\":\"双山西街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"圣井燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"世纪大道\",\n" + + "\t\t\"管线长度/km\":54,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"桃水大街\",\n" + + "\t\t\"管线长度/km\":32,\n" + + "\t\t\"权属单位\":\"中燃燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"鲁态大街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " }\n" + + "]"; + } + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + +// /** +// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/list") +// public Object getDeviceList(String beginTime, String endTime) { +// return screenDataService.getDeviceList(beginTime,endTime); +// } +// +// /** +// * 包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/Info") +// public Object getDeviceInfo(String wellCode,String deviceType) { +// return screenDataService.getDeviceInfo(wellCode,deviceType); +// } + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + /** + * 显示云台的报警信息 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/cms/CmsDataMapper.java b/src/main/java/com/casic/dao/cms/CmsDataMapper.java new file mode 100644 index 0000000..e57975e --- /dev/null +++ b/src/main/java/com/casic/dao/cms/CmsDataMapper.java @@ -0,0 +1,23 @@ +package com.casic.dao.cms; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface CmsDataMapper { + + Integer countElectronicDevice(); + + List> countElectronicTask(); + + Integer getTotalWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getCompleteWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalEvent(@Param("beginTime") String beginTime, @Param("endTime") String endTime); +} diff --git a/src/main/java/com/casic/dao/smartwell/MapDataMapper.java b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java new file mode 100644 index 0000000..8e56978 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java @@ -0,0 +1,25 @@ +package com.casic.dao.smartwell; + +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface MapDataMapper { + + List getWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNotAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNowAlarmRecords(); + + String getDictNameByCode(@Param("wellType") String wellType); + + Map getDeviceStatus(@Param("devcode") String devcode, @Param("tableName") String tableName, @Param("dataField") String dataField); +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java new file mode 100644 index 0000000..0294b14 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -0,0 +1,43 @@ +package com.casic.dao.smartwell; + + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SmartwellDataMapper { + + List> countDeviceByType(); + + List> getTypeName(); + + List> countAlarmType(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getDeviceListByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countDeviceNumber(); + + Integer countAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countDeviceNumberByDept(); + + List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countRoadNumber(); + + List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDeviceList(); + + List> getDeptNameList(); + +} diff --git a/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java new file mode 100644 index 0000000..e6ba279 --- /dev/null +++ b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java @@ -0,0 +1,32 @@ +package com.casic.dao.spantilt; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface TiltDataMapper { + /** + * 已安装设备 + * + * @return + */ + Integer countColudDevice(); + + /** + * 警告 + * + * @return + */ + Integer countColudAlarm(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + + /** + * 云台报警信息 + * + * @return + */ + List> countColudAlarmRecords(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + +} diff --git a/src/main/java/com/casic/model/AlarmNowView.java b/src/main/java/com/casic/model/AlarmNowView.java new file mode 100644 index 0000000..6eebafc --- /dev/null +++ b/src/main/java/com/casic/model/AlarmNowView.java @@ -0,0 +1,108 @@ +package com.casic.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +public class AlarmNowView { + + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date alarmTime; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + +} diff --git a/src/main/java/com/casic/model/BusWellInfo.java b/src/main/java/com/casic/model/BusWellInfo.java new file mode 100644 index 0000000..f4b8eba --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfo.java @@ -0,0 +1,192 @@ +package com.casic.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + //@NotEmpty(message="井深不能为空") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + + /** + * 区域 + */ + private String road; + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + + + /** + * 位置 + */ + private String position; + /** + * 部门编号 + */ + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; +// /** +// * 责任人 +// */ +// @TableField("STAFF") +// private String staff; +// /** +// * 电话 +// */ +// @TableField("TEL") +// private String tel; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/casic/controller/MapDataController.java b/src/main/java/com/casic/controller/MapDataController.java new file mode 100644 index 0000000..b897b95 --- /dev/null +++ b/src/main/java/com/casic/controller/MapDataController.java @@ -0,0 +1,47 @@ +package com.casic.controller; + +import com.casic.service.MapDataService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/overview") +public class MapDataController { + + private final MapDataService mapDataService; + + public MapDataController(MapDataService mapDataService) { + this.mapDataService = mapDataService; + } + + /** + * 获取列表 + */ + @RequestMapping(value = "/wellList") + public Object getWellList(@RequestParam(required = false) String keywords, + @RequestParam(required = false) String wellType, + @RequestParam(required = false) String deptid, + @RequestParam(required = false) String isAlarm) { + + return mapDataService.getWellList(keywords,wellType,deptid,isAlarm); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/alarmNow") + public Object alarmNow() { + return mapDataService.getNowAlarmRecords(); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/wellInfo") + public Object getWellInfo(@RequestParam(value = "devcode", required = true) String devcode, + @RequestParam(value = "deviceType", required = true) String deviceType) { + return mapDataService.getWellInfo(devcode,deviceType); + } +} diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java new file mode 100644 index 0000000..04f8d97 --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -0,0 +1,210 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + public ScreenDataController(ScreenDataService screenDataService) { + this.screenDataService = screenDataService; + } + + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/line-length") + public Object getLineLength(String beginTime, String endTime) { +// return screenDataService.getLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + " \"deptName\":\"圣井燃气\",\n" + + " \"totalLength\":440\n" + + " },\n" + + " {\n" + + " \"deptName\":\"华气燃气\",\n" + + " \"totalLength\":810\n" + + " },\n" + + " {\n" + + " \"typeName\":\"中燃燃气\",\n" + + " \"totalLength\":500\n" + + " },\n" + + " {\n" + + " \"typeName\":\"正和燃气\",\n" + + " \"totalLength\":520\n" + + " },\n" + + " {\n" + + " \"typeName\":\"华罚燃气\",\n" + + " \"totalLength\":630\n" + + " }\n" + + " ]"; + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + /** + * 分类汇总燃气管线监管人员的类型和数量 + */ + @RequestMapping("/staff") + public Object getObvserStaff(String beginTime, String endTime) { +// return screenDataService.getObvserStaff(beginTime, endTime); + return "{\n" + + " \t\"总人数\":2022,\n" + + "\t\"staffDataList\":[\n" + + " {\n" + + "\t\t\"岗位名称\":\"管理人员\",\n" + + "\t\t\"总计\":72\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"运维人员\",\n" + + "\t\t\"总计\":874\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"施工人员\",\n" + + "\t\t\"总计\":456\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"统计人员\",\n" + + "\t\t\"总计\":745\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"技术人员\",\n" + + "\t\t\"总计\":455\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"监管人员\",\n" + + "\t\t\"总计\":644\n" + + " }]\n" + + " }"; + } + + /** + * 以道路的维度来统计汇总燃气管线的长度和权属单位 + */ + @RequestMapping("/road-line-length") + public Object getRoadLineLength(String beginTime, String endTime) { +// return screenDataService.getRoadLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + "\t\t\"所属道路\":\"双山西街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"圣井燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"世纪大道\",\n" + + "\t\t\"管线长度/km\":54,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"桃水大街\",\n" + + "\t\t\"管线长度/km\":32,\n" + + "\t\t\"权属单位\":\"中燃燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"鲁态大街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " }\n" + + "]"; + } + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + +// /** +// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/list") +// public Object getDeviceList(String beginTime, String endTime) { +// return screenDataService.getDeviceList(beginTime,endTime); +// } +// +// /** +// * 包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/Info") +// public Object getDeviceInfo(String wellCode,String deviceType) { +// return screenDataService.getDeviceInfo(wellCode,deviceType); +// } + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + /** + * 显示云台的报警信息 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/cms/CmsDataMapper.java b/src/main/java/com/casic/dao/cms/CmsDataMapper.java new file mode 100644 index 0000000..e57975e --- /dev/null +++ b/src/main/java/com/casic/dao/cms/CmsDataMapper.java @@ -0,0 +1,23 @@ +package com.casic.dao.cms; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface CmsDataMapper { + + Integer countElectronicDevice(); + + List> countElectronicTask(); + + Integer getTotalWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getCompleteWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalEvent(@Param("beginTime") String beginTime, @Param("endTime") String endTime); +} diff --git a/src/main/java/com/casic/dao/smartwell/MapDataMapper.java b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java new file mode 100644 index 0000000..8e56978 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java @@ -0,0 +1,25 @@ +package com.casic.dao.smartwell; + +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface MapDataMapper { + + List getWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNotAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNowAlarmRecords(); + + String getDictNameByCode(@Param("wellType") String wellType); + + Map getDeviceStatus(@Param("devcode") String devcode, @Param("tableName") String tableName, @Param("dataField") String dataField); +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java new file mode 100644 index 0000000..0294b14 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -0,0 +1,43 @@ +package com.casic.dao.smartwell; + + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SmartwellDataMapper { + + List> countDeviceByType(); + + List> getTypeName(); + + List> countAlarmType(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getDeviceListByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countDeviceNumber(); + + Integer countAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countDeviceNumberByDept(); + + List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countRoadNumber(); + + List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDeviceList(); + + List> getDeptNameList(); + +} diff --git a/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java new file mode 100644 index 0000000..e6ba279 --- /dev/null +++ b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java @@ -0,0 +1,32 @@ +package com.casic.dao.spantilt; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface TiltDataMapper { + /** + * 已安装设备 + * + * @return + */ + Integer countColudDevice(); + + /** + * 警告 + * + * @return + */ + Integer countColudAlarm(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + + /** + * 云台报警信息 + * + * @return + */ + List> countColudAlarmRecords(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + +} diff --git a/src/main/java/com/casic/model/AlarmNowView.java b/src/main/java/com/casic/model/AlarmNowView.java new file mode 100644 index 0000000..6eebafc --- /dev/null +++ b/src/main/java/com/casic/model/AlarmNowView.java @@ -0,0 +1,108 @@ +package com.casic.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +public class AlarmNowView { + + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date alarmTime; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + +} diff --git a/src/main/java/com/casic/model/BusWellInfo.java b/src/main/java/com/casic/model/BusWellInfo.java new file mode 100644 index 0000000..f4b8eba --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfo.java @@ -0,0 +1,192 @@ +package com.casic.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + //@NotEmpty(message="井深不能为空") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + + /** + * 区域 + */ + private String road; + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + + + /** + * 位置 + */ + private String position; + /** + * 部门编号 + */ + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; +// /** +// * 责任人 +// */ +// @TableField("STAFF") +// private String staff; +// /** +// * 电话 +// */ +// @TableField("TEL") +// private String tel; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/src/main/java/com/casic/model/BusWellInfoDto.java b/src/main/java/com/casic/model/BusWellInfoDto.java new file mode 100644 index 0000000..48610f2 --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfoDto.java @@ -0,0 +1,276 @@ +package com.casic.model; + + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class BusWellInfoDto { + private Long id; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + private String deviceType; + private String deptid; + private String deptName; + private Float deep; + private String position; + private String coordinateX; + private String coordinateY; + private String lngBaidu; + private String latBaidu; + private String lngGaode; + private String latGaode; + private String photos; + private String notes; + private String bfzt; + private String bfztName; + private String area; + private String staff; + private String tel; + private String valid; + private String ts; + private List watchData; + + Map map = new HashMap(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + map.put("id", id); + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + map.put("wellCode", wellCode); + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + map.put("wellName", wellName); + } + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + map.put("deviceType", deviceType); + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + map.put("wellType", wellType); + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + map.put("wellTypeName", wellTypeName); + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + map.put("deptid", deptid); + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + map.put("deptName", deptName); + } + + public Float getDeep() { + return deep; + } + + public void setDeep(Float deep) { + this.deep = deep; + map.put("deep", deep); + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + map.put("position", position); + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + map.put("coordinateX", coordinateX); + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + map.put("coordinateY", coordinateY); + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + map.put("lngBaidu", lngBaidu); + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + map.put("latBaidu", latBaidu); + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + map.put("lngGaode", lngGaode); + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + map.put("latGaode", latGaode); + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + map.put("photos", photos); + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + map.put("notes", notes); + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + map.put("bfzt", bfzt); + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + map.put("bfztName", bfztName); + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + map.put("area", area); + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + map.put("staff", staff); + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + map.put("tel", tel); + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + map.put("valid", valid); + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + map.put("ts", ts); + } + + public List getWatchData() { + return watchData; + } + + public void setWatchData(List watchData) { + this.watchData = watchData; + map.put("watchData", watchData); + } + + public Map toMap() { + return map; + } +} diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/casic/controller/MapDataController.java b/src/main/java/com/casic/controller/MapDataController.java new file mode 100644 index 0000000..b897b95 --- /dev/null +++ b/src/main/java/com/casic/controller/MapDataController.java @@ -0,0 +1,47 @@ +package com.casic.controller; + +import com.casic.service.MapDataService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/overview") +public class MapDataController { + + private final MapDataService mapDataService; + + public MapDataController(MapDataService mapDataService) { + this.mapDataService = mapDataService; + } + + /** + * 获取列表 + */ + @RequestMapping(value = "/wellList") + public Object getWellList(@RequestParam(required = false) String keywords, + @RequestParam(required = false) String wellType, + @RequestParam(required = false) String deptid, + @RequestParam(required = false) String isAlarm) { + + return mapDataService.getWellList(keywords,wellType,deptid,isAlarm); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/alarmNow") + public Object alarmNow() { + return mapDataService.getNowAlarmRecords(); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/wellInfo") + public Object getWellInfo(@RequestParam(value = "devcode", required = true) String devcode, + @RequestParam(value = "deviceType", required = true) String deviceType) { + return mapDataService.getWellInfo(devcode,deviceType); + } +} diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java new file mode 100644 index 0000000..04f8d97 --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -0,0 +1,210 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + public ScreenDataController(ScreenDataService screenDataService) { + this.screenDataService = screenDataService; + } + + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/line-length") + public Object getLineLength(String beginTime, String endTime) { +// return screenDataService.getLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + " \"deptName\":\"圣井燃气\",\n" + + " \"totalLength\":440\n" + + " },\n" + + " {\n" + + " \"deptName\":\"华气燃气\",\n" + + " \"totalLength\":810\n" + + " },\n" + + " {\n" + + " \"typeName\":\"中燃燃气\",\n" + + " \"totalLength\":500\n" + + " },\n" + + " {\n" + + " \"typeName\":\"正和燃气\",\n" + + " \"totalLength\":520\n" + + " },\n" + + " {\n" + + " \"typeName\":\"华罚燃气\",\n" + + " \"totalLength\":630\n" + + " }\n" + + " ]"; + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + /** + * 分类汇总燃气管线监管人员的类型和数量 + */ + @RequestMapping("/staff") + public Object getObvserStaff(String beginTime, String endTime) { +// return screenDataService.getObvserStaff(beginTime, endTime); + return "{\n" + + " \t\"总人数\":2022,\n" + + "\t\"staffDataList\":[\n" + + " {\n" + + "\t\t\"岗位名称\":\"管理人员\",\n" + + "\t\t\"总计\":72\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"运维人员\",\n" + + "\t\t\"总计\":874\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"施工人员\",\n" + + "\t\t\"总计\":456\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"统计人员\",\n" + + "\t\t\"总计\":745\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"技术人员\",\n" + + "\t\t\"总计\":455\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"监管人员\",\n" + + "\t\t\"总计\":644\n" + + " }]\n" + + " }"; + } + + /** + * 以道路的维度来统计汇总燃气管线的长度和权属单位 + */ + @RequestMapping("/road-line-length") + public Object getRoadLineLength(String beginTime, String endTime) { +// return screenDataService.getRoadLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + "\t\t\"所属道路\":\"双山西街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"圣井燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"世纪大道\",\n" + + "\t\t\"管线长度/km\":54,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"桃水大街\",\n" + + "\t\t\"管线长度/km\":32,\n" + + "\t\t\"权属单位\":\"中燃燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"鲁态大街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " }\n" + + "]"; + } + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + +// /** +// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/list") +// public Object getDeviceList(String beginTime, String endTime) { +// return screenDataService.getDeviceList(beginTime,endTime); +// } +// +// /** +// * 包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/Info") +// public Object getDeviceInfo(String wellCode,String deviceType) { +// return screenDataService.getDeviceInfo(wellCode,deviceType); +// } + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + /** + * 显示云台的报警信息 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/cms/CmsDataMapper.java b/src/main/java/com/casic/dao/cms/CmsDataMapper.java new file mode 100644 index 0000000..e57975e --- /dev/null +++ b/src/main/java/com/casic/dao/cms/CmsDataMapper.java @@ -0,0 +1,23 @@ +package com.casic.dao.cms; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface CmsDataMapper { + + Integer countElectronicDevice(); + + List> countElectronicTask(); + + Integer getTotalWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getCompleteWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalEvent(@Param("beginTime") String beginTime, @Param("endTime") String endTime); +} diff --git a/src/main/java/com/casic/dao/smartwell/MapDataMapper.java b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java new file mode 100644 index 0000000..8e56978 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java @@ -0,0 +1,25 @@ +package com.casic.dao.smartwell; + +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface MapDataMapper { + + List getWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNotAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNowAlarmRecords(); + + String getDictNameByCode(@Param("wellType") String wellType); + + Map getDeviceStatus(@Param("devcode") String devcode, @Param("tableName") String tableName, @Param("dataField") String dataField); +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java new file mode 100644 index 0000000..0294b14 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -0,0 +1,43 @@ +package com.casic.dao.smartwell; + + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SmartwellDataMapper { + + List> countDeviceByType(); + + List> getTypeName(); + + List> countAlarmType(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getDeviceListByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countDeviceNumber(); + + Integer countAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countDeviceNumberByDept(); + + List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countRoadNumber(); + + List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDeviceList(); + + List> getDeptNameList(); + +} diff --git a/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java new file mode 100644 index 0000000..e6ba279 --- /dev/null +++ b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java @@ -0,0 +1,32 @@ +package com.casic.dao.spantilt; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface TiltDataMapper { + /** + * 已安装设备 + * + * @return + */ + Integer countColudDevice(); + + /** + * 警告 + * + * @return + */ + Integer countColudAlarm(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + + /** + * 云台报警信息 + * + * @return + */ + List> countColudAlarmRecords(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + +} diff --git a/src/main/java/com/casic/model/AlarmNowView.java b/src/main/java/com/casic/model/AlarmNowView.java new file mode 100644 index 0000000..6eebafc --- /dev/null +++ b/src/main/java/com/casic/model/AlarmNowView.java @@ -0,0 +1,108 @@ +package com.casic.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +public class AlarmNowView { + + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date alarmTime; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + +} diff --git a/src/main/java/com/casic/model/BusWellInfo.java b/src/main/java/com/casic/model/BusWellInfo.java new file mode 100644 index 0000000..f4b8eba --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfo.java @@ -0,0 +1,192 @@ +package com.casic.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + //@NotEmpty(message="井深不能为空") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + + /** + * 区域 + */ + private String road; + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + + + /** + * 位置 + */ + private String position; + /** + * 部门编号 + */ + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; +// /** +// * 责任人 +// */ +// @TableField("STAFF") +// private String staff; +// /** +// * 电话 +// */ +// @TableField("TEL") +// private String tel; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/src/main/java/com/casic/model/BusWellInfoDto.java b/src/main/java/com/casic/model/BusWellInfoDto.java new file mode 100644 index 0000000..48610f2 --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfoDto.java @@ -0,0 +1,276 @@ +package com.casic.model; + + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class BusWellInfoDto { + private Long id; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + private String deviceType; + private String deptid; + private String deptName; + private Float deep; + private String position; + private String coordinateX; + private String coordinateY; + private String lngBaidu; + private String latBaidu; + private String lngGaode; + private String latGaode; + private String photos; + private String notes; + private String bfzt; + private String bfztName; + private String area; + private String staff; + private String tel; + private String valid; + private String ts; + private List watchData; + + Map map = new HashMap(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + map.put("id", id); + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + map.put("wellCode", wellCode); + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + map.put("wellName", wellName); + } + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + map.put("deviceType", deviceType); + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + map.put("wellType", wellType); + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + map.put("wellTypeName", wellTypeName); + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + map.put("deptid", deptid); + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + map.put("deptName", deptName); + } + + public Float getDeep() { + return deep; + } + + public void setDeep(Float deep) { + this.deep = deep; + map.put("deep", deep); + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + map.put("position", position); + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + map.put("coordinateX", coordinateX); + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + map.put("coordinateY", coordinateY); + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + map.put("lngBaidu", lngBaidu); + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + map.put("latBaidu", latBaidu); + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + map.put("lngGaode", lngGaode); + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + map.put("latGaode", latGaode); + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + map.put("photos", photos); + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + map.put("notes", notes); + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + map.put("bfzt", bfzt); + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + map.put("bfztName", bfztName); + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + map.put("area", area); + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + map.put("staff", staff); + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + map.put("tel", tel); + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + map.put("valid", valid); + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + map.put("ts", ts); + } + + public List getWatchData() { + return watchData; + } + + public void setWatchData(List watchData) { + this.watchData = watchData; + map.put("watchData", watchData); + } + + public Map toMap() { + return map; + } +} diff --git a/src/main/java/com/casic/model/ResponseData.java b/src/main/java/com/casic/model/ResponseData.java new file mode 100644 index 0000000..356775a --- /dev/null +++ b/src/main/java/com/casic/model/ResponseData.java @@ -0,0 +1,19 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Boolean success; + private Integer code; + private String message; + private Object data; +} \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/casic/controller/MapDataController.java b/src/main/java/com/casic/controller/MapDataController.java new file mode 100644 index 0000000..b897b95 --- /dev/null +++ b/src/main/java/com/casic/controller/MapDataController.java @@ -0,0 +1,47 @@ +package com.casic.controller; + +import com.casic.service.MapDataService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/overview") +public class MapDataController { + + private final MapDataService mapDataService; + + public MapDataController(MapDataService mapDataService) { + this.mapDataService = mapDataService; + } + + /** + * 获取列表 + */ + @RequestMapping(value = "/wellList") + public Object getWellList(@RequestParam(required = false) String keywords, + @RequestParam(required = false) String wellType, + @RequestParam(required = false) String deptid, + @RequestParam(required = false) String isAlarm) { + + return mapDataService.getWellList(keywords,wellType,deptid,isAlarm); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/alarmNow") + public Object alarmNow() { + return mapDataService.getNowAlarmRecords(); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/wellInfo") + public Object getWellInfo(@RequestParam(value = "devcode", required = true) String devcode, + @RequestParam(value = "deviceType", required = true) String deviceType) { + return mapDataService.getWellInfo(devcode,deviceType); + } +} diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java new file mode 100644 index 0000000..04f8d97 --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -0,0 +1,210 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + public ScreenDataController(ScreenDataService screenDataService) { + this.screenDataService = screenDataService; + } + + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/line-length") + public Object getLineLength(String beginTime, String endTime) { +// return screenDataService.getLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + " \"deptName\":\"圣井燃气\",\n" + + " \"totalLength\":440\n" + + " },\n" + + " {\n" + + " \"deptName\":\"华气燃气\",\n" + + " \"totalLength\":810\n" + + " },\n" + + " {\n" + + " \"typeName\":\"中燃燃气\",\n" + + " \"totalLength\":500\n" + + " },\n" + + " {\n" + + " \"typeName\":\"正和燃气\",\n" + + " \"totalLength\":520\n" + + " },\n" + + " {\n" + + " \"typeName\":\"华罚燃气\",\n" + + " \"totalLength\":630\n" + + " }\n" + + " ]"; + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + /** + * 分类汇总燃气管线监管人员的类型和数量 + */ + @RequestMapping("/staff") + public Object getObvserStaff(String beginTime, String endTime) { +// return screenDataService.getObvserStaff(beginTime, endTime); + return "{\n" + + " \t\"总人数\":2022,\n" + + "\t\"staffDataList\":[\n" + + " {\n" + + "\t\t\"岗位名称\":\"管理人员\",\n" + + "\t\t\"总计\":72\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"运维人员\",\n" + + "\t\t\"总计\":874\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"施工人员\",\n" + + "\t\t\"总计\":456\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"统计人员\",\n" + + "\t\t\"总计\":745\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"技术人员\",\n" + + "\t\t\"总计\":455\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"监管人员\",\n" + + "\t\t\"总计\":644\n" + + " }]\n" + + " }"; + } + + /** + * 以道路的维度来统计汇总燃气管线的长度和权属单位 + */ + @RequestMapping("/road-line-length") + public Object getRoadLineLength(String beginTime, String endTime) { +// return screenDataService.getRoadLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + "\t\t\"所属道路\":\"双山西街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"圣井燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"世纪大道\",\n" + + "\t\t\"管线长度/km\":54,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"桃水大街\",\n" + + "\t\t\"管线长度/km\":32,\n" + + "\t\t\"权属单位\":\"中燃燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"鲁态大街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " }\n" + + "]"; + } + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + +// /** +// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/list") +// public Object getDeviceList(String beginTime, String endTime) { +// return screenDataService.getDeviceList(beginTime,endTime); +// } +// +// /** +// * 包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/Info") +// public Object getDeviceInfo(String wellCode,String deviceType) { +// return screenDataService.getDeviceInfo(wellCode,deviceType); +// } + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + /** + * 显示云台的报警信息 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/cms/CmsDataMapper.java b/src/main/java/com/casic/dao/cms/CmsDataMapper.java new file mode 100644 index 0000000..e57975e --- /dev/null +++ b/src/main/java/com/casic/dao/cms/CmsDataMapper.java @@ -0,0 +1,23 @@ +package com.casic.dao.cms; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface CmsDataMapper { + + Integer countElectronicDevice(); + + List> countElectronicTask(); + + Integer getTotalWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getCompleteWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalEvent(@Param("beginTime") String beginTime, @Param("endTime") String endTime); +} diff --git a/src/main/java/com/casic/dao/smartwell/MapDataMapper.java b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java new file mode 100644 index 0000000..8e56978 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java @@ -0,0 +1,25 @@ +package com.casic.dao.smartwell; + +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface MapDataMapper { + + List getWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNotAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNowAlarmRecords(); + + String getDictNameByCode(@Param("wellType") String wellType); + + Map getDeviceStatus(@Param("devcode") String devcode, @Param("tableName") String tableName, @Param("dataField") String dataField); +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java new file mode 100644 index 0000000..0294b14 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -0,0 +1,43 @@ +package com.casic.dao.smartwell; + + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SmartwellDataMapper { + + List> countDeviceByType(); + + List> getTypeName(); + + List> countAlarmType(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getDeviceListByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countDeviceNumber(); + + Integer countAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countDeviceNumberByDept(); + + List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countRoadNumber(); + + List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDeviceList(); + + List> getDeptNameList(); + +} diff --git a/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java new file mode 100644 index 0000000..e6ba279 --- /dev/null +++ b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java @@ -0,0 +1,32 @@ +package com.casic.dao.spantilt; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface TiltDataMapper { + /** + * 已安装设备 + * + * @return + */ + Integer countColudDevice(); + + /** + * 警告 + * + * @return + */ + Integer countColudAlarm(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + + /** + * 云台报警信息 + * + * @return + */ + List> countColudAlarmRecords(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + +} diff --git a/src/main/java/com/casic/model/AlarmNowView.java b/src/main/java/com/casic/model/AlarmNowView.java new file mode 100644 index 0000000..6eebafc --- /dev/null +++ b/src/main/java/com/casic/model/AlarmNowView.java @@ -0,0 +1,108 @@ +package com.casic.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +public class AlarmNowView { + + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date alarmTime; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + +} diff --git a/src/main/java/com/casic/model/BusWellInfo.java b/src/main/java/com/casic/model/BusWellInfo.java new file mode 100644 index 0000000..f4b8eba --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfo.java @@ -0,0 +1,192 @@ +package com.casic.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + //@NotEmpty(message="井深不能为空") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + + /** + * 区域 + */ + private String road; + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + + + /** + * 位置 + */ + private String position; + /** + * 部门编号 + */ + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; +// /** +// * 责任人 +// */ +// @TableField("STAFF") +// private String staff; +// /** +// * 电话 +// */ +// @TableField("TEL") +// private String tel; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/src/main/java/com/casic/model/BusWellInfoDto.java b/src/main/java/com/casic/model/BusWellInfoDto.java new file mode 100644 index 0000000..48610f2 --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfoDto.java @@ -0,0 +1,276 @@ +package com.casic.model; + + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class BusWellInfoDto { + private Long id; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + private String deviceType; + private String deptid; + private String deptName; + private Float deep; + private String position; + private String coordinateX; + private String coordinateY; + private String lngBaidu; + private String latBaidu; + private String lngGaode; + private String latGaode; + private String photos; + private String notes; + private String bfzt; + private String bfztName; + private String area; + private String staff; + private String tel; + private String valid; + private String ts; + private List watchData; + + Map map = new HashMap(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + map.put("id", id); + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + map.put("wellCode", wellCode); + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + map.put("wellName", wellName); + } + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + map.put("deviceType", deviceType); + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + map.put("wellType", wellType); + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + map.put("wellTypeName", wellTypeName); + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + map.put("deptid", deptid); + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + map.put("deptName", deptName); + } + + public Float getDeep() { + return deep; + } + + public void setDeep(Float deep) { + this.deep = deep; + map.put("deep", deep); + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + map.put("position", position); + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + map.put("coordinateX", coordinateX); + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + map.put("coordinateY", coordinateY); + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + map.put("lngBaidu", lngBaidu); + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + map.put("latBaidu", latBaidu); + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + map.put("lngGaode", lngGaode); + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + map.put("latGaode", latGaode); + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + map.put("photos", photos); + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + map.put("notes", notes); + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + map.put("bfzt", bfzt); + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + map.put("bfztName", bfztName); + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + map.put("area", area); + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + map.put("staff", staff); + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + map.put("tel", tel); + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + map.put("valid", valid); + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + map.put("ts", ts); + } + + public List getWatchData() { + return watchData; + } + + public void setWatchData(List watchData) { + this.watchData = watchData; + map.put("watchData", watchData); + } + + public Map toMap() { + return map; + } +} diff --git a/src/main/java/com/casic/model/ResponseData.java b/src/main/java/com/casic/model/ResponseData.java new file mode 100644 index 0000000..356775a --- /dev/null +++ b/src/main/java/com/casic/model/ResponseData.java @@ -0,0 +1,19 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Boolean success; + private Integer code; + private String message; + private Object data; +} \ No newline at end of file diff --git a/src/main/java/com/casic/model/WatchDataDto.java b/src/main/java/com/casic/model/WatchDataDto.java new file mode 100644 index 0000000..d50cfb5 --- /dev/null +++ b/src/main/java/com/casic/model/WatchDataDto.java @@ -0,0 +1,32 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author lenovo + */ +@Data +public class WatchDataDto implements Cloneable{ + + private Long deviceId; + private String devcode; + private String installDate; + private String onlineState; + private String onlineStateName; + private String watchType; + private String type; // 地图总览时使用 + private String data = ""; + private String value = ""; // 地图总览时使用 + private String logtime = "";//数据更新时间(设备上报时间) + + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/casic/controller/MapDataController.java b/src/main/java/com/casic/controller/MapDataController.java new file mode 100644 index 0000000..b897b95 --- /dev/null +++ b/src/main/java/com/casic/controller/MapDataController.java @@ -0,0 +1,47 @@ +package com.casic.controller; + +import com.casic.service.MapDataService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/overview") +public class MapDataController { + + private final MapDataService mapDataService; + + public MapDataController(MapDataService mapDataService) { + this.mapDataService = mapDataService; + } + + /** + * 获取列表 + */ + @RequestMapping(value = "/wellList") + public Object getWellList(@RequestParam(required = false) String keywords, + @RequestParam(required = false) String wellType, + @RequestParam(required = false) String deptid, + @RequestParam(required = false) String isAlarm) { + + return mapDataService.getWellList(keywords,wellType,deptid,isAlarm); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/alarmNow") + public Object alarmNow() { + return mapDataService.getNowAlarmRecords(); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/wellInfo") + public Object getWellInfo(@RequestParam(value = "devcode", required = true) String devcode, + @RequestParam(value = "deviceType", required = true) String deviceType) { + return mapDataService.getWellInfo(devcode,deviceType); + } +} diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java new file mode 100644 index 0000000..04f8d97 --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -0,0 +1,210 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + public ScreenDataController(ScreenDataService screenDataService) { + this.screenDataService = screenDataService; + } + + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/line-length") + public Object getLineLength(String beginTime, String endTime) { +// return screenDataService.getLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + " \"deptName\":\"圣井燃气\",\n" + + " \"totalLength\":440\n" + + " },\n" + + " {\n" + + " \"deptName\":\"华气燃气\",\n" + + " \"totalLength\":810\n" + + " },\n" + + " {\n" + + " \"typeName\":\"中燃燃气\",\n" + + " \"totalLength\":500\n" + + " },\n" + + " {\n" + + " \"typeName\":\"正和燃气\",\n" + + " \"totalLength\":520\n" + + " },\n" + + " {\n" + + " \"typeName\":\"华罚燃气\",\n" + + " \"totalLength\":630\n" + + " }\n" + + " ]"; + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + /** + * 分类汇总燃气管线监管人员的类型和数量 + */ + @RequestMapping("/staff") + public Object getObvserStaff(String beginTime, String endTime) { +// return screenDataService.getObvserStaff(beginTime, endTime); + return "{\n" + + " \t\"总人数\":2022,\n" + + "\t\"staffDataList\":[\n" + + " {\n" + + "\t\t\"岗位名称\":\"管理人员\",\n" + + "\t\t\"总计\":72\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"运维人员\",\n" + + "\t\t\"总计\":874\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"施工人员\",\n" + + "\t\t\"总计\":456\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"统计人员\",\n" + + "\t\t\"总计\":745\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"技术人员\",\n" + + "\t\t\"总计\":455\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"监管人员\",\n" + + "\t\t\"总计\":644\n" + + " }]\n" + + " }"; + } + + /** + * 以道路的维度来统计汇总燃气管线的长度和权属单位 + */ + @RequestMapping("/road-line-length") + public Object getRoadLineLength(String beginTime, String endTime) { +// return screenDataService.getRoadLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + "\t\t\"所属道路\":\"双山西街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"圣井燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"世纪大道\",\n" + + "\t\t\"管线长度/km\":54,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"桃水大街\",\n" + + "\t\t\"管线长度/km\":32,\n" + + "\t\t\"权属单位\":\"中燃燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"鲁态大街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " }\n" + + "]"; + } + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + +// /** +// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/list") +// public Object getDeviceList(String beginTime, String endTime) { +// return screenDataService.getDeviceList(beginTime,endTime); +// } +// +// /** +// * 包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/Info") +// public Object getDeviceInfo(String wellCode,String deviceType) { +// return screenDataService.getDeviceInfo(wellCode,deviceType); +// } + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + /** + * 显示云台的报警信息 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/cms/CmsDataMapper.java b/src/main/java/com/casic/dao/cms/CmsDataMapper.java new file mode 100644 index 0000000..e57975e --- /dev/null +++ b/src/main/java/com/casic/dao/cms/CmsDataMapper.java @@ -0,0 +1,23 @@ +package com.casic.dao.cms; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface CmsDataMapper { + + Integer countElectronicDevice(); + + List> countElectronicTask(); + + Integer getTotalWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getCompleteWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalEvent(@Param("beginTime") String beginTime, @Param("endTime") String endTime); +} diff --git a/src/main/java/com/casic/dao/smartwell/MapDataMapper.java b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java new file mode 100644 index 0000000..8e56978 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java @@ -0,0 +1,25 @@ +package com.casic.dao.smartwell; + +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface MapDataMapper { + + List getWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNotAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNowAlarmRecords(); + + String getDictNameByCode(@Param("wellType") String wellType); + + Map getDeviceStatus(@Param("devcode") String devcode, @Param("tableName") String tableName, @Param("dataField") String dataField); +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java new file mode 100644 index 0000000..0294b14 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -0,0 +1,43 @@ +package com.casic.dao.smartwell; + + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SmartwellDataMapper { + + List> countDeviceByType(); + + List> getTypeName(); + + List> countAlarmType(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getDeviceListByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countDeviceNumber(); + + Integer countAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countDeviceNumberByDept(); + + List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countRoadNumber(); + + List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDeviceList(); + + List> getDeptNameList(); + +} diff --git a/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java new file mode 100644 index 0000000..e6ba279 --- /dev/null +++ b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java @@ -0,0 +1,32 @@ +package com.casic.dao.spantilt; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface TiltDataMapper { + /** + * 已安装设备 + * + * @return + */ + Integer countColudDevice(); + + /** + * 警告 + * + * @return + */ + Integer countColudAlarm(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + + /** + * 云台报警信息 + * + * @return + */ + List> countColudAlarmRecords(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + +} diff --git a/src/main/java/com/casic/model/AlarmNowView.java b/src/main/java/com/casic/model/AlarmNowView.java new file mode 100644 index 0000000..6eebafc --- /dev/null +++ b/src/main/java/com/casic/model/AlarmNowView.java @@ -0,0 +1,108 @@ +package com.casic.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +public class AlarmNowView { + + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date alarmTime; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + +} diff --git a/src/main/java/com/casic/model/BusWellInfo.java b/src/main/java/com/casic/model/BusWellInfo.java new file mode 100644 index 0000000..f4b8eba --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfo.java @@ -0,0 +1,192 @@ +package com.casic.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + //@NotEmpty(message="井深不能为空") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + + /** + * 区域 + */ + private String road; + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + + + /** + * 位置 + */ + private String position; + /** + * 部门编号 + */ + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; +// /** +// * 责任人 +// */ +// @TableField("STAFF") +// private String staff; +// /** +// * 电话 +// */ +// @TableField("TEL") +// private String tel; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/src/main/java/com/casic/model/BusWellInfoDto.java b/src/main/java/com/casic/model/BusWellInfoDto.java new file mode 100644 index 0000000..48610f2 --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfoDto.java @@ -0,0 +1,276 @@ +package com.casic.model; + + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class BusWellInfoDto { + private Long id; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + private String deviceType; + private String deptid; + private String deptName; + private Float deep; + private String position; + private String coordinateX; + private String coordinateY; + private String lngBaidu; + private String latBaidu; + private String lngGaode; + private String latGaode; + private String photos; + private String notes; + private String bfzt; + private String bfztName; + private String area; + private String staff; + private String tel; + private String valid; + private String ts; + private List watchData; + + Map map = new HashMap(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + map.put("id", id); + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + map.put("wellCode", wellCode); + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + map.put("wellName", wellName); + } + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + map.put("deviceType", deviceType); + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + map.put("wellType", wellType); + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + map.put("wellTypeName", wellTypeName); + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + map.put("deptid", deptid); + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + map.put("deptName", deptName); + } + + public Float getDeep() { + return deep; + } + + public void setDeep(Float deep) { + this.deep = deep; + map.put("deep", deep); + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + map.put("position", position); + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + map.put("coordinateX", coordinateX); + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + map.put("coordinateY", coordinateY); + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + map.put("lngBaidu", lngBaidu); + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + map.put("latBaidu", latBaidu); + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + map.put("lngGaode", lngGaode); + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + map.put("latGaode", latGaode); + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + map.put("photos", photos); + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + map.put("notes", notes); + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + map.put("bfzt", bfzt); + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + map.put("bfztName", bfztName); + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + map.put("area", area); + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + map.put("staff", staff); + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + map.put("tel", tel); + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + map.put("valid", valid); + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + map.put("ts", ts); + } + + public List getWatchData() { + return watchData; + } + + public void setWatchData(List watchData) { + this.watchData = watchData; + map.put("watchData", watchData); + } + + public Map toMap() { + return map; + } +} diff --git a/src/main/java/com/casic/model/ResponseData.java b/src/main/java/com/casic/model/ResponseData.java new file mode 100644 index 0000000..356775a --- /dev/null +++ b/src/main/java/com/casic/model/ResponseData.java @@ -0,0 +1,19 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Boolean success; + private Integer code; + private String message; + private Object data; +} \ No newline at end of file diff --git a/src/main/java/com/casic/model/WatchDataDto.java b/src/main/java/com/casic/model/WatchDataDto.java new file mode 100644 index 0000000..d50cfb5 --- /dev/null +++ b/src/main/java/com/casic/model/WatchDataDto.java @@ -0,0 +1,32 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author lenovo + */ +@Data +public class WatchDataDto implements Cloneable{ + + private Long deviceId; + private String devcode; + private String installDate; + private String onlineState; + private String onlineStateName; + private String watchType; + private String type; // 地图总览时使用 + private String data = ""; + private String value = ""; // 地图总览时使用 + private String logtime = "";//数据更新时间(设备上报时间) + + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/casic/service/MapDataService.java b/src/main/java/com/casic/service/MapDataService.java new file mode 100644 index 0000000..5f77810 --- /dev/null +++ b/src/main/java/com/casic/service/MapDataService.java @@ -0,0 +1,12 @@ +package com.casic.service; + + +public interface MapDataService { + + Object getWellList(String keywords, String wellType, String deptid, String isAlarm); + + Object getNowAlarmRecords(); + + Object getWellInfo(String devcode,String deviceType); + +} diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/casic/controller/MapDataController.java b/src/main/java/com/casic/controller/MapDataController.java new file mode 100644 index 0000000..b897b95 --- /dev/null +++ b/src/main/java/com/casic/controller/MapDataController.java @@ -0,0 +1,47 @@ +package com.casic.controller; + +import com.casic.service.MapDataService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/overview") +public class MapDataController { + + private final MapDataService mapDataService; + + public MapDataController(MapDataService mapDataService) { + this.mapDataService = mapDataService; + } + + /** + * 获取列表 + */ + @RequestMapping(value = "/wellList") + public Object getWellList(@RequestParam(required = false) String keywords, + @RequestParam(required = false) String wellType, + @RequestParam(required = false) String deptid, + @RequestParam(required = false) String isAlarm) { + + return mapDataService.getWellList(keywords,wellType,deptid,isAlarm); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/alarmNow") + public Object alarmNow() { + return mapDataService.getNowAlarmRecords(); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/wellInfo") + public Object getWellInfo(@RequestParam(value = "devcode", required = true) String devcode, + @RequestParam(value = "deviceType", required = true) String deviceType) { + return mapDataService.getWellInfo(devcode,deviceType); + } +} diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java new file mode 100644 index 0000000..04f8d97 --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -0,0 +1,210 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + public ScreenDataController(ScreenDataService screenDataService) { + this.screenDataService = screenDataService; + } + + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/line-length") + public Object getLineLength(String beginTime, String endTime) { +// return screenDataService.getLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + " \"deptName\":\"圣井燃气\",\n" + + " \"totalLength\":440\n" + + " },\n" + + " {\n" + + " \"deptName\":\"华气燃气\",\n" + + " \"totalLength\":810\n" + + " },\n" + + " {\n" + + " \"typeName\":\"中燃燃气\",\n" + + " \"totalLength\":500\n" + + " },\n" + + " {\n" + + " \"typeName\":\"正和燃气\",\n" + + " \"totalLength\":520\n" + + " },\n" + + " {\n" + + " \"typeName\":\"华罚燃气\",\n" + + " \"totalLength\":630\n" + + " }\n" + + " ]"; + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + /** + * 分类汇总燃气管线监管人员的类型和数量 + */ + @RequestMapping("/staff") + public Object getObvserStaff(String beginTime, String endTime) { +// return screenDataService.getObvserStaff(beginTime, endTime); + return "{\n" + + " \t\"总人数\":2022,\n" + + "\t\"staffDataList\":[\n" + + " {\n" + + "\t\t\"岗位名称\":\"管理人员\",\n" + + "\t\t\"总计\":72\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"运维人员\",\n" + + "\t\t\"总计\":874\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"施工人员\",\n" + + "\t\t\"总计\":456\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"统计人员\",\n" + + "\t\t\"总计\":745\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"技术人员\",\n" + + "\t\t\"总计\":455\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"监管人员\",\n" + + "\t\t\"总计\":644\n" + + " }]\n" + + " }"; + } + + /** + * 以道路的维度来统计汇总燃气管线的长度和权属单位 + */ + @RequestMapping("/road-line-length") + public Object getRoadLineLength(String beginTime, String endTime) { +// return screenDataService.getRoadLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + "\t\t\"所属道路\":\"双山西街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"圣井燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"世纪大道\",\n" + + "\t\t\"管线长度/km\":54,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"桃水大街\",\n" + + "\t\t\"管线长度/km\":32,\n" + + "\t\t\"权属单位\":\"中燃燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"鲁态大街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " }\n" + + "]"; + } + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + +// /** +// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/list") +// public Object getDeviceList(String beginTime, String endTime) { +// return screenDataService.getDeviceList(beginTime,endTime); +// } +// +// /** +// * 包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/Info") +// public Object getDeviceInfo(String wellCode,String deviceType) { +// return screenDataService.getDeviceInfo(wellCode,deviceType); +// } + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + /** + * 显示云台的报警信息 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/cms/CmsDataMapper.java b/src/main/java/com/casic/dao/cms/CmsDataMapper.java new file mode 100644 index 0000000..e57975e --- /dev/null +++ b/src/main/java/com/casic/dao/cms/CmsDataMapper.java @@ -0,0 +1,23 @@ +package com.casic.dao.cms; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface CmsDataMapper { + + Integer countElectronicDevice(); + + List> countElectronicTask(); + + Integer getTotalWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getCompleteWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalEvent(@Param("beginTime") String beginTime, @Param("endTime") String endTime); +} diff --git a/src/main/java/com/casic/dao/smartwell/MapDataMapper.java b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java new file mode 100644 index 0000000..8e56978 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java @@ -0,0 +1,25 @@ +package com.casic.dao.smartwell; + +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface MapDataMapper { + + List getWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNotAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNowAlarmRecords(); + + String getDictNameByCode(@Param("wellType") String wellType); + + Map getDeviceStatus(@Param("devcode") String devcode, @Param("tableName") String tableName, @Param("dataField") String dataField); +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java new file mode 100644 index 0000000..0294b14 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -0,0 +1,43 @@ +package com.casic.dao.smartwell; + + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SmartwellDataMapper { + + List> countDeviceByType(); + + List> getTypeName(); + + List> countAlarmType(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getDeviceListByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countDeviceNumber(); + + Integer countAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countDeviceNumberByDept(); + + List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countRoadNumber(); + + List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDeviceList(); + + List> getDeptNameList(); + +} diff --git a/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java new file mode 100644 index 0000000..e6ba279 --- /dev/null +++ b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java @@ -0,0 +1,32 @@ +package com.casic.dao.spantilt; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface TiltDataMapper { + /** + * 已安装设备 + * + * @return + */ + Integer countColudDevice(); + + /** + * 警告 + * + * @return + */ + Integer countColudAlarm(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + + /** + * 云台报警信息 + * + * @return + */ + List> countColudAlarmRecords(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + +} diff --git a/src/main/java/com/casic/model/AlarmNowView.java b/src/main/java/com/casic/model/AlarmNowView.java new file mode 100644 index 0000000..6eebafc --- /dev/null +++ b/src/main/java/com/casic/model/AlarmNowView.java @@ -0,0 +1,108 @@ +package com.casic.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +public class AlarmNowView { + + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date alarmTime; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + +} diff --git a/src/main/java/com/casic/model/BusWellInfo.java b/src/main/java/com/casic/model/BusWellInfo.java new file mode 100644 index 0000000..f4b8eba --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfo.java @@ -0,0 +1,192 @@ +package com.casic.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + //@NotEmpty(message="井深不能为空") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + + /** + * 区域 + */ + private String road; + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + + + /** + * 位置 + */ + private String position; + /** + * 部门编号 + */ + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; +// /** +// * 责任人 +// */ +// @TableField("STAFF") +// private String staff; +// /** +// * 电话 +// */ +// @TableField("TEL") +// private String tel; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/src/main/java/com/casic/model/BusWellInfoDto.java b/src/main/java/com/casic/model/BusWellInfoDto.java new file mode 100644 index 0000000..48610f2 --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfoDto.java @@ -0,0 +1,276 @@ +package com.casic.model; + + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class BusWellInfoDto { + private Long id; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + private String deviceType; + private String deptid; + private String deptName; + private Float deep; + private String position; + private String coordinateX; + private String coordinateY; + private String lngBaidu; + private String latBaidu; + private String lngGaode; + private String latGaode; + private String photos; + private String notes; + private String bfzt; + private String bfztName; + private String area; + private String staff; + private String tel; + private String valid; + private String ts; + private List watchData; + + Map map = new HashMap(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + map.put("id", id); + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + map.put("wellCode", wellCode); + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + map.put("wellName", wellName); + } + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + map.put("deviceType", deviceType); + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + map.put("wellType", wellType); + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + map.put("wellTypeName", wellTypeName); + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + map.put("deptid", deptid); + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + map.put("deptName", deptName); + } + + public Float getDeep() { + return deep; + } + + public void setDeep(Float deep) { + this.deep = deep; + map.put("deep", deep); + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + map.put("position", position); + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + map.put("coordinateX", coordinateX); + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + map.put("coordinateY", coordinateY); + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + map.put("lngBaidu", lngBaidu); + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + map.put("latBaidu", latBaidu); + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + map.put("lngGaode", lngGaode); + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + map.put("latGaode", latGaode); + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + map.put("photos", photos); + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + map.put("notes", notes); + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + map.put("bfzt", bfzt); + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + map.put("bfztName", bfztName); + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + map.put("area", area); + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + map.put("staff", staff); + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + map.put("tel", tel); + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + map.put("valid", valid); + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + map.put("ts", ts); + } + + public List getWatchData() { + return watchData; + } + + public void setWatchData(List watchData) { + this.watchData = watchData; + map.put("watchData", watchData); + } + + public Map toMap() { + return map; + } +} diff --git a/src/main/java/com/casic/model/ResponseData.java b/src/main/java/com/casic/model/ResponseData.java new file mode 100644 index 0000000..356775a --- /dev/null +++ b/src/main/java/com/casic/model/ResponseData.java @@ -0,0 +1,19 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Boolean success; + private Integer code; + private String message; + private Object data; +} \ No newline at end of file diff --git a/src/main/java/com/casic/model/WatchDataDto.java b/src/main/java/com/casic/model/WatchDataDto.java new file mode 100644 index 0000000..d50cfb5 --- /dev/null +++ b/src/main/java/com/casic/model/WatchDataDto.java @@ -0,0 +1,32 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author lenovo + */ +@Data +public class WatchDataDto implements Cloneable{ + + private Long deviceId; + private String devcode; + private String installDate; + private String onlineState; + private String onlineStateName; + private String watchType; + private String type; // 地图总览时使用 + private String data = ""; + private String value = ""; // 地图总览时使用 + private String logtime = "";//数据更新时间(设备上报时间) + + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/casic/service/MapDataService.java b/src/main/java/com/casic/service/MapDataService.java new file mode 100644 index 0000000..5f77810 --- /dev/null +++ b/src/main/java/com/casic/service/MapDataService.java @@ -0,0 +1,12 @@ +package com.casic.service; + + +public interface MapDataService { + + Object getWellList(String keywords, String wellType, String deptid, String isAlarm); + + Object getNowAlarmRecords(); + + Object getWellInfo(String devcode,String deviceType); + +} diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java new file mode 100644 index 0000000..b4dd026 --- /dev/null +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -0,0 +1,27 @@ +package com.casic.service; + +public interface ScreenDataService { + Object getInstalledDevice(String beginTime, String endTime); + + Object getKindsAlarmRate(String beginTime, String endTime); + + Object getAlarmRecordsByStation(String beginTime, String endTime); + + Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + + Object getDeptTimeSpan(String beginTime, String endTime); + + Object getHealthIndicator(String beginTime, String endTime); + + Object getDeptIndicator(String beginTime, String endTime); + + Object getDeviceList(String beginTime, String endTime); + + Object getOperationalStatus(String beginTime, String endTime); + + Object getAlarmRecordsByRoad(String beginTime, String endTime); + + Object getInspectRoad(String beginTime, String endTime); + + +} diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/casic/controller/MapDataController.java b/src/main/java/com/casic/controller/MapDataController.java new file mode 100644 index 0000000..b897b95 --- /dev/null +++ b/src/main/java/com/casic/controller/MapDataController.java @@ -0,0 +1,47 @@ +package com.casic.controller; + +import com.casic.service.MapDataService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/overview") +public class MapDataController { + + private final MapDataService mapDataService; + + public MapDataController(MapDataService mapDataService) { + this.mapDataService = mapDataService; + } + + /** + * 获取列表 + */ + @RequestMapping(value = "/wellList") + public Object getWellList(@RequestParam(required = false) String keywords, + @RequestParam(required = false) String wellType, + @RequestParam(required = false) String deptid, + @RequestParam(required = false) String isAlarm) { + + return mapDataService.getWellList(keywords,wellType,deptid,isAlarm); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/alarmNow") + public Object alarmNow() { + return mapDataService.getNowAlarmRecords(); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/wellInfo") + public Object getWellInfo(@RequestParam(value = "devcode", required = true) String devcode, + @RequestParam(value = "deviceType", required = true) String deviceType) { + return mapDataService.getWellInfo(devcode,deviceType); + } +} diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java new file mode 100644 index 0000000..04f8d97 --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -0,0 +1,210 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + public ScreenDataController(ScreenDataService screenDataService) { + this.screenDataService = screenDataService; + } + + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/line-length") + public Object getLineLength(String beginTime, String endTime) { +// return screenDataService.getLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + " \"deptName\":\"圣井燃气\",\n" + + " \"totalLength\":440\n" + + " },\n" + + " {\n" + + " \"deptName\":\"华气燃气\",\n" + + " \"totalLength\":810\n" + + " },\n" + + " {\n" + + " \"typeName\":\"中燃燃气\",\n" + + " \"totalLength\":500\n" + + " },\n" + + " {\n" + + " \"typeName\":\"正和燃气\",\n" + + " \"totalLength\":520\n" + + " },\n" + + " {\n" + + " \"typeName\":\"华罚燃气\",\n" + + " \"totalLength\":630\n" + + " }\n" + + " ]"; + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + /** + * 分类汇总燃气管线监管人员的类型和数量 + */ + @RequestMapping("/staff") + public Object getObvserStaff(String beginTime, String endTime) { +// return screenDataService.getObvserStaff(beginTime, endTime); + return "{\n" + + " \t\"总人数\":2022,\n" + + "\t\"staffDataList\":[\n" + + " {\n" + + "\t\t\"岗位名称\":\"管理人员\",\n" + + "\t\t\"总计\":72\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"运维人员\",\n" + + "\t\t\"总计\":874\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"施工人员\",\n" + + "\t\t\"总计\":456\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"统计人员\",\n" + + "\t\t\"总计\":745\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"技术人员\",\n" + + "\t\t\"总计\":455\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"监管人员\",\n" + + "\t\t\"总计\":644\n" + + " }]\n" + + " }"; + } + + /** + * 以道路的维度来统计汇总燃气管线的长度和权属单位 + */ + @RequestMapping("/road-line-length") + public Object getRoadLineLength(String beginTime, String endTime) { +// return screenDataService.getRoadLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + "\t\t\"所属道路\":\"双山西街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"圣井燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"世纪大道\",\n" + + "\t\t\"管线长度/km\":54,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"桃水大街\",\n" + + "\t\t\"管线长度/km\":32,\n" + + "\t\t\"权属单位\":\"中燃燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"鲁态大街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " }\n" + + "]"; + } + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + +// /** +// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/list") +// public Object getDeviceList(String beginTime, String endTime) { +// return screenDataService.getDeviceList(beginTime,endTime); +// } +// +// /** +// * 包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/Info") +// public Object getDeviceInfo(String wellCode,String deviceType) { +// return screenDataService.getDeviceInfo(wellCode,deviceType); +// } + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + /** + * 显示云台的报警信息 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/cms/CmsDataMapper.java b/src/main/java/com/casic/dao/cms/CmsDataMapper.java new file mode 100644 index 0000000..e57975e --- /dev/null +++ b/src/main/java/com/casic/dao/cms/CmsDataMapper.java @@ -0,0 +1,23 @@ +package com.casic.dao.cms; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface CmsDataMapper { + + Integer countElectronicDevice(); + + List> countElectronicTask(); + + Integer getTotalWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getCompleteWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalEvent(@Param("beginTime") String beginTime, @Param("endTime") String endTime); +} diff --git a/src/main/java/com/casic/dao/smartwell/MapDataMapper.java b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java new file mode 100644 index 0000000..8e56978 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java @@ -0,0 +1,25 @@ +package com.casic.dao.smartwell; + +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface MapDataMapper { + + List getWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNotAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNowAlarmRecords(); + + String getDictNameByCode(@Param("wellType") String wellType); + + Map getDeviceStatus(@Param("devcode") String devcode, @Param("tableName") String tableName, @Param("dataField") String dataField); +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java new file mode 100644 index 0000000..0294b14 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -0,0 +1,43 @@ +package com.casic.dao.smartwell; + + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SmartwellDataMapper { + + List> countDeviceByType(); + + List> getTypeName(); + + List> countAlarmType(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getDeviceListByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countDeviceNumber(); + + Integer countAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countDeviceNumberByDept(); + + List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countRoadNumber(); + + List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDeviceList(); + + List> getDeptNameList(); + +} diff --git a/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java new file mode 100644 index 0000000..e6ba279 --- /dev/null +++ b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java @@ -0,0 +1,32 @@ +package com.casic.dao.spantilt; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface TiltDataMapper { + /** + * 已安装设备 + * + * @return + */ + Integer countColudDevice(); + + /** + * 警告 + * + * @return + */ + Integer countColudAlarm(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + + /** + * 云台报警信息 + * + * @return + */ + List> countColudAlarmRecords(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + +} diff --git a/src/main/java/com/casic/model/AlarmNowView.java b/src/main/java/com/casic/model/AlarmNowView.java new file mode 100644 index 0000000..6eebafc --- /dev/null +++ b/src/main/java/com/casic/model/AlarmNowView.java @@ -0,0 +1,108 @@ +package com.casic.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +public class AlarmNowView { + + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date alarmTime; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + +} diff --git a/src/main/java/com/casic/model/BusWellInfo.java b/src/main/java/com/casic/model/BusWellInfo.java new file mode 100644 index 0000000..f4b8eba --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfo.java @@ -0,0 +1,192 @@ +package com.casic.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + //@NotEmpty(message="井深不能为空") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + + /** + * 区域 + */ + private String road; + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + + + /** + * 位置 + */ + private String position; + /** + * 部门编号 + */ + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; +// /** +// * 责任人 +// */ +// @TableField("STAFF") +// private String staff; +// /** +// * 电话 +// */ +// @TableField("TEL") +// private String tel; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/src/main/java/com/casic/model/BusWellInfoDto.java b/src/main/java/com/casic/model/BusWellInfoDto.java new file mode 100644 index 0000000..48610f2 --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfoDto.java @@ -0,0 +1,276 @@ +package com.casic.model; + + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class BusWellInfoDto { + private Long id; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + private String deviceType; + private String deptid; + private String deptName; + private Float deep; + private String position; + private String coordinateX; + private String coordinateY; + private String lngBaidu; + private String latBaidu; + private String lngGaode; + private String latGaode; + private String photos; + private String notes; + private String bfzt; + private String bfztName; + private String area; + private String staff; + private String tel; + private String valid; + private String ts; + private List watchData; + + Map map = new HashMap(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + map.put("id", id); + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + map.put("wellCode", wellCode); + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + map.put("wellName", wellName); + } + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + map.put("deviceType", deviceType); + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + map.put("wellType", wellType); + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + map.put("wellTypeName", wellTypeName); + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + map.put("deptid", deptid); + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + map.put("deptName", deptName); + } + + public Float getDeep() { + return deep; + } + + public void setDeep(Float deep) { + this.deep = deep; + map.put("deep", deep); + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + map.put("position", position); + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + map.put("coordinateX", coordinateX); + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + map.put("coordinateY", coordinateY); + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + map.put("lngBaidu", lngBaidu); + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + map.put("latBaidu", latBaidu); + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + map.put("lngGaode", lngGaode); + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + map.put("latGaode", latGaode); + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + map.put("photos", photos); + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + map.put("notes", notes); + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + map.put("bfzt", bfzt); + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + map.put("bfztName", bfztName); + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + map.put("area", area); + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + map.put("staff", staff); + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + map.put("tel", tel); + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + map.put("valid", valid); + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + map.put("ts", ts); + } + + public List getWatchData() { + return watchData; + } + + public void setWatchData(List watchData) { + this.watchData = watchData; + map.put("watchData", watchData); + } + + public Map toMap() { + return map; + } +} diff --git a/src/main/java/com/casic/model/ResponseData.java b/src/main/java/com/casic/model/ResponseData.java new file mode 100644 index 0000000..356775a --- /dev/null +++ b/src/main/java/com/casic/model/ResponseData.java @@ -0,0 +1,19 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Boolean success; + private Integer code; + private String message; + private Object data; +} \ No newline at end of file diff --git a/src/main/java/com/casic/model/WatchDataDto.java b/src/main/java/com/casic/model/WatchDataDto.java new file mode 100644 index 0000000..d50cfb5 --- /dev/null +++ b/src/main/java/com/casic/model/WatchDataDto.java @@ -0,0 +1,32 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author lenovo + */ +@Data +public class WatchDataDto implements Cloneable{ + + private Long deviceId; + private String devcode; + private String installDate; + private String onlineState; + private String onlineStateName; + private String watchType; + private String type; // 地图总览时使用 + private String data = ""; + private String value = ""; // 地图总览时使用 + private String logtime = "";//数据更新时间(设备上报时间) + + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/casic/service/MapDataService.java b/src/main/java/com/casic/service/MapDataService.java new file mode 100644 index 0000000..5f77810 --- /dev/null +++ b/src/main/java/com/casic/service/MapDataService.java @@ -0,0 +1,12 @@ +package com.casic.service; + + +public interface MapDataService { + + Object getWellList(String keywords, String wellType, String deptid, String isAlarm); + + Object getNowAlarmRecords(); + + Object getWellInfo(String devcode,String deviceType); + +} diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java new file mode 100644 index 0000000..b4dd026 --- /dev/null +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -0,0 +1,27 @@ +package com.casic.service; + +public interface ScreenDataService { + Object getInstalledDevice(String beginTime, String endTime); + + Object getKindsAlarmRate(String beginTime, String endTime); + + Object getAlarmRecordsByStation(String beginTime, String endTime); + + Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + + Object getDeptTimeSpan(String beginTime, String endTime); + + Object getHealthIndicator(String beginTime, String endTime); + + Object getDeptIndicator(String beginTime, String endTime); + + Object getDeviceList(String beginTime, String endTime); + + Object getOperationalStatus(String beginTime, String endTime); + + Object getAlarmRecordsByRoad(String beginTime, String endTime); + + Object getInspectRoad(String beginTime, String endTime); + + +} diff --git a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java new file mode 100644 index 0000000..661018b --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java @@ -0,0 +1,88 @@ +package com.casic.service.impl; + + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class DeptTimeSpanBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00"); + + public DeptTimeSpanBuilder(SmartwellDataMapper smartwellDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + } + + public List> deptTimeSpanProvider(String beginTime, String endTime) { + Map> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = getAlarmDevice(beginTime, endTime); + Map> currentDeviceTimeMap = MergeDeviceSpan(normalDeviceDeptMap, alarmDeviceDeptMap); + List> deptTimeSpanMap = calculateDeptTime(currentDeviceTimeMap); + return deptTimeSpanMap; + } + + private Map> getNormalDevice(String beginTime, String endTime) { + List> normalDeviceList = smartwellDataMapper.getNormalDevice(beginTime, endTime); + Map> normalDeviceDeptMap = normalDeviceList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return normalDeviceDeptMap; + } + + private Map> getAlarmDevice(String beginTime, String endTime) { + List> alarmDeviceDeptList = smartwellDataMapper.getAlarmDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = alarmDeviceDeptList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return alarmDeviceDeptMap; + } + + private Map> MergeDeviceSpan(Map> normalDeviceDeptMap, + Map> alarmDeviceDeptMap) { + for (Map.Entry> normalMap : normalDeviceDeptMap.entrySet()) { + String mapKey = normalMap.getKey(); + Map normalmap = normalMap.getValue(); + if (alarmDeviceDeptMap.containsKey(mapKey)) { + Map alarmMap = alarmDeviceDeptMap.get(mapKey); + for (Map.Entry alarmMapItem : alarmMap.entrySet()) { + String deviceCode = alarmMapItem.getKey(); + normalmap.put(deviceCode, alarmMapItem.getValue()); + } + } + } + return normalDeviceDeptMap; + } + + private List> calculateDeptTime(Map> currentDeviceTimeMap) { + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptTimeSpanList = new ArrayList<>(); + for (Map.Entry> currentDeviceMap : currentDeviceTimeMap.entrySet()) { + String deptid = currentDeviceMap.getKey(); + Map currentDeviceItemMap = currentDeviceMap.getValue(); + Double timeSpan = 0.00; + for (Map.Entry timeMapItem : currentDeviceItemMap.entrySet()) { + timeSpan += StringUtils.isEmpty(timeMapItem.getValue()) || timeMapItem.getValue() == "null" ? 0 : Double.valueOf(timeMapItem.getValue()); + } + Map deptTimeSpanMap = new HashMap<>(); + deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); + deptTimeSpanMap.put("count", df.format(timeSpan)); + deptTimeSpanList.add(deptTimeSpanMap); + } + return deptTimeSpanList; + } + +} diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/casic/controller/MapDataController.java b/src/main/java/com/casic/controller/MapDataController.java new file mode 100644 index 0000000..b897b95 --- /dev/null +++ b/src/main/java/com/casic/controller/MapDataController.java @@ -0,0 +1,47 @@ +package com.casic.controller; + +import com.casic.service.MapDataService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/overview") +public class MapDataController { + + private final MapDataService mapDataService; + + public MapDataController(MapDataService mapDataService) { + this.mapDataService = mapDataService; + } + + /** + * 获取列表 + */ + @RequestMapping(value = "/wellList") + public Object getWellList(@RequestParam(required = false) String keywords, + @RequestParam(required = false) String wellType, + @RequestParam(required = false) String deptid, + @RequestParam(required = false) String isAlarm) { + + return mapDataService.getWellList(keywords,wellType,deptid,isAlarm); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/alarmNow") + public Object alarmNow() { + return mapDataService.getNowAlarmRecords(); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/wellInfo") + public Object getWellInfo(@RequestParam(value = "devcode", required = true) String devcode, + @RequestParam(value = "deviceType", required = true) String deviceType) { + return mapDataService.getWellInfo(devcode,deviceType); + } +} diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java new file mode 100644 index 0000000..04f8d97 --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -0,0 +1,210 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + public ScreenDataController(ScreenDataService screenDataService) { + this.screenDataService = screenDataService; + } + + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/line-length") + public Object getLineLength(String beginTime, String endTime) { +// return screenDataService.getLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + " \"deptName\":\"圣井燃气\",\n" + + " \"totalLength\":440\n" + + " },\n" + + " {\n" + + " \"deptName\":\"华气燃气\",\n" + + " \"totalLength\":810\n" + + " },\n" + + " {\n" + + " \"typeName\":\"中燃燃气\",\n" + + " \"totalLength\":500\n" + + " },\n" + + " {\n" + + " \"typeName\":\"正和燃气\",\n" + + " \"totalLength\":520\n" + + " },\n" + + " {\n" + + " \"typeName\":\"华罚燃气\",\n" + + " \"totalLength\":630\n" + + " }\n" + + " ]"; + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + /** + * 分类汇总燃气管线监管人员的类型和数量 + */ + @RequestMapping("/staff") + public Object getObvserStaff(String beginTime, String endTime) { +// return screenDataService.getObvserStaff(beginTime, endTime); + return "{\n" + + " \t\"总人数\":2022,\n" + + "\t\"staffDataList\":[\n" + + " {\n" + + "\t\t\"岗位名称\":\"管理人员\",\n" + + "\t\t\"总计\":72\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"运维人员\",\n" + + "\t\t\"总计\":874\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"施工人员\",\n" + + "\t\t\"总计\":456\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"统计人员\",\n" + + "\t\t\"总计\":745\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"技术人员\",\n" + + "\t\t\"总计\":455\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"监管人员\",\n" + + "\t\t\"总计\":644\n" + + " }]\n" + + " }"; + } + + /** + * 以道路的维度来统计汇总燃气管线的长度和权属单位 + */ + @RequestMapping("/road-line-length") + public Object getRoadLineLength(String beginTime, String endTime) { +// return screenDataService.getRoadLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + "\t\t\"所属道路\":\"双山西街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"圣井燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"世纪大道\",\n" + + "\t\t\"管线长度/km\":54,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"桃水大街\",\n" + + "\t\t\"管线长度/km\":32,\n" + + "\t\t\"权属单位\":\"中燃燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"鲁态大街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " }\n" + + "]"; + } + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + +// /** +// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/list") +// public Object getDeviceList(String beginTime, String endTime) { +// return screenDataService.getDeviceList(beginTime,endTime); +// } +// +// /** +// * 包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/Info") +// public Object getDeviceInfo(String wellCode,String deviceType) { +// return screenDataService.getDeviceInfo(wellCode,deviceType); +// } + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + /** + * 显示云台的报警信息 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/cms/CmsDataMapper.java b/src/main/java/com/casic/dao/cms/CmsDataMapper.java new file mode 100644 index 0000000..e57975e --- /dev/null +++ b/src/main/java/com/casic/dao/cms/CmsDataMapper.java @@ -0,0 +1,23 @@ +package com.casic.dao.cms; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface CmsDataMapper { + + Integer countElectronicDevice(); + + List> countElectronicTask(); + + Integer getTotalWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getCompleteWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalEvent(@Param("beginTime") String beginTime, @Param("endTime") String endTime); +} diff --git a/src/main/java/com/casic/dao/smartwell/MapDataMapper.java b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java new file mode 100644 index 0000000..8e56978 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java @@ -0,0 +1,25 @@ +package com.casic.dao.smartwell; + +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface MapDataMapper { + + List getWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNotAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNowAlarmRecords(); + + String getDictNameByCode(@Param("wellType") String wellType); + + Map getDeviceStatus(@Param("devcode") String devcode, @Param("tableName") String tableName, @Param("dataField") String dataField); +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java new file mode 100644 index 0000000..0294b14 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -0,0 +1,43 @@ +package com.casic.dao.smartwell; + + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SmartwellDataMapper { + + List> countDeviceByType(); + + List> getTypeName(); + + List> countAlarmType(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getDeviceListByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countDeviceNumber(); + + Integer countAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countDeviceNumberByDept(); + + List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countRoadNumber(); + + List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDeviceList(); + + List> getDeptNameList(); + +} diff --git a/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java new file mode 100644 index 0000000..e6ba279 --- /dev/null +++ b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java @@ -0,0 +1,32 @@ +package com.casic.dao.spantilt; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface TiltDataMapper { + /** + * 已安装设备 + * + * @return + */ + Integer countColudDevice(); + + /** + * 警告 + * + * @return + */ + Integer countColudAlarm(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + + /** + * 云台报警信息 + * + * @return + */ + List> countColudAlarmRecords(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + +} diff --git a/src/main/java/com/casic/model/AlarmNowView.java b/src/main/java/com/casic/model/AlarmNowView.java new file mode 100644 index 0000000..6eebafc --- /dev/null +++ b/src/main/java/com/casic/model/AlarmNowView.java @@ -0,0 +1,108 @@ +package com.casic.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +public class AlarmNowView { + + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date alarmTime; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + +} diff --git a/src/main/java/com/casic/model/BusWellInfo.java b/src/main/java/com/casic/model/BusWellInfo.java new file mode 100644 index 0000000..f4b8eba --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfo.java @@ -0,0 +1,192 @@ +package com.casic.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + //@NotEmpty(message="井深不能为空") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + + /** + * 区域 + */ + private String road; + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + + + /** + * 位置 + */ + private String position; + /** + * 部门编号 + */ + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; +// /** +// * 责任人 +// */ +// @TableField("STAFF") +// private String staff; +// /** +// * 电话 +// */ +// @TableField("TEL") +// private String tel; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/src/main/java/com/casic/model/BusWellInfoDto.java b/src/main/java/com/casic/model/BusWellInfoDto.java new file mode 100644 index 0000000..48610f2 --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfoDto.java @@ -0,0 +1,276 @@ +package com.casic.model; + + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class BusWellInfoDto { + private Long id; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + private String deviceType; + private String deptid; + private String deptName; + private Float deep; + private String position; + private String coordinateX; + private String coordinateY; + private String lngBaidu; + private String latBaidu; + private String lngGaode; + private String latGaode; + private String photos; + private String notes; + private String bfzt; + private String bfztName; + private String area; + private String staff; + private String tel; + private String valid; + private String ts; + private List watchData; + + Map map = new HashMap(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + map.put("id", id); + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + map.put("wellCode", wellCode); + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + map.put("wellName", wellName); + } + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + map.put("deviceType", deviceType); + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + map.put("wellType", wellType); + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + map.put("wellTypeName", wellTypeName); + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + map.put("deptid", deptid); + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + map.put("deptName", deptName); + } + + public Float getDeep() { + return deep; + } + + public void setDeep(Float deep) { + this.deep = deep; + map.put("deep", deep); + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + map.put("position", position); + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + map.put("coordinateX", coordinateX); + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + map.put("coordinateY", coordinateY); + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + map.put("lngBaidu", lngBaidu); + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + map.put("latBaidu", latBaidu); + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + map.put("lngGaode", lngGaode); + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + map.put("latGaode", latGaode); + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + map.put("photos", photos); + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + map.put("notes", notes); + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + map.put("bfzt", bfzt); + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + map.put("bfztName", bfztName); + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + map.put("area", area); + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + map.put("staff", staff); + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + map.put("tel", tel); + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + map.put("valid", valid); + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + map.put("ts", ts); + } + + public List getWatchData() { + return watchData; + } + + public void setWatchData(List watchData) { + this.watchData = watchData; + map.put("watchData", watchData); + } + + public Map toMap() { + return map; + } +} diff --git a/src/main/java/com/casic/model/ResponseData.java b/src/main/java/com/casic/model/ResponseData.java new file mode 100644 index 0000000..356775a --- /dev/null +++ b/src/main/java/com/casic/model/ResponseData.java @@ -0,0 +1,19 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Boolean success; + private Integer code; + private String message; + private Object data; +} \ No newline at end of file diff --git a/src/main/java/com/casic/model/WatchDataDto.java b/src/main/java/com/casic/model/WatchDataDto.java new file mode 100644 index 0000000..d50cfb5 --- /dev/null +++ b/src/main/java/com/casic/model/WatchDataDto.java @@ -0,0 +1,32 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author lenovo + */ +@Data +public class WatchDataDto implements Cloneable{ + + private Long deviceId; + private String devcode; + private String installDate; + private String onlineState; + private String onlineStateName; + private String watchType; + private String type; // 地图总览时使用 + private String data = ""; + private String value = ""; // 地图总览时使用 + private String logtime = "";//数据更新时间(设备上报时间) + + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/casic/service/MapDataService.java b/src/main/java/com/casic/service/MapDataService.java new file mode 100644 index 0000000..5f77810 --- /dev/null +++ b/src/main/java/com/casic/service/MapDataService.java @@ -0,0 +1,12 @@ +package com.casic.service; + + +public interface MapDataService { + + Object getWellList(String keywords, String wellType, String deptid, String isAlarm); + + Object getNowAlarmRecords(); + + Object getWellInfo(String devcode,String deviceType); + +} diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java new file mode 100644 index 0000000..b4dd026 --- /dev/null +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -0,0 +1,27 @@ +package com.casic.service; + +public interface ScreenDataService { + Object getInstalledDevice(String beginTime, String endTime); + + Object getKindsAlarmRate(String beginTime, String endTime); + + Object getAlarmRecordsByStation(String beginTime, String endTime); + + Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + + Object getDeptTimeSpan(String beginTime, String endTime); + + Object getHealthIndicator(String beginTime, String endTime); + + Object getDeptIndicator(String beginTime, String endTime); + + Object getDeviceList(String beginTime, String endTime); + + Object getOperationalStatus(String beginTime, String endTime); + + Object getAlarmRecordsByRoad(String beginTime, String endTime); + + Object getInspectRoad(String beginTime, String endTime); + + +} diff --git a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java new file mode 100644 index 0000000..661018b --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java @@ -0,0 +1,88 @@ +package com.casic.service.impl; + + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class DeptTimeSpanBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00"); + + public DeptTimeSpanBuilder(SmartwellDataMapper smartwellDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + } + + public List> deptTimeSpanProvider(String beginTime, String endTime) { + Map> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = getAlarmDevice(beginTime, endTime); + Map> currentDeviceTimeMap = MergeDeviceSpan(normalDeviceDeptMap, alarmDeviceDeptMap); + List> deptTimeSpanMap = calculateDeptTime(currentDeviceTimeMap); + return deptTimeSpanMap; + } + + private Map> getNormalDevice(String beginTime, String endTime) { + List> normalDeviceList = smartwellDataMapper.getNormalDevice(beginTime, endTime); + Map> normalDeviceDeptMap = normalDeviceList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return normalDeviceDeptMap; + } + + private Map> getAlarmDevice(String beginTime, String endTime) { + List> alarmDeviceDeptList = smartwellDataMapper.getAlarmDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = alarmDeviceDeptList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return alarmDeviceDeptMap; + } + + private Map> MergeDeviceSpan(Map> normalDeviceDeptMap, + Map> alarmDeviceDeptMap) { + for (Map.Entry> normalMap : normalDeviceDeptMap.entrySet()) { + String mapKey = normalMap.getKey(); + Map normalmap = normalMap.getValue(); + if (alarmDeviceDeptMap.containsKey(mapKey)) { + Map alarmMap = alarmDeviceDeptMap.get(mapKey); + for (Map.Entry alarmMapItem : alarmMap.entrySet()) { + String deviceCode = alarmMapItem.getKey(); + normalmap.put(deviceCode, alarmMapItem.getValue()); + } + } + } + return normalDeviceDeptMap; + } + + private List> calculateDeptTime(Map> currentDeviceTimeMap) { + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptTimeSpanList = new ArrayList<>(); + for (Map.Entry> currentDeviceMap : currentDeviceTimeMap.entrySet()) { + String deptid = currentDeviceMap.getKey(); + Map currentDeviceItemMap = currentDeviceMap.getValue(); + Double timeSpan = 0.00; + for (Map.Entry timeMapItem : currentDeviceItemMap.entrySet()) { + timeSpan += StringUtils.isEmpty(timeMapItem.getValue()) || timeMapItem.getValue() == "null" ? 0 : Double.valueOf(timeMapItem.getValue()); + } + Map deptTimeSpanMap = new HashMap<>(); + deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); + deptTimeSpanMap.put("count", df.format(timeSpan)); + deptTimeSpanList.add(deptTimeSpanMap); + } + return deptTimeSpanList; + } + +} diff --git a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java new file mode 100644 index 0000000..ffd0f1b --- /dev/null +++ b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java @@ -0,0 +1,96 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class HealthIndicatorsBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00%"); + + public HealthIndicatorsBuilder(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + this.tiltDataMapper = tiltDataMapper; + } + + + public List> healthIndicatorProvider(String beginTime, String endTime) { + List> healthIndictorList = new ArrayList<>(); + healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); + healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); + return healthIndictorList; + } + + + public List> deptIndicatorProvider(String beginTime, String endTime) { + List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); + List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); + List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); + return deptIndicatorList; + } + + public Map healthRoadIndicatorProvider(String isSort,String limitNum,String beginTime, String endTime) { + return smartwellHealthRoadIndicator(isSort,limitNum,beginTime, endTime); + } + + private Map smartwellHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); + Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); + smartwellHealth.put("typeName", "管网健康指数"); + smartwellHealth.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map tiltHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = tiltDataMapper.countColudDevice(); + Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); + smartwellHealth.put("typeName", "场站健康指数"); + smartwellHealth.put("count", df.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map smartwellHealthRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer roadNumber = smartwellDataMapper.countRoadNumber(); + Integer alarmRoad = smartwellDataMapper.countAlarmRoad(isSort,limitNum,beginTime, endTime); + smartwellHealth.put("typeName", "道路健康指数"); + smartwellHealth.put("count", df.format((Double.valueOf(roadNumber - alarmRoad)) / roadNumber)); + return smartwellHealth; + } + + private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { + Map alarmDeptMap = alarmDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) + ); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptIndicatorList = new ArrayList<>(); + deviceDeptNumberList.forEach( + deptNameNumberMap -> { + Map deptIndicatorMap = new HashMap<>(); + int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); + String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); + int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); + deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); + deptIndicatorMap.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + deptIndicatorList.add(deptIndicatorMap); + } + ); + return deptIndicatorList; + } +} diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/casic/controller/MapDataController.java b/src/main/java/com/casic/controller/MapDataController.java new file mode 100644 index 0000000..b897b95 --- /dev/null +++ b/src/main/java/com/casic/controller/MapDataController.java @@ -0,0 +1,47 @@ +package com.casic.controller; + +import com.casic.service.MapDataService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/overview") +public class MapDataController { + + private final MapDataService mapDataService; + + public MapDataController(MapDataService mapDataService) { + this.mapDataService = mapDataService; + } + + /** + * 获取列表 + */ + @RequestMapping(value = "/wellList") + public Object getWellList(@RequestParam(required = false) String keywords, + @RequestParam(required = false) String wellType, + @RequestParam(required = false) String deptid, + @RequestParam(required = false) String isAlarm) { + + return mapDataService.getWellList(keywords,wellType,deptid,isAlarm); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/alarmNow") + public Object alarmNow() { + return mapDataService.getNowAlarmRecords(); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/wellInfo") + public Object getWellInfo(@RequestParam(value = "devcode", required = true) String devcode, + @RequestParam(value = "deviceType", required = true) String deviceType) { + return mapDataService.getWellInfo(devcode,deviceType); + } +} diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java new file mode 100644 index 0000000..04f8d97 --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -0,0 +1,210 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + public ScreenDataController(ScreenDataService screenDataService) { + this.screenDataService = screenDataService; + } + + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/line-length") + public Object getLineLength(String beginTime, String endTime) { +// return screenDataService.getLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + " \"deptName\":\"圣井燃气\",\n" + + " \"totalLength\":440\n" + + " },\n" + + " {\n" + + " \"deptName\":\"华气燃气\",\n" + + " \"totalLength\":810\n" + + " },\n" + + " {\n" + + " \"typeName\":\"中燃燃气\",\n" + + " \"totalLength\":500\n" + + " },\n" + + " {\n" + + " \"typeName\":\"正和燃气\",\n" + + " \"totalLength\":520\n" + + " },\n" + + " {\n" + + " \"typeName\":\"华罚燃气\",\n" + + " \"totalLength\":630\n" + + " }\n" + + " ]"; + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + /** + * 分类汇总燃气管线监管人员的类型和数量 + */ + @RequestMapping("/staff") + public Object getObvserStaff(String beginTime, String endTime) { +// return screenDataService.getObvserStaff(beginTime, endTime); + return "{\n" + + " \t\"总人数\":2022,\n" + + "\t\"staffDataList\":[\n" + + " {\n" + + "\t\t\"岗位名称\":\"管理人员\",\n" + + "\t\t\"总计\":72\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"运维人员\",\n" + + "\t\t\"总计\":874\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"施工人员\",\n" + + "\t\t\"总计\":456\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"统计人员\",\n" + + "\t\t\"总计\":745\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"技术人员\",\n" + + "\t\t\"总计\":455\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"监管人员\",\n" + + "\t\t\"总计\":644\n" + + " }]\n" + + " }"; + } + + /** + * 以道路的维度来统计汇总燃气管线的长度和权属单位 + */ + @RequestMapping("/road-line-length") + public Object getRoadLineLength(String beginTime, String endTime) { +// return screenDataService.getRoadLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + "\t\t\"所属道路\":\"双山西街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"圣井燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"世纪大道\",\n" + + "\t\t\"管线长度/km\":54,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"桃水大街\",\n" + + "\t\t\"管线长度/km\":32,\n" + + "\t\t\"权属单位\":\"中燃燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"鲁态大街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " }\n" + + "]"; + } + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + +// /** +// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/list") +// public Object getDeviceList(String beginTime, String endTime) { +// return screenDataService.getDeviceList(beginTime,endTime); +// } +// +// /** +// * 包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/Info") +// public Object getDeviceInfo(String wellCode,String deviceType) { +// return screenDataService.getDeviceInfo(wellCode,deviceType); +// } + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + /** + * 显示云台的报警信息 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/cms/CmsDataMapper.java b/src/main/java/com/casic/dao/cms/CmsDataMapper.java new file mode 100644 index 0000000..e57975e --- /dev/null +++ b/src/main/java/com/casic/dao/cms/CmsDataMapper.java @@ -0,0 +1,23 @@ +package com.casic.dao.cms; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface CmsDataMapper { + + Integer countElectronicDevice(); + + List> countElectronicTask(); + + Integer getTotalWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getCompleteWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalEvent(@Param("beginTime") String beginTime, @Param("endTime") String endTime); +} diff --git a/src/main/java/com/casic/dao/smartwell/MapDataMapper.java b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java new file mode 100644 index 0000000..8e56978 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java @@ -0,0 +1,25 @@ +package com.casic.dao.smartwell; + +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface MapDataMapper { + + List getWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNotAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNowAlarmRecords(); + + String getDictNameByCode(@Param("wellType") String wellType); + + Map getDeviceStatus(@Param("devcode") String devcode, @Param("tableName") String tableName, @Param("dataField") String dataField); +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java new file mode 100644 index 0000000..0294b14 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -0,0 +1,43 @@ +package com.casic.dao.smartwell; + + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SmartwellDataMapper { + + List> countDeviceByType(); + + List> getTypeName(); + + List> countAlarmType(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getDeviceListByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countDeviceNumber(); + + Integer countAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countDeviceNumberByDept(); + + List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countRoadNumber(); + + List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDeviceList(); + + List> getDeptNameList(); + +} diff --git a/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java new file mode 100644 index 0000000..e6ba279 --- /dev/null +++ b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java @@ -0,0 +1,32 @@ +package com.casic.dao.spantilt; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface TiltDataMapper { + /** + * 已安装设备 + * + * @return + */ + Integer countColudDevice(); + + /** + * 警告 + * + * @return + */ + Integer countColudAlarm(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + + /** + * 云台报警信息 + * + * @return + */ + List> countColudAlarmRecords(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + +} diff --git a/src/main/java/com/casic/model/AlarmNowView.java b/src/main/java/com/casic/model/AlarmNowView.java new file mode 100644 index 0000000..6eebafc --- /dev/null +++ b/src/main/java/com/casic/model/AlarmNowView.java @@ -0,0 +1,108 @@ +package com.casic.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +public class AlarmNowView { + + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date alarmTime; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + +} diff --git a/src/main/java/com/casic/model/BusWellInfo.java b/src/main/java/com/casic/model/BusWellInfo.java new file mode 100644 index 0000000..f4b8eba --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfo.java @@ -0,0 +1,192 @@ +package com.casic.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + //@NotEmpty(message="井深不能为空") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + + /** + * 区域 + */ + private String road; + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + + + /** + * 位置 + */ + private String position; + /** + * 部门编号 + */ + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; +// /** +// * 责任人 +// */ +// @TableField("STAFF") +// private String staff; +// /** +// * 电话 +// */ +// @TableField("TEL") +// private String tel; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/src/main/java/com/casic/model/BusWellInfoDto.java b/src/main/java/com/casic/model/BusWellInfoDto.java new file mode 100644 index 0000000..48610f2 --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfoDto.java @@ -0,0 +1,276 @@ +package com.casic.model; + + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class BusWellInfoDto { + private Long id; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + private String deviceType; + private String deptid; + private String deptName; + private Float deep; + private String position; + private String coordinateX; + private String coordinateY; + private String lngBaidu; + private String latBaidu; + private String lngGaode; + private String latGaode; + private String photos; + private String notes; + private String bfzt; + private String bfztName; + private String area; + private String staff; + private String tel; + private String valid; + private String ts; + private List watchData; + + Map map = new HashMap(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + map.put("id", id); + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + map.put("wellCode", wellCode); + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + map.put("wellName", wellName); + } + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + map.put("deviceType", deviceType); + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + map.put("wellType", wellType); + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + map.put("wellTypeName", wellTypeName); + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + map.put("deptid", deptid); + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + map.put("deptName", deptName); + } + + public Float getDeep() { + return deep; + } + + public void setDeep(Float deep) { + this.deep = deep; + map.put("deep", deep); + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + map.put("position", position); + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + map.put("coordinateX", coordinateX); + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + map.put("coordinateY", coordinateY); + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + map.put("lngBaidu", lngBaidu); + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + map.put("latBaidu", latBaidu); + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + map.put("lngGaode", lngGaode); + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + map.put("latGaode", latGaode); + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + map.put("photos", photos); + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + map.put("notes", notes); + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + map.put("bfzt", bfzt); + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + map.put("bfztName", bfztName); + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + map.put("area", area); + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + map.put("staff", staff); + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + map.put("tel", tel); + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + map.put("valid", valid); + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + map.put("ts", ts); + } + + public List getWatchData() { + return watchData; + } + + public void setWatchData(List watchData) { + this.watchData = watchData; + map.put("watchData", watchData); + } + + public Map toMap() { + return map; + } +} diff --git a/src/main/java/com/casic/model/ResponseData.java b/src/main/java/com/casic/model/ResponseData.java new file mode 100644 index 0000000..356775a --- /dev/null +++ b/src/main/java/com/casic/model/ResponseData.java @@ -0,0 +1,19 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Boolean success; + private Integer code; + private String message; + private Object data; +} \ No newline at end of file diff --git a/src/main/java/com/casic/model/WatchDataDto.java b/src/main/java/com/casic/model/WatchDataDto.java new file mode 100644 index 0000000..d50cfb5 --- /dev/null +++ b/src/main/java/com/casic/model/WatchDataDto.java @@ -0,0 +1,32 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author lenovo + */ +@Data +public class WatchDataDto implements Cloneable{ + + private Long deviceId; + private String devcode; + private String installDate; + private String onlineState; + private String onlineStateName; + private String watchType; + private String type; // 地图总览时使用 + private String data = ""; + private String value = ""; // 地图总览时使用 + private String logtime = "";//数据更新时间(设备上报时间) + + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/casic/service/MapDataService.java b/src/main/java/com/casic/service/MapDataService.java new file mode 100644 index 0000000..5f77810 --- /dev/null +++ b/src/main/java/com/casic/service/MapDataService.java @@ -0,0 +1,12 @@ +package com.casic.service; + + +public interface MapDataService { + + Object getWellList(String keywords, String wellType, String deptid, String isAlarm); + + Object getNowAlarmRecords(); + + Object getWellInfo(String devcode,String deviceType); + +} diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java new file mode 100644 index 0000000..b4dd026 --- /dev/null +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -0,0 +1,27 @@ +package com.casic.service; + +public interface ScreenDataService { + Object getInstalledDevice(String beginTime, String endTime); + + Object getKindsAlarmRate(String beginTime, String endTime); + + Object getAlarmRecordsByStation(String beginTime, String endTime); + + Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + + Object getDeptTimeSpan(String beginTime, String endTime); + + Object getHealthIndicator(String beginTime, String endTime); + + Object getDeptIndicator(String beginTime, String endTime); + + Object getDeviceList(String beginTime, String endTime); + + Object getOperationalStatus(String beginTime, String endTime); + + Object getAlarmRecordsByRoad(String beginTime, String endTime); + + Object getInspectRoad(String beginTime, String endTime); + + +} diff --git a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java new file mode 100644 index 0000000..661018b --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java @@ -0,0 +1,88 @@ +package com.casic.service.impl; + + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class DeptTimeSpanBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00"); + + public DeptTimeSpanBuilder(SmartwellDataMapper smartwellDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + } + + public List> deptTimeSpanProvider(String beginTime, String endTime) { + Map> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = getAlarmDevice(beginTime, endTime); + Map> currentDeviceTimeMap = MergeDeviceSpan(normalDeviceDeptMap, alarmDeviceDeptMap); + List> deptTimeSpanMap = calculateDeptTime(currentDeviceTimeMap); + return deptTimeSpanMap; + } + + private Map> getNormalDevice(String beginTime, String endTime) { + List> normalDeviceList = smartwellDataMapper.getNormalDevice(beginTime, endTime); + Map> normalDeviceDeptMap = normalDeviceList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return normalDeviceDeptMap; + } + + private Map> getAlarmDevice(String beginTime, String endTime) { + List> alarmDeviceDeptList = smartwellDataMapper.getAlarmDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = alarmDeviceDeptList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return alarmDeviceDeptMap; + } + + private Map> MergeDeviceSpan(Map> normalDeviceDeptMap, + Map> alarmDeviceDeptMap) { + for (Map.Entry> normalMap : normalDeviceDeptMap.entrySet()) { + String mapKey = normalMap.getKey(); + Map normalmap = normalMap.getValue(); + if (alarmDeviceDeptMap.containsKey(mapKey)) { + Map alarmMap = alarmDeviceDeptMap.get(mapKey); + for (Map.Entry alarmMapItem : alarmMap.entrySet()) { + String deviceCode = alarmMapItem.getKey(); + normalmap.put(deviceCode, alarmMapItem.getValue()); + } + } + } + return normalDeviceDeptMap; + } + + private List> calculateDeptTime(Map> currentDeviceTimeMap) { + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptTimeSpanList = new ArrayList<>(); + for (Map.Entry> currentDeviceMap : currentDeviceTimeMap.entrySet()) { + String deptid = currentDeviceMap.getKey(); + Map currentDeviceItemMap = currentDeviceMap.getValue(); + Double timeSpan = 0.00; + for (Map.Entry timeMapItem : currentDeviceItemMap.entrySet()) { + timeSpan += StringUtils.isEmpty(timeMapItem.getValue()) || timeMapItem.getValue() == "null" ? 0 : Double.valueOf(timeMapItem.getValue()); + } + Map deptTimeSpanMap = new HashMap<>(); + deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); + deptTimeSpanMap.put("count", df.format(timeSpan)); + deptTimeSpanList.add(deptTimeSpanMap); + } + return deptTimeSpanList; + } + +} diff --git a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java new file mode 100644 index 0000000..ffd0f1b --- /dev/null +++ b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java @@ -0,0 +1,96 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class HealthIndicatorsBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00%"); + + public HealthIndicatorsBuilder(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + this.tiltDataMapper = tiltDataMapper; + } + + + public List> healthIndicatorProvider(String beginTime, String endTime) { + List> healthIndictorList = new ArrayList<>(); + healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); + healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); + return healthIndictorList; + } + + + public List> deptIndicatorProvider(String beginTime, String endTime) { + List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); + List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); + List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); + return deptIndicatorList; + } + + public Map healthRoadIndicatorProvider(String isSort,String limitNum,String beginTime, String endTime) { + return smartwellHealthRoadIndicator(isSort,limitNum,beginTime, endTime); + } + + private Map smartwellHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); + Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); + smartwellHealth.put("typeName", "管网健康指数"); + smartwellHealth.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map tiltHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = tiltDataMapper.countColudDevice(); + Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); + smartwellHealth.put("typeName", "场站健康指数"); + smartwellHealth.put("count", df.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map smartwellHealthRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer roadNumber = smartwellDataMapper.countRoadNumber(); + Integer alarmRoad = smartwellDataMapper.countAlarmRoad(isSort,limitNum,beginTime, endTime); + smartwellHealth.put("typeName", "道路健康指数"); + smartwellHealth.put("count", df.format((Double.valueOf(roadNumber - alarmRoad)) / roadNumber)); + return smartwellHealth; + } + + private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { + Map alarmDeptMap = alarmDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) + ); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptIndicatorList = new ArrayList<>(); + deviceDeptNumberList.forEach( + deptNameNumberMap -> { + Map deptIndicatorMap = new HashMap<>(); + int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); + String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); + int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); + deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); + deptIndicatorMap.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + deptIndicatorList.add(deptIndicatorMap); + } + ); + return deptIndicatorList; + } +} diff --git a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java new file mode 100644 index 0000000..8b1209d --- /dev/null +++ b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java @@ -0,0 +1,71 @@ +package com.casic.service.impl; + +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 + */ +@Service +public class InstalledDeviceBuilder { + + private final DeviceTypesConfig deviceTypesConfig; + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + public InstalledDeviceBuilder(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, + TiltDataMapper tiltDataMapper, DeviceTypesConfig deviceTypesConfig) { + this.smartwellDataMapper = smartwellDataMapper; + this.cmsDataMapper = cmsDataMapper; + this.tiltDataMapper = tiltDataMapper; + this.deviceTypesConfig = deviceTypesConfig; + } + + public List> InstalledDeviceManger() { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + List> installedDeviceList = new ArrayList<>(); + cmsInstalledDevice(installedDeviceList); + tiltInstalledDevice(installedDeviceList); + smartwellInstalledDevice(installedDeviceList, deviceTypeList); + return installedDeviceList; + } + + private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); + installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); + installedDeviceList.add(installedDeviceMap); + } + } + + private void cmsInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); + installedDeviceMap.put("typeName", "电子标识器"); + installedDeviceList.add(installedDeviceMap); + } + + private void tiltInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); + installedDeviceMap.put("typeName", "云台"); + installedDeviceList.add(installedDeviceMap); + } +} diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/casic/controller/MapDataController.java b/src/main/java/com/casic/controller/MapDataController.java new file mode 100644 index 0000000..b897b95 --- /dev/null +++ b/src/main/java/com/casic/controller/MapDataController.java @@ -0,0 +1,47 @@ +package com.casic.controller; + +import com.casic.service.MapDataService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/overview") +public class MapDataController { + + private final MapDataService mapDataService; + + public MapDataController(MapDataService mapDataService) { + this.mapDataService = mapDataService; + } + + /** + * 获取列表 + */ + @RequestMapping(value = "/wellList") + public Object getWellList(@RequestParam(required = false) String keywords, + @RequestParam(required = false) String wellType, + @RequestParam(required = false) String deptid, + @RequestParam(required = false) String isAlarm) { + + return mapDataService.getWellList(keywords,wellType,deptid,isAlarm); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/alarmNow") + public Object alarmNow() { + return mapDataService.getNowAlarmRecords(); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/wellInfo") + public Object getWellInfo(@RequestParam(value = "devcode", required = true) String devcode, + @RequestParam(value = "deviceType", required = true) String deviceType) { + return mapDataService.getWellInfo(devcode,deviceType); + } +} diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java new file mode 100644 index 0000000..04f8d97 --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -0,0 +1,210 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + public ScreenDataController(ScreenDataService screenDataService) { + this.screenDataService = screenDataService; + } + + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/line-length") + public Object getLineLength(String beginTime, String endTime) { +// return screenDataService.getLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + " \"deptName\":\"圣井燃气\",\n" + + " \"totalLength\":440\n" + + " },\n" + + " {\n" + + " \"deptName\":\"华气燃气\",\n" + + " \"totalLength\":810\n" + + " },\n" + + " {\n" + + " \"typeName\":\"中燃燃气\",\n" + + " \"totalLength\":500\n" + + " },\n" + + " {\n" + + " \"typeName\":\"正和燃气\",\n" + + " \"totalLength\":520\n" + + " },\n" + + " {\n" + + " \"typeName\":\"华罚燃气\",\n" + + " \"totalLength\":630\n" + + " }\n" + + " ]"; + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + /** + * 分类汇总燃气管线监管人员的类型和数量 + */ + @RequestMapping("/staff") + public Object getObvserStaff(String beginTime, String endTime) { +// return screenDataService.getObvserStaff(beginTime, endTime); + return "{\n" + + " \t\"总人数\":2022,\n" + + "\t\"staffDataList\":[\n" + + " {\n" + + "\t\t\"岗位名称\":\"管理人员\",\n" + + "\t\t\"总计\":72\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"运维人员\",\n" + + "\t\t\"总计\":874\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"施工人员\",\n" + + "\t\t\"总计\":456\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"统计人员\",\n" + + "\t\t\"总计\":745\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"技术人员\",\n" + + "\t\t\"总计\":455\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"监管人员\",\n" + + "\t\t\"总计\":644\n" + + " }]\n" + + " }"; + } + + /** + * 以道路的维度来统计汇总燃气管线的长度和权属单位 + */ + @RequestMapping("/road-line-length") + public Object getRoadLineLength(String beginTime, String endTime) { +// return screenDataService.getRoadLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + "\t\t\"所属道路\":\"双山西街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"圣井燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"世纪大道\",\n" + + "\t\t\"管线长度/km\":54,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"桃水大街\",\n" + + "\t\t\"管线长度/km\":32,\n" + + "\t\t\"权属单位\":\"中燃燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"鲁态大街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " }\n" + + "]"; + } + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + +// /** +// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/list") +// public Object getDeviceList(String beginTime, String endTime) { +// return screenDataService.getDeviceList(beginTime,endTime); +// } +// +// /** +// * 包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/Info") +// public Object getDeviceInfo(String wellCode,String deviceType) { +// return screenDataService.getDeviceInfo(wellCode,deviceType); +// } + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + /** + * 显示云台的报警信息 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/cms/CmsDataMapper.java b/src/main/java/com/casic/dao/cms/CmsDataMapper.java new file mode 100644 index 0000000..e57975e --- /dev/null +++ b/src/main/java/com/casic/dao/cms/CmsDataMapper.java @@ -0,0 +1,23 @@ +package com.casic.dao.cms; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface CmsDataMapper { + + Integer countElectronicDevice(); + + List> countElectronicTask(); + + Integer getTotalWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getCompleteWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalEvent(@Param("beginTime") String beginTime, @Param("endTime") String endTime); +} diff --git a/src/main/java/com/casic/dao/smartwell/MapDataMapper.java b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java new file mode 100644 index 0000000..8e56978 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java @@ -0,0 +1,25 @@ +package com.casic.dao.smartwell; + +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface MapDataMapper { + + List getWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNotAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNowAlarmRecords(); + + String getDictNameByCode(@Param("wellType") String wellType); + + Map getDeviceStatus(@Param("devcode") String devcode, @Param("tableName") String tableName, @Param("dataField") String dataField); +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java new file mode 100644 index 0000000..0294b14 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -0,0 +1,43 @@ +package com.casic.dao.smartwell; + + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SmartwellDataMapper { + + List> countDeviceByType(); + + List> getTypeName(); + + List> countAlarmType(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getDeviceListByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countDeviceNumber(); + + Integer countAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countDeviceNumberByDept(); + + List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countRoadNumber(); + + List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDeviceList(); + + List> getDeptNameList(); + +} diff --git a/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java new file mode 100644 index 0000000..e6ba279 --- /dev/null +++ b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java @@ -0,0 +1,32 @@ +package com.casic.dao.spantilt; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface TiltDataMapper { + /** + * 已安装设备 + * + * @return + */ + Integer countColudDevice(); + + /** + * 警告 + * + * @return + */ + Integer countColudAlarm(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + + /** + * 云台报警信息 + * + * @return + */ + List> countColudAlarmRecords(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + +} diff --git a/src/main/java/com/casic/model/AlarmNowView.java b/src/main/java/com/casic/model/AlarmNowView.java new file mode 100644 index 0000000..6eebafc --- /dev/null +++ b/src/main/java/com/casic/model/AlarmNowView.java @@ -0,0 +1,108 @@ +package com.casic.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +public class AlarmNowView { + + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date alarmTime; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + +} diff --git a/src/main/java/com/casic/model/BusWellInfo.java b/src/main/java/com/casic/model/BusWellInfo.java new file mode 100644 index 0000000..f4b8eba --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfo.java @@ -0,0 +1,192 @@ +package com.casic.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + //@NotEmpty(message="井深不能为空") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + + /** + * 区域 + */ + private String road; + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + + + /** + * 位置 + */ + private String position; + /** + * 部门编号 + */ + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; +// /** +// * 责任人 +// */ +// @TableField("STAFF") +// private String staff; +// /** +// * 电话 +// */ +// @TableField("TEL") +// private String tel; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/src/main/java/com/casic/model/BusWellInfoDto.java b/src/main/java/com/casic/model/BusWellInfoDto.java new file mode 100644 index 0000000..48610f2 --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfoDto.java @@ -0,0 +1,276 @@ +package com.casic.model; + + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class BusWellInfoDto { + private Long id; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + private String deviceType; + private String deptid; + private String deptName; + private Float deep; + private String position; + private String coordinateX; + private String coordinateY; + private String lngBaidu; + private String latBaidu; + private String lngGaode; + private String latGaode; + private String photos; + private String notes; + private String bfzt; + private String bfztName; + private String area; + private String staff; + private String tel; + private String valid; + private String ts; + private List watchData; + + Map map = new HashMap(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + map.put("id", id); + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + map.put("wellCode", wellCode); + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + map.put("wellName", wellName); + } + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + map.put("deviceType", deviceType); + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + map.put("wellType", wellType); + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + map.put("wellTypeName", wellTypeName); + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + map.put("deptid", deptid); + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + map.put("deptName", deptName); + } + + public Float getDeep() { + return deep; + } + + public void setDeep(Float deep) { + this.deep = deep; + map.put("deep", deep); + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + map.put("position", position); + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + map.put("coordinateX", coordinateX); + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + map.put("coordinateY", coordinateY); + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + map.put("lngBaidu", lngBaidu); + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + map.put("latBaidu", latBaidu); + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + map.put("lngGaode", lngGaode); + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + map.put("latGaode", latGaode); + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + map.put("photos", photos); + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + map.put("notes", notes); + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + map.put("bfzt", bfzt); + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + map.put("bfztName", bfztName); + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + map.put("area", area); + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + map.put("staff", staff); + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + map.put("tel", tel); + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + map.put("valid", valid); + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + map.put("ts", ts); + } + + public List getWatchData() { + return watchData; + } + + public void setWatchData(List watchData) { + this.watchData = watchData; + map.put("watchData", watchData); + } + + public Map toMap() { + return map; + } +} diff --git a/src/main/java/com/casic/model/ResponseData.java b/src/main/java/com/casic/model/ResponseData.java new file mode 100644 index 0000000..356775a --- /dev/null +++ b/src/main/java/com/casic/model/ResponseData.java @@ -0,0 +1,19 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Boolean success; + private Integer code; + private String message; + private Object data; +} \ No newline at end of file diff --git a/src/main/java/com/casic/model/WatchDataDto.java b/src/main/java/com/casic/model/WatchDataDto.java new file mode 100644 index 0000000..d50cfb5 --- /dev/null +++ b/src/main/java/com/casic/model/WatchDataDto.java @@ -0,0 +1,32 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author lenovo + */ +@Data +public class WatchDataDto implements Cloneable{ + + private Long deviceId; + private String devcode; + private String installDate; + private String onlineState; + private String onlineStateName; + private String watchType; + private String type; // 地图总览时使用 + private String data = ""; + private String value = ""; // 地图总览时使用 + private String logtime = "";//数据更新时间(设备上报时间) + + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/casic/service/MapDataService.java b/src/main/java/com/casic/service/MapDataService.java new file mode 100644 index 0000000..5f77810 --- /dev/null +++ b/src/main/java/com/casic/service/MapDataService.java @@ -0,0 +1,12 @@ +package com.casic.service; + + +public interface MapDataService { + + Object getWellList(String keywords, String wellType, String deptid, String isAlarm); + + Object getNowAlarmRecords(); + + Object getWellInfo(String devcode,String deviceType); + +} diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java new file mode 100644 index 0000000..b4dd026 --- /dev/null +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -0,0 +1,27 @@ +package com.casic.service; + +public interface ScreenDataService { + Object getInstalledDevice(String beginTime, String endTime); + + Object getKindsAlarmRate(String beginTime, String endTime); + + Object getAlarmRecordsByStation(String beginTime, String endTime); + + Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + + Object getDeptTimeSpan(String beginTime, String endTime); + + Object getHealthIndicator(String beginTime, String endTime); + + Object getDeptIndicator(String beginTime, String endTime); + + Object getDeviceList(String beginTime, String endTime); + + Object getOperationalStatus(String beginTime, String endTime); + + Object getAlarmRecordsByRoad(String beginTime, String endTime); + + Object getInspectRoad(String beginTime, String endTime); + + +} diff --git a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java new file mode 100644 index 0000000..661018b --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java @@ -0,0 +1,88 @@ +package com.casic.service.impl; + + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class DeptTimeSpanBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00"); + + public DeptTimeSpanBuilder(SmartwellDataMapper smartwellDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + } + + public List> deptTimeSpanProvider(String beginTime, String endTime) { + Map> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = getAlarmDevice(beginTime, endTime); + Map> currentDeviceTimeMap = MergeDeviceSpan(normalDeviceDeptMap, alarmDeviceDeptMap); + List> deptTimeSpanMap = calculateDeptTime(currentDeviceTimeMap); + return deptTimeSpanMap; + } + + private Map> getNormalDevice(String beginTime, String endTime) { + List> normalDeviceList = smartwellDataMapper.getNormalDevice(beginTime, endTime); + Map> normalDeviceDeptMap = normalDeviceList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return normalDeviceDeptMap; + } + + private Map> getAlarmDevice(String beginTime, String endTime) { + List> alarmDeviceDeptList = smartwellDataMapper.getAlarmDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = alarmDeviceDeptList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return alarmDeviceDeptMap; + } + + private Map> MergeDeviceSpan(Map> normalDeviceDeptMap, + Map> alarmDeviceDeptMap) { + for (Map.Entry> normalMap : normalDeviceDeptMap.entrySet()) { + String mapKey = normalMap.getKey(); + Map normalmap = normalMap.getValue(); + if (alarmDeviceDeptMap.containsKey(mapKey)) { + Map alarmMap = alarmDeviceDeptMap.get(mapKey); + for (Map.Entry alarmMapItem : alarmMap.entrySet()) { + String deviceCode = alarmMapItem.getKey(); + normalmap.put(deviceCode, alarmMapItem.getValue()); + } + } + } + return normalDeviceDeptMap; + } + + private List> calculateDeptTime(Map> currentDeviceTimeMap) { + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptTimeSpanList = new ArrayList<>(); + for (Map.Entry> currentDeviceMap : currentDeviceTimeMap.entrySet()) { + String deptid = currentDeviceMap.getKey(); + Map currentDeviceItemMap = currentDeviceMap.getValue(); + Double timeSpan = 0.00; + for (Map.Entry timeMapItem : currentDeviceItemMap.entrySet()) { + timeSpan += StringUtils.isEmpty(timeMapItem.getValue()) || timeMapItem.getValue() == "null" ? 0 : Double.valueOf(timeMapItem.getValue()); + } + Map deptTimeSpanMap = new HashMap<>(); + deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); + deptTimeSpanMap.put("count", df.format(timeSpan)); + deptTimeSpanList.add(deptTimeSpanMap); + } + return deptTimeSpanList; + } + +} diff --git a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java new file mode 100644 index 0000000..ffd0f1b --- /dev/null +++ b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java @@ -0,0 +1,96 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class HealthIndicatorsBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00%"); + + public HealthIndicatorsBuilder(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + this.tiltDataMapper = tiltDataMapper; + } + + + public List> healthIndicatorProvider(String beginTime, String endTime) { + List> healthIndictorList = new ArrayList<>(); + healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); + healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); + return healthIndictorList; + } + + + public List> deptIndicatorProvider(String beginTime, String endTime) { + List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); + List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); + List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); + return deptIndicatorList; + } + + public Map healthRoadIndicatorProvider(String isSort,String limitNum,String beginTime, String endTime) { + return smartwellHealthRoadIndicator(isSort,limitNum,beginTime, endTime); + } + + private Map smartwellHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); + Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); + smartwellHealth.put("typeName", "管网健康指数"); + smartwellHealth.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map tiltHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = tiltDataMapper.countColudDevice(); + Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); + smartwellHealth.put("typeName", "场站健康指数"); + smartwellHealth.put("count", df.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map smartwellHealthRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer roadNumber = smartwellDataMapper.countRoadNumber(); + Integer alarmRoad = smartwellDataMapper.countAlarmRoad(isSort,limitNum,beginTime, endTime); + smartwellHealth.put("typeName", "道路健康指数"); + smartwellHealth.put("count", df.format((Double.valueOf(roadNumber - alarmRoad)) / roadNumber)); + return smartwellHealth; + } + + private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { + Map alarmDeptMap = alarmDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) + ); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptIndicatorList = new ArrayList<>(); + deviceDeptNumberList.forEach( + deptNameNumberMap -> { + Map deptIndicatorMap = new HashMap<>(); + int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); + String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); + int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); + deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); + deptIndicatorMap.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + deptIndicatorList.add(deptIndicatorMap); + } + ); + return deptIndicatorList; + } +} diff --git a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java new file mode 100644 index 0000000..8b1209d --- /dev/null +++ b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java @@ -0,0 +1,71 @@ +package com.casic.service.impl; + +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 + */ +@Service +public class InstalledDeviceBuilder { + + private final DeviceTypesConfig deviceTypesConfig; + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + public InstalledDeviceBuilder(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, + TiltDataMapper tiltDataMapper, DeviceTypesConfig deviceTypesConfig) { + this.smartwellDataMapper = smartwellDataMapper; + this.cmsDataMapper = cmsDataMapper; + this.tiltDataMapper = tiltDataMapper; + this.deviceTypesConfig = deviceTypesConfig; + } + + public List> InstalledDeviceManger() { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + List> installedDeviceList = new ArrayList<>(); + cmsInstalledDevice(installedDeviceList); + tiltInstalledDevice(installedDeviceList); + smartwellInstalledDevice(installedDeviceList, deviceTypeList); + return installedDeviceList; + } + + private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); + installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); + installedDeviceList.add(installedDeviceMap); + } + } + + private void cmsInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); + installedDeviceMap.put("typeName", "电子标识器"); + installedDeviceList.add(installedDeviceMap); + } + + private void tiltInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); + installedDeviceMap.put("typeName", "云台"); + installedDeviceList.add(installedDeviceMap); + } +} diff --git a/src/main/java/com/casic/service/impl/KindsAlarmBulider.java b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java new file mode 100644 index 0000000..82df147 --- /dev/null +++ b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java @@ -0,0 +1,75 @@ +package com.casic.service.impl; + +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component +public class KindsAlarmBulider { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + private final DeviceTypesConfig deviceTypesConfig; + + private final DecimalFormat df = new DecimalFormat("0.00%"); + + public KindsAlarmBulider(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper,DeviceTypesConfig deviceTypesConfig) { + this.smartwellDataMapper = smartwellDataMapper; + this.tiltDataMapper = tiltDataMapper; + this.deviceTypesConfig=deviceTypesConfig; + } + + public List> alarmTypeManger(String beginTime, String endTime) { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + Map typeNameMap = smartwellDeviceType(); + List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap,deviceTypeList); + calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); + return rateDeviceList; + } + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } + + private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap,String[] deviceTypeList) { + List> rateDeviceList = new ArrayList<>(); + List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); + Map alarmCountMap = alarmCountList.stream().collect( + Collectors.toMap( + e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) + ) + ); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map rateDeviceMap = new HashMap<>(); + Integer totalAlarm = deviceCountMap.containsKey(deviceType)?Integer.valueOf(deviceCountMap.get(deviceType)):0; + Integer alarmCount=alarmCountMap.containsKey(deviceType)?Integer.valueOf(alarmCountMap.get(deviceType)):0; + rateDeviceMap.put("rate", totalAlarm==0?"0.00%":df.format(Double.valueOf(alarmCount)/totalAlarm)); + rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); + rateDeviceList.add(rateDeviceMap); + } + return rateDeviceList; + } + + private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { + Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); + Integer totalAlarm = tiltDataMapper.countColudDevice(); + Map rateDeviceMap = new HashMap<>(); + rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : df.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", "云台"); + rateDeviceList.add(rateDeviceMap); + } +} diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/casic/controller/MapDataController.java b/src/main/java/com/casic/controller/MapDataController.java new file mode 100644 index 0000000..b897b95 --- /dev/null +++ b/src/main/java/com/casic/controller/MapDataController.java @@ -0,0 +1,47 @@ +package com.casic.controller; + +import com.casic.service.MapDataService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/overview") +public class MapDataController { + + private final MapDataService mapDataService; + + public MapDataController(MapDataService mapDataService) { + this.mapDataService = mapDataService; + } + + /** + * 获取列表 + */ + @RequestMapping(value = "/wellList") + public Object getWellList(@RequestParam(required = false) String keywords, + @RequestParam(required = false) String wellType, + @RequestParam(required = false) String deptid, + @RequestParam(required = false) String isAlarm) { + + return mapDataService.getWellList(keywords,wellType,deptid,isAlarm); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/alarmNow") + public Object alarmNow() { + return mapDataService.getNowAlarmRecords(); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/wellInfo") + public Object getWellInfo(@RequestParam(value = "devcode", required = true) String devcode, + @RequestParam(value = "deviceType", required = true) String deviceType) { + return mapDataService.getWellInfo(devcode,deviceType); + } +} diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java new file mode 100644 index 0000000..04f8d97 --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -0,0 +1,210 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + public ScreenDataController(ScreenDataService screenDataService) { + this.screenDataService = screenDataService; + } + + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/line-length") + public Object getLineLength(String beginTime, String endTime) { +// return screenDataService.getLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + " \"deptName\":\"圣井燃气\",\n" + + " \"totalLength\":440\n" + + " },\n" + + " {\n" + + " \"deptName\":\"华气燃气\",\n" + + " \"totalLength\":810\n" + + " },\n" + + " {\n" + + " \"typeName\":\"中燃燃气\",\n" + + " \"totalLength\":500\n" + + " },\n" + + " {\n" + + " \"typeName\":\"正和燃气\",\n" + + " \"totalLength\":520\n" + + " },\n" + + " {\n" + + " \"typeName\":\"华罚燃气\",\n" + + " \"totalLength\":630\n" + + " }\n" + + " ]"; + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + /** + * 分类汇总燃气管线监管人员的类型和数量 + */ + @RequestMapping("/staff") + public Object getObvserStaff(String beginTime, String endTime) { +// return screenDataService.getObvserStaff(beginTime, endTime); + return "{\n" + + " \t\"总人数\":2022,\n" + + "\t\"staffDataList\":[\n" + + " {\n" + + "\t\t\"岗位名称\":\"管理人员\",\n" + + "\t\t\"总计\":72\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"运维人员\",\n" + + "\t\t\"总计\":874\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"施工人员\",\n" + + "\t\t\"总计\":456\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"统计人员\",\n" + + "\t\t\"总计\":745\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"技术人员\",\n" + + "\t\t\"总计\":455\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"监管人员\",\n" + + "\t\t\"总计\":644\n" + + " }]\n" + + " }"; + } + + /** + * 以道路的维度来统计汇总燃气管线的长度和权属单位 + */ + @RequestMapping("/road-line-length") + public Object getRoadLineLength(String beginTime, String endTime) { +// return screenDataService.getRoadLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + "\t\t\"所属道路\":\"双山西街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"圣井燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"世纪大道\",\n" + + "\t\t\"管线长度/km\":54,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"桃水大街\",\n" + + "\t\t\"管线长度/km\":32,\n" + + "\t\t\"权属单位\":\"中燃燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"鲁态大街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " }\n" + + "]"; + } + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + +// /** +// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/list") +// public Object getDeviceList(String beginTime, String endTime) { +// return screenDataService.getDeviceList(beginTime,endTime); +// } +// +// /** +// * 包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/Info") +// public Object getDeviceInfo(String wellCode,String deviceType) { +// return screenDataService.getDeviceInfo(wellCode,deviceType); +// } + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + /** + * 显示云台的报警信息 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/cms/CmsDataMapper.java b/src/main/java/com/casic/dao/cms/CmsDataMapper.java new file mode 100644 index 0000000..e57975e --- /dev/null +++ b/src/main/java/com/casic/dao/cms/CmsDataMapper.java @@ -0,0 +1,23 @@ +package com.casic.dao.cms; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface CmsDataMapper { + + Integer countElectronicDevice(); + + List> countElectronicTask(); + + Integer getTotalWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getCompleteWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalEvent(@Param("beginTime") String beginTime, @Param("endTime") String endTime); +} diff --git a/src/main/java/com/casic/dao/smartwell/MapDataMapper.java b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java new file mode 100644 index 0000000..8e56978 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java @@ -0,0 +1,25 @@ +package com.casic.dao.smartwell; + +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface MapDataMapper { + + List getWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNotAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNowAlarmRecords(); + + String getDictNameByCode(@Param("wellType") String wellType); + + Map getDeviceStatus(@Param("devcode") String devcode, @Param("tableName") String tableName, @Param("dataField") String dataField); +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java new file mode 100644 index 0000000..0294b14 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -0,0 +1,43 @@ +package com.casic.dao.smartwell; + + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SmartwellDataMapper { + + List> countDeviceByType(); + + List> getTypeName(); + + List> countAlarmType(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getDeviceListByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countDeviceNumber(); + + Integer countAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countDeviceNumberByDept(); + + List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countRoadNumber(); + + List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDeviceList(); + + List> getDeptNameList(); + +} diff --git a/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java new file mode 100644 index 0000000..e6ba279 --- /dev/null +++ b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java @@ -0,0 +1,32 @@ +package com.casic.dao.spantilt; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface TiltDataMapper { + /** + * 已安装设备 + * + * @return + */ + Integer countColudDevice(); + + /** + * 警告 + * + * @return + */ + Integer countColudAlarm(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + + /** + * 云台报警信息 + * + * @return + */ + List> countColudAlarmRecords(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + +} diff --git a/src/main/java/com/casic/model/AlarmNowView.java b/src/main/java/com/casic/model/AlarmNowView.java new file mode 100644 index 0000000..6eebafc --- /dev/null +++ b/src/main/java/com/casic/model/AlarmNowView.java @@ -0,0 +1,108 @@ +package com.casic.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +public class AlarmNowView { + + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date alarmTime; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + +} diff --git a/src/main/java/com/casic/model/BusWellInfo.java b/src/main/java/com/casic/model/BusWellInfo.java new file mode 100644 index 0000000..f4b8eba --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfo.java @@ -0,0 +1,192 @@ +package com.casic.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + //@NotEmpty(message="井深不能为空") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + + /** + * 区域 + */ + private String road; + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + + + /** + * 位置 + */ + private String position; + /** + * 部门编号 + */ + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; +// /** +// * 责任人 +// */ +// @TableField("STAFF") +// private String staff; +// /** +// * 电话 +// */ +// @TableField("TEL") +// private String tel; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/src/main/java/com/casic/model/BusWellInfoDto.java b/src/main/java/com/casic/model/BusWellInfoDto.java new file mode 100644 index 0000000..48610f2 --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfoDto.java @@ -0,0 +1,276 @@ +package com.casic.model; + + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class BusWellInfoDto { + private Long id; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + private String deviceType; + private String deptid; + private String deptName; + private Float deep; + private String position; + private String coordinateX; + private String coordinateY; + private String lngBaidu; + private String latBaidu; + private String lngGaode; + private String latGaode; + private String photos; + private String notes; + private String bfzt; + private String bfztName; + private String area; + private String staff; + private String tel; + private String valid; + private String ts; + private List watchData; + + Map map = new HashMap(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + map.put("id", id); + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + map.put("wellCode", wellCode); + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + map.put("wellName", wellName); + } + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + map.put("deviceType", deviceType); + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + map.put("wellType", wellType); + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + map.put("wellTypeName", wellTypeName); + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + map.put("deptid", deptid); + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + map.put("deptName", deptName); + } + + public Float getDeep() { + return deep; + } + + public void setDeep(Float deep) { + this.deep = deep; + map.put("deep", deep); + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + map.put("position", position); + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + map.put("coordinateX", coordinateX); + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + map.put("coordinateY", coordinateY); + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + map.put("lngBaidu", lngBaidu); + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + map.put("latBaidu", latBaidu); + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + map.put("lngGaode", lngGaode); + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + map.put("latGaode", latGaode); + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + map.put("photos", photos); + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + map.put("notes", notes); + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + map.put("bfzt", bfzt); + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + map.put("bfztName", bfztName); + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + map.put("area", area); + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + map.put("staff", staff); + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + map.put("tel", tel); + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + map.put("valid", valid); + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + map.put("ts", ts); + } + + public List getWatchData() { + return watchData; + } + + public void setWatchData(List watchData) { + this.watchData = watchData; + map.put("watchData", watchData); + } + + public Map toMap() { + return map; + } +} diff --git a/src/main/java/com/casic/model/ResponseData.java b/src/main/java/com/casic/model/ResponseData.java new file mode 100644 index 0000000..356775a --- /dev/null +++ b/src/main/java/com/casic/model/ResponseData.java @@ -0,0 +1,19 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Boolean success; + private Integer code; + private String message; + private Object data; +} \ No newline at end of file diff --git a/src/main/java/com/casic/model/WatchDataDto.java b/src/main/java/com/casic/model/WatchDataDto.java new file mode 100644 index 0000000..d50cfb5 --- /dev/null +++ b/src/main/java/com/casic/model/WatchDataDto.java @@ -0,0 +1,32 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author lenovo + */ +@Data +public class WatchDataDto implements Cloneable{ + + private Long deviceId; + private String devcode; + private String installDate; + private String onlineState; + private String onlineStateName; + private String watchType; + private String type; // 地图总览时使用 + private String data = ""; + private String value = ""; // 地图总览时使用 + private String logtime = "";//数据更新时间(设备上报时间) + + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/casic/service/MapDataService.java b/src/main/java/com/casic/service/MapDataService.java new file mode 100644 index 0000000..5f77810 --- /dev/null +++ b/src/main/java/com/casic/service/MapDataService.java @@ -0,0 +1,12 @@ +package com.casic.service; + + +public interface MapDataService { + + Object getWellList(String keywords, String wellType, String deptid, String isAlarm); + + Object getNowAlarmRecords(); + + Object getWellInfo(String devcode,String deviceType); + +} diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java new file mode 100644 index 0000000..b4dd026 --- /dev/null +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -0,0 +1,27 @@ +package com.casic.service; + +public interface ScreenDataService { + Object getInstalledDevice(String beginTime, String endTime); + + Object getKindsAlarmRate(String beginTime, String endTime); + + Object getAlarmRecordsByStation(String beginTime, String endTime); + + Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + + Object getDeptTimeSpan(String beginTime, String endTime); + + Object getHealthIndicator(String beginTime, String endTime); + + Object getDeptIndicator(String beginTime, String endTime); + + Object getDeviceList(String beginTime, String endTime); + + Object getOperationalStatus(String beginTime, String endTime); + + Object getAlarmRecordsByRoad(String beginTime, String endTime); + + Object getInspectRoad(String beginTime, String endTime); + + +} diff --git a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java new file mode 100644 index 0000000..661018b --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java @@ -0,0 +1,88 @@ +package com.casic.service.impl; + + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class DeptTimeSpanBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00"); + + public DeptTimeSpanBuilder(SmartwellDataMapper smartwellDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + } + + public List> deptTimeSpanProvider(String beginTime, String endTime) { + Map> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = getAlarmDevice(beginTime, endTime); + Map> currentDeviceTimeMap = MergeDeviceSpan(normalDeviceDeptMap, alarmDeviceDeptMap); + List> deptTimeSpanMap = calculateDeptTime(currentDeviceTimeMap); + return deptTimeSpanMap; + } + + private Map> getNormalDevice(String beginTime, String endTime) { + List> normalDeviceList = smartwellDataMapper.getNormalDevice(beginTime, endTime); + Map> normalDeviceDeptMap = normalDeviceList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return normalDeviceDeptMap; + } + + private Map> getAlarmDevice(String beginTime, String endTime) { + List> alarmDeviceDeptList = smartwellDataMapper.getAlarmDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = alarmDeviceDeptList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return alarmDeviceDeptMap; + } + + private Map> MergeDeviceSpan(Map> normalDeviceDeptMap, + Map> alarmDeviceDeptMap) { + for (Map.Entry> normalMap : normalDeviceDeptMap.entrySet()) { + String mapKey = normalMap.getKey(); + Map normalmap = normalMap.getValue(); + if (alarmDeviceDeptMap.containsKey(mapKey)) { + Map alarmMap = alarmDeviceDeptMap.get(mapKey); + for (Map.Entry alarmMapItem : alarmMap.entrySet()) { + String deviceCode = alarmMapItem.getKey(); + normalmap.put(deviceCode, alarmMapItem.getValue()); + } + } + } + return normalDeviceDeptMap; + } + + private List> calculateDeptTime(Map> currentDeviceTimeMap) { + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptTimeSpanList = new ArrayList<>(); + for (Map.Entry> currentDeviceMap : currentDeviceTimeMap.entrySet()) { + String deptid = currentDeviceMap.getKey(); + Map currentDeviceItemMap = currentDeviceMap.getValue(); + Double timeSpan = 0.00; + for (Map.Entry timeMapItem : currentDeviceItemMap.entrySet()) { + timeSpan += StringUtils.isEmpty(timeMapItem.getValue()) || timeMapItem.getValue() == "null" ? 0 : Double.valueOf(timeMapItem.getValue()); + } + Map deptTimeSpanMap = new HashMap<>(); + deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); + deptTimeSpanMap.put("count", df.format(timeSpan)); + deptTimeSpanList.add(deptTimeSpanMap); + } + return deptTimeSpanList; + } + +} diff --git a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java new file mode 100644 index 0000000..ffd0f1b --- /dev/null +++ b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java @@ -0,0 +1,96 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class HealthIndicatorsBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00%"); + + public HealthIndicatorsBuilder(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + this.tiltDataMapper = tiltDataMapper; + } + + + public List> healthIndicatorProvider(String beginTime, String endTime) { + List> healthIndictorList = new ArrayList<>(); + healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); + healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); + return healthIndictorList; + } + + + public List> deptIndicatorProvider(String beginTime, String endTime) { + List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); + List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); + List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); + return deptIndicatorList; + } + + public Map healthRoadIndicatorProvider(String isSort,String limitNum,String beginTime, String endTime) { + return smartwellHealthRoadIndicator(isSort,limitNum,beginTime, endTime); + } + + private Map smartwellHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); + Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); + smartwellHealth.put("typeName", "管网健康指数"); + smartwellHealth.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map tiltHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = tiltDataMapper.countColudDevice(); + Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); + smartwellHealth.put("typeName", "场站健康指数"); + smartwellHealth.put("count", df.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map smartwellHealthRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer roadNumber = smartwellDataMapper.countRoadNumber(); + Integer alarmRoad = smartwellDataMapper.countAlarmRoad(isSort,limitNum,beginTime, endTime); + smartwellHealth.put("typeName", "道路健康指数"); + smartwellHealth.put("count", df.format((Double.valueOf(roadNumber - alarmRoad)) / roadNumber)); + return smartwellHealth; + } + + private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { + Map alarmDeptMap = alarmDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) + ); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptIndicatorList = new ArrayList<>(); + deviceDeptNumberList.forEach( + deptNameNumberMap -> { + Map deptIndicatorMap = new HashMap<>(); + int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); + String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); + int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); + deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); + deptIndicatorMap.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + deptIndicatorList.add(deptIndicatorMap); + } + ); + return deptIndicatorList; + } +} diff --git a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java new file mode 100644 index 0000000..8b1209d --- /dev/null +++ b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java @@ -0,0 +1,71 @@ +package com.casic.service.impl; + +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 + */ +@Service +public class InstalledDeviceBuilder { + + private final DeviceTypesConfig deviceTypesConfig; + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + public InstalledDeviceBuilder(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, + TiltDataMapper tiltDataMapper, DeviceTypesConfig deviceTypesConfig) { + this.smartwellDataMapper = smartwellDataMapper; + this.cmsDataMapper = cmsDataMapper; + this.tiltDataMapper = tiltDataMapper; + this.deviceTypesConfig = deviceTypesConfig; + } + + public List> InstalledDeviceManger() { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + List> installedDeviceList = new ArrayList<>(); + cmsInstalledDevice(installedDeviceList); + tiltInstalledDevice(installedDeviceList); + smartwellInstalledDevice(installedDeviceList, deviceTypeList); + return installedDeviceList; + } + + private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); + installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); + installedDeviceList.add(installedDeviceMap); + } + } + + private void cmsInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); + installedDeviceMap.put("typeName", "电子标识器"); + installedDeviceList.add(installedDeviceMap); + } + + private void tiltInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); + installedDeviceMap.put("typeName", "云台"); + installedDeviceList.add(installedDeviceMap); + } +} diff --git a/src/main/java/com/casic/service/impl/KindsAlarmBulider.java b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java new file mode 100644 index 0000000..82df147 --- /dev/null +++ b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java @@ -0,0 +1,75 @@ +package com.casic.service.impl; + +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component +public class KindsAlarmBulider { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + private final DeviceTypesConfig deviceTypesConfig; + + private final DecimalFormat df = new DecimalFormat("0.00%"); + + public KindsAlarmBulider(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper,DeviceTypesConfig deviceTypesConfig) { + this.smartwellDataMapper = smartwellDataMapper; + this.tiltDataMapper = tiltDataMapper; + this.deviceTypesConfig=deviceTypesConfig; + } + + public List> alarmTypeManger(String beginTime, String endTime) { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + Map typeNameMap = smartwellDeviceType(); + List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap,deviceTypeList); + calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); + return rateDeviceList; + } + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } + + private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap,String[] deviceTypeList) { + List> rateDeviceList = new ArrayList<>(); + List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); + Map alarmCountMap = alarmCountList.stream().collect( + Collectors.toMap( + e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) + ) + ); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map rateDeviceMap = new HashMap<>(); + Integer totalAlarm = deviceCountMap.containsKey(deviceType)?Integer.valueOf(deviceCountMap.get(deviceType)):0; + Integer alarmCount=alarmCountMap.containsKey(deviceType)?Integer.valueOf(alarmCountMap.get(deviceType)):0; + rateDeviceMap.put("rate", totalAlarm==0?"0.00%":df.format(Double.valueOf(alarmCount)/totalAlarm)); + rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); + rateDeviceList.add(rateDeviceMap); + } + return rateDeviceList; + } + + private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { + Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); + Integer totalAlarm = tiltDataMapper.countColudDevice(); + Map rateDeviceMap = new HashMap<>(); + rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : df.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", "云台"); + rateDeviceList.add(rateDeviceMap); + } +} diff --git a/src/main/java/com/casic/service/impl/MapDataServiceImpl.java b/src/main/java/com/casic/service/impl/MapDataServiceImpl.java new file mode 100644 index 0000000..c2640ab --- /dev/null +++ b/src/main/java/com/casic/service/impl/MapDataServiceImpl.java @@ -0,0 +1,113 @@ +package com.casic.service.impl; + +import com.casic.dao.smartwell.MapDataMapper; +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import com.casic.model.ResponseData; +import com.casic.service.MapDataService; +import com.casic.util.DeviceDataFieldTableEnum; +import com.casic.util.DeviceDataTableEnum; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Slf4j +@Service +public class MapDataServiceImpl implements MapDataService { + + @Autowired + private MapDataMapper mapDataMapper; + + @Override + public Object getNowAlarmRecords() { + ResponseData responseData = new ResponseData(); + try { + List alarmNowViewList = this.mapDataMapper.getNowAlarmRecords(); + for (AlarmNowView alarmNowView : alarmNowViewList) { + alarmNowView.setWellTypeName(mapDataMapper.getDictNameByCode(alarmNowView.getWellType())); + } + responseData.setData(alarmNowViewList); + responseData.setCode(200); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:最新报警记录查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + + @Override + public Object getWellList(String keywords, String wellType, String deptid, String isAlarm) { + + ResponseData responseData = new ResponseData(); + try { + List wellList = new ArrayList<>(); + if (null == isAlarm || isAlarm.equals("") == true) { + // 查询并添加当前部门的闸井 + List myList = mapDataMapper.getWellList(keywords, wellType, deptid); + if (null != myList && myList.isEmpty() == false) { + wellList.addAll(myList); + } + } else if (isAlarm.equals("1")) { + // isAlarm = 1 查询所有报警状态的闸井 + wellList = mapDataMapper.getAlarmWellList(keywords, wellType, deptid); + } else { + // isAlarm = 0 查询所有不是报警状态的闸井 + wellList = mapDataMapper.getNotAlarmWellList(keywords, wellType, deptid); + } + responseData.setData(wellList); + responseData.setCode(200); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:点位记录列表查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + public Object getWellInfo(String devcode,String deviceType){ + ResponseData responseData = new ResponseData(); + try { + DeviceDataTableEnum deviceDataTableEnum = DeviceDataTableEnum.DEVICE_TYPE_TABLE.getTableNameMap().get(Integer.valueOf(deviceType)); + String tableName = deviceDataTableEnum.getTableName(); + List> wellInfoList=new ArrayList<>(); + if(deviceType.equals("10")){ + String [] tableNameList=tableName.split(","); + + for(String tableNames:tableNameList){ + Map wellInfoMap=mapDataMapper.getDeviceStatus(devcode,tableNames, + DeviceDataFieldTableEnum.TABLE_FIELD.getTableFieldMap().get(tableName)); + if(!wellInfoMap.containsKey("dataValue")){ + wellInfoMap.put("dataValue",0.0); + } + wellInfoList.add(wellInfoMap); + } + }else { + Map wellInfoMap=mapDataMapper.getDeviceStatus(devcode,tableName, + DeviceDataFieldTableEnum.TABLE_FIELD.getTableFieldMap().get(tableName)); + if(!wellInfoMap.containsKey("dataValue")){ + wellInfoMap.put("dataValue",0.0); + } + wellInfoList.add(wellInfoMap); + } + responseData.setData(wellInfoList); + responseData.setCode(200); + responseData.setSuccess(true); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:点位详情查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + +} diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/casic/controller/MapDataController.java b/src/main/java/com/casic/controller/MapDataController.java new file mode 100644 index 0000000..b897b95 --- /dev/null +++ b/src/main/java/com/casic/controller/MapDataController.java @@ -0,0 +1,47 @@ +package com.casic.controller; + +import com.casic.service.MapDataService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/overview") +public class MapDataController { + + private final MapDataService mapDataService; + + public MapDataController(MapDataService mapDataService) { + this.mapDataService = mapDataService; + } + + /** + * 获取列表 + */ + @RequestMapping(value = "/wellList") + public Object getWellList(@RequestParam(required = false) String keywords, + @RequestParam(required = false) String wellType, + @RequestParam(required = false) String deptid, + @RequestParam(required = false) String isAlarm) { + + return mapDataService.getWellList(keywords,wellType,deptid,isAlarm); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/alarmNow") + public Object alarmNow() { + return mapDataService.getNowAlarmRecords(); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/wellInfo") + public Object getWellInfo(@RequestParam(value = "devcode", required = true) String devcode, + @RequestParam(value = "deviceType", required = true) String deviceType) { + return mapDataService.getWellInfo(devcode,deviceType); + } +} diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java new file mode 100644 index 0000000..04f8d97 --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -0,0 +1,210 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + public ScreenDataController(ScreenDataService screenDataService) { + this.screenDataService = screenDataService; + } + + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/line-length") + public Object getLineLength(String beginTime, String endTime) { +// return screenDataService.getLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + " \"deptName\":\"圣井燃气\",\n" + + " \"totalLength\":440\n" + + " },\n" + + " {\n" + + " \"deptName\":\"华气燃气\",\n" + + " \"totalLength\":810\n" + + " },\n" + + " {\n" + + " \"typeName\":\"中燃燃气\",\n" + + " \"totalLength\":500\n" + + " },\n" + + " {\n" + + " \"typeName\":\"正和燃气\",\n" + + " \"totalLength\":520\n" + + " },\n" + + " {\n" + + " \"typeName\":\"华罚燃气\",\n" + + " \"totalLength\":630\n" + + " }\n" + + " ]"; + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + /** + * 分类汇总燃气管线监管人员的类型和数量 + */ + @RequestMapping("/staff") + public Object getObvserStaff(String beginTime, String endTime) { +// return screenDataService.getObvserStaff(beginTime, endTime); + return "{\n" + + " \t\"总人数\":2022,\n" + + "\t\"staffDataList\":[\n" + + " {\n" + + "\t\t\"岗位名称\":\"管理人员\",\n" + + "\t\t\"总计\":72\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"运维人员\",\n" + + "\t\t\"总计\":874\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"施工人员\",\n" + + "\t\t\"总计\":456\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"统计人员\",\n" + + "\t\t\"总计\":745\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"技术人员\",\n" + + "\t\t\"总计\":455\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"监管人员\",\n" + + "\t\t\"总计\":644\n" + + " }]\n" + + " }"; + } + + /** + * 以道路的维度来统计汇总燃气管线的长度和权属单位 + */ + @RequestMapping("/road-line-length") + public Object getRoadLineLength(String beginTime, String endTime) { +// return screenDataService.getRoadLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + "\t\t\"所属道路\":\"双山西街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"圣井燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"世纪大道\",\n" + + "\t\t\"管线长度/km\":54,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"桃水大街\",\n" + + "\t\t\"管线长度/km\":32,\n" + + "\t\t\"权属单位\":\"中燃燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"鲁态大街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " }\n" + + "]"; + } + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + +// /** +// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/list") +// public Object getDeviceList(String beginTime, String endTime) { +// return screenDataService.getDeviceList(beginTime,endTime); +// } +// +// /** +// * 包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/Info") +// public Object getDeviceInfo(String wellCode,String deviceType) { +// return screenDataService.getDeviceInfo(wellCode,deviceType); +// } + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + /** + * 显示云台的报警信息 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/cms/CmsDataMapper.java b/src/main/java/com/casic/dao/cms/CmsDataMapper.java new file mode 100644 index 0000000..e57975e --- /dev/null +++ b/src/main/java/com/casic/dao/cms/CmsDataMapper.java @@ -0,0 +1,23 @@ +package com.casic.dao.cms; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface CmsDataMapper { + + Integer countElectronicDevice(); + + List> countElectronicTask(); + + Integer getTotalWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getCompleteWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalEvent(@Param("beginTime") String beginTime, @Param("endTime") String endTime); +} diff --git a/src/main/java/com/casic/dao/smartwell/MapDataMapper.java b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java new file mode 100644 index 0000000..8e56978 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java @@ -0,0 +1,25 @@ +package com.casic.dao.smartwell; + +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface MapDataMapper { + + List getWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNotAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNowAlarmRecords(); + + String getDictNameByCode(@Param("wellType") String wellType); + + Map getDeviceStatus(@Param("devcode") String devcode, @Param("tableName") String tableName, @Param("dataField") String dataField); +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java new file mode 100644 index 0000000..0294b14 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -0,0 +1,43 @@ +package com.casic.dao.smartwell; + + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SmartwellDataMapper { + + List> countDeviceByType(); + + List> getTypeName(); + + List> countAlarmType(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getDeviceListByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countDeviceNumber(); + + Integer countAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countDeviceNumberByDept(); + + List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countRoadNumber(); + + List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDeviceList(); + + List> getDeptNameList(); + +} diff --git a/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java new file mode 100644 index 0000000..e6ba279 --- /dev/null +++ b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java @@ -0,0 +1,32 @@ +package com.casic.dao.spantilt; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface TiltDataMapper { + /** + * 已安装设备 + * + * @return + */ + Integer countColudDevice(); + + /** + * 警告 + * + * @return + */ + Integer countColudAlarm(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + + /** + * 云台报警信息 + * + * @return + */ + List> countColudAlarmRecords(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + +} diff --git a/src/main/java/com/casic/model/AlarmNowView.java b/src/main/java/com/casic/model/AlarmNowView.java new file mode 100644 index 0000000..6eebafc --- /dev/null +++ b/src/main/java/com/casic/model/AlarmNowView.java @@ -0,0 +1,108 @@ +package com.casic.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +public class AlarmNowView { + + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date alarmTime; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + +} diff --git a/src/main/java/com/casic/model/BusWellInfo.java b/src/main/java/com/casic/model/BusWellInfo.java new file mode 100644 index 0000000..f4b8eba --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfo.java @@ -0,0 +1,192 @@ +package com.casic.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + //@NotEmpty(message="井深不能为空") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + + /** + * 区域 + */ + private String road; + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + + + /** + * 位置 + */ + private String position; + /** + * 部门编号 + */ + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; +// /** +// * 责任人 +// */ +// @TableField("STAFF") +// private String staff; +// /** +// * 电话 +// */ +// @TableField("TEL") +// private String tel; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/src/main/java/com/casic/model/BusWellInfoDto.java b/src/main/java/com/casic/model/BusWellInfoDto.java new file mode 100644 index 0000000..48610f2 --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfoDto.java @@ -0,0 +1,276 @@ +package com.casic.model; + + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class BusWellInfoDto { + private Long id; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + private String deviceType; + private String deptid; + private String deptName; + private Float deep; + private String position; + private String coordinateX; + private String coordinateY; + private String lngBaidu; + private String latBaidu; + private String lngGaode; + private String latGaode; + private String photos; + private String notes; + private String bfzt; + private String bfztName; + private String area; + private String staff; + private String tel; + private String valid; + private String ts; + private List watchData; + + Map map = new HashMap(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + map.put("id", id); + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + map.put("wellCode", wellCode); + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + map.put("wellName", wellName); + } + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + map.put("deviceType", deviceType); + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + map.put("wellType", wellType); + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + map.put("wellTypeName", wellTypeName); + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + map.put("deptid", deptid); + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + map.put("deptName", deptName); + } + + public Float getDeep() { + return deep; + } + + public void setDeep(Float deep) { + this.deep = deep; + map.put("deep", deep); + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + map.put("position", position); + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + map.put("coordinateX", coordinateX); + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + map.put("coordinateY", coordinateY); + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + map.put("lngBaidu", lngBaidu); + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + map.put("latBaidu", latBaidu); + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + map.put("lngGaode", lngGaode); + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + map.put("latGaode", latGaode); + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + map.put("photos", photos); + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + map.put("notes", notes); + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + map.put("bfzt", bfzt); + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + map.put("bfztName", bfztName); + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + map.put("area", area); + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + map.put("staff", staff); + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + map.put("tel", tel); + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + map.put("valid", valid); + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + map.put("ts", ts); + } + + public List getWatchData() { + return watchData; + } + + public void setWatchData(List watchData) { + this.watchData = watchData; + map.put("watchData", watchData); + } + + public Map toMap() { + return map; + } +} diff --git a/src/main/java/com/casic/model/ResponseData.java b/src/main/java/com/casic/model/ResponseData.java new file mode 100644 index 0000000..356775a --- /dev/null +++ b/src/main/java/com/casic/model/ResponseData.java @@ -0,0 +1,19 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Boolean success; + private Integer code; + private String message; + private Object data; +} \ No newline at end of file diff --git a/src/main/java/com/casic/model/WatchDataDto.java b/src/main/java/com/casic/model/WatchDataDto.java new file mode 100644 index 0000000..d50cfb5 --- /dev/null +++ b/src/main/java/com/casic/model/WatchDataDto.java @@ -0,0 +1,32 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author lenovo + */ +@Data +public class WatchDataDto implements Cloneable{ + + private Long deviceId; + private String devcode; + private String installDate; + private String onlineState; + private String onlineStateName; + private String watchType; + private String type; // 地图总览时使用 + private String data = ""; + private String value = ""; // 地图总览时使用 + private String logtime = "";//数据更新时间(设备上报时间) + + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/casic/service/MapDataService.java b/src/main/java/com/casic/service/MapDataService.java new file mode 100644 index 0000000..5f77810 --- /dev/null +++ b/src/main/java/com/casic/service/MapDataService.java @@ -0,0 +1,12 @@ +package com.casic.service; + + +public interface MapDataService { + + Object getWellList(String keywords, String wellType, String deptid, String isAlarm); + + Object getNowAlarmRecords(); + + Object getWellInfo(String devcode,String deviceType); + +} diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java new file mode 100644 index 0000000..b4dd026 --- /dev/null +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -0,0 +1,27 @@ +package com.casic.service; + +public interface ScreenDataService { + Object getInstalledDevice(String beginTime, String endTime); + + Object getKindsAlarmRate(String beginTime, String endTime); + + Object getAlarmRecordsByStation(String beginTime, String endTime); + + Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + + Object getDeptTimeSpan(String beginTime, String endTime); + + Object getHealthIndicator(String beginTime, String endTime); + + Object getDeptIndicator(String beginTime, String endTime); + + Object getDeviceList(String beginTime, String endTime); + + Object getOperationalStatus(String beginTime, String endTime); + + Object getAlarmRecordsByRoad(String beginTime, String endTime); + + Object getInspectRoad(String beginTime, String endTime); + + +} diff --git a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java new file mode 100644 index 0000000..661018b --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java @@ -0,0 +1,88 @@ +package com.casic.service.impl; + + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class DeptTimeSpanBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00"); + + public DeptTimeSpanBuilder(SmartwellDataMapper smartwellDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + } + + public List> deptTimeSpanProvider(String beginTime, String endTime) { + Map> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = getAlarmDevice(beginTime, endTime); + Map> currentDeviceTimeMap = MergeDeviceSpan(normalDeviceDeptMap, alarmDeviceDeptMap); + List> deptTimeSpanMap = calculateDeptTime(currentDeviceTimeMap); + return deptTimeSpanMap; + } + + private Map> getNormalDevice(String beginTime, String endTime) { + List> normalDeviceList = smartwellDataMapper.getNormalDevice(beginTime, endTime); + Map> normalDeviceDeptMap = normalDeviceList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return normalDeviceDeptMap; + } + + private Map> getAlarmDevice(String beginTime, String endTime) { + List> alarmDeviceDeptList = smartwellDataMapper.getAlarmDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = alarmDeviceDeptList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return alarmDeviceDeptMap; + } + + private Map> MergeDeviceSpan(Map> normalDeviceDeptMap, + Map> alarmDeviceDeptMap) { + for (Map.Entry> normalMap : normalDeviceDeptMap.entrySet()) { + String mapKey = normalMap.getKey(); + Map normalmap = normalMap.getValue(); + if (alarmDeviceDeptMap.containsKey(mapKey)) { + Map alarmMap = alarmDeviceDeptMap.get(mapKey); + for (Map.Entry alarmMapItem : alarmMap.entrySet()) { + String deviceCode = alarmMapItem.getKey(); + normalmap.put(deviceCode, alarmMapItem.getValue()); + } + } + } + return normalDeviceDeptMap; + } + + private List> calculateDeptTime(Map> currentDeviceTimeMap) { + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptTimeSpanList = new ArrayList<>(); + for (Map.Entry> currentDeviceMap : currentDeviceTimeMap.entrySet()) { + String deptid = currentDeviceMap.getKey(); + Map currentDeviceItemMap = currentDeviceMap.getValue(); + Double timeSpan = 0.00; + for (Map.Entry timeMapItem : currentDeviceItemMap.entrySet()) { + timeSpan += StringUtils.isEmpty(timeMapItem.getValue()) || timeMapItem.getValue() == "null" ? 0 : Double.valueOf(timeMapItem.getValue()); + } + Map deptTimeSpanMap = new HashMap<>(); + deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); + deptTimeSpanMap.put("count", df.format(timeSpan)); + deptTimeSpanList.add(deptTimeSpanMap); + } + return deptTimeSpanList; + } + +} diff --git a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java new file mode 100644 index 0000000..ffd0f1b --- /dev/null +++ b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java @@ -0,0 +1,96 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class HealthIndicatorsBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00%"); + + public HealthIndicatorsBuilder(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + this.tiltDataMapper = tiltDataMapper; + } + + + public List> healthIndicatorProvider(String beginTime, String endTime) { + List> healthIndictorList = new ArrayList<>(); + healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); + healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); + return healthIndictorList; + } + + + public List> deptIndicatorProvider(String beginTime, String endTime) { + List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); + List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); + List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); + return deptIndicatorList; + } + + public Map healthRoadIndicatorProvider(String isSort,String limitNum,String beginTime, String endTime) { + return smartwellHealthRoadIndicator(isSort,limitNum,beginTime, endTime); + } + + private Map smartwellHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); + Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); + smartwellHealth.put("typeName", "管网健康指数"); + smartwellHealth.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map tiltHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = tiltDataMapper.countColudDevice(); + Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); + smartwellHealth.put("typeName", "场站健康指数"); + smartwellHealth.put("count", df.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map smartwellHealthRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer roadNumber = smartwellDataMapper.countRoadNumber(); + Integer alarmRoad = smartwellDataMapper.countAlarmRoad(isSort,limitNum,beginTime, endTime); + smartwellHealth.put("typeName", "道路健康指数"); + smartwellHealth.put("count", df.format((Double.valueOf(roadNumber - alarmRoad)) / roadNumber)); + return smartwellHealth; + } + + private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { + Map alarmDeptMap = alarmDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) + ); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptIndicatorList = new ArrayList<>(); + deviceDeptNumberList.forEach( + deptNameNumberMap -> { + Map deptIndicatorMap = new HashMap<>(); + int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); + String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); + int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); + deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); + deptIndicatorMap.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + deptIndicatorList.add(deptIndicatorMap); + } + ); + return deptIndicatorList; + } +} diff --git a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java new file mode 100644 index 0000000..8b1209d --- /dev/null +++ b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java @@ -0,0 +1,71 @@ +package com.casic.service.impl; + +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 + */ +@Service +public class InstalledDeviceBuilder { + + private final DeviceTypesConfig deviceTypesConfig; + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + public InstalledDeviceBuilder(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, + TiltDataMapper tiltDataMapper, DeviceTypesConfig deviceTypesConfig) { + this.smartwellDataMapper = smartwellDataMapper; + this.cmsDataMapper = cmsDataMapper; + this.tiltDataMapper = tiltDataMapper; + this.deviceTypesConfig = deviceTypesConfig; + } + + public List> InstalledDeviceManger() { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + List> installedDeviceList = new ArrayList<>(); + cmsInstalledDevice(installedDeviceList); + tiltInstalledDevice(installedDeviceList); + smartwellInstalledDevice(installedDeviceList, deviceTypeList); + return installedDeviceList; + } + + private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); + installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); + installedDeviceList.add(installedDeviceMap); + } + } + + private void cmsInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); + installedDeviceMap.put("typeName", "电子标识器"); + installedDeviceList.add(installedDeviceMap); + } + + private void tiltInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); + installedDeviceMap.put("typeName", "云台"); + installedDeviceList.add(installedDeviceMap); + } +} diff --git a/src/main/java/com/casic/service/impl/KindsAlarmBulider.java b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java new file mode 100644 index 0000000..82df147 --- /dev/null +++ b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java @@ -0,0 +1,75 @@ +package com.casic.service.impl; + +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component +public class KindsAlarmBulider { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + private final DeviceTypesConfig deviceTypesConfig; + + private final DecimalFormat df = new DecimalFormat("0.00%"); + + public KindsAlarmBulider(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper,DeviceTypesConfig deviceTypesConfig) { + this.smartwellDataMapper = smartwellDataMapper; + this.tiltDataMapper = tiltDataMapper; + this.deviceTypesConfig=deviceTypesConfig; + } + + public List> alarmTypeManger(String beginTime, String endTime) { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + Map typeNameMap = smartwellDeviceType(); + List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap,deviceTypeList); + calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); + return rateDeviceList; + } + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } + + private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap,String[] deviceTypeList) { + List> rateDeviceList = new ArrayList<>(); + List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); + Map alarmCountMap = alarmCountList.stream().collect( + Collectors.toMap( + e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) + ) + ); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map rateDeviceMap = new HashMap<>(); + Integer totalAlarm = deviceCountMap.containsKey(deviceType)?Integer.valueOf(deviceCountMap.get(deviceType)):0; + Integer alarmCount=alarmCountMap.containsKey(deviceType)?Integer.valueOf(alarmCountMap.get(deviceType)):0; + rateDeviceMap.put("rate", totalAlarm==0?"0.00%":df.format(Double.valueOf(alarmCount)/totalAlarm)); + rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); + rateDeviceList.add(rateDeviceMap); + } + return rateDeviceList; + } + + private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { + Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); + Integer totalAlarm = tiltDataMapper.countColudDevice(); + Map rateDeviceMap = new HashMap<>(); + rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : df.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", "云台"); + rateDeviceList.add(rateDeviceMap); + } +} diff --git a/src/main/java/com/casic/service/impl/MapDataServiceImpl.java b/src/main/java/com/casic/service/impl/MapDataServiceImpl.java new file mode 100644 index 0000000..c2640ab --- /dev/null +++ b/src/main/java/com/casic/service/impl/MapDataServiceImpl.java @@ -0,0 +1,113 @@ +package com.casic.service.impl; + +import com.casic.dao.smartwell.MapDataMapper; +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import com.casic.model.ResponseData; +import com.casic.service.MapDataService; +import com.casic.util.DeviceDataFieldTableEnum; +import com.casic.util.DeviceDataTableEnum; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Slf4j +@Service +public class MapDataServiceImpl implements MapDataService { + + @Autowired + private MapDataMapper mapDataMapper; + + @Override + public Object getNowAlarmRecords() { + ResponseData responseData = new ResponseData(); + try { + List alarmNowViewList = this.mapDataMapper.getNowAlarmRecords(); + for (AlarmNowView alarmNowView : alarmNowViewList) { + alarmNowView.setWellTypeName(mapDataMapper.getDictNameByCode(alarmNowView.getWellType())); + } + responseData.setData(alarmNowViewList); + responseData.setCode(200); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:最新报警记录查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + + @Override + public Object getWellList(String keywords, String wellType, String deptid, String isAlarm) { + + ResponseData responseData = new ResponseData(); + try { + List wellList = new ArrayList<>(); + if (null == isAlarm || isAlarm.equals("") == true) { + // 查询并添加当前部门的闸井 + List myList = mapDataMapper.getWellList(keywords, wellType, deptid); + if (null != myList && myList.isEmpty() == false) { + wellList.addAll(myList); + } + } else if (isAlarm.equals("1")) { + // isAlarm = 1 查询所有报警状态的闸井 + wellList = mapDataMapper.getAlarmWellList(keywords, wellType, deptid); + } else { + // isAlarm = 0 查询所有不是报警状态的闸井 + wellList = mapDataMapper.getNotAlarmWellList(keywords, wellType, deptid); + } + responseData.setData(wellList); + responseData.setCode(200); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:点位记录列表查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + public Object getWellInfo(String devcode,String deviceType){ + ResponseData responseData = new ResponseData(); + try { + DeviceDataTableEnum deviceDataTableEnum = DeviceDataTableEnum.DEVICE_TYPE_TABLE.getTableNameMap().get(Integer.valueOf(deviceType)); + String tableName = deviceDataTableEnum.getTableName(); + List> wellInfoList=new ArrayList<>(); + if(deviceType.equals("10")){ + String [] tableNameList=tableName.split(","); + + for(String tableNames:tableNameList){ + Map wellInfoMap=mapDataMapper.getDeviceStatus(devcode,tableNames, + DeviceDataFieldTableEnum.TABLE_FIELD.getTableFieldMap().get(tableName)); + if(!wellInfoMap.containsKey("dataValue")){ + wellInfoMap.put("dataValue",0.0); + } + wellInfoList.add(wellInfoMap); + } + }else { + Map wellInfoMap=mapDataMapper.getDeviceStatus(devcode,tableName, + DeviceDataFieldTableEnum.TABLE_FIELD.getTableFieldMap().get(tableName)); + if(!wellInfoMap.containsKey("dataValue")){ + wellInfoMap.put("dataValue",0.0); + } + wellInfoList.add(wellInfoMap); + } + responseData.setData(wellInfoList); + responseData.setCode(200); + responseData.setSuccess(true); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:点位详情查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + +} diff --git a/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java b/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java new file mode 100644 index 0000000..1946ee3 --- /dev/null +++ b/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java @@ -0,0 +1,60 @@ +package com.casic.service.impl; + +import com.casic.dao.cms.CmsDataMapper; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +public class OperationalStatusBuilder { + + private final DecimalFormat df = new DecimalFormat("0.00%"); + private final CmsDataMapper cmsDataMapper; + + public OperationalStatusBuilder(CmsDataMapper cmsDataMapper) { + this.cmsDataMapper = cmsDataMapper; + } + + public List> OperationalStatusProvider(String beginTime, String endTime) { + List> operaStatusList = getWorkOrder(beginTime,endTime); + operaStatusList.add(getTask(beginTime,endTime)); + operaStatusList.add(getEvent(beginTime,endTime)); + return operaStatusList; + } + + private Map getTask(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalTask(beginTime,endTime); + Map taskMap = new HashMap<>(); + taskMap.put("type", "运维任务"); + taskMap.put("count", String.valueOf(initTask)); + return taskMap; + } + + private List> getWorkOrder(String beginTime, String endTime) { + List> operaStatusList = new ArrayList<>(); + Integer initTask = cmsDataMapper.getTotalWorkOrder(beginTime,endTime); + Map workPageMap = new HashMap<>(); + workPageMap.put("type", "运维工单"); + workPageMap.put("count", String.valueOf(initTask)); + Integer completeTask = cmsDataMapper.getCompleteWorkOrder(beginTime,endTime); + Map completeMap = new HashMap<>(); + completeMap.put("type", "运维完结"); + completeMap.put("count", df.format(Double.valueOf(completeTask) / initTask)); + operaStatusList.add(completeMap); + operaStatusList.add(workPageMap); + return operaStatusList; + } + + private Map getEvent(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalEvent(beginTime,endTime); + Map eventMap = new HashMap<>(); + eventMap.put("type", "运维事件"); + eventMap.put("count", String.valueOf(initTask)); + return eventMap; + } + +} diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/casic/controller/MapDataController.java b/src/main/java/com/casic/controller/MapDataController.java new file mode 100644 index 0000000..b897b95 --- /dev/null +++ b/src/main/java/com/casic/controller/MapDataController.java @@ -0,0 +1,47 @@ +package com.casic.controller; + +import com.casic.service.MapDataService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/overview") +public class MapDataController { + + private final MapDataService mapDataService; + + public MapDataController(MapDataService mapDataService) { + this.mapDataService = mapDataService; + } + + /** + * 获取列表 + */ + @RequestMapping(value = "/wellList") + public Object getWellList(@RequestParam(required = false) String keywords, + @RequestParam(required = false) String wellType, + @RequestParam(required = false) String deptid, + @RequestParam(required = false) String isAlarm) { + + return mapDataService.getWellList(keywords,wellType,deptid,isAlarm); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/alarmNow") + public Object alarmNow() { + return mapDataService.getNowAlarmRecords(); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/wellInfo") + public Object getWellInfo(@RequestParam(value = "devcode", required = true) String devcode, + @RequestParam(value = "deviceType", required = true) String deviceType) { + return mapDataService.getWellInfo(devcode,deviceType); + } +} diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java new file mode 100644 index 0000000..04f8d97 --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -0,0 +1,210 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + public ScreenDataController(ScreenDataService screenDataService) { + this.screenDataService = screenDataService; + } + + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/line-length") + public Object getLineLength(String beginTime, String endTime) { +// return screenDataService.getLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + " \"deptName\":\"圣井燃气\",\n" + + " \"totalLength\":440\n" + + " },\n" + + " {\n" + + " \"deptName\":\"华气燃气\",\n" + + " \"totalLength\":810\n" + + " },\n" + + " {\n" + + " \"typeName\":\"中燃燃气\",\n" + + " \"totalLength\":500\n" + + " },\n" + + " {\n" + + " \"typeName\":\"正和燃气\",\n" + + " \"totalLength\":520\n" + + " },\n" + + " {\n" + + " \"typeName\":\"华罚燃气\",\n" + + " \"totalLength\":630\n" + + " }\n" + + " ]"; + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + /** + * 分类汇总燃气管线监管人员的类型和数量 + */ + @RequestMapping("/staff") + public Object getObvserStaff(String beginTime, String endTime) { +// return screenDataService.getObvserStaff(beginTime, endTime); + return "{\n" + + " \t\"总人数\":2022,\n" + + "\t\"staffDataList\":[\n" + + " {\n" + + "\t\t\"岗位名称\":\"管理人员\",\n" + + "\t\t\"总计\":72\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"运维人员\",\n" + + "\t\t\"总计\":874\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"施工人员\",\n" + + "\t\t\"总计\":456\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"统计人员\",\n" + + "\t\t\"总计\":745\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"技术人员\",\n" + + "\t\t\"总计\":455\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"监管人员\",\n" + + "\t\t\"总计\":644\n" + + " }]\n" + + " }"; + } + + /** + * 以道路的维度来统计汇总燃气管线的长度和权属单位 + */ + @RequestMapping("/road-line-length") + public Object getRoadLineLength(String beginTime, String endTime) { +// return screenDataService.getRoadLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + "\t\t\"所属道路\":\"双山西街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"圣井燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"世纪大道\",\n" + + "\t\t\"管线长度/km\":54,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"桃水大街\",\n" + + "\t\t\"管线长度/km\":32,\n" + + "\t\t\"权属单位\":\"中燃燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"鲁态大街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " }\n" + + "]"; + } + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + +// /** +// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/list") +// public Object getDeviceList(String beginTime, String endTime) { +// return screenDataService.getDeviceList(beginTime,endTime); +// } +// +// /** +// * 包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/Info") +// public Object getDeviceInfo(String wellCode,String deviceType) { +// return screenDataService.getDeviceInfo(wellCode,deviceType); +// } + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + /** + * 显示云台的报警信息 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/cms/CmsDataMapper.java b/src/main/java/com/casic/dao/cms/CmsDataMapper.java new file mode 100644 index 0000000..e57975e --- /dev/null +++ b/src/main/java/com/casic/dao/cms/CmsDataMapper.java @@ -0,0 +1,23 @@ +package com.casic.dao.cms; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface CmsDataMapper { + + Integer countElectronicDevice(); + + List> countElectronicTask(); + + Integer getTotalWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getCompleteWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalEvent(@Param("beginTime") String beginTime, @Param("endTime") String endTime); +} diff --git a/src/main/java/com/casic/dao/smartwell/MapDataMapper.java b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java new file mode 100644 index 0000000..8e56978 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java @@ -0,0 +1,25 @@ +package com.casic.dao.smartwell; + +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface MapDataMapper { + + List getWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNotAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNowAlarmRecords(); + + String getDictNameByCode(@Param("wellType") String wellType); + + Map getDeviceStatus(@Param("devcode") String devcode, @Param("tableName") String tableName, @Param("dataField") String dataField); +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java new file mode 100644 index 0000000..0294b14 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -0,0 +1,43 @@ +package com.casic.dao.smartwell; + + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SmartwellDataMapper { + + List> countDeviceByType(); + + List> getTypeName(); + + List> countAlarmType(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getDeviceListByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countDeviceNumber(); + + Integer countAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countDeviceNumberByDept(); + + List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countRoadNumber(); + + List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDeviceList(); + + List> getDeptNameList(); + +} diff --git a/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java new file mode 100644 index 0000000..e6ba279 --- /dev/null +++ b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java @@ -0,0 +1,32 @@ +package com.casic.dao.spantilt; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface TiltDataMapper { + /** + * 已安装设备 + * + * @return + */ + Integer countColudDevice(); + + /** + * 警告 + * + * @return + */ + Integer countColudAlarm(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + + /** + * 云台报警信息 + * + * @return + */ + List> countColudAlarmRecords(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + +} diff --git a/src/main/java/com/casic/model/AlarmNowView.java b/src/main/java/com/casic/model/AlarmNowView.java new file mode 100644 index 0000000..6eebafc --- /dev/null +++ b/src/main/java/com/casic/model/AlarmNowView.java @@ -0,0 +1,108 @@ +package com.casic.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +public class AlarmNowView { + + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date alarmTime; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + +} diff --git a/src/main/java/com/casic/model/BusWellInfo.java b/src/main/java/com/casic/model/BusWellInfo.java new file mode 100644 index 0000000..f4b8eba --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfo.java @@ -0,0 +1,192 @@ +package com.casic.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + //@NotEmpty(message="井深不能为空") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + + /** + * 区域 + */ + private String road; + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + + + /** + * 位置 + */ + private String position; + /** + * 部门编号 + */ + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; +// /** +// * 责任人 +// */ +// @TableField("STAFF") +// private String staff; +// /** +// * 电话 +// */ +// @TableField("TEL") +// private String tel; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/src/main/java/com/casic/model/BusWellInfoDto.java b/src/main/java/com/casic/model/BusWellInfoDto.java new file mode 100644 index 0000000..48610f2 --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfoDto.java @@ -0,0 +1,276 @@ +package com.casic.model; + + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class BusWellInfoDto { + private Long id; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + private String deviceType; + private String deptid; + private String deptName; + private Float deep; + private String position; + private String coordinateX; + private String coordinateY; + private String lngBaidu; + private String latBaidu; + private String lngGaode; + private String latGaode; + private String photos; + private String notes; + private String bfzt; + private String bfztName; + private String area; + private String staff; + private String tel; + private String valid; + private String ts; + private List watchData; + + Map map = new HashMap(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + map.put("id", id); + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + map.put("wellCode", wellCode); + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + map.put("wellName", wellName); + } + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + map.put("deviceType", deviceType); + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + map.put("wellType", wellType); + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + map.put("wellTypeName", wellTypeName); + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + map.put("deptid", deptid); + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + map.put("deptName", deptName); + } + + public Float getDeep() { + return deep; + } + + public void setDeep(Float deep) { + this.deep = deep; + map.put("deep", deep); + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + map.put("position", position); + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + map.put("coordinateX", coordinateX); + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + map.put("coordinateY", coordinateY); + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + map.put("lngBaidu", lngBaidu); + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + map.put("latBaidu", latBaidu); + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + map.put("lngGaode", lngGaode); + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + map.put("latGaode", latGaode); + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + map.put("photos", photos); + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + map.put("notes", notes); + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + map.put("bfzt", bfzt); + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + map.put("bfztName", bfztName); + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + map.put("area", area); + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + map.put("staff", staff); + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + map.put("tel", tel); + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + map.put("valid", valid); + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + map.put("ts", ts); + } + + public List getWatchData() { + return watchData; + } + + public void setWatchData(List watchData) { + this.watchData = watchData; + map.put("watchData", watchData); + } + + public Map toMap() { + return map; + } +} diff --git a/src/main/java/com/casic/model/ResponseData.java b/src/main/java/com/casic/model/ResponseData.java new file mode 100644 index 0000000..356775a --- /dev/null +++ b/src/main/java/com/casic/model/ResponseData.java @@ -0,0 +1,19 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Boolean success; + private Integer code; + private String message; + private Object data; +} \ No newline at end of file diff --git a/src/main/java/com/casic/model/WatchDataDto.java b/src/main/java/com/casic/model/WatchDataDto.java new file mode 100644 index 0000000..d50cfb5 --- /dev/null +++ b/src/main/java/com/casic/model/WatchDataDto.java @@ -0,0 +1,32 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author lenovo + */ +@Data +public class WatchDataDto implements Cloneable{ + + private Long deviceId; + private String devcode; + private String installDate; + private String onlineState; + private String onlineStateName; + private String watchType; + private String type; // 地图总览时使用 + private String data = ""; + private String value = ""; // 地图总览时使用 + private String logtime = "";//数据更新时间(设备上报时间) + + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/casic/service/MapDataService.java b/src/main/java/com/casic/service/MapDataService.java new file mode 100644 index 0000000..5f77810 --- /dev/null +++ b/src/main/java/com/casic/service/MapDataService.java @@ -0,0 +1,12 @@ +package com.casic.service; + + +public interface MapDataService { + + Object getWellList(String keywords, String wellType, String deptid, String isAlarm); + + Object getNowAlarmRecords(); + + Object getWellInfo(String devcode,String deviceType); + +} diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java new file mode 100644 index 0000000..b4dd026 --- /dev/null +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -0,0 +1,27 @@ +package com.casic.service; + +public interface ScreenDataService { + Object getInstalledDevice(String beginTime, String endTime); + + Object getKindsAlarmRate(String beginTime, String endTime); + + Object getAlarmRecordsByStation(String beginTime, String endTime); + + Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + + Object getDeptTimeSpan(String beginTime, String endTime); + + Object getHealthIndicator(String beginTime, String endTime); + + Object getDeptIndicator(String beginTime, String endTime); + + Object getDeviceList(String beginTime, String endTime); + + Object getOperationalStatus(String beginTime, String endTime); + + Object getAlarmRecordsByRoad(String beginTime, String endTime); + + Object getInspectRoad(String beginTime, String endTime); + + +} diff --git a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java new file mode 100644 index 0000000..661018b --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java @@ -0,0 +1,88 @@ +package com.casic.service.impl; + + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class DeptTimeSpanBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00"); + + public DeptTimeSpanBuilder(SmartwellDataMapper smartwellDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + } + + public List> deptTimeSpanProvider(String beginTime, String endTime) { + Map> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = getAlarmDevice(beginTime, endTime); + Map> currentDeviceTimeMap = MergeDeviceSpan(normalDeviceDeptMap, alarmDeviceDeptMap); + List> deptTimeSpanMap = calculateDeptTime(currentDeviceTimeMap); + return deptTimeSpanMap; + } + + private Map> getNormalDevice(String beginTime, String endTime) { + List> normalDeviceList = smartwellDataMapper.getNormalDevice(beginTime, endTime); + Map> normalDeviceDeptMap = normalDeviceList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return normalDeviceDeptMap; + } + + private Map> getAlarmDevice(String beginTime, String endTime) { + List> alarmDeviceDeptList = smartwellDataMapper.getAlarmDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = alarmDeviceDeptList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return alarmDeviceDeptMap; + } + + private Map> MergeDeviceSpan(Map> normalDeviceDeptMap, + Map> alarmDeviceDeptMap) { + for (Map.Entry> normalMap : normalDeviceDeptMap.entrySet()) { + String mapKey = normalMap.getKey(); + Map normalmap = normalMap.getValue(); + if (alarmDeviceDeptMap.containsKey(mapKey)) { + Map alarmMap = alarmDeviceDeptMap.get(mapKey); + for (Map.Entry alarmMapItem : alarmMap.entrySet()) { + String deviceCode = alarmMapItem.getKey(); + normalmap.put(deviceCode, alarmMapItem.getValue()); + } + } + } + return normalDeviceDeptMap; + } + + private List> calculateDeptTime(Map> currentDeviceTimeMap) { + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptTimeSpanList = new ArrayList<>(); + for (Map.Entry> currentDeviceMap : currentDeviceTimeMap.entrySet()) { + String deptid = currentDeviceMap.getKey(); + Map currentDeviceItemMap = currentDeviceMap.getValue(); + Double timeSpan = 0.00; + for (Map.Entry timeMapItem : currentDeviceItemMap.entrySet()) { + timeSpan += StringUtils.isEmpty(timeMapItem.getValue()) || timeMapItem.getValue() == "null" ? 0 : Double.valueOf(timeMapItem.getValue()); + } + Map deptTimeSpanMap = new HashMap<>(); + deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); + deptTimeSpanMap.put("count", df.format(timeSpan)); + deptTimeSpanList.add(deptTimeSpanMap); + } + return deptTimeSpanList; + } + +} diff --git a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java new file mode 100644 index 0000000..ffd0f1b --- /dev/null +++ b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java @@ -0,0 +1,96 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class HealthIndicatorsBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00%"); + + public HealthIndicatorsBuilder(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + this.tiltDataMapper = tiltDataMapper; + } + + + public List> healthIndicatorProvider(String beginTime, String endTime) { + List> healthIndictorList = new ArrayList<>(); + healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); + healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); + return healthIndictorList; + } + + + public List> deptIndicatorProvider(String beginTime, String endTime) { + List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); + List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); + List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); + return deptIndicatorList; + } + + public Map healthRoadIndicatorProvider(String isSort,String limitNum,String beginTime, String endTime) { + return smartwellHealthRoadIndicator(isSort,limitNum,beginTime, endTime); + } + + private Map smartwellHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); + Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); + smartwellHealth.put("typeName", "管网健康指数"); + smartwellHealth.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map tiltHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = tiltDataMapper.countColudDevice(); + Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); + smartwellHealth.put("typeName", "场站健康指数"); + smartwellHealth.put("count", df.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map smartwellHealthRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer roadNumber = smartwellDataMapper.countRoadNumber(); + Integer alarmRoad = smartwellDataMapper.countAlarmRoad(isSort,limitNum,beginTime, endTime); + smartwellHealth.put("typeName", "道路健康指数"); + smartwellHealth.put("count", df.format((Double.valueOf(roadNumber - alarmRoad)) / roadNumber)); + return smartwellHealth; + } + + private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { + Map alarmDeptMap = alarmDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) + ); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptIndicatorList = new ArrayList<>(); + deviceDeptNumberList.forEach( + deptNameNumberMap -> { + Map deptIndicatorMap = new HashMap<>(); + int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); + String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); + int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); + deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); + deptIndicatorMap.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + deptIndicatorList.add(deptIndicatorMap); + } + ); + return deptIndicatorList; + } +} diff --git a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java new file mode 100644 index 0000000..8b1209d --- /dev/null +++ b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java @@ -0,0 +1,71 @@ +package com.casic.service.impl; + +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 + */ +@Service +public class InstalledDeviceBuilder { + + private final DeviceTypesConfig deviceTypesConfig; + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + public InstalledDeviceBuilder(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, + TiltDataMapper tiltDataMapper, DeviceTypesConfig deviceTypesConfig) { + this.smartwellDataMapper = smartwellDataMapper; + this.cmsDataMapper = cmsDataMapper; + this.tiltDataMapper = tiltDataMapper; + this.deviceTypesConfig = deviceTypesConfig; + } + + public List> InstalledDeviceManger() { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + List> installedDeviceList = new ArrayList<>(); + cmsInstalledDevice(installedDeviceList); + tiltInstalledDevice(installedDeviceList); + smartwellInstalledDevice(installedDeviceList, deviceTypeList); + return installedDeviceList; + } + + private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); + installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); + installedDeviceList.add(installedDeviceMap); + } + } + + private void cmsInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); + installedDeviceMap.put("typeName", "电子标识器"); + installedDeviceList.add(installedDeviceMap); + } + + private void tiltInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); + installedDeviceMap.put("typeName", "云台"); + installedDeviceList.add(installedDeviceMap); + } +} diff --git a/src/main/java/com/casic/service/impl/KindsAlarmBulider.java b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java new file mode 100644 index 0000000..82df147 --- /dev/null +++ b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java @@ -0,0 +1,75 @@ +package com.casic.service.impl; + +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component +public class KindsAlarmBulider { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + private final DeviceTypesConfig deviceTypesConfig; + + private final DecimalFormat df = new DecimalFormat("0.00%"); + + public KindsAlarmBulider(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper,DeviceTypesConfig deviceTypesConfig) { + this.smartwellDataMapper = smartwellDataMapper; + this.tiltDataMapper = tiltDataMapper; + this.deviceTypesConfig=deviceTypesConfig; + } + + public List> alarmTypeManger(String beginTime, String endTime) { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + Map typeNameMap = smartwellDeviceType(); + List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap,deviceTypeList); + calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); + return rateDeviceList; + } + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } + + private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap,String[] deviceTypeList) { + List> rateDeviceList = new ArrayList<>(); + List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); + Map alarmCountMap = alarmCountList.stream().collect( + Collectors.toMap( + e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) + ) + ); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map rateDeviceMap = new HashMap<>(); + Integer totalAlarm = deviceCountMap.containsKey(deviceType)?Integer.valueOf(deviceCountMap.get(deviceType)):0; + Integer alarmCount=alarmCountMap.containsKey(deviceType)?Integer.valueOf(alarmCountMap.get(deviceType)):0; + rateDeviceMap.put("rate", totalAlarm==0?"0.00%":df.format(Double.valueOf(alarmCount)/totalAlarm)); + rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); + rateDeviceList.add(rateDeviceMap); + } + return rateDeviceList; + } + + private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { + Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); + Integer totalAlarm = tiltDataMapper.countColudDevice(); + Map rateDeviceMap = new HashMap<>(); + rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : df.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", "云台"); + rateDeviceList.add(rateDeviceMap); + } +} diff --git a/src/main/java/com/casic/service/impl/MapDataServiceImpl.java b/src/main/java/com/casic/service/impl/MapDataServiceImpl.java new file mode 100644 index 0000000..c2640ab --- /dev/null +++ b/src/main/java/com/casic/service/impl/MapDataServiceImpl.java @@ -0,0 +1,113 @@ +package com.casic.service.impl; + +import com.casic.dao.smartwell.MapDataMapper; +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import com.casic.model.ResponseData; +import com.casic.service.MapDataService; +import com.casic.util.DeviceDataFieldTableEnum; +import com.casic.util.DeviceDataTableEnum; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Slf4j +@Service +public class MapDataServiceImpl implements MapDataService { + + @Autowired + private MapDataMapper mapDataMapper; + + @Override + public Object getNowAlarmRecords() { + ResponseData responseData = new ResponseData(); + try { + List alarmNowViewList = this.mapDataMapper.getNowAlarmRecords(); + for (AlarmNowView alarmNowView : alarmNowViewList) { + alarmNowView.setWellTypeName(mapDataMapper.getDictNameByCode(alarmNowView.getWellType())); + } + responseData.setData(alarmNowViewList); + responseData.setCode(200); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:最新报警记录查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + + @Override + public Object getWellList(String keywords, String wellType, String deptid, String isAlarm) { + + ResponseData responseData = new ResponseData(); + try { + List wellList = new ArrayList<>(); + if (null == isAlarm || isAlarm.equals("") == true) { + // 查询并添加当前部门的闸井 + List myList = mapDataMapper.getWellList(keywords, wellType, deptid); + if (null != myList && myList.isEmpty() == false) { + wellList.addAll(myList); + } + } else if (isAlarm.equals("1")) { + // isAlarm = 1 查询所有报警状态的闸井 + wellList = mapDataMapper.getAlarmWellList(keywords, wellType, deptid); + } else { + // isAlarm = 0 查询所有不是报警状态的闸井 + wellList = mapDataMapper.getNotAlarmWellList(keywords, wellType, deptid); + } + responseData.setData(wellList); + responseData.setCode(200); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:点位记录列表查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + public Object getWellInfo(String devcode,String deviceType){ + ResponseData responseData = new ResponseData(); + try { + DeviceDataTableEnum deviceDataTableEnum = DeviceDataTableEnum.DEVICE_TYPE_TABLE.getTableNameMap().get(Integer.valueOf(deviceType)); + String tableName = deviceDataTableEnum.getTableName(); + List> wellInfoList=new ArrayList<>(); + if(deviceType.equals("10")){ + String [] tableNameList=tableName.split(","); + + for(String tableNames:tableNameList){ + Map wellInfoMap=mapDataMapper.getDeviceStatus(devcode,tableNames, + DeviceDataFieldTableEnum.TABLE_FIELD.getTableFieldMap().get(tableName)); + if(!wellInfoMap.containsKey("dataValue")){ + wellInfoMap.put("dataValue",0.0); + } + wellInfoList.add(wellInfoMap); + } + }else { + Map wellInfoMap=mapDataMapper.getDeviceStatus(devcode,tableName, + DeviceDataFieldTableEnum.TABLE_FIELD.getTableFieldMap().get(tableName)); + if(!wellInfoMap.containsKey("dataValue")){ + wellInfoMap.put("dataValue",0.0); + } + wellInfoList.add(wellInfoMap); + } + responseData.setData(wellInfoList); + responseData.setCode(200); + responseData.setSuccess(true); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:点位详情查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + +} diff --git a/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java b/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java new file mode 100644 index 0000000..1946ee3 --- /dev/null +++ b/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java @@ -0,0 +1,60 @@ +package com.casic.service.impl; + +import com.casic.dao.cms.CmsDataMapper; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +public class OperationalStatusBuilder { + + private final DecimalFormat df = new DecimalFormat("0.00%"); + private final CmsDataMapper cmsDataMapper; + + public OperationalStatusBuilder(CmsDataMapper cmsDataMapper) { + this.cmsDataMapper = cmsDataMapper; + } + + public List> OperationalStatusProvider(String beginTime, String endTime) { + List> operaStatusList = getWorkOrder(beginTime,endTime); + operaStatusList.add(getTask(beginTime,endTime)); + operaStatusList.add(getEvent(beginTime,endTime)); + return operaStatusList; + } + + private Map getTask(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalTask(beginTime,endTime); + Map taskMap = new HashMap<>(); + taskMap.put("type", "运维任务"); + taskMap.put("count", String.valueOf(initTask)); + return taskMap; + } + + private List> getWorkOrder(String beginTime, String endTime) { + List> operaStatusList = new ArrayList<>(); + Integer initTask = cmsDataMapper.getTotalWorkOrder(beginTime,endTime); + Map workPageMap = new HashMap<>(); + workPageMap.put("type", "运维工单"); + workPageMap.put("count", String.valueOf(initTask)); + Integer completeTask = cmsDataMapper.getCompleteWorkOrder(beginTime,endTime); + Map completeMap = new HashMap<>(); + completeMap.put("type", "运维完结"); + completeMap.put("count", df.format(Double.valueOf(completeTask) / initTask)); + operaStatusList.add(completeMap); + operaStatusList.add(workPageMap); + return operaStatusList; + } + + private Map getEvent(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalEvent(beginTime,endTime); + Map eventMap = new HashMap<>(); + eventMap.put("type", "运维事件"); + eventMap.put("count", String.valueOf(initTask)); + return eventMap; + } + +} diff --git a/src/main/java/com/casic/service/impl/ScreenDataManger.java b/src/main/java/com/casic/service/impl/ScreenDataManger.java new file mode 100644 index 0000000..6a56a43 --- /dev/null +++ b/src/main/java/com/casic/service/impl/ScreenDataManger.java @@ -0,0 +1,170 @@ +package com.casic.service.impl; + +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.model.ResponseData; +import com.casic.service.ScreenDataService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class ScreenDataManger implements ScreenDataService { + @Autowired + private InstalledDeviceBuilder installedDeviceBuilder; + @Autowired + private KindsAlarmBulider kindsAlarmBulider; + @Autowired + private HealthIndicatorsBuilder healthIndicatorsBuilder; + @Autowired + private DeptTimeSpanBuilder deptTimeSpanBuilder; + @Autowired + private OperationalStatusBuilder operStatusBuilder; + + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + public ScreenDataManger(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, TiltDataMapper tiltDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + this.cmsDataMapper = cmsDataMapper; + this.tiltDataMapper = tiltDataMapper; + } + + public Object getInstalledDevice(String beginTime, String endTime) { + List> installedDeviceList = null; + try { + installedDeviceList = installedDeviceBuilder.InstalledDeviceManger(); + } catch (DataAccessException dex) { + log.error("主题:查询已安装设备的类型和个数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return installedDeviceList; + } + + public Object getKindsAlarmRate(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = kindsAlarmBulider.alarmTypeManger(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:统计汇总各管线权属单位下的燃气管线总长度出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + List> recordsRoadList = null; + try { + recordsRoadList = tiltDataMapper.countColudAlarmRecords(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:显示云台的报警信息出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return recordsRoadList; + } + + public Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime) { + Map healthRoadIndtorMap = null; + try { + healthRoadIndtorMap = healthIndicatorsBuilder.healthRoadIndicatorProvider(isSort,limitNum,beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:以道路维度查看健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return healthRoadIndtorMap; + } + + public Object getDeptTimeSpan(String beginTime, String endTime) { + List> deptTimeSpanList = null; + try { + deptTimeSpanList = deptTimeSpanBuilder.deptTimeSpanProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:按权属单位来汇总,各个权属单位下的燃气管线连续正常运行的时长出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return deptTimeSpanList; + } + + public Object getHealthIndicator(String beginTime, String endTime) { + List> healthIndictorList = null; + try { + healthIndictorList = healthIndicatorsBuilder.healthIndicatorProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return healthIndictorList; + } + + public Object getDeptIndicator(String beginTime, String endTime) { + List> healthIndictorList = null; + try { + healthIndictorList = healthIndicatorsBuilder.deptIndicatorProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:权属单位维度健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return healthIndictorList; + } + + public Object getDeviceList(String beginTime, String endTime) { + List> alarmDeviceList = null; + try { + alarmDeviceList = smartwellDataMapper.getAlarmDeviceList(); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + alarmDeviceList.forEach( + alarmDevice -> { + alarmDevice.put("isAlarm", alarmDevice.containsKey("isAlarm") ? "1" : "0"); + alarmDevice.put("responsibleDept", deptNameMap.get(String.valueOf(alarmDevice.get("responsibleDept")))); + } + ); + } catch (DataAccessException dex) { + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return alarmDeviceList; + } + + public Object getOperationalStatus(String beginTime, String endTime) { + + ResponseData responseData = new ResponseData(); + try { + List> operaStatusList = operStatusBuilder.OperationalStatusProvider(beginTime, endTime); + responseData.setSuccess(true); + responseData.setCode(200); + responseData.setMessage("查询成功"); + responseData.setData(operaStatusList); + } catch (DataAccessException dex) { + log.error("主题:运维情况查询出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = smartwellDataMapper.countAlarmByRoad(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:以道路的维度统计燃气管线监控中的报警情况出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + public Object getInspectRoad(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = cmsDataMapper.countElectronicTask(); + } catch (DataAccessException dex) { + log.error("主题:汇总显示个道路的巡检运维次数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + +} diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/casic/controller/MapDataController.java b/src/main/java/com/casic/controller/MapDataController.java new file mode 100644 index 0000000..b897b95 --- /dev/null +++ b/src/main/java/com/casic/controller/MapDataController.java @@ -0,0 +1,47 @@ +package com.casic.controller; + +import com.casic.service.MapDataService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/overview") +public class MapDataController { + + private final MapDataService mapDataService; + + public MapDataController(MapDataService mapDataService) { + this.mapDataService = mapDataService; + } + + /** + * 获取列表 + */ + @RequestMapping(value = "/wellList") + public Object getWellList(@RequestParam(required = false) String keywords, + @RequestParam(required = false) String wellType, + @RequestParam(required = false) String deptid, + @RequestParam(required = false) String isAlarm) { + + return mapDataService.getWellList(keywords,wellType,deptid,isAlarm); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/alarmNow") + public Object alarmNow() { + return mapDataService.getNowAlarmRecords(); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/wellInfo") + public Object getWellInfo(@RequestParam(value = "devcode", required = true) String devcode, + @RequestParam(value = "deviceType", required = true) String deviceType) { + return mapDataService.getWellInfo(devcode,deviceType); + } +} diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java new file mode 100644 index 0000000..04f8d97 --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -0,0 +1,210 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + public ScreenDataController(ScreenDataService screenDataService) { + this.screenDataService = screenDataService; + } + + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/line-length") + public Object getLineLength(String beginTime, String endTime) { +// return screenDataService.getLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + " \"deptName\":\"圣井燃气\",\n" + + " \"totalLength\":440\n" + + " },\n" + + " {\n" + + " \"deptName\":\"华气燃气\",\n" + + " \"totalLength\":810\n" + + " },\n" + + " {\n" + + " \"typeName\":\"中燃燃气\",\n" + + " \"totalLength\":500\n" + + " },\n" + + " {\n" + + " \"typeName\":\"正和燃气\",\n" + + " \"totalLength\":520\n" + + " },\n" + + " {\n" + + " \"typeName\":\"华罚燃气\",\n" + + " \"totalLength\":630\n" + + " }\n" + + " ]"; + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + /** + * 分类汇总燃气管线监管人员的类型和数量 + */ + @RequestMapping("/staff") + public Object getObvserStaff(String beginTime, String endTime) { +// return screenDataService.getObvserStaff(beginTime, endTime); + return "{\n" + + " \t\"总人数\":2022,\n" + + "\t\"staffDataList\":[\n" + + " {\n" + + "\t\t\"岗位名称\":\"管理人员\",\n" + + "\t\t\"总计\":72\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"运维人员\",\n" + + "\t\t\"总计\":874\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"施工人员\",\n" + + "\t\t\"总计\":456\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"统计人员\",\n" + + "\t\t\"总计\":745\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"技术人员\",\n" + + "\t\t\"总计\":455\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"监管人员\",\n" + + "\t\t\"总计\":644\n" + + " }]\n" + + " }"; + } + + /** + * 以道路的维度来统计汇总燃气管线的长度和权属单位 + */ + @RequestMapping("/road-line-length") + public Object getRoadLineLength(String beginTime, String endTime) { +// return screenDataService.getRoadLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + "\t\t\"所属道路\":\"双山西街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"圣井燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"世纪大道\",\n" + + "\t\t\"管线长度/km\":54,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"桃水大街\",\n" + + "\t\t\"管线长度/km\":32,\n" + + "\t\t\"权属单位\":\"中燃燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"鲁态大街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " }\n" + + "]"; + } + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + +// /** +// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/list") +// public Object getDeviceList(String beginTime, String endTime) { +// return screenDataService.getDeviceList(beginTime,endTime); +// } +// +// /** +// * 包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/Info") +// public Object getDeviceInfo(String wellCode,String deviceType) { +// return screenDataService.getDeviceInfo(wellCode,deviceType); +// } + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + /** + * 显示云台的报警信息 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/cms/CmsDataMapper.java b/src/main/java/com/casic/dao/cms/CmsDataMapper.java new file mode 100644 index 0000000..e57975e --- /dev/null +++ b/src/main/java/com/casic/dao/cms/CmsDataMapper.java @@ -0,0 +1,23 @@ +package com.casic.dao.cms; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface CmsDataMapper { + + Integer countElectronicDevice(); + + List> countElectronicTask(); + + Integer getTotalWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getCompleteWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalEvent(@Param("beginTime") String beginTime, @Param("endTime") String endTime); +} diff --git a/src/main/java/com/casic/dao/smartwell/MapDataMapper.java b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java new file mode 100644 index 0000000..8e56978 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java @@ -0,0 +1,25 @@ +package com.casic.dao.smartwell; + +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface MapDataMapper { + + List getWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNotAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNowAlarmRecords(); + + String getDictNameByCode(@Param("wellType") String wellType); + + Map getDeviceStatus(@Param("devcode") String devcode, @Param("tableName") String tableName, @Param("dataField") String dataField); +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java new file mode 100644 index 0000000..0294b14 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -0,0 +1,43 @@ +package com.casic.dao.smartwell; + + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SmartwellDataMapper { + + List> countDeviceByType(); + + List> getTypeName(); + + List> countAlarmType(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getDeviceListByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countDeviceNumber(); + + Integer countAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countDeviceNumberByDept(); + + List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countRoadNumber(); + + List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDeviceList(); + + List> getDeptNameList(); + +} diff --git a/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java new file mode 100644 index 0000000..e6ba279 --- /dev/null +++ b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java @@ -0,0 +1,32 @@ +package com.casic.dao.spantilt; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface TiltDataMapper { + /** + * 已安装设备 + * + * @return + */ + Integer countColudDevice(); + + /** + * 警告 + * + * @return + */ + Integer countColudAlarm(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + + /** + * 云台报警信息 + * + * @return + */ + List> countColudAlarmRecords(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + +} diff --git a/src/main/java/com/casic/model/AlarmNowView.java b/src/main/java/com/casic/model/AlarmNowView.java new file mode 100644 index 0000000..6eebafc --- /dev/null +++ b/src/main/java/com/casic/model/AlarmNowView.java @@ -0,0 +1,108 @@ +package com.casic.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +public class AlarmNowView { + + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date alarmTime; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + +} diff --git a/src/main/java/com/casic/model/BusWellInfo.java b/src/main/java/com/casic/model/BusWellInfo.java new file mode 100644 index 0000000..f4b8eba --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfo.java @@ -0,0 +1,192 @@ +package com.casic.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + //@NotEmpty(message="井深不能为空") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + + /** + * 区域 + */ + private String road; + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + + + /** + * 位置 + */ + private String position; + /** + * 部门编号 + */ + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; +// /** +// * 责任人 +// */ +// @TableField("STAFF") +// private String staff; +// /** +// * 电话 +// */ +// @TableField("TEL") +// private String tel; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/src/main/java/com/casic/model/BusWellInfoDto.java b/src/main/java/com/casic/model/BusWellInfoDto.java new file mode 100644 index 0000000..48610f2 --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfoDto.java @@ -0,0 +1,276 @@ +package com.casic.model; + + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class BusWellInfoDto { + private Long id; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + private String deviceType; + private String deptid; + private String deptName; + private Float deep; + private String position; + private String coordinateX; + private String coordinateY; + private String lngBaidu; + private String latBaidu; + private String lngGaode; + private String latGaode; + private String photos; + private String notes; + private String bfzt; + private String bfztName; + private String area; + private String staff; + private String tel; + private String valid; + private String ts; + private List watchData; + + Map map = new HashMap(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + map.put("id", id); + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + map.put("wellCode", wellCode); + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + map.put("wellName", wellName); + } + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + map.put("deviceType", deviceType); + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + map.put("wellType", wellType); + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + map.put("wellTypeName", wellTypeName); + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + map.put("deptid", deptid); + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + map.put("deptName", deptName); + } + + public Float getDeep() { + return deep; + } + + public void setDeep(Float deep) { + this.deep = deep; + map.put("deep", deep); + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + map.put("position", position); + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + map.put("coordinateX", coordinateX); + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + map.put("coordinateY", coordinateY); + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + map.put("lngBaidu", lngBaidu); + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + map.put("latBaidu", latBaidu); + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + map.put("lngGaode", lngGaode); + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + map.put("latGaode", latGaode); + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + map.put("photos", photos); + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + map.put("notes", notes); + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + map.put("bfzt", bfzt); + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + map.put("bfztName", bfztName); + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + map.put("area", area); + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + map.put("staff", staff); + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + map.put("tel", tel); + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + map.put("valid", valid); + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + map.put("ts", ts); + } + + public List getWatchData() { + return watchData; + } + + public void setWatchData(List watchData) { + this.watchData = watchData; + map.put("watchData", watchData); + } + + public Map toMap() { + return map; + } +} diff --git a/src/main/java/com/casic/model/ResponseData.java b/src/main/java/com/casic/model/ResponseData.java new file mode 100644 index 0000000..356775a --- /dev/null +++ b/src/main/java/com/casic/model/ResponseData.java @@ -0,0 +1,19 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Boolean success; + private Integer code; + private String message; + private Object data; +} \ No newline at end of file diff --git a/src/main/java/com/casic/model/WatchDataDto.java b/src/main/java/com/casic/model/WatchDataDto.java new file mode 100644 index 0000000..d50cfb5 --- /dev/null +++ b/src/main/java/com/casic/model/WatchDataDto.java @@ -0,0 +1,32 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author lenovo + */ +@Data +public class WatchDataDto implements Cloneable{ + + private Long deviceId; + private String devcode; + private String installDate; + private String onlineState; + private String onlineStateName; + private String watchType; + private String type; // 地图总览时使用 + private String data = ""; + private String value = ""; // 地图总览时使用 + private String logtime = "";//数据更新时间(设备上报时间) + + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/casic/service/MapDataService.java b/src/main/java/com/casic/service/MapDataService.java new file mode 100644 index 0000000..5f77810 --- /dev/null +++ b/src/main/java/com/casic/service/MapDataService.java @@ -0,0 +1,12 @@ +package com.casic.service; + + +public interface MapDataService { + + Object getWellList(String keywords, String wellType, String deptid, String isAlarm); + + Object getNowAlarmRecords(); + + Object getWellInfo(String devcode,String deviceType); + +} diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java new file mode 100644 index 0000000..b4dd026 --- /dev/null +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -0,0 +1,27 @@ +package com.casic.service; + +public interface ScreenDataService { + Object getInstalledDevice(String beginTime, String endTime); + + Object getKindsAlarmRate(String beginTime, String endTime); + + Object getAlarmRecordsByStation(String beginTime, String endTime); + + Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + + Object getDeptTimeSpan(String beginTime, String endTime); + + Object getHealthIndicator(String beginTime, String endTime); + + Object getDeptIndicator(String beginTime, String endTime); + + Object getDeviceList(String beginTime, String endTime); + + Object getOperationalStatus(String beginTime, String endTime); + + Object getAlarmRecordsByRoad(String beginTime, String endTime); + + Object getInspectRoad(String beginTime, String endTime); + + +} diff --git a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java new file mode 100644 index 0000000..661018b --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java @@ -0,0 +1,88 @@ +package com.casic.service.impl; + + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class DeptTimeSpanBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00"); + + public DeptTimeSpanBuilder(SmartwellDataMapper smartwellDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + } + + public List> deptTimeSpanProvider(String beginTime, String endTime) { + Map> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = getAlarmDevice(beginTime, endTime); + Map> currentDeviceTimeMap = MergeDeviceSpan(normalDeviceDeptMap, alarmDeviceDeptMap); + List> deptTimeSpanMap = calculateDeptTime(currentDeviceTimeMap); + return deptTimeSpanMap; + } + + private Map> getNormalDevice(String beginTime, String endTime) { + List> normalDeviceList = smartwellDataMapper.getNormalDevice(beginTime, endTime); + Map> normalDeviceDeptMap = normalDeviceList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return normalDeviceDeptMap; + } + + private Map> getAlarmDevice(String beginTime, String endTime) { + List> alarmDeviceDeptList = smartwellDataMapper.getAlarmDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = alarmDeviceDeptList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return alarmDeviceDeptMap; + } + + private Map> MergeDeviceSpan(Map> normalDeviceDeptMap, + Map> alarmDeviceDeptMap) { + for (Map.Entry> normalMap : normalDeviceDeptMap.entrySet()) { + String mapKey = normalMap.getKey(); + Map normalmap = normalMap.getValue(); + if (alarmDeviceDeptMap.containsKey(mapKey)) { + Map alarmMap = alarmDeviceDeptMap.get(mapKey); + for (Map.Entry alarmMapItem : alarmMap.entrySet()) { + String deviceCode = alarmMapItem.getKey(); + normalmap.put(deviceCode, alarmMapItem.getValue()); + } + } + } + return normalDeviceDeptMap; + } + + private List> calculateDeptTime(Map> currentDeviceTimeMap) { + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptTimeSpanList = new ArrayList<>(); + for (Map.Entry> currentDeviceMap : currentDeviceTimeMap.entrySet()) { + String deptid = currentDeviceMap.getKey(); + Map currentDeviceItemMap = currentDeviceMap.getValue(); + Double timeSpan = 0.00; + for (Map.Entry timeMapItem : currentDeviceItemMap.entrySet()) { + timeSpan += StringUtils.isEmpty(timeMapItem.getValue()) || timeMapItem.getValue() == "null" ? 0 : Double.valueOf(timeMapItem.getValue()); + } + Map deptTimeSpanMap = new HashMap<>(); + deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); + deptTimeSpanMap.put("count", df.format(timeSpan)); + deptTimeSpanList.add(deptTimeSpanMap); + } + return deptTimeSpanList; + } + +} diff --git a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java new file mode 100644 index 0000000..ffd0f1b --- /dev/null +++ b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java @@ -0,0 +1,96 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class HealthIndicatorsBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00%"); + + public HealthIndicatorsBuilder(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + this.tiltDataMapper = tiltDataMapper; + } + + + public List> healthIndicatorProvider(String beginTime, String endTime) { + List> healthIndictorList = new ArrayList<>(); + healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); + healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); + return healthIndictorList; + } + + + public List> deptIndicatorProvider(String beginTime, String endTime) { + List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); + List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); + List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); + return deptIndicatorList; + } + + public Map healthRoadIndicatorProvider(String isSort,String limitNum,String beginTime, String endTime) { + return smartwellHealthRoadIndicator(isSort,limitNum,beginTime, endTime); + } + + private Map smartwellHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); + Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); + smartwellHealth.put("typeName", "管网健康指数"); + smartwellHealth.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map tiltHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = tiltDataMapper.countColudDevice(); + Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); + smartwellHealth.put("typeName", "场站健康指数"); + smartwellHealth.put("count", df.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map smartwellHealthRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer roadNumber = smartwellDataMapper.countRoadNumber(); + Integer alarmRoad = smartwellDataMapper.countAlarmRoad(isSort,limitNum,beginTime, endTime); + smartwellHealth.put("typeName", "道路健康指数"); + smartwellHealth.put("count", df.format((Double.valueOf(roadNumber - alarmRoad)) / roadNumber)); + return smartwellHealth; + } + + private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { + Map alarmDeptMap = alarmDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) + ); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptIndicatorList = new ArrayList<>(); + deviceDeptNumberList.forEach( + deptNameNumberMap -> { + Map deptIndicatorMap = new HashMap<>(); + int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); + String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); + int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); + deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); + deptIndicatorMap.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + deptIndicatorList.add(deptIndicatorMap); + } + ); + return deptIndicatorList; + } +} diff --git a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java new file mode 100644 index 0000000..8b1209d --- /dev/null +++ b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java @@ -0,0 +1,71 @@ +package com.casic.service.impl; + +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 + */ +@Service +public class InstalledDeviceBuilder { + + private final DeviceTypesConfig deviceTypesConfig; + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + public InstalledDeviceBuilder(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, + TiltDataMapper tiltDataMapper, DeviceTypesConfig deviceTypesConfig) { + this.smartwellDataMapper = smartwellDataMapper; + this.cmsDataMapper = cmsDataMapper; + this.tiltDataMapper = tiltDataMapper; + this.deviceTypesConfig = deviceTypesConfig; + } + + public List> InstalledDeviceManger() { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + List> installedDeviceList = new ArrayList<>(); + cmsInstalledDevice(installedDeviceList); + tiltInstalledDevice(installedDeviceList); + smartwellInstalledDevice(installedDeviceList, deviceTypeList); + return installedDeviceList; + } + + private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); + installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); + installedDeviceList.add(installedDeviceMap); + } + } + + private void cmsInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); + installedDeviceMap.put("typeName", "电子标识器"); + installedDeviceList.add(installedDeviceMap); + } + + private void tiltInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); + installedDeviceMap.put("typeName", "云台"); + installedDeviceList.add(installedDeviceMap); + } +} diff --git a/src/main/java/com/casic/service/impl/KindsAlarmBulider.java b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java new file mode 100644 index 0000000..82df147 --- /dev/null +++ b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java @@ -0,0 +1,75 @@ +package com.casic.service.impl; + +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component +public class KindsAlarmBulider { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + private final DeviceTypesConfig deviceTypesConfig; + + private final DecimalFormat df = new DecimalFormat("0.00%"); + + public KindsAlarmBulider(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper,DeviceTypesConfig deviceTypesConfig) { + this.smartwellDataMapper = smartwellDataMapper; + this.tiltDataMapper = tiltDataMapper; + this.deviceTypesConfig=deviceTypesConfig; + } + + public List> alarmTypeManger(String beginTime, String endTime) { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + Map typeNameMap = smartwellDeviceType(); + List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap,deviceTypeList); + calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); + return rateDeviceList; + } + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } + + private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap,String[] deviceTypeList) { + List> rateDeviceList = new ArrayList<>(); + List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); + Map alarmCountMap = alarmCountList.stream().collect( + Collectors.toMap( + e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) + ) + ); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map rateDeviceMap = new HashMap<>(); + Integer totalAlarm = deviceCountMap.containsKey(deviceType)?Integer.valueOf(deviceCountMap.get(deviceType)):0; + Integer alarmCount=alarmCountMap.containsKey(deviceType)?Integer.valueOf(alarmCountMap.get(deviceType)):0; + rateDeviceMap.put("rate", totalAlarm==0?"0.00%":df.format(Double.valueOf(alarmCount)/totalAlarm)); + rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); + rateDeviceList.add(rateDeviceMap); + } + return rateDeviceList; + } + + private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { + Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); + Integer totalAlarm = tiltDataMapper.countColudDevice(); + Map rateDeviceMap = new HashMap<>(); + rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : df.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", "云台"); + rateDeviceList.add(rateDeviceMap); + } +} diff --git a/src/main/java/com/casic/service/impl/MapDataServiceImpl.java b/src/main/java/com/casic/service/impl/MapDataServiceImpl.java new file mode 100644 index 0000000..c2640ab --- /dev/null +++ b/src/main/java/com/casic/service/impl/MapDataServiceImpl.java @@ -0,0 +1,113 @@ +package com.casic.service.impl; + +import com.casic.dao.smartwell.MapDataMapper; +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import com.casic.model.ResponseData; +import com.casic.service.MapDataService; +import com.casic.util.DeviceDataFieldTableEnum; +import com.casic.util.DeviceDataTableEnum; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Slf4j +@Service +public class MapDataServiceImpl implements MapDataService { + + @Autowired + private MapDataMapper mapDataMapper; + + @Override + public Object getNowAlarmRecords() { + ResponseData responseData = new ResponseData(); + try { + List alarmNowViewList = this.mapDataMapper.getNowAlarmRecords(); + for (AlarmNowView alarmNowView : alarmNowViewList) { + alarmNowView.setWellTypeName(mapDataMapper.getDictNameByCode(alarmNowView.getWellType())); + } + responseData.setData(alarmNowViewList); + responseData.setCode(200); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:最新报警记录查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + + @Override + public Object getWellList(String keywords, String wellType, String deptid, String isAlarm) { + + ResponseData responseData = new ResponseData(); + try { + List wellList = new ArrayList<>(); + if (null == isAlarm || isAlarm.equals("") == true) { + // 查询并添加当前部门的闸井 + List myList = mapDataMapper.getWellList(keywords, wellType, deptid); + if (null != myList && myList.isEmpty() == false) { + wellList.addAll(myList); + } + } else if (isAlarm.equals("1")) { + // isAlarm = 1 查询所有报警状态的闸井 + wellList = mapDataMapper.getAlarmWellList(keywords, wellType, deptid); + } else { + // isAlarm = 0 查询所有不是报警状态的闸井 + wellList = mapDataMapper.getNotAlarmWellList(keywords, wellType, deptid); + } + responseData.setData(wellList); + responseData.setCode(200); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:点位记录列表查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + public Object getWellInfo(String devcode,String deviceType){ + ResponseData responseData = new ResponseData(); + try { + DeviceDataTableEnum deviceDataTableEnum = DeviceDataTableEnum.DEVICE_TYPE_TABLE.getTableNameMap().get(Integer.valueOf(deviceType)); + String tableName = deviceDataTableEnum.getTableName(); + List> wellInfoList=new ArrayList<>(); + if(deviceType.equals("10")){ + String [] tableNameList=tableName.split(","); + + for(String tableNames:tableNameList){ + Map wellInfoMap=mapDataMapper.getDeviceStatus(devcode,tableNames, + DeviceDataFieldTableEnum.TABLE_FIELD.getTableFieldMap().get(tableName)); + if(!wellInfoMap.containsKey("dataValue")){ + wellInfoMap.put("dataValue",0.0); + } + wellInfoList.add(wellInfoMap); + } + }else { + Map wellInfoMap=mapDataMapper.getDeviceStatus(devcode,tableName, + DeviceDataFieldTableEnum.TABLE_FIELD.getTableFieldMap().get(tableName)); + if(!wellInfoMap.containsKey("dataValue")){ + wellInfoMap.put("dataValue",0.0); + } + wellInfoList.add(wellInfoMap); + } + responseData.setData(wellInfoList); + responseData.setCode(200); + responseData.setSuccess(true); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:点位详情查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + +} diff --git a/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java b/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java new file mode 100644 index 0000000..1946ee3 --- /dev/null +++ b/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java @@ -0,0 +1,60 @@ +package com.casic.service.impl; + +import com.casic.dao.cms.CmsDataMapper; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +public class OperationalStatusBuilder { + + private final DecimalFormat df = new DecimalFormat("0.00%"); + private final CmsDataMapper cmsDataMapper; + + public OperationalStatusBuilder(CmsDataMapper cmsDataMapper) { + this.cmsDataMapper = cmsDataMapper; + } + + public List> OperationalStatusProvider(String beginTime, String endTime) { + List> operaStatusList = getWorkOrder(beginTime,endTime); + operaStatusList.add(getTask(beginTime,endTime)); + operaStatusList.add(getEvent(beginTime,endTime)); + return operaStatusList; + } + + private Map getTask(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalTask(beginTime,endTime); + Map taskMap = new HashMap<>(); + taskMap.put("type", "运维任务"); + taskMap.put("count", String.valueOf(initTask)); + return taskMap; + } + + private List> getWorkOrder(String beginTime, String endTime) { + List> operaStatusList = new ArrayList<>(); + Integer initTask = cmsDataMapper.getTotalWorkOrder(beginTime,endTime); + Map workPageMap = new HashMap<>(); + workPageMap.put("type", "运维工单"); + workPageMap.put("count", String.valueOf(initTask)); + Integer completeTask = cmsDataMapper.getCompleteWorkOrder(beginTime,endTime); + Map completeMap = new HashMap<>(); + completeMap.put("type", "运维完结"); + completeMap.put("count", df.format(Double.valueOf(completeTask) / initTask)); + operaStatusList.add(completeMap); + operaStatusList.add(workPageMap); + return operaStatusList; + } + + private Map getEvent(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalEvent(beginTime,endTime); + Map eventMap = new HashMap<>(); + eventMap.put("type", "运维事件"); + eventMap.put("count", String.valueOf(initTask)); + return eventMap; + } + +} diff --git a/src/main/java/com/casic/service/impl/ScreenDataManger.java b/src/main/java/com/casic/service/impl/ScreenDataManger.java new file mode 100644 index 0000000..6a56a43 --- /dev/null +++ b/src/main/java/com/casic/service/impl/ScreenDataManger.java @@ -0,0 +1,170 @@ +package com.casic.service.impl; + +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.model.ResponseData; +import com.casic.service.ScreenDataService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class ScreenDataManger implements ScreenDataService { + @Autowired + private InstalledDeviceBuilder installedDeviceBuilder; + @Autowired + private KindsAlarmBulider kindsAlarmBulider; + @Autowired + private HealthIndicatorsBuilder healthIndicatorsBuilder; + @Autowired + private DeptTimeSpanBuilder deptTimeSpanBuilder; + @Autowired + private OperationalStatusBuilder operStatusBuilder; + + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + public ScreenDataManger(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, TiltDataMapper tiltDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + this.cmsDataMapper = cmsDataMapper; + this.tiltDataMapper = tiltDataMapper; + } + + public Object getInstalledDevice(String beginTime, String endTime) { + List> installedDeviceList = null; + try { + installedDeviceList = installedDeviceBuilder.InstalledDeviceManger(); + } catch (DataAccessException dex) { + log.error("主题:查询已安装设备的类型和个数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return installedDeviceList; + } + + public Object getKindsAlarmRate(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = kindsAlarmBulider.alarmTypeManger(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:统计汇总各管线权属单位下的燃气管线总长度出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + List> recordsRoadList = null; + try { + recordsRoadList = tiltDataMapper.countColudAlarmRecords(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:显示云台的报警信息出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return recordsRoadList; + } + + public Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime) { + Map healthRoadIndtorMap = null; + try { + healthRoadIndtorMap = healthIndicatorsBuilder.healthRoadIndicatorProvider(isSort,limitNum,beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:以道路维度查看健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return healthRoadIndtorMap; + } + + public Object getDeptTimeSpan(String beginTime, String endTime) { + List> deptTimeSpanList = null; + try { + deptTimeSpanList = deptTimeSpanBuilder.deptTimeSpanProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:按权属单位来汇总,各个权属单位下的燃气管线连续正常运行的时长出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return deptTimeSpanList; + } + + public Object getHealthIndicator(String beginTime, String endTime) { + List> healthIndictorList = null; + try { + healthIndictorList = healthIndicatorsBuilder.healthIndicatorProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return healthIndictorList; + } + + public Object getDeptIndicator(String beginTime, String endTime) { + List> healthIndictorList = null; + try { + healthIndictorList = healthIndicatorsBuilder.deptIndicatorProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:权属单位维度健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return healthIndictorList; + } + + public Object getDeviceList(String beginTime, String endTime) { + List> alarmDeviceList = null; + try { + alarmDeviceList = smartwellDataMapper.getAlarmDeviceList(); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + alarmDeviceList.forEach( + alarmDevice -> { + alarmDevice.put("isAlarm", alarmDevice.containsKey("isAlarm") ? "1" : "0"); + alarmDevice.put("responsibleDept", deptNameMap.get(String.valueOf(alarmDevice.get("responsibleDept")))); + } + ); + } catch (DataAccessException dex) { + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return alarmDeviceList; + } + + public Object getOperationalStatus(String beginTime, String endTime) { + + ResponseData responseData = new ResponseData(); + try { + List> operaStatusList = operStatusBuilder.OperationalStatusProvider(beginTime, endTime); + responseData.setSuccess(true); + responseData.setCode(200); + responseData.setMessage("查询成功"); + responseData.setData(operaStatusList); + } catch (DataAccessException dex) { + log.error("主题:运维情况查询出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = smartwellDataMapper.countAlarmByRoad(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:以道路的维度统计燃气管线监控中的报警情况出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + public Object getInspectRoad(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = cmsDataMapper.countElectronicTask(); + } catch (DataAccessException dex) { + log.error("主题:汇总显示个道路的巡检运维次数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + +} diff --git a/src/main/java/com/casic/util/DeviceDataFieldTableEnum.java b/src/main/java/com/casic/util/DeviceDataFieldTableEnum.java new file mode 100644 index 0000000..5fd7a56 --- /dev/null +++ b/src/main/java/com/casic/util/DeviceDataFieldTableEnum.java @@ -0,0 +1,37 @@ +package com.casic.util; + +import java.util.HashMap; +import java.util.Map; + +public enum DeviceDataFieldTableEnum { + + TABLE_FIELD(new HashMap() { + { + put("data_dig", "ddata AS dataValue"); + put("data_gas", "strength AS dataValue"); + put("data_gasliquid_gas", "strength AS dataValue"); + put("data_gasliquid_liquid", "liquiddata AS dataValue"); + put("data_gas_dector", "gas_sample_value AS dataValue"); + put("data_harmful_gas", "CONCAT(CO, ', ', CH4, ', ', H2S, ', ', O2) AS dataValue"); + put("data_hydrant", "0 AS dataValue"); + put("data_liquid", "liquiddata AS dataValue"); + put("data_noise", "ddata AS dataValue"); + put("data_temp_hum", "CONCAT(TEMPERATURE, ', ', HUMIDITY) AS dataValue"); + put("data_tube", "strength AS dataValue"); + put("data_wellcover", "descn AS dataValue"); + put("data_temp_press", "press AS dataValue"); + put("data_pantilt", "concentration AS dataValue"); + put("data_wellcover_loca", "0 AS dataValue"); + put("data_wellplus", "0 AS dataValue"); + put("data_h2s", "stength AS dataValue"); + } + }); + public Map tableNameMap; + + DeviceDataFieldTableEnum(Map tableNameMap) { + this.tableNameMap = tableNameMap; + } + public Map getTableFieldMap() { + return tableNameMap; + } +} diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/casic/controller/MapDataController.java b/src/main/java/com/casic/controller/MapDataController.java new file mode 100644 index 0000000..b897b95 --- /dev/null +++ b/src/main/java/com/casic/controller/MapDataController.java @@ -0,0 +1,47 @@ +package com.casic.controller; + +import com.casic.service.MapDataService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/overview") +public class MapDataController { + + private final MapDataService mapDataService; + + public MapDataController(MapDataService mapDataService) { + this.mapDataService = mapDataService; + } + + /** + * 获取列表 + */ + @RequestMapping(value = "/wellList") + public Object getWellList(@RequestParam(required = false) String keywords, + @RequestParam(required = false) String wellType, + @RequestParam(required = false) String deptid, + @RequestParam(required = false) String isAlarm) { + + return mapDataService.getWellList(keywords,wellType,deptid,isAlarm); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/alarmNow") + public Object alarmNow() { + return mapDataService.getNowAlarmRecords(); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/wellInfo") + public Object getWellInfo(@RequestParam(value = "devcode", required = true) String devcode, + @RequestParam(value = "deviceType", required = true) String deviceType) { + return mapDataService.getWellInfo(devcode,deviceType); + } +} diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java new file mode 100644 index 0000000..04f8d97 --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -0,0 +1,210 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + public ScreenDataController(ScreenDataService screenDataService) { + this.screenDataService = screenDataService; + } + + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/line-length") + public Object getLineLength(String beginTime, String endTime) { +// return screenDataService.getLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + " \"deptName\":\"圣井燃气\",\n" + + " \"totalLength\":440\n" + + " },\n" + + " {\n" + + " \"deptName\":\"华气燃气\",\n" + + " \"totalLength\":810\n" + + " },\n" + + " {\n" + + " \"typeName\":\"中燃燃气\",\n" + + " \"totalLength\":500\n" + + " },\n" + + " {\n" + + " \"typeName\":\"正和燃气\",\n" + + " \"totalLength\":520\n" + + " },\n" + + " {\n" + + " \"typeName\":\"华罚燃气\",\n" + + " \"totalLength\":630\n" + + " }\n" + + " ]"; + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + /** + * 分类汇总燃气管线监管人员的类型和数量 + */ + @RequestMapping("/staff") + public Object getObvserStaff(String beginTime, String endTime) { +// return screenDataService.getObvserStaff(beginTime, endTime); + return "{\n" + + " \t\"总人数\":2022,\n" + + "\t\"staffDataList\":[\n" + + " {\n" + + "\t\t\"岗位名称\":\"管理人员\",\n" + + "\t\t\"总计\":72\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"运维人员\",\n" + + "\t\t\"总计\":874\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"施工人员\",\n" + + "\t\t\"总计\":456\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"统计人员\",\n" + + "\t\t\"总计\":745\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"技术人员\",\n" + + "\t\t\"总计\":455\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"监管人员\",\n" + + "\t\t\"总计\":644\n" + + " }]\n" + + " }"; + } + + /** + * 以道路的维度来统计汇总燃气管线的长度和权属单位 + */ + @RequestMapping("/road-line-length") + public Object getRoadLineLength(String beginTime, String endTime) { +// return screenDataService.getRoadLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + "\t\t\"所属道路\":\"双山西街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"圣井燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"世纪大道\",\n" + + "\t\t\"管线长度/km\":54,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"桃水大街\",\n" + + "\t\t\"管线长度/km\":32,\n" + + "\t\t\"权属单位\":\"中燃燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"鲁态大街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " }\n" + + "]"; + } + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + +// /** +// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/list") +// public Object getDeviceList(String beginTime, String endTime) { +// return screenDataService.getDeviceList(beginTime,endTime); +// } +// +// /** +// * 包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/Info") +// public Object getDeviceInfo(String wellCode,String deviceType) { +// return screenDataService.getDeviceInfo(wellCode,deviceType); +// } + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + /** + * 显示云台的报警信息 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/cms/CmsDataMapper.java b/src/main/java/com/casic/dao/cms/CmsDataMapper.java new file mode 100644 index 0000000..e57975e --- /dev/null +++ b/src/main/java/com/casic/dao/cms/CmsDataMapper.java @@ -0,0 +1,23 @@ +package com.casic.dao.cms; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface CmsDataMapper { + + Integer countElectronicDevice(); + + List> countElectronicTask(); + + Integer getTotalWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getCompleteWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalEvent(@Param("beginTime") String beginTime, @Param("endTime") String endTime); +} diff --git a/src/main/java/com/casic/dao/smartwell/MapDataMapper.java b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java new file mode 100644 index 0000000..8e56978 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java @@ -0,0 +1,25 @@ +package com.casic.dao.smartwell; + +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface MapDataMapper { + + List getWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNotAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNowAlarmRecords(); + + String getDictNameByCode(@Param("wellType") String wellType); + + Map getDeviceStatus(@Param("devcode") String devcode, @Param("tableName") String tableName, @Param("dataField") String dataField); +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java new file mode 100644 index 0000000..0294b14 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -0,0 +1,43 @@ +package com.casic.dao.smartwell; + + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SmartwellDataMapper { + + List> countDeviceByType(); + + List> getTypeName(); + + List> countAlarmType(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getDeviceListByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countDeviceNumber(); + + Integer countAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countDeviceNumberByDept(); + + List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countRoadNumber(); + + List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDeviceList(); + + List> getDeptNameList(); + +} diff --git a/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java new file mode 100644 index 0000000..e6ba279 --- /dev/null +++ b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java @@ -0,0 +1,32 @@ +package com.casic.dao.spantilt; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface TiltDataMapper { + /** + * 已安装设备 + * + * @return + */ + Integer countColudDevice(); + + /** + * 警告 + * + * @return + */ + Integer countColudAlarm(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + + /** + * 云台报警信息 + * + * @return + */ + List> countColudAlarmRecords(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + +} diff --git a/src/main/java/com/casic/model/AlarmNowView.java b/src/main/java/com/casic/model/AlarmNowView.java new file mode 100644 index 0000000..6eebafc --- /dev/null +++ b/src/main/java/com/casic/model/AlarmNowView.java @@ -0,0 +1,108 @@ +package com.casic.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +public class AlarmNowView { + + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date alarmTime; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + +} diff --git a/src/main/java/com/casic/model/BusWellInfo.java b/src/main/java/com/casic/model/BusWellInfo.java new file mode 100644 index 0000000..f4b8eba --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfo.java @@ -0,0 +1,192 @@ +package com.casic.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + //@NotEmpty(message="井深不能为空") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + + /** + * 区域 + */ + private String road; + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + + + /** + * 位置 + */ + private String position; + /** + * 部门编号 + */ + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; +// /** +// * 责任人 +// */ +// @TableField("STAFF") +// private String staff; +// /** +// * 电话 +// */ +// @TableField("TEL") +// private String tel; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/src/main/java/com/casic/model/BusWellInfoDto.java b/src/main/java/com/casic/model/BusWellInfoDto.java new file mode 100644 index 0000000..48610f2 --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfoDto.java @@ -0,0 +1,276 @@ +package com.casic.model; + + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class BusWellInfoDto { + private Long id; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + private String deviceType; + private String deptid; + private String deptName; + private Float deep; + private String position; + private String coordinateX; + private String coordinateY; + private String lngBaidu; + private String latBaidu; + private String lngGaode; + private String latGaode; + private String photos; + private String notes; + private String bfzt; + private String bfztName; + private String area; + private String staff; + private String tel; + private String valid; + private String ts; + private List watchData; + + Map map = new HashMap(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + map.put("id", id); + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + map.put("wellCode", wellCode); + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + map.put("wellName", wellName); + } + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + map.put("deviceType", deviceType); + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + map.put("wellType", wellType); + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + map.put("wellTypeName", wellTypeName); + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + map.put("deptid", deptid); + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + map.put("deptName", deptName); + } + + public Float getDeep() { + return deep; + } + + public void setDeep(Float deep) { + this.deep = deep; + map.put("deep", deep); + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + map.put("position", position); + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + map.put("coordinateX", coordinateX); + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + map.put("coordinateY", coordinateY); + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + map.put("lngBaidu", lngBaidu); + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + map.put("latBaidu", latBaidu); + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + map.put("lngGaode", lngGaode); + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + map.put("latGaode", latGaode); + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + map.put("photos", photos); + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + map.put("notes", notes); + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + map.put("bfzt", bfzt); + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + map.put("bfztName", bfztName); + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + map.put("area", area); + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + map.put("staff", staff); + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + map.put("tel", tel); + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + map.put("valid", valid); + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + map.put("ts", ts); + } + + public List getWatchData() { + return watchData; + } + + public void setWatchData(List watchData) { + this.watchData = watchData; + map.put("watchData", watchData); + } + + public Map toMap() { + return map; + } +} diff --git a/src/main/java/com/casic/model/ResponseData.java b/src/main/java/com/casic/model/ResponseData.java new file mode 100644 index 0000000..356775a --- /dev/null +++ b/src/main/java/com/casic/model/ResponseData.java @@ -0,0 +1,19 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Boolean success; + private Integer code; + private String message; + private Object data; +} \ No newline at end of file diff --git a/src/main/java/com/casic/model/WatchDataDto.java b/src/main/java/com/casic/model/WatchDataDto.java new file mode 100644 index 0000000..d50cfb5 --- /dev/null +++ b/src/main/java/com/casic/model/WatchDataDto.java @@ -0,0 +1,32 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author lenovo + */ +@Data +public class WatchDataDto implements Cloneable{ + + private Long deviceId; + private String devcode; + private String installDate; + private String onlineState; + private String onlineStateName; + private String watchType; + private String type; // 地图总览时使用 + private String data = ""; + private String value = ""; // 地图总览时使用 + private String logtime = "";//数据更新时间(设备上报时间) + + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/casic/service/MapDataService.java b/src/main/java/com/casic/service/MapDataService.java new file mode 100644 index 0000000..5f77810 --- /dev/null +++ b/src/main/java/com/casic/service/MapDataService.java @@ -0,0 +1,12 @@ +package com.casic.service; + + +public interface MapDataService { + + Object getWellList(String keywords, String wellType, String deptid, String isAlarm); + + Object getNowAlarmRecords(); + + Object getWellInfo(String devcode,String deviceType); + +} diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java new file mode 100644 index 0000000..b4dd026 --- /dev/null +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -0,0 +1,27 @@ +package com.casic.service; + +public interface ScreenDataService { + Object getInstalledDevice(String beginTime, String endTime); + + Object getKindsAlarmRate(String beginTime, String endTime); + + Object getAlarmRecordsByStation(String beginTime, String endTime); + + Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + + Object getDeptTimeSpan(String beginTime, String endTime); + + Object getHealthIndicator(String beginTime, String endTime); + + Object getDeptIndicator(String beginTime, String endTime); + + Object getDeviceList(String beginTime, String endTime); + + Object getOperationalStatus(String beginTime, String endTime); + + Object getAlarmRecordsByRoad(String beginTime, String endTime); + + Object getInspectRoad(String beginTime, String endTime); + + +} diff --git a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java new file mode 100644 index 0000000..661018b --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java @@ -0,0 +1,88 @@ +package com.casic.service.impl; + + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class DeptTimeSpanBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00"); + + public DeptTimeSpanBuilder(SmartwellDataMapper smartwellDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + } + + public List> deptTimeSpanProvider(String beginTime, String endTime) { + Map> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = getAlarmDevice(beginTime, endTime); + Map> currentDeviceTimeMap = MergeDeviceSpan(normalDeviceDeptMap, alarmDeviceDeptMap); + List> deptTimeSpanMap = calculateDeptTime(currentDeviceTimeMap); + return deptTimeSpanMap; + } + + private Map> getNormalDevice(String beginTime, String endTime) { + List> normalDeviceList = smartwellDataMapper.getNormalDevice(beginTime, endTime); + Map> normalDeviceDeptMap = normalDeviceList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return normalDeviceDeptMap; + } + + private Map> getAlarmDevice(String beginTime, String endTime) { + List> alarmDeviceDeptList = smartwellDataMapper.getAlarmDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = alarmDeviceDeptList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return alarmDeviceDeptMap; + } + + private Map> MergeDeviceSpan(Map> normalDeviceDeptMap, + Map> alarmDeviceDeptMap) { + for (Map.Entry> normalMap : normalDeviceDeptMap.entrySet()) { + String mapKey = normalMap.getKey(); + Map normalmap = normalMap.getValue(); + if (alarmDeviceDeptMap.containsKey(mapKey)) { + Map alarmMap = alarmDeviceDeptMap.get(mapKey); + for (Map.Entry alarmMapItem : alarmMap.entrySet()) { + String deviceCode = alarmMapItem.getKey(); + normalmap.put(deviceCode, alarmMapItem.getValue()); + } + } + } + return normalDeviceDeptMap; + } + + private List> calculateDeptTime(Map> currentDeviceTimeMap) { + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptTimeSpanList = new ArrayList<>(); + for (Map.Entry> currentDeviceMap : currentDeviceTimeMap.entrySet()) { + String deptid = currentDeviceMap.getKey(); + Map currentDeviceItemMap = currentDeviceMap.getValue(); + Double timeSpan = 0.00; + for (Map.Entry timeMapItem : currentDeviceItemMap.entrySet()) { + timeSpan += StringUtils.isEmpty(timeMapItem.getValue()) || timeMapItem.getValue() == "null" ? 0 : Double.valueOf(timeMapItem.getValue()); + } + Map deptTimeSpanMap = new HashMap<>(); + deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); + deptTimeSpanMap.put("count", df.format(timeSpan)); + deptTimeSpanList.add(deptTimeSpanMap); + } + return deptTimeSpanList; + } + +} diff --git a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java new file mode 100644 index 0000000..ffd0f1b --- /dev/null +++ b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java @@ -0,0 +1,96 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class HealthIndicatorsBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00%"); + + public HealthIndicatorsBuilder(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + this.tiltDataMapper = tiltDataMapper; + } + + + public List> healthIndicatorProvider(String beginTime, String endTime) { + List> healthIndictorList = new ArrayList<>(); + healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); + healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); + return healthIndictorList; + } + + + public List> deptIndicatorProvider(String beginTime, String endTime) { + List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); + List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); + List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); + return deptIndicatorList; + } + + public Map healthRoadIndicatorProvider(String isSort,String limitNum,String beginTime, String endTime) { + return smartwellHealthRoadIndicator(isSort,limitNum,beginTime, endTime); + } + + private Map smartwellHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); + Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); + smartwellHealth.put("typeName", "管网健康指数"); + smartwellHealth.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map tiltHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = tiltDataMapper.countColudDevice(); + Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); + smartwellHealth.put("typeName", "场站健康指数"); + smartwellHealth.put("count", df.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map smartwellHealthRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer roadNumber = smartwellDataMapper.countRoadNumber(); + Integer alarmRoad = smartwellDataMapper.countAlarmRoad(isSort,limitNum,beginTime, endTime); + smartwellHealth.put("typeName", "道路健康指数"); + smartwellHealth.put("count", df.format((Double.valueOf(roadNumber - alarmRoad)) / roadNumber)); + return smartwellHealth; + } + + private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { + Map alarmDeptMap = alarmDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) + ); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptIndicatorList = new ArrayList<>(); + deviceDeptNumberList.forEach( + deptNameNumberMap -> { + Map deptIndicatorMap = new HashMap<>(); + int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); + String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); + int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); + deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); + deptIndicatorMap.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + deptIndicatorList.add(deptIndicatorMap); + } + ); + return deptIndicatorList; + } +} diff --git a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java new file mode 100644 index 0000000..8b1209d --- /dev/null +++ b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java @@ -0,0 +1,71 @@ +package com.casic.service.impl; + +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 + */ +@Service +public class InstalledDeviceBuilder { + + private final DeviceTypesConfig deviceTypesConfig; + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + public InstalledDeviceBuilder(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, + TiltDataMapper tiltDataMapper, DeviceTypesConfig deviceTypesConfig) { + this.smartwellDataMapper = smartwellDataMapper; + this.cmsDataMapper = cmsDataMapper; + this.tiltDataMapper = tiltDataMapper; + this.deviceTypesConfig = deviceTypesConfig; + } + + public List> InstalledDeviceManger() { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + List> installedDeviceList = new ArrayList<>(); + cmsInstalledDevice(installedDeviceList); + tiltInstalledDevice(installedDeviceList); + smartwellInstalledDevice(installedDeviceList, deviceTypeList); + return installedDeviceList; + } + + private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); + installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); + installedDeviceList.add(installedDeviceMap); + } + } + + private void cmsInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); + installedDeviceMap.put("typeName", "电子标识器"); + installedDeviceList.add(installedDeviceMap); + } + + private void tiltInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); + installedDeviceMap.put("typeName", "云台"); + installedDeviceList.add(installedDeviceMap); + } +} diff --git a/src/main/java/com/casic/service/impl/KindsAlarmBulider.java b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java new file mode 100644 index 0000000..82df147 --- /dev/null +++ b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java @@ -0,0 +1,75 @@ +package com.casic.service.impl; + +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component +public class KindsAlarmBulider { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + private final DeviceTypesConfig deviceTypesConfig; + + private final DecimalFormat df = new DecimalFormat("0.00%"); + + public KindsAlarmBulider(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper,DeviceTypesConfig deviceTypesConfig) { + this.smartwellDataMapper = smartwellDataMapper; + this.tiltDataMapper = tiltDataMapper; + this.deviceTypesConfig=deviceTypesConfig; + } + + public List> alarmTypeManger(String beginTime, String endTime) { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + Map typeNameMap = smartwellDeviceType(); + List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap,deviceTypeList); + calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); + return rateDeviceList; + } + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } + + private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap,String[] deviceTypeList) { + List> rateDeviceList = new ArrayList<>(); + List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); + Map alarmCountMap = alarmCountList.stream().collect( + Collectors.toMap( + e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) + ) + ); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map rateDeviceMap = new HashMap<>(); + Integer totalAlarm = deviceCountMap.containsKey(deviceType)?Integer.valueOf(deviceCountMap.get(deviceType)):0; + Integer alarmCount=alarmCountMap.containsKey(deviceType)?Integer.valueOf(alarmCountMap.get(deviceType)):0; + rateDeviceMap.put("rate", totalAlarm==0?"0.00%":df.format(Double.valueOf(alarmCount)/totalAlarm)); + rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); + rateDeviceList.add(rateDeviceMap); + } + return rateDeviceList; + } + + private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { + Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); + Integer totalAlarm = tiltDataMapper.countColudDevice(); + Map rateDeviceMap = new HashMap<>(); + rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : df.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", "云台"); + rateDeviceList.add(rateDeviceMap); + } +} diff --git a/src/main/java/com/casic/service/impl/MapDataServiceImpl.java b/src/main/java/com/casic/service/impl/MapDataServiceImpl.java new file mode 100644 index 0000000..c2640ab --- /dev/null +++ b/src/main/java/com/casic/service/impl/MapDataServiceImpl.java @@ -0,0 +1,113 @@ +package com.casic.service.impl; + +import com.casic.dao.smartwell.MapDataMapper; +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import com.casic.model.ResponseData; +import com.casic.service.MapDataService; +import com.casic.util.DeviceDataFieldTableEnum; +import com.casic.util.DeviceDataTableEnum; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Slf4j +@Service +public class MapDataServiceImpl implements MapDataService { + + @Autowired + private MapDataMapper mapDataMapper; + + @Override + public Object getNowAlarmRecords() { + ResponseData responseData = new ResponseData(); + try { + List alarmNowViewList = this.mapDataMapper.getNowAlarmRecords(); + for (AlarmNowView alarmNowView : alarmNowViewList) { + alarmNowView.setWellTypeName(mapDataMapper.getDictNameByCode(alarmNowView.getWellType())); + } + responseData.setData(alarmNowViewList); + responseData.setCode(200); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:最新报警记录查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + + @Override + public Object getWellList(String keywords, String wellType, String deptid, String isAlarm) { + + ResponseData responseData = new ResponseData(); + try { + List wellList = new ArrayList<>(); + if (null == isAlarm || isAlarm.equals("") == true) { + // 查询并添加当前部门的闸井 + List myList = mapDataMapper.getWellList(keywords, wellType, deptid); + if (null != myList && myList.isEmpty() == false) { + wellList.addAll(myList); + } + } else if (isAlarm.equals("1")) { + // isAlarm = 1 查询所有报警状态的闸井 + wellList = mapDataMapper.getAlarmWellList(keywords, wellType, deptid); + } else { + // isAlarm = 0 查询所有不是报警状态的闸井 + wellList = mapDataMapper.getNotAlarmWellList(keywords, wellType, deptid); + } + responseData.setData(wellList); + responseData.setCode(200); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:点位记录列表查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + public Object getWellInfo(String devcode,String deviceType){ + ResponseData responseData = new ResponseData(); + try { + DeviceDataTableEnum deviceDataTableEnum = DeviceDataTableEnum.DEVICE_TYPE_TABLE.getTableNameMap().get(Integer.valueOf(deviceType)); + String tableName = deviceDataTableEnum.getTableName(); + List> wellInfoList=new ArrayList<>(); + if(deviceType.equals("10")){ + String [] tableNameList=tableName.split(","); + + for(String tableNames:tableNameList){ + Map wellInfoMap=mapDataMapper.getDeviceStatus(devcode,tableNames, + DeviceDataFieldTableEnum.TABLE_FIELD.getTableFieldMap().get(tableName)); + if(!wellInfoMap.containsKey("dataValue")){ + wellInfoMap.put("dataValue",0.0); + } + wellInfoList.add(wellInfoMap); + } + }else { + Map wellInfoMap=mapDataMapper.getDeviceStatus(devcode,tableName, + DeviceDataFieldTableEnum.TABLE_FIELD.getTableFieldMap().get(tableName)); + if(!wellInfoMap.containsKey("dataValue")){ + wellInfoMap.put("dataValue",0.0); + } + wellInfoList.add(wellInfoMap); + } + responseData.setData(wellInfoList); + responseData.setCode(200); + responseData.setSuccess(true); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:点位详情查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + +} diff --git a/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java b/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java new file mode 100644 index 0000000..1946ee3 --- /dev/null +++ b/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java @@ -0,0 +1,60 @@ +package com.casic.service.impl; + +import com.casic.dao.cms.CmsDataMapper; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +public class OperationalStatusBuilder { + + private final DecimalFormat df = new DecimalFormat("0.00%"); + private final CmsDataMapper cmsDataMapper; + + public OperationalStatusBuilder(CmsDataMapper cmsDataMapper) { + this.cmsDataMapper = cmsDataMapper; + } + + public List> OperationalStatusProvider(String beginTime, String endTime) { + List> operaStatusList = getWorkOrder(beginTime,endTime); + operaStatusList.add(getTask(beginTime,endTime)); + operaStatusList.add(getEvent(beginTime,endTime)); + return operaStatusList; + } + + private Map getTask(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalTask(beginTime,endTime); + Map taskMap = new HashMap<>(); + taskMap.put("type", "运维任务"); + taskMap.put("count", String.valueOf(initTask)); + return taskMap; + } + + private List> getWorkOrder(String beginTime, String endTime) { + List> operaStatusList = new ArrayList<>(); + Integer initTask = cmsDataMapper.getTotalWorkOrder(beginTime,endTime); + Map workPageMap = new HashMap<>(); + workPageMap.put("type", "运维工单"); + workPageMap.put("count", String.valueOf(initTask)); + Integer completeTask = cmsDataMapper.getCompleteWorkOrder(beginTime,endTime); + Map completeMap = new HashMap<>(); + completeMap.put("type", "运维完结"); + completeMap.put("count", df.format(Double.valueOf(completeTask) / initTask)); + operaStatusList.add(completeMap); + operaStatusList.add(workPageMap); + return operaStatusList; + } + + private Map getEvent(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalEvent(beginTime,endTime); + Map eventMap = new HashMap<>(); + eventMap.put("type", "运维事件"); + eventMap.put("count", String.valueOf(initTask)); + return eventMap; + } + +} diff --git a/src/main/java/com/casic/service/impl/ScreenDataManger.java b/src/main/java/com/casic/service/impl/ScreenDataManger.java new file mode 100644 index 0000000..6a56a43 --- /dev/null +++ b/src/main/java/com/casic/service/impl/ScreenDataManger.java @@ -0,0 +1,170 @@ +package com.casic.service.impl; + +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.model.ResponseData; +import com.casic.service.ScreenDataService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class ScreenDataManger implements ScreenDataService { + @Autowired + private InstalledDeviceBuilder installedDeviceBuilder; + @Autowired + private KindsAlarmBulider kindsAlarmBulider; + @Autowired + private HealthIndicatorsBuilder healthIndicatorsBuilder; + @Autowired + private DeptTimeSpanBuilder deptTimeSpanBuilder; + @Autowired + private OperationalStatusBuilder operStatusBuilder; + + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + public ScreenDataManger(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, TiltDataMapper tiltDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + this.cmsDataMapper = cmsDataMapper; + this.tiltDataMapper = tiltDataMapper; + } + + public Object getInstalledDevice(String beginTime, String endTime) { + List> installedDeviceList = null; + try { + installedDeviceList = installedDeviceBuilder.InstalledDeviceManger(); + } catch (DataAccessException dex) { + log.error("主题:查询已安装设备的类型和个数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return installedDeviceList; + } + + public Object getKindsAlarmRate(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = kindsAlarmBulider.alarmTypeManger(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:统计汇总各管线权属单位下的燃气管线总长度出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + List> recordsRoadList = null; + try { + recordsRoadList = tiltDataMapper.countColudAlarmRecords(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:显示云台的报警信息出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return recordsRoadList; + } + + public Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime) { + Map healthRoadIndtorMap = null; + try { + healthRoadIndtorMap = healthIndicatorsBuilder.healthRoadIndicatorProvider(isSort,limitNum,beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:以道路维度查看健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return healthRoadIndtorMap; + } + + public Object getDeptTimeSpan(String beginTime, String endTime) { + List> deptTimeSpanList = null; + try { + deptTimeSpanList = deptTimeSpanBuilder.deptTimeSpanProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:按权属单位来汇总,各个权属单位下的燃气管线连续正常运行的时长出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return deptTimeSpanList; + } + + public Object getHealthIndicator(String beginTime, String endTime) { + List> healthIndictorList = null; + try { + healthIndictorList = healthIndicatorsBuilder.healthIndicatorProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return healthIndictorList; + } + + public Object getDeptIndicator(String beginTime, String endTime) { + List> healthIndictorList = null; + try { + healthIndictorList = healthIndicatorsBuilder.deptIndicatorProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:权属单位维度健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return healthIndictorList; + } + + public Object getDeviceList(String beginTime, String endTime) { + List> alarmDeviceList = null; + try { + alarmDeviceList = smartwellDataMapper.getAlarmDeviceList(); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + alarmDeviceList.forEach( + alarmDevice -> { + alarmDevice.put("isAlarm", alarmDevice.containsKey("isAlarm") ? "1" : "0"); + alarmDevice.put("responsibleDept", deptNameMap.get(String.valueOf(alarmDevice.get("responsibleDept")))); + } + ); + } catch (DataAccessException dex) { + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return alarmDeviceList; + } + + public Object getOperationalStatus(String beginTime, String endTime) { + + ResponseData responseData = new ResponseData(); + try { + List> operaStatusList = operStatusBuilder.OperationalStatusProvider(beginTime, endTime); + responseData.setSuccess(true); + responseData.setCode(200); + responseData.setMessage("查询成功"); + responseData.setData(operaStatusList); + } catch (DataAccessException dex) { + log.error("主题:运维情况查询出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = smartwellDataMapper.countAlarmByRoad(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:以道路的维度统计燃气管线监控中的报警情况出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + public Object getInspectRoad(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = cmsDataMapper.countElectronicTask(); + } catch (DataAccessException dex) { + log.error("主题:汇总显示个道路的巡检运维次数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + +} diff --git a/src/main/java/com/casic/util/DeviceDataFieldTableEnum.java b/src/main/java/com/casic/util/DeviceDataFieldTableEnum.java new file mode 100644 index 0000000..5fd7a56 --- /dev/null +++ b/src/main/java/com/casic/util/DeviceDataFieldTableEnum.java @@ -0,0 +1,37 @@ +package com.casic.util; + +import java.util.HashMap; +import java.util.Map; + +public enum DeviceDataFieldTableEnum { + + TABLE_FIELD(new HashMap() { + { + put("data_dig", "ddata AS dataValue"); + put("data_gas", "strength AS dataValue"); + put("data_gasliquid_gas", "strength AS dataValue"); + put("data_gasliquid_liquid", "liquiddata AS dataValue"); + put("data_gas_dector", "gas_sample_value AS dataValue"); + put("data_harmful_gas", "CONCAT(CO, ', ', CH4, ', ', H2S, ', ', O2) AS dataValue"); + put("data_hydrant", "0 AS dataValue"); + put("data_liquid", "liquiddata AS dataValue"); + put("data_noise", "ddata AS dataValue"); + put("data_temp_hum", "CONCAT(TEMPERATURE, ', ', HUMIDITY) AS dataValue"); + put("data_tube", "strength AS dataValue"); + put("data_wellcover", "descn AS dataValue"); + put("data_temp_press", "press AS dataValue"); + put("data_pantilt", "concentration AS dataValue"); + put("data_wellcover_loca", "0 AS dataValue"); + put("data_wellplus", "0 AS dataValue"); + put("data_h2s", "stength AS dataValue"); + } + }); + public Map tableNameMap; + + DeviceDataFieldTableEnum(Map tableNameMap) { + this.tableNameMap = tableNameMap; + } + public Map getTableFieldMap() { + return tableNameMap; + } +} diff --git a/src/main/java/com/casic/util/DeviceDataTableEnum.java b/src/main/java/com/casic/util/DeviceDataTableEnum.java new file mode 100644 index 0000000..a67ad6d --- /dev/null +++ b/src/main/java/com/casic/util/DeviceDataTableEnum.java @@ -0,0 +1,76 @@ +package com.casic.util; + +import java.util.HashMap; + +/** + * @author cz + * @date 2022-7-15 + * 上传数据总记录数 + */ +public enum DeviceDataTableEnum { + + DATA_DIG("data_dig", "井盖状态监测仪"), + DATA_GAS("data_gas", "液位监测仪"), + DATA_GASLIQUID("data_gasliquid_gas,data_gasliquid_liquid", "有害气体监测仪"), + DATA_GAS_DECTOR("data_gas_dector", "燃气智能监测终端"), + DATA_HARMFUL_GAS("data_harmful_gas", "温湿度监测仪"), + DATA_HYDRANT("data_hydrant", "开挖监测仪"), + DATA_LIQUID("data_liquid", "井盖定位监测仪"), + DATA_NOISE("data_noise", "噪声记录仪"), + DATA_PANTILT("data_pantilt", "温度压力监测仪"), + DATA_TEMP_HUM("data_temp_hum", "燃气智能监测终端(一体化)"), + DATA_TUBE("data_tube", "消防栓防盗水监测仪"), + DATA_WELLCOVER("data_wellcover", "管盯"), + DATA_WELLCOVER_DATA("data_temp_press", "井盖液位一体机"), + DATA_WELLCOVER_LOCA("data_wellcover_loca", "硫化氢检测终端"), + DATA_WELLPLUS("data_wellplus", "激光甲烷云台"), + DATA_H2S("data_h2s", "可燃气体"), + DEVICE_TYPE_TABLE(new HashMap() {{ + put(1, DATA_WELLCOVER); + put(2, DATA_LIQUID); + put(3, DATA_HARMFUL_GAS); + put(4, DATA_GAS); + put(5, DATA_TEMP_HUM); + put(6, DATA_DIG); + put(7, DATA_WELLCOVER_LOCA); + put(8, DATA_NOISE); + put(9, DATA_WELLCOVER_DATA); + put(10, DATA_GASLIQUID); + put(11, DATA_HYDRANT); + put(12, DATA_TUBE); + put(13, DATA_WELLPLUS); + put(14, DATA_H2S); + put(21, DATA_PANTILT); + put(101, DATA_GAS_DECTOR); + } + }); + + String typeName; + String tableName; + + DeviceDataTableEnum(String tableName, String typeName) { + this.typeName = typeName; + this.tableName = tableName; + } + + public String getTypeName() { + return typeName; + } + + public String getTableName() { + return tableName; + } + + + public HashMap tableNameMap; + + DeviceDataTableEnum(HashMap tableNameMap) { + this.tableNameMap = tableNameMap; + } + + public HashMap getTableNameMap() { + return tableNameMap; + } + + +} diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/casic/controller/MapDataController.java b/src/main/java/com/casic/controller/MapDataController.java new file mode 100644 index 0000000..b897b95 --- /dev/null +++ b/src/main/java/com/casic/controller/MapDataController.java @@ -0,0 +1,47 @@ +package com.casic.controller; + +import com.casic.service.MapDataService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/overview") +public class MapDataController { + + private final MapDataService mapDataService; + + public MapDataController(MapDataService mapDataService) { + this.mapDataService = mapDataService; + } + + /** + * 获取列表 + */ + @RequestMapping(value = "/wellList") + public Object getWellList(@RequestParam(required = false) String keywords, + @RequestParam(required = false) String wellType, + @RequestParam(required = false) String deptid, + @RequestParam(required = false) String isAlarm) { + + return mapDataService.getWellList(keywords,wellType,deptid,isAlarm); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/alarmNow") + public Object alarmNow() { + return mapDataService.getNowAlarmRecords(); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/wellInfo") + public Object getWellInfo(@RequestParam(value = "devcode", required = true) String devcode, + @RequestParam(value = "deviceType", required = true) String deviceType) { + return mapDataService.getWellInfo(devcode,deviceType); + } +} diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java new file mode 100644 index 0000000..04f8d97 --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -0,0 +1,210 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + public ScreenDataController(ScreenDataService screenDataService) { + this.screenDataService = screenDataService; + } + + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/line-length") + public Object getLineLength(String beginTime, String endTime) { +// return screenDataService.getLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + " \"deptName\":\"圣井燃气\",\n" + + " \"totalLength\":440\n" + + " },\n" + + " {\n" + + " \"deptName\":\"华气燃气\",\n" + + " \"totalLength\":810\n" + + " },\n" + + " {\n" + + " \"typeName\":\"中燃燃气\",\n" + + " \"totalLength\":500\n" + + " },\n" + + " {\n" + + " \"typeName\":\"正和燃气\",\n" + + " \"totalLength\":520\n" + + " },\n" + + " {\n" + + " \"typeName\":\"华罚燃气\",\n" + + " \"totalLength\":630\n" + + " }\n" + + " ]"; + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + /** + * 分类汇总燃气管线监管人员的类型和数量 + */ + @RequestMapping("/staff") + public Object getObvserStaff(String beginTime, String endTime) { +// return screenDataService.getObvserStaff(beginTime, endTime); + return "{\n" + + " \t\"总人数\":2022,\n" + + "\t\"staffDataList\":[\n" + + " {\n" + + "\t\t\"岗位名称\":\"管理人员\",\n" + + "\t\t\"总计\":72\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"运维人员\",\n" + + "\t\t\"总计\":874\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"施工人员\",\n" + + "\t\t\"总计\":456\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"统计人员\",\n" + + "\t\t\"总计\":745\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"技术人员\",\n" + + "\t\t\"总计\":455\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"监管人员\",\n" + + "\t\t\"总计\":644\n" + + " }]\n" + + " }"; + } + + /** + * 以道路的维度来统计汇总燃气管线的长度和权属单位 + */ + @RequestMapping("/road-line-length") + public Object getRoadLineLength(String beginTime, String endTime) { +// return screenDataService.getRoadLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + "\t\t\"所属道路\":\"双山西街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"圣井燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"世纪大道\",\n" + + "\t\t\"管线长度/km\":54,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"桃水大街\",\n" + + "\t\t\"管线长度/km\":32,\n" + + "\t\t\"权属单位\":\"中燃燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"鲁态大街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " }\n" + + "]"; + } + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + +// /** +// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/list") +// public Object getDeviceList(String beginTime, String endTime) { +// return screenDataService.getDeviceList(beginTime,endTime); +// } +// +// /** +// * 包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/Info") +// public Object getDeviceInfo(String wellCode,String deviceType) { +// return screenDataService.getDeviceInfo(wellCode,deviceType); +// } + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + /** + * 显示云台的报警信息 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/cms/CmsDataMapper.java b/src/main/java/com/casic/dao/cms/CmsDataMapper.java new file mode 100644 index 0000000..e57975e --- /dev/null +++ b/src/main/java/com/casic/dao/cms/CmsDataMapper.java @@ -0,0 +1,23 @@ +package com.casic.dao.cms; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface CmsDataMapper { + + Integer countElectronicDevice(); + + List> countElectronicTask(); + + Integer getTotalWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getCompleteWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalEvent(@Param("beginTime") String beginTime, @Param("endTime") String endTime); +} diff --git a/src/main/java/com/casic/dao/smartwell/MapDataMapper.java b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java new file mode 100644 index 0000000..8e56978 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java @@ -0,0 +1,25 @@ +package com.casic.dao.smartwell; + +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface MapDataMapper { + + List getWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNotAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNowAlarmRecords(); + + String getDictNameByCode(@Param("wellType") String wellType); + + Map getDeviceStatus(@Param("devcode") String devcode, @Param("tableName") String tableName, @Param("dataField") String dataField); +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java new file mode 100644 index 0000000..0294b14 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -0,0 +1,43 @@ +package com.casic.dao.smartwell; + + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SmartwellDataMapper { + + List> countDeviceByType(); + + List> getTypeName(); + + List> countAlarmType(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getDeviceListByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countDeviceNumber(); + + Integer countAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countDeviceNumberByDept(); + + List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countRoadNumber(); + + List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDeviceList(); + + List> getDeptNameList(); + +} diff --git a/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java new file mode 100644 index 0000000..e6ba279 --- /dev/null +++ b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java @@ -0,0 +1,32 @@ +package com.casic.dao.spantilt; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface TiltDataMapper { + /** + * 已安装设备 + * + * @return + */ + Integer countColudDevice(); + + /** + * 警告 + * + * @return + */ + Integer countColudAlarm(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + + /** + * 云台报警信息 + * + * @return + */ + List> countColudAlarmRecords(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + +} diff --git a/src/main/java/com/casic/model/AlarmNowView.java b/src/main/java/com/casic/model/AlarmNowView.java new file mode 100644 index 0000000..6eebafc --- /dev/null +++ b/src/main/java/com/casic/model/AlarmNowView.java @@ -0,0 +1,108 @@ +package com.casic.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +public class AlarmNowView { + + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date alarmTime; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + +} diff --git a/src/main/java/com/casic/model/BusWellInfo.java b/src/main/java/com/casic/model/BusWellInfo.java new file mode 100644 index 0000000..f4b8eba --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfo.java @@ -0,0 +1,192 @@ +package com.casic.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + //@NotEmpty(message="井深不能为空") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + + /** + * 区域 + */ + private String road; + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + + + /** + * 位置 + */ + private String position; + /** + * 部门编号 + */ + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; +// /** +// * 责任人 +// */ +// @TableField("STAFF") +// private String staff; +// /** +// * 电话 +// */ +// @TableField("TEL") +// private String tel; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/src/main/java/com/casic/model/BusWellInfoDto.java b/src/main/java/com/casic/model/BusWellInfoDto.java new file mode 100644 index 0000000..48610f2 --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfoDto.java @@ -0,0 +1,276 @@ +package com.casic.model; + + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class BusWellInfoDto { + private Long id; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + private String deviceType; + private String deptid; + private String deptName; + private Float deep; + private String position; + private String coordinateX; + private String coordinateY; + private String lngBaidu; + private String latBaidu; + private String lngGaode; + private String latGaode; + private String photos; + private String notes; + private String bfzt; + private String bfztName; + private String area; + private String staff; + private String tel; + private String valid; + private String ts; + private List watchData; + + Map map = new HashMap(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + map.put("id", id); + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + map.put("wellCode", wellCode); + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + map.put("wellName", wellName); + } + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + map.put("deviceType", deviceType); + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + map.put("wellType", wellType); + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + map.put("wellTypeName", wellTypeName); + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + map.put("deptid", deptid); + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + map.put("deptName", deptName); + } + + public Float getDeep() { + return deep; + } + + public void setDeep(Float deep) { + this.deep = deep; + map.put("deep", deep); + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + map.put("position", position); + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + map.put("coordinateX", coordinateX); + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + map.put("coordinateY", coordinateY); + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + map.put("lngBaidu", lngBaidu); + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + map.put("latBaidu", latBaidu); + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + map.put("lngGaode", lngGaode); + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + map.put("latGaode", latGaode); + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + map.put("photos", photos); + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + map.put("notes", notes); + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + map.put("bfzt", bfzt); + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + map.put("bfztName", bfztName); + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + map.put("area", area); + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + map.put("staff", staff); + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + map.put("tel", tel); + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + map.put("valid", valid); + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + map.put("ts", ts); + } + + public List getWatchData() { + return watchData; + } + + public void setWatchData(List watchData) { + this.watchData = watchData; + map.put("watchData", watchData); + } + + public Map toMap() { + return map; + } +} diff --git a/src/main/java/com/casic/model/ResponseData.java b/src/main/java/com/casic/model/ResponseData.java new file mode 100644 index 0000000..356775a --- /dev/null +++ b/src/main/java/com/casic/model/ResponseData.java @@ -0,0 +1,19 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Boolean success; + private Integer code; + private String message; + private Object data; +} \ No newline at end of file diff --git a/src/main/java/com/casic/model/WatchDataDto.java b/src/main/java/com/casic/model/WatchDataDto.java new file mode 100644 index 0000000..d50cfb5 --- /dev/null +++ b/src/main/java/com/casic/model/WatchDataDto.java @@ -0,0 +1,32 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author lenovo + */ +@Data +public class WatchDataDto implements Cloneable{ + + private Long deviceId; + private String devcode; + private String installDate; + private String onlineState; + private String onlineStateName; + private String watchType; + private String type; // 地图总览时使用 + private String data = ""; + private String value = ""; // 地图总览时使用 + private String logtime = "";//数据更新时间(设备上报时间) + + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/casic/service/MapDataService.java b/src/main/java/com/casic/service/MapDataService.java new file mode 100644 index 0000000..5f77810 --- /dev/null +++ b/src/main/java/com/casic/service/MapDataService.java @@ -0,0 +1,12 @@ +package com.casic.service; + + +public interface MapDataService { + + Object getWellList(String keywords, String wellType, String deptid, String isAlarm); + + Object getNowAlarmRecords(); + + Object getWellInfo(String devcode,String deviceType); + +} diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java new file mode 100644 index 0000000..b4dd026 --- /dev/null +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -0,0 +1,27 @@ +package com.casic.service; + +public interface ScreenDataService { + Object getInstalledDevice(String beginTime, String endTime); + + Object getKindsAlarmRate(String beginTime, String endTime); + + Object getAlarmRecordsByStation(String beginTime, String endTime); + + Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + + Object getDeptTimeSpan(String beginTime, String endTime); + + Object getHealthIndicator(String beginTime, String endTime); + + Object getDeptIndicator(String beginTime, String endTime); + + Object getDeviceList(String beginTime, String endTime); + + Object getOperationalStatus(String beginTime, String endTime); + + Object getAlarmRecordsByRoad(String beginTime, String endTime); + + Object getInspectRoad(String beginTime, String endTime); + + +} diff --git a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java new file mode 100644 index 0000000..661018b --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java @@ -0,0 +1,88 @@ +package com.casic.service.impl; + + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class DeptTimeSpanBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00"); + + public DeptTimeSpanBuilder(SmartwellDataMapper smartwellDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + } + + public List> deptTimeSpanProvider(String beginTime, String endTime) { + Map> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = getAlarmDevice(beginTime, endTime); + Map> currentDeviceTimeMap = MergeDeviceSpan(normalDeviceDeptMap, alarmDeviceDeptMap); + List> deptTimeSpanMap = calculateDeptTime(currentDeviceTimeMap); + return deptTimeSpanMap; + } + + private Map> getNormalDevice(String beginTime, String endTime) { + List> normalDeviceList = smartwellDataMapper.getNormalDevice(beginTime, endTime); + Map> normalDeviceDeptMap = normalDeviceList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return normalDeviceDeptMap; + } + + private Map> getAlarmDevice(String beginTime, String endTime) { + List> alarmDeviceDeptList = smartwellDataMapper.getAlarmDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = alarmDeviceDeptList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return alarmDeviceDeptMap; + } + + private Map> MergeDeviceSpan(Map> normalDeviceDeptMap, + Map> alarmDeviceDeptMap) { + for (Map.Entry> normalMap : normalDeviceDeptMap.entrySet()) { + String mapKey = normalMap.getKey(); + Map normalmap = normalMap.getValue(); + if (alarmDeviceDeptMap.containsKey(mapKey)) { + Map alarmMap = alarmDeviceDeptMap.get(mapKey); + for (Map.Entry alarmMapItem : alarmMap.entrySet()) { + String deviceCode = alarmMapItem.getKey(); + normalmap.put(deviceCode, alarmMapItem.getValue()); + } + } + } + return normalDeviceDeptMap; + } + + private List> calculateDeptTime(Map> currentDeviceTimeMap) { + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptTimeSpanList = new ArrayList<>(); + for (Map.Entry> currentDeviceMap : currentDeviceTimeMap.entrySet()) { + String deptid = currentDeviceMap.getKey(); + Map currentDeviceItemMap = currentDeviceMap.getValue(); + Double timeSpan = 0.00; + for (Map.Entry timeMapItem : currentDeviceItemMap.entrySet()) { + timeSpan += StringUtils.isEmpty(timeMapItem.getValue()) || timeMapItem.getValue() == "null" ? 0 : Double.valueOf(timeMapItem.getValue()); + } + Map deptTimeSpanMap = new HashMap<>(); + deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); + deptTimeSpanMap.put("count", df.format(timeSpan)); + deptTimeSpanList.add(deptTimeSpanMap); + } + return deptTimeSpanList; + } + +} diff --git a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java new file mode 100644 index 0000000..ffd0f1b --- /dev/null +++ b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java @@ -0,0 +1,96 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class HealthIndicatorsBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00%"); + + public HealthIndicatorsBuilder(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + this.tiltDataMapper = tiltDataMapper; + } + + + public List> healthIndicatorProvider(String beginTime, String endTime) { + List> healthIndictorList = new ArrayList<>(); + healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); + healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); + return healthIndictorList; + } + + + public List> deptIndicatorProvider(String beginTime, String endTime) { + List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); + List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); + List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); + return deptIndicatorList; + } + + public Map healthRoadIndicatorProvider(String isSort,String limitNum,String beginTime, String endTime) { + return smartwellHealthRoadIndicator(isSort,limitNum,beginTime, endTime); + } + + private Map smartwellHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); + Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); + smartwellHealth.put("typeName", "管网健康指数"); + smartwellHealth.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map tiltHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = tiltDataMapper.countColudDevice(); + Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); + smartwellHealth.put("typeName", "场站健康指数"); + smartwellHealth.put("count", df.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map smartwellHealthRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer roadNumber = smartwellDataMapper.countRoadNumber(); + Integer alarmRoad = smartwellDataMapper.countAlarmRoad(isSort,limitNum,beginTime, endTime); + smartwellHealth.put("typeName", "道路健康指数"); + smartwellHealth.put("count", df.format((Double.valueOf(roadNumber - alarmRoad)) / roadNumber)); + return smartwellHealth; + } + + private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { + Map alarmDeptMap = alarmDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) + ); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptIndicatorList = new ArrayList<>(); + deviceDeptNumberList.forEach( + deptNameNumberMap -> { + Map deptIndicatorMap = new HashMap<>(); + int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); + String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); + int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); + deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); + deptIndicatorMap.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + deptIndicatorList.add(deptIndicatorMap); + } + ); + return deptIndicatorList; + } +} diff --git a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java new file mode 100644 index 0000000..8b1209d --- /dev/null +++ b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java @@ -0,0 +1,71 @@ +package com.casic.service.impl; + +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 + */ +@Service +public class InstalledDeviceBuilder { + + private final DeviceTypesConfig deviceTypesConfig; + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + public InstalledDeviceBuilder(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, + TiltDataMapper tiltDataMapper, DeviceTypesConfig deviceTypesConfig) { + this.smartwellDataMapper = smartwellDataMapper; + this.cmsDataMapper = cmsDataMapper; + this.tiltDataMapper = tiltDataMapper; + this.deviceTypesConfig = deviceTypesConfig; + } + + public List> InstalledDeviceManger() { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + List> installedDeviceList = new ArrayList<>(); + cmsInstalledDevice(installedDeviceList); + tiltInstalledDevice(installedDeviceList); + smartwellInstalledDevice(installedDeviceList, deviceTypeList); + return installedDeviceList; + } + + private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); + installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); + installedDeviceList.add(installedDeviceMap); + } + } + + private void cmsInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); + installedDeviceMap.put("typeName", "电子标识器"); + installedDeviceList.add(installedDeviceMap); + } + + private void tiltInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); + installedDeviceMap.put("typeName", "云台"); + installedDeviceList.add(installedDeviceMap); + } +} diff --git a/src/main/java/com/casic/service/impl/KindsAlarmBulider.java b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java new file mode 100644 index 0000000..82df147 --- /dev/null +++ b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java @@ -0,0 +1,75 @@ +package com.casic.service.impl; + +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component +public class KindsAlarmBulider { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + private final DeviceTypesConfig deviceTypesConfig; + + private final DecimalFormat df = new DecimalFormat("0.00%"); + + public KindsAlarmBulider(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper,DeviceTypesConfig deviceTypesConfig) { + this.smartwellDataMapper = smartwellDataMapper; + this.tiltDataMapper = tiltDataMapper; + this.deviceTypesConfig=deviceTypesConfig; + } + + public List> alarmTypeManger(String beginTime, String endTime) { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + Map typeNameMap = smartwellDeviceType(); + List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap,deviceTypeList); + calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); + return rateDeviceList; + } + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } + + private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap,String[] deviceTypeList) { + List> rateDeviceList = new ArrayList<>(); + List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); + Map alarmCountMap = alarmCountList.stream().collect( + Collectors.toMap( + e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) + ) + ); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map rateDeviceMap = new HashMap<>(); + Integer totalAlarm = deviceCountMap.containsKey(deviceType)?Integer.valueOf(deviceCountMap.get(deviceType)):0; + Integer alarmCount=alarmCountMap.containsKey(deviceType)?Integer.valueOf(alarmCountMap.get(deviceType)):0; + rateDeviceMap.put("rate", totalAlarm==0?"0.00%":df.format(Double.valueOf(alarmCount)/totalAlarm)); + rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); + rateDeviceList.add(rateDeviceMap); + } + return rateDeviceList; + } + + private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { + Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); + Integer totalAlarm = tiltDataMapper.countColudDevice(); + Map rateDeviceMap = new HashMap<>(); + rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : df.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", "云台"); + rateDeviceList.add(rateDeviceMap); + } +} diff --git a/src/main/java/com/casic/service/impl/MapDataServiceImpl.java b/src/main/java/com/casic/service/impl/MapDataServiceImpl.java new file mode 100644 index 0000000..c2640ab --- /dev/null +++ b/src/main/java/com/casic/service/impl/MapDataServiceImpl.java @@ -0,0 +1,113 @@ +package com.casic.service.impl; + +import com.casic.dao.smartwell.MapDataMapper; +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import com.casic.model.ResponseData; +import com.casic.service.MapDataService; +import com.casic.util.DeviceDataFieldTableEnum; +import com.casic.util.DeviceDataTableEnum; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Slf4j +@Service +public class MapDataServiceImpl implements MapDataService { + + @Autowired + private MapDataMapper mapDataMapper; + + @Override + public Object getNowAlarmRecords() { + ResponseData responseData = new ResponseData(); + try { + List alarmNowViewList = this.mapDataMapper.getNowAlarmRecords(); + for (AlarmNowView alarmNowView : alarmNowViewList) { + alarmNowView.setWellTypeName(mapDataMapper.getDictNameByCode(alarmNowView.getWellType())); + } + responseData.setData(alarmNowViewList); + responseData.setCode(200); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:最新报警记录查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + + @Override + public Object getWellList(String keywords, String wellType, String deptid, String isAlarm) { + + ResponseData responseData = new ResponseData(); + try { + List wellList = new ArrayList<>(); + if (null == isAlarm || isAlarm.equals("") == true) { + // 查询并添加当前部门的闸井 + List myList = mapDataMapper.getWellList(keywords, wellType, deptid); + if (null != myList && myList.isEmpty() == false) { + wellList.addAll(myList); + } + } else if (isAlarm.equals("1")) { + // isAlarm = 1 查询所有报警状态的闸井 + wellList = mapDataMapper.getAlarmWellList(keywords, wellType, deptid); + } else { + // isAlarm = 0 查询所有不是报警状态的闸井 + wellList = mapDataMapper.getNotAlarmWellList(keywords, wellType, deptid); + } + responseData.setData(wellList); + responseData.setCode(200); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:点位记录列表查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + public Object getWellInfo(String devcode,String deviceType){ + ResponseData responseData = new ResponseData(); + try { + DeviceDataTableEnum deviceDataTableEnum = DeviceDataTableEnum.DEVICE_TYPE_TABLE.getTableNameMap().get(Integer.valueOf(deviceType)); + String tableName = deviceDataTableEnum.getTableName(); + List> wellInfoList=new ArrayList<>(); + if(deviceType.equals("10")){ + String [] tableNameList=tableName.split(","); + + for(String tableNames:tableNameList){ + Map wellInfoMap=mapDataMapper.getDeviceStatus(devcode,tableNames, + DeviceDataFieldTableEnum.TABLE_FIELD.getTableFieldMap().get(tableName)); + if(!wellInfoMap.containsKey("dataValue")){ + wellInfoMap.put("dataValue",0.0); + } + wellInfoList.add(wellInfoMap); + } + }else { + Map wellInfoMap=mapDataMapper.getDeviceStatus(devcode,tableName, + DeviceDataFieldTableEnum.TABLE_FIELD.getTableFieldMap().get(tableName)); + if(!wellInfoMap.containsKey("dataValue")){ + wellInfoMap.put("dataValue",0.0); + } + wellInfoList.add(wellInfoMap); + } + responseData.setData(wellInfoList); + responseData.setCode(200); + responseData.setSuccess(true); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:点位详情查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + +} diff --git a/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java b/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java new file mode 100644 index 0000000..1946ee3 --- /dev/null +++ b/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java @@ -0,0 +1,60 @@ +package com.casic.service.impl; + +import com.casic.dao.cms.CmsDataMapper; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +public class OperationalStatusBuilder { + + private final DecimalFormat df = new DecimalFormat("0.00%"); + private final CmsDataMapper cmsDataMapper; + + public OperationalStatusBuilder(CmsDataMapper cmsDataMapper) { + this.cmsDataMapper = cmsDataMapper; + } + + public List> OperationalStatusProvider(String beginTime, String endTime) { + List> operaStatusList = getWorkOrder(beginTime,endTime); + operaStatusList.add(getTask(beginTime,endTime)); + operaStatusList.add(getEvent(beginTime,endTime)); + return operaStatusList; + } + + private Map getTask(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalTask(beginTime,endTime); + Map taskMap = new HashMap<>(); + taskMap.put("type", "运维任务"); + taskMap.put("count", String.valueOf(initTask)); + return taskMap; + } + + private List> getWorkOrder(String beginTime, String endTime) { + List> operaStatusList = new ArrayList<>(); + Integer initTask = cmsDataMapper.getTotalWorkOrder(beginTime,endTime); + Map workPageMap = new HashMap<>(); + workPageMap.put("type", "运维工单"); + workPageMap.put("count", String.valueOf(initTask)); + Integer completeTask = cmsDataMapper.getCompleteWorkOrder(beginTime,endTime); + Map completeMap = new HashMap<>(); + completeMap.put("type", "运维完结"); + completeMap.put("count", df.format(Double.valueOf(completeTask) / initTask)); + operaStatusList.add(completeMap); + operaStatusList.add(workPageMap); + return operaStatusList; + } + + private Map getEvent(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalEvent(beginTime,endTime); + Map eventMap = new HashMap<>(); + eventMap.put("type", "运维事件"); + eventMap.put("count", String.valueOf(initTask)); + return eventMap; + } + +} diff --git a/src/main/java/com/casic/service/impl/ScreenDataManger.java b/src/main/java/com/casic/service/impl/ScreenDataManger.java new file mode 100644 index 0000000..6a56a43 --- /dev/null +++ b/src/main/java/com/casic/service/impl/ScreenDataManger.java @@ -0,0 +1,170 @@ +package com.casic.service.impl; + +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.model.ResponseData; +import com.casic.service.ScreenDataService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class ScreenDataManger implements ScreenDataService { + @Autowired + private InstalledDeviceBuilder installedDeviceBuilder; + @Autowired + private KindsAlarmBulider kindsAlarmBulider; + @Autowired + private HealthIndicatorsBuilder healthIndicatorsBuilder; + @Autowired + private DeptTimeSpanBuilder deptTimeSpanBuilder; + @Autowired + private OperationalStatusBuilder operStatusBuilder; + + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + public ScreenDataManger(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, TiltDataMapper tiltDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + this.cmsDataMapper = cmsDataMapper; + this.tiltDataMapper = tiltDataMapper; + } + + public Object getInstalledDevice(String beginTime, String endTime) { + List> installedDeviceList = null; + try { + installedDeviceList = installedDeviceBuilder.InstalledDeviceManger(); + } catch (DataAccessException dex) { + log.error("主题:查询已安装设备的类型和个数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return installedDeviceList; + } + + public Object getKindsAlarmRate(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = kindsAlarmBulider.alarmTypeManger(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:统计汇总各管线权属单位下的燃气管线总长度出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + List> recordsRoadList = null; + try { + recordsRoadList = tiltDataMapper.countColudAlarmRecords(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:显示云台的报警信息出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return recordsRoadList; + } + + public Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime) { + Map healthRoadIndtorMap = null; + try { + healthRoadIndtorMap = healthIndicatorsBuilder.healthRoadIndicatorProvider(isSort,limitNum,beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:以道路维度查看健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return healthRoadIndtorMap; + } + + public Object getDeptTimeSpan(String beginTime, String endTime) { + List> deptTimeSpanList = null; + try { + deptTimeSpanList = deptTimeSpanBuilder.deptTimeSpanProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:按权属单位来汇总,各个权属单位下的燃气管线连续正常运行的时长出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return deptTimeSpanList; + } + + public Object getHealthIndicator(String beginTime, String endTime) { + List> healthIndictorList = null; + try { + healthIndictorList = healthIndicatorsBuilder.healthIndicatorProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return healthIndictorList; + } + + public Object getDeptIndicator(String beginTime, String endTime) { + List> healthIndictorList = null; + try { + healthIndictorList = healthIndicatorsBuilder.deptIndicatorProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:权属单位维度健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return healthIndictorList; + } + + public Object getDeviceList(String beginTime, String endTime) { + List> alarmDeviceList = null; + try { + alarmDeviceList = smartwellDataMapper.getAlarmDeviceList(); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + alarmDeviceList.forEach( + alarmDevice -> { + alarmDevice.put("isAlarm", alarmDevice.containsKey("isAlarm") ? "1" : "0"); + alarmDevice.put("responsibleDept", deptNameMap.get(String.valueOf(alarmDevice.get("responsibleDept")))); + } + ); + } catch (DataAccessException dex) { + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return alarmDeviceList; + } + + public Object getOperationalStatus(String beginTime, String endTime) { + + ResponseData responseData = new ResponseData(); + try { + List> operaStatusList = operStatusBuilder.OperationalStatusProvider(beginTime, endTime); + responseData.setSuccess(true); + responseData.setCode(200); + responseData.setMessage("查询成功"); + responseData.setData(operaStatusList); + } catch (DataAccessException dex) { + log.error("主题:运维情况查询出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = smartwellDataMapper.countAlarmByRoad(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:以道路的维度统计燃气管线监控中的报警情况出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + public Object getInspectRoad(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = cmsDataMapper.countElectronicTask(); + } catch (DataAccessException dex) { + log.error("主题:汇总显示个道路的巡检运维次数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + +} diff --git a/src/main/java/com/casic/util/DeviceDataFieldTableEnum.java b/src/main/java/com/casic/util/DeviceDataFieldTableEnum.java new file mode 100644 index 0000000..5fd7a56 --- /dev/null +++ b/src/main/java/com/casic/util/DeviceDataFieldTableEnum.java @@ -0,0 +1,37 @@ +package com.casic.util; + +import java.util.HashMap; +import java.util.Map; + +public enum DeviceDataFieldTableEnum { + + TABLE_FIELD(new HashMap() { + { + put("data_dig", "ddata AS dataValue"); + put("data_gas", "strength AS dataValue"); + put("data_gasliquid_gas", "strength AS dataValue"); + put("data_gasliquid_liquid", "liquiddata AS dataValue"); + put("data_gas_dector", "gas_sample_value AS dataValue"); + put("data_harmful_gas", "CONCAT(CO, ', ', CH4, ', ', H2S, ', ', O2) AS dataValue"); + put("data_hydrant", "0 AS dataValue"); + put("data_liquid", "liquiddata AS dataValue"); + put("data_noise", "ddata AS dataValue"); + put("data_temp_hum", "CONCAT(TEMPERATURE, ', ', HUMIDITY) AS dataValue"); + put("data_tube", "strength AS dataValue"); + put("data_wellcover", "descn AS dataValue"); + put("data_temp_press", "press AS dataValue"); + put("data_pantilt", "concentration AS dataValue"); + put("data_wellcover_loca", "0 AS dataValue"); + put("data_wellplus", "0 AS dataValue"); + put("data_h2s", "stength AS dataValue"); + } + }); + public Map tableNameMap; + + DeviceDataFieldTableEnum(Map tableNameMap) { + this.tableNameMap = tableNameMap; + } + public Map getTableFieldMap() { + return tableNameMap; + } +} diff --git a/src/main/java/com/casic/util/DeviceDataTableEnum.java b/src/main/java/com/casic/util/DeviceDataTableEnum.java new file mode 100644 index 0000000..a67ad6d --- /dev/null +++ b/src/main/java/com/casic/util/DeviceDataTableEnum.java @@ -0,0 +1,76 @@ +package com.casic.util; + +import java.util.HashMap; + +/** + * @author cz + * @date 2022-7-15 + * 上传数据总记录数 + */ +public enum DeviceDataTableEnum { + + DATA_DIG("data_dig", "井盖状态监测仪"), + DATA_GAS("data_gas", "液位监测仪"), + DATA_GASLIQUID("data_gasliquid_gas,data_gasliquid_liquid", "有害气体监测仪"), + DATA_GAS_DECTOR("data_gas_dector", "燃气智能监测终端"), + DATA_HARMFUL_GAS("data_harmful_gas", "温湿度监测仪"), + DATA_HYDRANT("data_hydrant", "开挖监测仪"), + DATA_LIQUID("data_liquid", "井盖定位监测仪"), + DATA_NOISE("data_noise", "噪声记录仪"), + DATA_PANTILT("data_pantilt", "温度压力监测仪"), + DATA_TEMP_HUM("data_temp_hum", "燃气智能监测终端(一体化)"), + DATA_TUBE("data_tube", "消防栓防盗水监测仪"), + DATA_WELLCOVER("data_wellcover", "管盯"), + DATA_WELLCOVER_DATA("data_temp_press", "井盖液位一体机"), + DATA_WELLCOVER_LOCA("data_wellcover_loca", "硫化氢检测终端"), + DATA_WELLPLUS("data_wellplus", "激光甲烷云台"), + DATA_H2S("data_h2s", "可燃气体"), + DEVICE_TYPE_TABLE(new HashMap() {{ + put(1, DATA_WELLCOVER); + put(2, DATA_LIQUID); + put(3, DATA_HARMFUL_GAS); + put(4, DATA_GAS); + put(5, DATA_TEMP_HUM); + put(6, DATA_DIG); + put(7, DATA_WELLCOVER_LOCA); + put(8, DATA_NOISE); + put(9, DATA_WELLCOVER_DATA); + put(10, DATA_GASLIQUID); + put(11, DATA_HYDRANT); + put(12, DATA_TUBE); + put(13, DATA_WELLPLUS); + put(14, DATA_H2S); + put(21, DATA_PANTILT); + put(101, DATA_GAS_DECTOR); + } + }); + + String typeName; + String tableName; + + DeviceDataTableEnum(String tableName, String typeName) { + this.typeName = typeName; + this.tableName = tableName; + } + + public String getTypeName() { + return typeName; + } + + public String getTableName() { + return tableName; + } + + + public HashMap tableNameMap; + + DeviceDataTableEnum(HashMap tableNameMap) { + this.tableNameMap = tableNameMap; + } + + public HashMap getTableNameMap() { + return tableNameMap; + } + + +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml new file mode 100644 index 0000000..6d28b27 --- /dev/null +++ b/src/main/resources/application-dev.yml @@ -0,0 +1,43 @@ +server: + port: 11312 +################### spring配置 ################### +spring: + datasource: + smartwell: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://111.198.10.15:11209/smartwell_zq_cs + username: postgres + password: Casic203 + cms: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://111.198.10.15:11209/smartwell_cms + username: postgres + password: Casic203 + spantilt: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://111.198.10.15:11102/casic_pan_tilt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&&useSSL=true + username: root + password: Casic203! + session: + store-type: redis + redis: + host: 111.198.10.15 + port: 11412 + password: ew5T4K3#203lwh + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + # session: + # store-type: redis +#flowable数据源和多数据源配置 +casic: + kaptcha-open: false #是否开启登录时验证码 (true/false) + #kaptcha-open: false #是否开启登录时验证码 (true/false) + db: + init: + enable: false + spring-session-open: false #开启spring session +logging: + level.root: error + level.com.casic: error + file: + path: logs/ + name: missiles.log \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/casic/controller/MapDataController.java b/src/main/java/com/casic/controller/MapDataController.java new file mode 100644 index 0000000..b897b95 --- /dev/null +++ b/src/main/java/com/casic/controller/MapDataController.java @@ -0,0 +1,47 @@ +package com.casic.controller; + +import com.casic.service.MapDataService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/overview") +public class MapDataController { + + private final MapDataService mapDataService; + + public MapDataController(MapDataService mapDataService) { + this.mapDataService = mapDataService; + } + + /** + * 获取列表 + */ + @RequestMapping(value = "/wellList") + public Object getWellList(@RequestParam(required = false) String keywords, + @RequestParam(required = false) String wellType, + @RequestParam(required = false) String deptid, + @RequestParam(required = false) String isAlarm) { + + return mapDataService.getWellList(keywords,wellType,deptid,isAlarm); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/alarmNow") + public Object alarmNow() { + return mapDataService.getNowAlarmRecords(); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/wellInfo") + public Object getWellInfo(@RequestParam(value = "devcode", required = true) String devcode, + @RequestParam(value = "deviceType", required = true) String deviceType) { + return mapDataService.getWellInfo(devcode,deviceType); + } +} diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java new file mode 100644 index 0000000..04f8d97 --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -0,0 +1,210 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + public ScreenDataController(ScreenDataService screenDataService) { + this.screenDataService = screenDataService; + } + + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/line-length") + public Object getLineLength(String beginTime, String endTime) { +// return screenDataService.getLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + " \"deptName\":\"圣井燃气\",\n" + + " \"totalLength\":440\n" + + " },\n" + + " {\n" + + " \"deptName\":\"华气燃气\",\n" + + " \"totalLength\":810\n" + + " },\n" + + " {\n" + + " \"typeName\":\"中燃燃气\",\n" + + " \"totalLength\":500\n" + + " },\n" + + " {\n" + + " \"typeName\":\"正和燃气\",\n" + + " \"totalLength\":520\n" + + " },\n" + + " {\n" + + " \"typeName\":\"华罚燃气\",\n" + + " \"totalLength\":630\n" + + " }\n" + + " ]"; + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + /** + * 分类汇总燃气管线监管人员的类型和数量 + */ + @RequestMapping("/staff") + public Object getObvserStaff(String beginTime, String endTime) { +// return screenDataService.getObvserStaff(beginTime, endTime); + return "{\n" + + " \t\"总人数\":2022,\n" + + "\t\"staffDataList\":[\n" + + " {\n" + + "\t\t\"岗位名称\":\"管理人员\",\n" + + "\t\t\"总计\":72\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"运维人员\",\n" + + "\t\t\"总计\":874\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"施工人员\",\n" + + "\t\t\"总计\":456\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"统计人员\",\n" + + "\t\t\"总计\":745\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"技术人员\",\n" + + "\t\t\"总计\":455\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"监管人员\",\n" + + "\t\t\"总计\":644\n" + + " }]\n" + + " }"; + } + + /** + * 以道路的维度来统计汇总燃气管线的长度和权属单位 + */ + @RequestMapping("/road-line-length") + public Object getRoadLineLength(String beginTime, String endTime) { +// return screenDataService.getRoadLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + "\t\t\"所属道路\":\"双山西街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"圣井燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"世纪大道\",\n" + + "\t\t\"管线长度/km\":54,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"桃水大街\",\n" + + "\t\t\"管线长度/km\":32,\n" + + "\t\t\"权属单位\":\"中燃燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"鲁态大街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " }\n" + + "]"; + } + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + +// /** +// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/list") +// public Object getDeviceList(String beginTime, String endTime) { +// return screenDataService.getDeviceList(beginTime,endTime); +// } +// +// /** +// * 包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/Info") +// public Object getDeviceInfo(String wellCode,String deviceType) { +// return screenDataService.getDeviceInfo(wellCode,deviceType); +// } + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + /** + * 显示云台的报警信息 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/cms/CmsDataMapper.java b/src/main/java/com/casic/dao/cms/CmsDataMapper.java new file mode 100644 index 0000000..e57975e --- /dev/null +++ b/src/main/java/com/casic/dao/cms/CmsDataMapper.java @@ -0,0 +1,23 @@ +package com.casic.dao.cms; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface CmsDataMapper { + + Integer countElectronicDevice(); + + List> countElectronicTask(); + + Integer getTotalWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getCompleteWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalEvent(@Param("beginTime") String beginTime, @Param("endTime") String endTime); +} diff --git a/src/main/java/com/casic/dao/smartwell/MapDataMapper.java b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java new file mode 100644 index 0000000..8e56978 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java @@ -0,0 +1,25 @@ +package com.casic.dao.smartwell; + +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface MapDataMapper { + + List getWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNotAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNowAlarmRecords(); + + String getDictNameByCode(@Param("wellType") String wellType); + + Map getDeviceStatus(@Param("devcode") String devcode, @Param("tableName") String tableName, @Param("dataField") String dataField); +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java new file mode 100644 index 0000000..0294b14 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -0,0 +1,43 @@ +package com.casic.dao.smartwell; + + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SmartwellDataMapper { + + List> countDeviceByType(); + + List> getTypeName(); + + List> countAlarmType(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getDeviceListByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countDeviceNumber(); + + Integer countAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countDeviceNumberByDept(); + + List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countRoadNumber(); + + List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDeviceList(); + + List> getDeptNameList(); + +} diff --git a/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java new file mode 100644 index 0000000..e6ba279 --- /dev/null +++ b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java @@ -0,0 +1,32 @@ +package com.casic.dao.spantilt; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface TiltDataMapper { + /** + * 已安装设备 + * + * @return + */ + Integer countColudDevice(); + + /** + * 警告 + * + * @return + */ + Integer countColudAlarm(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + + /** + * 云台报警信息 + * + * @return + */ + List> countColudAlarmRecords(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + +} diff --git a/src/main/java/com/casic/model/AlarmNowView.java b/src/main/java/com/casic/model/AlarmNowView.java new file mode 100644 index 0000000..6eebafc --- /dev/null +++ b/src/main/java/com/casic/model/AlarmNowView.java @@ -0,0 +1,108 @@ +package com.casic.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +public class AlarmNowView { + + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date alarmTime; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + +} diff --git a/src/main/java/com/casic/model/BusWellInfo.java b/src/main/java/com/casic/model/BusWellInfo.java new file mode 100644 index 0000000..f4b8eba --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfo.java @@ -0,0 +1,192 @@ +package com.casic.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + //@NotEmpty(message="井深不能为空") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + + /** + * 区域 + */ + private String road; + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + + + /** + * 位置 + */ + private String position; + /** + * 部门编号 + */ + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; +// /** +// * 责任人 +// */ +// @TableField("STAFF") +// private String staff; +// /** +// * 电话 +// */ +// @TableField("TEL") +// private String tel; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/src/main/java/com/casic/model/BusWellInfoDto.java b/src/main/java/com/casic/model/BusWellInfoDto.java new file mode 100644 index 0000000..48610f2 --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfoDto.java @@ -0,0 +1,276 @@ +package com.casic.model; + + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class BusWellInfoDto { + private Long id; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + private String deviceType; + private String deptid; + private String deptName; + private Float deep; + private String position; + private String coordinateX; + private String coordinateY; + private String lngBaidu; + private String latBaidu; + private String lngGaode; + private String latGaode; + private String photos; + private String notes; + private String bfzt; + private String bfztName; + private String area; + private String staff; + private String tel; + private String valid; + private String ts; + private List watchData; + + Map map = new HashMap(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + map.put("id", id); + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + map.put("wellCode", wellCode); + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + map.put("wellName", wellName); + } + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + map.put("deviceType", deviceType); + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + map.put("wellType", wellType); + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + map.put("wellTypeName", wellTypeName); + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + map.put("deptid", deptid); + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + map.put("deptName", deptName); + } + + public Float getDeep() { + return deep; + } + + public void setDeep(Float deep) { + this.deep = deep; + map.put("deep", deep); + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + map.put("position", position); + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + map.put("coordinateX", coordinateX); + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + map.put("coordinateY", coordinateY); + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + map.put("lngBaidu", lngBaidu); + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + map.put("latBaidu", latBaidu); + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + map.put("lngGaode", lngGaode); + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + map.put("latGaode", latGaode); + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + map.put("photos", photos); + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + map.put("notes", notes); + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + map.put("bfzt", bfzt); + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + map.put("bfztName", bfztName); + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + map.put("area", area); + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + map.put("staff", staff); + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + map.put("tel", tel); + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + map.put("valid", valid); + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + map.put("ts", ts); + } + + public List getWatchData() { + return watchData; + } + + public void setWatchData(List watchData) { + this.watchData = watchData; + map.put("watchData", watchData); + } + + public Map toMap() { + return map; + } +} diff --git a/src/main/java/com/casic/model/ResponseData.java b/src/main/java/com/casic/model/ResponseData.java new file mode 100644 index 0000000..356775a --- /dev/null +++ b/src/main/java/com/casic/model/ResponseData.java @@ -0,0 +1,19 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Boolean success; + private Integer code; + private String message; + private Object data; +} \ No newline at end of file diff --git a/src/main/java/com/casic/model/WatchDataDto.java b/src/main/java/com/casic/model/WatchDataDto.java new file mode 100644 index 0000000..d50cfb5 --- /dev/null +++ b/src/main/java/com/casic/model/WatchDataDto.java @@ -0,0 +1,32 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author lenovo + */ +@Data +public class WatchDataDto implements Cloneable{ + + private Long deviceId; + private String devcode; + private String installDate; + private String onlineState; + private String onlineStateName; + private String watchType; + private String type; // 地图总览时使用 + private String data = ""; + private String value = ""; // 地图总览时使用 + private String logtime = "";//数据更新时间(设备上报时间) + + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/casic/service/MapDataService.java b/src/main/java/com/casic/service/MapDataService.java new file mode 100644 index 0000000..5f77810 --- /dev/null +++ b/src/main/java/com/casic/service/MapDataService.java @@ -0,0 +1,12 @@ +package com.casic.service; + + +public interface MapDataService { + + Object getWellList(String keywords, String wellType, String deptid, String isAlarm); + + Object getNowAlarmRecords(); + + Object getWellInfo(String devcode,String deviceType); + +} diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java new file mode 100644 index 0000000..b4dd026 --- /dev/null +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -0,0 +1,27 @@ +package com.casic.service; + +public interface ScreenDataService { + Object getInstalledDevice(String beginTime, String endTime); + + Object getKindsAlarmRate(String beginTime, String endTime); + + Object getAlarmRecordsByStation(String beginTime, String endTime); + + Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + + Object getDeptTimeSpan(String beginTime, String endTime); + + Object getHealthIndicator(String beginTime, String endTime); + + Object getDeptIndicator(String beginTime, String endTime); + + Object getDeviceList(String beginTime, String endTime); + + Object getOperationalStatus(String beginTime, String endTime); + + Object getAlarmRecordsByRoad(String beginTime, String endTime); + + Object getInspectRoad(String beginTime, String endTime); + + +} diff --git a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java new file mode 100644 index 0000000..661018b --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java @@ -0,0 +1,88 @@ +package com.casic.service.impl; + + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class DeptTimeSpanBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00"); + + public DeptTimeSpanBuilder(SmartwellDataMapper smartwellDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + } + + public List> deptTimeSpanProvider(String beginTime, String endTime) { + Map> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = getAlarmDevice(beginTime, endTime); + Map> currentDeviceTimeMap = MergeDeviceSpan(normalDeviceDeptMap, alarmDeviceDeptMap); + List> deptTimeSpanMap = calculateDeptTime(currentDeviceTimeMap); + return deptTimeSpanMap; + } + + private Map> getNormalDevice(String beginTime, String endTime) { + List> normalDeviceList = smartwellDataMapper.getNormalDevice(beginTime, endTime); + Map> normalDeviceDeptMap = normalDeviceList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return normalDeviceDeptMap; + } + + private Map> getAlarmDevice(String beginTime, String endTime) { + List> alarmDeviceDeptList = smartwellDataMapper.getAlarmDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = alarmDeviceDeptList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return alarmDeviceDeptMap; + } + + private Map> MergeDeviceSpan(Map> normalDeviceDeptMap, + Map> alarmDeviceDeptMap) { + for (Map.Entry> normalMap : normalDeviceDeptMap.entrySet()) { + String mapKey = normalMap.getKey(); + Map normalmap = normalMap.getValue(); + if (alarmDeviceDeptMap.containsKey(mapKey)) { + Map alarmMap = alarmDeviceDeptMap.get(mapKey); + for (Map.Entry alarmMapItem : alarmMap.entrySet()) { + String deviceCode = alarmMapItem.getKey(); + normalmap.put(deviceCode, alarmMapItem.getValue()); + } + } + } + return normalDeviceDeptMap; + } + + private List> calculateDeptTime(Map> currentDeviceTimeMap) { + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptTimeSpanList = new ArrayList<>(); + for (Map.Entry> currentDeviceMap : currentDeviceTimeMap.entrySet()) { + String deptid = currentDeviceMap.getKey(); + Map currentDeviceItemMap = currentDeviceMap.getValue(); + Double timeSpan = 0.00; + for (Map.Entry timeMapItem : currentDeviceItemMap.entrySet()) { + timeSpan += StringUtils.isEmpty(timeMapItem.getValue()) || timeMapItem.getValue() == "null" ? 0 : Double.valueOf(timeMapItem.getValue()); + } + Map deptTimeSpanMap = new HashMap<>(); + deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); + deptTimeSpanMap.put("count", df.format(timeSpan)); + deptTimeSpanList.add(deptTimeSpanMap); + } + return deptTimeSpanList; + } + +} diff --git a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java new file mode 100644 index 0000000..ffd0f1b --- /dev/null +++ b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java @@ -0,0 +1,96 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class HealthIndicatorsBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00%"); + + public HealthIndicatorsBuilder(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + this.tiltDataMapper = tiltDataMapper; + } + + + public List> healthIndicatorProvider(String beginTime, String endTime) { + List> healthIndictorList = new ArrayList<>(); + healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); + healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); + return healthIndictorList; + } + + + public List> deptIndicatorProvider(String beginTime, String endTime) { + List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); + List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); + List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); + return deptIndicatorList; + } + + public Map healthRoadIndicatorProvider(String isSort,String limitNum,String beginTime, String endTime) { + return smartwellHealthRoadIndicator(isSort,limitNum,beginTime, endTime); + } + + private Map smartwellHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); + Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); + smartwellHealth.put("typeName", "管网健康指数"); + smartwellHealth.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map tiltHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = tiltDataMapper.countColudDevice(); + Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); + smartwellHealth.put("typeName", "场站健康指数"); + smartwellHealth.put("count", df.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map smartwellHealthRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer roadNumber = smartwellDataMapper.countRoadNumber(); + Integer alarmRoad = smartwellDataMapper.countAlarmRoad(isSort,limitNum,beginTime, endTime); + smartwellHealth.put("typeName", "道路健康指数"); + smartwellHealth.put("count", df.format((Double.valueOf(roadNumber - alarmRoad)) / roadNumber)); + return smartwellHealth; + } + + private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { + Map alarmDeptMap = alarmDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) + ); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptIndicatorList = new ArrayList<>(); + deviceDeptNumberList.forEach( + deptNameNumberMap -> { + Map deptIndicatorMap = new HashMap<>(); + int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); + String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); + int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); + deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); + deptIndicatorMap.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + deptIndicatorList.add(deptIndicatorMap); + } + ); + return deptIndicatorList; + } +} diff --git a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java new file mode 100644 index 0000000..8b1209d --- /dev/null +++ b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java @@ -0,0 +1,71 @@ +package com.casic.service.impl; + +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 + */ +@Service +public class InstalledDeviceBuilder { + + private final DeviceTypesConfig deviceTypesConfig; + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + public InstalledDeviceBuilder(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, + TiltDataMapper tiltDataMapper, DeviceTypesConfig deviceTypesConfig) { + this.smartwellDataMapper = smartwellDataMapper; + this.cmsDataMapper = cmsDataMapper; + this.tiltDataMapper = tiltDataMapper; + this.deviceTypesConfig = deviceTypesConfig; + } + + public List> InstalledDeviceManger() { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + List> installedDeviceList = new ArrayList<>(); + cmsInstalledDevice(installedDeviceList); + tiltInstalledDevice(installedDeviceList); + smartwellInstalledDevice(installedDeviceList, deviceTypeList); + return installedDeviceList; + } + + private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); + installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); + installedDeviceList.add(installedDeviceMap); + } + } + + private void cmsInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); + installedDeviceMap.put("typeName", "电子标识器"); + installedDeviceList.add(installedDeviceMap); + } + + private void tiltInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); + installedDeviceMap.put("typeName", "云台"); + installedDeviceList.add(installedDeviceMap); + } +} diff --git a/src/main/java/com/casic/service/impl/KindsAlarmBulider.java b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java new file mode 100644 index 0000000..82df147 --- /dev/null +++ b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java @@ -0,0 +1,75 @@ +package com.casic.service.impl; + +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component +public class KindsAlarmBulider { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + private final DeviceTypesConfig deviceTypesConfig; + + private final DecimalFormat df = new DecimalFormat("0.00%"); + + public KindsAlarmBulider(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper,DeviceTypesConfig deviceTypesConfig) { + this.smartwellDataMapper = smartwellDataMapper; + this.tiltDataMapper = tiltDataMapper; + this.deviceTypesConfig=deviceTypesConfig; + } + + public List> alarmTypeManger(String beginTime, String endTime) { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + Map typeNameMap = smartwellDeviceType(); + List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap,deviceTypeList); + calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); + return rateDeviceList; + } + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } + + private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap,String[] deviceTypeList) { + List> rateDeviceList = new ArrayList<>(); + List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); + Map alarmCountMap = alarmCountList.stream().collect( + Collectors.toMap( + e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) + ) + ); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map rateDeviceMap = new HashMap<>(); + Integer totalAlarm = deviceCountMap.containsKey(deviceType)?Integer.valueOf(deviceCountMap.get(deviceType)):0; + Integer alarmCount=alarmCountMap.containsKey(deviceType)?Integer.valueOf(alarmCountMap.get(deviceType)):0; + rateDeviceMap.put("rate", totalAlarm==0?"0.00%":df.format(Double.valueOf(alarmCount)/totalAlarm)); + rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); + rateDeviceList.add(rateDeviceMap); + } + return rateDeviceList; + } + + private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { + Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); + Integer totalAlarm = tiltDataMapper.countColudDevice(); + Map rateDeviceMap = new HashMap<>(); + rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : df.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", "云台"); + rateDeviceList.add(rateDeviceMap); + } +} diff --git a/src/main/java/com/casic/service/impl/MapDataServiceImpl.java b/src/main/java/com/casic/service/impl/MapDataServiceImpl.java new file mode 100644 index 0000000..c2640ab --- /dev/null +++ b/src/main/java/com/casic/service/impl/MapDataServiceImpl.java @@ -0,0 +1,113 @@ +package com.casic.service.impl; + +import com.casic.dao.smartwell.MapDataMapper; +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import com.casic.model.ResponseData; +import com.casic.service.MapDataService; +import com.casic.util.DeviceDataFieldTableEnum; +import com.casic.util.DeviceDataTableEnum; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Slf4j +@Service +public class MapDataServiceImpl implements MapDataService { + + @Autowired + private MapDataMapper mapDataMapper; + + @Override + public Object getNowAlarmRecords() { + ResponseData responseData = new ResponseData(); + try { + List alarmNowViewList = this.mapDataMapper.getNowAlarmRecords(); + for (AlarmNowView alarmNowView : alarmNowViewList) { + alarmNowView.setWellTypeName(mapDataMapper.getDictNameByCode(alarmNowView.getWellType())); + } + responseData.setData(alarmNowViewList); + responseData.setCode(200); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:最新报警记录查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + + @Override + public Object getWellList(String keywords, String wellType, String deptid, String isAlarm) { + + ResponseData responseData = new ResponseData(); + try { + List wellList = new ArrayList<>(); + if (null == isAlarm || isAlarm.equals("") == true) { + // 查询并添加当前部门的闸井 + List myList = mapDataMapper.getWellList(keywords, wellType, deptid); + if (null != myList && myList.isEmpty() == false) { + wellList.addAll(myList); + } + } else if (isAlarm.equals("1")) { + // isAlarm = 1 查询所有报警状态的闸井 + wellList = mapDataMapper.getAlarmWellList(keywords, wellType, deptid); + } else { + // isAlarm = 0 查询所有不是报警状态的闸井 + wellList = mapDataMapper.getNotAlarmWellList(keywords, wellType, deptid); + } + responseData.setData(wellList); + responseData.setCode(200); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:点位记录列表查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + public Object getWellInfo(String devcode,String deviceType){ + ResponseData responseData = new ResponseData(); + try { + DeviceDataTableEnum deviceDataTableEnum = DeviceDataTableEnum.DEVICE_TYPE_TABLE.getTableNameMap().get(Integer.valueOf(deviceType)); + String tableName = deviceDataTableEnum.getTableName(); + List> wellInfoList=new ArrayList<>(); + if(deviceType.equals("10")){ + String [] tableNameList=tableName.split(","); + + for(String tableNames:tableNameList){ + Map wellInfoMap=mapDataMapper.getDeviceStatus(devcode,tableNames, + DeviceDataFieldTableEnum.TABLE_FIELD.getTableFieldMap().get(tableName)); + if(!wellInfoMap.containsKey("dataValue")){ + wellInfoMap.put("dataValue",0.0); + } + wellInfoList.add(wellInfoMap); + } + }else { + Map wellInfoMap=mapDataMapper.getDeviceStatus(devcode,tableName, + DeviceDataFieldTableEnum.TABLE_FIELD.getTableFieldMap().get(tableName)); + if(!wellInfoMap.containsKey("dataValue")){ + wellInfoMap.put("dataValue",0.0); + } + wellInfoList.add(wellInfoMap); + } + responseData.setData(wellInfoList); + responseData.setCode(200); + responseData.setSuccess(true); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:点位详情查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + +} diff --git a/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java b/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java new file mode 100644 index 0000000..1946ee3 --- /dev/null +++ b/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java @@ -0,0 +1,60 @@ +package com.casic.service.impl; + +import com.casic.dao.cms.CmsDataMapper; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +public class OperationalStatusBuilder { + + private final DecimalFormat df = new DecimalFormat("0.00%"); + private final CmsDataMapper cmsDataMapper; + + public OperationalStatusBuilder(CmsDataMapper cmsDataMapper) { + this.cmsDataMapper = cmsDataMapper; + } + + public List> OperationalStatusProvider(String beginTime, String endTime) { + List> operaStatusList = getWorkOrder(beginTime,endTime); + operaStatusList.add(getTask(beginTime,endTime)); + operaStatusList.add(getEvent(beginTime,endTime)); + return operaStatusList; + } + + private Map getTask(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalTask(beginTime,endTime); + Map taskMap = new HashMap<>(); + taskMap.put("type", "运维任务"); + taskMap.put("count", String.valueOf(initTask)); + return taskMap; + } + + private List> getWorkOrder(String beginTime, String endTime) { + List> operaStatusList = new ArrayList<>(); + Integer initTask = cmsDataMapper.getTotalWorkOrder(beginTime,endTime); + Map workPageMap = new HashMap<>(); + workPageMap.put("type", "运维工单"); + workPageMap.put("count", String.valueOf(initTask)); + Integer completeTask = cmsDataMapper.getCompleteWorkOrder(beginTime,endTime); + Map completeMap = new HashMap<>(); + completeMap.put("type", "运维完结"); + completeMap.put("count", df.format(Double.valueOf(completeTask) / initTask)); + operaStatusList.add(completeMap); + operaStatusList.add(workPageMap); + return operaStatusList; + } + + private Map getEvent(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalEvent(beginTime,endTime); + Map eventMap = new HashMap<>(); + eventMap.put("type", "运维事件"); + eventMap.put("count", String.valueOf(initTask)); + return eventMap; + } + +} diff --git a/src/main/java/com/casic/service/impl/ScreenDataManger.java b/src/main/java/com/casic/service/impl/ScreenDataManger.java new file mode 100644 index 0000000..6a56a43 --- /dev/null +++ b/src/main/java/com/casic/service/impl/ScreenDataManger.java @@ -0,0 +1,170 @@ +package com.casic.service.impl; + +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.model.ResponseData; +import com.casic.service.ScreenDataService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class ScreenDataManger implements ScreenDataService { + @Autowired + private InstalledDeviceBuilder installedDeviceBuilder; + @Autowired + private KindsAlarmBulider kindsAlarmBulider; + @Autowired + private HealthIndicatorsBuilder healthIndicatorsBuilder; + @Autowired + private DeptTimeSpanBuilder deptTimeSpanBuilder; + @Autowired + private OperationalStatusBuilder operStatusBuilder; + + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + public ScreenDataManger(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, TiltDataMapper tiltDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + this.cmsDataMapper = cmsDataMapper; + this.tiltDataMapper = tiltDataMapper; + } + + public Object getInstalledDevice(String beginTime, String endTime) { + List> installedDeviceList = null; + try { + installedDeviceList = installedDeviceBuilder.InstalledDeviceManger(); + } catch (DataAccessException dex) { + log.error("主题:查询已安装设备的类型和个数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return installedDeviceList; + } + + public Object getKindsAlarmRate(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = kindsAlarmBulider.alarmTypeManger(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:统计汇总各管线权属单位下的燃气管线总长度出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + List> recordsRoadList = null; + try { + recordsRoadList = tiltDataMapper.countColudAlarmRecords(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:显示云台的报警信息出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return recordsRoadList; + } + + public Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime) { + Map healthRoadIndtorMap = null; + try { + healthRoadIndtorMap = healthIndicatorsBuilder.healthRoadIndicatorProvider(isSort,limitNum,beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:以道路维度查看健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return healthRoadIndtorMap; + } + + public Object getDeptTimeSpan(String beginTime, String endTime) { + List> deptTimeSpanList = null; + try { + deptTimeSpanList = deptTimeSpanBuilder.deptTimeSpanProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:按权属单位来汇总,各个权属单位下的燃气管线连续正常运行的时长出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return deptTimeSpanList; + } + + public Object getHealthIndicator(String beginTime, String endTime) { + List> healthIndictorList = null; + try { + healthIndictorList = healthIndicatorsBuilder.healthIndicatorProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return healthIndictorList; + } + + public Object getDeptIndicator(String beginTime, String endTime) { + List> healthIndictorList = null; + try { + healthIndictorList = healthIndicatorsBuilder.deptIndicatorProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:权属单位维度健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return healthIndictorList; + } + + public Object getDeviceList(String beginTime, String endTime) { + List> alarmDeviceList = null; + try { + alarmDeviceList = smartwellDataMapper.getAlarmDeviceList(); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + alarmDeviceList.forEach( + alarmDevice -> { + alarmDevice.put("isAlarm", alarmDevice.containsKey("isAlarm") ? "1" : "0"); + alarmDevice.put("responsibleDept", deptNameMap.get(String.valueOf(alarmDevice.get("responsibleDept")))); + } + ); + } catch (DataAccessException dex) { + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return alarmDeviceList; + } + + public Object getOperationalStatus(String beginTime, String endTime) { + + ResponseData responseData = new ResponseData(); + try { + List> operaStatusList = operStatusBuilder.OperationalStatusProvider(beginTime, endTime); + responseData.setSuccess(true); + responseData.setCode(200); + responseData.setMessage("查询成功"); + responseData.setData(operaStatusList); + } catch (DataAccessException dex) { + log.error("主题:运维情况查询出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = smartwellDataMapper.countAlarmByRoad(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:以道路的维度统计燃气管线监控中的报警情况出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + public Object getInspectRoad(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = cmsDataMapper.countElectronicTask(); + } catch (DataAccessException dex) { + log.error("主题:汇总显示个道路的巡检运维次数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + +} diff --git a/src/main/java/com/casic/util/DeviceDataFieldTableEnum.java b/src/main/java/com/casic/util/DeviceDataFieldTableEnum.java new file mode 100644 index 0000000..5fd7a56 --- /dev/null +++ b/src/main/java/com/casic/util/DeviceDataFieldTableEnum.java @@ -0,0 +1,37 @@ +package com.casic.util; + +import java.util.HashMap; +import java.util.Map; + +public enum DeviceDataFieldTableEnum { + + TABLE_FIELD(new HashMap() { + { + put("data_dig", "ddata AS dataValue"); + put("data_gas", "strength AS dataValue"); + put("data_gasliquid_gas", "strength AS dataValue"); + put("data_gasliquid_liquid", "liquiddata AS dataValue"); + put("data_gas_dector", "gas_sample_value AS dataValue"); + put("data_harmful_gas", "CONCAT(CO, ', ', CH4, ', ', H2S, ', ', O2) AS dataValue"); + put("data_hydrant", "0 AS dataValue"); + put("data_liquid", "liquiddata AS dataValue"); + put("data_noise", "ddata AS dataValue"); + put("data_temp_hum", "CONCAT(TEMPERATURE, ', ', HUMIDITY) AS dataValue"); + put("data_tube", "strength AS dataValue"); + put("data_wellcover", "descn AS dataValue"); + put("data_temp_press", "press AS dataValue"); + put("data_pantilt", "concentration AS dataValue"); + put("data_wellcover_loca", "0 AS dataValue"); + put("data_wellplus", "0 AS dataValue"); + put("data_h2s", "stength AS dataValue"); + } + }); + public Map tableNameMap; + + DeviceDataFieldTableEnum(Map tableNameMap) { + this.tableNameMap = tableNameMap; + } + public Map getTableFieldMap() { + return tableNameMap; + } +} diff --git a/src/main/java/com/casic/util/DeviceDataTableEnum.java b/src/main/java/com/casic/util/DeviceDataTableEnum.java new file mode 100644 index 0000000..a67ad6d --- /dev/null +++ b/src/main/java/com/casic/util/DeviceDataTableEnum.java @@ -0,0 +1,76 @@ +package com.casic.util; + +import java.util.HashMap; + +/** + * @author cz + * @date 2022-7-15 + * 上传数据总记录数 + */ +public enum DeviceDataTableEnum { + + DATA_DIG("data_dig", "井盖状态监测仪"), + DATA_GAS("data_gas", "液位监测仪"), + DATA_GASLIQUID("data_gasliquid_gas,data_gasliquid_liquid", "有害气体监测仪"), + DATA_GAS_DECTOR("data_gas_dector", "燃气智能监测终端"), + DATA_HARMFUL_GAS("data_harmful_gas", "温湿度监测仪"), + DATA_HYDRANT("data_hydrant", "开挖监测仪"), + DATA_LIQUID("data_liquid", "井盖定位监测仪"), + DATA_NOISE("data_noise", "噪声记录仪"), + DATA_PANTILT("data_pantilt", "温度压力监测仪"), + DATA_TEMP_HUM("data_temp_hum", "燃气智能监测终端(一体化)"), + DATA_TUBE("data_tube", "消防栓防盗水监测仪"), + DATA_WELLCOVER("data_wellcover", "管盯"), + DATA_WELLCOVER_DATA("data_temp_press", "井盖液位一体机"), + DATA_WELLCOVER_LOCA("data_wellcover_loca", "硫化氢检测终端"), + DATA_WELLPLUS("data_wellplus", "激光甲烷云台"), + DATA_H2S("data_h2s", "可燃气体"), + DEVICE_TYPE_TABLE(new HashMap() {{ + put(1, DATA_WELLCOVER); + put(2, DATA_LIQUID); + put(3, DATA_HARMFUL_GAS); + put(4, DATA_GAS); + put(5, DATA_TEMP_HUM); + put(6, DATA_DIG); + put(7, DATA_WELLCOVER_LOCA); + put(8, DATA_NOISE); + put(9, DATA_WELLCOVER_DATA); + put(10, DATA_GASLIQUID); + put(11, DATA_HYDRANT); + put(12, DATA_TUBE); + put(13, DATA_WELLPLUS); + put(14, DATA_H2S); + put(21, DATA_PANTILT); + put(101, DATA_GAS_DECTOR); + } + }); + + String typeName; + String tableName; + + DeviceDataTableEnum(String tableName, String typeName) { + this.typeName = typeName; + this.tableName = tableName; + } + + public String getTypeName() { + return typeName; + } + + public String getTableName() { + return tableName; + } + + + public HashMap tableNameMap; + + DeviceDataTableEnum(HashMap tableNameMap) { + this.tableNameMap = tableNameMap; + } + + public HashMap getTableNameMap() { + return tableNameMap; + } + + +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml new file mode 100644 index 0000000..6d28b27 --- /dev/null +++ b/src/main/resources/application-dev.yml @@ -0,0 +1,43 @@ +server: + port: 11312 +################### spring配置 ################### +spring: + datasource: + smartwell: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://111.198.10.15:11209/smartwell_zq_cs + username: postgres + password: Casic203 + cms: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://111.198.10.15:11209/smartwell_cms + username: postgres + password: Casic203 + spantilt: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://111.198.10.15:11102/casic_pan_tilt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&&useSSL=true + username: root + password: Casic203! + session: + store-type: redis + redis: + host: 111.198.10.15 + port: 11412 + password: ew5T4K3#203lwh + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + # session: + # store-type: redis +#flowable数据源和多数据源配置 +casic: + kaptcha-open: false #是否开启登录时验证码 (true/false) + #kaptcha-open: false #是否开启登录时验证码 (true/false) + db: + init: + enable: false + spring-session-open: false #开启spring session +logging: + level.root: error + level.com.casic: error + file: + path: logs/ + name: missiles.log \ No newline at end of file diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml new file mode 100644 index 0000000..4fee268 --- /dev/null +++ b/src/main/resources/application-prod.yml @@ -0,0 +1,43 @@ +server: + port: 11312 +################### spring配置 ################### +spring: + datasource: + smartwell: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://111.198.10.15:11209/smartwell + username: postgres + password: Casic203 + cms: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://111.198.10.15:11209/smartwell_cms + username: postgres + password: Casic203 + span_tilt: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://111.198.10.15:11102/casic_span_tilt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&&useSSL=true + username: root + password: Casic203! + session: + store-type: redis + redis: + host: 111.198.10.15 + port: 11412 + password: ew5T4K3#203lwh + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + # session: + # store-type: redis +#flowable数据源和多数据源配置 +casic: + kaptcha-open: false #是否开启登录时验证码 (true/false) + #kaptcha-open: false #是否开启登录时验证码 (true/false) + db: + init: + enable: false + spring-session-open: false #开启spring session +logging: + level.root: error + level.com.casic: error + file: + path: logs/ + name: missiles.log \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/casic/controller/MapDataController.java b/src/main/java/com/casic/controller/MapDataController.java new file mode 100644 index 0000000..b897b95 --- /dev/null +++ b/src/main/java/com/casic/controller/MapDataController.java @@ -0,0 +1,47 @@ +package com.casic.controller; + +import com.casic.service.MapDataService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/overview") +public class MapDataController { + + private final MapDataService mapDataService; + + public MapDataController(MapDataService mapDataService) { + this.mapDataService = mapDataService; + } + + /** + * 获取列表 + */ + @RequestMapping(value = "/wellList") + public Object getWellList(@RequestParam(required = false) String keywords, + @RequestParam(required = false) String wellType, + @RequestParam(required = false) String deptid, + @RequestParam(required = false) String isAlarm) { + + return mapDataService.getWellList(keywords,wellType,deptid,isAlarm); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/alarmNow") + public Object alarmNow() { + return mapDataService.getNowAlarmRecords(); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/wellInfo") + public Object getWellInfo(@RequestParam(value = "devcode", required = true) String devcode, + @RequestParam(value = "deviceType", required = true) String deviceType) { + return mapDataService.getWellInfo(devcode,deviceType); + } +} diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java new file mode 100644 index 0000000..04f8d97 --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -0,0 +1,210 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + public ScreenDataController(ScreenDataService screenDataService) { + this.screenDataService = screenDataService; + } + + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/line-length") + public Object getLineLength(String beginTime, String endTime) { +// return screenDataService.getLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + " \"deptName\":\"圣井燃气\",\n" + + " \"totalLength\":440\n" + + " },\n" + + " {\n" + + " \"deptName\":\"华气燃气\",\n" + + " \"totalLength\":810\n" + + " },\n" + + " {\n" + + " \"typeName\":\"中燃燃气\",\n" + + " \"totalLength\":500\n" + + " },\n" + + " {\n" + + " \"typeName\":\"正和燃气\",\n" + + " \"totalLength\":520\n" + + " },\n" + + " {\n" + + " \"typeName\":\"华罚燃气\",\n" + + " \"totalLength\":630\n" + + " }\n" + + " ]"; + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + /** + * 分类汇总燃气管线监管人员的类型和数量 + */ + @RequestMapping("/staff") + public Object getObvserStaff(String beginTime, String endTime) { +// return screenDataService.getObvserStaff(beginTime, endTime); + return "{\n" + + " \t\"总人数\":2022,\n" + + "\t\"staffDataList\":[\n" + + " {\n" + + "\t\t\"岗位名称\":\"管理人员\",\n" + + "\t\t\"总计\":72\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"运维人员\",\n" + + "\t\t\"总计\":874\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"施工人员\",\n" + + "\t\t\"总计\":456\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"统计人员\",\n" + + "\t\t\"总计\":745\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"技术人员\",\n" + + "\t\t\"总计\":455\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"监管人员\",\n" + + "\t\t\"总计\":644\n" + + " }]\n" + + " }"; + } + + /** + * 以道路的维度来统计汇总燃气管线的长度和权属单位 + */ + @RequestMapping("/road-line-length") + public Object getRoadLineLength(String beginTime, String endTime) { +// return screenDataService.getRoadLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + "\t\t\"所属道路\":\"双山西街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"圣井燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"世纪大道\",\n" + + "\t\t\"管线长度/km\":54,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"桃水大街\",\n" + + "\t\t\"管线长度/km\":32,\n" + + "\t\t\"权属单位\":\"中燃燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"鲁态大街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " }\n" + + "]"; + } + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + +// /** +// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/list") +// public Object getDeviceList(String beginTime, String endTime) { +// return screenDataService.getDeviceList(beginTime,endTime); +// } +// +// /** +// * 包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/Info") +// public Object getDeviceInfo(String wellCode,String deviceType) { +// return screenDataService.getDeviceInfo(wellCode,deviceType); +// } + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + /** + * 显示云台的报警信息 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/cms/CmsDataMapper.java b/src/main/java/com/casic/dao/cms/CmsDataMapper.java new file mode 100644 index 0000000..e57975e --- /dev/null +++ b/src/main/java/com/casic/dao/cms/CmsDataMapper.java @@ -0,0 +1,23 @@ +package com.casic.dao.cms; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface CmsDataMapper { + + Integer countElectronicDevice(); + + List> countElectronicTask(); + + Integer getTotalWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getCompleteWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalEvent(@Param("beginTime") String beginTime, @Param("endTime") String endTime); +} diff --git a/src/main/java/com/casic/dao/smartwell/MapDataMapper.java b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java new file mode 100644 index 0000000..8e56978 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java @@ -0,0 +1,25 @@ +package com.casic.dao.smartwell; + +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface MapDataMapper { + + List getWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNotAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNowAlarmRecords(); + + String getDictNameByCode(@Param("wellType") String wellType); + + Map getDeviceStatus(@Param("devcode") String devcode, @Param("tableName") String tableName, @Param("dataField") String dataField); +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java new file mode 100644 index 0000000..0294b14 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -0,0 +1,43 @@ +package com.casic.dao.smartwell; + + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SmartwellDataMapper { + + List> countDeviceByType(); + + List> getTypeName(); + + List> countAlarmType(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getDeviceListByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countDeviceNumber(); + + Integer countAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countDeviceNumberByDept(); + + List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countRoadNumber(); + + List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDeviceList(); + + List> getDeptNameList(); + +} diff --git a/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java new file mode 100644 index 0000000..e6ba279 --- /dev/null +++ b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java @@ -0,0 +1,32 @@ +package com.casic.dao.spantilt; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface TiltDataMapper { + /** + * 已安装设备 + * + * @return + */ + Integer countColudDevice(); + + /** + * 警告 + * + * @return + */ + Integer countColudAlarm(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + + /** + * 云台报警信息 + * + * @return + */ + List> countColudAlarmRecords(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + +} diff --git a/src/main/java/com/casic/model/AlarmNowView.java b/src/main/java/com/casic/model/AlarmNowView.java new file mode 100644 index 0000000..6eebafc --- /dev/null +++ b/src/main/java/com/casic/model/AlarmNowView.java @@ -0,0 +1,108 @@ +package com.casic.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +public class AlarmNowView { + + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date alarmTime; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + +} diff --git a/src/main/java/com/casic/model/BusWellInfo.java b/src/main/java/com/casic/model/BusWellInfo.java new file mode 100644 index 0000000..f4b8eba --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfo.java @@ -0,0 +1,192 @@ +package com.casic.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + //@NotEmpty(message="井深不能为空") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + + /** + * 区域 + */ + private String road; + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + + + /** + * 位置 + */ + private String position; + /** + * 部门编号 + */ + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; +// /** +// * 责任人 +// */ +// @TableField("STAFF") +// private String staff; +// /** +// * 电话 +// */ +// @TableField("TEL") +// private String tel; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/src/main/java/com/casic/model/BusWellInfoDto.java b/src/main/java/com/casic/model/BusWellInfoDto.java new file mode 100644 index 0000000..48610f2 --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfoDto.java @@ -0,0 +1,276 @@ +package com.casic.model; + + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class BusWellInfoDto { + private Long id; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + private String deviceType; + private String deptid; + private String deptName; + private Float deep; + private String position; + private String coordinateX; + private String coordinateY; + private String lngBaidu; + private String latBaidu; + private String lngGaode; + private String latGaode; + private String photos; + private String notes; + private String bfzt; + private String bfztName; + private String area; + private String staff; + private String tel; + private String valid; + private String ts; + private List watchData; + + Map map = new HashMap(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + map.put("id", id); + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + map.put("wellCode", wellCode); + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + map.put("wellName", wellName); + } + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + map.put("deviceType", deviceType); + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + map.put("wellType", wellType); + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + map.put("wellTypeName", wellTypeName); + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + map.put("deptid", deptid); + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + map.put("deptName", deptName); + } + + public Float getDeep() { + return deep; + } + + public void setDeep(Float deep) { + this.deep = deep; + map.put("deep", deep); + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + map.put("position", position); + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + map.put("coordinateX", coordinateX); + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + map.put("coordinateY", coordinateY); + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + map.put("lngBaidu", lngBaidu); + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + map.put("latBaidu", latBaidu); + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + map.put("lngGaode", lngGaode); + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + map.put("latGaode", latGaode); + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + map.put("photos", photos); + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + map.put("notes", notes); + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + map.put("bfzt", bfzt); + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + map.put("bfztName", bfztName); + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + map.put("area", area); + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + map.put("staff", staff); + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + map.put("tel", tel); + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + map.put("valid", valid); + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + map.put("ts", ts); + } + + public List getWatchData() { + return watchData; + } + + public void setWatchData(List watchData) { + this.watchData = watchData; + map.put("watchData", watchData); + } + + public Map toMap() { + return map; + } +} diff --git a/src/main/java/com/casic/model/ResponseData.java b/src/main/java/com/casic/model/ResponseData.java new file mode 100644 index 0000000..356775a --- /dev/null +++ b/src/main/java/com/casic/model/ResponseData.java @@ -0,0 +1,19 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Boolean success; + private Integer code; + private String message; + private Object data; +} \ No newline at end of file diff --git a/src/main/java/com/casic/model/WatchDataDto.java b/src/main/java/com/casic/model/WatchDataDto.java new file mode 100644 index 0000000..d50cfb5 --- /dev/null +++ b/src/main/java/com/casic/model/WatchDataDto.java @@ -0,0 +1,32 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author lenovo + */ +@Data +public class WatchDataDto implements Cloneable{ + + private Long deviceId; + private String devcode; + private String installDate; + private String onlineState; + private String onlineStateName; + private String watchType; + private String type; // 地图总览时使用 + private String data = ""; + private String value = ""; // 地图总览时使用 + private String logtime = "";//数据更新时间(设备上报时间) + + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/casic/service/MapDataService.java b/src/main/java/com/casic/service/MapDataService.java new file mode 100644 index 0000000..5f77810 --- /dev/null +++ b/src/main/java/com/casic/service/MapDataService.java @@ -0,0 +1,12 @@ +package com.casic.service; + + +public interface MapDataService { + + Object getWellList(String keywords, String wellType, String deptid, String isAlarm); + + Object getNowAlarmRecords(); + + Object getWellInfo(String devcode,String deviceType); + +} diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java new file mode 100644 index 0000000..b4dd026 --- /dev/null +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -0,0 +1,27 @@ +package com.casic.service; + +public interface ScreenDataService { + Object getInstalledDevice(String beginTime, String endTime); + + Object getKindsAlarmRate(String beginTime, String endTime); + + Object getAlarmRecordsByStation(String beginTime, String endTime); + + Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + + Object getDeptTimeSpan(String beginTime, String endTime); + + Object getHealthIndicator(String beginTime, String endTime); + + Object getDeptIndicator(String beginTime, String endTime); + + Object getDeviceList(String beginTime, String endTime); + + Object getOperationalStatus(String beginTime, String endTime); + + Object getAlarmRecordsByRoad(String beginTime, String endTime); + + Object getInspectRoad(String beginTime, String endTime); + + +} diff --git a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java new file mode 100644 index 0000000..661018b --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java @@ -0,0 +1,88 @@ +package com.casic.service.impl; + + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class DeptTimeSpanBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00"); + + public DeptTimeSpanBuilder(SmartwellDataMapper smartwellDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + } + + public List> deptTimeSpanProvider(String beginTime, String endTime) { + Map> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = getAlarmDevice(beginTime, endTime); + Map> currentDeviceTimeMap = MergeDeviceSpan(normalDeviceDeptMap, alarmDeviceDeptMap); + List> deptTimeSpanMap = calculateDeptTime(currentDeviceTimeMap); + return deptTimeSpanMap; + } + + private Map> getNormalDevice(String beginTime, String endTime) { + List> normalDeviceList = smartwellDataMapper.getNormalDevice(beginTime, endTime); + Map> normalDeviceDeptMap = normalDeviceList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return normalDeviceDeptMap; + } + + private Map> getAlarmDevice(String beginTime, String endTime) { + List> alarmDeviceDeptList = smartwellDataMapper.getAlarmDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = alarmDeviceDeptList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return alarmDeviceDeptMap; + } + + private Map> MergeDeviceSpan(Map> normalDeviceDeptMap, + Map> alarmDeviceDeptMap) { + for (Map.Entry> normalMap : normalDeviceDeptMap.entrySet()) { + String mapKey = normalMap.getKey(); + Map normalmap = normalMap.getValue(); + if (alarmDeviceDeptMap.containsKey(mapKey)) { + Map alarmMap = alarmDeviceDeptMap.get(mapKey); + for (Map.Entry alarmMapItem : alarmMap.entrySet()) { + String deviceCode = alarmMapItem.getKey(); + normalmap.put(deviceCode, alarmMapItem.getValue()); + } + } + } + return normalDeviceDeptMap; + } + + private List> calculateDeptTime(Map> currentDeviceTimeMap) { + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptTimeSpanList = new ArrayList<>(); + for (Map.Entry> currentDeviceMap : currentDeviceTimeMap.entrySet()) { + String deptid = currentDeviceMap.getKey(); + Map currentDeviceItemMap = currentDeviceMap.getValue(); + Double timeSpan = 0.00; + for (Map.Entry timeMapItem : currentDeviceItemMap.entrySet()) { + timeSpan += StringUtils.isEmpty(timeMapItem.getValue()) || timeMapItem.getValue() == "null" ? 0 : Double.valueOf(timeMapItem.getValue()); + } + Map deptTimeSpanMap = new HashMap<>(); + deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); + deptTimeSpanMap.put("count", df.format(timeSpan)); + deptTimeSpanList.add(deptTimeSpanMap); + } + return deptTimeSpanList; + } + +} diff --git a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java new file mode 100644 index 0000000..ffd0f1b --- /dev/null +++ b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java @@ -0,0 +1,96 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class HealthIndicatorsBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00%"); + + public HealthIndicatorsBuilder(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + this.tiltDataMapper = tiltDataMapper; + } + + + public List> healthIndicatorProvider(String beginTime, String endTime) { + List> healthIndictorList = new ArrayList<>(); + healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); + healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); + return healthIndictorList; + } + + + public List> deptIndicatorProvider(String beginTime, String endTime) { + List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); + List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); + List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); + return deptIndicatorList; + } + + public Map healthRoadIndicatorProvider(String isSort,String limitNum,String beginTime, String endTime) { + return smartwellHealthRoadIndicator(isSort,limitNum,beginTime, endTime); + } + + private Map smartwellHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); + Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); + smartwellHealth.put("typeName", "管网健康指数"); + smartwellHealth.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map tiltHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = tiltDataMapper.countColudDevice(); + Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); + smartwellHealth.put("typeName", "场站健康指数"); + smartwellHealth.put("count", df.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map smartwellHealthRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer roadNumber = smartwellDataMapper.countRoadNumber(); + Integer alarmRoad = smartwellDataMapper.countAlarmRoad(isSort,limitNum,beginTime, endTime); + smartwellHealth.put("typeName", "道路健康指数"); + smartwellHealth.put("count", df.format((Double.valueOf(roadNumber - alarmRoad)) / roadNumber)); + return smartwellHealth; + } + + private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { + Map alarmDeptMap = alarmDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) + ); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptIndicatorList = new ArrayList<>(); + deviceDeptNumberList.forEach( + deptNameNumberMap -> { + Map deptIndicatorMap = new HashMap<>(); + int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); + String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); + int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); + deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); + deptIndicatorMap.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + deptIndicatorList.add(deptIndicatorMap); + } + ); + return deptIndicatorList; + } +} diff --git a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java new file mode 100644 index 0000000..8b1209d --- /dev/null +++ b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java @@ -0,0 +1,71 @@ +package com.casic.service.impl; + +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 + */ +@Service +public class InstalledDeviceBuilder { + + private final DeviceTypesConfig deviceTypesConfig; + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + public InstalledDeviceBuilder(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, + TiltDataMapper tiltDataMapper, DeviceTypesConfig deviceTypesConfig) { + this.smartwellDataMapper = smartwellDataMapper; + this.cmsDataMapper = cmsDataMapper; + this.tiltDataMapper = tiltDataMapper; + this.deviceTypesConfig = deviceTypesConfig; + } + + public List> InstalledDeviceManger() { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + List> installedDeviceList = new ArrayList<>(); + cmsInstalledDevice(installedDeviceList); + tiltInstalledDevice(installedDeviceList); + smartwellInstalledDevice(installedDeviceList, deviceTypeList); + return installedDeviceList; + } + + private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); + installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); + installedDeviceList.add(installedDeviceMap); + } + } + + private void cmsInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); + installedDeviceMap.put("typeName", "电子标识器"); + installedDeviceList.add(installedDeviceMap); + } + + private void tiltInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); + installedDeviceMap.put("typeName", "云台"); + installedDeviceList.add(installedDeviceMap); + } +} diff --git a/src/main/java/com/casic/service/impl/KindsAlarmBulider.java b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java new file mode 100644 index 0000000..82df147 --- /dev/null +++ b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java @@ -0,0 +1,75 @@ +package com.casic.service.impl; + +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component +public class KindsAlarmBulider { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + private final DeviceTypesConfig deviceTypesConfig; + + private final DecimalFormat df = new DecimalFormat("0.00%"); + + public KindsAlarmBulider(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper,DeviceTypesConfig deviceTypesConfig) { + this.smartwellDataMapper = smartwellDataMapper; + this.tiltDataMapper = tiltDataMapper; + this.deviceTypesConfig=deviceTypesConfig; + } + + public List> alarmTypeManger(String beginTime, String endTime) { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + Map typeNameMap = smartwellDeviceType(); + List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap,deviceTypeList); + calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); + return rateDeviceList; + } + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } + + private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap,String[] deviceTypeList) { + List> rateDeviceList = new ArrayList<>(); + List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); + Map alarmCountMap = alarmCountList.stream().collect( + Collectors.toMap( + e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) + ) + ); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map rateDeviceMap = new HashMap<>(); + Integer totalAlarm = deviceCountMap.containsKey(deviceType)?Integer.valueOf(deviceCountMap.get(deviceType)):0; + Integer alarmCount=alarmCountMap.containsKey(deviceType)?Integer.valueOf(alarmCountMap.get(deviceType)):0; + rateDeviceMap.put("rate", totalAlarm==0?"0.00%":df.format(Double.valueOf(alarmCount)/totalAlarm)); + rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); + rateDeviceList.add(rateDeviceMap); + } + return rateDeviceList; + } + + private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { + Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); + Integer totalAlarm = tiltDataMapper.countColudDevice(); + Map rateDeviceMap = new HashMap<>(); + rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : df.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", "云台"); + rateDeviceList.add(rateDeviceMap); + } +} diff --git a/src/main/java/com/casic/service/impl/MapDataServiceImpl.java b/src/main/java/com/casic/service/impl/MapDataServiceImpl.java new file mode 100644 index 0000000..c2640ab --- /dev/null +++ b/src/main/java/com/casic/service/impl/MapDataServiceImpl.java @@ -0,0 +1,113 @@ +package com.casic.service.impl; + +import com.casic.dao.smartwell.MapDataMapper; +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import com.casic.model.ResponseData; +import com.casic.service.MapDataService; +import com.casic.util.DeviceDataFieldTableEnum; +import com.casic.util.DeviceDataTableEnum; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Slf4j +@Service +public class MapDataServiceImpl implements MapDataService { + + @Autowired + private MapDataMapper mapDataMapper; + + @Override + public Object getNowAlarmRecords() { + ResponseData responseData = new ResponseData(); + try { + List alarmNowViewList = this.mapDataMapper.getNowAlarmRecords(); + for (AlarmNowView alarmNowView : alarmNowViewList) { + alarmNowView.setWellTypeName(mapDataMapper.getDictNameByCode(alarmNowView.getWellType())); + } + responseData.setData(alarmNowViewList); + responseData.setCode(200); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:最新报警记录查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + + @Override + public Object getWellList(String keywords, String wellType, String deptid, String isAlarm) { + + ResponseData responseData = new ResponseData(); + try { + List wellList = new ArrayList<>(); + if (null == isAlarm || isAlarm.equals("") == true) { + // 查询并添加当前部门的闸井 + List myList = mapDataMapper.getWellList(keywords, wellType, deptid); + if (null != myList && myList.isEmpty() == false) { + wellList.addAll(myList); + } + } else if (isAlarm.equals("1")) { + // isAlarm = 1 查询所有报警状态的闸井 + wellList = mapDataMapper.getAlarmWellList(keywords, wellType, deptid); + } else { + // isAlarm = 0 查询所有不是报警状态的闸井 + wellList = mapDataMapper.getNotAlarmWellList(keywords, wellType, deptid); + } + responseData.setData(wellList); + responseData.setCode(200); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:点位记录列表查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + public Object getWellInfo(String devcode,String deviceType){ + ResponseData responseData = new ResponseData(); + try { + DeviceDataTableEnum deviceDataTableEnum = DeviceDataTableEnum.DEVICE_TYPE_TABLE.getTableNameMap().get(Integer.valueOf(deviceType)); + String tableName = deviceDataTableEnum.getTableName(); + List> wellInfoList=new ArrayList<>(); + if(deviceType.equals("10")){ + String [] tableNameList=tableName.split(","); + + for(String tableNames:tableNameList){ + Map wellInfoMap=mapDataMapper.getDeviceStatus(devcode,tableNames, + DeviceDataFieldTableEnum.TABLE_FIELD.getTableFieldMap().get(tableName)); + if(!wellInfoMap.containsKey("dataValue")){ + wellInfoMap.put("dataValue",0.0); + } + wellInfoList.add(wellInfoMap); + } + }else { + Map wellInfoMap=mapDataMapper.getDeviceStatus(devcode,tableName, + DeviceDataFieldTableEnum.TABLE_FIELD.getTableFieldMap().get(tableName)); + if(!wellInfoMap.containsKey("dataValue")){ + wellInfoMap.put("dataValue",0.0); + } + wellInfoList.add(wellInfoMap); + } + responseData.setData(wellInfoList); + responseData.setCode(200); + responseData.setSuccess(true); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:点位详情查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + +} diff --git a/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java b/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java new file mode 100644 index 0000000..1946ee3 --- /dev/null +++ b/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java @@ -0,0 +1,60 @@ +package com.casic.service.impl; + +import com.casic.dao.cms.CmsDataMapper; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +public class OperationalStatusBuilder { + + private final DecimalFormat df = new DecimalFormat("0.00%"); + private final CmsDataMapper cmsDataMapper; + + public OperationalStatusBuilder(CmsDataMapper cmsDataMapper) { + this.cmsDataMapper = cmsDataMapper; + } + + public List> OperationalStatusProvider(String beginTime, String endTime) { + List> operaStatusList = getWorkOrder(beginTime,endTime); + operaStatusList.add(getTask(beginTime,endTime)); + operaStatusList.add(getEvent(beginTime,endTime)); + return operaStatusList; + } + + private Map getTask(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalTask(beginTime,endTime); + Map taskMap = new HashMap<>(); + taskMap.put("type", "运维任务"); + taskMap.put("count", String.valueOf(initTask)); + return taskMap; + } + + private List> getWorkOrder(String beginTime, String endTime) { + List> operaStatusList = new ArrayList<>(); + Integer initTask = cmsDataMapper.getTotalWorkOrder(beginTime,endTime); + Map workPageMap = new HashMap<>(); + workPageMap.put("type", "运维工单"); + workPageMap.put("count", String.valueOf(initTask)); + Integer completeTask = cmsDataMapper.getCompleteWorkOrder(beginTime,endTime); + Map completeMap = new HashMap<>(); + completeMap.put("type", "运维完结"); + completeMap.put("count", df.format(Double.valueOf(completeTask) / initTask)); + operaStatusList.add(completeMap); + operaStatusList.add(workPageMap); + return operaStatusList; + } + + private Map getEvent(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalEvent(beginTime,endTime); + Map eventMap = new HashMap<>(); + eventMap.put("type", "运维事件"); + eventMap.put("count", String.valueOf(initTask)); + return eventMap; + } + +} diff --git a/src/main/java/com/casic/service/impl/ScreenDataManger.java b/src/main/java/com/casic/service/impl/ScreenDataManger.java new file mode 100644 index 0000000..6a56a43 --- /dev/null +++ b/src/main/java/com/casic/service/impl/ScreenDataManger.java @@ -0,0 +1,170 @@ +package com.casic.service.impl; + +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.model.ResponseData; +import com.casic.service.ScreenDataService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class ScreenDataManger implements ScreenDataService { + @Autowired + private InstalledDeviceBuilder installedDeviceBuilder; + @Autowired + private KindsAlarmBulider kindsAlarmBulider; + @Autowired + private HealthIndicatorsBuilder healthIndicatorsBuilder; + @Autowired + private DeptTimeSpanBuilder deptTimeSpanBuilder; + @Autowired + private OperationalStatusBuilder operStatusBuilder; + + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + public ScreenDataManger(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, TiltDataMapper tiltDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + this.cmsDataMapper = cmsDataMapper; + this.tiltDataMapper = tiltDataMapper; + } + + public Object getInstalledDevice(String beginTime, String endTime) { + List> installedDeviceList = null; + try { + installedDeviceList = installedDeviceBuilder.InstalledDeviceManger(); + } catch (DataAccessException dex) { + log.error("主题:查询已安装设备的类型和个数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return installedDeviceList; + } + + public Object getKindsAlarmRate(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = kindsAlarmBulider.alarmTypeManger(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:统计汇总各管线权属单位下的燃气管线总长度出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + List> recordsRoadList = null; + try { + recordsRoadList = tiltDataMapper.countColudAlarmRecords(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:显示云台的报警信息出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return recordsRoadList; + } + + public Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime) { + Map healthRoadIndtorMap = null; + try { + healthRoadIndtorMap = healthIndicatorsBuilder.healthRoadIndicatorProvider(isSort,limitNum,beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:以道路维度查看健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return healthRoadIndtorMap; + } + + public Object getDeptTimeSpan(String beginTime, String endTime) { + List> deptTimeSpanList = null; + try { + deptTimeSpanList = deptTimeSpanBuilder.deptTimeSpanProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:按权属单位来汇总,各个权属单位下的燃气管线连续正常运行的时长出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return deptTimeSpanList; + } + + public Object getHealthIndicator(String beginTime, String endTime) { + List> healthIndictorList = null; + try { + healthIndictorList = healthIndicatorsBuilder.healthIndicatorProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return healthIndictorList; + } + + public Object getDeptIndicator(String beginTime, String endTime) { + List> healthIndictorList = null; + try { + healthIndictorList = healthIndicatorsBuilder.deptIndicatorProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:权属单位维度健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return healthIndictorList; + } + + public Object getDeviceList(String beginTime, String endTime) { + List> alarmDeviceList = null; + try { + alarmDeviceList = smartwellDataMapper.getAlarmDeviceList(); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + alarmDeviceList.forEach( + alarmDevice -> { + alarmDevice.put("isAlarm", alarmDevice.containsKey("isAlarm") ? "1" : "0"); + alarmDevice.put("responsibleDept", deptNameMap.get(String.valueOf(alarmDevice.get("responsibleDept")))); + } + ); + } catch (DataAccessException dex) { + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return alarmDeviceList; + } + + public Object getOperationalStatus(String beginTime, String endTime) { + + ResponseData responseData = new ResponseData(); + try { + List> operaStatusList = operStatusBuilder.OperationalStatusProvider(beginTime, endTime); + responseData.setSuccess(true); + responseData.setCode(200); + responseData.setMessage("查询成功"); + responseData.setData(operaStatusList); + } catch (DataAccessException dex) { + log.error("主题:运维情况查询出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = smartwellDataMapper.countAlarmByRoad(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:以道路的维度统计燃气管线监控中的报警情况出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + public Object getInspectRoad(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = cmsDataMapper.countElectronicTask(); + } catch (DataAccessException dex) { + log.error("主题:汇总显示个道路的巡检运维次数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + +} diff --git a/src/main/java/com/casic/util/DeviceDataFieldTableEnum.java b/src/main/java/com/casic/util/DeviceDataFieldTableEnum.java new file mode 100644 index 0000000..5fd7a56 --- /dev/null +++ b/src/main/java/com/casic/util/DeviceDataFieldTableEnum.java @@ -0,0 +1,37 @@ +package com.casic.util; + +import java.util.HashMap; +import java.util.Map; + +public enum DeviceDataFieldTableEnum { + + TABLE_FIELD(new HashMap() { + { + put("data_dig", "ddata AS dataValue"); + put("data_gas", "strength AS dataValue"); + put("data_gasliquid_gas", "strength AS dataValue"); + put("data_gasliquid_liquid", "liquiddata AS dataValue"); + put("data_gas_dector", "gas_sample_value AS dataValue"); + put("data_harmful_gas", "CONCAT(CO, ', ', CH4, ', ', H2S, ', ', O2) AS dataValue"); + put("data_hydrant", "0 AS dataValue"); + put("data_liquid", "liquiddata AS dataValue"); + put("data_noise", "ddata AS dataValue"); + put("data_temp_hum", "CONCAT(TEMPERATURE, ', ', HUMIDITY) AS dataValue"); + put("data_tube", "strength AS dataValue"); + put("data_wellcover", "descn AS dataValue"); + put("data_temp_press", "press AS dataValue"); + put("data_pantilt", "concentration AS dataValue"); + put("data_wellcover_loca", "0 AS dataValue"); + put("data_wellplus", "0 AS dataValue"); + put("data_h2s", "stength AS dataValue"); + } + }); + public Map tableNameMap; + + DeviceDataFieldTableEnum(Map tableNameMap) { + this.tableNameMap = tableNameMap; + } + public Map getTableFieldMap() { + return tableNameMap; + } +} diff --git a/src/main/java/com/casic/util/DeviceDataTableEnum.java b/src/main/java/com/casic/util/DeviceDataTableEnum.java new file mode 100644 index 0000000..a67ad6d --- /dev/null +++ b/src/main/java/com/casic/util/DeviceDataTableEnum.java @@ -0,0 +1,76 @@ +package com.casic.util; + +import java.util.HashMap; + +/** + * @author cz + * @date 2022-7-15 + * 上传数据总记录数 + */ +public enum DeviceDataTableEnum { + + DATA_DIG("data_dig", "井盖状态监测仪"), + DATA_GAS("data_gas", "液位监测仪"), + DATA_GASLIQUID("data_gasliquid_gas,data_gasliquid_liquid", "有害气体监测仪"), + DATA_GAS_DECTOR("data_gas_dector", "燃气智能监测终端"), + DATA_HARMFUL_GAS("data_harmful_gas", "温湿度监测仪"), + DATA_HYDRANT("data_hydrant", "开挖监测仪"), + DATA_LIQUID("data_liquid", "井盖定位监测仪"), + DATA_NOISE("data_noise", "噪声记录仪"), + DATA_PANTILT("data_pantilt", "温度压力监测仪"), + DATA_TEMP_HUM("data_temp_hum", "燃气智能监测终端(一体化)"), + DATA_TUBE("data_tube", "消防栓防盗水监测仪"), + DATA_WELLCOVER("data_wellcover", "管盯"), + DATA_WELLCOVER_DATA("data_temp_press", "井盖液位一体机"), + DATA_WELLCOVER_LOCA("data_wellcover_loca", "硫化氢检测终端"), + DATA_WELLPLUS("data_wellplus", "激光甲烷云台"), + DATA_H2S("data_h2s", "可燃气体"), + DEVICE_TYPE_TABLE(new HashMap() {{ + put(1, DATA_WELLCOVER); + put(2, DATA_LIQUID); + put(3, DATA_HARMFUL_GAS); + put(4, DATA_GAS); + put(5, DATA_TEMP_HUM); + put(6, DATA_DIG); + put(7, DATA_WELLCOVER_LOCA); + put(8, DATA_NOISE); + put(9, DATA_WELLCOVER_DATA); + put(10, DATA_GASLIQUID); + put(11, DATA_HYDRANT); + put(12, DATA_TUBE); + put(13, DATA_WELLPLUS); + put(14, DATA_H2S); + put(21, DATA_PANTILT); + put(101, DATA_GAS_DECTOR); + } + }); + + String typeName; + String tableName; + + DeviceDataTableEnum(String tableName, String typeName) { + this.typeName = typeName; + this.tableName = tableName; + } + + public String getTypeName() { + return typeName; + } + + public String getTableName() { + return tableName; + } + + + public HashMap tableNameMap; + + DeviceDataTableEnum(HashMap tableNameMap) { + this.tableNameMap = tableNameMap; + } + + public HashMap getTableNameMap() { + return tableNameMap; + } + + +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml new file mode 100644 index 0000000..6d28b27 --- /dev/null +++ b/src/main/resources/application-dev.yml @@ -0,0 +1,43 @@ +server: + port: 11312 +################### spring配置 ################### +spring: + datasource: + smartwell: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://111.198.10.15:11209/smartwell_zq_cs + username: postgres + password: Casic203 + cms: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://111.198.10.15:11209/smartwell_cms + username: postgres + password: Casic203 + spantilt: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://111.198.10.15:11102/casic_pan_tilt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&&useSSL=true + username: root + password: Casic203! + session: + store-type: redis + redis: + host: 111.198.10.15 + port: 11412 + password: ew5T4K3#203lwh + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + # session: + # store-type: redis +#flowable数据源和多数据源配置 +casic: + kaptcha-open: false #是否开启登录时验证码 (true/false) + #kaptcha-open: false #是否开启登录时验证码 (true/false) + db: + init: + enable: false + spring-session-open: false #开启spring session +logging: + level.root: error + level.com.casic: error + file: + path: logs/ + name: missiles.log \ No newline at end of file diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml new file mode 100644 index 0000000..4fee268 --- /dev/null +++ b/src/main/resources/application-prod.yml @@ -0,0 +1,43 @@ +server: + port: 11312 +################### spring配置 ################### +spring: + datasource: + smartwell: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://111.198.10.15:11209/smartwell + username: postgres + password: Casic203 + cms: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://111.198.10.15:11209/smartwell_cms + username: postgres + password: Casic203 + span_tilt: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://111.198.10.15:11102/casic_span_tilt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&&useSSL=true + username: root + password: Casic203! + session: + store-type: redis + redis: + host: 111.198.10.15 + port: 11412 + password: ew5T4K3#203lwh + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + # session: + # store-type: redis +#flowable数据源和多数据源配置 +casic: + kaptcha-open: false #是否开启登录时验证码 (true/false) + #kaptcha-open: false #是否开启登录时验证码 (true/false) + db: + init: + enable: false + spring-session-open: false #开启spring session +logging: + level.root: error + level.com.casic: error + file: + path: logs/ + name: missiles.log \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..971553a --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,42 @@ +########################################################## +################## 所有profile共有的配置 ################# +########################################################## +spring: + profiles: + active: dev + servlet: + multipart: + max-file-size: 50MB + max-request-size: 80MB +mybatis-plus: + global-config: + enable-sql-runner: true + configuration: + # 配置结果集属性为空时 是否映射返回结果 + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 + call-setters-on-nulls: true + mapper-locations: classpath:mapper/*.xml +mybatis: + mapper-locations: classpath:mapper/*.xml + configuration: + # 配置结果集属性为空时 是否映射返回结果 + call-setters-on-nulls: true + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 +#mybatis-plus: +# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector +################### mybatis-plus配置 ################### +################### casic配置 ################### +flowable: + checkProcessDefinitions: false #不校验process文件 +casic: + swagger-open: false #是否开启swagger (true/false) + kaptcha-open: false #是否开启登录时验证码 (true/false) + muti-datasource-open: false #是否开启多数据源(true/false) + spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) + session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 + session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 + extUrl: sys + device-types: 1,4,101,12 + config: + export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ + config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/casic/controller/MapDataController.java b/src/main/java/com/casic/controller/MapDataController.java new file mode 100644 index 0000000..b897b95 --- /dev/null +++ b/src/main/java/com/casic/controller/MapDataController.java @@ -0,0 +1,47 @@ +package com.casic.controller; + +import com.casic.service.MapDataService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/overview") +public class MapDataController { + + private final MapDataService mapDataService; + + public MapDataController(MapDataService mapDataService) { + this.mapDataService = mapDataService; + } + + /** + * 获取列表 + */ + @RequestMapping(value = "/wellList") + public Object getWellList(@RequestParam(required = false) String keywords, + @RequestParam(required = false) String wellType, + @RequestParam(required = false) String deptid, + @RequestParam(required = false) String isAlarm) { + + return mapDataService.getWellList(keywords,wellType,deptid,isAlarm); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/alarmNow") + public Object alarmNow() { + return mapDataService.getNowAlarmRecords(); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/wellInfo") + public Object getWellInfo(@RequestParam(value = "devcode", required = true) String devcode, + @RequestParam(value = "deviceType", required = true) String deviceType) { + return mapDataService.getWellInfo(devcode,deviceType); + } +} diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java new file mode 100644 index 0000000..04f8d97 --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -0,0 +1,210 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + public ScreenDataController(ScreenDataService screenDataService) { + this.screenDataService = screenDataService; + } + + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/line-length") + public Object getLineLength(String beginTime, String endTime) { +// return screenDataService.getLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + " \"deptName\":\"圣井燃气\",\n" + + " \"totalLength\":440\n" + + " },\n" + + " {\n" + + " \"deptName\":\"华气燃气\",\n" + + " \"totalLength\":810\n" + + " },\n" + + " {\n" + + " \"typeName\":\"中燃燃气\",\n" + + " \"totalLength\":500\n" + + " },\n" + + " {\n" + + " \"typeName\":\"正和燃气\",\n" + + " \"totalLength\":520\n" + + " },\n" + + " {\n" + + " \"typeName\":\"华罚燃气\",\n" + + " \"totalLength\":630\n" + + " }\n" + + " ]"; + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + /** + * 分类汇总燃气管线监管人员的类型和数量 + */ + @RequestMapping("/staff") + public Object getObvserStaff(String beginTime, String endTime) { +// return screenDataService.getObvserStaff(beginTime, endTime); + return "{\n" + + " \t\"总人数\":2022,\n" + + "\t\"staffDataList\":[\n" + + " {\n" + + "\t\t\"岗位名称\":\"管理人员\",\n" + + "\t\t\"总计\":72\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"运维人员\",\n" + + "\t\t\"总计\":874\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"施工人员\",\n" + + "\t\t\"总计\":456\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"统计人员\",\n" + + "\t\t\"总计\":745\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"技术人员\",\n" + + "\t\t\"总计\":455\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"监管人员\",\n" + + "\t\t\"总计\":644\n" + + " }]\n" + + " }"; + } + + /** + * 以道路的维度来统计汇总燃气管线的长度和权属单位 + */ + @RequestMapping("/road-line-length") + public Object getRoadLineLength(String beginTime, String endTime) { +// return screenDataService.getRoadLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + "\t\t\"所属道路\":\"双山西街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"圣井燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"世纪大道\",\n" + + "\t\t\"管线长度/km\":54,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"桃水大街\",\n" + + "\t\t\"管线长度/km\":32,\n" + + "\t\t\"权属单位\":\"中燃燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"鲁态大街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " }\n" + + "]"; + } + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + +// /** +// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/list") +// public Object getDeviceList(String beginTime, String endTime) { +// return screenDataService.getDeviceList(beginTime,endTime); +// } +// +// /** +// * 包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/Info") +// public Object getDeviceInfo(String wellCode,String deviceType) { +// return screenDataService.getDeviceInfo(wellCode,deviceType); +// } + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + /** + * 显示云台的报警信息 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/cms/CmsDataMapper.java b/src/main/java/com/casic/dao/cms/CmsDataMapper.java new file mode 100644 index 0000000..e57975e --- /dev/null +++ b/src/main/java/com/casic/dao/cms/CmsDataMapper.java @@ -0,0 +1,23 @@ +package com.casic.dao.cms; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface CmsDataMapper { + + Integer countElectronicDevice(); + + List> countElectronicTask(); + + Integer getTotalWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getCompleteWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalEvent(@Param("beginTime") String beginTime, @Param("endTime") String endTime); +} diff --git a/src/main/java/com/casic/dao/smartwell/MapDataMapper.java b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java new file mode 100644 index 0000000..8e56978 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java @@ -0,0 +1,25 @@ +package com.casic.dao.smartwell; + +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface MapDataMapper { + + List getWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNotAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNowAlarmRecords(); + + String getDictNameByCode(@Param("wellType") String wellType); + + Map getDeviceStatus(@Param("devcode") String devcode, @Param("tableName") String tableName, @Param("dataField") String dataField); +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java new file mode 100644 index 0000000..0294b14 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -0,0 +1,43 @@ +package com.casic.dao.smartwell; + + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SmartwellDataMapper { + + List> countDeviceByType(); + + List> getTypeName(); + + List> countAlarmType(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getDeviceListByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countDeviceNumber(); + + Integer countAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countDeviceNumberByDept(); + + List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countRoadNumber(); + + List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDeviceList(); + + List> getDeptNameList(); + +} diff --git a/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java new file mode 100644 index 0000000..e6ba279 --- /dev/null +++ b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java @@ -0,0 +1,32 @@ +package com.casic.dao.spantilt; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface TiltDataMapper { + /** + * 已安装设备 + * + * @return + */ + Integer countColudDevice(); + + /** + * 警告 + * + * @return + */ + Integer countColudAlarm(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + + /** + * 云台报警信息 + * + * @return + */ + List> countColudAlarmRecords(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + +} diff --git a/src/main/java/com/casic/model/AlarmNowView.java b/src/main/java/com/casic/model/AlarmNowView.java new file mode 100644 index 0000000..6eebafc --- /dev/null +++ b/src/main/java/com/casic/model/AlarmNowView.java @@ -0,0 +1,108 @@ +package com.casic.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +public class AlarmNowView { + + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date alarmTime; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + +} diff --git a/src/main/java/com/casic/model/BusWellInfo.java b/src/main/java/com/casic/model/BusWellInfo.java new file mode 100644 index 0000000..f4b8eba --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfo.java @@ -0,0 +1,192 @@ +package com.casic.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + //@NotEmpty(message="井深不能为空") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + + /** + * 区域 + */ + private String road; + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + + + /** + * 位置 + */ + private String position; + /** + * 部门编号 + */ + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; +// /** +// * 责任人 +// */ +// @TableField("STAFF") +// private String staff; +// /** +// * 电话 +// */ +// @TableField("TEL") +// private String tel; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/src/main/java/com/casic/model/BusWellInfoDto.java b/src/main/java/com/casic/model/BusWellInfoDto.java new file mode 100644 index 0000000..48610f2 --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfoDto.java @@ -0,0 +1,276 @@ +package com.casic.model; + + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class BusWellInfoDto { + private Long id; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + private String deviceType; + private String deptid; + private String deptName; + private Float deep; + private String position; + private String coordinateX; + private String coordinateY; + private String lngBaidu; + private String latBaidu; + private String lngGaode; + private String latGaode; + private String photos; + private String notes; + private String bfzt; + private String bfztName; + private String area; + private String staff; + private String tel; + private String valid; + private String ts; + private List watchData; + + Map map = new HashMap(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + map.put("id", id); + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + map.put("wellCode", wellCode); + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + map.put("wellName", wellName); + } + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + map.put("deviceType", deviceType); + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + map.put("wellType", wellType); + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + map.put("wellTypeName", wellTypeName); + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + map.put("deptid", deptid); + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + map.put("deptName", deptName); + } + + public Float getDeep() { + return deep; + } + + public void setDeep(Float deep) { + this.deep = deep; + map.put("deep", deep); + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + map.put("position", position); + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + map.put("coordinateX", coordinateX); + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + map.put("coordinateY", coordinateY); + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + map.put("lngBaidu", lngBaidu); + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + map.put("latBaidu", latBaidu); + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + map.put("lngGaode", lngGaode); + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + map.put("latGaode", latGaode); + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + map.put("photos", photos); + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + map.put("notes", notes); + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + map.put("bfzt", bfzt); + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + map.put("bfztName", bfztName); + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + map.put("area", area); + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + map.put("staff", staff); + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + map.put("tel", tel); + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + map.put("valid", valid); + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + map.put("ts", ts); + } + + public List getWatchData() { + return watchData; + } + + public void setWatchData(List watchData) { + this.watchData = watchData; + map.put("watchData", watchData); + } + + public Map toMap() { + return map; + } +} diff --git a/src/main/java/com/casic/model/ResponseData.java b/src/main/java/com/casic/model/ResponseData.java new file mode 100644 index 0000000..356775a --- /dev/null +++ b/src/main/java/com/casic/model/ResponseData.java @@ -0,0 +1,19 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Boolean success; + private Integer code; + private String message; + private Object data; +} \ No newline at end of file diff --git a/src/main/java/com/casic/model/WatchDataDto.java b/src/main/java/com/casic/model/WatchDataDto.java new file mode 100644 index 0000000..d50cfb5 --- /dev/null +++ b/src/main/java/com/casic/model/WatchDataDto.java @@ -0,0 +1,32 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author lenovo + */ +@Data +public class WatchDataDto implements Cloneable{ + + private Long deviceId; + private String devcode; + private String installDate; + private String onlineState; + private String onlineStateName; + private String watchType; + private String type; // 地图总览时使用 + private String data = ""; + private String value = ""; // 地图总览时使用 + private String logtime = "";//数据更新时间(设备上报时间) + + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/casic/service/MapDataService.java b/src/main/java/com/casic/service/MapDataService.java new file mode 100644 index 0000000..5f77810 --- /dev/null +++ b/src/main/java/com/casic/service/MapDataService.java @@ -0,0 +1,12 @@ +package com.casic.service; + + +public interface MapDataService { + + Object getWellList(String keywords, String wellType, String deptid, String isAlarm); + + Object getNowAlarmRecords(); + + Object getWellInfo(String devcode,String deviceType); + +} diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java new file mode 100644 index 0000000..b4dd026 --- /dev/null +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -0,0 +1,27 @@ +package com.casic.service; + +public interface ScreenDataService { + Object getInstalledDevice(String beginTime, String endTime); + + Object getKindsAlarmRate(String beginTime, String endTime); + + Object getAlarmRecordsByStation(String beginTime, String endTime); + + Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + + Object getDeptTimeSpan(String beginTime, String endTime); + + Object getHealthIndicator(String beginTime, String endTime); + + Object getDeptIndicator(String beginTime, String endTime); + + Object getDeviceList(String beginTime, String endTime); + + Object getOperationalStatus(String beginTime, String endTime); + + Object getAlarmRecordsByRoad(String beginTime, String endTime); + + Object getInspectRoad(String beginTime, String endTime); + + +} diff --git a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java new file mode 100644 index 0000000..661018b --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java @@ -0,0 +1,88 @@ +package com.casic.service.impl; + + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class DeptTimeSpanBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00"); + + public DeptTimeSpanBuilder(SmartwellDataMapper smartwellDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + } + + public List> deptTimeSpanProvider(String beginTime, String endTime) { + Map> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = getAlarmDevice(beginTime, endTime); + Map> currentDeviceTimeMap = MergeDeviceSpan(normalDeviceDeptMap, alarmDeviceDeptMap); + List> deptTimeSpanMap = calculateDeptTime(currentDeviceTimeMap); + return deptTimeSpanMap; + } + + private Map> getNormalDevice(String beginTime, String endTime) { + List> normalDeviceList = smartwellDataMapper.getNormalDevice(beginTime, endTime); + Map> normalDeviceDeptMap = normalDeviceList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return normalDeviceDeptMap; + } + + private Map> getAlarmDevice(String beginTime, String endTime) { + List> alarmDeviceDeptList = smartwellDataMapper.getAlarmDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = alarmDeviceDeptList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return alarmDeviceDeptMap; + } + + private Map> MergeDeviceSpan(Map> normalDeviceDeptMap, + Map> alarmDeviceDeptMap) { + for (Map.Entry> normalMap : normalDeviceDeptMap.entrySet()) { + String mapKey = normalMap.getKey(); + Map normalmap = normalMap.getValue(); + if (alarmDeviceDeptMap.containsKey(mapKey)) { + Map alarmMap = alarmDeviceDeptMap.get(mapKey); + for (Map.Entry alarmMapItem : alarmMap.entrySet()) { + String deviceCode = alarmMapItem.getKey(); + normalmap.put(deviceCode, alarmMapItem.getValue()); + } + } + } + return normalDeviceDeptMap; + } + + private List> calculateDeptTime(Map> currentDeviceTimeMap) { + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptTimeSpanList = new ArrayList<>(); + for (Map.Entry> currentDeviceMap : currentDeviceTimeMap.entrySet()) { + String deptid = currentDeviceMap.getKey(); + Map currentDeviceItemMap = currentDeviceMap.getValue(); + Double timeSpan = 0.00; + for (Map.Entry timeMapItem : currentDeviceItemMap.entrySet()) { + timeSpan += StringUtils.isEmpty(timeMapItem.getValue()) || timeMapItem.getValue() == "null" ? 0 : Double.valueOf(timeMapItem.getValue()); + } + Map deptTimeSpanMap = new HashMap<>(); + deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); + deptTimeSpanMap.put("count", df.format(timeSpan)); + deptTimeSpanList.add(deptTimeSpanMap); + } + return deptTimeSpanList; + } + +} diff --git a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java new file mode 100644 index 0000000..ffd0f1b --- /dev/null +++ b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java @@ -0,0 +1,96 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class HealthIndicatorsBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00%"); + + public HealthIndicatorsBuilder(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + this.tiltDataMapper = tiltDataMapper; + } + + + public List> healthIndicatorProvider(String beginTime, String endTime) { + List> healthIndictorList = new ArrayList<>(); + healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); + healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); + return healthIndictorList; + } + + + public List> deptIndicatorProvider(String beginTime, String endTime) { + List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); + List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); + List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); + return deptIndicatorList; + } + + public Map healthRoadIndicatorProvider(String isSort,String limitNum,String beginTime, String endTime) { + return smartwellHealthRoadIndicator(isSort,limitNum,beginTime, endTime); + } + + private Map smartwellHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); + Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); + smartwellHealth.put("typeName", "管网健康指数"); + smartwellHealth.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map tiltHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = tiltDataMapper.countColudDevice(); + Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); + smartwellHealth.put("typeName", "场站健康指数"); + smartwellHealth.put("count", df.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map smartwellHealthRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer roadNumber = smartwellDataMapper.countRoadNumber(); + Integer alarmRoad = smartwellDataMapper.countAlarmRoad(isSort,limitNum,beginTime, endTime); + smartwellHealth.put("typeName", "道路健康指数"); + smartwellHealth.put("count", df.format((Double.valueOf(roadNumber - alarmRoad)) / roadNumber)); + return smartwellHealth; + } + + private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { + Map alarmDeptMap = alarmDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) + ); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptIndicatorList = new ArrayList<>(); + deviceDeptNumberList.forEach( + deptNameNumberMap -> { + Map deptIndicatorMap = new HashMap<>(); + int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); + String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); + int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); + deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); + deptIndicatorMap.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + deptIndicatorList.add(deptIndicatorMap); + } + ); + return deptIndicatorList; + } +} diff --git a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java new file mode 100644 index 0000000..8b1209d --- /dev/null +++ b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java @@ -0,0 +1,71 @@ +package com.casic.service.impl; + +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 + */ +@Service +public class InstalledDeviceBuilder { + + private final DeviceTypesConfig deviceTypesConfig; + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + public InstalledDeviceBuilder(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, + TiltDataMapper tiltDataMapper, DeviceTypesConfig deviceTypesConfig) { + this.smartwellDataMapper = smartwellDataMapper; + this.cmsDataMapper = cmsDataMapper; + this.tiltDataMapper = tiltDataMapper; + this.deviceTypesConfig = deviceTypesConfig; + } + + public List> InstalledDeviceManger() { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + List> installedDeviceList = new ArrayList<>(); + cmsInstalledDevice(installedDeviceList); + tiltInstalledDevice(installedDeviceList); + smartwellInstalledDevice(installedDeviceList, deviceTypeList); + return installedDeviceList; + } + + private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); + installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); + installedDeviceList.add(installedDeviceMap); + } + } + + private void cmsInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); + installedDeviceMap.put("typeName", "电子标识器"); + installedDeviceList.add(installedDeviceMap); + } + + private void tiltInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); + installedDeviceMap.put("typeName", "云台"); + installedDeviceList.add(installedDeviceMap); + } +} diff --git a/src/main/java/com/casic/service/impl/KindsAlarmBulider.java b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java new file mode 100644 index 0000000..82df147 --- /dev/null +++ b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java @@ -0,0 +1,75 @@ +package com.casic.service.impl; + +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component +public class KindsAlarmBulider { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + private final DeviceTypesConfig deviceTypesConfig; + + private final DecimalFormat df = new DecimalFormat("0.00%"); + + public KindsAlarmBulider(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper,DeviceTypesConfig deviceTypesConfig) { + this.smartwellDataMapper = smartwellDataMapper; + this.tiltDataMapper = tiltDataMapper; + this.deviceTypesConfig=deviceTypesConfig; + } + + public List> alarmTypeManger(String beginTime, String endTime) { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + Map typeNameMap = smartwellDeviceType(); + List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap,deviceTypeList); + calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); + return rateDeviceList; + } + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } + + private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap,String[] deviceTypeList) { + List> rateDeviceList = new ArrayList<>(); + List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); + Map alarmCountMap = alarmCountList.stream().collect( + Collectors.toMap( + e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) + ) + ); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map rateDeviceMap = new HashMap<>(); + Integer totalAlarm = deviceCountMap.containsKey(deviceType)?Integer.valueOf(deviceCountMap.get(deviceType)):0; + Integer alarmCount=alarmCountMap.containsKey(deviceType)?Integer.valueOf(alarmCountMap.get(deviceType)):0; + rateDeviceMap.put("rate", totalAlarm==0?"0.00%":df.format(Double.valueOf(alarmCount)/totalAlarm)); + rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); + rateDeviceList.add(rateDeviceMap); + } + return rateDeviceList; + } + + private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { + Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); + Integer totalAlarm = tiltDataMapper.countColudDevice(); + Map rateDeviceMap = new HashMap<>(); + rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : df.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", "云台"); + rateDeviceList.add(rateDeviceMap); + } +} diff --git a/src/main/java/com/casic/service/impl/MapDataServiceImpl.java b/src/main/java/com/casic/service/impl/MapDataServiceImpl.java new file mode 100644 index 0000000..c2640ab --- /dev/null +++ b/src/main/java/com/casic/service/impl/MapDataServiceImpl.java @@ -0,0 +1,113 @@ +package com.casic.service.impl; + +import com.casic.dao.smartwell.MapDataMapper; +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import com.casic.model.ResponseData; +import com.casic.service.MapDataService; +import com.casic.util.DeviceDataFieldTableEnum; +import com.casic.util.DeviceDataTableEnum; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Slf4j +@Service +public class MapDataServiceImpl implements MapDataService { + + @Autowired + private MapDataMapper mapDataMapper; + + @Override + public Object getNowAlarmRecords() { + ResponseData responseData = new ResponseData(); + try { + List alarmNowViewList = this.mapDataMapper.getNowAlarmRecords(); + for (AlarmNowView alarmNowView : alarmNowViewList) { + alarmNowView.setWellTypeName(mapDataMapper.getDictNameByCode(alarmNowView.getWellType())); + } + responseData.setData(alarmNowViewList); + responseData.setCode(200); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:最新报警记录查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + + @Override + public Object getWellList(String keywords, String wellType, String deptid, String isAlarm) { + + ResponseData responseData = new ResponseData(); + try { + List wellList = new ArrayList<>(); + if (null == isAlarm || isAlarm.equals("") == true) { + // 查询并添加当前部门的闸井 + List myList = mapDataMapper.getWellList(keywords, wellType, deptid); + if (null != myList && myList.isEmpty() == false) { + wellList.addAll(myList); + } + } else if (isAlarm.equals("1")) { + // isAlarm = 1 查询所有报警状态的闸井 + wellList = mapDataMapper.getAlarmWellList(keywords, wellType, deptid); + } else { + // isAlarm = 0 查询所有不是报警状态的闸井 + wellList = mapDataMapper.getNotAlarmWellList(keywords, wellType, deptid); + } + responseData.setData(wellList); + responseData.setCode(200); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:点位记录列表查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + public Object getWellInfo(String devcode,String deviceType){ + ResponseData responseData = new ResponseData(); + try { + DeviceDataTableEnum deviceDataTableEnum = DeviceDataTableEnum.DEVICE_TYPE_TABLE.getTableNameMap().get(Integer.valueOf(deviceType)); + String tableName = deviceDataTableEnum.getTableName(); + List> wellInfoList=new ArrayList<>(); + if(deviceType.equals("10")){ + String [] tableNameList=tableName.split(","); + + for(String tableNames:tableNameList){ + Map wellInfoMap=mapDataMapper.getDeviceStatus(devcode,tableNames, + DeviceDataFieldTableEnum.TABLE_FIELD.getTableFieldMap().get(tableName)); + if(!wellInfoMap.containsKey("dataValue")){ + wellInfoMap.put("dataValue",0.0); + } + wellInfoList.add(wellInfoMap); + } + }else { + Map wellInfoMap=mapDataMapper.getDeviceStatus(devcode,tableName, + DeviceDataFieldTableEnum.TABLE_FIELD.getTableFieldMap().get(tableName)); + if(!wellInfoMap.containsKey("dataValue")){ + wellInfoMap.put("dataValue",0.0); + } + wellInfoList.add(wellInfoMap); + } + responseData.setData(wellInfoList); + responseData.setCode(200); + responseData.setSuccess(true); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:点位详情查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + +} diff --git a/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java b/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java new file mode 100644 index 0000000..1946ee3 --- /dev/null +++ b/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java @@ -0,0 +1,60 @@ +package com.casic.service.impl; + +import com.casic.dao.cms.CmsDataMapper; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +public class OperationalStatusBuilder { + + private final DecimalFormat df = new DecimalFormat("0.00%"); + private final CmsDataMapper cmsDataMapper; + + public OperationalStatusBuilder(CmsDataMapper cmsDataMapper) { + this.cmsDataMapper = cmsDataMapper; + } + + public List> OperationalStatusProvider(String beginTime, String endTime) { + List> operaStatusList = getWorkOrder(beginTime,endTime); + operaStatusList.add(getTask(beginTime,endTime)); + operaStatusList.add(getEvent(beginTime,endTime)); + return operaStatusList; + } + + private Map getTask(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalTask(beginTime,endTime); + Map taskMap = new HashMap<>(); + taskMap.put("type", "运维任务"); + taskMap.put("count", String.valueOf(initTask)); + return taskMap; + } + + private List> getWorkOrder(String beginTime, String endTime) { + List> operaStatusList = new ArrayList<>(); + Integer initTask = cmsDataMapper.getTotalWorkOrder(beginTime,endTime); + Map workPageMap = new HashMap<>(); + workPageMap.put("type", "运维工单"); + workPageMap.put("count", String.valueOf(initTask)); + Integer completeTask = cmsDataMapper.getCompleteWorkOrder(beginTime,endTime); + Map completeMap = new HashMap<>(); + completeMap.put("type", "运维完结"); + completeMap.put("count", df.format(Double.valueOf(completeTask) / initTask)); + operaStatusList.add(completeMap); + operaStatusList.add(workPageMap); + return operaStatusList; + } + + private Map getEvent(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalEvent(beginTime,endTime); + Map eventMap = new HashMap<>(); + eventMap.put("type", "运维事件"); + eventMap.put("count", String.valueOf(initTask)); + return eventMap; + } + +} diff --git a/src/main/java/com/casic/service/impl/ScreenDataManger.java b/src/main/java/com/casic/service/impl/ScreenDataManger.java new file mode 100644 index 0000000..6a56a43 --- /dev/null +++ b/src/main/java/com/casic/service/impl/ScreenDataManger.java @@ -0,0 +1,170 @@ +package com.casic.service.impl; + +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.model.ResponseData; +import com.casic.service.ScreenDataService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class ScreenDataManger implements ScreenDataService { + @Autowired + private InstalledDeviceBuilder installedDeviceBuilder; + @Autowired + private KindsAlarmBulider kindsAlarmBulider; + @Autowired + private HealthIndicatorsBuilder healthIndicatorsBuilder; + @Autowired + private DeptTimeSpanBuilder deptTimeSpanBuilder; + @Autowired + private OperationalStatusBuilder operStatusBuilder; + + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + public ScreenDataManger(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, TiltDataMapper tiltDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + this.cmsDataMapper = cmsDataMapper; + this.tiltDataMapper = tiltDataMapper; + } + + public Object getInstalledDevice(String beginTime, String endTime) { + List> installedDeviceList = null; + try { + installedDeviceList = installedDeviceBuilder.InstalledDeviceManger(); + } catch (DataAccessException dex) { + log.error("主题:查询已安装设备的类型和个数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return installedDeviceList; + } + + public Object getKindsAlarmRate(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = kindsAlarmBulider.alarmTypeManger(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:统计汇总各管线权属单位下的燃气管线总长度出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + List> recordsRoadList = null; + try { + recordsRoadList = tiltDataMapper.countColudAlarmRecords(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:显示云台的报警信息出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return recordsRoadList; + } + + public Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime) { + Map healthRoadIndtorMap = null; + try { + healthRoadIndtorMap = healthIndicatorsBuilder.healthRoadIndicatorProvider(isSort,limitNum,beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:以道路维度查看健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return healthRoadIndtorMap; + } + + public Object getDeptTimeSpan(String beginTime, String endTime) { + List> deptTimeSpanList = null; + try { + deptTimeSpanList = deptTimeSpanBuilder.deptTimeSpanProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:按权属单位来汇总,各个权属单位下的燃气管线连续正常运行的时长出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return deptTimeSpanList; + } + + public Object getHealthIndicator(String beginTime, String endTime) { + List> healthIndictorList = null; + try { + healthIndictorList = healthIndicatorsBuilder.healthIndicatorProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return healthIndictorList; + } + + public Object getDeptIndicator(String beginTime, String endTime) { + List> healthIndictorList = null; + try { + healthIndictorList = healthIndicatorsBuilder.deptIndicatorProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:权属单位维度健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return healthIndictorList; + } + + public Object getDeviceList(String beginTime, String endTime) { + List> alarmDeviceList = null; + try { + alarmDeviceList = smartwellDataMapper.getAlarmDeviceList(); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + alarmDeviceList.forEach( + alarmDevice -> { + alarmDevice.put("isAlarm", alarmDevice.containsKey("isAlarm") ? "1" : "0"); + alarmDevice.put("responsibleDept", deptNameMap.get(String.valueOf(alarmDevice.get("responsibleDept")))); + } + ); + } catch (DataAccessException dex) { + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return alarmDeviceList; + } + + public Object getOperationalStatus(String beginTime, String endTime) { + + ResponseData responseData = new ResponseData(); + try { + List> operaStatusList = operStatusBuilder.OperationalStatusProvider(beginTime, endTime); + responseData.setSuccess(true); + responseData.setCode(200); + responseData.setMessage("查询成功"); + responseData.setData(operaStatusList); + } catch (DataAccessException dex) { + log.error("主题:运维情况查询出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = smartwellDataMapper.countAlarmByRoad(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:以道路的维度统计燃气管线监控中的报警情况出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + public Object getInspectRoad(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = cmsDataMapper.countElectronicTask(); + } catch (DataAccessException dex) { + log.error("主题:汇总显示个道路的巡检运维次数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + +} diff --git a/src/main/java/com/casic/util/DeviceDataFieldTableEnum.java b/src/main/java/com/casic/util/DeviceDataFieldTableEnum.java new file mode 100644 index 0000000..5fd7a56 --- /dev/null +++ b/src/main/java/com/casic/util/DeviceDataFieldTableEnum.java @@ -0,0 +1,37 @@ +package com.casic.util; + +import java.util.HashMap; +import java.util.Map; + +public enum DeviceDataFieldTableEnum { + + TABLE_FIELD(new HashMap() { + { + put("data_dig", "ddata AS dataValue"); + put("data_gas", "strength AS dataValue"); + put("data_gasliquid_gas", "strength AS dataValue"); + put("data_gasliquid_liquid", "liquiddata AS dataValue"); + put("data_gas_dector", "gas_sample_value AS dataValue"); + put("data_harmful_gas", "CONCAT(CO, ', ', CH4, ', ', H2S, ', ', O2) AS dataValue"); + put("data_hydrant", "0 AS dataValue"); + put("data_liquid", "liquiddata AS dataValue"); + put("data_noise", "ddata AS dataValue"); + put("data_temp_hum", "CONCAT(TEMPERATURE, ', ', HUMIDITY) AS dataValue"); + put("data_tube", "strength AS dataValue"); + put("data_wellcover", "descn AS dataValue"); + put("data_temp_press", "press AS dataValue"); + put("data_pantilt", "concentration AS dataValue"); + put("data_wellcover_loca", "0 AS dataValue"); + put("data_wellplus", "0 AS dataValue"); + put("data_h2s", "stength AS dataValue"); + } + }); + public Map tableNameMap; + + DeviceDataFieldTableEnum(Map tableNameMap) { + this.tableNameMap = tableNameMap; + } + public Map getTableFieldMap() { + return tableNameMap; + } +} diff --git a/src/main/java/com/casic/util/DeviceDataTableEnum.java b/src/main/java/com/casic/util/DeviceDataTableEnum.java new file mode 100644 index 0000000..a67ad6d --- /dev/null +++ b/src/main/java/com/casic/util/DeviceDataTableEnum.java @@ -0,0 +1,76 @@ +package com.casic.util; + +import java.util.HashMap; + +/** + * @author cz + * @date 2022-7-15 + * 上传数据总记录数 + */ +public enum DeviceDataTableEnum { + + DATA_DIG("data_dig", "井盖状态监测仪"), + DATA_GAS("data_gas", "液位监测仪"), + DATA_GASLIQUID("data_gasliquid_gas,data_gasliquid_liquid", "有害气体监测仪"), + DATA_GAS_DECTOR("data_gas_dector", "燃气智能监测终端"), + DATA_HARMFUL_GAS("data_harmful_gas", "温湿度监测仪"), + DATA_HYDRANT("data_hydrant", "开挖监测仪"), + DATA_LIQUID("data_liquid", "井盖定位监测仪"), + DATA_NOISE("data_noise", "噪声记录仪"), + DATA_PANTILT("data_pantilt", "温度压力监测仪"), + DATA_TEMP_HUM("data_temp_hum", "燃气智能监测终端(一体化)"), + DATA_TUBE("data_tube", "消防栓防盗水监测仪"), + DATA_WELLCOVER("data_wellcover", "管盯"), + DATA_WELLCOVER_DATA("data_temp_press", "井盖液位一体机"), + DATA_WELLCOVER_LOCA("data_wellcover_loca", "硫化氢检测终端"), + DATA_WELLPLUS("data_wellplus", "激光甲烷云台"), + DATA_H2S("data_h2s", "可燃气体"), + DEVICE_TYPE_TABLE(new HashMap() {{ + put(1, DATA_WELLCOVER); + put(2, DATA_LIQUID); + put(3, DATA_HARMFUL_GAS); + put(4, DATA_GAS); + put(5, DATA_TEMP_HUM); + put(6, DATA_DIG); + put(7, DATA_WELLCOVER_LOCA); + put(8, DATA_NOISE); + put(9, DATA_WELLCOVER_DATA); + put(10, DATA_GASLIQUID); + put(11, DATA_HYDRANT); + put(12, DATA_TUBE); + put(13, DATA_WELLPLUS); + put(14, DATA_H2S); + put(21, DATA_PANTILT); + put(101, DATA_GAS_DECTOR); + } + }); + + String typeName; + String tableName; + + DeviceDataTableEnum(String tableName, String typeName) { + this.typeName = typeName; + this.tableName = tableName; + } + + public String getTypeName() { + return typeName; + } + + public String getTableName() { + return tableName; + } + + + public HashMap tableNameMap; + + DeviceDataTableEnum(HashMap tableNameMap) { + this.tableNameMap = tableNameMap; + } + + public HashMap getTableNameMap() { + return tableNameMap; + } + + +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml new file mode 100644 index 0000000..6d28b27 --- /dev/null +++ b/src/main/resources/application-dev.yml @@ -0,0 +1,43 @@ +server: + port: 11312 +################### spring配置 ################### +spring: + datasource: + smartwell: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://111.198.10.15:11209/smartwell_zq_cs + username: postgres + password: Casic203 + cms: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://111.198.10.15:11209/smartwell_cms + username: postgres + password: Casic203 + spantilt: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://111.198.10.15:11102/casic_pan_tilt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&&useSSL=true + username: root + password: Casic203! + session: + store-type: redis + redis: + host: 111.198.10.15 + port: 11412 + password: ew5T4K3#203lwh + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + # session: + # store-type: redis +#flowable数据源和多数据源配置 +casic: + kaptcha-open: false #是否开启登录时验证码 (true/false) + #kaptcha-open: false #是否开启登录时验证码 (true/false) + db: + init: + enable: false + spring-session-open: false #开启spring session +logging: + level.root: error + level.com.casic: error + file: + path: logs/ + name: missiles.log \ No newline at end of file diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml new file mode 100644 index 0000000..4fee268 --- /dev/null +++ b/src/main/resources/application-prod.yml @@ -0,0 +1,43 @@ +server: + port: 11312 +################### spring配置 ################### +spring: + datasource: + smartwell: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://111.198.10.15:11209/smartwell + username: postgres + password: Casic203 + cms: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://111.198.10.15:11209/smartwell_cms + username: postgres + password: Casic203 + span_tilt: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://111.198.10.15:11102/casic_span_tilt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&&useSSL=true + username: root + password: Casic203! + session: + store-type: redis + redis: + host: 111.198.10.15 + port: 11412 + password: ew5T4K3#203lwh + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + # session: + # store-type: redis +#flowable数据源和多数据源配置 +casic: + kaptcha-open: false #是否开启登录时验证码 (true/false) + #kaptcha-open: false #是否开启登录时验证码 (true/false) + db: + init: + enable: false + spring-session-open: false #开启spring session +logging: + level.root: error + level.com.casic: error + file: + path: logs/ + name: missiles.log \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..971553a --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,42 @@ +########################################################## +################## 所有profile共有的配置 ################# +########################################################## +spring: + profiles: + active: dev + servlet: + multipart: + max-file-size: 50MB + max-request-size: 80MB +mybatis-plus: + global-config: + enable-sql-runner: true + configuration: + # 配置结果集属性为空时 是否映射返回结果 + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 + call-setters-on-nulls: true + mapper-locations: classpath:mapper/*.xml +mybatis: + mapper-locations: classpath:mapper/*.xml + configuration: + # 配置结果集属性为空时 是否映射返回结果 + call-setters-on-nulls: true + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 +#mybatis-plus: +# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector +################### mybatis-plus配置 ################### +################### casic配置 ################### +flowable: + checkProcessDefinitions: false #不校验process文件 +casic: + swagger-open: false #是否开启swagger (true/false) + kaptcha-open: false #是否开启登录时验证码 (true/false) + muti-datasource-open: false #是否开启多数据源(true/false) + spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) + session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 + session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 + extUrl: sys + device-types: 1,4,101,12 + config: + export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ + config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/src/main/resources/mapper/cms/CmsDataMapper.xml b/src/main/resources/mapper/cms/CmsDataMapper.xml new file mode 100644 index 0000000..0228745 --- /dev/null +++ b/src/main/resources/mapper/cms/CmsDataMapper.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/casic/controller/MapDataController.java b/src/main/java/com/casic/controller/MapDataController.java new file mode 100644 index 0000000..b897b95 --- /dev/null +++ b/src/main/java/com/casic/controller/MapDataController.java @@ -0,0 +1,47 @@ +package com.casic.controller; + +import com.casic.service.MapDataService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/overview") +public class MapDataController { + + private final MapDataService mapDataService; + + public MapDataController(MapDataService mapDataService) { + this.mapDataService = mapDataService; + } + + /** + * 获取列表 + */ + @RequestMapping(value = "/wellList") + public Object getWellList(@RequestParam(required = false) String keywords, + @RequestParam(required = false) String wellType, + @RequestParam(required = false) String deptid, + @RequestParam(required = false) String isAlarm) { + + return mapDataService.getWellList(keywords,wellType,deptid,isAlarm); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/alarmNow") + public Object alarmNow() { + return mapDataService.getNowAlarmRecords(); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/wellInfo") + public Object getWellInfo(@RequestParam(value = "devcode", required = true) String devcode, + @RequestParam(value = "deviceType", required = true) String deviceType) { + return mapDataService.getWellInfo(devcode,deviceType); + } +} diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java new file mode 100644 index 0000000..04f8d97 --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -0,0 +1,210 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + public ScreenDataController(ScreenDataService screenDataService) { + this.screenDataService = screenDataService; + } + + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/line-length") + public Object getLineLength(String beginTime, String endTime) { +// return screenDataService.getLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + " \"deptName\":\"圣井燃气\",\n" + + " \"totalLength\":440\n" + + " },\n" + + " {\n" + + " \"deptName\":\"华气燃气\",\n" + + " \"totalLength\":810\n" + + " },\n" + + " {\n" + + " \"typeName\":\"中燃燃气\",\n" + + " \"totalLength\":500\n" + + " },\n" + + " {\n" + + " \"typeName\":\"正和燃气\",\n" + + " \"totalLength\":520\n" + + " },\n" + + " {\n" + + " \"typeName\":\"华罚燃气\",\n" + + " \"totalLength\":630\n" + + " }\n" + + " ]"; + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + /** + * 分类汇总燃气管线监管人员的类型和数量 + */ + @RequestMapping("/staff") + public Object getObvserStaff(String beginTime, String endTime) { +// return screenDataService.getObvserStaff(beginTime, endTime); + return "{\n" + + " \t\"总人数\":2022,\n" + + "\t\"staffDataList\":[\n" + + " {\n" + + "\t\t\"岗位名称\":\"管理人员\",\n" + + "\t\t\"总计\":72\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"运维人员\",\n" + + "\t\t\"总计\":874\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"施工人员\",\n" + + "\t\t\"总计\":456\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"统计人员\",\n" + + "\t\t\"总计\":745\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"技术人员\",\n" + + "\t\t\"总计\":455\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"监管人员\",\n" + + "\t\t\"总计\":644\n" + + " }]\n" + + " }"; + } + + /** + * 以道路的维度来统计汇总燃气管线的长度和权属单位 + */ + @RequestMapping("/road-line-length") + public Object getRoadLineLength(String beginTime, String endTime) { +// return screenDataService.getRoadLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + "\t\t\"所属道路\":\"双山西街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"圣井燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"世纪大道\",\n" + + "\t\t\"管线长度/km\":54,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"桃水大街\",\n" + + "\t\t\"管线长度/km\":32,\n" + + "\t\t\"权属单位\":\"中燃燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"鲁态大街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " }\n" + + "]"; + } + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + +// /** +// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/list") +// public Object getDeviceList(String beginTime, String endTime) { +// return screenDataService.getDeviceList(beginTime,endTime); +// } +// +// /** +// * 包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/Info") +// public Object getDeviceInfo(String wellCode,String deviceType) { +// return screenDataService.getDeviceInfo(wellCode,deviceType); +// } + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + /** + * 显示云台的报警信息 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/cms/CmsDataMapper.java b/src/main/java/com/casic/dao/cms/CmsDataMapper.java new file mode 100644 index 0000000..e57975e --- /dev/null +++ b/src/main/java/com/casic/dao/cms/CmsDataMapper.java @@ -0,0 +1,23 @@ +package com.casic.dao.cms; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface CmsDataMapper { + + Integer countElectronicDevice(); + + List> countElectronicTask(); + + Integer getTotalWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getCompleteWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalEvent(@Param("beginTime") String beginTime, @Param("endTime") String endTime); +} diff --git a/src/main/java/com/casic/dao/smartwell/MapDataMapper.java b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java new file mode 100644 index 0000000..8e56978 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java @@ -0,0 +1,25 @@ +package com.casic.dao.smartwell; + +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface MapDataMapper { + + List getWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNotAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNowAlarmRecords(); + + String getDictNameByCode(@Param("wellType") String wellType); + + Map getDeviceStatus(@Param("devcode") String devcode, @Param("tableName") String tableName, @Param("dataField") String dataField); +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java new file mode 100644 index 0000000..0294b14 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -0,0 +1,43 @@ +package com.casic.dao.smartwell; + + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SmartwellDataMapper { + + List> countDeviceByType(); + + List> getTypeName(); + + List> countAlarmType(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getDeviceListByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countDeviceNumber(); + + Integer countAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countDeviceNumberByDept(); + + List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countRoadNumber(); + + List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDeviceList(); + + List> getDeptNameList(); + +} diff --git a/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java new file mode 100644 index 0000000..e6ba279 --- /dev/null +++ b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java @@ -0,0 +1,32 @@ +package com.casic.dao.spantilt; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface TiltDataMapper { + /** + * 已安装设备 + * + * @return + */ + Integer countColudDevice(); + + /** + * 警告 + * + * @return + */ + Integer countColudAlarm(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + + /** + * 云台报警信息 + * + * @return + */ + List> countColudAlarmRecords(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + +} diff --git a/src/main/java/com/casic/model/AlarmNowView.java b/src/main/java/com/casic/model/AlarmNowView.java new file mode 100644 index 0000000..6eebafc --- /dev/null +++ b/src/main/java/com/casic/model/AlarmNowView.java @@ -0,0 +1,108 @@ +package com.casic.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +public class AlarmNowView { + + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date alarmTime; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + +} diff --git a/src/main/java/com/casic/model/BusWellInfo.java b/src/main/java/com/casic/model/BusWellInfo.java new file mode 100644 index 0000000..f4b8eba --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfo.java @@ -0,0 +1,192 @@ +package com.casic.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + //@NotEmpty(message="井深不能为空") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + + /** + * 区域 + */ + private String road; + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + + + /** + * 位置 + */ + private String position; + /** + * 部门编号 + */ + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; +// /** +// * 责任人 +// */ +// @TableField("STAFF") +// private String staff; +// /** +// * 电话 +// */ +// @TableField("TEL") +// private String tel; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/src/main/java/com/casic/model/BusWellInfoDto.java b/src/main/java/com/casic/model/BusWellInfoDto.java new file mode 100644 index 0000000..48610f2 --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfoDto.java @@ -0,0 +1,276 @@ +package com.casic.model; + + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class BusWellInfoDto { + private Long id; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + private String deviceType; + private String deptid; + private String deptName; + private Float deep; + private String position; + private String coordinateX; + private String coordinateY; + private String lngBaidu; + private String latBaidu; + private String lngGaode; + private String latGaode; + private String photos; + private String notes; + private String bfzt; + private String bfztName; + private String area; + private String staff; + private String tel; + private String valid; + private String ts; + private List watchData; + + Map map = new HashMap(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + map.put("id", id); + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + map.put("wellCode", wellCode); + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + map.put("wellName", wellName); + } + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + map.put("deviceType", deviceType); + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + map.put("wellType", wellType); + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + map.put("wellTypeName", wellTypeName); + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + map.put("deptid", deptid); + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + map.put("deptName", deptName); + } + + public Float getDeep() { + return deep; + } + + public void setDeep(Float deep) { + this.deep = deep; + map.put("deep", deep); + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + map.put("position", position); + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + map.put("coordinateX", coordinateX); + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + map.put("coordinateY", coordinateY); + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + map.put("lngBaidu", lngBaidu); + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + map.put("latBaidu", latBaidu); + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + map.put("lngGaode", lngGaode); + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + map.put("latGaode", latGaode); + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + map.put("photos", photos); + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + map.put("notes", notes); + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + map.put("bfzt", bfzt); + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + map.put("bfztName", bfztName); + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + map.put("area", area); + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + map.put("staff", staff); + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + map.put("tel", tel); + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + map.put("valid", valid); + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + map.put("ts", ts); + } + + public List getWatchData() { + return watchData; + } + + public void setWatchData(List watchData) { + this.watchData = watchData; + map.put("watchData", watchData); + } + + public Map toMap() { + return map; + } +} diff --git a/src/main/java/com/casic/model/ResponseData.java b/src/main/java/com/casic/model/ResponseData.java new file mode 100644 index 0000000..356775a --- /dev/null +++ b/src/main/java/com/casic/model/ResponseData.java @@ -0,0 +1,19 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Boolean success; + private Integer code; + private String message; + private Object data; +} \ No newline at end of file diff --git a/src/main/java/com/casic/model/WatchDataDto.java b/src/main/java/com/casic/model/WatchDataDto.java new file mode 100644 index 0000000..d50cfb5 --- /dev/null +++ b/src/main/java/com/casic/model/WatchDataDto.java @@ -0,0 +1,32 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author lenovo + */ +@Data +public class WatchDataDto implements Cloneable{ + + private Long deviceId; + private String devcode; + private String installDate; + private String onlineState; + private String onlineStateName; + private String watchType; + private String type; // 地图总览时使用 + private String data = ""; + private String value = ""; // 地图总览时使用 + private String logtime = "";//数据更新时间(设备上报时间) + + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/casic/service/MapDataService.java b/src/main/java/com/casic/service/MapDataService.java new file mode 100644 index 0000000..5f77810 --- /dev/null +++ b/src/main/java/com/casic/service/MapDataService.java @@ -0,0 +1,12 @@ +package com.casic.service; + + +public interface MapDataService { + + Object getWellList(String keywords, String wellType, String deptid, String isAlarm); + + Object getNowAlarmRecords(); + + Object getWellInfo(String devcode,String deviceType); + +} diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java new file mode 100644 index 0000000..b4dd026 --- /dev/null +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -0,0 +1,27 @@ +package com.casic.service; + +public interface ScreenDataService { + Object getInstalledDevice(String beginTime, String endTime); + + Object getKindsAlarmRate(String beginTime, String endTime); + + Object getAlarmRecordsByStation(String beginTime, String endTime); + + Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + + Object getDeptTimeSpan(String beginTime, String endTime); + + Object getHealthIndicator(String beginTime, String endTime); + + Object getDeptIndicator(String beginTime, String endTime); + + Object getDeviceList(String beginTime, String endTime); + + Object getOperationalStatus(String beginTime, String endTime); + + Object getAlarmRecordsByRoad(String beginTime, String endTime); + + Object getInspectRoad(String beginTime, String endTime); + + +} diff --git a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java new file mode 100644 index 0000000..661018b --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java @@ -0,0 +1,88 @@ +package com.casic.service.impl; + + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class DeptTimeSpanBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00"); + + public DeptTimeSpanBuilder(SmartwellDataMapper smartwellDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + } + + public List> deptTimeSpanProvider(String beginTime, String endTime) { + Map> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = getAlarmDevice(beginTime, endTime); + Map> currentDeviceTimeMap = MergeDeviceSpan(normalDeviceDeptMap, alarmDeviceDeptMap); + List> deptTimeSpanMap = calculateDeptTime(currentDeviceTimeMap); + return deptTimeSpanMap; + } + + private Map> getNormalDevice(String beginTime, String endTime) { + List> normalDeviceList = smartwellDataMapper.getNormalDevice(beginTime, endTime); + Map> normalDeviceDeptMap = normalDeviceList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return normalDeviceDeptMap; + } + + private Map> getAlarmDevice(String beginTime, String endTime) { + List> alarmDeviceDeptList = smartwellDataMapper.getAlarmDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = alarmDeviceDeptList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return alarmDeviceDeptMap; + } + + private Map> MergeDeviceSpan(Map> normalDeviceDeptMap, + Map> alarmDeviceDeptMap) { + for (Map.Entry> normalMap : normalDeviceDeptMap.entrySet()) { + String mapKey = normalMap.getKey(); + Map normalmap = normalMap.getValue(); + if (alarmDeviceDeptMap.containsKey(mapKey)) { + Map alarmMap = alarmDeviceDeptMap.get(mapKey); + for (Map.Entry alarmMapItem : alarmMap.entrySet()) { + String deviceCode = alarmMapItem.getKey(); + normalmap.put(deviceCode, alarmMapItem.getValue()); + } + } + } + return normalDeviceDeptMap; + } + + private List> calculateDeptTime(Map> currentDeviceTimeMap) { + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptTimeSpanList = new ArrayList<>(); + for (Map.Entry> currentDeviceMap : currentDeviceTimeMap.entrySet()) { + String deptid = currentDeviceMap.getKey(); + Map currentDeviceItemMap = currentDeviceMap.getValue(); + Double timeSpan = 0.00; + for (Map.Entry timeMapItem : currentDeviceItemMap.entrySet()) { + timeSpan += StringUtils.isEmpty(timeMapItem.getValue()) || timeMapItem.getValue() == "null" ? 0 : Double.valueOf(timeMapItem.getValue()); + } + Map deptTimeSpanMap = new HashMap<>(); + deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); + deptTimeSpanMap.put("count", df.format(timeSpan)); + deptTimeSpanList.add(deptTimeSpanMap); + } + return deptTimeSpanList; + } + +} diff --git a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java new file mode 100644 index 0000000..ffd0f1b --- /dev/null +++ b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java @@ -0,0 +1,96 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class HealthIndicatorsBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00%"); + + public HealthIndicatorsBuilder(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + this.tiltDataMapper = tiltDataMapper; + } + + + public List> healthIndicatorProvider(String beginTime, String endTime) { + List> healthIndictorList = new ArrayList<>(); + healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); + healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); + return healthIndictorList; + } + + + public List> deptIndicatorProvider(String beginTime, String endTime) { + List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); + List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); + List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); + return deptIndicatorList; + } + + public Map healthRoadIndicatorProvider(String isSort,String limitNum,String beginTime, String endTime) { + return smartwellHealthRoadIndicator(isSort,limitNum,beginTime, endTime); + } + + private Map smartwellHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); + Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); + smartwellHealth.put("typeName", "管网健康指数"); + smartwellHealth.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map tiltHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = tiltDataMapper.countColudDevice(); + Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); + smartwellHealth.put("typeName", "场站健康指数"); + smartwellHealth.put("count", df.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map smartwellHealthRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer roadNumber = smartwellDataMapper.countRoadNumber(); + Integer alarmRoad = smartwellDataMapper.countAlarmRoad(isSort,limitNum,beginTime, endTime); + smartwellHealth.put("typeName", "道路健康指数"); + smartwellHealth.put("count", df.format((Double.valueOf(roadNumber - alarmRoad)) / roadNumber)); + return smartwellHealth; + } + + private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { + Map alarmDeptMap = alarmDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) + ); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptIndicatorList = new ArrayList<>(); + deviceDeptNumberList.forEach( + deptNameNumberMap -> { + Map deptIndicatorMap = new HashMap<>(); + int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); + String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); + int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); + deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); + deptIndicatorMap.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + deptIndicatorList.add(deptIndicatorMap); + } + ); + return deptIndicatorList; + } +} diff --git a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java new file mode 100644 index 0000000..8b1209d --- /dev/null +++ b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java @@ -0,0 +1,71 @@ +package com.casic.service.impl; + +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 + */ +@Service +public class InstalledDeviceBuilder { + + private final DeviceTypesConfig deviceTypesConfig; + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + public InstalledDeviceBuilder(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, + TiltDataMapper tiltDataMapper, DeviceTypesConfig deviceTypesConfig) { + this.smartwellDataMapper = smartwellDataMapper; + this.cmsDataMapper = cmsDataMapper; + this.tiltDataMapper = tiltDataMapper; + this.deviceTypesConfig = deviceTypesConfig; + } + + public List> InstalledDeviceManger() { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + List> installedDeviceList = new ArrayList<>(); + cmsInstalledDevice(installedDeviceList); + tiltInstalledDevice(installedDeviceList); + smartwellInstalledDevice(installedDeviceList, deviceTypeList); + return installedDeviceList; + } + + private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); + installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); + installedDeviceList.add(installedDeviceMap); + } + } + + private void cmsInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); + installedDeviceMap.put("typeName", "电子标识器"); + installedDeviceList.add(installedDeviceMap); + } + + private void tiltInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); + installedDeviceMap.put("typeName", "云台"); + installedDeviceList.add(installedDeviceMap); + } +} diff --git a/src/main/java/com/casic/service/impl/KindsAlarmBulider.java b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java new file mode 100644 index 0000000..82df147 --- /dev/null +++ b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java @@ -0,0 +1,75 @@ +package com.casic.service.impl; + +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component +public class KindsAlarmBulider { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + private final DeviceTypesConfig deviceTypesConfig; + + private final DecimalFormat df = new DecimalFormat("0.00%"); + + public KindsAlarmBulider(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper,DeviceTypesConfig deviceTypesConfig) { + this.smartwellDataMapper = smartwellDataMapper; + this.tiltDataMapper = tiltDataMapper; + this.deviceTypesConfig=deviceTypesConfig; + } + + public List> alarmTypeManger(String beginTime, String endTime) { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + Map typeNameMap = smartwellDeviceType(); + List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap,deviceTypeList); + calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); + return rateDeviceList; + } + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } + + private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap,String[] deviceTypeList) { + List> rateDeviceList = new ArrayList<>(); + List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); + Map alarmCountMap = alarmCountList.stream().collect( + Collectors.toMap( + e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) + ) + ); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map rateDeviceMap = new HashMap<>(); + Integer totalAlarm = deviceCountMap.containsKey(deviceType)?Integer.valueOf(deviceCountMap.get(deviceType)):0; + Integer alarmCount=alarmCountMap.containsKey(deviceType)?Integer.valueOf(alarmCountMap.get(deviceType)):0; + rateDeviceMap.put("rate", totalAlarm==0?"0.00%":df.format(Double.valueOf(alarmCount)/totalAlarm)); + rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); + rateDeviceList.add(rateDeviceMap); + } + return rateDeviceList; + } + + private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { + Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); + Integer totalAlarm = tiltDataMapper.countColudDevice(); + Map rateDeviceMap = new HashMap<>(); + rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : df.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", "云台"); + rateDeviceList.add(rateDeviceMap); + } +} diff --git a/src/main/java/com/casic/service/impl/MapDataServiceImpl.java b/src/main/java/com/casic/service/impl/MapDataServiceImpl.java new file mode 100644 index 0000000..c2640ab --- /dev/null +++ b/src/main/java/com/casic/service/impl/MapDataServiceImpl.java @@ -0,0 +1,113 @@ +package com.casic.service.impl; + +import com.casic.dao.smartwell.MapDataMapper; +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import com.casic.model.ResponseData; +import com.casic.service.MapDataService; +import com.casic.util.DeviceDataFieldTableEnum; +import com.casic.util.DeviceDataTableEnum; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Slf4j +@Service +public class MapDataServiceImpl implements MapDataService { + + @Autowired + private MapDataMapper mapDataMapper; + + @Override + public Object getNowAlarmRecords() { + ResponseData responseData = new ResponseData(); + try { + List alarmNowViewList = this.mapDataMapper.getNowAlarmRecords(); + for (AlarmNowView alarmNowView : alarmNowViewList) { + alarmNowView.setWellTypeName(mapDataMapper.getDictNameByCode(alarmNowView.getWellType())); + } + responseData.setData(alarmNowViewList); + responseData.setCode(200); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:最新报警记录查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + + @Override + public Object getWellList(String keywords, String wellType, String deptid, String isAlarm) { + + ResponseData responseData = new ResponseData(); + try { + List wellList = new ArrayList<>(); + if (null == isAlarm || isAlarm.equals("") == true) { + // 查询并添加当前部门的闸井 + List myList = mapDataMapper.getWellList(keywords, wellType, deptid); + if (null != myList && myList.isEmpty() == false) { + wellList.addAll(myList); + } + } else if (isAlarm.equals("1")) { + // isAlarm = 1 查询所有报警状态的闸井 + wellList = mapDataMapper.getAlarmWellList(keywords, wellType, deptid); + } else { + // isAlarm = 0 查询所有不是报警状态的闸井 + wellList = mapDataMapper.getNotAlarmWellList(keywords, wellType, deptid); + } + responseData.setData(wellList); + responseData.setCode(200); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:点位记录列表查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + public Object getWellInfo(String devcode,String deviceType){ + ResponseData responseData = new ResponseData(); + try { + DeviceDataTableEnum deviceDataTableEnum = DeviceDataTableEnum.DEVICE_TYPE_TABLE.getTableNameMap().get(Integer.valueOf(deviceType)); + String tableName = deviceDataTableEnum.getTableName(); + List> wellInfoList=new ArrayList<>(); + if(deviceType.equals("10")){ + String [] tableNameList=tableName.split(","); + + for(String tableNames:tableNameList){ + Map wellInfoMap=mapDataMapper.getDeviceStatus(devcode,tableNames, + DeviceDataFieldTableEnum.TABLE_FIELD.getTableFieldMap().get(tableName)); + if(!wellInfoMap.containsKey("dataValue")){ + wellInfoMap.put("dataValue",0.0); + } + wellInfoList.add(wellInfoMap); + } + }else { + Map wellInfoMap=mapDataMapper.getDeviceStatus(devcode,tableName, + DeviceDataFieldTableEnum.TABLE_FIELD.getTableFieldMap().get(tableName)); + if(!wellInfoMap.containsKey("dataValue")){ + wellInfoMap.put("dataValue",0.0); + } + wellInfoList.add(wellInfoMap); + } + responseData.setData(wellInfoList); + responseData.setCode(200); + responseData.setSuccess(true); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:点位详情查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + +} diff --git a/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java b/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java new file mode 100644 index 0000000..1946ee3 --- /dev/null +++ b/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java @@ -0,0 +1,60 @@ +package com.casic.service.impl; + +import com.casic.dao.cms.CmsDataMapper; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +public class OperationalStatusBuilder { + + private final DecimalFormat df = new DecimalFormat("0.00%"); + private final CmsDataMapper cmsDataMapper; + + public OperationalStatusBuilder(CmsDataMapper cmsDataMapper) { + this.cmsDataMapper = cmsDataMapper; + } + + public List> OperationalStatusProvider(String beginTime, String endTime) { + List> operaStatusList = getWorkOrder(beginTime,endTime); + operaStatusList.add(getTask(beginTime,endTime)); + operaStatusList.add(getEvent(beginTime,endTime)); + return operaStatusList; + } + + private Map getTask(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalTask(beginTime,endTime); + Map taskMap = new HashMap<>(); + taskMap.put("type", "运维任务"); + taskMap.put("count", String.valueOf(initTask)); + return taskMap; + } + + private List> getWorkOrder(String beginTime, String endTime) { + List> operaStatusList = new ArrayList<>(); + Integer initTask = cmsDataMapper.getTotalWorkOrder(beginTime,endTime); + Map workPageMap = new HashMap<>(); + workPageMap.put("type", "运维工单"); + workPageMap.put("count", String.valueOf(initTask)); + Integer completeTask = cmsDataMapper.getCompleteWorkOrder(beginTime,endTime); + Map completeMap = new HashMap<>(); + completeMap.put("type", "运维完结"); + completeMap.put("count", df.format(Double.valueOf(completeTask) / initTask)); + operaStatusList.add(completeMap); + operaStatusList.add(workPageMap); + return operaStatusList; + } + + private Map getEvent(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalEvent(beginTime,endTime); + Map eventMap = new HashMap<>(); + eventMap.put("type", "运维事件"); + eventMap.put("count", String.valueOf(initTask)); + return eventMap; + } + +} diff --git a/src/main/java/com/casic/service/impl/ScreenDataManger.java b/src/main/java/com/casic/service/impl/ScreenDataManger.java new file mode 100644 index 0000000..6a56a43 --- /dev/null +++ b/src/main/java/com/casic/service/impl/ScreenDataManger.java @@ -0,0 +1,170 @@ +package com.casic.service.impl; + +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.model.ResponseData; +import com.casic.service.ScreenDataService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class ScreenDataManger implements ScreenDataService { + @Autowired + private InstalledDeviceBuilder installedDeviceBuilder; + @Autowired + private KindsAlarmBulider kindsAlarmBulider; + @Autowired + private HealthIndicatorsBuilder healthIndicatorsBuilder; + @Autowired + private DeptTimeSpanBuilder deptTimeSpanBuilder; + @Autowired + private OperationalStatusBuilder operStatusBuilder; + + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + public ScreenDataManger(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, TiltDataMapper tiltDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + this.cmsDataMapper = cmsDataMapper; + this.tiltDataMapper = tiltDataMapper; + } + + public Object getInstalledDevice(String beginTime, String endTime) { + List> installedDeviceList = null; + try { + installedDeviceList = installedDeviceBuilder.InstalledDeviceManger(); + } catch (DataAccessException dex) { + log.error("主题:查询已安装设备的类型和个数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return installedDeviceList; + } + + public Object getKindsAlarmRate(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = kindsAlarmBulider.alarmTypeManger(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:统计汇总各管线权属单位下的燃气管线总长度出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + List> recordsRoadList = null; + try { + recordsRoadList = tiltDataMapper.countColudAlarmRecords(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:显示云台的报警信息出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return recordsRoadList; + } + + public Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime) { + Map healthRoadIndtorMap = null; + try { + healthRoadIndtorMap = healthIndicatorsBuilder.healthRoadIndicatorProvider(isSort,limitNum,beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:以道路维度查看健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return healthRoadIndtorMap; + } + + public Object getDeptTimeSpan(String beginTime, String endTime) { + List> deptTimeSpanList = null; + try { + deptTimeSpanList = deptTimeSpanBuilder.deptTimeSpanProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:按权属单位来汇总,各个权属单位下的燃气管线连续正常运行的时长出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return deptTimeSpanList; + } + + public Object getHealthIndicator(String beginTime, String endTime) { + List> healthIndictorList = null; + try { + healthIndictorList = healthIndicatorsBuilder.healthIndicatorProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return healthIndictorList; + } + + public Object getDeptIndicator(String beginTime, String endTime) { + List> healthIndictorList = null; + try { + healthIndictorList = healthIndicatorsBuilder.deptIndicatorProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:权属单位维度健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return healthIndictorList; + } + + public Object getDeviceList(String beginTime, String endTime) { + List> alarmDeviceList = null; + try { + alarmDeviceList = smartwellDataMapper.getAlarmDeviceList(); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + alarmDeviceList.forEach( + alarmDevice -> { + alarmDevice.put("isAlarm", alarmDevice.containsKey("isAlarm") ? "1" : "0"); + alarmDevice.put("responsibleDept", deptNameMap.get(String.valueOf(alarmDevice.get("responsibleDept")))); + } + ); + } catch (DataAccessException dex) { + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return alarmDeviceList; + } + + public Object getOperationalStatus(String beginTime, String endTime) { + + ResponseData responseData = new ResponseData(); + try { + List> operaStatusList = operStatusBuilder.OperationalStatusProvider(beginTime, endTime); + responseData.setSuccess(true); + responseData.setCode(200); + responseData.setMessage("查询成功"); + responseData.setData(operaStatusList); + } catch (DataAccessException dex) { + log.error("主题:运维情况查询出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = smartwellDataMapper.countAlarmByRoad(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:以道路的维度统计燃气管线监控中的报警情况出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + public Object getInspectRoad(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = cmsDataMapper.countElectronicTask(); + } catch (DataAccessException dex) { + log.error("主题:汇总显示个道路的巡检运维次数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + +} diff --git a/src/main/java/com/casic/util/DeviceDataFieldTableEnum.java b/src/main/java/com/casic/util/DeviceDataFieldTableEnum.java new file mode 100644 index 0000000..5fd7a56 --- /dev/null +++ b/src/main/java/com/casic/util/DeviceDataFieldTableEnum.java @@ -0,0 +1,37 @@ +package com.casic.util; + +import java.util.HashMap; +import java.util.Map; + +public enum DeviceDataFieldTableEnum { + + TABLE_FIELD(new HashMap() { + { + put("data_dig", "ddata AS dataValue"); + put("data_gas", "strength AS dataValue"); + put("data_gasliquid_gas", "strength AS dataValue"); + put("data_gasliquid_liquid", "liquiddata AS dataValue"); + put("data_gas_dector", "gas_sample_value AS dataValue"); + put("data_harmful_gas", "CONCAT(CO, ', ', CH4, ', ', H2S, ', ', O2) AS dataValue"); + put("data_hydrant", "0 AS dataValue"); + put("data_liquid", "liquiddata AS dataValue"); + put("data_noise", "ddata AS dataValue"); + put("data_temp_hum", "CONCAT(TEMPERATURE, ', ', HUMIDITY) AS dataValue"); + put("data_tube", "strength AS dataValue"); + put("data_wellcover", "descn AS dataValue"); + put("data_temp_press", "press AS dataValue"); + put("data_pantilt", "concentration AS dataValue"); + put("data_wellcover_loca", "0 AS dataValue"); + put("data_wellplus", "0 AS dataValue"); + put("data_h2s", "stength AS dataValue"); + } + }); + public Map tableNameMap; + + DeviceDataFieldTableEnum(Map tableNameMap) { + this.tableNameMap = tableNameMap; + } + public Map getTableFieldMap() { + return tableNameMap; + } +} diff --git a/src/main/java/com/casic/util/DeviceDataTableEnum.java b/src/main/java/com/casic/util/DeviceDataTableEnum.java new file mode 100644 index 0000000..a67ad6d --- /dev/null +++ b/src/main/java/com/casic/util/DeviceDataTableEnum.java @@ -0,0 +1,76 @@ +package com.casic.util; + +import java.util.HashMap; + +/** + * @author cz + * @date 2022-7-15 + * 上传数据总记录数 + */ +public enum DeviceDataTableEnum { + + DATA_DIG("data_dig", "井盖状态监测仪"), + DATA_GAS("data_gas", "液位监测仪"), + DATA_GASLIQUID("data_gasliquid_gas,data_gasliquid_liquid", "有害气体监测仪"), + DATA_GAS_DECTOR("data_gas_dector", "燃气智能监测终端"), + DATA_HARMFUL_GAS("data_harmful_gas", "温湿度监测仪"), + DATA_HYDRANT("data_hydrant", "开挖监测仪"), + DATA_LIQUID("data_liquid", "井盖定位监测仪"), + DATA_NOISE("data_noise", "噪声记录仪"), + DATA_PANTILT("data_pantilt", "温度压力监测仪"), + DATA_TEMP_HUM("data_temp_hum", "燃气智能监测终端(一体化)"), + DATA_TUBE("data_tube", "消防栓防盗水监测仪"), + DATA_WELLCOVER("data_wellcover", "管盯"), + DATA_WELLCOVER_DATA("data_temp_press", "井盖液位一体机"), + DATA_WELLCOVER_LOCA("data_wellcover_loca", "硫化氢检测终端"), + DATA_WELLPLUS("data_wellplus", "激光甲烷云台"), + DATA_H2S("data_h2s", "可燃气体"), + DEVICE_TYPE_TABLE(new HashMap() {{ + put(1, DATA_WELLCOVER); + put(2, DATA_LIQUID); + put(3, DATA_HARMFUL_GAS); + put(4, DATA_GAS); + put(5, DATA_TEMP_HUM); + put(6, DATA_DIG); + put(7, DATA_WELLCOVER_LOCA); + put(8, DATA_NOISE); + put(9, DATA_WELLCOVER_DATA); + put(10, DATA_GASLIQUID); + put(11, DATA_HYDRANT); + put(12, DATA_TUBE); + put(13, DATA_WELLPLUS); + put(14, DATA_H2S); + put(21, DATA_PANTILT); + put(101, DATA_GAS_DECTOR); + } + }); + + String typeName; + String tableName; + + DeviceDataTableEnum(String tableName, String typeName) { + this.typeName = typeName; + this.tableName = tableName; + } + + public String getTypeName() { + return typeName; + } + + public String getTableName() { + return tableName; + } + + + public HashMap tableNameMap; + + DeviceDataTableEnum(HashMap tableNameMap) { + this.tableNameMap = tableNameMap; + } + + public HashMap getTableNameMap() { + return tableNameMap; + } + + +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml new file mode 100644 index 0000000..6d28b27 --- /dev/null +++ b/src/main/resources/application-dev.yml @@ -0,0 +1,43 @@ +server: + port: 11312 +################### spring配置 ################### +spring: + datasource: + smartwell: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://111.198.10.15:11209/smartwell_zq_cs + username: postgres + password: Casic203 + cms: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://111.198.10.15:11209/smartwell_cms + username: postgres + password: Casic203 + spantilt: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://111.198.10.15:11102/casic_pan_tilt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&&useSSL=true + username: root + password: Casic203! + session: + store-type: redis + redis: + host: 111.198.10.15 + port: 11412 + password: ew5T4K3#203lwh + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + # session: + # store-type: redis +#flowable数据源和多数据源配置 +casic: + kaptcha-open: false #是否开启登录时验证码 (true/false) + #kaptcha-open: false #是否开启登录时验证码 (true/false) + db: + init: + enable: false + spring-session-open: false #开启spring session +logging: + level.root: error + level.com.casic: error + file: + path: logs/ + name: missiles.log \ No newline at end of file diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml new file mode 100644 index 0000000..4fee268 --- /dev/null +++ b/src/main/resources/application-prod.yml @@ -0,0 +1,43 @@ +server: + port: 11312 +################### spring配置 ################### +spring: + datasource: + smartwell: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://111.198.10.15:11209/smartwell + username: postgres + password: Casic203 + cms: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://111.198.10.15:11209/smartwell_cms + username: postgres + password: Casic203 + span_tilt: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://111.198.10.15:11102/casic_span_tilt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&&useSSL=true + username: root + password: Casic203! + session: + store-type: redis + redis: + host: 111.198.10.15 + port: 11412 + password: ew5T4K3#203lwh + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + # session: + # store-type: redis +#flowable数据源和多数据源配置 +casic: + kaptcha-open: false #是否开启登录时验证码 (true/false) + #kaptcha-open: false #是否开启登录时验证码 (true/false) + db: + init: + enable: false + spring-session-open: false #开启spring session +logging: + level.root: error + level.com.casic: error + file: + path: logs/ + name: missiles.log \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..971553a --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,42 @@ +########################################################## +################## 所有profile共有的配置 ################# +########################################################## +spring: + profiles: + active: dev + servlet: + multipart: + max-file-size: 50MB + max-request-size: 80MB +mybatis-plus: + global-config: + enable-sql-runner: true + configuration: + # 配置结果集属性为空时 是否映射返回结果 + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 + call-setters-on-nulls: true + mapper-locations: classpath:mapper/*.xml +mybatis: + mapper-locations: classpath:mapper/*.xml + configuration: + # 配置结果集属性为空时 是否映射返回结果 + call-setters-on-nulls: true + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 +#mybatis-plus: +# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector +################### mybatis-plus配置 ################### +################### casic配置 ################### +flowable: + checkProcessDefinitions: false #不校验process文件 +casic: + swagger-open: false #是否开启swagger (true/false) + kaptcha-open: false #是否开启登录时验证码 (true/false) + muti-datasource-open: false #是否开启多数据源(true/false) + spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) + session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 + session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 + extUrl: sys + device-types: 1,4,101,12 + config: + export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ + config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/src/main/resources/mapper/cms/CmsDataMapper.xml b/src/main/resources/mapper/cms/CmsDataMapper.xml new file mode 100644 index 0000000..0228745 --- /dev/null +++ b/src/main/resources/mapper/cms/CmsDataMapper.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/smartwell/MapDataMapper.xml b/src/main/resources/mapper/smartwell/MapDataMapper.xml new file mode 100644 index 0000000..7da7bd4 --- /dev/null +++ b/src/main/resources/mapper/smartwell/MapDataMapper.xml @@ -0,0 +1,108 @@ + + + + + + + w.ID AS id, WELL_CODE AS "wellCode", WELL_NAME AS "wellName", DEEP AS deep, + COORDINATE_X AS "coordinateX", COORDINATE_Y AS "coordinateY", LAT_BAIDU AS "latBaidu", + LNG_BAIDU AS "lngBaidu", LNG_GAODE AS "lngGaode", LAT_GAODE AS "latGaode", AREA AS area, + POSITION AS position, DEPTID AS deptid, PHOTOS AS photos, NOTES AS notes, + WELL_TYPE AS "wellType", STAFF AS staff, TEL AS tel, w.TS AS ts, w.VALID AS valid, + BFZT AS bfzt,RESPONSIBLE_DEPT AS "responsibleDept",ROAD AS road,bd.device_type AS "deviceType" + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/casic/controller/MapDataController.java b/src/main/java/com/casic/controller/MapDataController.java new file mode 100644 index 0000000..b897b95 --- /dev/null +++ b/src/main/java/com/casic/controller/MapDataController.java @@ -0,0 +1,47 @@ +package com.casic.controller; + +import com.casic.service.MapDataService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/overview") +public class MapDataController { + + private final MapDataService mapDataService; + + public MapDataController(MapDataService mapDataService) { + this.mapDataService = mapDataService; + } + + /** + * 获取列表 + */ + @RequestMapping(value = "/wellList") + public Object getWellList(@RequestParam(required = false) String keywords, + @RequestParam(required = false) String wellType, + @RequestParam(required = false) String deptid, + @RequestParam(required = false) String isAlarm) { + + return mapDataService.getWellList(keywords,wellType,deptid,isAlarm); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/alarmNow") + public Object alarmNow() { + return mapDataService.getNowAlarmRecords(); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/wellInfo") + public Object getWellInfo(@RequestParam(value = "devcode", required = true) String devcode, + @RequestParam(value = "deviceType", required = true) String deviceType) { + return mapDataService.getWellInfo(devcode,deviceType); + } +} diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java new file mode 100644 index 0000000..04f8d97 --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -0,0 +1,210 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + public ScreenDataController(ScreenDataService screenDataService) { + this.screenDataService = screenDataService; + } + + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/line-length") + public Object getLineLength(String beginTime, String endTime) { +// return screenDataService.getLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + " \"deptName\":\"圣井燃气\",\n" + + " \"totalLength\":440\n" + + " },\n" + + " {\n" + + " \"deptName\":\"华气燃气\",\n" + + " \"totalLength\":810\n" + + " },\n" + + " {\n" + + " \"typeName\":\"中燃燃气\",\n" + + " \"totalLength\":500\n" + + " },\n" + + " {\n" + + " \"typeName\":\"正和燃气\",\n" + + " \"totalLength\":520\n" + + " },\n" + + " {\n" + + " \"typeName\":\"华罚燃气\",\n" + + " \"totalLength\":630\n" + + " }\n" + + " ]"; + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + /** + * 分类汇总燃气管线监管人员的类型和数量 + */ + @RequestMapping("/staff") + public Object getObvserStaff(String beginTime, String endTime) { +// return screenDataService.getObvserStaff(beginTime, endTime); + return "{\n" + + " \t\"总人数\":2022,\n" + + "\t\"staffDataList\":[\n" + + " {\n" + + "\t\t\"岗位名称\":\"管理人员\",\n" + + "\t\t\"总计\":72\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"运维人员\",\n" + + "\t\t\"总计\":874\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"施工人员\",\n" + + "\t\t\"总计\":456\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"统计人员\",\n" + + "\t\t\"总计\":745\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"技术人员\",\n" + + "\t\t\"总计\":455\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"监管人员\",\n" + + "\t\t\"总计\":644\n" + + " }]\n" + + " }"; + } + + /** + * 以道路的维度来统计汇总燃气管线的长度和权属单位 + */ + @RequestMapping("/road-line-length") + public Object getRoadLineLength(String beginTime, String endTime) { +// return screenDataService.getRoadLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + "\t\t\"所属道路\":\"双山西街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"圣井燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"世纪大道\",\n" + + "\t\t\"管线长度/km\":54,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"桃水大街\",\n" + + "\t\t\"管线长度/km\":32,\n" + + "\t\t\"权属单位\":\"中燃燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"鲁态大街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " }\n" + + "]"; + } + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + +// /** +// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/list") +// public Object getDeviceList(String beginTime, String endTime) { +// return screenDataService.getDeviceList(beginTime,endTime); +// } +// +// /** +// * 包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/Info") +// public Object getDeviceInfo(String wellCode,String deviceType) { +// return screenDataService.getDeviceInfo(wellCode,deviceType); +// } + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + /** + * 显示云台的报警信息 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/cms/CmsDataMapper.java b/src/main/java/com/casic/dao/cms/CmsDataMapper.java new file mode 100644 index 0000000..e57975e --- /dev/null +++ b/src/main/java/com/casic/dao/cms/CmsDataMapper.java @@ -0,0 +1,23 @@ +package com.casic.dao.cms; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface CmsDataMapper { + + Integer countElectronicDevice(); + + List> countElectronicTask(); + + Integer getTotalWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getCompleteWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalEvent(@Param("beginTime") String beginTime, @Param("endTime") String endTime); +} diff --git a/src/main/java/com/casic/dao/smartwell/MapDataMapper.java b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java new file mode 100644 index 0000000..8e56978 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java @@ -0,0 +1,25 @@ +package com.casic.dao.smartwell; + +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface MapDataMapper { + + List getWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNotAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNowAlarmRecords(); + + String getDictNameByCode(@Param("wellType") String wellType); + + Map getDeviceStatus(@Param("devcode") String devcode, @Param("tableName") String tableName, @Param("dataField") String dataField); +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java new file mode 100644 index 0000000..0294b14 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -0,0 +1,43 @@ +package com.casic.dao.smartwell; + + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SmartwellDataMapper { + + List> countDeviceByType(); + + List> getTypeName(); + + List> countAlarmType(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getDeviceListByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countDeviceNumber(); + + Integer countAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countDeviceNumberByDept(); + + List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countRoadNumber(); + + List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDeviceList(); + + List> getDeptNameList(); + +} diff --git a/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java new file mode 100644 index 0000000..e6ba279 --- /dev/null +++ b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java @@ -0,0 +1,32 @@ +package com.casic.dao.spantilt; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface TiltDataMapper { + /** + * 已安装设备 + * + * @return + */ + Integer countColudDevice(); + + /** + * 警告 + * + * @return + */ + Integer countColudAlarm(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + + /** + * 云台报警信息 + * + * @return + */ + List> countColudAlarmRecords(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + +} diff --git a/src/main/java/com/casic/model/AlarmNowView.java b/src/main/java/com/casic/model/AlarmNowView.java new file mode 100644 index 0000000..6eebafc --- /dev/null +++ b/src/main/java/com/casic/model/AlarmNowView.java @@ -0,0 +1,108 @@ +package com.casic.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +public class AlarmNowView { + + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date alarmTime; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + +} diff --git a/src/main/java/com/casic/model/BusWellInfo.java b/src/main/java/com/casic/model/BusWellInfo.java new file mode 100644 index 0000000..f4b8eba --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfo.java @@ -0,0 +1,192 @@ +package com.casic.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + //@NotEmpty(message="井深不能为空") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + + /** + * 区域 + */ + private String road; + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + + + /** + * 位置 + */ + private String position; + /** + * 部门编号 + */ + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; +// /** +// * 责任人 +// */ +// @TableField("STAFF") +// private String staff; +// /** +// * 电话 +// */ +// @TableField("TEL") +// private String tel; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/src/main/java/com/casic/model/BusWellInfoDto.java b/src/main/java/com/casic/model/BusWellInfoDto.java new file mode 100644 index 0000000..48610f2 --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfoDto.java @@ -0,0 +1,276 @@ +package com.casic.model; + + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class BusWellInfoDto { + private Long id; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + private String deviceType; + private String deptid; + private String deptName; + private Float deep; + private String position; + private String coordinateX; + private String coordinateY; + private String lngBaidu; + private String latBaidu; + private String lngGaode; + private String latGaode; + private String photos; + private String notes; + private String bfzt; + private String bfztName; + private String area; + private String staff; + private String tel; + private String valid; + private String ts; + private List watchData; + + Map map = new HashMap(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + map.put("id", id); + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + map.put("wellCode", wellCode); + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + map.put("wellName", wellName); + } + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + map.put("deviceType", deviceType); + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + map.put("wellType", wellType); + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + map.put("wellTypeName", wellTypeName); + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + map.put("deptid", deptid); + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + map.put("deptName", deptName); + } + + public Float getDeep() { + return deep; + } + + public void setDeep(Float deep) { + this.deep = deep; + map.put("deep", deep); + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + map.put("position", position); + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + map.put("coordinateX", coordinateX); + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + map.put("coordinateY", coordinateY); + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + map.put("lngBaidu", lngBaidu); + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + map.put("latBaidu", latBaidu); + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + map.put("lngGaode", lngGaode); + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + map.put("latGaode", latGaode); + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + map.put("photos", photos); + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + map.put("notes", notes); + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + map.put("bfzt", bfzt); + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + map.put("bfztName", bfztName); + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + map.put("area", area); + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + map.put("staff", staff); + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + map.put("tel", tel); + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + map.put("valid", valid); + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + map.put("ts", ts); + } + + public List getWatchData() { + return watchData; + } + + public void setWatchData(List watchData) { + this.watchData = watchData; + map.put("watchData", watchData); + } + + public Map toMap() { + return map; + } +} diff --git a/src/main/java/com/casic/model/ResponseData.java b/src/main/java/com/casic/model/ResponseData.java new file mode 100644 index 0000000..356775a --- /dev/null +++ b/src/main/java/com/casic/model/ResponseData.java @@ -0,0 +1,19 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Boolean success; + private Integer code; + private String message; + private Object data; +} \ No newline at end of file diff --git a/src/main/java/com/casic/model/WatchDataDto.java b/src/main/java/com/casic/model/WatchDataDto.java new file mode 100644 index 0000000..d50cfb5 --- /dev/null +++ b/src/main/java/com/casic/model/WatchDataDto.java @@ -0,0 +1,32 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author lenovo + */ +@Data +public class WatchDataDto implements Cloneable{ + + private Long deviceId; + private String devcode; + private String installDate; + private String onlineState; + private String onlineStateName; + private String watchType; + private String type; // 地图总览时使用 + private String data = ""; + private String value = ""; // 地图总览时使用 + private String logtime = "";//数据更新时间(设备上报时间) + + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/casic/service/MapDataService.java b/src/main/java/com/casic/service/MapDataService.java new file mode 100644 index 0000000..5f77810 --- /dev/null +++ b/src/main/java/com/casic/service/MapDataService.java @@ -0,0 +1,12 @@ +package com.casic.service; + + +public interface MapDataService { + + Object getWellList(String keywords, String wellType, String deptid, String isAlarm); + + Object getNowAlarmRecords(); + + Object getWellInfo(String devcode,String deviceType); + +} diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java new file mode 100644 index 0000000..b4dd026 --- /dev/null +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -0,0 +1,27 @@ +package com.casic.service; + +public interface ScreenDataService { + Object getInstalledDevice(String beginTime, String endTime); + + Object getKindsAlarmRate(String beginTime, String endTime); + + Object getAlarmRecordsByStation(String beginTime, String endTime); + + Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + + Object getDeptTimeSpan(String beginTime, String endTime); + + Object getHealthIndicator(String beginTime, String endTime); + + Object getDeptIndicator(String beginTime, String endTime); + + Object getDeviceList(String beginTime, String endTime); + + Object getOperationalStatus(String beginTime, String endTime); + + Object getAlarmRecordsByRoad(String beginTime, String endTime); + + Object getInspectRoad(String beginTime, String endTime); + + +} diff --git a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java new file mode 100644 index 0000000..661018b --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java @@ -0,0 +1,88 @@ +package com.casic.service.impl; + + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class DeptTimeSpanBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00"); + + public DeptTimeSpanBuilder(SmartwellDataMapper smartwellDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + } + + public List> deptTimeSpanProvider(String beginTime, String endTime) { + Map> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = getAlarmDevice(beginTime, endTime); + Map> currentDeviceTimeMap = MergeDeviceSpan(normalDeviceDeptMap, alarmDeviceDeptMap); + List> deptTimeSpanMap = calculateDeptTime(currentDeviceTimeMap); + return deptTimeSpanMap; + } + + private Map> getNormalDevice(String beginTime, String endTime) { + List> normalDeviceList = smartwellDataMapper.getNormalDevice(beginTime, endTime); + Map> normalDeviceDeptMap = normalDeviceList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return normalDeviceDeptMap; + } + + private Map> getAlarmDevice(String beginTime, String endTime) { + List> alarmDeviceDeptList = smartwellDataMapper.getAlarmDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = alarmDeviceDeptList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return alarmDeviceDeptMap; + } + + private Map> MergeDeviceSpan(Map> normalDeviceDeptMap, + Map> alarmDeviceDeptMap) { + for (Map.Entry> normalMap : normalDeviceDeptMap.entrySet()) { + String mapKey = normalMap.getKey(); + Map normalmap = normalMap.getValue(); + if (alarmDeviceDeptMap.containsKey(mapKey)) { + Map alarmMap = alarmDeviceDeptMap.get(mapKey); + for (Map.Entry alarmMapItem : alarmMap.entrySet()) { + String deviceCode = alarmMapItem.getKey(); + normalmap.put(deviceCode, alarmMapItem.getValue()); + } + } + } + return normalDeviceDeptMap; + } + + private List> calculateDeptTime(Map> currentDeviceTimeMap) { + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptTimeSpanList = new ArrayList<>(); + for (Map.Entry> currentDeviceMap : currentDeviceTimeMap.entrySet()) { + String deptid = currentDeviceMap.getKey(); + Map currentDeviceItemMap = currentDeviceMap.getValue(); + Double timeSpan = 0.00; + for (Map.Entry timeMapItem : currentDeviceItemMap.entrySet()) { + timeSpan += StringUtils.isEmpty(timeMapItem.getValue()) || timeMapItem.getValue() == "null" ? 0 : Double.valueOf(timeMapItem.getValue()); + } + Map deptTimeSpanMap = new HashMap<>(); + deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); + deptTimeSpanMap.put("count", df.format(timeSpan)); + deptTimeSpanList.add(deptTimeSpanMap); + } + return deptTimeSpanList; + } + +} diff --git a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java new file mode 100644 index 0000000..ffd0f1b --- /dev/null +++ b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java @@ -0,0 +1,96 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class HealthIndicatorsBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00%"); + + public HealthIndicatorsBuilder(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + this.tiltDataMapper = tiltDataMapper; + } + + + public List> healthIndicatorProvider(String beginTime, String endTime) { + List> healthIndictorList = new ArrayList<>(); + healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); + healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); + return healthIndictorList; + } + + + public List> deptIndicatorProvider(String beginTime, String endTime) { + List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); + List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); + List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); + return deptIndicatorList; + } + + public Map healthRoadIndicatorProvider(String isSort,String limitNum,String beginTime, String endTime) { + return smartwellHealthRoadIndicator(isSort,limitNum,beginTime, endTime); + } + + private Map smartwellHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); + Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); + smartwellHealth.put("typeName", "管网健康指数"); + smartwellHealth.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map tiltHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = tiltDataMapper.countColudDevice(); + Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); + smartwellHealth.put("typeName", "场站健康指数"); + smartwellHealth.put("count", df.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map smartwellHealthRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer roadNumber = smartwellDataMapper.countRoadNumber(); + Integer alarmRoad = smartwellDataMapper.countAlarmRoad(isSort,limitNum,beginTime, endTime); + smartwellHealth.put("typeName", "道路健康指数"); + smartwellHealth.put("count", df.format((Double.valueOf(roadNumber - alarmRoad)) / roadNumber)); + return smartwellHealth; + } + + private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { + Map alarmDeptMap = alarmDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) + ); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptIndicatorList = new ArrayList<>(); + deviceDeptNumberList.forEach( + deptNameNumberMap -> { + Map deptIndicatorMap = new HashMap<>(); + int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); + String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); + int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); + deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); + deptIndicatorMap.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + deptIndicatorList.add(deptIndicatorMap); + } + ); + return deptIndicatorList; + } +} diff --git a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java new file mode 100644 index 0000000..8b1209d --- /dev/null +++ b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java @@ -0,0 +1,71 @@ +package com.casic.service.impl; + +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 + */ +@Service +public class InstalledDeviceBuilder { + + private final DeviceTypesConfig deviceTypesConfig; + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + public InstalledDeviceBuilder(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, + TiltDataMapper tiltDataMapper, DeviceTypesConfig deviceTypesConfig) { + this.smartwellDataMapper = smartwellDataMapper; + this.cmsDataMapper = cmsDataMapper; + this.tiltDataMapper = tiltDataMapper; + this.deviceTypesConfig = deviceTypesConfig; + } + + public List> InstalledDeviceManger() { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + List> installedDeviceList = new ArrayList<>(); + cmsInstalledDevice(installedDeviceList); + tiltInstalledDevice(installedDeviceList); + smartwellInstalledDevice(installedDeviceList, deviceTypeList); + return installedDeviceList; + } + + private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); + installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); + installedDeviceList.add(installedDeviceMap); + } + } + + private void cmsInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); + installedDeviceMap.put("typeName", "电子标识器"); + installedDeviceList.add(installedDeviceMap); + } + + private void tiltInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); + installedDeviceMap.put("typeName", "云台"); + installedDeviceList.add(installedDeviceMap); + } +} diff --git a/src/main/java/com/casic/service/impl/KindsAlarmBulider.java b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java new file mode 100644 index 0000000..82df147 --- /dev/null +++ b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java @@ -0,0 +1,75 @@ +package com.casic.service.impl; + +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component +public class KindsAlarmBulider { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + private final DeviceTypesConfig deviceTypesConfig; + + private final DecimalFormat df = new DecimalFormat("0.00%"); + + public KindsAlarmBulider(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper,DeviceTypesConfig deviceTypesConfig) { + this.smartwellDataMapper = smartwellDataMapper; + this.tiltDataMapper = tiltDataMapper; + this.deviceTypesConfig=deviceTypesConfig; + } + + public List> alarmTypeManger(String beginTime, String endTime) { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + Map typeNameMap = smartwellDeviceType(); + List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap,deviceTypeList); + calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); + return rateDeviceList; + } + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } + + private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap,String[] deviceTypeList) { + List> rateDeviceList = new ArrayList<>(); + List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); + Map alarmCountMap = alarmCountList.stream().collect( + Collectors.toMap( + e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) + ) + ); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map rateDeviceMap = new HashMap<>(); + Integer totalAlarm = deviceCountMap.containsKey(deviceType)?Integer.valueOf(deviceCountMap.get(deviceType)):0; + Integer alarmCount=alarmCountMap.containsKey(deviceType)?Integer.valueOf(alarmCountMap.get(deviceType)):0; + rateDeviceMap.put("rate", totalAlarm==0?"0.00%":df.format(Double.valueOf(alarmCount)/totalAlarm)); + rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); + rateDeviceList.add(rateDeviceMap); + } + return rateDeviceList; + } + + private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { + Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); + Integer totalAlarm = tiltDataMapper.countColudDevice(); + Map rateDeviceMap = new HashMap<>(); + rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : df.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", "云台"); + rateDeviceList.add(rateDeviceMap); + } +} diff --git a/src/main/java/com/casic/service/impl/MapDataServiceImpl.java b/src/main/java/com/casic/service/impl/MapDataServiceImpl.java new file mode 100644 index 0000000..c2640ab --- /dev/null +++ b/src/main/java/com/casic/service/impl/MapDataServiceImpl.java @@ -0,0 +1,113 @@ +package com.casic.service.impl; + +import com.casic.dao.smartwell.MapDataMapper; +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import com.casic.model.ResponseData; +import com.casic.service.MapDataService; +import com.casic.util.DeviceDataFieldTableEnum; +import com.casic.util.DeviceDataTableEnum; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Slf4j +@Service +public class MapDataServiceImpl implements MapDataService { + + @Autowired + private MapDataMapper mapDataMapper; + + @Override + public Object getNowAlarmRecords() { + ResponseData responseData = new ResponseData(); + try { + List alarmNowViewList = this.mapDataMapper.getNowAlarmRecords(); + for (AlarmNowView alarmNowView : alarmNowViewList) { + alarmNowView.setWellTypeName(mapDataMapper.getDictNameByCode(alarmNowView.getWellType())); + } + responseData.setData(alarmNowViewList); + responseData.setCode(200); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:最新报警记录查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + + @Override + public Object getWellList(String keywords, String wellType, String deptid, String isAlarm) { + + ResponseData responseData = new ResponseData(); + try { + List wellList = new ArrayList<>(); + if (null == isAlarm || isAlarm.equals("") == true) { + // 查询并添加当前部门的闸井 + List myList = mapDataMapper.getWellList(keywords, wellType, deptid); + if (null != myList && myList.isEmpty() == false) { + wellList.addAll(myList); + } + } else if (isAlarm.equals("1")) { + // isAlarm = 1 查询所有报警状态的闸井 + wellList = mapDataMapper.getAlarmWellList(keywords, wellType, deptid); + } else { + // isAlarm = 0 查询所有不是报警状态的闸井 + wellList = mapDataMapper.getNotAlarmWellList(keywords, wellType, deptid); + } + responseData.setData(wellList); + responseData.setCode(200); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:点位记录列表查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + public Object getWellInfo(String devcode,String deviceType){ + ResponseData responseData = new ResponseData(); + try { + DeviceDataTableEnum deviceDataTableEnum = DeviceDataTableEnum.DEVICE_TYPE_TABLE.getTableNameMap().get(Integer.valueOf(deviceType)); + String tableName = deviceDataTableEnum.getTableName(); + List> wellInfoList=new ArrayList<>(); + if(deviceType.equals("10")){ + String [] tableNameList=tableName.split(","); + + for(String tableNames:tableNameList){ + Map wellInfoMap=mapDataMapper.getDeviceStatus(devcode,tableNames, + DeviceDataFieldTableEnum.TABLE_FIELD.getTableFieldMap().get(tableName)); + if(!wellInfoMap.containsKey("dataValue")){ + wellInfoMap.put("dataValue",0.0); + } + wellInfoList.add(wellInfoMap); + } + }else { + Map wellInfoMap=mapDataMapper.getDeviceStatus(devcode,tableName, + DeviceDataFieldTableEnum.TABLE_FIELD.getTableFieldMap().get(tableName)); + if(!wellInfoMap.containsKey("dataValue")){ + wellInfoMap.put("dataValue",0.0); + } + wellInfoList.add(wellInfoMap); + } + responseData.setData(wellInfoList); + responseData.setCode(200); + responseData.setSuccess(true); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:点位详情查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + +} diff --git a/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java b/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java new file mode 100644 index 0000000..1946ee3 --- /dev/null +++ b/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java @@ -0,0 +1,60 @@ +package com.casic.service.impl; + +import com.casic.dao.cms.CmsDataMapper; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +public class OperationalStatusBuilder { + + private final DecimalFormat df = new DecimalFormat("0.00%"); + private final CmsDataMapper cmsDataMapper; + + public OperationalStatusBuilder(CmsDataMapper cmsDataMapper) { + this.cmsDataMapper = cmsDataMapper; + } + + public List> OperationalStatusProvider(String beginTime, String endTime) { + List> operaStatusList = getWorkOrder(beginTime,endTime); + operaStatusList.add(getTask(beginTime,endTime)); + operaStatusList.add(getEvent(beginTime,endTime)); + return operaStatusList; + } + + private Map getTask(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalTask(beginTime,endTime); + Map taskMap = new HashMap<>(); + taskMap.put("type", "运维任务"); + taskMap.put("count", String.valueOf(initTask)); + return taskMap; + } + + private List> getWorkOrder(String beginTime, String endTime) { + List> operaStatusList = new ArrayList<>(); + Integer initTask = cmsDataMapper.getTotalWorkOrder(beginTime,endTime); + Map workPageMap = new HashMap<>(); + workPageMap.put("type", "运维工单"); + workPageMap.put("count", String.valueOf(initTask)); + Integer completeTask = cmsDataMapper.getCompleteWorkOrder(beginTime,endTime); + Map completeMap = new HashMap<>(); + completeMap.put("type", "运维完结"); + completeMap.put("count", df.format(Double.valueOf(completeTask) / initTask)); + operaStatusList.add(completeMap); + operaStatusList.add(workPageMap); + return operaStatusList; + } + + private Map getEvent(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalEvent(beginTime,endTime); + Map eventMap = new HashMap<>(); + eventMap.put("type", "运维事件"); + eventMap.put("count", String.valueOf(initTask)); + return eventMap; + } + +} diff --git a/src/main/java/com/casic/service/impl/ScreenDataManger.java b/src/main/java/com/casic/service/impl/ScreenDataManger.java new file mode 100644 index 0000000..6a56a43 --- /dev/null +++ b/src/main/java/com/casic/service/impl/ScreenDataManger.java @@ -0,0 +1,170 @@ +package com.casic.service.impl; + +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.model.ResponseData; +import com.casic.service.ScreenDataService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class ScreenDataManger implements ScreenDataService { + @Autowired + private InstalledDeviceBuilder installedDeviceBuilder; + @Autowired + private KindsAlarmBulider kindsAlarmBulider; + @Autowired + private HealthIndicatorsBuilder healthIndicatorsBuilder; + @Autowired + private DeptTimeSpanBuilder deptTimeSpanBuilder; + @Autowired + private OperationalStatusBuilder operStatusBuilder; + + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + public ScreenDataManger(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, TiltDataMapper tiltDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + this.cmsDataMapper = cmsDataMapper; + this.tiltDataMapper = tiltDataMapper; + } + + public Object getInstalledDevice(String beginTime, String endTime) { + List> installedDeviceList = null; + try { + installedDeviceList = installedDeviceBuilder.InstalledDeviceManger(); + } catch (DataAccessException dex) { + log.error("主题:查询已安装设备的类型和个数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return installedDeviceList; + } + + public Object getKindsAlarmRate(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = kindsAlarmBulider.alarmTypeManger(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:统计汇总各管线权属单位下的燃气管线总长度出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + List> recordsRoadList = null; + try { + recordsRoadList = tiltDataMapper.countColudAlarmRecords(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:显示云台的报警信息出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return recordsRoadList; + } + + public Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime) { + Map healthRoadIndtorMap = null; + try { + healthRoadIndtorMap = healthIndicatorsBuilder.healthRoadIndicatorProvider(isSort,limitNum,beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:以道路维度查看健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return healthRoadIndtorMap; + } + + public Object getDeptTimeSpan(String beginTime, String endTime) { + List> deptTimeSpanList = null; + try { + deptTimeSpanList = deptTimeSpanBuilder.deptTimeSpanProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:按权属单位来汇总,各个权属单位下的燃气管线连续正常运行的时长出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return deptTimeSpanList; + } + + public Object getHealthIndicator(String beginTime, String endTime) { + List> healthIndictorList = null; + try { + healthIndictorList = healthIndicatorsBuilder.healthIndicatorProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return healthIndictorList; + } + + public Object getDeptIndicator(String beginTime, String endTime) { + List> healthIndictorList = null; + try { + healthIndictorList = healthIndicatorsBuilder.deptIndicatorProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:权属单位维度健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return healthIndictorList; + } + + public Object getDeviceList(String beginTime, String endTime) { + List> alarmDeviceList = null; + try { + alarmDeviceList = smartwellDataMapper.getAlarmDeviceList(); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + alarmDeviceList.forEach( + alarmDevice -> { + alarmDevice.put("isAlarm", alarmDevice.containsKey("isAlarm") ? "1" : "0"); + alarmDevice.put("responsibleDept", deptNameMap.get(String.valueOf(alarmDevice.get("responsibleDept")))); + } + ); + } catch (DataAccessException dex) { + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return alarmDeviceList; + } + + public Object getOperationalStatus(String beginTime, String endTime) { + + ResponseData responseData = new ResponseData(); + try { + List> operaStatusList = operStatusBuilder.OperationalStatusProvider(beginTime, endTime); + responseData.setSuccess(true); + responseData.setCode(200); + responseData.setMessage("查询成功"); + responseData.setData(operaStatusList); + } catch (DataAccessException dex) { + log.error("主题:运维情况查询出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = smartwellDataMapper.countAlarmByRoad(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:以道路的维度统计燃气管线监控中的报警情况出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + public Object getInspectRoad(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = cmsDataMapper.countElectronicTask(); + } catch (DataAccessException dex) { + log.error("主题:汇总显示个道路的巡检运维次数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + +} diff --git a/src/main/java/com/casic/util/DeviceDataFieldTableEnum.java b/src/main/java/com/casic/util/DeviceDataFieldTableEnum.java new file mode 100644 index 0000000..5fd7a56 --- /dev/null +++ b/src/main/java/com/casic/util/DeviceDataFieldTableEnum.java @@ -0,0 +1,37 @@ +package com.casic.util; + +import java.util.HashMap; +import java.util.Map; + +public enum DeviceDataFieldTableEnum { + + TABLE_FIELD(new HashMap() { + { + put("data_dig", "ddata AS dataValue"); + put("data_gas", "strength AS dataValue"); + put("data_gasliquid_gas", "strength AS dataValue"); + put("data_gasliquid_liquid", "liquiddata AS dataValue"); + put("data_gas_dector", "gas_sample_value AS dataValue"); + put("data_harmful_gas", "CONCAT(CO, ', ', CH4, ', ', H2S, ', ', O2) AS dataValue"); + put("data_hydrant", "0 AS dataValue"); + put("data_liquid", "liquiddata AS dataValue"); + put("data_noise", "ddata AS dataValue"); + put("data_temp_hum", "CONCAT(TEMPERATURE, ', ', HUMIDITY) AS dataValue"); + put("data_tube", "strength AS dataValue"); + put("data_wellcover", "descn AS dataValue"); + put("data_temp_press", "press AS dataValue"); + put("data_pantilt", "concentration AS dataValue"); + put("data_wellcover_loca", "0 AS dataValue"); + put("data_wellplus", "0 AS dataValue"); + put("data_h2s", "stength AS dataValue"); + } + }); + public Map tableNameMap; + + DeviceDataFieldTableEnum(Map tableNameMap) { + this.tableNameMap = tableNameMap; + } + public Map getTableFieldMap() { + return tableNameMap; + } +} diff --git a/src/main/java/com/casic/util/DeviceDataTableEnum.java b/src/main/java/com/casic/util/DeviceDataTableEnum.java new file mode 100644 index 0000000..a67ad6d --- /dev/null +++ b/src/main/java/com/casic/util/DeviceDataTableEnum.java @@ -0,0 +1,76 @@ +package com.casic.util; + +import java.util.HashMap; + +/** + * @author cz + * @date 2022-7-15 + * 上传数据总记录数 + */ +public enum DeviceDataTableEnum { + + DATA_DIG("data_dig", "井盖状态监测仪"), + DATA_GAS("data_gas", "液位监测仪"), + DATA_GASLIQUID("data_gasliquid_gas,data_gasliquid_liquid", "有害气体监测仪"), + DATA_GAS_DECTOR("data_gas_dector", "燃气智能监测终端"), + DATA_HARMFUL_GAS("data_harmful_gas", "温湿度监测仪"), + DATA_HYDRANT("data_hydrant", "开挖监测仪"), + DATA_LIQUID("data_liquid", "井盖定位监测仪"), + DATA_NOISE("data_noise", "噪声记录仪"), + DATA_PANTILT("data_pantilt", "温度压力监测仪"), + DATA_TEMP_HUM("data_temp_hum", "燃气智能监测终端(一体化)"), + DATA_TUBE("data_tube", "消防栓防盗水监测仪"), + DATA_WELLCOVER("data_wellcover", "管盯"), + DATA_WELLCOVER_DATA("data_temp_press", "井盖液位一体机"), + DATA_WELLCOVER_LOCA("data_wellcover_loca", "硫化氢检测终端"), + DATA_WELLPLUS("data_wellplus", "激光甲烷云台"), + DATA_H2S("data_h2s", "可燃气体"), + DEVICE_TYPE_TABLE(new HashMap() {{ + put(1, DATA_WELLCOVER); + put(2, DATA_LIQUID); + put(3, DATA_HARMFUL_GAS); + put(4, DATA_GAS); + put(5, DATA_TEMP_HUM); + put(6, DATA_DIG); + put(7, DATA_WELLCOVER_LOCA); + put(8, DATA_NOISE); + put(9, DATA_WELLCOVER_DATA); + put(10, DATA_GASLIQUID); + put(11, DATA_HYDRANT); + put(12, DATA_TUBE); + put(13, DATA_WELLPLUS); + put(14, DATA_H2S); + put(21, DATA_PANTILT); + put(101, DATA_GAS_DECTOR); + } + }); + + String typeName; + String tableName; + + DeviceDataTableEnum(String tableName, String typeName) { + this.typeName = typeName; + this.tableName = tableName; + } + + public String getTypeName() { + return typeName; + } + + public String getTableName() { + return tableName; + } + + + public HashMap tableNameMap; + + DeviceDataTableEnum(HashMap tableNameMap) { + this.tableNameMap = tableNameMap; + } + + public HashMap getTableNameMap() { + return tableNameMap; + } + + +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml new file mode 100644 index 0000000..6d28b27 --- /dev/null +++ b/src/main/resources/application-dev.yml @@ -0,0 +1,43 @@ +server: + port: 11312 +################### spring配置 ################### +spring: + datasource: + smartwell: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://111.198.10.15:11209/smartwell_zq_cs + username: postgres + password: Casic203 + cms: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://111.198.10.15:11209/smartwell_cms + username: postgres + password: Casic203 + spantilt: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://111.198.10.15:11102/casic_pan_tilt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&&useSSL=true + username: root + password: Casic203! + session: + store-type: redis + redis: + host: 111.198.10.15 + port: 11412 + password: ew5T4K3#203lwh + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + # session: + # store-type: redis +#flowable数据源和多数据源配置 +casic: + kaptcha-open: false #是否开启登录时验证码 (true/false) + #kaptcha-open: false #是否开启登录时验证码 (true/false) + db: + init: + enable: false + spring-session-open: false #开启spring session +logging: + level.root: error + level.com.casic: error + file: + path: logs/ + name: missiles.log \ No newline at end of file diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml new file mode 100644 index 0000000..4fee268 --- /dev/null +++ b/src/main/resources/application-prod.yml @@ -0,0 +1,43 @@ +server: + port: 11312 +################### spring配置 ################### +spring: + datasource: + smartwell: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://111.198.10.15:11209/smartwell + username: postgres + password: Casic203 + cms: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://111.198.10.15:11209/smartwell_cms + username: postgres + password: Casic203 + span_tilt: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://111.198.10.15:11102/casic_span_tilt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&&useSSL=true + username: root + password: Casic203! + session: + store-type: redis + redis: + host: 111.198.10.15 + port: 11412 + password: ew5T4K3#203lwh + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + # session: + # store-type: redis +#flowable数据源和多数据源配置 +casic: + kaptcha-open: false #是否开启登录时验证码 (true/false) + #kaptcha-open: false #是否开启登录时验证码 (true/false) + db: + init: + enable: false + spring-session-open: false #开启spring session +logging: + level.root: error + level.com.casic: error + file: + path: logs/ + name: missiles.log \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..971553a --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,42 @@ +########################################################## +################## 所有profile共有的配置 ################# +########################################################## +spring: + profiles: + active: dev + servlet: + multipart: + max-file-size: 50MB + max-request-size: 80MB +mybatis-plus: + global-config: + enable-sql-runner: true + configuration: + # 配置结果集属性为空时 是否映射返回结果 + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 + call-setters-on-nulls: true + mapper-locations: classpath:mapper/*.xml +mybatis: + mapper-locations: classpath:mapper/*.xml + configuration: + # 配置结果集属性为空时 是否映射返回结果 + call-setters-on-nulls: true + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 +#mybatis-plus: +# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector +################### mybatis-plus配置 ################### +################### casic配置 ################### +flowable: + checkProcessDefinitions: false #不校验process文件 +casic: + swagger-open: false #是否开启swagger (true/false) + kaptcha-open: false #是否开启登录时验证码 (true/false) + muti-datasource-open: false #是否开启多数据源(true/false) + spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) + session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 + session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 + extUrl: sys + device-types: 1,4,101,12 + config: + export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ + config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/src/main/resources/mapper/cms/CmsDataMapper.xml b/src/main/resources/mapper/cms/CmsDataMapper.xml new file mode 100644 index 0000000..0228745 --- /dev/null +++ b/src/main/resources/mapper/cms/CmsDataMapper.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/smartwell/MapDataMapper.xml b/src/main/resources/mapper/smartwell/MapDataMapper.xml new file mode 100644 index 0000000..7da7bd4 --- /dev/null +++ b/src/main/resources/mapper/smartwell/MapDataMapper.xml @@ -0,0 +1,108 @@ + + + + + + + w.ID AS id, WELL_CODE AS "wellCode", WELL_NAME AS "wellName", DEEP AS deep, + COORDINATE_X AS "coordinateX", COORDINATE_Y AS "coordinateY", LAT_BAIDU AS "latBaidu", + LNG_BAIDU AS "lngBaidu", LNG_GAODE AS "lngGaode", LAT_GAODE AS "latGaode", AREA AS area, + POSITION AS position, DEPTID AS deptid, PHOTOS AS photos, NOTES AS notes, + WELL_TYPE AS "wellType", STAFF AS staff, TEL AS tel, w.TS AS ts, w.VALID AS valid, + BFZT AS bfzt,RESPONSIBLE_DEPT AS "responsibleDept",ROAD AS road,bd.device_type AS "deviceType" + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/smartwell/SmartwellDataMapper.xml b/src/main/resources/mapper/smartwell/SmartwellDataMapper.xml new file mode 100644 index 0000000..085ed49 --- /dev/null +++ b/src/main/resources/mapper/smartwell/SmartwellDataMapper.xml @@ -0,0 +1,190 @@ + + + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + TO_CHAR(${paramTime},'yyyy-MM-dd HH24:mi:ss') + + + + TO_CHAR(${paramTime},'yyyy-MM-dd HH24:mi:ss') + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/casic/CasicApplication.java b/src/main/java/com/casic/CasicApplication.java new file mode 100644 index 0000000..98d3a9c --- /dev/null +++ b/src/main/java/com/casic/CasicApplication.java @@ -0,0 +1,31 @@ +package com.casic; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +/** + * SpringBoot方式启动类 + * + * @author cz + * @Date 2022/06/20 14:28 + */ + +@Slf4j +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@EnableScheduling +@ComponentScan(basePackages= "com.casic.**") +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class CasicApplication { + public static void main(String[] args) { + log.info("CasicApplication is success!"); + SpringApplication.run(CasicApplication.class, args); + } +} diff --git a/src/main/java/com/casic/config/CmsDataSourceConfig.java b/src/main/java/com/casic/config/CmsDataSourceConfig.java new file mode 100644 index 0000000..59253c1 --- /dev/null +++ b/src/main/java/com/casic/config/CmsDataSourceConfig.java @@ -0,0 +1,62 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置1 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.cms", sqlSessionFactoryRef = "cmsSqlSessionFactory") +public class CmsDataSourceConfig { + @Value("${spring.datasource.cms.driver-class-name}") + String driverClass; + @Value("${spring.datasource.cms.url}") + String url; + @Value("${spring.datasource.cms.username}") + String userName; + @Value("${spring.datasource.cms.password}") + String passWord; + + @Primary + @Bean(name = "cmsDataSource") + @ConfigurationProperties("spring.datasource.cms") + public DataSource masterDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "cmsSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/cms/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "cmsSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/CorsConfig.java b/src/main/java/com/casic/config/CorsConfig.java new file mode 100644 index 0000000..7d19680 --- /dev/null +++ b/src/main/java/com/casic/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.casic.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 基础框架 - 跨域请求配置 + */ +@Configuration +public class CorsConfig { + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } + + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } +} \ No newline at end of file diff --git a/src/main/java/com/casic/config/DeviceTypesConfig.java b/src/main/java/com/casic/config/DeviceTypesConfig.java new file mode 100644 index 0000000..9b727c0 --- /dev/null +++ b/src/main/java/com/casic/config/DeviceTypesConfig.java @@ -0,0 +1,14 @@ +package com.casic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration("DeviceTypesConfig") +public class DeviceTypesConfig { + + @Value("${casic.device-types}") + private String deviceTypes; + +} diff --git a/src/main/java/com/casic/config/SmartWellDataSourceConfig.java b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java new file mode 100644 index 0000000..4c75368 --- /dev/null +++ b/src/main/java/com/casic/config/SmartWellDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +/** + * @program: + * @description: 数据库配置2 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.smartwell",sqlSessionFactoryRef = "smartwellSqlSessionFactory") +public class SmartWellDataSourceConfig { + + @Value("${spring.datasource.smartwell.driver-class-name}") + String driverClass; + @Value("${spring.datasource.smartwell.url}") + String url; + @Value("${spring.datasource.smartwell.username}") + String userName; + @Value("${spring.datasource.smartwell.password}") + String passWord; + + @Bean(name = "smartwellDataSource") + @ConfigurationProperties("spring.datasource.smartwell") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "smartwellSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("smartwellDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/smartwell/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "smartwelSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("smartwellSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} + diff --git a/src/main/java/com/casic/config/TiltDataSourceConfig.java b/src/main/java/com/casic/config/TiltDataSourceConfig.java new file mode 100644 index 0000000..3a1e23c --- /dev/null +++ b/src/main/java/com/casic/config/TiltDataSourceConfig.java @@ -0,0 +1,61 @@ +package com.casic.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + + +/** + * @program: + * @description: 数据库配置3 + * @author: cz + * @create: 2022-08-17 09:03 + **/ +@Configuration +@MapperScan(basePackages = "com.casic.dao.spantilt",sqlSessionFactoryRef = "tiltSqlSessionFactory") +public class TiltDataSourceConfig { + + @Value("${spring.datasource.spantilt.driver-class-name}") + String driverClass; + @Value("${spring.datasource.spantilt.url}") + String url; + @Value("${spring.datasource.spantilt.username}") + String userName; + @Value("${spring.datasource.spantilt.password}") + String passWord; + + @Bean(name = "tiltDataSource") + @ConfigurationProperties("spring.datasource.spantilt") + public DataSource masterDataSource(){ + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(driverClass); + dataSource.setUrl(url); + dataSource.setUsername(userName); + dataSource.setPassword(passWord); + return dataSource; + } + + @Bean(name = "tiltSqlSessionFactory") + public SqlSessionFactory sqlSessionFactory(@Qualifier("tiltDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/tilt/*.xml")); + return sessionFactoryBean.getObject(); + } + + @Bean(name = "tiltSqlSessionTemplate") + public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("tiltSqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/casic/controller/MapDataController.java b/src/main/java/com/casic/controller/MapDataController.java new file mode 100644 index 0000000..b897b95 --- /dev/null +++ b/src/main/java/com/casic/controller/MapDataController.java @@ -0,0 +1,47 @@ +package com.casic.controller; + +import com.casic.service.MapDataService; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/overview") +public class MapDataController { + + private final MapDataService mapDataService; + + public MapDataController(MapDataService mapDataService) { + this.mapDataService = mapDataService; + } + + /** + * 获取列表 + */ + @RequestMapping(value = "/wellList") + public Object getWellList(@RequestParam(required = false) String keywords, + @RequestParam(required = false) String wellType, + @RequestParam(required = false) String deptid, + @RequestParam(required = false) String isAlarm) { + + return mapDataService.getWellList(keywords,wellType,deptid,isAlarm); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/alarmNow") + public Object alarmNow() { + return mapDataService.getNowAlarmRecords(); + } + + /** + * 获取当前全部告警列表 + */ + @RequestMapping(value = "/wellInfo") + public Object getWellInfo(@RequestParam(value = "devcode", required = true) String devcode, + @RequestParam(value = "deviceType", required = true) String deviceType) { + return mapDataService.getWellInfo(devcode,deviceType); + } +} diff --git a/src/main/java/com/casic/controller/ScreenDataController.java b/src/main/java/com/casic/controller/ScreenDataController.java new file mode 100644 index 0000000..04f8d97 --- /dev/null +++ b/src/main/java/com/casic/controller/ScreenDataController.java @@ -0,0 +1,210 @@ +package com.casic.controller; + +import com.casic.service.ScreenDataService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/whale/eye") +public class ScreenDataController { + private final ScreenDataService screenDataService; + + public ScreenDataController(ScreenDataService screenDataService) { + this.screenDataService = screenDataService; + } + + /** + * 动态显示已安装设备的类型和个数 + */ + @RequestMapping("/installed-device") + public Object getInstalledDevice(String beginTime, String endTime) { + return screenDataService.getInstalledDevice(beginTime, endTime); + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/line-length") + public Object getLineLength(String beginTime, String endTime) { +// return screenDataService.getLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + " \"deptName\":\"圣井燃气\",\n" + + " \"totalLength\":440\n" + + " },\n" + + " {\n" + + " \"deptName\":\"华气燃气\",\n" + + " \"totalLength\":810\n" + + " },\n" + + " {\n" + + " \"typeName\":\"中燃燃气\",\n" + + " \"totalLength\":500\n" + + " },\n" + + " {\n" + + " \"typeName\":\"正和燃气\",\n" + + " \"totalLength\":520\n" + + " },\n" + + " {\n" + + " \"typeName\":\"华罚燃气\",\n" + + " \"totalLength\":630\n" + + " }\n" + + " ]"; + } + + /** + * 统计汇总各管线权属单位下的燃气管线总长度 + */ + @RequestMapping("/alarm-rate") + public Object getKindsAlarmRate(String beginTime, String endTime) { + return screenDataService.getKindsAlarmRate(beginTime, endTime); + } + + /** + * 分类汇总燃气管线监管人员的类型和数量 + */ + @RequestMapping("/staff") + public Object getObvserStaff(String beginTime, String endTime) { +// return screenDataService.getObvserStaff(beginTime, endTime); + return "{\n" + + " \t\"总人数\":2022,\n" + + "\t\"staffDataList\":[\n" + + " {\n" + + "\t\t\"岗位名称\":\"管理人员\",\n" + + "\t\t\"总计\":72\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"运维人员\",\n" + + "\t\t\"总计\":874\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"施工人员\",\n" + + "\t\t\"总计\":456\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"统计人员\",\n" + + "\t\t\"总计\":745\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"技术人员\",\n" + + "\t\t\"总计\":455\n" + + " },\n" + + " {\n" + + "\t\t\"岗位名称\":\"监管人员\",\n" + + "\t\t\"总计\":644\n" + + " }]\n" + + " }"; + } + + /** + * 以道路的维度来统计汇总燃气管线的长度和权属单位 + */ + @RequestMapping("/road-line-length") + public Object getRoadLineLength(String beginTime, String endTime) { +// return screenDataService.getRoadLineLength(beginTime, endTime); + return "[\n" + + " {\n" + + "\t\t\"所属道路\":\"双山西街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"圣井燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"世纪大道\",\n" + + "\t\t\"管线长度/km\":54,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"桃水大街\",\n" + + "\t\t\"管线长度/km\":32,\n" + + "\t\t\"权属单位\":\"中燃燃气\"\n" + + " },\n" + + " {\n" + + "\t\t\"所属道路\":\"鲁态大街\",\n" + + "\t\t\"管线长度/km\":41,\n" + + "\t\t\"权属单位\":\"正和燃气\"\n" + + " }\n" + + "]"; + } + + /** + * 以道路的维度来统计燃气管线监控中的报警情况 + */ + @RequestMapping("/road-alarm") + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByRoad(beginTime, endTime); + } + +// /** +// * 燃气设备列表,包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/list") +// public Object getDeviceList(String beginTime, String endTime) { +// return screenDataService.getDeviceList(beginTime,endTime); +// } +// +// /** +// * 包括设备基本信息、燃气数据值、告警情况 +// */ +// @RequestMapping("/well/Info") +// public Object getDeviceInfo(String wellCode,String deviceType) { +// return screenDataService.getDeviceInfo(wellCode,deviceType); +// } + + /** + * 管网健康指数 + * 场站健康指数 + */ + @RequestMapping("/health-indicator") + public Object getDeviceIndicator(String beginTime, String endTime) { + return screenDataService.getHealthIndicator(beginTime, endTime); + } + + @RequestMapping("/dept-indicator") + public Object getDeptIndicator(String beginTime, String endTime) { + return screenDataService.getDeptIndicator(beginTime, endTime); + } + + /** + * 显示云台的报警信息 + */ + @RequestMapping("/station-alarm") + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + return screenDataService.getAlarmRecordsByStation(beginTime, endTime); + } + + /** + * 道路管网健康指标:从道路的维度来判断,每条道路燃气管线的健康指数,(按照设备的总数和设备的报警数来计算) + */ + @RequestMapping("/road-indicator") + public Object getRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + return screenDataService.getHealthIndicatorByRoad( isSort, limitNum,beginTime, endTime); + } + + @RequestMapping("/time-span") + public Object getDeptTimeSpan(String beginTime, String endTime) { + return screenDataService.getDeptTimeSpan(beginTime, endTime); + } + + /** + * 道路巡检运维情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/inspect-road") + public Object getInspectRoad(String beginTime, String endTime) { + return screenDataService.getInspectRoad(beginTime, endTime); + } + + /** + * 运维完成情况 + * + * @param beginTime + * @param endTime + * @return + */ + @RequestMapping("/operational-status") + public Object getOperationalStatus(String beginTime, String endTime) { + return screenDataService.getOperationalStatus(beginTime, endTime); + } +} diff --git a/src/main/java/com/casic/dao/cms/CmsDataMapper.java b/src/main/java/com/casic/dao/cms/CmsDataMapper.java new file mode 100644 index 0000000..e57975e --- /dev/null +++ b/src/main/java/com/casic/dao/cms/CmsDataMapper.java @@ -0,0 +1,23 @@ +package com.casic.dao.cms; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface CmsDataMapper { + + Integer countElectronicDevice(); + + List> countElectronicTask(); + + Integer getTotalWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getCompleteWorkOrder(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer getTotalEvent(@Param("beginTime") String beginTime, @Param("endTime") String endTime); +} diff --git a/src/main/java/com/casic/dao/smartwell/MapDataMapper.java b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java new file mode 100644 index 0000000..8e56978 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/MapDataMapper.java @@ -0,0 +1,25 @@ +package com.casic.dao.smartwell; + +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface MapDataMapper { + + List getWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNotAlarmWellList(@Param("keywords") String keywords, @Param("wellType") String deviceType, @Param("deptid") String deptid); + + List getNowAlarmRecords(); + + String getDictNameByCode(@Param("wellType") String wellType); + + Map getDeviceStatus(@Param("devcode") String devcode, @Param("tableName") String tableName, @Param("dataField") String dataField); +} diff --git a/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java new file mode 100644 index 0000000..0294b14 --- /dev/null +++ b/src/main/java/com/casic/dao/smartwell/SmartwellDataMapper.java @@ -0,0 +1,43 @@ +package com.casic.dao.smartwell; + + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SmartwellDataMapper { + + List> countDeviceByType(); + + List> getTypeName(); + + List> countAlarmType(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countAlarmByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getDeviceListByRoad(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countDeviceNumber(); + + Integer countAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> countDeviceNumberByDept(); + + List> countAlarmDeviceByDept(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + Integer countRoadNumber(); + + List> countAlarmRoad(@Param("isSort") String isSort,@Param("isSort")String limitNum,@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getNormalDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDevice(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + List> getAlarmDeviceList(); + + List> getDeptNameList(); + +} diff --git a/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java new file mode 100644 index 0000000..e6ba279 --- /dev/null +++ b/src/main/java/com/casic/dao/spantilt/TiltDataMapper.java @@ -0,0 +1,32 @@ +package com.casic.dao.spantilt; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface TiltDataMapper { + /** + * 已安装设备 + * + * @return + */ + Integer countColudDevice(); + + /** + * 警告 + * + * @return + */ + Integer countColudAlarm(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + + /** + * 云台报警信息 + * + * @return + */ + List> countColudAlarmRecords(@Param("beginTime") String beginTime,@Param("endTime") String endTime); + +} diff --git a/src/main/java/com/casic/model/AlarmNowView.java b/src/main/java/com/casic/model/AlarmNowView.java new file mode 100644 index 0000000..6eebafc --- /dev/null +++ b/src/main/java/com/casic/model/AlarmNowView.java @@ -0,0 +1,108 @@ +package com.casic.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + *

+ * + *

+ * + * @author casic123 + * @since 2019-05-17 + */ +@Data +public class AlarmNowView { + + private static final long serialVersionUID = 1L; + + /** + * 报警记录ID + */ + private Long alarmId; + + /** + * 闸井ID + */ + private Long wellId; + + /** + * 设备ID + */ + private Long deviceId; + + /** + * 设备编号 + */ + private String devcode; + + /** + * 闸井编号 + */ + private String wellCode; + + /** + * 告警类型 + */ + private String alarmType; + + /** + * 报警值 + */ + private String alarmValue; + + /** + * 告警内容 + */ + private String alarmContent; + /** + * 告警时间 + */ + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date alarmTime; + + /** + * 闸井位置 + */ + private String position; + + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + private String latBaidu; + /** + * 百度经度 + */ + private String lngBaidu; + /** + * 高德经度 + */ + private String lngGaode; + /** + * 高德纬度 + */ + private String latGaode; + + /** + * 部门编号 + */ + private String deptid; + + /** + * 井类型 + */ + private String wellType; + + private String wellTypeName; + +} diff --git a/src/main/java/com/casic/model/BusWellInfo.java b/src/main/java/com/casic/model/BusWellInfo.java new file mode 100644 index 0000000..f4b8eba --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfo.java @@ -0,0 +1,192 @@ +package com.casic.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import java.util.Date; + +/** + *

+ * 闸井信息表 + *

+ * + * @author lwh + * @since 2019-05-13 + */ +@TableName("bus_well_info") +@Data +public class BusWellInfo extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 井盖编号 + */ + @TableField("WELL_CODE") + private String wellCode; + /** + * 井盖名称 + */ + @TableField("WELL_NAME") + private String wellName; + /** + * 井深 + */ + //@NotEmpty(message="井深不能为空") + @TableField("DEEP") + private Float deep; + /** + * 地区 + */ + @TableField(exist = false) + private String qu; + /** + * 区域 + */ + @TableField("AREA") + private String area; + + /** + * 区域 + */ + private String road; + /** + * 第三方坐标系X + */ + private String coordinateX; + /** + * 第三方坐标Y + */ + private String coordinateY; + /** + * 百度纬度 + */ + @TableField("LAT_BAIDU") + private String latBaidu; + /** + * 百度经度 + */ + @TableField("LNG_BAIDU") + private String lngBaidu; + /** + * 高德经度 + */ + @TableField("LNG_GAODE") + private String lngGaode; + /** + * 高德纬度 + */ + @TableField("LAT_GAODE") + private String latGaode; + + + /** + * 位置 + */ + private String position; + /** + * 部门编号 + */ + private Long deptid; + /** + * 路标图片路径集合 + */ + @TableField("PHOTOS") + private String photos; + /** + * 备注 + */ + @TableField("NOTES") + private String notes; + /** + * 井类型 + */ + private String wellType; + + /** + * 井类型名称 + */ + @TableField(exist = false) + private String wellTypeName; +// /** +// * 责任人 +// */ +// @TableField("STAFF") +// private String staff; +// /** +// * 电话 +// */ +// @TableField("TEL") +// private String tel; + /** + * 时间戳 + */ + @TableField("TS") + private Date ts; + /** + * 是否有效 + */ + private String valid; + /** + * 布防状态 + */ + @TableField("BFZT") + private String bfzt; + + /** + * 权属单位名称 + */ + @TableField(exist = false) + private String deptName; + + /** + * 维护单位/小组id + */ + private Long responsibleDept; + + /** + * 井标签备用1 + */ + @TableField("WELL_FLAG_1") + private String wellFlag1; + + /** + * 井标签备用2 + */ + @TableField("WELL_FLAG_2") + private String wellFlag2; + + /** + * 井标签备用3 + */ + @TableField("WELL_FLAG_3") + private String wellFlag3; + + /** + * 维护单位/小组名称 + */ + @TableField(exist = false) + private String responsibleDeptName; + + /** + * 布防状态名称 + */ + @TableField(exist = false) + private String bfztName; + + /** + * 闸井设备总数 + */ + @TableField(exist = false) + private Integer deviceCount; + + +} diff --git a/src/main/java/com/casic/model/BusWellInfoDto.java b/src/main/java/com/casic/model/BusWellInfoDto.java new file mode 100644 index 0000000..48610f2 --- /dev/null +++ b/src/main/java/com/casic/model/BusWellInfoDto.java @@ -0,0 +1,276 @@ +package com.casic.model; + + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class BusWellInfoDto { + private Long id; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + private String deviceType; + private String deptid; + private String deptName; + private Float deep; + private String position; + private String coordinateX; + private String coordinateY; + private String lngBaidu; + private String latBaidu; + private String lngGaode; + private String latGaode; + private String photos; + private String notes; + private String bfzt; + private String bfztName; + private String area; + private String staff; + private String tel; + private String valid; + private String ts; + private List watchData; + + Map map = new HashMap(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + map.put("id", id); + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + map.put("wellCode", wellCode); + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + map.put("wellName", wellName); + } + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + map.put("deviceType", deviceType); + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + map.put("wellType", wellType); + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + map.put("wellTypeName", wellTypeName); + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + map.put("deptid", deptid); + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + map.put("deptName", deptName); + } + + public Float getDeep() { + return deep; + } + + public void setDeep(Float deep) { + this.deep = deep; + map.put("deep", deep); + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + map.put("position", position); + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + map.put("coordinateX", coordinateX); + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + map.put("coordinateY", coordinateY); + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + map.put("lngBaidu", lngBaidu); + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + map.put("latBaidu", latBaidu); + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + map.put("lngGaode", lngGaode); + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + map.put("latGaode", latGaode); + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + map.put("photos", photos); + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + map.put("notes", notes); + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + map.put("bfzt", bfzt); + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + map.put("bfztName", bfztName); + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + map.put("area", area); + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + map.put("staff", staff); + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + map.put("tel", tel); + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + map.put("valid", valid); + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + map.put("ts", ts); + } + + public List getWatchData() { + return watchData; + } + + public void setWatchData(List watchData) { + this.watchData = watchData; + map.put("watchData", watchData); + } + + public Map toMap() { + return map; + } +} diff --git a/src/main/java/com/casic/model/ResponseData.java b/src/main/java/com/casic/model/ResponseData.java new file mode 100644 index 0000000..356775a --- /dev/null +++ b/src/main/java/com/casic/model/ResponseData.java @@ -0,0 +1,19 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author cz + * @date 2022-8-12 + */ +@Data +public class ResponseData { + public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功"; + public static final String DEFAULT_ERROR_MESSAGE = "网络异常"; + public static final Integer DEFAULT_SUCCESS_CODE = 200; + public static final Integer DEFAULT_ERROR_CODE = 500; + private Boolean success; + private Integer code; + private String message; + private Object data; +} \ No newline at end of file diff --git a/src/main/java/com/casic/model/WatchDataDto.java b/src/main/java/com/casic/model/WatchDataDto.java new file mode 100644 index 0000000..d50cfb5 --- /dev/null +++ b/src/main/java/com/casic/model/WatchDataDto.java @@ -0,0 +1,32 @@ +package com.casic.model; + +import lombok.Data; + +/** + * @author lenovo + */ +@Data +public class WatchDataDto implements Cloneable{ + + private Long deviceId; + private String devcode; + private String installDate; + private String onlineState; + private String onlineStateName; + private String watchType; + private String type; // 地图总览时使用 + private String data = ""; + private String value = ""; // 地图总览时使用 + private String logtime = "";//数据更新时间(设备上报时间) + + @Override + public Object clone() { + try{ + return super.clone(); + }catch(CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/casic/service/MapDataService.java b/src/main/java/com/casic/service/MapDataService.java new file mode 100644 index 0000000..5f77810 --- /dev/null +++ b/src/main/java/com/casic/service/MapDataService.java @@ -0,0 +1,12 @@ +package com.casic.service; + + +public interface MapDataService { + + Object getWellList(String keywords, String wellType, String deptid, String isAlarm); + + Object getNowAlarmRecords(); + + Object getWellInfo(String devcode,String deviceType); + +} diff --git a/src/main/java/com/casic/service/ScreenDataService.java b/src/main/java/com/casic/service/ScreenDataService.java new file mode 100644 index 0000000..b4dd026 --- /dev/null +++ b/src/main/java/com/casic/service/ScreenDataService.java @@ -0,0 +1,27 @@ +package com.casic.service; + +public interface ScreenDataService { + Object getInstalledDevice(String beginTime, String endTime); + + Object getKindsAlarmRate(String beginTime, String endTime); + + Object getAlarmRecordsByStation(String beginTime, String endTime); + + Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime); + + Object getDeptTimeSpan(String beginTime, String endTime); + + Object getHealthIndicator(String beginTime, String endTime); + + Object getDeptIndicator(String beginTime, String endTime); + + Object getDeviceList(String beginTime, String endTime); + + Object getOperationalStatus(String beginTime, String endTime); + + Object getAlarmRecordsByRoad(String beginTime, String endTime); + + Object getInspectRoad(String beginTime, String endTime); + + +} diff --git a/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java new file mode 100644 index 0000000..661018b --- /dev/null +++ b/src/main/java/com/casic/service/impl/DeptTimeSpanBuilder.java @@ -0,0 +1,88 @@ +package com.casic.service.impl; + + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class DeptTimeSpanBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00"); + + public DeptTimeSpanBuilder(SmartwellDataMapper smartwellDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + } + + public List> deptTimeSpanProvider(String beginTime, String endTime) { + Map> normalDeviceDeptMap = getNormalDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = getAlarmDevice(beginTime, endTime); + Map> currentDeviceTimeMap = MergeDeviceSpan(normalDeviceDeptMap, alarmDeviceDeptMap); + List> deptTimeSpanMap = calculateDeptTime(currentDeviceTimeMap); + return deptTimeSpanMap; + } + + private Map> getNormalDevice(String beginTime, String endTime) { + List> normalDeviceList = smartwellDataMapper.getNormalDevice(beginTime, endTime); + Map> normalDeviceDeptMap = normalDeviceList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return normalDeviceDeptMap; + } + + private Map> getAlarmDevice(String beginTime, String endTime) { + List> alarmDeviceDeptList = smartwellDataMapper.getAlarmDevice(beginTime, endTime); + Map> alarmDeviceDeptMap = alarmDeviceDeptList.stream() + .collect(Collectors.groupingBy(a -> String.valueOf(a.get("deptid")), + Collectors.toMap(e -> String.valueOf(e.get("devcode")), e -> String.valueOf(e.get("timeSpan"))) + )); + return alarmDeviceDeptMap; + } + + private Map> MergeDeviceSpan(Map> normalDeviceDeptMap, + Map> alarmDeviceDeptMap) { + for (Map.Entry> normalMap : normalDeviceDeptMap.entrySet()) { + String mapKey = normalMap.getKey(); + Map normalmap = normalMap.getValue(); + if (alarmDeviceDeptMap.containsKey(mapKey)) { + Map alarmMap = alarmDeviceDeptMap.get(mapKey); + for (Map.Entry alarmMapItem : alarmMap.entrySet()) { + String deviceCode = alarmMapItem.getKey(); + normalmap.put(deviceCode, alarmMapItem.getValue()); + } + } + } + return normalDeviceDeptMap; + } + + private List> calculateDeptTime(Map> currentDeviceTimeMap) { + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptTimeSpanList = new ArrayList<>(); + for (Map.Entry> currentDeviceMap : currentDeviceTimeMap.entrySet()) { + String deptid = currentDeviceMap.getKey(); + Map currentDeviceItemMap = currentDeviceMap.getValue(); + Double timeSpan = 0.00; + for (Map.Entry timeMapItem : currentDeviceItemMap.entrySet()) { + timeSpan += StringUtils.isEmpty(timeMapItem.getValue()) || timeMapItem.getValue() == "null" ? 0 : Double.valueOf(timeMapItem.getValue()); + } + Map deptTimeSpanMap = new HashMap<>(); + deptTimeSpanMap.put("deptName", deptNameMap.get(deptid)); + deptTimeSpanMap.put("count", df.format(timeSpan)); + deptTimeSpanList.add(deptTimeSpanMap); + } + return deptTimeSpanList; + } + +} diff --git a/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java new file mode 100644 index 0000000..ffd0f1b --- /dev/null +++ b/src/main/java/com/casic/service/impl/HealthIndicatorsBuilder.java @@ -0,0 +1,96 @@ +package com.casic.service.impl; + +import com.alibaba.druid.util.StringUtils; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class HealthIndicatorsBuilder { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + private final DecimalFormat df = new DecimalFormat("0.00%"); + + public HealthIndicatorsBuilder(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + this.tiltDataMapper = tiltDataMapper; + } + + + public List> healthIndicatorProvider(String beginTime, String endTime) { + List> healthIndictorList = new ArrayList<>(); + healthIndictorList.add(smartwellHealthIndicator(beginTime, endTime)); + healthIndictorList.add(tiltHealthIndicator(beginTime, endTime)); + return healthIndictorList; + } + + + public List> deptIndicatorProvider(String beginTime, String endTime) { + List> deviceDeptNumberList = smartwellDataMapper.countDeviceNumberByDept(); + List> alarmDeptList = smartwellDataMapper.countAlarmDeviceByDept(beginTime, endTime); + List> deptIndicatorList = MergeDeviceCalculateIndicator(deviceDeptNumberList, alarmDeptList); + return deptIndicatorList; + } + + public Map healthRoadIndicatorProvider(String isSort,String limitNum,String beginTime, String endTime) { + return smartwellHealthRoadIndicator(isSort,limitNum,beginTime, endTime); + } + + private Map smartwellHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = smartwellDataMapper.countDeviceNumber(); + Integer alarmDevice = smartwellDataMapper.countAlarmDevice(beginTime, endTime); + smartwellHealth.put("typeName", "管网健康指数"); + smartwellHealth.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map tiltHealthIndicator(String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer deviceNumber = tiltDataMapper.countColudDevice(); + Integer alarmDevice = tiltDataMapper.countColudAlarm(beginTime, endTime); + smartwellHealth.put("typeName", "场站健康指数"); + smartwellHealth.put("count", df.format(Double.valueOf(deviceNumber - alarmDevice) / deviceNumber)); + return smartwellHealth; + } + + private Map smartwellHealthRoadIndicator(String isSort,String limitNum,String beginTime, String endTime) { + Map smartwellHealth = new HashMap<>(); + Integer roadNumber = smartwellDataMapper.countRoadNumber(); + Integer alarmRoad = smartwellDataMapper.countAlarmRoad(isSort,limitNum,beginTime, endTime); + smartwellHealth.put("typeName", "道路健康指数"); + smartwellHealth.put("count", df.format((Double.valueOf(roadNumber - alarmRoad)) / roadNumber)); + return smartwellHealth; + } + + private List> MergeDeviceCalculateIndicator(List> deviceDeptNumberList, List> alarmDeptList) { + Map alarmDeptMap = alarmDeptList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deptid")), e -> String.valueOf(e.get("counts"))) + ); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + List> deptIndicatorList = new ArrayList<>(); + deviceDeptNumberList.forEach( + deptNameNumberMap -> { + Map deptIndicatorMap = new HashMap<>(); + int deviceNumber = Integer.valueOf(String.valueOf(deptNameNumberMap.get("counts"))); + String alarmDeviceNumber = alarmDeptMap.get(deptNameNumberMap.get("deptid")); + int alarmDevice = StringUtils.isEmpty(alarmDeviceNumber) ? 0 : Integer.valueOf(String.valueOf(alarmDeviceNumber)); + deptIndicatorMap.put("typeName", deptNameMap.get(String.valueOf(deptNameNumberMap.get("deptid"))).toString()); + deptIndicatorMap.put("count", df.format((deviceNumber - alarmDevice) / deviceNumber)); + deptIndicatorList.add(deptIndicatorMap); + } + ); + return deptIndicatorList; + } +} diff --git a/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java new file mode 100644 index 0000000..8b1209d --- /dev/null +++ b/src/main/java/com/casic/service/impl/InstalledDeviceBuilder.java @@ -0,0 +1,71 @@ +package com.casic.service.impl; + +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 已安装的设备接口,来自于三个平台电子标识器、管网、云台 + */ +@Service +public class InstalledDeviceBuilder { + + private final DeviceTypesConfig deviceTypesConfig; + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + public InstalledDeviceBuilder(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, + TiltDataMapper tiltDataMapper, DeviceTypesConfig deviceTypesConfig) { + this.smartwellDataMapper = smartwellDataMapper; + this.cmsDataMapper = cmsDataMapper; + this.tiltDataMapper = tiltDataMapper; + this.deviceTypesConfig = deviceTypesConfig; + } + + public List> InstalledDeviceManger() { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + List> installedDeviceList = new ArrayList<>(); + cmsInstalledDevice(installedDeviceList); + tiltInstalledDevice(installedDeviceList); + smartwellInstalledDevice(installedDeviceList, deviceTypeList); + return installedDeviceList; + } + + private void smartwellInstalledDevice(List> installedDeviceList, String[] deviceTypeList) { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("typeName", typeNameMap.get(deviceType)); + installedDeviceMap.put("count", deviceCountMap.containsKey(deviceType) ? deviceCountMap.get(deviceType) : "0"); + installedDeviceList.add(installedDeviceMap); + } + } + + private void cmsInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", cmsDataMapper.countElectronicDevice()); + installedDeviceMap.put("typeName", "电子标识器"); + installedDeviceList.add(installedDeviceMap); + } + + private void tiltInstalledDevice(List> installedDeviceList) { + Map installedDeviceMap = new HashMap<>(); + installedDeviceMap.put("count", tiltDataMapper.countColudDevice()); + installedDeviceMap.put("typeName", "云台"); + installedDeviceList.add(installedDeviceMap); + } +} diff --git a/src/main/java/com/casic/service/impl/KindsAlarmBulider.java b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java new file mode 100644 index 0000000..82df147 --- /dev/null +++ b/src/main/java/com/casic/service/impl/KindsAlarmBulider.java @@ -0,0 +1,75 @@ +package com.casic.service.impl; + +import com.casic.config.DeviceTypesConfig; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component +public class KindsAlarmBulider { + + private final SmartwellDataMapper smartwellDataMapper; + private final TiltDataMapper tiltDataMapper; + private final DeviceTypesConfig deviceTypesConfig; + + private final DecimalFormat df = new DecimalFormat("0.00%"); + + public KindsAlarmBulider(SmartwellDataMapper smartwellDataMapper, TiltDataMapper tiltDataMapper,DeviceTypesConfig deviceTypesConfig) { + this.smartwellDataMapper = smartwellDataMapper; + this.tiltDataMapper = tiltDataMapper; + this.deviceTypesConfig=deviceTypesConfig; + } + + public List> alarmTypeManger(String beginTime, String endTime) { + String[] deviceTypeList = deviceTypesConfig.getDeviceTypes().split(","); + Map typeNameMap = smartwellDeviceType(); + List> rateDeviceList = calculateRateSmartwell(beginTime, endTime, typeNameMap,deviceTypeList); + calculateRateTilt(beginTime, endTime, rateDeviceList, typeNameMap); + return rateDeviceList; + } + + private Map smartwellDeviceType() { + List> typeNameList = smartwellDataMapper.getTypeName(); + Map typeNameMap = typeNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("typeName")))); + return typeNameMap; + } + + private List> calculateRateSmartwell(String beginTime, String endTime, Map typeNameMap,String[] deviceTypeList) { + List> rateDeviceList = new ArrayList<>(); + List> alarmCountList = smartwellDataMapper.countAlarmType(beginTime, endTime); + Map alarmCountMap = alarmCountList.stream().collect( + Collectors.toMap( + e -> String.valueOf(e.get("deviceType")), e -> Integer.valueOf(String.valueOf(e.get("count"))) + ) + ); + List> deviceCountList = smartwellDataMapper.countDeviceByType(); + Map deviceCountMap = deviceCountList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("deviceType")), e -> String.valueOf(e.get("count")))); + for (String deviceType : deviceTypeList) { + Map rateDeviceMap = new HashMap<>(); + Integer totalAlarm = deviceCountMap.containsKey(deviceType)?Integer.valueOf(deviceCountMap.get(deviceType)):0; + Integer alarmCount=alarmCountMap.containsKey(deviceType)?Integer.valueOf(alarmCountMap.get(deviceType)):0; + rateDeviceMap.put("rate", totalAlarm==0?"0.00%":df.format(Double.valueOf(alarmCount)/totalAlarm)); + rateDeviceMap.put("typeName", typeNameMap.get(deviceType)); + rateDeviceList.add(rateDeviceMap); + } + return rateDeviceList; + } + + private void calculateRateTilt(String beginTime, String endTime, List> rateDeviceList, Map typeNameMap) { + Integer alarmCount = tiltDataMapper.countColudAlarm(beginTime, endTime); + Integer totalAlarm = tiltDataMapper.countColudDevice(); + Map rateDeviceMap = new HashMap<>(); + rateDeviceMap.put("rate", totalAlarm == 0 ? "0" : df.format(Double.valueOf(alarmCount) / totalAlarm)); + rateDeviceMap.put("typeName", "云台"); + rateDeviceList.add(rateDeviceMap); + } +} diff --git a/src/main/java/com/casic/service/impl/MapDataServiceImpl.java b/src/main/java/com/casic/service/impl/MapDataServiceImpl.java new file mode 100644 index 0000000..c2640ab --- /dev/null +++ b/src/main/java/com/casic/service/impl/MapDataServiceImpl.java @@ -0,0 +1,113 @@ +package com.casic.service.impl; + +import com.casic.dao.smartwell.MapDataMapper; +import com.casic.model.AlarmNowView; +import com.casic.model.BusWellInfoDto; +import com.casic.model.ResponseData; +import com.casic.service.MapDataService; +import com.casic.util.DeviceDataFieldTableEnum; +import com.casic.util.DeviceDataTableEnum; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Slf4j +@Service +public class MapDataServiceImpl implements MapDataService { + + @Autowired + private MapDataMapper mapDataMapper; + + @Override + public Object getNowAlarmRecords() { + ResponseData responseData = new ResponseData(); + try { + List alarmNowViewList = this.mapDataMapper.getNowAlarmRecords(); + for (AlarmNowView alarmNowView : alarmNowViewList) { + alarmNowView.setWellTypeName(mapDataMapper.getDictNameByCode(alarmNowView.getWellType())); + } + responseData.setData(alarmNowViewList); + responseData.setCode(200); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:最新报警记录查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + + @Override + public Object getWellList(String keywords, String wellType, String deptid, String isAlarm) { + + ResponseData responseData = new ResponseData(); + try { + List wellList = new ArrayList<>(); + if (null == isAlarm || isAlarm.equals("") == true) { + // 查询并添加当前部门的闸井 + List myList = mapDataMapper.getWellList(keywords, wellType, deptid); + if (null != myList && myList.isEmpty() == false) { + wellList.addAll(myList); + } + } else if (isAlarm.equals("1")) { + // isAlarm = 1 查询所有报警状态的闸井 + wellList = mapDataMapper.getAlarmWellList(keywords, wellType, deptid); + } else { + // isAlarm = 0 查询所有不是报警状态的闸井 + wellList = mapDataMapper.getNotAlarmWellList(keywords, wellType, deptid); + } + responseData.setData(wellList); + responseData.setCode(200); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:点位记录列表查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + public Object getWellInfo(String devcode,String deviceType){ + ResponseData responseData = new ResponseData(); + try { + DeviceDataTableEnum deviceDataTableEnum = DeviceDataTableEnum.DEVICE_TYPE_TABLE.getTableNameMap().get(Integer.valueOf(deviceType)); + String tableName = deviceDataTableEnum.getTableName(); + List> wellInfoList=new ArrayList<>(); + if(deviceType.equals("10")){ + String [] tableNameList=tableName.split(","); + + for(String tableNames:tableNameList){ + Map wellInfoMap=mapDataMapper.getDeviceStatus(devcode,tableNames, + DeviceDataFieldTableEnum.TABLE_FIELD.getTableFieldMap().get(tableName)); + if(!wellInfoMap.containsKey("dataValue")){ + wellInfoMap.put("dataValue",0.0); + } + wellInfoList.add(wellInfoMap); + } + }else { + Map wellInfoMap=mapDataMapper.getDeviceStatus(devcode,tableName, + DeviceDataFieldTableEnum.TABLE_FIELD.getTableFieldMap().get(tableName)); + if(!wellInfoMap.containsKey("dataValue")){ + wellInfoMap.put("dataValue",0.0); + } + wellInfoList.add(wellInfoMap); + } + responseData.setData(wellInfoList); + responseData.setCode(200); + responseData.setSuccess(true); + responseData.setMessage("查询成功"); + } catch (DataAccessException dex) { + log.error("主题:点位详情查询异常,异常信息:{}", dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + +} diff --git a/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java b/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java new file mode 100644 index 0000000..1946ee3 --- /dev/null +++ b/src/main/java/com/casic/service/impl/OperationalStatusBuilder.java @@ -0,0 +1,60 @@ +package com.casic.service.impl; + +import com.casic.dao.cms.CmsDataMapper; +import org.springframework.stereotype.Component; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +public class OperationalStatusBuilder { + + private final DecimalFormat df = new DecimalFormat("0.00%"); + private final CmsDataMapper cmsDataMapper; + + public OperationalStatusBuilder(CmsDataMapper cmsDataMapper) { + this.cmsDataMapper = cmsDataMapper; + } + + public List> OperationalStatusProvider(String beginTime, String endTime) { + List> operaStatusList = getWorkOrder(beginTime,endTime); + operaStatusList.add(getTask(beginTime,endTime)); + operaStatusList.add(getEvent(beginTime,endTime)); + return operaStatusList; + } + + private Map getTask(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalTask(beginTime,endTime); + Map taskMap = new HashMap<>(); + taskMap.put("type", "运维任务"); + taskMap.put("count", String.valueOf(initTask)); + return taskMap; + } + + private List> getWorkOrder(String beginTime, String endTime) { + List> operaStatusList = new ArrayList<>(); + Integer initTask = cmsDataMapper.getTotalWorkOrder(beginTime,endTime); + Map workPageMap = new HashMap<>(); + workPageMap.put("type", "运维工单"); + workPageMap.put("count", String.valueOf(initTask)); + Integer completeTask = cmsDataMapper.getCompleteWorkOrder(beginTime,endTime); + Map completeMap = new HashMap<>(); + completeMap.put("type", "运维完结"); + completeMap.put("count", df.format(Double.valueOf(completeTask) / initTask)); + operaStatusList.add(completeMap); + operaStatusList.add(workPageMap); + return operaStatusList; + } + + private Map getEvent(String beginTime, String endTime) { + Integer initTask = cmsDataMapper.getTotalEvent(beginTime,endTime); + Map eventMap = new HashMap<>(); + eventMap.put("type", "运维事件"); + eventMap.put("count", String.valueOf(initTask)); + return eventMap; + } + +} diff --git a/src/main/java/com/casic/service/impl/ScreenDataManger.java b/src/main/java/com/casic/service/impl/ScreenDataManger.java new file mode 100644 index 0000000..6a56a43 --- /dev/null +++ b/src/main/java/com/casic/service/impl/ScreenDataManger.java @@ -0,0 +1,170 @@ +package com.casic.service.impl; + +import com.casic.dao.cms.CmsDataMapper; +import com.casic.dao.smartwell.SmartwellDataMapper; +import com.casic.dao.spantilt.TiltDataMapper; +import com.casic.model.ResponseData; +import com.casic.service.ScreenDataService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class ScreenDataManger implements ScreenDataService { + @Autowired + private InstalledDeviceBuilder installedDeviceBuilder; + @Autowired + private KindsAlarmBulider kindsAlarmBulider; + @Autowired + private HealthIndicatorsBuilder healthIndicatorsBuilder; + @Autowired + private DeptTimeSpanBuilder deptTimeSpanBuilder; + @Autowired + private OperationalStatusBuilder operStatusBuilder; + + private final SmartwellDataMapper smartwellDataMapper; + private final CmsDataMapper cmsDataMapper; + private final TiltDataMapper tiltDataMapper; + + public ScreenDataManger(SmartwellDataMapper smartwellDataMapper, CmsDataMapper cmsDataMapper, TiltDataMapper tiltDataMapper) { + this.smartwellDataMapper = smartwellDataMapper; + this.cmsDataMapper = cmsDataMapper; + this.tiltDataMapper = tiltDataMapper; + } + + public Object getInstalledDevice(String beginTime, String endTime) { + List> installedDeviceList = null; + try { + installedDeviceList = installedDeviceBuilder.InstalledDeviceManger(); + } catch (DataAccessException dex) { + log.error("主题:查询已安装设备的类型和个数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return installedDeviceList; + } + + public Object getKindsAlarmRate(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = kindsAlarmBulider.alarmTypeManger(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:统计汇总各管线权属单位下的燃气管线总长度出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + public Object getAlarmRecordsByStation(String beginTime, String endTime) { + List> recordsRoadList = null; + try { + recordsRoadList = tiltDataMapper.countColudAlarmRecords(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:显示云台的报警信息出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return recordsRoadList; + } + + public Object getHealthIndicatorByRoad(String isSort,String limitNum,String beginTime, String endTime) { + Map healthRoadIndtorMap = null; + try { + healthRoadIndtorMap = healthIndicatorsBuilder.healthRoadIndicatorProvider(isSort,limitNum,beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:以道路维度查看健康指数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return healthRoadIndtorMap; + } + + public Object getDeptTimeSpan(String beginTime, String endTime) { + List> deptTimeSpanList = null; + try { + deptTimeSpanList = deptTimeSpanBuilder.deptTimeSpanProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:按权属单位来汇总,各个权属单位下的燃气管线连续正常运行的时长出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return deptTimeSpanList; + } + + public Object getHealthIndicator(String beginTime, String endTime) { + List> healthIndictorList = null; + try { + healthIndictorList = healthIndicatorsBuilder.healthIndicatorProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return healthIndictorList; + } + + public Object getDeptIndicator(String beginTime, String endTime) { + List> healthIndictorList = null; + try { + healthIndictorList = healthIndicatorsBuilder.deptIndicatorProvider(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:权属单位维度健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return healthIndictorList; + } + + public Object getDeviceList(String beginTime, String endTime) { + List> alarmDeviceList = null; + try { + alarmDeviceList = smartwellDataMapper.getAlarmDeviceList(); + List> deptNameList = smartwellDataMapper.getDeptNameList(); + Map deptNameMap = deptNameList.stream().collect( + Collectors.toMap(e -> String.valueOf(e.get("id")), e -> String.valueOf(e.get("name"))) + ); + alarmDeviceList.forEach( + alarmDevice -> { + alarmDevice.put("isAlarm", alarmDevice.containsKey("isAlarm") ? "1" : "0"); + alarmDevice.put("responsibleDept", deptNameMap.get(String.valueOf(alarmDevice.get("responsibleDept")))); + } + ); + } catch (DataAccessException dex) { + log.error("主题:场地、燃气健康指数出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + } + return alarmDeviceList; + } + + public Object getOperationalStatus(String beginTime, String endTime) { + + ResponseData responseData = new ResponseData(); + try { + List> operaStatusList = operStatusBuilder.OperationalStatusProvider(beginTime, endTime); + responseData.setSuccess(true); + responseData.setCode(200); + responseData.setMessage("查询成功"); + responseData.setData(operaStatusList); + } catch (DataAccessException dex) { + log.error("主题:运维情况查询出现数据异常,开始时间{},结束时间{},异常信息{}",beginTime,endTime,dex); + responseData.setCode(500); + responseData.setMessage("查询异常"); + } + return responseData; + } + + + public Object getAlarmRecordsByRoad(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = smartwellDataMapper.countAlarmByRoad(beginTime, endTime); + } catch (DataAccessException dex) { + log.error("主题:以道路的维度统计燃气管线监控中的报警情况出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + public Object getInspectRoad(String beginTime, String endTime) { + List> rateDeviceList = null; + try { + rateDeviceList = cmsDataMapper.countElectronicTask(); + } catch (DataAccessException dex) { + log.error("主题:汇总显示个道路的巡检运维次数出现数据异常,开始时间{},结束时间{},异常信息{}", beginTime, endTime, dex); + } + return rateDeviceList; + } + + +} diff --git a/src/main/java/com/casic/util/DeviceDataFieldTableEnum.java b/src/main/java/com/casic/util/DeviceDataFieldTableEnum.java new file mode 100644 index 0000000..5fd7a56 --- /dev/null +++ b/src/main/java/com/casic/util/DeviceDataFieldTableEnum.java @@ -0,0 +1,37 @@ +package com.casic.util; + +import java.util.HashMap; +import java.util.Map; + +public enum DeviceDataFieldTableEnum { + + TABLE_FIELD(new HashMap() { + { + put("data_dig", "ddata AS dataValue"); + put("data_gas", "strength AS dataValue"); + put("data_gasliquid_gas", "strength AS dataValue"); + put("data_gasliquid_liquid", "liquiddata AS dataValue"); + put("data_gas_dector", "gas_sample_value AS dataValue"); + put("data_harmful_gas", "CONCAT(CO, ', ', CH4, ', ', H2S, ', ', O2) AS dataValue"); + put("data_hydrant", "0 AS dataValue"); + put("data_liquid", "liquiddata AS dataValue"); + put("data_noise", "ddata AS dataValue"); + put("data_temp_hum", "CONCAT(TEMPERATURE, ', ', HUMIDITY) AS dataValue"); + put("data_tube", "strength AS dataValue"); + put("data_wellcover", "descn AS dataValue"); + put("data_temp_press", "press AS dataValue"); + put("data_pantilt", "concentration AS dataValue"); + put("data_wellcover_loca", "0 AS dataValue"); + put("data_wellplus", "0 AS dataValue"); + put("data_h2s", "stength AS dataValue"); + } + }); + public Map tableNameMap; + + DeviceDataFieldTableEnum(Map tableNameMap) { + this.tableNameMap = tableNameMap; + } + public Map getTableFieldMap() { + return tableNameMap; + } +} diff --git a/src/main/java/com/casic/util/DeviceDataTableEnum.java b/src/main/java/com/casic/util/DeviceDataTableEnum.java new file mode 100644 index 0000000..a67ad6d --- /dev/null +++ b/src/main/java/com/casic/util/DeviceDataTableEnum.java @@ -0,0 +1,76 @@ +package com.casic.util; + +import java.util.HashMap; + +/** + * @author cz + * @date 2022-7-15 + * 上传数据总记录数 + */ +public enum DeviceDataTableEnum { + + DATA_DIG("data_dig", "井盖状态监测仪"), + DATA_GAS("data_gas", "液位监测仪"), + DATA_GASLIQUID("data_gasliquid_gas,data_gasliquid_liquid", "有害气体监测仪"), + DATA_GAS_DECTOR("data_gas_dector", "燃气智能监测终端"), + DATA_HARMFUL_GAS("data_harmful_gas", "温湿度监测仪"), + DATA_HYDRANT("data_hydrant", "开挖监测仪"), + DATA_LIQUID("data_liquid", "井盖定位监测仪"), + DATA_NOISE("data_noise", "噪声记录仪"), + DATA_PANTILT("data_pantilt", "温度压力监测仪"), + DATA_TEMP_HUM("data_temp_hum", "燃气智能监测终端(一体化)"), + DATA_TUBE("data_tube", "消防栓防盗水监测仪"), + DATA_WELLCOVER("data_wellcover", "管盯"), + DATA_WELLCOVER_DATA("data_temp_press", "井盖液位一体机"), + DATA_WELLCOVER_LOCA("data_wellcover_loca", "硫化氢检测终端"), + DATA_WELLPLUS("data_wellplus", "激光甲烷云台"), + DATA_H2S("data_h2s", "可燃气体"), + DEVICE_TYPE_TABLE(new HashMap() {{ + put(1, DATA_WELLCOVER); + put(2, DATA_LIQUID); + put(3, DATA_HARMFUL_GAS); + put(4, DATA_GAS); + put(5, DATA_TEMP_HUM); + put(6, DATA_DIG); + put(7, DATA_WELLCOVER_LOCA); + put(8, DATA_NOISE); + put(9, DATA_WELLCOVER_DATA); + put(10, DATA_GASLIQUID); + put(11, DATA_HYDRANT); + put(12, DATA_TUBE); + put(13, DATA_WELLPLUS); + put(14, DATA_H2S); + put(21, DATA_PANTILT); + put(101, DATA_GAS_DECTOR); + } + }); + + String typeName; + String tableName; + + DeviceDataTableEnum(String tableName, String typeName) { + this.typeName = typeName; + this.tableName = tableName; + } + + public String getTypeName() { + return typeName; + } + + public String getTableName() { + return tableName; + } + + + public HashMap tableNameMap; + + DeviceDataTableEnum(HashMap tableNameMap) { + this.tableNameMap = tableNameMap; + } + + public HashMap getTableNameMap() { + return tableNameMap; + } + + +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml new file mode 100644 index 0000000..6d28b27 --- /dev/null +++ b/src/main/resources/application-dev.yml @@ -0,0 +1,43 @@ +server: + port: 11312 +################### spring配置 ################### +spring: + datasource: + smartwell: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://111.198.10.15:11209/smartwell_zq_cs + username: postgres + password: Casic203 + cms: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://111.198.10.15:11209/smartwell_cms + username: postgres + password: Casic203 + spantilt: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://111.198.10.15:11102/casic_pan_tilt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&&useSSL=true + username: root + password: Casic203! + session: + store-type: redis + redis: + host: 111.198.10.15 + port: 11412 + password: ew5T4K3#203lwh + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + # session: + # store-type: redis +#flowable数据源和多数据源配置 +casic: + kaptcha-open: false #是否开启登录时验证码 (true/false) + #kaptcha-open: false #是否开启登录时验证码 (true/false) + db: + init: + enable: false + spring-session-open: false #开启spring session +logging: + level.root: error + level.com.casic: error + file: + path: logs/ + name: missiles.log \ No newline at end of file diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml new file mode 100644 index 0000000..4fee268 --- /dev/null +++ b/src/main/resources/application-prod.yml @@ -0,0 +1,43 @@ +server: + port: 11312 +################### spring配置 ################### +spring: + datasource: + smartwell: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://111.198.10.15:11209/smartwell + username: postgres + password: Casic203 + cms: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://111.198.10.15:11209/smartwell_cms + username: postgres + password: Casic203 + span_tilt: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://111.198.10.15:11102/casic_span_tilt?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&&useSSL=true + username: root + password: Casic203! + session: + store-type: redis + redis: + host: 111.198.10.15 + port: 11412 + password: ew5T4K3#203lwh + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + # session: + # store-type: redis +#flowable数据源和多数据源配置 +casic: + kaptcha-open: false #是否开启登录时验证码 (true/false) + #kaptcha-open: false #是否开启登录时验证码 (true/false) + db: + init: + enable: false + spring-session-open: false #开启spring session +logging: + level.root: error + level.com.casic: error + file: + path: logs/ + name: missiles.log \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..971553a --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,42 @@ +########################################################## +################## 所有profile共有的配置 ################# +########################################################## +spring: + profiles: + active: dev + servlet: + multipart: + max-file-size: 50MB + max-request-size: 80MB +mybatis-plus: + global-config: + enable-sql-runner: true + configuration: + # 配置结果集属性为空时 是否映射返回结果 + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 + call-setters-on-nulls: true + mapper-locations: classpath:mapper/*.xml +mybatis: + mapper-locations: classpath:mapper/*.xml + configuration: + # 配置结果集属性为空时 是否映射返回结果 + call-setters-on-nulls: true + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 +#mybatis-plus: +# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector +################### mybatis-plus配置 ################### +################### casic配置 ################### +flowable: + checkProcessDefinitions: false #不校验process文件 +casic: + swagger-open: false #是否开启swagger (true/false) + kaptcha-open: false #是否开启登录时验证码 (true/false) + muti-datasource-open: false #是否开启多数据源(true/false) + spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) + session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 + session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 + extUrl: sys + device-types: 1,4,101,12 + config: + export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ + config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ \ No newline at end of file diff --git a/src/main/resources/mapper/cms/CmsDataMapper.xml b/src/main/resources/mapper/cms/CmsDataMapper.xml new file mode 100644 index 0000000..0228745 --- /dev/null +++ b/src/main/resources/mapper/cms/CmsDataMapper.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/smartwell/MapDataMapper.xml b/src/main/resources/mapper/smartwell/MapDataMapper.xml new file mode 100644 index 0000000..7da7bd4 --- /dev/null +++ b/src/main/resources/mapper/smartwell/MapDataMapper.xml @@ -0,0 +1,108 @@ + + + + + + + w.ID AS id, WELL_CODE AS "wellCode", WELL_NAME AS "wellName", DEEP AS deep, + COORDINATE_X AS "coordinateX", COORDINATE_Y AS "coordinateY", LAT_BAIDU AS "latBaidu", + LNG_BAIDU AS "lngBaidu", LNG_GAODE AS "lngGaode", LAT_GAODE AS "latGaode", AREA AS area, + POSITION AS position, DEPTID AS deptid, PHOTOS AS photos, NOTES AS notes, + WELL_TYPE AS "wellType", STAFF AS staff, TEL AS tel, w.TS AS ts, w.VALID AS valid, + BFZT AS bfzt,RESPONSIBLE_DEPT AS "responsibleDept",ROAD AS road,bd.device_type AS "deviceType" + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/smartwell/SmartwellDataMapper.xml b/src/main/resources/mapper/smartwell/SmartwellDataMapper.xml new file mode 100644 index 0000000..085ed49 --- /dev/null +++ b/src/main/resources/mapper/smartwell/SmartwellDataMapper.xml @@ -0,0 +1,190 @@ + + + + + + DATE_FORMAT(${paramTime},'%Y-%m-%d %H:%i:%s') + + + + TO_CHAR(${paramTime},'yyyy-MM-dd HH24:mi:ss') + + + + TO_CHAR(${paramTime},'yyyy-MM-dd HH24:mi:ss') + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/tilt/TiltDataMapper.xml b/src/main/resources/mapper/tilt/TiltDataMapper.xml new file mode 100644 index 0000000..33a9b05 --- /dev/null +++ b/src/main/resources/mapper/tilt/TiltDataMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + +