Browse Source

rwd: 导数工具

yaoll 4 years ago
parent
commit
bfcd4d5084
22 changed files with 1408 additions and 36 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

+ 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-20201219";
+
+	@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-2020121921";
+
+
+	@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_infos3.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;
+	}
+
+}
+