Browse Source

rwd: 修改附件类型信息点的值格式为对象,原来为字符串

yaoll 4 years ago
parent
commit
a66489ed08

+ 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;
+	}
+
 }

+ 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 {
 					// 动态点