Browse Source

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

lixing 4 years ago
parent
commit
3fbe93991c
38 changed files with 1627 additions and 212 deletions
  1. 75 0
      dmp-rwd-datautils/doc/config.sql
  2. 21 0
      dmp-rwd-datautils/pom.xml
  3. 8 2
      dmp-rwd-datautils/src/main/java/com/persagy/dmp/rwd/datautils/TransApp.java
  4. 46 0
      dmp-rwd-datautils/src/main/java/com/persagy/dmp/rwd/datautils/config/DmpMessageAspect.java
  5. 30 0
      dmp-rwd-datautils/src/main/java/com/persagy/dmp/rwd/datautils/config/GraphMapping.java
  6. 18 2
      dmp-rwd-datautils/src/main/java/com/persagy/dmp/rwd/datautils/controller/TransController.java
  7. 60 0
      dmp-rwd-datautils/src/main/java/com/persagy/dmp/rwd/datautils/jms/JmsConfig.java
  8. 14 0
      dmp-rwd-datautils/src/main/java/com/persagy/dmp/rwd/datautils/jms/MessageExecutor.java
  9. 76 0
      dmp-rwd-datautils/src/main/java/com/persagy/dmp/rwd/datautils/jms/MessageProcesser.java
  10. 35 0
      dmp-rwd-datautils/src/main/java/com/persagy/dmp/rwd/datautils/jms/executor/TransProjectDataExecutor.java
  11. 72 0
      dmp-rwd-datautils/src/main/java/com/persagy/dmp/rwd/datautils/service/TransService.java
  12. 0 21
      dmp-rwd-datautils/src/main/resources/application.yml
  13. 7 0
      dmp-rwd-datautils/src/main/resources/bootstrap-dev.yml
  14. 9 0
      dmp-rwd-datautils/src/main/resources/bootstrap.yml
  15. 99 0
      dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/datautils/TestTransServiceForBR.java
  16. 107 0
      dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/datautils/TestTransServiceForGX.java
  17. 100 0
      dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/datautils/TestTransServiceForQH.java
  18. 14 3
      dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/datautils/TestTransServiceForWD.java
  19. 10 3
      dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/datautils/TestTransServiceForXG.java
  20. 13 5
      dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/datautils/TestTransServiceForZS.java
  21. 267 0
      dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/dic/ImportFuncid2.java
  22. 327 0
      dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/dic/ImportGroupProjectFuncid.java
  23. 9 11
      dmp-rwd/doc/config.sql
  24. 1 6
      dmp-rwd/pom.xml
  25. 0 2
      dmp-rwd/src/main/java/com/persagy/dmp/rwd/config/GlobalExceptionHandler.java
  26. 63 0
      dmp-rwd/src/main/java/com/persagy/dmp/rwd/config/JpaSqlExecuteContext.java
  27. 6 0
      dmp-rwd/src/main/java/com/persagy/dmp/rwd/config/WebConfig.java
  28. 6 0
      dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/BaseService.java
  29. 6 3
      dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/ClassDefService.java
  30. 7 3
      dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/FuncidDefService.java
  31. 1 1
      dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/ObjectInstanceQueryService.java
  32. 1 1
      dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/iot/CurrentIotService.java
  33. 0 41
      dmp-rwd/src/main/java/com/persagy/dmp/rwd/sharding/GroupProjectShardingAlgorithm.java
  34. 0 28
      dmp-rwd/src/main/java/com/persagy/dmp/rwd/sharding/GroupShardingAlgorithm.java
  35. 86 0
      dmp-rwd/src/main/java/com/persagy/dmp/rwd/sharding/JpaSqlStatementInspector.java
  36. 18 0
      dmp-rwd/src/main/java/com/persagy/dmp/rwd/sharding/JsonDialect.java
  37. 8 80
      dmp-rwd/src/main/resources/application.yml
  38. 7 0
      dmp-rwd/src/main/resources/bootstrap-dev.yml

+ 75 - 0
dmp-rwd-datautils/doc/config.sql

@@ -0,0 +1,75 @@
+# rwd config
+delete from `integrated_config` where application = 'dmp-rwd-datautils';
+INSERT INTO `integrated_config`
+(`APPLICATION`,`PPROFILE`,`LABLE`,`BELONGTO`,`ISUPDATE`,`PKEY`,`PVALUE`,`DESCRIPTION`)
+VALUES
+('dmp-rwd-datautils','default','master','DMP',1,'spring.jackson.time-zone', 'Asia/Shanghai', null),
+('dmp-rwd-datautils','default','master','DMP',1,'spring.jpa.show-sql', 'false', null),
+('dmp-rwd-datautils','default','master','DMP',1,'spring.jpa.hibernate.ddl-auto', 'none', null),
+('dmp-rwd-datautils','default','master','DMP',1,'management.endpoints.web.exposure.include', '*', null),
+('dmp-rwd-datautils','default','master','DMP',1,'management.endpoint.health.show-details', 'ALWAYS', null),
+('dmp-rwd-datautils','default','master','DMP',1,'eureka.client.fetch-registry','true',null),
+('dmp-rwd-datautils','default','master','DMP',1,'eureka.client.register-with-eureka','true',null),
+('dmp-rwd-datautils','default','master','DMP',1,'eureka.instance.lease-renewal-interval-in-seconds','10',null),
+('dmp-rwd-datautils','default','master','DMP',1,'eureka.instance.lease-expiration-duration-in-seconds','30',null),
+('dmp-rwd-datautils','default','master','DMP',1,'eureka.instance.hostname','${spring.application.name}',null),
+('dmp-rwd-datautils','default','master','DMP',1,'eureka.instance.prefer-ip-address','true',null),
+('dmp-rwd-datautils','default','master','DMP',1,'eureka.instance.instance-id','${spring.cloud.client.ip-address}:${server.port}',null),
+
+('dmp-rwd-datautils','default','master','DMP',1,'spring.datasource.type', 'com.alibaba.druid.pool.DruidDataSource', null),
+('dmp-rwd-datautils','default','master','DMP',1,'spring.datasource.driverClassName', 'com.mysql.cj.jdbc.Driver', null),
+('dmp-rwd-datautils','default','master','DMP',1,'spring.datasource.url', 'jdbc:mysql://${persagy.mysql.host}:${persagy.mysql.port}/${persagy.mysql.database}?useUnicode=true&characterEncoding=utf-8&mysqlEncoding=utf8&useSSL=false', null),
+('dmp-rwd-datautils','default','master','DMP',1,'spring.datasource.username', '${persagy.mysql.username}', null),
+('dmp-rwd-datautils','default','master','DMP',1,'spring.datasource.password', '${persagy.mysql.password}', null),
+('dmp-rwd-datautils','default','master','DMP',1,'spring.datasource.max-active', '${persagy.mysql.maxActive}', null),
+('dmp-rwd-datautils','default','master','DMP',1,'spring.datasource.max-idle', '20', null),
+('dmp-rwd-datautils','default','master','DMP',1,'spring.datasource.min-idle', '10', null),
+
+('dmp-rwd-datautils','default','master','DMP',1,'spring.rabbitmq.host', '${persagy.rabbitmq.host}', null),
+('dmp-rwd-datautils','default','master','DMP',1,'spring.rabbitmq.port', '${persagy.rabbitmq.port}', null),
+('dmp-rwd-datautils','default','master','DMP',1,'spring.rabbitmq.username', '${persagy.rabbitmq.username}', null),
+('dmp-rwd-datautils','default','master','DMP',1,'spring.rabbitmq.password', '${persagy.rabbitmq.password}', null),
+('dmp-rwd-datautils','default','master','DMP',1,'spring.rabbitmq.virtual-host', '${persagy.rabbitmq.virtual-host}', null),
+
+('dmp-rwd-datautils','default','master','DMP',1,'spring.redis.host', '${persagy.redis.host}', null),
+('dmp-rwd-datautils','default','master','DMP',1,'spring.redis.port', '${persagy.redis.port}', null),
+('dmp-rwd-datautils','default','master','DMP',1,'spring.redis.password', '${persagy.redis.password}', null),
+('dmp-rwd-datautils','default','master','DMP',1,'spring.redis.database', '${persagy.redis.database}', null),
+('dmp-rwd-datautils','default','master','DMP',1,'spring.redis.pool.max-active', '${persagy.redis.max-active}', null),
+('dmp-rwd-datautils','default','master','DMP',1,'spring.redis.pool.max-idle', '${persagy.redis.max-idle}', null),
+('dmp-rwd-datautils','default','master','DMP',1,'spring.redis.pool.min-idle', '${persagy.redis.min-idle}', null),
+
+('dmp-rwd-datautils','default','master','DMP',1,'persagy.dmp.exchange', 'exchange-dmp', null),
+('dmp-rwd-datautils','default','master','DMP',1,'persagy.dmp.datautils.routingKey', 'routing-dmp-rwd-datautils', null),
+
+('dmp-rwd-datautils','dev','master','DMP',1,'server.port', '9001', null),
+
+('dmp-rwd-datautils','dev','master','DMP',1,'eureka.client.service-url.defaultZone','http://frame:123456@localhost:9931/eureka/','注册中心地址'),
+('dmp-rwd-datautils','dev','master','DMP',1,'persagy.iot.data.server', 'http://localhost:9981', 'IOT数据查询服务'),
+('dmp-rwd-datautils','dev','master','DMP',1,'persagy.iot.setting.server', 'http://localhost:9983', 'IOT控制服务'),
+
+('dmp-rwd-datautils','dev','master','DMP',1,'persagy.mysql.host', '192.168.64.15', null),
+('dmp-rwd-datautils','dev','master','DMP',1,'persagy.mysql.port', '9934', null),
+('dmp-rwd-datautils','dev','master','DMP',1,'persagy.mysql.database', 'dmp_test_rwd', null),
+('dmp-rwd-datautils','dev','master','DMP',1,'persagy.mysql.username', 'root', null),
+('dmp-rwd-datautils','dev','master','DMP',1,'persagy.mysql.password', 'brzj123456', null),
+('dmp-rwd-datautils','dev','master','DMP',1,'persagy.mysql.initialSize', '10', null),
+('dmp-rwd-datautils','dev','master','DMP',1,'persagy.mysql.maxActive', '100', null),
+
+('dmp-rwd-datautils','dev','master','DMP',1,'persagy.redis.host', '192.168.64.15', null),
+('dmp-rwd-datautils','dev','master','DMP',1,'persagy.redis.port', '9944', null),
+('dmp-rwd-datautils','dev','master','DMP',1,'persagy.redis.password', 'brzj123456', null),
+('dmp-rwd-datautils','dev','master','DMP',1,'persagy.redis.database', '0', null),
+('dmp-rwd-datautils','dev','master','DMP',1,'persagy.redis.max-active', '100', null),
+('dmp-rwd-datautils','dev','master','DMP',1,'persagy.redis.max-idle', '50', null),
+('dmp-rwd-datautils','dev','master','DMP',1,'persagy.redis.min-idle', '10', null),
+
+('dmp-rwd-datautils','dev','master','DMP',1,'persagy.rabbitmq.host', '192.168.64.15', null),
+('dmp-rwd-datautils','dev','master','DMP',1,'persagy.rabbitmq.port', '9936', null),
+('dmp-rwd-datautils','dev','master','DMP',1,'persagy.rabbitmq.username', 'admin', null),
+('dmp-rwd-datautils','dev','master','DMP',1,'persagy.rabbitmq.password', 'brzj123456', null),
+('dmp-rwd-datautils','dev','master','DMP',1,'persagy.rabbitmq.virtual-host', '/test', null),
+('dmp-rwd-datautils','dev','master','DMP',1,'persagy.dmp.datautils.queue', 'queue-dmp-datautils', null),
+
+('dmp-rwd-datautils','dev','master','DMP',1,'persagy.log.path', '.', '日志文件所在路径');
+

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

@@ -44,5 +44,26 @@
             <groupId>org.apache.poi</groupId>
             <artifactId>poi-ooxml</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-redis</artifactId>
+        </dependency>
+        <!-- 配置中心 -->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-config</artifactId>
+        </dependency>
+        <!-- rabbitmq -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-amqp</artifactId>
+        </dependency>
+
+        <!-- feign -->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
     </dependencies>
 </project>

+ 8 - 2
dmp-rwd-datautils/src/main/java/com/persagy/dmp/rwd/datautils/TransApp.java

@@ -1,6 +1,7 @@
 package com.persagy.dmp.rwd.datautils;
 
 import com.persagy.common.json.JacksonMapper;
+import com.persagy.dmp.common.SpringUtils;
 import com.persagy.dmp.common.http.HttpUtils;
 import com.persagy.dmp.rwd.funcid.parse.parser.InfoCodeParserFactory;
 import lombok.extern.slf4j.Slf4j;
@@ -38,12 +39,17 @@ public class TransApp {
 	}
 
 	@Bean
+	public InfoCodeParserFactory infoCodeParserFactory() {
+		return new InfoCodeParserFactory();
+	}
+
+	@Bean
 	public HttpUtils httpUtils() {
 		return new HttpUtils();
 	}
 
 	@Bean
-	public InfoCodeParserFactory infoCodeParserFactory(){
-		return new InfoCodeParserFactory();
+	public SpringUtils springUtils() {
+		return new SpringUtils();
 	}
 }

+ 46 - 0
dmp-rwd-datautils/src/main/java/com/persagy/dmp/rwd/datautils/config/DmpMessageAspect.java

@@ -0,0 +1,46 @@
+package com.persagy.dmp.rwd.datautils.config;
+
+import com.persagy.common.web.BaseResponse;
+import com.persagy.dmp.rwd.datautils.jms.MessageProcesser;
+import com.persagy.dmp.rwd.model.DmpMessage;
+import org.aspectj.lang.annotation.AfterReturning;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @author: yaoll
+ * @date: 2020-10-22
+ * @verison: 1.0
+ */
+@Aspect
+@Component
+public class DmpMessageAspect {
+
+	@Autowired
+	private MessageProcesser messageProcesser;
+
+	@Pointcut("execution(public * com.persagy.dmp.rwd.datautils.controller.*.*(..))")
+	public void controllerPoint() {
+	}
+
+	@AfterReturning(returning = "ret", pointcut = "controllerPoint()")
+	public void doAfterReturning(Object ret) {
+		if (ret != null) {
+			if (ret instanceof BaseResponse) {
+				BaseResponse resp = (BaseResponse) ret;
+				if (resp.success()) {
+					List<DmpMessage> messageList = resp.getMessageList();
+					if (messageList != null && messageList.size() > 0) {
+						for (DmpMessage message : messageList) {
+							messageProcesser.convertAndSend(message);
+						}
+					}
+				}
+			}
+		}
+	}
+}

+ 30 - 0
dmp-rwd-datautils/src/main/java/com/persagy/dmp/rwd/datautils/config/GraphMapping.java

@@ -122,6 +122,30 @@ public class GraphMapping {
 		mappings.add(new Item("PropertyInArch", "Pe2Fl", "Pe2Fl", "1", "1"));
 		mappings.add(new Item("SubE", "Sub2Sub", "EnergyItemTree", "1", "1"));
 		mappings.add(new Item("EnergyMonitorStructure", "Mt2Br", "EnergyMonitorStructure", "1", "1"));
+
+		mappings.add(new Item("MechInArch", "Eq2Sp", "PowerSupplyZone", "EquipinSpace", "100", "1"));
+		mappings.add(new Item("MechInArch", "Eq2Sp", "LightingZone", "EquipinSpace", "200", "1"));
+		mappings.add(new Item("MechInArch", "Eq2Sp", "NetworkZone", "EquipinSpace", "300", "1"));
+		mappings.add(new Item("MechInArch", "Eq2Sp", "AirConditioningZone", "EquipinSpace", "400", "1"));
+		mappings.add(new Item("MechInArch", "Eq2Sp", "HeatingZone", "EquipinSpace", "500", "1"));
+		mappings.add(new Item("MechInArch", "Eq2Sp", "CleanZone", "EquipinSpace", "600", "1"));
+		mappings.add(new Item("MechInArch", "Eq2Sp", "DomesticWaterSupplyZone", "EquipinSpace", "700", "1"));
+		mappings.add(new Item("MechInArch", "Eq2Sp", "FireZone", "EquipinSpace", "800", "1"));
+		mappings.add(new Item("MechInArch", "Eq2Sp", "SecurityZone", "EquipinSpace", "900", "1"));
+		mappings.add(new Item("MechInArch", "Eq2Sp", "TenantZone", "EquipinSpace", "1000", "1"));
+		mappings.add(new Item("MechInArch", "Eq2Sp", "FunctionZone", "EquipinSpace", "1100", "1"));
+		mappings.add(new Item("MechForArch", "Eq2Sp", "PowerSupplyZone", "EquipforSpace", "100", "1"));
+		mappings.add(new Item("MechForArch", "Eq2Sp", "LightingZone", "EquipforSpace", "200", "1"));
+		mappings.add(new Item("MechForArch", "Eq2Sp", "NetworkZone", "EquipforSpace", "300", "1"));
+		mappings.add(new Item("MechForArch", "Eq2Sp", "AirConditioningZone", "EquipforSpace", "400", "1"));
+		mappings.add(new Item("MechForArch", "Eq2Sp", "HeatingZone", "EquipforSpace", "500", "1"));
+		mappings.add(new Item("MechForArch", "Eq2Sp", "CleanZone", "EquipforSpace", "600", "1"));
+		mappings.add(new Item("MechForArch", "Eq2Sp", "DomesticWaterSupplyZone", "EquipforSpace", "700", "1"));
+		mappings.add(new Item("MechForArch", "Eq2Sp", "FireZone", "EquipforSpace", "800", "1"));
+		mappings.add(new Item("MechForArch", "Eq2Sp", "SecurityZone", "EquipforSpace", "900", "1"));
+		mappings.add(new Item("MechForArch", "Eq2Sp", "TenantZone", "EquipforSpace", "1000", "1"));
+		mappings.add(new Item("MechForArch", "Eq2Sp", "FunctionZone", "EquipforSpace", "1100", "1"));
+
 	}
 
 	public static Item getMapping(String graph, String relCode) {
@@ -138,13 +162,19 @@ public class GraphMapping {
 	public static class Item {
 		private String newGraph;
 		private String newRelcode;
+		private String newRelValue;
 		private String oldGraph;
 		private String oldRelcode;
 		private Boolean same;
 
 		public Item(String newGraph, String newRelcode, String oldGraph, String oldRelcode, String same) {
+			this(newGraph, newRelcode, null, oldGraph, oldRelcode, same);
+		}
+
+		public Item(String newGraph, String newRelcode, String newRelValue, String oldGraph, String oldRelcode, String same) {
 			this.newGraph = newGraph;
 			this.newRelcode = newRelcode;
+			this.newRelValue = newRelValue;
 			this.oldGraph = oldGraph;
 			this.oldRelcode = oldRelcode;
 			this.same = "1".equalsIgnoreCase(same);

+ 18 - 2
dmp-rwd-datautils/src/main/java/com/persagy/dmp/rwd/datautils/controller/TransController.java

@@ -1,19 +1,35 @@
 package com.persagy.dmp.rwd.datautils.controller;
 
+import com.persagy.common.web.MapResponse;
+import com.persagy.dmp.rwd.datautils.service.TransService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Map;
+
 /**
  * @author: yaoll
  * @date: 2020-10-14
  * @verison: 1.0
  */
 @RestController
-@RequestMapping("/trans")
+@RequestMapping("/datautils")
 public class TransController {
 
+	@Autowired
+	private TransService transService;
 
+	@PostMapping("/import/data")
+	public MapResponse importData(@RequestBody Map<String, String> params){
+		return transService.importData(params);
+	}
 
-
+	@PostMapping("/import/info")
+	public MapResponse importInfo(@RequestBody Map<String, String> params){
+		return transService.importInfo(params);
+	}
 
 }

+ 60 - 0
dmp-rwd-datautils/src/main/java/com/persagy/dmp/rwd/datautils/jms/JmsConfig.java

@@ -0,0 +1,60 @@
+package com.persagy.dmp.rwd.datautils.jms;
+
+import com.persagy.common.json.JacksonMapper;
+import com.persagy.dmp.rwd.model.DmpMessage;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.core.Binding;
+import org.springframework.amqp.core.BindingBuilder;
+import org.springframework.amqp.core.Queue;
+import org.springframework.amqp.core.TopicExchange;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author: yaoll
+ * @date: 2020-10-22
+ * @verison: 1.0
+ */
+@Slf4j
+@Configuration
+public class JmsConfig {
+
+
+	@Value("${persagy.dmp.exchange}")
+	private String exchange;
+
+	@Value("${persagy.dmp.datautils.routingKey}")
+	private String datautilsRoutingKey;
+
+	@Value("${persagy.dmp.datautils.queue}")
+	private String datautilsQueue;
+
+	@Autowired
+	private MessageProcesser messageProcesser;
+
+	@Bean
+	public TopicExchange exchage() {
+		return new TopicExchange(exchange);
+	}
+
+	@Bean
+	public Queue queue() {
+		return new Queue(datautilsQueue, true);
+	}
+
+	// datautils -> datautils
+	@Bean
+	public Binding rwdBinding() {
+		return BindingBuilder.bind(queue()).to(exchage()).with(datautilsRoutingKey);
+	}
+
+	@RabbitListener(queues = "${persagy.dmp.datautils.queue}")    //监听器监听指定的Queue
+	public void processC(DmpMessage message) {
+		log.info("============================== Receive {}: {}", datautilsQueue, JacksonMapper.toSimpleJson(message));
+		messageProcesser.listen(message);
+	}
+
+}

+ 14 - 0
dmp-rwd-datautils/src/main/java/com/persagy/dmp/rwd/datautils/jms/MessageExecutor.java

@@ -0,0 +1,14 @@
+package com.persagy.dmp.rwd.datautils.jms;
+
+import com.persagy.dmp.rwd.model.DmpMessage;
+
+/**
+ * @author: yaoll
+ * @date: 2020-10-22
+ * @verison: 1.0
+ */
+public interface MessageExecutor {
+
+	void execute(DmpMessage message);
+
+}

+ 76 - 0
dmp-rwd-datautils/src/main/java/com/persagy/dmp/rwd/datautils/jms/MessageProcesser.java

@@ -0,0 +1,76 @@
+package com.persagy.dmp.rwd.datautils.jms;
+
+import com.persagy.common.date.DateUtils;
+import com.persagy.dmp.common.SpringUtils;
+import com.persagy.dmp.config.DmpParameterStorage;
+import com.persagy.dmp.rwd.model.DmpMessage;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * @author: yaoll
+ * @date: 2020-10-22
+ * @verison: 1.0
+ */
+@Slf4j
+@Component
+public class MessageProcesser {
+
+	@Value("${persagy.dmp.exchange}")
+	private String exchange;
+
+	@Value("${persagy.dmp.datautils.routingKey}")
+	private String datautilsRoutingKey;
+
+	@Autowired
+	private RabbitTemplate rabbitTemplate;
+
+	public void convertAndSend(DmpMessage message) {
+		if (message.getSendTime() == null) {
+			message.setSendTime(DateUtils.format(new Date()));
+		}
+		rabbitTemplate.convertAndSend(exchange, datautilsRoutingKey, message);
+	}
+
+	private static final Set<String> beanNames = new HashSet<>();
+
+	static {
+		beanNames.add("transProjectData");
+	}
+
+	public void listen(DmpMessage message) {
+		String type = message.getType();
+		if (!beanNames.contains(type)) {
+			return;
+		}
+
+		String executorName = type + "Executor";
+		MessageExecutor executor = SpringUtils.getBean(executorName, MessageExecutor.class);
+		if (executor == null) {
+			log.error("bean for [" + executorName + "] not exists");
+		}
+
+		try {
+			DmpParameterStorage.ParameterData data = new DmpParameterStorage.ParameterData();
+			data.setGroupCode(message.getGroupCode());
+			data.setProjectId(message.getProjectId());
+			data.setAppId(message.getAppId());
+
+			DmpParameterStorage.set(data);
+
+			executor.execute(message);
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			DmpParameterStorage.clear();
+		}
+	}
+
+}

+ 35 - 0
dmp-rwd-datautils/src/main/java/com/persagy/dmp/rwd/datautils/jms/executor/TransProjectDataExecutor.java

@@ -0,0 +1,35 @@
+package com.persagy.dmp.rwd.datautils.jms.executor;
+
+import com.persagy.dmp.rwd.datautils.jms.MessageExecutor;
+import com.persagy.dmp.rwd.datautils.service.TransService;
+import com.persagy.dmp.rwd.model.DmpMessage;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ *
+ * 迁移数据平台项目数据到数据中台
+ *
+ * @author: yaoll
+ * @date: 2020-12-18
+ * @verison: 1.0
+ */
+@Component
+public class TransProjectDataExecutor implements MessageExecutor {
+
+	@Autowired
+	private TransService transService;
+
+	@Override
+	public void execute(DmpMessage message) {
+
+		String groupCode = message.getGroupCode();
+		String projectId = message.getProjectId();
+		String server = message.getStr1();
+		String password = message.getStr2();
+
+
+		transService.trans(groupCode, projectId, server, password);
+
+	}
+}

+ 72 - 0
dmp-rwd-datautils/src/main/java/com/persagy/dmp/rwd/datautils/service/TransService.java

@@ -0,0 +1,72 @@
+package com.persagy.dmp.rwd.datautils.service;
+
+import com.persagy.common.web.MapResponse;
+import com.persagy.dmp.rwd.model.DmpMessage;
+import org.apache.commons.collections4.MapUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @author: yaoll
+ * @date: 2020-12-18
+ * @verison: 1.0
+ */
+@Service
+public class TransService {
+
+	@Autowired
+	private StringRedisTemplate redisTemplate;
+
+	private static final String KEN_TRANS_DOING = "datautils_trans_doing_";
+	private static final String KEN_TRANS_INFO = "datautils_trans_info_";
+
+	public MapResponse importData(Map<String, String> params) {
+		MapResponse resp = new MapResponse();
+		String groupCode = MapUtils.getString(params, "groupCode");
+		String projectId = MapUtils.getString(params, "projectId");
+		String server = MapUtils.getString(params, "server");
+		String password = MapUtils.getString(params, "password");
+
+		String key = KEN_TRANS_DOING + projectId;
+		Long increment = redisTemplate.opsForValue().increment(key, 1);
+		if (increment > 1) {
+			resp.setFail("当前项目正在处理中...");
+			return resp;
+		}
+		redisTemplate.expire(key, 3, TimeUnit.HOURS);
+
+		DmpMessage message = new DmpMessage("transProjectData", projectId);
+		message.setGroupCode(groupCode);
+		message.setProjectId(projectId);
+		message.setStr1(server);
+		message.setStr2(password);
+		resp.add(message);
+		return resp;
+	}
+
+	public MapResponse importInfo(Map<String, String> params) {
+		MapResponse resp = new MapResponse();
+
+		return resp;
+	}
+
+	/**
+	 * 从数据平台迁移数据到中台
+	 *
+	 * @param groupCode
+	 * @param projectId
+	 * @param server
+	 * @param password
+	 */
+	public void trans(String groupCode, String projectId, String server, String password) {
+
+		String doingKey = KEN_TRANS_DOING + projectId;
+
+
+		redisTemplate.delete(doingKey);
+	}
+}

+ 0 - 21
dmp-rwd-datautils/src/main/resources/application.yml

@@ -1,21 +0,0 @@
-server:
-  port: 9001
-spring:
-  application:
-    name: dmp-datautils
-  profiles:
-    active:
-      - dev
-#  datasource:
-#    driver-class-name: com.mysql.cj.jdbc.Driver
-#    url: jdbc:mysql://localhost:3306/persagy_dev?useUnicode=true&characterEncoding=utf-8&mysqlEncoding=utf8&useSSL=false
-#    username: root
-#    password: 123456
-##    url: jdbc:mysql://192.168.3.200:3306/persagy_dmp_test?useUnicode=true&characterEncoding=utf-8&mysqlEncoding=utf8&useSSL=false
-##    username: pbsage
-##    password: Mysql!123
-#    type: com.alibaba.druid.pool.DruidDataSource
-#  jpa:
-#    show-sql: false
-#    hibernate:
-#      ddl-auto: none

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

@@ -0,0 +1,7 @@
+spring:
+  application:
+    name: dmp-rwd-datautils
+  cloud:
+    config:
+      profile: dev2
+      uri: http://192.168.64.18:9932

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

@@ -0,0 +1,9 @@
+spring:
+  application:
+    name: dmp-rwd-datautils
+  profiles:
+    active: dev,log-dev
+  cloud:
+    config:
+      profile: dev2
+      uri: http://192.168.64.18:9932

+ 99 - 0
dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/datautils/TestTransServiceForBR.java

@@ -0,0 +1,99 @@
+package com.persagy.dmp.rwd.datautils;
+
+import com.persagy.dmp.rwd.datautils.model.TransContext;
+import com.persagy.dmp.rwd.datautils.service.TransObjInfoService;
+import com.persagy.dmp.rwd.datautils.service.TransObjService;
+import com.persagy.dmp.rwd.datautils.service.TransObjectValidService;
+import com.persagy.dmp.rwd.datautils.service.TransRelationService;
+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;
+
+/**
+ * @author: yaoll
+ * @date: 2020-10-14
+ * @verison: 1.0
+ */
+@Slf4j
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class TestTransServiceForBR {
+
+	@Autowired
+	private TransObjInfoService transObjInfoService;
+
+	@Autowired
+	private TransObjService transObjervice;
+
+	@Autowired
+	private TransRelationService transRelationService;
+
+	@Autowired
+	private TransObjectValidService transObjectValidService;
+
+	private String groupCode = "BR";
+	private String projectId = "Pj1101080259";
+	private String basePath = "/Users/devsaga/trans/1101080259-20201213";
+
+	@Test
+	public void transObjects() throws Exception {
+
+		TransContext ctx = new TransContext();
+		ctx.setGroupCode(groupCode);
+		ctx.setProjectId(projectId);
+		ctx.setBasePath(basePath);
+		ctx.setDataFile("objects.json");
+		transObjervice.trans(ctx);
+	}
+
+	@Test
+	public void transObjInfos() throws Exception {
+
+		String fileName = "obj_infos.json";
+		TransContext ctx = new TransContext();
+		ctx.setGroupCode(groupCode);
+		ctx.setProjectId(projectId);
+		ctx.setBasePath(basePath);
+		ctx.setDataFile(fileName);
+		transObjInfoService.trans(ctx);
+	}
+
+
+	/**
+	 * 导入前要清除掉关系数据
+	 *
+	 * @throws Exception
+	 */
+	@Test
+	public void transRelation() throws Exception {
+
+		String fileName = "rel_btw_objs.json";
+		TransContext ctx = new TransContext();
+		ctx.setGroupCode(groupCode);
+		ctx.setProjectId(projectId);
+		ctx.setBasePath(basePath);
+		ctx.setDataFile(fileName);
+		transRelationService.trans(ctx);
+	}
+
+	/**
+	 * 清理失效对象
+	 *
+	 * @throws Exception
+	 */
+	@Test
+	public void transObjectValid() throws Exception {
+
+		TransContext ctx = new TransContext();
+		ctx.setGroupCode(groupCode);
+		ctx.setProjectId(projectId);
+		ctx.setBasePath(basePath);
+		ctx.setDataFile("objects.json");
+		transObjectValidService.trans(ctx);
+	}
+
+
+}

+ 107 - 0
dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/datautils/TestTransServiceForGX.java

@@ -0,0 +1,107 @@
+package com.persagy.dmp.rwd.datautils;
+
+import com.persagy.dmp.rwd.datautils.model.TransContext;
+import com.persagy.dmp.rwd.datautils.service.TransObjInfoService;
+import com.persagy.dmp.rwd.datautils.service.TransObjService;
+import com.persagy.dmp.rwd.datautils.service.TransObjectValidService;
+import com.persagy.dmp.rwd.datautils.service.TransRelationService;
+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;
+
+/**
+ * @author: yaoll
+ * @date: 2020-10-14
+ * @verison: 1.0
+ */
+@Slf4j
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class TestTransServiceForGX {
+
+	@Autowired
+	private TransObjInfoService transObjInfoService;
+
+	@Autowired
+	private TransObjService transObjervice;
+
+	@Autowired
+	private TransRelationService transRelationService;
+
+	@Autowired
+	private TransObjectValidService transObjectValidService;
+
+	private String groupCode = "GX";
+	private String projectId = "Pj3702020002";
+	private String basePath = "/Users/devsaga/trans/3702020002-20201220";
+
+	@Test
+	public void all() throws Exception {
+		transObjects();
+		transObjInfos();
+		transRelation();
+		transObjectValid();
+	}
+
+	@Test
+	public void transObjects() throws Exception {
+
+		TransContext ctx = new TransContext();
+		ctx.setGroupCode(groupCode);
+		ctx.setProjectId(projectId);
+		ctx.setBasePath(basePath);
+		ctx.setDataFile("objects.json");
+		transObjervice.trans(ctx);
+	}
+
+	@Test
+	public void transObjInfos() throws Exception {
+
+		String fileName = "obj_infos.json";
+		TransContext ctx = new TransContext();
+		ctx.setGroupCode(groupCode);
+		ctx.setProjectId(projectId);
+		ctx.setBasePath(basePath);
+		ctx.setDataFile(fileName);
+		transObjInfoService.trans(ctx);
+	}
+
+
+	/**
+	 * 导入前要清除掉关系数据
+	 *
+	 * @throws Exception
+	 */
+	@Test
+	public void transRelation() throws Exception {
+
+		String fileName = "rel_btw_objs.json";
+		TransContext ctx = new TransContext();
+		ctx.setGroupCode(groupCode);
+		ctx.setProjectId(projectId);
+		ctx.setBasePath(basePath);
+		ctx.setDataFile(fileName);
+		transRelationService.trans(ctx);
+	}
+
+	/**
+	 * 清理失效对象
+	 *
+	 * @throws Exception
+	 */
+	@Test
+	public void transObjectValid() throws Exception {
+
+		TransContext ctx = new TransContext();
+		ctx.setGroupCode(groupCode);
+		ctx.setProjectId(projectId);
+		ctx.setBasePath(basePath);
+		ctx.setDataFile("objects.json");
+		transObjectValidService.trans(ctx);
+	}
+
+
+}

+ 100 - 0
dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/datautils/TestTransServiceForQH.java

@@ -0,0 +1,100 @@
+package com.persagy.dmp.rwd.datautils;
+
+import com.persagy.dmp.rwd.datautils.model.TransContext;
+import com.persagy.dmp.rwd.datautils.service.TransObjInfoService;
+import com.persagy.dmp.rwd.datautils.service.TransObjService;
+import com.persagy.dmp.rwd.datautils.service.TransObjectValidService;
+import com.persagy.dmp.rwd.datautils.service.TransRelationService;
+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;
+
+/**
+ * @author: yaoll
+ * @date: 2020-10-14
+ * @verison: 1.0
+ */
+@Slf4j
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class TestTransServiceForQH {
+
+	@Autowired
+	private TransObjInfoService transObjInfoService;
+
+	@Autowired
+	private TransObjService transObjervice;
+
+	@Autowired
+	private TransRelationService transRelationService;
+
+	@Autowired
+	private TransObjectValidService transObjectValidService;
+
+	private String groupCode = "QH";
+	private String projectId = "Pj1101080252";
+	private String basePath = "/Users/devsaga/trans/清华双清-2020-12-11";
+
+	@Test
+	public void transObjects() throws Exception {
+
+		TransContext ctx = new TransContext();
+		ctx.setGroupCode(groupCode);
+		ctx.setProjectId(projectId);
+		ctx.setBasePath(basePath);
+		ctx.setDataFile("objects.json");
+		transObjervice.trans(ctx);
+	}
+
+	@Test
+	public void transObjInfos() throws Exception {
+
+		String fileName = "obj_infos.json";
+		TransContext ctx = new TransContext();
+		ctx.setGroupCode(groupCode);
+		ctx.setProjectId(projectId);
+		ctx.setBasePath(basePath);
+		ctx.setDataFile(fileName);
+		transObjInfoService.trans(ctx);
+	}
+
+
+	/**
+	 * 导入前要清除掉关系数据
+	 *
+	 * @throws Exception
+	 */
+	@Test
+	public void transRelation() throws Exception {
+
+		String fileName = "rel_btw_objs.json";
+		TransContext ctx = new TransContext();
+		ctx.setGroupCode(groupCode);
+		ctx.setProjectId(projectId);
+		ctx.setBasePath(basePath);
+		ctx.setDataFile(fileName);
+		// 先导出为sql
+		transRelationService.trans(ctx);
+	}
+
+	/**
+	 * 清理失效对象
+	 *
+	 * @throws Exception
+	 */
+	@Test
+	public void transObjectValid() throws Exception {
+
+		TransContext ctx = new TransContext();
+		ctx.setGroupCode(groupCode);
+		ctx.setProjectId(projectId);
+		ctx.setBasePath(basePath);
+		ctx.setDataFile("objects.json");
+		transObjectValidService.trans(ctx);
+	}
+
+
+}

+ 14 - 3
dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/datautils/TestTransServiceForWD.java

@@ -36,7 +36,17 @@ public class TestTransServiceForWD {
 
 	private String groupCode = "WD";
 	private String projectId = "Pj4403070003";
-	private String basePath = "/Users/devsaga/persagy/4403070003-1128龙岗万达";
+//	private String basePath = "/Users/devsaga/persagy/4403070003-1128龙岗万达";
+	private String basePath = "/Users/devsaga/trans/4403070003-20201220";
+
+
+	@Test
+	public void all() throws Exception {
+		transObjects();
+		transObjInfos();
+		transRelation();
+		transObjectValid();
+	}
 
 	@Test
 	public void transObjects() throws Exception {
@@ -52,8 +62,9 @@ public class TestTransServiceForWD {
 	@Test
 	public void transObjInfos() throws Exception {
 
-//		String fileName = "obj_infos.json";
-		String fileName = "obj_infos-change.json";
+		String fileName = "obj_infos.json";
+//		String fileName = "obj_infos3.json";
+//		String fileName = "obj_infos-change.json";
 		TransContext ctx = new TransContext();
 		ctx.setGroupCode(groupCode);
 		ctx.setProjectId(projectId);

+ 10 - 3
dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/datautils/TestTransServiceForXG.java

@@ -36,7 +36,15 @@ public class TestTransServiceForXG {
 
 	private String groupCode = "XG";
 	private String projectId = "Pj5001120003";
-	private String basePath = "/Users/devsaga/persagy/5001120003";
+	private String basePath = "/Users/devsaga/trans/5001120003-20201221";
+
+	@Test
+	public void all() throws Exception {
+		transObjects();
+		transObjInfos();
+		transRelation();
+		transObjectValid();
+	}
 
 	@Test
 	public void transObjects() throws Exception {
@@ -76,8 +84,7 @@ public class TestTransServiceForXG {
 		ctx.setProjectId(projectId);
 		ctx.setBasePath(basePath);
 		ctx.setDataFile(fileName);
-		// 先导出为sql
-		transRelationService.transToSql(ctx);
+		transRelationService.trans(ctx);
 	}
 
 	/**

+ 13 - 5
dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/datautils/TestTransServiceForZS.java

@@ -36,7 +36,17 @@ public class TestTransServiceForZS {
 
 	private String groupCode = "ZS";
 	private String projectId = "Pj4403050019";
-	private String basePath = "/Users/devsaga/persagy/4403050019-2020-11-30";
+	private String basePath = "/Users/devsaga/trans/4403050019-20201221";
+
+
+	@Test
+	public void all() throws Exception{
+
+		transObjects();
+		transObjInfos();
+		transRelation();
+		transObjectValid();
+	}
 
 	@Test
 	public void transObjects() throws Exception {
@@ -52,8 +62,7 @@ public class TestTransServiceForZS {
 	@Test
 	public void transObjInfos() throws Exception {
 
-//		String fileName = "obj_infos.json";
-		String fileName = "obj_infos-error1.json";
+		String fileName = "obj_infos.json";
 		TransContext ctx = new TransContext();
 		ctx.setGroupCode(groupCode);
 		ctx.setProjectId(projectId);
@@ -77,8 +86,7 @@ public class TestTransServiceForZS {
 		ctx.setProjectId(projectId);
 		ctx.setBasePath(basePath);
 		ctx.setDataFile(fileName);
-		// 先导出为sql
-		transRelationService.transToSql(ctx);
+		transRelationService.trans(ctx);
 	}
 
 	/**

+ 267 - 0
dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/dic/ImportFuncid2.java

@@ -0,0 +1,267 @@
+package com.persagy.dmp.rwd.dic;
+
+import com.persagy.common.date.DateUtils;
+import com.persagy.common.json.JacksonMapper;
+import com.persagy.dmp.rwd.enums.FuncidDataType;
+import lombok.Data;
+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.Date;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * @author: yaoll
+ * @date: 2020-11-30
+ * @verison: 1.0
+ */
+@Slf4j
+public class ImportFuncid2 {
+
+	private String basepath = "/Users/devsaga/trans";
+
+	private String outPath = "/Users/devsaga/trans/funcid-" + DateUtils.format(new Date()) + ".dml.sql";
+
+	@Test
+	public void importFuncidDef() throws IOException {
+		List<FuncidDefModel> funcids = new LinkedList<>();
+		importEquipment(funcids);
+
+		FileOutputStream fos = new FileOutputStream(outPath);
+		PrintWriter writer = new PrintWriter(new BufferedOutputStream(fos));
+		writer.println("commit;");
+		funcids.forEach(item -> {
+//			System.out.println(JacksonMapper.toSimpleJson(item));
+			writer.println(toSql(item));
+		});
+		writer.println("commit;");
+		writer.flush();
+		writer.close();
+	}
+
+	private String toSql(FuncidDefModel model) {
+		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) ");
+		buff.append("values (");
+		buff.append("'").append(UUID.randomUUID().toString().replace("-", "")).append("',"); // id
+		buff.append("'").append(model.getCode()).append("',"); // code
+		buff.append("'").append(model.getOrigCode()).append("',"); // orig_code
+		buff.append("'").append(model.getName()).append("',"); // name
+		buff.append("'").append(model.getAliasCode()).append("',"); // alias_code
+		buff.append("'").append(model.getAliasName()).append("',"); // alias_name
+		buff.append("'").append(model.getClassCode()).append("',"); // class_code
+		buff.append("'").append(model.getType()).append("',"); // type
+		buff.append("'").append(model.getGroupCode()).append("',"); // group_code
+		buff.append("'").append(model.getProjectId()).append("',"); // project_id
+		buff.append("'").append(model.getCategory().name()).append("',"); // category
+		if (model.getFirstTag() != null) {
+			buff.append("'").append(model.getFirstTag()).append("',"); // first_tag
+		} else {
+			buff.append("null,");
+		}
+		if (model.getSecondTag() != null) {
+			buff.append("'").append(model.getSecondTag()).append("',"); // second_tag
+		} else {
+			buff.append("null,");
+		}
+		if (model.getPriority() != null) {
+			buff.append("'").append(model.getPriority()).append("',"); // priority
+		} else {
+			buff.append("null,");
+		}
+		if (model.getInputMode() != null) {
+			buff.append("'").append(model.getInputMode()).append("',"); // input_mode
+		} else {
+			buff.append("null,");
+		}
+		if (model.getUnit() != null) {
+			buff.append("'").append(model.getUnit()).append("',"); // unit
+		} else {
+			buff.append("null,");
+		}
+
+		buff.append("'").append(model.getDataType().name()).append("',"); // data_type
+		buff.append("'").append(model.getOrigDataType()).append("',"); // orig_data_type
+		buff.append(model.getIsMultiple() ? 1 : 0).append(","); // is_multiple
+		buff.append(model.getIsRegion() ? 1 : 0).append(","); // is_region
+		if (model.getFormater() != null) {
+			buff.append("'").append(model.getFormater()).append("',"); // formater
+		} else {
+			buff.append("null,");
+		}
+		if (model.getDataSource() != null) {
+			buff.append("'").append(model.getDataSource().toString()).append("',"); // data_source
+		} else {
+			buff.append("null,");
+		}
+		if (model.getOrigDataSource() != null) { // orig_data_source
+			buff.append("'").append(model.getOrigDataSource()).append("',"); // data_source
+		} else {
+			buff.append("null,");
+		}
+		if (model.getNote() != null) {
+			buff.append("'").append(model.getNote()).append("',"); // note}
+		} else {
+			buff.append("null,");
+		}
+		buff.append(model.getSubFlag() ? 1 : 0).append(","); // sub_flag
+		buff.append(model.getWeakPoint() ? 1 : 0).append(","); // weak_point
+		buff.deleteCharAt(buff.length() - 1);
+		buff.append(");");
+		return buff.toString();
+	}
+
+	private FuncidDefModel toFuncidDefModel(CacheModel model) {
+		FuncidDefModel funcid = new FuncidDefModel();
+		funcid.setGroupCode("0");
+		funcid.setProjectId("0");
+		funcid.setType("common");
+		funcid.setClassCode(model.classCode);
+		funcid.setFirstTag(model.firstTag != null ? model.firstTag.replace("\n", "") : null);
+		funcid.setSecondTag(model.secondTag != null ? model.secondTag.replace("\n", "") : null);
+		funcid.setCode(model.origCode.substring(0, 1).toLowerCase() + model.origCode.substring(1));
+		funcid.setOrigCode(model.origCode);
+		funcid.setAliasCode(model.origCode);
+		if (model.name != null) {
+			funcid.setName(model.name.replace("\n", ""));
+			funcid.setAliasName(model.name.replace("\n", ""));
+		} else {
+			log.error("funcid name is null : {}", JacksonMapper.toSimpleJson(funcid));
+		}
+		funcid.setUnit(model.unit);
+		funcid.setPriority(model.priority);
+		funcid.setInputMode(model.inputMode);
+		funcid.setOrigDataType(model.origDataType);
+		funcid.setSubFlag(false);
+		funcid.setWeakPoint(false);
+		FuncidDefModel dataType = DataTypeMapping.getDataType(model.origDataType);
+		if (dataType != null) {
+			funcid.setCategory(dataType.getCategory());
+			funcid.setDataType(dataType.getDataType());
+			funcid.setIsMultiple(dataType.getIsMultiple());
+			funcid.setIsRegion(dataType.getIsRegion());
+		} else {
+			return null;
+		}
+		funcid.setSubFlag(false);
+		if (model.remark != null) {
+			funcid.setNote(model.remark.replace("\n", ""));
+		}
+
+		if (model.origDataSource != null) {
+			funcid.setOrigDataSource(model.origDataSource.replace("\n", "nn")); // 去掉换行符
+		}
+		if (funcid.getDataType() == FuncidDataType.ENUM || funcid.getDataType() == FuncidDataType.MENUM || funcid.getDataType() == FuncidDataType.BOOLEAN) {
+			funcid.setDataSource(FuncidUtils.transEnumDataSource(model.origDataSource)); // 解析datasource
+		}
+		return funcid;
+	}
+
+
+
+	private void importEquipment(List<FuncidDefModel> funcids) throws IOException {
+
+		funcids.addAll(readSheet("SELTLT", "/17-照明系统设备.xlsx", "LTLT照明灯具"));
+
+		funcids.addAll(readSheet("SELTCC", "/17-照明系统设备.xlsx", "LTCC照明回路"));
+		funcids.addAll(readSheet("SELTLG", "/17-照明系统设备.xlsx", "LTLG照明灯组"));
+
+		funcids.addAll(readSheet("SELTCU", "/17-照明系统设备.xlsx", "LTCU照明控制箱"));
+		funcids.addAll(readSheet("SELTCP", "/17-照明系统设备.xlsx", "LTCP照明控制面板"));
+
+
+	}
+
+
+
+	@Data
+	private static class CacheModel {
+		private String classCode;
+		private String firstTag;
+		private String secondTag;
+		private String origCode;
+		private String name;
+		private String unit;
+		private String origDataType;
+		private String priority; // 优先级
+		private String inputMode;
+		private String origDataSource; // 字典选择
+		private String remark; // 备注
+	}
+
+	private List<FuncidDefModel> readSheet(String classCode, String fileName, String sheetName) throws IOException {
+		List<FuncidDefModel> data = new LinkedList<>();
+		String classFile = basepath + fileName;
+		FileInputStream inputStream = new FileInputStream(classFile);
+		Workbook workbook = new XSSFWorkbook(inputStream);
+		Sheet sheet = workbook.getSheet(sheetName);
+		if (sheet == null) {
+			return data;
+		}
+
+		// 行号从0开始, 从第2行开始读数据
+		int startRowNum = 2;
+		int lastRowNum = sheet.getLastRowNum();
+		CacheModel cache = new CacheModel();
+		for (int rowIndex = startRowNum; rowIndex <= lastRowNum; rowIndex++) {
+			Row row = sheet.getRow(rowIndex);
+			if (row == null) {
+				log.info("file: {}, sheet: {}, row[{}] is null", fileName, sheetName, rowIndex);
+				continue;
+			}
+			// 0:firstTag, 1:secondTag, 2:name, 3:origCode, 4:unit, 5:origDataType, 6:priorite, 7:imputMode, 8:origDataSource, 9:remark
+			CacheModel target = new CacheModel();
+			target.classCode = classCode;
+			target.firstTag = (String) ExcelUtils.parseCell(row.getCell(0), "string");
+			target.secondTag = (String) ExcelUtils.parseCell(row.getCell(1), "string");
+			target.name = (String) ExcelUtils.parseCell(row.getCell(2), "string");
+			target.origCode = (String) ExcelUtils.parseCell(row.getCell(3), "string");
+			target.unit = (String) ExcelUtils.parseCell(row.getCell(4), "string");
+			target.origDataType = (String) ExcelUtils.parseCell(row.getCell(5), "string");
+			target.priority = (String) ExcelUtils.parseCell(row.getCell(6), "string");
+			target.inputMode = (String) ExcelUtils.parseCell(row.getCell(7), "string");
+			target.origDataSource = (String) ExcelUtils.parseCell(row.getCell(8), "string");
+			target.remark = (String) ExcelUtils.parseCell(row.getCell(9), "string");
+
+			if (target.origCode == null || "".equals(target.origCode) || "`".equals(target.origCode)) {
+				continue;
+			}
+			if (FuncidUtils.isBase(target.origCode)) {
+				continue;
+			}
+
+			// firstTag不为空
+			if (target.firstTag != null) {
+				cache.firstTag = target.firstTag;
+				cache.secondTag = null;
+			} else {
+				target.firstTag = cache.firstTag;
+			}
+
+			// secondTag
+			if (target.secondTag != null) {
+				cache.secondTag = target.secondTag;
+			} else {
+				target.secondTag = cache.secondTag;
+			}
+			FuncidDefModel funcidDefModel = toFuncidDefModel(target);
+			if (funcidDefModel == null) {
+				log.info("file: {}, sheet: {}, row: {} data type [{}] error", fileName, sheetName, rowIndex, target.origDataType);
+			} else {
+				data.add(funcidDefModel);
+			}
+		}
+		return data;
+	}
+
+}
+

+ 327 - 0
dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/dic/ImportGroupProjectFuncid.java

@@ -0,0 +1,327 @@
+package com.persagy.dmp.rwd.dic;
+
+import com.persagy.common.date.DateUtils;
+import com.persagy.common.json.JacksonMapper;
+import com.persagy.dmp.rwd.enums.FuncidDataType;
+import lombok.Data;
+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.Date;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * @author: yaoll
+ * @date: 2020-11-30
+ * @verison: 1.0
+ */
+@Slf4j
+public class ImportGroupProjectFuncid {
+
+	private String basepath = "/Users/devsaga/trans";
+
+	private String outPath = "/Users/devsaga/persagy/数据字典20201118/funcid-" + DateUtils.format(new Date()) + ".dml.sql";
+
+	@Test
+	public void test1() throws Exception{
+		String fileName = "/近期新增需求WD.xlsx";
+		String sheetName = "Sheet1";
+
+		String type = "group";
+		String groupCode = "WD";
+		String projectId = "0";
+
+		List<FuncidDefModel> funcids = new LinkedList<>();
+		String classFile = basepath + fileName;
+		FileInputStream inputStream = new FileInputStream(classFile);
+		Workbook workbook = new XSSFWorkbook(inputStream);
+		Sheet sheet = workbook.getSheet(sheetName);
+
+		int startRowNum = 1;
+		int lastRowNum = sheet.getLastRowNum();
+		for (int rowIndex = startRowNum; rowIndex <= lastRowNum; rowIndex++) {
+			Row row = sheet.getRow(rowIndex);
+			if (row == null) {
+				log.info("file: {}, sheet: {}, row[{}] is null", fileName, sheetName, rowIndex);
+				continue;
+			}
+			// 0:firstTag, 1:secondTag, 2:name, 3:origCode, 4:unit, 5:origDataType, 6:priorite, 7:imputMode, 8:origDataSource, 9:remark
+			// 0系统	1专业 2对象编码 3对象类型 4一级分级标签 5二级分级标签 6属性点 7属性点编码 8单位 9类型 10优先级 11字典选择 12备注
+			FuncidDefModel model = new FuncidDefModel();
+			model.setType(type);
+			model.setGroupCode(groupCode);
+			model.setProjectId(projectId);
+
+			String major = (String) ExcelUtils.parseCell(row.getCell(1), "string");
+			String classCode = (String) ExcelUtils.parseCell(row.getCell(2), "string");
+			model.setClassCode((major == null ? "" : major ) + classCode);
+
+			model.setFirstTag((String) ExcelUtils.parseCell(row.getCell(4), "string"));
+			model.setSecondTag((String) ExcelUtils.parseCell(row.getCell(5), "string"));
+
+			String name = (String) ExcelUtils.parseCell(row.getCell(6), "string");
+			String code = (String) ExcelUtils.parseCell(row.getCell(7), "string");
+			if (code == null) {
+				continue;
+			}
+			name = name.replace("\n", "");
+			model.setCode(code.substring(0, 1).toLowerCase() + code.substring(1));
+			model.setName(name);
+			model.setAliasCode(code);
+			model.setAliasName(name);
+			model.setOrigCode(code);
+
+			model.setUnit((String) ExcelUtils.parseCell(row.getCell(8), "string"));
+
+			String origDataType = (String) ExcelUtils.parseCell(row.getCell(9), "string");
+			model.setOrigDataType(origDataType);
+			FuncidDefModel param = DataTypeMapping.getDataType(origDataType);
+			if (param == null) {
+
+				System.out.println(JacksonMapper.toSimpleJson(model));
+				continue;
+			}
+
+			model.setOrigDataType(origDataType);
+			model.setCategory(param.getCategory());
+			model.setDataType(param.getDataType());
+			model.setIsMultiple(param.getIsMultiple());
+			model.setIsRegion(param.getIsRegion());
+			model.setPriority((String) ExcelUtils.parseCell(row.getCell(10), "string"));
+
+			String origDataSource = (String) ExcelUtils.parseCell(row.getCell(11), "string");
+			if (origDataSource != null) {
+				origDataSource = origDataSource.replace("\n", "");
+			}
+			model.setOrigDataSource(origDataSource);
+			if (model.getDataType() == FuncidDataType.ENUM || model.getDataType() == FuncidDataType.MENUM || model.getDataType() == FuncidDataType.BOOLEAN) {
+				model.setDataSource(FuncidUtils.transEnumDataSource(origDataSource)); // 解析datasource
+			}
+
+			String note = (String) ExcelUtils.parseCell(row.getCell(12), "string");
+			model.setNote("任晓欣-20201211添加:" + (note == null ? "" : note.replace("\n", "")));
+			model.setSubFlag(false);
+			model.setWeakPoint(false);
+			funcids.add(model);
+		}
+
+		for (FuncidDefModel funcid : funcids) {
+			String str = toSql(funcid, type, groupCode, projectId);
+			System.out.println(str);
+		}
+
+	}
+
+	private String toSql(FuncidDefModel model, String type, String groupCode, String projectId) {
+		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) ");
+		buff.append("values (");
+		buff.append("'").append(UUID.randomUUID().toString().replace("-", "")).append("',"); // id
+		buff.append("'").append(model.getCode()).append("',"); // code
+		buff.append("'").append(model.getOrigCode()).append("',"); // orig_code
+		buff.append("'").append(model.getName()).append("',"); // name
+		buff.append("'").append(model.getAliasCode()).append("',"); // alias_code
+		buff.append("'").append(model.getAliasName()).append("',"); // alias_name
+		buff.append("'").append(model.getClassCode()).append("',"); // class_code
+		buff.append("'").append(model.getType()).append("',"); // type
+		buff.append("'").append(model.getGroupCode()).append("',"); // group_code
+		buff.append("'").append(model.getProjectId()).append("',"); // project_id
+		buff.append("'").append(model.getCategory().name()).append("',"); // category
+		if (model.getFirstTag() != null) {
+			buff.append("'").append(model.getFirstTag()).append("',"); // first_tag
+		} else {
+			buff.append("null,");
+		}
+		if (model.getSecondTag() != null) {
+			buff.append("'").append(model.getSecondTag()).append("',"); // second_tag
+		} else {
+			buff.append("null,");
+		}
+		if (model.getPriority() != null) {
+			buff.append("'").append(model.getPriority()).append("',"); // priority
+		} else {
+			buff.append("null,");
+		}
+		if (model.getInputMode() != null) {
+			buff.append("'").append(model.getInputMode()).append("',"); // input_mode
+		} else {
+			buff.append("null,");
+		}
+		if (model.getUnit() != null) {
+			buff.append("'").append(model.getUnit()).append("',"); // unit
+		} else {
+			buff.append("null,");
+		}
+
+		buff.append("'").append(model.getDataType().name()).append("',"); // data_type
+		buff.append("'").append(model.getOrigDataType()).append("',"); // orig_data_type
+		buff.append(model.getIsMultiple() ? 1 : 0).append(","); // is_multiple
+		buff.append(model.getIsRegion() ? 1 : 0).append(","); // is_region
+		if (model.getFormater() != null) {
+			buff.append("'").append(model.getFormater()).append("',"); // formater
+		} else {
+			buff.append("null,");
+		}
+		if (model.getDataSource() != null) {
+			buff.append("'").append(model.getDataSource().toString()).append("',"); // data_source
+		} else {
+			buff.append("null,");
+		}
+		if (model.getOrigDataSource() != null) { // orig_data_source
+			buff.append("'").append(model.getOrigDataSource()).append("',"); // data_source
+		} else {
+			buff.append("null,");
+		}
+		if (model.getNote() != null) {
+			buff.append("'").append(model.getNote()).append("',"); // note}
+		} else {
+			buff.append("null,");
+		}
+		buff.append(model.getSubFlag() ? 1 : 0).append(","); // sub_flag
+		buff.append(model.getWeakPoint() ? 1 : 0).append(","); // weak_point
+		buff.deleteCharAt(buff.length() - 1);
+		buff.append(");");
+		return buff.toString();
+	}
+
+	private FuncidDefModel toFuncidDefModel(CacheModel model) {
+		FuncidDefModel funcid = new FuncidDefModel();
+		funcid.setGroupCode("0");
+		funcid.setProjectId("0");
+		funcid.setType("common");
+		funcid.setClassCode(model.classCode);
+		funcid.setFirstTag(model.firstTag != null ? model.firstTag.replace("\n", "") : null);
+		funcid.setSecondTag(model.secondTag != null ? model.secondTag.replace("\n", "") : null);
+		funcid.setCode(model.origCode.substring(0, 1).toLowerCase() + model.origCode.substring(1));
+		funcid.setOrigCode(model.origCode);
+		funcid.setAliasCode(model.origCode);
+		if (model.name != null) {
+			funcid.setName(model.name.replace("\n", ""));
+			funcid.setAliasName(model.name.replace("\n", ""));
+		} else {
+			log.error("funcid name is null : {}", JacksonMapper.toSimpleJson(funcid));
+		}
+		funcid.setUnit(model.unit);
+		funcid.setPriority(model.priority);
+		funcid.setInputMode(model.inputMode);
+		funcid.setOrigDataType(model.origDataType);
+		funcid.setSubFlag(false);
+		funcid.setWeakPoint(false);
+		FuncidDefModel dataType = DataTypeMapping.getDataType(model.origDataType);
+		if (dataType != null) {
+			funcid.setCategory(dataType.getCategory());
+			funcid.setDataType(dataType.getDataType());
+			funcid.setIsMultiple(dataType.getIsMultiple());
+			funcid.setIsRegion(dataType.getIsRegion());
+		} else {
+			return null;
+		}
+		funcid.setSubFlag(false);
+		if (model.remark != null) {
+			funcid.setNote(model.remark.replace("\n", ""));
+		}
+
+		if (model.origDataSource != null) {
+			funcid.setOrigDataSource(model.origDataSource.replace("\n", "nn")); // 去掉换行符
+		}
+		if (funcid.getDataType() == FuncidDataType.ENUM || funcid.getDataType() == FuncidDataType.MENUM || funcid.getDataType() == FuncidDataType.BOOLEAN) {
+			funcid.setDataSource(FuncidUtils.transEnumDataSource(model.origDataSource)); // 解析datasource
+		}
+		return funcid;
+	}
+
+	private void importSpace(List<FuncidDefModel> funcids) throws IOException {
+		funcids.addAll(readSheet("OtherZone", "/2.1-建筑空间类对象/2.1.5-空间.xlsx", "OTZ其他分区"));
+	}
+
+	@Data
+	private static class CacheModel {
+		private String classCode;
+		private String firstTag;
+		private String secondTag;
+		private String origCode;
+		private String name;
+		private String unit;
+		private String origDataType;
+		private String priority; // 优先级
+		private String inputMode;
+		private String origDataSource; // 字典选择
+		private String remark; // 备注
+	}
+
+	private List<FuncidDefModel> readSheet(String classCode, String fileName, String sheetName) throws IOException {
+		List<FuncidDefModel> data = new LinkedList<>();
+		String classFile = basepath + fileName;
+		FileInputStream inputStream = new FileInputStream(classFile);
+		Workbook workbook = new XSSFWorkbook(inputStream);
+		Sheet sheet = workbook.getSheet(sheetName);
+		if (sheet == null) {
+			return data;
+		}
+
+		// 行号从0开始, 从第2行开始读数据
+		int startRowNum = 2;
+		int lastRowNum = sheet.getLastRowNum();
+		CacheModel cache = new CacheModel();
+		for (int rowIndex = startRowNum; rowIndex <= lastRowNum; rowIndex++) {
+			Row row = sheet.getRow(rowIndex);
+			if (row == null) {
+				log.info("file: {}, sheet: {}, row[{}] is null", fileName, sheetName, rowIndex);
+				continue;
+			}
+			// 0:firstTag, 1:secondTag, 2:name, 3:origCode, 4:unit, 5:origDataType, 6:priorite, 7:imputMode, 8:origDataSource, 9:remark
+			CacheModel target = new CacheModel();
+			target.classCode = classCode;
+			target.firstTag = (String) ExcelUtils.parseCell(row.getCell(0), "string");
+			target.secondTag = (String) ExcelUtils.parseCell(row.getCell(1), "string");
+			target.name = (String) ExcelUtils.parseCell(row.getCell(2), "string");
+			target.origCode = (String) ExcelUtils.parseCell(row.getCell(3), "string");
+			target.unit = (String) ExcelUtils.parseCell(row.getCell(4), "string");
+			target.origDataType = (String) ExcelUtils.parseCell(row.getCell(5), "string");
+			target.priority = (String) ExcelUtils.parseCell(row.getCell(6), "string");
+			target.inputMode = (String) ExcelUtils.parseCell(row.getCell(7), "string");
+			target.origDataSource = (String) ExcelUtils.parseCell(row.getCell(8), "string");
+			target.remark = (String) ExcelUtils.parseCell(row.getCell(9), "string");
+
+			if (target.origCode == null || "".equals(target.origCode) || "`".equals(target.origCode)) {
+				continue;
+			}
+			if (FuncidUtils.isBase(target.origCode)) {
+				continue;
+			}
+
+			// firstTag不为空
+			if (target.firstTag != null) {
+				cache.firstTag = target.firstTag;
+				cache.secondTag = null;
+			} else {
+				target.firstTag = cache.firstTag;
+			}
+
+			// secondTag
+			if (target.secondTag != null) {
+				cache.secondTag = target.secondTag;
+			} else {
+				target.secondTag = cache.secondTag;
+			}
+			FuncidDefModel funcidDefModel = toFuncidDefModel(target);
+			if (funcidDefModel == null) {
+				log.info("file: {}, sheet: {}, row: {} data type [{}] error", fileName, sheetName, rowIndex, target.origDataType);
+			} else {
+				data.add(funcidDefModel);
+			}
+		}
+		return data;
+	}
+
+}
+

+ 9 - 11
dmp-rwd/doc/config.sql

@@ -16,16 +16,14 @@ VALUES
 ('dmp-rwd','default','master','DMP',1,'eureka.instance.prefer-ip-address','true',null),
 ('dmp-rwd','default','master','DMP',1,'eureka.instance.instance-id','${spring.cloud.client.ip-address}:${server.port}',null),
 
-('dmp-rwd','default','master','DMP',1,'spring.shardingsphere.props.sql.show', 'false', null),
-('dmp-rwd','default','master','DMP',1,'spring.shardingsphere.datasource.names', 'ds0', null),
-('dmp-rwd','default','master','DMP',1,'spring.shardingsphere.datasource.ds0.type', 'com.alibaba.druid.pool.DruidDataSource', null),
-('dmp-rwd','default','master','DMP',1,'spring.shardingsphere.datasource.ds0.driverClassName', 'com.mysql.cj.jdbc.Driver', null),
-('dmp-rwd','default','master','DMP',1,'spring.shardingsphere.datasource.ds0.url', 'jdbc:mysql://${persagy.mysql.host}:${persagy.mysql.port}/${persagy.mysql.database}?useUnicode=true&characterEncoding=utf-8&mysqlEncoding=utf8&useSSL=false', null),
-('dmp-rwd','default','master','DMP',1,'spring.shardingsphere.datasource.ds0.username', '${persagy.mysql.username}', null),
-('dmp-rwd','default','master','DMP',1,'spring.shardingsphere.datasource.ds0.password', '${persagy.mysql.password}', null),
-('dmp-rwd','default','master','DMP',1,'spring.shardingsphere.datasource.ds0.initialSize', '${persagy.mysql.initialSize}', null),
-('dmp-rwd','default','master','DMP',1,'spring.shardingsphere.datasource.ds0.maxActive', '${persagy.mysql.maxActive}', null),
-('dmp-rwd','default','master','DMP',1,'spring.shardingsphere.sharding.default-data-source-name', 'ds0', null),
+('dmp-rwd','default','master','DMP',1,'spring.datasource.type', 'com.alibaba.druid.pool.DruidDataSource', null),
+('dmp-rwd','default','master','DMP',1,'spring.datasource.driverClassName', 'com.mysql.cj.jdbc.Driver', null),
+('dmp-rwd','default','master','DMP',1,'spring.datasource.url', 'jdbc:mysql://${persagy.mysql.host}:${persagy.mysql.port}/${persagy.mysql.database}?useUnicode=true&characterEncoding=utf-8&mysqlEncoding=utf8&useSSL=false', null),
+('dmp-rwd','default','master','DMP',1,'spring.datasource.username', '${persagy.mysql.username}', null),
+('dmp-rwd','default','master','DMP',1,'spring.datasource.password', '${persagy.mysql.password}', null),
+('dmp-rwd','default','master','DMP',1,'spring.datasource.max-active', '${persagy.mysql.maxActive}', null),
+('dmp-rwd','default','master','DMP',1,'spring.datasource.max-idle', '20', null),
+('dmp-rwd','default','master','DMP',1,'spring.datasource.min-idle', '10', null),
 
 ('dmp-rwd','default','master','DMP',1,'spring.rabbitmq.host', '${persagy.rabbitmq.host}', null),
 ('dmp-rwd','default','master','DMP',1,'spring.rabbitmq.port', '${persagy.rabbitmq.port}', null),
@@ -51,7 +49,7 @@ VALUES
 ('dmp-rwd','dev','master','DMP',1,'server.port', '8080', null),
 
 ('dmp-rwd','dev','master','DMP',1,'eureka.client.service-url.defaultZone','http://frame:123456@localhost:9931/eureka/','注册中心地址'),
-('dmp-rwd','dev','master','DMP',1,'eureka.instance.ip-address','localhost',null),
+
 ('dmp-rwd','dev','master','DMP',1,'persagy.iot.data.server', 'http://localhost:9981', 'IOT数据查询服务'),
 ('dmp-rwd','dev','master','DMP',1,'persagy.iot.setting.server', 'http://localhost:9983', 'IOT控制服务'),
 

+ 1 - 6
dmp-rwd/pom.xml

@@ -71,12 +71,7 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
-        <!-- 分库分表 -->
-        <dependency>
-            <groupId>org.apache.shardingsphere</groupId>
-            <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
-            <version>4.1.1</version>
-        </dependency>
+
         <!-- 注册中心 -->
         <dependency>
             <groupId>org.springframework.cloud</groupId>

+ 0 - 2
dmp-rwd/src/main/java/com/persagy/dmp/rwd/config/GlobalExceptionHandler.java

@@ -2,7 +2,6 @@ package com.persagy.dmp.rwd.config;
 
 import com.persagy.common.web.BaseResponse;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.shardingsphere.sharding.route.engine.validator.impl.ShardingUpdateStatementValidator;
 import org.springframework.dao.DataAccessException;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
@@ -23,7 +22,6 @@ public class GlobalExceptionHandler {
 		BaseResponse<String> resp = new BaseResponse<>();
 		resp.setFail("服务异常: " + ex.getMessage());
 		log.error("服务异常", ex);
-		ShardingUpdateStatementValidator va;
 		return resp;
 	}
 

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

@@ -0,0 +1,63 @@
+package com.persagy.dmp.rwd.config;
+
+import lombok.Data;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @author: yaoll
+ * @date: 2020-12-20
+ * @verison: 1.0
+ */
+public class JpaSqlExecuteContext extends HandlerInterceptorAdapter {
+
+	private static final ThreadLocal<Param> param = new ThreadLocal();
+
+	@Override
+	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+		this.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();
+	}
+
+	@Override
+	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+		this.clear();
+	}
+
+
+	@Data
+	public static class Param {
+		private String groupCode;
+		private String projectId;
+	}
+
+	public static void init(String groupCode, String projectId) {
+		if (param.get() == null) {
+			param.set(new Param());
+		}
+		param.get().groupCode = groupCode;
+		param.get().projectId = projectId;
+	}
+
+	public static void clear() {
+		param.remove();
+		param.set(null);
+	}
+
+	public static String getGroupCode() {
+		return param.get().groupCode;
+	}
+
+	public static String getProjectId() {
+		return param.get().projectId;
+	}
+
+}

+ 6 - 0
dmp-rwd/src/main/java/com/persagy/dmp/rwd/config/WebConfig.java

@@ -24,10 +24,16 @@ public class WebConfig implements WebMvcConfigurer {
 		return new DmpParameterStorage();
 	}
 
+	@Bean
+	public JpaSqlExecuteContext jpaSqlExecuteContext() {
+		return new JpaSqlExecuteContext();
+	}
+
 	@Override
 	public void addInterceptors(InterceptorRegistry registry) {
 		// 设置拦截的路径、不拦截的路径、优先级等等
 		registry.addInterceptor(dmpParameterStorage()).addPathPatterns("/**");
+		registry.addInterceptor(jpaSqlExecuteContext()).addPathPatterns("/**");
 	}
 
 	@Bean

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

@@ -4,6 +4,7 @@ import com.persagy.common.criteria.CriteriaUtils;
 import com.persagy.common.criteria.JpaUtils;
 import com.persagy.common.web.BaseResponse;
 import com.persagy.dmp.config.DmpParameterStorage;
+import com.persagy.dmp.rwd.config.JpaSqlExecuteContext;
 import com.persagy.dmp.rwd.config.RwdConstants;
 import com.persagy.dmp.rwd.repository.*;
 import com.querydsl.jpa.impl.JPAQueryFactory;
@@ -69,6 +70,11 @@ public class BaseService {
     @Autowired
     protected SchemaProjectRepository schemaProjectRepository;
 
+    protected void setSharding(String groupCode, String projectId){
+        JpaSqlExecuteContext.init(groupCode, projectId);
+    }
+
+
     protected static class OrgParam {
         String groupCode;
         String schemaId;

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

@@ -77,6 +77,7 @@ public class ClassDefService extends BaseService {
 		jacksonCriteria.add("type", "common");
 		jacksonCriteria.add("groupCode", "0");
 		jacksonCriteria.setWithoutCount(true);
+		setSharding("0", "0"); // sharding
 		PagedResponse<ClassDefModel> queryResponse = query(jacksonCriteria);
 		for (ClassDefModel model : queryResponse.getData()) {
 			map.put(model.getCode(), model);
@@ -89,6 +90,7 @@ public class ClassDefService extends BaseService {
 			groupCriteria.add("type", "group");
 			groupCriteria.add("groupCode", orgParam.groupCode);
 			jacksonCriteria.setWithoutCount(true);
+			setSharding(orgParam.groupCode, "0"); // sharding
 			queryResponse = query(groupCriteria);
 			for (ClassDefModel model : queryResponse.getData()) {
 				map.put(model.getCode(), model);
@@ -103,6 +105,7 @@ public class ClassDefService extends BaseService {
 			jacksonCriteria.add("groupCode", orgParam.groupCode);
 			jacksonCriteria.add("projectId", orgParam.projectId);
 			jacksonCriteria.setWithoutCount(true);
+			setSharding(orgParam.groupCode, orgParam.projectId); // sharding
 			queryResponse = query(jacksonCriteria);
 			for (ClassDefModel model : queryResponse.getData()) {
 				map.put(model.getCode(), model);
@@ -112,6 +115,7 @@ public class ClassDefService extends BaseService {
 		// 筛选方案订阅
 		if (orgParam.schemaId != null && !"0".equalsIgnoreCase(orgParam.schemaId)) {
 			QSchemaClass qsc = QSchemaClass.schemaClass;
+			setSharding(orgParam.groupCode, orgParam.projectId); // sharding
 			Iterable<SchemaClass> all = schemaClassRepository.findAll(qsc.schemaId.eq(orgParam.schemaId).and(qsc.groupCode.eq(orgParam.groupCode)));
 			Set<String> classCodes = new HashSet<>();
 			for (SchemaClass item : all) {
@@ -133,6 +137,7 @@ public class ClassDefService extends BaseService {
 		// 筛选应用订阅部分
 		if (orgParam.appId != null && !"0".equalsIgnoreCase(orgParam.appId)) {
 			QAppClass qac = QAppClass.appClass;
+			setSharding(orgParam.groupCode, orgParam.projectId); // sharding
 			Iterable<AppClass> all = appClassRepository.findAll(qac.appId.eq(appId).and(qac.groupCode.eq(orgParam.groupCode).and(qac.projectId.eq(orgParam.projectId))));
 			Set<String> classCodes = new HashSet<>();
 			for (AppClass item : all) {
@@ -156,8 +161,6 @@ public class ClassDefService extends BaseService {
 
 			//List<FuncidDataType> enumTypeList = Arrays.asList(FuncidDataType.ENUM);
 			List<String> classCodeList = map.values().stream().map(ClassDefModel::getCode).collect(Collectors.toList());
-			Map<String, FuncidDef> funcidCache = new HashMap<>();
-
 			JacksonCriteria funcidCriteria = JacksonCriteria.newInstance();
 			funcidCriteria.add("classCode").in(classCodeList);
 			funcidCriteria.add("dataType", FuncidDataType.ENUM);
@@ -181,7 +184,7 @@ public class ClassDefService extends BaseService {
 				}
 
 				for (JsonNode jsonNode : dataSource) {
-					com.fasterxml.jackson.databind.node.ObjectNode item = (com.fasterxml.jackson.databind.node.ObjectNode) jsonNode;
+					ObjectNode item = (ObjectNode) jsonNode;
 					ClassDefModel model = new ClassDefModel();
 					BeanUtils.copyProperties(classDefModel, model);
 					model.setCode(classDefModel.getCode() + "&" + funcid.getCode() + "=" + item.get("code").asText());

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

@@ -79,6 +79,7 @@ public class FuncidDefService extends BaseService {
 				return resp;
 			}
 			QSchemaProject pqt = QSchemaProject.schemaProject;
+			setSharding(orgParam.groupCode, orgParam.projectId); // sharding
 			Optional<SchemaProject> one = schemaProjectRepository.findOne(pqt.projectId.eq(orgParam.projectId).and(pqt.groupCode.eq(orgParam.groupCode)));
 			if (one.isPresent()) {
 				orgParam.schemaId = one.get().getSchemaId();
@@ -106,6 +107,7 @@ public class FuncidDefService extends BaseService {
 				String infoCode = funcid.getCode();
 				if (!classInfoCodeCache.containsKey(classCode)) {
 					QSchemaFuncid qsf = QSchemaFuncid.schemaFuncid;
+					setSharding(orgParam.groupCode, orgParam.projectId); // sharding
 					Iterable<SchemaFuncid> all = schemaFuncidRepository.findAll(qsf.groupCode.eq(orgParam.groupCode).and(qsf.schemaId.eq(orgParam.schemaId).and(qsf.classCode.eq(classCode))));
 					Set<String> set = new HashSet<>();
 					for (SchemaFuncid schemaFuncid : all) {
@@ -130,6 +132,7 @@ public class FuncidDefService extends BaseService {
 				String infoCode = funcid.getCode();
 				if (!classInfoCodeCache.containsKey(classCode)) {
 					QAppFuncid qaf = QAppFuncid.appFuncid;
+					setSharding(orgParam.groupCode, orgParam.projectId); // sharding
 					Iterable<AppFuncid> all = appFuncidRepository.findAll(qaf.appId.eq(orgParam.appId)
 							.and(qaf.groupCode.eq(orgParam.groupCode))
 							.and(qaf.projectId.eq(orgParam.projectId))
@@ -152,13 +155,10 @@ public class FuncidDefService extends BaseService {
 	}
 
 	private List<FuncidDefModel> queryWithClassCode(OrgParam orgParam, ListResponse<FuncidDefModel> resp, JacksonCriteria request) {
-		Map<String, FuncidDefModel> cache = new HashMap<>();
 		JsonNode classCode = request.getCriteria().get("classCode");
-
 		JacksonCriteria criteria = JacksonCriteria.newInstance();
 		criteria.getCriteria().set("code", classCode);
 		criteria.setWithoutCount(true);
-		System.out.println("query class " + JacksonMapper.toSimpleJson(criteria));
 		ListResponse<ClassDefModel> classDefModelListResponse = classDefService.queryClass(orgParam.groupCode, orgParam.schemaId, orgParam.projectId, orgParam.appId, false, criteria);
 		List<ClassDefModel> classDefModelList = classDefModelListResponse.getData();
 		List<FuncidDefModel> list = new LinkedList<>();
@@ -191,7 +191,9 @@ public class FuncidDefService extends BaseService {
 		criteria.add("type", "common");
 		criteria.add("groupCode", "0");
 		criteria.setWithoutCount(true);
+		setSharding("0", "0"); // sharding
 		PagedResponse<FuncidDefModel> queryResp = query(criteria);
+
 		queryResp.getData().forEach(model -> cache.put(model.getClassCode() + "-" + model.getCode(), model));
 
 		// 查询集团级
@@ -201,6 +203,7 @@ public class FuncidDefService extends BaseService {
 			criteria.add("type", "group");
 			criteria.add("groupCode", orgParam.groupCode);
 			criteria.setWithoutCount(true);
+			setSharding(orgParam.groupCode, orgParam.projectId); // sharding
 			queryResp = query(criteria);
 			queryResp.getData().forEach(model -> cache.put(model.getClassCode() + "-" + model.getCode(), model));
 		}
@@ -212,6 +215,7 @@ public class FuncidDefService extends BaseService {
 			criteria.add("groupCode", orgParam.groupCode);
 			criteria.add("projectId", orgParam.projectId);
 			criteria.setWithoutCount(true);
+			setSharding(orgParam.groupCode, orgParam.projectId); // sharding
 			queryResp = query(criteria);
 			queryResp.getData().forEach(model -> cache.put(model.getClassCode() + "-" + model.getCode(), model));
 		}

+ 1 - 1
dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/ObjectInstanceQueryService.java

@@ -101,7 +101,7 @@ public class ObjectInstanceQueryService extends BaseService {
 			if (RwdConstants.isBasicColumn(infoCode) || set.contains(infoCode)) {
 				continue;
 			}
-			String exp = "JSON_EXTRACT({0}, '$." + infoCode + "')";
+			String exp = "json_extract({0}, '$." + infoCode + "')";
 			JsonNode value = object.get(infoCode);
 			FuncidDataType funcidDataType = parseDataType(value);
 			if (funcidDataType == FuncidDataType.STRING) {

+ 1 - 1
dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/iot/CurrentIotService.java

@@ -104,7 +104,7 @@ public class CurrentIotService extends BaseIotService {
 			for (CurrentDataModel model : param) {
 				if (meter.equals(model.getMeter()) && function.equals(model.getFunction())) {
 					model.setData(item.get("data"));
-					model.setTime(JacksonMapper.getString(item, "time"));
+					model.setTime(JacksonMapper.getString(item, "receivetime"));
 				}
 			}
 		}

+ 0 - 41
dmp-rwd/src/main/java/com/persagy/dmp/rwd/sharding/GroupProjectShardingAlgorithm.java

@@ -1,41 +0,0 @@
-package com.persagy.dmp.rwd.sharding;
-
-import org.apache.shardingsphere.api.sharding.complex.ComplexKeysShardingAlgorithm;
-import org.apache.shardingsphere.api.sharding.complex.ComplexKeysShardingValue;
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * @author: yaoll
- * @date: 2020-10-30
- * @verison: 1.0
- */
-public class GroupProjectShardingAlgorithm implements ComplexKeysShardingAlgorithm<String> {
-
-	@Override
-	public Collection<String> doSharding(Collection<String> availableTargetNames, ComplexKeysShardingValue<String> shardingValue) {
-		String logicTableName = shardingValue.getLogicTableName();
-		Map<String, Collection<String>> columnNameAndShardingValuesMap = shardingValue.getColumnNameAndShardingValuesMap();
-		Collection<String> groupCodes = columnNameAndShardingValuesMap.get("group_code");
-		Collection<String> projectIds = columnNameAndShardingValuesMap.get("project_id");
-		Set<String> result = new HashSet<>();
-		if (groupCodes == null || groupCodes.size() == 0 || projectIds == null || projectIds.size() == 0) {
-			result.add(logicTableName);
-		} else {
-			for (String groupCode : groupCodes) {
-				for (String projectId : projectIds) {
-					if ("0".equals(groupCode)) {
-						result.add(logicTableName);
-					} else {
-						result.add(logicTableName + "_" + groupCode.toLowerCase() + "_" + projectId.toLowerCase());
-					}
-				}
-			}
-		}
-		return result;
-	}
-
-}

+ 0 - 28
dmp-rwd/src/main/java/com/persagy/dmp/rwd/sharding/GroupShardingAlgorithm.java

@@ -1,28 +0,0 @@
-package com.persagy.dmp.rwd.sharding;
-
-import lombok.extern.slf4j.Slf4j;
-import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm;
-import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue;
-
-import java.util.Collection;
-
-/**
- * @author: yaoll
- * @date: 2020-10-28
- * @verison: 1.0
- */
-@Slf4j
-public class GroupShardingAlgorithm implements PreciseShardingAlgorithm<String> {
-
-	@Override
-	public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<String> shardingValue) {
-		String logicTableName = shardingValue.getLogicTableName();
-		String value = shardingValue.getValue();
-		if (value == null || "0".equals(value)) {
-			return logicTableName;
-		} else {
-			return logicTableName + "_" + value.toLowerCase();
-		}
-	}
-
-}

+ 86 - 0
dmp-rwd/src/main/java/com/persagy/dmp/rwd/sharding/JpaSqlStatementInspector.java

@@ -0,0 +1,86 @@
+package com.persagy.dmp.rwd.sharding;
+
+import com.persagy.dmp.rwd.config.JpaSqlExecuteContext;
+import lombok.extern.slf4j.Slf4j;
+import org.hibernate.resource.jdbc.spi.StatementInspector;
+
+/**
+ * @author: yaoll
+ * @date: 2020-12-20
+ * @verison: 1.0
+ */
+@Slf4j
+public class JpaSqlStatementInspector implements StatementInspector {
+
+	private final static String TABLE_DEF_CLASS = "rwd_def_class";
+	private final static String TABLE_DEF_FUNCID = "rwd_def_funcid";
+
+	private final static String TABLE_SCHEMA = "rwd_schema";
+	private final static String TABLE_SCHEMA_CLASS = "rwd_schema_class";
+	private final static String TABLE_SCHEMA_FUNCID = "rwd_schema_funcid";
+	private final static String TABLE_SCHEMA_PROJECT = "rwd_schema_project";
+
+	private final static String TABLE_APP_CLASS = "rwd_app_class";
+	private final static String TABLE_APP_FUNCID = "rwd_app_funcid";
+
+	private final static String TABLE_INSTANCE_GRAPH = "rwd_graph";
+	private final static String TABLE_INSTANCE_OBJEC = "rwd_object";
+	private final static String TABLE_INSTANCE_INSTANCE = "rwd_relation";
+
+
+	@Override
+	public String inspect(String sql) {
+		// 只拦截dml
+		if (sql.startsWith("select") || sql.startsWith("update") || sql.startsWith("delete") || sql.startsWith("insert")) {
+			log.info("sql inspector: {}", sql);
+
+			sql = execute(sql, TABLE_DEF_CLASS, groupTableStrategy);
+			sql = execute(sql, TABLE_DEF_FUNCID, groupTableStrategy);
+
+			sql = execute(sql, TABLE_SCHEMA, groupTableStrategy);
+			sql = execute(sql, TABLE_SCHEMA_CLASS, groupTableStrategy);
+			sql = execute(sql, TABLE_SCHEMA_FUNCID, groupTableStrategy);
+			sql = execute(sql, TABLE_SCHEMA_PROJECT, groupTableStrategy);
+
+			sql = execute(sql, TABLE_APP_CLASS, groupTableStrategy);
+			sql = execute(sql, TABLE_APP_FUNCID, groupTableStrategy);
+
+			sql = execute(sql, TABLE_INSTANCE_GRAPH, groupProjectTableStrategy);
+			sql = execute(sql, TABLE_INSTANCE_OBJEC, groupProjectTableStrategy);
+			sql = execute(sql, TABLE_INSTANCE_INSTANCE, groupProjectTableStrategy);
+		}
+		log.info("sql result: {}", sql);
+		return sql;
+	}
+
+	private String execute(String sql, String logicName, TableStrategy strategy) {
+		if (sql.indexOf(" " + logicName + " ") > -1) {
+			String actualName = strategy.strategy(logicName);
+			sql = sql.replaceAll(" " + logicName + " ", " " + actualName + " ");
+			log.info("sql actual table: {}", actualName);
+		}
+		return sql;
+	}
+
+	public interface TableStrategy {
+		String strategy(String logicName);
+	}
+
+	private TableStrategy groupTableStrategy = logicName -> {
+		String groupCode = JpaSqlExecuteContext.getGroupCode();
+		if (groupCode == null || "0".equals(groupCode)) {
+			return logicName;
+		}
+		return logicName + "_" + groupCode.toLowerCase().trim();
+	};
+
+	private TableStrategy groupProjectTableStrategy = logicName -> {
+		String groupCode = JpaSqlExecuteContext.getGroupCode();
+		String projectId = JpaSqlExecuteContext.getProjectId();
+		if (groupCode == null || projectId == null || "0".equals(groupCode) || "0".equals(projectId)) {
+			return logicName;
+		}
+		return logicName + "_" + groupCode.toLowerCase().trim() + "_" + projectId.toLowerCase().trim();
+	};
+
+}

+ 18 - 0
dmp-rwd/src/main/java/com/persagy/dmp/rwd/sharding/JsonDialect.java

@@ -0,0 +1,18 @@
+package com.persagy.dmp.rwd.sharding;
+
+import org.hibernate.dialect.MySQL57Dialect;
+import org.hibernate.dialect.function.StandardSQLFunction;
+import org.hibernate.type.StandardBasicTypes;
+
+/**
+ * @author: yaoll
+ * @date: 2020-12-20
+ * @verison: 1.0
+ */
+public class JsonDialect extends MySQL57Dialect {
+
+	public JsonDialect() {
+		this.registerFunction("json_extract", new StandardSQLFunction("json_extract", StandardBasicTypes.STRING));
+		this.registerFunction("json_unquote", new StandardSQLFunction("json_unquote", StandardBasicTypes.STRING));
+	}
+}

+ 8 - 80
dmp-rwd/src/main/resources/application.yml

@@ -1,81 +1,9 @@
 spring:
-  shardingsphere:
-    sharding:
-      tables:
-        rwd_def_class:
-          actualDataNodes: ${spring.shardingsphere.sharding.default-data-source-name}.rwd_def_class
-          key-generator-column-name: id
-          tableStrategy:
-            standard:
-              sharding-column: group_code
-              precise-algorithm-class-name: com.persagy.dmp.rwd.sharding.GroupShardingAlgorithm
-        rwd_def_funcid:
-          actualDataNodes: ${spring.shardingsphere.sharding.default-data-source-name}.rwd_def_funcid
-          key-generator-column-name: id
-          tableStrategy:
-            standard:
-              sharding-column: group_code
-              precise-algorithm-class-name: com.persagy.dmp.rwd.sharding.GroupShardingAlgorithm
-        rwd_schema:
-          actualDataNodes: ${spring.shardingsphere.sharding.default-data-source-name}.rwd_schema
-          key-generator-column-name: id
-          tableStrategy:
-            standard:
-              sharding-column: group_code
-              precise-algorithm-class-name: com.persagy.dmp.rwd.sharding.GroupShardingAlgorithm
-        rwd_schema_class:
-          actualDataNodes: ${spring.shardingsphere.sharding.default-data-source-name}.rwd_shema_class
-          key-generator-column-name: id
-          tableStrategy:
-            standard:
-              sharding-column: group_code
-              precise-algorithm-class-name: com.persagy.dmp.rwd.sharding.GroupShardingAlgorithm
-        rwd_schema_funcid:
-          actualDataNodes: ${spring.shardingsphere.sharding.default-data-source-name}.rwd_schema_funcid
-          key-generator-column-name: id
-          tableStrategy:
-            standard:
-              sharding-column: group_code
-              precise-algorithm-class-name: com.persagy.dmp.rwd.sharding.GroupShardingAlgorithm
-        rwd_schema_project:
-          actualDataNodes: ${spring.shardingsphere.sharding.default-data-source-name}.rwd_schema_project
-          key-generator-column-name: id
-          tableStrategy:
-            standard:
-              sharding-column: group_code
-              precise-algorithm-class-name: com.persagy.dmp.rwd.sharding.GroupShardingAlgorithm
-        rwd_app_class:
-          actualDataNodes: ${spring.shardingsphere.sharding.default-data-source-name}.rwd_app_class
-          key-generator-column-name: id
-          tableStrategy:
-            standard:
-              sharding-column: group_code
-              precise-algorithm-class-name: com.persagy.dmp.rwd.sharding.GroupShardingAlgorithm
-        rwd_app_funcid:
-          actualDataNodes: ${spring.shardingsphere.sharding.default-data-source-name}.rwd_app_funcid
-          key-generator-column-name: id
-          tableStrategy:
-            standard:
-              sharding-column: group_code
-              precise-algorithm-class-name: com.persagy.dmp.rwd.sharding.GroupShardingAlgorithm
-        rwd_object:
-          actualDataNodes: ${spring.shardingsphere.sharding.default-data-source-name}.rwd_object
-          key-generator-column-name: id
-          tableStrategy:
-            complex:
-              sharding-columns: group_code,project_id
-              algorithm-class-name: com.persagy.dmp.rwd.sharding.GroupProjectShardingAlgorithm
-        rwd_graph:
-          actualDataNodes: ${spring.shardingsphere.sharding.default-data-source-name}.rwd_graph
-          key-generator-column-name: id
-          tableStrategy:
-            complex:
-              sharding-columns: group_code,project_id
-              algorithm-class-name: com.persagy.dmp.rwd.sharding.GroupProjectShardingAlgorithm
-        rwd_relation:
-          actualDataNodes: ${spring.shardingsphere.sharding.default-data-source-name}.rwd_relation
-          key-generator-column-name: id
-          tableStrategy:
-            complex:
-              sharding-columns: group_code,project_id
-              algorithm-class-name: com.persagy.dmp.rwd.sharding.GroupProjectShardingAlgorithm
+  jpa:
+    properties:
+      hibernate:
+        dialect: com.persagy.dmp.rwd.sharding.JsonDialect
+        session_factory:
+          statement_inspector: com.persagy.dmp.rwd.sharding.JpaSqlStatementInspector
+    hibernate:
+      ddl-auto: none

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

@@ -0,0 +1,7 @@
+spring:
+  application:
+    name: dmp-rwd-yll
+  cloud:
+    config:
+      profile: dev2
+      uri: http://192.168.64.18:9932