From e0ef31b5727c28af2813ff184647ed366cd2cca2 Mon Sep 17 00:00:00 2001
From: zhanghua <314079846@qq.com>
Date: 星期二, 28 二月 2023 17:45:42 +0800
Subject: [PATCH] 油烟接口

---
 ycl-smoke/src/main/resources/logback-spring.xml                                     |  128 ++
 ycl-smoke/src/main/resources/application.yml                                        |   92 +
 ycl-smoke/src/main/java/com/ycl/smoke/config/feign/FeignGlobalConfiguration.java    |   20 
 ycl-smoke/src/main/java/com/ycl/smoke/remote/service/ISmokeDetectionService.java    |   57 
 ycl-smoke/src/main/java/com/ycl/smoke/config/feign/FeignConfiguration.java          |   22 
 ycl-smoke/src/main/java/com/ycl/smoke/config/CommonSecurityConfig.java              |   62 +
 ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsAlarmRecord.java                    |  139 ++
 ycl-smoke/src/main/resources/mapper/smoke/OdsInTimeMapper.xml                       |   46 
 ycl-smoke/src/main/resources/mapper/smoke/OdsLocaleMapper.xml                       |   75 +
 ycl-smoke/src/main/java/com/ycl/smoke/config/RestTemplateConfig.java                |   14 
 ycl-smoke/src/main/resources/mapper/smoke/OdsDetectorDailyMapper.xml                |   49 
 ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsInTimeServiceImpl.java        |   20 
 ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/TenMinParamDto.java                |   22 
 ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsAlarmMsgService.java              |   16 
 ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/AlarmMsgParamDto.java              |   29 
 ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsDetectorDailyServiceImpl.java |   20 
 ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsLocaleService.java                |   16 
 ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsTenMinDataServiceImpl.java    |   20 
 ycl-smoke/src/main/java/com/ycl/smoke/config/YclSecurityConfig.java                 |   37 
 ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsDetectorDailyService.java         |   16 
 ycl-smoke/src/main/resources/mapper/smoke/OdsAlarmRecordMapper.xml                  |   33 
 ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsTenMinDataMapper.java               |   16 
 ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsCustomerService.java              |   16 
 ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsTenMinData.java                     |  107 +
 ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsDetectorDailyMapper.java            |   16 
 ycl-smoke/src/main/resources/mapper/smoke/OdsAlarmMsgMapper.xml                     |   20 
 ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsCustomer.java                       |  153 ++
 ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsDetectorDaily.java                  |  276 ++++
 ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/AlarmMsgResponseDto.java           |   23 
 ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsInTimeMapper.java                   |   16 
 ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsAlarmMsgMapper.java                 |   16 
 ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/AlarmMsgDataVo.java                |   25 
 ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsInTimeService.java                |   16 
 ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsCustomerServiceImpl.java      |   20 
 ycl-smoke/pom.xml                                                                   |   51 
 ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/AlarmMsgParamDateDto.java          |   34 
 ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsLocaleMapper.java                   |   16 
 ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsAlarmRecordMapper.java              |   16 
 ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsCurAlarm.java                       |  236 +++
 pom.xml                                                                             |    6 
 ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsCurAlarmMapper.java                 |   16 
 ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsCurAlarmService.java              |   16 
 ycl-smoke/src/main/resources/application-pro.yml                                    |   71 +
 ycl-smoke/src/main/java/com/ycl/smoke/SmokeApplication.java                         |   49 
 ycl-smoke/src/main/resources/application-dev.yml                                    |   73 +
 ycl-smoke/src/main/resources/mapper/smoke/OdsCurAlarmMapper.xml                     |   49 
 ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsInTime.java                         |  222 +++
 ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsLocale.java                         |  374 ++++++
 ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsAlarmRecordServiceImpl.java   |   20 
 ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsAlarmMsg.java                       |   74 +
 ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/DetectorDailyParamDto.java         |   35 
 ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsAlarmMsgServiceImpl.java      |   20 
 ycl-generator/src/main/java/com/ycl/MysqlGenerator.java                             |    4 
 ycl-smoke/src/main/java/com/ycl/smoke/config/feign/MessageConverter.java            |   15 
 ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/DetectorDailyResponseDto.java      |   24 
 ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsCurAlarmServiceImpl.java      |   20 
 ycl-smoke/src/main/java/com/ycl/smoke/task/ScheduledTask.java                       |  106 +
 ycl-smoke/src/main/java/com/ycl/smoke/config/SecurityConfig.java                    |   82 +
 ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsCustomerMapper.java                 |   16 
 ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/SmokeResultResponseDto.java        |   20 
 ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsLocaleServiceImpl.java        |   20 
 ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/LoginParamDto.java                 |   24 
 ycl-smoke/src/main/resources/mapper/smoke/OdsCustomerMapper.xml                     |   35 
 ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/LoginResponseDto.java              |   15 
 ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/ResultsPageInfo.java               |   12 
 ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsTenMinDataService.java            |   16 
 ycl-smoke/src/main/java/com/ycl/smoke/config/Knife4jSwaggerConfig.java              |   75 +
 ycl-smoke/src/main/java/com/ycl/smoke/config/feign/UnderlineQueryEncoder.java       |   70 +
 ycl-smoke/src/main/resources/mapper/smoke/OdsTenMinDataMapper.xml                   |   25 
 ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsAlarmRecordService.java           |   16 
 70 files changed, 3,624 insertions(+), 2 deletions(-)

diff --git a/pom.xml b/pom.xml
index fbc6e74..64fefc5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -50,6 +50,7 @@
         <module>ycl-platform</module>
         <module>ycl-common</module>
         <module>ycl-generator</module>
+        <module>ycl-smoke</module>
     </modules>
 
     <dependencies>
@@ -190,6 +191,11 @@
             <artifactId>spring-cloud-starter-openfeign</artifactId>
             <version>3.1.3</version>
         </dependency>
+        <dependency>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
+            <version>1.2</version>
+        </dependency>
     </dependencies>
 
 </project>
diff --git a/ycl-generator/src/main/java/com/ycl/MysqlGenerator.java b/ycl-generator/src/main/java/com/ycl/MysqlGenerator.java
index 2c899e7..f3b2007 100644
--- a/ycl-generator/src/main/java/com/ycl/MysqlGenerator.java
+++ b/ycl-generator/src/main/java/com/ycl/MysqlGenerator.java
@@ -58,7 +58,7 @@
         // 鍏ㄥ眬閰嶇疆
         GlobalConfig gc = new GlobalConfig();
         final String projectPath = System.getProperty("user.dir");
-        gc.setOutputDir(projectPath + "/ycl-generator/src/main/java");
+        gc.setOutputDir(projectPath + "/ycl-smoke/src/main/java");
         gc.setAuthor("lyq");//浣滆��
         gc.setBaseResultMap(true); //mapper.xml 鐢熸垚 ResultMap
         gc.setBaseColumnList(true); //mapper.xml 鐢熸垚 ColumnList
@@ -116,7 +116,7 @@
                 // 鑷畾涔夎緭鍑烘枃浠跺悕 锛� 濡傛灉浣� Entity 璁剧疆浜嗗墠鍚庣紑銆佹澶勬敞鎰� xml 鐨勫悕绉颁細璺熺潃鍙戠敓鍙樺寲锛侊紒
 //                return projectPath + "/coinyee-contract-generator/src/main/resources/mapper/" + pc.getModuleName()
 //                        + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
-                return projectPath + "/ycl-generator/src/main/resources/mapper/"
+                return projectPath + "/ycl-smoke/src/main/resources/mapper/"
                         + packageName + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
             }
         });
diff --git a/ycl-smoke/pom.xml b/ycl-smoke/pom.xml
new file mode 100644
index 0000000..1ac7708
--- /dev/null
+++ b/ycl-smoke/pom.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.ycl</groupId>
+        <artifactId>ycl-server</artifactId>
+        <version>1.0.0</version>
+    </parent>
+
+    <groupId>com.ycl</groupId>
+    <artifactId>ycl-smoke</artifactId>
+    <version>1.0.0</version>
+    <name>ycl-smoke</name>
+    <description>鍚庣妯″潡</description>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+
+    <dependencies>
+        <dependency>
+            <groupId>com.ycl</groupId>
+            <artifactId>ycl-common</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.ycl</groupId>
+            <artifactId>ycl-generator</artifactId>
+            <version>1.0.0</version>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <finalName>ycl-smoke</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/SmokeApplication.java b/ycl-smoke/src/main/java/com/ycl/smoke/SmokeApplication.java
new file mode 100644
index 0000000..9cffa4a
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/SmokeApplication.java
@@ -0,0 +1,49 @@
+package com.ycl.smoke;
+
+import lombok.extern.slf4j.Slf4j;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.core.env.Environment;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+
+@Slf4j
+@Configuration
+@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true)
+@EnableAsync(proxyTargetClass = true)
+@EnableScheduling
+@EnableFeignClients
+@EnableTransactionManagement(proxyTargetClass = true)
+@SpringBootApplication
+@ComponentScan("com.ycl")
+@MapperScan("com.ycl.smoke.mapper")
+public class SmokeApplication {
+
+    public static void main(String[] args) throws UnknownHostException {
+        ConfigurableApplicationContext application = SpringApplication.run(SmokeApplication.class, args);
+
+        Environment env = application.getEnvironment();
+        log.info("\n----------------------------------------------------------\n\t" +
+                        "搴旂敤 '{}' 杩愯鎴愬姛! 璁块棶杩炴帴:\n\t" +
+                        "Swagger鏂囨。: \t\thttp://{}:{}{}/doc.html\n\t" +
+                        "鏁版嵁搴撶洃鎺�: \t\thttp://{}:{}/druid\n" +
+                        "----------------------------------------------------------",
+                env.getProperty("spring.application.name"),
+                InetAddress.getLocalHost().getHostAddress(),
+                env.getProperty("server.port"),
+                env.getProperty("server.servlet.context-path"),
+                "127.0.0.1",
+                env.getProperty("server.port"));
+    }
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/config/CommonSecurityConfig.java b/ycl-smoke/src/main/java/com/ycl/smoke/config/CommonSecurityConfig.java
new file mode 100644
index 0000000..176f011
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/config/CommonSecurityConfig.java
@@ -0,0 +1,62 @@
+package com.ycl.smoke.config;
+
+import com.ycl.component.*;
+import com.ycl.config.IgnoreUrlsConfig;
+import com.ycl.utils.JwtTokenUtil;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
+
+/**
+ * SpringSecurity閫氱敤閰嶇疆
+ * 鍖呮嫭閫氱敤Bean銆丼ecurity閫氱敤Bean鍙婂姩鎬佹潈闄愰�氱敤Bean
+ */
+@Configuration
+public class CommonSecurityConfig {
+
+    @Bean
+    public PasswordEncoder passwordEncoder() {
+        return new BCryptPasswordEncoder();
+    }
+
+    @Bean
+    public IgnoreUrlsConfig ignoreUrlsConfig() {
+        return new IgnoreUrlsConfig();
+    }
+
+    @Bean
+    public JwtTokenUtil jwtTokenUtil() {
+        return new JwtTokenUtil();
+    }
+
+    @Bean
+    public RestfulAccessDeniedHandler restfulAccessDeniedHandler() {
+        return new RestfulAccessDeniedHandler();
+    }
+
+    @Bean
+    public RestAuthenticationEntryPoint restAuthenticationEntryPoint() {
+        return new RestAuthenticationEntryPoint();
+    }
+
+    @Bean
+    public JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter(){
+        return new JwtAuthenticationTokenFilter();
+    }
+
+    @Bean
+    public DynamicAccessDecisionManager dynamicAccessDecisionManager() {
+        return new DynamicAccessDecisionManager();
+    }
+
+    @Bean
+    public DynamicSecurityMetadataSource dynamicSecurityMetadataSource() {
+        return new DynamicSecurityMetadataSource();
+    }
+
+    @Bean
+    public DynamicSecurityFilter dynamicSecurityFilter(){
+        return new DynamicSecurityFilter();
+    }
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/config/Knife4jSwaggerConfig.java b/ycl-smoke/src/main/java/com/ycl/smoke/config/Knife4jSwaggerConfig.java
new file mode 100644
index 0000000..d1d5970
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/config/Knife4jSwaggerConfig.java
@@ -0,0 +1,75 @@
+package com.ycl.smoke.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.*;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spi.service.contexts.SecurityContext;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Author: lyq
+ * @Date: 2022/09/06
+ * @description: Swagger API鏂囨。鐩稿叧閰嶇疆
+ */
+@Configuration
+@EnableSwagger2
+public class Knife4jSwaggerConfig {
+    @Bean
+    public Docket createRestApi(){
+        return new Docket(DocumentationType.SWAGGER_2)
+                .apiInfo(apiInfo())
+                .select()
+                .apis(RequestHandlerSelectors.basePackage("com.ycl.controller"))
+                .paths(PathSelectors.any())
+                .build()
+                .securitySchemes(securitySchemes())
+                .securityContexts(securityContexts());
+    }
+
+    private ApiInfo apiInfo() {
+        return new ApiInfoBuilder()
+                .title("閬傛槍鎺ュ彛鏂囨。绠$悊绯荤粺")
+                .description("閬傛槍鍚庡彴妯″潡")
+                .version("1.0").contact(new Contact("lyq",null,null))
+                .build();
+    }
+
+    private List<SecurityScheme> securitySchemes() {
+        //璁剧疆璇锋眰澶翠俊鎭�
+        List<SecurityScheme> result = new ArrayList<>();
+        ApiKey apiKey = new ApiKey("Authorization", "Authorization", "header");
+        result.add(apiKey);
+        return result;
+    }
+
+    private List<SecurityContext> securityContexts() {
+        //璁剧疆闇�瑕佺櫥褰曡璇佺殑璺緞
+        List<SecurityContext> result = new ArrayList<>();
+        result.add(getContextByPath("/*/.*"));
+        return result;
+    }
+
+    private SecurityContext getContextByPath(String pathRegex){
+        return SecurityContext.builder()
+                .securityReferences(defaultAuth())
+                .forPaths(PathSelectors.regex(pathRegex))
+                .build();
+    }
+
+    private List<SecurityReference> defaultAuth() {
+        List<SecurityReference> result = new ArrayList<>();
+        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
+        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
+        authorizationScopes[0] = authorizationScope;
+        result.add(new SecurityReference("Authorization", authorizationScopes));
+        return result;
+    }
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/config/RestTemplateConfig.java b/ycl-smoke/src/main/java/com/ycl/smoke/config/RestTemplateConfig.java
new file mode 100644
index 0000000..219134a
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/config/RestTemplateConfig.java
@@ -0,0 +1,14 @@
+package com.ycl.smoke.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.client.RestTemplate;
+
+@Configuration
+public class RestTemplateConfig {
+
+    @Bean
+    public RestTemplate restTemplate() {
+        return new RestTemplate();
+    }
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/config/SecurityConfig.java b/ycl-smoke/src/main/java/com/ycl/smoke/config/SecurityConfig.java
new file mode 100644
index 0000000..51719ca
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/config/SecurityConfig.java
@@ -0,0 +1,82 @@
+package com.ycl.smoke.config;
+
+import com.ycl.component.*;
+import com.ycl.config.IgnoreUrlsConfig;
+import com.ycl.config.WebSecurityCorsFilter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.HttpMethod;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer;
+import org.springframework.security.config.http.SessionCreationPolicy;
+import org.springframework.security.web.SecurityFilterChain;
+import org.springframework.security.web.access.channel.ChannelProcessingFilter;
+import org.springframework.security.web.access.intercept.FilterSecurityInterceptor;
+import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
+
+
+/**
+ * SpringSecurity 5.4.x浠ヤ笂鏂扮敤娉曢厤缃�
+ * 涓洪伩鍏嶅惊鐜緷璧栵紝浠呯敤浜庨厤缃瓾ttpSecurity
+ * Created by macro on 2019/11/5.
+ */
+@Configuration
+public class SecurityConfig {
+
+    @Autowired
+    private IgnoreUrlsConfig ignoreUrlsConfig;
+    @Autowired
+    private RestfulAccessDeniedHandler restfulAccessDeniedHandler;
+    @Autowired
+    private RestAuthenticationEntryPoint restAuthenticationEntryPoint;
+    @Autowired
+    private JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter;
+    @Autowired
+    private DynamicSecurityService dynamicSecurityService;
+    @Autowired
+    private DynamicSecurityFilter dynamicSecurityFilter;
+
+    @Bean
+    SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception {
+        ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry registry = httpSecurity
+                .authorizeRequests();
+        //涓嶉渶瑕佷繚鎶ょ殑璧勬簮璺緞鍏佽璁块棶
+        for (String url : ignoreUrlsConfig.getUrls()) {
+            registry.antMatchers(url).permitAll();
+        }
+        //鍏佽璺ㄥ煙璇锋眰鐨凮PTIONS璇锋眰
+        registry.antMatchers(HttpMethod.OPTIONS)
+                .permitAll();
+        // 浠讳綍璇锋眰闇�瑕佽韩浠借璇�
+        registry.and()
+                .authorizeRequests()
+                .anyRequest()
+                .authenticated()
+                // 鍏抽棴璺ㄧ珯璇锋眰闃叉姢鍙婁笉浣跨敤session
+                .and()
+                .csrf()
+                .disable()
+                .sessionManagement()
+                .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
+                // 鑷畾涔夋潈闄愭嫆缁濆鐞嗙被
+                .and()
+                .exceptionHandling()
+                .accessDeniedHandler(restfulAccessDeniedHandler)
+                .authenticationEntryPoint(restAuthenticationEntryPoint)
+                // 鑷畾涔夋潈闄愭嫤鎴櫒JWT杩囨护鍣�
+                .and()
+                .addFilterBefore(webSecurityCorsFilter(), ChannelProcessingFilter.class)
+                .addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
+        //鏈夊姩鎬佹潈闄愰厤缃椂娣诲姞鍔ㄦ�佹潈闄愭牎楠岃繃婊ゅ櫒
+        if (dynamicSecurityService != null) {
+            registry.and().addFilterBefore(dynamicSecurityFilter, FilterSecurityInterceptor.class);
+        }
+        return httpSecurity.build();
+    }
+
+    @Bean
+    public WebSecurityCorsFilter webSecurityCorsFilter() {
+        return new WebSecurityCorsFilter();
+    }
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/config/YclSecurityConfig.java b/ycl-smoke/src/main/java/com/ycl/smoke/config/YclSecurityConfig.java
new file mode 100644
index 0000000..343b9c6
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/config/YclSecurityConfig.java
@@ -0,0 +1,37 @@
+package com.ycl.smoke.config;
+
+import com.ycl.component.DynamicSecurityService;
+import com.ycl.entity.user.UmsMenu;
+import com.ycl.service.user.UmsAdminService;
+import com.ycl.service.user.UmsMenuService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.access.ConfigAttribute;
+import org.springframework.security.core.userdetails.UserDetailsService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * security妯″潡鐩稿叧閰嶇疆
+ * 鑷畾涔夐厤缃紝鐢ㄤ簬閰嶇疆濡備綍鑾峰彇鐢ㄦ埛淇℃伅鍙婂姩鎬佹潈闄�
+ */
+@Configuration
+public class YclSecurityConfig {
+
+
+
+    @Bean
+    public DynamicSecurityService dynamicSecurityService() {
+        return new DynamicSecurityService() {
+            @Override
+            public Map<String, ConfigAttribute> loadDataSource() {
+                Map<String, ConfigAttribute> map = new ConcurrentHashMap<>();
+
+                return map;
+            }
+        };
+    }
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/config/feign/FeignConfiguration.java b/ycl-smoke/src/main/java/com/ycl/smoke/config/feign/FeignConfiguration.java
new file mode 100644
index 0000000..8db4d17
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/config/feign/FeignConfiguration.java
@@ -0,0 +1,22 @@
+package com.ycl.smoke.config.feign;
+
+import feign.Feign;
+import feign.Logger;
+import feign.Retryer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class FeignConfiguration {
+    @Bean
+    Logger.Level feignLoggerLevel() {
+        return Logger.Level.FULL;
+    }
+
+    @Bean
+    public Feign.Builder feignBuilder() {
+        return Feign.builder()
+                .queryMapEncoder(new UnderlineQueryEncoder())
+                .retryer(Retryer.NEVER_RETRY);
+    }
+}
\ No newline at end of file
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/config/feign/FeignGlobalConfiguration.java b/ycl-smoke/src/main/java/com/ycl/smoke/config/feign/FeignGlobalConfiguration.java
new file mode 100644
index 0000000..d2b7cbe
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/config/feign/FeignGlobalConfiguration.java
@@ -0,0 +1,20 @@
+package com.ycl.smoke.config.feign;
+
+import feign.codec.Decoder;
+import org.springframework.beans.factory.ObjectFactory;
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
+import org.springframework.cloud.openfeign.support.SpringDecoder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class FeignGlobalConfiguration {
+
+
+    @Bean
+    public Decoder feignDecoder(){
+        MessageConverter converter = new MessageConverter();
+        ObjectFactory<HttpMessageConverters> objectFactory = () -> new HttpMessageConverters(converter);
+        return new SpringDecoder(objectFactory);
+    }
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/config/feign/MessageConverter.java b/ycl-smoke/src/main/java/com/ycl/smoke/config/feign/MessageConverter.java
new file mode 100644
index 0000000..1ebcf9c
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/config/feign/MessageConverter.java
@@ -0,0 +1,15 @@
+package com.ycl.smoke.config.feign;
+
+import org.springframework.http.MediaType;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class MessageConverter extends MappingJackson2HttpMessageConverter {
+    public MessageConverter(){
+        List<MediaType> mediaTypes = new ArrayList<>();
+        mediaTypes.add(MediaType.APPLICATION_JSON);
+        setSupportedMediaTypes(mediaTypes);
+    }
+}
\ No newline at end of file
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/config/feign/UnderlineQueryEncoder.java b/ycl-smoke/src/main/java/com/ycl/smoke/config/feign/UnderlineQueryEncoder.java
new file mode 100644
index 0000000..c08c6ba
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/config/feign/UnderlineQueryEncoder.java
@@ -0,0 +1,70 @@
+package com.ycl.smoke.config.feign;
+
+import com.ycl.utils.StringUtils;
+import feign.Param;
+import feign.QueryMapEncoder;
+import feign.codec.EncodeException;
+
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.*;
+
+public class UnderlineQueryEncoder implements QueryMapEncoder {
+    private final Map<Class<?>, ObjectParamMetadata> classToMetadata =
+            new HashMap();
+
+    @Override
+    public Map<String, Object> encode(Object object) throws EncodeException {
+        try {
+            ObjectParamMetadata metadata = getMetadata(object.getClass());
+            Map<String, Object> propertyNameToValue = new HashMap<String, Object>();
+            for (PropertyDescriptor pd : metadata.objectProperties) {
+                Method method = pd.getReadMethod();
+                Object value = method.invoke(object);
+                if (value != null && value != object) {
+                    Param alias = method.getAnnotation(Param.class);
+                    String name = alias != null ? alias.value() : pd.getName();
+                    propertyNameToValue.put(StringUtils.camelToUnderlineLowerCase(name), value);
+                }
+            }
+            return propertyNameToValue;
+        } catch (IllegalAccessException | IntrospectionException | InvocationTargetException e) {
+            throw new EncodeException("Failure encoding object into query map", e);
+        }
+    }
+
+    private ObjectParamMetadata getMetadata(Class<?> objectType) throws IntrospectionException {
+        ObjectParamMetadata metadata = classToMetadata.get(objectType);
+        if (metadata == null) {
+            metadata = ObjectParamMetadata.parseObjectType(objectType);
+            classToMetadata.put(objectType, metadata);
+        }
+        return metadata;
+    }
+
+    private static class ObjectParamMetadata {
+
+        private final List<PropertyDescriptor> objectProperties;
+
+        private ObjectParamMetadata(List<PropertyDescriptor> objectProperties) {
+            this.objectProperties = Collections.unmodifiableList(objectProperties);
+        }
+
+        private static ObjectParamMetadata parseObjectType(Class<?> type)
+                throws IntrospectionException {
+            List<PropertyDescriptor> properties = new ArrayList<PropertyDescriptor>();
+
+            for (PropertyDescriptor pd : Introspector.getBeanInfo(type).getPropertyDescriptors()) {
+                boolean isGetterMethod = pd.getReadMethod() != null && !"class".equals(pd.getName());
+                if (isGetterMethod) {
+                    properties.add(pd);
+                }
+            }
+
+            return new ObjectParamMetadata(properties);
+        }
+    }
+}
\ No newline at end of file
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsAlarmMsg.java b/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsAlarmMsg.java
new file mode 100644
index 0000000..3fe7783
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsAlarmMsg.java
@@ -0,0 +1,74 @@
+package com.ycl.smoke.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.Version;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 鎶ヨ娑堟伅
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("ums_ods_alarm_msg")
+public class OdsAlarmMsg implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Id
+     */
+    @TableId("id")
+    @JsonProperty("Id")
+    private String id;
+
+    /**
+     * 璁惧鐨刴n鏁版嵁
+     */
+    @TableField("mn")
+    @JsonProperty("MN")
+    private String mn;
+
+    /**
+     * 鏁版嵁鏀堕泦鏃堕棿
+     */
+    @TableField("acquit_at")
+    @JsonProperty("AcquitAt")
+    private Long acquitAt;
+
+    /**
+     * 鎸佹湁浜�
+     */
+    @TableField("owner")
+    @JsonProperty("Owner")
+    private String owner;
+
+    /**
+     * 鍐呭
+     */
+    @TableField("content")
+    @JsonProperty("Content")
+    private String content;
+
+    /**
+     * 娑堟伅绫诲瀷
+     */
+    @TableField("msg_type")
+    @JsonProperty("MsgType")
+    private String msgType;
+
+    @JsonProperty("Addr")
+    @TableField("addr")
+    private String addr;
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsAlarmRecord.java b/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsAlarmRecord.java
new file mode 100644
index 0000000..5d4c4a5
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsAlarmRecord.java
@@ -0,0 +1,139 @@
+package com.ycl.smoke.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.Version;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 鎶ヨ璁板綍
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("ums_ods_alarm_record")
+public class OdsAlarmRecord implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId("id")
+    private String id;
+
+    /**
+     * 鐩戞祴鐐笽D
+     */
+    @TableField("local_id")
+    private String localId;
+
+    /**
+     * 璁惧缂栧彿
+     */
+    @TableField("mn")
+    private String mn;
+
+    /**
+     * 鏁版嵁绫诲瀷1锛氳秴鏍�2锛氬紓甯�
+     */
+    @TableField("typ")
+    private Integer typ;
+
+    /**
+     * 鎶ヨ鏃堕棿
+     */
+    @TableField("alarm_date")
+    private LocalDateTime alarmDate;
+
+    /**
+     * 璁惧绫诲瀷
+     */
+    @TableField("device_type")
+    private Integer deviceType;
+
+    /**
+     * 閲囬泦鏃堕棿
+     */
+    @TableField("acquit_at")
+    private Long acquitAt;
+
+    /**
+     * 澶勭悊鏃堕棿
+     */
+    @TableField("process_at")
+    private Long processAt;
+
+    /**
+     * 鎵�灞炲崟浣�
+     */
+    @TableField("owner")
+    private String owner;
+
+    /**
+     * 瑙e喅鏂规
+     */
+    @TableField("solution")
+    private String solution;
+
+    /**
+     * 澶勭悊鍦板潃
+     */
+    @TableField("processing_address")
+    private String processingAddress;
+
+    /**
+     * 鐐逛綅鍦板潃
+     */
+    @TableField("addr")
+    private String addr;
+
+    /**
+     * 澶勭悊浜篒D
+     */
+    @TableField("process_user_id")
+    private String processUserId;
+
+    /**
+     * 澶勭悊浜哄悕绉�
+     */
+    @TableField("process_user_name")
+    private String processUserName;
+
+    /**
+     * 澶勭悊鍘熷洜
+     */
+    @TableField("process_reason")
+    private String processReason;
+
+    /**
+     * 鍏宠仈鍦板潃
+     */
+    @TableField("created_at")
+    private LocalDateTime createdAt;
+
+    /**
+     * 鍦板潃搴忓垪
+     */
+    @TableField("update_at")
+    private LocalDateTime updateAt;
+
+    /**
+     * 鏌ヨ缁撴灉鎬绘暟
+     */
+    @TableField("total")
+    private Integer total;
+
+    /**
+     *  鎶ヨ鍥剧墖
+     */
+    @TableField("alarm_record_pics")
+    private String alarmRecordPics;
+
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsCurAlarm.java b/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsCurAlarm.java
new file mode 100644
index 0000000..b94fb81
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsCurAlarm.java
@@ -0,0 +1,236 @@
+package com.ycl.smoke.entity;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.Version;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 鐩戞祴鐐圭粺璁�&鍋ュ悍鐮佺鐞�
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("ums_ods_cur_alarm")
+public class OdsCurAlarm implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId("id")
+    private Integer id;
+
+    /**
+     * 寮傚父绂荤嚎澶╂暟
+     */
+    @TableField("abnormal_off_line_days")
+    private Integer abnormalOffLineDays;
+
+    /**
+     * 澶勭悊鐜�
+     */
+    @TableField("abnormal_off_line_process_ratio")
+    private Integer abnormalOffLineProcessRatio;
+
+    /**
+     * 寮傚父绂荤嚎寰呭鐞嗗ぉ鏁�
+     */
+    @TableField("abnormal_off_line_to_process_days")
+    private Integer abnormalOffLineToProcessDays;
+
+    /**
+     * 鍦板潃
+     */
+    @TableField("addr")
+    private String addr;
+
+    /**
+     * 鎺掓斁鐗╂祿搴︽姌绠�(鏄ㄦ棩)
+     */
+    @TableField("c_emissions")
+    private BigDecimal cEmissions;
+
+    /**
+     * 鍦ㄧ嚎鏃ュ钩鍧囨帓鏀炬祿搴�
+     */
+    @TableField("c_emissions_avg_online")
+    private BigDecimal cEmissionsAvgOnline;
+
+    /**
+     * 鏃ユ渶楂樻帓鏀炬祿搴�
+     */
+    @TableField("c_emissions_max")
+    private BigDecimal cEmissionsMax;
+
+    /**
+     * 鏃ユ渶楂樻帓鏀炬祿搴︽棩鏈�
+     */
+    @TableField("c_emissions_max_date")
+    private LocalDateTime cEmissionsMaxDate;
+
+    /**
+     * 棰楃矑鐗╂祿搴︽姌绠�(鏄ㄦ棩)
+     */
+    @TableField("c_granule")
+    private BigDecimal cGranule;
+
+    /**
+     * 闈炵敳鐑锋�荤儍娴撳害鎶樼畻	(鏄ㄦ棩)
+     */
+    @TableField("c_hydrocarbon")
+    private BigDecimal cHydrocarbon;
+
+    /**
+     * 鑿滅郴鍚�
+     */
+    @TableField("cuisine_name")
+    private String cuisineName;
+
+    /**
+     * 钀ヤ笟鎵х収
+     */
+    @TableField("customer_bl_no")
+    private String customerBlNo;
+
+    /**
+     * 鑱旂郴浜�
+     */
+    @TableField("customer_contact")
+    private String customerContact;
+
+    /**
+     * 鐢佃瘽
+     */
+    @TableField("customer_mobile")
+    private String customerMobile;
+
+    /**
+     * 搴楀悕绉�
+     */
+    @TableField("customer_name")
+    private String customerName;
+
+    /**
+     * 鐩戞祴浠晠闅滃ぉ鏁�
+     */
+    @TableField("detector_failure_days")
+    private Integer detectorFailureDays;
+
+    /**
+     * 瓒呮爣闃堝��
+     */
+    @TableField("emissions_sill")
+    private Double emissionsSill;
+
+    /**
+     * 瓒呮爣鏁�
+     */
+    @TableField("excess_num")
+    private Integer excessNum;
+
+    /**
+     * 瓒呮爣寰呭鐞嗗ぉ鏁�
+     */
+    @TableField("excess_to_process_days")
+    private Integer excessToProcessDays;
+
+    /**
+     * 鍑�鍖栧櫒涓嶆甯镐娇鐢ㄥぉ鏁�
+     */
+    @TableField("filter_abnormally_used_days")
+    private Integer filterAbnormallyUsedDays;
+
+    /**
+     * 鍑�鍖栧櫒娓呮礂娆℃暟
+     */
+    @TableField("filter_wash_times")
+    private Integer filterWashTimes;
+
+    /**
+     * 棰楃矑鐗╄秴鏍囬槇鍊�
+     */
+    @TableField("granuli_sill")
+    private Double granuliSill;
+
+    /**
+     * 鍋ュ悍鐮侀鑹�
+     */
+    @TableField("health_code_color")
+    private String healthCodeColor;
+
+    /**
+     * 闈炵敳鐑锋�荤儍瓒呮爣闃堝��
+     */
+    @TableField("hydrocarbon_sill")
+    private Double hydrocarbonSill;
+
+    /**
+     * 鐩戞祴鐐笽d
+     */
+    @TableField("locale_id")
+    private String localeId;
+
+    /**
+     * 绾害
+     */
+    @TableField("local_lat")
+    private String localLat;
+
+    /**
+     * 缁忓害
+     */
+    @TableField("local_lng")
+    private String localLng;
+
+    /**
+     * 璁惧鐨刴n鏁版嵁
+     */
+    @TableField("mn")
+    private String mn;
+
+    /**
+     * 鍚嶇О
+     */
+    @TableField("name")
+    private String name;
+
+    /**
+     * 搴楀鍘熷洜瀵艰嚧绂荤嚎澶╂暟
+     */
+    @TableField("off_line_cause_by_shop_days")
+    private Integer offLineCauseByShopDays;
+
+    /**
+     * 鎵�灞炲崟浣�
+     */
+    @TableField("owner")
+    private String owner;
+
+    /**
+     * 姝囦笟澶╂暟
+     */
+    @TableField("shop_close_days")
+    private Integer shopCloseDays;
+
+    /**
+     * 鐘舵�乕1:涓�鑸洃娴嬬偣,2:鐗规畩鐩戞祴鐐�,99:搴熷純鐩戞祴鐐筣
+     */
+    @TableField("status")
+    private Integer status;
+
+    /**
+     * 鐘舵�佹弿杩�
+     */
+    @TableField("status_desc")
+    private String statusDesc;
+
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsCustomer.java b/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsCustomer.java
new file mode 100644
index 0000000..d64ef8c
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsCustomer.java
@@ -0,0 +1,153 @@
+package com.ycl.smoke.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.Version;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 缁勭粐鏋舵瀯
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("ums_ods_customer")
+public class OdsCustomer implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    @TableId("id")
+    private String id;
+
+    /**
+     * 鐖惰妭鐐�
+     */
+    @TableField("pid")
+    private String pid;
+
+    /**
+     * 钀ヤ笟鎵х収缂栧彿
+     */
+    @TableField("bl_no")
+    private String blNo;
+
+    /**
+     * 钀ヤ笟鎵х収鍚嶇О
+     */
+    @TableField("bl_name")
+    private String blName;
+
+    /**
+     * 缁勭粐鍚嶇О
+     */
+    @TableField("org")
+    private String org;
+
+    /**
+     * 鍚嶇О
+     */
+    @TableField("name")
+    private String name;
+
+    /**
+     * 鑱旂郴浜�
+     */
+    @TableField("contact")
+    private String contact;
+
+    /**
+     * 鎵嬫満鍙�
+     */
+    @TableField("mobile")
+    private String mobile;
+
+    /**
+     * 鑱旂郴鐢佃瘽
+     */
+    @TableField("telephone")
+    private String telephone;
+
+    /**
+     * 绫诲瀷锛�1:绯荤粺鐢ㄦ埛2:缁忛攢鍗曚綅3:琛屾斂鍗曚綅4:椁愰ギ鍗曚綅锛�
+     */
+    @TableField("typ")
+    private Integer typ;
+
+    /**
+     * 鍒涘缓鑰�
+     */
+    @TableField("creator")
+    private String creator;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @TableField("create_at")
+    private Long createAt;
+
+    /**
+     * 鐘舵��
+     */
+    @TableField("status")
+    private Integer status;
+
+    /**
+     * 鍦板潃
+     */
+    @TableField("address")
+    private String address;
+
+    /**
+     * 鏍囧織
+     */
+    @TableField("logo")
+    private String logo;
+
+    /**
+     * 钀ヤ笟鏃堕棿
+     */
+    @TableField("business_hour")
+    private String businessHour;
+
+    /**
+     * 杩愮淮浜哄憳ID
+     */
+    @TableField("maintainer_id")
+    private String maintainerId;
+
+    /**
+     * 鍏宠仈鍦板潃
+     */
+    @TableField("area_ids")
+    private String areaIds;
+
+    /**
+     * 鍦板潃搴忓垪
+     */
+    @TableField("area_id_cascads")
+    private String areaIdCascads;
+
+    /**
+     * 鍦板潃璇︾粏淇℃伅
+     */
+    @TableField("areas")
+    private String areas;
+
+    /**
+     * 浠嬬粛
+     */
+    @TableField("desc")
+    private String desc;
+
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsDetectorDaily.java b/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsDetectorDaily.java
new file mode 100644
index 0000000..48f1dac
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsDetectorDaily.java
@@ -0,0 +1,276 @@
+package com.ycl.smoke.entity;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.time.LocalDate;
+import com.baomidou.mybatisplus.annotation.Version;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 鐩戞祴
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("ums_ods_detector_daily")
+public class OdsDetectorDaily implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    @TableId("id")
+    @JsonProperty("Id")
+    private String id;
+
+    /**
+     * 璁惧mn
+     */
+    @TableField("mn")
+    @JsonProperty("MN")
+    private String mn;
+
+    /**
+     * 鎸佹湁鑰�
+     */
+    @TableField("owner")
+    @JsonProperty("Owner")
+    private String owner;
+
+    /**
+     * 鏁版嵁閲囬泦鏃堕棿
+     */
+    @TableField("acquit_at")
+    @JsonProperty("AcquitAt")
+    private Long acquitAt;
+
+    /**
+     * 鏁版嵁閲囬泦鏃�
+     */
+    @TableField("acquit_date")
+    @JsonProperty("AcquitDate")
+    private LocalDate acquitDate;
+
+    /**
+     * 鍒涘缓鏃ユ湡
+     */
+    @TableField("create_at")
+    @JsonProperty("CreateAt")
+    private Long createAt;
+
+    /**
+     * 鎺掓斁鐗╂祿搴︽姌绠�
+     */
+    @TableField("c_emissions")
+    @JsonProperty("CEmissions")
+    private BigDecimal cEmissions;
+
+    /**
+     * 棰楃矑鐗╂祿搴︽姌绠�
+     */
+    @TableField("c_granule")
+    @JsonProperty("CGranule")
+    private BigDecimal cGranule;
+
+    /**
+     * 闈炵敳鐑锋�荤儍娴撳害鎶樼畻	
+     */
+    @TableField("c_hydrocarbon")
+    @JsonProperty("CHydrocarbon")
+    private BigDecimal cHydrocarbon;
+
+    /**
+     * 寮冪敤
+     */
+    @TableField("e_missions")
+    @JsonProperty("Emissions")
+    private BigDecimal eMissions;
+
+    /**
+     * 寮冪敤
+     */
+    @TableField("granule")
+    @JsonProperty("Granule")
+    private BigDecimal granule;
+
+    /**
+     * 寮冪敤
+     */
+    @TableField("hydrocarbon")
+    @JsonProperty("Hydrocarbon")
+    private BigDecimal hydrocarbon;
+
+    /**
+     * 杞��
+     */
+    @TableField("velocity")
+    @JsonProperty("Velocity")
+    private BigDecimal velocity;
+
+    /**
+     * 娓╁害
+     */
+    @TableField("temperature")
+    @JsonProperty("Temperature")
+    private BigDecimal temperature;
+
+    /**
+     * 婀垮害
+     */
+    @TableField("moisture")
+    @JsonProperty("Moisture")
+    private BigDecimal moisture;
+
+    /**
+     * Pm2.5鍑忔帓閲�
+     */
+    @TableField("red_pm25")
+    @JsonProperty("RedPm25")
+    private BigDecimal redPm25;
+
+    /**
+     * pm10鍑忔帓閲�
+     */
+    @TableField("red_pm10")
+    @JsonProperty("RedPm10")
+    private BigDecimal redPm10;
+
+    /**
+     * 鎺掓斁鐗╁噺鎺掗噺
+     */
+    @TableField("red_emissions")
+    @JsonProperty("RedEmissions")
+    private BigDecimal redEmissions;
+
+    /**
+     * vocs鍑忔帓閲�
+     */
+    @TableField("red_vocs")
+    @JsonProperty("RedVocs")
+    private BigDecimal redVocs;
+
+    /**
+     * 璁惧鏁�
+     */
+    @TableField("device_num")
+    @JsonProperty("DeviceNum")
+    private Integer deviceNum;
+
+    /**
+     * 鐘舵�乕1:姝e父,2:瓒呮爣,3:姝e父绂荤嚎,4寮傚父绂籡
+     */
+    @TableField("status")
+    @JsonProperty("Status")
+    private Integer status;
+
+    /**
+     * 鍑�鍖栧櫒椋庢満鑱斿姩姣�=鍑�鍖栧櫒寮�骞朵笖椋庢満寮�鐨勬潯鏁�/椋庢満寮�鐨勬暟鎹�绘潯鏁�*100%锛�
+     */
+    @TableField("filter_fan_link_ratio")
+    @JsonProperty("FilterFanLinkRatio")
+    private BigDecimal filterFanLinkRatio;
+
+    /**
+     * 鍑�鍖栧櫒鏄惁闈炴甯镐娇鐢�
+     */
+    @TableField("filter_abnormally_used")
+    @JsonProperty("FilterAbnormallyUsed")
+    private Boolean filterAbnormallyUsed;
+
+    /**
+     * 鎺掓斁鐗╄秴鏍�
+     */
+    @TableField("c_emissions_exceed_standard")
+    @JsonProperty("CEmissionsExceedStandard")
+    private Boolean cEmissionsExceedStandard;
+
+    /**
+     * 棰楃矑鐗╄秴鏍�
+     */
+    @TableField("c_granule_exceed_standard")
+    @JsonProperty("CGranuleExceedStandard")
+    private Boolean cGranuleExceedStandard;
+
+    /**
+     * 闈炵敳鐑锋�荤儍瓒呮爣
+     */
+    @TableField("c_hydrocarbon_exceed_standard")
+    @JsonProperty("CHydrocarbonExceedStandard")
+    private Boolean cHydrocarbonExceedStandard;
+
+    /**
+     * 鍦板尯id
+     */
+    @TableField("locale_id")
+    @JsonProperty("LocaleId")
+    private String localeId;
+
+    /**
+     * 鎵�灞炲崟浣峣d
+     */
+    @TableField("customer_id")
+    @JsonProperty("CustomerId")
+    private Integer customerId;
+
+    /**
+     * 鐢ㄦ埛
+     */
+    @TableField("customer")
+    @JsonProperty("Customer")
+    private String customer;
+
+    /**
+     * 鎺掓斁鐗╅槇鍊�
+     */
+    @TableField("locale_emissions_sill")
+    @JsonProperty("LocaleEmissionsSill")
+    private BigDecimal localeEmissionsSill;
+
+    /**
+     * 棰楃矑鐗╅槇鍊�
+     */
+    @TableField("locale_granule_sill")
+    @JsonProperty("LocaleGranuleSill")
+    private BigDecimal localeGranuleSill;
+
+    /**
+     * 闈炵敳鐑锋�荤儍闃堝��
+     */
+    @TableField("locale_hydrocarbon_sill")
+    @JsonProperty("LocaleHydrocarbonSill")
+    private BigDecimal localeHydrocarbonSill;
+
+    /**
+     * 鐩戞祴鐐瑰悕
+     */
+    @TableField("locale_name")
+    @JsonProperty("LocaleName")
+    private String localeName;
+
+    /**
+     * 鐩戞祴鐐�
+     */
+    @TableField("locale_addr")
+    @JsonProperty("LocaleAddr")
+    private String localeAddr;
+
+    /**
+     * 寮傚父绂荤嚎
+     */
+    @TableField("abnormal_off_line")
+    @JsonProperty("AbnormalOffline")
+    private BigDecimal abnormalOffLine;
+
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsInTime.java b/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsInTime.java
new file mode 100644
index 0000000..68f7dd9
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsInTime.java
@@ -0,0 +1,222 @@
+package com.ycl.smoke.entity;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.Version;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 杩斿洖瀹炴椂鐨勮澶囨暟鎹�
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("ums_ods_in_time")
+public class OdsInTime implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 瀹炴椂鏁版嵁鐨勮澶囩紪鍙凤紙涓棿鏈夆��-鈥濊繛鎺ヤ唬琛ㄨ鐩戞祴鐐规湁澶氫釜璁惧缁戝畾锛�
+     */
+    @TableId("id")
+    private String id;
+
+    /**
+     * 鎶ユ枃淇℃伅
+     */
+    @TableField("string")
+    private String string;
+
+    /**
+     * 閲囬泦鏃堕棿
+     */
+    @TableField("acquit_at")
+    private Long acquitAt;
+
+    /**
+     * 鏈�鍚庣‘璁ゆ椂闂�
+     */
+    @TableField("last_at")
+    private Long lastAt;
+
+    /**
+     * 鎺掓斁鐗╂姌绠楁祿搴�
+     */
+    @TableField("c_emissions")
+    private String cEmissions;
+
+    /**
+     * 棰楃矑鐗╂姌绠楁祿搴�
+     */
+    @TableField("c_granule")
+    private String cGranule;
+
+    /**
+     * 闈炵敳鐑锋�荤儍鎶樼畻娴撳害
+     */
+    @TableField("c_hydrocarbon")
+    private BigDecimal cHydrocarbon;
+
+    /**
+     * 瀹炴椂鎺掓斁閲�
+     */
+    @TableField("emissions_conc")
+    private BigDecimal emissionsConc;
+
+    /**
+     * 棰楃矑鐗╁惈閲�
+     */
+    @TableField("granule_conc")
+    private BigDecimal granuleConc;
+
+    /**
+     * 闈炵敳鐑锋�荤儍鍚噺
+     */
+    @TableField("hydrocarbon_conc")
+    private BigDecimal hydrocarbonConc;
+
+    /**
+     * 椋庢満鐘舵�侊紙1:寮�2:鍏�3锛氬紓甯革級
+     */
+    @TableField("fan_status")
+    private Integer fanStatus;
+
+    /**
+     * 鍑�鍖栧櫒鐘舵�侊紙1:寮�2:鍏�3锛氬紓甯革級
+     */
+    @TableField("filter_status")
+    private Integer filterStatus;
+
+    /**
+     * 绫诲瀷[1锛氱洃鎺�:2锛氱洃娴媇
+     */
+    @TableField("typ")
+    private Integer typ;
+
+    /**
+     * 鐘舵��
+            锛圢ORMAL姝e父銆丄LARM棰勮銆丒XCESS瓒呮爣銆丏OWN绂荤嚎銆丱FF寮傚父绂荤嚎锛�
+            
+     */
+    @TableField("status")
+    private String status;
+
+    /**
+     * 娴侀��
+     */
+    @TableField("velocity")
+    private Double velocity;
+
+    /**
+     * 娓╁害
+     */
+    @TableField("temperature")
+    private Double temperature;
+
+    /**
+     * 婀垮害
+     */
+    @TableField("moisture")
+    private Double moisture;
+
+    /**
+     * 鐩戞祴鐐瑰悕绉�
+     */
+    @TableField("locale")
+    private String locale;
+
+    /**
+     * 鐩戞祴鐐笽D
+     */
+    @TableField("lid")
+    private String lid;
+
+    /**
+     * 鎵�灞炲崟浣�
+     */
+    @TableField("owner")
+    private String owner;
+
+    /**
+     * 瀹夎鍦板潃
+     */
+    @TableField("addr")
+    private String addr;
+
+    /**
+     * 瓒呮爣闃堝��
+     */
+    @TableField("emissions_sill")
+    private Double emissionsSill;
+
+    /**
+     * 棰楃矑鐗╄秴鏍囬槇鍊�
+     */
+    @TableField("granule_sill")
+    private Double granuleSill;
+
+    /**
+     * 闈炵敳鐑锋�荤儍瓒呮爣闃堝��
+     */
+    @TableField("hydrocarbon_sill")
+    private Double hydrocarbonSill;
+
+    /**
+     * 鏄惁鑱斿姩(0:鍚�1:鏄�)
+     */
+    @TableField("link_status")
+    private Integer linkStatus;
+
+    /**
+     * 鑱旂郴鐢佃瘽
+     */
+    @TableField("customer_mobile")
+    private String customerMobile;
+
+    /**
+     * 缁忓害
+     */
+    @TableField("locale_lng")
+    private String localeLng;
+
+    /**
+     * 绾害
+     */
+    @TableField("localelat")
+    private String localelat;
+
+    /**
+     * 椋庢満鐢垫祦鍊�
+     */
+    @TableField("fan_current")
+    private Double fanCurrent;
+
+    /**
+     * 鍑�鍖栧櫒鐢垫祦鍊�
+     */
+    @TableField("pur_current")
+    private Double purCurrent;
+
+    /**
+     * 鏁翠綋鐘舵�侊紙1:鍦ㄧ嚎2:绂荤嚎3:寮傚父绂荤嚎锛�
+     */
+    @TableField("online_status")
+    private Integer onlineStatus;
+
+    /**
+     * 锛圢ORMAL:姝e父銆丱FFLINE:涓嬬嚎銆丄BANDONED:搴熷純锛�
+     */
+    @TableField("status_of_record")
+    private String statusOfRecord;
+
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsLocale.java b/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsLocale.java
new file mode 100644
index 0000000..f7ea472
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsLocale.java
@@ -0,0 +1,374 @@
+package com.ycl.smoke.entity;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.Version;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 鐩戞祴鐐逛俊鎭�
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("ums_ods_locale")
+public class OdsLocale implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Id
+     */
+    @TableId("id")
+    private String id;
+
+    /**
+     * 鐑熼亾鍚嶇О
+     */
+    @TableField("n_name")
+    private String nName;
+
+    /**
+     * 鍗曚綅[绾ц仈]
+     */
+    @TableField("owner")
+    private String owner;
+
+    /**
+     * 鑿滅郴
+     */
+    @TableField("cuisine")
+    private Integer cuisine;
+
+    /**
+     * 缁勭粐ID
+     */
+    @TableField("customer_id")
+    private String customerId;
+
+    /**
+     * 鎵�灞炲崟浣嶄俊鎭�
+     */
+    @TableField("customer")
+    private String customer;
+
+    /**
+     * 椋庨��
+     */
+    @TableField("fan_speed")
+    private BigDecimal fanSpeed;
+
+    /**
+     * 椋庨噺
+     */
+    @TableField("fan_quantity")
+    private BigDecimal fanQuantity;
+
+    /**
+     * 绠¢亾鎴潰闈㈢Н
+     */
+    @TableField("pipe_area")
+    private BigDecimal pipeArea;
+
+    /**
+     * 鐏跺ご鏁伴噺
+     */
+    @TableField("stove_num")
+    private Integer stoveNum;
+
+    /**
+     * 绂荤嚎鍒ゅ畾[灏忔椂]
+     */
+    @TableField("offline_judge")
+    private Integer offlineJudge;
+
+    /**
+     * 椋庢満鐘舵��
+     */
+    @TableField("fan_status")
+    private Integer fanStatus;
+
+    /**
+     * 鍑�鍖栧櫒淇℃伅
+     */
+    @TableField("filter_info")
+    private String filterInfo;
+
+    /**
+     * 鍑�鍖栧櫒鐘舵��
+     */
+    @TableField("filter_status")
+    private Integer filterStatus;
+
+    /**
+     * 鎶芥牱娆℃暟
+     */
+    @TableField("samplings")
+    private Integer samplings;
+
+    /**
+     * 鏄惁鑱斿姩
+     */
+    @TableField("link_status")
+    private Boolean linkStatus;
+
+    /**
+     * 瓒呮爣闃堝��
+     */
+    @TableField("emissions_sill")
+    private BigDecimal emissionsSill;
+
+    /**
+     * 闆嗘皵鐏堕潰绉痆璋冪爺]
+     */
+    @TableField("stove_area")
+    private BigDecimal stoveArea;
+
+    /**
+     * 鏃ュ潎鎺掔儫鏃堕棿[璋冪爺]
+     */
+    @TableField("exhaust_time")
+    private String exhaustTime;
+
+    /**
+     * 澶囨敞[璋冪爺]
+     */
+    @TableField("remark")
+    private String remark;
+
+    /**
+     * 鍦板潃
+     */
+    @TableField("addr")
+    private String addr;
+
+    /**
+     * 鍦板尯[绾ц仈]
+     */
+    @TableField("area_id")
+    private String areaId;
+
+    /**
+     * 缁忓害
+     */
+    @TableField("lng")
+    private String lng;
+
+    /**
+     * 绾害
+     */
+    @TableField("lat")
+    private String lat;
+
+    /**
+     * 鍒涘缓鑰�
+     */
+    @TableField("creator")
+    private String creator;
+
+    /**
+     * 鍒涘缓鏃ユ湡
+     */
+    @TableField("create_at")
+    private Long createAt;
+
+    /**
+     * 鐘舵�乕1:涓�鑸洃娴嬬偣,2:鐗规畩鐩戞祴鐐�,99:搴熷純鐩戞祴鐐筣
+     */
+    @TableField("status")
+    private Integer status;
+
+    /**
+     * 棰楃矑鐗╁惈閲忚秴鏍囬槇鍊�
+     */
+    @TableField("granule_sill")
+    private BigDecimal granuleSill;
+
+    /**
+     * 闈炵敳鐑锋�荤儍瓒呮爣闃堝��
+     */
+    @TableField("hydrocarbon_sill")
+    private BigDecimal hydrocarbonSill;
+
+    /**
+     * 鍋ュ悍鐮侀鑹�
+     */
+    @TableField("health_code_color")
+    private String healthCodeColor;
+
+    /**
+     * 鏈�鍚庣粦瀹氳澶噈n
+     */
+    @TableField("mn_last")
+    private String mnLast;
+
+    /**
+     * 鐩戞祴鐐瑰浘鐗�
+     */
+    @TableField("locale_pics")
+    private String localePics;
+
+    /**
+     * 璁惧绫诲瀷 鏈�鍚庝竴娆$粦瀹�
+     */
+    @TableField("mn_typ_last")
+    private Integer mnTypLast;
+
+    /**
+     * 椋庢満淇℃伅
+     */
+    @TableField("fan_info")
+    private String fanInfo;
+
+    /**
+     * 鍙栫數鏂瑰紡
+     */
+    @TableField("power_supply_mode")
+    private String powerSupplyMode;
+
+    /**
+     * 鍑�鍖栧櫒椋庢満鑱斿姩姣旈槇鍊�
+     */
+    @TableField("link_ratio_sill")
+    private BigDecimal linkRatioSill;
+
+    /**
+     * 杩愮淮浜哄憳ID
+     */
+    @TableField("maintainer_id")
+    private String maintainerId;
+
+    /**
+     * 缁跨爜锛氭渶杩慩澶╁唴锛岃搴楀瓒呮爣娆℃暟灏忕瓑浜嶸alue1锛堥粯璁�3锛夋鐨勶紝涓斿噣鍖栧櫒涓嶆甯镐娇鐢ㄥぉ鏁板皬绛変簬Value2锛堥粯璁�3锛夊ぉ鐨勶紝涓旂绾垮ぉ鏁皗闈炴瓏涓氥�侀潪鐩戞祴浠晠闅溿�愭暟鎹潵婧愯繍缁翠汉鍛樺~鍐欑殑鈥濆紓甯稿鐞嗏�溿�憓灏忕瓑浜嶸alue3锛堥粯璁�3锛夈��
+     */
+    @TableField("health_code_x")
+    private Integer healthCodeX;
+
+    @TableField("health_code_value1")
+    private Integer healthCodeValue1;
+
+    @TableField("health_code_value2")
+    private Integer healthCodeValue2;
+
+    @TableField("health_code_value3")
+    private Integer healthCodeValue3;
+
+    /**
+     * 绾㈢爜锛氭渶杩慩澶╁唴锛岃搴楀瓒呮爣娆℃暟澶т簬Value4锛堥粯璁�5锛夋鐨勶紝鎴栬�呭噣鍖栧櫒涓嶆甯镐娇鐢ㄥぉ鏁板ぇ浜嶸alue5锛堥粯璁�5锛夊ぉ鐨勶紝涓旂绾垮ぉ鏁板皬浜嶸alue6锛堥粯璁�5锛夈��
+     */
+    @TableField("health_code_value4")
+    private Integer healthCodeValue4;
+
+    @TableField("health_code_value5")
+    private Integer healthCodeValue5;
+
+    @TableField("health_code_valuee6")
+    private Integer healthCodeValuee6;
+
+    /**
+     * 0~24鐐归棿娌圭儫娴撳害锛堥绮掔墿銆侀潪鐢茬兎鎬荤儍锛変笁涓�间腑鐨勪竴椤瑰�间竴鐩村皬浜嶸alue7(榛樿0.05锛塵g/M3鐨勶紝瑙嗕负鏁版嵁寮傚父鍋忓皬锛�
+     */
+    @TableField("abnormal_value7")
+    private BigDecimal abnormalValue7;
+
+    /**
+     * 0~24鐐归棿娌圭儫娴撳害锛堥绮掔墿銆侀潪鐢茬兎鎬荤儍锛変笁涓�间腑鐨勪竴椤瑰�间竴鐩村ぇ浜嶸alue8(榛樿30锛塵g/M3鐨勶紝瑙嗕负鏁版嵁寮傚父鍋忓ぇ锛�
+     */
+    @TableField("abnormal_value78")
+    private BigDecimal abnormalValue78;
+
+    /**
+     * 0~24鐐归棿娌圭儫娴撳害锛堥绮掔墿銆侀潪鐢茬兎鎬荤儍锛変笁涓�间腑鐨勪竴椤瑰�间竴鐩撮潪Value9(榛樿0锛塵g/M3鐨勶紝瑙嗕负鏁版嵁婕傜Щ寮傚父
+     */
+    @TableField("abnormal_value79")
+    private BigDecimal abnormalValue79;
+
+    /**
+     * 0~24鐐归棿涓婄嚎鏃堕棿灏忎簬Value10(榛樿60锛夊垎閽熺殑锛岃涓轰笂绾挎椂闂磋繃鐭紓甯革紱
+     */
+    @TableField("abnormal_value710")
+    private BigDecimal abnormalValue710;
+
+    /**
+     * Ali璁惧鍚嶇О
+     */
+    @TableField("aliIot_device_name")
+    private String aliiotDeviceName;
+
+    /**
+     * Ali璁惧
+     */
+    @TableField("aliIot")
+    private String aliIot;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @TableField("created_at")
+    private LocalDateTime createdAt;
+
+    /**
+     * 鏇存柊鏃堕棿
+     */
+    @TableField("updated_at")
+    private LocalDateTime updatedAt;
+
+    @TableField("health_code_value11")
+    private Integer healthCodeValue11;
+
+    @TableField("health_code_value12")
+    private Integer healthCodeValue12;
+
+    /**
+     * 鐩戞祴鏂瑰紡銆�1:鍚堝苟浼犺緭 2:鐙珛浼犺緭銆�
+     */
+    @TableField("send_mode")
+    private Integer sendMode;
+
+    /**
+     * 瓒呮爣璁$畻鏂瑰紡銆�1锛氭娊鏍疯绠� 2锛氭粦鍔ㄨ绠椼��
+     */
+    @TableField("surpass_calc_method")
+    private Integer surpassCalcMethod;
+
+    /**
+     * 椋庢満姝e父鐢垫祦鍊�
+     */
+    @TableField("fan_standardurrent")
+    private Integer fanStandardurrent;
+
+    /**
+     * 鍑�鍖栧櫒姝e父鐢垫祦鍊�
+     */
+    @TableField("filter_standard_current")
+    private Integer filterStandardCurrent;
+
+    /**
+     * 璁惧鐘舵�乕姝e父NORMAL銆佷笅绾縊FFLINE銆佸簾寮傾BANDON]
+     */
+    @TableField("status_of_record")
+    private String statusOfRecord;
+
+    /**
+     * 瀹℃牳澶囨敞
+     */
+    @TableField("remark_of_record")
+    private String remarkOfRecord;
+
+    /**
+     * 瀹℃牳鍘熷洜
+     */
+    @TableField("cause")
+    private String cause;
+
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsTenMinData.java b/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsTenMinData.java
new file mode 100644
index 0000000..529fe0f
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/entity/OdsTenMinData.java
@@ -0,0 +1,107 @@
+package com.ycl.smoke.entity;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.Version;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("ums_ods_ten_min_data")
+public class OdsTenMinData implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 鏁版嵁id
+     */
+    @TableId("id")
+    @JsonProperty("id")
+    private String id;
+
+    /**
+     * 璁惧缂栧彿
+     */
+    @TableField("mn")
+    @JsonProperty("mn")
+    private String mn;
+
+    /**
+     * 璁惧閲囬泦鏃堕棿鎴�/600
+     */
+    @TableField("acquit_at")
+    @JsonProperty("acquit_at")
+    private Long acquitAt;
+
+    /**
+     * 璁惧鍗佸垎閽熷唴鍙戦�佹暟鎹殑娆℃暟
+     */
+    @TableField("counter")
+    @JsonProperty("counter")
+    private Integer counter;
+
+    /**
+     * 鍒涘缓鏃堕棿鐨勬椂闂存埑
+     */
+    @TableField("create_at")
+    @JsonProperty("create_at")
+    private Long createAt;
+
+    /**
+     * 瀹炴椂鎺掓斁閲�,杩欎釜鏄�10鍒嗛挓鍐呯殑绱Н閲�
+     */
+    @TableField("emissions_conc")
+    @JsonProperty("emissions_conc")
+    private Double emissionsConc;
+
+    /**
+     * 棰楃矑鐗╁惈閲�
+     */
+    @TableField("granule_conc")
+    @JsonProperty("granule_conc")
+    private Double granuleConc;
+
+    /**
+     * 闈炵敳鐑锋�荤儍
+     */
+    @TableField("hydrocarbon_conc")
+    @JsonProperty("hydrocarbon_conc")
+    private Double hydrocarbonConc;
+
+    /**
+     * 娴侀��
+     */
+    @TableField("velocity")
+    @JsonProperty("velocity")
+    private BigDecimal velocity;
+
+    /**
+     * 娓╁害
+     */
+    @TableField("temperature")
+    @JsonProperty("temperature")
+    private BigDecimal temperature;
+
+    /**
+     * 婀垮害
+     */
+    @TableField("moisture")
+    @JsonProperty("moisture")
+    private BigDecimal moisture;
+
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsAlarmMsgMapper.java b/ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsAlarmMsgMapper.java
new file mode 100644
index 0000000..57087fc
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsAlarmMsgMapper.java
@@ -0,0 +1,16 @@
+package com.ycl.smoke.mapper;
+
+import com.ycl.smoke.entity.OdsAlarmMsg;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 鎶ヨ娑堟伅 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+public interface OdsAlarmMsgMapper extends BaseMapper<OdsAlarmMsg> {
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsAlarmRecordMapper.java b/ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsAlarmRecordMapper.java
new file mode 100644
index 0000000..9e3d4a9
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsAlarmRecordMapper.java
@@ -0,0 +1,16 @@
+package com.ycl.smoke.mapper;
+
+import com.ycl.smoke.entity.OdsAlarmRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 鎶ヨ璁板綍 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+public interface OdsAlarmRecordMapper extends BaseMapper<OdsAlarmRecord> {
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsCurAlarmMapper.java b/ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsCurAlarmMapper.java
new file mode 100644
index 0000000..2be4861
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsCurAlarmMapper.java
@@ -0,0 +1,16 @@
+package com.ycl.smoke.mapper;
+
+import com.ycl.smoke.entity.OdsCurAlarm;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 鐩戞祴鐐圭粺璁�&鍋ュ悍鐮佺鐞� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+public interface OdsCurAlarmMapper extends BaseMapper<OdsCurAlarm> {
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsCustomerMapper.java b/ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsCustomerMapper.java
new file mode 100644
index 0000000..da75285
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsCustomerMapper.java
@@ -0,0 +1,16 @@
+package com.ycl.smoke.mapper;
+
+import com.ycl.smoke.entity.OdsCustomer;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 缁勭粐鏋舵瀯 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+public interface OdsCustomerMapper extends BaseMapper<OdsCustomer> {
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsDetectorDailyMapper.java b/ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsDetectorDailyMapper.java
new file mode 100644
index 0000000..d02a940
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsDetectorDailyMapper.java
@@ -0,0 +1,16 @@
+package com.ycl.smoke.mapper;
+
+import com.ycl.smoke.entity.OdsDetectorDaily;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 鐩戞祴 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+public interface OdsDetectorDailyMapper extends BaseMapper<OdsDetectorDaily> {
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsInTimeMapper.java b/ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsInTimeMapper.java
new file mode 100644
index 0000000..77b6c62
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsInTimeMapper.java
@@ -0,0 +1,16 @@
+package com.ycl.smoke.mapper;
+
+import com.ycl.smoke.entity.OdsInTime;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 杩斿洖瀹炴椂鐨勮澶囨暟鎹� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+public interface OdsInTimeMapper extends BaseMapper<OdsInTime> {
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsLocaleMapper.java b/ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsLocaleMapper.java
new file mode 100644
index 0000000..3b5ac56
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsLocaleMapper.java
@@ -0,0 +1,16 @@
+package com.ycl.smoke.mapper;
+
+import com.ycl.smoke.entity.OdsLocale;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 鐩戞祴鐐逛俊鎭� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+public interface OdsLocaleMapper extends BaseMapper<OdsLocale> {
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsTenMinDataMapper.java b/ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsTenMinDataMapper.java
new file mode 100644
index 0000000..5010e15
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/mapper/OdsTenMinDataMapper.java
@@ -0,0 +1,16 @@
+package com.ycl.smoke.mapper;
+
+import com.ycl.smoke.entity.OdsTenMinData;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+public interface OdsTenMinDataMapper extends BaseMapper<OdsTenMinData> {
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/AlarmMsgDataVo.java b/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/AlarmMsgDataVo.java
new file mode 100644
index 0000000..f62c071
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/AlarmMsgDataVo.java
@@ -0,0 +1,25 @@
+package com.ycl.smoke.remote.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+public class AlarmMsgDataVo {
+
+    @JsonProperty("Id")
+    private String id;
+    @JsonProperty("MN")
+    private String mn;
+    @JsonProperty("AcquitAt")
+    private Long acquitAt;
+    @JsonProperty("Owner")
+    private String owner;
+    @JsonProperty("Content")
+    private String content;
+    @JsonProperty("MsgType")
+    private String msgType;
+    @JsonProperty("Addr")
+    private String addr;
+}
\ No newline at end of file
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/AlarmMsgParamDateDto.java b/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/AlarmMsgParamDateDto.java
new file mode 100644
index 0000000..07bec89
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/AlarmMsgParamDateDto.java
@@ -0,0 +1,34 @@
+package com.ycl.smoke.remote.dto;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class AlarmMsgParamDateDto {
+
+    /**
+     * 鏌ヨ鍒涘缓鎶ヨ鏃ユ湡
+     */
+    private String CreatedAt;
+    /**
+     * ExceedStandard瓒呮爣,AbnormalOffline 寮傚父绂荤嚎
+     */
+    private String msg_type;
+    /**
+     * 璧峰鏃堕棿鎴�
+     */
+    private Long Begin;
+    /**
+     * 缁撴潫鏃堕棿鎴�
+     */
+    private Long End;
+    /**
+     * 璁惧缂栫爜
+     */
+    private String mn;
+
+}
+
+
+
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/AlarmMsgParamDto.java b/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/AlarmMsgParamDto.java
new file mode 100644
index 0000000..159524a
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/AlarmMsgParamDto.java
@@ -0,0 +1,29 @@
+package com.ycl.smoke.remote.dto;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class AlarmMsgParamDto {
+    /**
+     * 璧峰浣嶇疆 - 蹇呭~
+     */
+    private Integer StartAt;
+    /**
+     * 璇锋眰鏁伴噺 - 蹇呭~
+     */
+    private Integer Size;
+    /**
+     * 1锛氳秴鏍�2锛氬紓甯� - 蹇呭~
+     */
+    private Integer Typ;
+
+    /**
+     * 鏌ヨ鍒涘缓鎶ヨ鏃ユ湡
+     */
+    private AlarmMsgParamDateDto Param;
+}
+
+
+
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/AlarmMsgResponseDto.java b/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/AlarmMsgResponseDto.java
new file mode 100644
index 0000000..425532d
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/AlarmMsgResponseDto.java
@@ -0,0 +1,23 @@
+package com.ycl.smoke.remote.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ycl.smoke.entity.OdsAlarmMsg;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+public class AlarmMsgResponseDto {
+
+    @JsonProperty("content")
+    private List<OdsAlarmMsg> content;
+
+    @JsonProperty("total")
+    private Integer total;
+
+}
+
+
+
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/DetectorDailyParamDto.java b/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/DetectorDailyParamDto.java
new file mode 100644
index 0000000..fac3961
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/DetectorDailyParamDto.java
@@ -0,0 +1,35 @@
+package com.ycl.smoke.remote.dto;
+
+import com.baomidou.mybatisplus.annotation.OrderBy;
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class DetectorDailyParamDto {
+    /**
+     * 鐘舵�乕1:姝e父,2:瓒呮爣,3:姝e父绂荤嚎,4寮傚父绂籡
+     */
+    private Integer Status;
+    /**
+     * 鏁版嵁鑾峰彇鏃ユ湡
+     */
+    private String AcquitDate;
+    /**
+     * 鎺掑簭瀛楁
+     */
+    private String OrderBy;
+    /**
+     * 椤靛簭鍙�
+     */
+    private Integer Page;
+    /**
+     * 姣忛〉璁板綍鏁�
+     */
+    private Integer Perpage;
+    /**
+     * 妫�鏌ユ槸鍚﹀畨瑁呮湁璁惧
+     */
+    private Boolean LocaleWithDevice;
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/DetectorDailyResponseDto.java b/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/DetectorDailyResponseDto.java
new file mode 100644
index 0000000..e169e57
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/DetectorDailyResponseDto.java
@@ -0,0 +1,24 @@
+package com.ycl.smoke.remote.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ycl.smoke.entity.OdsAlarmMsg;
+import com.ycl.smoke.entity.OdsDetectorDaily;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+public class DetectorDailyResponseDto {
+
+    @JsonProperty("content")
+    private List<OdsDetectorDaily> content;
+
+    @JsonProperty("resultsPageInfo")
+    private ResultsPageInfo resultsPageInfo;
+
+}
+
+
+
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/LoginParamDto.java b/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/LoginParamDto.java
new file mode 100644
index 0000000..8d56f62
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/LoginParamDto.java
@@ -0,0 +1,24 @@
+package com.ycl.smoke.remote.dto;
+
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class LoginParamDto {
+
+    /**
+     * 璐﹀彿 - 蹇呭~
+     */
+    private String username;
+    /**
+     * 瀵嗙爜 - 蹇呭~
+     */
+    private String password;
+    /**
+     * 閫夋嫨true鍒欐棤闇�楠岃瘉鐮�
+     */
+    private Boolean noCode;
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/LoginResponseDto.java b/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/LoginResponseDto.java
new file mode 100644
index 0000000..572421e
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/LoginResponseDto.java
@@ -0,0 +1,15 @@
+package com.ycl.smoke.remote.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+public class LoginResponseDto {
+    @JsonProperty("Token")
+    private String token;
+
+    @JsonProperty("Role")
+    private String role;
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/ResultsPageInfo.java b/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/ResultsPageInfo.java
new file mode 100644
index 0000000..9145e2c
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/ResultsPageInfo.java
@@ -0,0 +1,12 @@
+package com.ycl.smoke.remote.dto;
+
+import lombok.Data;
+
+@Data
+public class ResultsPageInfo {
+    private Integer Page;
+    private Integer PerPage;
+    private Integer TotalPage;
+    private Integer Total;
+    private Integer CurrentTotal;
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/SmokeResultResponseDto.java b/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/SmokeResultResponseDto.java
new file mode 100644
index 0000000..c0bf540
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/SmokeResultResponseDto.java
@@ -0,0 +1,20 @@
+package com.ycl.smoke.remote.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+public class SmokeResultResponseDto<T> {
+    @JsonProperty("Msg")
+    private String msg;
+    /**
+     * 200 鎴愬姛 114 token澶辨晥
+     */
+    @JsonProperty("Status")
+    private Integer status;
+
+    @JsonProperty("Data")
+    private T data;
+}
\ No newline at end of file
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/TenMinParamDto.java b/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/TenMinParamDto.java
new file mode 100644
index 0000000..4b34882
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/remote/dto/TenMinParamDto.java
@@ -0,0 +1,22 @@
+package com.ycl.smoke.remote.dto;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class TenMinParamDto {
+    /**
+     * 璁惧鐨勭紪鍙�
+     */
+    private String mn;
+    /**
+     * 鏁版嵁鑾峰彇璧峰鏃ユ湡锛�2021-11-01锛�
+     */
+    private String AcquitAtTimeBegin;
+    /**
+     * 鏁版嵁鑾峰彇鎴鏃ユ湡
+     */
+    private String AcquitAtTimeEnd;
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/remote/service/ISmokeDetectionService.java b/ycl-smoke/src/main/java/com/ycl/smoke/remote/service/ISmokeDetectionService.java
new file mode 100644
index 0000000..c46ed14
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/remote/service/ISmokeDetectionService.java
@@ -0,0 +1,57 @@
+package com.ycl.smoke.remote.service;
+
+import com.ycl.smoke.entity.OdsDetectorDaily;
+import com.ycl.smoke.entity.OdsTenMinData;
+import com.ycl.smoke.remote.dto.*;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+
+import java.util.List;
+
+
+@FeignClient(url = "http://116.62.234.187:8088", name = "smokeApi")
+public interface ISmokeDetectionService {
+
+    @PostMapping(value = "/loginAction")
+    SmokeResultResponseDto<LoginResponseDto> loginAction(@RequestBody LoginParamDto paramDto);
+
+
+    @PostMapping(value = "/admin/listAlarmMsg")
+    SmokeResultResponseDto<AlarmMsgResponseDto> getListAlarmMsg(@RequestBody AlarmMsgParamDto paramDto,
+                                                                @RequestHeader("Auth") String token);
+
+    @PostMapping(value = "/admin/queryDataDetectorDaily2")
+    SmokeResultResponseDto<DetectorDailyResponseDto> queryDataDetectorDaily2(@RequestBody DetectorDailyParamDto paramDto,
+                                                                             @RequestHeader("Auth") String token);
+
+    @PostMapping(value = "/admin/queryTenMinData")
+    SmokeResultResponseDto<List<OdsTenMinData>> queryTenMinData(@RequestBody TenMinParamDto paramDto,
+                                                                @RequestHeader("Auth") String token);
+
+    @PostMapping(value = "/admin/listDataIntime")
+    SmokeResultResponseDto<DetectorDailyResponseDto> listDataIntime(@RequestBody DetectorDailyParamDto paramDto,
+                                                                             @RequestHeader("Auth") String token);
+
+    @PostMapping(value = "/admin/listLocale")
+    SmokeResultResponseDto<DetectorDailyResponseDto> listLocale(@RequestBody DetectorDailyParamDto paramDto,
+                                                                             @RequestHeader("Auth") String token);
+
+    @PostMapping(value = "/admin/queryCustomer")
+    SmokeResultResponseDto<DetectorDailyResponseDto> queryCustomer(@RequestBody DetectorDailyParamDto paramDto,
+                                                                             @RequestHeader("Auth") String token);
+
+
+
+    @PostMapping(value = "/admin/listAlarmRecord")
+    SmokeResultResponseDto<AlarmMsgResponseDto> getListAlarmRecord(@RequestBody AlarmMsgParamDto paramDto,
+                                                                @RequestHeader("Auth") String token);
+
+
+
+    @PostMapping(value = "/admin/listCurAlarm")
+    SmokeResultResponseDto<AlarmMsgResponseDto> getListCurAlarm(@RequestBody AlarmMsgParamDto paramDto,
+                                                                @RequestHeader("Auth") String token);
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsAlarmMsgService.java b/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsAlarmMsgService.java
new file mode 100644
index 0000000..833df79
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsAlarmMsgService.java
@@ -0,0 +1,16 @@
+package com.ycl.smoke.service;
+
+import com.ycl.smoke.entity.OdsAlarmMsg;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 鎶ヨ娑堟伅 鏈嶅姟绫�
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+public interface IOdsAlarmMsgService extends IService<OdsAlarmMsg> {
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsAlarmRecordService.java b/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsAlarmRecordService.java
new file mode 100644
index 0000000..bf68a2e
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsAlarmRecordService.java
@@ -0,0 +1,16 @@
+package com.ycl.smoke.service;
+
+import com.ycl.smoke.entity.OdsAlarmRecord;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 鎶ヨ璁板綍 鏈嶅姟绫�
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+public interface IOdsAlarmRecordService extends IService<OdsAlarmRecord> {
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsCurAlarmService.java b/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsCurAlarmService.java
new file mode 100644
index 0000000..b06b155
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsCurAlarmService.java
@@ -0,0 +1,16 @@
+package com.ycl.smoke.service;
+
+import com.ycl.smoke.entity.OdsCurAlarm;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 鐩戞祴鐐圭粺璁�&鍋ュ悍鐮佺鐞� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+public interface IOdsCurAlarmService extends IService<OdsCurAlarm> {
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsCustomerService.java b/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsCustomerService.java
new file mode 100644
index 0000000..a94cc3b
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsCustomerService.java
@@ -0,0 +1,16 @@
+package com.ycl.smoke.service;
+
+import com.ycl.smoke.entity.OdsCustomer;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 缁勭粐鏋舵瀯 鏈嶅姟绫�
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+public interface IOdsCustomerService extends IService<OdsCustomer> {
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsDetectorDailyService.java b/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsDetectorDailyService.java
new file mode 100644
index 0000000..89f670d
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsDetectorDailyService.java
@@ -0,0 +1,16 @@
+package com.ycl.smoke.service;
+
+import com.ycl.smoke.entity.OdsDetectorDaily;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 鐩戞祴 鏈嶅姟绫�
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+public interface IOdsDetectorDailyService extends IService<OdsDetectorDaily> {
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsInTimeService.java b/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsInTimeService.java
new file mode 100644
index 0000000..59856dc
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsInTimeService.java
@@ -0,0 +1,16 @@
+package com.ycl.smoke.service;
+
+import com.ycl.smoke.entity.OdsInTime;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 杩斿洖瀹炴椂鐨勮澶囨暟鎹� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+public interface IOdsInTimeService extends IService<OdsInTime> {
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsLocaleService.java b/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsLocaleService.java
new file mode 100644
index 0000000..08f6b03
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsLocaleService.java
@@ -0,0 +1,16 @@
+package com.ycl.smoke.service;
+
+import com.ycl.smoke.entity.OdsLocale;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 鐩戞祴鐐逛俊鎭� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+public interface IOdsLocaleService extends IService<OdsLocale> {
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsTenMinDataService.java b/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsTenMinDataService.java
new file mode 100644
index 0000000..a6f7d60
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/service/IOdsTenMinDataService.java
@@ -0,0 +1,16 @@
+package com.ycl.smoke.service;
+
+import com.ycl.smoke.entity.OdsTenMinData;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+public interface IOdsTenMinDataService extends IService<OdsTenMinData> {
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsAlarmMsgServiceImpl.java b/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsAlarmMsgServiceImpl.java
new file mode 100644
index 0000000..2d8d14d
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsAlarmMsgServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ycl.smoke.service.impl;
+
+import com.ycl.smoke.entity.OdsAlarmMsg;
+import com.ycl.smoke.mapper.OdsAlarmMsgMapper;
+import com.ycl.smoke.service.IOdsAlarmMsgService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鎶ヨ娑堟伅 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+@Service
+public class OdsAlarmMsgServiceImpl extends ServiceImpl<OdsAlarmMsgMapper, OdsAlarmMsg> implements IOdsAlarmMsgService {
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsAlarmRecordServiceImpl.java b/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsAlarmRecordServiceImpl.java
new file mode 100644
index 0000000..8160adb
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsAlarmRecordServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ycl.smoke.service.impl;
+
+import com.ycl.smoke.entity.OdsAlarmRecord;
+import com.ycl.smoke.mapper.OdsAlarmRecordMapper;
+import com.ycl.smoke.service.IOdsAlarmRecordService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鎶ヨ璁板綍 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+@Service
+public class OdsAlarmRecordServiceImpl extends ServiceImpl<OdsAlarmRecordMapper, OdsAlarmRecord> implements IOdsAlarmRecordService {
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsCurAlarmServiceImpl.java b/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsCurAlarmServiceImpl.java
new file mode 100644
index 0000000..da03bef
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsCurAlarmServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ycl.smoke.service.impl;
+
+import com.ycl.smoke.entity.OdsCurAlarm;
+import com.ycl.smoke.mapper.OdsCurAlarmMapper;
+import com.ycl.smoke.service.IOdsCurAlarmService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鐩戞祴鐐圭粺璁�&鍋ュ悍鐮佺鐞� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+@Service
+public class OdsCurAlarmServiceImpl extends ServiceImpl<OdsCurAlarmMapper, OdsCurAlarm> implements IOdsCurAlarmService {
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsCustomerServiceImpl.java b/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsCustomerServiceImpl.java
new file mode 100644
index 0000000..3558c63
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsCustomerServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ycl.smoke.service.impl;
+
+import com.ycl.smoke.entity.OdsCustomer;
+import com.ycl.smoke.mapper.OdsCustomerMapper;
+import com.ycl.smoke.service.IOdsCustomerService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 缁勭粐鏋舵瀯 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+@Service
+public class OdsCustomerServiceImpl extends ServiceImpl<OdsCustomerMapper, OdsCustomer> implements IOdsCustomerService {
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsDetectorDailyServiceImpl.java b/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsDetectorDailyServiceImpl.java
new file mode 100644
index 0000000..827ba6d
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsDetectorDailyServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ycl.smoke.service.impl;
+
+import com.ycl.smoke.entity.OdsDetectorDaily;
+import com.ycl.smoke.mapper.OdsDetectorDailyMapper;
+import com.ycl.smoke.service.IOdsDetectorDailyService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鐩戞祴 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+@Service
+public class OdsDetectorDailyServiceImpl extends ServiceImpl<OdsDetectorDailyMapper, OdsDetectorDaily> implements IOdsDetectorDailyService {
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsInTimeServiceImpl.java b/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsInTimeServiceImpl.java
new file mode 100644
index 0000000..df2ccd9
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsInTimeServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ycl.smoke.service.impl;
+
+import com.ycl.smoke.entity.OdsInTime;
+import com.ycl.smoke.mapper.OdsInTimeMapper;
+import com.ycl.smoke.service.IOdsInTimeService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 杩斿洖瀹炴椂鐨勮澶囨暟鎹� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+@Service
+public class OdsInTimeServiceImpl extends ServiceImpl<OdsInTimeMapper, OdsInTime> implements IOdsInTimeService {
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsLocaleServiceImpl.java b/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsLocaleServiceImpl.java
new file mode 100644
index 0000000..8885639
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsLocaleServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ycl.smoke.service.impl;
+
+import com.ycl.smoke.entity.OdsLocale;
+import com.ycl.smoke.mapper.OdsLocaleMapper;
+import com.ycl.smoke.service.IOdsLocaleService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鐩戞祴鐐逛俊鎭� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+@Service
+public class OdsLocaleServiceImpl extends ServiceImpl<OdsLocaleMapper, OdsLocale> implements IOdsLocaleService {
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsTenMinDataServiceImpl.java b/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsTenMinDataServiceImpl.java
new file mode 100644
index 0000000..cbdaa32
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/service/impl/OdsTenMinDataServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ycl.smoke.service.impl;
+
+import com.ycl.smoke.entity.OdsTenMinData;
+import com.ycl.smoke.mapper.OdsTenMinDataMapper;
+import com.ycl.smoke.service.IOdsTenMinDataService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author lyq
+ * @since 2023-02-28
+ */
+@Service
+public class OdsTenMinDataServiceImpl extends ServiceImpl<OdsTenMinDataMapper, OdsTenMinData> implements IOdsTenMinDataService {
+
+}
diff --git a/ycl-smoke/src/main/java/com/ycl/smoke/task/ScheduledTask.java b/ycl-smoke/src/main/java/com/ycl/smoke/task/ScheduledTask.java
new file mode 100644
index 0000000..e93607e
--- /dev/null
+++ b/ycl-smoke/src/main/java/com/ycl/smoke/task/ScheduledTask.java
@@ -0,0 +1,106 @@
+package com.ycl.smoke.task;
+
+import com.ycl.service.redis.RedisService;
+import com.ycl.smoke.entity.OdsAlarmMsg;
+import com.ycl.smoke.remote.dto.*;
+import com.ycl.smoke.remote.service.ISmokeDetectionService;
+import com.ycl.smoke.service.IOdsAlarmMsgService;
+import com.ycl.utils.redis.RedisKey;
+import org.apache.velocity.runtime.directive.Foreach;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Component
+public class ScheduledTask {
+
+    ISmokeDetectionService smokeDetectionService;
+
+    IOdsAlarmMsgService alarmMsgService;
+
+    @Resource
+    private RedisService redisService;
+
+    @Autowired
+    public void setSmokeDetectionService(ISmokeDetectionService smokeDetectionService) {
+        this.smokeDetectionService = smokeDetectionService;
+    }
+
+    @Autowired
+    public void setAlarmMsgService(IOdsAlarmMsgService alarmMsgService) {
+        this.alarmMsgService = alarmMsgService;
+    }
+
+    @Scheduled(cron = "0 0 1 * * ?")   // 姣忓ぉ闆剁偣鎵ц
+    // @Scheduled(cron = "0 */2 * * * ?")   // 姣忎竴涓垎閽熸墽琛� 0 0/1 * ?
+    // @Scheduled(cron = "0/1 * * * * ?")   // 姣忕鎵ц
+    public void alarmMsgTask() {
+        try {
+            AlarmMsgParamDto paramDto = AlarmMsgParamDto.builder().StartAt(0).Size(100).build();
+
+            SmokeResultResponseDto<AlarmMsgResponseDto> responseDto = smokeDetectionService.getListAlarmMsg(paramDto, redisService.get(RedisKey.SMOKE_TOKEN).toString());
+            if (responseDto.getStatus() == 200) {
+                AlarmMsgResponseDto dto = responseDto.getData();
+                List<OdsAlarmMsg> list = dto.getContent();
+                System.out.println(list.size());
+                list.forEach(o->{
+                    try {
+                        alarmMsgService.save(o);
+                    }
+                    catch (Exception ex){
+
+                    }
+                });
+                // alarmMsgService.saveBatch(list);
+            } else if (responseDto.getStatus() == 114) {
+                login();
+                alarmMsgTask();
+            }
+        } catch (Exception ex) {
+
+        }
+    }
+
+    @Scheduled(cron = "0 0 1 * * ?")   // 姣忓ぉ闆剁偣鎵ц
+    // @Scheduled(cron = "0 */2 * * * ?")   // 姣忎竴涓垎閽熸墽琛� 0 0/1 * ?
+    // @Scheduled(cron = "0/1 * * * * ?")   // 姣忕鎵ц
+    public void queryDataDetectorDaily2Task() {
+        try {
+            AlarmMsgParamDto paramDto = AlarmMsgParamDto.builder().StartAt(0).Size(100).build();
+
+            SmokeResultResponseDto<AlarmMsgResponseDto> responseDto = smokeDetectionService.getListAlarmMsg(paramDto, redisService.get(RedisKey.SMOKE_TOKEN).toString());
+            if (responseDto.getStatus() == 200) {
+                AlarmMsgResponseDto dto = responseDto.getData();
+                List<OdsAlarmMsg> list = dto.getContent();
+                System.out.println(list.size());
+                list.forEach(o->{
+                    try {
+                        alarmMsgService.save(o);
+                    }
+                    catch (Exception ex){
+
+                    }
+                });
+                // alarmMsgService.saveBatch(list);
+            } else if (responseDto.getStatus() == 114) {
+                login();
+                queryDataDetectorDaily2Task();
+            }
+        } catch (Exception ex) {
+
+        }
+    }
+
+    void login() {
+        LoginParamDto loginParamDto = LoginParamDto.builder().username("connect_test2").password("test@234").noCode(true).build();
+        SmokeResultResponseDto<LoginResponseDto> responseDto = smokeDetectionService.loginAction(loginParamDto);
+        if (responseDto.getStatus() == 200) {
+            System.out.println(responseDto.getData().getToken());
+            redisService.set(RedisKey.SMOKE_TOKEN, responseDto.getData().getToken());
+        }
+    }
+}
diff --git a/ycl-smoke/src/main/resources/application-dev.yml b/ycl-smoke/src/main/resources/application-dev.yml
new file mode 100644
index 0000000..397270e
--- /dev/null
+++ b/ycl-smoke/src/main/resources/application-dev.yml
@@ -0,0 +1,73 @@
+server:
+  port: 8084
+  tomcat:
+    uri-encoding: UTF-8
+  servlet:
+    context-path: /sccg
+    compression: true
+
+fdfs:
+  fileUrl: http://140.143.152.226:8410/
+  groupName: sczhzf
+  soTimeout: 1500
+  connectTimeout: 600
+  trackerList: #TrackerList鍙傛暟,鏀寔澶氫釜
+    - 140.143.152.226:22122
+
+cfg:
+  res: d://resources
+  media-res: 140.143.152.226/media/
+  snow-flake:
+    datacenterId: 1
+    machineId: 1
+
+spring:
+  redis:
+    database: 0
+    host: 42.193.1.25
+    port: 6379
+    password: ycl2018
+    jedis:
+      pool:
+        max-active: 8
+        max-idle: 8
+        min-idle: 0
+        timeout: 0
+
+  datasource:
+    url: jdbc:mysql://42.193.1.25:3306/sccg?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false
+    username: root
+    password: 321$YcYl@1970!
+    type: com.alibaba.druid.pool.DruidDataSource
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    filters: stat
+    maxActive: 20
+    initialSize: 1
+    maxWait: 60000
+    minIdle: 1
+    timeBetweenEvictionRunsMillis: 60000
+    minEvictableIdleTimeMillis: 300000
+    validationQuery: select 'x'
+    testWhileIdle: true
+    testOnBorrow: false
+    testOnReturn: false
+    poolPreparedStatements: true
+    maxOpenPreparedStatements: 20
+
+e-mail:
+  sendHost: smtp.qq.com
+  username: 1723292425@qq.com
+  password: qizcitupatzoeeij
+
+SMS:
+  ecName: ycl
+  apId: 1
+  sign: sign
+  url: http://localhost:8082/sccg/text/sms_res
+
+videoPoint:
+  url: http://183.245.159.161:8281
+  port: 8281
+  userName: suichang
+  passWord: a12345677
+  ip: 10.10.10.10
\ No newline at end of file
diff --git a/ycl-smoke/src/main/resources/application-pro.yml b/ycl-smoke/src/main/resources/application-pro.yml
new file mode 100644
index 0000000..acbbec7
--- /dev/null
+++ b/ycl-smoke/src/main/resources/application-pro.yml
@@ -0,0 +1,71 @@
+server:
+  port: 8083
+  tomcat:
+    uri-encoding: UTF-8
+  servlet:
+    context-path: /sccg
+    compression: true
+
+fdfs:
+  fileUrl: http://140.143.152.226:8410/
+  groupName: sczhzf
+  soTimeout: 1500
+  connectTimeout: 600
+  trackerList:            #TrackerList鍙傛暟,鏀寔澶氫釜
+    - 140.143.152.226:22122
+    -
+cfg:
+  res: d://resources
+  media-res: 140.143.152.226/media/
+  snow-flake:
+    datacenterId: 1
+    machineId: 1
+
+spring:
+  redis:
+    database: 0
+    host: localhost
+    password:
+    jedis:
+      pool:
+        max-active: 8
+        max-idle: 8
+        min-idle: 0
+        timeout: 0
+  datasource:
+    url: jdbc:mysql://42.193.1.25:3306/sccg?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false
+    username: root
+    password: 321$YcYl@1970!
+    type: com.alibaba.druid.pool.DruidDataSource
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    filters: stat
+    maxActive: 20
+    initialSize: 1
+    maxWait: 60000
+    minIdle: 1
+    timeBetweenEvictionRunsMillis: 60000
+    minEvictableIdleTimeMillis: 300000
+    validationQuery: select 'x'
+    testWhileIdle: true
+    testOnBorrow: false
+    testOnReturn: false
+    poolPreparedStatements: true
+    maxOpenPreparedStatements: 20
+
+e-mail:
+  sendHost: smtp.qq.com
+  username: 1723292425@qq.com
+  password: qizcitupatzoeeij
+
+SMS:
+  ecName: ycl
+  apId: 1
+  sign: sign
+  url: http://localhost:8082/sccg/text/sms_res
+
+videoPoint:
+  url: http://183.245.159.161:8281
+  port: 8281
+  userName: suichang
+  passWord: a12345677
+  ip: 10.10.10.10
\ No newline at end of file
diff --git a/ycl-smoke/src/main/resources/application.yml b/ycl-smoke/src/main/resources/application.yml
new file mode 100644
index 0000000..a5c6f78
--- /dev/null
+++ b/ycl-smoke/src/main/resources/application.yml
@@ -0,0 +1,92 @@
+spring:
+  profiles:
+    active: dev
+  main:
+    allow-circular-references: true
+    allow-bean-definition-overriding: true
+  mvc:
+    pathmatch:
+      matching-strategy: ant_path_matcher
+  application:
+    name: sccg-platform
+  http:
+    charset: UTF-8
+    enabled: true
+    force: true
+  servlet:
+    multipart:
+      max-file-size: -1
+      max-request-size: -1
+#  jackson:
+#    default-property-inclusion: non_null
+
+
+management:
+  health:
+    rabbit:
+      enabled: false
+
+jwt:
+  tokenHeader: Authorization #JWT瀛樺偍鐨勮姹傚ご
+  secret: platform-secret #JWT鍔犺В瀵嗕娇鐢ㄧ殑瀵嗛挜
+  expiration: 604800 #JWT鐨勮秴鏈熼檺鏃堕棿(60*60*24*7)
+  tokenHead: 'Bearer ' #JWT璐熻浇涓嬁鍒板紑澶�
+
+redis:
+  database: sccg
+  key:
+    admin: 'ums:admin'
+    resourceList: 'ums:menuList'
+  expire:
+    common: 86400 # 24灏忔椂
+
+#MP閰嶇疆
+mybatis-plus:
+  mapper-locations: classpath*:mapper/**/*.xml
+  global-config:
+    db-config:
+      id-type: auto
+      #閫昏緫鍒犻櫎閰嶇疆瀛楁
+      logic-delete-field:
+      #閫昏緫鍒犻櫎閰嶇疆瀛楁 1 鍒犻櫎
+      logic-delete-value: 1
+      #閫昏緫鍒犻櫎閰嶇疆瀛楁 0 涓嶅垹闄�
+      logic-not-delete-value: 0
+
+knife4j:
+  enable: true
+  #true鍒欐槸鐢熶骇鐜涓嶅厑璁歌闂甼nife4j
+  production: false
+
+
+security:
+  basic:
+    enabled: false
+secure:
+  ignored:
+    urls: #閰嶇疆鐧藉悕鍗曡矾寰�
+      - /swagger-ui.html
+      - /swagger/**
+      - /swagger-ui/*
+      - /swagger-resources/**
+      - /**/v2/api-docs
+      - /doc.html
+      - /webjars/**
+      - /**/*.html
+      - /**/*.js
+      - /**/*.css
+      - /**/*.png
+      - /favicon.ico
+      - /actuator/**
+      - /druid/**
+      - /**/admin/login
+      - /**/admin/register
+      - /**/admin/info
+      - /**/admin/logout
+      - /dict/**
+      - /sccg-region/**
+      - /**/system/portal/logo/search
+      - /**/unauthorized/**
+      - /**/api/**
+      - /**/text/**
+      - /**/API/**
diff --git a/ycl-smoke/src/main/resources/logback-spring.xml b/ycl-smoke/src/main/resources/logback-spring.xml
new file mode 100644
index 0000000..4331451
--- /dev/null
+++ b/ycl-smoke/src/main/resources/logback-spring.xml
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+	<property name="LOG_HOME" value="${user.dir}/logs/ycl/platform" />
+
+	<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
+		<encoder>
+			<pattern>%d{H:mm} %-5level [%logger{16}] %msg%n</pattern>
+		</encoder>
+	</appender>
+	<!--		class="ch.qos.logback.core.rolling.RollingFileAppender">-->
+	<appender name="normalLog"
+			  class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+			<FileNamePattern>${LOG_HOME}/normal/%d{yyyy-MM-dd}/%i.log</FileNamePattern>
+			<MaxHistory>30</MaxHistory>
+			<maxFileSize>2MB</maxFileSize>
+		</rollingPolicy>
+		<!--<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+			<FileNamePattern>${LOG_HOME}/job.normal.%d{yyyy-MM-dd}.log
+			</FileNamePattern>
+			<MaxHistory>30</MaxHistory>
+		</rollingPolicy>
+		<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
+			<maxFileSize>10MB</maxFileSize>
+		</triggeringPolicy>-->
+		<layout class="ch.qos.logback.classic.PatternLayout">
+			<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{16} - %msg%n
+			</pattern>
+		</layout>
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<level>ERROR</level>
+			<onMatch>DENY</onMatch>
+			<onMismatch>ACCEPT</onMismatch>
+		</filter>
+	</appender>
+
+	<appender name="ASYNC-INFO" class="ch.qos.logback.classic.AsyncAppender">
+		<discardingThreshold>0</discardingThreshold>
+		<queueSize>256</queueSize>
+		<appender-ref ref="normalLog"/>
+	</appender>
+
+
+
+	<appender name="errorLog"
+			  class="ch.qos.logback.core.rolling.RollingFileAppender">
+
+		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+			<FileNamePattern>${LOG_HOME}/error/%d{yyyy-MM-dd}/%i.log</FileNamePattern>
+			<MaxHistory>30</MaxHistory>
+			<maxFileSize>2MB</maxFileSize>
+		</rollingPolicy>
+		<!--<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+			<FileNamePattern>${LOG_HOME}/job.error.%d{yyyy-MM-dd}.log
+			</FileNamePattern>
+			<MaxHistory>30</MaxHistory>
+		</rollingPolicy>
+		<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
+			<maxFileSize>10MB</maxFileSize>
+		</triggeringPolicy>-->
+		<layout class="ch.qos.logback.classic.PatternLayout">
+			<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{16} - %msg%n
+			</pattern>
+		</layout>
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<level>ERROR</level>
+			<onMatch>ACCEPT</onMatch>
+			<onMismatch>DENY</onMismatch>
+		</filter>
+	</appender>
+
+
+
+	<appender name="ASYNC-ERROR" class="ch.qos.logback.classic.AsyncAppender">
+		<discardingThreshold>0</discardingThreshold>
+		<queueSize>256</queueSize>
+		<appender-ref ref="errorLog"/>
+	</appender>
+
+	<appender name="ASYNC-CONSOLE" class="ch.qos.logback.classic.AsyncAppender">
+		<discardingThreshold>0</discardingThreshold>
+		<queueSize>256</queueSize>
+		<appender-ref ref="Console"/>
+	</appender>
+
+
+
+<!--	<logger name="com.ycl" level="debug" >
+
+	</logger >-->
+	<springProfile name="dev">
+		<!--鎵撳嵃SQL-->
+		<logger name="java.sql.Connection" level="DEBUG" />
+		<logger name="java.sql.Statement" level="DEBUG" />
+		<logger name="java.sql.PreparedStatement" level="DEBUG" />
+
+		<logger name="com.ycl.component" level="error" />
+
+		<logger name="com.ycl" level="debug" >
+			<appender-ref ref="normalLog" />
+			<appender-ref ref="errorLog" />
+		</logger>
+
+		<root level="info">
+			<appender-ref ref="Console" />
+			<appender-ref ref="normalLog" />
+			<appender-ref ref="errorLog" />
+		</root>
+	</springProfile>
+
+	<springProfile name="pro">
+		<!--鎵撳嵃SQL-->
+		<logger name="java.sql.Connection" level="ERROR" />
+		<logger name="java.sql.Statement" level="ERROR" />
+		<logger name="java.sql.PreparedStatement" level="ERROR" />
+		<logger name="com.ycl" level="debug" >
+			<appender-ref ref="normalLog" />
+			<appender-ref ref="errorLog" />
+		</logger>
+		<root level="info">
+			<appender-ref ref="Console" />
+		</root>
+	</springProfile>
+
+
+
+
+</configuration>
\ No newline at end of file
diff --git a/ycl-smoke/src/main/resources/mapper/smoke/OdsAlarmMsgMapper.xml b/ycl-smoke/src/main/resources/mapper/smoke/OdsAlarmMsgMapper.xml
new file mode 100644
index 0000000..13235d0
--- /dev/null
+++ b/ycl-smoke/src/main/resources/mapper/smoke/OdsAlarmMsgMapper.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ycl.smoke.mapper.OdsAlarmMsgMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ycl.smoke.entity.OdsAlarmMsg">
+        <id column="id" property="id" />
+        <result column="mn" property="mn" />
+        <result column="acquit_at" property="acquitAt" />
+        <result column="owner" property="owner" />
+        <result column="content" property="content" />
+        <result column="msg_type" property="msgType" />
+    </resultMap>
+
+    <!-- 閫氱敤鏌ヨ缁撴灉鍒� -->
+    <sql id="Base_Column_List">
+        id, mn, acquit_at, owner, content, msg_type
+    </sql>
+
+</mapper>
diff --git a/ycl-smoke/src/main/resources/mapper/smoke/OdsAlarmRecordMapper.xml b/ycl-smoke/src/main/resources/mapper/smoke/OdsAlarmRecordMapper.xml
new file mode 100644
index 0000000..07b650e
--- /dev/null
+++ b/ycl-smoke/src/main/resources/mapper/smoke/OdsAlarmRecordMapper.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ycl.smoke.mapper.OdsAlarmRecordMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ycl.smoke.entity.OdsAlarmRecord">
+        <id column="id" property="id" />
+        <result column="local_id" property="localId" />
+        <result column="mn" property="mn" />
+        <result column="typ" property="typ" />
+        <result column="alarm_date" property="alarmDate" />
+        <result column="device_type" property="deviceType" />
+        <result column="acquit_at" property="acquitAt" />
+        <result column="process_at" property="processAt" />
+        <result column="owner" property="owner" />
+        <result column="solution" property="solution" />
+        <result column="processing_address" property="processingAddress" />
+        <result column="addr" property="addr" />
+        <result column="process_user_id" property="processUserId" />
+        <result column="process_user_name" property="processUserName" />
+        <result column="process_reason" property="processReason" />
+        <result column="created_at" property="createdAt" />
+        <result column="update_at" property="updateAt" />
+        <result column="total" property="total" />
+        <result column="alarm_record_pics" property="alarmRecordPics" />
+    </resultMap>
+
+    <!-- 閫氱敤鏌ヨ缁撴灉鍒� -->
+    <sql id="Base_Column_List">
+        id, local_id, mn, typ, alarm_date, device_type, acquit_at, process_at, owner, solution, processing_address, addr, process_user_id, process_user_name, process_reason, created_at, update_at, total, alarm_record_pics
+    </sql>
+
+</mapper>
diff --git a/ycl-smoke/src/main/resources/mapper/smoke/OdsCurAlarmMapper.xml b/ycl-smoke/src/main/resources/mapper/smoke/OdsCurAlarmMapper.xml
new file mode 100644
index 0000000..7a328e1
--- /dev/null
+++ b/ycl-smoke/src/main/resources/mapper/smoke/OdsCurAlarmMapper.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ycl.smoke.mapper.OdsCurAlarmMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ycl.smoke.entity.OdsCurAlarm">
+        <id column="id" property="id" />
+        <result column="abnormal_off_line_days" property="abnormalOffLineDays" />
+        <result column="abnormal_off_line_process_ratio" property="abnormalOffLineProcessRatio" />
+        <result column="abnormal_off_line_to_process_days" property="abnormalOffLineToProcessDays" />
+        <result column="addr" property="addr" />
+        <result column="c_emissions" property="cEmissions" />
+        <result column="c_emissions_avg_online" property="cEmissionsAvgOnline" />
+        <result column="c_emissions_max" property="cEmissionsMax" />
+        <result column="c_emissions_max_date" property="cEmissionsMaxDate" />
+        <result column="c_granule" property="cGranule" />
+        <result column="c_hydrocarbon" property="cHydrocarbon" />
+        <result column="cuisine_name" property="cuisineName" />
+        <result column="customer_bl_no" property="customerBlNo" />
+        <result column="customer_contact" property="customerContact" />
+        <result column="customer_mobile" property="customerMobile" />
+        <result column="customer_name" property="customerName" />
+        <result column="detector_failure_days" property="detectorFailureDays" />
+        <result column="emissions_sill" property="emissionsSill" />
+        <result column="excess_num" property="excessNum" />
+        <result column="excess_to_process_days" property="excessToProcessDays" />
+        <result column="filter_abnormally_used_days" property="filterAbnormallyUsedDays" />
+        <result column="filter_wash_times" property="filterWashTimes" />
+        <result column="granuli_sill" property="granuliSill" />
+        <result column="health_code_color" property="healthCodeColor" />
+        <result column="hydrocarbon_sill" property="hydrocarbonSill" />
+        <result column="locale_id" property="localeId" />
+        <result column="local_lat" property="localLat" />
+        <result column="local_lng" property="localLng" />
+        <result column="mn" property="mn" />
+        <result column="name" property="name" />
+        <result column="off_line_cause_by_shop_days" property="offLineCauseByShopDays" />
+        <result column="owner" property="owner" />
+        <result column="shop_close_days" property="shopCloseDays" />
+        <result column="status" property="status" />
+        <result column="status_desc" property="statusDesc" />
+    </resultMap>
+
+    <!-- 閫氱敤鏌ヨ缁撴灉鍒� -->
+    <sql id="Base_Column_List">
+        id, abnormal_off_line_days, abnormal_off_line_process_ratio, abnormal_off_line_to_process_days, addr, c_emissions, c_emissions_avg_online, c_emissions_max, c_emissions_max_date, c_granule, c_hydrocarbon, cuisine_name, customer_bl_no, customer_contact, customer_mobile, customer_name, detector_failure_days, emissions_sill, excess_num, excess_to_process_days, filter_abnormally_used_days, filter_wash_times, granuli_sill, health_code_color, hydrocarbon_sill, locale_id, local_lat, local_lng, mn, name, off_line_cause_by_shop_days, owner, shop_close_days, status, status_desc
+    </sql>
+
+</mapper>
diff --git a/ycl-smoke/src/main/resources/mapper/smoke/OdsCustomerMapper.xml b/ycl-smoke/src/main/resources/mapper/smoke/OdsCustomerMapper.xml
new file mode 100644
index 0000000..274b904
--- /dev/null
+++ b/ycl-smoke/src/main/resources/mapper/smoke/OdsCustomerMapper.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ycl.smoke.mapper.OdsCustomerMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ycl.smoke.entity.OdsCustomer">
+        <id column="id" property="id" />
+        <result column="pid" property="pid" />
+        <result column="bl_no" property="blNo" />
+        <result column="bl_name" property="blName" />
+        <result column="org" property="org" />
+        <result column="name" property="name" />
+        <result column="contact" property="contact" />
+        <result column="mobile" property="mobile" />
+        <result column="telephone" property="telephone" />
+        <result column="typ" property="typ" />
+        <result column="creator" property="creator" />
+        <result column="create_at" property="createAt" />
+        <result column="status" property="status" />
+        <result column="address" property="address" />
+        <result column="logo" property="logo" />
+        <result column="business_hour" property="businessHour" />
+        <result column="maintainer_id" property="maintainerId" />
+        <result column="area_ids" property="areaIds" />
+        <result column="area_id_cascads" property="areaIdCascads" />
+        <result column="areas" property="areas" />
+        <result column="desc" property="desc" />
+    </resultMap>
+
+    <!-- 閫氱敤鏌ヨ缁撴灉鍒� -->
+    <sql id="Base_Column_List">
+        id, pid, bl_no, bl_name, org, name, contact, mobile, telephone, typ, creator, create_at, status, address, logo, business_hour, maintainer_id, area_ids, area_id_cascads, areas, desc
+    </sql>
+
+</mapper>
diff --git a/ycl-smoke/src/main/resources/mapper/smoke/OdsDetectorDailyMapper.xml b/ycl-smoke/src/main/resources/mapper/smoke/OdsDetectorDailyMapper.xml
new file mode 100644
index 0000000..aa0238d
--- /dev/null
+++ b/ycl-smoke/src/main/resources/mapper/smoke/OdsDetectorDailyMapper.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ycl.smoke.mapper.OdsDetectorDailyMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ycl.smoke.entity.OdsDetectorDaily">
+        <id column="id" property="id" />
+        <result column="mn" property="mn" />
+        <result column="owner" property="owner" />
+        <result column="acquit_at" property="acquitAt" />
+        <result column="acquit_date" property="acquitDate" />
+        <result column="create_at" property="createAt" />
+        <result column="c_emissions" property="cEmissions" />
+        <result column="c_granule" property="cGranule" />
+        <result column="c_hydrocarbon" property="cHydrocarbon" />
+        <result column="e_missions" property="eMissions" />
+        <result column="granule" property="granule" />
+        <result column="hydrocarbon" property="hydrocarbon" />
+        <result column="velocity" property="velocity" />
+        <result column="temperature" property="temperature" />
+        <result column="moisture" property="moisture" />
+        <result column="red_pm25" property="redPm25" />
+        <result column="red_pm10" property="redPm10" />
+        <result column="red_emissions" property="redEmissions" />
+        <result column="red_vocs" property="redVocs" />
+        <result column="device_num" property="deviceNum" />
+        <result column="status" property="status" />
+        <result column="filter_fan_link_ratio" property="filterFanLinkRatio" />
+        <result column="filter_abnormally_used" property="filterAbnormallyUsed" />
+        <result column="c_emissions_exceed_standard" property="cEmissionsExceedStandard" />
+        <result column="c_granule_exceed_standard" property="cGranuleExceedStandard" />
+        <result column="c_hydrocarbon_exceed_standard" property="cHydrocarbonExceedStandard" />
+        <result column="locale_id" property="localeId" />
+        <result column="customer_id" property="customerId" />
+        <result column="customer" property="customer" />
+        <result column="locale_emissions_sill" property="localeEmissionsSill" />
+        <result column="locale_granule_sill" property="localeGranuleSill" />
+        <result column="locale_hydrocarbon_sill" property="localeHydrocarbonSill" />
+        <result column="locale_name" property="localeName" />
+        <result column="locale_addr" property="localeAddr" />
+        <result column="abnormal_off_line" property="abnormalOffLine" />
+    </resultMap>
+
+    <!-- 閫氱敤鏌ヨ缁撴灉鍒� -->
+    <sql id="Base_Column_List">
+        id, mn, owner, acquit_at, acquit_date, create_at, c_emissions, c_granule, c_hydrocarbon, e_missions, granule, hydrocarbon, velocity, temperature, moisture, red_pm25, red_pm10, red_emissions, red_vocs, device_num, status, filter_fan_link_ratio, filter_abnormally_used, c_emissions_exceed_standard, c_granule_exceed_standard, c_hydrocarbon_exceed_standard, locale_id, customer_id, customer, locale_emissions_sill, locale_granule_sill, locale_hydrocarbon_sill, locale_name, locale_addr, abnormal_off_line
+    </sql>
+
+</mapper>
diff --git a/ycl-smoke/src/main/resources/mapper/smoke/OdsInTimeMapper.xml b/ycl-smoke/src/main/resources/mapper/smoke/OdsInTimeMapper.xml
new file mode 100644
index 0000000..75231a7
--- /dev/null
+++ b/ycl-smoke/src/main/resources/mapper/smoke/OdsInTimeMapper.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ycl.smoke.mapper.OdsInTimeMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ycl.smoke.entity.OdsInTime">
+        <id column="id" property="id" />
+        <result column="string" property="string" />
+        <result column="acquit_at" property="acquitAt" />
+        <result column="last_at" property="lastAt" />
+        <result column="c_emissions" property="cEmissions" />
+        <result column="c_granule" property="cGranule" />
+        <result column="c_hydrocarbon" property="cHydrocarbon" />
+        <result column="emissions_conc" property="emissionsConc" />
+        <result column="granule_conc" property="granuleConc" />
+        <result column="hydrocarbon_conc" property="hydrocarbonConc" />
+        <result column="fan_status" property="fanStatus" />
+        <result column="filter_status" property="filterStatus" />
+        <result column="typ" property="typ" />
+        <result column="status" property="status" />
+        <result column="velocity" property="velocity" />
+        <result column="temperature" property="temperature" />
+        <result column="moisture" property="moisture" />
+        <result column="locale" property="locale" />
+        <result column="lid" property="lid" />
+        <result column="owner" property="owner" />
+        <result column="addr" property="addr" />
+        <result column="emissions_sill" property="emissionsSill" />
+        <result column="granule_sill" property="granuleSill" />
+        <result column="hydrocarbon_sill" property="hydrocarbonSill" />
+        <result column="link_status" property="linkStatus" />
+        <result column="customer_mobile" property="customerMobile" />
+        <result column="locale_lng" property="localeLng" />
+        <result column="localelat" property="localelat" />
+        <result column="fan_current" property="fanCurrent" />
+        <result column="pur_current" property="purCurrent" />
+        <result column="online_status" property="onlineStatus" />
+        <result column="status_of_record" property="statusOfRecord" />
+    </resultMap>
+
+    <!-- 閫氱敤鏌ヨ缁撴灉鍒� -->
+    <sql id="Base_Column_List">
+        id, string, acquit_at, last_at, c_emissions, c_granule, c_hydrocarbon, emissions_conc, granule_conc, hydrocarbon_conc, fan_status, filter_status, typ, status, velocity, temperature, moisture, locale, lid, owner, addr, emissions_sill, granule_sill, hydrocarbon_sill, link_status, customer_mobile, locale_lng, localelat, fan_current, pur_current, online_status, status_of_record
+    </sql>
+
+</mapper>
diff --git a/ycl-smoke/src/main/resources/mapper/smoke/OdsLocaleMapper.xml b/ycl-smoke/src/main/resources/mapper/smoke/OdsLocaleMapper.xml
new file mode 100644
index 0000000..c316654
--- /dev/null
+++ b/ycl-smoke/src/main/resources/mapper/smoke/OdsLocaleMapper.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ycl.smoke.mapper.OdsLocaleMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ycl.smoke.entity.OdsLocale">
+        <id column="id" property="id" />
+        <result column="n_name" property="nName" />
+        <result column="owner" property="owner" />
+        <result column="cuisine" property="cuisine" />
+        <result column="customer_id" property="customerId" />
+        <result column="customer" property="customer" />
+        <result column="fan_speed" property="fanSpeed" />
+        <result column="fan_quantity" property="fanQuantity" />
+        <result column="pipe_area" property="pipeArea" />
+        <result column="stove_num" property="stoveNum" />
+        <result column="offline_judge" property="offlineJudge" />
+        <result column="fan_status" property="fanStatus" />
+        <result column="filter_info" property="filterInfo" />
+        <result column="filter_status" property="filterStatus" />
+        <result column="samplings" property="samplings" />
+        <result column="link_status" property="linkStatus" />
+        <result column="emissions_sill" property="emissionsSill" />
+        <result column="stove_area" property="stoveArea" />
+        <result column="exhaust_time" property="exhaustTime" />
+        <result column="remark" property="remark" />
+        <result column="addr" property="addr" />
+        <result column="area_id" property="areaId" />
+        <result column="lng" property="lng" />
+        <result column="lat" property="lat" />
+        <result column="creator" property="creator" />
+        <result column="create_at" property="createAt" />
+        <result column="status" property="status" />
+        <result column="granule_sill" property="granuleSill" />
+        <result column="hydrocarbon_sill" property="hydrocarbonSill" />
+        <result column="health_code_color" property="healthCodeColor" />
+        <result column="mn_last" property="mnLast" />
+        <result column="locale_pics" property="localePics" />
+        <result column="mn_typ_last" property="mnTypLast" />
+        <result column="fan_info" property="fanInfo" />
+        <result column="power_supply_mode" property="powerSupplyMode" />
+        <result column="link_ratio_sill" property="linkRatioSill" />
+        <result column="maintainer_id" property="maintainerId" />
+        <result column="health_code_x" property="healthCodeX" />
+        <result column="health_code_value1" property="healthCodeValue1" />
+        <result column="health_code_value2" property="healthCodeValue2" />
+        <result column="health_code_value3" property="healthCodeValue3" />
+        <result column="health_code_value4" property="healthCodeValue4" />
+        <result column="health_code_value5" property="healthCodeValue5" />
+        <result column="health_code_valuee6" property="healthCodeValuee6" />
+        <result column="abnormal_value7" property="abnormalValue7" />
+        <result column="abnormal_value78" property="abnormalValue78" />
+        <result column="abnormal_value79" property="abnormalValue79" />
+        <result column="abnormal_value710" property="abnormalValue710" />
+        <result column="aliIot_device_name" property="aliiotDeviceName" />
+        <result column="aliIot" property="aliIot" />
+        <result column="created_at" property="createdAt" />
+        <result column="updated_at" property="updatedAt" />
+        <result column="health_code_value11" property="healthCodeValue11" />
+        <result column="health_code_value12" property="healthCodeValue12" />
+        <result column="send_mode" property="sendMode" />
+        <result column="surpass_calc_method" property="surpassCalcMethod" />
+        <result column="fan_standardurrent" property="fanStandardurrent" />
+        <result column="filter_standard_current" property="filterStandardCurrent" />
+        <result column="status_of_record" property="statusOfRecord" />
+        <result column="remark_of_record" property="remarkOfRecord" />
+        <result column="cause" property="cause" />
+    </resultMap>
+
+    <!-- 閫氱敤鏌ヨ缁撴灉鍒� -->
+    <sql id="Base_Column_List">
+        id, n_name, owner, cuisine, customer_id, customer, fan_speed, fan_quantity, pipe_area, stove_num, offline_judge, fan_status, filter_info, filter_status, samplings, link_status, emissions_sill, stove_area, exhaust_time, remark, addr, area_id, lng, lat, creator, create_at, status, granule_sill, hydrocarbon_sill, health_code_color, mn_last, locale_pics, mn_typ_last, fan_info, power_supply_mode, link_ratio_sill, maintainer_id, health_code_x, health_code_value1, health_code_value2, health_code_value3, health_code_value4, health_code_value5, health_code_valuee6, abnormal_value7, abnormal_value78, abnormal_value79, abnormal_value710, aliIot_device_name, aliIot, created_at, updated_at, health_code_value11, health_code_value12, send_mode, surpass_calc_method, fan_standardurrent, filter_standard_current, status_of_record, remark_of_record, cause
+    </sql>
+
+</mapper>
diff --git a/ycl-smoke/src/main/resources/mapper/smoke/OdsTenMinDataMapper.xml b/ycl-smoke/src/main/resources/mapper/smoke/OdsTenMinDataMapper.xml
new file mode 100644
index 0000000..10a1938
--- /dev/null
+++ b/ycl-smoke/src/main/resources/mapper/smoke/OdsTenMinDataMapper.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ycl.smoke.mapper.OdsTenMinDataMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ycl.smoke.entity.OdsTenMinData">
+        <id column="id" property="id" />
+        <result column="mn" property="mn" />
+        <result column="acquit_at" property="acquitAt" />
+        <result column="counter" property="counter" />
+        <result column="create_at" property="createAt" />
+        <result column="emissions_conc" property="emissionsConc" />
+        <result column="granule_conc" property="granuleConc" />
+        <result column="hydrocarbon_conc" property="hydrocarbonConc" />
+        <result column="velocity" property="velocity" />
+        <result column="temperature" property="temperature" />
+        <result column="moisture" property="moisture" />
+    </resultMap>
+
+    <!-- 閫氱敤鏌ヨ缁撴灉鍒� -->
+    <sql id="Base_Column_List">
+        id, mn, acquit_at, counter, create_at, emissions_conc, granule_conc, hydrocarbon_conc, velocity, temperature, moisture
+    </sql>
+
+</mapper>

--
Gitblit v1.8.0