From 6cbeec5fa8e11547b1baec937575376b780aeb2e Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期二, 09 四月 2024 13:38:54 +0800
Subject: [PATCH] manboot能启动了

---
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProductionCraftProcessMapper.xml               |   12 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProcessMapper.xml                              |   73 +
 smart-man-boot/src/main/java/com/qianwen/smartman/common/provider/CustomI18nMessageProvider.java                         |    1 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/CalendarDayMapper.xml                          |   38 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ShiftModelMapper.xml                           |   68 
 smart-starter-tenant/src/main/java/com/qianwen/core/tenant/BladeTenantHolder.java                                        |   15 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProductionCraftProcessRelatedToolMapper.xml    |    6 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/TdengineMapper.xml                             |  245 +++
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/WorkstationMapper.xml                          |  495 +++++++
 smart-starter-report/pom.xml                                                                                             |   11 
 smart-starter-report/src/main/java/com/qianwen/core/report/config/ReportConfiguration.java                               |    9 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/OrganizationMapper.xml                         |   43 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/EmployeePostMapper.xml                         |    5 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/FixtureMapper.xml                              |  161 ++
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/TrayFixtureMapper.xml                          |   32 
 smart-starter-report/src/main/java/com/qianwen/core/report/provider/DatabaseProvider.java                                |   10 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/MachineMapper.xml                              |  337 ++++
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/WarehouseGridMapper.xml                        |    6 
 smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladePreviewConfiguration.java                           |    1 
 smart-man-boot/src/main/java/com/qianwen/smartman/common/config/SequenceConfig.java                                      |    1 
 smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeLicenseConfiguration.java                           |    1 
 smart-man-boot/src/main/resources/application-dev.yml                                                                    |    5 
 smart-starter-report/src/main/java/com/qianwen/core/report/provider/ReportPlaceholderProvider.java                       |    6 
 smart-core-lanuch/src/main/java/com/qianwen/core/launch/constant/TokenConstant.java                                      |    1 
 smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeMybatisConfiguration.java                           |    1 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProductMapper.xml                              |  213 +++
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/WorkstationWcsMapper.xml                       |   28 
 smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeLogConfiguration.java                               |    1 
 smart-core-lanuch/src/main/java/com/qianwen/core/launch/BladeApplication.java                                            |    4 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/BomMaterialMapper.xml                          |  100 +
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/WorkstationWorkbenchMapper.xml                 |   73 +
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/DeviceTypeCheckProjectMapper.xml               |   19 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/BomProcessMapper.xml                           |   47 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/MaintainItemMapper.xml                         |   41 
 smart-man-boot/src/main/java/com/qianwen/smartman/common/websocket/entity/FmsArea.java                                   |    1 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/BomVersionMapper.xml                           |   20 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/CommonGroupMapper.xml                          |  161 ++
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProductionCraftVersionMapper.xml               |   39 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/InitMapper.xml                                 |  172 ++
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/MaterialStorageMapper.xml                      |   83 +
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/CalendarDaytimeMapper.xml                      |   46 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/TrayMapper.xml                                 |  157 ++
 smart-man-boot/src/main/java/com/qianwen/smartman/common/config/XxlJobConfig.java                                        |    2 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/CalendarMapper.xml                             |  174 ++
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/MalfunctionTypeMapper.xml                      |    5 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/CraftVersionLineMapper.xml                     |   23 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/CraftRoutingMapper.xml                         |   21 
 smart-core-lanuch/src/main/java/com/qianwen/core/launch/props/BladePropertySourcePostProcessor.java                      |    2 
 smart-man-boot/src/main/java/com/qianwen/smartman/common/websocket/entity/Alarm.java                                     |    1 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ToolAppendixMapper.xml                         |    6 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/TrayStorageMapper.xml                          |   19 
 smart-man-boot/src/main/java/com/qianwen/smartman/common/config/ForestConfig.java                                        |    1 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/GlobalWcsMapper.xml                            |   18 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/DmpVariablesMapper.xml                         |   77 +
 smart-starter-report/src/main/java/com/qianwen/core/report/datasource/ReportDataSource.java                              |    4 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/WarehouseStationMapper.xml                     |   46 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProductionCraftProcessRelatedFixtureMapper.xml |   23 
 smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeConfiguration.java                                  |    1 
 smart-man-boot/src/main/java/com/qianwen/smartman/common/config/CodeGeneratorConfiguration.java                          |    1 
 smart-starter-tenant/src/main/java/com/qianwen/core/tenant/BladeTenantHandler.java                                       |   60 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProductTypeMapper.xml                          |    6 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/TraySurfaceMapper.xml                          |   54 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/WarehouseAreaMapper.xml                        |   17 
 smart-man-boot/src/main/resources/templates/code.properties                                                              |    4 
 /dev/null                                                                                                                |  515 -------
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/EmployeeMapper.xml                             |  103 +
 smart-man-boot/src/main/java/com/qianwen/smartman/common/config/JmConfiguration.java                                     |    1 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/MaintainProjectItemMapper.xml                  |   58 
 smart-man-boot/src/main/java/com/qianwen/smartman/common/config/SerialAddressConfig.java                                 |    1 
 smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeWebSocketConfiguration.java                         |    2 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ShiftRestTimeMapper.xml                        |   21 
 smart-man-boot/pom.xml                                                                                                   |   29 
 smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeReportConfiguration.java                            |   10 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/DeviceTypeMapper.xml                           |   18 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/MaterialMapper.xml                             |   30 
 smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProductionCraftProcessFileMapper.xml           |    6 
 76 files changed, 3,531 insertions(+), 616 deletions(-)

diff --git a/smart-core-lanuch/src/main/java/com/qianwen/core/launch/BladeApplication.java b/smart-core-lanuch/src/main/java/com/qianwen/core/launch/BladeApplication.java
index d330526..f0e538f 100644
--- a/smart-core-lanuch/src/main/java/com/qianwen/core/launch/BladeApplication.java
+++ b/smart-core-lanuch/src/main/java/com/qianwen/core/launch/BladeApplication.java
@@ -61,14 +61,14 @@
 	    Properties props = System.getProperties();
 	    props.setProperty("spring.application.name", appName);
 	    props.setProperty("spring.profiles.active", profile);
-	    props.setProperty("info.version", "9.3.0.0-SNAPSHOT");
+	    props.setProperty("info.version", "1.0.0");
 	    props.setProperty("info.desc", appName);
 	    props.setProperty("file.encoding", StandardCharsets.UTF_8.name());
 	    props.setProperty("blade.env", profile);
 	    props.setProperty("blade.name", appName);
 	    props.setProperty("blade.is-local", String.valueOf(isLocalDev()));
 	    props.setProperty("blade.dev-mode", profile.equals("prod") ? "false" : "true");
-	    props.setProperty("blade.service.version", "9.3.0.0-SNAPSHOT");
+	    props.setProperty("blade.service.version", "1.0.0");
 	    Properties defaultProperties = new Properties();
 	    defaultProperties.setProperty("spring.main.allow-bean-definition-overriding", "true");
 	    defaultProperties.setProperty("spring.sleuth.sampler.percentage", "1.0");
diff --git a/smart-core-lanuch/src/main/java/com/qianwen/core/launch/constant/TokenConstant.java b/smart-core-lanuch/src/main/java/com/qianwen/core/launch/constant/TokenConstant.java
index f7eac01..362b37e 100644
--- a/smart-core-lanuch/src/main/java/com/qianwen/core/launch/constant/TokenConstant.java
+++ b/smart-core-lanuch/src/main/java/com/qianwen/core/launch/constant/TokenConstant.java
@@ -1,6 +1,5 @@
 package com.qianwen.core.launch.constant;
 
-/* loaded from: blade-core-launch-9.3.0.0-SNAPSHOT.jar:org/springblade/core/launch/constant/TokenConstant.class */
 public interface TokenConstant {
     public static final String AVATAR = "avatar";
     public static final String HEADER = "Blade-Auth";
diff --git a/smart-core-lanuch/src/main/java/com/qianwen/core/launch/props/BladePropertySourcePostProcessor.java b/smart-core-lanuch/src/main/java/com/qianwen/core/launch/props/BladePropertySourcePostProcessor.java
index 1ccab5d..c4acbd9 100644
--- a/smart-core-lanuch/src/main/java/com/qianwen/core/launch/props/BladePropertySourcePostProcessor.java
+++ b/smart-core-lanuch/src/main/java/com/qianwen/core/launch/props/BladePropertySourcePostProcessor.java
@@ -61,7 +61,7 @@
                 loaderMap.put(extension, loader);
             }
         }
-        List<PropertyFile> sortedPropertyList = (List) propertyFileList.stream().distinct().sorted().collect(Collectors.toList());
+        List<PropertyFile> sortedPropertyList = propertyFileList.stream().distinct().sorted().collect(Collectors.toList());
         //List<PropertyFile> sortedPropertyList = propertyFileList.stream().distinct().sorted().collect(Collectors.toList());
         ConfigurableEnvironment environment = (ConfigurableEnvironment) beanFactory.getBean(ConfigurableEnvironment.class);
         MutablePropertySources propertySources = environment.getPropertySources();
diff --git a/smart-man-boot/pom.xml b/smart-man-boot/pom.xml
index dd83581..29078db 100644
--- a/smart-man-boot/pom.xml
+++ b/smart-man-boot/pom.xml
@@ -36,15 +36,7 @@
     </properties>
   <dependencyManagement>
 		<dependencies>
-			<!--
-			<dependency>
-				<groupId>org.springblade.platform</groupId>
-				<artifactId>blade-bom</artifactId>
-				<version>${bladex.project.version}</version>
-				<type>pom</type>
-				<scope>import</scope>
-			</dependency>
-			-->
+			
 			<dependency>
 				<groupId>org.springframework.boot</groupId>
 				<artifactId>spring-boot-dependencies</artifactId>
@@ -166,13 +158,13 @@
         </dependency>
 		-->
         <!-- 鎶ヨ〃 -->
-		
+		<!--
         <dependency>
             <groupId>com.qianwen</groupId>
             <artifactId>smart-starter-report</artifactId>
             <version>1.0.0</version>
         </dependency>
-		
+		 -->
         <!-- 楠岃瘉鐮� -->
         <dependency>
             <groupId>com.github.whvcse</groupId>
@@ -302,7 +294,16 @@
             <artifactId>smart-starter-notify</artifactId>
             <version>1.0.0</version>
         </dependency>
-		
+		<dependency>
+		    <groupId>org.springframework.plugin</groupId>
+		    <artifactId>spring-plugin-core</artifactId>
+		    <version>2.0.0.RELEASE</version>
+		</dependency>
+		<dependency>
+		    <groupId>org.springframework.plugin</groupId>
+		    <artifactId>spring-plugin-metadata</artifactId>
+		    <version>2.0.0.RELEASE</version>
+		</dependency>
 		 <!---->
         <dependency>
             <groupId>com.qianwen</groupId>
@@ -417,8 +418,8 @@
         <dependency>
             <groupId>org.jeecgframework.jimureport</groupId>
             <artifactId>jimureport-spring-boot-starter</artifactId>
-            <!--<version>1.5.0-SNAPSHOT</version>-->
-            <version>1.5.9</version>
+            <version>1.5.0</version>
+            <!--<version>1.5.9</version>-->
         </dependency>
         <!-- openpdf 鍗曠嫭鍗囩骇 -->
         <dependency>
diff --git a/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeConfiguration.java b/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeConfiguration.java
index 6ee931a..09b18ac 100644
--- a/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeConfiguration.java
+++ b/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeConfiguration.java
@@ -8,7 +8,6 @@
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
 @Configuration
-/* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/common/config/BladeConfiguration.class */
 public class BladeConfiguration implements WebMvcConfigurer {
     @Bean
     public SecureRegistry secureRegistry() {
diff --git a/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeLicenseConfiguration.java b/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeLicenseConfiguration.java
index 552f597..084927f 100644
--- a/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeLicenseConfiguration.java
+++ b/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeLicenseConfiguration.java
@@ -5,7 +5,6 @@
 import org.springframework.context.annotation.Configuration;
 
 @Configuration
-/* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/common/config/BladeLicenseConfiguration.class */
 public class BladeLicenseConfiguration {
     @Bean
     public LicenseFilter licenseFilter() {
diff --git a/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeLogConfiguration.java b/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeLogConfiguration.java
index b857dce..2643e19 100644
--- a/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeLogConfiguration.java
+++ b/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeLogConfiguration.java
@@ -10,7 +10,6 @@
 import org.springframework.context.annotation.Configuration;
 
 @Configuration
-/* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/common/config/BladeLogConfiguration.class */
 public class BladeLogConfiguration {
     private final ILogService logService;
     private final ServerInfo serverInfo;
diff --git a/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeMybatisConfiguration.java b/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeMybatisConfiguration.java
index b5feb0a..5fdf9c2 100644
--- a/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeMybatisConfiguration.java
+++ b/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeMybatisConfiguration.java
@@ -22,7 +22,6 @@
 import org.springframework.context.annotation.Configuration;
 
 @Configuration
-/* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/common/config/BladeMybatisConfiguration.class */
 public class BladeMybatisConfiguration {
     private static final Logger log = LoggerFactory.getLogger(BladeMybatisConfiguration.class);
 
diff --git a/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladePreviewConfiguration.java b/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladePreviewConfiguration.java
index 7ba1117..3b5fb54 100644
--- a/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladePreviewConfiguration.java
+++ b/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladePreviewConfiguration.java
@@ -8,7 +8,6 @@
 
 @Configuration
 @ConditionalOnProperty(value = {"blade.preview.enabled"}, havingValue = FmsConstant.AUTOMATIC)
-/* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/common/config/BladePreviewConfiguration.class */
 public class BladePreviewConfiguration {
     @Bean
     public PreviewFilter previewFilter() {
diff --git a/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeReportConfiguration.java b/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeReportConfiguration.java
index 8175fa7..3acf72f 100644
--- a/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeReportConfiguration.java
+++ b/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeReportConfiguration.java
@@ -2,7 +2,7 @@
 
 import javax.sql.DataSource;
 import com.qianwen.smartman.common.constant.FmsConstant;
-import com.qianwen.core.report.datasource.ReportDataSource;
+//import com.qianwen.core.report.datasource.ReportDataSource;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -10,8 +10,8 @@
 @Configuration
 @ConditionalOnProperty(value = {"report.enabled"}, havingValue = FmsConstant.AUTOMATIC, matchIfMissing = true)
 public class BladeReportConfiguration {
-    @Bean
-    public ReportDataSource reportDataSource(DataSource dataSource) {
-        return new ReportDataSource(dataSource);
-    }
+    //@Bean
+    //public ReportDataSource reportDataSource(DataSource dataSource) {
+   //     return new ReportDataSource(dataSource);
+   // }
 }
diff --git a/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeWebSocketConfiguration.java b/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeWebSocketConfiguration.java
index e2a043a..3fc7d7e 100644
--- a/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeWebSocketConfiguration.java
+++ b/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/BladeWebSocketConfiguration.java
@@ -8,7 +8,7 @@
 
 @Configuration
 @ConditionalOnProperty(value = {"blade.websocket.enabled"}, havingValue = FmsConstant.AUTOMATIC, matchIfMissing = true)
-/* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/common/config/BladeWebSocketConfiguration.class */
+
 public class BladeWebSocketConfiguration {
     @Bean
     public WebSocketFilter webSocketFilter() {
diff --git a/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/CodeGeneratorConfiguration.java b/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/CodeGeneratorConfiguration.java
index 62d2577..0aee894 100644
--- a/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/CodeGeneratorConfiguration.java
+++ b/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/CodeGeneratorConfiguration.java
@@ -6,7 +6,6 @@
 import org.springframework.jdbc.core.JdbcTemplate;
 
 @Configuration
-/* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/common/config/CodeGeneratorConfiguration.class */
 public class CodeGeneratorConfiguration {
     @Bean
     public DefaultCodeGeneratorBuilder getCodeGeneratorBuilder(JdbcTemplate jdbcTemplate) {
diff --git a/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/ForestConfig.java b/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/ForestConfig.java
index acc8c04..6692926 100644
--- a/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/ForestConfig.java
+++ b/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/ForestConfig.java
@@ -9,7 +9,6 @@
 import com.qianwen.smartman.common.cache.ParamCache;
 import com.qianwen.smartman.common.constant.CommonConstant;
 
-/* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/common/config/ForestConfig.class */
 public class ForestConfig implements AddressSource {
     public ForestAddress getAddress(ForestRequest forestRequest) {
         String value = ParamCache.getValue(CommonConstant.DMP_CONFIG_NAME);
diff --git a/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/JmConfiguration.java b/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/JmConfiguration.java
index 20634bf..c7643d1 100644
--- a/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/JmConfiguration.java
+++ b/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/JmConfiguration.java
@@ -16,7 +16,6 @@
 import org.springframework.http.HttpHeaders;
 
 @Configuration
-/* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/common/config/JmConfiguration.class */
 public class JmConfiguration implements JmReportTokenServiceI {
     private static final String HEADER = "Blade-Auth";
     private static final Logger log = LoggerFactory.getLogger(JmConfiguration.class);
diff --git a/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/SequenceConfig.java b/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/SequenceConfig.java
index c4d382b..23270d5 100644
--- a/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/SequenceConfig.java
+++ b/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/SequenceConfig.java
@@ -3,6 +3,5 @@
 import org.springframework.context.annotation.Configuration;
 
 @Configuration
-/* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/common/config/SequenceConfig.class */
 public class SequenceConfig {
 }
diff --git a/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/SerialAddressConfig.java b/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/SerialAddressConfig.java
index 9e68780..5910c62 100644
--- a/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/SerialAddressConfig.java
+++ b/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/SerialAddressConfig.java
@@ -9,7 +9,6 @@
 import com.qianwen.smartman.common.cache.ParamCache;
 import com.qianwen.smartman.common.constant.CommonConstant;
 
-/* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/common/config/SerialAddressConfig.class */
 public class SerialAddressConfig implements AddressSource {
     public ForestAddress getAddress(ForestRequest forestRequest) {
         String value = ParamCache.getValue(CommonConstant.SERIAL_CONFIG_ADDRESS);
diff --git a/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/XxlJobConfig.java b/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/XxlJobConfig.java
index ef56aad..f71f5a1 100644
--- a/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/XxlJobConfig.java
+++ b/smart-man-boot/src/main/java/com/qianwen/smartman/common/config/XxlJobConfig.java
@@ -8,7 +8,6 @@
 import org.springframework.context.annotation.Configuration;
 
 @Configuration
-/* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/common/config/XxlJobConfig.class */
 public class XxlJobConfig {
     private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
     @Value("${xxl.job.admin.addresses}")
@@ -37,6 +36,7 @@
         xxlJobSpringExecutor.setAccessToken(this.accessToken);
         xxlJobSpringExecutor.setLogPath(this.logPath);
         xxlJobSpringExecutor.setLogRetentionDays(this.logRetentionDays);
+        
         return xxlJobSpringExecutor;
     }
 }
diff --git a/smart-man-boot/src/main/java/com/qianwen/smartman/common/provider/CustomI18nMessageProvider.java b/smart-man-boot/src/main/java/com/qianwen/smartman/common/provider/CustomI18nMessageProvider.java
index 854dc56..72e3a70 100644
--- a/smart-man-boot/src/main/java/com/qianwen/smartman/common/provider/CustomI18nMessageProvider.java
+++ b/smart-man-boot/src/main/java/com/qianwen/smartman/common/provider/CustomI18nMessageProvider.java
@@ -17,7 +17,6 @@
 import org.springframework.stereotype.Component;
 
 @Component
-/* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/common/provider/CustomI18nMessageProvider.class */
 public class CustomI18nMessageProvider extends AbstractMessageEventListener<I18nDataUnique> implements I18nMessageProvider {
     
     private static final int MILLISECONDS_OF_HOUR = 3600000;
diff --git a/smart-man-boot/src/main/java/com/qianwen/smartman/common/websocket/entity/Alarm.java b/smart-man-boot/src/main/java/com/qianwen/smartman/common/websocket/entity/Alarm.java
index e337a28..91c73da 100644
--- a/smart-man-boot/src/main/java/com/qianwen/smartman/common/websocket/entity/Alarm.java
+++ b/smart-man-boot/src/main/java/com/qianwen/smartman/common/websocket/entity/Alarm.java
@@ -4,7 +4,6 @@
 import java.util.Date;
 import com.qianwen.smartman.common.constant.DateConstant;
 
-/* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/common/websocket/entity/Alarm.class */
 public class Alarm {
     private int alarmNum;
     @JSONField(format = DateConstant.PATTERN_DATE_TIME)
diff --git a/smart-man-boot/src/main/java/com/qianwen/smartman/common/websocket/entity/FmsArea.java b/smart-man-boot/src/main/java/com/qianwen/smartman/common/websocket/entity/FmsArea.java
index e8e63b7..e1d6781 100644
--- a/smart-man-boot/src/main/java/com/qianwen/smartman/common/websocket/entity/FmsArea.java
+++ b/smart-man-boot/src/main/java/com/qianwen/smartman/common/websocket/entity/FmsArea.java
@@ -3,7 +3,6 @@
 import java.io.Serializable;
 import java.util.List;
 
-/* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/common/websocket/entity/FmsArea.class */
 public class FmsArea implements Serializable {
     private String id;
     private String name;
diff --git a/smart-man-boot/src/main/resources/META-INF/spring.factories b/smart-man-boot/src/main/resources/META-INF/spring.factories
deleted file mode 100644
index f23eb09..0000000
--- a/smart-man-boot/src/main/resources/META-INF/spring.factories
+++ /dev/null
@@ -1,515 +0,0 @@
-org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
-  com.qianwen.smartman.modules.cps.vo.ConfigVO,\
-  com.qianwen.smartman.modules.cps.service.impl.MachineServiceImpl,\
-  com.qianwen.smartman.common.provider.CustomI18nMessageProvider,\
-  com.qianwen.smartman.modules.system.controller.ResourceDefinitionController,\
-  com.qianwen.smartman.modules.system.handler.field.HandlerFieldSqlParse,\
-  com.qianwen.smartman.modules.cps.controller.MaintainProjectController,\
-  com.qianwen.smartman.modules.trace.controller.TraceCatalogController,\
-  com.qianwen.smartman.modules.system.controller.CustomTemplateFieldController,\
-  com.qianwen.smartman.modules.report.controller.WorkstationEfficiencyController,\
-  com.qianwen.smartman.common.websocket.realtime.RealTimeDataJsonSubscriptionFilter,\
-  com.qianwen.smartman.modules.cps.service.impl.FixtureServiceImpl,\
-  com.qianwen.smartman.modules.visual.controller.VisualCategoryController,\
-  com.qianwen.smartman.modules.system.controller.LogErrorController,\
-  com.qianwen.smartman.modules.system.service.impl.CustomTemplateBusinessServiceImpl,\
-  com.qianwen.smartman.modules.sync.service.impl.OuterAppConfigServiceImpl,\
-  com.qianwen.smartman.common.event.I18nMessageCreateListener,\
-  com.qianwen.smartman.modules.notify.manager.DefaultInternalMessageServer,\
-  com.qianwen.smartman.modules.fms.service.impl.FmsInstructionRecordServiceImpl,\
-  com.qianwen.smartman.modules.tpm.controller.RepairApplyController,\
-  com.qianwen.smartman.modules.tool.controller.ToolModelController,\
-  com.qianwen.smartman.modules.mdc.controller.StatisticsController,\
-  com.qianwen.smartman.modules.dnc.service.impl.ObsFileServiceImpl,\
-  com.qianwen.smartman.modules.visual.service.impl.VisualDataSourceServiceImpl,\
-  com.qianwen.smartman.modules.system.service.impl.MenuServiceImpl,\
-  com.qianwen.smartman.modules.cps.service.impl.WarehouseAreaServiceImpl,\
-  com.qianwen.smartman.modules.cps.controller.DeviceTypeCheckProjectController,\
-  com.qianwen.smartman.modules.fms.controller.FmsAbnormalController,\
-  com.qianwen.smartman.modules.system.controller.TenantController,\
-  com.qianwen.smartman.modules.visual.controller.VisualAlarmController,\
-  com.qianwen.smartman.modules.visual.wrapper.StatusWrapper,\
-  com.qianwen.smartman.modules.dnc.service.impl.TransferDirectoryServiceImpl,\
-  com.qianwen.smartman.modules.system.service.impl.MetaObjectTypeFieldServiceImpl,\
-  com.qianwen.smartman.modules.system.handler.field.ExtendFieldResultParse,\
-  com.qianwen.smartman.modules.fms.service.impl.FmsScheduleServiceImpl,\
-  com.qianwen.smartman.modules.system.service.impl.ThemeServiceImpl,\
-  com.qianwen.smartman.modules.cps.jobHandler.CalendarCacheXxlJob,\
-  com.qianwen.smartman.modules.system.handler.field.provider.MySqlParseProvider,\
-  com.qianwen.smartman.modules.cps.service.impl.CalendarDayServiceImpl,\
-  com.qianwen.smartman.modules.dnc.service.impl.DncWsRelationTdServiceImpl,\
-  com.qianwen.smartman.modules.system.runner.SystemApplicationInitRunner,\
-  com.qianwen.smartman.modules.system.service.impl.LogServiceImpl,\
-  com.qianwen.smartman.modules.system.controller.CustomTemplateFieldOptionController,\
-  com.qianwen.smartman.modules.system.controller.MetaObjectTypeController,\
-  com.qianwen.smartman.modules.system.controller.ParamBizController,\
-  com.qianwen.smartman.modules.system.controller.MetaObjectTypeFieldController,\
-  com.qianwen.smartman.modules.cps.service.impl.MaterialStorageServiceImpl,\
-  com.qianwen.smartman.modules.notify.business.MaintenanceSend,\
-  com.qianwen.smartman.modules.auth.endpoint.OuterAppScanEndpoint,\
-  com.qianwen.smartman.modules.system.service.impl.DeptScopeServiceImpl,\
-  com.qianwen.smartman.modules.system.service.impl.MetaRefObjectTypeServiceImpl,\
-  com.qianwen.smartman.modules.fms.controller.FmsInstructionRecordController,\
-  com.qianwen.smartman.modules.coproduction.controller.PlanController,\
-  com.qianwen.smartman.modules.perf.controller.EmployeeOnOffWorkController,\
-  com.qianwen.smartman.modules.cps.service.impl.MaintainRecordItemServiceImpl,\
-  com.qianwen.smartman.modules.system.service.impl.WorkbenchCardServiceImpl,\
-  com.qianwen.smartman.modules.tdengine.service.impl.WorkstationDynamicCollectServiceImpl,\
-  com.qianwen.smartman.modules.system.service.impl.ApiScopeServiceImpl,\
-  com.qianwen.smartman.modules.trace.controller.TraceFlowRecordController,\
-  com.qianwen.smartman.common.config.BladeMybatisConfiguration,\
-  com.qianwen.smartman.modules.cps.service.impl.BomVersionServiceImpl,\
-  com.qianwen.smartman.modules.dnc.service.impl.ResourceFileServiceImpl,\
-  com.qianwen.smartman.modules.cps.service.impl.WorkstationWcsServiceImpl,\
-  com.qianwen.smartman.modules.visual.controller.VisualFmsController,\
-  com.qianwen.smartman.modules.system.controller.ApiScopeController,\
-  com.qianwen.smartman.modules.mdc.service.impl.ProcessParameterServiceImpl,\
-  com.qianwen.smartman.modules.visual.service.impl.VisualGlobalApiServiceImpl,\
-  com.qianwen.smartman.modules.notify.message.NotificationsPublishProvider,\
-  com.qianwen.smartman.modules.notify.subscriber.providers.DeviceAlarmProvider,\
-  com.qianwen.smartman.modules.sync.controller.QyWechatSyncController,\
-  com.qianwen.smartman.modules.tpm.service.impl.RepairApplyServiceImpl,\
-  com.qianwen.smartman.modules.mdc.controller.OutputStatisticsController,\
-  com.qianwen.smartman.modules.system.controller.RegionController,\
-  com.qianwen.smartman.modules.cps.service.impl.WarehouseGridServiceImpl,\
-  com.qianwen.smartman.modules.system.controller.LogUsualController,\
-  com.qianwen.smartman.modules.cps.service.impl.SupplierServiceImpl,\
-  com.qianwen.smartman.modules.dnc.controller.DockingFtpController,\
-  com.qianwen.smartman.modules.cps.service.impl.ProcessAssociationServiceImpl,\
-  com.qianwen.smartman.modules.report.controller.OutputStatisticsReportController,\
-  com.qianwen.smartman.modules.dnc.service.impl.DncOperationLogServiceImpl,\
-  com.qianwen.smartman.common.utils.XXXJobUtil,\
-  com.qianwen.smartman.common.config.SwaggerConfiguration,\
-  com.qianwen.smartman.modules.auth.endpoint.BladeSocialEndpoint,\
-  com.qianwen.smartman.modules.report.service.impl.WorkstationEfficiencyServiceImpl,\
-  com.qianwen.smartman.modules.cps.controller.TrayStorageController,\
-  com.qianwen.smartman.modules.sync.service.impl.DingEventServiceImpl,\
-  com.qianwen.smartman.modules.cps.controller.CommonGroupController,\
-  com.qianwen.smartman.modules.auth.granter.MachineTokenGranter,\
-  com.qianwen.smartman.modules.mdc.service.impl.SuperAggregateStateServiceImpl,\
-  com.qianwen.smartman.modules.system.service.impl.RoleServiceImpl,\
-  com.qianwen.smartman.modules.cps.controller.WebSocketTestController,\
-  com.qianwen.smartman.modules.cps.controller.FixtureController,\
-  com.qianwen.smartman.modules.cps.service.impl.DeviceTypeServiceImpl,\
-  com.qianwen.smartman.modules.coproduction.service.impl.OrderProcessServiceImpl,\
-  com.qianwen.smartman.modules.dnc.service.impl.DncFactoryFileServiceImpl,\
-  com.qianwen.smartman.modules.cps.service.impl.DmpVariablesServiceImpl,\
-  com.qianwen.smartman.modules.cps.controller.GlobalWcsController,\
-  com.qianwen.smartman.modules.cps.service.impl.GlobalWcsServiceImpl,\
-  com.qianwen.smartman.modules.notify.service.impl.NotificationServiceImpl,\
-  com.qianwen.smartman.modules.mdc.mapper.TimeUsedAnalysisMapper,\
-  com.qianwen.smartman.modules.dnc.service.impl.DncArchiveDirectoryFileServiceImpl,\
-  com.qianwen.smartman.common.config.XxlJobConfig,\
-  com.qianwen.smartman.modules.system.controller.DataScopeController,\
-  com.qianwen.smartman.modules.mdc.controller.StatusRecordController,\
-  com.qianwen.smartman.modules.cps.service.impl.TrayStorageServiceImpl,\
-  com.qianwen.smartman.common.websocket.realtime.RealTimeDataJsonMessageHandler,\
-  com.qianwen.smartman.common.config.BladeConfiguration,\
-  com.qianwen.smartman.modules.dnc.controller.DncArchiveDirectoryController,\
-  com.qianwen.smartman.modules.cps.service.impl.MaterialTypeServiceImpl,\
-  com.qianwen.smartman.modules.notify.controller.NotifierHistoryController,\
-  com.qianwen.smartman.common.config.BladeLicenseConfiguration,\
-  com.qianwen.smartman.modules.system.handler.password.init.InitPasswordModifyFactory,\
-  com.qianwen.smartman.modules.system.controller.MetaRefObjectTypeController,\
-  com.qianwen.smartman.modules.system.handler.password.init.LevelZeroInitPasswordModifyStrategy,\
-  com.qianwen.smartman.modules.trace.service.impl.TraceCatalogServiceImpl,\
-  com.qianwen.smartman.modules.auth.granter.EmployeeTokenGranter,\
-  com.qianwen.smartman.modules.desk.controller.DashBoardController,\
-  com.qianwen.smartman.modules.system.controller.TopMenuController,\
-  com.qianwen.smartman.modules.tool.service.impl.ToolModelServiceImpl,\
-  com.qianwen.smartman.modules.system.service.impl.RegionServiceImpl,\
-  com.qianwen.smartman.modules.system.service.impl.ApiResourceServiceImpl,\
-  com.qianwen.smartman.modules.fms.controller.FmsOrderProcessFixtureController,\
-  com.qianwen.smartman.common.config.BladeWebSocketConfiguration,\
-  com.qianwen.smartman.modules.sync.controller.OuterAppConfigController,\
-  com.qianwen.smartman.modules.system.controller.DataScopeManagerController,\
-  com.qianwen.smartman.modules.visual.service.impl.VisualDbServiceImpl,\
-  com.qianwen.smartman.modules.cps.controller.WorkstationWorkbenchController,\
-  com.qianwen.smartman.modules.cps.controller.MaintainProjectItemController,\
-  com.qianwen.smartman.modules.andon.service.impl.AndonRecordServiceImpl,\
-  com.qianwen.smartman.modules.cps.controller.BomProcessController,\
-  com.qianwen.smartman.modules.system.handler.password.account.LevelTwoAccountPasswordModifyStrategy,\
-  com.qianwen.smartman.modules.notify.controller.BusinessNotifyController,\
-  com.qianwen.smartman.modules.visual.dynamic.provider.MysqlCheckSqlProvider,\
-  com.qianwen.smartman.modules.system.controller.GalleryController,\
-  com.qianwen.smartman.modules.notify.service.impl.NotifyTaskServiceImpl,\
-  com.qianwen.smartman.modules.cps.service.impl.StockInTypeServiceImpl,\
-  com.qianwen.smartman.modules.cps.service.impl.CommonGroupOfItemServiceImpl,\
-  com.qianwen.smartman.modules.cps.service.impl.WorkstationWcsUsageServiceImpl,\
-  com.qianwen.smartman.modules.cps.message.producer.InsertWorkstationProducer,\
-  com.qianwen.smartman.modules.dnc.service.impl.DncArtFileServiceImpl,\
-  com.qianwen.smartman.modules.resource.service.impl.OssServiceImpl,\
-  com.qianwen.smartman.modules.resource.controller.OssController,\
-  com.qianwen.smartman.modules.cps.service.impl.MalfunctionTypeServiceImpl,\
-  com.qianwen.smartman.modules.perf.service.impl.EmployeePerfServiceImpl,\
-  com.qianwen.smartman.modules.cps.service.impl.TrayFixtureServiceImpl,\
-  com.qianwen.smartman.modules.mdc.controller.RealTimeDataController,\
-  com.qianwen.smartman.modules.visual.dynamic.DynamicDataSourceConfiguration,\
-  com.qianwen.smartman.modules.resource.controller.AttachController,\
-  com.qianwen.smartman.modules.cps.controller.ToolAppendixController,\
-  com.qianwen.smartman.modules.notify.manager.DefaultNotifyConfigManager,\
-  com.qianwen.smartman.modules.system.service.impl.CodeGeneratorServiceImpl,\
-  com.qianwen.smartman.modules.dnc.service.impl.DncProcessCatalogueServiceImpl,\
-  com.qianwen.smartman.modules.mdc.jobHandler.CacheNewCollectXxlJob,\
-  com.qianwen.smartman.modules.cps.service.impl.TraySurfaceServiceImpl,\
-  com.qianwen.smartman.modules.system.controller.CustomTemplateFieldRelationController,\
-  com.qianwen.smartman.modules.cps.controller.MaterialStorageController,\
-  com.qianwen.smartman.modules.mdc.service.impl.OutputStatisticsServiceImpl,\
-  com.qianwen.smartman.modules.cps.controller.WarehouseGridController,\
-  com.qianwen.smartman.modules.fms.service.impl.FmsProductionStatisticsServiceImpl,\
-  com.qianwen.smartman.modules.sync.message.sse.SseEmitterServer,\
-  com.qianwen.smartman.modules.dnc.controller.DncProcessCatalogueController,\
-  com.qianwen.smartman.modules.dnc.controller.DncArtBagController,\
-  com.qianwen.smartman.modules.cps.controller.MalfunctionTypeController,\
-  com.qianwen.smartman.modules.system.controller.ChartTestController,\
-  com.qianwen.smartman.modules.visual.controller.VisualDataSourceController,\
-  com.qianwen.smartman.modules.system.service.impl.WorkbenchTemplateCardServiceImpl,\
-  com.qianwen.smartman.modules.visual.service.impl.VisualStatusServiceImpl,\
-  com.qianwen.smartman.modules.cps.service.impl.ProcessServiceImpl,\
-  com.qianwen.smartman.modules.cps.controller.CheckProjectController,\
-  com.qianwen.smartman.modules.cps.controller.CalendarController,\
-  com.qianwen.smartman.modules.tpm.service.impl.CheckRecordServiceImpl,\
-  com.qianwen.smartman.modules.fms.service.impl.FmsOrderProcessFixtureServiceImpl,\
-  com.qianwen.smartman.common.config.SequenceConfig,\
-  com.qianwen.smartman.modules.system.service.impl.DataScopeServiceImpl,\
-  com.qianwen.smartman.modules.tool.service.impl.ToolParameterServiceImpl,\
-  com.qianwen.smartman.modules.cps.controller.ShiftOffDayController,\
-  com.qianwen.smartman.modules.sync.controller.DingEventCallBackController,\
-  com.qianwen.smartman.modules.auth.endpoint.BladeTokenEndPoint,\
-  com.qianwen.smartman.modules.cps.controller.ApplySettingsController,\
-  com.qianwen.smartman.modules.cps.controller.InitController,\
-  com.qianwen.smartman.modules.notify.manager.DefaultTemplateManager,\
-  com.qianwen.smartman.common.config.BladeLogConfiguration,\
-  com.qianwen.smartman.modules.notify.business.BusinessSendFactory,\
-  com.qianwen.smartman.modules.tpm.service.impl.RepairRecordServiceImpl,\
-  com.qianwen.smartman.modules.mdc.service.impl.TimeUsedAnalysisServiceImpl,\
-  com.qianwen.smartman.modules.system.service.impl.WorkbenchTemplateServiceImpl,\
-  com.qianwen.smartman.modules.cps.controller.WorkstationWcsController,\
-  com.qianwen.smartman.modules.perf.service.impl.EmployeeOnOffWorkServiceImpl,\
-  com.qianwen.smartman.modules.system.controller.InterfaceConfigFieldController,\
-  com.qianwen.smartman.modules.sync.controller.DingSyncController,\
-  com.qianwen.smartman.modules.cps.controller.ProductTypeController,\
-  com.qianwen.smartman.modules.dnc.service.impl.DncArchiveDirectoryServiceImpl,\
-  com.qianwen.smartman.modules.cps.controller.TrayController,\
-  com.qianwen.smartman.modules.cps.service.impl.BomMaterialServiceImpl,\
-  com.qianwen.smartman.modules.notify.service.impl.NoticeServiceImpl,\
-  com.qianwen.smartman.modules.notify.service.impl.NotifyDefaultPersonServiceImpl,\
-  com.qianwen.smartman.modules.cps.service.impl.CheckItemServiceImpl,\
-  com.qianwen.smartman.modules.tool.controller.ToolParameterController,\
-  com.qianwen.smartman.modules.system.service.impl.TopMenuServiceImpl,\
-  com.qianwen.smartman.modules.notify.service.impl.BusinessNotifyServiceImpl,\
-  com.qianwen.smartman.modules.notify.controller.NotifierConfigController,\
-  com.qianwen.smartman.modules.dmpLog.service.impl.DmpLogServiceImpl,\
-  com.qianwen.smartman.modules.cps.controller.WarehouseStationController,\
-  com.qianwen.smartman.modules.cps.service.impl.ProductionCraftProcessServiceImpl,\
-  com.qianwen.smartman.modules.cps.service.impl.ProductServiceImpl,\
-  com.qianwen.smartman.modules.system.handler.password.account.AccountPasswordModifyLink,\
-  com.qianwen.smartman.modules.cps.controller.WorkstationWcsUsageController,\
-  com.qianwen.smartman.modules.cps.service.impl.ShiftRestTimeServiceImpl,\
-  com.qianwen.smartman.modules.mdc.service.impl.WorkstationFeedbackDetailServiceImpl,\
-  com.qianwen.smartman.modules.tool.service.impl.ToolManageServiceImpl,\
-  com.qianwen.smartman.modules.mdc.service.impl.AlarmServiceImpl,\
-  com.qianwen.smartman.modules.cps.controller.ProductionCraftProcessController,\
-  com.qianwen.smartman.modules.tool.service.impl.ToolCategoryServiceImpl,\
-  com.qianwen.smartman.modules.cps.service.impl.MaintainItemServiceImpl,\
-  com.qianwen.smartman.modules.system.controller.UserController,\
-  com.qianwen.smartman.modules.cps.service.impl.EmployeeServiceImpl,\
-  com.qianwen.smartman.modules.system.controller.DictController,\
-  com.qianwen.smartman.modules.cps.controller.ProcessController,\
-  com.qianwen.smartman.modules.cps.service.impl.EmployeePostServiceImpl,\
-  com.qianwen.smartman.modules.tpm.controller.MaintainPlanController,\
-  com.qianwen.smartman.modules.report.controller.WorkstationAlarmController,\
-  com.qianwen.smartman.modules.resource.service.impl.SmsServiceImpl,\
-  com.qianwen.smartman.modules.system.service.impl.CustomTemplateFieldOptionServiceImpl,\
-  com.qianwen.smartman.modules.mdc.service.impl.StatusRecordServiceImpl,\
-  com.qianwen.smartman.modules.perf.controller.EmployeePerfController,\
-  com.qianwen.smartman.modules.trace.controller.TraceFlowSettingsController,\
-  com.qianwen.smartman.modules.tpm.jobHandler.MaintainPlanJob,\
-  com.qianwen.smartman.modules.cps.controller.CheckItemController,\
-  com.qianwen.smartman.common.config.BladeReportConfiguration,\
-  com.qianwen.smartman.modules.visual.service.impl.VisualServiceImpl,\
-  com.qianwen.smartman.modules.report.service.impl.WorkstationAlarmServiceImpl,\
-  com.qianwen.smartman.modules.andon.service.impl.AndonTypeServiceImpl,\
-  com.qianwen.smartman.modules.dnc.controller.DncArtBagLogController,\
-  com.qianwen.smartman.modules.cps.controller.MaterialController,\
-  com.qianwen.smartman.modules.tpm.controller.NotifyAgentController,\
-  com.qianwen.smartman.modules.cps.service.impl.StockOutTypeServiceImpl,\
-  com.qianwen.smartman.modules.mdc.service.impl.SuperNewCollectServiceImpl,\
-  com.qianwen.smartman.modules.system.service.impl.PostServiceImpl,\
-  com.qianwen.smartman.modules.coproduction.service.impl.PlanProcessServiceImpl,\
-  com.qianwen.smartman.modules.coproduction.service.impl.OrderServiceImpl,\
-  com.qianwen.smartman.modules.cps.service.impl.WorkstationServiceImpl,\
-  com.qianwen.smartman.modules.cps.controller.EnterpriseInformationController,\
-  com.qianwen.smartman.modules.dnc.service.impl.DockingFtpServiceImpl,\
-  com.qianwen.smartman.modules.dnc.service.impl.DncArtBagLogServiceImpl,\
-  com.qianwen.smartman.modules.system.service.impl.BasCoderuleServiceImpl,\
-  com.qianwen.smartman.modules.visual.controller.VisualCompController,\
-  com.qianwen.smartman.modules.system.service.impl.AuthClientServiceImpl,\
-  com.qianwen.smartman.modules.visual.controller.VisualGlobalApiController,\
-  com.qianwen.smartman.modules.cps.controller.WorkstationController,\
-  com.qianwen.smartman.modules.tpm.service.impl.CheckRecordItemServiceImpl,\
-  com.qianwen.smartman.modules.system.handler.password.account.AccountPasswordModifyFactory,\
-  com.qianwen.smartman.common.launch.SwaggerPlugin,\
-  com.qianwen.smartman.modules.fms.controller.FmsOrderProcessToolController,\
-  com.qianwen.smartman.modules.system.handler.password.init.InitPasswordModifyLink,\
-  com.qianwen.smartman.modules.cps.controller.WarehouseAreaController,\
-  com.qianwen.smartman.modules.dmpLog.controller.DmpLogController,\
-  com.qianwen.smartman.modules.system.service.impl.TopMenuSettingServiceImpl,\
-  com.qianwen.smartman.modules.visual.controller.VisualOutputController,\
-  com.qianwen.smartman.modules.notify.service.impl.NotifySystemServiceImpl,\
-  com.qianwen.smartman.common.config.BladePreviewConfiguration,\
-  com.qianwen.smartman.modules.trace.controller.NgReasonInfoController,\
-  com.qianwen.smartman.modules.resource.endpoint.SmsEndpointController,\
-  com.qianwen.smartman.modules.cps.service.impl.MaintainProjectItemServiceImpl,\
-  com.qianwen.smartman.modules.dnc.service.impl.FileServiceImpl,\
-  com.qianwen.smartman.modules.mdc.service.impl.WorkstationAnalysisServiceImpl,\
-  com.qianwen.smartman.modules.auth.granter.RefreshTokenGranter,\
-  com.qianwen.smartman.modules.notify.api.DingTalkApi,\
-  com.qianwen.smartman.modules.resource.config.BladeOssConfiguration,\
-  com.qianwen.smartman.modules.system.controller.SearchController,\
-  com.qianwen.smartman.modules.fms.controller.FmsOrderController,\
-  com.qianwen.smartman.modules.notify.controller.NotificationController,\
-  com.qianwen.smartman.modules.tool.controller.ToolCategoryController,\
-  com.qianwen.smartman.modules.mdc.service.impl.SuperAggregateOutputServiceImpl,\
-  com.qianwen.smartman.modules.mdc.controller.AlarmController,\
-  com.qianwen.smartman.modules.dnc.controller.DncFixedSpaceController,\
-  com.qianwen.smartman.modules.tpm.service.impl.RepairRecordFileServiceImpl,\
-  com.qianwen.smartman.modules.tpm.service.impl.CheckRecordFileServiceImpl,\
-  com.qianwen.smartman.modules.notify.business.MaintainOverdueBusinessSend,\
-  com.qianwen.smartman.modules.mdc.controller.WorkstationFeedbackController,\
-  com.qianwen.smartman.modules.visual.service.impl.VisualCompTypeServiceImpl,\
-  com.qianwen.smartman.modules.mdc.controller.EfficiencyAnalysisController,\
-  com.qianwen.smartman.modules.coproduction.service.impl.PlanServiceImpl,\
-  com.qianwen.smartman.modules.cps.controller.BomVersionController,\
-  com.qianwen.smartman.modules.mdc.service.impl.EfficiencyAnalysisServiceImpl,\
-  com.qianwen.smartman.modules.cps.service.impl.WorkstationWorkbenchServiceImpl,\
-  com.qianwen.smartman.modules.cps.service.impl.OrganizationServiceImpl,\
-  com.qianwen.smartman.common.websocket.fms.FmsVisualDataMessageHandler,\
-  com.qianwen.smartman.modules.system.handler.field.provider.DmSqlParseProvider,\
-  com.qianwen.smartman.modules.notify.controller.NotifySystemController,\
-  com.qianwen.smartman.modules.visual.controller.VisualDbController,\
-  com.qianwen.smartman.modules.andon.controller.AndonRecordReasonController,\
-  com.qianwen.smartman.modules.cps.jobHandler.WorkstationCalendarUpdateJob,\
-  com.qianwen.smartman.modules.coproduction.controller.PlanProcessController,\
-  com.qianwen.smartman.modules.system.controller.ApplicationController,\
-  com.qianwen.smartman.modules.fms.service.impl.FmsDeviceAnalysisServiceImpl,\
-  com.qianwen.smartman.modules.notify.business.MaintenanceWarningSend,\
-  com.qianwen.smartman.modules.system.controller.WorkbenchController,\
-  com.qianwen.smartman.modules.system.service.impl.GalleryItemServiceImpl,\
-  com.qianwen.smartman.modules.visual.service.impl.VisualOutputServiceImpl,\
-  com.qianwen.smartman.modules.system.controller.ThemeController,\
-  com.qianwen.smartman.modules.cps.service.impl.MaterialServiceImpl,\
-  com.qianwen.smartman.modules.cps.service.impl.WorkstationOfMachineServiceImpl,\
-  com.qianwen.smartman.modules.mdc.service.impl.StatisticsServiceImpl,\
-  com.qianwen.smartman.modules.system.service.impl.RoleMenuServiceImpl,\
-  com.qianwen.smartman.modules.dnc.controller.FolderController,\
-  com.qianwen.smartman.modules.cps.controller.MaterialTypeController,\
-  com.qianwen.smartman.modules.dnc.controller.DncArchiveDirectoryFileController,\
-  com.qianwen.smartman.modules.system.service.impl.DictServiceImpl,\
-  com.qianwen.smartman.modules.system.service.impl.TenantServiceImpl,\
-  com.qianwen.smartman.modules.notify.service.impl.NotifyHistoryServiceImpl,\
-  com.qianwen.smartman.modules.cps.controller.StockInTypeController,\
-  com.qianwen.smartman.modules.dnc.controller.DncFactoryFileController,\
-  com.qianwen.smartman.modules.sync.service.impl.DingSyncServiceImpl,\
-  com.qianwen.smartman.modules.cps.service.impl.ShiftModelServiceImpl,\
-  com.qianwen.smartman.modules.system.controller.CustomTemplateController,\
-  com.qianwen.smartman.modules.coproduction.service.impl.OrderWorkstationServiceImpl,\
-  com.qianwen.smartman.modules.dnc.controller.FileController,\
-  com.qianwen.smartman.modules.cps.service.impl.ProductionCraftProcessRelatedFixtureServiceImpl,\
-  com.qianwen.smartman.modules.system.service.impl.ParamServiceImpl,\
-  com.qianwen.smartman.modules.notify.message.rocket.RocketTaskConfiguration,\
-  com.qianwen.smartman.modules.resource.service.impl.AttachServiceImpl,\
-  com.qianwen.smartman.common.websocket.fms.FmsVisualDataFilter,\
-  com.qianwen.smartman.modules.mdc.service.impl.WorkstationFeedbackServiceImpl,\
-  com.qianwen.smartman.modules.visual.wrapper.OutputWrapper,\
-  com.qianwen.smartman.modules.system.controller.I18nDataController,\
-  com.qianwen.smartman.modules.auth.granter.CaptchaTokenGranter,\
-  com.qianwen.smartman.modules.cps.service.impl.CalendarDaytimeServiceImpl,\
-  com.qianwen.smartman.modules.andon.service.impl.AndonCallRecordServiceImpl,\
-  com.qianwen.smartman.modules.system.controller.GalleryItemController,\
-  com.qianwen.smartman.modules.coproduction.controller.OrderProcessController,\
-  com.qianwen.smartman.modules.visual.dynamic.provider.OracleCheckSqlProvider,\
-  com.qianwen.smartman.modules.fms.service.impl.FmsWorkStationRecordServiceImpl,\
-  com.qianwen.smartman.modules.sync.handler.RequestParameterFilter,\
-  com.qianwen.smartman.modules.system.service.impl.UserOauthServiceImpl,\
-  com.qianwen.smartman.modules.system.handler.password.init.LevelTwoInitPasswordModifyStrategy,\
-  com.qianwen.smartman.modules.andon.controller.AndonTypeController,\
-  com.qianwen.smartman.modules.visual.service.impl.VisualConfigServiceImpl,\
-  com.qianwen.smartman.modules.auth.service.OuterAppScanService,\
-  com.qianwen.smartman.modules.cps.service.impl.TrayServiceImpl,\
-  com.qianwen.smartman.modules.dnc.controller.DncDirectorySettingsController,\
-  com.qianwen.smartman.modules.tpm.controller.CheckRecordController,\
-  com.qianwen.smartman.modules.report.service.impl.OutputStatisticsReportServiceImpl,\
-  com.qianwen.smartman.modules.cps.controller.TraySurfaceController,\
-  com.qianwen.smartman.modules.system.service.impl.UserSearchServiceImpl,\
-  com.qianwen.smartman.modules.system.service.impl.LogUsualServiceImpl,\
-  com.qianwen.smartman.modules.visual.service.impl.VisualCategoryServiceImpl,\
-  com.qianwen.smartman.modules.auth.endpoint.MicroAppAuthEndpoint,\
-  com.qianwen.smartman.modules.dnc.controller.DncArtFileController,\
-  com.qianwen.smartman.modules.dnc.service.impl.DncArtBagServiceImpl,\
-  com.qianwen.smartman.modules.cps.service.impl.CraftRoutingServiceImpl,\
-  com.qianwen.smartman.modules.dnc.service.impl.TransferDirectoryGroupServiceImpl,\
-  com.qianwen.smartman.modules.dmpLog.message.consumer.DmpLogSyncConsumer,\
-  com.qianwen.smartman.modules.system.service.impl.CustomTemplateFieldServiceImpl,\
-  com.qianwen.smartman.modules.fms.service.impl.FmsOrderProcessToolServiceImpl,\
-  com.qianwen.smartman.modules.mdc.wrapper.StatisticsWrapper,\
-  com.qianwen.smartman.modules.andon.controller.AndonReasonController,\
-  com.qianwen.smartman.modules.cps.service.impl.BomProcessServiceImpl,\
-  com.qianwen.smartman.modules.cps.service.impl.WarehouseStationServiceImpl,\
-  com.qianwen.smartman.modules.system.controller.PostController,\
-  com.qianwen.smartman.modules.fms.controller.FmsOrderProcessController,\
-  com.qianwen.smartman.modules.coproduction.service.impl.OrderReportRecordServiceImpl,\
-  com.qianwen.smartman.modules.notify.controller.NoticeController,\
-  com.qianwen.smartman.modules.system.service.impl.DictBizServiceImpl,\
-  com.qianwen.smartman.modules.cps.controller.OrganizationController,\
-  com.qianwen.smartman.modules.dnc.controller.HmiDncController,\
-  com.qianwen.smartman.modules.system.service.impl.CustomTemplateServiceImpl,\
-  com.qianwen.smartman.modules.tpm.service.impl.MaintainRecordServiceImpl,\
-  com.qianwen.smartman.modules.cps.controller.StockOutTypeController,\
-  com.qianwen.smartman.modules.system.service.impl.ApplicationServiceImpl,\
-  com.qianwen.smartman.modules.system.service.impl.RoleScopeServiceImpl,\
-  com.qianwen.smartman.modules.cps.service.impl.CheckProjectServiceImpl,\
-  com.qianwen.smartman.modules.system.service.impl.I18nDataServiceImpl,\
-  com.qianwen.smartman.modules.visual.service.impl.VisualMapServiceImpl,\
-  com.qianwen.smartman.modules.resource.config.BladeSmsConfiguration,\
-  com.qianwen.smartman.modules.andon.controller.DeviceAndonTypeController,\
-  com.qianwen.smartman.modules.cps.service.impl.ToolAppendixServiceImpl,\
-  com.qianwen.smartman.modules.auth.service.MicroAppAuthService,\
-  com.qianwen.smartman.modules.fms.service.impl.FmsAbnormalServiceImpl,\
-  com.qianwen.smartman.modules.cps.service.impl.ShiftDetailServiceImpl,\
-  com.qianwen.smartman.modules.notify.business.RepairApplySend,\
-  com.qianwen.smartman.modules.notify.service.impl.NotifyConfigServiceImpl,\
-  com.qianwen.smartman.modules.visual.controller.VisualCompTypeController,\
-  com.qianwen.smartman.modules.system.controller.MenuController,\
-  com.qianwen.smartman.modules.coproduction.Config.MybatisPlusConfig,\
-  com.qianwen.smartman.modules.cps.service.impl.EnterpriseInformationServiceImpl,\
-  com.qianwen.smartman.modules.fms.controller.FmsDeviceAnalysisController,\
-  com.qianwen.smartman.modules.cps.controller.DeviceTypeController,\
-  com.qianwen.smartman.modules.tool.service.impl.ToolChangeRecordServiceImpl,\
-  com.qianwen.smartman.modules.trace.controller.TraceRecordNgReasonController,\
-  com.qianwen.smartman.modules.tool.controller.ToolManageController,\
-  com.qianwen.smartman.modules.system.handler.password.account.LevelOneAccountPasswordModifyStrategy,\
-  com.qianwen.smartman.modules.andon.service.impl.AndonStatisticsServiceImpl,\
-  com.qianwen.smartman.modules.sync.service.impl.WechatSyncServiceImpl,\
-  com.qianwen.smartman.common.config.JmConfiguration,\
-  com.qianwen.smartman.modules.cps.controller.CraftRoutingController,\
-  com.qianwen.smartman.modules.andon.controller.AndonStatisticsController,\
-  com.qianwen.smartman.modules.notify.business.AndonTakeOverSend,\
-  com.qianwen.smartman.modules.mdc.service.impl.CollectDataServiceImpl,\
-  com.qianwen.smartman.modules.dnc.controller.TransferDirectorController,\
-  com.qianwen.smartman.modules.system.service.impl.UserServiceImpl,\
-  com.qianwen.smartman.modules.cps.controller.ProductionCraftVersionController,\
-  com.qianwen.smartman.modules.visual.dynamic.provider.DmCheckSqlProvider,\
-  com.qianwen.smartman.modules.system.service.impl.ResourceDefinitionServiceImpl,\
-  com.qianwen.smartman.modules.visual.service.impl.VisualCompServiceImpl,\
-  com.qianwen.smartman.modules.notify.service.impl.BusinessNotifyStateServiceImpl,\
-  com.qianwen.smartman.Application,\
-  com.qianwen.smartman.modules.dnc.controller.DncWsRelationTdController,\
-  com.qianwen.smartman.modules.sync.message.consumer.QyWechatSyncConsumer,\
-  com.qianwen.smartman.modules.andon.service.impl.DeviceAndonTypeServiceImpl,\
-  com.qianwen.smartman.modules.coproduction.controller.OrderReportRecordController,\
-  com.qianwen.smartman.modules.system.controller.InterfaceConfigController,\
-  com.qianwen.smartman.modules.dnc.controller.DncArtProductController,\
-  com.qianwen.smartman.modules.cps.service.impl.CraftVersionLineServiceImpl,\
-  com.qianwen.smartman.modules.andon.controller.AndonRecordController,\
-  com.qianwen.smartman.modules.system.controller.ParamController,\
-  com.qianwen.smartman.modules.visual.controller.VisualMapController,\
-  com.qianwen.smartman.modules.cps.service.impl.CommonGroupServiceImpl,\
-  com.qianwen.smartman.modules.tpm.service.impl.RepairApplyFileServiceImpl,\
-  com.qianwen.smartman.modules.visual.controller.VisualController,\
-  com.qianwen.smartman.modules.system.service.impl.MetaObjectTypeServiceImpl,\
-  com.qianwen.smartman.modules.mdc.service.impl.RealTimeDataServiceImpl,\
-  com.qianwen.smartman.modules.sync.service.impl.WechatCallbackServiceImpl,\
-  com.qianwen.smartman.modules.dnc.service.impl.DncFixedSpaceServiceImpl,\
-  com.qianwen.smartman.modules.notify.controller.NotifierTemplateController,\
-  com.qianwen.smartman.modules.system.controller.DictBizController,\
-  com.qianwen.smartman.modules.cps.controller.BomMaterialController,\
-  com.qianwen.smartman.modules.perf.service.impl.EmployeeSendServiceImpl,\
-  com.qianwen.smartman.modules.tool.controller.ToolChangeRecordController,\
-  com.qianwen.smartman.modules.cps.controller.MachineController,\
-  com.qianwen.smartman.modules.fms.service.impl.FmsOrderServiceImpl,\
-  com.qianwen.smartman.modules.tpm.controller.MaintainRecordController,\
-  com.qianwen.smartman.modules.tpm.service.impl.DeviceMaterialRecordServiceImpl,\
-  com.qianwen.smartman.modules.system.service.impl.UserDeptServiceImpl,\
-  com.qianwen.smartman.modules.cps.controller.ProcessAssociationController,\
-  com.qianwen.smartman.modules.cps.controller.TrayFixtureController,\
-  com.qianwen.smartman.modules.resource.controller.SmsController,\
-  com.qianwen.smartman.modules.dnc.service.impl.TransferDirectoryFileServiceImpl,\
-  com.qianwen.smartman.modules.trace.service.impl.TraceFlowSettingsServiceImpl,\
-  com.qianwen.smartman.modules.cps.service.impl.ProductTypeServiceImpl,\
-  com.qianwen.smartman.modules.tpm.service.impl.MaintainPlanItemServiceImpl,\
-  com.qianwen.smartman.modules.cps.service.impl.DeviceCheckServiceImpl,\
-  com.qianwen.smartman.modules.notify.websocket.InternalMessageDataJsonMessageHandler,\
-  com.qianwen.smartman.modules.system.init.FmsInitBean,\
-  com.qianwen.smartman.modules.system.service.impl.InterfaceConfigServiceImpl,\
-  com.qianwen.smartman.modules.system.service.impl.WorkbenchServiceImpl,\
-  com.qianwen.smartman.modules.system.controller.BasCoderuleController,\
-  com.qianwen.smartman.modules.auth.granter.PasswordTokenGranter,\
-  com.qianwen.smartman.modules.system.service.impl.GalleryServiceImpl,\
-  com.qianwen.smartman.modules.notify.manager.NotifyBusinessManager,\
-  com.qianwen.smartman.modules.system.service.impl.InterfaceConfigFieldServiceImpl,\
-  com.qianwen.smartman.modules.cps.service.impl.ShiftOffDayServiceImpl,\
-  com.qianwen.smartman.modules.notify.jobHandler.BusinessNotifyJob,\
-  com.qianwen.smartman.modules.mdc.controller.WorkstationAnalysisController,\
-  com.qianwen.smartman.modules.cps.service.impl.CalendarServiceImpl,\
-  com.qianwen.smartman.modules.cps.controller.ProductController,\
-  com.qianwen.smartman.modules.system.controller.RoleController,\
-  com.qianwen.smartman.modules.fms.controller.FmsWorkStationRecordController,\
-  com.qianwen.smartman.modules.system.handler.password.account.LevelZeroAccountPasswordModifyStrategy,\
-  com.qianwen.smartman.modules.fms.service.impl.FmsOrderProcessServiceImpl,\
-  com.qianwen.smartman.modules.system.handler.field.provider.OracleSqlParseProvider,\
-  com.qianwen.smartman.modules.coproduction.controller.OrderWorkstationController,\
-  com.qianwen.smartman.modules.cps.service.impl.InitServiceImpl,\
-  com.qianwen.smartman.modules.cps.service.impl.ProductionCraftVersionServiceImpl,\
-  com.qianwen.smartman.modules.trace.service.impl.TraceRelatedWorkstationServiceImpl,\
-  com.qianwen.smartman.modules.system.handler.password.init.LevelOneInitPasswordModifyStrategy,\
-  com.qianwen.smartman.modules.cps.service.impl.ProductionCraftProcessFileServiceImpl,\
-  com.qianwen.smartman.modules.cps.jobHandler.FmsPushDataJob,\
-  com.qianwen.smartman.modules.resource.service.impl.SystemResourceServiceImpl,\
-  com.qianwen.smartman.modules.trace.service.impl.TraceFlowRecordServiceImpl,\
-  com.qianwen.smartman.modules.perf.controller.EmployeeOnOffWorkLogController,\
-  com.qianwen.smartman.modules.system.controller.WorkbenchCardController,\
-  com.qianwen.smartman.modules.dmpLog.jobHandler.DmpLogRegularCleanJob,\
-  com.qianwen.smartman.modules.auth.endpoint.ResourceTokenEndPoint,\
-  com.qianwen.smartman.modules.fms.service.impl.FmsRealTimeTrayServiceImpl,\
-  com.qianwen.smartman.modules.system.service.impl.CustomTemplateFieldRelationServiceImpl,\
-  com.qianwen.smartman.modules.cps.message.consumer.TelemetryDataRealTimeConsumer,\
-  com.qianwen.smartman.modules.cps.service.impl.ProductionCraftProcessRelatedToolServiceImpl,\
-  com.qianwen.smartman.modules.system.controller.LogApiController,\
-  com.qianwen.smartman.modules.cps.controller.SupplierController,\
-  com.qianwen.smartman.modules.tpm.service.impl.MaintainPlanServiceImpl,\
-  com.qianwen.smartman.modules.sync.controller.QyWechatEventCallBackController,\
-  com.qianwen.smartman.modules.system.service.impl.LogErrorServiceImpl,\
-  com.qianwen.smartman.modules.dnc.service.impl.DncDirectorySettingsServiceImpl,\
-  com.qianwen.smartman.modules.cps.controller.EmployeeController,\
-  com.qianwen.smartman.modules.dnc.controller.DncOperationLogController,\
-  com.qianwen.smartman.modules.auth.service.SocialDbProperties,\
-  com.qianwen.smartman.modules.mdc.config.TheadPoolTaskConfig,\
-  com.qianwen.smartman.modules.fms.controller.FmsScheduleController,\
-  com.qianwen.smartman.modules.fms.controller.FmsProductionStatisticsController,\
-  com.qianwen.smartman.modules.system.service.impl.DataScopeManagerServiceImpl,\
-  com.qianwen.smartman.modules.notify.service.impl.NotifySubscriberServiceImpl,\
-  com.qianwen.smartman.modules.cps.service.impl.MaintainProjectServiceImpl,\
-  com.qianwen.smartman.modules.trace.service.impl.NgReasonInfoServiceImpl,\
-  com.qianwen.smartman.modules.sync.controller.SseEmitterController,\
-  com.qianwen.smartman.modules.tpm.controller.RepairRecordController,\
-  com.qianwen.smartman.modules.andon.service.impl.AndonRecordReasonServiceImpl,\
-  com.qianwen.smartman.modules.system.service.impl.BasCoderuleEntryServiceImpl,\
-  com.qianwen.smartman.modules.visual.controller.VisualStatusController,\
-  com.qianwen.smartman.modules.auth.granter.SocialTokenGranter,\
-  com.qianwen.smartman.modules.cps.controller.MaintainItemController,\
-  com.qianwen.smartman.modules.mdc.controller.ProcessParameterController,\
-  com.qianwen.smartman.modules.dnc.controller.TransferDirectoryFileController,\
-  com.qianwen.smartman.modules.andon.service.impl.AndonReasonServiceImpl,\
-  com.qianwen.smartman.modules.system.service.impl.ParamBizServiceImpl,\
-  com.qianwen.smartman.modules.mdc.controller.TimeUsedAnalysisController,\
-  com.qianwen.smartman.modules.notify.controller.NotifierController,\
-  com.qianwen.smartman.modules.coproduction.controller.OrderController,\
-  com.qianwen.smartman.modules.cps.controller.ShiftController,\
-  com.qianwen.smartman.modules.resource.endpoint.OssEndpointController,\
-  com.qianwen.smartman.modules.cps.service.impl.InitBusinessServiceImpl,\
-  com.qianwen.smartman.modules.system.service.impl.LogApiServiceImpl,\
-  com.qianwen.smartman.modules.dnc.service.impl.DncArtProductServiceImpl,\
-  com.qianwen.smartman.modules.system.controller.AuthClientController,\
-  com.qianwen.smartman.modules.notify.service.impl.NotifyTemplateServiceImpl,\
-  com.qianwen.smartman.modules.trace.service.impl.TraceRecordNgReasonServiceImpl
diff --git a/smart-man-boot/src/main/resources/application-dev.yml b/smart-man-boot/src/main/resources/application-dev.yml
index 30efa8e..eefff2e 100644
--- a/smart-man-boot/src/main/resources/application-dev.yml
+++ b/smart-man-boot/src/main/resources/application-dev.yml
@@ -15,6 +15,7 @@
   password: Kknd_1234
   driver-class-name: com.mysql.cj.jdbc.Driver
 
+debug: ture
 #datasource:
 #  type: oracle
 #  url: jdbc:${datasource.type}:thin:@192.168.3.117:${datasource.port}:orclcdb
@@ -58,8 +59,8 @@
     executor:
       appname: phoenix
       ip:
-      # 閮ㄧ讲39锛屼复鏃惰皟鏁� 7017 -> 7117
-      port: 7079
+      # 閮ㄧ讲39锛屼复鏃惰皟鏁� 7079ori
+      port: 7089
       ### xxl-job log path
       logpath: /data/applogs/xxl-job/jobhandler
       ### xxl-job log retention days
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/BomMaterialMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/BomMaterialMapper.xml
new file mode 100644
index 0000000..a4c8634
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/BomMaterialMapper.xml
@@ -0,0 +1,100 @@
+<?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.qianwen.smartman.modules.cps.mapper.BomMaterialMapper">
+
+    <!--    bom鐗╂枡璇︽儏-->
+    <select id="detail" resultType="com.qianwen.smartman.modules.cps.vo.BomMaterialDetailVO">
+        SELECT bm.version_id,
+               bm.material_id,
+               bm.parent_id,
+               bm.all_path,
+               bm.remark,
+               bm.id,
+               m.CODE       AS materialCode,
+               m.NAME       AS materialName,
+               m.standard_model,
+               m.unit,
+               m.type_id    AS materialTypeId,
+               mt.NAME      AS materialTypeName,
+               m.property,
+               d.dict_value AS propertyName,
+               m.is_must_check,
+               m.lower_limit,
+               m.upper_limit
+        FROM blade_bom_material bm
+                 LEFT JOIN blade_material m ON bm.material_id = m.id
+            AND m.is_deleted = 0
+                 LEFT JOIN blade_material_type mt ON m.type_id = mt.id
+            AND mt.is_deleted = 0
+                 LEFT JOIN blade_dict d ON m.property = d.dict_key
+            AND d.CODE = 'material_property'
+            AND d.is_deleted = 0
+        WHERE bm.is_deleted = 0
+          AND bm.id = #{id}
+    </select>
+
+    <!--    BOM鐗╂枡鍒楄〃-->
+    <select id="list" resultType="com.qianwen.smartman.modules.cps.vo.BomMaterialDetailVO">
+        SELECT bm.version_id,
+        bm.material_id,
+        bm.parent_id,
+        bm.all_path,
+        bm.remark,
+        bm.id,
+        m.CODE AS materialCode,
+        m.NAME AS materialName,
+        m.standard_model,
+        m.unit,
+        m.type_id AS materialTypeId,
+        mt.NAME AS materialTypeName,
+        m.property,
+        d.dict_value AS propertyName,
+        m.is_must_check,
+        m.lower_limit,
+        m.upper_limit
+        FROM blade_bom_material bm
+        LEFT JOIN blade_material m ON bm.material_id = m.id
+        AND m.is_deleted = 0
+        LEFT JOIN blade_material_type mt ON m.type_id = mt.id
+        AND mt.is_deleted = 0
+        LEFT JOIN blade_dict d ON m.property = d.dict_key
+        AND d.CODE = 'material_property'
+        AND d.is_deleted = 0
+        WHERE bm.is_deleted = 0
+        AND bm.version_id = #{params.versionId}
+    </select>
+
+    <!--    BOM鐗╂枡鍒楄〃(鍒嗛〉)-->
+    <select id="page" resultType="com.qianwen.smartman.modules.cps.vo.BomMaterialDetailVO">
+        SELECT bm.version_id,
+        bm.material_id,
+        bm.parent_id,
+        bm.all_path,
+        bm.remark,
+        bm.id,
+        m.CODE AS materialCode,
+        m.NAME AS materialName,
+        m.standard_model,
+        m.unit,
+        m.type_id AS materialTypeId,
+        mt.NAME AS materialTypeName,
+        m.property,
+        d.dict_value AS propertyName,
+        m.is_must_check,
+        m.lower_limit,
+        m.upper_limit
+        FROM blade_bom_material bm
+        LEFT JOIN blade_material m ON bm.material_id = m.id
+        AND m.is_deleted = 0
+        LEFT JOIN blade_material_type mt ON m.type_id = mt.id
+        AND mt.is_deleted = 0
+        LEFT JOIN blade_dict d ON m.property = d.dict_key
+        AND d.CODE = 'material_property'
+        AND d.is_deleted = 0
+        WHERE bm.is_deleted = 0
+        <if test="params.versionId != null and params.versionId != ''">
+            AND bm.version_id = #{params.versionId}
+        </if>
+    </select>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/BomProcessMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/BomProcessMapper.xml
new file mode 100644
index 0000000..e63eeab
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/BomProcessMapper.xml
@@ -0,0 +1,47 @@
+<?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.qianwen.smartman.modules.cps.mapper.BomProcessMapper">
+
+    <!--    鏍规嵁bom鐗╂枡id鑾峰緱bom宸ュ簭-->
+    <select id="getBomProcessDetailVOList" resultType="com.qianwen.smartman.modules.cps.vo.BomProcessDetailVO">
+        SELECT bp.bom_material_id,
+        bp.molecule,
+        bp.denominator,
+        bp.process_id,
+        p.CODE AS processCode,
+        p.NAME AS processName,
+        bp.loss,
+        bp.id
+        FROM blade_bom_process bp
+        LEFT JOIN blade_production_craft_process cp ON bp.process_id = cp.id
+        AND cp.is_deleted = 0
+        LEFT JOIN blade_process p ON cp.process_id = p.id
+        AND p.is_deleted = 0
+        WHERE bp.is_deleted = 0
+        <if test="params.bomMaterialId != null and params.bomMaterialId != ''">
+            AND bp.bom_material_id = #{params.bomMaterialId}
+        </if>
+    </select>
+
+    <!--    鏍规嵁bom鐗╂枡id鑾峰緱bom宸ュ簭锛堝垎椤碉級-->
+    <select id="getBomProcessDetailVOPage" resultType="com.qianwen.smartman.modules.cps.vo.BomProcessDetailVO">
+        SELECT bp.bom_material_id,
+        bp.molecule,
+        bp.denominator,
+        bp.process_id,
+        p.CODE AS processCode,
+        p.NAME AS processName,
+        bp.loss,
+        bp.id
+        FROM blade_bom_process bp
+        LEFT JOIN blade_production_craft_process cp ON bp.process_id = cp.id
+        AND cp.is_deleted = 0
+        LEFT JOIN blade_process p ON cp.process_id = p.id
+        AND p.is_deleted = 0
+        WHERE bp.is_deleted = 0
+        <if test="params.bomMaterialId != null and params.bomMaterialId != ''">
+            AND bp.bom_material_id = #{params.bomMaterialId}
+        </if>
+    </select>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/BomVersionMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/BomVersionMapper.xml
new file mode 100644
index 0000000..f767481
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/BomVersionMapper.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.qianwen.smartman.modules.cps.mapper.BomVersionMapper">
+    <!--    鑾峰緱Bom鐗堟湰璇︽儏-->
+    <select id="getVersionById" resultType="com.qianwen.smartman.modules.cps.vo.BomVersionDetailVO">
+        SELECT v.version,
+               v.description,
+               v.product_id,
+               u.account  AS createUser,
+               v.create_time,
+               u1.account AS updateUser,
+               v.update_time
+        FROM blade_bom_version v
+                 LEFT JOIN blade_user u ON v.create_user = u.id
+                 LEFT JOIN blade_user u1 ON v.update_user = u1.id
+        WHERE v.is_deleted = 0
+          AND v.id = #{id}
+    </select>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/CalendarDayMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/CalendarDayMapper.xml
new file mode 100644
index 0000000..ecf908b
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/CalendarDayMapper.xml
@@ -0,0 +1,38 @@
+<?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.qianwen.smartman.modules.cps.mapper.CalendarDayMapper">
+
+    <delete id="deleteByCalendarId">
+        delete
+        from blade_production_calendar_day
+        where calendar_id = #{id}
+          and calendar_date > #{localDate}
+    </delete>
+
+
+    <insert id="saveBatchDay" parameterType="java.util.List">
+        insert into blade_production_calendar_day
+        (id,calendar_id,calendar_date,start_time,end_time,model_id,is_deleted,week,month
+        ,year,is_high_priority,is_off_day,off_id)
+        values
+        <foreach collection="list" item="item" index="index" separator=",">
+            (
+            #{item.id},
+            #{item.calendarId},
+            #{item.calendarDate},
+            #{item.startTime},
+            #{item.endTime},
+            #{item.modelId},
+            #{item.isDeleted},
+            #{item.week},
+            #{item.month},
+            #{item.year},
+            #{item.isHighPriority},
+            #{item.isOffDay},
+            #{item.offId}
+            )
+        </foreach>
+
+    </insert>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/CalendarDaytimeMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/CalendarDaytimeMapper.xml
new file mode 100644
index 0000000..64f718f
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/CalendarDaytimeMapper.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.qianwen.smartman.modules.cps.mapper.CalendarDaytimeMapper">
+
+    <insert id="saveBatchDaytime" parameterType="java.util.List">
+        insert into blade_production_calendar_daytime
+        (id,calendar_id,calendar_day_id,calendar_date,start_time,end_time,shift_index,shift_type,week,month ,year
+        ,create_time,create_user,is_high_priority,is_undefined)
+        values
+        <foreach collection="list" item="item" index="index" separator=",">
+            (
+            #{item.id},
+            #{item.calendarId},
+            #{item.calendarDayId},
+            #{item.calendarDate},
+            #{item.startTime},
+            #{item.endTime},
+            #{item.shiftIndex},
+            #{item.shiftType},
+            #{item.week},
+            #{item.month},
+            #{item.year},
+            #{item.createTime},
+            #{item.createUser},
+            #{item.isHighPriority},
+            #{item.isUndefined}
+            )
+        </foreach>
+
+    </insert>
+
+    <delete id="deleteByCalendarId">
+        delete
+        from blade_production_calendar_daytime
+        where calendar_id = #{id}
+          and calendar_date > #{localDate}
+    </delete>
+
+    <delete id="deleteByCalendarDate">
+        delete
+        from blade_production_calendar_daytime
+        where calendar_date = #{localDate}
+          and calendar_id = #{calendarId}
+    </delete>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/CalendarMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/CalendarMapper.xml
new file mode 100644
index 0000000..d2f6212
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/CalendarMapper.xml
@@ -0,0 +1,174 @@
+<?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.qianwen.smartman.modules.cps.mapper.CalendarMapper">
+    <resultMap id="calendarMap" type="com.qianwen.smartman.modules.cps.vo.CalendarVO">
+        <id column="id" property="id"/>
+        <result column="code" property="code"/>
+        <result column="name" property="name"/>
+        <result column="year" property="year"/>
+        <result column="status" property="status"/>
+        <collection property="calendarDayVOList" ofType="com.qianwen.smartman.modules.cps.vo.CalendarDayVO">
+            <id column="calendarDayId" property="id"/>
+            <result column="calendar_date" property="calendarDate"/>
+            <result column="model_id" property="modelId"/>
+            <result column="is_high_priority" property="isHighPriority"/>
+            <result column="isOffDay" property="isOffDay"/>
+            <result column="modelName" property="modelName"/>
+            <result column="offDayRemark" property="offDayRemark"/>
+        </collection>
+    </resultMap>
+
+    <!--鏌ヨ鐝妯″瀷璇︽儏-->
+    <select id="getCalendarDetail" resultMap="calendarMap">
+        select
+        t1.id,
+        t1.code,
+        t1.name,
+        t1.year,
+        t1.status,
+        t2.id as calendarDayId,
+        t2.calendar_date,
+        t2.model_id,
+        t2.is_high_priority,
+        t3.name as modelName,
+        IFNULL(t2.is_off_day, 0) isOffDay,
+        t4.remark offDayRemark
+        from blade_production_calendar t1
+        left join blade_production_calendar_day t2 on t1.id = t2.calendar_id
+        left join blade_shift_model t3 on t2.model_id = t3.id
+        left join blade_shift_off_day t4 on t2.is_off_day = 1 and t2.off_id = t4.id
+        <where>
+            t1.id = #{calendarId}
+        </where>
+        order by t2.calendar_date
+    </select>
+
+    <select id="getShiftIndexNameByCodeAndYear" resultType="java.lang.String">
+        SELECT distinct sd.index_name
+        FROM blade_production_calendar pc
+                 LEFT JOIN blade_production_calendar_day pdc ON pc.id = pdc.calendar_id AND pdc.is_deleted = 0
+                 LEFT JOIN blade_shift_detail sd on pdc.model_id = sd.model_id
+        WHERE pc.code = #{calendarCode}
+          AND pc.year = #{year}
+          AND pdc.calendar_date = #{factoryDate}
+          AND pc.tenant_id = #{tenantId}
+          AND sd.shift_index = #{shiftIndex}
+          AND pc.is_deleted = 0
+    </select>
+
+    <select id="expireCalendarInfo" resultType="java.lang.String">
+        select
+        <if test="_databaseId == 'mysql' ">
+            GROUP_CONCAT(code)
+        </if>
+        <if test="_databaseId == 'dm' ">
+            WM_CONCAT(code)
+        </if>
+        <if test="_databaseId == 'oracle' ">
+            LISTAGG(to_char(CODE)) WITHIN GROUP(ORDER BY CODE)
+        </if>
+        from blade_production_calendar t1
+        where NOT EXISTS(
+        SELECT code FROM blade_production_calendar t2 WHERE t1.code = t2.code and t1.year + 1 = t2.year)
+        and year = #{year}
+        and is_deleted = 0
+    </select>
+
+    <select id="queryShiftIndexName" resultType="com.qianwen.smartman.modules.mdc.dto.ShiftIndexNameDTO">
+        SELECT sd.shift_index as shiftIndex,
+        sd.index_name as shiftIndexName,
+        IF(ISNULL(sd.index_name)=1 or LENGTH(trim(sd.index_name))<![CDATA[<]]> 1,concat('鐝',sd.shift_index),sd.index_name) as indexName
+        FROM blade_production_calendar pc
+                 INNER JOIN blade_production_calendar_day pdc
+                            ON pc.id = pdc.calendar_id AND pdc.is_deleted = 0 AND pdc.calendar_date = #{day}
+                 LEFT JOIN blade_shift_detail sd on pdc.model_id = sd.model_id
+        WHERE pc.code = #{calendarCode}
+          AND pc.year = #{year}
+          AND pc.is_deleted = 0
+    </select>
+
+    <select id="getShiftModelByFactoryDay" resultType="java.lang.Long">
+        select b.model_id
+        from blade_production_calendar a
+                 left join blade_production_calendar_day b on a.id = b.calendar_id
+        where a.year = #{year}
+          and a.code = #{calendarCode}
+          and b.calendar_date = #{factoryDay}
+          and a.is_deleted = 0
+          and b.is_deleted = 0
+    </select>
+    <select id="listShiftInfo" resultType="com.qianwen.smartman.modules.cps.dto.ShiftInfoDTO">
+        SELECT
+        b.calendar_date date,
+        c.shift_index shiftIndex,
+        c.index_name indexName,
+        c.shift_start_time startTime,
+        c.shift_end_time endTime,
+        d.id workstationId,
+        b.model_id modelId
+        FROM
+        blade_production_calendar a
+        LEFT JOIN blade_production_calendar_day b ON a.id = b.calendar_id
+        LEFT JOIN blade_shift_detail c on b.model_id = c.model_id
+        LEFT JOIN blade_workstation d ON d.calendar_code = a.code
+        WHERE b.calendar_date BETWEEN #{startDay} AND #{endDay}
+        and a.is_deleted = 0
+        and b.is_deleted = 0
+        and a.code IN (
+        SELECT DISTINCT( d.calendar_code )
+        FROM blade_workstation d
+        WHERE d.id IN
+        <foreach collection="workstationIdList" item="workstationId" index="index" open="(" close=")" separator=",">
+            #{workstationId}
+        </foreach>
+        )
+        AND d.id IN
+        <foreach collection="workstationIdList" item="workstationId" index="index" open="(" close=")" separator=",">
+            #{workstationId}
+        </foreach>
+    </select>
+
+    <select id="getShiftDetailDates" resultType="com.qianwen.smartman.modules.cps.vo.ShiftTimeDetailVO">
+        select bpcd.calendar_date as calendarDate,
+               bsd.id as id,
+               bsd.model_id as modelId,
+               shift_index as shiftIndex,
+               shift_start_time as shiftStartTime,
+               shift_end_time as shiftEndTime,
+               rest_number as restNumber,
+               index_name as indexName,
+               bsm.colour as colour
+        from blade_production_calendar bpc
+                 INNER JOIN blade_production_calendar_day bpcd on bpc.id = bpcd.calendar_id
+                 INNER JOIN blade_shift_detail bsd on bpcd.model_id = bsd.model_id
+                 LEFT JOIN blade_shift_model bsm on bsd.model_id = bsm.id and bsm.is_deleted = 0
+        where ${ew.sqlSegment}
+    </select>
+
+    <select id="getTimeShiftAll" resultType="com.qianwen.smartman.modules.cps.dto.CalendarShiftDTO">
+        select bpcd.calendar_date, bsd.shift_start_time, bsd.shift_end_time, bsd.shift_index, bsd.index_name
+        from blade_production_calendar bpc
+                 inner join blade_production_calendar_day bpcd on bpc.id = bpcd.calendar_id
+                 inner join blade_shift_detail bsd on bpcd.model_id = bsd.model_id
+        where ${ew.sqlSegment}
+    </select>
+
+    <select id="getWorkstationShiftIndexListByDate"
+            resultType="com.qianwen.smartman.modules.cps.dto.ShiftDetailInfoDTO">
+        SELECT pdc.calendar_date,sd.shift_index as shiftIndex,
+        IF(ISNULL(sd.index_name)=1 or LENGTH(trim(sd.index_name))<![CDATA[<]]> 1,concat('鐝',sd.shift_index),sd.index_name) as indexName,
+        sd.shift_start_time,
+        sd.shift_end_time
+        FROM blade_production_calendar pc
+        LEFT JOIN blade_production_calendar_day pdc ON pc.id = pdc.calendar_id
+        LEFT JOIN blade_shift_detail sd ON pdc.model_id = sd.model_id
+        WHERE pc.code = #{calendarCode}
+        AND pc.year = #{year}
+        AND pc.is_deleted = 0
+        AND pdc.is_deleted = 0
+        AND (DATE_FORMAT(pdc.start_time,'%Y-%m-%d') = #{date} or DATE_FORMAT(pdc.end_time,'%Y-%m-%d') = #{date})
+        ORDER BY pdc.calendar_date,sd.shift_index
+    </select>
+
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/CommonGroupMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/CommonGroupMapper.xml
new file mode 100644
index 0000000..d9ab123
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/CommonGroupMapper.xml
@@ -0,0 +1,161 @@
+<?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.qianwen.smartman.modules.cps.mapper.CommonGroupMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="groupResultMap" type="com.qianwen.smartman.modules.cps.entity.CommonGroup">
+        <id column="id" property="id"/>
+        <result column="parent_id" property="parentId"/>
+        <result column="name" property="name"/>
+        <result column="full_name" property="fullName"/>
+        <result column="code" property="code"/>
+        <result column="group_category" property="groupCategory"/>
+        <result column="sort" property="sort"/>
+        <result column="remark" property="remark"/>
+        <result column="is_deleted" property="isDeleted"/>
+    </resultMap>
+
+    <resultMap id="groupVOResultMap" type="com.qianwen.smartman.modules.cps.vo.CommonGroupVO">
+        <id column="id" property="id"/>
+        <result column="parent_id" property="parentId"/>
+        <result column="name" property="name"/>
+        <result column="full_name" property="fullName"/>
+        <result column="group_category" property="groupCategory"/>
+        <result column="sort" property="sort"/>
+        <result column="remark" property="remark"/>
+        <result column="has_children" property="hasChildren"/>
+    </resultMap>
+
+    <resultMap id="treeNodeResultMap" type="com.qianwen.core.tool.node.TreeNode">
+        <id column="id" property="id"/>
+        <result column="parent_id" property="parentId"/>
+        <result column="title" property="title"/>
+        <result column="value" property="value"/>
+        <result column="key" property="key"/>
+        <result column="has_children" property="hasChildren"/>
+    </resultMap>
+
+    <delete id="removeOrgByIds">
+        DELETE
+        FROM
+        blade_common_group
+        WHERE
+        group_type = 'group_organization'
+        AND group_category =1
+        <if test="deptIds != null and deptIds.size() > 0">
+            AND id IN
+            <foreach collection="deptIds" item="deptId" open="(" separator="," close=")">
+                #{deptId}
+            </foreach>
+        </if>
+    </delete>
+
+    <!--鐗╃悊鍒犻櫎缁勭粐鏈烘瀯-->
+    <delete id="removeOrg">
+        DELETE
+        FROM blade_common_group
+        WHERE group_type = 'group_organization'
+          AND group_category = 1
+    </delete>
+    <!--鐗╃悊鍒犻櫎缁勭粐鏈烘瀯涓庡憳宸ョ殑鍏崇郴-->
+    <delete id="removeOrgContact">
+        DELETE
+        FROM blade_common_group_of_item
+        WHERE group_type = 'group_organization'
+          AND group_category = 1
+    </delete>
+
+
+    <select id="lazyList" resultMap="groupVOResultMap">
+        SELECT
+        common_group.* ,
+        (
+        SELECT
+        CASE WHEN count(1) > 0 THEN 1 ELSE 0 END
+        FROM
+        blade_common_group
+        WHERE
+        parent_id = common_group.id and is_deleted = 0
+        ) AS "has_children"
+        FROM
+        blade_common_group common_group
+        WHERE common_group.is_deleted = 0
+        <if test="tenantId!=null and tenantId!=''">
+            and common_group.tenant_id = #{tenantId}
+        </if>
+        <if test="parentId!=null">
+            and common_group.parent_id = #{parentId}
+        </if>
+        and common_group.group_type = #{groupType}
+        and common_group.group_category = #{groupCategory}
+        <if test="p.name!=null and p.name!=''">
+            and common_group.name like concat(concat('%', #{p.name}),'%')
+        </if>
+        <if test="p.fullName!=null and p.fullName!=''">
+            and common_group.full_name like concat(concat('%', #{p.fullName}),'%')
+        </if>
+        ORDER BY common_group.sort
+    </select>
+
+    <select id="tree" resultMap="treeNodeResultMap">
+        select id, parent_id, name as title, id as "value", id as "key" from blade_common_group where is_deleted = 0
+        <if test="tenantId!=null and tenantId!=''">
+            and tenant_id = #{tenantId}
+        </if>
+        and group_category = #{groupCategory}
+        and group_type = #{groupType}
+        ORDER BY sort
+    </select>
+
+    <select id="lazyTree" resultMap="treeNodeResultMap">
+        SELECT
+        common_group.id,
+        common_group.parent_id,
+        common_group.name AS title,
+        common_group.id AS "value",
+        common_group.id AS "key",
+        (
+        SELECT
+        CASE WHEN count(1) > 0 THEN 1 ELSE 0 END
+        FROM
+        blade_common_group
+        WHERE
+        parent_id = common_group.id and is_deleted = 0
+        ) AS "has_children"
+        FROM
+        blade_common_group common_group
+        WHERE
+        common_group.parent_id = #{parentId} AND common_group.is_deleted = 0
+        <if test="tenantId!=null and tenantId!=''">
+            and common_group.tenant_id = #{tenantId}
+        </if>
+        ORDER BY common_group.sort
+    </select>
+
+    <select id="getGroupNames" resultType="java.lang.String">
+        SELECT
+        name
+        FROM
+        blade_common_group
+        WHERE
+        id IN
+        <foreach collection="array" item="ids" index="index" open="(" close=")" separator=",">
+            #{ids}
+        </foreach>
+        and is_deleted = 0
+    </select>
+
+    <select id="getAllSubGroup" resultType="com.qianwen.smartman.modules.cps.entity.CommonGroup">
+        select *
+        from blade_common_group bcg1
+        where code like concat((select bcg2.code
+                                from blade_common_group bcg2
+                                where bcg2.id = #{id}
+                                  and bcg2.is_deleted = 0), '%')
+          and bcg1.is_deleted = 0
+          and bcg1.group_type = #{groupType}
+          and bcg1.group_category = #{groupCategory}
+    </select>
+
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/CraftRoutingMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/CraftRoutingMapper.xml
new file mode 100644
index 0000000..1b3d0ee
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/CraftRoutingMapper.xml
@@ -0,0 +1,21 @@
+<?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.qianwen.smartman.modules.cps.mapper.CraftRoutingMapper">
+
+    <select id="listCraftRouting" resultType="com.qianwen.smartman.modules.cps.vo.CraftRoutingVO">
+        select bcr.id          as id,
+               bcr.name        as name,
+               bcr.description as description,
+               bcr.status      as status,
+               bcr.product_id  as productId,
+               bp.code         as productCode,
+               bp.name         as productName
+        from blade_craft_routing bcr
+                 left join blade_product bp on bcr.product_id = bp.id and bp.is_deleted = 0
+        where bcr.is_deleted = 0
+        <if test="ew != null">
+            and ${ew.sqlSegment}
+        </if>
+    </select>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/CraftVersionLineMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/CraftVersionLineMapper.xml
new file mode 100644
index 0000000..517cc72
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/CraftVersionLineMapper.xml
@@ -0,0 +1,23 @@
+<?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.qianwen.smartman.modules.cps.mapper.CraftVersionLineMapper">
+
+    <select id="getVersionLine" resultType="com.qianwen.smartman.modules.cps.dto.VersionLineDTO">
+        <if test="_databaseId == 'mysql' ">
+            select group_concat(group_id)    groupId,
+            group_concat(bcg.code) as code,
+            group_concat(bcg.name) as name
+        </if>
+        <if test="_databaseId == 'dm' ">
+            select wm_concat(group_id)    groupId,
+            wm_concat(bcg.code) as code,
+            wm_concat(bcg.name) as name
+        </if>
+        from blade_craft_version_line bcvl
+                 left join blade_common_group bcg on bcvl.group_id = bcg.id and bcg.is_deleted = 0
+        where bcvl.is_deleted = 0
+          and bcvl.version_id = #{versionId}
+        group by craft_id, version_id;
+    </select>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/DeviceTypeCheckProjectMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/DeviceTypeCheckProjectMapper.xml
new file mode 100644
index 0000000..5d53b0b
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/DeviceTypeCheckProjectMapper.xml
@@ -0,0 +1,19 @@
+<?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.qianwen.smartman.modules.cps.mapper.DeviceTypeCheckProjectMapper">
+
+
+    <select id="listDeviceCheck" resultType="com.qianwen.smartman.modules.cps.vo.DeviceTypeCheckProjectVO">
+        select bdtcp.id,
+               interval_time    intervalTime,
+               check_project_id checkProjectId,
+               code,
+               name,
+               remark
+        from blade_device_type_check_project bdtcp
+                 LEFT JOIN blade_check_project bcp on bdtcp.check_project_id = bcp.id and bcp.is_deleted = 0
+        where device_type_id = #{id}
+          and bdtcp.is_deleted = 0
+    </select>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/DeviceTypeMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/DeviceTypeMapper.xml
new file mode 100644
index 0000000..c014dc0
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/DeviceTypeMapper.xml
@@ -0,0 +1,18 @@
+<?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.qianwen.smartman.modules.cps.mapper.DeviceTypeMapper">
+
+
+    <select id="typeAndonRecord" resultType="java.lang.Integer">
+        select count(*) as nums
+        from blade_andon_record bar
+                 left join blade_device_andon_type bdat on bar.type_id = bdat.andon_type_id and bdat.is_deleted = 0
+        where bar.is_deleted = 0
+          and bar.cur_status in (1, 2)
+          and bdat.device_type_id in
+        <foreach collection="ids" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </select>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/DmpVariablesMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/DmpVariablesMapper.xml
new file mode 100644
index 0000000..96cde6c
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/DmpVariablesMapper.xml
@@ -0,0 +1,77 @@
+<?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.qianwen.smartman.modules.cps.mapper.DmpVariablesMapper">
+
+
+    <select id="listToRealTimeByMachineId" resultType="com.qianwen.smartman.modules.cps.vo.DmpVariablesVO">
+        SELECT dmp.name,
+               dmp.description,
+               dmp.dmp_type
+        FROM blade_dmp_variables dmp
+        where dmp.machine_id = #{machineId}
+    </select>
+
+    <select id="getDmpVariablesByWorkstationId" resultType="com.qianwen.smartman.modules.cps.vo.DmpVariablesVO">
+        SELECT b.id,
+               b.name             as name,
+               wcs.data_item      AS description,
+               wcs.data_type      AS wcsDataType,
+               b.idx              as sort,
+               wcs.real_time_data as realTimeData,
+               wcs.big_screen     as bigScreen
+        FROM blade_workstation_wcs wcs
+                 inner JOIN blade_dmp_variables b ON wcs.dmp_variables_id = b.id
+        WHERE wcs.is_deleted = 0
+          AND wcs.workstation_id = #{workstationId}
+        order by b.idx
+    </select>
+
+    <select id="getVariablesAndWcs" resultType="com.qianwen.smartman.modules.cps.vo.DmpVariablesVO">
+        select a.*,
+               c.data_type wcsDataType,
+               c.data_item,
+               c.id        wcsId,
+               c.big_screen,
+               c.real_time_data,
+               c.process_parameter,
+               c.usage_id
+        from blade_dmp_variables a
+                 left join blade_workstation_of_machine b
+                           on a.machine_id = b.machine_id and b.workstation_id = #{workstationId}
+                 left join blade_workstation_wcs c
+                           on b.workstation_id = c.workstation_id and a.id = c.dmp_variables_id and c.is_deleted = 0
+        where a.machine_id = #{id}
+        order by a.idx
+    </select>
+
+    <select id="getDmpVariablesByWorkstationIdList"
+            resultType="com.qianwen.smartman.modules.cps.vo.DmpStatusVariableVO">
+        SELECT wcs.workstation_id workstationId,dv.name variableKey
+        FROM blade_workstation_wcs wcs
+        JOIN blade_dmp_variables dv ON wcs.dmp_variables_id = dv.id
+        WHERE wcs.is_deleted = 0
+        AND wcs.data_type = 1
+        <if test="workstationIdList != null and workstationIdList.size() > 0">
+            AND wcs.workstation_id IN
+            <foreach collection="workstationIdList" item="workstationId" open="(" separator="," close=")">
+                #{workstationId}
+            </foreach>
+        </if>
+    </select>
+    <select id="getDmpVariablesByWorkstationIds" resultType="com.qianwen.smartman.modules.cps.vo.DmpVariablesVO">
+        SELECT b.id, b.name as name, wcs.data_item AS description, wcs.data_type AS wcsDataType,
+        b.idx as sort, wcs.real_time_data as realTimeData, wcs.big_screen as bigScreen,
+        wcs.workstation_id
+        FROM blade_workstation_wcs wcs
+        inner JOIN blade_dmp_variables b ON wcs.dmp_variables_id = b.id
+        WHERE wcs.is_deleted = 0
+        <if test="workstationIds != null and workstationIds.size() > 0">
+            AND wcs.workstation_id IN
+            <foreach collection="workstationIds" item="workstationId" open="(" separator="," close=")">
+                #{workstationId}
+            </foreach>
+        </if>
+    </select>
+
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/EmployeeMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/EmployeeMapper.xml
new file mode 100644
index 0000000..c9c9e0e
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/EmployeeMapper.xml
@@ -0,0 +1,103 @@
+<?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.qianwen.smartman.modules.cps.mapper.EmployeeMapper">
+
+    <select id="selectEmployeePage" resultType="com.qianwen.smartman.modules.cps.dto.EmployeeDTO">
+        select a.id,a.code,a.name,
+        a.email,a.tel,a.hire_date,
+        a.job_number,a.pin_code,a.dept_id,
+        a.post_id,a.user_id,a.role_id,a.organization_id,a.avatar,
+        <if test="_databaseId == 'mysql' ">
+            group_concat(c.name) organizationName,
+        </if>
+        <if test="_databaseId == 'dm' ">
+            wm_concat(c.name) organizationName,
+        </if>
+        a.status
+        from blade_employee a
+        join blade_common_group_of_item b on b.item_id = a.id
+        left join blade_common_group c on c.id = b.group_id
+        <where>
+            and a.is_deleted=0
+            <if test="query.postId != null and query.postId != ''">
+                and a.post_id like concat(concat('%', #{query.postId}),'%')
+            </if>
+            <if test="query.keywords != null and query.keywords != ''">
+                and a.job_number LIKE concat(#{query.keywords},'%')
+                or a.name LIKE concat(#{query.keywords},'%')
+            </if>
+            <if test="query.status != null">
+                and a.status = #{query.status}
+            </if>
+            <if test="organizationIdList != null and organizationIdList.size() > 0">
+                AND b.group_id IN
+                <foreach collection="organizationIdList" item="organizationId" open="(" separator="," close=")">
+                    #{organizationId}
+                </foreach>
+            </if>
+        </where>
+        group by a.id,a.code,a.name,
+        a.email,a.tel,a.hire_date,
+        a.job_number,a.pin_code,a.dept_id,
+        a.post_id,a.user_id,a.role_id,a.organization_id,a.status,a.create_time,a.avatar
+        order by a.create_time desc,a.id desc;
+    </select>
+    <select id="getUnbindEmployeeList" resultType="com.qianwen.smartman.modules.cps.vo.GroupTreeVO">
+        SELECT b.id,b.code,b.name,b.organization_id parentId,0 isGroup
+        FROM blade_employee b
+        LEFT JOIN blade_user a ON a.id = b.user_id and a.is_deleted = 0
+        WHERE b.is_deleted = 0 and b.status = 1
+        <choose>
+            <when test="employeeId != null and employeeId != ''">
+                and (b.user_id is null OR b.user_id = '' or b.id = #{employeeId})
+            </when>
+            <otherwise>
+                and (b.user_id is null OR b.user_id = '' or b.user_id = '')
+            </otherwise>
+        </choose>
+        order by b.create_time desc,b.job_number
+    </select>
+    <select id="selectEmployeeList" resultType="com.qianwen.smartman.modules.cps.dto.EmployeeDTO">
+        select a.id,a.code,a.name,
+        a.email,a.tel,a.hire_date,
+        a.job_number,a.pin_code,a.dept_id,
+        a.post_id,a.user_id,a.role_id,a.organization_id,a.avatar,
+        <if test="_databaseId == 'mysql' ">
+            group_concat(c.name) organizationName,
+        </if>
+        <if test="_databaseId == 'dm' ">
+            wm_concat(c.name) organizationName,
+        </if>
+        a.status
+        from blade_employee a
+        join blade_common_group_of_item b on b.item_id = a.id
+        left join blade_common_group c on c.id = b.group_id
+        <where>
+            and a.is_deleted=0
+            <if test="query.postId != null and query.postId != ''">
+                and a.post_id like concat(concat('%', #{query.postId}),'%')
+            </if>
+            <if test="query.keywords != null and query.keywords != ''">
+                and a.job_number LIKE concat(#{query.keywords},'%')
+                or a.name LIKE concat(#{query.keywords},'%')
+            </if>
+            <if test="query.status != null">
+                and a.status = #{query.status}
+            </if>
+            <if test="organizationIdList != null and organizationIdList.size() > 0">
+                AND b.group_id IN
+                <foreach collection="organizationIdList" item="organizationId" open="(" separator="," close=")">
+                    #{organizationId}
+                </foreach>
+            </if>
+        </where>
+        group by a.id,a.code,a.name,
+        a.email,a.tel,a.hire_date,
+        a.job_number,a.pin_code,a.dept_id,
+        a.post_id,a.user_id,a.role_id,a.organization_id,a.status,a.create_time,a.avatar
+        order by a.create_time desc,a.job_number
+    </select>
+
+
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/EmployeePostMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/EmployeePostMapper.xml
new file mode 100644
index 0000000..c922b91
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/EmployeePostMapper.xml
@@ -0,0 +1,5 @@
+<?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.qianwen.smartman.modules.cps.mapper.EmployeePostMapper">
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/FixtureMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/FixtureMapper.xml
new file mode 100644
index 0000000..5baf510
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/FixtureMapper.xml
@@ -0,0 +1,161 @@
+<?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.qianwen.smartman.modules.cps.mapper.FixtureMapper">
+
+    <resultMap id="fixtureVO" type="com.qianwen.smartman.modules.cps.vo.FixtureVO">
+        <id column="id" property="id"/>
+        <result column="code" property="code"/>
+        <result column="name" property="name"/>
+        <result column="description" property="description"/>
+        <result column="avatar" property="avatar"/>
+        <result column="fixtureStatus" property="fixtureStatus"/>
+        <result column="fixtureGroupName" property="fixtureGroupName"/>
+        <result column="fixtureGroupId" property="fixtureGroupId"/>
+        <result column="in_use" property="inUse"/>
+        <result column="trayFixtureId" property="trayFixtureId"/>
+        <result column="trayId" property="trayId"/>
+        <result column="surfaceId" property="surfaceId"/>
+        <result column="trayCode" property="trayCode"/>
+        <result column="trayName" property="trayName"/>
+        <result column="surfaceCode" property="surfaceCode"/>
+        <result column="surfaceName" property="surfaceName"/>
+        <collection property="toolAppendixVOList" ofType="com.qianwen.smartman.modules.cps.vo.ToolAppendixVO">
+            <id column="fileId" property="id"/>
+            <result column="file_length" property="fileLength"/>
+            <result column="file_name" property="fileName"/>
+            <result column="file_link" property="fileLink"/>
+            <result column="object_key" property="objectKey"/>
+            <result column="parentId" property="parentId"/>
+            <result column="createTime" property="createTime"/>
+            <result column="content_type" property="contentType"/>
+        </collection>
+    </resultMap>
+
+    <select id="page" resultMap="fixtureVO">
+        SELECT
+        f.code,
+        f.fixture_status fixtureStatus,
+        f.id,
+        a.parent_id parentId,
+        f.name,
+        f.description,
+        f.avatar,
+        f.in_use,
+        a.id fileId,
+        a.file_length,
+        a.file_name,
+        a.file_link,
+        a.content_type,
+        a.object_key,
+        a.create_time createTime,
+        g.name fixtureGroupName,
+        g.id fixtureGroupId,
+        tf.id trayFixtureId,
+        tf.tray_id trayId,
+        tf.face_id surfaceId,
+        t.code trayCode,
+        t.name trayName,
+        s.code surfaceCode,
+        s.name surfaceName
+        FROM
+        blade_fixture f
+        LEFT JOIN blade_common_group_of_item i ON f.id = i.item_id
+        LEFT JOIN blade_common_group g ON i.group_id = g.id
+        LEFT JOIN blade_tool_appendix a ON f.id = a.parent_id AND a.is_deleted = 0
+        LEFT JOIN blade_tray_fixture tf ON tf.fix_id = f.id AND tf.is_deleted = 0
+        LEFT JOIN blade_tray t ON t.id = tf.tray_id and t.is_deleted = 0
+        LEFT JOIN blade_tray_surface s ON s.id = tf.face_id and s.is_deleted = 0
+        WHERE
+        f.is_deleted = 0
+        AND g.is_deleted = 0
+        <if test="groupId != null and groupId != ''">
+            and g.id = #{groupId}
+        </if>
+        <if test="keyword != null and keyword != ''">
+            and (f.code Like concat(#{keyword},'%') or f.name Like concat(#{keyword},'%') )
+        </if>
+        order by f.create_time desc, f.id desc
+    </select>
+    <select id="detail" resultMap="fixtureVO">
+        SELECT f.code,
+               f.fixture_status fixtureStatus,
+               f.id,
+               a.parent_id      parentId,
+               f.name,
+               f.description,
+               f.in_use,
+               f.avatar,
+               a.id             fileId,
+               a.file_length,
+               a.file_name,
+               a.file_link,
+               a.content_type,
+               a.object_key,
+               a.create_time    createTime,
+               g.name           fixtureGroupName,
+               g.id             fixtureGroupId,
+               tf.id            trayFixtureId,
+               tf.tray_id       trayId,
+               tf.face_id       surfaceId,
+               t.code           trayCode,
+               t.name           trayName,
+               s.code           surfaceCode,
+               s.name           surfaceName
+        FROM blade_fixture f
+                 LEFT JOIN blade_common_group_of_item i ON f.id = i.item_id
+                 LEFT JOIN blade_common_group g ON i.group_id = g.id
+                 LEFT JOIN blade_tool_appendix a ON f.id = a.parent_id AND a.is_deleted = 0
+                 LEFT JOIN blade_tray_fixture tf ON tf.fix_id = f.id AND tf.is_deleted = 0
+                 LEFT JOIN blade_tray t ON t.id = tf.tray_id and t.is_deleted = 0
+                 LEFT JOIN blade_tray_surface s ON s.id = tf.face_id and s.is_deleted = 0
+        WHERE f.is_deleted = 0
+          AND g.is_deleted = 0
+          and f.id = #{id}
+    </select>
+    <select id="listNotIn" resultType="com.qianwen.smartman.modules.cps.vo.FixtureGroupFixtureVO">
+        SELECT
+        f.code,
+        f.id,
+        f.name,
+        g.id parentId
+        FROM
+        blade_fixture f
+        INNER JOIN blade_common_group_of_item i ON f.id = i.item_id
+        INNER JOIN blade_common_group g ON i.group_id = g.id
+        WHERE
+        f.is_deleted = 0
+        and g.is_deleted = 0
+        <if test="fixtureIdList != null and fixtureIdList.size > 0">
+            and f.id NOT IN
+            <foreach collection="fixtureIdList" item="fixtureId" open="(" separator="," close=")">
+                #{fixtureId}
+            </foreach>
+        </if>
+    </select>
+    <select id="listNotInUse" resultType="com.qianwen.smartman.modules.cps.vo.FixtureGroupFixtureVO">
+        SELECT f.code,
+               f.id,
+               f.name,
+               g.id parentId
+        FROM blade_fixture f
+                 INNER JOIN blade_common_group_of_item i ON f.id = i.item_id
+                 INNER JOIN blade_common_group g ON i.group_id = g.id
+        WHERE f.is_deleted = 0
+          and g.is_deleted = 0
+          and f.in_use = 0
+    </select>
+
+    <select id="groupFixture" resultType="com.qianwen.smartman.modules.cps.vo.GroupTreeVO">
+        select bf.id,
+               bf.code,
+               bf.name,
+               bcg.id   parentId,
+               0 as isGroup
+        from blade_fixture bf
+                 inner join blade_common_group_of_item bcgoi on bf.id = bcgoi.item_id
+                 inner join blade_common_group bcg on bcgoi.group_id = bcg.id
+        where bf.is_deleted = 0
+          and bcg.is_deleted = 0
+    </select>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/GlobalWcsMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/GlobalWcsMapper.xml
new file mode 100644
index 0000000..c2073f9
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/GlobalWcsMapper.xml
@@ -0,0 +1,18 @@
+<?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.qianwen.smartman.modules.cps.mapper.GlobalWcsMapper">
+
+    <select id="wcsAndAchievements" resultType="com.qianwen.smartman.modules.cps.vo.WcsAndAchievementsVO">
+        select gw.code     as code,
+               gw.name     as name,
+               gw.type     as type,
+               gw.color    as color,
+               gwr.rps     as rps,
+               gwr.is_plan as isPlan
+        from blade_global_wcs gw
+                 left JOIN blade_global_wcs_of_rps gwr on gw.code = gwr.code order by seq asc,code asc
+    </select>
+
+
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/InitMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/InitMapper.xml
new file mode 100644
index 0000000..939db94
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/InitMapper.xml
@@ -0,0 +1,172 @@
+<?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.qianwen.smartman.modules.cps.mapper.InitMapper">
+    <insert id="init">
+        <if test="type == 'mysql'">
+            -- 鐢ㄦ埛淇℃伅
+            INSERT INTO `blade_user`(`id`, `tenant_id`, `code`, `user_type`, `account`, `password`, `name`,
+            `real_name`, `avatar`, `email`, `phone`, `birthday`, `sex`, `role_id`, `dept_id`,
+            `post_id`,
+            `create_user`, `create_dept`, `create_time`, `update_user`, `update_time`, `status`,
+            `is_deleted`,
+            `pwd_security_level`, `pwd_update_date`, `pwd_update_record`)
+            VALUES (1123598821738675201, '000000', '',
+            1, #{initSettingVO.account}, #{initSettingVO.password}, #{initSettingVO.account},
+            #{initSettingVO.account}, '', #{initSettingVO.email}, '', NULL, 1, '1123598816738675201',
+            '1123598813738675201', '1455406507120193538', 1123598821738675201, 1123598813738675201, NOW(), NULL,
+            NULL,
+            1, 0, NULL, NULL, NULL);
+
+            INSERT INTO `blade_oss`(`id`, `tenant_id`, `category`, `oss_code`, `endpoint`, `access_key`, `secret_key`,
+            `bucket_name`, `app_id`, `region`, `remark`, `create_user`, `create_dept`,
+            `create_time`, `update_user`, `update_time`, `status`, `is_deleted`)
+            VALUES (1132486733992468482, '000000', 1, 'minio', #{initSettingVO.ossUrl}, #{initSettingVO.accessKey},
+            #{initSettingVO.secretKey}, 'bladex',
+            '', '', '', 1123598821738675201, 1123598813738675201, NOW(), NULL,
+            NULL, 2, 0);
+
+            INSERT INTO `blade_dept`(`id`, `tenant_id`, `parent_id`, `ancestors`, `dept_category`, `dept_name`,
+            `full_name`, `sort`, `remark`, `is_deleted`)
+            VALUES (1123598813738675201, '000000', 0, '0', 1, #{initSettingVO.enterpriseName},
+            #{initSettingVO.enterpriseName}, 1, NULL, 0);
+
+            INSERT INTO `blade_tenant`(`id`, `tenant_id`, `tenant_name`, `domain_name`, `background_url`, `linkman`,
+            `contact_number`, `address`, `account_number`, `expire_time`, `datasource_id`,
+            `license_key`,
+            `create_user`, `create_dept`, `create_time`, `update_user`, `update_time`, `status`,
+            `is_deleted`)
+            VALUES (1123598820738675201, '000000', #{initSettingVO.enterpriseName}, #{url},
+            '',
+            '',
+            '', #{initSettingVO.enterpriseName}, -1, NULL, NULL, '', 1123598821738675201, 1123598813738675201,
+            NOW(),
+            1123598821738675201, NULL, 1, 0);
+
+            INSERT INTO `blade_common_group`(`id`, `tenant_id`, `parent_id`, `extend_id`, `code`, `group_type`,
+            `group_category`, `group_tag`, `name`, `full_name`, `sort`, `remark`,
+            `is_deleted`,`status`)
+            VALUES (3, '000000', 0, NULL, '00001', 'group_organization', 1, NULL, #{initSettingVO.enterpriseName},
+            #{initSettingVO.enterpriseName}, 1, '缁勭粐鏍硅妭鐐�', 0, 1);
+
+            -- 鐪嬫澘鑿滃崟
+            <if test="initSettingVO.kanbanUrl != null and initSettingVO.kanbanUrl != ''">
+                INSERT INTO `blade_menu`(`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`,
+                `category`,
+                `action`, `is_open`, `remark`, `is_deleted`) VALUES (1504289681887649794, 0, 'vision', '鏁板瓧鐪嬫澘', 'vision',
+                #{initSettingVO.kanbanUrl}, 'iconfont saber-shuzikanban', 6, 0, 0, 2, '', 0);
+                INSERT INTO `blade_menu`(`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`,
+                `category`,`action`, `is_open`, `remark`, `is_deleted`) VALUES (1510094368595181569,
+                1504289681887649794, 'vision1', '鐪嬫澘', 'vision', #{initSettingVO.kanbanUrl}, 'iconfont
+                iconicon_airplay', 1, 1, 0, 2, '', 0);
+            </if>
+
+            -- 浠诲姟璋冨害
+            INSERT INTO `blade_menu`(`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`,
+            `action`,
+            `is_open`, `remark`, `is_deleted`)
+            VALUES (1164733389658963251, 1504290968008056833, 'periodic_task', '浠诲姟璋冨害', 'periodic_task',
+            #{initSettingVO.xxlJobUrl}, 'iconfont iconicon_cspace', 12, 1, 0, 1, '', 0);
+
+            -- dmp閰嶇疆鍙傛暟
+            INSERT INTO blade_param(id, param_name, param_key, param_value, remark, create_user, create_dept,
+            create_time, update_user, update_time, status, is_deleted)
+            VALUES (1473967072667844609, 'dmp鍦板潃', 'system.dmp.url', #{initSettingVO.dmpUrl}, '', 1123598821738675201,
+            1123598813738675201, '2021-12-23 18:41:50', 1123598821738675201, '2021-12-24 17:00:12', 1, 0);
+        </if>
+        <if test="type == 'dm'">
+            -- 鐢ㄦ埛淇℃伅
+            INSERT INTO blade_user(id, tenant_id, code, user_type, account, password, name,
+            real_name, avatar, email, phone, birthday, sex, role_id, dept_id,
+            post_id,
+            create_user, create_dept, create_time, update_user, update_time, status,
+            is_deleted,
+            pwd_security_level, pwd_update_date, pwd_update_record)
+            VALUES (1123598821738675201, '000000', '',
+            1, #{initSettingVO.account}, #{initSettingVO.password}, #{initSettingVO.account},
+            #{initSettingVO.account}, '', #{initSettingVO.email}, '', NULL, 1, '1123598816738675201',
+            '1123598813738675201', '1455406507120193538', 1123598821738675201, 1123598813738675201, NOW(), NULL,
+            NULL,
+            1, 0, NULL, NULL, NULL);
+
+            INSERT INTO blade_oss(id, tenant_id, category, oss_code, endpoint, access_key, secret_key,
+            bucket_name, app_id, region, remark, create_user, create_dept,
+            create_time, update_user, update_time, status, is_deleted)
+            VALUES (1132486733992468482, '000000', 1, 'minio', #{initSettingVO.ossUrl}, #{initSettingVO.accessKey},
+            #{initSettingVO.secretKey}, 'bladex',
+            '', '', '', 1123598821738675201, 1123598813738675201, NOW(), NULL,
+            NULL, 2, 0);
+
+            INSERT INTO blade_dept(id, tenant_id, parent_id, ancestors, dept_category, dept_name,
+            full_name, sort, remark, is_deleted)
+            VALUES (1123598813738675201, '000000', 0, '0', 1, #{initSettingVO.enterpriseName},
+            #{initSettingVO.enterpriseName}, 1, NULL, 0);
+
+            INSERT INTO blade_tenant(id, tenant_id, tenant_name, domain_name, background_url, linkman,
+            contact_number, address, account_number, expire_time, datasource_id,
+            license_key,
+            create_user, create_dept, create_time, update_user, update_time, status,
+            is_deleted)
+            VALUES (1123598820738675201, '000000', #{initSettingVO.enterpriseName}, #{url},
+            '',
+            '',
+            '', #{initSettingVO.enterpriseName}, -1, NULL, NULL, '', 1123598821738675201, 1123598813738675201,
+            NOW(),
+            1123598821738675201, NULL, 1, 0);
+
+            INSERT INTO blade_common_group(id, tenant_id, parent_id, extend_id, code, group_type,
+            group_category, group_tag, name, full_name, sort, remark,
+            is_deleted,status)
+            VALUES (3, '000000', 0, NULL, '00001', 'group_organization', 1, NULL, #{initSettingVO.enterpriseName},
+            #{initSettingVO.enterpriseName}, 1, '缁勭粐鏍硅妭鐐�', 0, 1);
+
+            -- 鐪嬫澘
+            <if test="initSettingVO.kanbanUrl != null and initSettingVO.kanbanUrl != ''">
+                INSERT INTO blade_menu(id, parent_id, code, name, alias, path, source, sort, category, action, is_open,
+                remark, is_deleted) VALUES (1504289681887649794, 0, 'vision', '鏁板瓧鐪嬫澘', 'vision',
+                #{initSettingVO.kanbanUrl},
+                'iconfont saber-shuzikanban', 6, 0, 0, 2, '', 0);
+                INSERT INTO blade_menu(id, parent_id, code, name, alias, path, source, sort, category, action, is_open,
+                remark, is_deleted) VALUES (1510094368595181569,
+                1504289681887649794, 'vision1', '鐪嬫澘', 'vision', #{initSettingVO.kanbanUrl}, 'iconfont
+                iconicon_airplay', 1, 1, 0, 2, '', 0);
+            </if>
+
+            -- 浠诲姟璋冨害
+            INSERT INTO blade_menu(id, parent_id, code, name, alias, path, source, sort, category, action,
+            is_open, remark, is_deleted)
+            VALUES (1164733389658963251, 1504290968008056833, 'periodic_task', '浠诲姟璋冨害', 'periodic_task',
+            #{initSettingVO.xxlJobUrl}, 'iconfont iconicon_cspace', 12, 1, 0, 1, '', 0);
+
+            -- dmp閰嶇疆鍙傛暟
+            INSERT INTO blade_param(id, param_name, param_key, param_value, remark, create_user, create_dept,
+            create_time, update_user, update_time, status, is_deleted)
+            VALUES (1473967072667844609, 'dmp鍦板潃', 'system.dmp.url', #{initSettingVO.dmpUrl}, '', 1123598821738675201,
+            1123598813738675201, '2021-12-23 18:41:50', 1123598821738675201, '2021-12-24 17:00:12', 1, 0);
+
+        </if>
+
+    </insert>
+    <select id="checkIsNeedInit" resultType="java.lang.Integer">
+        <if test="type == 'mysql'">
+            SELECT count(TABLE_NAME)
+            FROM information_schema.TABLES
+            WHERE TABLE_SCHEMA = #{dateBase};
+        </if>
+        <if test="type == 'dm'">
+            select COUNT(TABLE_NAME) from dba_tables where owner=#{dateBase} and tablespace_name != 'temp';
+        </if>
+
+    </select>
+
+    <update id="initBladeReport">
+        UPDATE jimu_report_db
+        SET api_url=replace(api_url, '{{domainURL}}', #{replaceStr});
+    </update>
+
+    <update id="replaceUrlJiMu">
+        update blade_menu
+        set path = replace(path, '{{url}}', #{initSettingVO.jumuReportUrl})
+        where id = 1544558280713900033
+    </update>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/MachineMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/MachineMapper.xml
new file mode 100644
index 0000000..6ec58ce
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/MachineMapper.xml
@@ -0,0 +1,337 @@
+<?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.qianwen.smartman.modules.cps.mapper.MachineMapper">
+
+    <update id="changeCollectSwitch">
+        UPDATE blade_machine m,
+            blade_workstation w,
+            blade_workstation_of_machine wm
+        SET m.collect_switch = #{collectSwitch}
+        WHERE w.id = wm.workstation_id
+          AND m.id = wm.machine_id
+          AND w.tenant_id = #{tenantId}
+          AND w.id = #{workstationId};
+    </update>
+
+    <select id="typeAndonRecord" resultType="int">
+        select count(*)
+        from blade_andon_record bar
+                 left join blade_device_andon_type bdat on bar.type_id = bdat.andon_type_id and bdat.is_deleted = 0
+                 left join blade_machine bm on bm.machine_type_id = bdat.device_type_id and bm.is_deleted = 0
+        where bar.is_deleted = 0
+          and bar.cur_status in (1, 2)
+          and bm.id in
+        <foreach collection="ids" index="index" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+    </select>
+
+    <select id="selectMachineDetail" resultType="com.qianwen.smartman.modules.cps.vo.MachineDetailVO">
+        select bm.id,
+               bm.tenant_id              tenantId,
+               bm.extend_id              extendId,
+               machine_code              machineCode,
+               machine_name              machineName,
+               machine_model             machineModel,
+               machine_life_status       machineLifeStatus,
+               machine_use_status        machineUseStatus,
+               factory_no                factoryNo,
+               assets_code               assetsCode,
+               brand,
+               nameplate,
+               bm.avatar,
+               serial_no                 serialNo,
+               factory_file              factoryFile,
+               manufacturer,
+               country_of_manufacture    countryOfManufacture,
+               system_name               systemName,
+               software_version          softwareVersion,
+               net_weight                netWeight,
+               power,
+               voltage,
+               dimensions,
+               production_time           productionTime,
+               delivery_time             deliveryTime,
+               depreciation_year         depreciationYear,
+               turn_to_fixed_assets_time turnToFixedAssetsTime,
+               invoice_value             invoiceValue,
+               ovfa,
+               net_asset_value           netAssetValue,
+               bm.organization_id        organizationId,
+               bcg2.name                 organizationName,
+               production_line           productionLine,
+               management_class          managementClass,
+               elaborate_equipment       elaborateEquipment,
+               bm.pin_code               pinCode,
+               short_code                shortCode,
+               installation_location     installationLocation,
+               bm.remark,
+               machine_type_id           machineTypeId,
+               bdt.name                  machineTypeName,
+               bdt.code                  machineTypeCode,
+               bm.group_id               groupId,
+               bcg1.name                 groupName,
+               bm.employee_id            employeeId,
+               be.name                   employeeName,
+               bm.status                 status
+        from blade_machine bm
+                 LEFT JOIN blade_device_type bdt on bm.machine_type_id = bdt.id and bdt.is_deleted = 0
+                 LEFT JOIN blade_common_group bcg1 on bm.group_id = bcg1.id and bcg1.is_deleted = 0
+                 LEFT JOIN blade_common_group bcg2 on bm.organization_id = bcg2.id and bcg2.is_deleted = 0
+                 LEFT JOIN blade_employee be on bm.employee_id = be.id and be.is_deleted = 0
+        where bm.id = #{id}
+    </select>
+
+    <select id="pageMachine" resultType="com.qianwen.smartman.modules.cps.vo.MachineListVO">
+        select bm.id,
+        bm.machine_code machineCode,
+        bm.machine_name machineName,
+        bdt.id machineTypeId,
+        bdt.name machineTypeName,
+        bm.machine_model machineModel,
+        bcg.name groupName,
+        bm.machine_type_id,
+        bm.serial_no serialNo,
+        bm.short_code shortCode,
+        bm.machine_use_status machineUseStatus,
+        bm.status status
+        from blade_machine bm
+        LEFT JOIN blade_device_type bdt on bm.machine_type_id = bdt.id and bdt.is_deleted = 0
+        LEFT JOIN blade_common_group bcg on bm.group_id = bcg.id and bcg.is_deleted = 0
+        WHERE bm.is_deleted = 0
+        <if test="machineName != null and machineName != ''">
+            and machine_name like CONCAT(#{machineName}, '%')
+        </if>
+        <if test="machineCode != null and machineCode != ''">
+            and machine_code like CONCAT( #{machineCode}, '%')
+        </if>
+        <if test="machineTypeId != null">
+            and machine_type_id = #{machineTypeId}
+        </if>
+        <if test="groupId != null and groupId != allMachineId">
+            and group_id = #{groupId}
+        </if>
+        <if test="status != null">
+            and bm.status = #{status}
+        </if>
+        ORDER BY bm.create_time DESC,bm.id DESC
+    </select>
+    <select id="deviceListByDeviceTypeId" resultType="com.qianwen.smartman.modules.cps.dto.DeviceSimpleDTO">
+        SELECT t1.machine_type_id AS deviceTypeId,
+               t2.name            AS deviceTypeName,
+               t1.id              AS deviceId,
+               t1.machine_code    AS code,
+               t1.machine_name    AS name,
+               t1.machine_model   AS machineModel
+        FROM blade_machine t1
+                 LEFT JOIN blade_device_type t2
+                           ON t1.machine_type_id = t2.id and t2.is_deleted = 0
+        WHERE t1.machine_type_id = #{deviceTypeId}
+          and t1.is_deleted = 0
+    </select>
+
+    <select id="deviceListByDeviceIdList" resultType="com.qianwen.smartman.modules.cps.dto.DeviceSimpleDTO">
+        SELECT t1.machine_type_id AS deviceTypeId,
+        t2.name AS deviceTypeName,
+        t1.id AS deviceId,
+        t1.machine_code AS code,
+        t1.machine_name AS name,
+        t1.machine_model AS machineModel
+        FROM blade_machine t1
+        LEFT JOIN blade_device_type t2
+        ON t1.machine_type_id = t2.id and t2.is_deleted = 0
+        WHERE t1.is_deleted = 0
+        <if test="deviceIdList!= null and deviceIdList.size > 0 ">
+            AND t1.id IN
+            <foreach collection="deviceIdList" index="index" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+    </select>
+
+    <select id="listMachineDetail" resultType="com.qianwen.smartman.modules.cps.vo.MachineDetailVO">
+        select bm.id,
+        bm.tenant_id tenantId,
+        bm.extend_id extendId,
+        machine_code machineCode,
+        machine_name machineName,
+        machine_model machineModel,
+        machine_life_status machineLifeStatus,
+        machine_use_status machineUseStatus,
+        factory_no factoryNo,
+        assets_code assetsCode,
+        brand,
+        nameplate,
+        bm.avatar,
+        serial_no serialNo,
+        factory_file factoryFile,
+        manufacturer,
+        country_of_manufacture countryOfManufacture,
+        system_name systemName,
+        software_version softwareVersion,
+        net_weight netWeight,
+        power,
+        voltage,
+        dimensions,
+        production_time productionTime,
+        delivery_time deliveryTime,
+        depreciation_year depreciationYear,
+        turn_to_fixed_assets_time turnToFixedAssetsTime,
+        invoice_value invoiceValue,
+        ovfa,
+        net_asset_value netAssetValue,
+        bm.organization_id organizationId,
+        bcg2.name organizationName,
+        production_line productionLine,
+        management_class managementClas,
+        elaborate_equipment elaborateEquipment,
+        bm.pin_code pinCode,
+        short_code shortCode,
+        installation_location installationLocation,
+        bm.remark,
+        machine_type_id machineTypeId,
+        bdt.name machineTypeName,
+        bdt.code machineTypeCode,
+        bcg1.name groupName,
+        be.name employeeName
+        from blade_machine bm
+        LEFT JOIN blade_device_type bdt on bm.machine_type_id = bdt.id and bdt.is_deleted = 0
+        LEFT JOIN blade_common_group bcg1 on bm.group_id = bcg1.id and bcg1.is_deleted = 0
+        LEFT JOIN blade_common_group bcg2 on bm.organization_id = bcg2.id and bcg2.is_deleted = 0
+        LEFT JOIN blade_employee be on bm.employee_id = be.id and be.is_deleted = 0
+        WHERE bm.is_deleted = 0
+        <if test="machineName != null and machineName != ''">
+            and machine_name like CONCAT( #{machineName}, '%')
+        </if>
+        <if test="machineCode != null and machineCode != ''">
+            and machine_code like CONCAT( #{machineCode}, '%')
+        </if>
+        <if test="machineTypeId != null">
+            and machine_type_id = #{machineTypeId}
+        </if>
+        <if test="groupId != null and groupId != allMachineId">
+            and group_id = #{groupId}
+        </if>
+        <if test="status != null">
+            and bm.status = #{status}
+        </if>
+        ORDER BY bm.create_time DESC,bm.id DESC
+    </select>
+
+    <select id="getMachineByWorkStation" resultType="com.qianwen.smartman.modules.cps.dto.MachineExtDTO">
+        select distinct bm.extend_id, bwom.workstation_id
+        from blade_machine bm
+        INNER JOIN blade_workstation_of_machine bwom on bm.id = bwom.machine_id
+        where bm.is_deleted = 0
+        and bwom.workstation_id in
+        <foreach collection="workstationIds" index="index" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+    </select>
+
+    <select id="queryDateTypeState" resultType="java.lang.String">
+        select bdv.dmp_id
+        from blade_workstation_wcs bww
+                 left join blade_dmp_variables bdv on bww.dmp_variables_id = bdv.id
+        where workstation_id = #{workstationId}
+          and bww.data_type = #{code}
+          and bww.is_deleted = 0
+    </select>
+
+    <select id="selectMachineDetailByCode" resultType="com.qianwen.smartman.modules.cps.vo.MachineDetailVO">
+        select bm.id,
+               bm.tenant_id              tenantId,
+               bm.extend_id              extendId,
+               machine_code              machineCode,
+               machine_name              machineName,
+               machine_model             machineModel,
+               machine_life_status       machineLifeStatus,
+               machine_use_status        machineUseStatus,
+               factory_no                factoryNo,
+               assets_code               assetsCode,
+               brand,
+               nameplate,
+               bm.avatar,
+               serial_no                 serialNo,
+               factory_file              factoryFile,
+               manufacturer,
+               country_of_manufacture    countryOfManufacture,
+               system_name               systemName,
+               software_version          softwareVersion,
+               net_weight                netWeight,
+               power,
+               voltage,
+               dimensions,
+               production_time           productionTime,
+               delivery_time             deliveryTime,
+               depreciation_year         depreciationYear,
+               turn_to_fixed_assets_time turnToFixedAssetsTime,
+               invoice_value             invoiceValue,
+               ovfa,
+               net_asset_value           netAssetValue,
+               bm.organization_id        organizationId,
+               bcg2.name                 organizationName,
+               production_line           productionLine,
+               management_class          managementClass,
+               elaborate_equipment       elaborateEquipment,
+               bm.pin_code               pinCode,
+               short_code                shortCode,
+               installation_location     installationLocation,
+               bm.remark,
+               machine_type_id           machineTypeId,
+               bdt.name                  machineTypeName,
+               bdt.code                  machineTypeCode,
+               bm.group_id               groupId,
+               bcg1.name                 groupName,
+               bm.employee_id            employeeId,
+               be.name                   employeeName,
+               bm.status                 status
+        from blade_machine bm
+                 LEFT JOIN blade_device_type bdt
+                           on bm.machine_type_id = bdt.id and bdt.is_deleted = 0
+                 LEFT JOIN blade_common_group bcg1 on bm.group_id = bcg1.id and bcg1.is_deleted = 0
+                 LEFT JOIN blade_common_group bcg2 on bm.organization_id = bcg2.id and bcg2.is_deleted = 0
+                 LEFT JOIN blade_employee be on bm.employee_id = be.id and be.is_deleted = 0
+        where bm.machine_code = #{machineCode}
+    </select>
+
+    <select id="pageMachineByParam" resultType="com.qianwen.smartman.modules.cps.vo.MachineListVO">
+        select bm.id,
+        bm.machine_code machineCode,
+        bm.machine_name machineName,
+        bdt.id machineTypeId,
+        bdt.name machineTypeName,
+        bm.machine_model machineModel,
+        bcg.name groupName,
+        bm.machine_type_id,
+        bm.serial_no serialNo,
+        bm.short_code shortCode,
+        bm.machine_use_status machineUseStatus,
+        bm.status status
+        from blade_machine bm
+        LEFT JOIN blade_device_type bdt on bm.machine_type_id = bdt.id and bdt.is_deleted = 0
+        LEFT JOIN blade_common_group bcg on bm.group_id = bcg.id and bcg.is_deleted = 0
+        WHERE bm.is_deleted = 0
+        <if test="machineSelectVO.keyword != null and machineSelectVO.keyword != ''">
+            and (bm.machine_name like CONCAT(#{machineSelectVO.keyword}, '%')
+            or bm.machine_code like CONCAT(#{machineSelectVO.keyword}, '%'))
+        </if>
+        ORDER BY bm.create_time DESC,bm.id DESC
+    </select>
+    <!--    鏌ヨ鏈粦瀹氱殑鏈哄櫒-->
+    <select id="listNoBand" resultType="com.qianwen.smartman.modules.cps.vo.MachineVO">
+        select bm.*
+        from blade_machine bm
+        where bm.is_deleted = 0
+          AND bm.id not in (select bwom.machine_id
+                            from blade_workstation_of_machine bwom)
+    </select>
+    <select id="listHaveBand" resultType="com.qianwen.smartman.modules.cps.vo.MachineVO">
+        select bm.*
+        from blade_machine bm
+        where bm.is_deleted = 0
+          AND bm.id in (select bwom.machine_id
+                        from blade_workstation_of_machine bwom)
+    </select>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/MaintainItemMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/MaintainItemMapper.xml
new file mode 100644
index 0000000..1739fb2
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/MaintainItemMapper.xml
@@ -0,0 +1,41 @@
+<?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.qianwen.smartman.modules.cps.mapper.MaintainItemMapper">
+    <!-- 閫氳繃鏈哄櫒绫诲瀷Id鏌ヨ鍏宠仈鐨� -->
+    <select id="queryMaintainItemListCanRelate" resultType="com.qianwen.smartman.modules.cps.vo.MaintainItemVO">
+        SELECT item.id AS id,
+        item.code AS code,
+        item.name AS name,
+        item.requirement AS requirement,
+        item.remark AS remark
+        FROM blade_maintain_item item
+        WHERE item.is_deleted = 0 and item.status = 1
+        <if test="tenantId != null and tenantId != ''">
+            AND item.tenant_id = #{tenantId}
+        </if>
+        ORDER BY item.code ASC
+    </select>
+
+    <select id="export" resultType="com.qianwen.smartman.modules.cps.excel.MaintainItemExcel">
+        SELECT
+        item.code AS code,
+        item.name AS name,
+        item.requirement AS requirement,
+        item.remark AS remark
+        FROM blade_maintain_item item
+        WHERE item.is_deleted = 0
+        <if test="tenantId != null and tenantId != ''">
+            AND item.tenant_id = #{tenantId}
+        </if>
+        <if test="maintainItemExportDTO.status != null">
+            and item.status = #{maintainItemExportDTO.status}
+        </if>
+        <if test="maintainItemExportDTO.keyWord != null and maintainItemExportDTO.keyWord != ''">
+            AND (item.code like concat(#{maintainItemExportDTO.keyWord},'%')
+            OR item.name like concat(#{maintainItemExportDTO.keyWord},'%')
+            )
+        </if>
+        ORDER BY item.create_time desc,item.id desc
+    </select>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/MaintainProjectItemMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/MaintainProjectItemMapper.xml
new file mode 100644
index 0000000..cbacc5f
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/MaintainProjectItemMapper.xml
@@ -0,0 +1,58 @@
+<?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.qianwen.smartman.modules.cps.mapper.MaintainProjectItemMapper">
+    <!-- 鏍规嵁淇濆吇椤圭洰ID鏌ヨ淇濆吇椤� -->
+    <select id="getMaintainProjectItemVoByProjectId" resultType="com.qianwen.smartman.modules.cps.vo.MaintainProjectItemVO">
+        SELECT
+        pi.id AS id,
+        pi.project_id AS projectId,
+        pi.item_id AS itemId,
+        item.code AS itemCode,
+        item.name AS itemName,
+        item.requirement AS itemRequirement,
+        item.remark AS itemRemark
+        FROM
+        blade_maintain_project_item pi
+        INNER JOIN blade_maintain_item item ON pi.item_id = item.id
+        <where>
+            <if test="projectId != null">
+                AND pi.project_id = #{projectId}
+            </if>
+            AND pi.is_deleted = 0
+            AND item.is_deleted = 0
+            <if test="tenantId != null and tenantId != ''">
+                AND pi.tenant_id = #{tenantId}
+            </if>
+        </where>
+        ORDER BY
+        item.code ASC
+    </select>
+
+    <!-- 鏍规嵁淇濆吇椤圭洰ID鏌ヨ淇濆吇椤�(鍒嗛〉) -->
+    <select id="queryMaintainProjectItemListPage" resultType="com.qianwen.smartman.modules.cps.vo.MaintainProjectItemVO">
+        SELECT
+        pi.id AS id,
+        pi.project_id AS projectId,
+        pi.item_id AS itemId,
+        item.code AS itemCode,
+        item.name AS itemName,
+        item.requirement AS itemRequirement,
+        item.remark AS itemRemark
+        FROM
+        blade_maintain_project_item pi
+        INNER JOIN blade_maintain_item item ON pi.item_id = item.id
+        <where>
+            <if test="projectId != null">
+                AND pi.project_id = #{projectId}
+            </if>
+            AND pi.is_deleted = 0
+            AND item.is_deleted = 0
+            <if test="tenantId != null and tenantId != ''">
+                AND pi.tenant_id = #{tenantId}
+            </if>
+        </where>
+        ORDER BY
+        item.code ASC
+    </select>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/MalfunctionTypeMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/MalfunctionTypeMapper.xml
new file mode 100644
index 0000000..a5da4c6
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/MalfunctionTypeMapper.xml
@@ -0,0 +1,5 @@
+<?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.qianwen.smartman.modules.cps.mapper.MalfunctionTypeMapper">
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/MaterialMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/MaterialMapper.xml
new file mode 100644
index 0000000..64593ae
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/MaterialMapper.xml
@@ -0,0 +1,30 @@
+<?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.qianwen.smartman.modules.cps.mapper.MaterialMapper">
+
+    <select id="getPageMaterial" resultType="com.qianwen.smartman.modules.cps.vo.MaterialVO">
+        select bm.id,
+               bm.code,
+               bar_code barCode,
+               bm.name,
+               type_id typeId,
+               bmt.name typeName,
+               bmt.code typeCode,
+               unit,
+               stuff,
+               standard_model standardModel,
+               bm.remark,
+               lower_limit lowerLimit,
+               upper_limit upperLimit,
+               is_must_check isMustCheck,
+               property,
+               bm.status
+        from blade_material bm
+                 left join blade_material_type bmt on bm.type_id = bmt.id and bmt.is_deleted = 0
+        where bm.is_deleted = 0
+        <if test="ew!=null">
+            and ${ew.sqlSegment}
+        </if>
+    </select>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/MaterialStorageMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/MaterialStorageMapper.xml
new file mode 100644
index 0000000..2cb4f3b
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/MaterialStorageMapper.xml
@@ -0,0 +1,83 @@
+<?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.qianwen.smartman.modules.cps.mapper.MaterialStorageMapper">
+
+
+    <select id="listMaterial" resultType="com.qianwen.smartman.modules.cps.vo.WareMaterialStorageVO">
+        select bms.id,
+        material_id materialId,
+        warehouse_station_id warehouseStationId,
+        bm.code materialCode,
+        bm.name materialName,
+        standard_model materialStandardModel,
+        unit materialUnit,
+        type_id typeId,
+        lower_limit lowerLimit,
+        upper_limit upperLimit,
+        is_must_check isMustCheck,
+        property,
+        bmt.code typeCode,
+        bmt.name typeName
+        from blade_material_storage bms
+        INNER JOIN blade_material bm ON bms.material_id = bm.id
+        LEFT JOIN blade_material_type bmt on bm.type_id = bmt.id and bmt.is_deleted = 0
+        where bms.is_deleted = 0
+        and bm.is_deleted = 0
+        and warehouse_station_id = #{wareId}
+        <if test="keyword != null and keyword != ''">
+            and (bm.code like concat(#{keyword}, '%') or bm.name like concat(#{keyword}, '%'))
+        </if>
+    </select>
+
+    <select id="materialNotBind" resultType="com.qianwen.smartman.modules.cps.vo.MaterialVO">
+        select id,
+               code,
+               bar_code       barCode,
+               name,
+               type_id        typeId,
+               unit,
+               stuff,
+               standard_model standardModel,
+               remark,
+               lower_limit    lowerLimit,
+               upper_limit    upperLimit,
+               is_must_check  isMustCheck,
+               property
+        from blade_material bm
+        where bm.is_deleted = 0
+          and bm.status = 1
+          and not exists(select bms.material_id
+                         from blade_material_storage bms
+                         where bms.is_deleted = 0
+                           and bm.id = bms.material_id)
+        order by bm.create_time desc;
+    </select>
+
+    <select id="pageMaterial" resultType="com.qianwen.smartman.modules.cps.vo.WareMaterialStorageVO">
+        select bms.id,
+        material_id materialId,
+        warehouse_station_id warehouseStationId,
+        bm.code materialCode,
+        bm.name materialName,
+        standard_model materialStandardModel,
+        unit materialUnit,
+        type_id typeId,
+        lower_limit lowerLimit,
+        upper_limit upperLimit,
+        is_must_check isMustCheck,
+        property,
+        bmt.code typeCode,
+        bmt.name typeName
+        from blade_material_storage bms
+        INNER JOIN blade_material bm ON bms.material_id = bm.id
+        LEFT JOIN blade_material_type bmt on bm.type_id = bmt.id and bmt.is_deleted = 0
+        where bms.is_deleted = 0
+        and bm.is_deleted = 0
+        and warehouse_station_id = #{wareId}
+        <if test="keyword != null and keyword != ''">
+            and (bm.code like concat(#{keyword}, '%') or bm.name like concat(#{keyword}, '%'))
+        </if>
+        order by bm.create_time desc , bm.id desc;
+    </select>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/OrganizationMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/OrganizationMapper.xml
new file mode 100644
index 0000000..02f3bd6
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/OrganizationMapper.xml
@@ -0,0 +1,43 @@
+<?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.qianwen.smartman.modules.cps.mapper.OrganizationMapper">
+
+    <select id="selectOrganizationList" resultType="com.qianwen.smartman.modules.cps.dto.OrganizationDTO">
+        SELECT a.id,a.code,a.name,a.parent_id,
+        count(d.id) peopleNum,b.name parentName,a.status status
+        FROM blade_common_group a
+        LEFT JOIN blade_common_group b on b.id = a.parent_id and b.is_deleted = 0
+        AND a.group_type =b.group_type and a.group_category =b.group_category
+        LEFT JOIN blade_common_group_of_item c on c.group_id = a.id
+        LEFT JOIN blade_employee d on d.id = c.item_id and d.is_deleted = 0
+        <where>
+            a.is_deleted = 0
+            <if test="query.name != null and query.name != ''">
+                and a.name LIKE concat(#{query.name},'%')
+            </if>
+            <if test="query.status != null">
+                and a.status = #{query.status}
+            </if>
+            and a.group_type = #{query.groupType}
+            and a.group_category = #{query.groupCategory}
+        </where>
+        group by a.id,a.code,a.name,a.parent_id,b.name,a.sort,a.status
+        order by a.id desc
+    </select>
+
+    <select id="getOneEmployeeByOrganizationIdList" resultType="com.qianwen.smartman.modules.cps.entity.Employee">
+        select b.id
+        from blade_common_group_of_item a
+        join blade_employee b on b.id = a.item_id and b.is_deleted=0
+        <where>
+            <if test="organizationIdList != null and organizationIdList.size() > 0">
+                AND a.group_id IN
+                <foreach collection="organizationIdList" item="organizationId" open="(" separator="," close=")">
+                    #{organizationId}
+                </foreach>
+            </if>
+        </where>
+        LIMIT 1
+    </select>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProcessMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProcessMapper.xml
new file mode 100644
index 0000000..e644f9e
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProcessMapper.xml
@@ -0,0 +1,73 @@
+<?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.qianwen.smartman.modules.cps.mapper.ProcessMapper">
+
+
+    <select id="listPage" resultType="com.qianwen.smartman.modules.cps.dto.ProcessDTO">
+        SELECT
+        p.id,p.code,p.name,p.type,p.description,bd.dict_value as typeName,p.status
+        FROM blade_process p
+        LEFT JOIN blade_dict bd on bd.dict_key = p.type and bd.code = 'work_type'
+        WHERE p.is_deleted = 0 and p.status = #{status}
+        <if test="keyword != null and keyword != ''">
+            AND (p.code LIKE concat(#{keyword},'%') or p.name LIKE concat(#{keyword},'%') or bd.dict_value LIKE
+            concat(#{keyword},'%'))
+        </if>
+        ORDER BY p.create_time DESC , p.id DESC ;
+        <!--        ORDER BY p.create_time DESC-->
+        <!--        <if test="keywords != null and keywords != ''">-->
+        <!--            &lt;!&ndash; bind鏍囩鐨勪袱涓睘鎬ч兘鏄繀閫夐」锛宯ame涓虹粦瀹氬埌涓婁笅鏂囩殑鍙橀噺鍚嶏紝value涓篛GNL琛ㄨ揪寮� &ndash;&gt;-->
+        <!--            <bind name="temp" value="'%' + keywords + '%'"/>-->
+        <!--            and CONCAT_WS("-",w.code) like #{temp}-->
+        <!--        </if>-->
+    </select>
+    <resultMap id="BaseResultMap" type="com.qianwen.smartman.modules.cps.dto.ProcessDTO">
+        <id property="id" column="id"/>
+        <result column="code" property="code"/>
+        <result column="name" property="name"/>
+        <result column="type" property="type"/>
+        <result column="description" property="description"/>
+    </resultMap>
+
+    <select id="selectByIdWithType" resultType="com.qianwen.smartman.modules.cps.vo.ProcessDetailVO" parameterType="long">
+        SELECT p.id,
+               p.CODE,
+               p.NAME,
+               p.type,
+               p.description,
+               bd.dict_value AS typeName
+        FROM blade_process p
+                 LEFT JOIN blade_dict bd ON bd.dict_key = p.type
+            AND bd.CODE = 'work_type'
+        WHERE p.is_deleted = 0
+          AND p.id = #{processId}
+    </select>
+
+    <select id="existCraftProcess" resultType="java.lang.Integer">
+        select count(*)
+        from blade_process bp
+        where bp.is_deleted = 0
+        and exists(select *
+        from blade_production_craft_process bpcp
+        where bpcp.is_deleted = 0
+        and bpcp.process_id = bp.id
+        and bp.id in
+        <foreach collection="processIds" item="processId" index="index" open="(" close=")" separator=",">
+            #{processId}
+        </foreach>
+        )
+    </select>
+
+    <select id="listProcessExcel" resultType="com.qianwen.smartman.modules.cps.excel.ProcessExcel">
+        SELECT p.code,p.name,p.description,bd.dict_value as typeName
+        FROM blade_process p
+        LEFT JOIN blade_dict bd on bd.dict_key = p.type and bd.code = 'work_type'
+        WHERE p.is_deleted = 0 and p.status = #{status}
+        <if test="keyword != null and keyword != ''">
+            AND (p.code LIKE concat(#{keyword},'%') or p.name LIKE concat(#{keyword},'%') or bd.dict_value LIKE
+            concat(#{keyword},'%'))
+        </if>
+        ORDER BY p.create_time DESC , p.id DESC ;
+    </select>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProductMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProductMapper.xml
new file mode 100644
index 0000000..1b65ce5
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProductMapper.xml
@@ -0,0 +1,213 @@
+<?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.qianwen.smartman.modules.cps.mapper.ProductMapper">
+
+    <update id="removeBindCraft">
+        update blade_craft_routing set product_id = null where product_id
+        in
+        <foreach collection="ids" index="index" open="(" close=")" separator="," item="item">
+            #{item}
+        </foreach>
+    </update>
+
+    <select id="selectListByIds" resultType="com.qianwen.smartman.modules.cps.vo.ProductVO">
+        SELECT bp.*, bp2.code AS parentCode , bp2.name AS parentName ,bpt.name AS typeName FROM blade_product bp
+        left join blade_product bp2
+        on bp.parent_id =
+        bp2.id left join blade_product_type bpt on bp.type_id = bpt.id
+        <where>
+            bp.is_deleted = 0 AND
+            bp.id in
+            <foreach collection="ids" index="index" open="(" close=")" separator="," item="item">
+                #{item}
+            </foreach>
+        </where>
+        order by bp.${orderBy}
+    </select>
+
+    <select id="selectIdById" resultType="com.qianwen.smartman.modules.cps.entity.Product">
+        SELECT id FROM blade_product
+        <where>
+            is_deleted = 0 AND
+            id in
+            <foreach collection="param.ids" index="index" open="(" close=")" separator="," item="item">
+                #{item}
+            </foreach>
+            <if test="param.keyWord != null and param.keyWord != ''">
+                AND (code LIKE CONCAT(#{param.keyWord}, '%')
+                OR name LIKE CONCAT(#{param.keyWord}, '%') )
+            </if>
+            <if test="param.standardModel != null and param.standardModel != ''">
+                AND standard_model LIKE CONCAT(#{param.standardModel}, '%')
+            </if>
+            <if test="param.status != null ">
+                AND status = #{param.status}
+            </if>
+            <if test="param.typeIds != null and  param.typeIds != '' ">
+                AND type_id in
+                <foreach collection="param.typeIds" index="index" open="(" close=")" separator="," item="item">
+                    #{item}
+                </foreach>
+            </if>
+            order by ${param.orderBy}
+        </where>
+
+    </select>
+
+    <select id="getParentStatusCount" resultType="int">
+        select count(1) from blade_product where is_deleted = 0 and status = 1 and parent_id
+        in
+        <foreach collection="ids" index="index" open="(" close=")" separator="," item="item">
+            #{item}
+        </foreach>
+    </select>
+
+    <select id="getParentDetail" parameterType="long" resultType="com.qianwen.smartman.modules.cps.entity.Product">
+        SELECT id, parent_id, status
+        FROM `blade_product`
+        where id = (SELECT parent_id from blade_product where id = #{id})
+    </select>
+    <select id="selectListByParam" resultType="com.qianwen.smartman.modules.cps.vo.ProductVO">
+        SELECT bp.*, bp2.code AS parentCode , bp2.name AS parentName ,bpt.name AS typeName FROM blade_product bp
+        left join blade_product bp2
+        on bp.parent_id =
+        bp2.id left join blade_product_type bpt on bp.type_id = bpt.id
+        <where>
+            bp.is_deleted = 0
+            <if test="param.keyWord != null and param.keyWord != ''">
+                AND (bp.code LIKE CONCAT(#{param.keyWord}, '%')
+                OR bp.name LIKE CONCAT(#{param.keyWord}, '%') )
+            </if>
+            <if test="param.parentId != null">
+                AND bp.parent_id = #{param.parentId}
+            </if>
+            <if test="param.standardModel != null and param.standardModel != ''">
+                AND bp.standard_model LIKE CONCAT(#{param.standardModel}, '%')
+            </if>
+            <if test="param.status != null ">
+                AND bp.status = #{param.status}
+            </if>
+            <if test="param.typeIds != null and  param.typeIds != '' ">
+                AND bp.type_id in
+                <foreach collection="param.typeIds" index="index" open="(" close=")" separator="," item="item">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+        order by bp.create_time desc
+    </select>
+
+    <select id="notBandProduct" resultType="com.qianwen.smartman.modules.cps.entity.Product">
+        select id,
+               tenant_id,
+               code,
+               name,
+               parent_id,
+               type_id,
+               unit,
+               standard_model,
+               description,
+               documents,
+               create_user,
+               create_dept,
+               create_time,
+               update_user,
+               update_time,
+               status,
+               is_deleted
+        from blade_product bp
+        where not exists(select *
+                         from blade_craft_routing bcr
+                         where bcr.is_deleted = 0
+                           and bcr.product_id = bp.id
+                           and bcr.id != #{craftId})
+          and bp.is_deleted = 0;
+    </select>
+
+    <select id="exportProduct" resultType="com.qianwen.smartman.modules.cps.excel.ProductExcel">
+        select bp1.code,
+        bp1.name,
+        bp2.code parentId,
+        bpt.name typeName,
+        bp1.extend_field ,
+        bp1.unit,
+        bp1.standard_model,
+        bp1.description,
+        bp1.documents,
+        bp1.status,
+        bp1.extend_field
+        from blade_product bp1
+        left join blade_product bp2 on bp1.parent_id = bp2.id and bp2.is_deleted = 0
+        left join blade_product_type bpt on bp1.type_id = bpt.id and bpt.is_deleted = 0
+        where bp1.is_deleted = 0
+        <if test="ew!=null">
+            and ${ew.sqlSegment}
+        </if>
+        <if test="fieldSql != null and fieldSql != ''">
+            and ${fieldSql}
+        </if>
+        order by bp1.create_time desc,bp1.id desc ;
+    </select>
+
+    <select id="lazyTree" resultType="com.qianwen.smartman.modules.cps.vo.ProductEasyVO">
+        select bp1.id,
+        bp1.code,
+        bp1.name,
+        bp1.parent_id,
+        bp1.type_id,
+        bp1.unit,
+        bp1.standard_model,
+        bp1.description,
+        bp1.documents,
+        bp1.status,
+        bp1.extend_field,
+        bpt.name typeName
+        from blade_product bp1
+        left join blade_product_type bpt on bp1.type_id = bpt.id
+        where bp1.is_deleted = 0
+        <if test="ew!=null">
+            and ${ew.sqlSegment}
+        </if>
+        <if test="fieldSql != null and fieldSql != ''">
+            and ${fieldSql}
+        </if>
+        order by bp1.create_time desc,bp1.id desc ;
+    </select>
+    <select id="hasChild"
+            resultType="com.qianwen.smartman.modules.cps.dto.ProductCountDTO">
+        SELECT
+        parent_id AS productId,
+        count( parent_id ) AS count
+        FROM
+        blade_product
+        WHERE
+        is_deleted = 0
+        <if test="status == 1">
+            and status = 1
+        </if>
+        <if test="status == 0">
+            and status = 0
+        </if>
+        and parent_id IN
+        <foreach collection="ids" item="id" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+        GROUP BY
+        parent_id
+
+    </select>
+    <select id="lazyTreeCount" resultType="java.lang.Integer">
+        select
+        count(1)
+        from blade_product bp1
+        left join blade_product_type bpt on bp1.type_id = bpt.id
+        where bp1.is_deleted = 0
+        <if test="ew!=null">
+            and ${ew.sqlSegment}
+        </if>
+        <if test="fieldSql != null and fieldSql != ''">
+            and ${fieldSql}
+        </if>
+    </select>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProductTypeMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProductTypeMapper.xml
new file mode 100644
index 0000000..dcd9369
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProductTypeMapper.xml
@@ -0,0 +1,6 @@
+<?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.qianwen.smartman.modules.cps.mapper.ProductTypeMapper">
+
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProductionCraftProcessFileMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProductionCraftProcessFileMapper.xml
new file mode 100644
index 0000000..26320f9
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProductionCraftProcessFileMapper.xml
@@ -0,0 +1,6 @@
+<?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.qianwen.smartman.modules.cps.mapper.ProductionCraftProcessFileMapper">
+
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProductionCraftProcessMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProductionCraftProcessMapper.xml
new file mode 100644
index 0000000..6d96563
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProductionCraftProcessMapper.xml
@@ -0,0 +1,12 @@
+<?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.qianwen.smartman.modules.cps.mapper.ProductionCraftProcessMapper">
+
+    <select id="getVersionStatus" resultType="java.lang.Integer">
+        select edition_status
+        from blade_production_craft_version
+        where id = #{craftId}
+          and is_deleted = 0;
+    </select>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProductionCraftProcessRelatedFixtureMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProductionCraftProcessRelatedFixtureMapper.xml
new file mode 100644
index 0000000..72eca44
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProductionCraftProcessRelatedFixtureMapper.xml
@@ -0,0 +1,23 @@
+<?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.qianwen.smartman.modules.cps.mapper.ProductionCraftProcessRelatedFixtureMapper">
+
+    <!--    鏍规嵁宸ヨ壓鐗堟湰宸ュ簭ID鑾峰緱宸ヨ壓鍏宠仈澶瑰叿-->
+    <select id="getProductionCraftProcessRelatedFixtureListByProcessId"
+            resultType="com.qianwen.smartman.modules.cps.vo.ProductionCraftProcessRelatedFixtureVO">
+        SELECT f.fixture_id,
+               f.version_process_id,
+               f.id,
+               g.name  AS fixtureGroupName,
+               bf.code AS fixtureCode,
+               bf.name AS fixtureName
+        FROM blade_production_craft_process_related_fixture f
+                 LEFT JOIN blade_fixture bf ON f.fixture_id = bf.id
+            AND bf.is_deleted = 0
+                 LEFT JOIN blade_common_group_of_item item ON f.fixture_id = item.item_id
+                 LEFT JOIN blade_common_group g ON item.group_id = g.id
+        WHERE f.version_process_id = #{processId}
+
+    </select>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProductionCraftProcessRelatedToolMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProductionCraftProcessRelatedToolMapper.xml
new file mode 100644
index 0000000..f0e509f
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProductionCraftProcessRelatedToolMapper.xml
@@ -0,0 +1,6 @@
+<?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.qianwen.smartman.modules.cps.mapper.ProductionCraftProcessRelatedToolMapper">
+
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProductionCraftVersionMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProductionCraftVersionMapper.xml
new file mode 100644
index 0000000..7424347
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ProductionCraftVersionMapper.xml
@@ -0,0 +1,39 @@
+<?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.qianwen.smartman.modules.cps.mapper.ProductionCraftVersionMapper">
+
+    <select id="listVersion" resultType="com.qianwen.smartman.modules.cps.dto.CraftVersionDTO">
+        select bpcv.id,
+               bpcv.name,
+               description,
+               craft_id         craftId,
+               edition_status   editionStatus,
+               bpcv.create_time createTime,
+               bpcv.update_time updateTime,
+               u1.account     createUser,
+               u2.account     updateUser
+        from blade_production_craft_version bpcv
+                 left join blade_user u1 on bpcv.create_user = u1.id and u1.is_deleted = 0
+                 left join blade_user u2 on bpcv.update_user = u2.id and u2.is_deleted = 0
+        where bpcv.is_deleted = 0
+          and bpcv.craft_id = #{craftId};
+    </select>
+
+    <select id="detailVersion" resultType="com.qianwen.smartman.modules.cps.dto.CraftVersionDTO">
+        select bpcv.id,
+               bpcv.name,
+               description,
+               craft_id         craftId,
+               edition_status   editionStatus,
+               bpcv.create_time createTime,
+               bpcv.update_time updateTime,
+               u1.account     createUser,
+               u2.account     updateUser
+        from blade_production_craft_version bpcv
+                 left join blade_user u1 on bpcv.create_user = u1.id and u1.is_deleted = 0
+                 left join blade_user u2 on bpcv.update_user = u2.id and u2.is_deleted = 0
+        where bpcv.is_deleted = 0
+          and bpcv.id = #{id};
+    </select>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ShiftModelMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ShiftModelMapper.xml
new file mode 100644
index 0000000..2dbbb55
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ShiftModelMapper.xml
@@ -0,0 +1,68 @@
+<?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.qianwen.smartman.modules.cps.mapper.ShiftModelMapper">
+    <resultMap id="shiftMap" type="com.qianwen.smartman.modules.cps.vo.ShiftVO">
+        <id column="id" property="id"/>
+        <result column="code" property="code"/>
+        <result column="name" property="name"/>
+        <result column="shift_number" property="shiftNumber"/>
+        <result column="colour" property="colour"/>
+        <result column="start_time" property="startTime"/>
+        <result column="end_time" property="endTime"/>
+        <collection property="shiftDetailVOList" ofType="com.qianwen.smartman.modules.cps.vo.ShiftDetailVO">
+            <id column="shiftId" property="id"/>
+            <result column="shift_index" property="shiftIndex"/>
+            <result column="shift_start_time" property="shiftStartTime"/>
+            <result column="shift_end_time" property="shiftEndTime"/>
+            <result column="rest_number" property="restNumber"/>
+            <result column="index_name" property="indexName"/>
+            <collection property="shiftRestTimeVOList" ofType="com.qianwen.smartman.modules.cps.vo.ShiftRestTimeVO">
+                <id column="restId" property="id"/>
+                <result column="rest_start_time" property="restStartTime"/>
+                <result column="rest_end_time" property="restEndTime"/>
+                <result column="rest_index" property="restIndex"/>
+            </collection>
+        </collection>
+    </resultMap>
+
+    <!--鏌ヨ鐝妯″瀷璇︽儏-->
+    <select id="getShiftDetail" resultMap="shiftMap">
+        select
+        t1.id,t1.code,t1.name,t1.shift_number,t1.colour,t1.start_time,t1.end_time,
+        t2.id as shiftId,t2.shift_index,t2.shift_start_time,t2.shift_end_time,t2.rest_number,t2.index_name,
+        t3.id as restId,t3.rest_start_time,t3.rest_end_time,t3.rest_index
+        from blade_shift_model t1
+        left join blade_shift_detail t2 on t1.id = t2.model_id
+        LEFT JOIN blade_shift_rest_time t3 on t2.id = t3.shift_id
+        <where>
+            t1.id = #{modelId}
+        </where>
+    </select>
+
+    <!--鏍规嵁绉熸埛id鑾峰彇鐝涓嬫爣鍚嶇О-->
+    <select id="getShiftIndexNameByTenantId" resultType="com.qianwen.smartman.modules.cps.entity.ShiftDetail">
+        select distinct t1.shift_index,
+                        t1.index_name
+        from blade_shift_detail t1
+                 left join blade_shift_model t2 on t1.model_id = t2.id
+        where t2.tenant_id = #{tenantId}
+          and t2.is_deleted = 0
+          and t2.status = 1
+    </select>
+
+    <select id="getShiftTime" resultType="com.qianwen.smartman.modules.cps.entity.ShiftDetail">
+        select t4.shift_start_time, t4.shift_end_time
+        from blade_shift_model t3
+                 left join blade_shift_detail t4 on t3.id = t4.model_id
+        where t3.id = (select t2.model_id
+                       from blade_production_calendar t1
+                                left join blade_production_calendar_day t2 on t1.id = t2.calendar_id
+                       where t1.year = #{year}
+                         and t1.code = #{calendarCode}
+                         and t1.tenant_id = #{tenantId}
+                         and t1.is_deleted = 0
+                         and t2.calendar_date = #{localDate})
+          and t4.shift_index = #{shiftIndex}
+    </select>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ShiftRestTimeMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ShiftRestTimeMapper.xml
new file mode 100644
index 0000000..4e3fdf8
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ShiftRestTimeMapper.xml
@@ -0,0 +1,21 @@
+<?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.qianwen.smartman.modules.cps.mapper.ShiftRestTimeMapper">
+
+    <insert id="saveBatch" parameterType="java.util.List">
+        insert into blade_shift_rest_time
+        (id,shift_id,rest_start_time,rest_end_time,model_id,rest_index)
+        values
+        <foreach collection="list" item="item" index="index" separator=",">
+            (
+            #{item.id},
+            #{item.shiftId},
+            #{item.restStartTime},
+            #{item.restEndTime},
+            #{item.modelId},
+            #{item.restIndex}
+            )
+        </foreach>
+    </insert>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/TdengineMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/TdengineMapper.xml
new file mode 100644
index 0000000..ab6e99a
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/TdengineMapper.xml
@@ -0,0 +1,245 @@
+<?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.qianwen.smartman.modules.cps.mapper.TdengineMapper">
+
+    <update id="dropTdengine">
+        DROP
+            DATABASE IF EXISTS iot_data;
+    </update>
+
+    <update id="initTdengine">
+        CREATE DATABASE iot_data KEEP 3650 DURATION 10 WAL_LEVEL 1;
+    </update>
+
+    <update id="initTdengineSuperState">
+        CREATE TABLE IF NOT EXISTS iot_data.super_state (ts TIMESTAMP, value_collect TINYINT, calendar_code NCHAR(128), factory_year INT, factory_month TINYINT, factory_week INT, factory_date INT, shift_index TINYINT, shift_time_type TINYINT, wcs TINYINT, rps TINYINT, is_fix_point BOOL, is_sync BOOL, is_plan TINYINT, feedback_point_type TINYINT, feedback_id BIGINT, is_deleted BOOL, employee_id BIGINT) TAGS (workstation_id BIGINT);
+    </update>
+    <update id="initTdengineSuperOutput">
+        CREATE TABLE IF NOT EXISTS iot_data.super_output (ts TIMESTAMP, value_collect BIGINT, param_type INT, calendar_code NCHAR(128), factory_year INT, factory_month TINYINT, factory_week INT, factory_date INT, shift_index TINYINT, shift_time_type TINYINT, program NCHAR(128), product_code NCHAR(128), product_name NCHAR(128), is_sync BOOL, employee_id BIGINT) TAGS (workstation_id BIGINT);
+    </update>
+    <update id="initTdengineSuperAlarm">
+        CREATE TABLE IF NOT EXISTS iot_data.super_alarm
+        (
+            ts
+                            TIMESTAMP,
+            calendar_code
+                            NCHAR(128),
+            factory_year    INT,
+            factory_month   TINYINT,
+            factory_week    INT,
+            factory_date    INT,
+            shift_index     TINYINT,
+            shift_time_type TINYINT,
+            code            NCHAR(64),
+            message         NCHAR(256),
+            level           NCHAR(32)
+        )
+            TAGS
+        ( workstation_id BIGINT);
+    </update>
+    <update id="initTdengineSuperAggregateaOutput">
+        CREATE TABLE IF NOT EXISTS iot_data.super_aggregate_output
+        (
+            ts
+                            TIMESTAMP,
+            pre_ts
+                            TIMESTAMP,
+            output
+                            BIGINT,
+            cur_output
+                            BIGINT,
+            pre_output
+                            BIGINT,
+            calendar_code
+                            NCHAR(128),
+            factory_year    INT,
+            factory_month   TINYINT,
+            factory_week    INT,
+            factory_date    INT,
+            shift_index     TINYINT,
+            shift_time_type TINYINT,
+            program         NCHAR(128),
+            product_code    NCHAR(128),
+            product_name    NCHAR(128),
+            employee_id     BIGINT
+        )
+            TAGS
+        ( workstation_id BIGINT);
+
+    </update>
+    <update id="initTdengineSuperAggregateaState">
+        CREATE TABLE IF NOT EXISTS iot_data.super_aggregate_state (ts TIMESTAMP, end_time TIMESTAMP, duration_collect BIGINT, value_collect TINYINT, calendar_code NCHAR(128), factory_year INT, factory_month TINYINT, factory_week INT, factory_date INT, shift_index TINYINT, shift_time_type TINYINT, wcs TINYINT, rps TINYINT, is_deleted BOOL, is_plan TINYINT, employee_id BIGINT) TAGS (workstation_id BIGINT);
+    </update>
+    <update id="initTdengineSuperCollectData">
+        CREATE TABLE IF NOT EXISTS iot_data.super_collect_data
+        (
+            ts
+                TIMESTAMP,
+            v
+                NCHAR(256)
+        )
+            TAGS
+        ( workstation_id
+            BIGINT,
+            n
+            NCHAR
+            (
+            64
+            ));
+    </update>
+    <!--dmp 淇″彿瑙﹀彂鏃ュ織-->
+    <update id="initTdengineDmpLogSignal">
+        CREATE TABLE IF NOT EXISTS super_dmp_log_signal
+        (
+            ts
+                              TIMESTAMP,
+            trace_id
+                              NCHAR(128),
+            type              INT,
+            machine_name      NCHAR(30),
+            affected_variable NCHAR(128),
+            variable_value    NCHAR(128),
+            status            INT
+
+        ) TAGS
+        ( machine_code NCHAR
+            (
+            128
+            ), collect_month INT);
+    </update>
+
+    <!--dmp 淇″彿瑙﹀彂澶勭悊鏃ュ織-->
+    <update id="initTdengineDmpLogSignalFlow">
+        CREATE TABLE IF NOT EXISTS super_dmp_log_signal_flow
+        (
+            ts
+                    TIMESTAMP,
+            trace_id
+                    NCHAR(128),
+            type    INT,
+            message NCHAR(255)
+
+        ) TAGS
+        ( machine_code NCHAR
+            (
+            128
+            ), collect_month INT);
+    </update>
+
+    <!--dmp 淇″彿瑙﹀彂鏂规硶鎵ц鏃堕暱鏃ュ織-->
+    <update id="initTdengineDmpLogMethodTime">
+        CREATE TABLE IF NOT EXISTS super_dmp_log_method_time
+        (
+            ts
+                               TIMESTAMP,
+            trace_id
+                               NCHAR(128),
+            type               INT,
+            method_name        NCHAR(128),
+            method_description NCHAR(128),
+            spend_time_seconds BIGINT
+        ) TAGS
+        ( machine_code NCHAR
+            (
+            128
+            ), collect_month INT);
+
+    </update>
+
+
+    <update id="initTdengineSuperAggregateStateWithFeedback">
+        CREATE TABLE IF NOT EXISTS iot_data.super_aggregate_state_with_feedback (ts TIMESTAMP, end_time TIMESTAMP, duration_collect BIGINT, value_collect TINYINT, calendar_code NCHAR(128), factory_year INT, factory_month TINYINT, factory_week INT, factory_date INT, shift_index TINYINT, shift_time_type TINYINT, wcs TINYINT, rps TINYINT, is_deleted BOOL, is_plan TINYINT, feedback_id BIGINT) TAGS (workstation_id BIGINT);
+    </update>
+
+    <update id="initTdengineSuperJsonCollect">
+        CREATE TABLE IF NOT EXISTS iot_data.super_collect_data_json
+        (
+            ts
+                timestamp,
+            v
+                NCHAR(1024)
+        ) TAGS
+        ( workstation_id BIGINT);
+    </update>
+
+    <update id="dropTable" parameterType="string">
+        DROP TABLE IF EXISTS iot_data.${tableName}
+    </update>
+
+    <update id="initTdengineCountPulseData">
+        CREATE TABLE IF NOT EXISTS super_count_data
+        (
+            ts              TIMESTAMP,
+            value_collect           BIGINT,
+            calendar_code   NCHAR(128),
+            factory_year    INT,
+            factory_month   TINYINT,
+            factory_week    INT,
+            factory_date    INT,
+            shift_index     TINYINT,
+            shift_time_type TINYINT,
+            program         NCHAR(128),
+            product_code    NCHAR(128),
+            product_name    NCHAR(128),
+            is_sync         BOOL,
+            employee_id     BIGINT
+        ) TAGS (workstation_id BIGINT, usage_code BINARY(50));
+        CREATE TABLE IF NOT EXISTS super_pulse_data
+        (
+            ts              TIMESTAMP,
+            value_collect           BIGINT,
+            calendar_code   NCHAR(128),
+            factory_year    INT,
+            factory_month   TINYINT,
+            factory_week    INT,
+            factory_date    INT,
+            shift_index     TINYINT,
+            shift_time_type TINYINT,
+            program         NCHAR(128),
+            product_code    NCHAR(128),
+            product_name    NCHAR(128),
+            is_sync         BOOL,
+            employee_id     BIGINT
+        ) TAGS (workstation_id BIGINT, usage_code BINARY(50));
+        create table if not exists iot_data.super_aggregate_count_data
+        (
+            ts              timestamp,
+            pre_ts          timestamp,
+            output          BIGINT,
+            cur_output      BIGINT,
+            pre_output      BIGINT,
+            calendar_code   NCHAR(128),
+            factory_year    INT,
+            factory_month   TINYINT,
+            factory_week    INT,
+            factory_date    INT,
+            shift_index     TINYINT,
+            shift_time_type TINYINT,
+            program         NCHAR(128),
+            product_code    NCHAR(128),
+            product_name    NCHAR(128),
+            employee_id     BIGINT
+        ) TAGS(workstation_id BIGINT, usage_code BINARY(50));
+        create table if not exists iot_data.super_aggregate_pulse_data
+        (
+            ts              timestamp,
+            pre_ts          timestamp,
+            output          BIGINT,
+            cur_output      BIGINT,
+            pre_output      BIGINT,
+            calendar_code   NCHAR(128),
+            factory_year    INT,
+            factory_month   TINYINT,
+            factory_week    INT,
+            factory_date    INT,
+            shift_index     TINYINT,
+            shift_time_type TINYINT,
+            program         NCHAR(128),
+            product_code    NCHAR(128),
+            product_name    NCHAR(128),
+            employee_id     BIGINT
+        ) TAGS(workstation_id BIGINT, usage_code BINARY(50));
+    </update>
+
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ToolAppendixMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ToolAppendixMapper.xml
new file mode 100644
index 0000000..fb5b582
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/ToolAppendixMapper.xml
@@ -0,0 +1,6 @@
+<?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.qianwen.smartman.modules.cps.mapper.ToolAppendixMapper">
+
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/TrayFixtureMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/TrayFixtureMapper.xml
new file mode 100644
index 0000000..f0292cb
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/TrayFixtureMapper.xml
@@ -0,0 +1,32 @@
+<?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.qianwen.smartman.modules.cps.mapper.TrayFixtureMapper">
+
+    <update id="updateFixtureStatus">
+        update blade_fixture
+        set fixture_status = null, in_use = 0
+        where id in (select btf.fix_id
+        from blade_tray_fixture btf
+        where tray_id in
+        <foreach collection="trayIds" item="trayId" open="(" separator="," close=")">
+            #{trayId}
+        </foreach>
+        )
+    </update>
+
+
+    <select id="listFixture" resultType="com.qianwen.smartman.modules.cps.vo.TrayFaceFixtureVO">
+        select btf.id,
+               tray_id as trayId,
+               face_id as faceId,
+               fix_id  as fixId,
+               bf.code    fixtureCode,
+               bf.name    fixtureName
+        from blade_tray_fixture btf
+                 left join blade_fixture bf on btf.fix_id = bf.id and bf.is_deleted = 0
+        where btf.is_deleted = 0
+          and btf.face_id = #{faceId}
+        order by bf.create_time desc, bf.id desc
+    </select>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/TrayMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/TrayMapper.xml
new file mode 100644
index 0000000..1c1f4e4
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/TrayMapper.xml
@@ -0,0 +1,157 @@
+<?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.qianwen.smartman.modules.cps.mapper.TrayMapper">
+
+    <update id="updateFixTure">
+        update blade_fixture bf
+        set bf.fixture_status = #{status}
+        where bf.id in (select btf.fix_id
+                        from blade_tray_fixture btf
+                        where btf.tray_id = #{id})
+    </update>
+
+    <select id="trayPage" resultType="com.qianwen.smartman.modules.cps.vo.PageTrayVO">
+        select bt.id,
+        bt.code,
+        bt.name,
+        bt.tray_status as trayStatus,
+        bt.description,
+        bt.category,
+        bt.standard_model standardModel,
+        bt.availability,
+        bt.remark,
+        bcg.id groupId,
+        bcg.name groupName
+        from blade_tray bt
+        left join blade_common_group_of_item bcgoi on bt.id = bcgoi.item_id
+        left join blade_common_group bcg on bcgoi.group_id = bcg.id
+        where bt.is_deleted = 0
+        <if test="groupId != null">
+            and group_id = #{groupId}
+        </if>
+        and bcg.is_deleted = 0
+        <if test="keyword != null and keyword != ''">
+            and (bt.code like concat(#{keyword}, '%') or bt.name like concat(#{keyword}, '%'))
+        </if>
+        order by bt.create_time desc,bt.id desc
+    </select>
+
+    <select id="trayTree" resultType="com.qianwen.smartman.modules.cps.vo.ToolingVO">
+        SELECT bcg1.id,
+               bcg1.code,
+               bcg1.name,
+               bcg1.parent_id as parentId,
+               count(bt.id)      numbers,
+               bcg2.name         parentName
+        FROM blade_common_group bcg1
+                 LEFT JOIN blade_common_group bcg2 on bcg2.id = bcg1.parent_id and bcg2.is_deleted = 0
+            AND bcg1.group_type = bcg2.group_type and bcg1.group_category = bcg2.group_category
+                 LEFT JOIN blade_common_group_of_item bcgoi on bcgoi.group_id = bcg1.id
+                 LEFT JOIN blade_tray bt on bt.id = bcgoi.item_id and bt.is_deleted = 0
+        where bcg1.is_deleted = 0
+          and bcg1.group_type = #{query.groupType}
+          and bcg1.group_category = #{query.groupCategory}
+        group by bcg1.id, bcg1.code, bcg1.name, bcg1.parent_id, bcg2.name;
+    </select>
+
+    <select id="fixtureTree" resultType="com.qianwen.smartman.modules.cps.vo.ToolingVO">
+        SELECT bcg1.id,
+               bcg1.code,
+               bcg1.name,
+               bcg1.parent_id as parentId,
+               count(bf.id)      numbers,
+               bcg2.name         parentName
+        FROM blade_common_group bcg1
+                 LEFT JOIN blade_common_group bcg2 on bcg2.id = bcg1.parent_id and bcg2.is_deleted = 0
+            AND bcg1.group_type = bcg2.group_type and bcg1.group_category = bcg2.group_category
+                 LEFT JOIN blade_common_group_of_item bcgoi on bcgoi.group_id = bcg1.id
+                 LEFT JOIN blade_fixture bf on bf.id = bcgoi.item_id and bf.is_deleted = 0
+        where bcg1.is_deleted = 0
+          and bcg1.group_type = #{query.groupType}
+          and bcg1.group_category = #{query.groupCategory}
+        group by bcg1.id, bcg1.code, bcg1.name, bcg1.parent_id, bcg2.name;
+    </select>
+
+    <select id="groupTray" resultType="com.qianwen.smartman.modules.cps.vo.TrayTreeVO">
+        select bt.id,
+               bt.code,
+               bt.name,
+               bcg.id parentId,
+               0 as   isGroup
+        from blade_tray bt
+                 LEFT JOIN blade_common_group_of_item bcgoi ON bt.id = bcgoi.item_id
+                 LEFT JOIN blade_common_group bcg on bcgoi.group_id = bcg.id and bcg.is_deleted = 0
+        where bt.is_deleted = 0
+    </select>
+
+    <select id="unUsedGroupTray" resultType="com.qianwen.smartman.modules.cps.vo.TrayTreeVO">
+        select bt.id,
+               bt.code,
+               bt.name,
+               bcg.id parentId,
+               0 as   isGroup
+        from blade_tray bt
+                 LEFT JOIN blade_common_group_of_item bcgoi ON bt.id = bcgoi.item_id
+                 LEFT JOIN blade_common_group bcg on bcgoi.group_id = bcg.id and bcg.is_deleted = 0
+        where bt.is_deleted = 0
+          and bt.in_use = 0
+    </select>
+
+    <select id="removeFaceFixture" resultType="java.lang.Integer">
+        select count(*)
+        from blade_fixture bf
+        where bf.is_deleted = 0
+        and exists(select *
+        from blade_production_craft_process_related_fixture bpcprf
+        where bpcprf.fixture_id = bf.id
+        and exists(select *
+        from blade_tray_fixture btf
+        where bpcprf.fixture_id = btf.fix_id
+        and btf.is_deleted = 0
+        and btf.tray_id in
+        <foreach collection="ids" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>)
+        )
+    </select>
+
+    <select id="getWarehouseAreaTrayList" resultType="com.qianwen.smartman.modules.fms.vo.FmsWarehouseAreaTrayVO">
+        SELECT bt.code code,
+        bt.availability availability,
+        bfrtt.current_position currentPosition,
+        bfrtt.current_station currentStation,
+        bfrtt.order_code orderCode,
+        bfrtt.process_code processCode,
+        bfrtt.components_number componentsNumber,
+        bfrtt.part_type partType,
+        bfrtt.order_id orderId,
+        fo.product_code productCode
+        FROM blade_tray bt
+        LEFT JOIN blade_tray_storage bts ON bt.id = bts.tray_id and bts.is_deleted = 0
+        LEFT JOIN blade_warehouse_station bws ON bws.id = bts.warehouse_station_id and bws.is_deleted = 0
+        LEFT JOIN blade_fms_real_time_tray bfrtt ON bfrtt.tray_code = bt.code and bfrtt.is_deleted = 0
+        LEFT JOIN blade_fms_order fo on fo.id=bfrtt.order_id and fo.is_deleted = 0
+        WHERE bt.is_deleted = 0
+        <if test="areaId != null">
+            and bws.area_id = #{areaId}
+        </if>
+        order by bt.create_time desc, bt.id desc
+    </select>
+
+    <select id="getWarehouseAreaTray" resultType="com.qianwen.smartman.modules.cps.dto.TrayWarehouseAreaDTO">
+        SELECT bt.CODE  trayCode,
+               bwa.code areaCode
+        FROM blade_tray bt
+                 LEFT JOIN blade_tray_storage bts ON bt.id = bts.tray_id
+            AND bts.is_deleted = 0
+                 LEFT JOIN blade_warehouse_station bws ON bws.id = bts.warehouse_station_id
+            AND bws.is_deleted = 0
+                 LEFT JOIN blade_fms_real_time_tray bfrtt ON bfrtt.tray_code = bt.CODE
+            AND bfrtt.is_deleted = 0
+                 LEFT JOIN blade_warehouse_area bwa on bwa.id = bws.area_id
+        WHERE bt.is_deleted = 0
+          AND bfrtt.tray_code IS NOT NULL
+          and bwa.code is not null
+    </select>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/TrayStorageMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/TrayStorageMapper.xml
new file mode 100644
index 0000000..01acc01
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/TrayStorageMapper.xml
@@ -0,0 +1,19 @@
+<?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.qianwen.smartman.modules.cps.mapper.TrayStorageMapper">
+
+
+    <select id="listTray" resultType="com.qianwen.smartman.modules.cps.vo.WareTrayStorageVO">
+        select bts.id,
+               tray_id              trayId,
+               warehouse_station_id warehouseStationId,
+               bt.code              trayCode,
+               bt.name              trayName
+        from blade_tray_storage bts
+                 left join blade_tray bt on bts.tray_id = bt.id and bt.is_deleted = 0
+        where bts.warehouse_station_id = #{id}
+          and bts.is_deleted = 0
+        order by bt.create_time desc, bt.id desc;
+    </select>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/TraySurfaceMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/TraySurfaceMapper.xml
new file mode 100644
index 0000000..48cbbbe
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/TraySurfaceMapper.xml
@@ -0,0 +1,54 @@
+<?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.qianwen.smartman.modules.cps.mapper.TraySurfaceMapper">
+
+
+    <select id="listTraySurface" resultType="com.qianwen.smartman.modules.cps.vo.TraySurfaceVO">
+        select bts.id,
+               bts.tray_id   trayId,
+               bts.name,
+               bts.code,
+               program_code  programCode,
+               bts.in_use    inUse,
+               count(btf.id) fixtureNum
+        from blade_tray_surface bts
+                 left join blade_tray_fixture btf on bts.id = btf.face_id and btf.is_deleted = 0
+        where bts.is_deleted = 0
+          and bts.tray_id = #{trayId}
+        group by bts.id, bts.tray_id, bts.name, bts.code, program_code, bts.in_use
+        order by bts.code
+    </select>
+
+    <select id="listByTrayCodeName" resultType="com.qianwen.smartman.modules.cps.entity.TraySurface">
+        select bts.id,
+        tray_id trayId,
+        bts.name,
+        bts.code,
+        program_code programCode,
+        bts.in_use inUse
+        from blade_tray_surface bts
+        INNER JOIN blade_tray bt on bts.tray_id = bt.id
+        where bts.is_deleted = 0
+        and bt.is_deleted = 0
+        <if test="ew!=null">
+            and ${ew.sqlSegment}
+        </if>
+    </select>
+
+    <select id="removeFixture" resultType="java.lang.Integer">
+        select count(*)
+        from blade_fixture bf
+        where bf.is_deleted = 0
+          and exists(select *
+                     from blade_production_craft_process_related_fixture bpcprf
+                     where bpcprf.fixture_id = bf.id
+                       and exists(select *
+                                  from blade_tray_fixture btf
+                                  where bpcprf.fixture_id = btf.fix_id
+                                    and btf.is_deleted = 0
+                                    and btf.face_id = #{faceId}
+                                    and btf.tray_id = #{trayId})
+            )
+    </select>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/WarehouseAreaMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/WarehouseAreaMapper.xml
new file mode 100644
index 0000000..9117846
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/WarehouseAreaMapper.xml
@@ -0,0 +1,17 @@
+<?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.qianwen.smartman.modules.cps.mapper.WarehouseAreaMapper">
+
+
+    <select id="stationList" resultType="com.qianwen.smartman.modules.cps.vo.WarehouseAreaStationVO">
+        select bws.id         as id,
+               area_id           parentId,
+               warehouse_code as code,
+               warehouse_name as name,
+               0          as isArea
+        from blade_warehouse_station bws
+                 LEFT JOIN blade_warehouse_area bwa on bws.area_id = bwa.id and bwa.is_deleted = 0
+        where bws.is_deleted = 0
+    </select>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/WarehouseGridMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/WarehouseGridMapper.xml
new file mode 100644
index 0000000..ceed8c5
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/WarehouseGridMapper.xml
@@ -0,0 +1,6 @@
+<?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.qianwen.smartman.modules.cps.mapper.WarehouseGridMapper">
+
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/WarehouseStationMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/WarehouseStationMapper.xml
new file mode 100644
index 0000000..8766724
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/WarehouseStationMapper.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.qianwen.smartman.modules.cps.mapper.WarehouseStationMapper">
+
+    <select id="listPage" resultType="com.qianwen.smartman.modules.cps.entity.WarehouseStation">
+        SELECT
+        ws.id,
+        ws.warehouse_code AS warehouseCode,
+        ws.warehouse_name AS warehouseName,
+        wa.name AS warehouseAreaName,
+        wa.code AS warehouseAreaCode,
+        ws.avatar,
+        ws.remark
+        FROM
+        blade_warehouse_station ws
+        LEFT JOIN blade_warehouse_area wa ON ws.area_id = wa.id
+        WHERE
+        ws.is_deleted = 0
+        <if test="areaId != null">
+            and wa.id = #{areaId}
+        </if>
+
+        <if test="keyWord !='' and keyWord !=null">
+            AND ( ws.warehouse_code LIKE CONCAT(#{keyWord},'%') OR warehouse_name LIKE CONCAT(#{keyWord},'%') )
+        </if>
+        ORDER BY ws.create_time DESC,ws.id desc ;
+
+    </select>
+
+    <select id="getWarehouseStationList" resultType="com.qianwen.smartman.modules.cps.vo.WarehouseStationVO">
+        select a.id,b.code warehouseAreaCode
+        from blade_warehouse_station a
+        join blade_warehouse_area b on b.id = a.area_id
+        <where>
+            and a.is_deleted=0
+            and b.is_deleted=0
+            <if test="ids != null and ids.size() > 0">
+                AND a.id IN
+                <foreach collection="ids" item="id" open="(" separator="," close=")">
+                    #{id}
+                </foreach>
+            </if>
+        </where>
+    </select>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/WorkstationMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/WorkstationMapper.xml
new file mode 100644
index 0000000..276ecf7
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/WorkstationMapper.xml
@@ -0,0 +1,495 @@
+<?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.qianwen.smartman.modules.cps.mapper.WorkstationMapper">
+
+
+    <select id="listPage" resultType="com.qianwen.smartman.modules.cps.vo.WorkstationVO">
+        SELECT
+        a.id,
+        a.name,
+        a.code,
+        a.type,
+        a.calendar_code calendarCode,
+        d.name calendarName,
+        a.calendar_code_waiting calendarCodeWaiting,
+        a.standard_efficiency standardEfficiency,
+        a.production_capacity_group productionCapacityGroup,
+        a.avatar,
+        c.id groupId,
+        c.name groupName,
+        a.status status,
+        a.create_dept,
+        a.create_user,
+        a.transmission_method,
+        bm.id machineId,
+        bm.machine_code machineCode,
+        bm.machine_name machineName,
+        bm.collect_switch collectSwitch,
+        bm.pin_code machinePinCode,
+        bm.short_code machineShortCode
+        FROM blade_workstation a
+        LEFT JOIN blade_common_group_of_item b ON a.id = b.item_id
+        LEFT JOIN blade_common_group c ON b.group_id = c.id
+        LEFT JOIN blade_production_calendar d ON a.calendar_code = d.code and d.is_deleted = 0 and d.year = #{year}
+        LEFT JOIN blade_workstation_of_machine bwom on a.id = bwom.workstation_id
+        LEFT JOIN blade_machine bm on bm.id = bwom.machine_id and bm.is_deleted = 0
+        <where>
+            a.is_deleted = 0
+            <if test="groupId != null and groupId != '' and groupId != allWorkstationId">
+                AND c.id IN
+                <foreach collection="groupIdList" item="id" open="(" separator="," close=")">
+                    #{id}
+                </foreach>
+                AND c.is_deleted = 0
+            </if>
+            <if test="status != null">
+                and a.status = #{status}
+            </if>
+            <if test="keyWord != null and keyWord != ''">
+                and (a.code Like concat(#{keyWord},'%') or a.name Like concat(#{keyWord},'%'))
+            </if>
+            <if test="type != null">
+                and a.type = #{type}
+            </if>
+        </where>
+        ORDER BY a.create_time DESC ,a.id DESC
+    </select>
+
+
+    <select id="listWorkstation" resultType="com.qianwen.smartman.modules.cps.vo.WorkstationVO">
+        SELECT
+        a.id,
+        a.name,
+        a.code,
+        a.type,
+        a.calendar_code calendarCode,
+        a.calendar_code_waiting calendarCodeWaiting,
+        a.standard_efficiency standardEfficiency,
+        a.production_capacity_group productionCapacityGroup,
+        a.avatar,
+        c.id groupId,
+        c.name groupName,
+        a.device_type deviceType
+        FROM blade_workstation a
+        LEFT JOIN blade_common_group_of_item b ON a.id = b.item_id
+        LEFT JOIN blade_common_group c ON b.group_id = c.id
+        <where>
+            a.is_deleted = 0
+            <if test="groupIds != null and groupIds.size() > 0 ">
+                AND c.id in
+                <foreach collection="groupIds" item="id" open="(" separator="," close=")">
+                    #{id}
+                </foreach>
+                AND c.is_deleted = 0
+            </if>
+        </where>
+    </select>
+
+    <select id="getWorkstationListByWorkStationGroupIdList"
+            resultType="com.qianwen.smartman.modules.cps.vo.WorkstationRealTimeStatusVO">
+        SELECT DISTINCT a.id,
+        a.NAME,
+        a.CODE,
+        a.avatar,
+        a.create_dept,
+        a.create_user,
+        bm.id AS machineId,
+        bm.machine_code AS machineCode,
+        bm.machine_name AS machineName,
+        bm.brand AS machineBrand
+        FROM blade_workstation a
+        LEFT JOIN blade_common_group_of_item b ON a.id = b.item_id
+        LEFT JOIN blade_workstation_of_machine m ON a.id = m.workstation_id
+        LEFT JOIN blade_machine bm ON m.machine_id = bm.id
+        where a.is_deleted = 0 AND a.type = 0 and a.status = 1
+        <if test="dto.workStationGroupIdList != null and dto.workStationGroupIdList.size() > 0">
+            AND b.group_id IN
+            <foreach collection="dto.workStationGroupIdList" item="id" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+        </if>
+    </select>
+
+    <select id="listWorkStationOnShiftIndex" resultType="com.qianwen.smartman.modules.cps.entity.Workstation">
+        SELECT w.*
+        FROM blade_workstation w
+        INNER JOIN blade_production_calendar pc ON w.calendar_code = pc.code AND pc.year = #{year}
+        INNER JOIN blade_production_calendar_day pdc
+        ON pc.id = pdc.calendar_id AND pdc.is_deleted = 0 AND pdc.calendar_date = #{queryDate}
+        INNER JOIN blade_shift_detail sd ON pdc.model_id = sd.model_id AND sd.shift_index = #{shift}
+        WHERE w.is_deleted = 0
+        AND pc.is_deleted = 0
+        AND pdc.is_deleted = 0
+        AND w.type = #{type}
+        <if test="ids != null and ids.size() > 0">
+            AND w.id IN
+            <foreach collection="ids" item="id" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+        </if>
+        order by w.code asc;
+    </select>
+    <select id="countWorkStationOnShiftIndex" resultType="java.lang.Integer">
+        SELECT count(*)
+        FROM blade_workstation w
+        INNER JOIN blade_production_calendar pc ON w.calendar_code = pc.code AND pc.year = #{year}
+        INNER JOIN blade_production_calendar_day pdc
+        ON pc.id = pdc.calendar_id AND pdc.is_deleted = 0 AND pdc.calendar_date = #{queryDate}
+        INNER JOIN blade_shift_detail sd ON pdc.model_id = sd.model_id AND sd.shift_index = #{shift}
+        WHERE w.is_deleted = 0
+        AND pc.is_deleted = 0
+        AND pdc.is_deleted = 0
+        AND w.type = #{type}
+        <if test="ids != null and ids.size() > 0">
+            AND w.id IN
+            <foreach collection="ids" item="id" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+        </if>
+    </select>
+
+    <select id="listWorkStationByGroupId" resultType="com.qianwen.smartman.modules.cps.entity.Workstation">
+        SELECT *
+        FROM blade_workstation
+        where id IN (
+        select distinct item_id
+        from blade_common_group_of_item
+        <if test="ids != null and ids.size() > 0">
+            where group_id IN
+            <foreach collection="ids" item="id" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+        </if>
+        )
+    </select>
+
+    <select id="findByIndexAndDateAndTypeAndYear" resultType="java.lang.Long">
+        SELECT distinct w.id
+        FROM blade_workstation w
+                 INNER JOIN blade_production_calendar pc ON w.calendar_code = pc.code AND pc.year = #{year}
+                 INNER JOIN blade_production_calendar_day pdc
+                            ON pc.id = pdc.calendar_id AND pdc.is_deleted = 0 AND pdc.calendar_date = #{queryDate}
+                 INNER JOIN blade_shift_detail sd ON pdc.model_id = sd.model_id AND sd.shift_index = #{shift}
+        WHERE w.is_deleted = 0
+          AND pc.is_deleted = 0
+          AND pdc.is_deleted = 0
+          AND w.type = #{type}
+    </select>
+
+    <select id="findByMachineShortCode" resultType="java.lang.Long">
+        select bw.id
+        from blade_workstation bw
+                 left join blade_workstation_of_machine bwom on bw.id = bwom.workstation_id
+                 left join blade_machine bm on bwom.machine_id = bm.id and bm.status = 1
+        where bm.short_code = #{code}
+          and bw.is_deleted = 0
+          and bm.is_deleted = 0
+    </select>
+
+    <select id="queryDmpList" resultType="com.qianwen.smartman.modules.cps.vo.DmpVariablesVO">
+        select id,
+               dmp_device_id  dmpDeviceId,
+               machine_id     machineId,
+               type,
+               name,
+               description,
+               device_address deviceAddress,
+               access,
+               data_length    dataLength,
+               value_factor   valueFactor,
+               data_type      dataType,
+               method_param   methodParam,
+               idx,
+               default_value  defaultValue
+        from blade_dmp_variables
+        where machine_id = (select bwom.machine_id
+                            from blade_workstation_of_machine bwom
+                            where workstation_id = #{workstationId})
+          and (data_type &gt;= 3 and data_type &lt;= 10)
+    </select>
+
+    <select id="queryWcsList" resultType="com.qianwen.smartman.modules.cps.dto.WorkstationWcsDmpDTO">
+        select bww.id,
+               bdv.id                dmpDeviceId,
+               bdv.name,
+               bww.data_item as      description,
+               bdv.data_type         dataType,
+               bww.data_type         wcsDataType,
+               bww.process_parameter processParameter
+        from blade_workstation_wcs bww
+                 left join blade_dmp_variables bdv on bww.dmp_variables_id = bdv.id
+        where workstation_id = #{workstationId}
+          and bww.is_deleted = 0
+    </select>
+
+    <select id="queryDateTypeState" resultType="com.qianwen.smartman.modules.cps.dto.WorkstationWcsDmpDTO">
+        select bww.id,
+               bdv.id        dmpDeviceId,
+               bdv.name,
+               bdv.description,
+               bdv.data_type dataType,
+               bww.data_type wcsDataType
+        from blade_workstation_wcs bww
+                 left join blade_dmp_variables bdv on bww.dmp_variables_id = bdv.id
+        where workstation_id = #{workstationId}
+          and bww.data_type = #{code}
+          and bww.is_deleted = 0
+    </select>
+
+    <select id="queryGroupWorkStation" resultType="com.qianwen.smartman.modules.mdc.dto.GroupWorkDTO">
+        select bcg.id,
+        full_name as fullName,
+        code,
+        name,
+        bcgoi.item_id as itemId
+        from blade_common_group bcg
+        left join blade_common_group_of_item bcgoi on bcg.id = bcgoi.group_id
+        where bcg.is_deleted = 0
+        and item_id IN
+        <foreach collection="ids" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </select>
+    <select id="queryWorkstationAndGroup" resultType="com.qianwen.smartman.modules.cps.vo.WorkstationVO">
+        SELECT
+        bw.*,
+        bcg.NAME groupName,
+        bcg.id groupId
+        FROM
+        blade_workstation bw
+        LEFT JOIN blade_common_group_of_item bcgoi ON bw.id = bcgoi.item_id
+        LEFT JOIN blade_common_group bcg ON bcg.id = bcgoi.group_id
+        where bw.is_deleted = 0
+        <if test="workstationIds != null and workstationIds.size() > 0">
+            and bw.id IN
+            <foreach collection="workstationIds" item="id" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+        </if>
+        ORDER BY bcg.id
+    </select>
+
+    <select id="listWorkStationOnShift" resultType="com.qianwen.smartman.modules.cps.entity.Workstation">
+        SELECT distinct w.*
+        FROM blade_workstation w
+        INNER JOIN blade_production_calendar pc ON w.calendar_code = pc.code AND pc.year = #{year}
+        INNER JOIN blade_production_calendar_day pdc
+        ON pc.id = pdc.calendar_id AND pdc.is_deleted = 0 AND pdc.calendar_date = #{queryDate}
+        INNER JOIN blade_shift_detail sd ON pdc.model_id = sd.model_id AND sd.shift_index IN
+        <foreach collection="shifts" item="shift" open="(" separator="," close=")">
+            #{shift}
+        </foreach>
+        WHERE w.is_deleted = 0
+        AND pc.is_deleted = 0
+        AND pdc.is_deleted = 0
+        AND w.type = #{type}
+        <if test="ids != null and ids.size() > 0">
+            AND w.id IN
+            <foreach collection="ids" item="id" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+        </if>
+        order by w.code;
+    </select>
+
+    <select id="getDayShift" resultType="com.qianwen.smartman.modules.cps.entity.ProductionCalendarDay">
+        select bpcd.*
+        from blade_production_calendar_day bpcd
+                 left join blade_production_calendar bpc on bpc.id = bpcd.calendar_id
+        where bpcd.calendar_date = #{calendarDate}
+          and bpc.code = (select bw.calendar_code
+                          from blade_workstation bw
+                          where bw.id = #{workstationId})
+    </select>
+    <select id="getWorkstationData" resultType="com.qianwen.smartman.modules.report.dto.WorkstationDataDTO">
+        SELECT
+        bw.id AS workstationId,
+        bw.NAME AS workstationName,
+        bw.CODE AS workstationCode,
+        cg.NAME AS workstationGroup
+        FROM
+        blade_workstation bw
+        LEFT JOIN blade_common_group_of_item cfi ON cfi.item_id = bw.id
+        LEFT JOIN blade_common_group cg ON cg.id = cfi.group_id
+        WHERE
+        bw.is_deleted = 0
+        AND bw.STATUS = 1
+        AND bw.type =0
+        <if test="keyword !=null and keyword != ''">
+            and ( bw.NAME like CONCAT(#{keyword}, '%') or bw.CODE like CONCAT(#{keyword}, '%'))
+        </if>
+        <if test="workstationIds != null and workstationIds.size() > 0">
+            AND bw.id IN
+            <foreach collection="workstationIds" item="workstationId" open="(" separator="," close=")">
+                #{workstationId}
+            </foreach>
+        </if>
+        order by bw.code desc
+    </select>
+
+    <select id="getWorkstationDataWithIndexName" resultType="com.qianwen.smartman.modules.report.dto.WorkstationDataDTO">
+        SELECT
+        bw.id AS workstationId,
+        bw.NAME AS workstationName,
+        bw.CODE AS workstationCode,
+        cg.NAME AS workstationGroup
+        FROM
+        blade_workstation bw
+        LEFT JOIN blade_common_group_of_item cfi ON cfi.item_id = bw.id
+        LEFT JOIN blade_common_group cg ON cg.id = cfi.group_id
+        left join blade_production_calendar pc on pc.code=bw.calendar_code
+        LEFT JOIN blade_production_calendar_day pcd ON pc.id = pcd.calendar_id
+        LEFT JOIN blade_shift_detail sd on sd.model_id = pcd.model_id
+        WHERE
+        bw.is_deleted = 0
+        AND bw.STATUS = 1
+        AND bw.type =0
+        <if test="keyword !=null and keyword != ''">
+            and (bw.NAME like CONCAT(#{keyword}, '%') or bw.CODE like CONCAT(#{keyword}, '%'))
+        </if>
+        <if test="workstationIds != null and workstationIds.size() > 0">
+            AND bw.id IN
+            <foreach collection="workstationIds" item="workstationId" open="(" separator="," close=")">
+                #{workstationId}
+            </foreach>
+        </if>
+        <if test="indexName !=null and indexName != ''">
+            and sd.index_name like CONCAT(#{indexName},'%')
+        </if>
+        <if test="indexName !=null and indexName != '' and startTime != null">
+            and pcd.calendar_date BETWEEN #{startTime} AND #{endTime}
+        </if>
+        group by bw.id , bw.NAME , bw.CODE , cg.NAME
+        order by bw.code desc
+    </select>
+    <select id="getDmpVar" resultType="com.qianwen.smartman.modules.mdc.dto.WorkstationDmpDTO">
+        select bw.id workstationId, bdv.name dmpName, bww.data_type dataType, bww.data_item_crc itemCrc
+        from blade_workstation bw
+                 INNER JOIN blade_workstation_of_machine bwom on bw.id = bwom.workstation_id
+                 INNER JOIN blade_dmp_variables bdv on bwom.machine_id = bdv.machine_id
+                 INNER JOIN blade_workstation_wcs bww on bww.workstation_id = bw.id and bww.dmp_variables_id = bdv.id
+        where bw.is_deleted = 0
+          and bww.is_deleted = 0
+          and bw.id = #{workstationId}
+    </select>
+
+    <select id="getWorkMachine" resultType="com.qianwen.smartman.modules.cps.vo.WorkMachineEasyVO">
+        select bw.id           workstationId,
+               bw.code         workCode,
+               bw.name         workName,
+               bm.id           machineId,
+               bm.machine_code machineCode,
+               bm.machine_name machineName,
+               bm.pin_code     pinCode,
+               bm.short_code   shortCode
+        from blade_workstation bw
+                 left join blade_workstation_of_machine bwom on bw.id = bwom.workstation_id
+                 left join blade_machine bm on bwom.machine_id = bm.id and bm.is_deleted = 0
+        where bw.is_deleted = 0
+          and bw.id = #{workstationId}
+    </select>
+    <select id="listMachine" resultType="com.qianwen.smartman.modules.cps.entity.Workstation">
+        SELECT
+        bw.id,
+        bw.code,
+        bw.name,
+        bw.avatar,
+        bw.type,
+        bw.calendar_code,
+        bw.standard_efficiency,
+        bw.production_capacity_group,
+        bw.calendar_code_waiting,
+        bw.status,
+        bw.support_cnc_rw,
+        bw.device_type,
+        bw.properties,
+        bw.create_dept,
+        bw.create_user,
+        bdtd.name ftpCatalogue
+        FROM
+        blade_workstation bw
+        LEFT JOIN blade_dnc_ws_relation_td bdwrt ON bdwrt.workstation_id = bw.id AND bdwrt.is_deleted = 0
+        LEFT JOIN blade_dnc_transfer_directory bdtd ON bdtd.id = bdwrt.transfer_director_id AND bdtd.is_deleted = 0
+        WHERE
+        bw.is_deleted = 0
+        AND bw.type = 0
+        <if test="status != null">
+            AND bw.STATUS = #{status}
+        </if>
+        <if test="status == null">
+            AND bw.STATUS = 1
+        </if>
+        order by bw.code asc
+    </select>
+    <!-- 鑾峰緱闈炴甯哥姸鎬佷笅鐨勫伐浣嶏紙淇濆吇鐘舵�佹甯告垨鑰呭緟淇濆吇銆佺淮淇姸鎬佹甯革級-->
+    <select id="getWorkstationListInMaintainOrRepairById"
+            resultType="com.qianwen.smartman.modules.cps.vo.WorkstationVO">
+        SELECT bow.workstation_id AS id,
+        bow.workstation_name AS NAME,
+        bw.CODE AS CODE
+        FROM blade_order_workstation bow
+        LEFT JOIN blade_workstation bw ON bow.workstation_id = bw.id
+        AND bw.is_deleted = 0
+        LEFT JOIN blade_workstation_of_machine bwom ON bw.id = bwom.workstation_id
+        LEFT JOIN blade_machine bm ON bwom.machine_id = bm.id
+        AND bm.is_deleted = 0
+        WHERE bow.is_deleted = 0
+        AND (bm.repair_status != 1
+        OR bm.maintenance_status NOT IN (1, 2))
+        AND bow.process_id = #{orderProcessId}
+        AND bow.workstation_id IN
+        <foreach collection="workstationIdList" item="workstationId" open="(" separator="," close=")">
+            #{workstationId}
+        </foreach>
+    </select>
+
+    <!-- 鑾峰緱姝e父鐘舵�佷笅鐨勫伐浣嶏紙淇濆吇鐘舵�佹甯告垨鑰呭緟淇濆吇銆佺淮淇姸鎬佹甯革級-->
+    <select id="getWorkstationListInMaintainOrRepairByIdList"
+            resultType="com.qianwen.smartman.modules.cps.vo.WorkstationVO">
+        SELECT bow.workstation_id AS id,
+        bow.workstation_name AS NAME,
+        bw.CODE AS CODE
+        FROM blade_order_workstation bow
+        LEFT JOIN blade_workstation bw ON bow.workstation_id = bw.id
+        AND bw.is_deleted = 0
+        LEFT JOIN blade_workstation_of_machine bwom ON bw.id = bwom.workstation_id
+        LEFT JOIN blade_machine bm ON bwom.machine_id = bm.id
+        AND bm.is_deleted = 0
+        WHERE bow.is_deleted = 0
+        AND (bm.repair_status != 1
+        OR bm.maintenance_status NOT IN (1, 2))
+        AND bow.process_id IN
+        <foreach collection="orderProcessIdList" item="orderProcessId" open="(" separator="," close=")">
+            #{orderProcessId}
+        </foreach>
+        AND bow.workstation_id IN
+        <foreach collection="workstationIdList" item="workstationId" open="(" separator="," close=")">
+            #{workstationId}
+        </foreach>
+    </select>
+
+    <select id="listWorkstationDataByGroup" resultType="com.qianwen.smartman.modules.cps.entity.Workstation">
+        SELECT bw.id,
+               bw.code,
+               bw.name,
+               bw.avatar,
+               bw.type,
+               bw.calendar_code,
+               bw.standard_efficiency,
+               bw.production_capacity_group,
+               bw.calendar_code_waiting,
+               bw.status,
+               bw.support_cnc_rw,
+               bw.device_type,
+               bw.properties,
+               bw.create_dept,
+               bw.create_user
+        FROM blade_common_group_of_item bcg
+                 LEFT JOIN blade_workstation bw on bcg.item_id = bw.id
+        where bcg.group_id = #{groupId}
+          and bw.is_deleted = 0
+          and bw.type = 0
+          and bw.status = 1
+    </select>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/WorkstationWcsMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/WorkstationWcsMapper.xml
new file mode 100644
index 0000000..6dc1df3
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/WorkstationWcsMapper.xml
@@ -0,0 +1,28 @@
+<?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.qianwen.smartman.modules.cps.mapper.WorkstationWcsMapper">
+
+    <select id="listWcs" resultType="com.qianwen.smartman.modules.cps.vo.WorkstationWcsVO">
+        SELECT
+            bww.*,
+            bdv.data_type dmpVariablesDateType,
+            bdv.name collectItemDesc
+        FROM
+            blade_workstation_wcs bww
+                LEFT JOIN blade_workstation_of_machine bwm ON bwm.workstation_id = bww.workstation_id
+                INNER JOIN blade_dmp_variables bdv ON bdv.machine_id = bwm.machine_id AND bdv.id = bww.dmp_variables_id
+        WHERE
+            bww.is_deleted = 0
+          AND bww.workstation_id = #{workstationId}
+    </select>
+    <select id="getWorkstationWcsByName" resultType="com.qianwen.smartman.modules.cps.entity.WorkstationWcs">
+        select bww.* from blade_workstation_wcs bww
+        inner join blade_dmp_variables bdv on bdv.id=bww.dmp_variables_id and bww.is_deleted=0 and bdv.name=#{paramName}
+        where bww.workstation_id in
+        <foreach collection="workstationIdList" item="workstationId" open="(" separator="," close=")">
+            #{workstationId}
+        </foreach>
+    </select>
+
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/WorkstationWorkbenchMapper.xml b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/WorkstationWorkbenchMapper.xml
new file mode 100644
index 0000000..2138a0e
--- /dev/null
+++ b/smart-man-boot/src/main/resources/com/qianwen/smartman/modules/cps/mapper/WorkstationWorkbenchMapper.xml
@@ -0,0 +1,73 @@
+<?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.qianwen.smartman.modules.cps.mapper.WorkstationWorkbenchMapper">
+
+    <resultMap id="workstationOfWorkbenchVO" type="com.qianwen.smartman.modules.cps.vo.WorkstationOfWorkbenchVO">
+        <result column="workstationCode" property="workstationCode"/>
+        <result column="workstationName" property="workstationName"/>
+        <result column="workstationId" property="workstationId"/>
+        <collection property="workstationWorkbenchVOList" ofType="com.qianwen.smartman.modules.cps.vo.WorkstationWorkbenchVO">
+            <id column="id" property="id"/>
+            <result column="name" property="name"/>
+            <result column="sort" property="sort"/>
+        </collection>
+    </resultMap>
+
+    <select id="listByGroupId" resultMap="workstationOfWorkbenchVO">
+        SELECT
+            bww.*,
+            bw.id workstationId,
+            bw.code workstationCode,
+            bw.name workstationName
+        FROM
+            blade_workstation_workbench bww
+                LEFT JOIN blade_workstation bw ON bww.workstation_id = bw.id and bw.status = 1
+                LEFT JOIN blade_common_group_of_item gi ON bw.id = gi.item_id
+                LEFT JOIN blade_common_group cg ON cg.id = gi.group_id
+        WHERE bww.is_deleted = 0
+          AND bw.is_deleted = 0
+        <if test="groupIds != null and groupIds.size > 0">
+            AND cg.id IN
+            <foreach collection="groupIds" item="groupId" open="(" separator="," close=")">
+                #{groupId}
+            </foreach>
+            AND cg.is_deleted = 0
+        </if>
+        <if test="keyWord != null and keyWord != ''">
+            and (bw.code Like concat(#{keyWord},'%') or bw.name Like concat(#{keyWord},'%'))
+        </if>
+        ORDER BY bww.sort
+    </select>
+    <select id="listByGroupIdAndWorkstationNotIn" resultMap="workstationOfWorkbenchVO">
+        SELECT
+        bww.*,
+        bw.id workstationId,
+        bw.code workstationCode,
+        bw.name workstationName
+        FROM
+        blade_workstation_workbench bww
+        LEFT JOIN blade_workstation bw ON bww.workstation_id = bw.id and bw.status = 1
+        LEFT JOIN blade_common_group_of_item gi ON bw.id = gi.item_id
+        LEFT JOIN blade_common_group cg ON cg.id = gi.group_id
+        WHERE bww.is_deleted = 0
+        AND bw.is_deleted = 0
+        AND cg.is_deleted = 0
+        <if test="groupIds != null and groupIds.size > 0">
+            AND cg.id IN
+            <foreach collection="groupIds" item="groupId" open="(" separator="," close=")">
+                #{groupId}
+            </foreach>
+        </if>
+        <if test="workstationIdList != null and workstationIdList.size > 0">
+            AND bww.workstation_id NOT IN
+            <foreach collection="workstationIdList" item="workstationId" open="(" separator="," close=")">
+               #{workstationId}
+            </foreach>
+        </if>
+        <if test="keyWord != null and keyWord != ''">
+            and (bw.code Like concat(#{keyWord},'%') or bw.name Like concat(#{keyWord},'%'))
+        </if>
+        ORDER BY bww.sort
+    </select>
+</mapper>
+
diff --git a/smart-man-boot/src/main/resources/templates/code.properties b/smart-man-boot/src/main/resources/templates/code.properties
index 3634692..963f115 100644
--- a/smart-man-boot/src/main/resources/templates/code.properties
+++ b/smart-man-boot/src/main/resources/templates/code.properties
@@ -1,5 +1,5 @@
 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
-spring.datasource.url=jdbc:mysql://localhost:3306/bladex_boot?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&tinyInt1isBit=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
+spring.datasource.url=jdbc:mysql://localhost:3306/blade_boot?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&tinyInt1isBit=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
 spring.datasource.username=root
-spring.datasource.password=root
+spring.datasource.password=Kknd_1234
 author=BladeX
diff --git a/smart-starter-report/pom.xml b/smart-starter-report/pom.xml
index 8ee7002..d8e9855 100644
--- a/smart-starter-report/pom.xml
+++ b/smart-starter-report/pom.xml
@@ -10,23 +10,20 @@
   
 
     <dependencies>
+		
         <dependency>
             <groupId>com.qianwen</groupId>
             <artifactId>smart-starter-mybatis</artifactId>
 			<version>1.0.0</version>
         </dependency>
+        <!--
         <dependency>
             <groupId>com.bstek.ureport</groupId>
             <artifactId>ureport2-console</artifactId>
             <version>2.2.9</version>
         </dependency>
-        <!-- Auto -->
-        <dependency>
-            <groupId>com.qianwen</groupId>
-            <artifactId>smart-core-auto</artifactId>
-            <scope>provided</scope>
-			<version>1.0.0</version>
-        </dependency>
+        -->
+       
     </dependencies>
 
 
diff --git a/smart-starter-report/src/main/java/com/qianwen/core/report/config/ReportConfiguration.java b/smart-starter-report/src/main/java/com/qianwen/core/report/config/ReportConfiguration.java
index f03b4b1..f75c919 100644
--- a/smart-starter-report/src/main/java/com/qianwen/core/report/config/ReportConfiguration.java
+++ b/smart-starter-report/src/main/java/com/qianwen/core/report/config/ReportConfiguration.java
@@ -1,8 +1,8 @@
 package com.qianwen.core.report.config;
 
-import com.bstek.ureport.UReportPropertyPlaceholderConfigurer;
-import com.bstek.ureport.console.UReportServlet;
-import com.bstek.ureport.provider.report.ReportProvider;
+//import com.bstek.ureport.UReportPropertyPlaceholderConfigurer;
+//import com.bstek.ureport.console.UReportServlet;
+//import com.bstek.ureport.provider.report.ReportProvider;
 import javax.servlet.Servlet;
 import com.qianwen.core.report.props.ReportDatabaseProperties;
 import com.qianwen.core.report.props.ReportProperties;
@@ -25,6 +25,7 @@
 @Order
 /* loaded from: blade-starter-report-9.3.0.0-SNAPSHOT.jar:org/springblade/core/report/config/ReportConfiguration.class */
 public class ReportConfiguration {
+	/*
     @Bean
     public ServletRegistrationBean<Servlet> registrationBean() {
         return new ServletRegistrationBean<>(new UReportServlet(), new String[]{"/ureport/*"});
@@ -39,5 +40,5 @@
     @Bean
     public ReportProvider reportProvider(ReportDatabaseProperties properties, IReportFileService service) {
         return new DatabaseProvider(properties, service);
-    }
+    }*/
 }
diff --git a/smart-starter-report/src/main/java/com/qianwen/core/report/datasource/ReportDataSource.java b/smart-starter-report/src/main/java/com/qianwen/core/report/datasource/ReportDataSource.java
index 5b15b67..05759f4 100644
--- a/smart-starter-report/src/main/java/com/qianwen/core/report/datasource/ReportDataSource.java
+++ b/smart-starter-report/src/main/java/com/qianwen/core/report/datasource/ReportDataSource.java
@@ -1,6 +1,6 @@
 package com.qianwen.core.report.datasource;
 
-import com.bstek.ureport.definition.datasource.BuildinDatasource;
+//import com.bstek.ureport.definition.datasource.BuildinDatasource;
 import java.sql.Connection;
 import java.sql.SQLException;
 import javax.sql.DataSource;
@@ -8,7 +8,7 @@
 import org.slf4j.LoggerFactory;
 
 /* loaded from: blade-starter-report-9.3.0.0-SNAPSHOT.jar:org/springblade/core/report/datasource/ReportDataSource.class */
-public class ReportDataSource implements BuildinDatasource {
+public class ReportDataSource {// implements BuildinDatasource
     private static final Logger log = LoggerFactory.getLogger(ReportDataSource.class);
     private static final String NAME = "ReportDataSource";
     private final DataSource dataSource;
diff --git a/smart-starter-report/src/main/java/com/qianwen/core/report/provider/DatabaseProvider.java b/smart-starter-report/src/main/java/com/qianwen/core/report/provider/DatabaseProvider.java
index ffa5c0f..058ae5f 100644
--- a/smart-starter-report/src/main/java/com/qianwen/core/report/provider/DatabaseProvider.java
+++ b/smart-starter-report/src/main/java/com/qianwen/core/report/provider/DatabaseProvider.java
@@ -2,8 +2,8 @@
 
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.bstek.ureport.provider.report.ReportFile;
-import com.bstek.ureport.provider.report.ReportProvider;
+//import com.bstek.ureport.provider.report.ReportFile;
+//import com.bstek.ureport.provider.report.ReportProvider;
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 import java.lang.invoke.SerializedLambda;
@@ -16,7 +16,7 @@
 import com.qianwen.core.tool.utils.DateUtil;
 
 /* loaded from: blade-starter-report-9.3.0.0-SNAPSHOT.jar:org/springblade/core/report/provider/DatabaseProvider.class */
-public class DatabaseProvider implements ReportProvider {
+public class DatabaseProvider {// implements ReportProvider
     private final ReportDatabaseProperties properties;
     private final IReportFileService service;
 
@@ -34,13 +34,13 @@
       public void deleteReport(String file) {
         this.service.remove(Wrappers.<ReportFileEntity>lambdaUpdate().eq(ReportFileEntity::getName, getFileName(file)));
       }
-      
+      /*
       public List<ReportFile> getReportFiles() {
         List<ReportFileEntity> list = this.service.list();
         List<ReportFile> reportFiles = new ArrayList<>();
         list.forEach(reportFileEntity -> reportFiles.add(new ReportFile(reportFileEntity.getName(), reportFileEntity.getUpdateTime())));
         return reportFiles;
-      }
+      }*/
       
       public void saveReport(String file, String content) {
         String fileName = getFileName(file);
diff --git a/smart-starter-report/src/main/java/com/qianwen/core/report/provider/ReportPlaceholderProvider.java b/smart-starter-report/src/main/java/com/qianwen/core/report/provider/ReportPlaceholderProvider.java
index 8320883..1d06aee 100644
--- a/smart-starter-report/src/main/java/com/qianwen/core/report/provider/ReportPlaceholderProvider.java
+++ b/smart-starter-report/src/main/java/com/qianwen/core/report/provider/ReportPlaceholderProvider.java
@@ -1,17 +1,17 @@
 package com.qianwen.core.report.provider;
 
-import com.bstek.ureport.UReportPropertyPlaceholderConfigurer;
+//import com.bstek.ureport.UReportPropertyPlaceholderConfigurer;
 import java.util.Properties;
 import com.qianwen.core.report.props.ReportProperties;
 
 /* loaded from: blade-starter-report-9.3.0.0-SNAPSHOT.jar:org/springblade/core/report/provider/ReportPlaceholderProvider.class */
-public class ReportPlaceholderProvider extends UReportPropertyPlaceholderConfigurer {
+public class ReportPlaceholderProvider {// extends UReportPropertyPlaceholderConfigurer
     public ReportPlaceholderProvider(ReportProperties properties) {
         Properties props = new Properties();
         props.setProperty("ureport.disableHttpSessionReportCache", properties.getDisableHttpSessionReportCache().toString());
         props.setProperty("ureport.disableFileProvider", properties.getDisableFileProvider().toString());
         props.setProperty("ureport.fileStoreDir", properties.getFileStoreDir());
         props.setProperty("ureport.debug", properties.getDebug().toString());
-        setProperties(props);
+        //setProperties(props);
     }
 }
diff --git a/smart-starter-tenant/src/main/java/com/qianwen/core/tenant/BladeTenantHandler.java b/smart-starter-tenant/src/main/java/com/qianwen/core/tenant/BladeTenantHandler.java
index 5bdd89f..dd16a69 100644
--- a/smart-starter-tenant/src/main/java/com/qianwen/core/tenant/BladeTenantHandler.java
+++ b/smart-starter-tenant/src/main/java/com/qianwen/core/tenant/BladeTenantHandler.java
@@ -6,7 +6,6 @@
 import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import net.sf.jsqlparser.expression.Expression;
@@ -21,10 +20,9 @@
 import org.springframework.beans.factory.SmartInitializingSingleton;
 import org.springframework.context.ApplicationContext;
 
-/* loaded from: blade-starter-tenant-9.3.0.0-SNAPSHOT.jar:org/springblade/core/tenant/BladeTenantHandler.class */
 public class BladeTenantHandler implements TenantLineHandler, SmartInitializingSingleton {
     private static final Logger log = LoggerFactory.getLogger(BladeTenantHandler.class);
-    private final List<String> tenantTableList = new ArrayList();
+    private final List<String> tenantTableList = new ArrayList<>();
     private final List<String> excludeTableList = Arrays.asList("blade_user", "blade_dept", "blade_role", "blade_tenant", "act_de_model");
     private final BladeTenantProperties tenantProperties;
 
@@ -41,37 +39,39 @@
     }
 
     public boolean ignoreTable(String tableName) {
+    	if (BladeTenantHolder.isIgnore().booleanValue()) {
+    	      return true; 
+    	}
+    	return (!this.tenantTableList.contains(tableName) || !StringUtil.isNotBlank(AuthUtil.getTenantId()));
+    	    /*
         return (!BladeTenantHolder.isIgnore().booleanValue() && this.tenantTableList.contains(tableName) && StringUtil.isNotBlank(AuthUtil.getTenantId())) ? false : true;
+        */
     }
 
     public void afterSingletonsInstantiated() {
         ApplicationContext context = SpringUtil.getContext();
-        if (this.tenantProperties.getAnnotationExclude().booleanValue() && context != null) {
-            Map<String, Object> tables = context.getBeansWithAnnotation(TableExclude.class);
-            List<String> excludeTables = this.tenantProperties.getExcludeTables();
-            for (Object o : tables.values()) {
-                TableExclude annotation = (TableExclude) o.getClass().getAnnotation(TableExclude.class);
-                String value = annotation.value();
-                excludeTables.add(value);
-            }
-        }
-        List<TableInfo> tableInfos = TableInfoHelper.getTableInfos();
-        for (TableInfo tableInfo : tableInfos) {
-            String tableName = tableInfo.getTableName();
-            if (!this.tenantProperties.getExcludeTables().contains(tableName) && !this.excludeTableList.contains(tableName.toLowerCase()) && !this.excludeTableList.contains(tableName.toUpperCase())) {
-                List<TableFieldInfo> fieldList = tableInfo.getFieldList();
-                Iterator<TableFieldInfo> it = fieldList.iterator();
-                while (true) {
-                    if (it.hasNext()) {
-                        TableFieldInfo fieldInfo = it.next();
-                        String column = fieldInfo.getColumn();
-                        if (this.tenantProperties.getColumn().equals(column)) {
-                            this.tenantTableList.add(tableName);
-                            break;
-                        }
-                    }
-                }
-            }
-        }
+		if (this.tenantProperties.getAnnotationExclude().booleanValue() && context != null) {
+			Map<String, Object> tables = context.getBeansWithAnnotation(TableExclude.class);
+			List<String> excludeTables = this.tenantProperties.getExcludeTables();
+			for (Object o : tables.values()) {
+				TableExclude annotation = o.getClass().<TableExclude>getAnnotation(TableExclude.class);
+				String value = annotation.value();
+				excludeTables.add(value);
+			}
+		}
+		List<TableInfo> tableInfos = TableInfoHelper.getTableInfos();
+		for (TableInfo tableInfo : tableInfos) {
+			String tableName = tableInfo.getTableName();
+			if (this.tenantProperties.getExcludeTables().contains(tableName)
+					|| this.excludeTableList.contains(tableName.toLowerCase())
+					|| this.excludeTableList.contains(tableName.toUpperCase()))
+				continue;
+			List<TableFieldInfo> fieldList = tableInfo.getFieldList();
+			for (TableFieldInfo fieldInfo : fieldList) {
+				String column = fieldInfo.getColumn();
+				if (this.tenantProperties.getColumn().equals(column))
+					this.tenantTableList.add(tableName);
+			}
+		}
     }
 }
diff --git a/smart-starter-tenant/src/main/java/com/qianwen/core/tenant/BladeTenantHolder.java b/smart-starter-tenant/src/main/java/com/qianwen/core/tenant/BladeTenantHolder.java
index 0999122..242f04a 100644
--- a/smart-starter-tenant/src/main/java/com/qianwen/core/tenant/BladeTenantHolder.java
+++ b/smart-starter-tenant/src/main/java/com/qianwen/core/tenant/BladeTenantHolder.java
@@ -2,15 +2,14 @@
 
 import org.springframework.core.NamedThreadLocal;
 
-/* loaded from: blade-starter-tenant-9.3.0.0-SNAPSHOT.jar:org/springblade/core/tenant/BladeTenantHolder.class */
 public class BladeTenantHolder {
-    private static final ThreadLocal<Boolean> TENANT_KEY_HOLDER = new NamedThreadLocal<Boolean>("blade-tenant") { // from class: org.springblade.core.tenant.BladeTenantHolder.1
-        /* JADX INFO: Access modifiers changed from: protected */
-        /* renamed from: initialValue */
-        public Boolean m2initialValue() {
-            return Boolean.FALSE;
-        }
-    };
+	private static final ThreadLocal<Boolean> TENANT_KEY_HOLDER = new NamedThreadLocal<Boolean>("blade-tenant"){
+		
+		protected Boolean initialValue(){
+			return Boolean.FALSE;
+			}
+		};
+	 
 
     public static void setIgnore(Boolean ignore) {
         TENANT_KEY_HOLDER.set(ignore);

--
Gitblit v1.9.3