yaoll hace 4 años
padre
commit
0129bdbfd1
Se han modificado 100 ficheros con 6290 adiciones y 2 borrados
  1. 5 0
      .gitignore
  2. 9 2
      README.md
  3. 53 0
      dmp-common/pom.xml
  4. 17 0
      dmp-common/src/main/java/com/persagy/common/criteria/CriteriaExpressionParser.java
  5. 454 0
      dmp-common/src/main/java/com/persagy/common/criteria/CriteriaUtils.java
  6. 509 0
      dmp-common/src/main/java/com/persagy/common/criteria/JacksonCriteria.java
  7. 115 0
      dmp-common/src/main/java/com/persagy/common/criteria/JpaUtils.java
  8. 325 0
      dmp-common/src/main/java/com/persagy/common/date/DateUtils.java
  9. 222 0
      dmp-common/src/main/java/com/persagy/common/json/JacksonMapper.java
  10. 64 0
      dmp-common/src/main/java/com/persagy/common/web/BaseResponse.java
  11. 28 0
      dmp-common/src/main/java/com/persagy/common/web/ListResponse.java
  12. 42 0
      dmp-common/src/main/java/com/persagy/common/web/MapResponse.java
  13. 27 0
      dmp-common/src/main/java/com/persagy/common/web/PagedResponse.java
  14. 80 0
      dmp-common/src/main/java/com/persagy/common/web/ServletUtils.java
  15. 28 0
      dmp-common/src/main/java/com/persagy/dmp/common/SpringUtils.java
  16. 287 0
      dmp-common/src/main/java/com/persagy/dmp/common/http/HttpUtils.java
  17. 81 0
      dmp-common/src/main/java/com/persagy/dmp/config/DmpParameterStorage.java
  18. 76 0
      dmp-dic/doc/config.sql
  19. 116 0
      dmp-dic/pom.xml
  20. 50 0
      dmp-dic/src/main/java/com/persagy/dmp/dic/DicApp.java
  21. 116 0
      dmp-dic/src/main/java/com/persagy/dmp/dic/config/RequestLogAspect.java
  22. 46 0
      dmp-dic/src/main/java/com/persagy/dmp/dic/config/WebConfig.java
  23. 48 0
      dmp-dic/src/main/java/com/persagy/dmp/dic/controller/DtDataController.java
  24. 40 0
      dmp-dic/src/main/java/com/persagy/dmp/dic/controller/DtDataMapController.java
  25. 39 0
      dmp-dic/src/main/java/com/persagy/dmp/dic/controller/DtTypeController.java
  26. 39 0
      dmp-dic/src/main/java/com/persagy/dmp/dic/controller/KlDataController.java
  27. 39 0
      dmp-dic/src/main/java/com/persagy/dmp/dic/controller/KlTypeController.java
  28. 70 0
      dmp-dic/src/main/java/com/persagy/dmp/dic/entity/DtData.java
  29. 73 0
      dmp-dic/src/main/java/com/persagy/dmp/dic/entity/DtDataMap.java
  30. 64 0
      dmp-dic/src/main/java/com/persagy/dmp/dic/entity/DtType.java
  31. 70 0
      dmp-dic/src/main/java/com/persagy/dmp/dic/entity/KlData.java
  32. 61 0
      dmp-dic/src/main/java/com/persagy/dmp/dic/entity/KlType.java
  33. 26 0
      dmp-dic/src/main/java/com/persagy/dmp/dic/model/DtDataMapModel.java
  34. 25 0
      dmp-dic/src/main/java/com/persagy/dmp/dic/model/DtDataModel.java
  35. 23 0
      dmp-dic/src/main/java/com/persagy/dmp/dic/model/DtTypeModel.java
  36. 25 0
      dmp-dic/src/main/java/com/persagy/dmp/dic/model/KlDataModel.java
  37. 22 0
      dmp-dic/src/main/java/com/persagy/dmp/dic/model/KlTypeModel.java
  38. 9 0
      dmp-dic/src/main/java/com/persagy/dmp/dic/repository/DtDataMapRepository.java
  39. 9 0
      dmp-dic/src/main/java/com/persagy/dmp/dic/repository/DtDataRepository.java
  40. 9 0
      dmp-dic/src/main/java/com/persagy/dmp/dic/repository/DtTypeRepository.java
  41. 9 0
      dmp-dic/src/main/java/com/persagy/dmp/dic/repository/KlDataRepository.java
  42. 9 0
      dmp-dic/src/main/java/com/persagy/dmp/dic/repository/KlTypeRepository.java
  43. 64 0
      dmp-dic/src/main/java/com/persagy/dmp/dic/service/DicBaseService.java
  44. 192 0
      dmp-dic/src/main/java/com/persagy/dmp/dic/service/DtDataMapService.java
  45. 245 0
      dmp-dic/src/main/java/com/persagy/dmp/dic/service/DtDataService.java
  46. 184 0
      dmp-dic/src/main/java/com/persagy/dmp/dic/service/DtTypeService.java
  47. 81 0
      dmp-dic/src/main/java/com/persagy/dmp/dic/service/KlDataService.java
  48. 81 0
      dmp-dic/src/main/java/com/persagy/dmp/dic/service/KlTypeService.java
  49. 7 0
      dmp-dic/src/main/resources/bootstrap.yml
  50. 55 0
      dmp-dic/src/main/resources/logback-spring.xml
  51. 21 0
      dmp-model/pom.xml
  52. 25 0
      dmp-model/src/main/java/com/persagy/dmp/rwd/enums/FuncidCategory.java
  53. 19 0
      dmp-model/src/main/java/com/persagy/dmp/rwd/enums/FuncidDataType.java
  54. 12 0
      dmp-model/src/main/java/com/persagy/dmp/rwd/enums/ObjType.java
  55. 16 0
      dmp-model/src/main/java/com/persagy/dmp/rwd/model/AppClassModel.java
  56. 17 0
      dmp-model/src/main/java/com/persagy/dmp/rwd/model/AppFuncidModel.java
  57. 25 0
      dmp-model/src/main/java/com/persagy/dmp/rwd/model/ClassDefModel.java
  58. 49 0
      dmp-model/src/main/java/com/persagy/dmp/rwd/model/DmpMessage.java
  59. 39 0
      dmp-model/src/main/java/com/persagy/dmp/rwd/model/FuncidDefModel.java
  60. 18 0
      dmp-model/src/main/java/com/persagy/dmp/rwd/model/GraphDefModel.java
  61. 16 0
      dmp-model/src/main/java/com/persagy/dmp/rwd/model/GraphInstanceModel.java
  62. 32 0
      dmp-model/src/main/java/com/persagy/dmp/rwd/model/ObjectInstanceModel.java
  63. 18 0
      dmp-model/src/main/java/com/persagy/dmp/rwd/model/RelDefModel.java
  64. 27 0
      dmp-model/src/main/java/com/persagy/dmp/rwd/model/RelationInstanceModel.java
  65. 15 0
      dmp-model/src/main/java/com/persagy/dmp/rwd/model/SchemaClassModel.java
  66. 16 0
      dmp-model/src/main/java/com/persagy/dmp/rwd/model/SchemaFuncidModel.java
  67. 16 0
      dmp-model/src/main/java/com/persagy/dmp/rwd/model/SchemaModel.java
  68. 15 0
      dmp-model/src/main/java/com/persagy/dmp/rwd/model/SchemaProjectModel.java
  69. 80 0
      dmp-org/doc/config.sql
  70. 125 0
      dmp-org/pom.xml
  71. 47 0
      dmp-org/src/main/java/com/persagy/dmp/org/OrgApp.java
  72. 15 0
      dmp-org/src/main/java/com/persagy/dmp/org/common/OrgUtils.java
  73. 46 0
      dmp-org/src/main/java/com/persagy/dmp/org/config/DmpMessageAspect.java
  74. 54 0
      dmp-org/src/main/java/com/persagy/dmp/org/config/GlobalExceptionHandler.java
  75. 116 0
      dmp-org/src/main/java/com/persagy/dmp/org/config/RequestLogAspect.java
  76. 46 0
      dmp-org/src/main/java/com/persagy/dmp/org/config/WebConfig.java
  77. 19 0
      dmp-org/src/main/java/com/persagy/dmp/org/constant/OrgConstants.java
  78. 15 0
      dmp-org/src/main/java/com/persagy/dmp/org/constant/OrgQueryConstant.java
  79. 18 0
      dmp-org/src/main/java/com/persagy/dmp/org/constant/OrgWithColumnConstant.java
  80. 42 0
      dmp-org/src/main/java/com/persagy/dmp/org/controller/ApplicationController.java
  81. 42 0
      dmp-org/src/main/java/com/persagy/dmp/org/controller/CompanyController.java
  82. 39 0
      dmp-org/src/main/java/com/persagy/dmp/org/controller/CompanyProjectRelController.java
  83. 42 0
      dmp-org/src/main/java/com/persagy/dmp/org/controller/DeptClassifyController.java
  84. 42 0
      dmp-org/src/main/java/com/persagy/dmp/org/controller/DeptController.java
  85. 42 0
      dmp-org/src/main/java/com/persagy/dmp/org/controller/FunctionController.java
  86. 42 0
      dmp-org/src/main/java/com/persagy/dmp/org/controller/GroupAppRelController.java
  87. 42 0
      dmp-org/src/main/java/com/persagy/dmp/org/controller/GroupController.java
  88. 42 0
      dmp-org/src/main/java/com/persagy/dmp/org/controller/GroupFunctionRelController.java
  89. 22 0
      dmp-org/src/main/java/com/persagy/dmp/org/controller/InitController.java
  90. 42 0
      dmp-org/src/main/java/com/persagy/dmp/org/controller/JobClassifyController.java
  91. 42 0
      dmp-org/src/main/java/com/persagy/dmp/org/controller/JobClassifyRelController.java
  92. 47 0
      dmp-org/src/main/java/com/persagy/dmp/org/controller/JobController.java
  93. 42 0
      dmp-org/src/main/java/com/persagy/dmp/org/controller/ProjectController.java
  94. 42 0
      dmp-org/src/main/java/com/persagy/dmp/org/controller/UserController.java
  95. 74 0
      dmp-org/src/main/java/com/persagy/dmp/org/entity/Application.java
  96. 73 0
      dmp-org/src/main/java/com/persagy/dmp/org/entity/Company.java
  97. 43 0
      dmp-org/src/main/java/com/persagy/dmp/org/entity/CompanyProjectRel.java
  98. 76 0
      dmp-org/src/main/java/com/persagy/dmp/org/entity/Dept.java
  99. 67 0
      dmp-org/src/main/java/com/persagy/dmp/org/entity/DeptClassify.java
  100. 0 0
      dmp-org/src/main/java/com/persagy/dmp/org/entity/Function.java

+ 5 - 0
.gitignore

@@ -1,5 +1,7 @@
 # ---> Java
 *.class
+target/
+*.log
 
 # Mobile Tools for Java (J2ME)
 .mtj.tmp/
@@ -12,3 +14,6 @@
 # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
 hs_err_pid*
 
+*.iml
+.idea
+.DS_Store

+ 9 - 2
README.md

@@ -1,3 +1,10 @@
-# dmp
+# persagy-dmp
+
+数据中台相关代码仓库
+
+|模块|功能|
+|---|---|
+|dic|标准化数据(数据字典),知识库|
+|org|集团\项目\组织\部门\人员\岗位\应用\功能|
+|rwd|原数据字典与物理世界|
 
-数据中台仓库

+ 53 - 0
dmp-common/pom.xml

@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>com.persagy</groupId>
+        <artifactId>dmp</artifactId>
+        <version>4.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>com.persagy</groupId>
+    <artifactId>dmp-common</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>dmp-model</artifactId>
+            <version>4.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-collections4</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.querydsl</groupId>
+            <artifactId>querydsl-apt</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.querydsl</groupId>
+            <artifactId>querydsl-jpa</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-jpa</artifactId>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+
+</project>

+ 17 - 0
dmp-common/src/main/java/com/persagy/common/criteria/CriteriaExpressionParser.java

@@ -0,0 +1,17 @@
+package com.persagy.common.criteria;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.querydsl.core.types.dsl.BooleanExpression;
+
+import java.util.List;
+
+/**
+ * @author: yaoll
+ * @date: 2020-09-04
+ * @verison: 1.0
+ */
+public interface CriteriaExpressionParser {
+
+	List<BooleanExpression> parse(ObjectNode criteria);
+
+}

+ 454 - 0
dmp-common/src/main/java/com/persagy/common/criteria/CriteriaUtils.java

@@ -0,0 +1,454 @@
+package com.persagy.common.criteria;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.*;
+import com.persagy.common.date.DateUtils;
+import com.persagy.common.web.PagedResponse;
+import com.querydsl.core.types.OrderSpecifier;
+import com.querydsl.core.types.dsl.*;
+import com.querydsl.jpa.impl.JPAQuery;
+import com.querydsl.jpa.impl.JPAQueryFactory;
+
+import java.lang.reflect.Field;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * @author: yaoll
+ * @date: 2020-09-04
+ * @verison: 1.0
+ */
+public class CriteriaUtils {
+
+	private static final Integer DEFAULT_SIZE = 50;
+
+	private JPAQueryFactory queryFactory;
+
+	public CriteriaUtils(JPAQueryFactory queryFactory) {
+		this.queryFactory = queryFactory;
+	}
+
+	private <T, Q extends EntityPathBase<T>> List<BooleanExpression> parseNode(Q q, ObjectNode object) {
+		List<BooleanExpression> exps = new LinkedList<>();
+		if (object == null || object.isEmpty()) {
+			return exps;
+		}
+
+		Field[] fields = q.getClass().getFields();
+		for (Field field : fields) {
+			Class<?> type = field.getType();
+			if (type != NumberPath.class && type != DateTimePath.class && type != StringPath.class) {
+				continue;
+			}
+			String name = field.getName();
+			if (!object.has(name)) {
+				continue;
+			}
+			JsonNode jsonNode = object.get(name);
+			try {
+				if (type == NumberPath.class) {
+					NumberPath path = (NumberPath) field.get(q);
+					exps.addAll(parse(path, jsonNode));
+				}
+				if (type == DateTimePath.class) {
+					DateTimePath path = (DateTimePath) field.get(q);
+					exps.addAll(parse(path, jsonNode));
+				}
+				if (type == StringPath.class) {
+					StringPath path = (StringPath) field.get(q);
+					exps.addAll(parse(path, jsonNode));
+				}
+				// Boolean Enum
+			} catch (IllegalAccessException e) {
+			}
+		}
+		return exps;
+	}
+
+	private <T, Q extends EntityPathBase<T>> List<BooleanExpression> parseNode(Q q, CriteriaExpressionParser parser, ObjectNode objectNode) {
+		List<BooleanExpression> expressions = new LinkedList<>();
+		if (objectNode == null || objectNode.isEmpty()) {
+			return expressions;
+		}
+		List<BooleanExpression> exps = parseNode(q, objectNode);
+		if (exps != null && exps.size() > 0) {
+			expressions.addAll(exps);
+		}
+		if (parser != null) {
+			List<BooleanExpression> parseExps = parser.parse(objectNode);
+			if (parseExps != null && parseExps.size() > 0) {
+				expressions.addAll(parseExps);
+			}
+		}
+		return expressions;
+	}
+
+	public <T, Q extends EntityPathBase<T>> PagedResponse<T> query(Q q, CriteriaExpressionParser parser, JacksonCriteria request) {
+		PagedResponse<T> resp = new PagedResponse<>();
+
+		// 解析查询条件
+		ObjectNode criteria = request.getCriteria();
+		List<BooleanExpression> expressions = new LinkedList<>();
+
+		// 处理or
+		JsonNode or = criteria.get("$or");
+		if (or != null && or.getNodeType() == JsonNodeType.ARRAY) {
+			ArrayNode arr = (ArrayNode) or;
+
+			BooleanExpression orExp = null;
+			for (JsonNode jsonNode : arr) {
+				if (jsonNode.getNodeType() != JsonNodeType.OBJECT) {
+					continue;
+				}
+				List<BooleanExpression> subExpressions = parseNode(q, parser, (ObjectNode) jsonNode);
+				if (orExp == null) {
+					orExp = and(subExpressions);
+				} else {
+					orExp = orExp.or(and(subExpressions));
+				}
+			}
+			if (orExp != null) {
+				expressions.add(orExp);
+			}
+		}
+		expressions.addAll(parseNode(q, parser, criteria));
+		JPAQuery<T> query = queryFactory.selectFrom(q).where(expressions.toArray(new BooleanExpression[0]));
+
+		// 统计总数
+		if (!request.isWithoutCount()) {
+			long count = query.fetchCount();
+			resp.setCount(count);
+		}
+
+		if (request.isOnlyCount()) {
+			return resp;
+		}
+
+		// 排序
+		OrderSpecifier[] specifiers = parseOrders(q, request);
+		if (specifiers != null) {
+			query = query.orderBy(specifiers);
+		}
+
+		// 分页
+		Integer page = request.getPage();
+		Integer size = request.getSize();
+		if (page != null) {
+			if (size == null) {
+				size = DEFAULT_SIZE; // 默认每页50
+			}
+			int offset = (page - 1) * size;
+			if (offset < 0) {
+				offset = 0;
+			}
+			query = query.offset(offset).limit(size);
+		}
+		List<T> data = query.fetch();
+		resp.setData(data);
+		return resp;
+	}
+
+	private <T, Q extends EntityPathBase<T>> OrderSpecifier[] parseOrders(Q q, JacksonCriteria criteria) {
+		List<JacksonCriteria.Order> orders = criteria.getOrders();
+		if (orders == null || orders.size() == 0) {
+			return null;
+		}
+		List<OrderSpecifier> specifiers = new LinkedList<>();
+		Field[] fields = q.getClass().getFields();
+		for (JacksonCriteria.Order order : orders) {
+			String column = order.getColumn();
+			try {
+				for (Field field : fields) {
+					String name = field.getName();
+					if (!column.equals(name)) {
+						continue;
+					}
+					Class<?> type = field.getType();
+					if (type == NumberPath.class) {
+						NumberPath o = (NumberPath) field.get(q);
+						specifiers.add(order.isAsc() ? o.asc() : o.desc());
+					}
+					if (type == DateTimePath.class) {
+						DateTimePath o = (DateTimePath) field.get(q);
+						specifiers.add(order.isAsc() ? o.asc() : o.desc());
+					}
+					if (type == StringPath.class) {
+						StringPath o = (StringPath) field.get(q);
+						specifiers.add(order.isAsc() ? o.asc() : o.desc());
+					}
+				}
+			} catch (IllegalAccessException e) {
+
+			}
+		}
+
+		if (specifiers.size() == 0) {
+			return null;
+		} else {
+			return specifiers.toArray(new OrderSpecifier[0]);
+		}
+	}
+
+	private BooleanExpression and(List<BooleanExpression> exps) {
+		if (exps == null || exps.size() == 0) {
+			return null;
+		}
+		BooleanExpression result = exps.get(0);
+		for (int i = 1; i < exps.size(); i++) {
+			result = result.and(exps.get(i));
+		}
+		return result;
+	}
+
+
+	public static List<BooleanExpression> parse(NumberExpression path, JsonNode node) {
+		return parse(path, node, null);
+	}
+
+	public static List<BooleanExpression> parse(NumberExpression path, JsonNode node, Integer defaultValue) {
+		List<BooleanExpression> result = new LinkedList<>();
+		if (node == null) {
+			if (defaultValue != null) {
+				result.add(path.eq(defaultValue));
+			}
+			return result;
+		}
+		JsonNodeType nodeType = node.getNodeType();
+		if (nodeType == JsonNodeType.STRING) {
+			result.add(path.eq(parseNumber(node)));
+		} else if (nodeType == JsonNodeType.NUMBER) {
+			result.add(path.eq(parseNumber(node)));
+		} else if (nodeType == JsonNodeType.ARRAY) {
+			ArrayNode arr = (ArrayNode) node;
+			result.add(path.in(parseNumberArr(arr)));
+		} else if (nodeType == JsonNodeType.OBJECT) {
+			if (node.has("$gt")) {
+				result.add(path.gt(parseNumber(node.get("$gt"))));
+			}
+			if (node.has("$gte")) {
+				result.add(path.goe(parseNumber(node.get("$gte"))));
+			}
+			if (node.has("$lt")) {
+				result.add(path.lt(parseNumber(node.get("$lt"))));
+			}
+			if (node.has("$lte")) {
+				result.add(path.loe(parseNumber(node.get("$lte"))));
+			}
+			if (node.has("$in")) {
+				ArrayNode arr = (ArrayNode) node.get("$in");
+				result.add(path.in(parseNumberArr(arr)));
+			}
+			if (node.has("$ne")) {
+				result.add(path.ne(parseNumber(node.get("$ne"))));
+			}
+			if (node.has("$null")) {
+				Boolean isNull = Boolean.valueOf(node.get("$null").asText());
+				if (isNull) {
+					result.add(path.isNull());
+				} else {
+					result.add(path.isNotNull());
+				}
+			}
+		}
+		return result;
+	}
+
+	private static Number parseNumber(JsonNode node) {
+		if (node instanceof IntNode) {
+			return node.asInt();
+		} else if (node instanceof LongNode) {
+			return node.asLong();
+		} else if (node instanceof DoubleNode) {
+			return node.doubleValue();
+		} else if (node instanceof TextNode) {
+			String n = node.asText();
+			if (n.indexOf(".") > -1) {
+				return node.asDouble();
+			} else {
+				return node.asLong();
+			}
+		}
+		return 0;
+	}
+
+	public static List<Number> parseNumberArr(ArrayNode arr) {
+		List<Number> values = new ArrayList<>(arr.size());
+		Iterator<JsonNode> elements = arr.elements();
+		while (elements.hasNext()) {
+			values.add(parseNumber(elements.next()));
+		}
+		return values;
+	}
+
+	public static List<BooleanExpression> parse(StringExpression path, JsonNode node) {
+		return parse(path, node, null);
+	}
+
+	public static List<BooleanExpression> parse(StringExpression path, JsonNode node, String defaultValue) {
+		List<BooleanExpression> result = new LinkedList<>();
+		if (node == null) {
+			if (defaultValue != null) {
+				result.add(path.eq(defaultValue));
+			}
+			return result;
+		}
+		JsonNodeType nodeType = node.getNodeType();
+		if (nodeType == JsonNodeType.STRING) {
+			result.add(path.eq(node.asText()));
+		} else if (nodeType == JsonNodeType.ARRAY) {
+			ArrayNode arr = (ArrayNode) node;
+			result.add(path.in(parseStringArr(arr)));
+		} else if (nodeType == JsonNodeType.OBJECT) {
+			if (node.has("$gt")) {
+				result.add(path.gt(node.get("$gt").asText()));
+			}
+			if (node.has("$gte")) {
+				result.add(path.goe(node.get("$gte").asText()));
+			}
+			if (node.has("$lt")) {
+				result.add(path.lt(node.get("$lt").asText()));
+			}
+			if (node.has("$lte")) {
+				result.add(path.loe(node.get("$lte").asText()));
+			}
+			if (node.has("$in")) {
+				ArrayNode arr = (ArrayNode) node.get("$in");
+				result.add(path.in(parseStringArr(arr)));
+			}
+			if (node.has("$ne")) {
+				result.add(path.ne(node.get("$ne").asText()));
+			}
+			if (node.has("$like")) {
+				result.add(path.like(node.get("$like").asText()));
+			}
+			if (node.has("$notLike")) {
+				result.add(path.notLike(node.get("$notLike").asText()));
+			}
+			if (node.has("$null")) {
+				Boolean isNull = Boolean.valueOf(node.get("$null").asText());
+				if (isNull) {
+					result.add(path.isNull());
+				} else {
+					result.add(path.isNotNull());
+				}
+			}
+		}
+		return result;
+	}
+
+	private static List<String> parseStringArr(ArrayNode arr) {
+		List<String> values = new ArrayList<>(arr.size());
+		Iterator<JsonNode> elements = arr.elements();
+		while (elements.hasNext()) {
+			values.add(elements.next().asText());
+		}
+		return values;
+	}
+
+	public static List<BooleanExpression> parse(DateTimeExpression path, JsonNode node) {
+		return parse(path, node, (Date) null);
+	}
+
+	/**
+	 * @param path
+	 * @param node
+	 * @param time yyyyMMddHHmmss
+	 * @return
+	 */
+	public static List<BooleanExpression> parse(DateTimeExpression path, JsonNode node, String time) {
+		if (time != null) {
+			return parse(path, node, DateUtils.parse(time));
+		} else {
+			return parse(path, node, (Date) null);
+		}
+	}
+
+	public static List<BooleanExpression> parse(DateTimeExpression path, JsonNode node, Date time) {
+		List<BooleanExpression> result = new LinkedList<>();
+		if (node == null) {
+			if (time != null) {
+				result.add(path.eq(time));
+			}
+			return result;
+		}
+		SimpleDateFormat format = new SimpleDateFormat(DateUtils.PATTERN_yyyyMMddHHmmss);
+		JsonNodeType nodeType = node.getNodeType();
+		if (nodeType == JsonNodeType.STRING) {
+			try {
+				result.add(path.eq(format.parse(node.asText())));
+			} catch (ParseException e) {
+				e.printStackTrace();
+				throw new RuntimeException(e);
+			}
+		} else if (nodeType == JsonNodeType.OBJECT) {
+			if (node.has("$gt")) {
+				result.add(path.gt(parse(format, node, "$gt")));
+			}
+			if (node.has("$gte")) {
+				result.add(path.goe(parse(format, node, "$gte")));
+			}
+			if (node.has("$lt")) {
+				result.add(path.lt(parse(format, node, "$lt")));
+			}
+			if (node.has("$lte")) {
+				result.add(path.loe(parse(format, node, "$lte")));
+			}
+			if (node.has("$null")) {
+				Boolean isNull = Boolean.valueOf(node.get("$null").asText());
+				if (isNull) {
+					result.add(path.isNull());
+				} else {
+					result.add(path.isNotNull());
+				}
+			}
+		}
+		return result;
+	}
+
+	private static Date parse(SimpleDateFormat format, JsonNode node, String name) {
+		try {
+			return format.parse(node.get(name).asText());
+		} catch (ParseException e) {
+			e.printStackTrace();
+			throw new RuntimeException(e);
+		}
+	}
+
+	public static <T extends Enum> List<BooleanExpression> parse(EnumExpression path, JsonNode node, Class<T> clazz) {
+		return parse(path, node, clazz, null);
+	}
+
+	public static <T extends Enum> List<BooleanExpression> parse(EnumExpression path, JsonNode node, Class<T> clazz, T defaultValue) {
+		List<BooleanExpression> result = new LinkedList<>();
+		if (node == null) {
+			if (defaultValue != null) {
+				result.add(path.eq(defaultValue));
+			}
+			return result;
+		}
+		JsonNodeType nodeType = node.getNodeType();
+		if (nodeType == JsonNodeType.STRING) {
+			result.add(path.eq(T.valueOf(clazz, node.asText())));
+		} else if (nodeType == JsonNodeType.ARRAY) {
+			ArrayNode arr = (ArrayNode) node;
+			result.add(path.in(parseEnumArr(arr, clazz)));
+		} else if (nodeType == JsonNodeType.OBJECT) {
+			ArrayNode arr = (ArrayNode) node.get("$in");
+			if (arr != null) {
+				result.add(path.in(parseEnumArr(arr, clazz)));
+			}
+		}
+		return result;
+	}
+
+	private static <T extends Enum> List parseEnumArr(ArrayNode arr, Class<T> clazz) {
+		List<Enum> values = new ArrayList<>(arr.size());
+		Iterator<JsonNode> elements = arr.elements();
+		while (elements.hasNext()) {
+			Enum anEnum = T.valueOf(clazz, elements.next().asText());
+			values.add(anEnum);
+		}
+		return values;
+	}
+}

+ 509 - 0
dmp-common/src/main/java/com/persagy/common/criteria/JacksonCriteria.java

@@ -0,0 +1,509 @@
+package com.persagy.common.criteria;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.common.date.DateUtils;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.*;
+
+/**
+ * @author: yaoll
+ * @date: 2020-09-04
+ * @verison: 1.0
+ *
+ * <pre>
+ * {
+ *     "page": 1,
+ *     "size": 10,
+ *     "onlyCount": false,
+ *     "criteria": {
+ *         "name": "zhangsan",
+ *         "name": [ "zhangsan", "lisi" ],
+ *         "age": {
+ *             "$gt": 18,
+ *             "$lt": 35
+ *         },
+ *         "gender": {
+ *             "$null": false
+ *         }
+ *     },
+ *     "orders": [
+ *            {
+ *     		 	"column": "name",
+ *     		 	"asc": false
+ *            }
+ *     ],
+ *     "withColumns": [
+ *     		"name", "age"
+ *     ]
+ * }
+ * </pre>
+ */
+public class JacksonCriteria {
+
+	@Getter
+	@Setter
+	private Integer page;
+
+	@Getter
+	@Setter
+	private Integer size;
+
+	/**
+	 * 是否只统计数量
+	 */
+	@Getter
+	@Setter
+	private boolean onlyCount = false;
+
+	@Getter
+	@Setter
+	private boolean withoutCount = false;
+
+	@Getter
+	@Setter
+	private ObjectNode criteria;
+
+	@Getter
+	@Setter
+	private List<Order> orders;
+
+	@Getter
+	@Setter
+	private Set<String> withColumns;
+
+	public boolean withColumn(String column) {
+		return withColumns != null && withColumns.contains(column);
+	}
+
+	public JacksonCriteria addWithColumn(String column) {
+		if (withColumns == null) {
+			withColumns = new HashSet<>();
+		}
+		withColumns.add(column);
+		return this;
+	}
+
+	public JacksonCriteria addOrder(String column) {
+		return addOrder(column, true);
+	}
+
+	public JacksonCriteria addOrder(String column, boolean asc) {
+		if (orders == null) {
+			orders = new LinkedList<>();
+		}
+		orders.add(new Order(column, asc));
+		return this;
+	}
+
+	public JacksonCriteria setLimit(int page, int size) {
+		this.page = page;
+		this.size = size;
+		return this;
+	}
+
+	private JacksonCriteria() {
+		super();
+		this.criteria = JsonNodeFactory.instance.objectNode();
+	}
+
+	public static JacksonCriteria newInstance() {
+		return new JacksonCriteria();
+	}
+
+	public String getString(String nodeName) {
+		return getString(nodeName, null);
+	}
+
+	public String getString(String nodeName, String defaultValue) {
+		if (criteria.has(nodeName)) {
+			JsonNode node = criteria.get(nodeName);
+			return node.asText();
+		}
+		return defaultValue;
+	}
+
+	public Integer getInteger(String nodeName) {
+		return getInteger(nodeName, null);
+	}
+
+	public Integer getInteger(String nodeName, Integer defaultValue) {
+		if (criteria.has(nodeName)) {
+			JsonNode jsonNode = criteria.get(nodeName);
+			return Integer.valueOf(jsonNode.asText());
+		}
+		return defaultValue;
+	}
+
+	public Double getDouble(String nodeName) {
+		return getDouble(nodeName, null);
+	}
+
+	public Double getDouble(String nodeName, Double defaultValue) {
+		if (criteria.has(nodeName)) {
+			JsonNode jsonNode = criteria.get(nodeName);
+			return Double.valueOf(jsonNode.asText());
+		}
+		return defaultValue;
+	}
+
+	public Boolean getBoolean(String nodeName) {
+		return getBoolean(nodeName, null);
+	}
+
+	public Boolean getBoolean(String nodeName, Boolean defaultValue) {
+		if (criteria.has(nodeName)) {
+			JsonNode jsonNode = criteria.get(nodeName);
+			return Boolean.valueOf(jsonNode.asText());
+		}
+		return defaultValue;
+	}
+
+	/**
+	 * 添加查询key,重复添加时后添加的会覆盖前面添加的
+	 *
+	 * @param key
+	 * @param value
+	 * @return
+	 */
+	public void add(String key, String value) {
+		criteria.put(key, value);
+	}
+
+	public void add(String key, byte value) {
+		criteria.put(key, value);
+	}
+
+	public void add(String key, short value) {
+		criteria.put(key, value);
+	}
+
+	public void add(String key, int value) {
+		criteria.put(key, value);
+	}
+
+	public void add(String key, long value) {
+		criteria.put(key, value);
+	}
+
+	public void add(String key, float value) {
+		criteria.put(key, value);
+	}
+
+	public void add(String key, double value) {
+		criteria.put(key, value);
+	}
+
+	public void add(String key, BigDecimal value) {
+		criteria.put(key, value);
+	}
+
+	public void add(String key, boolean value) {
+		criteria.put(key, value);
+	}
+
+	public void add(String key, byte[] value) {
+		criteria.put(key, value);
+	}
+
+	public <T> void add(String string, List<T> value) {
+		if (value != null) {
+			ArrayNode jsonNodes = criteria.putArray(string);
+			toArrayNode(jsonNodes, value);
+		}
+	}
+
+	public void add(String string, Enum value) {
+		if (value != null) {
+			criteria.put(string, value.name());
+		}
+	}
+
+	@JsonIgnore
+	private ObjectNode current;
+
+	/**
+	 * 添加查询key,重复添加时后添加的会覆盖前面添加的
+	 *
+	 * @param key
+	 * @return
+	 */
+	public JacksonCriteria add(String key) {
+		current = criteria.putObject(key);
+		return this;
+	}
+
+	public JacksonCriteria isNull(boolean value) {
+		current.put("$null", value);
+		return this;
+	}
+
+	public JacksonCriteria gt(byte value) {
+		current.put("$gt", value);
+		return this;
+	}
+
+	public JacksonCriteria gt(short value) {
+		current.put("$gt", value);
+		return this;
+	}
+
+	public JacksonCriteria gt(int value) {
+		current.put("$gt", value);
+		return this;
+	}
+
+	public JacksonCriteria gt(long value) {
+		current.put("$gt", value);
+		return this;
+	}
+
+	public JacksonCriteria gt(float value) {
+		current.put("$gt", value);
+		return this;
+	}
+
+	public JacksonCriteria gt(double value) {
+		current.put("$gt", value);
+		return this;
+	}
+
+	public JacksonCriteria gt(String value) {
+		current.put("$gt", value);
+		return this;
+	}
+
+	public JacksonCriteria gt(Date value) {
+		current.put("$gt", DateUtils.format(value));
+		return this;
+	}
+
+	public JacksonCriteria gte(byte value) {
+		current.put("$gte", value);
+		return this;
+	}
+
+	public JacksonCriteria gte(short value) {
+		current.put("$gte", value);
+		return this;
+	}
+
+	public JacksonCriteria gte(int value) {
+		current.put("$gte", value);
+		return this;
+	}
+
+	public JacksonCriteria gte(long value) {
+		current.put("$gte", value);
+		return this;
+	}
+
+	public JacksonCriteria gte(float value) {
+		current.put("$gte", value);
+		return this;
+	}
+
+	public JacksonCriteria gte(double value) {
+		current.put("$gte", value);
+		return this;
+	}
+
+	public JacksonCriteria gte(String value) {
+		current.put("$gte", value);
+		return this;
+	}
+
+	public JacksonCriteria gte(Date value) {
+		current.put("$gte", DateUtils.format(value));
+		return this;
+	}
+
+	public JacksonCriteria lt(byte value) {
+		current.put("$lt", value);
+		return this;
+	}
+
+	public JacksonCriteria lt(short value) {
+		current.put("$lt", value);
+		return this;
+	}
+
+	public JacksonCriteria lt(int value) {
+		current.put("$lt", value);
+		return this;
+	}
+
+	public JacksonCriteria lt(long value) {
+		current.put("$lt", value);
+		return this;
+	}
+
+	public JacksonCriteria lt(float value) {
+		current.put("$lt", value);
+		return this;
+	}
+
+	public JacksonCriteria lt(double value) {
+		current.put("$lt", value);
+		return this;
+	}
+
+	public JacksonCriteria lt(String value) {
+		current.put("$lt", value);
+		return this;
+	}
+
+	public JacksonCriteria lt(Date value) {
+		current.put("$lt", DateUtils.format(value));
+		return this;
+	}
+
+	public JacksonCriteria lte(byte value) {
+		current.put("$lte", value);
+		return this;
+	}
+
+	public JacksonCriteria lte(short value) {
+		current.put("$lte", value);
+		return this;
+	}
+
+	public JacksonCriteria lte(int value) {
+		current.put("$lte", value);
+		return this;
+	}
+
+	public JacksonCriteria lte(long value) {
+		current.put("$lte", value);
+		return this;
+	}
+
+	public JacksonCriteria lte(float value) {
+		current.put("$lte", value);
+		return this;
+	}
+
+	public JacksonCriteria lte(double value) {
+		current.put("$lte", value);
+		return this;
+	}
+
+	public JacksonCriteria lte(String value) {
+		current.put("$lte", value);
+		return this;
+	}
+
+	public JacksonCriteria lte(Date value) {
+		current.put("$lte", DateUtils.format(value));
+		return this;
+	}
+
+	public JacksonCriteria ne(byte value) {
+		current.put("$ne", value);
+		return this;
+	}
+
+	public JacksonCriteria ne(short value) {
+		current.put("$ne", value);
+		return this;
+	}
+
+	public JacksonCriteria ne(int value) {
+		current.put("$ne", value);
+		return this;
+	}
+
+	public JacksonCriteria ne(long value) {
+		current.put("$ne", value);
+		return this;
+	}
+
+	public JacksonCriteria ne(float value) {
+		current.put("$ne", value);
+		return this;
+	}
+
+	public JacksonCriteria ne(double value) {
+		current.put("$ne", value);
+		return this;
+	}
+
+	public JacksonCriteria ne(String value) {
+		current.put("$ne", value);
+		return this;
+	}
+
+	public JacksonCriteria ne(Date value) {
+		current.put("$ne", DateUtils.format(value));
+		return this;
+	}
+
+	public JacksonCriteria like(String value) {
+		current.put("$like", value);
+		return this;
+	}
+
+	public JacksonCriteria notLike(String value) {
+		current.put("$notLike", value);
+		return this;
+	}
+
+	public <T> JacksonCriteria in(List<T> value) {
+		if (value != null) {
+			ArrayNode inNode = current.putArray("$in");
+			toArrayNode(inNode, value);
+		}
+		return this;
+	}
+
+	private <T> void toArrayNode(ArrayNode arrayNode, List<T> value) {
+		value.forEach(o -> {
+			if (o instanceof String) {
+				arrayNode.add((String) o);
+			} else if (o instanceof Byte) {
+				arrayNode.add((Byte) o);
+			} else if (o instanceof Short) {
+				arrayNode.add((Short) o);
+			} else if (o instanceof Integer) {
+				arrayNode.add((Integer) o);
+			} else if (o instanceof Long) {
+				arrayNode.add((Long) o);
+			} else if (o instanceof Float) {
+				arrayNode.add((Float) o);
+			} else if (o instanceof Double) {
+				arrayNode.add((Double) o);
+			} else if (o instanceof Boolean) {
+				arrayNode.add((Boolean) o);
+			} else if (o instanceof byte[]) {
+				arrayNode.add((byte[]) o);
+			} else if (o instanceof Enum) {
+				arrayNode.add(((Enum) o).name());
+			}
+		});
+	}
+
+	@Data
+	public static class Order {
+		private String column;
+		private boolean asc = true;
+
+		public Order() {
+		}
+
+		public Order(String column) {
+			this.column = column;
+		}
+
+		public Order(String column, boolean asc) {
+			this.column = column;
+			this.asc = asc;
+		}
+	}
+}

+ 115 - 0
dmp-common/src/main/java/com/persagy/common/criteria/JpaUtils.java

@@ -0,0 +1,115 @@
+package com.persagy.common.criteria;
+
+import org.apache.commons.collections4.MapUtils;
+import org.hibernate.transform.Transformers;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.Parameter;
+import javax.persistence.Query;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+public class JpaUtils {
+
+	private EntityManager entityManager;
+
+	public JpaUtils(EntityManager entityManager) {
+		this.entityManager = entityManager;
+	}
+
+	private Set<String> getParameterNames(Query q) {
+		Set<Parameter<?>> parameters = q.getParameters();
+		if (parameters == null || parameters.size() == 0) {
+			return Collections.EMPTY_SET;
+		} else {
+			return parameters.stream().map(Parameter::getName).collect(Collectors.toSet());
+		}
+	}
+
+	private Query createQuery(String sql, Object... args) {
+		Query q = entityManager.createNativeQuery(sql);
+		if (args != null && args.length > 0) {
+			for (int i = 0; i < args.length; i++) {
+				q.setParameter(i + 1, args[i]);
+			}
+		}
+		return q;
+	}
+
+	private Query createQuery(String sql, Map<String, Object> args) {
+		Query q = entityManager.createNativeQuery(sql);
+		if (args != null && !args.isEmpty()) {
+			Set<String> parameterNames = getParameterNames(q);
+			for (String key : parameterNames) {
+				q.setParameter(key, args.get(key));
+			}
+		}
+		return q;
+	}
+
+
+	public int update(String sql, Object... args) {
+		return createQuery(sql, args).executeUpdate();
+	}
+
+	public int update(String sql, Map<String, Object> args) {
+		return createQuery(sql, args).executeUpdate();
+	}
+
+	public List<Map<String, Object>> queryList(String sql, Object... args) {
+		Query q = createQuery(sql, args);
+		q.unwrap(org.hibernate.SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
+		return q.getResultList();
+	}
+
+	public List<Map<String, Object>> queryList(String sql, Map<String, Object> args) {
+		Query q = createQuery(sql, args);
+		q.unwrap(org.hibernate.SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
+		return q.getResultList();
+	}
+
+	public Map<String, Object> queryOne(String sql, Object... args) {
+		try {
+			Query q = createQuery(sql, args);
+			q.unwrap(org.hibernate.SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
+			return (Map<String, Object>) q.getSingleResult();
+		} catch (Exception e) {
+			return null;
+		}
+	}
+
+	public <T> List<T> querySingleColumn(String sql, Object... args) {
+		Query q = createQuery(sql, args);
+		return q.getResultList();
+	}
+
+	public <T> List<T> querySingleColumn(String sql, Map<String, Object> args) {
+		Query q = createQuery(sql, args);
+		return q.getResultList();
+	}
+
+	public Map<String, Object> queryOne(String sql, Map<String, Object> args) {
+		try {
+			Query q = createQuery(sql, args);
+			q.unwrap(org.hibernate.SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
+			return (Map<String, Object>) q.getSingleResult();
+		} catch (NoResultException e) {
+			return null;
+		}
+	}
+
+	public Long count(String sql, String countKey, Object... args) {
+		Map<String, Object> stringObjectMap = queryOne(sql, args);
+		return MapUtils.getLong(stringObjectMap, countKey);
+	}
+
+	public Long count(String sql, String countKey, Map<String, Object> args) {
+		Map<String, Object> stringObjectMap = queryOne(sql, args);
+		return MapUtils.getLong(stringObjectMap, countKey);
+	}
+
+}

+ 325 - 0
dmp-common/src/main/java/com/persagy/common/date/DateUtils.java

@@ -0,0 +1,325 @@
+package com.persagy.common.date;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * @author: yaoll
+ * @date: 2020-09-04
+ * @verison: 1.0
+ */
+public class DateUtils {
+
+    public static final String PATTERN_yyyyMMddHHmmss = "yyyyMMddHHmmss";
+    public static final String PATTERN_yyyyMMddHHmmss2 = "yyyy-MM-dd HH:mm:ss";
+    public static final String PATTERN_yyyyMMdd = "yyyyMMdd";
+    public static final String PATTERN_HHmmss = "HHmmss";
+    public static final String PATTERN_HHmm = "HHmm";
+    public static final String PATTERN_MM = "MM";
+    public static final String PATTERN_yyyy = "yyyy";
+    public static final String PATTERN_yyyyMM = "yyyyMM";
+
+    public static Date add(Date now, int field, int amount) {
+        Calendar c = Calendar.getInstance();
+        c.setTime(now);
+        c.add(field, amount);
+        return c.getTime();
+    }
+
+    public static String format(Date date) {
+        return format(date, PATTERN_yyyyMMddHHmmss);
+    }
+
+    public static Date parse(String date) {
+        return parse(date, PATTERN_yyyyMMddHHmmss);
+    }
+
+    public static String format(Date date, String pattern) {
+        DateFormat format = new SimpleDateFormat(pattern);
+        return format.format(date);
+    }
+
+    public static Date parse(String date, String pattern) {
+        DateFormat format = new SimpleDateFormat(pattern);
+        try {
+            return format.parse(date);
+        } catch (ParseException e) {
+            e.printStackTrace();
+            throw new RuntimeException("pattern[" + pattern + "] and date[" + date + "] not match");
+        }
+    }
+
+    /**
+     * 时间字符串转化成分钟数
+     *
+     * @param time yyyyMMddHHmmss or HHmmss
+     * @return
+     */
+    public static int toInt(String time) {
+        String temp = time;
+        if (time.length() == 14) {
+            temp = time.substring(8);
+        }
+        int minute = Integer.parseInt(temp.substring(0, 2)) * 60 + Integer.parseInt(temp.substring(2, 4));
+        if (minute >= 1440) {
+            minute = minute - 1440;
+        }
+        return minute;
+    }
+
+    /**
+     * 分钟数转化为时间字符串
+     *
+     * @param minite
+     * @return string HHmmss
+     */
+    public static String toString(int minite) {
+        int tmp = minite;
+        if (tmp >= 1440) {
+            tmp = tmp - 1440;
+        }
+        return String.format("%02d", tmp / 60) + String.format("%02d", tmp % 60) + "00";
+    }
+
+    /**
+     * 下一个服务定制时间点
+     *
+     * @param thisTime
+     * @param targetPeirod
+     * @return
+     */
+    public static String nextTargetPoint(String thisTime, Integer targetPeirod) {
+        int minute = toInt(thisTime);
+        minute = minute - (minute % targetPeirod) + targetPeirod;
+        return toString(minute);
+    }
+
+    public static String thisOrNextTargetPoint(String thisTime, Integer targetPeirod) {
+        int minute = toInt(thisTime);
+        if (minute % targetPeirod != 0) {
+            minute = minute - (minute % targetPeirod) + targetPeirod;
+        }
+        return toString(minute);
+    }
+
+    public static String thisOrLastTargetPoint(String thisTime, Integer targetPeirod) {
+        int minute = toInt(thisTime);
+        minute = minute - (minute % targetPeirod);
+        return toString(minute);
+    }
+
+    /**
+     * 计算begin和end之间的定制时间点
+     *
+     * @param begin  包含
+     * @param end    包含
+     * @param period 时间间隔,单位分钟
+     * @return
+     */
+    public static List<String> getTimePoints(String begin, String end, int period) {
+        return getTimePoints(begin, end, period, false);
+    }
+
+    /**
+     * 不支持跨天,计算begin和end之间的定制时间点
+     *
+     * @param begin
+     * @param end
+     * @param period
+     * @param containEnd 是否包含结束时间
+     * @return
+     */
+    public static List<String> getTimePoints(String begin, String end, int period, boolean containEnd) {
+        List<String> list = new LinkedList<>();
+        int beginInt = toInt(begin);
+        int endInt = toInt(end);
+        int point = beginInt - (beginInt % period);
+        while (true) {
+            if ((containEnd && point <= endInt) || (!containEnd && point < endInt)) {
+                list.add(toString(point));
+                point += period;
+            } else {
+                break;
+            }
+        }
+        return list;
+    }
+
+    /**
+     * 历史分精度数据时间点, 支持跨天
+     *
+     * @param begin  包含
+     * @param end    包含
+     * @param period
+     * @return
+     */
+    public static List<String> getHisdataTimePoints(String begin, String end, int period) {
+        SimpleDateFormat format = new SimpleDateFormat(DateUtils.PATTERN_yyyyMMddHHmmss);
+        List<String> list = new LinkedList<>();
+        String start = begin.substring(0, 8) + thisOrNextTargetPoint(begin, period);
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(DateUtils.parse(start));
+        while (true) {
+            String tp = format.format(calendar.getTime());
+            if (tp.compareTo(end) <= 0) {
+                list.add(tp);
+                calendar.add(Calendar.MINUTE, period);
+            } else {
+                break;
+            }
+        }
+        return list;
+    }
+
+    /**
+     * 判断两个时间段是否是分隔开的(没有交叉重叠包含或覆盖)
+     *
+     * @param a1 HHmmss
+     * @param a2
+     * @param b1
+     * @param b2
+     * @return 注:该方法没有判断相等的情况,如:a1=b1 a2=b2 仍返回为true
+     */
+    public static boolean isSeparate(String a1, String a2, String b1, String b2) {
+        if (a1.compareTo(b1) < 0 && a2.compareTo(b1) > 0) {
+            return false;
+        }
+        if (a1.compareTo(b2) < 0 && a2.compareTo(b2) > 0) {
+            return false;
+        }
+        if (a1.compareTo(b1) < 0 && a2.compareTo(b2) > 0) {
+            return false;
+        }
+        if (a1.compareTo(b1) > 0 && a2.compareTo(b2) < 0) {
+            return false;
+        }
+        return true;
+    }
+
+
+    /**
+     * 判断两个时间段是否是包含或覆盖的
+     *
+     * @param a1
+     * @param a2
+     * @param b1
+     * @param b2
+     * @return
+     */
+    public static boolean isNotSeparate(String a1, String a2, String b1, String b2) {
+        if (a1.compareTo(b1) > 0 && a1.compareTo(b2) > 0) {
+            return false;
+        }
+        if (a2.compareTo(b1) < 0 && a2.compareTo(b2) < 0) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * date2比date1多的月份
+     *
+     * @param date1
+     * @param date2
+     * @return
+     */
+    public static List<String> differentMonths(Date date1, Date date2) {
+        // 获取开始年份和开始月份
+        Calendar cal1 = Calendar.getInstance();
+        cal1.setTime(date1);
+        int startYear = cal1.get(Calendar.YEAR);
+        int startMonth = cal1.get(Calendar.MONTH);
+        // 获取结束年份和结束月份
+        Calendar cal2 = Calendar.getInstance();
+        cal2.setTime(date2);
+        int endYear = cal2.get(Calendar.YEAR);
+        int endMonth = cal2.get(Calendar.MONTH);
+
+        List<String> list = new ArrayList<String>();
+        for (int i = startYear; i <= endYear; i++) {
+            String date = "";
+            if (startYear == endYear) {
+                for (int j = startMonth; j <= endMonth; j++) {
+                    if (j < 9) {
+                        date = i + "0" + (j + 1);
+                    } else {
+                        date = i + "" + (j + 1);
+                    }
+                    list.add(date);
+                }
+
+            } else {
+                if (i == startYear) {
+                    for (int j = startMonth; j < 12; j++) {
+                        if (j < 9) {
+                            date = i + "0" + (j + 1);
+                        } else {
+                            date = i + "" + (j + 1);
+                        }
+                        list.add(date);
+                    }
+                } else if (i == endYear) {
+                    for (int j = 0; j <= endMonth; j++) {
+                        if (j < 9) {
+                            date = i + "0" + (j + 1);
+                        } else {
+                            date = i + "" + (j + 1);
+                        }
+                        list.add(date);
+                    }
+                } else {
+                    for (int j = 0; j < 12; j++) {
+                        if (j < 9) {
+                            date = i + "0" + (j + 1);
+                        } else {
+                            date = i + "" + (j + 1);
+                        }
+                        list.add(date);
+                    }
+                }
+
+            }
+        }
+        return list;
+    }
+
+    /**
+     * date2比date1多的天数
+     *
+     * @param date1
+     * @param date2
+     * @return
+     */
+    public static int differentDays(Date date1, Date date2) {
+        Calendar cal1 = Calendar.getInstance();
+        cal1.setTime(date1);
+
+        Calendar cal2 = Calendar.getInstance();
+        cal2.setTime(date2);
+        int day1 = cal1.get(Calendar.DAY_OF_YEAR);
+        int day2 = cal2.get(Calendar.DAY_OF_YEAR);
+
+        int year1 = cal1.get(Calendar.YEAR);
+        int year2 = cal2.get(Calendar.YEAR);
+        if (year1 != year2)   //同一年
+        {
+            int timeDistance = 0;
+            for (int i = year1; i < year2; i++) {
+                if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)    //闰年
+                {
+                    timeDistance += 366;
+                } else    //不是闰年
+                {
+                    timeDistance += 365;
+                }
+            }
+
+            return timeDistance + (day2 - day1);
+        } else    //不同年
+        {
+            return day2 - day1;
+        }
+    }
+}

+ 222 - 0
dmp-common/src/main/java/com/persagy/common/json/JacksonMapper.java

@@ -0,0 +1,222 @@
+package com.persagy.common.json;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.JsonNodeType;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+
+/**
+ * @author: yaoll
+ * @date: 2020-09-04
+ * @verison: 1.0
+ */
+public class JacksonMapper {
+
+	private static Logger logger = LoggerFactory.getLogger(JacksonMapper.class);
+
+	public static final ObjectMapper nonEmptyMapper;
+	public static final ObjectMapper nonDefaultMapper;
+	public static final ObjectMapper nonEmptyFormatMapper;
+
+	static {
+		nonEmptyMapper = new ObjectMapper();
+		nonEmptyMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
+		nonEmptyMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
+		nonEmptyMapper.disable(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES);
+
+		nonDefaultMapper = new ObjectMapper();
+		nonDefaultMapper.setSerializationInclusion(JsonInclude.Include.NON_DEFAULT);
+		nonDefaultMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
+		nonDefaultMapper.disable(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES);
+
+		nonEmptyFormatMapper = new ObjectMapper();
+		nonEmptyFormatMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
+		nonEmptyFormatMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
+		nonEmptyFormatMapper.disable(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES);
+		nonEmptyFormatMapper.enable(SerializationFeature.INDENT_OUTPUT);
+	}
+
+	private static boolean isEmpty(final CharSequence cs) {
+		return cs == null || cs.length() == 0;
+	}
+
+	public static <T> T toObject(String jsonString, Class<T> clazz) {
+		if (!isEmpty(jsonString)) {
+			try {
+				return nonEmptyMapper.readValue(jsonString, clazz);
+			} catch (IOException e) {
+				logger.warn("parse json string to {} error: {}", clazz.getName(), jsonString, e);
+			}
+		}
+		return null;
+	}
+
+	public static <T> T toObject(String jsonString, TypeReference<T> typeRef) {
+		if (!isEmpty(jsonString)) {
+			try {
+				return nonEmptyMapper.readValue(jsonString, typeRef);
+			} catch (IOException e) {
+				logger.warn("parse json string to {} error: {}", typeRef.toString(), jsonString, e);
+			}
+		}
+		return null;
+	}
+
+	public static <T> T toObject(String jsonString, JavaType javaType) {
+		if (!isEmpty(jsonString)) {
+			try {
+				return (T) nonEmptyMapper.readValue(jsonString, javaType);
+			} catch (IOException e) {
+				logger.warn("parse json string to {} error: {}", javaType.toString(), jsonString, e);
+			}
+		}
+		return null;
+	}
+
+	public static <T> T toObject(String jsonString, Class cla, Class... clb) {
+		if (!isEmpty(jsonString)) {
+			try {
+				JavaType javaType = nonEmptyMapper.getTypeFactory().constructParametricType(cla, clb);
+				return (T) nonEmptyMapper.readValue(jsonString, javaType);
+			} catch (IOException e) {
+				logger.warn("parse json string to {} error: {}", cla.getName(), jsonString, e);
+			}
+		}
+		return null;
+	}
+
+	public static JavaType constructParametricType(Class<?> parametrized, Class<?>... parameterClasses) {
+		return nonEmptyMapper.getTypeFactory().constructParametricType(parametrized, parameterClasses);
+	}
+
+	public static JavaType constructParametricType(Class<?> rawType, JavaType... parameterTypes) {
+		return nonEmptyMapper.getTypeFactory().constructParametricType(rawType, parameterTypes);
+	}
+
+	public static String toSimpleJson(Object object) {
+		try {
+			return nonEmptyMapper.writeValueAsString(object);
+		} catch (JsonProcessingException e) {
+			logger.error("write to json string error:" + object, e);
+		}
+		return null;
+	}
+
+	public static String toFormatJson(Object object) {
+		try {
+			return nonEmptyFormatMapper.writeValueAsString(object);
+		} catch (JsonProcessingException e) {
+			logger.error("write to json string error:" + object, e);
+		}
+		return null;
+	}
+
+	public static final String getString(ObjectNode obj, String key) {
+		return getString(obj, key, null);
+	}
+
+	public static final String getString(ObjectNode obj, String key, String defaultValue) {
+		if (obj == null) {
+			return defaultValue;
+		}
+		if (!obj.has(key)) {
+			return defaultValue;
+		}
+		return obj.get(key).asText();
+	}
+
+	public static final Integer getInteger(ObjectNode obj, String key) {
+		return getInteger(obj, key, null);
+	}
+
+	public static final Integer getInteger(ObjectNode obj, String key, Integer defaultValue) {
+		if (obj == null) {
+			return defaultValue;
+		}
+		if (!obj.has(key)) {
+			return defaultValue;
+		}
+		JsonNode jsonNode = obj.get(key);
+
+		return Integer.valueOf(jsonNode.asText());
+	}
+
+	public static final Double getDouble(ObjectNode obj, String key) {
+		return getDouble(obj, key, null);
+	}
+
+	public static final Double getDouble(ObjectNode obj, String key, Double defaultValue) {
+		if (obj == null) {
+			return defaultValue;
+		}
+		if (!obj.has(key)) {
+			return defaultValue;
+		}
+		return Double.valueOf(obj.get(key).asText());
+	}
+
+	public static final Boolean getBoolean(ObjectNode obj, String key) {
+		return getBoolean(obj, key, null);
+	}
+
+	public static final Boolean getBoolean(ObjectNode obj, String key, Boolean defaultValue) {
+		if (obj == null) {
+			return defaultValue;
+		}
+		if (!obj.has(key)) {
+			return defaultValue;
+		}
+		return Boolean.valueOf(obj.get(key).toString());
+	}
+
+	public static final ObjectNode getObject(ObjectNode obj, String key) {
+		return getObject(obj, key, null);
+	}
+
+	public static final ObjectNode getObject(ObjectNode obj, String key, ObjectNode defaultValue) {
+		if (obj == null) {
+			return defaultValue;
+		}
+		if (!obj.has(key)) {
+			return defaultValue;
+		}
+		JsonNode jsonNode = obj.get(key);
+		JsonNodeType nodeType = jsonNode.getNodeType();
+		if (nodeType == JsonNodeType.STRING) {
+			return toObject(jsonNode.asText(), ObjectNode.class);
+		} else if (nodeType == JsonNodeType.OBJECT) {
+			return (ObjectNode) jsonNode;
+		}
+		return defaultValue;
+	}
+
+
+	public static final ArrayNode getArray(ObjectNode obj, String key) {
+		return getArray(obj, key, null);
+	}
+
+	public static final ArrayNode getArray(ObjectNode obj, String key, ArrayNode defaultValue) {
+		if (obj == null) {
+			return defaultValue;
+		}
+		if (!obj.has(key)) {
+			return defaultValue;
+		}
+		JsonNode jsonNode = obj.get(key);
+		JsonNodeType nodeType = jsonNode.getNodeType();
+		if (nodeType == JsonNodeType.STRING) {
+			return toObject(jsonNode.asText(), ArrayNode.class);
+		} else if (nodeType == JsonNodeType.ARRAY) {
+			return (ArrayNode) jsonNode;
+		}
+		return defaultValue;
+	}
+
+}

+ 64 - 0
dmp-common/src/main/java/com/persagy/common/web/BaseResponse.java

@@ -0,0 +1,64 @@
+package com.persagy.common.web;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.persagy.dmp.rwd.model.DmpMessage;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * @author: yaoll
+ * @date: 2020-09-04
+ * @verison: 1.0
+ */
+public class BaseResponse<T> {
+
+	public static final String SUCCESS = "success";
+	public static final String FAIL = "fail";
+	public static final String EXCEPTION = "exception";
+
+	@Getter
+	@Setter
+	private String result;
+
+	@Getter
+	@Setter
+	private String message;
+
+	@Getter
+	@Setter
+	protected T data;
+
+	@JsonIgnore
+	@Getter
+	private List<DmpMessage> messageList;
+
+	public void setFail(String message) {
+		setResult(FAIL);
+		setMessage(message);
+	}
+
+	public BaseResponse() {
+		super();
+		this.result = SUCCESS;
+	}
+
+	public BaseResponse(String result, String message) {
+		super();
+		this.result = result;
+		this.message = message;
+	}
+
+	public boolean success() {
+		return SUCCESS.equals(this.result);
+	}
+
+	public void add(DmpMessage msg){
+		if (messageList == null) {
+			messageList = new LinkedList<>();
+		}
+		messageList.add(msg);
+	}
+}

+ 28 - 0
dmp-common/src/main/java/com/persagy/common/web/ListResponse.java

@@ -0,0 +1,28 @@
+package com.persagy.common.web;
+
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * @author: yaoll
+ * @date: 2020-09-04
+ * @verison: 1.0
+ */
+public class ListResponse<T> extends BaseResponse<List<T>> {
+
+	public void add(T t) {
+		if (data == null) {
+			data = new LinkedList<>();
+		}
+		data.add(t);
+	}
+
+	@Override
+	public List<T> getData() {
+		List<T> data = super.getData();
+		if (data == null) {
+			data = new LinkedList<>();
+		}
+		return data;
+	}
+}

+ 42 - 0
dmp-common/src/main/java/com/persagy/common/web/MapResponse.java

@@ -0,0 +1,42 @@
+package com.persagy.common.web;
+
+import org.apache.commons.collections4.MapUtils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author: yaoll
+ * @date: 2020-09-04
+ * @verison: 1.0
+ */
+public class MapResponse extends BaseResponse<Map<String, Object>> {
+
+	public MapResponse() {
+		super();
+		super.setResult(SUCCESS);
+	}
+
+	//	@JsonAnySetter
+	public void add(String name, Object value) {
+		if (data == null) {
+			data = new HashMap<String, Object>();
+		}
+		data.put(name, value);
+	}
+
+	//	@JsonAnyGetter
+	@Override
+	public Map<String, Object> getData() {
+		return data;
+	}
+
+	public String getString(String key) {
+		return MapUtils.getString(data, key);
+	}
+
+	public Integer getInteger(String key) {
+		return MapUtils.getInteger(data, key);
+	}
+
+}

+ 27 - 0
dmp-common/src/main/java/com/persagy/common/web/PagedResponse.java

@@ -0,0 +1,27 @@
+package com.persagy.common.web;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author: yaoll
+ * @date: 2020-09-04
+ * @verison: 1.0
+ */
+public class PagedResponse<T> extends ListResponse<T> {
+
+	@Getter
+	@Setter
+	private Long count;
+
+	public List<T> getData() {
+		if (data == null) {
+			return Collections.EMPTY_LIST;
+		} else {
+			return data;
+		}
+	}
+}

+ 80 - 0
dmp-common/src/main/java/com/persagy/common/web/ServletUtils.java

@@ -0,0 +1,80 @@
+package com.persagy.common.web;
+
+import com.persagy.common.json.JacksonMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Enumeration;
+
+/**
+ * @author: yaoll
+ * @date: 2020-09-04
+ * @verison: 1.0
+ */
+public class ServletUtils {
+
+    private static final Logger logger = LoggerFactory.getLogger(ServletUtils.class);
+
+    public static void writeJson(HttpServletResponse response, Object obj) {
+        writeJson(response, JacksonMapper.toSimpleJson(obj));
+    }
+
+    public static void writeJson(HttpServletResponse response, String json) {
+        response.setContentType("application/json;charset=UTF-8");
+        PrintWriter out = null;
+        try {
+            out = response.getWriter();
+            out.print(json);
+            out.flush();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            if (out != null) {
+                out.close();
+            }
+        }
+    }
+
+    public static Cookie getCookie(HttpServletRequest request, String name) {
+        Cookie[] cookies = request.getCookies();
+        if (cookies != null) {
+            for (Cookie cookie : cookies) {
+                if (name.equals(cookie.getName())) {
+                    return cookie;
+                }
+            }
+        }
+        return null;
+    }
+
+    public static String getCookieValue(HttpServletRequest request, String name) {
+        Cookie cookie = getCookie(request, name);
+        return cookie == null ? null : cookie.getValue();
+    }
+
+
+    public static void showCookies(HttpServletRequest request) {
+        Cookie[] cookies = request.getCookies();
+        if (cookies != null) {
+            for (Cookie cookie : cookies) {
+                logger.info("cookie: {} {} {} {}", cookie.getName(), cookie.getValue(), cookie.getPath(), cookie.getDomain());
+            }
+        }
+    }
+
+    public static void showHeaders(HttpServletRequest request) {
+        Enumeration<String> headerNames = request.getHeaderNames();
+        if (headerNames != null) {
+            while (headerNames.hasMoreElements()) {
+                String name = headerNames.nextElement();
+                logger.info("header: {} {}", name, request.getHeader(name));
+            }
+        }
+    }
+
+}

+ 28 - 0
dmp-common/src/main/java/com/persagy/dmp/common/SpringUtils.java

@@ -0,0 +1,28 @@
+package com.persagy.dmp.common;
+
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+
+/**
+ * @author: yaoll
+ * @date: 2020-10-22
+ * @verison: 1.0
+ */
+public class SpringUtils implements BeanFactoryPostProcessor {
+
+	private static ConfigurableListableBeanFactory beanFactory;
+
+	@Override
+	public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
+		SpringUtils.beanFactory = beanFactory;
+	}
+
+	public static <T> T getBean(Class<T> aClass) {
+		return beanFactory.getBean(aClass);
+	}
+
+	public static <T> T getBean(String beanName, Class<T> aClass) {
+		return beanFactory.getBean(beanName, aClass);
+	}
+}

+ 287 - 0
dmp-common/src/main/java/com/persagy/dmp/common/http/HttpUtils.java

@@ -0,0 +1,287 @@
+package com.persagy.dmp.common.http;
+
+/**
+ * @author: yaoll
+ * @date: 2020-10-14
+ * @verison: 1.0
+ */
+
+import com.persagy.common.json.JacksonMapper;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.HttpEntity;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.methods.HttpRequestBase;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
+
+@Getter
+@Setter
+@Slf4j
+public class HttpUtils {
+
+	public static class HttpHandler {
+		/**
+		 * @param requestId
+		 * @param method
+		 * @param duration  耗时, 毫秒数
+		 * @param url
+		 * @param body
+		 * @param status
+		 * @param response
+		 */
+		public void handle(String requestId, String method, long duration, String url, String body, int status, String response) {
+
+		}
+
+	}
+
+	private static final Logger logger = LoggerFactory.getLogger(HttpUtils.class);
+
+	public static final String UTF8 = "UTF-8";
+
+	private static final AtomicInteger flag = new AtomicInteger(0);
+
+	private static String getFlag() {
+		int result = flag.addAndGet(1);
+		if (result > 99999999) {
+			flag.set(0);
+		}
+		return 100000000 + result + "";
+	}
+
+	@Data
+	public static class HttpResult {
+		private Integer status;
+		private String content;
+
+		public boolean success() {
+			return this.status == 200;
+		}
+	}
+
+	@Setter
+	private HttpHandler httpHandler = new HttpHandler();
+
+	/**
+	 * 这个方法需要重构
+	 *
+	 * @param url
+	 * @return
+	 */
+	@Deprecated
+	public String getJson(String url) {
+		HttpResult result = get(url, 0);
+		return result.getContent();
+	}
+
+	public String get(String url, Map<String, Object> param) {
+		return get(url, param, false);
+	}
+
+	public String get(String url, Map<String, Object> param, boolean urlEncode) {
+		String path = parseUrl(url, param, urlEncode);
+		HttpResult httpResult = get(path, 0);
+		return httpResult.getContent();
+	}
+
+	public String postJson(String url, Map<String, Object> param, Object requestBody) {
+		return postJson(url, param, requestBody, 0);
+	}
+
+	public String postJson(String url, Map<String, Object> param, Object requestBody, int timeout) {
+		String server = parseUrl(url, param, false);
+		String requestBodyStr;
+		if (requestBody instanceof String) {
+			requestBodyStr = (String) requestBody;
+		} else {
+			requestBodyStr = JacksonMapper.toSimpleJson(requestBody);
+		}
+		HttpResult result = post(server, requestBodyStr, timeout);
+		return result.getContent();
+	}
+
+	public HttpResult post(String url, String requestBody, int timeout) {
+		String flag = getFlag();
+		long begin = System.currentTimeMillis();
+		CloseableHttpClient client = HttpClients.createDefault();
+		CloseableHttpResponse resp = null;
+		HttpResult result = new HttpResult();
+		long duration = 0;
+		try {
+			logger.info("{} httputils request: {}", flag, url);
+			logger.info("{} httputils requestbody: {}", flag, requestBody);
+			HttpPost post = new HttpPost(url);
+			post.addHeader("contentType", "application/json;charset=UTF-8");
+			post.addHeader("Accept", "application/json");
+			if (requestBody != null) {
+				StringEntity entity = new StringEntity(requestBody, UTF8);
+				entity.setContentType("application/json");
+				post.setEntity(entity);
+			}
+			setTimeOut(post, timeout);
+			resp = client.execute(post);
+			int status = resp.getStatusLine().getStatusCode();
+			result.setStatus(status);
+			HttpEntity r = resp.getEntity();
+			String respContent = EntityUtils.toString(r, UTF8);
+			result.setContent(respContent);
+			logger.info("{} httputils resp : {}", flag, getLogMsg(respContent));
+			duration = System.currentTimeMillis() - begin;
+			httpHandler.handle(flag, "POST", duration, url, requestBody, status, respContent);
+		} catch (Exception e) {
+			e.printStackTrace();
+			logger.error("{} httputils exception : ", flag, e);
+			duration = System.currentTimeMillis() - begin;
+			httpHandler.handle(flag, "POST", duration, url, requestBody, -1, e.getMessage());
+			throw new RuntimeException(e);
+		} finally {
+			close(client, resp);
+			logger.info("{} httputils timeconsuming : {} {}", flag, duration, url);
+		}
+		return result;
+	}
+
+	public HttpResult get(String url, int timeout) {
+		String flag = getFlag();
+		long begin = System.currentTimeMillis();
+		CloseableHttpClient client = HttpClients.createDefault();
+		CloseableHttpResponse resp = null;
+		HttpResult result = new HttpResult();
+		long duration = 0;
+		try {
+			logger.info("{} httputils request: {}", flag, url);
+			HttpGet get = new HttpGet(url);
+			setTimeOut(get, timeout);
+
+			resp = client.execute(get);
+
+			int status = resp.getStatusLine().getStatusCode();
+			result.setStatus(status);
+			HttpEntity r = resp.getEntity();
+			String respContent = EntityUtils.toString(r, UTF8);
+			result.setContent(respContent);
+			logger.info("{} httputils resp: {}", flag, getLogMsg(respContent));
+			duration = System.currentTimeMillis() - begin;
+			httpHandler.handle(flag, "GET", duration, url, null, status, respContent);
+		} catch (Exception e) {
+			e.printStackTrace();
+			logger.error("{} httputils exception: ", flag, e);
+			duration = System.currentTimeMillis() - begin;
+			httpHandler.handle(flag, "GET", duration, url, null, -1, e.getMessage());
+			throw new RuntimeException(e);
+		} finally {
+			close(client, resp);
+			logger.info("{} httputils timeconsuming: {} {}", flag, duration, url);
+		}
+		return result;
+	}
+
+//    /**
+//     * 发送get请求
+//     *
+//     * @param url       地址
+//     * @param param     参数
+//     * @param urlEncode 是否对uri进行decode
+//     * @param timeout   超时时间
+//     * @return
+//     */
+//    public HttpResult sendGet(String url, Map<?, Object> param, boolean urlEncode, int timeout) {
+//        String path = parseUrl(url, param, urlEncode);
+//        return get(path, timeout);
+//    }
+
+	private String parseUri(Map<?, Object> param) {
+		StringBuilder buff = new StringBuilder();
+		if (param != null && param.size() > 0) {
+			for (Map.Entry<?, Object> entry : param.entrySet()) {
+				Object key = entry.getKey();
+				String value = entry.getValue().toString();
+				buff.append("&").append(key.toString()).append("=").append(value);
+			}
+			return buff.substring(1);
+		} else {
+			return "";
+		}
+	}
+
+	public String parseUrl(String url, String uri, boolean needEncode) {
+		if (uri == null) {
+			return url;
+		}
+		String result;
+		if (url.indexOf("?") > -1) {
+			result = url + "&" + uri;
+		} else {
+			result = url + "?" + uri;
+		}
+
+		if (needEncode) {
+			int idx = result.indexOf("?");
+			if (idx == -1) {
+				return result;
+			}
+			try {
+				String queryStr = URLEncoder.encode(result.substring(idx), UTF8);
+				return result.substring(0, idx) + queryStr;
+			} catch (UnsupportedEncodingException e) {
+				throw new RuntimeException(e);
+			}
+		} else {
+			return result;
+		}
+	}
+
+	public String parseUrl(String url, Map<?, Object> param, boolean needEncode) {
+		return parseUrl(url, parseUri(param), needEncode);
+	}
+
+	private void setTimeOut(HttpRequestBase req, int timeout) {
+		if (timeout > 0) {
+			RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(3000).setSocketTimeout(timeout).build();
+			req.setConfig(requestConfig);
+		}
+	}
+
+	private String getLogMsg(String respContent) {
+		if (respContent == null) {
+			return "null";
+		}
+		if (respContent.length() > 200) {
+			return respContent.substring(0, 200);
+		}
+		return respContent;
+	}
+
+	private void close(CloseableHttpClient client, CloseableHttpResponse response) {
+		if (response != null) {
+			try {
+				response.close();
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+		if (client != null) {
+			try {
+				client.close();
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+	}
+
+}

+ 81 - 0
dmp-common/src/main/java/com/persagy/dmp/config/DmpParameterStorage.java

@@ -0,0 +1,81 @@
+package com.persagy.dmp.config;
+
+import lombok.Getter;
+import lombok.Setter;
+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-09-22
+ * @verison: 1.0
+ */
+public class DmpParameterStorage extends HandlerInterceptorAdapter {
+
+	private static final ThreadLocal<ParameterData> storage = new ThreadLocal();
+
+	@Override
+	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+		ParameterData data = new ParameterData();
+		data.groupCode = request.getParameter("groupCode");
+		data.schemaId = request.getParameter("schemaId");
+		data.projectId = request.getParameter("projectId");
+		data.appId = request.getParameter("appId");
+		data.userId = request.getParameter("userId");
+
+		storage.set(data);
+		return true;
+	}
+
+	@Override
+	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
+		storage.remove();
+	}
+
+	@Override
+	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+		storage.remove();
+	}
+
+	@Setter
+	@Getter
+	public static class ParameterData {
+		private String groupCode;
+		private String schemaId;
+		private String projectId;
+		private String appId;
+		private String userId;
+	}
+
+	public static void set(ParameterData data) {
+		storage.set(data);
+	}
+
+	public static void clear(){
+		storage.remove();
+	}
+
+	public static String getGroupCode() {
+		return storage.get().groupCode;
+	}
+
+	public static String getSchemaId() {
+		return storage.get().schemaId;
+	}
+
+	public static String getProjectId() {
+		return storage.get().projectId;
+	}
+
+	public static String getAppId() {
+		return storage.get().appId;
+	}
+
+	public static String getUserId() {
+		return storage.get().userId;
+	}
+
+}

+ 76 - 0
dmp-dic/doc/config.sql

@@ -0,0 +1,76 @@
+# dic config
+delete from `dmp_config`.`integrated_config` where application = 'dmp-dic';
+INSERT INTO `dmp_config`.`integrated_config`
+(`APPLICATION`,`PPROFILE`,`LABLE`,`BELONGTO`,`ISUPDATE`,`PKEY`,`PVALUE`,`DESCRIPTION`)
+VALUES
+('dmp-dic','default','master','DMP',1,'spring.jackson.time-zone', 'Asia/Shanghai', null),
+('dmp-dic','default','master','DMP',1,'spring.jpa.show-sql', 'false', null),
+('dmp-dic','default','master','DMP',1,'spring.jpa.hibernate.ddl-auto', 'none', null),
+('dmp-dic','default','master','DMP',1,'management.endpoints.web.exposure.include', '*', null),
+('dmp-dic','default','master','DMP',1,'management.endpoint.health.show-details', 'ALWAYS', null),
+('dmp-dic','default','master','DMP',1,'eureka.client.fetch-registry','true',null),
+('dmp-dic','default','master','DMP',1,'eureka.client.register-with-eureka','true',null),
+('dmp-dic','default','master','DMP',1,'eureka.instance.lease-renewal-interval-in-seconds','10',null),
+('dmp-dic','default','master','DMP',1,'eureka.instance.lease-expiration-duration-in-seconds','30',null),
+('dmp-dic','default','master','DMP',1,'eureka.instance.hostname','${spring.application.name}',null),
+('dmp-dic','default','master','DMP',1,'eureka.instance.prefer-ip-address','true',null),
+('dmp-dic','default','master','DMP',1,'eureka.instance.instance-id','${spring.cloud.client.ip-address}:${server.port}',null),
+
+('dmp-dic','default','master','DMP',1,'spring.datasource.type', 'com.alibaba.druid.pool.DruidDataSource', null),
+('dmp-dic','default','master','DMP',1,'spring.datasource.driverClassName', 'com.mysql.cj.jdbc.Driver', null),
+('dmp-dic','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-dic','default','master','DMP',1,'spring.datasource.username', '${persagy.mysql.username}', null),
+('dmp-dic','default','master','DMP',1,'spring.datasource.password', '${persagy.mysql.password}', null),
+
+('dmp-dic','default','master','DMP',1,'spring.rabbitmq.host', '${persagy.rabbitmq.host}', null),
+('dmp-dic','default','master','DMP',1,'spring.rabbitmq.port', '${persagy.rabbitmq.port}', null),
+('dmp-dic','default','master','DMP',1,'spring.rabbitmq.username', '${persagy.rabbitmq.username}', null),
+('dmp-dic','default','master','DMP',1,'spring.rabbitmq.password', '${persagy.rabbitmq.password}', null),
+('dmp-dic','default','master','DMP',1,'spring.rabbitmq.virtual-host', '${persagy.rabbitmq.virtual-host}', null),
+
+('dmp-dic','default','master','DMP',1,'spring.redis.host', '${persagy.redis.host}', null),
+('dmp-dic','default','master','DMP',1,'spring.redis.port', '${persagy.redis.port}', null),
+('dmp-dic','default','master','DMP',1,'spring.redis.password', '${persagy.redis.password}', null),
+('dmp-dic','default','master','DMP',1,'spring.redis.database', '${persagy.redis.database}', null),
+('dmp-dic','default','master','DMP',1,'spring.redis.pool.max-active', '${persagy.redis.max-active}', null),
+('dmp-dic','default','master','DMP',1,'spring.redis.pool.max-idle', '${persagy.redis.max-idle}', null),
+('dmp-dic','default','master','DMP',1,'spring.redis.pool.min-idle', '${persagy.redis.min-idle}', null),
+
+('dmp-dic','default','master','DMP',1,'persagy.dmp.exchange', 'exchange-dmp', null),
+('dmp-dic','default','master','DMP',1,'persagy.dmp.dic.routingKey', 'routing-dmp-dic', null),
+('dmp-dic','default','master','DMP',1,'persagy.dmp.org.routingKey', 'routing-dmp-org', null),
+('dmp-dic','default','master','DMP',1,'persagy.dmp.rwd.routingKey', 'routing-dmp-rwd', null),
+('dmp-dic','default','master','DMP',1,'persagy.dmp.alarm.routingKey', 'routing-dmp-alarm', null),
+('dmp-dic','default','master','DMP',1,'persagy.dmp.task.routingKey', 'routing-dmp-task', null),
+
+('dmp-dic','dev','master','DMP',1,'server.port', '8080', null),
+
+('dmp-dic','dev','master','DMP',1,'eureka.client.service-url.defaultZone','http://frame:123456@localhost:9931/eureka/','注册中心地址'),
+('dmp-dic','dev','master','DMP',1,'eureka.instance.ip-address','localhost',null),
+('dmp-dic','dev','master','DMP',1,'persagy.iot.data.server', 'http://localhost:9981', 'IOT数据查询服务'),
+('dmp-dic','dev','master','DMP',1,'persagy.iot.setting.server', 'http://localhost:9983', 'IOT控制服务'),
+
+('dmp-dic','dev','master','DMP',1,'persagy.mysql.host', 'localhost', null),
+('dmp-dic','dev','master','DMP',1,'persagy.mysql.port', '3301', null),
+('dmp-dic','dev','master','DMP',1,'persagy.mysql.database', 'dmp_test', null),
+('dmp-dic','dev','master','DMP',1,'persagy.mysql.username', 'root', null),
+('dmp-dic','dev','master','DMP',1,'persagy.mysql.password', '123456', null),
+('dmp-dic','dev','master','DMP',1,'persagy.mysql.initialSize', '10', null),
+('dmp-dic','dev','master','DMP',1,'persagy.mysql.maxActive', '300', null),
+
+('dmp-dic','dev','master','DMP',1,'persagy.rabbitmq.host', 'localhost', null),
+('dmp-dic','dev','master','DMP',1,'persagy.rabbitmq.port', '5672', null),
+('dmp-dic','dev','master','DMP',1,'persagy.rabbitmq.username', 'admin', null),
+('dmp-dic','dev','master','DMP',1,'persagy.rabbitmq.password', '123456', null),
+('dmp-dic','dev','master','DMP',1,'persagy.rabbitmq.virtual-host', '/test', null),
+
+('dmp-dic','dev','master','DMP',1,'persagy.redis.host', 'localhost', null),
+('dmp-dic','dev','master','DMP',1,'persagy.redis.port', '5672', null),
+('dmp-dic','dev','master','DMP',1,'persagy.redis.password', '123456', null),
+('dmp-dic','dev','master','DMP',1,'persagy.redis.database', '0', null),
+('dmp-dic','dev','master','DMP',1,'persagy.redis.max-active', '300', null),
+('dmp-dic','dev','master','DMP',1,'persagy.redis.max-idle', '30', null),
+('dmp-dic','dev','master','DMP',1,'persagy.redis.min-idle', '10', null),
+
+('dmp-dic','dev','master','DMP',1,'persagy.dmp.dic.queue', 'queue-dmp-dic', null);
+

+ 116 - 0
dmp-dic/pom.xml

@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>com.persagy</groupId>
+        <artifactId>dmp</artifactId>
+        <version>4.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>dmp-dic</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>dmp-model</artifactId>
+            <version>4.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>dmp-common</artifactId>
+            <version>4.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid</artifactId>
+            <version>1.1.21</version>
+        </dependency>
+        <dependency>
+            <groupId>com.querydsl</groupId>
+            <artifactId>querydsl-apt</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.querydsl</groupId>
+            <artifactId>querydsl-sql</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.querydsl</groupId>
+            <artifactId>querydsl-jpa</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-jpa</artifactId>
+        </dependency>
+
+        <!-- 注册中心 -->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
+        </dependency>
+
+        <!-- 配置中心 -->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-config</artifactId>
+        </dependency>
+
+        <!-- rabbitmq -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-amqp</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <finalName>dmp-dic</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <fork>true</fork>
+                    <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>com.mysema.maven</groupId>
+                <artifactId>apt-maven-plugin</artifactId>
+                <version>1.1.3</version>
+                <executions>
+                    <execution>
+                        <phase>generate-sources</phase>
+                        <goals>
+                            <goal>process</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>target/generated-sources</outputDirectory>
+                            <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 50 - 0
dmp-dic/src/main/java/com/persagy/dmp/dic/DicApp.java

@@ -0,0 +1,50 @@
+package com.persagy.dmp.dic;
+
+import com.persagy.common.criteria.CriteriaUtils;
+import com.persagy.common.criteria.JpaUtils;
+import com.querydsl.jpa.impl.JPAQueryFactory;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.core.env.ConfigurableEnvironment;
+
+import javax.persistence.EntityManager;
+
+/**
+ * @author: yaoll
+ * @date: 2020-10-22
+ * @verison: 1.0
+ */
+
+@Slf4j
+@SpringBootApplication
+@EnableDiscoveryClient
+public class DicApp {
+
+	public static void main(String[] args) {
+		ConfigurableApplicationContext ctx = SpringApplication.run(DicApp.class, args);
+		ConfigurableEnvironment env = ctx.getEnvironment();
+		log.info("datasource: {}",env.getProperty("spring.datasource.url"));
+	}
+
+	@Bean
+	public JPAQueryFactory jpaQueryFactory(EntityManager entityManager) {
+		return new JPAQueryFactory(entityManager);
+	}
+
+	@Bean
+	public CriteriaUtils criteriaUtils(@Autowired JPAQueryFactory jpaQueryFactory) {
+		return new CriteriaUtils(jpaQueryFactory);
+	}
+
+	@Bean
+	public JpaUtils jpaUtils(@Autowired EntityManager entityManager) {
+		return new JpaUtils(entityManager);
+	}
+
+
+}

+ 116 - 0
dmp-dic/src/main/java/com/persagy/dmp/dic/config/RequestLogAspect.java

@@ -0,0 +1,116 @@
+package com.persagy.dmp.dic.config;
+
+import com.persagy.common.json.JacksonMapper;
+import com.persagy.common.web.BaseResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.*;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * @author: yaoll
+ * @date: 2020-09-22
+ * @verison: 1.0
+ */
+@Slf4j
+@Aspect
+@Component
+public class RequestLogAspect {
+
+	private static final ThreadLocal<LogData> dataStorage = new ThreadLocal();
+
+	private static final AtomicInteger flag = new AtomicInteger(10000000);
+
+
+	@Pointcut("execution(public * com.persagy.dmp.*.controller.*.*(..))")
+	public void controllerPoint() {
+	}
+
+	@Before("controllerPoint()")
+	public void doBefore(JoinPoint joinPoint) {
+		ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+		HttpServletRequest request = attributes.getRequest();
+		LogData data = initFlag(request);
+		dataStorage.set(data);
+		log.info("{} REQUEST URL      : {} {}", data.intFlag, data.method, data.url);
+		log.info("{} REQUEST ARGS     : {}", data.intFlag, JacksonMapper.toSimpleJson(prepare(joinPoint)));
+	}
+
+	public static List<Object> prepare(JoinPoint joinPoint) {
+		Object[] args = joinPoint.getArgs();
+		List<Object> list = new LinkedList<>();
+		if (args != null && args.length > 0) {
+			for (Object arg : args) {
+				if (arg instanceof ServletRequest) {
+					continue;
+				}
+				if (arg instanceof ServletResponse) {
+					continue;
+				}
+				if (arg instanceof MultipartFile) {
+					continue;
+				}
+				list.add(arg);
+			}
+		}
+		return list;
+	}
+
+	@AfterReturning(returning = "ret", pointcut = "controllerPoint()")
+	public void doAfterReturning(Object ret) {
+
+		LogData data = dataStorage.get();
+		if (ret != null) {
+			if (ret instanceof BaseResponse) {
+				log.info("{} REQUEST DURATION : {} {} {}", data.intFlag, System.currentTimeMillis() - data.timestamp, ((BaseResponse) ret).getResult(), data.url);
+			} else {
+				log.info("{} REQUEST DURATION : {} {} {}", data.intFlag, System.currentTimeMillis() - data.timestamp, ret.getClass().getName(), data.url);
+			}
+		} else {
+			log.info("{} REQUEST DURATION : {} {} {}", data.intFlag, System.currentTimeMillis() - data.timestamp, "null", data.url);
+		}
+		dataStorage.remove();
+	}
+
+	@AfterThrowing(throwing = "ex", pointcut = "controllerPoint()")
+	public void doAfterThrowing(Throwable ex) {
+		LogData data = dataStorage.get();
+		log.error("{} REQUEST EXCEPTION: {} {} {}", data.intFlag, System.currentTimeMillis() - data.timestamp, data.url, ex.getMessage());
+		dataStorage.remove();
+	}
+
+	private static LogData initFlag(HttpServletRequest request) {
+		LogData data = new LogData();
+		data.timestamp = System.currentTimeMillis();
+		data.method = request.getMethod();
+
+		String requestURI = request.getRequestURI();
+		String queryString = request.getQueryString();
+		data.url = requestURI + (queryString == null ? "" : "?" + queryString);
+
+		int result = flag.addAndGet(1);
+		if (result >= 99999999) {
+			flag.set(10000000);
+		}
+		data.intFlag = result;
+		dataStorage.set(data);
+		return data;
+	}
+
+	private static class LogData {
+		Integer intFlag;
+		Long timestamp;
+		String url;
+		String method;
+	}
+}

+ 46 - 0
dmp-dic/src/main/java/com/persagy/dmp/dic/config/WebConfig.java

@@ -0,0 +1,46 @@
+package com.persagy.dmp.dic.config;
+
+import com.persagy.common.json.JacksonMapper;
+import com.persagy.dmp.config.DmpParameterStorage;
+import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
+import org.springframework.amqp.support.converter.MessageConverter;
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+/**
+ * @author: yaoll
+ * @date: 2020-09-22
+ * @verison: 1.0
+ */
+@Configuration
+public class WebConfig implements WebMvcConfigurer {
+
+	@Bean
+	public DmpParameterStorage dmpParameterStorage() {
+		return new DmpParameterStorage();
+	}
+
+	@Override
+	public void addInterceptors(InterceptorRegistry registry) {
+		// 设置拦截的路径、不拦截的路径、优先级等等
+		registry.addInterceptor(dmpParameterStorage()).addPathPatterns("/**");
+	}
+
+	@Bean
+	public HttpMessageConverters customConverters() {
+		MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
+		converter.setObjectMapper(JacksonMapper.nonEmptyMapper);
+		return new HttpMessageConverters(converter);
+	}
+
+	// JMS 使用
+	@Bean
+	public MessageConverter customMessageConvert() {
+		return new Jackson2JsonMessageConverter();
+	}
+
+}

+ 48 - 0
dmp-dic/src/main/java/com/persagy/dmp/dic/controller/DtDataController.java

@@ -0,0 +1,48 @@
+package com.persagy.dmp.dic.controller;
+
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.dic.model.DtDataModel;
+import com.persagy.dmp.dic.model.DtTypeModel;
+import com.persagy.dmp.dic.service.DtDataService;
+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;
+
+@RestController
+@RequestMapping("/dic/dt/data")
+public class DtDataController {
+
+	@Autowired
+	private DtDataService service;
+	
+	@PostMapping("/query")
+	public PagedResponse<DtDataModel> query(@RequestBody JacksonCriteria criteria) {
+		return service.query(criteria);
+	}
+	
+	@PostMapping("/create")
+	public MapResponse create(@RequestBody DtDataModel param){
+		return service.create(param);
+	}
+	
+	@PostMapping("/update")
+	public MapResponse update(@RequestBody DtDataModel param){
+		return service.update(param);
+	}
+	
+	@PostMapping("/delete")
+	public MapResponse delete(@RequestBody DtDataModel param){
+		return service.delete(param);
+	}
+
+	@PostMapping("/result")
+	public PagedResponse<DtDataModel> query(@RequestBody DtTypeModel dtTypeModel) {
+		PagedResponse<DtDataModel> dtDataModelPagedResponse = service.queryData(dtTypeModel);
+		return dtDataModelPagedResponse;
+	}
+
+}

+ 40 - 0
dmp-dic/src/main/java/com/persagy/dmp/dic/controller/DtDataMapController.java

@@ -0,0 +1,40 @@
+package com.persagy.dmp.dic.controller;
+
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.dic.model.DtDataMapModel;
+import com.persagy.dmp.dic.service.DtDataMapService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author king
+ */
+@RestController
+@RequestMapping("/dic/dt/data/map")
+public class DtDataMapController {
+	@Autowired
+	private DtDataMapService service;
+	
+	@PostMapping("/query")
+	public PagedResponse<DtDataMapModel> query(@RequestBody JacksonCriteria criteria) {
+		return service.query(criteria);
+	}
+	
+	@PostMapping("/create")
+	public MapResponse create(@RequestBody DtDataMapModel param){
+		return service.create(param);
+	}
+	
+	@PostMapping("/update")
+	public MapResponse update(@RequestBody DtDataMapModel param){
+		return service.update(param);
+	}
+	
+	@PostMapping("/delete")
+	public MapResponse delete(@RequestBody DtDataMapModel param){
+		return service.delete(param);
+	}
+
+}

+ 39 - 0
dmp-dic/src/main/java/com/persagy/dmp/dic/controller/DtTypeController.java

@@ -0,0 +1,39 @@
+package com.persagy.dmp.dic.controller;
+
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.dic.model.DtTypeModel;
+import com.persagy.dmp.dic.service.DtTypeService;
+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;
+@RestController
+@RequestMapping("/dic/dt/type")
+public class DtTypeController {
+	@Autowired
+	private DtTypeService service;
+	
+	@PostMapping("/query")
+	public PagedResponse<DtTypeModel> query(@RequestBody JacksonCriteria criteria) {
+		return service.query(criteria);
+	}
+	
+	@PostMapping("/create")
+	public MapResponse create(@RequestBody DtTypeModel param){
+		return service.create(param);
+	}
+	
+	@PostMapping("/update")
+	public MapResponse update(@RequestBody DtTypeModel param){
+		return service.update(param);
+	}
+	
+	@PostMapping("/delete")
+	public MapResponse delete(@RequestBody DtTypeModel param){
+		return service.delete(param);
+	}
+	
+}

+ 39 - 0
dmp-dic/src/main/java/com/persagy/dmp/dic/controller/KlDataController.java

@@ -0,0 +1,39 @@
+package com.persagy.dmp.dic.controller;
+
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.dic.model.KlDataModel;
+import com.persagy.dmp.dic.service.KlDataService;
+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;
+@RestController
+@RequestMapping("/dic/kl/data")
+public class KlDataController {
+	@Autowired
+	private KlDataService service;
+	
+	@PostMapping("/query")
+	public PagedResponse<KlDataModel> query(@RequestBody JacksonCriteria criteria) {
+		return service.query(criteria);
+	}
+	
+	@PostMapping("/create")
+	public MapResponse create(@RequestBody KlDataModel param){
+		return service.create(param);
+	}
+	
+	@PostMapping("/update")
+	public MapResponse update(@RequestBody KlDataModel param){
+		return service.update(param);
+	}
+	
+	@PostMapping("/delete")
+	public MapResponse delete(@RequestBody KlDataModel param){
+		return service.delete(param);
+	}
+	
+}

+ 39 - 0
dmp-dic/src/main/java/com/persagy/dmp/dic/controller/KlTypeController.java

@@ -0,0 +1,39 @@
+package com.persagy.dmp.dic.controller;
+
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.dic.model.KlTypeModel;
+import com.persagy.dmp.dic.service.KlTypeService;
+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;
+@RestController
+@RequestMapping("/dic/kl/type")
+public class KlTypeController {
+	@Autowired
+	private KlTypeService service;
+	
+	@PostMapping("/query")
+	public PagedResponse<KlTypeModel> query(@RequestBody JacksonCriteria criteria) {
+		return service.query(criteria);
+	}
+	
+	@PostMapping("/create")
+	public MapResponse create(@RequestBody KlTypeModel param){
+		return service.create(param);
+	}
+	
+	@PostMapping("/update")
+	public MapResponse update(@RequestBody KlTypeModel param){
+		return service.update(param);
+	}
+	
+	@PostMapping("/delete")
+	public MapResponse delete(@RequestBody KlTypeModel param){
+		return service.delete(param);
+	}
+	
+}

+ 70 - 0
dmp-dic/src/main/java/com/persagy/dmp/dic/entity/DtData.java

@@ -0,0 +1,70 @@
+package com.persagy.dmp.dic.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+import com.persagy.dmp.dic.model.DtDataModel;
+import org.hibernate.annotations.GenericGenerator;
+import javax.persistence.GeneratedValue;
+import javax.persistence.*;
+import java.util.Date;
+
+@Setter
+@Getter
+@Entity
+@Table(name = "dic_dt_data")
+public class DtData {
+
+	@Id
+	@GeneratedValue(generator = "assignedId")
+	@GenericGenerator(name = "assignedId", strategy = "assigned")
+	private String id;
+	private String dictTypeId;
+	private String parentId;
+	private String type;
+	private String code;
+	private String label;
+	private Integer orderNum;
+	private Integer status;
+	private Date createTime;
+	private String createUser;
+	private Date updateTime;
+	private String updateUser;
+	private String remark;
+
+	public static DtData fromModel(DtDataModel model) {
+		DtData entity = new DtData();
+		entity.setId(model.getId());
+		entity.setDictTypeId(model.getDictTypeId());
+		entity.setParentId(model.getParentId());
+		entity.setType(model.getType());
+		entity.setCode(model.getCode());
+		entity.setLabel(model.getLabel());
+		entity.setOrderNum(model.getOrderNum());
+		entity.setStatus(model.getStatus());
+		entity.setCreateTime(model.getCreateTime());
+		entity.setCreateUser(model.getCreateUser());
+		entity.setUpdateTime(model.getUpdateTime());
+		entity.setUpdateUser(model.getUpdateUser());
+		entity.setRemark(model.getRemark());
+		return entity;
+	}
+
+	public DtDataModel toModel() {
+		DtDataModel model = new DtDataModel();
+		model.setId(this.id);
+		model.setDictTypeId(this.getDictTypeId());
+		model.setParentId(this.getParentId());
+		model.setType(this.getType());
+		model.setCode(this.getCode());
+		model.setLabel(this.getLabel());
+		model.setOrderNum(this.getOrderNum());
+		model.setStatus(this.getStatus());
+		model.setCreateTime(this.getCreateTime());
+		model.setCreateUser(this.getCreateUser());
+		model.setUpdateTime(this.getUpdateTime());
+		model.setUpdateUser(this.getUpdateUser());
+		model.setRemark(this.getRemark());
+		return model;
+	}
+
+}

+ 73 - 0
dmp-dic/src/main/java/com/persagy/dmp/dic/entity/DtDataMap.java

@@ -0,0 +1,73 @@
+package com.persagy.dmp.dic.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+import com.persagy.dmp.dic.model.DtDataMapModel;
+import org.hibernate.annotations.GenericGenerator;
+import javax.persistence.GeneratedValue;
+import javax.persistence.*;
+import java.util.Date;
+
+@Setter
+@Getter
+@Entity
+@Table(name = "dic_dt_data_map")
+public class DtDataMap {
+
+	@Id
+	@GeneratedValue(generator = "assignedId")
+	@GenericGenerator(name = "assignedId", strategy = "assigned")
+	private String id;
+	private String dictDataId;
+	private String type;
+	private String groupCode;
+	private String targetCode;
+	private String label;
+	private String code;
+	private Integer orderNum;
+	private Integer status;
+	private Date createTime;
+	private String createUser;
+	private Date updateTime;
+	private String updateUser;
+	private String remark;
+
+	public static DtDataMap fromModel(DtDataMapModel model) {
+		DtDataMap entity = new DtDataMap();
+		entity.setId(model.getId());
+		entity.setDictDataId(model.getDictDataId());
+		entity.setType(model.getType());
+		entity.setGroupCode(model.getGroupCode());
+		entity.setTargetCode(model.getTargetCode());
+		entity.setLabel(model.getLabel());
+		entity.setCode(model.getCode());
+		entity.setOrderNum(model.getOrderNum());
+		entity.setStatus(model.getStatus());
+		entity.setCreateTime(model.getCreateTime());
+		entity.setCreateUser(model.getCreateUser());
+		entity.setUpdateTime(model.getUpdateTime());
+		entity.setUpdateUser(model.getUpdateUser());
+		entity.setRemark(model.getRemark());
+		return entity;
+	}
+
+	public DtDataMapModel toModel() {
+		DtDataMapModel model = new DtDataMapModel();
+		model.setId(this.id);
+		model.setDictDataId(this.getDictDataId());
+		model.setType(this.getType());
+		model.setGroupCode(this.getGroupCode());
+		model.setTargetCode(this.getTargetCode());
+		model.setLabel(this.getLabel());
+		model.setCode(this.getCode());
+		model.setOrderNum(this.getOrderNum());
+		model.setStatus(this.getStatus());
+		model.setCreateTime(this.getCreateTime());
+		model.setCreateUser(this.getCreateUser());
+		model.setUpdateTime(this.getUpdateTime());
+		model.setUpdateUser(this.getUpdateUser());
+		model.setRemark(this.getRemark());
+		return model;
+	}
+
+}

+ 64 - 0
dmp-dic/src/main/java/com/persagy/dmp/dic/entity/DtType.java

@@ -0,0 +1,64 @@
+package com.persagy.dmp.dic.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+import com.persagy.dmp.dic.model.DtTypeModel;
+import org.hibernate.annotations.GenericGenerator;
+import javax.persistence.GeneratedValue;
+import javax.persistence.*;
+import java.util.Date;
+
+@Setter
+@Getter
+@Entity
+@Table(name = "dic_dt_type")
+public class DtType {
+
+	@Id
+	@GeneratedValue(generator = "assignedId")
+	@GenericGenerator(name = "assignedId", strategy = "assigned")
+	private String id;
+	private String groupCode;
+	private String type;
+	private String name;
+	private String description;
+	private Integer status;
+	private Date createTime;
+	private String createUser;
+	private Date updateTime;
+	private String updateUser;
+	private String remark;
+
+	public static DtType fromModel(DtTypeModel model) {
+		DtType entity = new DtType();
+		entity.setId(model.getId());
+		entity.setGroupCode(model.getGroupCode());
+		entity.setType(model.getType());
+		entity.setName(model.getName());
+		entity.setDescription(model.getDescription());
+		entity.setStatus(model.getStatus());
+		entity.setCreateTime(model.getCreateTime());
+		entity.setCreateUser(model.getCreateUser());
+		entity.setUpdateTime(model.getUpdateTime());
+		entity.setUpdateUser(model.getUpdateUser());
+		entity.setRemark(model.getRemark());
+		return entity;
+	}
+
+	public DtTypeModel toModel() {
+		DtTypeModel model = new DtTypeModel();
+		model.setId(this.id);
+		model.setGroupCode(this.getGroupCode());
+		model.setType(this.getType());
+		model.setName(this.getName());
+		model.setDescription(this.getDescription());
+		model.setStatus(this.getStatus());
+		model.setCreateTime(this.getCreateTime());
+		model.setCreateUser(this.getCreateUser());
+		model.setUpdateTime(this.getUpdateTime());
+		model.setUpdateUser(this.getUpdateUser());
+		model.setRemark(this.getRemark());
+		return model;
+	}
+
+}

+ 70 - 0
dmp-dic/src/main/java/com/persagy/dmp/dic/entity/KlData.java

@@ -0,0 +1,70 @@
+package com.persagy.dmp.dic.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+import com.persagy.dmp.dic.model.KlDataModel;
+import org.hibernate.annotations.GenericGenerator;
+import javax.persistence.GeneratedValue;
+import javax.persistence.*;
+import java.util.Date;
+
+@Setter
+@Getter
+@Entity
+@Table(name = "dic_kl_data")
+public class KlData {
+
+	@Id
+	@GeneratedValue(generator = "assignedId")
+	@GenericGenerator(name = "assignedId", strategy = "assigned")
+	private String id;
+	private String klTypeCode;
+	private String klTypeName;
+	private String parentId;
+	private String code;
+	private String label;
+	private String value;
+	private Integer status;
+	private Date createTime;
+	private String createUser;
+	private Date updateTime;
+	private String updateUser;
+	private String remark;
+
+	public static KlData fromModel(KlDataModel model) {
+		KlData entity = new KlData();
+		entity.setId(model.getId());
+		entity.setKlTypeCode(model.getKlTypeCode());
+		entity.setKlTypeName(model.getKlTypeName());
+		entity.setParentId(model.getParentId());
+		entity.setCode(model.getCode());
+		entity.setLabel(model.getLabel());
+		entity.setValue(model.getValue());
+		entity.setStatus(model.getStatus());
+		entity.setCreateTime(model.getCreateTime());
+		entity.setCreateUser(model.getCreateUser());
+		entity.setUpdateTime(model.getUpdateTime());
+		entity.setUpdateUser(model.getUpdateUser());
+		entity.setRemark(model.getRemark());
+		return entity;
+	}
+
+	public KlDataModel toModel() {
+		KlDataModel model = new KlDataModel();
+		model.setId(this.id);
+		model.setKlTypeCode(this.getKlTypeCode());
+		model.setKlTypeName(this.getKlTypeName());
+		model.setParentId(this.getParentId());
+		model.setCode(this.getCode());
+		model.setLabel(this.getLabel());
+		model.setValue(this.getValue());
+		model.setStatus(this.getStatus());
+		model.setCreateTime(this.getCreateTime());
+		model.setCreateUser(this.getCreateUser());
+		model.setUpdateTime(this.getUpdateTime());
+		model.setUpdateUser(this.getUpdateUser());
+		model.setRemark(this.getRemark());
+		return model;
+	}
+
+}

+ 61 - 0
dmp-dic/src/main/java/com/persagy/dmp/dic/entity/KlType.java

@@ -0,0 +1,61 @@
+package com.persagy.dmp.dic.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+import com.persagy.dmp.dic.model.KlTypeModel;
+import org.hibernate.annotations.GenericGenerator;
+import javax.persistence.GeneratedValue;
+import javax.persistence.*;
+import java.util.Date;
+
+@Setter
+@Getter
+@Entity
+@Table(name = "dic_kl_type")
+public class KlType {
+
+	@Id
+	@GeneratedValue(generator = "assignedId")
+	@GenericGenerator(name = "assignedId", strategy = "assigned")
+	private String id;
+	private String code;
+	private String name;
+	private String description;
+	private Integer status;
+	private Date createTime;
+	private String createUser;
+	private Date updateTime;
+	private String updateUser;
+	private String remark;
+
+	public static KlType fromModel(KlTypeModel model) {
+		KlType entity = new KlType();
+		entity.setId(model.getId());
+		entity.setCode(model.getCode());
+		entity.setName(model.getName());
+		entity.setDescription(model.getDescription());
+		entity.setStatus(model.getStatus());
+		entity.setCreateTime(model.getCreateTime());
+		entity.setCreateUser(model.getCreateUser());
+		entity.setUpdateTime(model.getUpdateTime());
+		entity.setUpdateUser(model.getUpdateUser());
+		entity.setRemark(model.getRemark());
+		return entity;
+	}
+
+	public KlTypeModel toModel() {
+		KlTypeModel model = new KlTypeModel();
+		model.setId(this.id);
+		model.setCode(this.getCode());
+		model.setName(this.getName());
+		model.setDescription(this.getDescription());
+		model.setStatus(this.getStatus());
+		model.setCreateTime(this.getCreateTime());
+		model.setCreateUser(this.getCreateUser());
+		model.setUpdateTime(this.getUpdateTime());
+		model.setUpdateUser(this.getUpdateUser());
+		model.setRemark(this.getRemark());
+		return model;
+	}
+
+}

+ 26 - 0
dmp-dic/src/main/java/com/persagy/dmp/dic/model/DtDataMapModel.java

@@ -0,0 +1,26 @@
+package com.persagy.dmp.dic.model;
+
+import lombok.Getter;
+import lombok.Setter;
+import java.util.Date;
+
+@Setter
+@Getter
+public class DtDataMapModel {
+
+	private String id;
+	private String dictDataId;
+	private String type;
+	private String groupCode;
+	private String targetCode;
+	private String label;
+	private String code;
+	private Integer orderNum;
+	private Integer status;
+	private Date createTime;
+	private String createUser;
+	private Date updateTime;
+	private String updateUser;
+	private String remark;
+
+}

+ 25 - 0
dmp-dic/src/main/java/com/persagy/dmp/dic/model/DtDataModel.java

@@ -0,0 +1,25 @@
+package com.persagy.dmp.dic.model;
+
+import lombok.Getter;
+import lombok.Setter;
+import java.util.Date;
+
+@Setter
+@Getter
+public class DtDataModel {
+
+	private String id;
+	private String dictTypeId;
+	private String parentId;
+	private String type;
+	private String code;
+	private String label;
+	private Integer orderNum;
+	private Integer status;
+	private Date createTime;
+	private String createUser;
+	private Date updateTime;
+	private String updateUser;
+	private String remark;
+
+}

+ 23 - 0
dmp-dic/src/main/java/com/persagy/dmp/dic/model/DtTypeModel.java

@@ -0,0 +1,23 @@
+package com.persagy.dmp.dic.model;
+
+import lombok.Getter;
+import lombok.Setter;
+import java.util.Date;
+
+@Setter
+@Getter
+public class DtTypeModel {
+
+	private String id;
+	private String groupCode;
+	private String type;
+	private String name;
+	private String description;
+	private Integer status;
+	private Date createTime;
+	private String createUser;
+	private Date updateTime;
+	private String updateUser;
+	private String remark;
+
+}

+ 25 - 0
dmp-dic/src/main/java/com/persagy/dmp/dic/model/KlDataModel.java

@@ -0,0 +1,25 @@
+package com.persagy.dmp.dic.model;
+
+import lombok.Getter;
+import lombok.Setter;
+import java.util.Date;
+
+@Setter
+@Getter
+public class KlDataModel {
+
+	private String id;
+	private String klTypeCode;
+	private String klTypeName;
+	private String parentId;
+	private String code;
+	private String label;
+	private String value;
+	private Integer status;
+	private Date createTime;
+	private String createUser;
+	private Date updateTime;
+	private String updateUser;
+	private String remark;
+
+}

+ 22 - 0
dmp-dic/src/main/java/com/persagy/dmp/dic/model/KlTypeModel.java

@@ -0,0 +1,22 @@
+package com.persagy.dmp.dic.model;
+
+import lombok.Getter;
+import lombok.Setter;
+import java.util.Date;
+
+@Setter
+@Getter
+public class KlTypeModel {
+
+	private String id;
+	private String code;
+	private String name;
+	private String description;
+	private Integer status;
+	private Date createTime;
+	private String createUser;
+	private Date updateTime;
+	private String updateUser;
+	private String remark;
+
+}

+ 9 - 0
dmp-dic/src/main/java/com/persagy/dmp/dic/repository/DtDataMapRepository.java

@@ -0,0 +1,9 @@
+package com.persagy.dmp.dic.repository;
+
+import com.persagy.dmp.dic.entity.DtDataMap;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.querydsl.QuerydslPredicateExecutor;
+
+public interface DtDataMapRepository extends JpaRepository<DtDataMap, String>, QuerydslPredicateExecutor<DtDataMap>{
+}
+

+ 9 - 0
dmp-dic/src/main/java/com/persagy/dmp/dic/repository/DtDataRepository.java

@@ -0,0 +1,9 @@
+package com.persagy.dmp.dic.repository;
+
+import com.persagy.dmp.dic.entity.DtData;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.querydsl.QuerydslPredicateExecutor;
+
+public interface DtDataRepository extends JpaRepository<DtData, String>, QuerydslPredicateExecutor<DtData>{
+}
+

+ 9 - 0
dmp-dic/src/main/java/com/persagy/dmp/dic/repository/DtTypeRepository.java

@@ -0,0 +1,9 @@
+package com.persagy.dmp.dic.repository;
+
+import com.persagy.dmp.dic.entity.DtType;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.querydsl.QuerydslPredicateExecutor;
+
+public interface DtTypeRepository extends JpaRepository<DtType, String>, QuerydslPredicateExecutor<DtType>{
+}
+

+ 9 - 0
dmp-dic/src/main/java/com/persagy/dmp/dic/repository/KlDataRepository.java

@@ -0,0 +1,9 @@
+package com.persagy.dmp.dic.repository;
+
+import com.persagy.dmp.dic.entity.KlData;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.querydsl.QuerydslPredicateExecutor;
+
+public interface KlDataRepository extends JpaRepository<KlData, String>, QuerydslPredicateExecutor<KlData>{
+}
+

+ 9 - 0
dmp-dic/src/main/java/com/persagy/dmp/dic/repository/KlTypeRepository.java

@@ -0,0 +1,9 @@
+package com.persagy.dmp.dic.repository;
+
+import com.persagy.dmp.dic.entity.KlType;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.querydsl.QuerydslPredicateExecutor;
+
+public interface KlTypeRepository extends JpaRepository<KlType, String>, QuerydslPredicateExecutor<KlType>{
+}
+

+ 64 - 0
dmp-dic/src/main/java/com/persagy/dmp/dic/service/DicBaseService.java

@@ -0,0 +1,64 @@
+package com.persagy.dmp.dic.service;
+
+import com.persagy.common.web.BaseResponse;
+import com.persagy.dmp.config.DmpParameterStorage;
+import com.persagy.dmp.dic.repository.*;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.UUID;
+
+public class DicBaseService {
+
+    @Autowired
+    protected DtTypeRepository dtTypeRepository;
+
+    @Autowired
+    protected DtDataRepository dtDataRepository;
+
+    @Autowired
+    protected DtDataMapRepository dtDataMapRepository;
+
+    @Autowired
+    protected KlTypeRepository klTypeRepository;
+
+    @Autowired
+    protected KlDataRepository klDataRepository;
+
+    public static final String USER_ID = "userId";
+    public static final String GROUP_CODE = "groupCode";
+    public static final String PROJECT_ID = "projectId";
+
+    @Getter
+    @Setter
+    protected static class DicParam {
+        String groupCode;
+        String userId;
+    }
+
+    protected <T> DicParam prepareParam(BaseResponse<T> resp, String... requiredColumns) {
+        DicParam dicParam = new DicParam();
+        dicParam.groupCode = DmpParameterStorage.getGroupCode();
+        dicParam.userId = DmpParameterStorage.getUserId();
+        if(requiredColumns != null){
+            for (int i = 0; i < requiredColumns.length; i++) {
+                String column = requiredColumns[i];
+                if (USER_ID.equals(column) && (dicParam.userId == null || dicParam.userId.isEmpty())) {
+                    resp.setFail("请求地址中的 userId 必须有值");
+                    return null;
+                }
+                if (GROUP_CODE.equals(column) && (dicParam.groupCode == null || dicParam.groupCode.isEmpty())){
+                    resp.setFail("请求地址中的 groupCode 必须有值");
+                    return null;
+                }
+            }
+        }
+        return dicParam;
+    }
+
+    public String getUUID(){
+        return UUID.randomUUID().toString().replace("-", "");
+    }
+
+}

+ 192 - 0
dmp-dic/src/main/java/com/persagy/dmp/dic/service/DtDataMapService.java

@@ -0,0 +1,192 @@
+package com.persagy.dmp.dic.service;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dmp.dic.model.DtDataModel;
+import com.querydsl.core.types.dsl.BooleanExpression;
+import com.persagy.common.criteria.CriteriaUtils;
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.common.web.MapResponse;
+import javax.transaction.Transactional;
+
+import org.springframework.data.domain.Example;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+import com.persagy.dmp.dic.model.DtDataMapModel;
+import org.springframework.beans.factory.annotation.Autowired;
+import com.persagy.dmp.dic.entity.*;
+import com.persagy.dmp.dic.repository.DtDataMapRepository;
+
+@Service
+public class DtDataMapService extends DicBaseService {
+
+	@Autowired
+	private DtDataMapRepository dtDataMapRepository;
+
+	@Autowired
+	private CriteriaUtils criteriaUtils;
+
+	private List<BooleanExpression> parse(ObjectNode criteria) {
+		// TODO
+		return null;
+	}
+
+	public PagedResponse<DtDataMapModel> query(JacksonCriteria criteria) {
+		MapResponse response = new MapResponse();
+		PagedResponse<DtDataMapModel> result = new PagedResponse<>();
+
+		DicParam dicParam = prepareParam(response, GROUP_CODE, USER_ID);
+		if (!response.success()) {
+			result.setFail(response.getMessage());
+			return result;
+		}
+		criteria.add("groupCode", dicParam.groupCode);
+		PagedResponse<DtDataMap> resp = criteriaUtils.query(QDtDataMap.dtDataMap, this::parse, criteria);
+
+		result.setCount(resp.getCount());
+		List<DtDataMap> dataList = resp.getData();
+		if (dataList != null && dataList.size() > 0) {
+			List<DtDataMapModel> collect = dataList.stream().map(entity -> {
+				DtDataMapModel model = entity.toModel();
+				return model;
+			}).collect(Collectors.toList());
+			result.setData(collect);
+		}
+		return result;
+	}
+
+	@Transactional
+	public MapResponse create(DtDataMapModel param) {
+		MapResponse response = new MapResponse();
+		// TODO
+		DicParam dicParam = prepareParam(response, GROUP_CODE, USER_ID);
+		if (!response.success()) {
+			return response;
+		}
+		if (dicParam == null) {
+			response.setFail("url 参数不能为空!");
+			return response;
+		}
+		if (param == null){
+			response.setFail("无数据!");
+			return response;
+		}
+		DtDataMap entity = DtDataMap.fromModel(param);
+		entity.setId(getUUID());
+		if (entity.getCode() == null){
+			response.setFail("code 不能为空!");
+			return response;
+		}
+		if (entity.getLabel() == null){
+			response.setFail("label 不能为空!");
+			return response;
+		}
+		if (entity.getTargetCode() == null){
+			response.setFail("targetCode 不能为空!");
+			return response;
+		}
+		if (entity.getDictDataId() == null){
+			response.setFail("dictDataId 不能为空!");
+			return response;
+		}
+		if (entity.getType() == null){
+			response.setFail("type 不能为空!");
+			return response;
+		}
+		entity.setStatus(1);
+		entity.setCreateUser(dicParam.userId);
+		entity.setCreateTime(new Date());
+		dtDataMapRepository.save(entity);
+		response.add("id", entity.getId());
+		return response;
+	}
+
+	@Transactional
+	public MapResponse update(DtDataMapModel param) {
+		MapResponse response = new MapResponse();
+		// TODO
+		DicParam dicParam = prepareParam(response, GROUP_CODE, USER_ID);
+		if (!response.success()) {
+			return response;
+		}
+		if (dicParam == null) {
+			response.setFail("url 参数不能为空!");
+			return response;
+		}
+		if (param == null){
+			response.setFail("无数据!");
+			return response;
+		}
+		if (param.getId() == null){
+			response.setFail("更新操作id不能为空!");
+			return response;
+		}
+		Optional<DtDataMap> optional = dtDataMapRepository.findById(param.getId());
+		if (!optional.isPresent()){
+			response.setFail("更新的数据不存在!");
+			return response;
+		}
+		DtDataMap one = optional.get();
+		if (param.getDictDataId() != null){
+			one.setDictDataId(param.getDictDataId());
+		}
+		if (param.getTargetCode() != null){
+			one.setTargetCode(param.getTargetCode());
+		}
+		if (param.getLabel() != null){
+			one.setLabel(param.getLabel());
+		}
+		if (param.getOrderNum() != null){
+			one.setOrderNum(param.getOrderNum());
+		}
+		if (param.getStatus() != null){
+			one.setStatus(param.getStatus());
+		}
+		one.setUpdateUser(dicParam.userId);
+		one.setUpdateTime(new Date());
+
+		dtDataMapRepository.save(one);
+		response.add("id", one.getId());
+
+		return response;
+	}
+
+	@Transactional
+	public MapResponse delete(DtDataMapModel param) {
+		MapResponse response = new MapResponse();
+		// TODO
+		DicParam dicParam = prepareParam(response, GROUP_CODE, USER_ID);
+		if (!response.success()) {
+			return response;
+		}
+		if (dicParam == null) {
+			response.setFail("url 参数不能为空!");
+			return response;
+		}
+		if (param == null){
+			response.setFail("无数据!");
+			return response;
+		}
+		if (param.getId() == null){
+			response.setFail("删除操作id不能为空!");
+			return response;
+		}
+		Optional<DtDataMap> optional = dtDataMapRepository.findById(param.getId());
+		if (!optional.isPresent()){
+			response.setFail("删除的数据不存在!");
+			return response;
+		}
+		DtDataMap one = optional.get();
+
+		one.setStatus(0);
+		one.setUpdateTime(new Date());
+		one.setUpdateUser(dicParam.userId);
+
+		dtDataMapRepository.save(one);
+		response.add("id", one.getId());
+		return response;
+	}
+}
+

+ 245 - 0
dmp-dic/src/main/java/com/persagy/dmp/dic/service/DtDataService.java

@@ -0,0 +1,245 @@
+package com.persagy.dmp.dic.service;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.Lists;
+import com.persagy.dmp.dic.model.DtTypeModel;
+import com.persagy.dmp.dic.repository.DtDataMapRepository;
+import com.querydsl.core.types.dsl.BooleanExpression;
+import com.persagy.common.criteria.CriteriaUtils;
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.common.web.MapResponse;
+import javax.transaction.Transactional;
+
+import com.querydsl.sql.types.Null;
+import org.springframework.data.domain.Example;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+import com.persagy.dmp.dic.model.DtDataModel;
+import org.springframework.beans.factory.annotation.Autowired;
+import com.persagy.dmp.dic.entity.*;
+import com.persagy.dmp.dic.repository.DtDataRepository;
+
+@Service
+public class DtDataService extends DicBaseService {
+
+	@Autowired
+	private DtDataRepository dtDataRepository;
+
+	@Autowired
+	private DtDataMapRepository dtDataMapRepository;
+
+	@Autowired
+	private CriteriaUtils criteriaUtils;
+
+	private List<BooleanExpression> parse(ObjectNode criteria) {
+		// TODO
+		return null;
+	}
+
+	public PagedResponse<DtDataModel> query(JacksonCriteria criteria) {
+		MapResponse response = new MapResponse();
+		PagedResponse<DtDataModel> result = new PagedResponse<>();
+
+		DicParam dicParam = prepareParam(response, GROUP_CODE, USER_ID);
+		if (!response.success()) {
+			result.setFail(response.getMessage());
+			return result;
+		}
+		criteria.add("groupCode", dicParam.groupCode);
+
+		PagedResponse<DtData> resp = criteriaUtils.query(QDtData.dtData, this::parse, criteria);
+		result.setCount(resp.getCount());
+		List<DtData> dataList = resp.getData();
+		if (dataList != null && dataList.size() > 0) {
+			List<DtDataModel> collect = dataList.stream().map(entity -> {
+				DtDataModel model = entity.toModel();
+				return model;
+			}).collect(Collectors.toList());
+			result.setData(collect);
+		}
+		return result;
+	}
+
+	@Transactional
+	public MapResponse create(DtDataModel param) {
+		MapResponse response = new MapResponse();
+		// TODO
+		DicParam dicParam = prepareParam(response, GROUP_CODE, USER_ID);
+		if (!response.success()) {
+			return response;
+		}
+		if (dicParam == null) {
+			response.setFail("url 参数不能为空!");
+			return response;
+		}
+		if (param == null){
+			response.setFail("无数据!");
+			return response;
+		}
+		DtData entity = DtData.fromModel(param);
+		entity.setId(getUUID());
+		if (entity.getCode() == null){
+			response.setFail("code 不能为空!");
+			return response;
+		}
+		if (entity.getDictTypeId() == null){
+			response.setFail("dictType 不能为空!");
+			return response;
+		}
+		if (entity.getLabel() == null){
+			response.setFail("label 不能为空!");
+			return response;
+		}
+		if (entity.getType() == null){
+			response.setFail("type 不能为空!");
+			return response;
+		}
+		entity.setStatus(1);
+		entity.setCreateUser(dicParam.userId);
+		entity.setCreateTime(new Date());
+		dtDataRepository.save(entity);
+		response.add("id", entity.getId());
+
+		return response;
+	}
+
+	@Transactional
+	public MapResponse update(DtDataModel param) {
+		MapResponse response = new MapResponse();
+		// TODO
+		DicParam dicParam = prepareParam(response, GROUP_CODE, USER_ID);
+		if (!response.success()) {
+			return response;
+		}
+		if (dicParam == null) {
+			response.setFail("url 参数不能为空!");
+			return response;
+		}
+		if (param == null){
+			response.setFail("无数据!");
+			return response;
+		}
+		if (param.getId() == null){
+			response.setFail("更新操作id不能为空!");
+			return response;
+		}
+		Optional<DtData> optional = dtDataRepository.findById(param.getId());
+		if (!optional.isPresent()){
+			response.setFail("");
+			return response;
+		}
+		DtData one = optional.get();
+		if (param.getCode() != null){
+			one.setCode(param.getCode());
+		}
+		if (param.getLabel() != null){
+			one.setLabel(param.getLabel());
+		}
+		if (param.getParentId() != null){
+			one.setParentId(param.getParentId());
+		}
+		if (param.getOrderNum() != null){
+			one.setOrderNum(param.getOrderNum());
+		}
+		if (param.getStatus() != null){
+			one.setStatus(param.getStatus());
+		}
+		one.setUpdateUser(dicParam.userId);
+		one.setUpdateTime(new Date());
+
+		dtDataRepository.save(one);
+		response.add("id", one.getId());
+		return response;
+	}
+
+	@Transactional
+	public MapResponse delete(DtDataModel param) {
+		MapResponse response = new MapResponse();
+		// TODO
+		DicParam dicParam = prepareParam(response, GROUP_CODE, USER_ID);
+		if (!response.success()) {
+			return response;
+		}
+		if (dicParam == null) {
+			response.setFail("url 参数不能为空!");
+			return response;
+		}
+		if (param == null){
+			response.setFail("无数据!");
+			return response;
+		}
+		if (param.getId() == null){
+			response.setFail("删除操作id不能为空!");
+			return response;
+		}
+		Optional<DtData> optional = dtDataRepository.findById(param.getId());
+		if (!optional.isPresent()){
+			response.setFail("");
+			return response;
+		}
+		DtData one = optional.get();
+		one.setStatus(0);
+		one.setUpdateTime(new Date());
+		one.setUpdateUser(dicParam.userId);
+		dtDataRepository.save(one);
+		response.add("id", one.getId());
+		return response;
+	}
+
+	/**
+	 * 返回映射表替代字典数据的数据集
+	 * @param dtTypeModel
+	 * @return
+	 */
+	@Transactional
+	public PagedResponse<DtDataModel> queryData(DtTypeModel dtTypeModel) {
+
+		PagedResponse<DtDataModel> result = new PagedResponse<>();
+
+		String type = dtTypeModel.getType();
+		String groupCode = dtTypeModel.getGroupCode();
+		Integer status = dtTypeModel.getStatus();
+
+		QDtData dtData = QDtData.dtData;
+		BooleanExpression dtDataEq = dtData.type.eq(type);
+		if (status != null){
+			dtDataEq = dtDataEq.and(dtData.status.eq(status));
+		}
+
+		Iterable<DtData> dtDataIterable = dtDataRepository.findAll(dtDataEq);
+		List<DtData> dtDatas = Lists.newArrayList(dtDataIterable);
+
+		QDtDataMap dtDataMap = QDtDataMap.dtDataMap;
+		BooleanExpression dtDataMapEq = dtDataMap.type.eq(type).and(dtDataMap.groupCode.eq(groupCode));
+		if (status != null){
+			dtDataMapEq = dtDataMapEq.and(dtDataMap.status.eq(status));
+		}
+		Iterable<DtDataMap> dtDataMapIterable = dtDataMapRepository.findAll(dtDataMapEq);
+		if (dtDataMapIterable != null) {
+			List<DtDataMap> dtDataMaps = Lists.newArrayList(dtDataMapIterable);
+			Map<String, DtDataMap> dtDataMapMap = new HashMap<>(dtDataMaps.size());
+			for (DtDataMap dataMap : dtDataMaps) {
+				dtDataMapMap.put(dataMap.getTargetCode(), dataMap);
+			}
+			for (DtData data : dtDatas) {
+				String code = data.getCode();
+				DtDataMap ddm = dtDataMapMap.get(code);
+				if (ddm == null){
+					continue;
+				}
+				data.setCode(ddm.getCode());
+				data.setLabel(ddm.getLabel());
+			}
+		}
+
+		result.setCount(Long.valueOf(dtDatas.size()));
+		List<DtDataModel> collect = dtDatas.stream().map(DtData::toModel).collect(Collectors.toList());
+		result.setData(collect);
+
+		return result;
+	}
+}
+

+ 184 - 0
dmp-dic/src/main/java/com/persagy/dmp/dic/service/DtTypeService.java

@@ -0,0 +1,184 @@
+package com.persagy.dmp.dic.service;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.common.criteria.CriteriaUtils;
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.dic.entity.DtType;
+import com.persagy.dmp.dic.entity.QDtType;
+import com.persagy.dmp.dic.model.DtTypeModel;
+import com.persagy.dmp.dic.repository.DtTypeRepository;
+import com.querydsl.core.types.dsl.BooleanExpression;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.transaction.Transactional;
+import java.util.Date;
+import java.util.List;
+import java.util.Optional;
+import java.util.UUID;
+import java.util.stream.Collectors;
+
+@Service
+public class DtTypeService extends DicBaseService {
+
+	@Autowired
+	private DtTypeRepository dtTypeRepository;
+
+	@Autowired
+	private CriteriaUtils criteriaUtils;
+
+	private List<BooleanExpression> parse(ObjectNode criteria) {
+		// TODO
+		return null;
+	}
+
+	public PagedResponse<DtTypeModel> query(JacksonCriteria criteria) {
+		MapResponse response = new MapResponse();
+		PagedResponse<DtTypeModel> result = new PagedResponse<>();
+		DicParam dicParam = prepareParam(response, GROUP_CODE, USER_ID);
+		if (!response.success()) {
+			result.setFail(response.getMessage());
+			return result;
+		}
+		criteria.add("groupCode", dicParam.groupCode);
+
+		PagedResponse<DtType> resp = criteriaUtils.query(QDtType.dtType, this::parse, criteria);
+		result.setCount(resp.getCount());
+		List<DtType> dataList = resp.getData();
+		if (dataList != null && dataList.size() > 0) {
+			List<DtTypeModel> collect = dataList.stream().map(entity -> {
+				DtTypeModel model = entity.toModel();
+				return model;
+			}).collect(Collectors.toList());
+			result.setData(collect);
+		}
+		return result;
+	}
+
+	@Transactional
+	public MapResponse create(DtTypeModel param) {
+		MapResponse response = new MapResponse();
+		// TODO
+		DicParam dicParam = prepareParam(response, GROUP_CODE, USER_ID);
+		if (!response.success()) {
+			return response;
+		}
+		if (dicParam == null) {
+			response.setFail("url 参数不能为空!");
+			return response;
+		}
+		if (param == null){
+			response.setFail("无数据!");
+			return response;
+		}
+
+		DtType entity = DtType.fromModel(param);
+		entity.setId(getUUID());
+		if (entity.getType() == null){
+			response.setFail("type 不能为空!");
+			return response;
+		}
+		if (entity.getName() == null){
+			response.setFail("name 不能为空!");
+			return response;
+		}
+		entity.setStatus(1);
+		entity.setGroupCode(dicParam.groupCode);
+		entity.setCreateUser(dicParam.userId);
+		entity.setCreateTime(new Date());
+		dtTypeRepository.save(entity);
+		response.add("id", entity.getId());
+		return response;
+	}
+
+	@Transactional
+	public MapResponse update(DtTypeModel param) {
+		MapResponse response = new MapResponse();
+		// TODO
+		DicParam dicParam = prepareParam(response, GROUP_CODE, USER_ID);
+		if (!response.success()) {
+			return response;
+		}
+		if (dicParam == null) {
+			response.setFail("url 参数不能为空!");
+			return response;
+		}
+		if (param == null){
+			response.setFail("无数据!");
+			return response;
+		}
+		if (param.getId() == null){
+			response.setFail("更新操作id不能为空!");
+			return response;
+		}
+		Optional<DtType> optional = dtTypeRepository.findById(param.getId());
+		if (!optional.isPresent()){
+			response.setFail("数据不存在!");
+			return response;
+		}
+		DtType one = optional.get();
+		if (param.getType() != null){
+			one.setType(param.getType());
+		}
+		if (param.getName() != null){
+			one.setName(param.getName());
+		}
+		if (param.getDescription() != null){
+			one.setDescription(param.getDescription());
+		}
+		if (param.getStatus() != null){
+			one.setStatus(one.getStatus());
+		}
+		if (param.getRemark() != null){
+			one.setRemark(param.getRemark());
+		}
+
+		one.setUpdateUser(dicParam.userId);
+		one.setUpdateTime(new Date());
+		dtTypeRepository.save(one);
+
+		response.add("id", one.getId());
+
+		return response;
+	}
+
+	@Transactional
+	public MapResponse delete(DtTypeModel param) {
+		MapResponse response = new MapResponse();
+		// TODO
+		DicParam dicParam = prepareParam(response, GROUP_CODE, USER_ID);
+		if (!response.success()) {
+			return response;
+		}
+		if (dicParam == null) {
+			response.setFail("url 参数不能为空!");
+			return response;
+		}
+		if (param == null){
+			response.setFail("无数据!");
+			return response;
+		}
+		if (param.getId() == null){
+			response.setFail("删除操作id不能为空!");
+			return response;
+		}
+		Optional<DtType> optional = dtTypeRepository.findById(param.getId());
+		if (!optional.isPresent()){
+			response.setFail("数据不存在!");
+			return response;
+		}
+		DtType one = optional.get();
+
+		one.setStatus(0);
+		one.setUpdateTime(new Date());
+		one.setUpdateUser(dicParam.userId);
+		dtTypeRepository.save(one);
+
+		response.add("id", one.getId());
+
+		return response;
+	}
+}
+

+ 81 - 0
dmp-dic/src/main/java/com/persagy/dmp/dic/service/KlDataService.java

@@ -0,0 +1,81 @@
+package com.persagy.dmp.dic.service;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.common.criteria.CriteriaUtils;
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.dic.entity.KlData;
+import com.persagy.dmp.dic.entity.QKlData;
+import com.persagy.dmp.dic.model.KlDataModel;
+import com.persagy.dmp.dic.repository.KlDataRepository;
+import com.querydsl.core.types.dsl.BooleanExpression;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.transaction.Transactional;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class KlDataService extends DicBaseService {
+
+	@Autowired
+	private KlDataRepository klDataRepository;
+
+	@Autowired
+	private CriteriaUtils criteriaUtils;
+
+	private List<BooleanExpression> parse(ObjectNode criteria) {
+		// TODO
+		return null;
+	}
+
+	public PagedResponse<KlDataModel> query(JacksonCriteria criteria) {
+		PagedResponse<KlData> resp = criteriaUtils.query(QKlData.klData, this::parse, criteria);
+		PagedResponse<KlDataModel> result = new PagedResponse<>();
+		result.setCount(resp.getCount());
+		List<KlData> dataList = resp.getData();
+		if (dataList != null && dataList.size() > 0) {
+			List<KlDataModel> collect = dataList.stream().map(entity -> {
+				KlDataModel model = entity.toModel();
+				return model;
+			}).collect(Collectors.toList());
+			result.setData(collect);
+		}
+		return result;
+	}
+
+	@Transactional
+	public MapResponse create(KlDataModel param) {
+		MapResponse response = new MapResponse();
+		// TODO
+		KlData entity = KlData.fromModel(param);
+		klDataRepository.save(entity);
+		response.add("id", entity.getId());
+		return response;
+	}
+
+	@Transactional
+	public MapResponse update(KlDataModel param) {
+		MapResponse response = new MapResponse();
+		// TODO
+		KlData entity = KlData.fromModel(param);
+		klDataRepository.save(entity);
+		response.add("id", entity.getId());
+		return response;
+	}
+
+	@Transactional
+	public MapResponse delete(KlDataModel param) {
+		MapResponse response = new MapResponse();
+		// TODO
+		KlData entity = KlData.fromModel(param);
+		entity.setStatus(0);
+		klDataRepository.save(entity);
+		response.add("id", entity.getId());
+//		klDataRepository.deleteById(param.getId());
+		return response;
+	}
+}
+

+ 81 - 0
dmp-dic/src/main/java/com/persagy/dmp/dic/service/KlTypeService.java

@@ -0,0 +1,81 @@
+package com.persagy.dmp.dic.service;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.common.criteria.CriteriaUtils;
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.dic.entity.KlType;
+import com.persagy.dmp.dic.entity.QKlType;
+import com.persagy.dmp.dic.model.KlTypeModel;
+import com.persagy.dmp.dic.repository.KlTypeRepository;
+import com.querydsl.core.types.dsl.BooleanExpression;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.transaction.Transactional;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class KlTypeService extends DicBaseService {
+
+	@Autowired
+	private KlTypeRepository klTypeRepository;
+
+	@Autowired
+	private CriteriaUtils criteriaUtils;
+
+	private List<BooleanExpression> parse(ObjectNode criteria) {
+		// TODO
+		return null;
+	}
+
+	public PagedResponse<KlTypeModel> query(JacksonCriteria criteria) {
+		PagedResponse<KlType> resp = criteriaUtils.query(QKlType.klType, this::parse, criteria);
+		PagedResponse<KlTypeModel> result = new PagedResponse<>();
+		result.setCount(resp.getCount());
+		List<KlType> dataList = resp.getData();
+		if (dataList != null && dataList.size() > 0) {
+			List<KlTypeModel> collect = dataList.stream().map(entity -> {
+				KlTypeModel model = entity.toModel();
+				return model;
+			}).collect(Collectors.toList());
+			result.setData(collect);
+		}
+		return result;
+	}
+
+	@Transactional
+	public MapResponse create(KlTypeModel param) {
+		MapResponse response = new MapResponse();
+		// TODO
+		KlType entity = KlType.fromModel(param);
+		klTypeRepository.save(entity);
+		response.add("id", entity.getId());
+		return response;
+	}
+
+	@Transactional
+	public MapResponse update(KlTypeModel param) {
+		MapResponse response = new MapResponse();
+		// TODO
+		KlType entity = KlType.fromModel(param);
+		klTypeRepository.save(entity);
+		response.add("id", entity.getId());
+		return response;
+	}
+
+	@Transactional
+	public MapResponse delete(KlTypeModel param) {
+		MapResponse response = new MapResponse();
+		// TODO
+		KlType entity = KlType.fromModel(param);
+		entity.setStatus(0);
+		klTypeRepository.save(entity);
+		response.add("id", entity.getId());
+//		klTypeRepository.deleteById(param.getId());
+		return response;
+	}
+}
+

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

@@ -0,0 +1,7 @@
+spring:
+  application:
+    name: dmp-dic
+  cloud:
+    config:
+      profile: dev
+      uri: http://localhost:9932

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

@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="60 seconds" debug="false">
+
+    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
+    <property name="log_pattern" value="%-30thread %d{yyyyMMdd HH:mm:ss.SSS} %-5level %logger{140} - %msg%n"/>
+    <property name="app_name" value="dic"/>
+    <springProperty scope="context" name="log_path" source="persagy.log.path"/>
+    <property name="log_file" value="${log_path}/${app_name}"/>
+    <contextName>${app_name}</contextName>
+
+    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
+        <layout class="ch.qos.logback.classic.PatternLayout">
+            <pattern>${log_pattern}</pattern>
+        </layout>
+    </appender>
+
+    <!-- 日志文件 -->
+    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${log_file}-%d{yyyyMMdd}.log</fileNamePattern>
+            <maxHistory>7</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log_pattern}</pattern>
+        </encoder>
+    </appender>
+
+    <logger name="org.hibernate" level="INFO"/>
+    <logger name="org.springframework" level="INFO"/>
+    <logger name="com.netflix" level="WARN"/>
+    <logger name="org.apache.http" level="INFO"/>
+
+    <springProfile name="log-dev">
+        <logger name="org.hibernate.SQL" level="DEBUG"/>
+        <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/>
+        <root level="info">
+            <appender-ref ref="stdout"/>
+        </root>
+    </springProfile>
+
+    <springProfile name="log-test">
+        <logger name="org.hibernate.SQL" level="DEBUG"/>
+        <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/>
+        <root level="info">
+            <appender-ref ref="file"/>
+        </root>
+    </springProfile>
+
+    <springProfile name="log-prod">
+        <root level="info">
+            <appender-ref ref="file"/>
+        </root>
+    </springProfile>
+
+</configuration> 

+ 21 - 0
dmp-model/pom.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>com.persagy</groupId>
+        <artifactId>dmp</artifactId>
+        <version>4.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>com.persagy</groupId>
+    <artifactId>dmp-model</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+        </dependency>
+    </dependencies>
+</project>

+ 25 - 0
dmp-model/src/main/java/com/persagy/dmp/rwd/enums/FuncidCategory.java

@@ -0,0 +1,25 @@
+package com.persagy.dmp.rwd.enums;
+
+/**
+ * @author: yaoll
+ * @date: 2020-09-09
+ * @verison: 1.0
+ */
+public enum FuncidCategory {
+	/**
+	 * 静态量
+	 */
+	STATIC,
+	/**
+	 * 脉冲量
+	 */
+	PULSE,
+	/**
+	 * 阶段量
+	 */
+	GRADATION,
+	/**
+	 * 时序量
+	 */
+	SEQUENTIAL
+}

+ 19 - 0
dmp-model/src/main/java/com/persagy/dmp/rwd/enums/FuncidDataType.java

@@ -0,0 +1,19 @@
+package com.persagy.dmp.rwd.enums;
+
+public enum FuncidDataType {
+
+	INTEGER,
+	DOUBLE,
+	BOOLEAN,
+	STRING,
+	DATETIME,
+	ENUM,
+	MENUM,
+	ATTACHMENT,
+	OBJECT,
+	ENUMREF
+
+}
+
+
+// datautils

+ 12 - 0
dmp-model/src/main/java/com/persagy/dmp/rwd/enums/ObjType.java

@@ -0,0 +1,12 @@
+package com.persagy.dmp.rwd.enums;
+
+/**
+ * @author: yaoll
+ * @date: 2020-09-11
+ * @verison: 1.0
+ */
+public enum ObjType {
+
+	project, building, floor, space, system, equipment, shaft, component, virtual, tool, material
+
+}

+ 16 - 0
dmp-model/src/main/java/com/persagy/dmp/rwd/model/AppClassModel.java

@@ -0,0 +1,16 @@
+package com.persagy.dmp.rwd.model;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Setter
+@Getter
+public class AppClassModel {
+
+	private String id;
+	private String appId;
+	private String groupCode;
+	private String projectId;
+	private String classCode;
+
+}

+ 17 - 0
dmp-model/src/main/java/com/persagy/dmp/rwd/model/AppFuncidModel.java

@@ -0,0 +1,17 @@
+package com.persagy.dmp.rwd.model;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Setter
+@Getter
+public class AppFuncidModel {
+
+	private String id;
+	private String appId;
+	private String groupCode;
+	private String projectId;
+	private String classCode;
+	private String infoCode;
+
+}

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

@@ -0,0 +1,25 @@
+package com.persagy.dmp.rwd.model;
+
+import com.persagy.dmp.rwd.enums.ObjType;
+import lombok.Getter;
+import lombok.Setter;
+
+@Setter
+@Getter
+public class ClassDefModel {
+
+	private String id;
+	private String code;
+	private ObjType objType;
+	private String name;
+	private String aliasCode;
+	private String aliasName;
+	private String type;
+	private String groupCode;
+	private String projectId;
+	private String majorCode;
+	private String systemCode;
+	private String equipmentCode;
+	private String parentCode;
+
+}

+ 49 - 0
dmp-model/src/main/java/com/persagy/dmp/rwd/model/DmpMessage.java

@@ -0,0 +1,49 @@
+package com.persagy.dmp.rwd.model;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author: yaoll
+ * @date: 2020-10-22
+ * @verison: 1.0
+ */
+
+@Getter
+@Setter
+public class DmpMessage {
+
+	private String mid;
+	private String type;
+	private String groupCode;
+	private String projectId;
+	private String targetId;
+	private Integer int1;
+	private Integer int2;
+	private String str1;
+	private String str2;
+	private String sendTime;
+	private String expireTime;
+	private String appId;
+	private String userId;
+	private Map<String, Object> exts;
+
+	public DmpMessage() {
+	}
+
+	public DmpMessage(String type, String targetId) {
+		this.type = type;
+		this.targetId = targetId;
+	}
+
+	public DmpMessage add(String key, Object value) {
+		if (exts == null) {
+			this.exts = new HashMap<>();
+		}
+		this.exts.put(key, value);
+		return this;
+	}
+}

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

@@ -0,0 +1,39 @@
+package com.persagy.dmp.rwd.model;
+
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.persagy.dmp.rwd.enums.FuncidCategory;
+import com.persagy.dmp.rwd.enums.FuncidDataType;
+import lombok.Getter;
+import lombok.Setter;
+
+@Setter
+@Getter
+public class FuncidDefModel {
+
+	private String id;
+	private String code;
+	private String origCode;
+	private String name;
+	private String aliasCode;
+	private String aliasName;
+	private String classCode;
+	private FuncidCategory category;
+	private String type;
+	private String groupCode;
+	private String projectId;
+	private String firstTag;
+	private String secondTag;
+	private String priority;
+	private String inputMode;
+	private String unit;
+	private FuncidDataType dataType;
+	private String origDataType;
+	private Boolean isMultiple;
+	private Boolean isRegion;
+	private String formater;
+	private ArrayNode dataSource;
+	private String note;
+	private Boolean subFlag;
+	private Boolean weakPoint;
+
+}

+ 18 - 0
dmp-model/src/main/java/com/persagy/dmp/rwd/model/GraphDefModel.java

@@ -0,0 +1,18 @@
+package com.persagy.dmp.rwd.model;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Setter
+@Getter
+public class GraphDefModel {
+
+	private String id;
+	private String code;
+	private String name;
+	private String firstCategory;
+	private String secondCategory;
+	private String categoryRemark;
+	private String objectTypes;
+
+}

+ 16 - 0
dmp-model/src/main/java/com/persagy/dmp/rwd/model/GraphInstanceModel.java

@@ -0,0 +1,16 @@
+package com.persagy.dmp.rwd.model;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import lombok.Getter;
+import lombok.Setter;
+
+@Setter
+@Getter
+public class GraphInstanceModel {
+
+	private String id;
+	private String projectId;
+	private String graphCode;
+	private ObjectNode infos;
+
+}

+ 32 - 0
dmp-model/src/main/java/com/persagy/dmp/rwd/model/ObjectInstanceModel.java

@@ -0,0 +1,32 @@
+package com.persagy.dmp.rwd.model;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+import java.util.List;
+
+@Setter
+@Getter
+public class ObjectInstanceModel {
+
+	private String id;
+	private String name;
+	private String localId;
+	private String localName;
+	private String projectId;
+	private String objType;
+	private String classCode;
+	private Integer grouping;
+	private Integer valid;
+	private ObjectNode infos;
+	private List<String> virtualInfoCodes;
+	private Date createTime;
+	private Date updateTime;
+	private String createUser;
+	private String updateUser;
+	private String createApp;
+	private String updateApp;
+
+}

+ 18 - 0
dmp-model/src/main/java/com/persagy/dmp/rwd/model/RelDefModel.java

@@ -0,0 +1,18 @@
+package com.persagy.dmp.rwd.model;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Setter
+@Getter
+public class RelDefModel {
+
+	private String id;
+	private String code;
+	private String name;
+	private String graphCode;
+	private Integer directional;
+	private String attribute;
+	private String targetObjs;
+
+}

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

@@ -0,0 +1,27 @@
+package com.persagy.dmp.rwd.model;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+@Setter
+@Getter
+public class RelationInstanceModel {
+
+	private String id;
+	private String projectId;
+	private String graphId;
+	private String graphCode;
+	private String relCode;
+	private String objFrom;
+	private String objTo;
+	private Integer status;
+	private Date createTime;
+	private Date updateTime;
+	private String createUser;
+	private String updateUser;
+	private String createApp;
+	private String updateApp;
+
+}

+ 15 - 0
dmp-model/src/main/java/com/persagy/dmp/rwd/model/SchemaClassModel.java

@@ -0,0 +1,15 @@
+package com.persagy.dmp.rwd.model;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Setter
+@Getter
+public class SchemaClassModel {
+
+	private String id;
+	private String schemaId;
+	private String groupCode;
+	private String classCode;
+
+}

+ 16 - 0
dmp-model/src/main/java/com/persagy/dmp/rwd/model/SchemaFuncidModel.java

@@ -0,0 +1,16 @@
+package com.persagy.dmp.rwd.model;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Setter
+@Getter
+public class SchemaFuncidModel {
+
+	private String id;
+	private String groupCode;
+	private String schemaId;
+	private String classCode;
+	private String infoCode;
+
+}

+ 16 - 0
dmp-model/src/main/java/com/persagy/dmp/rwd/model/SchemaModel.java

@@ -0,0 +1,16 @@
+package com.persagy.dmp.rwd.model;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Setter
+@Getter
+public class SchemaModel {
+
+	private String id;
+	private String name;
+	private String groupCode;
+	private String remark;
+	private Integer status;
+
+}

+ 15 - 0
dmp-model/src/main/java/com/persagy/dmp/rwd/model/SchemaProjectModel.java

@@ -0,0 +1,15 @@
+package com.persagy.dmp.rwd.model;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Setter
+@Getter
+public class SchemaProjectModel {
+
+	private String id;
+	private String schemaId;
+	private String groupCode;
+	private String projectId;
+
+}

+ 80 - 0
dmp-org/doc/config.sql

@@ -0,0 +1,80 @@
+# org config
+delete from `dmp_config`.`integrated_config` where application = 'dmp-org';
+INSERT INTO `dmp_config`.`integrated_config`
+(`APPLICATION`,`PPROFILE`,`LABLE`,`BELONGTO`,`ISUPDATE`,`PKEY`,`PVALUE`,`DESCRIPTION`)
+VALUES
+('dmp-org','default','master','DMP',1,'spring.jackson.time-zone', 'Asia/Shanghai', null),
+('dmp-org','default','master','DMP',1,'spring.jpa.show-sql', 'false', null),
+('dmp-org','default','master','DMP',1,'spring.jpa.hibernate.ddl-auto', 'none', null),
+('dmp-org','default','master','DMP',1,'management.endpoints.web.exposure.include', '*', null),
+('dmp-org','default','master','DMP',1,'management.endpoint.health.show-details', 'ALWAYS', null),
+('dmp-org','default','master','DMP',1,'eureka.client.fetch-registry','true',null),
+('dmp-org','default','master','DMP',1,'eureka.client.register-with-eureka','true',null),
+('dmp-org','default','master','DMP',1,'eureka.instance.lease-renewal-interval-in-seconds','10',null),
+('dmp-org','default','master','DMP',1,'eureka.instance.lease-expiration-duration-in-seconds','30',null),
+('dmp-org','default','master','DMP',1,'eureka.instance.hostname','${spring.application.name}',null),
+('dmp-org','default','master','DMP',1,'eureka.instance.prefer-ip-address','true',null),
+('dmp-org','default','master','DMP',1,'eureka.instance.instance-id','${spring.cloud.client.ip-address}:${server.port}',null),
+
+('dmp-org','default','master','DMP',1,'spring.shardingsphere.props.sql.show', 'false', null),
+('dmp-org','default','master','DMP',1,'spring.shardingsphere.datasource.names', 'ds0', null),
+('dmp-org','default','master','DMP',1,'spring.shardingsphere.datasource.ds0.type', 'com.alibaba.druid.pool.DruidDataSource', null),
+('dmp-org','default','master','DMP',1,'spring.shardingsphere.datasource.ds0.driverClassName', 'com.mysql.cj.jdbc.Driver', null),
+('dmp-org','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-org','default','master','DMP',1,'spring.shardingsphere.datasource.ds0.username', '${persagy.mysql.username}', null),
+('dmp-org','default','master','DMP',1,'spring.shardingsphere.datasource.ds0.password', '${persagy.mysql.password}', null),
+('dmp-org','default','master','DMP',1,'spring.shardingsphere.datasource.ds0.initialSize', '${persagy.mysql.initialSize}', null),
+('dmp-org','default','master','DMP',1,'spring.shardingsphere.datasource.ds0.maxActive', '${persagy.mysql.maxActive}', null),
+('dmp-org','default','master','DMP',1,'spring.shardingsphere.sharding.default-data-source-name', 'ds0', null),
+
+('dmp-org','default','master','DMP',1,'spring.rabbitmq.host', '${persagy.rabbitmq.host}', null),
+('dmp-org','default','master','DMP',1,'spring.rabbitmq.port', '${persagy.rabbitmq.port}', null),
+('dmp-org','default','master','DMP',1,'spring.rabbitmq.username', '${persagy.rabbitmq.username}', null),
+('dmp-org','default','master','DMP',1,'spring.rabbitmq.password', '${persagy.rabbitmq.password}', null),
+('dmp-org','default','master','DMP',1,'spring.rabbitmq.virtual-host', '${persagy.rabbitmq.virtual-host}', null),
+
+('dmp-org','default','master','DMP',1,'spring.redis.host', '${persagy.redis.host}', null),
+('dmp-org','default','master','DMP',1,'spring.redis.port', '${persagy.redis.port}', null),
+('dmp-org','default','master','DMP',1,'spring.redis.password', '${persagy.redis.password}', null),
+('dmp-org','default','master','DMP',1,'spring.redis.database', '${persagy.redis.database}', null),
+('dmp-org','default','master','DMP',1,'spring.redis.pool.max-active', '${persagy.redis.max-active}', null),
+('dmp-org','default','master','DMP',1,'spring.redis.pool.max-idle', '${persagy.redis.max-idle}', null),
+('dmp-org','default','master','DMP',1,'spring.redis.pool.min-idle', '${persagy.redis.min-idle}', null),
+
+('dmp-org','default','master','DMP',1,'persagy.dmp.exchange', 'exchange-dmp', null),
+('dmp-org','default','master','DMP',1,'persagy.dmp.dic.routingKey', 'routing-dmp-dic', null),
+('dmp-org','default','master','DMP',1,'persagy.dmp.org.routingKey', 'routing-dmp-org', null),
+('dmp-org','default','master','DMP',1,'persagy.dmp.rwd.routingKey', 'routing-dmp-rwd', null),
+('dmp-org','default','master','DMP',1,'persagy.dmp.alarm.routingKey', 'routing-dmp-alarm', null),
+('dmp-org','default','master','DMP',1,'persagy.dmp.task.routingKey', 'routing-dmp-task', null),
+
+('dmp-org','dev','master','DMP',1,'server.port', '8081', null),
+
+('dmp-org','dev','master','DMP',1,'eureka.client.service-url.defaultZone','http://frame:123456@localhost:9931/eureka/','注册中心地址'),
+('dmp-org','dev','master','DMP',1,'eureka.instance.ip-address','localhost',null),
+('dmp-org','dev','master','DMP',1,'persagy.iot.data.server', 'http://localhost:9981', 'IOT数据查询服务'),
+('dmp-org','dev','master','DMP',1,'persagy.iot.setting.server', 'http://localhost:9983', 'IOT控制服务'),
+
+('dmp-org','dev','master','DMP',1,'persagy.mysql.host', 'localhost', null),
+('dmp-org','dev','master','DMP',1,'persagy.mysql.port', '3301', null),
+('dmp-org','dev','master','DMP',1,'persagy.mysql.database', 'dmp_test', null),
+('dmp-org','dev','master','DMP',1,'persagy.mysql.username', 'root', null),
+('dmp-org','dev','master','DMP',1,'persagy.mysql.password', '123456', null),
+('dmp-org','dev','master','DMP',1,'persagy.mysql.initialSize', '10', null),
+('dmp-org','dev','master','DMP',1,'persagy.mysql.maxActive', '100', null),
+
+('dmp-org','dev','master','DMP',1,'persagy.redis.host', 'localhost', null),
+('dmp-org','dev','master','DMP',1,'persagy.redis.port', '5672', null),
+('dmp-org','dev','master','DMP',1,'persagy.redis.password', '123456', null),
+('dmp-org','dev','master','DMP',1,'persagy.redis.database', '0', null),
+('dmp-org','dev','master','DMP',1,'persagy.redis.max-active', '300', null),
+('dmp-org','dev','master','DMP',1,'persagy.redis.max-idle', '30', null),
+('dmp-org','dev','master','DMP',1,'persagy.redis.min-idle', '10', null),
+
+('dmp-org','dev','master','DMP',1,'persagy.rabbitmq.host', 'localhost', null),
+('dmp-org','dev','master','DMP',1,'persagy.rabbitmq.port', '5672', null),
+('dmp-org','dev','master','DMP',1,'persagy.rabbitmq.username', 'admin', null),
+('dmp-org','dev','master','DMP',1,'persagy.rabbitmq.password', '123456', null),
+('dmp-org','dev','master','DMP',1,'persagy.rabbitmq.virtual-host', '/test', 'rabbitmq虚拟机'),
+('dmp-org','dev','master','DMP',1,'persagy.dmp.org.queue', 'queue-dmp-org', null);
+

+ 125 - 0
dmp-org/pom.xml

@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>com.persagy</groupId>
+        <artifactId>dmp</artifactId>
+        <version>4.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>dmp-org</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>dmp-model</artifactId>
+            <version>4.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>dmp-common</artifactId>
+            <version>4.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-jpa</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid</artifactId>
+            <version>1.1.21</version>
+        </dependency>
+        <dependency>
+            <groupId>com.querydsl</groupId>
+            <artifactId>querydsl-apt</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.querydsl</groupId>
+            <artifactId>querydsl-sql</artifactId>
+            <version>${querydsl.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.querydsl</groupId>
+            <artifactId>querydsl-jpa</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <!-- 注册中心 -->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
+        </dependency>
+
+        <!-- 配置中心 -->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-config</artifactId>
+        </dependency>
+
+        <!-- rabbitmq -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-amqp</artifactId>
+        </dependency>
+
+        <!-- 分库分表 -->
+        <dependency>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
+            <version>4.1.1</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <finalName>dmp-org</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <fork>true</fork>
+                    <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <!--
+            -->
+            <plugin>
+                <groupId>com.mysema.maven</groupId>
+                <artifactId>apt-maven-plugin</artifactId>
+                <version>1.1.3</version>
+                <executions>
+                    <execution>
+                        <phase>generate-sources</phase>
+                        <goals>
+                            <goal>process</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>target/generated-sources</outputDirectory>
+                            <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 47 - 0
dmp-org/src/main/java/com/persagy/dmp/org/OrgApp.java

@@ -0,0 +1,47 @@
+package com.persagy.dmp.org;
+
+import com.persagy.common.criteria.CriteriaUtils;
+import com.persagy.common.criteria.JpaUtils;
+import com.querydsl.jpa.impl.JPAQueryFactory;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.core.env.ConfigurableEnvironment;
+
+import javax.persistence.EntityManager;
+
+/**
+ * @author: yaoll
+ * @date: 2020-10-22
+ * @verison: 1.0
+ */
+@Slf4j
+@SpringBootApplication
+@EnableDiscoveryClient
+public class OrgApp {
+
+	public static void main(String[] args) {
+		ConfigurableApplicationContext ctx = SpringApplication.run(OrgApp.class, args);
+		ConfigurableEnvironment env = ctx.getEnvironment();
+	}
+
+	@Bean
+	public JPAQueryFactory jpaQueryFactory(EntityManager entityManager) {
+		return new JPAQueryFactory(entityManager);
+	}
+
+	@Bean
+	public CriteriaUtils criteriaUtils(@Autowired JPAQueryFactory jpaQueryFactory) {
+		return new CriteriaUtils(jpaQueryFactory);
+	}
+
+	@Bean
+	public JpaUtils jpaUtils(@Autowired EntityManager entityManager) {
+		return new JpaUtils(entityManager);
+	}
+
+}

+ 15 - 0
dmp-org/src/main/java/com/persagy/dmp/org/common/OrgUtils.java

@@ -0,0 +1,15 @@
+package com.persagy.dmp.org.common;
+
+import java.util.UUID;
+
+public class OrgUtils {
+
+
+    /**
+     * uuid无'-'
+     * @return
+     */
+    public static String getUUID(){
+        return UUID.randomUUID().toString().replace("-", "");
+    }
+}

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

@@ -0,0 +1,46 @@
+package com.persagy.dmp.org.config;
+
+import com.persagy.common.web.BaseResponse;
+import com.persagy.dmp.org.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.*.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);
+						}
+					}
+				}
+			}
+		}
+	}
+}

+ 54 - 0
dmp-org/src/main/java/com/persagy/dmp/org/config/GlobalExceptionHandler.java

@@ -0,0 +1,54 @@
+package com.persagy.dmp.org.config;
+
+import com.persagy.common.web.BaseResponse;
+import com.persagy.dmp.org.exception.OrgCURDRunTimeException;
+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;
+
+import java.sql.SQLException;
+
+/**
+ * @author: yaoll
+ * @date: 2020-11-01
+ * @verison: 1.0
+ */
+@Slf4j
+@RestControllerAdvice
+public class GlobalExceptionHandler {
+
+	@ExceptionHandler(Exception.class)
+	public BaseResponse<String> handleException(Exception ex) {
+		BaseResponse<String> resp = new BaseResponse<>();
+		resp.setFail("服务异常: " + ex.getMessage());
+		log.error("服务异常", ex);
+		ShardingUpdateStatementValidator va;
+		return resp;
+	}
+
+	@ExceptionHandler(DataAccessException.class)
+	public BaseResponse<String> handleDataAccessException(DataAccessException ex) {
+		BaseResponse<String> resp = new BaseResponse<>();
+		resp.setFail("数据访问异常");
+		return resp;
+	}
+
+	@ExceptionHandler(SQLException.class)
+	public BaseResponse<String> handleSQLException(SQLException ex) {
+		BaseResponse<String> resp = new BaseResponse<>();
+		resp.setFail("数据操作异常");
+		return resp;
+	}
+
+	/**
+	 * 用于拦截增删改中手动抛出的异常
+	 * @param ex
+	 * @return
+	 */
+	@ExceptionHandler(OrgCURDRunTimeException.class)
+	public BaseResponse<String> handleSQLRunTimeException(OrgCURDRunTimeException ex) {
+		return ex.getBaseResponse();
+	}
+}

+ 116 - 0
dmp-org/src/main/java/com/persagy/dmp/org/config/RequestLogAspect.java

@@ -0,0 +1,116 @@
+package com.persagy.dmp.org.config;
+
+import com.persagy.common.json.JacksonMapper;
+import com.persagy.common.web.BaseResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.*;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * @author: yaoll
+ * @date: 2020-09-22
+ * @verison: 1.0
+ */
+@Slf4j
+@Aspect
+@Component
+public class RequestLogAspect {
+
+	private static final ThreadLocal<LogData> dataStorage = new ThreadLocal();
+
+	private static final AtomicInteger flag = new AtomicInteger(10000000);
+
+
+	@Pointcut("execution(public * com.persagy.dmp.*.controller.*.*(..))")
+	public void controllerPoint() {
+	}
+
+	@Before("controllerPoint()")
+	public void doBefore(JoinPoint joinPoint) {
+		ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+		HttpServletRequest request = attributes.getRequest();
+		LogData data = initFlag(request);
+		dataStorage.set(data);
+		log.info("{} REQUEST URL      : {} {}", data.intFlag, data.method, data.url);
+		log.info("{} REQUEST ARGS     : {}", data.intFlag, JacksonMapper.toSimpleJson(prepare(joinPoint)));
+	}
+
+	public static List<Object> prepare(JoinPoint joinPoint) {
+		Object[] args = joinPoint.getArgs();
+		List<Object> list = new LinkedList<>();
+		if (args != null && args.length > 0) {
+			for (Object arg : args) {
+				if (arg instanceof ServletRequest) {
+					continue;
+				}
+				if (arg instanceof ServletResponse) {
+					continue;
+				}
+				if (arg instanceof MultipartFile) {
+					continue;
+				}
+				list.add(arg);
+			}
+		}
+		return list;
+	}
+
+	@AfterReturning(returning = "ret", pointcut = "controllerPoint()")
+	public void doAfterReturning(Object ret) {
+
+		LogData data = dataStorage.get();
+		if (ret != null) {
+			if (ret instanceof BaseResponse) {
+				log.info("{} REQUEST DURATION : {} {} {}", data.intFlag, System.currentTimeMillis() - data.timestamp, ((BaseResponse) ret).getResult(), data.url);
+			} else {
+				log.info("{} REQUEST DURATION : {} {} {}", data.intFlag, System.currentTimeMillis() - data.timestamp, ret.getClass().getName(), data.url);
+			}
+		} else {
+			log.info("{} REQUEST DURATION : {} {} {}", data.intFlag, System.currentTimeMillis() - data.timestamp, "null", data.url);
+		}
+		dataStorage.remove();
+	}
+
+	@AfterThrowing(throwing = "ex", pointcut = "controllerPoint()")
+	public void doAfterThrowing(Throwable ex) {
+		LogData data = dataStorage.get();
+		log.error("{} REQUEST EXCEPTION: {} {} {}", data.intFlag, System.currentTimeMillis() - data.timestamp, data.url, ex.getMessage());
+		dataStorage.remove();
+	}
+
+	private static LogData initFlag(HttpServletRequest request) {
+		LogData data = new LogData();
+		data.timestamp = System.currentTimeMillis();
+		data.method = request.getMethod();
+
+		String requestURI = request.getRequestURI();
+		String queryString = request.getQueryString();
+		data.url = requestURI + (queryString == null ? "" : "?" + queryString);
+
+		int result = flag.addAndGet(1);
+		if (result >= 99999999) {
+			flag.set(10000000);
+		}
+		data.intFlag = result;
+		dataStorage.set(data);
+		return data;
+	}
+
+	private static class LogData {
+		Integer intFlag;
+		Long timestamp;
+		String url;
+		String method;
+	}
+}

+ 46 - 0
dmp-org/src/main/java/com/persagy/dmp/org/config/WebConfig.java

@@ -0,0 +1,46 @@
+package com.persagy.dmp.org.config;
+
+import com.persagy.common.json.JacksonMapper;
+import com.persagy.dmp.config.DmpParameterStorage;
+import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
+import org.springframework.amqp.support.converter.MessageConverter;
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+/**
+ * @author: yaoll
+ * @date: 2020-09-22
+ * @verison: 1.0
+ */
+@Configuration
+public class WebConfig implements WebMvcConfigurer {
+
+	@Bean
+	public DmpParameterStorage dmpParameterStorage() {
+		return new DmpParameterStorage();
+	}
+
+	@Override
+	public void addInterceptors(InterceptorRegistry registry) {
+		// 设置拦截的路径、不拦截的路径、优先级等等
+		registry.addInterceptor(dmpParameterStorage()).addPathPatterns("/**");
+	}
+
+	@Bean
+	public HttpMessageConverters customConverters() {
+		MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
+		converter.setObjectMapper(JacksonMapper.nonEmptyMapper);
+		return new HttpMessageConverters(converter);
+	}
+
+	// JMS 使用
+	@Bean
+	public MessageConverter customMessageConvert() {
+		return new Jackson2JsonMessageConverter();
+	}
+
+}

+ 19 - 0
dmp-org/src/main/java/com/persagy/dmp/org/constant/OrgConstants.java

@@ -0,0 +1,19 @@
+package com.persagy.dmp.org.constant;
+
+/**
+ * @author: yaoll
+ * @date: 2020-10-26
+ * @verison: 1.0
+ */
+public class OrgConstants {
+
+	/** 创建项目发MQ */
+	public static final String MESSAGE_PROJECT_CREATE = "projectCreate";
+
+	/** 创建集团发MQ */
+	public static final String MESSAGE_GROUP_CREATE = "groupCreate";
+
+	/** 按照 group_code 分表 */
+	public static final String SHARDING_GROUP_CODE = "group_code";
+
+}

+ 15 - 0
dmp-org/src/main/java/com/persagy/dmp/org/constant/OrgQueryConstant.java

@@ -0,0 +1,15 @@
+package com.persagy.dmp.org.constant;
+
+/**
+ * 查询中自定义字段查询
+ * @author king
+ */
+public class OrgQueryConstant {
+
+    /** 根据公司查询用户 */
+    public static final String COMPANY_USER = "companyIds";
+
+    /** 根据部门查询用户 */
+    public static final String DEPT_USER = "deptIds";
+
+}

+ 18 - 0
dmp-org/src/main/java/com/persagy/dmp/org/constant/OrgWithColumnConstant.java

@@ -0,0 +1,18 @@
+package com.persagy.dmp.org.constant;
+
+/**
+ * 查询返回结果 WithColumns 字段常量
+ * @author king
+ */
+public class OrgWithColumnConstant {
+
+    /** 查询用户关联查询岗位信息 */
+    public static final String USER_JOBS = "jobs";
+
+    /** 查询公司关联查项目 */
+    public static final String COMPANY_PROJECTS = "projects";
+
+    /** 查询项目关联查公司 */
+    public static final String PROJECT_COMPANIES = "companies";
+
+}

+ 42 - 0
dmp-org/src/main/java/com/persagy/dmp/org/controller/ApplicationController.java

@@ -0,0 +1,42 @@
+package com.persagy.dmp.org.controller;
+
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.org.model.ApplicationModel;
+import com.persagy.dmp.org.service.ApplicationService;
+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.List;
+
+@RestController
+@RequestMapping("/org/application")
+public class ApplicationController {
+	@Autowired
+	private ApplicationService service;
+	
+	@PostMapping("/query")
+	public PagedResponse<ApplicationModel> query(@RequestBody JacksonCriteria criteria) {
+		return service.query(criteria);
+	}
+	
+	@PostMapping("/create")
+	public MapResponse create(@RequestBody List<ApplicationModel> params){
+		return service.create(params);
+	}
+
+	@PostMapping("/update")
+	public MapResponse update(@RequestBody List<ApplicationModel> params){
+		return service.update(params);
+	}
+
+	@PostMapping("/delete")
+	public MapResponse delete(@RequestBody List<ApplicationModel> params){
+		return service.delete(params);
+	}
+	
+}

+ 42 - 0
dmp-org/src/main/java/com/persagy/dmp/org/controller/CompanyController.java

@@ -0,0 +1,42 @@
+package com.persagy.dmp.org.controller;
+
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.org.model.CompanyModel;
+import com.persagy.dmp.org.service.CompanyService;
+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.List;
+
+@RestController
+@RequestMapping("/org/company")
+public class CompanyController {
+	@Autowired
+	private CompanyService service;
+	
+	@PostMapping("/query")
+	public PagedResponse<CompanyModel> query(@RequestBody JacksonCriteria criteria) {
+		return service.query(criteria);
+	}
+	
+	@PostMapping("/create")
+	public MapResponse create(@RequestBody List<CompanyModel> param){
+		return service.create(param);
+	}
+	
+	@PostMapping("/update")
+	public MapResponse update(@RequestBody List<CompanyModel> params){
+		return service.update(params);
+	}
+	
+	@PostMapping("/delete")
+	public MapResponse delete(@RequestBody List<CompanyModel> params){
+		return service.delete(params);
+	}
+	
+}

+ 39 - 0
dmp-org/src/main/java/com/persagy/dmp/org/controller/CompanyProjectRelController.java

@@ -0,0 +1,39 @@
+package com.persagy.dmp.org.controller;
+
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.org.model.CompanyProjectRelModel;
+import com.persagy.dmp.org.service.CompanyProjectRelService;
+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;
+@RestController
+@RequestMapping("/org/company/project/rel")
+public class CompanyProjectRelController {
+	@Autowired
+	private CompanyProjectRelService service;
+	
+	@PostMapping("/query")
+	public PagedResponse<CompanyProjectRelModel> query(@RequestBody JacksonCriteria criteria) {
+		return service.query(criteria);
+	}
+	
+	@PostMapping("/create")
+	public MapResponse create(@RequestBody CompanyProjectRelModel param){
+		return service.create(param);
+	}
+	
+	@PostMapping("/update")
+	public MapResponse update(@RequestBody CompanyProjectRelModel param){
+		return service.update(param);
+	}
+	
+	@PostMapping("/delete")
+	public MapResponse delete(@RequestBody CompanyProjectRelModel param){
+		return service.delete(param);
+	}
+	
+}

+ 42 - 0
dmp-org/src/main/java/com/persagy/dmp/org/controller/DeptClassifyController.java

@@ -0,0 +1,42 @@
+package com.persagy.dmp.org.controller;
+
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.org.model.DeptClassifyModel;
+import com.persagy.dmp.org.service.DeptClassifyService;
+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.List;
+
+@RestController
+@RequestMapping("/org/dept/classify")
+public class DeptClassifyController {
+	@Autowired
+	private DeptClassifyService service;
+	
+	@PostMapping("/query")
+	public PagedResponse<DeptClassifyModel> query(@RequestBody JacksonCriteria criteria) {
+		return service.query(criteria);
+	}
+	
+	@PostMapping("/create")
+	public MapResponse create(@RequestBody List<DeptClassifyModel> params){
+		return service.create(params);
+	}
+	
+	@PostMapping("/update")
+	public MapResponse update(@RequestBody List<DeptClassifyModel> params){
+		return service.update(params);
+	}
+	
+	@PostMapping("/delete")
+	public MapResponse delete(@RequestBody List<DeptClassifyModel> params){
+		return service.delete(params);
+	}
+	
+}

+ 42 - 0
dmp-org/src/main/java/com/persagy/dmp/org/controller/DeptController.java

@@ -0,0 +1,42 @@
+package com.persagy.dmp.org.controller;
+
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.org.model.DeptModel;
+import com.persagy.dmp.org.service.DeptService;
+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.List;
+
+@RestController
+@RequestMapping("/org/dept")
+public class DeptController {
+	@Autowired
+	private DeptService service;
+	
+	@PostMapping("/query")
+	public PagedResponse<DeptModel> query(@RequestBody JacksonCriteria criteria) {
+		return service.query(criteria);
+	}
+	
+	@PostMapping("/create")
+	public MapResponse create(@RequestBody List<DeptModel> params){
+		return service.create(params);
+	}
+	
+	@PostMapping("/update")
+	public MapResponse update(@RequestBody List<DeptModel> params){
+		return service.update(params);
+	}
+	
+	@PostMapping("/delete")
+	public MapResponse delete(@RequestBody List<DeptModel> params){
+		return service.delete(params);
+	}
+	
+}

+ 42 - 0
dmp-org/src/main/java/com/persagy/dmp/org/controller/FunctionController.java

@@ -0,0 +1,42 @@
+package com.persagy.dmp.org.controller;
+
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.org.model.FunctionModel;
+import com.persagy.dmp.org.service.FunctionService;
+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.List;
+
+@RestController
+@RequestMapping("/org/function")
+public class FunctionController {
+	@Autowired
+	private FunctionService service;
+	
+	@PostMapping("/query")
+	public PagedResponse<FunctionModel> query(@RequestBody JacksonCriteria criteria) {
+		return service.query(criteria);
+	}
+	
+	@PostMapping("/create")
+	public MapResponse create(@RequestBody List<FunctionModel> params){
+		return service.create(params);
+	}
+	
+	@PostMapping("/update")
+	public MapResponse update(@RequestBody List<FunctionModel> params){
+		return service.update(params);
+	}
+	
+	@PostMapping("/delete")
+	public MapResponse delete(@RequestBody List<FunctionModel> params){
+		return service.delete(params);
+	}
+	
+}

+ 42 - 0
dmp-org/src/main/java/com/persagy/dmp/org/controller/GroupAppRelController.java

@@ -0,0 +1,42 @@
+package com.persagy.dmp.org.controller;
+
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.org.model.GroupAppRelModel;
+import com.persagy.dmp.org.service.GroupAppRelService;
+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.List;
+
+@RestController
+@RequestMapping("/org/group/app/rel")
+public class GroupAppRelController {
+	@Autowired
+	private GroupAppRelService service;
+	
+	@PostMapping("/query")
+	public PagedResponse<GroupAppRelModel> query(@RequestBody JacksonCriteria criteria) {
+		return service.query(criteria);
+	}
+	
+	@PostMapping("/create")
+	public MapResponse create(@RequestBody List<GroupAppRelModel> params){
+		return service.create(params);
+	}
+	
+	@PostMapping("/update")
+	public MapResponse update(@RequestBody List<GroupAppRelModel> params){
+		return service.update(params);
+	}
+	
+	@PostMapping("/delete")
+	public MapResponse delete(@RequestBody List<GroupAppRelModel> params){
+		return service.delete(params);
+	}
+	
+}

+ 42 - 0
dmp-org/src/main/java/com/persagy/dmp/org/controller/GroupController.java

@@ -0,0 +1,42 @@
+package com.persagy.dmp.org.controller;
+
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.org.model.GroupModel;
+import com.persagy.dmp.org.service.GroupService;
+import com.persagy.dmp.org.service.InitService;
+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;
+@RestController
+@RequestMapping("/org/group")
+public class GroupController {
+
+	@Autowired
+	private GroupService service;
+
+	@PostMapping("/query")
+	public PagedResponse<GroupModel> query(@RequestBody JacksonCriteria criteria) {
+		return service.query(criteria);
+	}
+	
+	@PostMapping("/admin/create")
+	public MapResponse create(@RequestBody GroupModel param){
+		MapResponse mapResponse = service.create(param);
+		return mapResponse;
+	}
+
+//	@PostMapping("/update")
+//	public MapResponse update(@RequestBody GroupModel param){
+//		return service.update(param);
+//	}
+//
+//	@PostMapping("/delete")
+//	public MapResponse delete(@RequestBody GroupModel param){
+//		return service.delete(param);
+//	}
+	
+}

+ 42 - 0
dmp-org/src/main/java/com/persagy/dmp/org/controller/GroupFunctionRelController.java

@@ -0,0 +1,42 @@
+package com.persagy.dmp.org.controller;
+
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.org.model.GroupFunctionRelModel;
+import com.persagy.dmp.org.service.GroupFunctionRelService;
+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.List;
+
+@RestController
+@RequestMapping("/org/group/function/rel")
+public class GroupFunctionRelController {
+	@Autowired
+	private GroupFunctionRelService service;
+	
+	@PostMapping("/query")
+	public PagedResponse<GroupFunctionRelModel> query(@RequestBody JacksonCriteria criteria) {
+		return service.query(criteria);
+	}
+	
+	@PostMapping("/create")
+	public MapResponse create(@RequestBody List<GroupFunctionRelModel> params){
+		return service.create(params);
+	}
+	
+	@PostMapping("/update")
+	public MapResponse update(@RequestBody List<GroupFunctionRelModel> params){
+		return service.update(params);
+	}
+	
+	@PostMapping("/delete")
+	public MapResponse delete(@RequestBody List<GroupFunctionRelModel> params){
+		return service.delete(params);
+	}
+	
+}

+ 22 - 0
dmp-org/src/main/java/com/persagy/dmp/org/controller/InitController.java

@@ -0,0 +1,22 @@
+package com.persagy.dmp.org.controller;
+
+import com.persagy.common.web.MapResponse;
+import com.persagy.dmp.org.service.InitService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/org/init")
+public class InitController {
+
+    @Autowired
+    private InitService initService;
+
+    @GetMapping("/group")
+    public MapResponse initGroup() {
+        return initService.initGroup();
+    }
+
+}

+ 42 - 0
dmp-org/src/main/java/com/persagy/dmp/org/controller/JobClassifyController.java

@@ -0,0 +1,42 @@
+package com.persagy.dmp.org.controller;
+
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.org.model.JobClassifyModel;
+import com.persagy.dmp.org.service.JobClassifyService;
+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.List;
+
+@RestController
+@RequestMapping("/org/job/classify")
+public class JobClassifyController {
+	@Autowired
+	private JobClassifyService service;
+	
+	@PostMapping("/query")
+	public PagedResponse<JobClassifyModel> query(@RequestBody JacksonCriteria criteria) {
+		return service.query(criteria);
+	}
+	
+	@PostMapping("/create")
+	public MapResponse create(@RequestBody List<JobClassifyModel> params){
+		return service.create(params);
+	}
+	
+	@PostMapping("/update")
+	public MapResponse update(@RequestBody List<JobClassifyModel> params){
+		return service.update(params);
+	}
+	
+	@PostMapping("/delete")
+	public MapResponse delete(@RequestBody List<JobClassifyModel> params){
+		return service.delete(params);
+	}
+	
+}

+ 42 - 0
dmp-org/src/main/java/com/persagy/dmp/org/controller/JobClassifyRelController.java

@@ -0,0 +1,42 @@
+package com.persagy.dmp.org.controller;
+
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.org.model.JobClassifyRelModel;
+import com.persagy.dmp.org.service.JobClassifyRelService;
+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.List;
+
+@RestController
+@RequestMapping("/org/job/classify/rel")
+public class JobClassifyRelController {
+	@Autowired
+	private JobClassifyRelService service;
+	
+	@PostMapping("/query")
+	public PagedResponse<JobClassifyRelModel> query(@RequestBody JacksonCriteria criteria) {
+		return service.query(criteria);
+	}
+	
+	@PostMapping("/create")
+	public MapResponse create(@RequestBody List<JobClassifyRelModel> params){
+		return service.create(params);
+	}
+	
+	@PostMapping("/update")
+	public MapResponse update(@RequestBody List<JobClassifyRelModel> params){
+		return service.update(params);
+	}
+	
+	@PostMapping("/delete")
+	public MapResponse delete(@RequestBody List<JobClassifyRelModel> params){
+		return service.delete(params);
+	}
+	
+}

+ 47 - 0
dmp-org/src/main/java/com/persagy/dmp/org/controller/JobController.java

@@ -0,0 +1,47 @@
+package com.persagy.dmp.org.controller;
+
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.org.model.JobModel;
+import com.persagy.dmp.org.model.UserModel;
+import com.persagy.dmp.org.service.JobService;
+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.List;
+
+@RestController
+@RequestMapping("/org/job")
+public class JobController {
+	@Autowired
+	private JobService service;
+	
+	@PostMapping("/query")
+	public PagedResponse<JobModel> query(@RequestBody JacksonCriteria criteria) {
+		return service.query(criteria);
+	}
+	
+	@PostMapping("/create")
+	public MapResponse create(@RequestBody List<JobModel> params){
+		return service.create(params);
+	}
+	
+	@PostMapping("/update")
+	public MapResponse update(@RequestBody List<JobModel> params){
+		return service.update(params);
+	}
+	
+	@PostMapping("/delete")
+	public MapResponse delete(@RequestBody List<JobModel> params){
+		return service.delete(params);
+	}
+
+	@PostMapping("/user")
+	public MapResponse updateJobsByUserId(@RequestBody List<UserModel> params){
+		return service.updateJobsByUserId(params);
+	};
+}

+ 42 - 0
dmp-org/src/main/java/com/persagy/dmp/org/controller/ProjectController.java

@@ -0,0 +1,42 @@
+package com.persagy.dmp.org.controller;
+
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.org.model.ProjectModel;
+import com.persagy.dmp.org.service.ProjectService;
+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.List;
+
+@RestController
+@RequestMapping("/org/project")
+public class ProjectController {
+	@Autowired
+	private ProjectService service;
+	
+	@PostMapping("/query")
+	public PagedResponse<ProjectModel> query(@RequestBody JacksonCriteria criteria) {
+		return service.query(criteria);
+	}
+	
+	@PostMapping("/create")
+	public MapResponse create(@RequestBody List<ProjectModel> params){
+		return service.create(params);
+	}
+	
+	@PostMapping("/update")
+	public MapResponse update(@RequestBody List<ProjectModel> params){
+		return service.update(params);
+	}
+	
+	@PostMapping("/delete")
+	public MapResponse delete(@RequestBody List<ProjectModel> params){
+		return service.delete(params);
+	}
+	
+}

+ 42 - 0
dmp-org/src/main/java/com/persagy/dmp/org/controller/UserController.java

@@ -0,0 +1,42 @@
+package com.persagy.dmp.org.controller;
+
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.MapResponse;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.org.model.UserModel;
+import com.persagy.dmp.org.service.UserService;
+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.List;
+
+@RestController
+@RequestMapping("/org/user")
+public class UserController {
+	@Autowired
+	private UserService service;
+	
+	@PostMapping("/query")
+	public PagedResponse<UserModel> query(@RequestBody JacksonCriteria criteria) {
+		return service.query(criteria);
+	}
+	
+	@PostMapping("/create")
+	public MapResponse create(@RequestBody List<UserModel> params){
+		return service.create(params);
+	}
+	
+	@PostMapping("/update")
+	public MapResponse update(@RequestBody List<UserModel> params){
+		return service.update(params);
+	}
+	
+	@PostMapping("/delete")
+	public MapResponse delete(@RequestBody List<UserModel> params){
+		return service.delete(params);
+	}
+	
+}

+ 74 - 0
dmp-org/src/main/java/com/persagy/dmp/org/entity/Application.java

@@ -0,0 +1,74 @@
+package com.persagy.dmp.org.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+import com.persagy.dmp.org.model.ApplicationModel;
+import org.hibernate.annotations.GenericGenerator;
+import javax.persistence.GeneratedValue;
+import javax.persistence.*;
+import java.util.Date;
+
+@Setter
+@Getter
+@Entity
+@Table(name = "org_application")
+public class Application {
+
+	@Id
+	private String id;
+	private String code;
+	private String name;
+	private String category;
+	private Integer appOrder;
+	private String menuIconKey;
+	private String iconKey;
+	private String description;
+	private String objType;
+	private Integer status;
+	private String createUser;
+	private Date createTime;
+	private String updateUser;
+	private Date updateTime;
+	private String remark;
+
+	public static Application fromModel(ApplicationModel model) {
+		Application entity = new Application();
+		entity.setId(model.getId());
+		entity.setCode(model.getCode());
+		entity.setName(model.getName());
+		entity.setCategory(model.getCategory());
+		entity.setAppOrder(model.getAppOrder());
+		entity.setMenuIconKey(model.getMenuIconKey());
+		entity.setIconKey(model.getIconKey());
+		entity.setDescription(model.getDescription());
+		entity.setObjType(model.getObjType());
+		entity.setStatus(model.getStatus());
+		entity.setCreateUser(model.getCreateUser());
+		entity.setCreateTime(model.getCreateTime());
+		entity.setUpdateUser(model.getUpdateUser());
+		entity.setUpdateTime(model.getUpdateTime());
+		entity.setRemark(model.getRemark());
+		return entity;
+	}
+
+	public ApplicationModel toModel() {
+		ApplicationModel model = new ApplicationModel();
+		model.setId(this.id);
+		model.setCode(this.getCode());
+		model.setName(this.getName());
+		model.setCategory(this.getCategory());
+		model.setAppOrder(this.getAppOrder());
+		model.setMenuIconKey(this.getMenuIconKey());
+		model.setIconKey(this.getIconKey());
+		model.setDescription(this.getDescription());
+		model.setObjType(this.getObjType());
+		model.setStatus(this.getStatus());
+		model.setCreateUser(this.getCreateUser());
+		model.setCreateTime(this.getCreateTime());
+		model.setUpdateUser(this.getUpdateUser());
+		model.setUpdateTime(this.getUpdateTime());
+		model.setRemark(this.getRemark());
+		return model;
+	}
+
+}

+ 73 - 0
dmp-org/src/main/java/com/persagy/dmp/org/entity/Company.java

@@ -0,0 +1,73 @@
+package com.persagy.dmp.org.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+import com.persagy.dmp.org.model.CompanyModel;
+import org.hibernate.annotations.GenericGenerator;
+import javax.persistence.GeneratedValue;
+import javax.persistence.*;
+import java.util.Date;
+import java.util.List;
+
+@Setter
+@Getter
+@Entity
+@IdClass(GroupPK.class)
+@Table(name = "org_company")
+public class Company {
+
+	@Id
+	private String id;
+	private String code;
+	private String name;
+	@Id
+	private String groupCode;
+	private String parentId;
+	private Integer status;
+	private String createUser;
+	private Date createTime;
+	private String updateUser;
+	private Date updateTime;
+	private String remark;
+
+//	@JoinTable(name = "org_project", joinColumns = {
+//			@JoinColumn(name = "org_id", referencedColumnName = "ID")},
+//			inverseJoinColumns = {
+//					@JoinColumn(name = "project_id", referencedColumnName = "ID")
+//			})
+//	@ManyToMany
+//	private List<Project> projects;
+
+	public static Company fromModel(CompanyModel model) {
+		Company entity = new Company();
+		entity.setId(model.getId());
+		entity.setCode(model.getCode());
+		entity.setName(model.getName());
+		entity.setGroupCode(model.getGroupCode());
+		entity.setParentId(model.getParentId());
+		entity.setStatus(model.getStatus());
+		entity.setCreateUser(model.getCreateUser());
+		entity.setCreateTime(model.getCreateTime());
+		entity.setUpdateUser(model.getUpdateUser());
+		entity.setUpdateTime(model.getUpdateTime());
+		entity.setRemark(model.getRemark());
+		return entity;
+	}
+
+	public CompanyModel toModel() {
+		CompanyModel model = new CompanyModel();
+		model.setId(this.id);
+		model.setCode(this.getCode());
+		model.setName(this.getName());
+		model.setGroupCode(this.getGroupCode());
+		model.setParentId(this.getParentId());
+		model.setStatus(this.getStatus());
+		model.setCreateUser(this.getCreateUser());
+		model.setCreateTime(this.getCreateTime());
+		model.setUpdateUser(this.getUpdateUser());
+		model.setUpdateTime(this.getUpdateTime());
+		model.setRemark(this.getRemark());
+		return model;
+	}
+
+}

+ 43 - 0
dmp-org/src/main/java/com/persagy/dmp/org/entity/CompanyProjectRel.java

@@ -0,0 +1,43 @@
+package com.persagy.dmp.org.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+import com.persagy.dmp.org.model.CompanyProjectRelModel;
+import org.hibernate.annotations.GenericGenerator;
+import javax.persistence.GeneratedValue;
+import javax.persistence.*;
+import java.util.Date;
+
+@Setter
+@Getter
+@Entity
+@IdClass(GroupPK.class)
+@Table(name = "org_company_project_rel")
+public class CompanyProjectRel {
+
+	@Id
+	private String id;
+	@Id
+	private String groupCode;
+	private String companyId;
+	private String projectId;
+
+	public static CompanyProjectRel fromModel(CompanyProjectRelModel model) {
+		CompanyProjectRel entity = new CompanyProjectRel();
+		entity.setId(model.getId());
+		entity.setCompanyId(model.getCompanyId());
+		entity.setProjectId(model.getProjectId());
+		entity.setGroupCode(model.getGroupCode());
+		return entity;
+	}
+
+	public CompanyProjectRelModel toModel() {
+		CompanyProjectRelModel model = new CompanyProjectRelModel();
+		model.setId(this.id);
+		model.setCompanyId(this.getCompanyId());
+		model.setProjectId(this.getProjectId());
+		model.setGroupCode(this.getGroupCode());
+		return model;
+	}
+
+}

+ 76 - 0
dmp-org/src/main/java/com/persagy/dmp/org/entity/Dept.java

@@ -0,0 +1,76 @@
+package com.persagy.dmp.org.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+import com.persagy.dmp.org.model.DeptModel;
+import org.hibernate.annotations.GenericGenerator;
+import javax.persistence.GeneratedValue;
+import javax.persistence.*;
+import java.util.Date;
+
+@Setter
+@Getter
+@Entity
+@IdClass(GroupPK.class)
+@Table(name = "org_dept")
+public class Dept {
+
+	@Id
+	private String id;
+	private String deptClassifyCode;
+	private String code;
+	private String name;
+	private String companyId;
+	private String parentId;
+	@Id
+	private String groupCode;
+	private String resourceFrom;
+	private String manager;
+	private Integer status;
+	private String createUser;
+	private Date createTime;
+	private String updateUser;
+	private Date updateTime;
+	private String remark;
+
+	public static Dept fromModel(DeptModel model) {
+		Dept entity = new Dept();
+		entity.setId(model.getId());
+		entity.setDeptClassifyCode(model.getDeptClassifyCode());
+		entity.setCode(model.getCode());
+		entity.setName(model.getName());
+		entity.setCompanyId(model.getCompanyId());
+		entity.setParentId(model.getParentId());
+		entity.setGroupCode(model.getGroupCode());
+		entity.setResourceFrom(model.getResourceFrom());
+		entity.setManager(model.getManager());
+		entity.setStatus(model.getStatus());
+		entity.setCreateUser(model.getCreateUser());
+		entity.setCreateTime(model.getCreateTime());
+		entity.setUpdateUser(model.getUpdateUser());
+		entity.setUpdateTime(model.getUpdateTime());
+		entity.setRemark(model.getRemark());
+		return entity;
+	}
+
+	public DeptModel toModel() {
+		DeptModel model = new DeptModel();
+		model.setId(this.id);
+		model.setDeptClassifyCode(this.getDeptClassifyCode());
+		model.setCode(this.getCode());
+		model.setName(this.getName());
+		model.setCompanyId(this.getCompanyId());
+		model.setParentId(this.getParentId());
+		model.setGroupCode(this.getGroupCode());
+		model.setResourceFrom(this.getResourceFrom());
+		model.setManager(this.getManager());
+		model.setStatus(this.getStatus());
+		model.setCreateUser(this.getCreateUser());
+		model.setCreateTime(this.getCreateTime());
+		model.setUpdateUser(this.getUpdateUser());
+		model.setUpdateTime(this.getUpdateTime());
+		model.setRemark(this.getRemark());
+		return model;
+	}
+
+}

+ 67 - 0
dmp-org/src/main/java/com/persagy/dmp/org/entity/DeptClassify.java

@@ -0,0 +1,67 @@
+package com.persagy.dmp.org.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+import com.persagy.dmp.org.model.DeptClassifyModel;
+import org.hibernate.annotations.GenericGenerator;
+import javax.persistence.GeneratedValue;
+import javax.persistence.*;
+import java.util.Date;
+
+@Setter
+@Getter
+@Entity
+@IdClass(GroupPK.class)
+@Table(name = "org_dept_classify")
+public class DeptClassify {
+
+	@Id
+	private String id;
+	private String code;
+	private String name;
+	private String parentId;
+	private Integer orderNum;
+	@Id
+	private String groupCode;
+	private Integer status;
+	private String createUser;
+	private Date createTime;
+	private String updateUser;
+	private Date updateTime;
+	private String remark;
+
+	public static DeptClassify fromModel(DeptClassifyModel model) {
+		DeptClassify entity = new DeptClassify();
+		entity.setId(model.getId());
+		entity.setCode(model.getCode());
+		entity.setName(model.getName());
+		entity.setParentId(model.getParentId());
+		entity.setOrderNum(model.getOrderNum());
+		entity.setGroupCode(model.getGroupCode());
+		entity.setStatus(model.getStatus());
+		entity.setCreateUser(model.getCreateUser());
+		entity.setCreateTime(model.getCreateTime());
+		entity.setUpdateUser(model.getUpdateUser());
+		entity.setUpdateTime(model.getUpdateTime());
+		entity.setRemark(model.getRemark());
+		return entity;
+	}
+
+	public DeptClassifyModel toModel() {
+		DeptClassifyModel model = new DeptClassifyModel();
+		model.setId(this.id);
+		model.setCode(this.getCode());
+		model.setName(this.getName());
+		model.setParentId(this.getParentId());
+		model.setOrderNum(this.getOrderNum());
+		model.setGroupCode(this.getGroupCode());
+		model.setStatus(this.getStatus());
+		model.setCreateUser(this.getCreateUser());
+		model.setCreateTime(this.getCreateTime());
+		model.setUpdateUser(this.getUpdateUser());
+		model.setUpdateTime(this.getUpdateTime());
+		model.setRemark(this.getRemark());
+		return model;
+	}
+
+}

+ 0 - 0
dmp-org/src/main/java/com/persagy/dmp/org/entity/Function.java


Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio