Kaynağa Gözat

Merge branch 'master' of http://39.106.8.246:3003/persagy/dmp

lixing 4 yıl önce
ebeveyn
işleme
3f09410369
100 değiştirilmiş dosya ile 11200 ekleme ve 889 silme
  1. 24 0
      dmp-admin/pom.xml
  2. 1 1
      dmp-admin/src/main/resources/application.yml
  3. 3 3
      dmp-admin/src/main/resources/logback-spring.xml
  4. 43 1
      dmp-common/src/main/java/com/persagy/dmp/common/http/HttpUtils.java
  5. 41 12
      dmp-dic/pom.xml
  6. 14 0
      dmp-dic/src/main/resources/bootstrap-dev.yml
  7. 1 1
      dmp-dic/src/main/resources/bootstrap.yml
  8. 36 0
      dmp-dic/src/main/resources/config/config.sql
  9. 3 3
      dmp-dic/src/main/resources/logback-spring.xml
  10. 1 0
      dmp-model/src/main/java/com/persagy/dmp/rwd/model/ClassDefModel.java
  11. 4 0
      dmp-model/src/main/java/com/persagy/dmp/rwd/model/FuncidDefModel.java
  12. 27 0
      dmp-model/src/main/java/com/persagy/dmp/rwd/model/RwdeditRefTypeInfosModel.java
  13. 54 11
      dmp-org/pom.xml
  14. 20 20
      dmp-org/src/main/java/com/persagy/dmp/org/service/InitService.java
  15. 14 0
      dmp-org/src/main/resources/bootstrap-dev.yml
  16. 2 2
      dmp-org/src/main/resources/bootstrap.yml
  17. 65 0
      dmp-org/src/main/resources/config/config.sql
  18. 7 6
      dmp-org/src/main/resources/logback-spring.xml
  19. 6 0
      dmp-rwd-datautils/pom.xml
  20. 5 3
      dmp-rwd-datautils/src/main/resources/application-dev.yml
  21. 242 75
      dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/datautils/ImportFuncid.java
  22. 2092 0
      dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/datautils/ImportFuncidForRwdEdit.java
  23. 13 4
      dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/dic/ExcelUtils.java
  24. 264 0
      dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/dic/ExcelUtilsForEdit.java
  25. 2 0
      dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/dic/FuncidDefModel.java
  26. 88 64
      dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/dic/FuncidUtils.java
  27. 2 2
      dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/dic/ImportClass.java
  28. 686 0
      dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/dic/ImportClassForRwdEdit.java
  29. 3159 0
      dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/dic/ImportKnowledgeForEdit.java
  30. 5 5
      dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/knowladge/Test1.java
  31. 63 1
      dmp-rwd-edit/pom.xml
  32. 2 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/EditApp.java
  33. 3 2
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/ClassDefChangeRecordController.java
  34. 11 5
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/DownloadController.java
  35. 3 2
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/FuncidDefChangeRecordController.java
  36. 2 1
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/RwdeditRefTypeInfoController.java
  37. 1 1
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/UploadController.java
  38. 3 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/ClassDef.java
  39. 10 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/ClassDefChangeRecord.java
  40. 8 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/FuncidDef.java
  41. 12 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/FuncidDefChangeRecord.java
  42. 23 4
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/RwdeditRefType.java
  43. 38 1
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/RwdeditRefTypeInfos.java
  44. 24 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/dto/ClassDefChangeRecordDTO.java
  45. 25 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/dto/FuncidDefChangeRecordDTO.java
  46. 38 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/enumeration/FuncidShareTypeEnum.java
  47. 4 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/model/RwdeditRefTypeModel.java
  48. 0 1
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/AdminRoleService.java
  49. 2 2
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/AdminUserService.java
  50. 151 5
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/ClassDefChangeRecordService.java
  51. 4 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/ClassDefService.java
  52. 46 6
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/DownloadService.java
  53. 384 25
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/FuncidDefChangeRecordService.java
  54. 65 3
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/FuncidDefService.java
  55. 70 12
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/RwdeditRefTypeInfosService.java
  56. 4 4
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/RwdeditRefTypeService.java
  57. 15 12
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/UploadService.java
  58. 37 0
      dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/util/MapObjUtil.java
  59. 0 24
      dmp-rwd-edit/src/main/resources/application-dev.yml
  60. 0 37
      dmp-rwd-edit/src/main/resources/application.yml
  61. 0 0
      dmp-rwd-edit/src/main/resources/bootstrap-aliyun-dev.yml
  62. 1 1
      dmp-rwd-edit/src/main/resources/application-aliyun-test.yml
  63. 10 0
      dmp-rwd-edit/src/main/resources/bootstrap-dev.yml
  64. 7 0
      dmp-rwd-edit/src/main/resources/bootstrap.yml
  65. 69 0
      dmp-rwd-edit/src/main/resources/config/config.sql
  66. 3 0
      dmp-rwd-edit/src/main/resources/ddl/rwd_def_funcid.sql
  67. 3 3
      dmp-rwd-edit/src/main/resources/logback-spring.xml
  68. BIN
      dmp-rwd-edit/src/main/resources/static/file/批量上传变更记录模板.xlsx
  69. 0 118
      dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/ClassDefTest.java
  70. 0 132
      dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/FuncidDefTest.java
  71. 0 77
      dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/RefTypeInfoTest.java
  72. 0 69
      dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/RefTypeTest.java
  73. 0 77
      dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/RwdeditVersionTest.java
  74. 547 0
      dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/service/AdminRoleServiceTest.java
  75. 322 0
      dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/service/AdminUserServiceTest.java
  76. 416 0
      dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/service/ClassDefChangeRecordServiceTest.java
  77. 52 0
      dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/service/ClassDefServiceTest.java
  78. 25 0
      dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/service/DemoTest.java
  79. 39 0
      dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/service/DtDataServiceTest.java
  80. 425 0
      dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/service/FuncidDefChangeRecordServiceTest.java
  81. 61 0
      dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/service/FuncidDefServiceTest.java
  82. 143 0
      dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/service/RwdeditRefTypeInfosServiceTest.java
  83. 348 0
      dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/service/RwdeditRefTypeServiceTest.java
  84. 277 0
      dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/service/RwdeditVersionServiceTest.java
  85. 174 0
      dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/service/UserServiceTest.java
  86. 29 13
      dmp-rwd-edit/数据字典编辑工具接口文档.md
  87. 70 19
      dmp-rwd/pom.xml
  88. 3 3
      dmp-rwd/src/main/java/com/persagy/dmp/rwd/config/JpaSqlExecuteContext.java
  89. 0 1
      dmp-rwd/src/main/java/com/persagy/dmp/rwd/entity/GraphInstance.java
  90. 6 6
      dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/InitService.java
  91. 9 2
      dmp-rwd/src/main/resources/bootstrap-dev.yml
  92. 2 0
      dmp-rwd/src/main/resources/bootstrap.yml
  93. 66 0
      dmp-rwd/src/main/resources/config/config.sql
  94. 7 7
      dmp-rwd/src/main/resources/logback-spring.xml
  95. 36 0
      docker/dockerfiles/dmp-admin/Dockerfile
  96. 3 0
      docker/dockerfiles/dmp-admin/entrypoint.sh
  97. 36 0
      docker/dockerfiles/dmp-dic/Dockerfile
  98. 3 0
      docker/dockerfiles/dmp-dic/entrypoint.sh
  99. 36 0
      docker/dockerfiles/dmp-org/Dockerfile
  100. 0 0
      docker/dockerfiles/dmp-org/entrypoint.sh

+ 24 - 0
dmp-admin/pom.xml

@@ -122,6 +122,30 @@
                     </execution>
                 </executions>
             </plugin>
+
+            <plugin>
+                <artifactId>maven-resources-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-resources</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+                        <configuration>
+                            <resources>
+                                <resource>
+                                    <directory>src/main/resources/</directory>
+                                    <includes>
+                                        <include>**/*.yml</include>
+                                    </includes>
+                                </resource>
+                            </resources>
+                            <outputDirectory>${project.build.directory}/config</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
         </plugins>
     </build>
 </project>

+ 1 - 1
dmp-admin/src/main/resources/application.yml

@@ -13,7 +13,7 @@ spring:
     name: dmp-admin
   profiles:
     active:
-    - dev,log-dev
+    - dev
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
     url: jdbc:mysql://192.168.64.15:9934/dmp_admin?useUnicode=true&characterEncoding=utf-8&mysqlEncoding=utf8&useSSL=false

+ 3 - 3
dmp-admin/src/main/resources/logback-spring.xml

@@ -30,7 +30,7 @@
     <logger name="com.netflix" level="WARN"/>
     <logger name="org.apache.http" level="INFO"/>
 
-    <springProfile name="log-dev">
+    <springProfile name="dev">
         <logger name="org.hibernate.SQL" level="DEBUG"/>
         <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/>
         <root level="info">
@@ -38,7 +38,7 @@
         </root>
     </springProfile>
 
-    <springProfile name="log-test">
+    <springProfile name="test">
         <logger name="org.hibernate.SQL" level="DEBUG"/>
         <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/>
         <root level="info">
@@ -46,7 +46,7 @@
         </root>
     </springProfile>
 
-    <springProfile name="log-prod">
+    <springProfile name="prod">
         <root level="info">
             <appender-ref ref="file"/>
         </root>

+ 43 - 1
dmp-common/src/main/java/com/persagy/dmp/common/http/HttpUtils.java

@@ -111,7 +111,7 @@ public class HttpUtils {
 		} else {
 			requestBodyStr = JacksonMapper.toSimpleJson(requestBody);
 		}
-		HttpResult result = post(server, requestBodyStr, timeout);
+		HttpResult result = post(server, requestBodyStr, timeout,null);
 		return result.getContent();
 	}
 
@@ -284,4 +284,46 @@ public class HttpUtils {
 		}
 	}
 
+	public HttpResult post(String url, String requestBody, int timeout,String token) {
+		String flag = getFlag();
+		long begin = System.currentTimeMillis();
+		CloseableHttpClient client = HttpClients.createDefault();
+		CloseableHttpResponse resp = null;
+		HttpResult result = new HttpResult();
+		long duration = 0;
+		try {
+			logger.info("{} httputils request: {}", flag, url);
+			logger.info("{} httputils requestbody: {}", flag, requestBody);
+			HttpPost post = new HttpPost(url);
+			post.addHeader("contentType", "application/json;charset=UTF-8");
+			post.addHeader("Accept", "application/json");
+			post.addHeader("dmp-token",token);
+			if (requestBody != null) {
+				StringEntity entity = new StringEntity(requestBody, UTF8);
+				entity.setContentType("application/json");
+				post.setEntity(entity);
+			}
+			setTimeOut(post, timeout);
+			resp = client.execute(post);
+			int status = resp.getStatusLine().getStatusCode();
+			result.setStatus(status);
+			HttpEntity r = resp.getEntity();
+			String respContent = EntityUtils.toString(r, UTF8);
+			result.setContent(respContent);
+			logger.info("{} httputils resp : {}", flag, getLogMsg(respContent));
+			duration = System.currentTimeMillis() - begin;
+			httpHandler.handle(flag, "POST", duration, url, requestBody, status, respContent);
+		} catch (Exception e) {
+			e.printStackTrace();
+			logger.error("{} httputils exception : ", flag, e);
+			duration = System.currentTimeMillis() - begin;
+			httpHandler.handle(flag, "POST", duration, url, requestBody, -1, e.getMessage());
+			throw new RuntimeException(e);
+		} finally {
+			close(client, resp);
+			logger.info("{} httputils timeconsuming : {} {}", flag, duration, url);
+		}
+		return result;
+	}
+
 }

+ 41 - 12
dmp-dic/pom.xml

@@ -73,6 +73,13 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-amqp</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.sun</groupId>
+            <artifactId>tools</artifactId>
+            <version>${java.version}</version>
+            <scope>system</scope>
+            <systemPath>${env.JAVA_HOME}/lib/tools.jar</systemPath>
+        </dependency>
     </dependencies>
 
     <build>
@@ -110,10 +117,32 @@
                     </execution>
                 </executions>
             </plugin>
-
+            <plugin>
+                <artifactId>maven-resources-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-resources</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+                        <configuration>
+                            <resources>
+                                <resource>
+                                    <directory>src/main/resources/</directory>
+                                    <includes>
+                                        <include>**/*.yml</include>
+                                    </includes>
+                                </resource>
+                            </resources>
+                            <outputDirectory>${project.build.directory}/config</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
             <!-- 按照测试要求打成zip需要的配置 -->
             <!--获取git信息-->
-            <plugin>
+            <!--<plugin>
                 <groupId>pl.project13.maven</groupId>
                 <artifactId>git-commit-id-plugin</artifactId>
                 <executions>
@@ -127,7 +156,7 @@
                     <verbose>true</verbose>
                     <dateFormat>yyyyMMddHHmm</dateFormat>
                     <generateGitPropertiesFile>true</generateGitPropertiesFile>
-                    <!--<generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties</generateGitPropertiesFilename>-->
+                    &lt;!&ndash;<generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties</generateGitPropertiesFilename>&ndash;&gt;
                     <generateGitPropertiesFilename>target/git.properties</generateGitPropertiesFilename>
                 </configuration>
             </plugin>
@@ -143,13 +172,13 @@
                             <goal>rename</goal>
                         </goals>
                         <configuration>
-<!--                            <sourceFile>${project.build.directory}/git.properties</sourceFile>-->
+&lt;!&ndash;                            <sourceFile>${project.build.directory}/git.properties</sourceFile>&ndash;&gt;
                             <destinationFile>${project.build.directory}/version.txt</destinationFile>
                         </configuration>
                     </execution>
                 </executions>
             </plugin>
-            <!--拷贝资源文件 copy-resources-->
+            &lt;!&ndash;拷贝资源文件 copy-resources&ndash;&gt;
             <plugin>
                 <artifactId>maven-resources-plugin</artifactId>
                 <executions>
@@ -177,7 +206,7 @@
                             <outputDirectory>${project.build.directory}/config</outputDirectory>
                         </configuration>
                     </execution>
-                    <!--拷贝启动脚本-->
+                    &lt;!&ndash;拷贝启动脚本&ndash;&gt;
                     <execution>
                         <id>copy-version</id>
                         <phase>package</phase>
@@ -196,14 +225,14 @@
                 </executions>
             </plugin>
 
-            <!-- 打包压缩 -->
+            &lt;!&ndash; 打包压缩 &ndash;&gt;
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-assembly-plugin</artifactId>
                 <executions>
                     <execution>
                         <id>make-assembly</id>
-                        <!-- 当执行mvn package时才会打包 -->
+                        &lt;!&ndash; 当执行mvn package时才会打包 &ndash;&gt;
                         <phase>package</phase>
                         <goals>
                             <goal>single</goal>
@@ -212,17 +241,17 @@
                             <finalName>
                                 ${project.artifactId}_${git.commit.time}_git_${git.branch}_${git.commit.id.abbrev}
                             </finalName>
-                            <!--不包含assembly id-->
+                            &lt;!&ndash;不包含assembly id&ndash;&gt;
                             <appendAssemblyId>false</appendAssemblyId>
-                            <!--输出路径-->
-                            <!--<outputDirectory>../target/co_search-${project.version}</outputDirectory>-->
+                            &lt;!&ndash;输出路径&ndash;&gt;
+                            &lt;!&ndash;<outputDirectory>../target/co_search-${project.version}</outputDirectory>&ndash;&gt;
                             <descriptors>
                                 <descriptor>src/script/zip.xml</descriptor>
                             </descriptors>
                         </configuration>
                     </execution>
                 </executions>
-            </plugin>
+            </plugin>-->
         </plugins>
     </build>
 

+ 14 - 0
dmp-dic/src/main/resources/bootstrap-dev.yml

@@ -0,0 +1,14 @@
+spring:
+  application:
+    name: dmp-dic
+  cloud:
+    config:
+      profile: dev2
+      uri: http://192.168.64.18:9932
+      allowOverride: true
+      overrideNone: true
+      overrideSystemProperties: false
+eureka:
+  client:
+    fetch-registry: true
+    register-with-eureka: false

+ 1 - 1
dmp-dic/src/main/resources/bootstrap.yml

@@ -2,7 +2,7 @@ spring:
   application:
     name: dmp-dic
   profiles:
-    active: log-dev
+    active: dev
   cloud:
     config:
       profile: dev

+ 36 - 0
dmp-dic/src/main/resources/config/config.sql

@@ -0,0 +1,36 @@
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'spring.redis.password', '${persagy.redis.password}', 'dmp-dic', 'default', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='spring.redis.password' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'spring.redis.database', '${persagy.redis.database}', 'dmp-dic', 'default', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='spring.redis.database' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'spring.redis.pool.max-active', '${persagy.redis.max-active}', 'dmp-dic', 'default', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='spring.redis.pool.max-active' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'spring.redis.pool.max-idle', '${persagy.redis.max-idle}', 'dmp-dic', 'default', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='spring.redis.pool.max-idle' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'spring.redis.pool.min-idle', '${persagy.redis.min-idle}', 'dmp-dic', 'default', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='spring.redis.pool.min-idle' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'persagy.dmp.exchange', 'exchange-dmp', 'dmp-dic', 'default', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='persagy.dmp.exchange' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'persagy.dmp.dic.routingKey', 'routing-dmp-dic', 'dmp-dic', 'default', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='persagy.dmp.dic.routingKey' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'persagy.dmp.org.routingKey', 'routing-dmp-org', 'dmp-dic', 'default', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='persagy.dmp.org.routingKey' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'persagy.dmp.rwd.routingKey', 'routing-dmp-rwd', 'dmp-dic', 'default', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='persagy.dmp.rwd.routingKey' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'persagy.dmp.alarm.routingKey', 'routing-dmp-alarm', 'dmp-dic', 'default', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='persagy.dmp.alarm.routingKey' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'persagy.dmp.task.routingKey', 'routing-dmp-task', 'dmp-dic', 'default', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='persagy.dmp.task.routingKey' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'server.port', '8830', 'dmp-dic', 'dev2', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='server.port' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'eureka.client.service-url.defaultZone', 'http://frame:123456@192.168.64.18:9931/eureka/', 'dmp-dic', 'dev2', 'master', 1, 'DMP', '注册中心地址' FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='eureka.client.service-url.defaultZone' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'persagy.iot.data.server', 'http://localhost:9981', 'dmp-dic', 'dev2', 'master', 1, 'DMP', 'IOT数据查询服务' FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='persagy.iot.data.server' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'persagy.iot.setting.server', 'http://localhost:9983', 'dmp-dic', 'dev2', 'master', 1, 'DMP', 'IOT控制服务' FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='persagy.iot.setting.server' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'persagy.mysql.host', '192.168.64.15', 'dmp-dic', 'dev2', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='persagy.mysql.host' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'persagy.mysql.port', '9934', 'dmp-dic', 'dev2', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='persagy.mysql.port' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'persagy.mysql.database', 'dmp_dic', 'dmp-dic', 'dev2', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='persagy.mysql.database' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'persagy.mysql.username', 'root', 'dmp-dic', 'dev2', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='persagy.mysql.username' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'persagy.mysql.password', 'brzj123456', 'dmp-dic', 'dev2', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='persagy.mysql.password' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'persagy.mysql.initialSize', '10', 'dmp-dic', 'dev2', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='persagy.mysql.initialSize' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'persagy.mysql.maxActive', '300', 'dmp-dic', 'dev2', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='persagy.mysql.maxActive' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'persagy.rabbitmq.host', '192.168.64.15', 'dmp-dic', 'dev2', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='persagy.rabbitmq.host' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'persagy.rabbitmq.port', '9936', 'dmp-dic', 'dev2', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='persagy.rabbitmq.port' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'persagy.rabbitmq.username', 'admin', 'dmp-dic', 'dev2', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='persagy.rabbitmq.username' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'persagy.rabbitmq.password', 'brzj123456', 'dmp-dic', 'dev2', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='persagy.rabbitmq.password' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'persagy.rabbitmq.virtual-host', '/test', 'dmp-dic', 'dev2', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='persagy.rabbitmq.virtual-host' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'persagy.redis.host', '192.168.64.15', 'dmp-dic', 'dev2', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='persagy.redis.host' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'persagy.redis.port', '9944', 'dmp-dic', 'dev2', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='persagy.redis.port' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'persagy.redis.password', 'brzj123456', 'dmp-dic', 'dev2', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='persagy.redis.password' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'persagy.redis.database', '0', 'dmp-dic', 'dev2', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='persagy.redis.database' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'persagy.redis.max-active', '300', 'dmp-dic', 'dev2', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='persagy.redis.max-active' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'persagy.redis.max-idle', '30', 'dmp-dic', 'dev2', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='persagy.redis.max-idle' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'persagy.redis.min-idle', '10', 'dmp-dic', 'dev2', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='persagy.redis.min-idle' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'persagy.log.path', '.', 'dmp-dic', 'dev2', 'master', 1, 'DMP', '日志文件所在路径' FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='persagy.log.path' AND APPLICATION="dmp-dic");
+INSERT INTO `integrated_config`(`PKEY`, `PVALUE`, `APPLICATION`, `PPROFILE`, `LABLE`, `ISUPDATE`, `BELONGTO`, `DESCRIPTION`) SELECT 'persagy.dmp.dic.queue', 'queue-dmp-dic', 'dmp-dic', 'dev2', 'master', 1, 'DMP', NULL FROM DUAL WHERE NOT EXISTS(SELECT PKEY FROM integrated_config WHERE PKEY='persagy.dmp.dic.queue' AND APPLICATION="dmp-dic");

+ 3 - 3
dmp-dic/src/main/resources/logback-spring.xml

@@ -30,7 +30,7 @@
     <logger name="com.netflix" level="WARN"/>
     <logger name="org.apache.http" level="INFO"/>
 
-    <springProfile name="log-dev">
+    <springProfile name="dev">
         <logger name="org.hibernate.SQL" level="DEBUG"/>
         <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/>
         <root level="info">
@@ -38,7 +38,7 @@
         </root>
     </springProfile>
 
-    <springProfile name="log-test">
+    <springProfile name="test">
         <logger name="org.hibernate.SQL" level="DEBUG"/>
         <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/>
         <root level="info">
@@ -46,7 +46,7 @@
         </root>
     </springProfile>
 
-    <springProfile name="log-prod">
+    <springProfile name="prod">
         <root level="info">
             <appender-ref ref="file"/>
         </root>

+ 1 - 0
dmp-model/src/main/java/com/persagy/dmp/rwd/model/ClassDefModel.java

@@ -23,6 +23,7 @@ public class ClassDefModel {
     private String systemCode;
     private String equipmentCode;
     private String parentCode;
+    private Integer orderSeq;
 
     private Integer isUsed;//状态 0.历史版本 1.使用中
     private String version;//版本

+ 4 - 0
dmp-model/src/main/java/com/persagy/dmp/rwd/model/FuncidDefModel.java

@@ -37,6 +37,10 @@ public class FuncidDefModel {
     private String note;
     private Boolean subFlag;
     private Boolean weakPoint;
+    /**通用信息点标记,1-通用信息点,2-个性化信息点*/
+    private String shareType;
+    /**逻辑排序序号*/
+    private Integer orderSeq;
 
     private Integer isUsed;//状态 0.历史版本 1.使用中
     private String version;//版本

+ 27 - 0
dmp-model/src/main/java/com/persagy/dmp/rwd/model/RwdeditRefTypeInfosModel.java

@@ -0,0 +1,27 @@
+package com.persagy.dmp.rwd.model;
+
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import lombok.Getter;
+import lombok.Setter;
+import java.util.Date;
+import java.util.List;
+
+@Setter
+@Getter
+public class RwdeditRefTypeInfosModel {
+
+    private String refKey;
+    private String code;
+    private String name;
+    private String parentCode;
+    private String codePath;
+    private ObjectNode dataSource;
+    private Integer createUser;
+    private Integer seq;
+    private Date createTime;
+    private Integer updateUser;
+    private Date updateTime;
+    private String parentName;
+
+}

+ 54 - 11
dmp-org/pom.xml

@@ -38,6 +38,16 @@
         <dependency>
             <groupId>com.querydsl</groupId>
             <artifactId>querydsl-apt</artifactId>
+            <exclusions>
+                <exclusion>
+                    <artifactId>javassist</artifactId>
+                    <groupId>org.javassist</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>guava</artifactId>
+                    <groupId>com.google.guava</groupId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>com.querydsl</groupId>
@@ -60,6 +70,16 @@
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
+            <exclusions>
+                <exclusion>
+                    <artifactId>HdrHistogram</artifactId>
+                    <groupId>org.hdrhistogram</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>guava</artifactId>
+                    <groupId>com.google.guava</groupId>
+                </exclusion>
+            </exclusions>
         </dependency>
 
         <!-- 配置中心 -->
@@ -119,8 +139,31 @@
                     </execution>
                 </executions>
             </plugin>
+            <plugin>
+                <artifactId>maven-resources-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-resources</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+                        <configuration>
+                            <resources>
+                                <resource>
+                                    <directory>src/main/resources/</directory>
+                                    <includes>
+                                        <include>**/*.yml</include>
+                                    </includes>
+                                </resource>
+                            </resources>
+                            <outputDirectory>${project.build.directory}/config</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
 
-            <!--拷贝资源文件 copy-resources-->
+            <!--&lt;!&ndash;拷贝资源文件 copy-resources&ndash;&gt;
             <plugin>
                 <artifactId>maven-resources-plugin</artifactId>
                 <executions>
@@ -148,7 +191,7 @@
                             <outputDirectory>${project.build.directory}/config</outputDirectory>
                         </configuration>
                     </execution>
-                    <!--拷贝启动脚本-->
+                    &lt;!&ndash;拷贝启动脚本&ndash;&gt;
                     <execution>
                         <id>copy-version</id>
                         <phase>package</phase>
@@ -167,8 +210,8 @@
                 </executions>
             </plugin>
 
-            <!-- 按照测试要求打成zip需要的配置 -->
-            <!--获取git信息-->
+            &lt;!&ndash; 按照测试要求打成zip需要的配置 &ndash;&gt;
+            &lt;!&ndash;获取git信息&ndash;&gt;
             <plugin>
                 <groupId>pl.project13.maven</groupId>
                 <artifactId>git-commit-id-plugin</artifactId>
@@ -183,19 +226,19 @@
                     <verbose>true</verbose>
                     <dateFormat>yyyyMMddHHmm</dateFormat>
                     <generateGitPropertiesFile>true</generateGitPropertiesFile>
-                    <!--<generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties</generateGitPropertiesFilename>-->
+                    &lt;!&ndash;<generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties</generateGitPropertiesFilename>&ndash;&gt;
                     <generateGitPropertiesFilename>target/git.properties</generateGitPropertiesFilename>
                 </configuration>
             </plugin>
 
-            <!-- 打包压缩 -->
+            &lt;!&ndash; 打包压缩 &ndash;&gt;
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-assembly-plugin</artifactId>
                 <executions>
                     <execution>
                         <id>make-assembly</id>
-                        <!-- 当执行mvn package时才会打包 -->
+                        &lt;!&ndash; 当执行mvn package时才会打包 &ndash;&gt;
                         <phase>package</phase>
                         <goals>
                             <goal>single</goal>
@@ -204,17 +247,17 @@
                             <finalName>
                                 ${project.artifactId}_${git.commit.time}_git_${git.branch}_${git.commit.id.abbrev}
                             </finalName>
-                            <!--不包含assembly id-->
+                            &lt;!&ndash;不包含assembly id&ndash;&gt;
                             <appendAssemblyId>false</appendAssemblyId>
-                            <!--输出路径-->
-                            <!--<outputDirectory>../target/co_search-${project.version}</outputDirectory>-->
+                            &lt;!&ndash;输出路径&ndash;&gt;
+                            &lt;!&ndash;<outputDirectory>../target/co_search-${project.version}</outputDirectory>&ndash;&gt;
                             <descriptors>
                                 <descriptor>src/script/zip.xml</descriptor>
                             </descriptors>
                         </configuration>
                     </execution>
                 </executions>
-            </plugin>
+            </plugin>-->
         </plugins>
     </build>
 

+ 20 - 20
dmp-org/src/main/java/com/persagy/dmp/org/service/InitService.java

@@ -119,8 +119,8 @@ public class InitService {
                 "  `status` int(11) NOT NULL COMMENT '状态',\n" +
                 "  `create_user` varchar(80) DEFAULT NULL COMMENT '创建用户',\n" +
                 "  `update_user` varchar(80) DEFAULT NULL COMMENT '更新用户',\n" +
-                "  `create_time` timestamp default current_timestamp comment '创建时间', \n" +
-                "  `update_time` timestamp default current_timestamp on update current_timestamp comment '更新时间', \n" +
+                "  `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', \n" +
+                "  `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', \n" +
                 "  `remark` varchar(500) DEFAULT NULL COMMENT '备注',\n" +
                 "  PRIMARY KEY (`id`) USING BTREE\n" +
                 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='公司'";
@@ -163,8 +163,8 @@ public class InitService {
                 "  `status` int(11) NOT NULL COMMENT '状态',\n" +
                 "  `create_user` varchar(80) DEFAULT NULL COMMENT '创建用户',\n" +
                 "  `update_user` varchar(80) DEFAULT NULL COMMENT '更新用户',\n" +
-                "  `create_time` timestamp default current_timestamp comment '创建时间', \n" +
-                "  `update_time` timestamp default current_timestamp on update current_timestamp comment '更新时间', \n" +
+                "  `create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', \n" +
+                "  `update_time` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', \n" +
                 "  `remark` varchar(500) DEFAULT NULL,\n" +
                 "  PRIMARY KEY (`id`) USING BTREE\n" +
                 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='部门'";
@@ -187,8 +187,8 @@ public class InitService {
                 "  `status` int(11) NOT NULL COMMENT '状态',\n" +
                 "  `create_user` varchar(80) DEFAULT NULL COMMENT '创建用户',\n" +
                 "  `update_user` varchar(80) DEFAULT NULL COMMENT '更新用户',\n" +
-                "  `create_time` timestamp default current_timestamp comment '创建时间', \n" +
-                "  `update_time` timestamp default current_timestamp on update current_timestamp comment '更新时间', \n" +
+                "  `create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', \n" +
+                "  `update_time` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', \n" +
                 "  `remark` varchar(500) DEFAULT NULL,\n" +
                 "  PRIMARY KEY (`id`) USING BTREE\n" +
                 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='部门分类'";
@@ -213,8 +213,8 @@ public class InitService {
                 "  `status` int(11) NOT NULL COMMENT '状态',\n" +
                 "  `create_user` varchar(80) DEFAULT NULL COMMENT '创建用户',\n" +
                 "  `update_user` varchar(80) DEFAULT NULL COMMENT '更新用户',\n" +
-                "  `create_time` timestamp default current_timestamp comment '创建时间', \n" +
-                "  `update_time` timestamp default current_timestamp on update current_timestamp comment '更新时间', \n" +
+                "  `create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', \n" +
+                "  `update_time` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', \n" +
                 "  `remark` varchar(500) DEFAULT NULL,\n" +
                 "  PRIMARY KEY (`id`) USING BTREE\n" +
                 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='岗位'";
@@ -236,8 +236,8 @@ public class InitService {
                 "  `status` int(11) NOT NULL COMMENT '状态',\n" +
                 "  `create_user` varchar(80) DEFAULT NULL COMMENT '创建用户',\n" +
                 "  `update_user` varchar(80) DEFAULT NULL COMMENT '更新用户',\n" +
-                "  `create_time` timestamp default current_timestamp comment '创建时间', \n" +
-                "  `update_time` timestamp default current_timestamp on update current_timestamp comment '更新时间', \n" +
+                "  `create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', \n" +
+                "  `update_time` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', \n" +
                 "  `remark` varchar(500) DEFAULT NULL,\n" +
                 "  PRIMARY KEY (`id`) USING BTREE\n" +
                 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='岗位分类'";
@@ -259,8 +259,8 @@ public class InitService {
                 "  `status` int(11) NOT NULL COMMENT '状态',\n" +
                 "  `create_user` varchar(80) DEFAULT NULL COMMENT '创建用户',\n" +
                 "  `update_user` varchar(80) DEFAULT NULL COMMENT '更新用户',\n" +
-                "  `create_time` timestamp default current_timestamp comment '创建时间', \n" +
-                "  `update_time` timestamp default current_timestamp on update current_timestamp comment '更新时间', \n" +
+                "  `create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', \n" +
+                "  `update_time` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', \n" +
                 "  `remark` varchar(500) DEFAULT NULL,\n" +
                 "  PRIMARY KEY (`id`) USING BTREE\n" +
                 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='岗位分类与应用功能关系'";
@@ -280,8 +280,8 @@ public class InitService {
                 "  `status` int(11) NOT NULL COMMENT '状态',\n" +
                 "  `create_user` varchar(80) DEFAULT NULL COMMENT '创建用户',\n" +
                 "  `update_user` varchar(80) DEFAULT NULL COMMENT '更新用户',\n" +
-                "  `create_time` timestamp default current_timestamp comment '创建时间', \n" +
-                "  `update_time` timestamp default current_timestamp on update current_timestamp comment '更新时间', \n" +
+                "  `create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', \n" +
+                "  `update_time` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', \n" +
                 "  `remark` varchar(500) DEFAULT NULL,\n" +
                 "  PRIMARY KEY (`id`) USING BTREE\n" +
                 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='项目'";
@@ -314,8 +314,8 @@ public class InitService {
                 "  `status` int(11) NOT NULL COMMENT '状态',\n" +
                 "  `create_user` varchar(80) DEFAULT NULL COMMENT '创建用户',\n" +
                 "  `update_user` varchar(80) DEFAULT NULL COMMENT '更新用户',\n" +
-                "  `create_time` timestamp default current_timestamp comment '创建时间', \n" +
-                "  `update_time` timestamp default current_timestamp on update current_timestamp comment '更新时间', \n" +
+                "  `create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', \n" +
+                "  `update_time` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', \n" +
                 "  `remark` varchar(500) DEFAULT NULL,\n" +
                 "  `person_id` varchar(80) DEFAULT NULL,\n" +
                 "  PRIMARY KEY (`id`) USING BTREE\n" +
@@ -337,8 +337,8 @@ public class InitService {
                 "  `status` int(11) NOT NULL COMMENT '状态',\n" +
                 "  `create_user` varchar(80) DEFAULT NULL COMMENT '创建用户',\n" +
                 "  `update_user` varchar(80) DEFAULT NULL COMMENT '更新用户',\n" +
-                "  `create_time` timestamp default current_timestamp comment '创建时间', \n" +
-                "  `update_time` timestamp default current_timestamp on update current_timestamp comment '更新时间', \n" +
+                "  `create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', \n" +
+                "  `update_time` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', \n" +
                 "  `remark` varchar(500) DEFAULT NULL COMMENT '备注',\n" +
                 "  PRIMARY KEY (`id`) USING BTREE\n" +
                 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='集团与应用关系'";
@@ -359,8 +359,8 @@ public class InitService {
                 "  `status` int(11) NOT NULL COMMENT '状态',\n" +
                 "  `create_user` varchar(80) DEFAULT NULL COMMENT '创建用户',\n" +
                 "  `update_user` varchar(80) DEFAULT NULL COMMENT '更新用户',\n" +
-                "  `create_time` timestamp default current_timestamp comment '创建时间', \n" +
-                "  `update_time` timestamp default current_timestamp on update current_timestamp comment '更新时间', \n" +
+                "  `create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', \n" +
+                "  `update_time` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', \n" +
                 "  `remark` varchar(500) DEFAULT NULL COMMENT '备注',\n" +
                 "  PRIMARY KEY (`id`) USING BTREE\n" +
                 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='集团与功能关系'";

+ 14 - 0
dmp-org/src/main/resources/bootstrap-dev.yml

@@ -0,0 +1,14 @@
+spring:
+  application:
+    name: dmp-org
+  cloud:
+    config:
+      profile: dev2
+      uri: http://192.168.64.18:9932
+      allowOverride: true
+      overrideNone: true
+      overrideSystemProperties: false
+eureka:
+  client:
+    fetch-registry: true
+    register-with-eureka: false

+ 2 - 2
dmp-org/src/main/resources/bootstrap.yml

@@ -2,10 +2,10 @@ spring:
   application:
     name: dmp-org
   profiles:
-    active: log-test
+    active: dev
   cloud:
     config:
-      profile: dev
+      profile: dev2
       uri: http://192.168.64.18:9932
 persagy:
   log:

Dosya farkı çok büyük olduğundan ihmal edildi
+ 65 - 0
dmp-org/src/main/resources/config/config.sql


+ 7 - 6
dmp-org/src/main/resources/logback-spring.xml

@@ -27,26 +27,27 @@
 
     <logger name="org.hibernate" level="INFO"/>
     <logger name="org.springframework" level="INFO"/>
-    <logger name="com.netflix" level="WARN"/>
+    <logger name="com.netflix" level="INFO"/>
     <logger name="org.apache.http" level="INFO"/>
 
-    <springProfile name="log-dev">
+    <springProfile name="dev">
         <logger name="org.hibernate.SQL" level="DEBUG"/>
         <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/>
-        <root level="info">
+        <root level="INFO">
             <appender-ref ref="stdout"/>
         </root>
     </springProfile>
 
-    <springProfile name="log-test">
+    <springProfile name="test">
         <logger name="org.hibernate.SQL" level="DEBUG"/>
         <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/>
-        <root level="info">
+        <root level="INFO">
             <appender-ref ref="file"/>
+            <appender-ref ref="stdout"/>
         </root>
     </springProfile>
 
-    <springProfile name="log-prod">
+    <springProfile name="prod">
         <root level="info">
             <appender-ref ref="file"/>
         </root>

+ 6 - 0
dmp-rwd-datautils/pom.xml

@@ -65,5 +65,11 @@
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-openfeign</artifactId>
         </dependency>
+        <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.7.2</version>
+        </dependency>
     </dependencies>
 </project>

+ 5 - 3
dmp-rwd-datautils/src/main/resources/application-dev.yml

@@ -1,10 +1,12 @@
 persagy:
   dmp:
     rwd:
-      server: http://39.102.54.110:8082
+      #server: http://39.102.54.110:8082
+      server: http://192.168.64.17:8082
     rwdedit:
-      server: http://39.102.54.110:8088
-#      server: http://localhost:8082
+      #server: http://39.102.54.110:8088
+      server: http://192.168.64.17:8838
+      #server: http://localhost:8838
 #spring:
 #  datasource:
 #    url: jdbc:mysql://39.102.54.110:9005/dmp_test?useUnicode=true&characterEncoding=utf-8&mysqlEncoding=utf8&useSSL=false

+ 242 - 75
dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/datautils/ImportFuncid.java

@@ -30,10 +30,9 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
 import java.io.*;
-import java.util.Date;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.UUID;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * @author: yaoll
@@ -45,9 +44,9 @@ import java.util.UUID;
 @RunWith(SpringRunner.class)
 public class ImportFuncid {
 
-    private String basepath = "C:\\Users\\24341\\Downloads\\数据字典附表(20210503)";
+    private String basepath = "D:\\users\\数据字典v3.1.11\\数据字典附表(20210701)";
 
-    private String outPath = "C:/Users/24341/Downloads/20210512/funcid-" + DateUtils.format(new Date()) + ".dml.sql";
+    private String outPath = "D:/users/20210701/rwd/funcid-" + DateUtils.format(new Date()) + ".dml.sql";
 
     @Autowired
     private HttpUtils httpUtils;
@@ -55,6 +54,7 @@ public class ImportFuncid {
     @Value("${persagy.dmp.rwdedit.server}")
     private String rwdeditServer;
 
+
     @Before
     public void init() {
         FuncidUtils.httpUtils = httpUtils;
@@ -64,14 +64,14 @@ public class ImportFuncid {
     @Test
     public void importFuncidDef() throws IOException {
         List<FuncidDefModel> funcids = new LinkedList<>();
-        //importBase(funcids);
-        importSpace(funcids);
-        importSystem(funcids);
+        // importBase(funcids);
+    /*    importSpace(funcids);
+        importSystem(funcids);*/
         importEquipment(funcids);
-        importComponent(funcids);
+      /*  importComponent(funcids);
         importVirtual(funcids);
         importTool(funcids);
-        importMaterial(funcids);
+        importMaterial(funcids);*/
 
         FileOutputStream fos = new FileOutputStream(outPath);
         PrintWriter writer = new PrintWriter(new BufferedOutputStream(fos));
@@ -90,7 +90,6 @@ public class ImportFuncid {
         funcids.addAll(readSheet("system", "/附表6-机电精装类对象通用属性点表.xlsx", "系统类"));
         funcids.addAll(readSheet("equipment", "/附表6-机电精装类对象通用属性点表.xlsx", "设备类"));
         funcids.addAll(readSheet("component", "/附表6-机电精装类对象通用属性点表.xlsx", "部件类"));
-
     }
 
     private String toSql(FuncidDefModel model) {
@@ -167,7 +166,7 @@ public class ImportFuncid {
         return buff.toString();
     }
 
-    private FuncidDefModel toFuncidDefModel(CacheModel model) {
+    private FuncidDefModel toFuncidDefModel(CacheModel model,String classCode, String fileName, String sheetName) {
         FuncidDefModel funcid = new FuncidDefModel();
         funcid.setGroupCode("0");
         funcid.setProjectId("0");
@@ -218,10 +217,177 @@ public class ImportFuncid {
         }
         if (funcid.getDataType() == FuncidDataType.ENUM || funcid.getDataType() == FuncidDataType.MENUM || funcid.getDataType() == FuncidDataType.BOOLEAN) {
             funcid.setDataSource(FuncidUtils.transEnumDataSource(model.origDataSource)); // 解析datasource
+            //funcid.setDataSource(transEnumDataSource(model.origDataSource, classCode,  fileName, sheetName,model.origCode)); // 解析datasource
         }
         return funcid;
     }
 
+    private static void writeErrorDataSourceToFile(String message) throws IOException {
+        FileWriter writer = new FileWriter("D:/资料/工作资料/原型图/数据中台/out/错误信息点.txt",true);
+        writer.append(message);
+        writer.append("\n");
+        writer.flush();
+        writer.close();
+    }
+
+    public static ArrayNode transEnumDataSource(String dataSource,String classCode, String fileName, String sheetName,String origCode) {
+        ArrayNode array = JsonNodeFactory.instance.arrayNode();
+        if (dataSource == null) {
+            return null;
+        }
+        // 包含换行符 直接返回
+        if (dataSource.indexOf("\n") > -1) {
+            return null;
+        }
+        // 预处理 ". " -> "."
+        while (dataSource.indexOf(". ") > -1) {
+            dataSource = dataSource.replace(". ", ".");
+        }
+        if (dataSource.contains("《")) {
+            String name = null;
+            String refKey = null;
+            Pattern pattern = Pattern.compile("《(.*?)》");
+            Matcher matcher = pattern.matcher(dataSource);
+            while (matcher.find()) {
+                String group = matcher.group(1);
+                if ("4天气状态".equals(group)) {
+                    name = "天气状态";
+                } else if ("6方向代码".equals(group)) {
+                    name = "方向代码";
+                } else if ("10抗震设防烈度".equals(group)) {
+                    name = "抗震设防烈度";
+                } else {
+                    name = group;
+                }
+            }
+            if ("见《推荐空间业态分类表》-项目类型".equals(dataSource)) {
+                name = "项目类型";
+            } else if ("见《枚举值释义》方向代码".equals(dataSource)) {
+                name = "方向代码";
+            } else if ("参考《11防护等级》".equals(dataSource)) {
+                // 预处理
+                String tmp = dataSource.replace("(多选)", "")
+                        .replace("(可多选)", "")
+                        .replace("(可以多选)", "");
+
+                // 尝试解析
+                // 1.铸铁 2.钢 3.铝合金 4.铜管 5.复合型 99.其他
+                String[] split = tmp.split(" ");
+                if (split.length == 0) {
+                    return null;
+                }
+                Map<String, String> data = new HashMap<>();
+                for (int i = 0; i < split.length; i++) {
+                    String temp = split[i];
+                    int idx = temp.indexOf(".");
+                    if (idx == -1) {
+                        continue;
+                    }
+                    String key = temp.substring(0, idx);
+                    String value = temp.substring(idx + 1);
+                    data.put(key, value);
+                    ObjectNode item = array.addObject();
+                    item.put("code", key);
+                    item.put("name", value);
+                }
+                return array;
+            }
+
+            //查询知识库引用
+            String url =  FuncidUtils.rwdeditServer+ "/rwdedit/ref/type/query";
+            JacksonCriteria criteria = JacksonCriteria.newInstance();
+            criteria.add("aliasName", name);
+            HttpUtils.HttpResult response = FuncidUtils.httpUtils.post(url, JacksonMapper.toSimpleJson(criteria), 300000);
+            if (!response.success()) {
+                return null;
+            }
+            String content = response.getContent();
+            ObjectNode objectNode = JacksonMapper.toObject(content, ObjectNode.class);
+            ArrayNode data = JacksonMapper.getArray(objectNode, "data", JsonNodeFactory.instance.arrayNode());
+            refKey = JacksonMapper.getString((ObjectNode) data.get(0), "refKey");
+            if (null == refKey) {
+                return null;
+            }
+
+            //查询知识库详情
+            url = FuncidUtils.rwdeditServer + "/rwdedit/ref/type/infos/query";
+            criteria = JacksonCriteria.newInstance();
+            criteria.add("refKey", refKey);
+            response = FuncidUtils.httpUtils.post(url, JacksonMapper.toSimpleJson(criteria), 300000);
+            if (!response.success()) {
+                return null;
+            }
+            content = response.getContent();
+            objectNode = JacksonMapper.toObject(content, ObjectNode.class);
+            data = JacksonMapper.getArray(objectNode, "data", JsonNodeFactory.instance.arrayNode());
+            for (JsonNode datum : data) {
+                ObjectNode obj = (ObjectNode) datum;
+                ObjectNode item = array.addObject();
+                item.put("code", JacksonMapper.getString(obj, "code"));
+                item.put("name", JacksonMapper.getString(obj, "name"));
+                String parentCode = JacksonMapper.getString(obj, "parentCode");
+                if (parentCode != null && !("-9999".equals(parentCode))) {
+                    item.put("parentCode", parentCode);
+                }
+            }
+        } else if (dataSource.indexOf(".") > -1) {
+
+            // 预处理
+            String tmp = dataSource.replace("(多选)", "")
+                    .replace("(可多选)", "")
+                    .replace("(可以多选)", "");
+            log.info("Excel名称:"+fileName+",sheet表名:"+sheetName+",信息点code:"+origCode);
+            try {
+                writeErrorDataSourceToFile("Excel名称:"+fileName+",sheet表名:"+sheetName+",信息点code:"+origCode);
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+
+            /*// 尝试解析
+            // 1.铸铁 2.钢 3.铝合金 4.铜管 5.复合型 99.其他
+            String[] split = tmp.split(" ");
+            if (split.length == 0) {
+                return null;
+            }
+            Map<String, String> data = new HashMap<>();
+            for (int i = 0; i < split.length; i++) {
+                String temp = split[i];
+                int idx = temp.indexOf(".");
+                if (idx == -1) {
+                    continue;
+                }
+                if (temp.matches("^([0-9]+[.]){2,}[^.]+$")){
+                    // 1) 11.1. 测试 2)11.1.测试
+                    String key = temp.substring(0,temp.lastIndexOf("."));
+                    String value = temp.substring(temp.lastIndexOf(".")+1).trim();
+                    data.put(key, value);
+                    ObjectNode item = array.addObject();
+                    item.put("code", key);
+                    item.put("name", value);
+                    continue;
+                }
+                if (temp.matches("^([0-9]+[.])+[0-9]+[.]?[^.]+$")){
+                    // 1)11.1 测试
+                    String[] temps = temp.split(" ");
+                    String key = temps[0];
+                    String value = temps[1];
+                    data.put(key, value);
+                    ObjectNode item = array.addObject();
+                    item.put("code", key);
+                    item.put("name", value);
+                    continue;
+                }
+                String key = temp.substring(0, idx);
+                String value = temp.substring(idx + 1);
+                data.put(key, value);
+                ObjectNode item = array.addObject();
+                item.put("code", key);
+                item.put("name", value);
+            }*/
+        }
+        return array;
+    }
+
     private void importSpace(List<FuncidDefModel> funcids) throws IOException {
         funcids.addAll(readSheet("project", "/附表5-建筑空间类对象属性点表/附表5.1-项目.xlsx", "项目"));
         funcids.addAll(readSheet("building", "/附表5-建筑空间类对象属性点表/附表5.2-建筑.xlsx", "建筑"));
@@ -306,60 +472,60 @@ public class ImportFuncid {
     }
 
     private void importEquipment(List<FuncidDefModel> funcids) throws IOException {
-        funcids.addAll(readSheet("equipment", "/附表6-机电精装类对象通用属性点表.xlsx", "设备类"));
-        funcids.addAll(readSheet("SETDTF", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.1-变配电系统设备.xlsx", "TDTF变压器"));
+        /*funcids.addAll(readSheet("equipment", "/附表6-机电精装类对象通用属性点表.xlsx", "设备类"));*/
+        /*funcids.addAll(readSheet("SETDTF", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.1-变配电系统设备.xlsx", "TDTF变压器"));
         funcids.addAll(readSheet("SETDHS", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.1-变配电系统设备.xlsx", "TDHS高压开关柜"));
         funcids.addAll(readSheet("SETDLS", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.1-变配电系统设备.xlsx", "TDLS低压开关柜"));
         funcids.addAll(readSheet("SETDDS", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.1-变配电系统设备.xlsx", "TDDS直流屏"));
         funcids.addAll(readSheet("SETDIV", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.1-变配电系统设备.xlsx", "TDIV逆变器"));
         funcids.addAll(readSheet("SETDBP", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.1-变配电系统设备.xlsx", "TDBP变配电母线插接箱"));
-        funcids.addAll(readSheet("SETDCU", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.1-变配电系统设备.xlsx", "TDCU变配电控制"));
-        funcids.addAll(readSheet("SESDCU", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.10-强电人防系统设备.xlsx", "SDCU强电人防控制"));
+        funcids.addAll(readSheet("SETDCU", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.1-变配电系统设备.xlsx", "TDCU变配电控制模块"));
+        funcids.addAll(readSheet("SESDCU", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.10-强电人防系统设备.xlsx", "SDCU强电人防控制模块"));
         funcids.addAll(readSheet("SEDGDG", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.2-柴发机房系统设备.xlsx", "DGDG柴油发电机"));
         funcids.addAll(readSheet("SEDGDT", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.2-柴发机房系统设备.xlsx", "DGDT柴发储油箱"));
         funcids.addAll(readSheet("SEDGPP", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.2-柴发机房系统设备.xlsx", "DGPP柴发输油泵"));
         funcids.addAll(readSheet("SEDGJH", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.2-柴发机房系统设备.xlsx", "DGJH柴发水套加热器"));
         funcids.addAll(readSheet("SEDGEP", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.2-柴发机房系统设备.xlsx", "DGEP柴发尾气净化装置"));
-        funcids.addAll(readSheet("SEDGCU", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.2-柴发机房系统设备.xlsx", "DGCU柴发控制"));
+        funcids.addAll(readSheet("SEDGCU", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.2-柴发机房系统设备.xlsx", "DGCU柴发控制模块"));
         funcids.addAll(readSheet("SEBPBP", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.3-备用电源系统设备.xlsx", "BPBP备用电源"));
         funcids.addAll(readSheet("SEBPSP", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.3-备用电源系统设备.xlsx", "BPSP太阳能电池板"));
         funcids.addAll(readSheet("SEBPWG", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.3-备用电源系统设备.xlsx", "BPWG风力发电装置"));
         funcids.addAll(readSheet("SEBPHT", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.3-备用电源系统设备.xlsx", "BPHT备用电源主机"));
-        funcids.addAll(readSheet("SEBPCU", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.3-备用电源系统设备.xlsx", "BPCU备用电源控制"));
-        funcids.addAll(readSheet("SEEPCU", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.4-机房动力系统设备.xlsx", "EPCU机房动力控制"));
-        funcids.addAll(readSheet("SEOPCU", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.5-室外动力系统设备.xlsx", "OPCU室外动力控制"));
+        funcids.addAll(readSheet("SEBPCU", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.3-备用电源系统设备.xlsx", "BPCU备用电源控制模块"));
+        funcids.addAll(readSheet("SEEPCU", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.4-机房动力系统设备.xlsx", "EPCU机房动力控制模块"));
+        funcids.addAll(readSheet("SEOPCU", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.5-室外动力系统设备.xlsx", "OPCU室外动力控制模块"));
         funcids.addAll(readSheet("SEELEL", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.6-电梯系统设备.xlsx", "ELEL直梯"));
         funcids.addAll(readSheet("SEELES", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.6-电梯系统设备.xlsx", "ELES扶梯"));
-        funcids.addAll(readSheet("SEELCU", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.6-电梯系统设备.xlsx", "ELCU电梯控制"));
+        funcids.addAll(readSheet("SEELCU", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.6-电梯系统设备.xlsx", "ELCU电梯控制模块"));
         funcids.addAll(readSheet("SEELET", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.6-电梯系统设备.xlsx", "ELET电梯曳引机"));
         funcids.addAll(readSheet("SELTLT", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.7-照明系统设备.xlsx", "LTLT照明灯具"));
-        funcids.addAll(readSheet("SELTCU", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.7-照明系统设备.xlsx", "LTCU照明控制"));
+        funcids.addAll(readSheet("SELTCU", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.7-照明系统设备.xlsx", "LTCU照明控制模块"));
         funcids.addAll(readSheet("SELTCP", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.7-照明系统设备.xlsx", "LTCP照明控制面板"));
         funcids.addAll(readSheet("SELTCC", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.7-照明系统设备.xlsx", "LTCC照明回路(预计330后删除)"));
         funcids.addAll(readSheet("SELTLG", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.7-照明系统设备.xlsx", "LTLG照明灯组(预计330后删除)"));
-        funcids.addAll(readSheet("SETPCU", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.8-租户配电系统设备.xlsx", "TPCU租户配电控制"));
+        funcids.addAll(readSheet("SETPCU", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.8-租户配电系统设备.xlsx", "TPCU租户配电控制模块"));
         funcids.addAll(readSheet("SETPBP", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.8-租户配电系统设备.xlsx", "TPBP租户母线插接箱"));
         funcids.addAll(readSheet("SELPAT", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.9-雷电防护系统设备.xlsx", "LPAT接闪器"));
         funcids.addAll(readSheet("SELPDL", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.9-雷电防护系统设备.xlsx", "LPDL引下线"));
         funcids.addAll(readSheet("SELPGD", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.9-雷电防护系统设备.xlsx", "LPGD接地装置"));
         funcids.addAll(readSheet("WEBAHT", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.1-建筑设备控制系统设备.xlsx", "BAHT楼控主机"));
-        funcids.addAll(readSheet("WEBACU", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.1-建筑设备控制系统设备.xlsx", "BACU楼控控制"));
+        funcids.addAll(readSheet("WEBACU", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.1-建筑设备控制系统设备.xlsx", "BACU楼控控制模块"));
         funcids.addAll(readSheet("WEBADC", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.1-建筑设备控制系统设备.xlsx", "BADC楼控数据采集器"));
         funcids.addAll(readSheet("WEBAPS", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.1-建筑设备控制系统设备.xlsx", "BAPS楼控电源供应器"));
         funcids.addAll(readSheet("WEBAEC", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.1-建筑设备控制系统设备.xlsx", "BAEC楼控机柜"));
         funcids.addAll(readSheet("WEBADS", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.1-建筑设备控制系统设备.xlsx", "BADS楼控显示屏"));
         funcids.addAll(readSheet("WEBACP", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.1-建筑设备控制系统设备.xlsx", "BACP楼控控制面板"));
         funcids.addAll(readSheet("WEEMHT", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.10-能源管理系统设备.xlsx", "EMHT能源管理主机"));
-        funcids.addAll(readSheet("WEEMCU", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.10-能源管理系统设备.xlsx", "EMCU能源管理控制"));
+        funcids.addAll(readSheet("WEEMCU", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.10-能源管理系统设备.xlsx", "EMCU能源管理控制模块"));
         funcids.addAll(readSheet("WEMMHT", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.11-气象监测系统设备.xlsx", "MMHT气象监测主机"));
-        funcids.addAll(readSheet("WEMMCU", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.11-气象监测系统设备.xlsx", "MMCU气象监测控制"));
+        funcids.addAll(readSheet("WEMMCU", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.11-气象监测系统设备.xlsx", "MMCU气象监测控制模块"));
         funcids.addAll(readSheet("WEMMMS", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.11-气象监测系统设备.xlsx", "MMMS气象监测站"));
         funcids.addAll(readSheet("WECMHT", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.12-收银管理系统设备.xlsx", "CMHT收银管理主机"));
-        funcids.addAll(readSheet("WECMCU", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.12-收银管理系统设备.xlsx", "CMCU收银管理控制"));
+        funcids.addAll(readSheet("WECMCU", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.12-收银管理系统设备.xlsx", "CMCU收银管理控制模块"));
         funcids.addAll(readSheet("WEOFTL", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.13-办公系统设备.xlsx", "OFTL办公电话"));
         funcids.addAll(readSheet("WEOFCM", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.13-办公系统设备.xlsx", "OFCM办公摄像头"));
         funcids.addAll(readSheet("WEOFCP", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.13-办公系统设备.xlsx", "OFCP办公控制面板"));
-        funcids.addAll(readSheet("WEOFCU", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.13-办公系统设备.xlsx", "OFCU办公控制"));
+        funcids.addAll(readSheet("WEOFCU", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.13-办公系统设备.xlsx", "OFCU办公控制模块"));
         funcids.addAll(readSheet("WEOFDS", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.13-办公系统设备.xlsx", "OFDS办公显示屏"));
         funcids.addAll(readSheet("WEOFFE", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.13-办公系统设备.xlsx", "OFFE办公前端设备"));
         funcids.addAll(readSheet("WEOFHT", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.13-办公系统设备.xlsx", "OFHT办公主机"));
@@ -372,18 +538,18 @@ public class ImportFuncid {
         funcids.addAll(readSheet("WEOFTV", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.13-办公系统设备.xlsx", "OFTV办公电视机"));
         funcids.addAll(readSheet("WETVFE", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.2-电视信号系统设备.xlsx", "TVFE电视前端设备"));
         funcids.addAll(readSheet("WETVTV", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.2-电视信号系统设备.xlsx", "TVTV电视机"));
-        funcids.addAll(readSheet("WETVCU", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.2-电视信号系统设备.xlsx", "TVCU电视信号控制"));
+        funcids.addAll(readSheet("WETVCU", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.2-电视信号系统设备.xlsx", "TVCU电视信号控制模块"));
         funcids.addAll(readSheet("WEMIHT", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.3-多媒体信息发布系统设备.xlsx", "MIHT多媒体主机"));
         funcids.addAll(readSheet("WEMIPL", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.3-多媒体信息发布系统设备.xlsx", "MIPL播放器"));
         funcids.addAll(readSheet("WEMIDS", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.3-多媒体信息发布系统设备.xlsx", "MIDS多媒体显示屏"));
         funcids.addAll(readSheet("WEMIST", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.3-多媒体信息发布系统设备.xlsx", "MIST自助终端机"));
         funcids.addAll(readSheet("WEMIFE", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.3-多媒体信息发布系统设备.xlsx", "MIFE多媒体前端设备"));
-        funcids.addAll(readSheet("WEMICU", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.3-多媒体信息发布系统设备.xlsx", "MICU多媒体控制"));
+        funcids.addAll(readSheet("WEMICU", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.3-多媒体信息发布系统设备.xlsx", "MICU多媒体控制模块"));
         funcids.addAll(readSheet("WEWTWT", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.4-无线对讲系统设备.xlsx", "WTWT对讲机"));
         funcids.addAll(readSheet("WEWTRS", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.4-无线对讲系统设备.xlsx", "WTRS中继台"));
-        funcids.addAll(readSheet("WEWTCU", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.4-无线对讲系统设备.xlsx", "WTCU无线对讲控制"));
+        funcids.addAll(readSheet("WEWTCU", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.4-无线对讲系统设备.xlsx", "WTCU无线对讲控制模块"));
         funcids.addAll(readSheet("WEGMHT", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.5-车库管理系统设备.xlsx", "GMHT车库主机"));
-        funcids.addAll(readSheet("WEGMCU", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.5-车库管理系统设备.xlsx", "GMCU车库控制"));
+        funcids.addAll(readSheet("WEGMCU", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.5-车库管理系统设备.xlsx", "GMCU车库控制模块"));
         funcids.addAll(readSheet("WEGMCM", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.5-车库管理系统设备.xlsx", "GMCM车库摄像头"));
         funcids.addAll(readSheet("WEGMDS", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.5-车库管理系统设备.xlsx", "GMDS车库显示屏"));
         funcids.addAll(readSheet("WEGMGT", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.5-车库管理系统设备.xlsx", "GMGT进出闸机"));
@@ -399,14 +565,14 @@ public class ImportFuncid {
         funcids.addAll(readSheet("WELNHF", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.6-本地网络系统设备.xlsx", "LNHF硬件防火墙"));
         funcids.addAll(readSheet("WELNAC", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.6-本地网络系统设备.xlsx", "LNAC无线控制器"));
         funcids.addAll(readSheet("WELNAP", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.6-本地网络系统设备.xlsx", "LNAP无线AP点位"));
-        funcids.addAll(readSheet("WELNCU", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.6-本地网络系统设备.xlsx", "LNCU网络控制"));
+        funcids.addAll(readSheet("WELNCU", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.6-本地网络系统设备.xlsx", "LNCU网络控制模块"));
         funcids.addAll(readSheet("WEMAHT", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.7-移动通信信号放大系统设备.xlsx", "MAHT移动通信信号放大主机"));
         funcids.addAll(readSheet("WEMAAT", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.7-移动通信信号放大系统设备.xlsx", "MAAT移动通信信号放大天线"));
-        funcids.addAll(readSheet("WEMACU", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.7-移动通信信号放大系统设备.xlsx", "MACU移动通信信号放大控制"));
+        funcids.addAll(readSheet("WEMACU", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.7-移动通信信号放大系统设备.xlsx", "MACU移动通信信号放大控制模块"));
         funcids.addAll(readSheet("WETMHT", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.8-租户管理系统设备.xlsx", "TMHT租户管理主机"));
-        funcids.addAll(readSheet("WETMCU", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.8-租户管理系统设备.xlsx", "TMCU租户管理控制"));
+        funcids.addAll(readSheet("WETMCU", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.8-租户管理系统设备.xlsx", "TMCU租户管理控制模块"));
         funcids.addAll(readSheet("WEPMHT", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.9-客流管理系统设备.xlsx", "PMHT客流管理主机"));
-        funcids.addAll(readSheet("WEPMCU", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.9-客流管理系统设备.xlsx", "PMCU客流管理控制"));
+        funcids.addAll(readSheet("WEPMCU", "/附表8-设备类对象分类属性点表/附表8.2-弱电专业设备/附表8.2.9-客流管理系统设备.xlsx", "PMCU客流管理控制模块"));
         funcids.addAll(readSheet("ACCCCC", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.1-中央供冷系统设备.xlsx", "CCCC离心式冷水机组"));
         funcids.addAll(readSheet("ACCCSC", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.1-中央供冷系统设备.xlsx", "CCSC螺杆式冷水机组"));
         funcids.addAll(readSheet("ACCCPC", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.1-中央供冷系统设备.xlsx", "CCPC活塞式冷水机组"));
@@ -432,7 +598,7 @@ public class ImportFuncid {
         funcids.addAll(readSheet("ACCCWT", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.1-中央供冷系统设备.xlsx", "CCWT供冷水箱"));
         funcids.addAll(readSheet("ACCCOC", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.1-中央供冷系统设备.xlsx", "CCOC供冷在线清洗装置"));
         funcids.addAll(readSheet("ACCCTC", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.1-中央供冷系统设备.xlsx", "CCTC供冷伴热电缆"));
-        funcids.addAll(readSheet("ACCCCU", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.1-中央供冷系统设备.xlsx", "CCCU供冷控制"));
+        funcids.addAll(readSheet("ACCCCU", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.1-中央供冷系统设备.xlsx", "CCCU供冷控制模块"));
         funcids.addAll(readSheet("ACCHCB", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.2-中央供热系统设备.xlsx", "CHCB供热燃煤锅炉"));
         funcids.addAll(readSheet("ACCHFB", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.2-中央供热系统设备.xlsx", "CHFB供热燃油锅炉"));
         funcids.addAll(readSheet("ACCHGB", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.2-中央供热系统设备.xlsx", "CHGB供热燃气锅炉"));
@@ -452,7 +618,7 @@ public class ImportFuncid {
         funcids.addAll(readSheet("ACCHWT", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.2-中央供热系统设备.xlsx", "CHWT供热水箱"));
         funcids.addAll(readSheet("ACCHOC", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.2-中央供热系统设备.xlsx", "CHOC供热在线清洗装置"));
         funcids.addAll(readSheet("ACCHBF", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.2-中央供热系统设备.xlsx", "CHBF生物质炊暖炉"));
-        funcids.addAll(readSheet("ACCHCU", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.2-中央供热系统设备.xlsx", "CHCU供热控制"));
+        funcids.addAll(readSheet("ACCHCU", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.2-中央供热系统设备.xlsx", "CHCU供热控制模块"));
         funcids.addAll(readSheet("ACATAH", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.3-空调末端系统设备.xlsx", "ATAH空调机组"));
         funcids.addAll(readSheet("ACATFU", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.3-空调末端系统设备.xlsx", "ATFU新风机组"));
         funcids.addAll(readSheet("ACATFC", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.3-空调末端系统设备.xlsx", "ATFC风机盘管"));
@@ -472,7 +638,8 @@ public class ImportFuncid {
         funcids.addAll(readSheet("ACATMF", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.3-空调末端系统设备.xlsx", "ATMF空调消声器"));
         funcids.addAll(readSheet("ACATPC", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.3-空调末端系统设备.xlsx", "ATPC空调静压箱"));
         funcids.addAll(readSheet("ACATCA", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.3-空调末端系统设备.xlsx", "ATCA定风量箱"));
-        funcids.addAll(readSheet("ACATCU", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.3-空调末端系统设备.xlsx", "ATCU空调末端控制箱"));
+        funcids.addAll(readSheet("ACATCP", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.3-空调末端系统设备.xlsx", "ATCP空调末端控制面板"));
+        funcids.addAll(readSheet("ACATCU", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.3-空调末端系统设备.xlsx", "ATCU空调末端控制模块"));
         funcids.addAll(readSheet("ACVTSF", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.4-通风系统设备.xlsx", "VTSF通风风机"));
         funcids.addAll(readSheet("ACVTAC", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.4-通风系统设备.xlsx", "VTAC热风幕"));
         funcids.addAll(readSheet("ACVTAP", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.4-通风系统设备.xlsx", "VTAP空气净化器"));
@@ -480,15 +647,15 @@ public class ImportFuncid {
         funcids.addAll(readSheet("ACVTIO", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.4-通风系统设备.xlsx", "VTIO通风风口"));
         funcids.addAll(readSheet("ACVTMF", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.4-通风系统设备.xlsx", "VTMF通风消声器"));
         funcids.addAll(readSheet("ACVTPC", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.4-通风系统设备.xlsx", "VTPC通风静压箱"));
-        funcids.addAll(readSheet("ACVTCU", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.4-通风系统设备.xlsx", "VTCU通风控制"));
+        funcids.addAll(readSheet("ACVTCU", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.4-通风系统设备.xlsx", "VTCU通风控制模块"));
         funcids.addAll(readSheet("ACVTCP", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.4-通风系统设备.xlsx", "VTCP通风控制面板"));
         funcids.addAll(readSheet("ACKLSF", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.5-厨房排油烟系统设备.xlsx", "KLSF厨房排油烟风机"));
         funcids.addAll(readSheet("ACKLAP", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.5-厨房排油烟系统设备.xlsx", "KLAP厨房油烟净化器"));
-        funcids.addAll(readSheet("ACKLCU", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.5-厨房排油烟系统设备.xlsx", "KLCU厨房排油烟控制"));
+        funcids.addAll(readSheet("ACKLCU", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.5-厨房排油烟系统设备.xlsx", "KLCU厨房排油烟控制模块"));
         funcids.addAll(readSheet("ACKLIO", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.5-厨房排油烟系统设备.xlsx", "KLIO厨房排油烟风口"));
         funcids.addAll(readSheet("ACADSF", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.6-空调人防系统设备.xlsx", "ADSF空调人防风机"));
         funcids.addAll(readSheet("ACADFD", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.6-空调人防系统设备.xlsx", "ADFD滤毒除湿机"));
-        funcids.addAll(readSheet("ACADCU", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.6-空调人防系统设备.xlsx", "ADCU空调人防控制"));
+        funcids.addAll(readSheet("ACADCU", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.6-空调人防系统设备.xlsx", "ADCU空调人防控制模块"));
         funcids.addAll(readSheet("ACADIO", "/附表8-设备类对象分类属性点表/附表8.3-空调专业设备/附表8.3.6-空调人防系统设备.xlsx", "ADIO空调人防风口"));
         funcids.addAll(readSheet("WSDWSU", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.1-生活给水系统设备.xlsx", "DWSU生活给水供水机组"));
         funcids.addAll(readSheet("WSDWTS", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.1-生活给水系统设备.xlsx", "DWTS生活给水水箱消毒器"));
@@ -496,12 +663,12 @@ public class ImportFuncid {
         funcids.addAll(readSheet("WSDWWT", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.1-生活给水系统设备.xlsx", "DWWT生活给水储水箱"));
         funcids.addAll(readSheet("WSDWPT", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.1-生活给水系统设备.xlsx", "DWPT生活给水压力罐"));
         funcids.addAll(readSheet("WSDWPP", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.1-生活给水系统设备.xlsx", "DWPP生活给水水泵"));
-        funcids.addAll(readSheet("WSDWCU", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.1-生活给水系统设备.xlsx", "DWCU生活给水控制"));
+        funcids.addAll(readSheet("WSDWCU", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.1-生活给水系统设备.xlsx", "DWCU生活给水控制模块"));
         funcids.addAll(readSheet("WSWHTC", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.10-给排水电伴热系统设备.xlsx", "WHTC给排水伴热电缆"));
         funcids.addAll(readSheet("WSWHIB", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.10-给排水电伴热系统设备.xlsx", "WHIB给排水伴热保温器"));
-        funcids.addAll(readSheet("WSWHCU", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.10-给排水电伴热系统设备.xlsx", "WHCU给排水伴热控制"));
+        funcids.addAll(readSheet("WSWHCU", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.10-给排水电伴热系统设备.xlsx", "WHCU给排水伴热控制模块"));
         funcids.addAll(readSheet("WSWDWT", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.11-给排水人防系统设备.xlsx", "WDWT给排水人防储水箱"));
-        funcids.addAll(readSheet("WSWDCU", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.11-给排水人防系统设备.xlsx", "WDCU给排水人防控制"));
+        funcids.addAll(readSheet("WSWDCU", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.11-给排水人防系统设备.xlsx", "WDCU给排水人防控制模块"));
         funcids.addAll(readSheet("WSDHCB", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.2-生活热水系统设备.xlsx", "DHCB生活热水燃煤锅炉"));
         funcids.addAll(readSheet("WSDHFB", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.2-生活热水系统设备.xlsx", "DHFB生活热水燃油锅炉"));
         funcids.addAll(readSheet("WSDHGB", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.2-生活热水系统设备.xlsx", "DHGB生活热水燃气锅炉"));
@@ -519,7 +686,7 @@ public class ImportFuncid {
         funcids.addAll(readSheet("WSDHPT", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.2-生活热水系统设备.xlsx", "DHPT生活热水压力罐"));
         funcids.addAll(readSheet("WSDHST", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.2-生活热水系统设备.xlsx", "DHST生活热水蓄冷热槽"));
         funcids.addAll(readSheet("WSDHWT", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.2-生活热水系统设备.xlsx", "DHWT生活热水储水箱"));
-        funcids.addAll(readSheet("WSDHCU", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.2-生活热水系统设备.xlsx", "DHCU生活热水控制"));
+        funcids.addAll(readSheet("WSDHCU", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.2-生活热水系统设备.xlsx", "DHCU生活热水控制模块"));
         funcids.addAll(readSheet("WSRWSU", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.3-中水系统设备.xlsx", "RWSU中水供水机组"));
         funcids.addAll(readSheet("WSRWTU", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.3-中水系统设备.xlsx", "RWTU中水处理机组"));
         funcids.addAll(readSheet("WSRWWT", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.3-中水系统设备.xlsx", "RWWT中水储水箱"));
@@ -528,10 +695,10 @@ public class ImportFuncid {
         funcids.addAll(readSheet("WSRWPP", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.3-中水系统设备.xlsx", "RWPP中水供水水泵"));
         funcids.addAll(readSheet("WSRWCD", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.3-中水系统设备.xlsx", "RWCD中水水加药装置"));
         funcids.addAll(readSheet("WSLAFT", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.3-中水系统设备.xlsx", "LAFT中水过滤器"));
-        funcids.addAll(readSheet("WSRWCU", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.3-中水系统设备.xlsx", "RWCU中水控制"));
+        funcids.addAll(readSheet("WSRWCU", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.3-中水系统设备.xlsx", "RWCU中水控制模块"));
         funcids.addAll(readSheet("WSDDTU", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.4-直饮水系统设备.xlsx", "DDTU直饮水处理机组"));
         funcids.addAll(readSheet("WSDDIH", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.4-直饮水系统设备.xlsx", "DDIH直饮水即时加热器"));
-        funcids.addAll(readSheet("WSDDCU", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.4-直饮水系统设备.xlsx", "DDCU直饮水控制"));
+        funcids.addAll(readSheet("WSDDCU", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.4-直饮水系统设备.xlsx", "DDCU直饮水控制模块"));
         funcids.addAll(readSheet("WSSTLU", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.5-污水处理系统设备.xlsx", "STLU污废水一体式提升机组"));
         funcids.addAll(readSheet("WSSTSP", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.5-污水处理系统设备.xlsx", "STSP潜污泵"));
         funcids.addAll(readSheet("WSSTOR", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.5-污水处理系统设备.xlsx", "STOR餐饮除油成套设备"));
@@ -539,13 +706,13 @@ public class ImportFuncid {
         funcids.addAll(readSheet("WSSTCP", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.5-污水处理系统设备.xlsx", "STCP集水坑"));
         funcids.addAll(readSheet("WSSTOS", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.5-污水处理系统设备.xlsx", "STOS隔油池"));
         funcids.addAll(readSheet("WSSTQM", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.5-污水处理系统设备.xlsx", "STQM污水水质监测仪"));
-        funcids.addAll(readSheet("WSSTCU", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.5-污水处理系统设备.xlsx", "STCU污水控制"));
+        funcids.addAll(readSheet("WSSTCU", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.5-污水处理系统设备.xlsx", "STCU污水控制模块"));
         funcids.addAll(readSheet("WSSISU", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.6-喷灌系统设备.xlsx", "SISU喷灌机组"));
         funcids.addAll(readSheet("WSSISN", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.6-喷灌系统设备.xlsx", "SISN喷灌喷头"));
-        funcids.addAll(readSheet("WSSICU", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.6-喷灌系统设备.xlsx", "SICU喷灌控制"));
+        funcids.addAll(readSheet("WSSICU", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.6-喷灌系统设备.xlsx", "SICU喷灌控制模块"));
         funcids.addAll(readSheet("WSWSCF", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.7-水景系统设备.xlsx", "WSCF水景循环过滤机组"));
         funcids.addAll(readSheet("WSWSSN", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.7-水景系统设备.xlsx", "WSSN水景喷头"));
-        funcids.addAll(readSheet("WSWSCU", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.7-水景系统设备.xlsx", "WSCU水景控制"));
+        funcids.addAll(readSheet("WSWSCU", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.7-水景系统设备.xlsx", "WSCU水景控制模块"));
         funcids.addAll(readSheet("WSWSLT", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.7-水景系统设备.xlsx", "WSLT水景灯具"));
         funcids.addAll(readSheet("WSWSPP", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.7-水景系统设备.xlsx", "WSPP水景水泵"));
         funcids.addAll(readSheet("WSWPCF", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.8-泳池系统设备.xlsx", "WPCF泳池循环过滤机组"));
@@ -556,7 +723,7 @@ public class ImportFuncid {
         funcids.addAll(readSheet("WSWPPB", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.8-泳池系统设备.xlsx", "WPPB泳池PH值平衡投药泵"));
         funcids.addAll(readSheet("WSWPOP", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.8-泳池系统设备.xlsx", "WPOP泳池氧消毒剂投药泵"));
         funcids.addAll(readSheet("WSWPWT", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.8-泳池系统设备.xlsx", "WPWT泳池水箱"));
-        funcids.addAll(readSheet("WSWPCU", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.8-泳池系统设备.xlsx", "WPCU泳池控制"));
+        funcids.addAll(readSheet("WSWPCU", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.8-泳池系统设备.xlsx", "WPCU泳池控制模块"));
         funcids.addAll(readSheet("WSFGPA", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.9-燃气系统设备.xlsx", "FGPA燃气调压箱"));
         funcids.addAll(readSheet("WSFGLP", "/附表8-设备类对象分类属性点表/附表8.4-给排水专业设备/附表8.4.9-燃气系统设备.xlsx", "FGLP液化石油气瓶"));
         funcids.addAll(readSheet("FFFAHT", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.1-火灾报警系统设备.xlsx", "FAHT火灾报警主机"));
@@ -567,24 +734,24 @@ public class ImportFuncid {
         funcids.addAll(readSheet("FFFAMA", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.1-火灾报警系统设备.xlsx", "FAMA消防手动报警按钮"));
         funcids.addAll(readSheet("FFFAHA", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.1-火灾报警系统设备.xlsx", "FAHA消火栓报警按钮"));
         funcids.addAll(readSheet("FFFATL", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.1-火灾报警系统设备.xlsx", "FATL消防电话"));
-        funcids.addAll(readSheet("FFFACU", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.1-火灾报警系统设备.xlsx", "FACU火灾报警控制"));
+        funcids.addAll(readSheet("FFFACU", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.1-火灾报警系统设备.xlsx", "FACU火灾报警控制模块"));
         funcids.addAll(readSheet("FFEEHT", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.10-应急照明及疏散指示系统设备.xlsx", "EEHT应急照明及疏散指示主机"));
-        funcids.addAll(readSheet("FFEECU", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.10-应急照明及疏散指示系统设备.xlsx", "EECU应急照明及疏散指示控制"));
+        funcids.addAll(readSheet("FFEECU", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.10-应急照明及疏散指示系统设备.xlsx", "EECU应急照明及疏散指示控制模块"));
         funcids.addAll(readSheet("FFEEEL", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.10-应急照明及疏散指示系统设备.xlsx", "EEEL应急照明灯具"));
         funcids.addAll(readSheet("FFEEEI", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.10-应急照明及疏散指示系统设备.xlsx", "EEEI疏散指示灯牌"));
-        funcids.addAll(readSheet("FFKECU", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.11-厨房自动灭火系统设备.xlsx", "KECU厨房自动灭火控制"));
+        funcids.addAll(readSheet("FFKECU", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.11-厨房自动灭火系统设备.xlsx", "KECU厨房自动灭火控制模块"));
         funcids.addAll(readSheet("FFKEEC", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.11-厨房自动灭火系统设备.xlsx", "KEEC厨房自动灭火灭火剂容器"));
         funcids.addAll(readSheet("FFKESN", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.11-厨房自动灭火系统设备.xlsx", "KESN厨房自动灭火喷头"));
         funcids.addAll(readSheet("FFGAHT", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.2-燃气报警系统设备.xlsx", "GAHT燃气报警主机"));
         funcids.addAll(readSheet("FFGASE", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.2-燃气报警系统设备.xlsx", "GASE燃气探测器"));
         funcids.addAll(readSheet("FFGACV", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.2-燃气报警系统设备.xlsx", "GACV燃气切断阀"));
-        funcids.addAll(readSheet("FFGACU", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.2-燃气报警系统设备.xlsx", "GACU燃气报警控制"));
+        funcids.addAll(readSheet("FFGACU", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.2-燃气报警系统设备.xlsx", "GACU燃气报警控制模块"));
         funcids.addAll(readSheet("FFEAHT", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.3-漏电火灾报警系统设备.xlsx", "EAHT漏电火灾报警主机"));
         funcids.addAll(readSheet("FFEALS", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.3-漏电火灾报警系统设备.xlsx", "EALS漏电探测器"));
-        funcids.addAll(readSheet("FFEACU", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.3-漏电火灾报警系统设备.xlsx", "EACU漏电火灾报警控制"));
+        funcids.addAll(readSheet("FFEACU", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.3-漏电火灾报警系统设备.xlsx", "EACU漏电火灾报警控制模块"));
         funcids.addAll(readSheet("FFBMFE", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.4-紧急广播及背景音乐系统设备.xlsx", "BMFE广播前端设备"));
         funcids.addAll(readSheet("FFBMHT", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.4-紧急广播及背景音乐系统设备.xlsx", "BMHT广播主机"));
-        funcids.addAll(readSheet("FFBMCU", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.4-紧急广播及背景音乐系统设备.xlsx", "BMCU广播分区控制"));
+        funcids.addAll(readSheet("FFBMCU", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.4-紧急广播及背景音乐系统设备.xlsx", "BMCU广播分区控制模块"));
         funcids.addAll(readSheet("FFBMDS", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.4-紧急广播及背景音乐系统设备.xlsx", "BMDS广播显示屏"));
         funcids.addAll(readSheet("FFBMMP", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.4-紧急广播及背景音乐系统设备.xlsx", "BMMP广播话筒"));
         funcids.addAll(readSheet("FFBMSP", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.4-紧急广播及背景音乐系统设备.xlsx", "BMSP广播扬声器"));
@@ -597,6 +764,7 @@ public class ImportFuncid {
         funcids.addAll(readSheet("FFFSIP", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.5-消防给水系统设备.xlsx", "FSIP加密喷淋泵"));
         funcids.addAll(readSheet("FFFSWP", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.5-消防给水系统设备.xlsx", "FSWP水炮泵"));
         funcids.addAll(readSheet("FFFSPM", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.5-消防给水系统设备.xlsx", "FSPM消防稳压泵"));
+        funcids.addAll(readSheet("FFFSWC", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.5-消防给水系统设备.xlsx", "FSWC消防水幕泵"));
         funcids.addAll(readSheet("FFFSWM", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.5-消防给水系统设备.xlsx", "FSWM消防水炮设备"));
         funcids.addAll(readSheet("FFFSCF", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.5-消防给水系统设备.xlsx", "FSCF消防给水定压补水装置"));
         funcids.addAll(readSheet("FFFSPT", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.5-消防给水系统设备.xlsx", "FSPT消防给水压力罐"));
@@ -616,36 +784,36 @@ public class ImportFuncid {
         funcids.addAll(readSheet("FFFSSN", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.5-消防给水系统设备.xlsx", "FSSN消防喷头"));
         funcids.addAll(readSheet("FFFSCP", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.5-消防给水系统设备.xlsx", "FSCP消火栓控制面板"));
         funcids.addAll(readSheet("FFFSHT", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.5-消防给水系统设备.xlsx", "FSHT消防给水主机"));
-        funcids.addAll(readSheet("FFFSCU", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.5-消防给水系统设备.xlsx", "FSCU消防给水控制"));
+        funcids.addAll(readSheet("FFFSCU", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.5-消防给水系统设备.xlsx", "FSCU消防给水控制模块"));
         funcids.addAll(readSheet("FFGEBG", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.6-气体灭火系统设备.xlsx", "GEBG气体灭火瓶组"));
         funcids.addAll(readSheet("FFGESB", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.6-气体灭火系统设备.xlsx", "GESB气体灭火启动瓶"));
         funcids.addAll(readSheet("FFGEHT", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.6-气体灭火系统设备.xlsx", "GEHT气体灭火主机"));
-        funcids.addAll(readSheet("FFGECU", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.6-气体灭火系统设备.xlsx", "GECU气体灭火控制"));
+        funcids.addAll(readSheet("FFGECU", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.6-气体灭火系统设备.xlsx", "GECU气体灭火控制模块"));
         funcids.addAll(readSheet("FFGESN", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.6-气体灭火系统设备.xlsx", "GESN气体灭火喷头"));
         funcids.addAll(readSheet("FFFEFE", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.7-灭火器系统设备.xlsx", "FEFE灭火器"));
         funcids.addAll(readSheet("FFSCEF", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.8-防排烟系统设备.xlsx", "SCEF防排烟风机"));
         funcids.addAll(readSheet("FFSCIO", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.8-防排烟系统设备.xlsx", "SCIO排烟风口"));
         funcids.addAll(readSheet("FFSCHW", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.8-防排烟系统设备.xlsx", "SCHW电动挡烟垂壁"));
         funcids.addAll(readSheet("FFSCSD", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.8-防排烟系统设备.xlsx", "SCSD防火排烟阀"));
-        funcids.addAll(readSheet("FFSCCU", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.8-防排烟系统设备.xlsx", "SCCU防排烟控制"));
+        funcids.addAll(readSheet("FFSCCU", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.8-防排烟系统设备.xlsx", "SCCU防排烟控制模块"));
         funcids.addAll(readSheet("FFFRFR", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.9-防火卷帘门系统设备.xlsx", "FRFR防火卷帘门"));
         funcids.addAll(readSheet("FFFRFD", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.9-防火卷帘门系统设备.xlsx", "FRFD防火门"));
         funcids.addAll(readSheet("FFFRHT", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.9-防火卷帘门系统设备.xlsx", "FRHT防火卷帘门主机"));
         funcids.addAll(readSheet("FFFRCP", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.9-防火卷帘门系统设备.xlsx", "FRCP防火卷帘门控制面板"));
-        funcids.addAll(readSheet("FFFRCU", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.9-防火卷帘门系统设备.xlsx", "FRCU防火卷帘门控制"));
+        funcids.addAll(readSheet("FFFRCU", "/附表8-设备类对象分类属性点表/附表8.5-消防专业设备/附表8.5.9-防火卷帘门系统设备.xlsx", "FRCU防火卷帘门控制模块"));
         funcids.addAll(readSheet("SPVSHT", "/附表8-设备类对象分类属性点表/附表8.6-安防专业设备/附表8.6.1-视频监控系统设备.xlsx", "VSHT监控主机"));
         funcids.addAll(readSheet("SPVSCM", "/附表8-设备类对象分类属性点表/附表8.6-安防专业设备/附表8.6.1-视频监控系统设备.xlsx", "VSCM监控摄像头"));
         funcids.addAll(readSheet("SPVSFE", "/附表8-设备类对象分类属性点表/附表8.6-安防专业设备/附表8.6.1-视频监控系统设备.xlsx", "VSFE监控前端设备"));
         funcids.addAll(readSheet("SPVSVM", "/附表8-设备类对象分类属性点表/附表8.6-安防专业设备/附表8.6.1-视频监控系统设备.xlsx", "VSVM监视器"));
         funcids.addAll(readSheet("SPVSDR", "/附表8-设备类对象分类属性点表/附表8.6-安防专业设备/附表8.6.1-视频监控系统设备.xlsx", "VSDR硬盘录像机"));
         funcids.addAll(readSheet("SPVSCP", "/附表8-设备类对象分类属性点表/附表8.6-安防专业设备/附表8.6.1-视频监控系统设备.xlsx", "VSCP监控控制面板"));
-        funcids.addAll(readSheet("SPVSCU", "/附表8-设备类对象分类属性点表/附表8.6-安防专业设备/附表8.6.1-视频监控系统设备.xlsx", "VSCU监控控制"));
+        funcids.addAll(readSheet("SPVSCU", "/附表8-设备类对象分类属性点表/附表8.6-安防专业设备/附表8.6.1-视频监控系统设备.xlsx", "VSCU监控控制模块"));
         funcids.addAll(readSheet("SPNPHT", "/附表8-设备类对象分类属性点表/附表8.6-安防专业设备/附表8.6.2-巡更系统设备.xlsx", "NPHT巡更主机"));
-        funcids.addAll(readSheet("SPNPCU", "/附表8-设备类对象分类属性点表/附表8.6-安防专业设备/附表8.6.2-巡更系统设备.xlsx", "NPCU巡更控制"));
+        funcids.addAll(readSheet("SPNPCU", "/附表8-设备类对象分类属性点表/附表8.6-安防专业设备/附表8.6.2-巡更系统设备.xlsx", "NPCU巡更控制模块"));
         funcids.addAll(readSheet("SPNPCP", "/附表8-设备类对象分类属性点表/附表8.6-安防专业设备/附表8.6.2-巡更系统设备.xlsx", "NPCP巡更通讯座"));
         funcids.addAll(readSheet("SPNPPS", "/附表8-设备类对象分类属性点表/附表8.6-安防专业设备/附表8.6.2-巡更系统设备.xlsx", "NPPS巡更棒"));
         funcids.addAll(readSheet("SPEGHT", "/附表8-设备类对象分类属性点表/附表8.6-安防专业设备/附表8.6.3-门禁系统设备.xlsx", "EGHT门禁主机"));
-        funcids.addAll(readSheet("SPEGCU", "/附表8-设备类对象分类属性点表/附表8.6-安防专业设备/附表8.6.3-门禁系统设备.xlsx", "EGCU门禁控制"));
+        funcids.addAll(readSheet("SPEGCU", "/附表8-设备类对象分类属性点表/附表8.6-安防专业设备/附表8.6.3-门禁系统设备.xlsx", "EGCU门禁控制模块"));
         funcids.addAll(readSheet("SPEGCR", "/附表8-设备类对象分类属性点表/附表8.6-安防专业设备/附表8.6.3-门禁系统设备.xlsx", "EGCR门禁读卡器"));
         funcids.addAll(readSheet("SPEGWT", "/附表8-设备类对象分类属性点表/附表8.6-安防专业设备/附表8.6.3-门禁系统设备.xlsx", "EGWT门禁对讲机"));
         funcids.addAll(readSheet("SPEGTK", "/附表8-设备类对象分类属性点表/附表8.6-安防专业设备/附表8.6.3-门禁系统设备.xlsx", "EGTK破胎器"));
@@ -654,7 +822,7 @@ public class ImportFuncid {
         funcids.addAll(readSheet("SPEGCP", "/附表8-设备类对象分类属性点表/附表8.6-安防专业设备/附表8.6.3-门禁系统设备.xlsx", "EGCP门禁控制面板"));
         funcids.addAll(readSheet("SPEGFG", "/附表8-设备类对象分类属性点表/附表8.6-安防专业设备/附表8.6.3-门禁系统设备.xlsx", "EGFG速通门"));
         funcids.addAll(readSheet("SPIAHT", "/附表8-设备类对象分类属性点表/附表8.6-安防专业设备/附表8.6.4-入侵报警系统设备.xlsx", "IAHT入侵报警主机"));
-        funcids.addAll(readSheet("SPIACU", "/附表8-设备类对象分类属性点表/附表8.6-安防专业设备/附表8.6.4-入侵报警系统设备.xlsx", "IACU入侵报警控制"));
+        funcids.addAll(readSheet("SPIACU", "/附表8-设备类对象分类属性点表/附表8.6-安防专业设备/附表8.6.4-入侵报警系统设备.xlsx", "IACU入侵报警控制模块"));
         funcids.addAll(readSheet("SPIAMA", "/附表8-设备类对象分类属性点表/附表8.6-安防专业设备/附表8.6.4-入侵报警系统设备.xlsx", "IAMA入侵报警手动报警按钮"));
         funcids.addAll(readSheet("SPIAAL", "/附表8-设备类对象分类属性点表/附表8.6-安防专业设备/附表8.6.4-入侵报警系统设备.xlsx", "IAAL入侵报警声光报警器"));
         funcids.addAll(readSheet("SPIACP", "/附表8-设备类对象分类属性点表/附表8.6-安防专业设备/附表8.6.4-入侵报警系统设备.xlsx", "IACP入侵报警控制面板"));
@@ -706,9 +874,9 @@ public class ImportFuncid {
         funcids.addAll(readSheet("OTLAFI", "/附表8-设备类对象分类属性点表/附表8.8-其他专业设备/附表8.8.3-液体管道及附件设备.xlsx", "LAFI水流指示器"));
         funcids.addAll(readSheet("OTLAFT", "/附表8-设备类对象分类属性点表/附表8.8-其他专业设备/附表8.8.3-液体管道及附件设备.xlsx", "LAFT水管过滤器"));
         funcids.addAll(readSheet("OTAAPL", "/附表8-设备类对象分类属性点表/附表8.8-其他专业设备/附表8.8.4-气体管道及附件设备.xlsx", "AAPL气体管道"));
-        funcids.addAll(readSheet("OTAAFT", "/附表8-设备类对象分类属性点表/附表8.8-其他专业设备/附表8.8.4-气体管道及附件设备.xlsx", "AAFT风道过滤器"));
+        funcids.addAll(readSheet("OTAAFT", "/附表8-设备类对象分类属性点表/附表8.8-其他专业设备/附表8.8.4-气体管道及附件设备.xlsx", "AAFT风道过滤器"));*/
         funcids.addAll(readSheet("OTSECB", "/附表8-设备类对象分类属性点表/附表8.8-其他专业设备/附表8.8.5-传感器设备.xlsx", "SECB组合式传感器"));
-        funcids.addAll(readSheet("OTSETP", "/附表8-设备类对象分类属性点表/附表8.8-其他专业设备/附表8.8.5-传感器设备.xlsx", "SETP温度传感器"));
+        /*funcids.addAll(readSheet("OTSETP", "/附表8-设备类对象分类属性点表/附表8.8-其他专业设备/附表8.8.5-传感器设备.xlsx", "SETP温度传感器"));
         funcids.addAll(readSheet("OTSERH", "/附表8-设备类对象分类属性点表/附表8.8-其他专业设备/附表8.8.5-传感器设备.xlsx", "SERH湿度传感器"));
         funcids.addAll(readSheet("OTSEPS", "/附表8-设备类对象分类属性点表/附表8.8-其他专业设备/附表8.8.5-传感器设备.xlsx", "SEPS压力传感器"));
         funcids.addAll(readSheet("OTSECT", "/附表8-设备类对象分类属性点表/附表8.8-其他专业设备/附表8.8.5-传感器设备.xlsx", "SECT浓度传感器"));
@@ -736,7 +904,7 @@ public class ImportFuncid {
         funcids.addAll(readSheet("OTXXAC", "/附表8-设备类对象分类属性点表/附表8.8-其他专业设备/附表8.8.7-其他设备.xlsx", "XXAC冷风机"));
         funcids.addAll(readSheet("OTXXSC", "/附表8-设备类对象分类属性点表/附表8.8-其他专业设备/附表8.8.7-其他设备.xlsx", "XXSC消毒柜"));
         funcids.addAll(readSheet("OTXXUA", "/附表8-设备类对象分类属性点表/附表8.8-其他专业设备/附表8.8.7-其他设备.xlsx", "XXUA无人机"));
-        funcids.addAll(readSheet("OTXXCR", "/附表8-设备类对象分类属性点表/附表8.8-其他专业设备/附表8.8.7-其他设备.xlsx", "XXCR扫地机器人"));
+        funcids.addAll(readSheet("OTXXCR", "/附表8-设备类对象分类属性点表/附表8.8-其他专业设备/附表8.8.7-其他设备.xlsx", "XXCR扫地机器人"));*/
     }
 
     private void importComponent(List<FuncidDefModel> funcids) throws IOException {
@@ -748,9 +916,9 @@ public class ImportFuncid {
         funcids.addAll(readSheet("ACCCSCMT", "/附表9-部件类对象分类属性点表/附表9.3-空调专业部件.xlsx", "CCSCMT螺杆式冷水机组电机"));
         funcids.addAll(readSheet("ACCCGHBP", "/附表9-部件类对象分类属性点表/附表9.3-空调专业部件.xlsx", "CCGHBP地埋管"));
         funcids.addAll(readSheet("ACCCOTFN", "/附表9-部件类对象分类属性点表/附表9.3-空调专业部件.xlsx", "CCOTFN冷却塔风机"));
-        //funcids.addAll(readSheet("WSSheet1", "/附表9-部件类对象分类属性点表/附表9.4-给排水专业部件.xlsx", "Sheet1"));
-        //funcids.addAll(readSheet("FFSheet1", "/附表9-部件类对象分类属性点表/附表9.5-消防专业部件.xlsx", "Sheet1"));
-        //funcids.addAll(readSheet("SPSheet1", "/附表9-部件类对象分类属性点表/附表9.6-安防专业部件.xlsx", "Sheet1"));
+        /*funcids.addAll(readSheet("WSSheet1", "/附表9-部件类对象分类属性点表/附表9.4-给排水专业部件.xlsx", "Sheet1"));
+        funcids.addAll(readSheet("FFSheet1", "/附表9-部件类对象分类属性点表/附表9.5-消防专业部件.xlsx", "Sheet1"));
+        funcids.addAll(readSheet("SPSheet1", "/附表9-部件类对象分类属性点表/附表9.6-安防专业部件.xlsx", "Sheet1"));*/
         funcids.addAll(readSheet("CFCSFDCS", "/附表9-部件类对象分类属性点表/附表9.7-土建精装专业部件.xlsx", "CSFDCS基础垫层"));
         funcids.addAll(readSheet("CFCSFDWB", "/附表9-部件类对象分类属性点表/附表9.7-土建精装专业部件.xlsx", "CSFDWB基础防水板"));
         funcids.addAll(readSheet("CFCSFDGD", "/附表9-部件类对象分类属性点表/附表9.7-土建精装专业部件.xlsx", "CSFDGD基础梁"));
@@ -773,7 +941,6 @@ public class ImportFuncid {
         funcids.addAll(readSheet("CFBELRPN", "/附表9-部件类对象分类属性点表/附表9.7-土建精装专业部件.xlsx", "BELRPN采光顶嵌板"));
         funcids.addAll(readSheet("CFBELRCP", "/附表9-部件类对象分类属性点表/附表9.7-土建精装专业部件.xlsx", "BELRCP采光顶组件"));
         //funcids.addAll(readSheet("OTSheet1", "/附表9-部件类对象分类属性点表/附表9.8-其他专业部件.xlsx", "Sheet1"));
-//        funcids.addAll(readSheet("OTSheet1", "/附表9-部件类对象分类属性点表/附表9.8-其他专业部件.xlsx", "Sheet1"));
 
     }
 
@@ -858,7 +1025,7 @@ public class ImportFuncid {
             } else {
                 target.secondTag = cache.secondTag;
             }
-            FuncidDefModel funcidDefModel = toFuncidDefModel(target);
+            FuncidDefModel funcidDefModel = toFuncidDefModel(target,classCode,fileName,sheetName);
 
             if (FuncidUtils.isBase(target.origCode)) {
                 continue;

Dosya farkı çok büyük olduğundan ihmal edildi
+ 2092 - 0
dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/datautils/ImportFuncidForRwdEdit.java


+ 13 - 4
dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/dic/ExcelUtils.java

@@ -1,5 +1,6 @@
 package com.persagy.dmp.rwd.dic;
 
+import cn.hutool.core.util.StrUtil;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.CellType;
 import org.apache.poi.ss.usermodel.Sheet;
@@ -9,6 +10,7 @@ import org.junit.Test;
 
 import java.io.File;
 import java.io.FileInputStream;
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -27,14 +29,21 @@ public class ExcelUtils {
         if ("string".equalsIgnoreCase(type)) {
             if (cellType == CellType.STRING) {
                 String val = cell.getStringCellValue();
-                return val == null ? null : val.trim();
+                return val == null ? null : StrUtil.removeAll(val.trim(), StrUtil.C_CR, StrUtil.C_LF, StrUtil.C_TAB);
             } else if (cellType == CellType.NUMERIC) {
-                return cell.getNumericCellValue() + "";
+                String ss = cell.getNumericCellValue() + "";
+                if (ss.matches("^[+-]?[\\d]+([\\.][\\d]+)?([Ee][+-]?[\\d]+)?$")){
+                    ss = new BigDecimal(ss).toPlainString();
+                }
+                if (ss.endsWith(".0")){
+                    return ss.substring(0,ss.length()-2);
+                }
+                return ss;
             }
         } else if ("integer".equalsIgnoreCase(type)) {
             if (cellType == CellType.STRING) {
                 String stringCellValue = cell.getStringCellValue();
-                return stringCellValue == null ? null : Double.valueOf(stringCellValue).intValue();
+                return stringCellValue == null ? null : Double.valueOf(stringCellValue.trim()).intValue();
             } else if (cellType == CellType.NUMERIC) {
                 return Double.valueOf(cell.getNumericCellValue()).intValue();
             }
@@ -58,7 +67,7 @@ public class ExcelUtils {
     }
 
 
-    private String basepath = "C:\\Users\\24341\\Downloads\\数据字典附表(20210412)";
+    private String basepath = "D:\\资料\\工作资料\\原型图\\数据中台\\数据字典数据";
 
     @Test
     public void test1() throws Exception {

+ 264 - 0
dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/dic/ExcelUtilsForEdit.java

@@ -0,0 +1,264 @@
+package com.persagy.dmp.rwd.dic;
+
+import cn.hutool.core.io.FileUtil;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.json.JacksonMapper;
+import com.persagy.dmp.common.http.HttpUtils;
+import com.persagy.dmp.rwd.dic.FuncidUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellType;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @author: yaoll
+ * @date: 2020-11-30
+ * @verison: 1.0
+ */
+@Slf4j
+public class ExcelUtilsForEdit {
+
+    public static Object parseCell(Cell cell, String type) {
+        if (cell == null) {
+            return null;
+        }
+        CellType cellType = cell.getCellTypeEnum();
+        if ("string".equalsIgnoreCase(type)) {
+            if (cellType == CellType.STRING) {
+                String val = cell.getStringCellValue();
+                return val == null ? null : val.trim();
+            } else if (cellType == CellType.NUMERIC) {
+                return cell.getNumericCellValue() + "";
+            }
+        } else if ("integer".equalsIgnoreCase(type)) {
+            if (cellType == CellType.STRING) {
+                String stringCellValue = cell.getStringCellValue();
+                return stringCellValue == null ? null : Double.valueOf(stringCellValue).intValue();
+            } else if (cellType == CellType.NUMERIC) {
+                return Double.valueOf(cell.getNumericCellValue()).intValue();
+            }
+        } else if ("double".equalsIgnoreCase(type)) {
+            if (cellType == CellType.STRING) {
+                String stringCellValue = cell.getStringCellValue();
+                return stringCellValue == null ? null : Double.valueOf(stringCellValue);
+            } else if (cellType == CellType.NUMERIC) {
+                return cell.getNumericCellValue();
+            }
+        } else if ("date".equalsIgnoreCase(type)) {
+            if (cellType == CellType.NUMERIC) {
+                Date dateCellValue = cell.getDateCellValue();
+                return dateCellValue == null ? null : dateCellValue;
+            } else if (cellType == CellType.STRING) {
+                String val = cell.getStringCellValue();
+                return val == null ? null : val.trim();
+            }
+        }
+        return null;
+    }
+
+
+    private String basepath = "D:\\users\\数据字典v3.1.11\\数据字典附表(20210701)";
+
+    @Test
+    public void test1() throws Exception {
+        String path = basepath + "/附表7-系统类对象分类属性点表";
+        showPath(path);
+    }
+
+    public void showPath(String path) throws Exception {
+        Map<String, String> dtType = new HashMap<>();
+        dtType.put("SE", "强电");
+        dtType.put("WE", "弱电");
+        dtType.put("AC", "空调");
+        dtType.put("FF", "消防");
+        dtType.put("SP", "安防");
+        dtType.put("WS", "给排水");
+        dtType.put("CF", "土建");
+        dtType.put("OT", "其他");
+        List<String> names = listFile(path);
+        if (names != null) {
+            for (String name : names) {
+//				System.out.println("----------------------");
+                String fileName = path + "/" + name;
+                FileInputStream inputStream = new FileInputStream(fileName);
+//				System.out.println(fileName);
+                Workbook workbook = new XSSFWorkbook(inputStream);
+                int numberOfSheets = workbook.getNumberOfSheets();
+                for (int i = 0; i < numberOfSheets; i++) {
+                    Sheet sheet = workbook.getSheetAt(i);
+                    String sheetName = sheet.getSheetName();
+                    // funcids.addAll(readSheet("FFFA", "/2.2-设备设施类对象/2.2.3-系统/50-消防专业系统.xlsx", "FA火灾报警系统"));
+                    dtType.entrySet().forEach(item -> {
+                        String key = item.getKey();
+                        String value = item.getValue();
+                        if (name.contains(value)) {
+                            System.out.println("analysisSheetDataAndWriteToFile(\"" + key + sheetName.substring(0, 2) + "\", \"/附表7-系统类对象分类属性点表/" + name + "\", \"" + sheetName + "\",\"2\",systemCommonSeq);");
+                            System.out.println("systemCommonSeq = new AtomicInteger(this.systemCommonSeq.intValue());");
+                        }
+                    });
+                }
+            }
+        }
+    }
+
+    @Test
+    public void test2() throws Exception {
+        showPathForEquipment(basepath, "/附表8-设备类对象分类属性点表/" + "附表8.1-强电专业设备", "SE");
+        showPathForEquipment(basepath, "/附表8-设备类对象分类属性点表/" + "附表8.2-弱电专业设备", "WE");
+        showPathForEquipment(basepath, "/附表8-设备类对象分类属性点表/" + "附表8.3-空调专业设备", "AC");
+        showPathForEquipment(basepath, "/附表8-设备类对象分类属性点表/" + "附表8.4-给排水专业设备", "WS");
+        showPathForEquipment(basepath, "/附表8-设备类对象分类属性点表/" + "附表8.5-消防专业设备", "FF");
+        showPathForEquipment(basepath, "/附表8-设备类对象分类属性点表/" + "附表8.6-安防专业设备", "SP");
+        showPathForEquipment(basepath, "/附表8-设备类对象分类属性点表/" + "附表8.7-土建精装专业设备", "CF");
+        showPathForEquipment(basepath, "/附表8-设备类对象分类属性点表/" + "附表8.8-其他专业设备", "OT");
+    }
+
+    public void showPathForEquipment(String path, String pathName, String key) throws Exception {
+        List<String> names = listFile(path + pathName);
+        if (names != null) {
+            for (String name : names) {
+//				System.out.println("----------------------");
+                String fileName = path + pathName + "/" + name;
+                FileInputStream inputStream = new FileInputStream(fileName);
+//				System.out.println(fileName);
+                Workbook workbook = new XSSFWorkbook(inputStream);
+                int numberOfSheets = workbook.getNumberOfSheets();
+                for (int i = 0; i < numberOfSheets; i++) {
+                    Sheet sheet = workbook.getSheetAt(i);
+                    String sheetName = sheet.getSheetName();
+                    // funcids.addAll(readSheet("FFFA", "/2.2-设备设施类对象/2.2.3-系统/50-消防专业系统.xlsx", "FA火灾报警系统"));
+                    System.out.println("analysisSheetDataAndWriteToFile(\"" + key + sheetName.substring(0, 4) + "\", \"" + pathName + "/" + name + "\", \"" + sheetName + "\",\"2\",equipCommonSeq);");
+                    System.out.println("equipCommonSeq = new AtomicInteger(this.equipCommonSeq.intValue());");
+                }
+            }
+        }
+    }
+
+    @Test
+    public void test3() throws Exception {
+        showPathForComponent(basepath + "/附表9-部件类对象分类属性点表");
+    }
+
+    public void showPathForComponent(String path) throws Exception {
+        Map<String, String> dtType = new HashMap<>();
+        dtType.put("SE", "强电");
+        dtType.put("WE", "弱电");
+        dtType.put("AC", "空调");
+        dtType.put("FF", "消防");
+        dtType.put("SP", "安防");
+        dtType.put("WS", "给排水");
+        dtType.put("CF", "土建");
+        dtType.put("OT", "其他");
+        List<String> names = listFile(path);
+        if (names != null) {
+            for (String name : names) {
+//				System.out.println("----------------------");
+                String fileName = path + "/" + name;
+                FileInputStream inputStream = new FileInputStream(fileName);
+//				System.out.println(fileName);
+                Workbook workbook = new XSSFWorkbook(inputStream);
+                int numberOfSheets = workbook.getNumberOfSheets();
+                for (int i = 0; i < numberOfSheets; i++) {
+                    Sheet sheet = workbook.getSheetAt(i);
+                    String sheetName = sheet.getSheetName();
+                    // funcids.addAll(readSheet("FFFA", "/2.2-设备设施类对象/2.2.3-系统/50-消防专业系统.xlsx", "FA火灾报警系统"));
+                    dtType.entrySet().forEach(item -> {
+                        String key = item.getKey();
+                        String value = item.getValue();
+                        if (name.contains(value)) {
+                            System.out.println("analysisSheetDataAndWriteToFile(\"" + key + sheetName.substring(0, 6) + "\", \"/附表9-部件类对象分类属性点表/" + name + "\", \"" + sheetName + "\",\"2\",componentCommonSeq);");
+                            System.out.println("componentCommonSeq = new AtomicInteger(this.componentCommonSeq.intValue());");
+                        }
+                    });
+                }
+            }
+        }
+    }
+
+    @Test
+    public void test4() throws Exception {
+        showPathForMaterialAndTool(basepath, "/附表11-耗材类对象分类属性点表/" + "附表11.1-五金耗材", "HC");
+        showPathForMaterialAndTool(basepath, "/附表11-耗材类对象分类属性点表/" + "附表11.2-工具耗材", "TC");
+        showPathForMaterialAndTool(basepath, "/附表11-耗材类对象分类属性点表/" + "附表11.3-覆盖材料耗材", "CM");
+        showPathForMaterialAndTool(basepath, "/附表11-耗材类对象分类属性点表/" + "附表11.4-油品及胶粘材料耗材", "OG");
+        showPathForMaterialAndTool(basepath, "/附表11-耗材类对象分类属性点表/" + "附表11.5-管路耗材", "PM");
+        showPathForMaterialAndTool(basepath, "/附表11-耗材类对象分类属性点表/" + "附表11.6-安全耗材", "SC");
+        showPathForMaterialAndTool(basepath, "/附表11-耗材类对象分类属性点表/" + "附表11.7-电器耗材", "EC");
+        showPathForMaterialAndTool(basepath, "/附表11-耗材类对象分类属性点表/" + "附表11.8-办公耗材", "OC");
+        showPathForMaterialAndTool(basepath, "/附表11-耗材类对象分类属性点表/" + "附表11.9-生活耗材", "LC");
+    }
+
+
+    @Test
+    public void test5() throws Exception {
+        showPathForMaterialAndTool(basepath, "/附表12-工具类对象分类属性点表/" + "附表12.1-电动工具", "ET");
+        showPathForMaterialAndTool(basepath, "/附表12-工具类对象分类属性点表/" + "附表12.2-气动工具", "PT");
+        showPathForMaterialAndTool(basepath, "/附表12-工具类对象分类属性点表/" + "附表12.3-手动工具", "HT");
+        showPathForMaterialAndTool(basepath, "/附表12-工具类对象分类属性点表/" + "附表12.4-其他工具", "OT");
+    }
+
+    @Test
+    public void test6() throws Exception {
+        showPathForTool(basepath + "/附表12-工具类对象分类属性点表");
+    }
+
+    public void showPathForMaterialAndTool(String path, String pathName, String key) throws Exception {
+        List<String> names = listFile(path + pathName);
+        if (names != null) {
+            for (String name : names) {
+//				System.out.println("----------------------");
+                String fileName = path + pathName + "/" + name;
+                FileInputStream inputStream = new FileInputStream(fileName);
+//				System.out.println(fileName);
+                Workbook workbook = new XSSFWorkbook(inputStream);
+                int numberOfSheets = workbook.getNumberOfSheets();
+                for (int i = 0; i < numberOfSheets; i++) {
+                    Sheet sheet = workbook.getSheetAt(i);
+                    String sheetName = sheet.getSheetName();
+                    // funcids.addAll(readSheet("FFFA", "/2.2-设备设施类对象/2.2.3-系统/50-消防专业系统.xlsx", "FA火灾报警系统"));
+                    System.out.println("analysisSheetDataAndWriteToFile(\"" + key+"-"+ sheetName + "\", \"" + pathName + "/" + name + "\", \"" + sheetName + "\",\"2\",equipCommonSeq,rwdDefClassMap);");
+                    System.out.println("equipCommonSeq = new AtomicInteger(this.equipCommonSeq.intValue());");
+                }
+            }
+        }
+    }
+
+    public void showPathForTool(String path) throws Exception {
+        List<File> files = listFiles(path);
+        for (File file : files) {
+            String absolutePath = file.getAbsolutePath();
+            System.out.println(absolutePath);
+
+
+        }
+    }
+
+
+    private List<String> listFile(String path) {
+        File file = new File(path);
+        File[] files = file.listFiles();
+        return Arrays.stream(files).map(File::getName).filter(item -> !item.startsWith("~")).collect(Collectors.toList());
+    }
+
+    private List<File> listFiles(String path) {
+        List<File> files = FileUtil.loopFiles(path);
+        return files.stream().filter(file -> !file.getName().startsWith("~")).collect(Collectors.toList());
+    }
+}

+ 2 - 0
dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/dic/FuncidDefModel.java

@@ -36,5 +36,7 @@ public class FuncidDefModel {
 	private String note;
 	private Boolean subFlag;
 	private Boolean weakPoint;
+	private String shareType;
+	private Integer orderSeq;
 
 }

+ 88 - 64
dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/dic/FuncidUtils.java

@@ -24,79 +24,82 @@ import java.util.regex.Pattern;
 @Component
 public class FuncidUtils {
 
-    private final static Set<String> baseFuncid = new HashSet<>();
+    private final static Map<String,String> baseFuncid = new HashMap<>();
 
     public static HttpUtils httpUtils;
 
     public static String rwdeditServer;
 
     static {
-        baseFuncid.add("ProjID");
-        baseFuncid.add("ProjName");
-        baseFuncid.add("ProjLocalID");
-        baseFuncid.add("ProjLocalName");
-        baseFuncid.add("BuildID");
-        baseFuncid.add("BuildName");
-        baseFuncid.add("BuildLocalID");
-        baseFuncid.add("BuildLocalName");
-        baseFuncid.add("FloorID");
-        baseFuncid.add("FloorName");
-        baseFuncid.add("FloorLocalID");
-        baseFuncid.add("FloorLocalName");
-        baseFuncid.add("RoomID");
-        baseFuncid.add("RoomName");
-        baseFuncid.add("RoomLocalID");
-        baseFuncid.add("RoomLocalName");
-        baseFuncid.add("ShaftID");
-        baseFuncid.add("ShaftName");
-        baseFuncid.add("ShaftLocalID");
-        baseFuncid.add("ShaftLocalName");
-        baseFuncid.add("SysID");
-        baseFuncid.add("SysName");
-        baseFuncid.add("SysLocalID");
-        baseFuncid.add("SysLocalName");
-        baseFuncid.add("EquipID");
-        baseFuncid.add("EquipName");
-        baseFuncid.add("EquipLocalID");
-        baseFuncid.add("EquipLocalName");
-        baseFuncid.add("ToolID");
-        baseFuncid.add("ToolName");
-        baseFuncid.add("ToolLocalID");
-        baseFuncid.add("ToolLocalName");
-        baseFuncid.add("ConsumID");
-        baseFuncid.add("ConsumName");
-        baseFuncid.add("ConsumLocalID");
-        baseFuncid.add("ConsumLocalName");
-
-        baseFuncid.add("ECModelID");
-        baseFuncid.add("ECModelName");
-        baseFuncid.add("ECModelLocalID");
-        baseFuncid.add("ECModelLocalName");
-
-        baseFuncid.add("SubentryID");
-        baseFuncid.add("SubentryName");
-        baseFuncid.add("SubentryLocalID");
-        baseFuncid.add("SubentryLocalName");
-
-        baseFuncid.add("BranchID");
-        baseFuncid.add("BranchName");
-        baseFuncid.add("BranchLocalID");
-        baseFuncid.add("BranchLocalName");
-
-        baseFuncid.add("BeaconID");
-        baseFuncid.add("BeaconlName");
-        baseFuncid.add("BeaconLocalID");
-        baseFuncid.add("BeaconLocalName");
-
-        baseFuncid.add("TenantID");
-        baseFuncid.add("TenantName");
-        baseFuncid.add("TenantLocalID");
-        baseFuncid.add("TenantLocalName");
+        baseFuncid.put("ProjID","id");
+        baseFuncid.put("ProjName","name");
+        baseFuncid.put("ProjLocalID","localId");
+        baseFuncid.put("ProjLocalName","localName");
+        baseFuncid.put("BuildID","id");
+        baseFuncid.put("BuildName","name");
+        baseFuncid.put("BuildLocalID","localId");
+        baseFuncid.put("BuildLocalName","localName");
+        baseFuncid.put("FloorID","id");
+        baseFuncid.put("FloorName","name");
+        baseFuncid.put("FloorLocalID","localId");
+        baseFuncid.put("FloorLocalName","localName");
+        baseFuncid.put("RoomID","id");
+        baseFuncid.put("RoomName","name");
+        baseFuncid.put("RoomLocalID","localId");
+        baseFuncid.put("RoomLocalName","localName");
+        baseFuncid.put("ShaftID","id");
+        baseFuncid.put("ShaftName","name");
+        baseFuncid.put("ShaftLocalID","localId");
+        baseFuncid.put("ShaftLocalName","localName");
+        baseFuncid.put("SysID","id");
+        baseFuncid.put("SysName","name");
+        baseFuncid.put("SysLocalID","localId");
+        baseFuncid.put("SysLocalName","localName");
+        baseFuncid.put("EquipID","id");
+        baseFuncid.put("EquipName","name");
+        baseFuncid.put("EquipLocalID","localId");
+        baseFuncid.put("EquipLocalName","localName");
+        baseFuncid.put("ToolID","id");
+        baseFuncid.put("ToolName","name");
+        baseFuncid.put("ToolLocalID","localId");
+        baseFuncid.put("ToolLocalName","localName");
+        baseFuncid.put("ConsumID","id");
+        baseFuncid.put("ConsumName","name");
+        baseFuncid.put("ConsumLocalID","localId");
+        baseFuncid.put("ConsumLocalName","localName");
+
+        baseFuncid.put("ECModelID","id");
+        baseFuncid.put("ECModelName","name");
+        baseFuncid.put("ECModelLocalID","localId");
+        baseFuncid.put("ECModelLocalName","localName");
+
+        baseFuncid.put("SubentryID","id");
+        baseFuncid.put("SubentryName","name");
+        baseFuncid.put("SubentryLocalID","localId");
+        baseFuncid.put("SubentryLocalName","localName");
+
+        baseFuncid.put("BranchID","id");
+        baseFuncid.put("BranchName","name");
+        baseFuncid.put("BranchLocalID","localId");
+        baseFuncid.put("BranchLocalName","localName");
+
+        baseFuncid.put("BeaconID","id");
+        baseFuncid.put("BeaconlName","name");
+        baseFuncid.put("BeaconLocalID","localId");
+        baseFuncid.put("BeaconLocalName","localName");
+
+        baseFuncid.put("TenantID","id");
+        baseFuncid.put("TenantName","name");
+        baseFuncid.put("TenantLocalID","localId");
+        baseFuncid.put("TenantLocalName","localName");
 
     }
 
     public static boolean isBase(String code) {
-        return baseFuncid.contains(code);
+        return baseFuncid.containsKey(code);
+    }
+    public static String getRealCode(String code) {
+        return baseFuncid.get(code);
     }
 
     public static ArrayNode transEnumDataSource(String dataSource) {
@@ -165,7 +168,7 @@ public class FuncidUtils {
             //查询知识库引用
             String url = rwdeditServer + "/rwdedit/ref/type/query";
             JacksonCriteria criteria = JacksonCriteria.newInstance();
-            criteria.add("name", name);
+            criteria.add("aliasName", name);
             HttpUtils.HttpResult response = httpUtils.post(url, JacksonMapper.toSimpleJson(criteria), 300000);
             if (!response.success()) {
                 return null;
@@ -219,6 +222,27 @@ public class FuncidUtils {
                 if (idx == -1) {
                     continue;
                 }
+                /*if (temp.matches("^([0-9]+[.]){2,}[^.]+$")){
+                    // 1) 11.1. 测试 2)11.1.测试
+                    String key = temp.substring(0,temp.lastIndexOf("."));
+                    String value = temp.substring(temp.lastIndexOf(".")+1).trim();
+                    data.put(key, value);
+                    ObjectNode item = array.addObject();
+                    item.put("code", key);
+                    item.put("name", value);
+                    continue;
+                }
+                if (temp.matches("^([0-9]+[.])+[0-9]+[.]?[^.]+$")){
+                    // 1)11.1 测试
+                    String[] temps = temp.split(" ");
+                    String key = temps[0];
+                    String value = temps[1];
+                    data.put(key, value);
+                    ObjectNode item = array.addObject();
+                    item.put("code", key);
+                    item.put("name", value);
+                    continue;
+                }*/
                 String key = temp.substring(0, idx);
                 String value = temp.substring(idx + 1);
                 data.put(key, value);

+ 2 - 2
dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/dic/ImportClass.java

@@ -24,9 +24,9 @@ import java.util.*;
 @Slf4j
 public class ImportClass {
 
-    private String basepath = "C:\\Users\\24341\\Downloads\\数据字典附表(20210503)";
+    private String basepath = "D:\\资料\\工作资料\\原型图\\数据中台\\数据字典数据";
 
-    private String outPath = "C:/Users/24341/Downloads/20210511/class-" + DateUtils.format(new Date()) + ".dml.sql";
+    private String outPath = "D:/资料/工作资料/原型图/数据中台/out/class-" + DateUtils.format(new Date()) + ".dml.sql";
 
     @Test
     public void importClassData() throws Exception {

+ 686 - 0
dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/dic/ImportClassForRwdEdit.java

@@ -0,0 +1,686 @@
+package com.persagy.dmp.rwd.dic;
+
+import com.persagy.common.date.DateUtils;
+import com.persagy.common.json.JacksonMapper;
+import com.persagy.dmp.rwd.enums.ObjType;
+import com.persagy.dmp.rwd.model.ClassDefModel;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.junit.Test;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * 导入类型定义
+ *
+ * @author: yaoll
+ * @date: 2020-11-30
+ * @verison: 1.0
+ */
+@Slf4j
+public class ImportClassForRwdEdit {
+
+    private String basepath = "D:\\users\\数据字典附表(20210715)\\数据字典附表(20210715)";
+
+    private String outPath = "D:/users/20210715/edit/class-" + DateUtils.format(new Date()) + ".dml.sql";
+
+    private final static String VERSION = "v3.1.12";
+
+    @Test
+    public void importClassData() throws Exception {
+
+//        // 所有类型
+        List<ClassDefModel> classes = new ArrayList<>();
+
+        // 顶级类型
+        initBaseClass(classes);
+       // 空间分区
+        initSpace(classes);
+        // 专业\系统\设备\部件
+        initEquipment(classes);
+        // 虚拟对象
+       initVirtual(classes);
+        // 工具
+        initTool(classes);
+        // 耗材
+        initMaterial(classes);
+
+        FileOutputStream fos = new FileOutputStream(outPath);
+        PrintWriter writer = new PrintWriter(new BufferedOutputStream(fos));
+        writer.println("truncate table rwd_def_class;");
+
+        // 基本类型
+        for (ClassDefModel item : classes) {
+            if (item.getParentCode() == null) {
+                writer.println(toSql(item));
+            }
+        }
+
+        //
+        List<String> parentCodes = Arrays.asList("space", "system", "equipment", "component", "virtual", "tool", "material");
+        for (String parentCode : parentCodes) {
+            for (ClassDefModel item : classes) {
+                if (parentCode.equals(item.getParentCode())) {
+                    writer.println(toSql(item));
+                }
+            }
+            writer.flush();
+        }
+
+        // 基本信息点
+        for (ClassDefModel item : classes) {
+            if (item.getObjType() == ObjType.project && item.getParentCode() == null) {
+                writer.println(toFuncidSql(item, "id", "ProjID", "编码"));
+                writer.println(toFuncidSql(item, "name", "ProjName", "名称"));
+                writer.println(toFuncidSql(item, "localId", "ProjLocalID", "本地编码"));
+                writer.println(toFuncidSql(item, "localName", "ProjLocalName", "本地名称"));
+            } else if (item.getObjType() == ObjType.building && item.getParentCode() == null) {
+                writer.println(toFuncidSql(item, "id", "BuildID", "编码"));
+                writer.println(toFuncidSql(item, "name", "BuildName", "名称"));
+                writer.println(toFuncidSql(item, "localId", "BuildLocalID", "本地编码"));
+                writer.println(toFuncidSql(item, "localName", "BuildLocalName", "本地名称"));
+            } else if (item.getObjType() == ObjType.floor && item.getParentCode() == null) {
+                writer.println(toFuncidSql(item, "id", "FloorID", "编码"));
+                writer.println(toFuncidSql(item, "name", "FloorName", "名称"));
+                writer.println(toFuncidSql(item, "localId", "FloorLocalID", "本地编码"));
+                writer.println(toFuncidSql(item, "localName", "FloorLocalName", "本地名称"));
+            } else if (item.getObjType() == ObjType.space && item.getParentCode() == null) {
+                writer.println(toFuncidSql(item, "id", "RoomID", "编码"));
+                writer.println(toFuncidSql(item, "name", "RoomName", "名称"));
+                writer.println(toFuncidSql(item, "localId", "RoomLocalID", "本地编码"));
+                writer.println(toFuncidSql(item, "localName", "RoomLocalName", "本地名称"));
+            } else if (item.getObjType() == ObjType.system && item.getParentCode() == null) {
+                writer.println(toFuncidSql(item, "id", "SysID", "编码"));
+                writer.println(toFuncidSql(item, "name", "SysName", "名称"));
+                writer.println(toFuncidSql(item, "localId", "SysLocalID", "本地编码"));
+                writer.println(toFuncidSql(item, "localName", "SysLocalName", "本地名称"));
+            } else if (item.getObjType() == ObjType.equipment && item.getParentCode() == null) {
+                writer.println(toFuncidSql(item, "id", "EquipID", "编码"));
+                writer.println(toFuncidSql(item, "name", "EquipName", "名称"));
+                writer.println(toFuncidSql(item, "localId", "EquipLocalID", "本地编码"));
+                writer.println(toFuncidSql(item, "localName", "EquipLocalName", "本地名称"));
+            } else if (item.getObjType() == ObjType.component && item.getParentCode() == null) {
+                writer.println(toFuncidSql(item, "id", "EquipID", "编码"));
+                writer.println(toFuncidSql(item, "name", "EquipName", "名称"));
+                writer.println(toFuncidSql(item, "localId", "EquipLocalID", "本地编码"));
+                writer.println(toFuncidSql(item, "localName", "EquipLocalName", "本地名称"));
+            } else if (item.getObjType() == ObjType.shaft && item.getParentCode() == null) {
+                writer.println(toFuncidSql(item, "id", "ShaftID", "编码"));
+                writer.println(toFuncidSql(item, "name", "ShaftName", "名称"));
+                writer.println(toFuncidSql(item, "localId", "ShaftLocalID", "本地编码"));
+                writer.println(toFuncidSql(item, "localName", "ShaftLocalName", "本地名称"));
+            } else if ("VOEm".equals(item.getCode())) {
+                writer.println(toFuncidSql(item, "id", "ECModelID", "编码"));
+                writer.println(toFuncidSql(item, "name", "ECModelName", "名称"));
+                writer.println(toFuncidSql(item, "localId", "ECModelLocalID", "本地编码"));
+                writer.println(toFuncidSql(item, "localName", "ECModelLocalName", "本地名称"));
+            } else if ("VOSe".equals(item.getCode())) {
+                writer.println(toFuncidSql(item, "id", "SubentryID", "编码"));
+                writer.println(toFuncidSql(item, "name", "SubentryName", "名称"));
+                writer.println(toFuncidSql(item, "localId", "SubentryLocalID", "本地编码"));
+                writer.println(toFuncidSql(item, "localName", "SubentryLocalName", "本地名称"));
+            } else if ("VOBr".equals(item.getCode())) {
+                writer.println(toFuncidSql(item, "id", "BranchID", "编码"));
+                writer.println(toFuncidSql(item, "name", "BranchName", "名称"));
+                writer.println(toFuncidSql(item, "localId", "BranchLocalID", "本地编码"));
+                writer.println(toFuncidSql(item, "localName", "BranchLocalName", "本地名称"));
+            } else if ("VOBc".equals(item.getCode())) {
+                writer.println(toFuncidSql(item, "id", "BeaconID", "编码"));
+                writer.println(toFuncidSql(item, "name", "BeaconlName", "名称"));
+                writer.println(toFuncidSql(item, "localId", "BeaconLocalID", "本地编码"));
+                writer.println(toFuncidSql(item, "localName", "BeaconLocalName", "本地名称"));
+            } else if ("VOTn".equals(item.getCode())) {
+                writer.println(toFuncidSql(item, "id", "TenantID", "编码"));
+                writer.println(toFuncidSql(item, "name", "TenantName", "名称"));
+                writer.println(toFuncidSql(item, "localId", "TenantLocalID", "本地编码"));
+                writer.println(toFuncidSql(item, "localName", "TenantLocalName", "本地名称"));
+            } else if (item.getObjType() == ObjType.tool && item.getParentCode() == null) {
+                writer.println(toFuncidSql(item, "id", "ToolID", "编码"));
+                writer.println(toFuncidSql(item, "name", "ToolName", "名称"));
+                writer.println(toFuncidSql(item, "localId", "ToolLocalID", "本地编码"));
+                writer.println(toFuncidSql(item, "localName", "ToolLocalName", "本地名称"));
+            } else if (item.getObjType() == ObjType.material && item.getParentCode() == null) {
+                writer.println(toFuncidSql(item, "id", "ConsumID", "编码"));
+                writer.println(toFuncidSql(item, "name", "ConsumName", "名称"));
+                writer.println(toFuncidSql(item, "localId", "ConsumLocalID", "本地编码"));
+                writer.println(toFuncidSql(item, "localName", "ConsumLocalName", "本地名称"));
+            }
+        }
+
+//		classes.stream().filter(item -> item.getObjType() == ObjType.project).forEach(item -> {
+//			writer.println(toFuncidSql(item, "id", "ProjID", "编码"));
+//			writer.println(toFuncidSql(item, "name", "ProjName", "名称"));
+//			writer.println(toFuncidSql(item, "localId", "ProjLocalID", "本地编码"));
+//			writer.println(toFuncidSql(item, "localName", "ProjLocalName", "本地名称"));
+//		});
+//		classes.stream().filter(item -> item.getObjType().name().equals("building")).forEach(item -> {
+//			writer.println(toFuncidSql(item, "id", "BuildID", "编码"));
+//			writer.println(toFuncidSql(item, "name", "BuildName", "名称"));
+//			writer.println(toFuncidSql(item, "localId", "BuildLocalID", "本地编码"));
+//			writer.println(toFuncidSql(item, "localName", "BuildLocalName", "本地名称"));
+//		});
+
+        writer.close();
+
+        for (ClassDefModel type : classes) {
+            System.out.println(JacksonMapper.toSimpleJson(type));
+        }
+    }
+
+    private String toSql(ClassDefModel model) {
+        StringBuilder sql = new StringBuilder("insert into rwd_def_class( id, code, obj_type, name, alias_code, alias_name, major_code, system_code, equipment_code, parent_code,is_used,version,order_seq) values ");
+        sql.append("(");
+        sql.append("'").append(UUID.randomUUID().toString().replace("-", "")).append("', "); // id
+        sql.append("'").append(model.getCode()).append("', "); // code
+        sql.append("'").append(model.getObjType().name()).append("', "); // obj_type
+        sql.append("'").append(model.getName()).append("', "); // name
+        sql.append("'").append(model.getCode()).append("', "); // alias_code
+        sql.append("'").append(model.getName()).append("', "); // alias_name
+
+        if (model.getMajorCode() != null) { // major_code
+            sql.append("'").append(model.getMajorCode()).append("', ");
+        } else {
+            sql.append("null, ");
+        }
+
+        if (model.getSystemCode() != null) { // system_code
+            sql.append("'").append(model.getSystemCode()).append("', ");
+        } else {
+            sql.append("null, ");
+        }
+
+        if (model.getEquipmentCode() != null) { // equipment_code
+            sql.append("'").append(model.getEquipmentCode()).append("', ");
+        } else {
+            sql.append("null, ");
+        }
+
+        if (model.getParentCode() != null) { // parent_code
+            sql.append("'").append(model.getParentCode()).append("', ");
+        } else {
+            sql.append("null, ");
+        }
+
+        sql.append(1).append(","); // is_used
+        sql.append("'").append(VERSION).append("',");
+
+        if (null!=model.getOrderSeq()){// order_seq
+            sql.append(model.getOrderSeq()).append(",");
+        }else {
+            sql.append("null,");
+        }
+        // 去掉最后的分隔符 ", "
+        sql.deleteCharAt(sql.length() - 1);
+       // sql.deleteCharAt(sql.length() - 1);
+        sql.append(");");
+        return sql.toString();
+    }
+
+    private String toFuncidSql(ClassDefModel model, String code, String origCode, String name) {
+        StringBuilder buff = new StringBuilder("");
+        buff.append("insert into rwd_def_funcid ");
+        buff.append("(id,code,orig_code,name,alias_code,alias_name,class_code,type,group_code,project_id,category,");
+        buff.append("first_tag,second_tag,priority,input_mode,unit,data_type,orig_data_type,is_multiple,is_region,formater,data_source,orig_data_source,note,sub_flag,weak_point) \n");
+        buff.append("values (");
+        buff.append("'").append(UUID.randomUUID().toString().replace("-", "")).append("',"); // id
+        buff.append("'").append(code).append("',"); //code
+        buff.append("'").append(origCode).append("',"); //orig_code
+        buff.append("'").append(name).append("',"); //name
+        buff.append("'").append(origCode).append("',"); //alias_code
+        buff.append("'").append(name).append("',"); //alias_name
+        buff.append("'").append(model.getCode()).append("',"); // class_code
+        buff.append("'common',");// type
+        buff.append("'0',");//
+        buff.append("'0',");//
+        buff.append("'STATIC',");//
+        buff.append("null,");// first_tag
+        buff.append("null,");
+        buff.append("null,");
+        // input_mode
+        if ("id".equals(code) || "name".equals(code)) {
+            buff.append("'X',");
+        } else if ("localId".equals(code) || "localName".equals(code)) {
+            buff.append("'B1',");
+        } else {
+            buff.append("null,");
+        }
+
+        buff.append("null,");
+        buff.append("'STRING',");
+        buff.append("'Str',");
+        buff.append("0,");
+        buff.append("0,");
+        buff.append("null,");// formater
+        buff.append("null,");
+        buff.append("null,");
+        buff.append("null,");
+        buff.append("0,");
+        buff.append("0);");
+        return buff.toString();
+    }
+
+    private void initBaseClass(List<ClassDefModel> classes) {
+        classes.add(prepareModel("project", "project", "项目", null, null, null,1));
+        classes.add(prepareModel("building", "building", "建筑", null, null, null,2));
+        classes.add(prepareModel("floor", "floor", "楼层", null, null, null,3));
+        classes.add(prepareModel("shaft", "shaft", "竖井", null, null, null,4));
+        classes.add(prepareModel("space", "space", "空间", null, null, null,5));
+        classes.add(prepareModel("system", "system", "系统", null, null, null, 6));
+        classes.add(prepareModel("equipment", "equipment", "设备", null, null, null,7));
+        classes.add(prepareModel("component", "component", "部件", null, null, null,8));
+        classes.add(prepareModel("virtual", "virtual", "虚拟对象", null, null, null,9));
+        classes.add(prepareModel("material", "material", "耗材", null, null, null,10));
+        classes.add(prepareModel("tool", "tool", "工具", null, null, null,11));
+    }
+
+    private void initSpace(List<ClassDefModel> classes) {
+        classes.add(prepareModel("space", "GeneralZone", "物业分区", "space", null, null,1));
+        classes.add(prepareModel("space", "PowerSupplyZone", "供电分区", "space", null, null,2));
+        classes.add(prepareModel("space", "LightingZone", "照明分区", "space", null, null,3));
+        classes.add(prepareModel("space", "NetworkZone", "网络分区", "space", null, null,4));
+        classes.add(prepareModel("space", "AirConditioningZone", "空调分区", "space", null, null,5));
+        classes.add(prepareModel("space", "HeatingZone", "采暖分区", "space", null, null,6));
+        classes.add(prepareModel("space", "CleanZone", "洁净分区", "space", null, null,7));
+        classes.add(prepareModel("space", "DomesticWaterSupplyZone", "生活给水分区", "space", null, null,8));
+        classes.add(prepareModel("space", "FireZone", "防火分区", "space", null, null,9));
+        classes.add(prepareModel("space", "SecurityZone", "安防分区", "space", null, null,10));
+        classes.add(prepareModel("space", "TenantZone", "租户分区", "space", null, null,11));
+        classes.add(prepareModel("space", "FunctionZone", "功能分区", "space", null, null,12));
+        classes.add(prepareModel("space", "PassengerFlowZone", "客流分区", "space", null, null,13));
+        classes.add(prepareModel("space", "EvacuateZone", "疏散分区", "space", null, null,14));
+        classes.add(prepareModel("space", "EnvironmentZone", "环境分区", "space", null, null,15));
+        classes.add(prepareModel("space", "OtherZone", "其他分区", "space", null, null,16));
+    }
+
+    private void initEquipment(List<ClassDefModel> classes) throws IOException {
+        String classFile = basepath + "/附表1-机电精装类对象分类体系.xlsx";
+        String sheetName = "系统设备部件类";
+
+        FileInputStream inputStream = new FileInputStream(classFile);
+        Workbook workbook = new XSSFWorkbook(inputStream);
+        Sheet sheet = workbook.getSheet(sheetName);
+        if (sheet == null) {
+            return;
+        }
+
+        // 行号从0开始, 从第2行开始读数据
+        Set<String> systemCodes = new HashSet<>();
+        Set<String> equipmentCodes = new HashSet<>();
+        int startRowNum = 2;
+        int lastRowNum = sheet.getLastRowNum();
+        CacheModel cache = new CacheModel();
+        int systemIndex = 1;
+        int equipmentIndex = 1;
+        int componentIndex = 1;
+        for (int rowIndex = startRowNum; rowIndex <= lastRowNum; rowIndex++) {
+            Row row = sheet.getRow(rowIndex);
+            if (row == null) {
+                log.info("row[{}] is null", rowIndex);
+                continue;
+            }
+
+            // 0专业, 3系统编码, 5系统名称, 6设备编码, 8设备名称
+            CacheModel target = new CacheModel();
+            target.majorCode = (String) ExcelUtils.parseCell(row.getCell(0), "string");// 专业编码
+            target.systemCode = (String) ExcelUtils.parseCell(row.getCell(3), "string");//系统类编码
+            target.systemName = (String) ExcelUtils.parseCell(row.getCell(5), "string");//系统类名称
+            target.equipCode = (String) ExcelUtils.parseCell(row.getCell(6), "string");//设备设施类编码
+            target.equipName = (String) ExcelUtils.parseCell(row.getCell(8), "string");//设备设施类名称
+            target.componentCode = (String) ExcelUtils.parseCell(row.getCell(9), "string");//部件类编码
+            target.componentName = (String) ExcelUtils.parseCell(row.getCell(11), "string");//部件类名称
+//			System.out.println(rowIndex + ": " + target.majorCode + "\t" + target.systemCode + "\t" + target.equipCode + "\t" + target.componentCode);
+
+            // 专业不为空
+            if (target.majorCode != null) {
+                cache.majorCode = target.majorCode;
+                cache.systemCode = null;
+                cache.systemName = null;
+                cache.equipCode = null;
+                cache.equipName = null;
+                cache.componentCode = null;
+                cache.componentName = null;
+            } else {
+                target.majorCode = cache.majorCode;
+            }
+            // 系统不为空
+            if (target.systemCode != null) {
+                cache.systemCode = target.systemCode;
+                cache.systemName = target.systemName;
+                cache.equipCode = null;
+                cache.equipName = null;
+                cache.componentCode = null;
+                cache.componentName = null;
+            } else {
+                target.systemCode = cache.systemCode;
+                target.systemName = cache.systemName;
+            }
+            // 设备不为空
+            if (target.equipCode != null) {
+                cache.equipCode = target.equipCode;
+                cache.equipName = target.equipName;
+                cache.componentCode = null;
+                cache.componentName = null;
+            } else {
+                target.equipCode = cache.equipCode;
+                target.equipName = cache.equipName;
+            }
+            // 部件不为空
+            if (target.componentCode != null) {
+            }
+
+            // 拼装实际的系统编码和设备编码
+            CacheModel object = new CacheModel();
+            object.majorCode = target.majorCode;
+            object.systemCode = target.majorCode + target.systemCode;
+            object.systemName = target.systemName;
+            object.equipCode = target.majorCode + target.equipCode;
+            object.equipName = target.equipName;
+            object.componentCode = target.componentCode;
+            object.componentName = target.componentName;
+
+            // 判断系统是否存在
+            if (!systemCodes.contains(object.systemCode)) {
+                ClassDefModel system = new ClassDefModel();
+                system.setMajorCode(object.majorCode);
+                system.setCode(object.systemCode);
+                system.setName(object.systemName);
+                system.setParentCode("system");
+                system.setObjType(ObjType.system);
+                system.setOrderSeq(systemIndex++);
+                classes.add(system);
+                systemCodes.add(object.systemCode);
+            }
+            // 判断设备是否存在
+            if (!equipmentCodes.contains(object.equipCode)) {
+                ClassDefModel equipment = new ClassDefModel();
+                equipment.setMajorCode(object.majorCode);
+                equipment.setSystemCode(object.systemCode);
+                equipment.setCode(object.equipCode);
+                equipment.setName(object.equipName);
+                equipment.setParentCode("equipment");
+                equipment.setObjType(ObjType.equipment);
+                equipment.setOrderSeq(equipmentIndex++);
+                classes.add(equipment);
+                equipmentCodes.add(object.equipCode);
+            }
+            // 部件不为空
+            if (object.componentCode != null) {
+                ClassDefModel component = new ClassDefModel();
+                component.setMajorCode(object.majorCode);
+                component.setSystemCode(object.systemCode);
+                component.setEquipmentCode(object.equipCode);
+                component.setCode(object.majorCode + object.componentCode);
+                component.setName(object.componentName);
+                component.setParentCode("component");
+                component.setObjType(ObjType.component);
+                component.setOrderSeq(componentIndex++);
+                classes.add(component);
+            }
+        }
+    }
+
+    private void initVirtual(List<ClassDefModel> classes) {
+        classes.add(prepareModel("virtual", "VOEm", "能耗模型", "virtual", null, null,1));
+        classes.add(prepareModel("virtual", "VOSe", "分项", "virtual", null, null,2));
+//        classes.add(prepareModel("virtual", "VOBr", "支路", "virtual", null, null));
+        classes.add(prepareModel("virtual", "VOBc", "信标", "virtual", null, null,3));
+        classes.add(prepareModel("virtual", "VOTn", "租户", "virtual", null, null,4));
+        classes.add(prepareModel("virtual", "VOWs", "工作历", "virtual", null, null,5));
+        classes.add(prepareModel("virtual", "VoBl", "集团", "virtual", null, null,6));
+        //classes.add(prepareModel("virtual", "VOZn", "空间组合", "virtual", null, null,7));
+        //classes.add(prepareModel("virtual", "VOGp", "设备设施组合", "virtual", null, null,8));
+    }
+
+    private void initTool(List<ClassDefModel> classes) throws IOException {
+        String classFile = basepath + "/附表2-耗材工具类对象分类体系.xlsx";
+        String sheetName = "工具类";
+
+        FileInputStream inputStream = new FileInputStream(classFile);
+        Workbook workbook = new XSSFWorkbook(inputStream);
+        Sheet sheet = workbook.getSheet(sheetName);
+        if (sheet == null) {
+            return;
+        }
+
+        Set<String> systemCodes = new HashSet<>();
+        Set<String> equipCodes = new HashSet<>();
+
+        // 行号从0开始, 从第2行开始读数据
+        // 一级分类使用systemCode, 二级分类使用equipCode
+        int startRowNum = 1;
+        int lastRowNum = sheet.getLastRowNum();
+        CacheModel cache = new CacheModel();
+        int systemIndex = 1;
+        int equipmentIndex = 1;
+        int componentIndex = 1;
+        for (int rowIndex = startRowNum; rowIndex <= lastRowNum; rowIndex++) {
+            Row row = sheet.getRow(rowIndex);
+            if (row == null) {
+                log.info("row[{}] is null", rowIndex);
+                continue;
+            }
+            // 0专业, 3系统编码, 5系统名称, 6设备编码, 8设备名称
+            CacheModel target = new CacheModel();
+            target.systemCode = (String) ExcelUtils.parseCell(row.getCell(0), "string");// 一级分类编码
+            target.systemName = (String) ExcelUtils.parseCell(row.getCell(2), "string");//一级分类名称
+            target.equipCode = (String) ExcelUtils.parseCell(row.getCell(3), "string");//二级分类编码
+            target.equipName = (String) ExcelUtils.parseCell(row.getCell(5), "string");//二级分类名称
+            target.componentCode = (String) ExcelUtils.parseCell(row.getCell(6), "string");//工具类编码
+            target.componentName = (String) ExcelUtils.parseCell(row.getCell(8), "string");//工具类名称
+//			System.out.println(rowIndex + ": " + target.majorCode + "\t" + target.systemCode + "\t" + target.equipCode + "\t" + target.componentCode);
+
+            // 一级分类编码
+            if (target.systemCode != null) {
+                cache.systemCode = target.systemCode;
+                cache.systemName = target.systemName;
+                cache.equipCode = null;
+                cache.componentCode = null;
+                cache.componentName = null;
+            } else {
+                target.systemCode = cache.systemCode;
+                target.systemName = cache.systemName;
+            }
+            // 二级分类编码
+            if (target.equipCode != null) {
+                cache.equipCode = target.equipCode;
+                cache.equipName = target.equipName;
+                cache.componentCode = null;
+                cache.componentName = null;
+            } else {
+                target.equipCode = cache.equipCode;
+                target.equipName = cache.equipName;
+            }
+
+            // 拼装实际的系统编码和设备编码
+            CacheModel object = new CacheModel();
+            object.systemCode = target.systemCode;
+            object.systemName = target.systemName;
+            object.equipCode = target.systemCode + target.equipCode;
+            object.equipName = target.equipName;
+            object.componentCode = target.componentCode;
+            object.componentName = target.componentName;
+
+            // 一级标签
+            if (object.systemCode != null && !systemCodes.contains(object.systemCode)) {
+                systemCodes.add(object.systemCode);
+                ClassDefModel component = new ClassDefModel();
+                component.setSystemCode(null);
+                component.setEquipmentCode(null);
+                component.setCode(object.systemCode);
+                component.setName(object.systemName);
+                component.setParentCode("tool");
+                component.setObjType(ObjType.tool);
+                component.setOrderSeq(systemIndex++);
+                classes.add(component);
+            }
+
+            // 二级标签
+            if (target.equipCode != null && !equipCodes.contains(object.equipCode)) {
+                equipCodes.add(object.equipCode);
+                ClassDefModel component = new ClassDefModel();
+                component.setSystemCode(object.systemCode);
+                component.setEquipmentCode(null);
+                component.setCode(object.equipCode);
+                component.setName(object.equipName);
+                component.setParentCode("tool");
+                component.setObjType(ObjType.tool);
+                component.setOrderSeq(equipmentIndex++);
+                classes.add(component);
+            }
+
+            // 工具类编码
+            if (object.componentCode != null) {
+                ClassDefModel component = new ClassDefModel();
+                component.setSystemCode(object.systemCode);
+                component.setEquipmentCode(object.equipCode);
+                component.setCode(object.componentCode);
+                component.setName(object.componentName);
+                component.setParentCode("tool");
+                component.setObjType(ObjType.tool);
+                component.setOrderSeq(componentIndex++);
+                classes.add(component);
+            }
+        }
+    }
+
+    private void initMaterial(List<ClassDefModel> classes) throws IOException {
+        String classFile = basepath + "/附表2-耗材工具类对象分类体系.xlsx";
+        String sheetName = "耗材类 ";
+
+        FileInputStream inputStream = new FileInputStream(classFile);
+        Workbook workbook = new XSSFWorkbook(inputStream);
+        Sheet sheet = workbook.getSheet(sheetName);
+        if (sheet == null) {
+            return;
+        }
+
+        Set<String> systemCodes = new HashSet<>();
+        Set<String> equipCodes = new HashSet<>();
+
+        // 行号从0开始, 从第2行开始读数据
+        // 一级分类使用systemCode, 二级分类使用equipCode
+        int startRowNum = 1;
+        int lastRowNum = sheet.getLastRowNum();
+        CacheModel cache = new CacheModel();
+        int systemIndex = 1;
+        int equipmentIndex = 1;
+        int componentIndex = 1;
+        for (int rowIndex = startRowNum; rowIndex <= lastRowNum; rowIndex++) {
+            Row row = sheet.getRow(rowIndex);
+            if (row == null) {
+                log.info("row[{}] is null", rowIndex);
+                continue;
+            }
+            // 0专业, 3系统编码, 5系统名称, 6设备编码, 8设备名称
+            CacheModel target = new CacheModel();
+            target.systemCode = (String) ExcelUtils.parseCell(row.getCell(0), "string");// 一级分类编码
+            target.systemName = (String) ExcelUtils.parseCell(row.getCell(2), "string");//一级分类名称
+            target.equipCode = (String) ExcelUtils.parseCell(row.getCell(3), "string");//二级分类编码
+            target.equipName = (String) ExcelUtils.parseCell(row.getCell(5), "string");//二级分类名称
+            target.componentCode = (String) ExcelUtils.parseCell(row.getCell(6), "string");//耗材类编码
+            target.componentName = (String) ExcelUtils.parseCell(row.getCell(8), "string");//耗材类名称
+//			System.out.println(rowIndex + ": " + target.majorCode + "\t" + target.systemCode + "\t" + target.equipCode + "\t" + target.componentCode);
+
+            // 一级分类编码
+            if (target.systemCode != null) {
+                cache.systemCode = target.systemCode;
+                cache.systemName = target.systemName;
+                cache.equipCode = null;
+                cache.componentCode = null;
+                cache.componentName = null;
+            } else {
+                target.systemCode = cache.systemCode;
+                target.systemName = cache.systemName;
+            }
+            // 二级分类编码
+            if (target.equipCode != null) {
+                cache.equipCode = target.equipCode;
+                cache.equipName = target.equipName;
+                cache.componentCode = null;
+                cache.componentName = null;
+            } else {
+                target.equipCode = cache.equipCode;
+                target.equipName = cache.equipName;
+            }
+
+            // 拼装实际的系统编码和设备编码
+            CacheModel object = new CacheModel();
+            object.systemCode = target.systemCode;
+            object.systemName = target.systemName;
+            object.equipCode = target.systemCode + target.equipCode;
+            object.equipName = target.equipName;
+            object.componentCode = target.componentCode;
+            object.componentName = target.componentName;
+
+            // 一级标签
+            if (object.systemCode != null && !systemCodes.contains(object.systemCode)) {
+                systemCodes.add(object.systemCode);
+                ClassDefModel component = new ClassDefModel();
+                component.setSystemCode(null);
+                component.setEquipmentCode(null);
+                component.setCode(object.systemCode);
+                component.setName(object.systemName);
+                component.setParentCode("material");
+                component.setObjType(ObjType.material);
+                component.setOrderSeq(systemIndex++);
+                classes.add(component);
+            }
+
+            // 二级标签
+            if (target.equipCode != null && !equipCodes.contains(object.equipCode)) {
+                equipCodes.add(object.equipCode);
+                ClassDefModel component = new ClassDefModel();
+                component.setSystemCode(object.systemCode);
+                component.setEquipmentCode(null);
+                component.setCode(object.equipCode);
+                component.setName(object.equipName);
+                component.setParentCode("material");
+                component.setObjType(ObjType.material);
+                component.setOrderSeq(equipmentIndex++);
+                classes.add(component);
+            }
+
+            // 耗材类编码
+            if (object.componentCode != null) {
+                ClassDefModel component = new ClassDefModel();
+                component.setSystemCode(object.systemCode);
+                component.setEquipmentCode(object.equipCode);
+                component.setCode(object.componentCode);
+                component.setName(object.componentName);
+                component.setParentCode("material");
+                component.setObjType(ObjType.material);
+                component.setOrderSeq(componentIndex++);
+                classes.add(component);
+            }
+        }
+    }
+
+    public static final class CacheModel {
+        String majorCode;
+        String systemCode;
+        String systemName;
+        String equipCode;
+        String equipName;
+        String componentCode;
+        String componentName;
+    }
+
+    private ClassDefModel prepareModel(String objType, String code, String name, String parentCode, String majorCode, String systemCode,int orderSeq) {
+        ClassDefModel model = new ClassDefModel();
+        model.setObjType(ObjType.valueOf(objType));
+        model.setCode(code);
+        model.setName(name);
+        model.setAliasCode(code);
+        model.setAliasName(name);
+        model.setParentCode(parentCode);
+        model.setMajorCode(majorCode);
+        model.setSystemCode(systemCode);
+        model.setOrderSeq(orderSeq);
+        return model;
+    }
+
+}

Dosya farkı çok büyük olduğundan ihmal edildi
+ 3159 - 0
dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/dic/ImportKnowledgeForEdit.java


+ 5 - 5
dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/knowladge/Test1.java

@@ -24,7 +24,7 @@ import java.util.Set;
 @Slf4j
 public class Test1 {
 
-	private String basepath = "/Users/devsaga/persagy/数据字典20201118/Ch4-专家知识库";
+	private String basepath = "D:/资料/工作资料/原型图/数据中台/数据字典数据";
 
 	@Data
 	public static class Item {
@@ -41,8 +41,8 @@ public class Test1 {
 
 	@Test
 	public void test1() throws Exception {
-		String file = basepath + "/4.2-行业推荐模型/4.2.1-推荐空间业态分类.xlsx";
-		String sheetname = "3空间功能类型";
+		String file = basepath + "/附表17-推荐空间业态分类表.xlsx";
+		String sheetname = "空间功能类型";
 
 		FileInputStream inputStream = new FileInputStream(file);
 		Workbook workbook = new XSSFWorkbook(inputStream);
@@ -233,8 +233,8 @@ public class Test1 {
 
 	@Test
 	public void test3() throws Exception {
-		String file = basepath + "/4.1-默认全局属性/4.1.1-地域性信息.xlsx";
-		String sheetname = "1省市区编号";
+		String file = basepath + "/附表14-地域性信息表.xlsx";
+		String sheetname = "省市区编号";
 
 		FileInputStream inputStream = new FileInputStream(file);
 		Workbook workbook = new XSSFWorkbook(inputStream);

+ 63 - 1
dmp-rwd-edit/pom.xml

@@ -39,6 +39,16 @@
         <dependency>
             <groupId>com.querydsl</groupId>
             <artifactId>querydsl-apt</artifactId>
+            <exclusions>
+                <exclusion>
+                    <artifactId>javassist</artifactId>
+                    <groupId>org.javassist</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>guava</artifactId>
+                    <groupId>com.google.guava</groupId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>com.alibaba</groupId>
@@ -87,6 +97,35 @@
             <groupId>org.apache.poi</groupId>
             <artifactId>poi-ooxml</artifactId>
         </dependency>
+        <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.7.2</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-lang</groupId>
+            <artifactId>commons-lang</artifactId>
+            <version>2.6</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.47</version>
+            <scope>compile</scope>
+        </dependency>
+        <!-- 注册中心 -->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
+        </dependency>
+
+        <!-- 配置中心 -->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-config</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
@@ -110,7 +149,7 @@
                 <artifactId>maven-surefire-plugin</artifactId>
                 <version>2.22.2</version>
                 <configuration>
-                    <skipTests>false</skipTests>
+                    <skipTests>true</skipTests>
                     <forkMode>once</forkMode>
                     <argLine>-Dfile.encoding=UTF-8</argLine>
                 </configuration>
@@ -149,6 +188,29 @@
                     </execution>
                 </executions>
             </plugin>
+            <plugin>
+                <artifactId>maven-resources-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-resources</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+                        <configuration>
+                            <resources>
+                                <resource>
+                                    <directory>src/main/resources/</directory>
+                                    <includes>
+                                        <include>**/*.yml</include>
+                                    </includes>
+                                </resource>
+                            </resources>
+                            <outputDirectory>${project.build.directory}/config</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
         </plugins>
         <resources>
             <resource>

+ 2 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/EditApp.java

@@ -11,6 +11,7 @@ import org.apache.shiro.mgt.SecurityManager;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
 import org.springframework.context.ConfigurableApplicationContext;
 import org.springframework.context.annotation.Bean;
 
@@ -23,6 +24,7 @@ import javax.persistence.EntityManager;
  */
 @Slf4j
 @SpringBootApplication
+@EnableDiscoveryClient
 public class EditApp {
 
     public static void main(String[] args) {

+ 3 - 2
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/ClassDefChangeRecordController.java

@@ -4,6 +4,7 @@ import com.persagy.common.criteria.JacksonCriteria;
 import com.persagy.common.web.MapResponse;
 import com.persagy.common.web.PagedResponse;
 import com.persagy.dmp.rwd.edit.entity.ClassDefChangeRecord;
+import com.persagy.dmp.rwd.edit.entity.dto.ClassDefChangeRecordDTO;
 import com.persagy.dmp.rwd.edit.service.ClassDefChangeRecordService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -20,8 +21,8 @@ public class ClassDefChangeRecordController {
     private ClassDefChangeRecordService service;
 
     @PostMapping("/query")
-    public PagedResponse<ClassDefChangeRecord> query(@RequestBody JacksonCriteria criteria) {
-        return service.query(criteria);
+    public PagedResponse<ClassDefChangeRecordDTO> query(@RequestBody JacksonCriteria criteria) {
+        return service.queryChangeRecord(criteria);
     }
 
     @PostMapping("/create")

+ 11 - 5
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/DownloadController.java

@@ -3,6 +3,7 @@ package com.persagy.dmp.rwd.edit.controller;
 import com.persagy.dmp.rwd.edit.service.DownloadService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -13,10 +14,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
+import java.io.*;
 import java.net.URLEncoder;
 
 @Slf4j
@@ -39,11 +37,19 @@ public class DownloadController {
 //    }
 
     @GetMapping("/download")
-    private void download(@RequestParam String type, HttpServletRequest req, HttpServletResponse resp){
+    private void download(@RequestParam String type, HttpServletRequest req, HttpServletResponse resp) throws Exception{
         //读取文件
         InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("static/file/批量上传变更记录模板.xlsx");
         String fileName = "批量上传变更记录模板.xlsx";
         InputStream inputStream = new BufferedInputStream(resourceAsStream);
+        Workbook workbook = new XSSFWorkbook(inputStream);
+        downloadService.fillFuncIndexDataToWorkbook(workbook);
+
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        workbook.write(bos);
+        byte[] brray = bos.toByteArray();
+        inputStream = new ByteArrayInputStream(brray);
+
         OutputStream out = null;
         try {
             String resultFileName = URLEncoder.encode(fileName, "UTF-8");

+ 3 - 2
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/FuncidDefChangeRecordController.java

@@ -4,6 +4,7 @@ import com.persagy.common.criteria.JacksonCriteria;
 import com.persagy.common.web.MapResponse;
 import com.persagy.common.web.PagedResponse;
 import com.persagy.dmp.rwd.edit.entity.FuncidDefChangeRecord;
+import com.persagy.dmp.rwd.edit.entity.dto.FuncidDefChangeRecordDTO;
 import com.persagy.dmp.rwd.edit.service.FuncidDefChangeRecordService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -18,8 +19,8 @@ public class FuncidDefChangeRecordController {
     private FuncidDefChangeRecordService service;
 
     @PostMapping("/query")
-    public PagedResponse<FuncidDefChangeRecord> query(@RequestBody JacksonCriteria criteria) {
-        return service.query(criteria);
+    public PagedResponse<FuncidDefChangeRecordDTO> query(@RequestBody JacksonCriteria criteria) {
+        return service.queryChangeRecord(criteria);
     }
 
     @PostMapping("/create")

+ 2 - 1
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/RwdeditRefTypeInfoController.java

@@ -5,6 +5,7 @@ import com.persagy.common.web.MapResponse;
 import com.persagy.common.web.PagedResponse;
 import com.persagy.dmp.rwd.edit.entity.RwdeditRefTypeInfos;
 import com.persagy.dmp.rwd.edit.service.RwdeditRefTypeInfosService;
+import com.persagy.dmp.rwd.model.RwdeditRefTypeInfosModel;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -19,7 +20,7 @@ public class RwdeditRefTypeInfoController {
     private RwdeditRefTypeInfosService service;
 
     @PostMapping("/query")
-    public PagedResponse<RwdeditRefTypeInfos> query(@RequestBody JacksonCriteria criteria) {
+    public PagedResponse<RwdeditRefTypeInfosModel> query(@RequestBody JacksonCriteria criteria) {
         return service.query(criteria);
     }
 

+ 1 - 1
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/controller/UploadController.java

@@ -19,7 +19,7 @@ public class UploadController {
     private UploadService uploadService;
 
     @PostMapping("/upload")
-    public MapResponse upload(@RequestParam String type, @RequestParam("siatic/file") MultipartFile file) {
+    public MapResponse upload(@RequestParam String type, @RequestParam("file") MultipartFile file) {
         MapResponse response = new MapResponse();
         try {
             return uploadService.upload(type, file);

+ 3 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/ClassDef.java

@@ -33,6 +33,7 @@ public class ClassDef {
     private String systemCode;
     private String equipmentCode;
     private String parentCode;
+    private  Integer orderSeq;
     private Integer isUsed;//使用状态 0.历史版本 1.使用中
     private String version;//版本
     private Date lastUpdateTime;//最后更新时间
@@ -52,6 +53,7 @@ public class ClassDef {
         entity.setSystemCode(model.getSystemCode());
         entity.setEquipmentCode(model.getEquipmentCode());
         entity.setParentCode(model.getParentCode());
+        entity.setOrderSeq(model.getOrderSeq());
         entity.setIsUsed(model.getIsUsed());//状态 0.历史版本 1.使用中
         entity.setVersion(model.getVersion());//版本
         entity.setLastUpdateTime(model.getLastUpdateTime());//发布时间
@@ -73,6 +75,7 @@ public class ClassDef {
         model.setSystemCode(this.getSystemCode());
         model.setEquipmentCode(this.getEquipmentCode());
         model.setParentCode(this.getParentCode());
+        model.setOrderSeq(this.getOrderSeq());
         model.setIsUsed(this.getIsUsed());//状态 0.历史版本 1.使用中
         model.setVersion(this.getVersion());//版本
         model.setLastUpdateTime(this.getLastUpdateTime());//发布时间

+ 10 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/ClassDefChangeRecord.java

@@ -1,5 +1,8 @@
 package com.persagy.dmp.rwd.edit.entity;
 
+
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.persagy.dmp.rwd.edit.enumeration.EnumOperationType;
 import com.persagy.dmp.rwd.edit.enumeration.EnumVersionState;
 import com.persagy.dmp.rwd.enums.ObjType;
@@ -7,11 +10,13 @@ import com.vladmihalcea.hibernate.type.json.JsonStringType;
 import lombok.Getter;
 import lombok.Setter;
 import org.hibernate.annotations.SQLDelete;
+import org.hibernate.annotations.Type;
 import org.hibernate.annotations.TypeDef;
 import org.hibernate.annotations.Where;
 
 import javax.persistence.*;
 import java.util.Date;
+import java.util.List;
 
 @Setter
 @Getter
@@ -20,6 +25,7 @@ import java.util.Date;
 @TypeDef(name = "json", typeClass = JsonStringType.class)
 @Where(clause = "valid = 1")
 @SQLDelete(sql = "update rwd_def_class_change_record set valid = 0 where id = ?")
+@TypeDef(name = "json", typeClass = JsonStringType.class)
 public class ClassDefChangeRecord {
 
     @Id
@@ -42,6 +48,10 @@ public class ClassDefChangeRecord {
     private EnumOperationType operationType;//操作类型
     private String operationUser;//操作人
     private Date operationTime;//操作时间
+    @Type(type = "json")
+    private ArrayNode operationContentBefore; //操作内容-修改前
+    @Type(type = "json")
+    private ArrayNode operationContentAfter;//操作内容-修改后
     private String confirmUser;//确认人
     private Date confirmTime;//确认时间
     private String publishUser;//发布人

+ 8 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/FuncidDef.java

@@ -53,6 +53,10 @@ public class FuncidDef {
     private String note;
     private Boolean subFlag;
     private Boolean weakPoint;
+    /**通用信息点标记,1-通用信息点,2-个性化信息点*/
+    private String shareType;
+    /**逻辑排序序号*/
+    private Integer orderSeq;
     private Integer isUsed;//状态 0.历史版本 1.使用中
     private String version;//版本
     private Date lastUpdateTime;//最后更新时间
@@ -87,6 +91,8 @@ public class FuncidDef {
         entity.setIsUsed(model.getIsUsed());//状态 0.历史版本 1.使用中
         entity.setVersion(model.getVersion());//版本
         entity.setLastUpdateTime(model.getLastUpdateTime());//发布时间
+        entity.setOrderSeq(model.getOrderSeq());
+        entity.setShareType(model.getShareType());
         return entity;
     }
 
@@ -120,6 +126,8 @@ public class FuncidDef {
         model.setIsUsed(this.getIsUsed());//状态 0.历史版本 1.使用中
         model.setVersion(this.getVersion());//版本
         model.setLastUpdateTime(this.getLastUpdateTime());//发布时间
+        model.setOrderSeq(this.getOrderSeq());
+        model.setShareType(this.getShareType());
         return model;
     }
 

+ 12 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/FuncidDefChangeRecord.java

@@ -1,5 +1,6 @@
 package com.persagy.dmp.rwd.edit.entity;
 
+import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.persagy.dmp.rwd.edit.enumeration.EnumOperationType;
 import com.persagy.dmp.rwd.edit.enumeration.EnumVersionState;
@@ -8,6 +9,7 @@ import com.persagy.dmp.rwd.enums.FuncidDataType;
 import com.vladmihalcea.hibernate.type.json.JsonStringType;
 import lombok.Getter;
 import lombok.Setter;
+import org.apache.poi.ss.formula.functions.T;
 import org.hibernate.annotations.SQLDelete;
 import org.hibernate.annotations.Type;
 import org.hibernate.annotations.TypeDef;
@@ -15,6 +17,8 @@ import org.hibernate.annotations.Where;
 
 import javax.persistence.*;
 import java.util.Date;
+import java.util.List;
+import java.util.Map;
 
 @Setter
 @Getter
@@ -57,10 +61,18 @@ public class FuncidDefChangeRecord {
     private String note;
     private Boolean subFlag;
     private Boolean weakPoint;
+    /**通用信息点标记,1-通用信息点,2-个性化信息点*/
+    private String shareType;
+    /**逻辑排序序号*/
+    private Integer orderSeq;
     @Enumerated(EnumType.STRING)
     private EnumOperationType operationType;//操作类型
     private String operationUser;//操作人
     private Date operationTime;//操作时间
+    @Type(type = "json")
+    private ArrayNode operationContentBefore; //操作内容-修改前
+    @Type(type = "json")
+    private ArrayNode operationContentAfter;//操作内容-修改后
     private String confirmUser;//确认人
     private Date confirmTime;//确认时间
     private String publishUser;//发布人

+ 23 - 4
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/RwdeditRefType.java

@@ -1,16 +1,21 @@
 package com.persagy.dmp.rwd.edit.entity;
 
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.persagy.dmp.rwd.edit.model.RwdeditRefTypeModel;
+import com.vladmihalcea.hibernate.type.json.JsonStringType;
 import lombok.Getter;
 import lombok.Setter;
-import org.hibernate.annotations.CreationTimestamp;
-import org.hibernate.annotations.GenericGenerator;
-import org.hibernate.annotations.UpdateTimestamp;
+import org.hibernate.annotations.*;
 
 import javax.persistence.*;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.Table;
 import java.util.Date;
 import java.util.List;
-
+@TypeDef(name = "json", typeClass = JsonStringType.class)
 @Setter
 @Getter
 @Entity
@@ -22,6 +27,13 @@ public class RwdeditRefType {
     @GenericGenerator(name = "assignedId", strategy = "assigned")
     private String refKey;
     private String name;
+    private String aliasName;
+    @Type(type = "json")
+    @Column( columnDefinition = "json" )
+    private ArrayNode extendProperties;
+    @Type(type = "json")
+    @Column( columnDefinition = "json" )
+    private ArrayNode showProperties;
     @Column(updatable = false)
     private Integer createUser;
     @CreationTimestamp
@@ -32,6 +44,7 @@ public class RwdeditRefType {
     private Date updateTime;
     private Integer seq;
     private Integer showPosition;
+    private String parentKey;
 
     @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "refKey")
     private List<RwdeditRefTypeInfos> infos;
@@ -40,10 +53,13 @@ public class RwdeditRefType {
         RwdeditRefType entity = new RwdeditRefType();
         entity.setRefKey(model.getRefKey());
         entity.setName(model.getName());
+        entity.setAliasName(model.getAliasName());
         entity.setCreateTime(model.getCreateTime());
         entity.setUpdateTime(model.getUpdateTime());
         entity.setCreateUser(model.getCreateUser());
         entity.setUpdateUser(model.getUpdateUser());
+        entity.setExtendProperties(model.getExtendProperties());
+        entity.setShowProperties(model.getShowProperties());
         entity.setSeq(model.getSeq());
         entity.setShowPosition(model.getShowPosition());
         entity.setInfos(model.getInfos());
@@ -54,10 +70,13 @@ public class RwdeditRefType {
         RwdeditRefTypeModel model = new RwdeditRefTypeModel();
         model.setRefKey(this.getRefKey());
         model.setName(this.getName());
+        model.setAliasName(this.getAliasName());
         model.setCreateTime(this.getCreateTime());
         model.setUpdateTime(this.getUpdateTime());
         model.setCreateUser(this.getCreateUser());
         model.setUpdateUser(this.getUpdateUser());
+        model.setExtendProperties(this.getExtendProperties());
+        model.setShowProperties(this.getShowProperties());
         model.setSeq(this.getSeq());
         model.setShowPosition(this.getShowPosition());
         return model;

+ 38 - 1
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/RwdeditRefTypeInfos.java

@@ -1,7 +1,7 @@
 package com.persagy.dmp.rwd.edit.entity;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dmp.rwd.model.RwdeditRefTypeInfosModel;
 import lombok.Getter;
 import lombok.Setter;
 import org.hibernate.annotations.CreationTimestamp;
@@ -24,6 +24,7 @@ public class RwdeditRefTypeInfos {
     private String code;
     private String name;
     private String parentCode;
+    private String codePath;
     @Type(type = "json")
     private ObjectNode dataSource;
     @Column(updatable = false)
@@ -31,7 +32,43 @@ public class RwdeditRefTypeInfos {
     @CreationTimestamp
     @Column(updatable = false)
     private Date createTime;
+    private Integer seq;
     private Integer updateUser;
     @UpdateTimestamp
     private Date updateTime;
+
+    public static RwdeditRefTypeInfos fromModel(RwdeditRefTypeInfosModel model) {
+        RwdeditRefTypeInfos entity = new RwdeditRefTypeInfos();
+        entity.setRefKey(model.getRefKey());
+        entity.setName(model.getName());
+        entity.setCreateTime(model.getCreateTime());
+        entity.setUpdateTime(model.getUpdateTime());
+        entity.setCreateUser(model.getCreateUser());
+        entity.setUpdateUser(model.getUpdateUser());
+        entity.setCode(model.getCode());
+        entity.setParentCode(model.getParentCode());
+        entity.setCodePath(model.getCodePath());
+        entity.setDataSource(model.getDataSource());
+        entity.setSeq(model.getSeq());
+        return entity;
+    }
+
+    public RwdeditRefTypeInfosModel toModel() {
+        RwdeditRefTypeInfosModel model = new RwdeditRefTypeInfosModel();
+        model.setRefKey(this.getRefKey());
+        model.setName(this.getName());
+        model.setCodePath(this.getCodePath());
+        model.setCreateTime(this.getCreateTime());
+        model.setUpdateTime(this.getUpdateTime());
+        model.setCreateUser(this.getCreateUser());
+        model.setUpdateUser(this.getUpdateUser());
+        model.setCode(this.getCode());
+        model.setParentCode(this.getParentCode());
+        model.setDataSource(this.getDataSource());
+        model.setSeq(this.getSeq());
+        return model;
+    }
+
+
+
 }

+ 24 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/dto/ClassDefChangeRecordDTO.java

@@ -0,0 +1,24 @@
+package com.persagy.dmp.rwd.edit.entity.dto;
+
+import com.persagy.dmp.rwd.edit.entity.ClassDefChangeRecord;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @ClassName ClassDefChangeRecordDTO
+ * @Description: 类型变更记录DTO
+ * @Author linhuili
+ * @Date 2021/5/18 10:51
+ * @Version V1.0
+ **/
+@Getter
+@Setter
+public class ClassDefChangeRecordDTO extends ClassDefChangeRecord {
+
+    private String majorName;
+
+    private String systemName;
+
+    private String equipmentName;
+
+}

+ 25 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/entity/dto/FuncidDefChangeRecordDTO.java

@@ -0,0 +1,25 @@
+package com.persagy.dmp.rwd.edit.entity.dto;
+
+import com.persagy.dmp.rwd.edit.entity.ClassDefChangeRecord;
+import com.persagy.dmp.rwd.edit.entity.FuncidDefChangeRecord;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @ClassName FuncidDefChangeRecordDTO
+ * @Description: 信息点变更记录DTO
+ * @Author linhuili
+ * @Date 2021/5/18 10:51
+ * @Version V1.0
+ **/
+@Getter
+@Setter
+public class FuncidDefChangeRecordDTO extends FuncidDefChangeRecord {
+
+    private String majorName;
+
+    private String systemName;
+
+    private String equipmentName;
+
+}

+ 38 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/enumeration/FuncidShareTypeEnum.java

@@ -0,0 +1,38 @@
+package com.persagy.dmp.rwd.edit.enumeration;
+
+import lombok.Getter;
+
+/**
+ * @author sagadev
+ */
+
+public enum FuncidShareTypeEnum {
+
+    /**
+     * 通用信息点
+     */
+    COMMON("1", "通用信息点"),
+    /**
+     * 特有信息点
+     */
+    SELF("2", "特有信息点");
+
+    @Getter
+    private String value;
+    @Getter
+    private String desc;
+
+    FuncidShareTypeEnum(String value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+
+    public static FuncidShareTypeEnum getByValue(Integer value) {
+        for (FuncidShareTypeEnum state : FuncidShareTypeEnum.values()) {
+            if (state.getValue().equals(value)) {
+                return state;
+            }
+        }
+        return null;
+    }
+}

+ 4 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/model/RwdeditRefTypeModel.java

@@ -1,5 +1,6 @@
 package com.persagy.dmp.rwd.edit.model;
 
+import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.persagy.dmp.rwd.edit.entity.RwdeditRefTypeInfos;
 import lombok.Getter;
 import lombok.Setter;
@@ -13,7 +14,10 @@ public class RwdeditRefTypeModel {
 
     private String refKey;
     private String name;
+    private String aliasName;
     private Integer createUser;
+    private ArrayNode extendProperties;
+    private ArrayNode showProperties;
     private Date createTime;
     private Integer updateUser;
     private Date updateTime;

+ 0 - 1
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/AdminRoleService.java

@@ -112,7 +112,6 @@ public class AdminRoleService {
                 if (permission.getSign() == null) {
                     continue;
                 }
-
                 AdminPermission entity;
                 Optional<AdminPermission> optp = permissionRepository.findOne(QAdminPermission.adminPermission.sign.eq(permission.getSign()));
                 if (!optp.isPresent()) {

+ 2 - 2
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/AdminUserService.java

@@ -150,10 +150,10 @@ public class AdminUserService {
 
         AdminUser user = adminUserRepository.findById(UserUtils.currentUserId()).get();
 
-        if (!user.getPassword().equalsIgnoreCase(MD5Utils.getSign(oldPwd))) {
+        if (!user.getPassword().equalsIgnoreCase(MD5Utils.getSign(user.getUsername()+oldPwd))) {
             resp.setFail("原密码错误");
         } else {
-            user.setPassword(MD5Utils.getSign(newPwd));
+            user.setPassword(MD5Utils.getSign(user.getUsername()+newPwd));
             adminUserRepository.save(user);
         }
         return resp;

+ 151 - 5
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/ClassDefChangeRecordService.java

@@ -1,5 +1,10 @@
 package com.persagy.dmp.rwd.edit.service;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.common.criteria.CriteriaUtils;
 import com.persagy.common.criteria.JacksonCriteria;
@@ -10,18 +15,27 @@ import com.persagy.dmp.rwd.edit.config.web.UserUtils;
 import com.persagy.dmp.rwd.edit.entity.ClassDef;
 import com.persagy.dmp.rwd.edit.entity.ClassDefChangeRecord;
 import com.persagy.dmp.rwd.edit.entity.QClassDefChangeRecord;
+import com.persagy.dmp.rwd.edit.entity.dto.ClassDefChangeRecordDTO;
 import com.persagy.dmp.rwd.edit.enumeration.EnumOperationType;
 import com.persagy.dmp.rwd.edit.enumeration.EnumVersionState;
+import com.persagy.dmp.rwd.edit.model.DtDataModel;
 import com.persagy.dmp.rwd.edit.repository.ClassDefChangeRecordRepository;
 import com.persagy.dmp.rwd.edit.repository.ClassDefRepository;
+import com.persagy.dmp.rwd.edit.util.MapObjUtil;
 import com.persagy.dmp.rwd.model.ClassDefModel;
 import com.querydsl.core.types.dsl.BooleanExpression;
+import lombok.Data;
+import org.apache.commons.lang.ObjectUtils;
+import org.apache.commons.lang.StringUtils;
+
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.transaction.Transactional;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @Slf4j
 @Service
@@ -39,6 +53,12 @@ public class ClassDefChangeRecordService {
     @Autowired
     ClassDefRepository classDefRepository;
 
+    @Autowired
+    DtDataService dtDataService;
+
+    @Autowired
+    FuncidDefChangeRecordService funcidDefChangeRecordService;
+
     private List<BooleanExpression> parse(ObjectNode object) {
         List<BooleanExpression> list = new LinkedList<>();
         QClassDefChangeRecord qt = QClassDefChangeRecord.classDefChangeRecord;
@@ -65,6 +85,48 @@ public class ClassDefChangeRecordService {
         return criteriaUtils.query(QClassDefChangeRecord.classDefChangeRecord, this::parse, criteria);
     }
 
+    public PagedResponse<ClassDefChangeRecordDTO> queryChangeRecord(JacksonCriteria criteria) {
+        PagedResponse<ClassDefChangeRecordDTO> pagedResponse = new PagedResponse<>();
+        //查询所有专业
+        JacksonCriteria majorCriteria = JacksonCriteria.newInstance();
+        majorCriteria.add("classCode", "sec");
+        PagedResponse<DtDataModel> queryMajorResp = dtDataService.query(majorCriteria);
+        List<DtDataModel> majorData = queryMajorResp.getData();
+        Map<String, String> majorDataMap = majorData.stream().filter(t -> StringUtils.isNotEmpty(t.getCode())).collect(Collectors.toMap(DtDataModel::getCode, DtDataModel::getLabel, (k, v) -> v));
+
+        //查询所有类型定义
+        ListResponse<ClassDefModel> queryClassDefResp = classDefService.queryClass(JacksonCriteria.newInstance());
+        List<ClassDefModel> classDefData = queryClassDefResp.getData();
+        Map<String, String> classDefDataMap = classDefData.stream().filter(t -> StringUtils.isNotEmpty(t.getCode())).collect(Collectors.toMap(ClassDefModel::getCode, ClassDefModel::getName, (k, v) -> v));
+
+        //查询类型变更记录
+        PagedResponse<ClassDefChangeRecord> queryClassDefChangeResp = criteriaUtils.query(QClassDefChangeRecord.classDefChangeRecord, this::parse, criteria);
+        List<ClassDefChangeRecord> classDefChangeRecordList = queryClassDefChangeResp.getData();
+
+        //结果集封装
+        List<ClassDefChangeRecordDTO> result = new ArrayList<>();
+        classDefChangeRecordList.forEach(item->{
+            ClassDefChangeRecordDTO changeRecordDTO = new ClassDefChangeRecordDTO();
+            BeanUtils.copyProperties(item,changeRecordDTO);
+            //设置专业名称
+            if(StringUtils.isNotEmpty(item.getMajorCode())){
+                changeRecordDTO.setMajorName(majorDataMap.get(item.getMajorCode()));
+            }
+            //设置系统名称
+            if(StringUtils.isNotEmpty(item.getSystemCode())){
+                changeRecordDTO.setSystemName(classDefDataMap.get(item.getSystemCode()));
+            }
+            //设置设备类名称
+            if(StringUtils.isNotEmpty(item.getEquipmentCode())){
+                changeRecordDTO.setEquipmentName(classDefDataMap.get(item.getEquipmentCode()));
+            }
+            result.add(changeRecordDTO);
+        });
+        pagedResponse.setData(result);
+        pagedResponse.setCount(queryClassDefChangeResp.getCount());
+        return pagedResponse;
+    }
+
     @Transactional
     public MapResponse create(ClassDefChangeRecord param) {
         MapResponse response = new MapResponse();
@@ -73,12 +135,21 @@ public class ClassDefChangeRecordService {
             response.setFail("code is required");
             return response;
         }
+
         List<ClassDefModel> classDefList = queryClassDef(code, null, null);
+        CacheModel cache = new CacheModel();
         if (EnumOperationType.create.equals(param.getOperationType())) {
             if (classDefList.size() > 0) {
                 response.setFail("code is exists");
                 return response;
             }
+            //记录所有变更内容
+            BeanUtils.copyProperties(param,cache);
+            Map<String, Object> afterParamMap = MapObjUtil.object2Map(cache);
+            ArrayNode arrayNode = addCreateRecord(afterParamMap);
+            if(arrayNode!=null && arrayNode.size()>0){
+                param.setOperationContentAfter(arrayNode);
+            }
         } else {
             if (classDefList.size() == 0) {
                 response.setFail("code not exists");
@@ -88,10 +159,10 @@ public class ClassDefChangeRecordService {
             param.setGroupCode(classDef.getGroupCode());
             param.setObjType(classDef.getObjType());
             param.setName(classDef.getName());
-            if (param.getAliasCode() == null) {
+            if (StringUtils.isEmpty(param.getAliasCode())) {
                 param.setAliasCode(classDef.getAliasCode());
             }
-            if (param.getAliasName() == null) {
+            if (StringUtils.isEmpty(param.getAliasName())) {
                 param.setAliasName(classDef.getAliasName());
             }
             param.setType(classDef.getType());
@@ -100,15 +171,18 @@ public class ClassDefChangeRecordService {
             param.setSystemCode(classDef.getSystemCode());
             param.setEquipmentCode(classDef.getEquipmentCode());
             param.setParentCode(classDef.getParentCode());
+            //添加变更记录
+            BeanUtils.copyProperties(param,cache);
+            addChangeRecord(classDef, param,cache);
         }
-        QClassDefChangeRecord qt = QClassDefChangeRecord.classDefChangeRecord;
+        /*QClassDefChangeRecord qt = QClassDefChangeRecord.classDefChangeRecord;
         BooleanExpression ex = qt.code.eq(code).and(qt.state.eq(EnumVersionState.INIT)).and(qt.version.isNull());
         Iterable<ClassDefChangeRecord> all = repository.findAll(ex);
         List<ClassDefChangeRecord> list = new ArrayList<>();
         all.forEach(list::add);
         if (list.size() > 0) {
             repository.deleteAll(list);
-        }
+        }*/
         param.setOperationUser(UserUtils.currentUserId() + "");
         param.setOperationTime(new Date());
         param.setValid(true);
@@ -335,7 +409,7 @@ public class ClassDefChangeRecordService {
         classDefRepository.saveAll(classDefList);
     }
 
-    private List<ClassDefModel> queryClassDef(String code, List<String> codeList, String neVersion) {
+    public List<ClassDefModel> queryClassDef(String code, List<String> codeList, String neVersion) {
         JacksonCriteria criteria = JacksonCriteria.newInstance();
         criteria.add("type", "common");
         if (code != null) {
@@ -351,5 +425,77 @@ public class ClassDefChangeRecordService {
         List<ClassDefModel> data = query.getData();
         return data;
     }
+
+    /**
+     * 添加变更记录
+     * @param classDef
+     * @param param
+     * @param cache
+     */
+    private void addChangeRecord(ClassDefModel classDef, ClassDefChangeRecord param,CacheModel cache){
+        Map<String, Object> beforeParamMap = MapObjUtil.object2Map(classDef);
+        Map<String, Object> afterParamMap = MapObjUtil.object2Map(cache);
+
+        //比较变更记录
+        ArrayNode operationContentBefore = JsonNodeFactory.instance.arrayNode();
+        ArrayNode operationContentAfter = JsonNodeFactory.instance.arrayNode();
+        Set<?> keySets = Collections.unmodifiableSet(beforeParamMap.keySet());
+        for (Map.Entry<?, ?> afterEntry : afterParamMap.entrySet()) {
+            if(!keySets.contains(afterEntry.getKey())){
+                continue;
+            }
+            Object afterValue = afterEntry.getValue();
+            Object beforeValue = beforeParamMap.get(afterEntry.getKey());
+            if(ObjectUtils.equals(afterValue,beforeValue)){
+                continue;
+            }
+            ObjectNode object = JsonNodeFactory.instance.objectNode();
+            //变更前
+            if(beforeValue ==null){
+                object.put(afterEntry.getKey().toString(),"");
+            }else{
+                object.put(afterEntry.getKey().toString(),beforeValue.toString());
+            }
+            operationContentBefore.add(object);
+
+            //变更后
+            object = JsonNodeFactory.instance.objectNode();
+            if(afterValue ==null){
+                object.put(afterEntry.getKey().toString(),"");
+            }else{
+                object.put(afterEntry.getKey().toString(),afterValue.toString());
+            }
+            operationContentAfter.add(object);
+        }
+
+        param.setOperationContentBefore(operationContentBefore);
+        param.setOperationContentAfter(operationContentAfter);
+    }
+
+    /**
+     * 获取新增记录
+     * @param afterParamMap
+     */
+    public ArrayNode addCreateRecord(Map<?, ?> afterParamMap){
+        ArrayNode operationContentAfter = JsonNodeFactory.instance.arrayNode();
+        for (Map.Entry<?, ?> afterEntry : afterParamMap.entrySet()) {
+            Object value = afterEntry.getValue();
+            if(value == null){
+                continue;
+            }
+            ObjectNode object = JsonNodeFactory.instance.objectNode();
+            object.put(afterEntry.getKey().toString(),value.toString());
+            operationContentAfter.add(object);
+        }
+        return operationContentAfter;
+    }
+
+    @Data
+    private static class CacheModel {
+        private String code;
+        private String name;
+        private String aliasCode;
+        private String aliasName;
+    }
 }
 

+ 4 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/ClassDefService.java

@@ -7,8 +7,10 @@ import com.persagy.common.web.ListResponse;
 import com.persagy.common.web.PagedResponse;
 import com.persagy.dmp.rwd.edit.entity.ClassDef;
 import com.persagy.dmp.rwd.edit.entity.QClassDef;
+import com.persagy.dmp.rwd.edit.enumeration.FuncidShareTypeEnum;
 import com.persagy.dmp.rwd.enums.ObjType;
 import com.persagy.dmp.rwd.model.ClassDefModel;
+import com.persagy.dmp.rwd.model.FuncidDefModel;
 import com.querydsl.core.types.dsl.BooleanExpression;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -41,6 +43,8 @@ public class ClassDefService {
 
         List<ClassDefModel> data = new ArrayList<>(map.size());
         data.addAll(map.values());
+        //排序
+        data = data.stream().sorted(Comparator.comparing(ClassDefModel::getOrderSeq, Comparator.nullsLast(Integer::compareTo))).collect(Collectors.toList());
         resp.setData(data);
         return resp;
     }

+ 46 - 6
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/DownloadService.java

@@ -1,23 +1,27 @@
 package com.persagy.dmp.rwd.edit.service;
 
+import cn.hutool.core.util.StrUtil;
+import com.persagy.common.criteria.JacksonCriteria;
 import com.persagy.dmp.common.excel.ExcelUtils;
 import com.persagy.dmp.common.excel.SheetWriteInfo;
 import com.persagy.dmp.rwd.edit.entity.ClassDefChangeRecord;
 import com.persagy.dmp.rwd.edit.entity.FuncidDefChangeRecord;
 import com.persagy.dmp.rwd.edit.model.DownloadModel;
+import com.persagy.dmp.rwd.model.FuncidDefModel;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.ss.usermodel.HorizontalAlignment;
-import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.usermodel.*;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import java.util.*;
 
 @Slf4j
 @Service
 public class DownloadService {
 
+    @Autowired
+    private FuncidDefService funcidDefService;
+
     public DownloadModel download(String type) {
         if ("changeDataTemplate".equals(type)) {
             return downloadChangeDataTemplate();
@@ -124,5 +128,41 @@ public class DownloadService {
         });
         return info;
     }
-}
 
+    /**
+     * 信息点位置数据填充
+     *
+     * @param workbook
+     */
+    public void fillFuncIndexDataToWorkbook(Workbook workbook) throws Exception {
+        // 信息点位置sheet页数据填充
+        Sheet listSheet = workbook.getSheetAt(3);
+        fillFuncIdDefData(listSheet);
+    }
+
+    /**
+     * 列表数据填充
+     * @param sheet
+     */
+    private void fillFuncIdDefData(Sheet sheet) {
+        //查询所有信息点
+        List<FuncidDefModel> funcidDefModelList = funcidDefService.queryWithoutClassCode(JacksonCriteria.newInstance());
+        funcidDefModelList.sort((k1,k2)->{
+            int compareTo = StrUtil.blankToDefault(k1.getClassCode(),"").compareTo(StrUtil.blankToDefault(k2.getClassCode(),""));
+            if (0==compareTo) {
+                return k1.getOrderSeq().compareTo(k2.getOrderSeq());
+            }
+            return compareTo;
+        });
+        int rowIndex = 1;
+        //数据填充
+        if (funcidDefModelList != null) {
+            for (FuncidDefModel datum : funcidDefModelList) {
+                Row row = sheet.createRow(rowIndex++);
+                row.createCell(0).setCellValue(datum.getClassCode());
+                row.createCell(1).setCellValue(datum.getName());
+                row.createCell(2).setCellValue(datum.getOrderSeq());
+            }
+        }
+    }
+}

+ 384 - 25
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/FuncidDefChangeRecordService.java

@@ -1,6 +1,12 @@
 package com.persagy.dmp.rwd.edit.service;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.common.criteria.CriteriaUtils;
 import com.persagy.common.criteria.JacksonCriteria;
@@ -9,24 +15,38 @@ import com.persagy.common.web.ListResponse;
 import com.persagy.common.web.MapResponse;
 import com.persagy.common.web.PagedResponse;
 import com.persagy.dmp.rwd.edit.config.web.UserUtils;
-import com.persagy.dmp.rwd.edit.entity.FuncidDef;
-import com.persagy.dmp.rwd.edit.entity.FuncidDefChangeRecord;
-import com.persagy.dmp.rwd.edit.entity.QFuncidDefChangeRecord;
-import com.persagy.dmp.rwd.edit.entity.RwdeditRefTypeInfos;
+import com.persagy.dmp.rwd.edit.entity.*;
+import com.persagy.dmp.rwd.edit.entity.dto.FuncidDefChangeRecordDTO;
 import com.persagy.dmp.rwd.edit.enumeration.EnumOperationType;
 import com.persagy.dmp.rwd.edit.enumeration.EnumVersionState;
+import com.persagy.dmp.rwd.edit.enumeration.FuncidShareTypeEnum;
+import com.persagy.dmp.rwd.edit.model.DtDataModel;
 import com.persagy.dmp.rwd.edit.repository.FuncidDefChangeRecordRepository;
 import com.persagy.dmp.rwd.edit.repository.FuncidDefRepository;
+import com.persagy.dmp.rwd.edit.repository.RwdeditRefTypeRepository;
+import com.persagy.dmp.rwd.edit.util.MapObjUtil;
+import com.persagy.dmp.rwd.enums.FuncidCategory;
 import com.persagy.dmp.rwd.enums.FuncidDataType;
 import com.persagy.dmp.rwd.model.ClassDefModel;
 import com.persagy.dmp.rwd.model.FuncidDefModel;
+import com.persagy.dmp.rwd.model.RwdeditRefTypeInfosModel;
 import com.querydsl.core.types.dsl.BooleanExpression;
+import io.micrometer.core.instrument.util.StringUtils;
+import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.beanutils.BeanMap;
+import org.apache.commons.lang.ObjectUtils;
+import org.hibernate.annotations.Type;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.persistence.Column;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
 import javax.transaction.Transactional;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @Slf4j
 @Service
@@ -50,6 +70,12 @@ public class FuncidDefChangeRecordService {
     @Autowired
     FuncidDefRepository funcidDefRepository;
 
+    @Autowired
+    DtDataService dtDataService;
+
+    @Autowired
+    RwdeditRefTypeRepository refTypeRepository;
+
     private List<BooleanExpression> parse(ObjectNode object) {
         List<BooleanExpression> list = new LinkedList<>();
         QFuncidDefChangeRecord qt = QFuncidDefChangeRecord.funcidDefChangeRecord;
@@ -73,6 +99,70 @@ public class FuncidDefChangeRecordService {
         return result;
     }
 
+    /**
+     * 查询信息点变更记录
+     * @param criteria
+     * @return
+     */
+    public PagedResponse<FuncidDefChangeRecordDTO> queryChangeRecord(JacksonCriteria criteria) {
+        PagedResponse<FuncidDefChangeRecordDTO> pagedResponse = new PagedResponse<>();
+        //查询所有专业
+        JacksonCriteria majorCriteria = JacksonCriteria.newInstance();
+        majorCriteria.add("classCode", "sec");
+        PagedResponse<DtDataModel> queryMajorResp = dtDataService.query(majorCriteria);
+        List<DtDataModel> majorData = queryMajorResp.getData();
+        Map<String, String> majorDataMap = majorData.stream().filter(t -> StringUtils.isNotEmpty(t.getCode())).collect(Collectors.toMap(DtDataModel::getCode, DtDataModel::getLabel, (k, v) -> v));
+
+        //获取所有的类型定义
+        ListResponse<ClassDefModel> queryClassDefResp = classDefService.queryClass(JacksonCriteria.newInstance());
+        List<ClassDefModel> classDefData = queryClassDefResp.getData();
+        Map<String, ClassDefModel> classDefDataMap = classDefData.stream().filter(t -> StringUtils.isNotEmpty(t.getCode())).collect(Collectors.toMap(ClassDefModel::getCode, classDefModel->classDefModel, (k, v) -> v));
+
+        //查询信息点变更记录
+        PagedResponse<FuncidDefChangeRecord> queryFuncidDefChangeResp = criteriaUtils.query(QFuncidDefChangeRecord.funcidDefChangeRecord, this::parse, criteria);
+        List<FuncidDefChangeRecord> funcidDefChangeRecordList = queryFuncidDefChangeResp.getData();
+
+        //结果集封装
+        List<FuncidDefChangeRecordDTO> result = new ArrayList<>();
+        funcidDefChangeRecordList.forEach(item->{
+            FuncidDefChangeRecordDTO changeRecordDTO = new FuncidDefChangeRecordDTO();
+            BeanUtils.copyProperties(item,changeRecordDTO);
+
+            String classCode = item.getClassCode();
+            ClassDefModel classDefModel = classDefDataMap.get(classCode);
+            //设置专业名称
+            if(classDefModel == null){
+                changeRecordDTO.setMajorName(majorDataMap.get(item.getClassCode()));
+                result.add(changeRecordDTO);
+                return;
+            }
+            if(StringUtils.isNotEmpty(classDefModel.getMajorCode())){
+                changeRecordDTO.setMajorName(majorDataMap.get(classDefModel.getMajorCode()));
+            }
+
+            //设置系统及设备类名称
+            if("system".equals(classDefModel.getObjType().name())){
+                changeRecordDTO.setSystemName(classDefDataMap.get(item.getClassCode()).getName());
+                result.add(changeRecordDTO);
+                return;
+            }else{
+                if(StringUtils.isNotEmpty(classDefModel.getSystemCode())){
+                    changeRecordDTO.setSystemName(classDefDataMap.get(classDefModel.getSystemCode()).getName());
+                }
+                if("equipment".equals(classDefModel.getObjType().name())){
+                    changeRecordDTO.setEquipmentName(classDefDataMap.get(classDefModel.getCode()).getName());
+                }else{
+                    changeRecordDTO.setMajorName(classDefDataMap.get(item.getClassCode()).getName());
+                }
+            }
+            result.add(changeRecordDTO);
+        });
+        pagedResponse.setData(result);
+        pagedResponse.setCount(queryFuncidDefChangeResp.getCount());
+        return pagedResponse;
+    }
+
+
     @Transactional
     public MapResponse create(FuncidDefChangeRecord param) {
         MapResponse response = new MapResponse();
@@ -91,11 +181,19 @@ public class FuncidDefChangeRecordService {
         if (funcidDefModelList != null) {
             funcidDef = funcidDefModelList.get(0);
         }
+        CacheModel cache = new CacheModel();
         if (EnumOperationType.create.equals(param.getOperationType())) {
             if (funcidDef != null) {
                 response.setFail("code is exists");
                 return response;
             }
+            //记录所有变更内容
+            BeanUtils.copyProperties(param,cache);
+            Map<String, Object> afterParamMap = MapObjUtil.object2Map(cache);
+            ArrayNode arrayNode = addCreateRecord(afterParamMap);
+            if(arrayNode!=null && arrayNode.size()>0){
+                param.setOperationContentAfter(arrayNode);
+            }
         } else {
             if (funcidDef == null) {
                 response.setFail("code not exists");
@@ -103,10 +201,10 @@ public class FuncidDefChangeRecordService {
             }
             param.setOrigCode(funcidDef.getOrigCode());
             param.setName(funcidDef.getName());
-            if (param.getAliasCode() == null) {
+            if (StringUtils.isEmpty(param.getAliasCode())) {
                 param.setAliasCode(funcidDef.getAliasCode());
             }
-            if (param.getAliasName() == null) {
+            if (StringUtils.isEmpty(param.getAliasName())) {
                 param.setAliasName(funcidDef.getAliasName());
             }
             param.setClassCode(funcidDef.getClassCode());
@@ -114,15 +212,22 @@ public class FuncidDefChangeRecordService {
             param.setType(funcidDef.getType());
             param.setGroupCode(funcidDef.getGroupCode());
             param.setProjectId(funcidDef.getProjectId());
-            if (param.getFirstTag() == null) {
+
+            if (StringUtils.isEmpty(param.getFirstTag())) {
                 param.setFirstTag(funcidDef.getFirstTag());
             }
-            if (param.getSecondTag() == null) {
+            if (StringUtils.isEmpty(param.getFirstTag())) {
                 param.setSecondTag(funcidDef.getSecondTag());
             }
-            param.setPriority(funcidDef.getPriority());
-            param.setInputMode(funcidDef.getInputMode());
-            param.setUnit(funcidDef.getUnit());
+            if(StringUtils.isEmpty(param.getPriority())){
+                param.setPriority(funcidDef.getPriority());
+            }
+            if(StringUtils.isEmpty(param.getInputMode())){
+                param.setInputMode(funcidDef.getInputMode());
+            }
+            if(StringUtils.isEmpty(param.getUnit())){
+                param.setUnit(funcidDef.getUnit());
+            }
             param.setDataType(funcidDef.getDataType());
             param.setOrigDataType(funcidDef.getOrigDataType());
             param.setIsMultiple(funcidDef.getIsMultiple());
@@ -134,19 +239,27 @@ public class FuncidDefChangeRecordService {
             }
             param.setSubFlag(funcidDef.getSubFlag());
             param.setWeakPoint(funcidDef.getWeakPoint());
+           //添加变更记录
+            BeanUtils.copyProperties(param,cache);
+            addChangeRecord(funcidDef,param,cache);
         }
-        QFuncidDefChangeRecord qt = QFuncidDefChangeRecord.funcidDefChangeRecord;
+
+        /*QFuncidDefChangeRecord qt = QFuncidDefChangeRecord.funcidDefChangeRecord;
         BooleanExpression ex = qt.code.eq(code).and(qt.state.eq(EnumVersionState.INIT)).and(qt.version.isNull());
         Iterable<FuncidDefChangeRecord> all = repository.findAll(ex);
         List<FuncidDefChangeRecord> list = new ArrayList<>();
         all.forEach(list::add);
         if (list.size() > 0) {
             repository.deleteAll(list);
-        }
+        }*/
+
         param.setOperationUser(UserUtils.currentUserId() + "");
         param.setOperationTime(new Date());
         param.setValid(true);
         param.setState(EnumVersionState.INIT);
+        if(StringUtils.isEmpty(param.getShareType())){
+            param.setShareType(FuncidShareTypeEnum.SELF.getValue());
+        }
         repository.save(param);
         response.add("id", param.getId());
         return response;
@@ -335,7 +448,7 @@ public class FuncidDefChangeRecordService {
                         String refKey = dataSource.get(0).get("refKey").asText();
                         JacksonCriteria queryRef = JacksonCriteria.newInstance();
                         queryRef.add("refKey", refKey);
-                        List<RwdeditRefTypeInfos> refInfos = rwdeditRefTypeInfosService.query(queryRef).getData();
+                        List<RwdeditRefTypeInfosModel> refInfos = rwdeditRefTypeInfosService.query(queryRef).getData();
                         List<Map<String, Object>> list = new ArrayList<>();
                         refInfos.forEach(item -> {
                             Map<String, Object> refInfoMap = new HashMap<>();
@@ -462,32 +575,154 @@ public class FuncidDefChangeRecordService {
             funcidDef.setNote(item.getNote());
             funcidDef.setSubFlag(item.getSubFlag());
             funcidDef.setWeakPoint(item.getWeakPoint());
-//            if (!FuncidDataType.REFENUM.equals(item.getDataType())) {
             funcidDef.setDataType(item.getDataType());
             funcidDef.setDataSource(item.getDataSource());
-//            } else {
-//                funcidDef.setDataType(FuncidDataType.ENUM);
-//                ArrayNode dataSource = item.getDataSource();
-//                String refKey = dataSource.get(0).get("refKey").asText();
-//                JacksonCriteria queryRef = JacksonCriteria.newInstance();
-//                queryRef.add("refKey", refKey);
-//                List<RwdeditRefTypeInfos> refInfos = rwdeditRefTypeInfosService.query(queryRef).getData();
-//                funcidDef.setDataSource(JacksonMapper.toObject(JacksonMapper.toSimpleJson(refInfos), ArrayNode.class));
-//            }
             funcidDef.setIsUsed(1);//状态 0.历史版本 1.使用中
             funcidDef.setVersion(version);//版本
             funcidDef.setLastUpdateTime(new Date());//发布时间
-            funcidDefList.add(funcidDef);
+            funcidDef.setOrderSeq(item.getOrderSeq());
+            JacksonCriteria jacksonCriteria = JacksonCriteria.newInstance();
+            ObjectNode criteria =jacksonCriteria.getCriteria();
+            criteria.put("classCode",item.getClassCode());
+            ListResponse<FuncidDefModel> response = funcidDefService.queryFuncid(jacksonCriteria);
+            // 查询信息点是否存在,如果存在则将旧的设置为不可用
             List<FuncidDefModel> funcidDefModelList = queryFuncidDef(item.getCode(), item.getClassCode(), null);
+            String oldFuncId = "";
             if (funcidDefModelList != null) {
                 FuncidDefModel funcidDefModel = funcidDefModelList.get(0);
                 funcidDefModel.setIsUsed(0);
                 funcidDefModel.setLastUpdateTime(new Date());
                 funcidDefList.add(FuncidDef.fromModel(funcidDefModel));
+                oldFuncId = funcidDefModel.getId();
+                funcidDef.setShareType(funcidDefModel.getShareType());
+                funcidDef.setOrderSeq(funcidDefModel.getOrderSeq());
+                funcidDef.setClassCode(funcidDefModel.getClassCode());
+            }
+            List<FuncidDefModel> funcidDefModels = response.getData();
+            if (CollUtil.isNotEmpty(funcidDefModels)){
+                // 获得所有通用信息点
+                List<FuncidDefModel> commonFuncidModels = funcidDefModels
+                        .stream()
+                        .filter(funcidDefModel -> FuncidShareTypeEnum.COMMON.getValue().equals(funcidDefModel.getShareType()))
+                        .sorted(Comparator.comparing(FuncidDefModel::getOrderSeq))
+                        .collect(Collectors.toList());
+                // 获得所有特有信息点
+                List<FuncidDefModel> selfFuncidModels = funcidDefModels
+                        .stream()
+                        .filter(funcidDefModel -> FuncidShareTypeEnum.SELF.getValue().equals(funcidDefModel.getShareType()))
+                        .sorted(Comparator.comparing(FuncidDefModel::getOrderSeq))
+                        .collect(Collectors.toList());
+
+                // 当排序序号为负或0时,代表通用信息点
+                if (item.getOrderSeq()<=0){
+                    if (CollUtil.isEmpty(commonFuncidModels)){
+                        // 错误情况,根据特有信息点重置该信息点排序
+                        resetSelfFuncidSeq(selfFuncidModels,funcidDef,funcidDefList,item.getOrderSeq(),oldFuncId);
+                    }else {
+                        // 根据通用信息点重置该信息点排序
+                        resetCommonFuncidSeq(commonFuncidModels,funcidDef,funcidDefList,item.getOrderSeq(),oldFuncId);
+                    }
+                }else {
+                    // 当排序序号为正时,代表自定义信息点
+                    resetSelfFuncidSeq(selfFuncidModels,funcidDef,funcidDefList,item.getOrderSeq(),oldFuncId);
+                }
             }
+            if(StringUtils.isEmpty(funcidDef.getShareType())){
+                //默认自定义信息点
+                funcidDef.setShareType("2");
+            }else{
+                funcidDef.setShareType(funcidDef.getShareType());
+            }
+            funcidDefList.add(funcidDef);
         });
         funcidDefRepository.saveAll(funcidDefList);
     }
+    /***
+     * Description: 重置通用信息点的排序序号
+     * @param commonFuncidModels : 通用信息点的数据
+     * @param funcidDef : 需要修改的信息点
+     * @param funcidDefList : 保存信息点的列表
+     * @return : void
+     * @author : lijie
+     * @date :2021/7/7 13:52
+     * Update By lijie 2021/7/7 13:52
+     */
+    private void resetCommonFuncidSeq(List<FuncidDefModel> commonFuncidModels,
+                                      FuncidDef funcidDef,
+                                      List<FuncidDef> funcidDefList,
+                                      Integer orderSeq,
+                                      String oldFuncId) {
+        if (CollUtil.isEmpty(commonFuncidModels)){
+            funcidDef.setOrderSeq(-1);
+            return;
+        }
+        int compareSeq = orderSeq+1;
+        if (orderSeq>=0){
+            compareSeq = -commonFuncidModels.size();
+        }
+        funcidDef.setOrderSeq(compareSeq-1);
+        for (FuncidDefModel defModel : commonFuncidModels) {
+            if (defModel.getOrderSeq()<compareSeq
+                    && (StrUtil.isNotBlank(oldFuncId) && !oldFuncId.equals(defModel.getId()))){
+                defModel.setOrderSeq(defModel.getOrderSeq()-1);
+                funcidDefList.add(FuncidDef.fromModel(defModel));
+            }
+        }
+    }
+
+    /***
+     * Description: 重置特有信息点的排序序号
+     * @param selfFuncidModels : 特有信息点的数据
+     * @param funcidDef : 需要修改的信息点
+     * @param funcidDefList : 保存信息点的列表
+     * @return : void
+     * @author : lijie
+     * @date :2021/7/7 13:52
+     * Update By lijie 2021/7/7 13:52
+     */
+    private void resetSelfFuncidSeq(List<FuncidDefModel> selfFuncidModels, FuncidDef funcidDef,
+                                    List<FuncidDef> funcidDefList, Integer orderSeq,String oldFuncId) {
+        if (CollUtil.isEmpty(selfFuncidModels)){
+            // 当特有信息点为空时,设置序号为1
+            funcidDef.setOrderSeq(1);
+            return;
+        }
+        int compareSeq = orderSeq;
+        if (orderSeq<=0){
+            compareSeq = 0;
+        }
+        funcidDef.setOrderSeq(compareSeq+1);
+        for (FuncidDefModel defModel : selfFuncidModels) {
+            if (defModel.getOrderSeq()>compareSeq
+                    && (StrUtil.isNotBlank(oldFuncId) && !oldFuncId.equals(defModel.getId()))){
+                defModel.setOrderSeq(defModel.getOrderSeq()+1);
+                funcidDefList.add(FuncidDef.fromModel(defModel));
+            }
+        }
+    }
+
+    /**
+     * 修改信息点位置
+     * @param funcidDef
+     */
+    public void updateFuncidOrderSeq(FuncidDef funcidDef){
+        int minSeq = 1;
+        boolean flag = false;
+        List<FuncidDef> funcidDefList = new ArrayList<>();
+        List<FuncidDefModel> funcidDefModelList = queryFuncidDef(funcidDef.getClassCode());
+        for(FuncidDefModel funcidDefModel:funcidDefModelList){
+            Integer orderSeq = funcidDefModel.getOrderSeq();
+            Integer nowOrderSeq = funcidDef.getOrderSeq();
+            if(orderSeq == nowOrderSeq+1){
+                flag = true;
+            }
+            if(flag){
+                funcidDefModel.setOrderSeq(funcidDefModel.getOrderSeq()+1);
+                funcidDefList.add(FuncidDef.fromModel(funcidDefModel));
+            }
+        }
+        funcidDefRepository.saveAll(funcidDefList);
+    }
 
     private List<FuncidDefModel> queryFuncidDef(String code, String classCode, String neVersion) {
         List<FuncidDefModel> data = null;
@@ -522,5 +757,129 @@ public class FuncidDefChangeRecordService {
         }
         return null;
     }
+
+    private List<FuncidDefModel> queryFuncidDef(String classCode) {
+        List<FuncidDefModel> data = null;
+        JacksonCriteria criteria = JacksonCriteria.newInstance();
+        criteria.add("type", "common");
+
+        if (classCode != null) {
+            criteria.add("classCode", classCode);
+        }
+        ListResponse<FuncidDefModel> queryFuncid = funcidDefService.query(criteria);
+        data = queryFuncid.getData();
+        if (data != null && data.size() != 0) {
+            return data;
+        }
+        return null;
+    }
+    /**
+     * 添加变更记录
+     * @param funcidDef
+     * @param param
+     * @param cache
+     */
+    private void addChangeRecord(FuncidDefModel funcidDef,FuncidDefChangeRecord param,CacheModel cache){
+        Map<String, Object> beforeParamMap = MapObjUtil.object2Map(funcidDef);
+        Map<String, Object> afterParamMap = MapObjUtil.object2Map(cache);
+        //比较变更记录
+        ArrayNode operationContentBefore = JsonNodeFactory.instance.arrayNode();
+        ArrayNode operationContentAfter = JsonNodeFactory.instance.arrayNode();
+        Set<?> keySets = Collections.unmodifiableSet(beforeParamMap.keySet());
+        for (Map.Entry<?, ?> afterEntry : afterParamMap.entrySet()) {
+            String key = afterEntry.getKey().toString();
+            if(!keySets.contains(key)){
+                continue;
+            }
+            Object afterValue = afterEntry.getValue();
+            Object beforeValue = beforeParamMap.get(afterEntry.getKey());
+            if(ObjectUtils.equals(afterValue,beforeValue)){
+                continue;
+            }
+            if(StringUtils.isBlank(ObjectUtils.toString(afterValue, null)) && StringUtils.isBlank(ObjectUtils.toString(beforeValue, null))){
+               continue;
+            }
+
+            ObjectNode object = JsonNodeFactory.instance.objectNode();
+            //变更前
+            if(beforeValue ==null){
+                object.put(afterEntry.getKey().toString(),"");
+            }else{
+                object.put(afterEntry.getKey().toString(),beforeValue.toString());
+            }
+            operationContentBefore.add(object);
+
+            //变更后
+            object = JsonNodeFactory.instance.objectNode();
+            if(afterValue ==null){
+                object.put(afterEntry.getKey().toString(),"");
+            }else{
+                object.put(afterEntry.getKey().toString(),afterValue.toString());
+            }
+            operationContentAfter.add(object);
+        }
+        param.setOperationContentBefore(operationContentBefore);
+        param.setOperationContentAfter(operationContentAfter);
+    }
+
+    /**
+     * 获取新增记录
+     * @param afterParamMap
+     */
+    public ArrayNode addCreateRecord(Map<?, ?> afterParamMap){
+        ArrayNode operationContentAfter = JsonNodeFactory.instance.arrayNode();
+        for (Map.Entry<?, ?> afterEntry : afterParamMap.entrySet()) {
+            String key = afterEntry.getKey().toString();
+            Object value = afterEntry.getValue();
+            if(value == null){
+                continue;
+            }
+            ObjectNode object = JsonNodeFactory.instance.objectNode();
+            Object dataType = afterParamMap.get("dataType");
+            if(dataType!=null && "REFENUM".equals(dataType.toString()) && "dataSource".equals(key)){
+                //查询知识库refKey的中文名称
+                JSONArray dataSource = JSONArray.parseArray(value.toString());
+                if(dataSource != null && dataSource.size()>0){
+                    String refKey = dataSource.getJSONObject(0).getString("refKey");
+                    RwdeditRefType refType = refTypeRepository.findById(refKey).get();
+                    object.put(afterEntry.getKey().toString(),refType.getName());
+                }
+            }else{
+                object.put(afterEntry.getKey().toString(),value.toString());
+            }
+            operationContentAfter.add(object);
+        }
+        return operationContentAfter;
+    }
+
+
+    @Data
+    private static class CacheModel {
+        private String code;
+        private String origCode;
+        private String name;
+        private String aliasCode;
+        private String aliasName;
+        @Enumerated(EnumType.STRING)
+        private FuncidCategory category;
+       // private String type;
+        private String firstTag;
+        private String secondTag;
+        private String priority;
+        private String inputMode;
+        private String unit;
+        @Enumerated(EnumType.STRING)
+        private FuncidDataType dataType;
+        //private String origDataType;
+        private Boolean isMultiple = false;
+        private Boolean isRegion = false;
+        private String formater;
+        @Type(type = "json")
+        private ArrayNode dataSource;
+        private String note;
+        private Boolean subFlag;
+        private Boolean weakPoint;
+    }
+
 }
 

+ 65 - 3
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/FuncidDefService.java

@@ -1,5 +1,7 @@
 package com.persagy.dmp.rwd.edit.service;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.common.criteria.CriteriaUtils;
@@ -34,18 +36,74 @@ public class FuncidDefService {
     @Autowired
     private CriteriaUtils criteriaUtils;
 
-
+    /***
+     * Description: 根据条件查询信息点
+     * @param request : 请求参数
+     * @return : com.persagy.common.web.ListResponse<com.persagy.dmp.rwd.model.FuncidDefModel>
+     * @author : lijie
+     * @date :2021/6/22 12:17
+     * Update By lijie 2021/6/22 12:17
+     */
     public ListResponse<FuncidDefModel> queryFuncid(JacksonCriteria request) {
+        // 1.根据classCode查询符合条件的信息点
         ListResponse<FuncidDefModel> resp = new ListResponse<>();
         List<FuncidDefModel> list = null;
         boolean hasClassCode = request.getCriteria().has("classCode");
         if (hasClassCode) {
             list = queryWithClassCode(request);
         }
+        // 2.2021年6月22日12:18:10的排序需求
+        if (CollUtil.isNotEmpty(list)){
+            sortFuncidForEdit(list);
+        }
 
         resp.setData(list);
         return resp;
     }
+    /***
+     * Description: 对信息点列表进行排序
+     * @param list : 信息点列表
+     * @return : void
+     * @author : lijie
+     * @date :2021/6/22 12:19
+     * Update By lijie 2021/6/22 12:19
+     */
+    private void sortFuncidForEdit(List<FuncidDefModel> list) {
+        // 一级按照“技术参数-运行参数-设定参数-台账参数”的逻辑展示;
+
+        // 二级按通用信息点、个性化信息点的excel表格进行排序展示;
+        // 三级按照excel表格的逻辑进行排序展示
+        list.sort((k1,k2)->{
+            /*if (StrUtil.isBlank(k1.getFirstTag()) && StrUtil.isBlank(k2.getFirstTag())){
+                int compareTo = StrUtil.blankToDefault(k1.getShareType(),"").compareTo(StrUtil.blankToDefault(k2.getShareType(),""));
+                if (0==compareTo) {
+                    return k1.getOrderSeq().compareTo(k2.getOrderSeq());
+                }
+                return compareTo;
+            }
+            if (StrUtil.isBlank(k2.getFirstTag())){
+                k2.setFirstTag("");
+            }
+            if (StrUtil.isBlank(k1.getFirstTag())){
+                k1.setFirstTag("");
+            }
+            int firstTagSort = k1.getFirstTag().compareTo(k2.getFirstTag());
+            if (0==firstTagSort){
+                int compareTo = StrUtil.blankToDefault(k1.getShareType(),"").compareTo(StrUtil.blankToDefault(k2.getShareType(),""));
+                if (0==compareTo) {
+                    return k1.getOrderSeq().compareTo(k2.getOrderSeq());
+                }
+                return compareTo;
+            }
+            return firstTagSort;*/
+            //2021.07.09需求修改:所有通用放在非通用后面
+            int compareTo = StrUtil.blankToDefault(k1.getShareType(),"").compareTo(StrUtil.blankToDefault(k2.getShareType(),""));
+            if (0==compareTo) {
+                return k1.getOrderSeq().compareTo(k2.getOrderSeq());
+            }
+            return -compareTo;
+        });
+    }
 
     public PagedResponse<FuncidDefModel> query(JacksonCriteria criteria) {
         // 预处理criteria
@@ -60,6 +118,10 @@ public class FuncidDefService {
                 FuncidDefModel model = entity.toModel();
                 return model;
             }).collect(Collectors.toList());
+            //排序
+            if (CollUtil.isNotEmpty(collect)){
+                sortFuncidForEdit(collect);
+            }
             result.setData(collect);
         }
         return result;
@@ -92,14 +154,14 @@ public class FuncidDefService {
                     funcidCriteria.add("classCode", classDefModel.getCode());
                 }
                 List<FuncidDefModel> funcidDefModels = queryWithoutClassCode(funcidCriteria);
-                funcidDefModels.forEach(model -> model.setClassCode(classDefModel.getCode()));
+                //funcidDefModels.forEach(model -> model.setClassCode(classDefModel.getCode()));
                 list.addAll(funcidDefModels);
             }
         }
         return list;
     }
 
-    private List<FuncidDefModel> queryWithoutClassCode(JacksonCriteria request) {
+    public List<FuncidDefModel> queryWithoutClassCode(JacksonCriteria request) {
         Map<String, FuncidDefModel> cache = new HashMap<>();
         // 预处理criteria
         classCodeUtils.prepareCriteriaForFuncid(request, "classCode");

+ 70 - 12
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/RwdeditRefTypeInfosService.java

@@ -1,22 +1,30 @@
 package com.persagy.dmp.rwd.edit.service;
 
+import cn.hutool.core.collection.CollUtil;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.common.criteria.CriteriaUtils;
 import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.json.JacksonMapper;
 import com.persagy.common.web.MapResponse;
 import com.persagy.common.web.PagedResponse;
 import com.persagy.dmp.rwd.edit.config.web.UserUtils;
 import com.persagy.dmp.rwd.edit.entity.QRwdeditRefTypeInfos;
+import com.persagy.dmp.rwd.edit.entity.RwdeditRefType;
 import com.persagy.dmp.rwd.edit.entity.RwdeditRefTypeInfos;
+import com.persagy.dmp.rwd.edit.model.RwdeditRefTypeModel;
 import com.persagy.dmp.rwd.edit.repository.RwdeditRefTypeInfosRepository;
+import com.persagy.dmp.rwd.model.ClassDefModel;
+import com.persagy.dmp.rwd.model.RwdeditRefTypeInfosModel;
 import com.querydsl.core.types.dsl.BooleanExpression;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.transaction.Transactional;
-import java.util.LinkedList;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Slf4j
 @Service
@@ -30,16 +38,64 @@ public class RwdeditRefTypeInfosService {
 
     private List<BooleanExpression> parse(ObjectNode object) {
         List<BooleanExpression> list = new LinkedList<>();
-        QRwdeditRefTypeInfos qt = QRwdeditRefTypeInfos.rwdeditRefTypeInfos;
-        list.addAll(CriteriaUtils.parse(qt.refKey, object.get("refKey")));
-        list.addAll(CriteriaUtils.parse(qt.code, object.get("code")));
-        list.addAll(CriteriaUtils.parse(qt.createUser, object.get("createUser")));
-        list.addAll(CriteriaUtils.parse(qt.updateUser, object.get("updateUser")));
+//        QRwdeditRefTypeInfos qt = QRwdeditRefTypeInfos.rwdeditRefTypeInfos;
+//        list.addAll(CriteriaUtils.parse(qt.refKey, object.get("refKey")));
+//        list.addAll(CriteriaUtils.parse(qt.code, object.get("code")));
+//        list.addAll(CriteriaUtils.parse(qt.createUser, object.get("createUser")));
+//        list.addAll(CriteriaUtils.parse(qt.updateUser, object.get("updateUser")));
         return list;
     }
 
-    public PagedResponse<RwdeditRefTypeInfos> query(JacksonCriteria criteria) {
-        return criteriaUtils.query(QRwdeditRefTypeInfos.rwdeditRefTypeInfos, this::parse, criteria);
+    public PagedResponse<RwdeditRefTypeInfosModel> query(JacksonCriteria criteria) {
+        // 1.根据条件查询数据
+        PagedResponse<RwdeditRefTypeInfos> destRefTypeInfos = criteriaUtils.query(QRwdeditRefTypeInfos.rwdeditRefTypeInfos, this::parse, criteria);
+        PagedResponse<RwdeditRefTypeInfosModel> result = new PagedResponse<>();
+        List<RwdeditRefTypeInfos> dataList = destRefTypeInfos.getData();
+        if (CollUtil.isNotEmpty(dataList)) {
+            // 2.根据父级code查询数据
+            ArrayNode parentCodes = JacksonMapper.nonDefaultMapper.createArrayNode();
+            Set<String> filterIds = new HashSet<>();
+            dataList.forEach(entity->{
+                if (!filterIds.contains(entity.getCodePath())){
+                    parentCodes.add(entity.getCodePath().substring(0,entity.getCodePath().lastIndexOf("-")));
+                    filterIds.add(entity.getCodePath());
+                }
+            });
+            JacksonCriteria allCriteria = JacksonCriteria.newInstance();
+            ObjectNode objectNode = JacksonMapper.nonDefaultMapper.createObjectNode();
+            ObjectNode parentCodeNode = JacksonMapper.nonDefaultMapper.createObjectNode();
+            parentCodeNode.put("$in",parentCodes);
+            objectNode.put("codePath", parentCodeNode);
+            allCriteria.setCriteria(objectNode);
+            allCriteria.setWithColumns(new HashSet<>(Arrays.asList("code","name","codePath")));
+            allCriteria.setWithoutCount(true);
+
+            PagedResponse<RwdeditRefTypeInfos> allRefTypeInfos = criteriaUtils.query(QRwdeditRefTypeInfos.rwdeditRefTypeInfos, this::parse, allCriteria);
+            List<RwdeditRefTypeInfos> allRefTypeInfosData = allRefTypeInfos.getData();
+            Map<String, String> nameMap = allRefTypeInfosData.stream()
+                    .collect(Collectors
+                            .toMap(RwdeditRefTypeInfos::getCodePath, RwdeditRefTypeInfos::getName, (k1, k2) -> k1));
+            List<RwdeditRefTypeInfosModel> collect = dataList.stream().map(entity -> {
+                RwdeditRefTypeInfosModel model = entity.toModel();
+                ObjectNode dataSource = entity.getDataSource();
+                if (null==dataSource){
+                    dataSource = JacksonCriteria.newInstance().getCriteria();
+                }
+                String parentName = nameMap.getOrDefault(entity.getCodePath().substring(0, entity.getCodePath().lastIndexOf("-")), "");
+                dataSource.put("code",entity.getCode());
+                dataSource.put("name",entity.getName());
+                dataSource.put("parentCode",entity.getParentCode());
+                dataSource.put("parentName",parentName);
+                model.setDataSource(dataSource);
+                model.setParentName(parentName);
+                return model;
+            }).collect(Collectors.toList());
+            //增加默认排序
+            collect = collect.stream().sorted(Comparator.comparing(RwdeditRefTypeInfosModel::getSeq, Comparator.nullsLast(Integer::compareTo))).collect(Collectors.toList());
+            result.setData(collect);
+        }
+        result.setCount(destRefTypeInfos.getCount());
+        return result;
     }
 
     @Transactional
@@ -91,11 +147,13 @@ public class RwdeditRefTypeInfosService {
             response.setFail("refKey and code not exists");
             return response;
         }
-        RwdeditRefTypeInfos entity = query(criteria).getData().get(0);
+        RwdeditRefTypeInfosModel model = query(criteria).getData().get(0);
+        RwdeditRefTypeInfos entity = RwdeditRefTypeInfos.fromModel(model);
         entity.setUpdateUser(UserUtils.currentUserId());
         if (refTypeInfos.getName() != null) {
             entity.setName(refTypeInfos.getName());
         }
+
         repository.save(entity);
         return response;
     }
@@ -116,13 +174,13 @@ public class RwdeditRefTypeInfosService {
         JacksonCriteria criteria = JacksonCriteria.newInstance();
         criteria.add("refKey", refKey);
         criteria.add("code", code);
-        PagedResponse<RwdeditRefTypeInfos> query = query(criteria);
+        PagedResponse<RwdeditRefTypeInfosModel> query = query(criteria);
         Long count = query.getCount();
         if (count == 0L) {
             response.setFail("refKey and code not exists");
             return response;
         }
-        repository.delete(query.getData().get(0));
+        repository.delete(RwdeditRefTypeInfos.fromModel(query.getData().get(0)));
         return response;
     }
 }

+ 4 - 4
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/RwdeditRefTypeService.java

@@ -10,16 +10,14 @@ import com.persagy.dmp.rwd.edit.entity.QRwdeditRefType;
 import com.persagy.dmp.rwd.edit.entity.RwdeditRefType;
 import com.persagy.dmp.rwd.edit.model.RwdeditRefTypeModel;
 import com.persagy.dmp.rwd.edit.repository.RwdeditRefTypeRepository;
+import com.persagy.dmp.rwd.model.RwdeditRefTypeInfosModel;
 import com.querydsl.core.types.dsl.BooleanExpression;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.transaction.Transactional;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Optional;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Slf4j
@@ -55,6 +53,8 @@ public class RwdeditRefTypeService {
                 }
                 return model;
             }).collect(Collectors.toList());
+            //增加默认排序
+            collect = collect.stream().sorted(Comparator.comparing(RwdeditRefTypeModel::getSeq, Comparator.nullsLast(Integer::compareTo))).collect(Collectors.toList());
             result.setData(collect);
         }
         return result;

+ 15 - 12
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/UploadService.java

@@ -86,18 +86,19 @@ public class UploadService {
         info2.add(0, "classCode", "string");
         info2.add(2, "firstTag", "string");
         info2.add(3, "secondTag", "string");
-        info2.add(4, "code", "string");
-        info2.add(5, "aliasCode", "string");
-        info2.add(6, "name", "string");
-        info2.add(7, "category", "string");
-        info2.add(8, "priority", "string");
-        info2.add(9, "unit", "string");
-        info2.add(10, "dataType", "string");
-        info2.add(11, "isMultiple", "integer");
-        info2.add(12, "isRegion", "integer");
-        info2.add(13, "dataSource", "string");
-        info2.add(14, "formater", "string");
-        info2.add(15, "note", "string");
+        info2.add(4, "orderSeq", "integer");
+        info2.add(5, "code", "string");
+        info2.add(6, "aliasCode", "string");
+        info2.add(7, "name", "string");
+        info2.add(8, "category", "string");
+        info2.add(9, "priority", "string");
+        info2.add(10, "unit", "string");
+        info2.add(11, "dataType", "string");
+        info2.add(12, "isMultiple", "integer");
+        info2.add(13, "isRegion", "integer");
+        info2.add(14, "dataSource", "string");
+        info2.add(15, "formater", "string");
+        info2.add(16, "note", "string");
 
         List<List<Map<String, Object>>> result = ExcelUtils.read(file.getInputStream(), Arrays.asList(info1, info2), Arrays.asList("类型变更", "信息点变更"));
         List<ClassDefChangeRecord> classDefChangeRecordList = compareDataExcelReadClass(result.get(0));
@@ -197,6 +198,7 @@ public class UploadService {
             String classCode = MapUtils.getString(map, "classCode");
             String firstTag = MapUtils.getString(map, "firstTag");
             String secondTag = MapUtils.getString(map, "secondTag");
+            Integer orderSeq = MapUtils.getInteger(map, "orderSeq");
             String code = MapUtils.getString(map, "code");
             String aliasCode = MapUtils.getString(map, "aliasCode");
             String name = MapUtils.getString(map, "name");
@@ -321,6 +323,7 @@ public class UploadService {
             changeRecord.setNote(note);
             changeRecord.setFirstTag(firstTag);
             changeRecord.setSecondTag(secondTag);
+            changeRecord.setOrderSeq(orderSeq);
             funcidDefChangeRecordList.add(changeRecord);
         }
         return funcidDefChangeRecordList;

+ 37 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/util/MapObjUtil.java

@@ -0,0 +1,37 @@
+package com.persagy.dmp.rwd.edit.util;
+
+import java.lang.reflect.Field;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * Description
+ *
+ * @author:linhuili
+ * @date:2021/6/29
+ */
+public class MapObjUtil {
+    /**
+     * 实体对象转成Map
+     *
+     * @param obj 实体对象
+     * @return
+     */
+    public static Map<String, Object> object2Map(Object obj) {
+        Map<String, Object> map = new LinkedHashMap<>();
+        if (obj == null) {
+            return map;
+        }
+        Class clazz = obj.getClass();
+        Field[] fields = clazz.getDeclaredFields();
+        try {
+            for (Field field : fields) {
+                field.setAccessible(true);
+                map.put(field.getName(), field.get(obj));
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return map;
+    }
+}

+ 0 - 24
dmp-rwd-edit/src/main/resources/application-dev.yml

@@ -1,24 +0,0 @@
-server:
-  port: 8838
-spring:
-  datasource:
-    driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://192.168.64.15:9934/dmp_rwdedit?useUnicode=true&characterEncoding=utf-8&mysqlEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
-    username: root
-    password: brzj123456
-    type: com.alibaba.druid.pool.DruidDataSource
-    jpa:
-      show-sql: true
-      hibernate:
-        ddl-auto: none
-  redis:
-    database: 10
-    host: 192.168.64.15
-    password: brzj123456
-    port: 9944
-    timeout: 6000
-    pool:
-      max-idle: 200
-      min-idle: 5
-      max-active: 1024
-      max-wait: 1000

+ 0 - 37
dmp-rwd-edit/src/main/resources/application.yml

@@ -1,37 +0,0 @@
-server:
-  port: 8838
-persagy:
-  dmp:
-    server: http://192.168.64.18:9930
-    #    server: http://39.102.40.239:9970
-    exchange: exchange-dmp
-    admin:
-      routingKey: routing-dmp-rwdedit
-      queue: queue-dmp-rwdedit
-spring:
-  application:
-    name: dmp-rwdedit
-  profiles:
-    active:
-      - dev,log-dev
-  datasource:
-    driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://192.168.64.15:9934/dmp_rwdedit?useUnicode=true&characterEncoding=utf-8&mysqlEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
-    username: root
-    password: brzj123456
-    type: com.alibaba.druid.pool.DruidDataSource
-    jpa:
-      show-sql: true
-      hibernate:
-        ddl-auto: none
-  redis:
-    database: 10
-    host: 192.168.64.15
-    password: brzj123456
-    port: 9944
-    timeout: 6000
-    pool:
-      max-idle: 200
-      min-idle: 5
-      max-active: 1024
-      max-wait: 1000

dmp-rwd-edit/src/main/resources/application-aliyun-dev.yml → dmp-rwd-edit/src/main/resources/bootstrap-aliyun-dev.yml


+ 1 - 1
dmp-rwd-edit/src/main/resources/application-aliyun-test.yml

@@ -10,7 +10,7 @@ persagy:
       queue: queue-dmp-rwdedit
 spring:
   application:
-    name: dmp-rwdedit
+    name: dmp-rwd-edit
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
     url: jdbc:mysql://localhost:9005/dmp_rwdedit?useUnicode=true&characterEncoding=utf-8&mysqlEncoding=utf8&useSSL=false

+ 10 - 0
dmp-rwd-edit/src/main/resources/bootstrap-dev.yml

@@ -0,0 +1,10 @@
+server:
+  port: 8838
+spring:
+  cloud:
+    config:
+      profile: dev2
+      uri: http://192.168.64.18:9932
+      allowOverride: true
+      overrideNone: true
+      overrideSystemProperties: false

+ 7 - 0
dmp-rwd-edit/src/main/resources/bootstrap.yml

@@ -0,0 +1,7 @@
+server:
+  port: 8838
+spring:
+  application:
+    name: dmp-rwd-edit
+  profiles:
+    active: dev

Dosya farkı çok büyük olduğundan ihmal edildi
+ 69 - 0
dmp-rwd-edit/src/main/resources/config/config.sql


+ 3 - 0
dmp-rwd-edit/src/main/resources/ddl/rwd_def_funcid.sql

@@ -0,0 +1,3 @@
+-- 2021年6月22日11:11:46 更改表结构 新增两个字段:share_type,order_seq
+alter table rwd_def_funcid Add column `share_type` varchar(10) DEFAULT '2' COMMENT '通用信息点标记,1-通用信息点,2-个性化信息点';
+alter table rwd_def_funcid Add column `order_seq` int(10) DEFAULT NULL COMMENT '逻辑排序序号';

+ 3 - 3
dmp-rwd-edit/src/main/resources/logback-spring.xml

@@ -30,7 +30,7 @@
     <logger name="com.netflix" level="WARN"/>
     <logger name="org.apache.http" level="INFO"/>
 
-    <springProfile name="log-dev">
+    <springProfile name="dev">
         <logger name="org.hibernate.SQL" level="DEBUG"/>
         <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/>
         <root level="info">
@@ -38,7 +38,7 @@
         </root>
     </springProfile>
 
-    <springProfile name="log-test">
+    <springProfile name="test">
         <logger name="org.hibernate.SQL" level="DEBUG"/>
         <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/>
         <root level="info">
@@ -46,7 +46,7 @@
         </root>
     </springProfile>
 
-    <springProfile name="log-prod">
+    <springProfile name="prod">
         <root level="info">
             <appender-ref ref="file"/>
         </root>

BIN
dmp-rwd-edit/src/main/resources/static/file/批量上传变更记录模板.xlsx


+ 0 - 118
dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/ClassDefTest.java

@@ -1,118 +0,0 @@
-package com.persagy.dmp.rwd.edit;
-
-import com.persagy.common.criteria.JacksonCriteria;
-import com.persagy.common.json.JacksonMapper;
-import com.persagy.common.web.ListResponse;
-import com.persagy.common.web.MapResponse;
-import com.persagy.common.web.PagedResponse;
-import com.persagy.dmp.rwd.edit.entity.ClassDefChangeRecord;
-import com.persagy.dmp.rwd.edit.enumeration.EnumOperationType;
-import com.persagy.dmp.rwd.edit.service.ClassDefChangeRecordService;
-import com.persagy.dmp.rwd.edit.service.ClassDefService;
-import com.persagy.dmp.rwd.enums.ObjType;
-import com.persagy.dmp.rwd.model.ClassDefModel;
-import lombok.extern.slf4j.Slf4j;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@Slf4j
-@SpringBootTest
-@RunWith(SpringRunner.class)
-public class ClassDefTest {
-
-    @Autowired
-    private ClassDefService classDefService;
-
-    @Autowired
-    private ClassDefChangeRecordService classDefChangeRecordService;
-
-    /**
-     * 查询类型数据
-     */
-    @Test
-    public void queryClass() {
-        JacksonCriteria criteria = JacksonCriteria.newInstance();
-        criteria.add("parentCode").isNull(true);
-        criteria.add("type", "common");
-        ListResponse<ClassDefModel> response = classDefService.queryClass(criteria);
-        System.err.println(JacksonMapper.toFormatJson(response));
-    }
-
-    /**
-     * 查询类型变更记录
-     */
-    @Test
-    public void query() {
-        JacksonCriteria criteria = JacksonCriteria.newInstance();
-        criteria.add("type", "common");
-        PagedResponse<ClassDefChangeRecord> query = classDefChangeRecordService.query(criteria);
-        System.err.println(JacksonMapper.toFormatJson(query));
-    }
-
-    /**
-     * 创建类型变更记录
-     */
-    @Test
-    public void create() {
-        ClassDefChangeRecord param = new ClassDefChangeRecord();
-        param.setCode("eq01");
-        param.setName("eq01");
-        param.setGroupCode("0");
-        param.setObjType(ObjType.component);
-        param.setAliasCode("eq01");
-        param.setAliasName("eq01");
-        param.setType("common");
-        param.setProjectId("0");
-        param.setMajorCode("AC");
-        param.setSystemCode("ACVT");
-        param.setEquipmentCode("ACVTSF");
-        param.setParentCode("component");
-        param.setOperationType(EnumOperationType.create);
-        MapResponse response = classDefChangeRecordService.create(param);
-        System.err.println(JacksonMapper.toFormatJson(response));
-    }
-
-    /**
-     * 修改类型变更记录
-     */
-    @Test
-    public void update() {
-        ClassDefChangeRecord param = new ClassDefChangeRecord();
-        param.setId(2);
-        param.setCode("eq01");
-        param.setAliasCode("eq01");
-        param.setAliasName("eq02");
-        MapResponse response = classDefChangeRecordService.update(param);
-        System.err.println(JacksonMapper.toFormatJson(response));
-    }
-
-    /**
-     * 类型变更记录添加版本
-     */
-    @Test
-    public void addVersion() {
-        String version = "1.0.0";
-        List<Integer> idList = new ArrayList<>();
-        idList.add(2);
-        MapResponse response = classDefChangeRecordService.addVersion(version, idList);
-        System.err.println(JacksonMapper.toFormatJson(response));
-    }
-
-    /**
-     * 删除类型变更记录
-     */
-    @Test
-    public void delete() {
-        ClassDefChangeRecord param = new ClassDefChangeRecord();
-        param.setId(2);
-        MapResponse response = classDefChangeRecordService.delete(param);
-        System.err.println(JacksonMapper.toFormatJson(response));
-    }
-
-}

+ 0 - 132
dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/FuncidDefTest.java

@@ -1,132 +0,0 @@
-package com.persagy.dmp.rwd.edit;
-
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.persagy.common.criteria.JacksonCriteria;
-import com.persagy.common.json.JacksonMapper;
-import com.persagy.common.web.ListResponse;
-import com.persagy.common.web.MapResponse;
-import com.persagy.common.web.PagedResponse;
-import com.persagy.dmp.rwd.edit.entity.FuncidDefChangeRecord;
-import com.persagy.dmp.rwd.edit.enumeration.EnumOperationType;
-import com.persagy.dmp.rwd.edit.service.FuncidDefChangeRecordService;
-import com.persagy.dmp.rwd.edit.service.FuncidDefService;
-import com.persagy.dmp.rwd.enums.FuncidCategory;
-import com.persagy.dmp.rwd.enums.FuncidDataType;
-import com.persagy.dmp.rwd.model.FuncidDefModel;
-import lombok.extern.slf4j.Slf4j;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@Slf4j
-@SpringBootTest
-@RunWith(SpringRunner.class)
-public class FuncidDefTest {
-
-    @Autowired
-    private FuncidDefService funcidDefService;
-
-    @Autowired
-    private FuncidDefChangeRecordService funcidDefChangeRecordService;
-
-    /**
-     * 查询信息点数据
-     */
-    @Test
-    public void queryFuncid() {
-        JacksonCriteria criteria = JacksonCriteria.newInstance();
-        criteria.add("classCode", "FFSC");
-        criteria.add("type", "common");
-        ListResponse<FuncidDefModel> response = funcidDefService.queryFuncid(criteria);
-        System.err.println(JacksonMapper.toFormatJson(response));
-    }
-
-    /**
-     * 查询信息点变更记录
-     */
-    @Test
-    public void query() {
-        JacksonCriteria criteria = JacksonCriteria.newInstance();
-        criteria.add("type", "common");
-        PagedResponse<FuncidDefChangeRecord> query = funcidDefChangeRecordService.query(criteria);
-        System.err.println(JacksonMapper.toFormatJson(query));
-    }
-
-    /**
-     * 创建信息点变更记录
-     */
-    @Test
-    public void create() {
-        FuncidDefChangeRecord param = new FuncidDefChangeRecord();
-        param.setCode("funcid01");
-        param.setGroupCode("0");
-        param.setProjectId("0");
-        param.setName("funcid01");
-        param.setAliasCode("funcid01");
-        param.setAliasName("funcid01");
-        param.setClassCode("ACCH");
-        param.setCategory(FuncidCategory.STATIC);
-        param.setType("common");
-        param.setFirstTag("1");
-        param.setSecondTag("2");
-        param.setPriority("S");
-        param.setInputMode("A2");
-        param.setUnit("m");
-        param.setDataType(FuncidDataType.INTEGER);
-        param.setIsMultiple(false);
-        param.setIsRegion(false);
-        ArrayNode dataSource = JacksonMapper.toObject("[{$gt:10, $lt:50}]", ArrayNode.class);
-        param.setDataSource(dataSource);
-        param.setNote("备注");
-        param.setSubFlag(false);
-        param.setWeakPoint(false);
-        param.setOperationType(EnumOperationType.create);
-        MapResponse response = funcidDefChangeRecordService.create(param);
-        System.err.println(JacksonMapper.toFormatJson(response));
-    }
-
-    /**
-     * 修改信息点变更记录
-     */
-    @Test
-    public void update() {
-        FuncidDefChangeRecord param = new FuncidDefChangeRecord();
-        param.setId(24);
-        param.setCode("funcid01");
-        param.setFirstTag("111");
-        param.setSecondTag("222");
-        param.setAliasCode("funcid01");
-        param.setAliasName("funcid01");
-        param.setNote("备注");
-        MapResponse response = funcidDefChangeRecordService.update(param);
-        System.err.println(JacksonMapper.toFormatJson(response));
-    }
-
-    /**
-     * 信息点变更记录添加版本
-     */
-    @Test
-    public void addVersion() {
-        String version = "1.0.1";
-        List<Integer> idList = new ArrayList<>();
-        idList.add(24);
-        MapResponse response = funcidDefChangeRecordService.addVersion(version, idList);
-        System.err.println(JacksonMapper.toFormatJson(response));
-    }
-
-    /**
-     * 删除信息点变更记录
-     */
-    @Test
-    public void delete() {
-        FuncidDefChangeRecord param = new FuncidDefChangeRecord();
-        param.setId(24);
-        MapResponse response = funcidDefChangeRecordService.delete(param);
-        System.err.println(JacksonMapper.toFormatJson(response));
-    }
-}

+ 0 - 77
dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/RefTypeInfoTest.java

@@ -1,77 +0,0 @@
-package com.persagy.dmp.rwd.edit;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.persagy.common.criteria.JacksonCriteria;
-import com.persagy.common.json.JacksonMapper;
-import com.persagy.common.web.MapResponse;
-import com.persagy.common.web.PagedResponse;
-import com.persagy.dmp.rwd.edit.entity.RwdeditRefTypeInfos;
-import com.persagy.dmp.rwd.edit.service.RwdeditRefTypeInfosService;
-import lombok.extern.slf4j.Slf4j;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-@Slf4j
-@SpringBootTest
-@RunWith(SpringRunner.class)
-public class RefTypeInfoTest {
-
-    @Autowired
-    private RwdeditRefTypeInfosService rwdeditRefTypeInfosService;
-
-    /**
-     * 查询引用类型详情
-     */
-    @Test
-    public void query() {
-        JacksonCriteria criteria = JacksonCriteria.newInstance();
-        criteria.add("parentCode").isNull(true);
-        PagedResponse<RwdeditRefTypeInfos> query = rwdeditRefTypeInfosService.query(criteria);
-        System.err.println(JacksonMapper.toFormatJson(query));
-    }
-
-    /**
-     * 创建引用类型详情
-     */
-    @Test
-    public void create() {
-        RwdeditRefTypeInfos param = new RwdeditRefTypeInfos();
-        param.setRefKey("ref01");
-        param.setCode("info01");
-        param.setName("info01");
-        param.setParentCode("info01");
-        ObjectNode object = JacksonMapper.toObject("{test:test}", ObjectNode.class);
-        param.setDataSource(object);
-        MapResponse response = rwdeditRefTypeInfosService.create(param);
-        System.err.println(JacksonMapper.toFormatJson(response));
-    }
-
-    /**
-     * 修改引用类型详情
-     */
-    @Test
-    public void update() {
-        RwdeditRefTypeInfos param = new RwdeditRefTypeInfos();
-        param.setRefKey("ref01");
-        param.setCode("info01");
-        param.setName("info02");
-        MapResponse response = rwdeditRefTypeInfosService.update(param);
-        System.err.println(JacksonMapper.toFormatJson(response));
-    }
-
-    /**
-     * 删除引用类型详情
-     */
-    @Test
-    public void delete() {
-        RwdeditRefTypeInfos param = new RwdeditRefTypeInfos();
-        param.setRefKey("ref01");
-        param.setCode("info01");
-        MapResponse response = rwdeditRefTypeInfosService.delete(param);
-        System.err.println(JacksonMapper.toFormatJson(response));
-    }
-
-}

+ 0 - 69
dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/RefTypeTest.java

@@ -1,69 +0,0 @@
-package com.persagy.dmp.rwd.edit;
-
-import com.persagy.common.criteria.JacksonCriteria;
-import com.persagy.common.json.JacksonMapper;
-import com.persagy.common.web.MapResponse;
-import com.persagy.common.web.PagedResponse;
-import com.persagy.dmp.rwd.edit.model.RwdeditRefTypeModel;
-import com.persagy.dmp.rwd.edit.service.RwdeditRefTypeService;
-import lombok.extern.slf4j.Slf4j;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-@Slf4j
-@SpringBootTest
-@RunWith(SpringRunner.class)
-public class RefTypeTest {
-
-    @Autowired
-    private RwdeditRefTypeService rwdeditRefTypeService;
-
-    /**
-     * 查询引用类型
-     */
-    @Test
-    public void query() {
-        JacksonCriteria criteria = JacksonCriteria.newInstance();
-        PagedResponse<RwdeditRefTypeModel> query = rwdeditRefTypeService.query(criteria);
-        System.err.println(JacksonMapper.toFormatJson(query));
-    }
-
-    /**
-     * 创建引用类型
-     */
-    @Test
-    public void create() {
-        RwdeditRefTypeModel param = new RwdeditRefTypeModel();
-        param.setRefKey("ref01");
-        param.setName("ref01");
-        MapResponse response = rwdeditRefTypeService.create(param);
-        System.err.println(JacksonMapper.toFormatJson(response));
-    }
-
-    /**
-     * 修改引用类型
-     */
-    @Test
-    public void update() {
-        RwdeditRefTypeModel param = new RwdeditRefTypeModel();
-        param.setRefKey("ref01");
-        param.setName("ref01");
-        MapResponse response = rwdeditRefTypeService.update(param);
-        System.err.println(JacksonMapper.toFormatJson(response));
-    }
-
-    /**
-     * 删除引用类型
-     */
-    @Test
-    public void delete() {
-        RwdeditRefTypeModel param = new RwdeditRefTypeModel();
-        param.setRefKey("ref01");
-        MapResponse response = rwdeditRefTypeService.delete(param);
-        System.err.println(JacksonMapper.toFormatJson(response));
-    }
-
-}

+ 0 - 77
dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/RwdeditVersionTest.java

@@ -1,77 +0,0 @@
-package com.persagy.dmp.rwd.edit;
-
-import com.persagy.common.criteria.JacksonCriteria;
-import com.persagy.common.json.JacksonMapper;
-import com.persagy.common.web.MapResponse;
-import com.persagy.common.web.PagedResponse;
-import com.persagy.dmp.rwd.edit.entity.RwdeditVersion;
-import com.persagy.dmp.rwd.edit.enumeration.EnumVersionState;
-import com.persagy.dmp.rwd.edit.service.RwdeditVersionService;
-import lombok.extern.slf4j.Slf4j;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-@Slf4j
-@SpringBootTest
-@RunWith(SpringRunner.class)
-public class RwdeditVersionTest {
-
-    @Autowired
-    private RwdeditVersionService rwdeditVersionService;
-
-    /**
-     * 查询版本信息
-     */
-    @Test
-    public void query() {
-        JacksonCriteria criteria = JacksonCriteria.newInstance();
-        PagedResponse<RwdeditVersion> query = rwdeditVersionService.query(criteria);
-        System.err.println(JacksonMapper.toFormatJson(query));
-    }
-
-    /**
-     * 创建版本信息
-     */
-    @Test
-    public void create() {
-        RwdeditVersion param = new RwdeditVersion();
-        param.setVersion("1.0.1");
-        MapResponse response = rwdeditVersionService.create(param);
-        System.err.println(JacksonMapper.toFormatJson(response));
-    }
-
-    /**
-     * 修改版本信息
-     */
-    @Test
-    public void update() {
-        RwdeditVersion param = new RwdeditVersion();
-        param.setVersion("1.0.1");
-        param.setState(EnumVersionState.INIT);
-        MapResponse response = rwdeditVersionService.update(param);
-        System.err.println(JacksonMapper.toFormatJson(response));
-    }
-
-    /**
-     * 删除版本信息
-     */
-    @Test
-    public void delete() {
-        RwdeditVersion param = new RwdeditVersion();
-        param.setVersion("1.0.1");
-        MapResponse response = rwdeditVersionService.delete(param);
-        System.err.println(JacksonMapper.toFormatJson(response));
-    }
-
-    /**
-     * 下载版本信息
-     */
-    @Test
-    public void download() {
-        System.err.println("*************");
-    }
-
-}

+ 547 - 0
dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/service/AdminRoleServiceTest.java

@@ -0,0 +1,547 @@
+package com.persagy.dmp.rwd.edit.service;
+
+import com.persagy.common.criteria.CriteriaExpressionParser;
+import com.persagy.common.criteria.CriteriaUtils;
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.BaseResponse;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.rwd.edit.entity.AdminPermission;
+import com.persagy.dmp.rwd.edit.entity.AdminRole;
+import com.persagy.dmp.rwd.edit.entity.QAdminPermission;
+import com.persagy.dmp.rwd.edit.entity.QAdminRole;
+import com.persagy.dmp.rwd.edit.repository.AdminPermissionRepository;
+import com.persagy.dmp.rwd.edit.repository.AdminRoleRepository;
+import com.querydsl.core.BooleanBuilder;
+import com.querydsl.core.types.dsl.BooleanExpression;
+import org.junit.Assert;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import java.util.*;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
+//@RunWith(MockitoJUnitRunner.Silent.class)
+class AdminRoleServiceTest {
+
+    @Mock
+    private AdminRoleRepository mockAdminRoleRepository;
+    @Mock
+    private AdminPermissionRepository mockPermissionRepository;
+    @Mock
+    private CriteriaUtils mockCriteriaUtils;
+
+    @InjectMocks
+    private AdminRoleService adminRoleServiceUnderTest;
+
+    @Test
+    void testQuery() {
+        // Setup
+        final JacksonCriteria criteria = JacksonCriteria.newInstance();
+        when(mockCriteriaUtils.query(eq(new QAdminRole("adminRole")), any(CriteriaExpressionParser.class), any(JacksonCriteria.class)))
+                .thenReturn(new PagedResponse<>());
+
+        // Run the test
+        final PagedResponse<AdminRole> result = adminRoleServiceUnderTest.query(criteria);
+
+        // Verify the results
+        for (AdminRole datum : result.getData()) {
+            Assert.assertNotNull("角色名称为空",datum.getName());
+        }
+    }
+
+    @Test
+    void testCreate() {
+        // Setup
+        final AdminRole param = new AdminRole();
+        param.setId(0);
+        param.setName("name");
+        param.setRemark("remark");
+        param.setStatus(0);
+        param.setCreateUser(0);
+        param.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setUpdateUser(0);
+        param.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        final AdminPermission adminPermission = new AdminPermission();
+        adminPermission.setId(0);
+        adminPermission.setSign("sign");
+        adminPermission.setName("name");
+        adminPermission.setRemark("remark");
+        adminPermission.setStatus(0);
+        adminPermission.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminPermission.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setPermissions(Collections.singletonList(adminPermission));
+        BooleanExpression booleanExpression = new QAdminRole("adminRole").name.eq("name");
+        when(mockAdminRoleRepository.count(booleanExpression)).thenReturn(0L);
+
+        // Configure AdminRoleRepository.save(...).
+        final AdminRole adminRole = new AdminRole();
+        adminRole.setId(0);
+        adminRole.setName("name");
+        adminRole.setRemark("remark");
+        adminRole.setStatus(0);
+        adminRole.setCreateUser(0);
+        adminRole.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminRole.setUpdateUser(0);
+        adminRole.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        final AdminPermission adminPermission1 = new AdminPermission();
+        adminPermission1.setId(0);
+        adminPermission1.setSign("sign");
+        adminPermission1.setName("name");
+        adminPermission1.setRemark("remark");
+        adminPermission1.setStatus(0);
+        adminPermission1.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminPermission1.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminRole.setPermissions(Collections.singletonList(adminPermission1));
+        // when(mockAdminRoleRepository.save(any(AdminRole.class))).thenReturn(adminRole);
+        when(mockAdminRoleRepository.save(any(AdminRole.class))).thenReturn(adminRole);
+        // Run the test
+        final MapResponse result = adminRoleServiceUnderTest.create(param);
+
+        // Verify the results
+        //Assert.assertEquals("测试名称为空失败","name is required",result.getMessage());
+        Assert.assertEquals("处理结果成功", BaseResponse.SUCCESS,result.getResult());
+    }
+    @Test
+    void testCreate_nameisNull() {
+        // Setup
+        final AdminRole param = new AdminRole();
+        param.setId(0);
+        //param.setName("name");
+        param.setRemark("remark");
+        param.setStatus(0);
+        param.setCreateUser(0);
+        param.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setUpdateUser(0);
+        param.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        final AdminPermission adminPermission = new AdminPermission();
+        adminPermission.setId(0);
+        adminPermission.setSign("sign");
+        adminPermission.setName("name");
+        adminPermission.setRemark("remark");
+        adminPermission.setStatus(0);
+        adminPermission.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminPermission.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setPermissions(Collections.singletonList(adminPermission));
+        //BooleanExpression booleanExpression = new QAdminRole("adminRole").name.eq("abc");
+        //when(mockAdminRoleRepository.count(booleanExpression)).thenReturn(0L);
+        // Run the test
+        final MapResponse result = adminRoleServiceUnderTest.create(param);
+        // Verify the results
+        Assert.assertEquals("测试名称为空失败","name is required",result.getMessage());
+        //Assert.assertNotNull("主键为空",result.getString("id"));
+    }
+    @Test
+    void testCreate_nameExist() {
+        // Setup
+        final AdminRole param = new AdminRole();
+        param.setId(0);
+        param.setName("name");
+        param.setRemark("remark");
+        param.setStatus(0);
+        param.setCreateUser(0);
+        param.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setUpdateUser(0);
+        param.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        final AdminPermission adminPermission = new AdminPermission();
+        adminPermission.setId(0);
+        adminPermission.setSign("sign");
+        adminPermission.setName("name");
+        adminPermission.setRemark("remark");
+        adminPermission.setStatus(0);
+        adminPermission.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminPermission.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setPermissions(Collections.singletonList(adminPermission));
+        BooleanExpression booleanExpression = new QAdminRole("adminRole").name.eq("name");
+        when(mockAdminRoleRepository.count(booleanExpression)).thenReturn(1L);
+        // Run the test
+        final MapResponse result = adminRoleServiceUnderTest.create(param);
+
+        // Verify the results
+        Assert.assertEquals("测试名称为空失败","name is exists",result.getMessage());
+    }
+
+    @Test
+    void testUpdate() {
+        // Setup
+        final AdminRole param = new AdminRole();
+        param.setId(0);
+        param.setName("name");
+        param.setRemark("remark");
+        param.setStatus(0);
+        param.setCreateUser(0);
+        param.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setUpdateUser(0);
+        param.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        final AdminPermission adminPermission = new AdminPermission();
+        adminPermission.setId(0);
+        adminPermission.setSign("sign");
+        adminPermission.setName("name");
+        adminPermission.setRemark("remark");
+        adminPermission.setStatus(0);
+        adminPermission.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminPermission.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setPermissions(new ArrayList<>(Collections.singletonList(adminPermission)));
+
+        // Configure AdminRoleRepository.findById(...).
+        final AdminRole adminRole1 = new AdminRole();
+        adminRole1.setId(0);
+        adminRole1.setName("name");
+        adminRole1.setRemark("remark");
+        adminRole1.setStatus(0);
+        adminRole1.setCreateUser(0);
+        adminRole1.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminRole1.setUpdateUser(0);
+        adminRole1.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        final AdminPermission adminPermission1 = new AdminPermission();
+        adminPermission1.setId(0);
+        adminPermission1.setSign("sign");
+        adminPermission1.setName("name");
+        adminPermission1.setRemark("remark");
+        adminPermission1.setStatus(0);
+        adminPermission1.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminPermission1.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminRole1.setPermissions(new ArrayList<>(Collections.singletonList(adminPermission1)));
+        final Optional<AdminRole> adminRole = Optional.of(adminRole1);
+        when(mockAdminRoleRepository.findById(0)).thenReturn(adminRole);
+
+        // Configure AdminPermissionRepository.findOne(...).
+        final AdminPermission adminPermission3 = new AdminPermission();
+        adminPermission3.setId(0);
+        adminPermission3.setSign("sign");
+        adminPermission3.setName("name");
+        adminPermission3.setRemark("remark");
+        adminPermission3.setStatus(0);
+        adminPermission3.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminPermission3.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        final Optional<AdminPermission> adminPermission2 = Optional.of(adminPermission3);
+        BooleanExpression booleanExpression = new QAdminPermission("adminPermission").sign.eq("sign");
+        when(mockPermissionRepository.findOne(booleanExpression)).thenReturn(adminPermission2);
+
+        // Configure AdminPermissionRepository.save(...).
+        final AdminPermission adminPermission4 = new AdminPermission();
+        adminPermission4.setId(0);
+        adminPermission4.setSign("sign");
+        adminPermission4.setName("name");
+        adminPermission4.setRemark("remark");
+        adminPermission4.setStatus(0);
+        adminPermission4.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminPermission4.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        when(mockPermissionRepository.save(any(AdminPermission.class))).thenReturn(adminPermission4);
+
+        // Configure AdminRoleRepository.save(...).
+        final AdminRole adminRole2 = new AdminRole();
+        adminRole2.setId(0);
+        adminRole2.setName("name");
+        adminRole2.setRemark("remark");
+        adminRole2.setStatus(0);
+        adminRole2.setCreateUser(0);
+        adminRole2.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminRole2.setUpdateUser(0);
+        adminRole2.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        final AdminPermission adminPermission5 = new AdminPermission();
+        adminPermission5.setId(0);
+        adminPermission5.setSign("sign");
+        adminPermission5.setName("name");
+        adminPermission5.setRemark("remark");
+        adminPermission5.setStatus(0);
+        adminPermission5.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminPermission5.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminRole2.setPermissions(new ArrayList<>(Collections.singletonList(adminPermission5)));
+        when(mockAdminRoleRepository.save(any(AdminRole.class))).thenReturn(adminRole2);
+
+        // Run the test
+        final MapResponse result = adminRoleServiceUnderTest.update(param);
+
+        // Verify the results
+    }
+
+    @Test
+    void testUpdate_AdminRoleRepositoryFindByIdReturnsAbsent() {
+        // Setup
+        final AdminRole param = new AdminRole();
+        param.setId(0);
+        param.setName("name");
+        param.setRemark("remark");
+        param.setStatus(0);
+        param.setCreateUser(0);
+        param.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setUpdateUser(0);
+        param.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        final AdminPermission adminPermission = new AdminPermission();
+        adminPermission.setId(0);
+        adminPermission.setSign("sign");
+        adminPermission.setName("name");
+        adminPermission.setRemark("remark");
+        adminPermission.setStatus(0);
+        adminPermission.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminPermission.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setPermissions(Arrays.asList(adminPermission));
+
+        when(mockAdminRoleRepository.findById(0)).thenReturn(Optional.empty());
+
+        // Configure AdminPermissionRepository.findOne(...).
+        final AdminPermission adminPermission2 = new AdminPermission();
+        adminPermission2.setId(0);
+        adminPermission2.setSign("sign");
+        adminPermission2.setName("name");
+        adminPermission2.setRemark("remark");
+        adminPermission2.setStatus(0);
+        adminPermission2.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminPermission2.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        final Optional<AdminPermission> adminPermission1 = Optional.of(adminPermission2);
+        when(mockPermissionRepository.findOne(new BooleanBuilder())).thenReturn(adminPermission1);
+
+        // Configure AdminPermissionRepository.save(...).
+        final AdminPermission adminPermission3 = new AdminPermission();
+        adminPermission3.setId(0);
+        adminPermission3.setSign("sign");
+        adminPermission3.setName("name");
+        adminPermission3.setRemark("remark");
+        adminPermission3.setStatus(0);
+        adminPermission3.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminPermission3.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        when(mockPermissionRepository.save(any(AdminPermission.class))).thenReturn(adminPermission3);
+
+        // Configure AdminRoleRepository.save(...).
+        final AdminRole adminRole = new AdminRole();
+        adminRole.setId(0);
+        adminRole.setName("name");
+        adminRole.setRemark("remark");
+        adminRole.setStatus(0);
+        adminRole.setCreateUser(0);
+        adminRole.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminRole.setUpdateUser(0);
+        adminRole.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        final AdminPermission adminPermission4 = new AdminPermission();
+        adminPermission4.setId(0);
+        adminPermission4.setSign("sign");
+        adminPermission4.setName("name");
+        adminPermission4.setRemark("remark");
+        adminPermission4.setStatus(0);
+        adminPermission4.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminPermission4.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminRole.setPermissions(Arrays.asList(adminPermission4));
+        when(mockAdminRoleRepository.save(any(AdminRole.class))).thenReturn(adminRole);
+
+        // Run the test
+        final MapResponse result = adminRoleServiceUnderTest.update(param);
+
+        // Verify the results
+    }
+
+    @Test
+    void testUpdate_AdminPermissionRepositoryFindOneReturnsAbsent() {
+        // Setup
+        final AdminRole param = new AdminRole();
+        param.setId(0);
+        param.setName("name");
+        param.setRemark("remark");
+        param.setStatus(0);
+        param.setCreateUser(0);
+        param.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setUpdateUser(0);
+        param.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        final AdminPermission adminPermission = new AdminPermission();
+        adminPermission.setId(0);
+        adminPermission.setSign("sign");
+        adminPermission.setName("name");
+        adminPermission.setRemark("remark");
+        adminPermission.setStatus(0);
+        adminPermission.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminPermission.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setPermissions(Arrays.asList(adminPermission));
+
+        // Configure AdminRoleRepository.findById(...).
+        final AdminRole adminRole1 = new AdminRole();
+        adminRole1.setId(0);
+        adminRole1.setName("name");
+        adminRole1.setRemark("remark");
+        adminRole1.setStatus(0);
+        adminRole1.setCreateUser(0);
+        adminRole1.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminRole1.setUpdateUser(0);
+        adminRole1.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        final AdminPermission adminPermission1 = new AdminPermission();
+        adminPermission1.setId(0);
+        adminPermission1.setSign("sign");
+        adminPermission1.setName("name");
+        adminPermission1.setRemark("remark");
+        adminPermission1.setStatus(0);
+        adminPermission1.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminPermission1.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminRole1.setPermissions(Arrays.asList(adminPermission1));
+        final Optional<AdminRole> adminRole = Optional.of(adminRole1);
+        when(mockAdminRoleRepository.findById(0)).thenReturn(adminRole);
+
+        when(mockPermissionRepository.findOne(new BooleanBuilder())).thenReturn(Optional.empty());
+
+        // Configure AdminPermissionRepository.save(...).
+        final AdminPermission adminPermission2 = new AdminPermission();
+        adminPermission2.setId(0);
+        adminPermission2.setSign("sign");
+        adminPermission2.setName("name");
+        adminPermission2.setRemark("remark");
+        adminPermission2.setStatus(0);
+        adminPermission2.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminPermission2.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        when(mockPermissionRepository.save(any(AdminPermission.class))).thenReturn(adminPermission2);
+
+        // Configure AdminRoleRepository.save(...).
+        final AdminRole adminRole2 = new AdminRole();
+        adminRole2.setId(0);
+        adminRole2.setName("name");
+        adminRole2.setRemark("remark");
+        adminRole2.setStatus(0);
+        adminRole2.setCreateUser(0);
+        adminRole2.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminRole2.setUpdateUser(0);
+        adminRole2.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        final AdminPermission adminPermission3 = new AdminPermission();
+        adminPermission3.setId(0);
+        adminPermission3.setSign("sign");
+        adminPermission3.setName("name");
+        adminPermission3.setRemark("remark");
+        adminPermission3.setStatus(0);
+        adminPermission3.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminPermission3.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminRole2.setPermissions(Arrays.asList(adminPermission3));
+        when(mockAdminRoleRepository.save(any(AdminRole.class))).thenReturn(adminRole2);
+
+        // Run the test
+        final MapResponse result = adminRoleServiceUnderTest.update(param);
+
+        // Verify the results
+    }
+
+    @Test
+    void testDelete() {
+        // Setup
+        final AdminRole param = new AdminRole();
+        param.setId(0);
+        param.setName("name");
+        param.setRemark("remark");
+        param.setStatus(0);
+        param.setCreateUser(0);
+        param.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setUpdateUser(0);
+        param.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        final AdminPermission adminPermission = new AdminPermission();
+        adminPermission.setId(0);
+        adminPermission.setSign("sign");
+        adminPermission.setName("name");
+        adminPermission.setRemark("remark");
+        adminPermission.setStatus(0);
+        adminPermission.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminPermission.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setPermissions(Arrays.asList(adminPermission));
+
+        // Configure AdminRoleRepository.findById(...).
+        final AdminRole adminRole1 = new AdminRole();
+        adminRole1.setId(0);
+        adminRole1.setName("name");
+        adminRole1.setRemark("remark");
+        adminRole1.setStatus(0);
+        adminRole1.setCreateUser(0);
+        adminRole1.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminRole1.setUpdateUser(0);
+        adminRole1.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        final AdminPermission adminPermission1 = new AdminPermission();
+        adminPermission1.setId(0);
+        adminPermission1.setSign("sign");
+        adminPermission1.setName("name");
+        adminPermission1.setRemark("remark");
+        adminPermission1.setStatus(0);
+        adminPermission1.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminPermission1.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminRole1.setPermissions(Arrays.asList(adminPermission1));
+        final Optional<AdminRole> adminRole = Optional.of(adminRole1);
+        when(mockAdminRoleRepository.findById(0)).thenReturn(adminRole);
+
+        // Configure AdminRoleRepository.save(...).
+        final AdminRole adminRole2 = new AdminRole();
+        adminRole2.setId(0);
+        adminRole2.setName("name");
+        adminRole2.setRemark("remark");
+        adminRole2.setStatus(0);
+        adminRole2.setCreateUser(0);
+        adminRole2.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminRole2.setUpdateUser(0);
+        adminRole2.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        final AdminPermission adminPermission2 = new AdminPermission();
+        adminPermission2.setId(0);
+        adminPermission2.setSign("sign");
+        adminPermission2.setName("name");
+        adminPermission2.setRemark("remark");
+        adminPermission2.setStatus(0);
+        adminPermission2.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminPermission2.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminRole2.setPermissions(Arrays.asList(adminPermission2));
+        when(mockAdminRoleRepository.save(any(AdminRole.class))).thenReturn(adminRole2);
+
+        // Run the test
+        final MapResponse result = adminRoleServiceUnderTest.delete(param);
+
+        // Verify the results
+    }
+
+    @Test
+    void testDelete_AdminRoleRepositoryFindByIdReturnsAbsent() {
+        // Setup
+        final AdminRole param = new AdminRole();
+        param.setId(0);
+        param.setName("name");
+        param.setRemark("remark");
+        param.setStatus(0);
+        param.setCreateUser(0);
+        param.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setUpdateUser(0);
+        param.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        final AdminPermission adminPermission = new AdminPermission();
+        adminPermission.setId(0);
+        adminPermission.setSign("sign");
+        adminPermission.setName("name");
+        adminPermission.setRemark("remark");
+        adminPermission.setStatus(0);
+        adminPermission.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminPermission.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setPermissions(Arrays.asList(adminPermission));
+
+        when(mockAdminRoleRepository.findById(0)).thenReturn(Optional.empty());
+
+        // Configure AdminRoleRepository.save(...).
+        final AdminRole adminRole = new AdminRole();
+        adminRole.setId(0);
+        adminRole.setName("name");
+        adminRole.setRemark("remark");
+        adminRole.setStatus(0);
+        adminRole.setCreateUser(0);
+        adminRole.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminRole.setUpdateUser(0);
+        adminRole.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        final AdminPermission adminPermission1 = new AdminPermission();
+        adminPermission1.setId(0);
+        adminPermission1.setSign("sign");
+        adminPermission1.setName("name");
+        adminPermission1.setRemark("remark");
+        adminPermission1.setStatus(0);
+        adminPermission1.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminPermission1.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminRole.setPermissions(Arrays.asList(adminPermission1));
+        when(mockAdminRoleRepository.save(any(AdminRole.class))).thenReturn(adminRole);
+
+        // Run the test
+        final MapResponse result = adminRoleServiceUnderTest.delete(param);
+
+        // Verify the results
+    }
+}

+ 322 - 0
dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/service/AdminUserServiceTest.java

@@ -0,0 +1,322 @@
+package com.persagy.dmp.rwd.edit.service;
+
+import com.persagy.common.criteria.CriteriaExpressionParser;
+import com.persagy.common.criteria.CriteriaUtils;
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.rwd.edit.entity.AdminUser;
+import com.persagy.dmp.rwd.edit.entity.QAdminUser;
+import com.persagy.dmp.rwd.edit.repository.AdminUserRepository;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import java.util.*;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
+class AdminUserServiceTest {
+
+    @Mock
+    private AdminUserRepository mockAdminUserRepository;
+    @Mock
+    private CriteriaUtils mockCriteriaUtils;
+
+    @InjectMocks
+    private AdminUserService adminUserServiceUnderTest;
+
+    @Test
+    void testQuery() {
+        // Setup
+        final JacksonCriteria criteria = JacksonCriteria.newInstance();
+        when(mockCriteriaUtils.query(eq(new QAdminUser("variable")), any(CriteriaExpressionParser.class), any(JacksonCriteria.class))).thenReturn(new PagedResponse<>());
+
+        // Run the test
+        final PagedResponse<AdminUser> result = adminUserServiceUnderTest.query(criteria);
+
+        // Verify the results
+    }
+
+    @Test
+    void testCreate() {
+        // Setup
+        final AdminUser param = new AdminUser();
+        param.setId(0);
+        param.setUsername("username");
+        param.setPassword("password");
+        param.setRealname("realname");
+        param.setPhone("phone");
+        param.setRemark("remark");
+        param.setStatus(0);
+        param.setCreateUser(0);
+        param.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setUpdateUser(0);
+
+        when(mockAdminUserRepository.count()).thenReturn(0L);
+
+        // Configure AdminUserRepository.save(...).
+        final AdminUser adminUser = new AdminUser();
+        adminUser.setId(0);
+        adminUser.setUsername("username");
+        adminUser.setPassword("password");
+        adminUser.setRealname("realname");
+        adminUser.setPhone("phone");
+        adminUser.setRemark("remark");
+        adminUser.setStatus(0);
+        adminUser.setCreateUser(0);
+        adminUser.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminUser.setUpdateUser(0);
+        when(mockAdminUserRepository.save(any(AdminUser.class))).thenReturn(adminUser);
+
+        // Run the test
+        final MapResponse result = adminUserServiceUnderTest.create(param);
+
+        // Verify the results
+    }
+
+    @Test
+    void testUpdate() {
+        // Setup
+        final AdminUser param = new AdminUser();
+        param.setId(0);
+        param.setUsername("username");
+        param.setPassword("password");
+        param.setRealname("realname");
+        param.setPhone("phone");
+        param.setRemark("remark");
+        param.setStatus(0);
+        param.setCreateUser(0);
+        param.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setUpdateUser(0);
+
+        // Configure AdminUserRepository.findById(...).
+        final AdminUser adminUser1 = new AdminUser();
+        adminUser1.setId(0);
+        adminUser1.setUsername("username");
+        adminUser1.setPassword("password");
+        adminUser1.setRealname("realname");
+        adminUser1.setPhone("phone");
+        adminUser1.setRemark("remark");
+        adminUser1.setStatus(0);
+        adminUser1.setCreateUser(0);
+        adminUser1.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminUser1.setUpdateUser(0);
+        final Optional<AdminUser> adminUser = Optional.of(adminUser1);
+        when(mockAdminUserRepository.findById(0)).thenReturn(adminUser);
+
+        // Configure AdminUserRepository.save(...).
+        final AdminUser adminUser2 = new AdminUser();
+        adminUser2.setId(0);
+        adminUser2.setUsername("username");
+        adminUser2.setPassword("password");
+        adminUser2.setRealname("realname");
+        adminUser2.setPhone("phone");
+        adminUser2.setRemark("remark");
+        adminUser2.setStatus(0);
+        adminUser2.setCreateUser(0);
+        adminUser2.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminUser2.setUpdateUser(0);
+        when(mockAdminUserRepository.save(any(AdminUser.class))).thenReturn(adminUser2);
+
+        // Run the test
+        final MapResponse result = adminUserServiceUnderTest.update(param);
+
+        // Verify the results
+    }
+
+    @Test
+    void testUpdate_AdminUserRepositoryFindByIdReturnsAbsent() {
+        // Setup
+        final AdminUser param = new AdminUser();
+        param.setId(0);
+        param.setUsername("username");
+        param.setPassword("password");
+        param.setRealname("realname");
+        param.setPhone("phone");
+        param.setRemark("remark");
+        param.setStatus(0);
+        param.setCreateUser(0);
+        param.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setUpdateUser(0);
+
+        when(mockAdminUserRepository.findById(0)).thenReturn(Optional.empty());
+
+        // Configure AdminUserRepository.save(...).
+        final AdminUser adminUser = new AdminUser();
+        adminUser.setId(0);
+        adminUser.setUsername("username");
+        adminUser.setPassword("password");
+        adminUser.setRealname("realname");
+        adminUser.setPhone("phone");
+        adminUser.setRemark("remark");
+        adminUser.setStatus(0);
+        adminUser.setCreateUser(0);
+        adminUser.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminUser.setUpdateUser(0);
+        when(mockAdminUserRepository.save(any(AdminUser.class))).thenReturn(adminUser);
+
+        // Run the test
+        final MapResponse result = adminUserServiceUnderTest.update(param);
+
+        // Verify the results
+    }
+
+    @Test
+    void testDelete() {
+        // Setup
+        final AdminUser param = new AdminUser();
+        param.setId(0);
+        param.setUsername("username");
+        param.setPassword("password");
+        param.setRealname("realname");
+        param.setPhone("phone");
+        param.setRemark("remark");
+        param.setStatus(0);
+        param.setCreateUser(0);
+        param.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setUpdateUser(0);
+
+        // Configure AdminUserRepository.findById(...).
+        final AdminUser adminUser1 = new AdminUser();
+        adminUser1.setId(0);
+        adminUser1.setUsername("username");
+        adminUser1.setPassword("password");
+        adminUser1.setRealname("realname");
+        adminUser1.setPhone("phone");
+        adminUser1.setRemark("remark");
+        adminUser1.setStatus(0);
+        adminUser1.setCreateUser(0);
+        adminUser1.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminUser1.setUpdateUser(0);
+        final Optional<AdminUser> adminUser = Optional.of(adminUser1);
+        when(mockAdminUserRepository.findById(0)).thenReturn(adminUser);
+
+        // Configure AdminUserRepository.save(...).
+        final AdminUser adminUser2 = new AdminUser();
+        adminUser2.setId(0);
+        adminUser2.setUsername("username");
+        adminUser2.setPassword("password");
+        adminUser2.setRealname("realname");
+        adminUser2.setPhone("phone");
+        adminUser2.setRemark("remark");
+        adminUser2.setStatus(0);
+        adminUser2.setCreateUser(0);
+        adminUser2.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminUser2.setUpdateUser(0);
+        when(mockAdminUserRepository.save(any(AdminUser.class))).thenReturn(adminUser2);
+
+        // Run the test
+        final MapResponse result = adminUserServiceUnderTest.delete(param);
+
+        // Verify the results
+    }
+
+    @Test
+    void testDelete_AdminUserRepositoryFindByIdReturnsAbsent() {
+        // Setup
+        final AdminUser param = new AdminUser();
+        param.setId(0);
+        param.setUsername("username");
+        param.setPassword("password");
+        param.setRealname("realname");
+        param.setPhone("phone");
+        param.setRemark("remark");
+        param.setStatus(0);
+        param.setCreateUser(0);
+        param.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setUpdateUser(0);
+
+        when(mockAdminUserRepository.findById(0)).thenReturn(Optional.empty());
+
+        // Configure AdminUserRepository.save(...).
+        final AdminUser adminUser = new AdminUser();
+        adminUser.setId(0);
+        adminUser.setUsername("username");
+        adminUser.setPassword("password");
+        adminUser.setRealname("realname");
+        adminUser.setPhone("phone");
+        adminUser.setRemark("remark");
+        adminUser.setStatus(0);
+        adminUser.setCreateUser(0);
+        adminUser.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminUser.setUpdateUser(0);
+        when(mockAdminUserRepository.save(any(AdminUser.class))).thenReturn(adminUser);
+
+        // Run the test
+        final MapResponse result = adminUserServiceUnderTest.delete(param);
+
+        // Verify the results
+    }
+
+    @Test
+    void testChgpwd() {
+        // Setup
+        final Map<String, String> param = new HashMap<>();
+
+        // Configure AdminUserRepository.findById(...).
+        final AdminUser adminUser1 = new AdminUser();
+        adminUser1.setId(0);
+        adminUser1.setUsername("username");
+        adminUser1.setPassword("password");
+        adminUser1.setRealname("realname");
+        adminUser1.setPhone("phone");
+        adminUser1.setRemark("remark");
+        adminUser1.setStatus(0);
+        adminUser1.setCreateUser(0);
+        adminUser1.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminUser1.setUpdateUser(0);
+        final Optional<AdminUser> adminUser = Optional.of(adminUser1);
+        when(mockAdminUserRepository.findById(0)).thenReturn(adminUser);
+
+        // Configure AdminUserRepository.save(...).
+        final AdminUser adminUser2 = new AdminUser();
+        adminUser2.setId(0);
+        adminUser2.setUsername("username");
+        adminUser2.setPassword("password");
+        adminUser2.setRealname("realname");
+        adminUser2.setPhone("phone");
+        adminUser2.setRemark("remark");
+        adminUser2.setStatus(0);
+        adminUser2.setCreateUser(0);
+        adminUser2.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminUser2.setUpdateUser(0);
+        when(mockAdminUserRepository.save(any(AdminUser.class))).thenReturn(adminUser2);
+
+        // Run the test
+        final MapResponse result = adminUserServiceUnderTest.chgpwd(param);
+
+        // Verify the results
+    }
+
+    @Test
+    void testChgpwd_AdminUserRepositoryFindByIdReturnsAbsent() {
+        // Setup
+        final Map<String, String> param = new HashMap<>();
+        when(mockAdminUserRepository.findById(0)).thenReturn(Optional.empty());
+
+        // Configure AdminUserRepository.save(...).
+        final AdminUser adminUser = new AdminUser();
+        adminUser.setId(0);
+        adminUser.setUsername("username");
+        adminUser.setPassword("password");
+        adminUser.setRealname("realname");
+        adminUser.setPhone("phone");
+        adminUser.setRemark("remark");
+        adminUser.setStatus(0);
+        adminUser.setCreateUser(0);
+        adminUser.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminUser.setUpdateUser(0);
+        when(mockAdminUserRepository.save(any(AdminUser.class))).thenReturn(adminUser);
+
+        // Run the test
+        final MapResponse result = adminUserServiceUnderTest.chgpwd(param);
+
+        // Verify the results
+    }
+}

+ 416 - 0
dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/service/ClassDefChangeRecordServiceTest.java

@@ -0,0 +1,416 @@
+package com.persagy.dmp.rwd.edit.service;
+
+import com.persagy.common.criteria.CriteriaExpressionParser;
+import com.persagy.common.criteria.CriteriaUtils;
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.ListResponse;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.rwd.edit.entity.ClassDef;
+import com.persagy.dmp.rwd.edit.entity.ClassDefChangeRecord;
+import com.persagy.dmp.rwd.edit.entity.QClassDefChangeRecord;
+import com.persagy.dmp.rwd.edit.enumeration.EnumVersionState;
+import com.persagy.dmp.rwd.edit.repository.ClassDefChangeRecordRepository;
+import com.persagy.dmp.rwd.edit.repository.ClassDefRepository;
+import com.persagy.dmp.rwd.enums.ObjType;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.*;
+
+class ClassDefChangeRecordServiceTest {
+
+    private ClassDefChangeRecordService classDefChangeRecordServiceUnderTest;
+
+    @BeforeEach
+    void setUp() {
+        classDefChangeRecordServiceUnderTest = new ClassDefChangeRecordService();
+        classDefChangeRecordServiceUnderTest.repository = mock(ClassDefChangeRecordRepository.class);
+        classDefChangeRecordServiceUnderTest.classDefService = mock(ClassDefService.class);
+        classDefChangeRecordServiceUnderTest.criteriaUtils = mock(CriteriaUtils.class);
+        classDefChangeRecordServiceUnderTest.classDefRepository = mock(ClassDefRepository.class);
+    }
+
+    @Test
+    void testQuery() {
+        // Setup
+        final JacksonCriteria criteria = JacksonCriteria.newInstance();
+        when(classDefChangeRecordServiceUnderTest.criteriaUtils.query(eq(new QClassDefChangeRecord("variable")), any(CriteriaExpressionParser.class), any(JacksonCriteria.class))).thenReturn(new PagedResponse<>());
+
+        // Run the test
+        final PagedResponse<ClassDefChangeRecord> result = classDefChangeRecordServiceUnderTest.query(criteria);
+
+        // Verify the results
+    }
+
+    @Test
+    void testCreate() {
+        // Setup
+        final ClassDefChangeRecord param = new ClassDefChangeRecord();
+        param.setId(0);
+        param.setCode("code");
+        param.setGroupCode("groupCode");
+        param.setObjType(ObjType.project);
+        param.setName("name");
+        param.setAliasCode("aliasCode");
+        param.setAliasName("aliasName");
+        param.setType("type");
+        param.setProjectId("projectId");
+        param.setMajorCode("majorCode");
+
+        when(classDefChangeRecordServiceUnderTest.classDefService.queryClass(any(JacksonCriteria.class))).thenReturn(new ListResponse<>());
+
+        // Configure ClassDefChangeRecordRepository.findAll(...).
+        final ClassDefChangeRecord classDefChangeRecord = new ClassDefChangeRecord();
+        classDefChangeRecord.setId(0);
+        classDefChangeRecord.setCode("code");
+        classDefChangeRecord.setGroupCode("groupCode");
+        classDefChangeRecord.setObjType(ObjType.project);
+        classDefChangeRecord.setName("name");
+        classDefChangeRecord.setAliasCode("aliasCode");
+        classDefChangeRecord.setAliasName("aliasName");
+        classDefChangeRecord.setType("type");
+        classDefChangeRecord.setProjectId("projectId");
+        classDefChangeRecord.setMajorCode("majorCode");
+        final List<ClassDefChangeRecord> classDefChangeRecords = Arrays.asList(classDefChangeRecord);
+        when(classDefChangeRecordServiceUnderTest.repository.findAll()).thenReturn(classDefChangeRecords);
+
+        // Configure ClassDefChangeRecordRepository.save(...).
+        final ClassDefChangeRecord classDefChangeRecord1 = new ClassDefChangeRecord();
+        classDefChangeRecord1.setId(0);
+        classDefChangeRecord1.setCode("code");
+        classDefChangeRecord1.setGroupCode("groupCode");
+        classDefChangeRecord1.setObjType(ObjType.project);
+        classDefChangeRecord1.setName("name");
+        classDefChangeRecord1.setAliasCode("aliasCode");
+        classDefChangeRecord1.setAliasName("aliasName");
+        classDefChangeRecord1.setType("type");
+        classDefChangeRecord1.setProjectId("projectId");
+        classDefChangeRecord1.setMajorCode("majorCode");
+        when(classDefChangeRecordServiceUnderTest.repository.save(any(ClassDefChangeRecord.class))).thenReturn(classDefChangeRecord1);
+
+        // Run the test
+        final MapResponse result = classDefChangeRecordServiceUnderTest.create(param);
+
+        // Verify the results
+        verify(classDefChangeRecordServiceUnderTest.repository).deleteAll(Arrays.asList(new ClassDefChangeRecord()));
+    }
+
+    @Test
+    void testCreate_ClassDefChangeRecordRepositoryFindAllReturnsNoItems() {
+        // Setup
+        final ClassDefChangeRecord param = new ClassDefChangeRecord();
+        param.setId(0);
+        param.setCode("code");
+        param.setGroupCode("groupCode");
+        param.setObjType(ObjType.project);
+        param.setName("name");
+        param.setAliasCode("aliasCode");
+        param.setAliasName("aliasName");
+        param.setType("type");
+        param.setProjectId("projectId");
+        param.setMajorCode("majorCode");
+
+        when(classDefChangeRecordServiceUnderTest.classDefService.queryClass(any(JacksonCriteria.class))).thenReturn(new ListResponse<>());
+        when(classDefChangeRecordServiceUnderTest.repository.findAll()).thenReturn(Collections.emptyList());
+
+        // Configure ClassDefChangeRecordRepository.save(...).
+        final ClassDefChangeRecord classDefChangeRecord = new ClassDefChangeRecord();
+        classDefChangeRecord.setId(0);
+        classDefChangeRecord.setCode("code");
+        classDefChangeRecord.setGroupCode("groupCode");
+        classDefChangeRecord.setObjType(ObjType.project);
+        classDefChangeRecord.setName("name");
+        classDefChangeRecord.setAliasCode("aliasCode");
+        classDefChangeRecord.setAliasName("aliasName");
+        classDefChangeRecord.setType("type");
+        classDefChangeRecord.setProjectId("projectId");
+        classDefChangeRecord.setMajorCode("majorCode");
+        when(classDefChangeRecordServiceUnderTest.repository.save(any(ClassDefChangeRecord.class))).thenReturn(classDefChangeRecord);
+
+        // Run the test
+        final MapResponse result = classDefChangeRecordServiceUnderTest.create(param);
+
+        // Verify the results
+        verify(classDefChangeRecordServiceUnderTest.repository).deleteAll(Arrays.asList(new ClassDefChangeRecord()));
+    }
+
+    @Test
+    void testUpdate() {
+        // Setup
+        final ClassDefChangeRecord param = new ClassDefChangeRecord();
+        param.setId(0);
+        param.setCode("code");
+        param.setGroupCode("groupCode");
+        param.setObjType(ObjType.project);
+        param.setName("name");
+        param.setAliasCode("aliasCode");
+        param.setAliasName("aliasName");
+        param.setType("type");
+        param.setProjectId("projectId");
+        param.setMajorCode("majorCode");
+
+        // Configure ClassDefChangeRecordRepository.findById(...).
+        final ClassDefChangeRecord classDefChangeRecord1 = new ClassDefChangeRecord();
+        classDefChangeRecord1.setId(0);
+        classDefChangeRecord1.setCode("code");
+        classDefChangeRecord1.setGroupCode("groupCode");
+        classDefChangeRecord1.setObjType(ObjType.project);
+        classDefChangeRecord1.setName("name");
+        classDefChangeRecord1.setAliasCode("aliasCode");
+        classDefChangeRecord1.setAliasName("aliasName");
+        classDefChangeRecord1.setType("type");
+        classDefChangeRecord1.setProjectId("projectId");
+        classDefChangeRecord1.setMajorCode("majorCode");
+        final Optional<ClassDefChangeRecord> classDefChangeRecord = Optional.of(classDefChangeRecord1);
+        when(classDefChangeRecordServiceUnderTest.repository.findById(0)).thenReturn(classDefChangeRecord);
+
+        // Configure ClassDefChangeRecordRepository.save(...).
+        final ClassDefChangeRecord classDefChangeRecord2 = new ClassDefChangeRecord();
+        classDefChangeRecord2.setId(0);
+        classDefChangeRecord2.setCode("code");
+        classDefChangeRecord2.setGroupCode("groupCode");
+        classDefChangeRecord2.setObjType(ObjType.project);
+        classDefChangeRecord2.setName("name");
+        classDefChangeRecord2.setAliasCode("aliasCode");
+        classDefChangeRecord2.setAliasName("aliasName");
+        classDefChangeRecord2.setType("type");
+        classDefChangeRecord2.setProjectId("projectId");
+        classDefChangeRecord2.setMajorCode("majorCode");
+        when(classDefChangeRecordServiceUnderTest.repository.save(any(ClassDefChangeRecord.class))).thenReturn(classDefChangeRecord2);
+
+        // Run the test
+        final MapResponse result = classDefChangeRecordServiceUnderTest.update(param);
+
+        // Verify the results
+    }
+
+    @Test
+    void testUpdate_ClassDefChangeRecordRepositoryFindByIdReturnsAbsent() {
+        // Setup
+        final ClassDefChangeRecord param = new ClassDefChangeRecord();
+        param.setId(0);
+        param.setCode("code");
+        param.setGroupCode("groupCode");
+        param.setObjType(ObjType.project);
+        param.setName("name");
+        param.setAliasCode("aliasCode");
+        param.setAliasName("aliasName");
+        param.setType("type");
+        param.setProjectId("projectId");
+        param.setMajorCode("majorCode");
+
+        when(classDefChangeRecordServiceUnderTest.repository.findById(0)).thenReturn(Optional.empty());
+
+        // Configure ClassDefChangeRecordRepository.save(...).
+        final ClassDefChangeRecord classDefChangeRecord = new ClassDefChangeRecord();
+        classDefChangeRecord.setId(0);
+        classDefChangeRecord.setCode("code");
+        classDefChangeRecord.setGroupCode("groupCode");
+        classDefChangeRecord.setObjType(ObjType.project);
+        classDefChangeRecord.setName("name");
+        classDefChangeRecord.setAliasCode("aliasCode");
+        classDefChangeRecord.setAliasName("aliasName");
+        classDefChangeRecord.setType("type");
+        classDefChangeRecord.setProjectId("projectId");
+        classDefChangeRecord.setMajorCode("majorCode");
+        when(classDefChangeRecordServiceUnderTest.repository.save(any(ClassDefChangeRecord.class))).thenReturn(classDefChangeRecord);
+
+        // Run the test
+        final MapResponse result = classDefChangeRecordServiceUnderTest.update(param);
+
+        // Verify the results
+    }
+
+    @Test
+    void testAddVersion() {
+        // Setup
+        when(classDefChangeRecordServiceUnderTest.repository.addVersion("version", Arrays.asList(0))).thenReturn(0);
+
+        // Run the test
+        final MapResponse result = classDefChangeRecordServiceUnderTest.addVersion("version", Arrays.asList(0));
+
+        // Verify the results
+    }
+
+    @Test
+    void testDelete() {
+        // Setup
+        final ClassDefChangeRecord param = new ClassDefChangeRecord();
+        param.setId(0);
+        param.setCode("code");
+        param.setGroupCode("groupCode");
+        param.setObjType(ObjType.project);
+        param.setName("name");
+        param.setAliasCode("aliasCode");
+        param.setAliasName("aliasName");
+        param.setType("type");
+        param.setProjectId("projectId");
+        param.setMajorCode("majorCode");
+
+        // Configure ClassDefChangeRecordRepository.findById(...).
+        final ClassDefChangeRecord classDefChangeRecord1 = new ClassDefChangeRecord();
+        classDefChangeRecord1.setId(0);
+        classDefChangeRecord1.setCode("code");
+        classDefChangeRecord1.setGroupCode("groupCode");
+        classDefChangeRecord1.setObjType(ObjType.project);
+        classDefChangeRecord1.setName("name");
+        classDefChangeRecord1.setAliasCode("aliasCode");
+        classDefChangeRecord1.setAliasName("aliasName");
+        classDefChangeRecord1.setType("type");
+        classDefChangeRecord1.setProjectId("projectId");
+        classDefChangeRecord1.setMajorCode("majorCode");
+        final Optional<ClassDefChangeRecord> classDefChangeRecord = Optional.of(classDefChangeRecord1);
+        when(classDefChangeRecordServiceUnderTest.repository.findById(0)).thenReturn(classDefChangeRecord);
+
+        // Run the test
+        final MapResponse result = classDefChangeRecordServiceUnderTest.delete(param);
+
+        // Verify the results
+        verify(classDefChangeRecordServiceUnderTest.repository).delete(any(ClassDefChangeRecord.class));
+    }
+
+    @Test
+    void testDelete_ClassDefChangeRecordRepositoryFindByIdReturnsAbsent() {
+        // Setup
+        final ClassDefChangeRecord param = new ClassDefChangeRecord();
+        param.setId(0);
+        param.setCode("code");
+        param.setGroupCode("groupCode");
+        param.setObjType(ObjType.project);
+        param.setName("name");
+        param.setAliasCode("aliasCode");
+        param.setAliasName("aliasName");
+        param.setType("type");
+        param.setProjectId("projectId");
+        param.setMajorCode("majorCode");
+
+        when(classDefChangeRecordServiceUnderTest.repository.findById(0)).thenReturn(Optional.empty());
+
+        // Run the test
+        final MapResponse result = classDefChangeRecordServiceUnderTest.delete(param);
+
+        // Verify the results
+        verify(classDefChangeRecordServiceUnderTest.repository).delete(any(ClassDefChangeRecord.class));
+    }
+
+    @Test
+    void testGetSqlList() {
+        // Setup
+        when(classDefChangeRecordServiceUnderTest.criteriaUtils.query(eq(new QClassDefChangeRecord("variable")), any(CriteriaExpressionParser.class), any(JacksonCriteria.class))).thenReturn(new PagedResponse<>());
+        when(classDefChangeRecordServiceUnderTest.classDefService.queryClass(any(JacksonCriteria.class))).thenReturn(new ListResponse<>());
+
+        // Run the test
+        final List<String> result = classDefChangeRecordServiceUnderTest.getSqlList("version", false);
+
+        // Verify the results
+        assertThat(result).isEqualTo(Arrays.asList("value"));
+    }
+
+    @Test
+    void testUpdateStateByVersion() {
+        // Setup
+        when(classDefChangeRecordServiceUnderTest.criteriaUtils.query(eq(new QClassDefChangeRecord("variable")), any(CriteriaExpressionParser.class), any(JacksonCriteria.class))).thenReturn(new PagedResponse<>());
+        when(classDefChangeRecordServiceUnderTest.classDefService.queryClass(any(JacksonCriteria.class))).thenReturn(new ListResponse<>());
+
+        // Configure ClassDefRepository.saveAll(...).
+        final ClassDef classDef = new ClassDef();
+        classDef.setId("id");
+        classDef.setGroupCode("groupCode");
+        classDef.setCode("code");
+        classDef.setObjType(ObjType.project);
+        classDef.setName("name");
+        classDef.setAliasCode("aliasCode");
+        classDef.setAliasName("aliasName");
+        classDef.setType("type");
+        classDef.setProjectId("projectId");
+        classDef.setMajorCode("majorCode");
+        final List<ClassDef> classDefs = Arrays.asList(classDef);
+        when(classDefChangeRecordServiceUnderTest.classDefRepository.saveAll(Arrays.asList(new ClassDef()))).thenReturn(classDefs);
+
+        // Configure ClassDefChangeRecordRepository.saveAll(...).
+        final ClassDefChangeRecord classDefChangeRecord = new ClassDefChangeRecord();
+        classDefChangeRecord.setId(0);
+        classDefChangeRecord.setCode("code");
+        classDefChangeRecord.setGroupCode("groupCode");
+        classDefChangeRecord.setObjType(ObjType.project);
+        classDefChangeRecord.setName("name");
+        classDefChangeRecord.setAliasCode("aliasCode");
+        classDefChangeRecord.setAliasName("aliasName");
+        classDefChangeRecord.setType("type");
+        classDefChangeRecord.setProjectId("projectId");
+        classDefChangeRecord.setMajorCode("majorCode");
+        final List<ClassDefChangeRecord> classDefChangeRecords = Arrays.asList(classDefChangeRecord);
+        when(classDefChangeRecordServiceUnderTest.repository.saveAll(Arrays.asList(new ClassDefChangeRecord()))).thenReturn(classDefChangeRecords);
+
+        // Run the test
+        classDefChangeRecordServiceUnderTest.updateStateByVersion(EnumVersionState.CANCEL, "version");
+
+        // Verify the results
+    }
+
+    @Test
+    void testUpdateStateByVersion_ClassDefRepositoryReturnsNoItems() {
+        // Setup
+        when(classDefChangeRecordServiceUnderTest.criteriaUtils.query(eq(new QClassDefChangeRecord("variable")), any(CriteriaExpressionParser.class), any(JacksonCriteria.class))).thenReturn(new PagedResponse<>());
+        when(classDefChangeRecordServiceUnderTest.classDefService.queryClass(any(JacksonCriteria.class))).thenReturn(new ListResponse<>());
+        when(classDefChangeRecordServiceUnderTest.classDefRepository.saveAll(Arrays.asList(new ClassDef()))).thenReturn(Collections.emptyList());
+
+        // Configure ClassDefChangeRecordRepository.saveAll(...).
+        final ClassDefChangeRecord classDefChangeRecord = new ClassDefChangeRecord();
+        classDefChangeRecord.setId(0);
+        classDefChangeRecord.setCode("code");
+        classDefChangeRecord.setGroupCode("groupCode");
+        classDefChangeRecord.setObjType(ObjType.project);
+        classDefChangeRecord.setName("name");
+        classDefChangeRecord.setAliasCode("aliasCode");
+        classDefChangeRecord.setAliasName("aliasName");
+        classDefChangeRecord.setType("type");
+        classDefChangeRecord.setProjectId("projectId");
+        classDefChangeRecord.setMajorCode("majorCode");
+        final List<ClassDefChangeRecord> classDefChangeRecords = Arrays.asList(classDefChangeRecord);
+        when(classDefChangeRecordServiceUnderTest.repository.saveAll(Arrays.asList(new ClassDefChangeRecord()))).thenReturn(classDefChangeRecords);
+
+        // Run the test
+        classDefChangeRecordServiceUnderTest.updateStateByVersion(EnumVersionState.CANCEL, "version");
+
+        // Verify the results
+    }
+
+    @Test
+    void testUpdateStateByVersion_ClassDefChangeRecordRepositoryReturnsNoItems() {
+        // Setup
+        when(classDefChangeRecordServiceUnderTest.criteriaUtils.query(eq(new QClassDefChangeRecord("variable")), any(CriteriaExpressionParser.class), any(JacksonCriteria.class))).thenReturn(new PagedResponse<>());
+        when(classDefChangeRecordServiceUnderTest.classDefService.queryClass(any(JacksonCriteria.class))).thenReturn(new ListResponse<>());
+
+        // Configure ClassDefRepository.saveAll(...).
+        final ClassDef classDef = new ClassDef();
+        classDef.setId("id");
+        classDef.setGroupCode("groupCode");
+        classDef.setCode("code");
+        classDef.setObjType(ObjType.project);
+        classDef.setName("name");
+        classDef.setAliasCode("aliasCode");
+        classDef.setAliasName("aliasName");
+        classDef.setType("type");
+        classDef.setProjectId("projectId");
+        classDef.setMajorCode("majorCode");
+        final List<ClassDef> classDefs = Arrays.asList(classDef);
+        when(classDefChangeRecordServiceUnderTest.classDefRepository.saveAll(Arrays.asList(new ClassDef()))).thenReturn(classDefs);
+
+        when(classDefChangeRecordServiceUnderTest.repository.saveAll(Arrays.asList(new ClassDefChangeRecord()))).thenReturn(Collections.emptyList());
+
+        // Run the test
+        classDefChangeRecordServiceUnderTest.updateStateByVersion(EnumVersionState.CANCEL, "version");
+
+        // Verify the results
+    }
+}

+ 52 - 0
dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/service/ClassDefServiceTest.java

@@ -0,0 +1,52 @@
+package com.persagy.dmp.rwd.edit.service;
+
+import com.persagy.common.criteria.CriteriaExpressionParser;
+import com.persagy.common.criteria.CriteriaUtils;
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.ListResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.rwd.edit.entity.QClassDef;
+import com.persagy.dmp.rwd.model.ClassDefModel;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
+class ClassDefServiceTest {
+
+    @Mock
+    private CriteriaUtils mockCriteriaUtils;
+
+    @InjectMocks
+    private ClassDefService classDefServiceUnderTest;
+
+    @Test
+    void testQueryClass() {
+        // Setup
+        final JacksonCriteria criteria = JacksonCriteria.newInstance();
+        when(mockCriteriaUtils.query(eq(new QClassDef("variable")), any(CriteriaExpressionParser.class), any(JacksonCriteria.class))).thenReturn(new PagedResponse<>());
+
+        // Run the test
+        final ListResponse<ClassDefModel> result = classDefServiceUnderTest.queryClass(criteria);
+
+        // Verify the results
+    }
+
+    @Test
+    void testQuery() {
+        // Setup
+        final JacksonCriteria criteria = JacksonCriteria.newInstance();
+        when(mockCriteriaUtils.query(eq(new QClassDef("variable")), any(CriteriaExpressionParser.class), any(JacksonCriteria.class))).thenReturn(new PagedResponse<>());
+
+        // Run the test
+        final PagedResponse<ClassDefModel> result = classDefServiceUnderTest.query(criteria);
+
+        // Verify the results
+    }
+}

+ 25 - 0
dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/service/DemoTest.java

@@ -0,0 +1,25 @@
+package com.persagy.dmp.rwd.edit.service;
+
+import cn.hutool.core.text.CharSequenceUtil;
+import cn.hutool.core.util.EscapeUtil;
+import cn.hutool.core.util.HexUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.poi.excel.ExcelUtil;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+import java.nio.charset.Charset;
+
+public class DemoTest {
+
+    public static void main(String[] args) {
+        String testStr = "\nafefefa非\t\neife";
+        ObjectMapper objectMapper = new ObjectMapper();
+        ObjectNode objectNode = objectMapper.createObjectNode();
+        String s = StrUtil.removeAllLineBreaks(testStr);
+        String removeAll = StrUtil.removeAll(testStr, StrUtil.C_CR, StrUtil.C_LF, StrUtil.C_TAB);
+        System.out.println(s);
+        System.out.println(removeAll);
+    }
+
+}

+ 39 - 0
dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/service/DtDataServiceTest.java

@@ -0,0 +1,39 @@
+package com.persagy.dmp.rwd.edit.service;
+
+import com.persagy.common.criteria.CriteriaExpressionParser;
+import com.persagy.common.criteria.CriteriaUtils;
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.rwd.edit.entity.QDtData;
+import com.persagy.dmp.rwd.edit.model.DtDataModel;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
+class DtDataServiceTest {
+
+    @Mock
+    private CriteriaUtils mockCriteriaUtils;
+
+    @InjectMocks
+    private DtDataService dtDataServiceUnderTest;
+
+    @Test
+    void testQuery() {
+        // Setup
+        final JacksonCriteria criteria = JacksonCriteria.newInstance();
+        when(mockCriteriaUtils.query(eq(new QDtData("variable")), any(CriteriaExpressionParser.class), any(JacksonCriteria.class))).thenReturn(new PagedResponse<>());
+
+        // Run the test
+        final PagedResponse<DtDataModel> result = dtDataServiceUnderTest.query(criteria);
+
+        // Verify the results
+    }
+}

+ 425 - 0
dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/service/FuncidDefChangeRecordServiceTest.java

@@ -0,0 +1,425 @@
+package com.persagy.dmp.rwd.edit.service;
+
+import com.persagy.common.criteria.CriteriaExpressionParser;
+import com.persagy.common.criteria.CriteriaUtils;
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.ListResponse;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.rwd.edit.entity.FuncidDef;
+import com.persagy.dmp.rwd.edit.entity.FuncidDefChangeRecord;
+import com.persagy.dmp.rwd.edit.entity.QFuncidDefChangeRecord;
+import com.persagy.dmp.rwd.edit.enumeration.EnumVersionState;
+import com.persagy.dmp.rwd.edit.repository.FuncidDefChangeRecordRepository;
+import com.persagy.dmp.rwd.edit.repository.FuncidDefRepository;
+import com.persagy.dmp.rwd.enums.FuncidCategory;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.*;
+
+class FuncidDefChangeRecordServiceTest {
+
+    private FuncidDefChangeRecordService funcidDefChangeRecordServiceUnderTest;
+
+    @BeforeEach
+    void setUp() {
+        funcidDefChangeRecordServiceUnderTest = new FuncidDefChangeRecordService();
+        funcidDefChangeRecordServiceUnderTest.repository = mock(FuncidDefChangeRecordRepository.class);
+        funcidDefChangeRecordServiceUnderTest.funcidDefService = mock(FuncidDefService.class);
+        funcidDefChangeRecordServiceUnderTest.classDefService = mock(ClassDefService.class);
+        funcidDefChangeRecordServiceUnderTest.rwdeditRefTypeInfosService = mock(RwdeditRefTypeInfosService.class);
+        funcidDefChangeRecordServiceUnderTest.criteriaUtils = mock(CriteriaUtils.class);
+        funcidDefChangeRecordServiceUnderTest.funcidDefRepository = mock(FuncidDefRepository.class);
+    }
+
+    @Test
+    void testQuery() {
+        // Setup
+        final JacksonCriteria criteria = JacksonCriteria.newInstance();
+        when(funcidDefChangeRecordServiceUnderTest.criteriaUtils.query(eq(new QFuncidDefChangeRecord("variable")), any(CriteriaExpressionParser.class), any(JacksonCriteria.class))).thenReturn(new PagedResponse<>());
+
+        // Run the test
+        final PagedResponse<FuncidDefChangeRecord> result = funcidDefChangeRecordServiceUnderTest.query(criteria);
+
+        // Verify the results
+    }
+
+    @Test
+    void testCreate() {
+        // Setup
+        final FuncidDefChangeRecord param = new FuncidDefChangeRecord();
+        param.setId(0);
+        param.setCode("code");
+        param.setGroupCode("groupCode");
+        param.setProjectId("projectId");
+        param.setOrigCode("origCode");
+        param.setName("name");
+        param.setAliasCode("aliasCode");
+        param.setAliasName("aliasName");
+        param.setClassCode("classCode");
+        param.setCategory(FuncidCategory.STATIC);
+
+        when(funcidDefChangeRecordServiceUnderTest.classDefService.queryClass(any(JacksonCriteria.class))).thenReturn(new ListResponse<>());
+        when(funcidDefChangeRecordServiceUnderTest.funcidDefService.queryFuncid(any(JacksonCriteria.class))).thenReturn(new ListResponse<>());
+
+        // Configure FuncidDefChangeRecordRepository.findAll(...).
+        final FuncidDefChangeRecord funcidDefChangeRecord = new FuncidDefChangeRecord();
+        funcidDefChangeRecord.setId(0);
+        funcidDefChangeRecord.setCode("code");
+        funcidDefChangeRecord.setGroupCode("groupCode");
+        funcidDefChangeRecord.setProjectId("projectId");
+        funcidDefChangeRecord.setOrigCode("origCode");
+        funcidDefChangeRecord.setName("name");
+        funcidDefChangeRecord.setAliasCode("aliasCode");
+        funcidDefChangeRecord.setAliasName("aliasName");
+        funcidDefChangeRecord.setClassCode("classCode");
+        funcidDefChangeRecord.setCategory(FuncidCategory.STATIC);
+        final List<FuncidDefChangeRecord> funcidDefChangeRecords = Arrays.asList(funcidDefChangeRecord);
+        when(funcidDefChangeRecordServiceUnderTest.repository.findAll()).thenReturn(funcidDefChangeRecords);
+
+        // Configure FuncidDefChangeRecordRepository.save(...).
+        final FuncidDefChangeRecord funcidDefChangeRecord1 = new FuncidDefChangeRecord();
+        funcidDefChangeRecord1.setId(0);
+        funcidDefChangeRecord1.setCode("code");
+        funcidDefChangeRecord1.setGroupCode("groupCode");
+        funcidDefChangeRecord1.setProjectId("projectId");
+        funcidDefChangeRecord1.setOrigCode("origCode");
+        funcidDefChangeRecord1.setName("name");
+        funcidDefChangeRecord1.setAliasCode("aliasCode");
+        funcidDefChangeRecord1.setAliasName("aliasName");
+        funcidDefChangeRecord1.setClassCode("classCode");
+        funcidDefChangeRecord1.setCategory(FuncidCategory.STATIC);
+        when(funcidDefChangeRecordServiceUnderTest.repository.save(any(FuncidDefChangeRecord.class))).thenReturn(funcidDefChangeRecord1);
+
+        // Run the test
+        final MapResponse result = funcidDefChangeRecordServiceUnderTest.create(param);
+
+        // Verify the results
+        verify(funcidDefChangeRecordServiceUnderTest.repository).deleteAll(Arrays.asList(new FuncidDefChangeRecord()));
+    }
+
+    @Test
+    void testCreate_FuncidDefChangeRecordRepositoryFindAllReturnsNoItems() {
+        // Setup
+        final FuncidDefChangeRecord param = new FuncidDefChangeRecord();
+        param.setId(0);
+        param.setCode("code");
+        param.setGroupCode("groupCode");
+        param.setProjectId("projectId");
+        param.setOrigCode("origCode");
+        param.setName("name");
+        param.setAliasCode("aliasCode");
+        param.setAliasName("aliasName");
+        param.setClassCode("classCode");
+        param.setCategory(FuncidCategory.STATIC);
+
+        when(funcidDefChangeRecordServiceUnderTest.classDefService.queryClass(any(JacksonCriteria.class))).thenReturn(new ListResponse<>());
+        when(funcidDefChangeRecordServiceUnderTest.funcidDefService.queryFuncid(any(JacksonCriteria.class))).thenReturn(new ListResponse<>());
+        when(funcidDefChangeRecordServiceUnderTest.repository.findAll()).thenReturn(Collections.emptyList());
+
+        // Configure FuncidDefChangeRecordRepository.save(...).
+        final FuncidDefChangeRecord funcidDefChangeRecord = new FuncidDefChangeRecord();
+        funcidDefChangeRecord.setId(0);
+        funcidDefChangeRecord.setCode("code");
+        funcidDefChangeRecord.setGroupCode("groupCode");
+        funcidDefChangeRecord.setProjectId("projectId");
+        funcidDefChangeRecord.setOrigCode("origCode");
+        funcidDefChangeRecord.setName("name");
+        funcidDefChangeRecord.setAliasCode("aliasCode");
+        funcidDefChangeRecord.setAliasName("aliasName");
+        funcidDefChangeRecord.setClassCode("classCode");
+        funcidDefChangeRecord.setCategory(FuncidCategory.STATIC);
+        when(funcidDefChangeRecordServiceUnderTest.repository.save(any(FuncidDefChangeRecord.class))).thenReturn(funcidDefChangeRecord);
+
+        // Run the test
+        final MapResponse result = funcidDefChangeRecordServiceUnderTest.create(param);
+
+        // Verify the results
+        verify(funcidDefChangeRecordServiceUnderTest.repository).deleteAll(Arrays.asList(new FuncidDefChangeRecord()));
+    }
+
+    @Test
+    void testUpdate() {
+        // Setup
+        final FuncidDefChangeRecord param = new FuncidDefChangeRecord();
+        param.setId(0);
+        param.setCode("code");
+        param.setGroupCode("groupCode");
+        param.setProjectId("projectId");
+        param.setOrigCode("origCode");
+        param.setName("name");
+        param.setAliasCode("aliasCode");
+        param.setAliasName("aliasName");
+        param.setClassCode("classCode");
+        param.setCategory(FuncidCategory.STATIC);
+
+        // Configure FuncidDefChangeRecordRepository.findById(...).
+        final FuncidDefChangeRecord funcidDefChangeRecord1 = new FuncidDefChangeRecord();
+        funcidDefChangeRecord1.setId(0);
+        funcidDefChangeRecord1.setCode("code");
+        funcidDefChangeRecord1.setGroupCode("groupCode");
+        funcidDefChangeRecord1.setProjectId("projectId");
+        funcidDefChangeRecord1.setOrigCode("origCode");
+        funcidDefChangeRecord1.setName("name");
+        funcidDefChangeRecord1.setAliasCode("aliasCode");
+        funcidDefChangeRecord1.setAliasName("aliasName");
+        funcidDefChangeRecord1.setClassCode("classCode");
+        funcidDefChangeRecord1.setCategory(FuncidCategory.STATIC);
+        final Optional<FuncidDefChangeRecord> funcidDefChangeRecord = Optional.of(funcidDefChangeRecord1);
+        when(funcidDefChangeRecordServiceUnderTest.repository.findById(0)).thenReturn(funcidDefChangeRecord);
+
+        // Configure FuncidDefChangeRecordRepository.save(...).
+        final FuncidDefChangeRecord funcidDefChangeRecord2 = new FuncidDefChangeRecord();
+        funcidDefChangeRecord2.setId(0);
+        funcidDefChangeRecord2.setCode("code");
+        funcidDefChangeRecord2.setGroupCode("groupCode");
+        funcidDefChangeRecord2.setProjectId("projectId");
+        funcidDefChangeRecord2.setOrigCode("origCode");
+        funcidDefChangeRecord2.setName("name");
+        funcidDefChangeRecord2.setAliasCode("aliasCode");
+        funcidDefChangeRecord2.setAliasName("aliasName");
+        funcidDefChangeRecord2.setClassCode("classCode");
+        funcidDefChangeRecord2.setCategory(FuncidCategory.STATIC);
+        when(funcidDefChangeRecordServiceUnderTest.repository.save(any(FuncidDefChangeRecord.class))).thenReturn(funcidDefChangeRecord2);
+
+        // Run the test
+        final MapResponse result = funcidDefChangeRecordServiceUnderTest.update(param);
+
+        // Verify the results
+    }
+
+    @Test
+    void testUpdate_FuncidDefChangeRecordRepositoryFindByIdReturnsAbsent() {
+        // Setup
+        final FuncidDefChangeRecord param = new FuncidDefChangeRecord();
+        param.setId(0);
+        param.setCode("code");
+        param.setGroupCode("groupCode");
+        param.setProjectId("projectId");
+        param.setOrigCode("origCode");
+        param.setName("name");
+        param.setAliasCode("aliasCode");
+        param.setAliasName("aliasName");
+        param.setClassCode("classCode");
+        param.setCategory(FuncidCategory.STATIC);
+
+        when(funcidDefChangeRecordServiceUnderTest.repository.findById(0)).thenReturn(Optional.empty());
+
+        // Configure FuncidDefChangeRecordRepository.save(...).
+        final FuncidDefChangeRecord funcidDefChangeRecord = new FuncidDefChangeRecord();
+        funcidDefChangeRecord.setId(0);
+        funcidDefChangeRecord.setCode("code");
+        funcidDefChangeRecord.setGroupCode("groupCode");
+        funcidDefChangeRecord.setProjectId("projectId");
+        funcidDefChangeRecord.setOrigCode("origCode");
+        funcidDefChangeRecord.setName("name");
+        funcidDefChangeRecord.setAliasCode("aliasCode");
+        funcidDefChangeRecord.setAliasName("aliasName");
+        funcidDefChangeRecord.setClassCode("classCode");
+        funcidDefChangeRecord.setCategory(FuncidCategory.STATIC);
+        when(funcidDefChangeRecordServiceUnderTest.repository.save(any(FuncidDefChangeRecord.class))).thenReturn(funcidDefChangeRecord);
+
+        // Run the test
+        final MapResponse result = funcidDefChangeRecordServiceUnderTest.update(param);
+
+        // Verify the results
+    }
+
+    @Test
+    void testAddVersion() {
+        // Setup
+        when(funcidDefChangeRecordServiceUnderTest.repository.addVersion("version", Arrays.asList(0))).thenReturn(0);
+
+        // Run the test
+        final MapResponse result = funcidDefChangeRecordServiceUnderTest.addVersion("version", Arrays.asList(0));
+
+        // Verify the results
+    }
+
+    @Test
+    void testDelete() {
+        // Setup
+        final FuncidDefChangeRecord param = new FuncidDefChangeRecord();
+        param.setId(0);
+        param.setCode("code");
+        param.setGroupCode("groupCode");
+        param.setProjectId("projectId");
+        param.setOrigCode("origCode");
+        param.setName("name");
+        param.setAliasCode("aliasCode");
+        param.setAliasName("aliasName");
+        param.setClassCode("classCode");
+        param.setCategory(FuncidCategory.STATIC);
+
+        // Configure FuncidDefChangeRecordRepository.findById(...).
+        final FuncidDefChangeRecord funcidDefChangeRecord1 = new FuncidDefChangeRecord();
+        funcidDefChangeRecord1.setId(0);
+        funcidDefChangeRecord1.setCode("code");
+        funcidDefChangeRecord1.setGroupCode("groupCode");
+        funcidDefChangeRecord1.setProjectId("projectId");
+        funcidDefChangeRecord1.setOrigCode("origCode");
+        funcidDefChangeRecord1.setName("name");
+        funcidDefChangeRecord1.setAliasCode("aliasCode");
+        funcidDefChangeRecord1.setAliasName("aliasName");
+        funcidDefChangeRecord1.setClassCode("classCode");
+        funcidDefChangeRecord1.setCategory(FuncidCategory.STATIC);
+        final Optional<FuncidDefChangeRecord> funcidDefChangeRecord = Optional.of(funcidDefChangeRecord1);
+        when(funcidDefChangeRecordServiceUnderTest.repository.findById(0)).thenReturn(funcidDefChangeRecord);
+
+        // Run the test
+        final MapResponse result = funcidDefChangeRecordServiceUnderTest.delete(param);
+
+        // Verify the results
+        verify(funcidDefChangeRecordServiceUnderTest.repository).delete(any(FuncidDefChangeRecord.class));
+    }
+
+    @Test
+    void testDelete_FuncidDefChangeRecordRepositoryFindByIdReturnsAbsent() {
+        // Setup
+        final FuncidDefChangeRecord param = new FuncidDefChangeRecord();
+        param.setId(0);
+        param.setCode("code");
+        param.setGroupCode("groupCode");
+        param.setProjectId("projectId");
+        param.setOrigCode("origCode");
+        param.setName("name");
+        param.setAliasCode("aliasCode");
+        param.setAliasName("aliasName");
+        param.setClassCode("classCode");
+        param.setCategory(FuncidCategory.STATIC);
+
+        when(funcidDefChangeRecordServiceUnderTest.repository.findById(0)).thenReturn(Optional.empty());
+
+        // Run the test
+        final MapResponse result = funcidDefChangeRecordServiceUnderTest.delete(param);
+
+        // Verify the results
+        verify(funcidDefChangeRecordServiceUnderTest.repository).delete(any(FuncidDefChangeRecord.class));
+    }
+
+    @Test
+    void testGetSqlList() {
+        // Setup
+        when(funcidDefChangeRecordServiceUnderTest.criteriaUtils.query(eq(new QFuncidDefChangeRecord("variable")), any(CriteriaExpressionParser.class), any(JacksonCriteria.class))).thenReturn(new PagedResponse<>());
+        when(funcidDefChangeRecordServiceUnderTest.classDefService.queryClass(any(JacksonCriteria.class))).thenReturn(new ListResponse<>());
+        when(funcidDefChangeRecordServiceUnderTest.funcidDefService.queryFuncid(any(JacksonCriteria.class))).thenReturn(new ListResponse<>());
+        when(funcidDefChangeRecordServiceUnderTest.rwdeditRefTypeInfosService.query(any(JacksonCriteria.class))).thenReturn(new PagedResponse<>());
+
+        // Run the test
+        final List<String> result = funcidDefChangeRecordServiceUnderTest.getSqlList("version", false);
+
+        // Verify the results
+        assertThat(result).isEqualTo(Arrays.asList("value"));
+    }
+
+    @Test
+    void testUpdateStateByVersion() {
+        // Setup
+        when(funcidDefChangeRecordServiceUnderTest.criteriaUtils.query(eq(new QFuncidDefChangeRecord("variable")), any(CriteriaExpressionParser.class), any(JacksonCriteria.class))).thenReturn(new PagedResponse<>());
+        when(funcidDefChangeRecordServiceUnderTest.classDefService.queryClass(any(JacksonCriteria.class))).thenReturn(new ListResponse<>());
+        when(funcidDefChangeRecordServiceUnderTest.funcidDefService.queryFuncid(any(JacksonCriteria.class))).thenReturn(new ListResponse<>());
+
+        // Configure FuncidDefRepository.saveAll(...).
+        final FuncidDef funcidDef = new FuncidDef();
+        funcidDef.setId("id");
+        funcidDef.setGroupCode("groupCode");
+        funcidDef.setProjectId("projectId");
+        funcidDef.setCode("code");
+        funcidDef.setOrigCode("origCode");
+        funcidDef.setName("name");
+        funcidDef.setAliasCode("aliasCode");
+        funcidDef.setAliasName("aliasName");
+        funcidDef.setClassCode("classCode");
+        funcidDef.setCategory(FuncidCategory.STATIC);
+        final List<FuncidDef> funcidDefs = Arrays.asList(funcidDef);
+        when(funcidDefChangeRecordServiceUnderTest.funcidDefRepository.saveAll(Arrays.asList(new FuncidDef()))).thenReturn(funcidDefs);
+
+        // Configure FuncidDefChangeRecordRepository.saveAll(...).
+        final FuncidDefChangeRecord funcidDefChangeRecord = new FuncidDefChangeRecord();
+        funcidDefChangeRecord.setId(0);
+        funcidDefChangeRecord.setCode("code");
+        funcidDefChangeRecord.setGroupCode("groupCode");
+        funcidDefChangeRecord.setProjectId("projectId");
+        funcidDefChangeRecord.setOrigCode("origCode");
+        funcidDefChangeRecord.setName("name");
+        funcidDefChangeRecord.setAliasCode("aliasCode");
+        funcidDefChangeRecord.setAliasName("aliasName");
+        funcidDefChangeRecord.setClassCode("classCode");
+        funcidDefChangeRecord.setCategory(FuncidCategory.STATIC);
+        final List<FuncidDefChangeRecord> funcidDefChangeRecords = Arrays.asList(funcidDefChangeRecord);
+        when(funcidDefChangeRecordServiceUnderTest.repository.saveAll(Arrays.asList(new FuncidDefChangeRecord()))).thenReturn(funcidDefChangeRecords);
+
+        // Run the test
+        funcidDefChangeRecordServiceUnderTest.updateStateByVersion(EnumVersionState.CANCEL, "version");
+
+        // Verify the results
+    }
+
+    @Test
+    void testUpdateStateByVersion_FuncidDefRepositoryReturnsNoItems() {
+        // Setup
+        when(funcidDefChangeRecordServiceUnderTest.criteriaUtils.query(eq(new QFuncidDefChangeRecord("variable")), any(CriteriaExpressionParser.class), any(JacksonCriteria.class))).thenReturn(new PagedResponse<>());
+        when(funcidDefChangeRecordServiceUnderTest.classDefService.queryClass(any(JacksonCriteria.class))).thenReturn(new ListResponse<>());
+        when(funcidDefChangeRecordServiceUnderTest.funcidDefService.queryFuncid(any(JacksonCriteria.class))).thenReturn(new ListResponse<>());
+        when(funcidDefChangeRecordServiceUnderTest.funcidDefRepository.saveAll(Arrays.asList(new FuncidDef()))).thenReturn(Collections.emptyList());
+
+        // Configure FuncidDefChangeRecordRepository.saveAll(...).
+        final FuncidDefChangeRecord funcidDefChangeRecord = new FuncidDefChangeRecord();
+        funcidDefChangeRecord.setId(0);
+        funcidDefChangeRecord.setCode("code");
+        funcidDefChangeRecord.setGroupCode("groupCode");
+        funcidDefChangeRecord.setProjectId("projectId");
+        funcidDefChangeRecord.setOrigCode("origCode");
+        funcidDefChangeRecord.setName("name");
+        funcidDefChangeRecord.setAliasCode("aliasCode");
+        funcidDefChangeRecord.setAliasName("aliasName");
+        funcidDefChangeRecord.setClassCode("classCode");
+        funcidDefChangeRecord.setCategory(FuncidCategory.STATIC);
+        final List<FuncidDefChangeRecord> funcidDefChangeRecords = Arrays.asList(funcidDefChangeRecord);
+        when(funcidDefChangeRecordServiceUnderTest.repository.saveAll(Arrays.asList(new FuncidDefChangeRecord()))).thenReturn(funcidDefChangeRecords);
+
+        // Run the test
+        funcidDefChangeRecordServiceUnderTest.updateStateByVersion(EnumVersionState.CANCEL, "version");
+
+        // Verify the results
+    }
+
+    @Test
+    void testUpdateStateByVersion_FuncidDefChangeRecordRepositoryReturnsNoItems() {
+        // Setup
+        when(funcidDefChangeRecordServiceUnderTest.criteriaUtils.query(eq(new QFuncidDefChangeRecord("variable")), any(CriteriaExpressionParser.class), any(JacksonCriteria.class))).thenReturn(new PagedResponse<>());
+        when(funcidDefChangeRecordServiceUnderTest.classDefService.queryClass(any(JacksonCriteria.class))).thenReturn(new ListResponse<>());
+        when(funcidDefChangeRecordServiceUnderTest.funcidDefService.queryFuncid(any(JacksonCriteria.class))).thenReturn(new ListResponse<>());
+
+        // Configure FuncidDefRepository.saveAll(...).
+        final FuncidDef funcidDef = new FuncidDef();
+        funcidDef.setId("id");
+        funcidDef.setGroupCode("groupCode");
+        funcidDef.setProjectId("projectId");
+        funcidDef.setCode("code");
+        funcidDef.setOrigCode("origCode");
+        funcidDef.setName("name");
+        funcidDef.setAliasCode("aliasCode");
+        funcidDef.setAliasName("aliasName");
+        funcidDef.setClassCode("classCode");
+        funcidDef.setCategory(FuncidCategory.STATIC);
+        final List<FuncidDef> funcidDefs = Arrays.asList(funcidDef);
+        when(funcidDefChangeRecordServiceUnderTest.funcidDefRepository.saveAll(Arrays.asList(new FuncidDef()))).thenReturn(funcidDefs);
+
+        when(funcidDefChangeRecordServiceUnderTest.repository.saveAll(Arrays.asList(new FuncidDefChangeRecord()))).thenReturn(Collections.emptyList());
+
+        // Run the test
+        funcidDefChangeRecordServiceUnderTest.updateStateByVersion(EnumVersionState.CANCEL, "version");
+
+        // Verify the results
+    }
+}

+ 61 - 0
dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/service/FuncidDefServiceTest.java

@@ -0,0 +1,61 @@
+package com.persagy.dmp.rwd.edit.service;
+
+import com.persagy.common.criteria.CriteriaExpressionParser;
+import com.persagy.common.criteria.CriteriaUtils;
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.ListResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.rwd.edit.entity.QFuncidDef;
+import com.persagy.dmp.rwd.edit.util.ClassCodeUtils;
+import com.persagy.dmp.rwd.model.FuncidDefModel;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
+class FuncidDefServiceTest {
+
+    @Mock
+    private ClassDefService mockClassDefService;
+    @Mock
+    private ClassCodeUtils mockClassCodeUtils;
+    @Mock
+    private CriteriaUtils mockCriteriaUtils;
+
+    @InjectMocks
+    private FuncidDefService funcidDefServiceUnderTest;
+
+    @Test
+    void testQueryFuncid() {
+        // Setup
+        final JacksonCriteria request = JacksonCriteria.newInstance();
+        when(mockClassDefService.queryClass(any(JacksonCriteria.class))).thenReturn(new ListResponse<>());
+        when(mockCriteriaUtils.query(eq(new QFuncidDef("variable")), any(CriteriaExpressionParser.class), any(JacksonCriteria.class))).thenReturn(new PagedResponse<>());
+
+        // Run the test
+        final ListResponse<FuncidDefModel> result = funcidDefServiceUnderTest.queryFuncid(request);
+
+        // Verify the results
+        verify(mockClassCodeUtils).prepareCriteriaForFuncid(any(JacksonCriteria.class), eq("codeName"));
+    }
+
+    @Test
+    void testQuery() {
+        // Setup
+        final JacksonCriteria criteria = JacksonCriteria.newInstance();
+        when(mockCriteriaUtils.query(eq(new QFuncidDef("variable")), any(CriteriaExpressionParser.class), any(JacksonCriteria.class))).thenReturn(new PagedResponse<>());
+
+        // Run the test
+        final PagedResponse<FuncidDefModel> result = funcidDefServiceUnderTest.query(criteria);
+
+        // Verify the results
+        verify(mockClassCodeUtils).prepareCriteriaForFuncid(any(JacksonCriteria.class), eq("codeName"));
+    }
+}

+ 143 - 0
dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/service/RwdeditRefTypeInfosServiceTest.java

@@ -0,0 +1,143 @@
+package com.persagy.dmp.rwd.edit.service;
+
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.common.criteria.CriteriaExpressionParser;
+import com.persagy.common.criteria.CriteriaUtils;
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.rwd.edit.entity.QRwdeditRefTypeInfos;
+import com.persagy.dmp.rwd.edit.entity.RwdeditRefTypeInfos;
+import com.persagy.dmp.rwd.edit.repository.RwdeditRefTypeInfosRepository;
+import com.persagy.dmp.rwd.model.RwdeditRefTypeInfosModel;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
+class RwdeditRefTypeInfosServiceTest {
+
+    @Mock
+    private CriteriaUtils mockCriteriaUtils;
+    @Mock
+    private RwdeditRefTypeInfosRepository mockRepository;
+
+    @InjectMocks
+    private RwdeditRefTypeInfosService rwdeditRefTypeInfosServiceUnderTest;
+
+    @Test
+    void testQuery() {
+        // Setup
+        final JacksonCriteria criteria = JacksonCriteria.newInstance();
+        when(mockCriteriaUtils.query(eq(new QRwdeditRefTypeInfos("variable")), any(CriteriaExpressionParser.class), any(JacksonCriteria.class))).thenReturn(new PagedResponse<>());
+
+        // Run the test
+        final PagedResponse<RwdeditRefTypeInfosModel> result = rwdeditRefTypeInfosServiceUnderTest.query(criteria);
+
+        // Verify the results
+    }
+
+    @Test
+    void testCreate() {
+        // Setup
+        final RwdeditRefTypeInfos refTypeInfos = new RwdeditRefTypeInfos();
+        refTypeInfos.setRefKey("refKey");
+        refTypeInfos.setCode("code");
+        refTypeInfos.setName("name");
+        refTypeInfos.setParentCode("parentCode");
+        refTypeInfos.setDataSource(new ObjectNode(new JsonNodeFactory(false)));
+        refTypeInfos.setCreateUser(0);
+        refTypeInfos.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        refTypeInfos.setUpdateUser(0);
+        refTypeInfos.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+
+        when(mockCriteriaUtils.query(eq(new QRwdeditRefTypeInfos("variable")), any(CriteriaExpressionParser.class), any(JacksonCriteria.class))).thenReturn(new PagedResponse<>());
+
+        // Configure RwdeditRefTypeInfosRepository.save(...).
+        final RwdeditRefTypeInfos rwdeditRefTypeInfos = new RwdeditRefTypeInfos();
+        rwdeditRefTypeInfos.setRefKey("refKey");
+        rwdeditRefTypeInfos.setCode("code");
+        rwdeditRefTypeInfos.setName("name");
+        rwdeditRefTypeInfos.setParentCode("parentCode");
+        rwdeditRefTypeInfos.setDataSource(new ObjectNode(new JsonNodeFactory(false)));
+        rwdeditRefTypeInfos.setCreateUser(0);
+        rwdeditRefTypeInfos.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefTypeInfos.setUpdateUser(0);
+        rwdeditRefTypeInfos.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        when(mockRepository.save(any(RwdeditRefTypeInfos.class))).thenReturn(rwdeditRefTypeInfos);
+
+        // Run the test
+        final MapResponse result = rwdeditRefTypeInfosServiceUnderTest.create(refTypeInfos);
+
+        // Verify the results
+    }
+
+    @Test
+    void testUpdate() {
+        // Setup
+        final RwdeditRefTypeInfos refTypeInfos = new RwdeditRefTypeInfos();
+        refTypeInfos.setRefKey("refKey");
+        refTypeInfos.setCode("code");
+        refTypeInfos.setName("name");
+        refTypeInfos.setParentCode("parentCode");
+        refTypeInfos.setDataSource(new ObjectNode(new JsonNodeFactory(false)));
+        refTypeInfos.setCreateUser(0);
+        refTypeInfos.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        refTypeInfos.setUpdateUser(0);
+        refTypeInfos.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+
+        when(mockCriteriaUtils.query(eq(new QRwdeditRefTypeInfos("variable")), any(CriteriaExpressionParser.class), any(JacksonCriteria.class))).thenReturn(new PagedResponse<>());
+
+        // Configure RwdeditRefTypeInfosRepository.save(...).
+        final RwdeditRefTypeInfos rwdeditRefTypeInfos = new RwdeditRefTypeInfos();
+        rwdeditRefTypeInfos.setRefKey("refKey");
+        rwdeditRefTypeInfos.setCode("code");
+        rwdeditRefTypeInfos.setName("name");
+        rwdeditRefTypeInfos.setParentCode("parentCode");
+        rwdeditRefTypeInfos.setDataSource(new ObjectNode(new JsonNodeFactory(false)));
+        rwdeditRefTypeInfos.setCreateUser(0);
+        rwdeditRefTypeInfos.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefTypeInfos.setUpdateUser(0);
+        rwdeditRefTypeInfos.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        when(mockRepository.save(any(RwdeditRefTypeInfos.class))).thenReturn(rwdeditRefTypeInfos);
+
+        // Run the test
+        final MapResponse result = rwdeditRefTypeInfosServiceUnderTest.update(refTypeInfos);
+
+        // Verify the results
+    }
+
+    @Test
+    void testDelete() {
+        // Setup
+        final RwdeditRefTypeInfos refTypeInfos = new RwdeditRefTypeInfos();
+        refTypeInfos.setRefKey("refKey");
+        refTypeInfos.setCode("code");
+        refTypeInfos.setName("name");
+        refTypeInfos.setParentCode("parentCode");
+        refTypeInfos.setDataSource(new ObjectNode(new JsonNodeFactory(false)));
+        refTypeInfos.setCreateUser(0);
+        refTypeInfos.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        refTypeInfos.setUpdateUser(0);
+        refTypeInfos.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+
+        when(mockCriteriaUtils.query(eq(new QRwdeditRefTypeInfos("variable")), any(CriteriaExpressionParser.class), any(JacksonCriteria.class))).thenReturn(new PagedResponse<>());
+
+        // Run the test
+        final MapResponse result = rwdeditRefTypeInfosServiceUnderTest.delete(refTypeInfos);
+
+        // Verify the results
+        verify(mockRepository).delete(any(RwdeditRefTypeInfos.class));
+    }
+}

+ 348 - 0
dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/service/RwdeditRefTypeServiceTest.java

@@ -0,0 +1,348 @@
+package com.persagy.dmp.rwd.edit.service;
+
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.common.criteria.CriteriaExpressionParser;
+import com.persagy.common.criteria.CriteriaUtils;
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.rwd.edit.entity.QRwdeditRefType;
+import com.persagy.dmp.rwd.edit.entity.RwdeditRefType;
+import com.persagy.dmp.rwd.edit.entity.RwdeditRefTypeInfos;
+import com.persagy.dmp.rwd.edit.model.RwdeditRefTypeModel;
+import com.persagy.dmp.rwd.edit.repository.RwdeditRefTypeRepository;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+import java.util.Optional;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
+class RwdeditRefTypeServiceTest {
+
+    @Mock
+    private CriteriaUtils mockCriteriaUtils;
+    @Mock
+    private RwdeditRefTypeRepository mockRepository;
+
+    @InjectMocks
+    private RwdeditRefTypeService rwdeditRefTypeServiceUnderTest;
+
+    @Test
+    void testQuery() {
+        // Setup
+        final JacksonCriteria criteria = JacksonCriteria.newInstance();
+        when(mockCriteriaUtils.query(eq(new QRwdeditRefType("variable")), any(CriteriaExpressionParser.class), any(JacksonCriteria.class))).thenReturn(new PagedResponse<>());
+
+        // Run the test
+        final PagedResponse<RwdeditRefTypeModel> result = rwdeditRefTypeServiceUnderTest.query(criteria);
+
+        // Verify the results
+    }
+
+    @Test
+    void testCreate() {
+        // Setup
+        final RwdeditRefTypeModel param = new RwdeditRefTypeModel();
+        param.setRefKey("refKey");
+        param.setName("name");
+        param.setCreateUser(0);
+        param.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setUpdateUser(0);
+        param.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setSeq(0);
+        param.setShowPosition(0);
+        final RwdeditRefTypeInfos rwdeditRefTypeInfos = new RwdeditRefTypeInfos();
+        rwdeditRefTypeInfos.setRefKey("refKey");
+        rwdeditRefTypeInfos.setCode("code");
+        rwdeditRefTypeInfos.setName("name");
+        rwdeditRefTypeInfos.setParentCode("parentCode");
+        rwdeditRefTypeInfos.setDataSource(new ObjectNode(new JsonNodeFactory(false)));
+        rwdeditRefTypeInfos.setCreateUser(0);
+        rwdeditRefTypeInfos.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefTypeInfos.setUpdateUser(0);
+        rwdeditRefTypeInfos.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setInfos(Arrays.asList(rwdeditRefTypeInfos));
+
+        // Configure RwdeditRefTypeRepository.findById(...).
+        final RwdeditRefType rwdeditRefType1 = new RwdeditRefType();
+        rwdeditRefType1.setRefKey("refKey");
+        rwdeditRefType1.setName("name");
+        rwdeditRefType1.setCreateUser(0);
+        rwdeditRefType1.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefType1.setUpdateUser(0);
+        rwdeditRefType1.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefType1.setSeq(0);
+        rwdeditRefType1.setShowPosition(0);
+        final RwdeditRefTypeInfos rwdeditRefTypeInfos1 = new RwdeditRefTypeInfos();
+        rwdeditRefTypeInfos1.setRefKey("refKey");
+        rwdeditRefTypeInfos1.setCode("code");
+        rwdeditRefTypeInfos1.setName("name");
+        rwdeditRefTypeInfos1.setParentCode("parentCode");
+        rwdeditRefTypeInfos1.setDataSource(new ObjectNode(new JsonNodeFactory(false)));
+        rwdeditRefTypeInfos1.setCreateUser(0);
+        rwdeditRefTypeInfos1.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefTypeInfos1.setUpdateUser(0);
+        rwdeditRefTypeInfos1.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefType1.setInfos(Arrays.asList(rwdeditRefTypeInfos1));
+        final Optional<RwdeditRefType> rwdeditRefType = Optional.of(rwdeditRefType1);
+        when(mockRepository.findById("id")).thenReturn(rwdeditRefType);
+
+        // Configure RwdeditRefTypeRepository.save(...).
+        final RwdeditRefType rwdeditRefType2 = new RwdeditRefType();
+        rwdeditRefType2.setRefKey("refKey");
+        rwdeditRefType2.setName("name");
+        rwdeditRefType2.setCreateUser(0);
+        rwdeditRefType2.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefType2.setUpdateUser(0);
+        rwdeditRefType2.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefType2.setSeq(0);
+        rwdeditRefType2.setShowPosition(0);
+        final RwdeditRefTypeInfos rwdeditRefTypeInfos2 = new RwdeditRefTypeInfos();
+        rwdeditRefTypeInfos2.setRefKey("refKey");
+        rwdeditRefTypeInfos2.setCode("code");
+        rwdeditRefTypeInfos2.setName("name");
+        rwdeditRefTypeInfos2.setParentCode("parentCode");
+        rwdeditRefTypeInfos2.setDataSource(new ObjectNode(new JsonNodeFactory(false)));
+        rwdeditRefTypeInfos2.setCreateUser(0);
+        rwdeditRefTypeInfos2.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefTypeInfos2.setUpdateUser(0);
+        rwdeditRefTypeInfos2.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefType2.setInfos(Arrays.asList(rwdeditRefTypeInfos2));
+        when(mockRepository.save(any(RwdeditRefType.class))).thenReturn(rwdeditRefType2);
+
+        // Run the test
+        final MapResponse result = rwdeditRefTypeServiceUnderTest.create(param);
+
+        // Verify the results
+    }
+
+    @Test
+    void testCreate_RwdeditRefTypeRepositoryFindByIdReturnsAbsent() {
+        // Setup
+        final RwdeditRefTypeModel param = new RwdeditRefTypeModel();
+        param.setRefKey("refKey");
+        param.setName("name");
+        param.setCreateUser(0);
+        param.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setUpdateUser(0);
+        param.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setSeq(0);
+        param.setShowPosition(0);
+        final RwdeditRefTypeInfos rwdeditRefTypeInfos = new RwdeditRefTypeInfos();
+        rwdeditRefTypeInfos.setRefKey("refKey");
+        rwdeditRefTypeInfos.setCode("code");
+        rwdeditRefTypeInfos.setName("name");
+        rwdeditRefTypeInfos.setParentCode("parentCode");
+        rwdeditRefTypeInfos.setDataSource(new ObjectNode(new JsonNodeFactory(false)));
+        rwdeditRefTypeInfos.setCreateUser(0);
+        rwdeditRefTypeInfos.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefTypeInfos.setUpdateUser(0);
+        rwdeditRefTypeInfos.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setInfos(Arrays.asList(rwdeditRefTypeInfos));
+
+        when(mockRepository.findById("id")).thenReturn(Optional.empty());
+
+        // Configure RwdeditRefTypeRepository.save(...).
+        final RwdeditRefType rwdeditRefType = new RwdeditRefType();
+        rwdeditRefType.setRefKey("refKey");
+        rwdeditRefType.setName("name");
+        rwdeditRefType.setCreateUser(0);
+        rwdeditRefType.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefType.setUpdateUser(0);
+        rwdeditRefType.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefType.setSeq(0);
+        rwdeditRefType.setShowPosition(0);
+        final RwdeditRefTypeInfos rwdeditRefTypeInfos1 = new RwdeditRefTypeInfos();
+        rwdeditRefTypeInfos1.setRefKey("refKey");
+        rwdeditRefTypeInfos1.setCode("code");
+        rwdeditRefTypeInfos1.setName("name");
+        rwdeditRefTypeInfos1.setParentCode("parentCode");
+        rwdeditRefTypeInfos1.setDataSource(new ObjectNode(new JsonNodeFactory(false)));
+        rwdeditRefTypeInfos1.setCreateUser(0);
+        rwdeditRefTypeInfos1.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefTypeInfos1.setUpdateUser(0);
+        rwdeditRefTypeInfos1.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefType.setInfos(Arrays.asList(rwdeditRefTypeInfos1));
+        when(mockRepository.save(any(RwdeditRefType.class))).thenReturn(rwdeditRefType);
+
+        // Run the test
+        final MapResponse result = rwdeditRefTypeServiceUnderTest.create(param);
+
+        // Verify the results
+    }
+
+    @Test
+    void testUpdate() {
+        // Setup
+        final RwdeditRefTypeModel param = new RwdeditRefTypeModel();
+        param.setRefKey("refKey");
+        param.setName("name");
+        param.setCreateUser(0);
+        param.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setUpdateUser(0);
+        param.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setSeq(0);
+        param.setShowPosition(0);
+        final RwdeditRefTypeInfos rwdeditRefTypeInfos = new RwdeditRefTypeInfos();
+        rwdeditRefTypeInfos.setRefKey("refKey");
+        rwdeditRefTypeInfos.setCode("code");
+        rwdeditRefTypeInfos.setName("name");
+        rwdeditRefTypeInfos.setParentCode("parentCode");
+        rwdeditRefTypeInfos.setDataSource(new ObjectNode(new JsonNodeFactory(false)));
+        rwdeditRefTypeInfos.setCreateUser(0);
+        rwdeditRefTypeInfos.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefTypeInfos.setUpdateUser(0);
+        rwdeditRefTypeInfos.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setInfos(Arrays.asList(rwdeditRefTypeInfos));
+
+        // Configure RwdeditRefTypeRepository.findById(...).
+        final RwdeditRefType rwdeditRefType1 = new RwdeditRefType();
+        rwdeditRefType1.setRefKey("refKey");
+        rwdeditRefType1.setName("name");
+        rwdeditRefType1.setCreateUser(0);
+        rwdeditRefType1.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefType1.setUpdateUser(0);
+        rwdeditRefType1.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefType1.setSeq(0);
+        rwdeditRefType1.setShowPosition(0);
+        final RwdeditRefTypeInfos rwdeditRefTypeInfos1 = new RwdeditRefTypeInfos();
+        rwdeditRefTypeInfos1.setRefKey("refKey");
+        rwdeditRefTypeInfos1.setCode("code");
+        rwdeditRefTypeInfos1.setName("name");
+        rwdeditRefTypeInfos1.setParentCode("parentCode");
+        rwdeditRefTypeInfos1.setDataSource(new ObjectNode(new JsonNodeFactory(false)));
+        rwdeditRefTypeInfos1.setCreateUser(0);
+        rwdeditRefTypeInfos1.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefTypeInfos1.setUpdateUser(0);
+        rwdeditRefTypeInfos1.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefType1.setInfos(Arrays.asList(rwdeditRefTypeInfos1));
+        final Optional<RwdeditRefType> rwdeditRefType = Optional.of(rwdeditRefType1);
+        when(mockRepository.findById("id")).thenReturn(rwdeditRefType);
+
+        // Configure RwdeditRefTypeRepository.save(...).
+        final RwdeditRefType rwdeditRefType2 = new RwdeditRefType();
+        rwdeditRefType2.setRefKey("refKey");
+        rwdeditRefType2.setName("name");
+        rwdeditRefType2.setCreateUser(0);
+        rwdeditRefType2.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefType2.setUpdateUser(0);
+        rwdeditRefType2.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefType2.setSeq(0);
+        rwdeditRefType2.setShowPosition(0);
+        final RwdeditRefTypeInfos rwdeditRefTypeInfos2 = new RwdeditRefTypeInfos();
+        rwdeditRefTypeInfos2.setRefKey("refKey");
+        rwdeditRefTypeInfos2.setCode("code");
+        rwdeditRefTypeInfos2.setName("name");
+        rwdeditRefTypeInfos2.setParentCode("parentCode");
+        rwdeditRefTypeInfos2.setDataSource(new ObjectNode(new JsonNodeFactory(false)));
+        rwdeditRefTypeInfos2.setCreateUser(0);
+        rwdeditRefTypeInfos2.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefTypeInfos2.setUpdateUser(0);
+        rwdeditRefTypeInfos2.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefType2.setInfos(Arrays.asList(rwdeditRefTypeInfos2));
+        when(mockRepository.save(any(RwdeditRefType.class))).thenReturn(rwdeditRefType2);
+
+        // Run the test
+        final MapResponse result = rwdeditRefTypeServiceUnderTest.update(param);
+
+        // Verify the results
+    }
+
+    @Test
+    void testUpdate_RwdeditRefTypeRepositoryFindByIdReturnsAbsent() {
+        // Setup
+        final RwdeditRefTypeModel param = new RwdeditRefTypeModel();
+        param.setRefKey("refKey");
+        param.setName("name");
+        param.setCreateUser(0);
+        param.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setUpdateUser(0);
+        param.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setSeq(0);
+        param.setShowPosition(0);
+        final RwdeditRefTypeInfos rwdeditRefTypeInfos = new RwdeditRefTypeInfos();
+        rwdeditRefTypeInfos.setRefKey("refKey");
+        rwdeditRefTypeInfos.setCode("code");
+        rwdeditRefTypeInfos.setName("name");
+        rwdeditRefTypeInfos.setParentCode("parentCode");
+        rwdeditRefTypeInfos.setDataSource(new ObjectNode(new JsonNodeFactory(false)));
+        rwdeditRefTypeInfos.setCreateUser(0);
+        rwdeditRefTypeInfos.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefTypeInfos.setUpdateUser(0);
+        rwdeditRefTypeInfos.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setInfos(Arrays.asList(rwdeditRefTypeInfos));
+
+        when(mockRepository.findById("id")).thenReturn(Optional.empty());
+
+        // Configure RwdeditRefTypeRepository.save(...).
+        final RwdeditRefType rwdeditRefType = new RwdeditRefType();
+        rwdeditRefType.setRefKey("refKey");
+        rwdeditRefType.setName("name");
+        rwdeditRefType.setCreateUser(0);
+        rwdeditRefType.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefType.setUpdateUser(0);
+        rwdeditRefType.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefType.setSeq(0);
+        rwdeditRefType.setShowPosition(0);
+        final RwdeditRefTypeInfos rwdeditRefTypeInfos1 = new RwdeditRefTypeInfos();
+        rwdeditRefTypeInfos1.setRefKey("refKey");
+        rwdeditRefTypeInfos1.setCode("code");
+        rwdeditRefTypeInfos1.setName("name");
+        rwdeditRefTypeInfos1.setParentCode("parentCode");
+        rwdeditRefTypeInfos1.setDataSource(new ObjectNode(new JsonNodeFactory(false)));
+        rwdeditRefTypeInfos1.setCreateUser(0);
+        rwdeditRefTypeInfos1.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefTypeInfos1.setUpdateUser(0);
+        rwdeditRefTypeInfos1.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefType.setInfos(Arrays.asList(rwdeditRefTypeInfos1));
+        when(mockRepository.save(any(RwdeditRefType.class))).thenReturn(rwdeditRefType);
+
+        // Run the test
+        final MapResponse result = rwdeditRefTypeServiceUnderTest.update(param);
+
+        // Verify the results
+    }
+
+    @Test
+    void testDelete() {
+        // Setup
+        final RwdeditRefTypeModel param = new RwdeditRefTypeModel();
+        param.setRefKey("refKey");
+        param.setName("name");
+        param.setCreateUser(0);
+        param.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setUpdateUser(0);
+        param.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setSeq(0);
+        param.setShowPosition(0);
+        final RwdeditRefTypeInfos rwdeditRefTypeInfos = new RwdeditRefTypeInfos();
+        rwdeditRefTypeInfos.setRefKey("refKey");
+        rwdeditRefTypeInfos.setCode("code");
+        rwdeditRefTypeInfos.setName("name");
+        rwdeditRefTypeInfos.setParentCode("parentCode");
+        rwdeditRefTypeInfos.setDataSource(new ObjectNode(new JsonNodeFactory(false)));
+        rwdeditRefTypeInfos.setCreateUser(0);
+        rwdeditRefTypeInfos.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditRefTypeInfos.setUpdateUser(0);
+        rwdeditRefTypeInfos.setUpdateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setInfos(Arrays.asList(rwdeditRefTypeInfos));
+
+        // Run the test
+        final MapResponse result = rwdeditRefTypeServiceUnderTest.delete(param);
+
+        // Verify the results
+        verify(mockRepository).deleteById("id");
+    }
+}

+ 277 - 0
dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/service/RwdeditVersionServiceTest.java

@@ -0,0 +1,277 @@
+package com.persagy.dmp.rwd.edit.service;
+
+import com.persagy.common.criteria.CriteriaExpressionParser;
+import com.persagy.common.criteria.CriteriaUtils;
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.rwd.edit.entity.QClassDef;
+import com.persagy.dmp.rwd.edit.entity.QRwdeditVersion;
+import com.persagy.dmp.rwd.edit.entity.RwdeditVersion;
+import com.persagy.dmp.rwd.edit.enumeration.EnumVersionState;
+import com.persagy.dmp.rwd.edit.repository.RwdeditVersionRepository;
+import com.querydsl.jpa.impl.JPAQuery;
+import com.querydsl.jpa.impl.JPAQueryFactory;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.springframework.mock.web.MockHttpServletResponse;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.*;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
+class RwdeditVersionServiceTest {
+
+    @Mock
+    private JPAQueryFactory mockQueryFactory;
+    @Mock
+    private CriteriaUtils mockCriteriaUtils;
+    @Mock
+    private RwdeditVersionRepository mockRepository;
+    @Mock
+    private ClassDefChangeRecordService mockClassDefChangeRecordService;
+    @Mock
+    private FuncidDefChangeRecordService mockFuncidDefChangeRecordService;
+
+    @InjectMocks
+    private RwdeditVersionService rwdeditVersionServiceUnderTest;
+
+    @Test
+    void testQuery() {
+        // Setup
+        final JacksonCriteria criteria = JacksonCriteria.newInstance();
+        when(mockCriteriaUtils.query(eq(new QRwdeditVersion("variable")), any(CriteriaExpressionParser.class), any(JacksonCriteria.class))).thenReturn(new PagedResponse<>());
+
+        // Run the test
+        final PagedResponse<RwdeditVersion> result = rwdeditVersionServiceUnderTest.query(criteria);
+
+        // Verify the results
+    }
+
+    @Test
+    void testCreate() {
+        // Setup
+        final RwdeditVersion param = new RwdeditVersion();
+        param.setVersion("version");
+        param.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setCreateUser("createUser");
+        param.setState(EnumVersionState.CANCEL);
+
+        when(mockRepository.count()).thenReturn(0L);
+
+        // Configure RwdeditVersionRepository.save(...).
+        final RwdeditVersion rwdeditVersion = new RwdeditVersion();
+        rwdeditVersion.setVersion("version");
+        rwdeditVersion.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditVersion.setCreateUser("createUser");
+        rwdeditVersion.setState(EnumVersionState.CANCEL);
+        when(mockRepository.save(any(RwdeditVersion.class))).thenReturn(rwdeditVersion);
+
+        // Run the test
+        final MapResponse result = rwdeditVersionServiceUnderTest.create(param);
+
+        // Verify the results
+    }
+
+    @Test
+    void testUpdate() {
+        // Setup
+        final RwdeditVersion param = new RwdeditVersion();
+        param.setVersion("version");
+        param.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setCreateUser("createUser");
+        param.setState(EnumVersionState.CANCEL);
+
+        // Configure RwdeditVersionRepository.findById(...).
+        final RwdeditVersion rwdeditVersion1 = new RwdeditVersion();
+        rwdeditVersion1.setVersion("version");
+        rwdeditVersion1.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditVersion1.setCreateUser("createUser");
+        rwdeditVersion1.setState(EnumVersionState.CANCEL);
+        final Optional<RwdeditVersion> rwdeditVersion = Optional.of(rwdeditVersion1);
+        when(mockRepository.findById("id")).thenReturn(rwdeditVersion);
+
+        // Configure RwdeditVersionRepository.save(...).
+        final RwdeditVersion rwdeditVersion2 = new RwdeditVersion();
+        rwdeditVersion2.setVersion("version");
+        rwdeditVersion2.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditVersion2.setCreateUser("createUser");
+        rwdeditVersion2.setState(EnumVersionState.CANCEL);
+        when(mockRepository.save(any(RwdeditVersion.class))).thenReturn(rwdeditVersion2);
+
+        // Run the test
+        final MapResponse result = rwdeditVersionServiceUnderTest.update(param);
+
+        // Verify the results
+        verify(mockClassDefChangeRecordService).updateStateByVersion(EnumVersionState.CANCEL, "version");
+        verify(mockFuncidDefChangeRecordService).updateStateByVersion(EnumVersionState.CANCEL, "version");
+    }
+
+    @Test
+    void testUpdate_RwdeditVersionRepositoryFindByIdReturnsAbsent() {
+        // Setup
+        final RwdeditVersion param = new RwdeditVersion();
+        param.setVersion("version");
+        param.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setCreateUser("createUser");
+        param.setState(EnumVersionState.CANCEL);
+
+        when(mockRepository.findById("id")).thenReturn(Optional.empty());
+
+        // Configure RwdeditVersionRepository.save(...).
+        final RwdeditVersion rwdeditVersion = new RwdeditVersion();
+        rwdeditVersion.setVersion("version");
+        rwdeditVersion.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditVersion.setCreateUser("createUser");
+        rwdeditVersion.setState(EnumVersionState.CANCEL);
+        when(mockRepository.save(any(RwdeditVersion.class))).thenReturn(rwdeditVersion);
+
+        // Run the test
+        final MapResponse result = rwdeditVersionServiceUnderTest.update(param);
+
+        // Verify the results
+        verify(mockClassDefChangeRecordService).updateStateByVersion(EnumVersionState.CANCEL, "version");
+        verify(mockFuncidDefChangeRecordService).updateStateByVersion(EnumVersionState.CANCEL, "version");
+    }
+
+    @Test
+    void testDelete() {
+        // Setup
+        final RwdeditVersion param = new RwdeditVersion();
+        param.setVersion("version");
+        param.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setCreateUser("createUser");
+        param.setState(EnumVersionState.CANCEL);
+
+        // Configure RwdeditVersionRepository.findById(...).
+        final RwdeditVersion rwdeditVersion1 = new RwdeditVersion();
+        rwdeditVersion1.setVersion("version");
+        rwdeditVersion1.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        rwdeditVersion1.setCreateUser("createUser");
+        rwdeditVersion1.setState(EnumVersionState.CANCEL);
+        final Optional<RwdeditVersion> rwdeditVersion = Optional.of(rwdeditVersion1);
+        when(mockRepository.findById("id")).thenReturn(rwdeditVersion);
+
+        when(mockClassDefChangeRecordService.query(any(JacksonCriteria.class))).thenReturn(new PagedResponse<>());
+        when(mockFuncidDefChangeRecordService.query(any(JacksonCriteria.class))).thenReturn(new PagedResponse<>());
+
+        // Run the test
+        final MapResponse result = rwdeditVersionServiceUnderTest.delete(param);
+
+        // Verify the results
+        verify(mockRepository).delete(any(RwdeditVersion.class));
+    }
+
+    @Test
+    void testDelete_RwdeditVersionRepositoryFindByIdReturnsAbsent() {
+        // Setup
+        final RwdeditVersion param = new RwdeditVersion();
+        param.setVersion("version");
+        param.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        param.setCreateUser("createUser");
+        param.setState(EnumVersionState.CANCEL);
+
+        when(mockRepository.findById("id")).thenReturn(Optional.empty());
+        when(mockClassDefChangeRecordService.query(any(JacksonCriteria.class))).thenReturn(new PagedResponse<>());
+        when(mockFuncidDefChangeRecordService.query(any(JacksonCriteria.class))).thenReturn(new PagedResponse<>());
+
+        // Run the test
+        final MapResponse result = rwdeditVersionServiceUnderTest.delete(param);
+
+        // Verify the results
+        verify(mockRepository).delete(any(RwdeditVersion.class));
+    }
+
+    @Test
+    void testDownload() {
+        // Setup
+        final HttpServletResponse resp = new MockHttpServletResponse();
+        when(mockClassDefChangeRecordService.getSqlList("version", false)).thenReturn(Arrays.asList("value"));
+        when(mockFuncidDefChangeRecordService.getSqlList("version", false)).thenReturn(Arrays.asList("value"));
+
+        // Run the test
+        rwdeditVersionServiceUnderTest.download(resp, "version", false);
+
+        // Verify the results
+    }
+
+    @Test
+    void testDownload_ClassDefChangeRecordServiceReturnsNoItems() {
+        // Setup
+        final HttpServletResponse resp = new MockHttpServletResponse();
+        when(mockClassDefChangeRecordService.getSqlList("version", false)).thenReturn(Collections.emptyList());
+        when(mockFuncidDefChangeRecordService.getSqlList("version", false)).thenReturn(Arrays.asList("value"));
+
+        // Run the test
+        rwdeditVersionServiceUnderTest.download(resp, "version", false);
+
+        // Verify the results
+    }
+
+    @Test
+    void testDownload_FuncidDefChangeRecordServiceReturnsNoItems() {
+        // Setup
+        final HttpServletResponse resp = new MockHttpServletResponse();
+        when(mockClassDefChangeRecordService.getSqlList("version", false)).thenReturn(Arrays.asList("value"));
+        when(mockFuncidDefChangeRecordService.getSqlList("version", false)).thenReturn(Collections.emptyList());
+
+        // Run the test
+        rwdeditVersionServiceUnderTest.download(resp, "version", false);
+
+        // Verify the results
+    }
+
+    @Test
+    void testDownloadTotal() {
+        // Setup
+        final PrintWriter out = new PrintWriter(new StringWriter(), false);
+        when(mockQueryFactory.selectFrom(new QClassDef("variable"))).thenReturn(new JPAQuery<>());
+
+        // Run the test
+        rwdeditVersionServiceUnderTest.downloadTotal(out);
+
+        // Verify the results
+    }
+
+    @Test
+    void testDownloadTotal_BrokenOut() {
+        // Setup
+        final PrintWriter out = new PrintWriter(new Writer() {
+
+            private final IOException exception = new IOException("Error");
+
+            @Override
+            public void write(final char[] cbuf, final int off, final int len) throws IOException {
+                throw exception;
+            }
+
+            @Override
+            public void flush() throws IOException {
+                throw exception;
+            }
+
+            @Override
+            public void close() throws IOException {
+                throw exception;
+            }
+        }, false);
+        when(mockQueryFactory.selectFrom(new QClassDef("variable"))).thenReturn(new JPAQuery<>());
+
+        // Run the test
+        rwdeditVersionServiceUnderTest.downloadTotal(out);
+
+        // Verify the results
+    }
+}

+ 174 - 0
dmp-rwd-edit/src/test/java/com/persagy/dmp/rwd/edit/service/UserServiceTest.java

@@ -0,0 +1,174 @@
+package com.persagy.dmp.rwd.edit.service;
+
+import com.persagy.common.web.MapResponse;
+import com.persagy.dmp.rwd.edit.config.shiro.UserModel;
+import com.persagy.dmp.rwd.edit.entity.AdminUser;
+import com.persagy.dmp.rwd.edit.repository.AdminPermissionRepository;
+import com.persagy.dmp.rwd.edit.repository.AdminUserRepository;
+import com.querydsl.core.BooleanBuilder;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.springframework.data.redis.core.StringRedisTemplate;
+
+import java.util.*;
+
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
+class UserServiceTest {
+
+    @Mock
+    private AdminUserRepository mockUserRepository;
+    @Mock
+    private AdminPermissionRepository mockPermissionRepository;
+    @Mock
+    private StringRedisTemplate mockRedis;
+
+    @InjectMocks
+    private UserService userServiceUnderTest;
+
+    @Test
+    void testLogin() {
+        // Setup
+        final UserModel userModel = new UserModel();
+        userModel.setId(0);
+        userModel.setToken("token");
+        userModel.setUsername("username");
+        userModel.setPassword("password");
+        userModel.setPermissions(Arrays.asList("value"));
+
+        // Configure AdminUserRepository.findOne(...).
+        final AdminUser adminUser1 = new AdminUser();
+        adminUser1.setId(0);
+        adminUser1.setUsername("username");
+        adminUser1.setPassword("password");
+        adminUser1.setRealname("realname");
+        adminUser1.setPhone("phone");
+        adminUser1.setRemark("remark");
+        adminUser1.setStatus(0);
+        adminUser1.setCreateUser(0);
+        adminUser1.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminUser1.setUpdateUser(0);
+        final Optional<AdminUser> adminUser = Optional.of(adminUser1);
+        when(mockUserRepository.findOne(new BooleanBuilder())).thenReturn(adminUser);
+
+        when(mockRedis.opsForValue()).thenReturn(null);
+
+        // Run the test
+        final MapResponse result = userServiceUnderTest.login(userModel);
+
+        // Verify the results
+    }
+
+    @Test
+    void testLogin_AdminUserRepositoryReturnsAbsent() {
+        // Setup
+        final UserModel userModel = new UserModel();
+        userModel.setId(0);
+        userModel.setToken("token");
+        userModel.setUsername("username");
+        userModel.setPassword("password");
+        userModel.setPermissions(Arrays.asList("value"));
+
+        when(mockUserRepository.findOne(new BooleanBuilder())).thenReturn(Optional.empty());
+        when(mockRedis.opsForValue()).thenReturn(null);
+
+        // Run the test
+        final MapResponse result = userServiceUnderTest.login(userModel);
+
+        // Verify the results
+    }
+
+    @Test
+    void testLogout() {
+        // Setup
+        when(mockRedis.opsForValue()).thenReturn(null);
+        when(mockRedis.delete("key")).thenReturn(false);
+
+        // Run the test
+        final MapResponse result = userServiceUnderTest.logout();
+
+        // Verify the results
+    }
+
+    @Test
+    void testLogout_StringRedisTemplateDeleteReturnsNull() {
+        // Setup
+        when(mockRedis.opsForValue()).thenReturn(null);
+        when(mockRedis.delete("key")).thenReturn(null);
+
+        // Run the test
+        final MapResponse result = userServiceUnderTest.logout();
+
+        // Verify the results
+    }
+
+    @Test
+    void testUserInfo() {
+        // Setup
+
+        // Configure AdminUserRepository.findOne(...).
+        final AdminUser adminUser1 = new AdminUser();
+        adminUser1.setId(0);
+        adminUser1.setUsername("username");
+        adminUser1.setPassword("password");
+        adminUser1.setRealname("realname");
+        adminUser1.setPhone("phone");
+        adminUser1.setRemark("remark");
+        adminUser1.setStatus(0);
+        adminUser1.setCreateUser(0);
+        adminUser1.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminUser1.setUpdateUser(0);
+        final Optional<AdminUser> adminUser = Optional.of(adminUser1);
+        when(mockUserRepository.findOne(new BooleanBuilder())).thenReturn(adminUser);
+
+        when(mockPermissionRepository.queryForUser(0)).thenReturn(Arrays.asList("value"));
+
+        // Run the test
+        final MapResponse result = userServiceUnderTest.userInfo();
+
+        // Verify the results
+    }
+
+    @Test
+    void testUserInfo_AdminUserRepositoryReturnsAbsent() {
+        // Setup
+        when(mockUserRepository.findOne(new BooleanBuilder())).thenReturn(Optional.empty());
+        when(mockPermissionRepository.queryForUser(0)).thenReturn(Arrays.asList("value"));
+
+        // Run the test
+        final MapResponse result = userServiceUnderTest.userInfo();
+
+        // Verify the results
+    }
+
+    @Test
+    void testUserInfo_AdminPermissionRepositoryReturnsNoItems() {
+        // Setup
+
+        // Configure AdminUserRepository.findOne(...).
+        final AdminUser adminUser1 = new AdminUser();
+        adminUser1.setId(0);
+        adminUser1.setUsername("username");
+        adminUser1.setPassword("password");
+        adminUser1.setRealname("realname");
+        adminUser1.setPhone("phone");
+        adminUser1.setRemark("remark");
+        adminUser1.setStatus(0);
+        adminUser1.setCreateUser(0);
+        adminUser1.setCreateTime(new GregorianCalendar(2020, Calendar.JANUARY, 1).getTime());
+        adminUser1.setUpdateUser(0);
+        final Optional<AdminUser> adminUser = Optional.of(adminUser1);
+        when(mockUserRepository.findOne(new BooleanBuilder())).thenReturn(adminUser);
+
+        when(mockPermissionRepository.queryForUser(0)).thenReturn(Collections.emptyList());
+
+        // Run the test
+        final MapResponse result = userServiceUnderTest.userInfo();
+
+        // Verify the results
+    }
+}

+ 29 - 13
dmp-rwd-edit/数据字典编辑工具接口文档.md

@@ -32,20 +32,35 @@
 {
     "result": "success",
     "data": [
-        {
-            "id": 1,
-            "code": "project",
-            "operationType": "update",
-            "operationUser": "90000000",
-            "operationTime": 1611295200000,
+          {
+            "id": 57,
+            "code": "eq01",
+            "groupCode": "0",
+            "objType": "component",
+            "name": "eq01",
+            "aliasCode": "eq01",
+            "aliasName": "eq01",
+            "type": "common",
+            "projectId": "0",
+            "majorCode": "AC",         //专业编码
+            "systemCode": "ACVT",      //系统编码
+            "equipmentCode": "ACVTSF", //设备类编码
+            "parentCode": "component",
+            "operationType": "create",
+            "operationUser": "null",
+            "operationTime": 1617176474000,
             "confirmUser": "90000000",
-            "confirmTime": 1611295200000,
+            "confirmTime": 1620700946000,
             "publishUser": "90000000",
-            "publishTime": 1611295200000,
-            "finishTime": 1611312582000,
+            "publishTime": 1620700953000,
+            "finishTime": 1620700988000,
             "valid": true,
-            "state": 4
-        }
+            "state": "FINISH",
+            "version": "1.0.0",
+            "majorName": "空调专业",     //专业名称 (v2.0新增)
+            "systemName": "通风系统",    //系统名称 (v2.0新增)
+            "equipmentName": "通风风机"  //设备类名称 (v2.0新增)
+          }
     ],
     "count": 1
 }
@@ -303,8 +318,9 @@
 参数
 
 ```json
-    {
-    "criteria":{}
+{
+  "criteria":{
+    "showPosition":"1"  //1-知识库 2-分类体系
 }
 ```
 

+ 70 - 19
dmp-rwd/pom.xml

@@ -8,8 +8,7 @@
         <version>4.0.0</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
-
-    <groupId>com.persagy</groupId>
+    <!--<groupId>com.persagy</groupId>-->
     <artifactId>dmp-rwd</artifactId>
 
     <dependencies>
@@ -43,11 +42,21 @@
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>druid</artifactId>
-            <version>1.1.21</version>
+            <version>1.1.20</version>
         </dependency>
         <dependency>
             <groupId>com.querydsl</groupId>
             <artifactId>querydsl-apt</artifactId>
+            <!--<exclusions>
+                <exclusion>
+                    <artifactId>guava</artifactId>
+                    <groupId>com.google.guava</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>javassist</artifactId>
+                    <groupId>org.javassist</groupId>
+                </exclusion>
+            </exclusions>-->
         </dependency>
         <dependency>
             <groupId>com.querydsl</groupId>
@@ -67,15 +76,21 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-actuator</artifactId>
         </dependency>
-        <dependency>
+        <!--<dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
-        </dependency>
+        </dependency>-->
 
         <!-- 注册中心 -->
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
+            <!--<exclusions>
+                <exclusion>
+                    <artifactId>guava</artifactId>
+                    <groupId>com.google.guava</groupId>
+                </exclusion>
+            </exclusions>-->
         </dependency>
         <!-- 配置中心 -->
         <dependency>
@@ -92,7 +107,18 @@
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-openfeign</artifactId>
+            <!--<exclusions>
+                <exclusion>
+                    <artifactId>HdrHistogram</artifactId>
+                    <groupId>org.hdrhistogram</groupId>
+                </exclusion>
+            </exclusions>-->
         </dependency>
+        <!--<dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>fm-package</artifactId>
+            <type>pom</type>
+        </dependency>-->
     </dependencies>
 
     <build>
@@ -132,8 +158,32 @@
                     </execution>
                 </executions>
             </plugin>
+            <plugin>
+                <artifactId>maven-resources-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-resources</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+                        <configuration>
+                            <resources>
+                                <resource>
+                                    <directory>src/main/resources/</directory>
+                                    <includes>
+                                        <include>**/*.yml</include>
+                                    </includes>
+                                </resource>
+                            </resources>
+                            <outputDirectory>${project.build.directory}/config</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
 
-            <!--拷贝资源文件 copy-resources-->
+            <!--拷贝资源文件 copy-resources
             <plugin>
                 <artifactId>maven-resources-plugin</artifactId>
                 <executions>
@@ -161,7 +211,7 @@
                             <outputDirectory>${project.build.directory}/config</outputDirectory>
                         </configuration>
                     </execution>
-                    <!--拷贝启动脚本-->
+                    &lt;!&ndash;&lt;!&ndash;拷贝启动脚本&ndash;&gt;
                     <execution>
                         <id>copy-version</id>
                         <phase>package</phase>
@@ -176,11 +226,12 @@
                             </resources>
                             <outputDirectory>${project.build.directory}</outputDirectory>
                         </configuration>
-                    </execution>
+                    </execution>&ndash;&gt;
                 </executions>
-            </plugin>
-            <!-- 按照测试要求打成zip需要的配置 -->
-            <!--获取git信息-->
+            </plugin>-->
+
+            <!--&lt;!&ndash; 按照测试要求打成zip需要的配置 &ndash;&gt;
+            &lt;!&ndash;获取git信息&ndash;&gt;
             <plugin>
                 <groupId>pl.project13.maven</groupId>
                 <artifactId>git-commit-id-plugin</artifactId>
@@ -195,19 +246,19 @@
                     <verbose>true</verbose>
                     <dateFormat>yyyyMMddHHmm</dateFormat>
                     <generateGitPropertiesFile>true</generateGitPropertiesFile>
-                    <!--<generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties</generateGitPropertiesFilename>-->
+                    &lt;!&ndash;<generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties</generateGitPropertiesFilename>&ndash;&gt;
                     <generateGitPropertiesFilename>target/git.properties</generateGitPropertiesFilename>
                 </configuration>
             </plugin>
 
-            <!-- 打包压缩 -->
+            &lt;!&ndash; 打包压缩 &ndash;&gt;
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-assembly-plugin</artifactId>
                 <executions>
                     <execution>
                         <id>make-assembly</id>
-                        <!-- 当执行mvn package时才会打包 -->
+                        &lt;!&ndash; 当执行mvn package时才会打包 &ndash;&gt;
                         <phase>package</phase>
                         <goals>
                             <goal>single</goal>
@@ -216,17 +267,17 @@
                             <finalName>
                                 ${project.artifactId}_${git.commit.time}_git_${git.branch}_${git.commit.id.abbrev}
                             </finalName>
-                            <!--不包含assembly id-->
+                            &lt;!&ndash;不包含assembly id&ndash;&gt;
                             <appendAssemblyId>false</appendAssemblyId>
-                            <!--输出路径-->
-                            <!--<outputDirectory>../target/co_search-${project.version}</outputDirectory>-->
+                            &lt;!&ndash;输出路径&ndash;&gt;
+                            &lt;!&ndash;<outputDirectory>../target/co_search-${project.version}</outputDirectory>&ndash;&gt;
                             <descriptors>
-                                <descriptor>src/script/zip.xml</descriptor>
+                                <descriptor>../script/zip.xml</descriptor>
                             </descriptors>
                         </configuration>
                     </execution>
                 </executions>
-            </plugin>
+            </plugin>-->
         </plugins>
     </build>
 

+ 3 - 3
dmp-rwd/src/main/java/com/persagy/dmp/rwd/config/JpaSqlExecuteContext.java

@@ -18,18 +18,18 @@ public class JpaSqlExecuteContext extends HandlerInterceptorAdapter {
 
 	@Override
 	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
-		this.init(request.getParameter("groupCode"), request.getParameter("projectId"));
+		init(request.getParameter("groupCode"), request.getParameter("projectId"));
 		return true;
 	}
 
 	@Override
 	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
-		this.clear();
+		clear();
 	}
 
 	@Override
 	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
-		this.clear();
+		clear();
 	}
 
 

+ 0 - 1
dmp-rwd/src/main/java/com/persagy/dmp/rwd/entity/GraphInstance.java

@@ -5,7 +5,6 @@ import com.persagy.dmp.rwd.model.GraphInstanceModel;
 import com.vladmihalcea.hibernate.type.json.JsonStringType;
 import lombok.Getter;
 import lombok.Setter;
-import org.hibernate.annotations.GenericGenerator;
 import org.hibernate.annotations.Type;
 import org.hibernate.annotations.TypeDef;
 

+ 6 - 6
dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/InitService.java

@@ -50,22 +50,22 @@ public class InitService extends BaseService {
 			// 创建信息点表
 			sql = getCreateGroupFuncidSql(groupCode);
 			statement.executeUpdate(sql);
-
+			// 创建方案表
 			sql = getCreateSchemaSql(groupCode);
 			statement.executeUpdate(sql);
-
+			// 创建方案类型表
 			sql = getCreateSchemaClassSql(groupCode);
 			statement.executeUpdate(sql);
-
+			// 创建方案信息点表
 			sql = getCreateSchemaFuncidSql(groupCode);
 			statement.executeUpdate(sql);
-
+			// 创建集团方案表
 			sql = getCreateSchemaProjectSql(groupCode);
 			statement.executeUpdate(sql);
-
+			// 创建应用方案表
 			sql = getCreateAppClassSql(groupCode);
 			statement.executeUpdate(sql);
-
+			// 创建应用信息点表
 			sql = getCreateAppFuncidSql(groupCode);
 			statement.executeUpdate(sql);
 		} catch (SQLException e) {

+ 9 - 2
dmp-rwd/src/main/resources/bootstrap-dev.yml

@@ -1,7 +1,14 @@
 spring:
   application:
-    name: dmp-rwd-yll
+    name: dmp-rwd
   cloud:
     config:
       profile: dev2
-      uri: http://192.168.64.18:9932
+      uri: http://192.168.64.18:9932
+      allowOverride: true
+      overrideNone: true
+      overrideSystemProperties: false
+eureka:
+  client:
+    fetch-registry: true
+    register-with-eureka: false

+ 2 - 0
dmp-rwd/src/main/resources/bootstrap.yml

@@ -1,6 +1,8 @@
 spring:
   application:
     name: dmp-rwd
+  profiles:
+    active: dev
   cloud:
     config:
       profile: dev

Dosya farkı çok büyük olduğundan ihmal edildi
+ 66 - 0
dmp-rwd/src/main/resources/config/config.sql


+ 7 - 7
dmp-rwd/src/main/resources/logback-spring.xml

@@ -27,18 +27,18 @@
 
     <logger name="org.hibernate" level="INFO"/>
     <logger name="org.springframework" level="INFO"/>
-    <logger name="com.netflix" level="WARN"/>
+    <logger name="com.netflix" level="INFO"/>
     <logger name="org.apache.http" level="INFO"/>
 
-    <springProfile name="log-dev">
-        <logger name="org.hibernate.SQL" level="DEBUG"/>
-        <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/>
-        <root level="info">
+    <springProfile name="dev">
+        <logger name="org.hibernate.SQL" level="INFO"/>
+        <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="INFO"/>
+        <root level="INFO">
             <appender-ref ref="stdout"/>
         </root>
     </springProfile>
 
-    <springProfile name="log-test">
+    <springProfile name="test">
         <logger name="org.hibernate.SQL" level="DEBUG"/>
         <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/>
         <root level="info">
@@ -46,7 +46,7 @@
         </root>
     </springProfile>
 
-    <springProfile name="log-prod">
+    <springProfile name="prod">
         <root level="info">
             <appender-ref ref="file"/>
         </root>

+ 36 - 0
docker/dockerfiles/dmp-admin/Dockerfile

@@ -0,0 +1,36 @@
+#构建此镜像的基础镜像
+FROM java:8-jre
+#指定作者名称
+MAINTAINER lijie<lijie@persagy.com>
+
+#定义标签属性
+LABEL tier=backend
+LABEL product=dmp
+LABEL project=dmp-admin
+LABEL name=数据中台-dmp-admin
+
+#设置环境变量
+ENV JAVA_OPTS -Dfile.encoding=UTF-8 -Xms2048m -Xmx2048m
+ENV TZ Asia/Shanghai
+#ARG 可以接收docker build命令中以--build-arg 指定的参数
+ARG WORKER_HOME
+
+#执行的命令
+RUN apt-get install -y --no-install-recommends tzdata && rm -rf /var/lib/apt/lists/*
+RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime	&& echo 'Asia/Shanghai' > /etc/timezone
+
+RUN mkdir -p $WORKER_HOME/config
+
+#复制文件到容器内
+COPY *.jar $WORKER_HOME/app.jar
+COPY entrypoint.sh $WORKER_HOME/
+COPY version.txt $WORKER_HOME/
+COPY config/* $WORKER_HOME/config/
+#设置工作目录
+WORKDIR $WORKER_HOME
+
+#查看上述复制的文件,是否复制成功
+RUN ls
+
+#启动执行
+ENTRYPOINT ["sh","./entrypoint.sh"]

+ 3 - 0
docker/dockerfiles/dmp-admin/entrypoint.sh

@@ -0,0 +1,3 @@
+#!/bin/bash
+echo "entrypoint run..."
+java -jar $JAVA_OPTS -Dcsp.sentinel.dashboard.server=$SENTINEL_DASHBOARD_SERVER -Dcsp.sentinel.api.port=$SENTINEL_LOCAL_API_PORT -Dcsp.sentinel.heartbeat.client.ip=$SENTINEL_HEARTBEAT_CLIENT_IP app.jar

+ 36 - 0
docker/dockerfiles/dmp-dic/Dockerfile

@@ -0,0 +1,36 @@
+#构建此镜像的基础镜像
+FROM java:8-jre
+#指定作者名称
+MAINTAINER lijie<lijie@persagy.com>
+
+#定义标签属性
+LABEL tier=backend
+LABEL product=dmp
+LABEL project=dmp-dic
+LABEL name=数据中台-dic
+
+#设置环境变量
+ENV JAVA_OPTS -Dfile.encoding=UTF-8 -Xms2048m -Xmx2048m
+ENV TZ Asia/Shanghai
+#ARG 可以接收docker build命令中以--build-arg 指定的参数
+ARG WORKER_HOME
+
+#执行的命令
+RUN apt-get install -y --no-install-recommends tzdata && rm -rf /var/lib/apt/lists/*
+RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime	&& echo 'Asia/Shanghai' > /etc/timezone
+
+RUN mkdir -p $WORKER_HOME/config
+
+#复制文件到容器内
+COPY *.jar $WORKER_HOME/app.jar
+COPY entrypoint.sh $WORKER_HOME/
+COPY version.txt $WORKER_HOME/
+COPY config/* $WORKER_HOME/config/
+#设置工作目录
+WORKDIR $WORKER_HOME
+
+#查看上述复制的文件,是否复制成功
+RUN ls
+
+#启动执行
+ENTRYPOINT ["sh","./entrypoint.sh"]

+ 3 - 0
docker/dockerfiles/dmp-dic/entrypoint.sh

@@ -0,0 +1,3 @@
+#!/bin/bash
+echo "entrypoint run..."
+java -jar $JAVA_OPTS -Dcsp.sentinel.dashboard.server=$SENTINEL_DASHBOARD_SERVER -Dcsp.sentinel.api.port=$SENTINEL_LOCAL_API_PORT -Dcsp.sentinel.heartbeat.client.ip=$SENTINEL_HEARTBEAT_CLIENT_IP app.jar

+ 36 - 0
docker/dockerfiles/dmp-org/Dockerfile

@@ -0,0 +1,36 @@
+#构建此镜像的基础镜像
+FROM java:8-jre
+#指定作者名称
+MAINTAINER lijie<lijie@persagy.com>
+
+#定义标签属性
+LABEL tier=backend
+LABEL product=dmp
+LABEL project=dmp-org
+LABEL name=数据中台-org
+
+#设置环境变量
+ENV JAVA_OPTS -Dfile.encoding=UTF-8 -Xms2048m -Xmx2048m
+ENV TZ Asia/Shanghai
+#ARG 可以接收docker build命令中以--build-arg 指定的参数
+ARG WORKER_HOME
+
+#执行的命令
+RUN apt-get install -y --no-install-recommends tzdata && rm -rf /var/lib/apt/lists/*
+RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime	&& echo 'Asia/Shanghai' > /etc/timezone
+
+RUN mkdir -p $WORKER_HOME/config
+
+#复制文件到容器内
+COPY *.jar $WORKER_HOME/app.jar
+COPY entrypoint.sh $WORKER_HOME/
+COPY version.txt $WORKER_HOME/
+COPY config/* $WORKER_HOME/config/
+#设置工作目录
+WORKDIR $WORKER_HOME
+
+#查看上述复制的文件,是否复制成功
+RUN ls
+
+#启动执行
+ENTRYPOINT ["sh","./entrypoint.sh"]

+ 0 - 0
docker/dockerfiles/dmp-org/entrypoint.sh


Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor