|
@@ -196,33 +196,55 @@ public class ObjectDigitalCriteriaHelper {
|
|
|
return;
|
|
|
}
|
|
|
// 处理relationFrom
|
|
|
- JsonNode relationFrom = criteria.get(QueryOperator.RELATION_FROM.getIndex());
|
|
|
- if(relationFrom != null && relationFrom.isObject() && relationFrom.size() > 0) {
|
|
|
- StringBuilder inSql = new StringBuilder("(select obj_from from dt_relation where 1=1 ");
|
|
|
- addWhereCond(relationFrom, inSql, "graphId");
|
|
|
- addWhereCond(relationFrom, inSql, "graphCode");
|
|
|
- addWhereCond(relationFrom, inSql, "relCode");
|
|
|
- addWhereCond(relationFrom, inSql, "objTo");
|
|
|
- inSql.append(")");
|
|
|
- ObjectNode inObj = criteria.putObject(BaseEntity.PROP_ID);
|
|
|
- inObj.put(QueryOperator.IN_SQL.getIndex(), inSql.toString());
|
|
|
- // 处理完成后删除
|
|
|
- criteria.remove(QueryOperator.RELATION_FROM.getIndex());
|
|
|
- }
|
|
|
+ ensureRelationIds(criteria, true);
|
|
|
// 处理relationTo
|
|
|
- JsonNode relationTo = criteria.get(QueryOperator.RELATION_TO.getIndex());
|
|
|
- if(relationTo != null && relationTo.isObject() && relationTo.size() > 0) {
|
|
|
- StringBuilder inSql = new StringBuilder("(select obj_to from dt_relation where 1=1 ");
|
|
|
- addWhereCond(relationTo, inSql, "graphId");
|
|
|
- addWhereCond(relationTo, inSql, "graphCode");
|
|
|
- addWhereCond(relationTo, inSql, "relCode");
|
|
|
- addWhereCond(relationTo, inSql, "objFrom");
|
|
|
- inSql.append(")");
|
|
|
- ObjectNode inObj = criteria.putObject(BaseEntity.PROP_ID);
|
|
|
- inObj.put(QueryOperator.IN_SQL.getIndex(), inSql.toString());
|
|
|
- // 处理完成后删除
|
|
|
- criteria.remove(QueryOperator.RELATION_TO.getIndex());
|
|
|
+ ensureRelationIds(criteria, false);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理关系条件
|
|
|
+ * @param criteria
|
|
|
+ * @param isFrom
|
|
|
+ */
|
|
|
+ private static void ensureRelationIds(ObjectNode criteria, boolean isFrom) {
|
|
|
+ String flagKey = isFrom ? QueryOperator.RELATION_FROM.getIndex() : QueryOperator.RELATION_TO.getIndex();
|
|
|
+ String selectKey = isFrom ? "objFrom" : "objTo";
|
|
|
+ String whereKey = isFrom ? "objTo" : "objFrom";
|
|
|
+ JsonNode relationCond = criteria.get(flagKey);
|
|
|
+ // 没有条件不需要处理
|
|
|
+ if(relationCond == null || relationCond.size() <= 0 || !relationCond.isObject()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ /** 20210827 relation条件支持复杂条件 - 使用Wrapper方式只能先查询出来,可以改为拼接sql提升效率,但需要大量扩展,不便于维护。
|
|
|
+ // 查询关系的条件
|
|
|
+ QueryWrapper<ObjectRelation> wrapper = new QueryWrapper<>();
|
|
|
+ wrapper.select(QueryCriteriaHelper.toUnderlineCase(selectKey));
|
|
|
+ // 添加所属项目条件
|
|
|
+ ConditionUtil.ensureProjectCriteria(wrapper);
|
|
|
+ QueryCriteriaHelper.toWrapper(wrapper, (ObjectNode) relationCond);
|
|
|
+ List<ObjectRelation> relations = SpringHelper.getBean(IObjectRelationService.class).queryByCondition(wrapper);
|
|
|
+ List<String> idList = CollUtil.getFieldValues(relations, selectKey, String.class);
|
|
|
+ // 回写到criteria中
|
|
|
+ ObjectNode inObj = criteria.putObject(BaseEntity.PROP_ID);
|
|
|
+ ArrayNode inArray = inObj.putArray(QueryOperator.IN.getIndex());
|
|
|
+ if(CollUtil.isEmpty(idList)) {
|
|
|
+ inArray.add("0");
|
|
|
+ } else {
|
|
|
+ idList.forEach(id -> inArray.add(id));
|
|
|
}
|
|
|
+ // 处理完成后删除
|
|
|
+ criteria.remove(flagKey);
|
|
|
+ **/
|
|
|
+ StringBuilder inSql = new StringBuilder("(select "+selectKey+" from dt_relation where 1=1 ");
|
|
|
+ addWhereCond(relationCond, inSql, "graphId");
|
|
|
+ addWhereCond(relationCond, inSql, "graphCode");
|
|
|
+ addWhereCond(relationCond, inSql, "relCode");
|
|
|
+ addWhereCond(relationCond, inSql, whereKey);
|
|
|
+ inSql.append(")");
|
|
|
+ ObjectNode inObj = criteria.putObject(BaseEntity.PROP_ID);
|
|
|
+ inObj.put(QueryOperator.IN_SQL.getIndex(), inSql.toString());
|
|
|
+ // 处理完成后删除
|
|
|
+ criteria.remove(flagKey);
|
|
|
}
|
|
|
|
|
|
/**
|