|
@@ -0,0 +1,164 @@
|
|
|
+package cn.cslg.pas.common.utils.auth;
|
|
|
+
|
|
|
+import cn.cslg.pas.domain.DataSource;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+
|
|
|
+import java.lang.reflect.Field;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+@Component
|
|
|
+public class TreeUtils {
|
|
|
+ /**
|
|
|
+ * 分页查询设置返回参数 (当前页 每页条数 总条数)
|
|
|
+ */
|
|
|
+ public static String reSql(JSONObject jsonObject,List<DataSource> dataSource) {
|
|
|
+
|
|
|
+ String sql= recursionTree(jsonObject,dataSource);
|
|
|
+ return sql;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String reCompute(JSONObject jsonObject,Integer id,Object[] object) throws NoSuchFieldException, IllegalAccessException {
|
|
|
+
|
|
|
+ String sql= cRecursionTree(jsonObject,id,object);
|
|
|
+ return sql;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 将二叉树json对象转为sql where后的条件语句
|
|
|
+ *liRJ
|
|
|
+ * @param jsonObject jsaonObject
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String recursionTree(JSONObject jsonObject, List<DataSource> dataSource) {
|
|
|
+ String str1 = "";
|
|
|
+ String str2 = "";
|
|
|
+ JSONObject jsonLeft =jsonObject.getJSONObject("left");
|
|
|
+ JSONObject jsonRight =jsonObject.getJSONObject("right");
|
|
|
+ if(jsonLeft.containsKey("left")){
|
|
|
+ str1 = recursionTree(jsonLeft,dataSource);
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ String field =distinguishFields(jsonLeft.get("field").toString(),dataSource);
|
|
|
+ String value=distinguishFields(jsonLeft.get("value").toString(),dataSource);
|
|
|
+ str1 = field+jsonLeft.get("opr").toString()+value;
|
|
|
+ }
|
|
|
+ if(jsonRight.containsKey("right")){
|
|
|
+ str2= recursionTree( jsonRight,dataSource);
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ String field =distinguishFields(jsonRight.get("field").toString(),dataSource);
|
|
|
+ String value=distinguishFields(jsonRight.get("value").toString(),dataSource);
|
|
|
+ str2 =field+jsonRight.get("opr").toString()+value;
|
|
|
+ }
|
|
|
+ String sql ="("+ str1+") "+ jsonObject.get("logicOpr")+" ("+str2+")";
|
|
|
+ return sql;
|
|
|
+ };
|
|
|
+
|
|
|
+ //json规则判断
|
|
|
+ public static String cRecursionTree(JSONObject jsonObject,Integer id, Object[] object) throws NoSuchFieldException, IllegalAccessException {
|
|
|
+ String str1 = "";
|
|
|
+ String str2 = "";
|
|
|
+ JSONObject jsonLeft =jsonObject.getJSONObject("left");
|
|
|
+ JSONObject jsonRight =jsonObject.getJSONObject("right");
|
|
|
+ if(jsonLeft.containsKey("left")){
|
|
|
+ str1 = cRecursionTree(jsonLeft,id,object);
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ String field = distinguishFields(jsonLeft.get("field").toString(),object);
|
|
|
+ String value= distinguishValues(jsonLeft.get("value").toString(),object);
|
|
|
+ String opr = distinguishLogic(jsonLeft.getString("nodeType"),jsonLeft.getString("opr"));
|
|
|
+ str1 = field+opr+value;
|
|
|
+ }
|
|
|
+ if(jsonRight.containsKey("right")){
|
|
|
+ str2= cRecursionTree( jsonRight,id,object);
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ String field =distinguishFields(jsonRight.get("field").toString(),object);
|
|
|
+ String value=distinguishValues(jsonRight.get("value").toString(),object);
|
|
|
+ String opr = distinguishLogic(jsonRight.getString("nodeType"),jsonRight.getString("opr"));
|
|
|
+ str2 =field+opr+value;
|
|
|
+ }
|
|
|
+ String sql ="("+ str1+") "+distinguishLogic(jsonObject.getString("nodeType"),jsonObject.getString("logicOpr"))+" ("+str2+")";
|
|
|
+
|
|
|
+ return sql;
|
|
|
+ };
|
|
|
+
|
|
|
+ //对field部分进行计算 sql查询
|
|
|
+ public static String distinguishFields(String field, List<DataSource> dataSources){
|
|
|
+ String tem ="";
|
|
|
+ String reField =field;
|
|
|
+ for(DataSource dataSource :dataSources){
|
|
|
+ if(field.equals(dataSource.getDataSourceField()) ){
|
|
|
+ tem =dataSource.getDataSourceDataBase();
|
|
|
+ break;
|
|
|
+ }}
|
|
|
+ switch (tem){
|
|
|
+ case "1":
|
|
|
+ reField="";
|
|
|
+ break;
|
|
|
+ case "2":
|
|
|
+ reField="1";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ return reField;
|
|
|
+ }
|
|
|
+
|
|
|
+ //对field部分进行计算
|
|
|
+ public static String distinguishFields(String field, Object[] object) throws NoSuchFieldException, IllegalAccessException {
|
|
|
+ String reField ="'"+field+"'";
|
|
|
+ //反射获方法的参数值
|
|
|
+ Class jsonClass = object[0].getClass();
|
|
|
+ for(Field field1: jsonClass.getDeclaredFields()){
|
|
|
+ if(field1.getName().equals(field)){ //判断field的值是否和参数名一样,一样的话变为参数值
|
|
|
+ Field dataField = jsonClass.getDeclaredField(field);
|
|
|
+ dataField.setAccessible(true);//设置data属性为可访问的
|
|
|
+ String fie=dataField.get(object[0]).toString();
|
|
|
+ reField ="'"+fie+"'";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return reField;
|
|
|
+ }
|
|
|
+
|
|
|
+ //对value部分进行计算
|
|
|
+ public static String distinguishValues(String value, Object[] object) throws NoSuchFieldException, IllegalAccessException {
|
|
|
+ String reValue ="'"+value+"'";
|
|
|
+ //反射获得参数值
|
|
|
+ Class jsonClass = object[0].getClass();
|
|
|
+ for(Field field1: jsonClass.getDeclaredFields()){
|
|
|
+ if(field1.getName().equals(value)){ //判断value的值是否和参数名一样,一样的话变为参数值
|
|
|
+ Field dataField = jsonClass.getDeclaredField(value);
|
|
|
+ dataField.setAccessible(true);//设置data属性为可访问的
|
|
|
+ String fie=dataField.get(object[0]).toString();
|
|
|
+ reValue ="'"+fie+"'";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return reValue;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public static String distinguishLogic(String nodeType ,String opr) {
|
|
|
+ if(nodeType .equals("logic")){
|
|
|
+ switch (opr){
|
|
|
+ case "=":
|
|
|
+ opr = "==";
|
|
|
+ break;
|
|
|
+ case "and":
|
|
|
+ opr = "&&";
|
|
|
+ break;
|
|
|
+ case "or":
|
|
|
+ opr = "||";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return opr;
|
|
|
+
|
|
|
+ }
|
|
|
+}
|