Browse Source

分页增加状态清单查询

menglu 3 years ago
parent
commit
5b1f0fbd88

+ 53 - 14
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/service/rest/RestUtil.java

@@ -375,14 +375,8 @@ public class RestUtil {
 			filter_rule = sql_json.toJSONString();
 		}
 		JSONObject CriteriaObject = JSON.parseObject(filter_rule).getJSONObject("Criteria");
-		List<String> all_params = parseCriteria(CriteriaObject);
-		JSONObject pass = new JSONObject();
-		pass.put("pass", true);
-		for (String one : all_params) {
-			if (!params.containsKey(one)) {
-				params.put(one, pass);
-			}
-		}
+		List<String> refPropertyList = new ArrayList<String>();
+		JSONObject CriteriaNew = parseCriteria(CriteriaObject, params, refPropertyList);
 
 		List<SceneDataValue> targetSet = new ArrayList<SceneDataValue>();
 		for (SceneDataBase sdb : valueObject.value_array) {
@@ -397,31 +391,52 @@ public class RestUtil {
 		for (String key : params.keySet()) {
 			Object value = params.get(key);
 			SceneDataValue svInner = new SceneDataValue(null, parentData, key, null, false);
-			svInner.value_primitive = value;
+			if (value instanceof JSONArray) {
+				svInner.value_array = new ArrayList<SceneDataBase>();
+				JSONArray valueArray = (JSONArray) value;
+				for (int i = 0; i < valueArray.size(); i++) {
+					Object valueItem = valueArray.get(i);
+					SceneDataValue svInner2 = new SceneDataValue(null, null, null, null, false);
+					svInner2.value_primitive = valueItem;
+					svInner.value_array.add(svInner2);
+				}
+			} else {
+				svInner.value_primitive = value;
+			}
 			parentData.put(key, svInner);
 		}
 		SceneDataValue sv = new SceneDataValue(Repository, parentData, valueObject.rel_property.propertyName, valueObject.rel_property, false);
 		JSONObject sql_json = JSON.parseObject(filter_rule);
+		sql_json.put("Criteria", CriteriaNew);
 		List<SceneDataValue> array = (List<SceneDataValue>) QueryUtil.QueryInner(Repository, sv, sql_json, targetSet);
 
 		return array;
 	}
 
-	private static List<String> parseCriteria(JSONObject CriteriaObject) throws Exception {
-		List<String> criteriaList = new ArrayList<String>();
+	private static JSONObject parseCriteria(JSONObject CriteriaObject, JSONObject params, List<String> criteriaList) throws Exception {
+		JSONObject result = new JSONObject();
+		JSONObject pass = new JSONObject();
+		pass.put("pass", true);
 		Object LogicOperator = CriteriaObject.get("LogicOperator");
 		if (LogicOperator != null) {
 			String LogicOperatorString = (LogicOperator).toString();
+			result.put("LogicOperator", LogicOperator);
+			JSONArray resultCriterias = new JSONArray();
+			result.put("Criterias", resultCriterias);
 			if (LogicOperatorString.equals("and") || LogicOperatorString.equals("or")) {
 				JSONArray Criterias = (JSONArray) CriteriaObject.get("Criterias");
 				for (int i = 0; i < Criterias.size(); i++) {
 					JSONObject CriteriaObjectInner = (JSONObject) Criterias.get(i);
-					List<String> criteriaInner = parseCriteria(CriteriaObjectInner);
+					List<String> criteriaInner = new ArrayList<String>();
+					JSONObject resultInner = parseCriteria(CriteriaObjectInner, params, criteriaInner);
+					resultCriterias.add(resultInner);
 					criteriaList.addAll(criteriaInner);
 				}
 			} else if (LogicOperatorString.equals("not")) {
 				JSONObject CriteriaObjectInner = (JSONObject) CriteriaObject.get("Criteria");
-				List<String> criteriaInner = parseCriteria(CriteriaObjectInner);
+				List<String> criteriaInner = new ArrayList<String>();
+				JSONObject resultInner = parseCriteria(CriteriaObjectInner, params, criteriaInner);
+				resultCriterias.add(resultInner);
 				criteriaList.addAll(criteriaInner);
 			} else {
 			}
@@ -432,8 +447,14 @@ public class RestUtil {
 					JSONObject valueInner = (JSONObject) itemValue;
 					if (valueInner.get("ref") != null) {
 						String svInner_value_primitive = parseCriteriaRef(valueInner);
+						if (params.containsKey(svInner_value_primitive)) {
+							result.put(itemKey, itemValue);
+						} else {
+							result.put(itemKey, pass);
+						}
 						criteriaList.add(svInner_value_primitive);
 					} else {
+						JSONObject itemValueResult = new JSONObject();
 						for (String itemKeyInner : valueInner.keySet()) {
 							Object itemValueInner = valueInner.get(itemKeyInner);
 							if (itemKeyInner.equals("e") || itemKeyInner.equals("ne") || itemKeyInner.equals("gt") || itemKeyInner.equals("gte")
@@ -443,18 +464,36 @@ public class RestUtil {
 									JSONObject valueInnerInner = (JSONObject) itemValueInner;
 									if (valueInnerInner.get("ref") != null) {
 										String svInner_value_primitive = parseCriteriaRef(valueInnerInner);
+										if (params.containsKey(svInner_value_primitive)) {
+											itemValueResult.put(itemKeyInner, itemValueInner);
+										} else {
+											itemValueResult.put(itemKeyInner, pass);
+										}
 										criteriaList.add(svInner_value_primitive);
 									}
 								}
 							} else if (itemKeyInner.equals("in") || itemKeyInner.equals("notin")) {
+								if (itemValueInner instanceof JSONObject) {
+									JSONObject valueInnerInner = (JSONObject) itemValueInner;
+									if (valueInnerInner.get("ref") != null) {
+										String svInner_value_primitive = parseCriteriaRef(valueInnerInner);
+										if (params.containsKey(svInner_value_primitive)) {
+											itemValueResult.put(itemKeyInner, itemValueInner);
+										} else {
+											itemValueResult.put(itemKeyInner, pass);
+										}
+										criteriaList.add(svInner_value_primitive);
+									}
+								}
 							}
 						}
+						result.put(itemKey, itemValueResult);
 					}
 				} else {
 				}
 			}
 		}
-		return criteriaList;
+		return result;
 	}
 
 	private static String parseCriteriaRef(JSONObject valueInner) throws Exception {