Browse Source

Merge branch 'master' into huarun

lixing 4 years ago
parent
commit
9fad98eea7
16 changed files with 187 additions and 39 deletions
  1. 1 1
      dmp-alarm/src/main/java/com/persagy/dmp/alarm/service/AlarmItemService.java
  2. 1 0
      dmp-model/src/main/java/com/persagy/dmp/rwd/model/RelationInstanceModel.java
  3. 2 0
      dmp-rwd-datautils/src/main/java/com/persagy/dmp/rwd/datautils/service/TransObjInfoService.java
  4. 1 1
      dmp-rwd-datautils/src/main/java/com/persagy/dmp/rwd/datautils/service/TransRelationService.java
  5. 1 1
      dmp-rwd-funcid-parser/src/main/java/com/persagy/dmp/rwd/funcid/parse/parser/ParserUtils.java
  6. 10 17
      dmp-rwd-funcid-parser/src/main/java/com/persagy/dmp/rwd/funcid/parse/parser/impl/AttachmentParser.java
  7. 23 0
      dmp-rwd-funcid-parser/src/main/java/com/persagy/dmp/rwd/funcid/parse/utils/ObjectNodeUtils.java
  8. 3 0
      dmp-rwd/src/main/java/com/persagy/dmp/rwd/entity/RelationInstance.java
  9. 1 0
      dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/InitService.java
  10. 39 2
      dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/ObjectInstanceCreateService.java
  11. 37 8
      dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/ObjectInstanceUpdateService.java
  12. 22 2
      dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/RelationInstanceService.java
  13. 7 2
      dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/iot/CurrentIotService.java
  14. 12 2
      dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/iot/HistoryIotService.java
  15. 8 3
      dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/iot/SettingIotService.java
  16. 19 0
      dmp-rwd/src/main/java/com/persagy/dmp/rwd/util/MeterUtils.java

+ 1 - 1
dmp-alarm/src/main/java/com/persagy/dmp/alarm/service/AlarmItemService.java

@@ -178,7 +178,7 @@ public class AlarmItemService extends AlarmBaseService {
 
     public AlarmItemModel getAlarmItemByItemCode(String itemCode, String projectId, String groupCode, String appId) {
         JacksonCriteria criteria = JacksonCriteria.newInstance();
-        criteria.add("itemCode", itemCode);
+        criteria.add("code", itemCode);
         if (StringUtils.isNotEmpty(projectId)) {
             criteria.add("projectId", projectId);
         }

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

@@ -14,6 +14,7 @@ public class RelationInstanceModel {
 	private String graphId;
 	private String graphCode;
 	private String relCode;
+	private String relValue;
 	private String objFrom;
 	private String objTo;
 	private Integer status;

+ 2 - 0
dmp-rwd-datautils/src/main/java/com/persagy/dmp/rwd/datautils/service/TransObjInfoService.java

@@ -217,7 +217,9 @@ public class TransObjInfoService {
 	private void initObjectClassCodeCache(TransContext ctx, Map<String, String> objectClassCodeCache) {
 		JacksonCriteria criteria = JacksonCriteria.newInstance();
 		criteria.add("projectId", ctx.getProjectId());
+//		criteria.add("id", "Eq44030700030f77c5713ecd492382f25959fdcce7bd"); // TODO for test
 		criteria.addWithColumn("classCode");
+
 		String url = rwdServer + "/rwd/instance/object/query?projectId=" + ctx.getProjectId() + "&groupCode=" + ctx.getGroupCode();
 		HttpUtils.HttpResult result = httpUtils.post(url, JacksonMapper.toSimpleJson(criteria), 1500000);
 		if (result.success()) {

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

@@ -118,7 +118,7 @@ public class TransRelationService {
 		reader.close();
 
 		if (objectArray.size() > 0) {
-			String url = rwdServer + "/rwd/instance/relation/create?projectId=" + ctx.getProjectId();
+			String url = rwdServer + "/rwd/instance/relation/create?groupCode=" + ctx.getGroupCode() + "&projectId=" + ctx.getProjectId();
 			HttpUtils.HttpResult response = httpUtils.post(url, JacksonMapper.toSimpleJson(data), 3600000);
 			System.out.println(response.getContent());
 		}

+ 1 - 1
dmp-rwd-funcid-parser/src/main/java/com/persagy/dmp/rwd/funcid/parse/parser/ParserUtils.java

@@ -37,7 +37,7 @@ public class ParserUtils {
 		} else if (type == FuncidDataType.MENUM) { // TODO
 			return ObjectNodeUtils.isString(node);
 		} else if (type == FuncidDataType.ATTACHMENT) { // TODO
-			return ObjectNodeUtils.isString(node);
+			return ObjectNodeUtils.isObject(node);
 		} else if (type == FuncidDataType.OBJECT) {
 			return ObjectNodeUtils.isString(node); // TODO
 		}

+ 10 - 17
dmp-rwd-funcid-parser/src/main/java/com/persagy/dmp/rwd/funcid/parse/parser/impl/AttachmentParser.java

@@ -1,6 +1,7 @@
 package com.persagy.dmp.rwd.funcid.parse.parser.impl;
 
 import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.dmp.rwd.enums.FuncidDataType;
 import com.persagy.dmp.rwd.funcid.parse.parser.ParserContext;
 import com.persagy.dmp.rwd.funcid.parse.parser.ParserUtils;
@@ -13,7 +14,7 @@ import java.util.List;
  * @date: 2020-09-10
  * @verison: 1.0
  */
-public class AttachmentParser extends AbstractParser<String> {
+public class AttachmentParser extends AbstractParser<ObjectNode> {
 
 	@Override
 	public void checkDef(ParserContext context) {
@@ -21,7 +22,7 @@ public class AttachmentParser extends AbstractParser<String> {
 	}
 
 	@Override
-	public void checkValue(ParserContext<String> context) {
+	public void checkValue(ParserContext<ObjectNode> context) {
 		super.checkValue(context);
 		if (context.isHasError()) {
 			return;
@@ -36,39 +37,31 @@ public class AttachmentParser extends AbstractParser<String> {
 		Boolean isMultiple = def.getIsMultiple();
 		Boolean isRegion = def.getIsRegion();
 
-		if (isMultiple && isRegion) {
-			// 复数, 区间
-			context.addError("不支持[Attachment 复数 区间]");
+		if (isRegion) {
+			// 区间
+			context.addError("不支持[Attachment]区间");
 			return;
 		}
 
-		if (isMultiple && !isRegion) {
+		if (isMultiple) {
 			// 复数 非区间
 			if (!ParserUtils.isArray(source, dataType)) {
 				context.addError("值错误[" + sourceStr + "]");
 				return;
 			}
-			List<String> value = ParserUtils.parseToList(sourceStr, String.class);
+			List<ObjectNode> value = ParserUtils.parseToList(sourceStr, ObjectNode.class);
 			if (value == null || value.size() == 0) {
 				context.addError("值错误[" + sourceStr + "]");
 				return;
 			}
 			context.setArrayValue(value);
-		}
-
-		if (!isMultiple && isRegion) {
-			// 单数 区间
-			context.addError("不支持[Attachment 单数 区间]");
-			return;
-		}
-
-		if (!isMultiple && !isRegion) {
+		} else {
 			// 单数 非区间
 			if (!ParserUtils.is(source, dataType)) {
 				context.addError("值错误[" + sourceStr + "]");
 				return;
 			}
-			String value = ParserUtils.parse(sourceStr, String.class);
+			ObjectNode value = ParserUtils.parse(sourceStr, ObjectNode.class);
 			context.setValue(value);
 		}
 	}

+ 23 - 0
dmp-rwd-funcid-parser/src/main/java/com/persagy/dmp/rwd/funcid/parse/utils/ObjectNodeUtils.java

@@ -176,4 +176,27 @@ public class ObjectNodeUtils {
 		return null;
 	}
 
+
+	public static boolean isObject(JsonNode node) {
+		if (node == null) {
+			return false;
+		}
+		JsonNodeType nodeType = node.getNodeType();
+		if (nodeType == JsonNodeType.ARRAY) {
+			return false;
+		} else if(nodeType == JsonNodeType.OBJECT){
+			return true;
+		} else if(nodeType == JsonNodeType.POJO){
+			return true;
+		}
+		return true;
+	}
+
+	public static ObjectNode getObject(JsonNode node) {
+		if (node == null) {
+			return null;
+		}
+		return (ObjectNode) node;
+	}
+
 }

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

@@ -28,6 +28,7 @@ public class RelationInstance {
 	private String graphCode;
 	@Column(updatable = false)
 	private String relCode;
+	private String relValue;
 	@Column(updatable = false)
 	private String objFrom;
 	@Column(updatable = false)
@@ -52,6 +53,7 @@ public class RelationInstance {
 		entity.setGraphId(model.getGraphId());
 		entity.setGraphCode(model.getGraphCode());
 		entity.setRelCode(model.getRelCode());
+		entity.setRelValue(model.getRelValue());
 		entity.setObjFrom(model.getObjFrom());
 		entity.setObjTo(model.getObjTo());
 		entity.setStatus(model.getStatus());
@@ -71,6 +73,7 @@ public class RelationInstance {
 		model.setGraphId(this.getGraphId());
 		model.setGraphCode(this.getGraphCode());
 		model.setRelCode(this.getRelCode());
+		model.setRelValue(this.getRelValue());
 		model.setObjFrom(this.getObjFrom());
 		model.setObjTo(this.getObjTo());
 		model.setStatus(this.getStatus());

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

@@ -337,6 +337,7 @@ public class InitService extends BaseService {
 		sql.append("   `graph_id` varchar(40) DEFAULT NULL,                                 \n");
 		sql.append("   `graph_code` varchar(40) DEFAULT NULL,                               \n");
 		sql.append("   `rel_code` varchar(40) DEFAULT NULL,                                 \n");
+		sql.append("   `rel_value` varchar(45) DEFAULT NULL,                                \n");
 		sql.append("   `obj_from` varchar(100) DEFAULT NULL,                                \n");
 		sql.append("   `obj_to` varchar(100) DEFAULT NULL,                                  \n");
 		sql.append("   `status` int(11) NOT NULL DEFAULT '1',                               \n");

+ 39 - 2
dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/ObjectInstanceCreateService.java

@@ -171,8 +171,45 @@ public class ObjectInstanceCreateService extends BaseService {
 						InfoCodeParser parser = infoCodeParserFactory.getParser(funcidDefModel.getDataType());
 						ParserContext parserContext = new ParserContext(funcidDefModel, source);
 						parser.checkValue(parserContext);
-						Object value = parserContext.getValue();
-						values.putPOJO(code, value);
+						Boolean isMultiple = funcidDefModel.getIsMultiple();
+						Boolean isRegion = funcidDefModel.getIsRegion();
+						if (isMultiple && isRegion) {
+							// 复数区间
+							List value = parserContext.getRegionArray();
+							if (value != null) {
+								if (entity.getInfos() == null) {
+									entity.setInfos(JsonNodeFactory.instance.objectNode());
+								}
+								entity.getInfos().putPOJO(code, value);
+							}
+						} else if (isMultiple && !isRegion) {
+							// 复数非区间
+							List value = parserContext.getArrayValue();
+							if (value != null) {
+								if (entity.getInfos() == null) {
+									entity.setInfos(JsonNodeFactory.instance.objectNode());
+								}
+								entity.getInfos().putPOJO(code, value);
+							}
+						} else if (!isMultiple && isRegion) {
+							// 单数 区间
+							Object value = parserContext.getRegionValue();
+							if (value != null) {
+								if (entity.getInfos() == null) {
+									entity.setInfos(JsonNodeFactory.instance.objectNode());
+								}
+								entity.getInfos().putPOJO(code, value);
+							}
+						} else if (!isMultiple && !isRegion) {
+							// 单数 非区间
+							Object value = parserContext.getValue();
+							if (value != null) {
+								if (entity.getInfos() == null) {
+									entity.setInfos(JsonNodeFactory.instance.objectNode());
+								}
+								entity.getInfos().putPOJO(code, value);
+							}
+						}
 					} else {
 						// 动态值不需校验
 						values.set(code, source);

+ 37 - 8
dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/ObjectInstanceUpdateService.java

@@ -85,9 +85,6 @@ public class ObjectInstanceUpdateService extends BaseService {
 				response.setFail("id is required");
 				return response;
 			}
-			if ("Eq44030500190026e03ce3554a66ad66269a85106482".equals(id)) {
-				log.info("id = {}", id);
-			}
 			String classCode = super.getInfoCodeValue(orgParam.groupCode, orgParam.projectId, id, RwdConstants.OBJECT_CLASSCODE);
 			if (classCode == null) {
 				response.setFail("object[" + id + "] not exists");
@@ -198,12 +195,44 @@ public class ObjectInstanceUpdateService extends BaseService {
 					InfoCodeParser parser = infoCodeParserFactory.getParser(funcidDefModel.getDataType());
 					ParserContext parserContext = new ParserContext(funcidDefModel, source);
 					parser.checkValue(parserContext);
-					Object value = parserContext.getValue();
-					if (value != null) {
-						if (entity.getInfos() == null) {
-							entity.setInfos(JsonNodeFactory.instance.objectNode());
+					Boolean isMultiple = funcidDefModel.getIsMultiple();
+					Boolean isRegion = funcidDefModel.getIsRegion();
+					if (isMultiple && isRegion) {
+						// 复数区间
+						List value = parserContext.getRegionArray();
+						if (value != null) {
+							if (entity.getInfos() == null) {
+								entity.setInfos(JsonNodeFactory.instance.objectNode());
+							}
+							entity.getInfos().putPOJO(code, value);
+						}
+					} else if (isMultiple && !isRegion) {
+						// 复数非区间
+						List value = parserContext.getArrayValue();
+						if (value != null) {
+							if (entity.getInfos() == null) {
+								entity.setInfos(JsonNodeFactory.instance.objectNode());
+							}
+							entity.getInfos().putPOJO(code, value);
+						}
+					} else if (!isMultiple && isRegion) {
+						// 单数 区间
+						Object value = parserContext.getRegionValue();
+						if (value != null) {
+							if (entity.getInfos() == null) {
+								entity.setInfos(JsonNodeFactory.instance.objectNode());
+							}
+							entity.getInfos().putPOJO(code, value);
+						}
+					} else if (!isMultiple && !isRegion) {
+						// 单数 非区间
+						Object value = parserContext.getValue();
+						if (value != null) {
+							if (entity.getInfos() == null) {
+								entity.setInfos(JsonNodeFactory.instance.objectNode());
+							}
+							entity.getInfos().putPOJO(code, value);
 						}
-						entity.getInfos().putPOJO(code, value);
 					}
 				} else {
 					// 动态点

+ 22 - 2
dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/RelationInstanceService.java

@@ -91,12 +91,12 @@ public class RelationInstanceService extends BaseService {
 				return response;
 			}
 
+			QGraphInstance qt = QGraphInstance.graphInstance;
 			// 优先级: graphId > graphCode
 			if (param.getGraphId() != null) {
 				GraphInstance gi = graphInstanceRepository.getOne(entity.getGraphId());
 				entity.setGraphCode(gi.getGraphCode());
 			} else if (param.getGraphCode() != null) {
-				QGraphInstance qt = QGraphInstance.graphInstance;
 				Sort orders = Sort.by(new Sort.Order(Sort.Direction.ASC, "id"));
 				Iterable<GraphInstance> all = graphInstanceRepository.findAll(qt.groupCode.eq(groupCode).and(qt.projectId.eq(projectId).and(qt.graphCode.eq(entity.getGraphCode()))), orders);
 				GraphInstance next = all.iterator().next();
@@ -106,7 +106,25 @@ public class RelationInstanceService extends BaseService {
 			if (entity.getCreateApp() == null) {
 				entity.setCreateApp(DmpParameterStorage.getAppId());
 			}
-			list.add(entity);
+			// 判断是否已存在
+			QRelationInstance rt = QRelationInstance.relationInstance;
+			BooleanExpression exp = rt.groupCode.eq(entity.getGroupCode())
+					.and(rt.projectId.eq(entity.getProjectId()))
+					.and(rt.graphId.eq(entity.getGraphId()))
+					.and(rt.relCode.eq(entity.getRelCode()))
+					.and(rt.objFrom.eq(entity.getObjFrom()))
+					.and(rt.objTo.eq(entity.getObjTo()));
+			if (entity.getRelValue() != null) {
+				exp = exp.and(rt.relValue.eq(entity.getRelValue()));
+			} else {
+				exp = exp.and(rt.relValue.isNull());
+			}
+
+			long count = relationInstanceRepository.count(exp);
+			if (count == 0) {
+				// 数据不存在, 新增, 已存在时忽略
+				list.add(entity);
+			}
 		}
 		if (list.size() > 0) {
 			relationInstanceRepository.saveAll(list);
@@ -121,6 +139,7 @@ public class RelationInstanceService extends BaseService {
 				message.add("graphId", relation.getGraphId());
 				message.add("graphCode", relation.getGraphCode());
 				message.add("relCode", relation.getRelCode());
+				message.add("relValue", relation.getRelValue());
 				message.add("objFrom", relation.getObjFrom());
 				message.add("objTo", relation.getObjTo());
 				response.add(message);
@@ -210,5 +229,6 @@ public class RelationInstanceService extends BaseService {
 		response.setCount(query.getCount());
 		return response;
 	}
+
 }
 

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

@@ -10,6 +10,7 @@ import com.persagy.dmp.common.http.HttpUtils;
 import com.persagy.dmp.config.DmpParameterStorage;
 import com.persagy.dmp.rwd.config.RwdConstants;
 import com.persagy.dmp.rwd.model.iot.CurrentDataModel;
+import com.persagy.dmp.rwd.util.MeterUtils;
 import lombok.Getter;
 import lombok.Setter;
 import org.springframework.stereotype.Service;
@@ -67,12 +68,16 @@ public class CurrentIotService extends BaseIotService {
 //			}
 
 			String infoCodeValue = getInfoCodeValue(groupCode, projectId, model.getObjectId(), infoCode);
-			if (infoCodeValue == null) {
+			if (infoCodeValue == null || "".equals(infoCode.trim())) {
 				model.setError("value of infoCode[" + model.getObjectId() + ":" + infoCode + "] is null");
 				continue;
 			}
-
+			// 判断信息点的值是不是表号-功能号格式
 			model.setInfoValue(infoCodeValue);
+			if (!MeterUtils.matchFormat(infoCodeValue)) {
+				model.setError("value of infoCode[" + model.getObjectId() + ":" + infoCode + "][ " + infoCodeValue + "] 不是正确的表号功能号");
+				continue;
+			}
 			parameters.add(new PointParam(model.getMeter(), model.getFunction()));
 		}
 

+ 12 - 2
dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/iot/HistoryIotService.java

@@ -6,14 +6,18 @@ import com.fasterxml.jackson.databind.node.JsonNodeFactory;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.common.json.JacksonMapper;
 import com.persagy.common.web.ListResponse;
-import com.persagy.dmp.config.DmpParameterStorage;
 import com.persagy.dmp.common.http.HttpUtils;
+import com.persagy.dmp.config.DmpParameterStorage;
 import com.persagy.dmp.rwd.config.RwdConstants;
 import com.persagy.dmp.rwd.model.iot.history.InfoCodeModel;
 import com.persagy.dmp.rwd.model.iot.history.RequestModel;
+import com.persagy.dmp.rwd.util.MeterUtils;
 import org.springframework.stereotype.Service;
 
-import java.util.*;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 @Service
 public class HistoryIotService extends BaseIotService {
@@ -79,6 +83,12 @@ public class HistoryIotService extends BaseIotService {
 			param.setError("value of infoCode[" + objectId + ":" + infoCode + "] is null");
 			return;
 		}
+		// 判断信息点的值是不是表号-功能号格式
+		if (!MeterUtils.matchFormat(infoCodeValue)) {
+			param.setStatus("error");
+			param.setError("value of infoCode[" + objectId + ":" + infoCode + "][ " + infoCodeValue + "] 不是正确的表号功能号");
+			return;
+		}
 
 		int idx = infoCodeValue.lastIndexOf("-");
 		if (idx == -1) {

+ 8 - 3
dmp-rwd/src/main/java/com/persagy/dmp/rwd/service/iot/SettingIotService.java

@@ -6,10 +6,11 @@ import com.fasterxml.jackson.databind.node.JsonNodeFactory;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.common.json.JacksonMapper;
 import com.persagy.common.web.ListResponse;
-import com.persagy.dmp.config.DmpParameterStorage;
 import com.persagy.dmp.common.http.HttpUtils;
+import com.persagy.dmp.config.DmpParameterStorage;
 import com.persagy.dmp.rwd.config.RwdConstants;
 import com.persagy.dmp.rwd.model.iot.SettingDataModel;
+import com.persagy.dmp.rwd.util.MeterUtils;
 import org.springframework.stereotype.Service;
 
 import java.util.*;
@@ -42,10 +43,14 @@ public class SettingIotService extends BaseIotService {
 				continue;
 			}
 
-			int idx = infoCodeValue.lastIndexOf("-");
-			if (idx == -1) {
+			// 判断信息点的值是不是表号-功能号格式
+			if (!MeterUtils.matchFormat(infoCodeValue)) {
+				model.setStatus("error");
+				model.setError("value of infoCode[" + objectId + ":" + infoCode + "][ " + infoCodeValue + "] 不是正确的表号功能号");
 				continue;
 			}
+
+			int idx = infoCodeValue.lastIndexOf("-");
 			String meter = infoCodeValue.substring(0, idx);
 			String function = infoCodeValue.substring(idx + 1);
 			model.setMeter(meter);

+ 19 - 0
dmp-rwd/src/main/java/com/persagy/dmp/rwd/util/MeterUtils.java

@@ -0,0 +1,19 @@
+package com.persagy.dmp.rwd.util;
+
+/**
+ * @author: yaoll
+ * @date: 2020-12-16
+ * @verison: 1.0
+ */
+public class MeterUtils {
+
+	public static boolean matchFormat(String infoCodeValue){
+		// 判断信息点的值是不是表号-功能号格式
+		// 包含中划线且中划线不在开头结尾
+		int idx = infoCodeValue.indexOf("-");
+		if (idx < 1 || idx == infoCodeValue.length() - 1) {
+			return false;
+		}
+		return true;
+	}
+}