许鹏程
2023-05-24 30d06cd40ab7c59a0bb8641f5d28e219af2c085c
src/main/java/com/product/face/entity/FaceListEntity.java
@@ -28,319 +28,327 @@
 */
public class FaceListEntity implements Serializable {
    private static final long serialVersionUID = -6777140406080679771L;
    /**
     * 表uuid
     */
    private String tableUuid;
    /**
     * face_uuid
     */
    private String uuid;
    /**
     * 表单名
     */
    private String faceName;
    /**
     * 功能uuid
     */
    @Deprecated
    private String functionUuid;
    /**
     * 字段集合
     */
    private List<FaceField> faceFields;
    /**
     * 表名
     */
    private String tableName;
   private static final long serialVersionUID = -6777140406080679771L;
   /**
    * 表uuid
    */
   private String tableUuid;
   /**
    * face_uuid
    */
   private String uuid;
   /**
    * 表单名
    */
   private String faceName;
   /**
    * 功能uuid
    */
   @Deprecated
   private String functionUuid;
   /**
    * 字段集合
    */
   private List<FaceField> faceFields;
   /**
    * 表名
    */
   private String tableName;
    /**
     * 获取表名
     *
     * @return
     */
    public String getTableName() {
        if (this.tableName == null && this.tableUuid != null) {
            //从缓存中获取
            DataTableEntity cacheData = DataPoolCacheImpl.getInstance().getCacheData("所有表信息(uuid)", new String[]{this.tableUuid});
            if (cacheData != null && cacheData.getRows() > 0) {
                String table_name = cacheData.getString(0, "table_name");
                this.tableName = table_name;
            }
        }
        return tableName;
    }
   /**
    * 获取表名
    *
    * @return
    */
   public String getTableName() {
      if (this.tableName == null && this.tableUuid != null) {
         //从缓存中获取
         DataTableEntity cacheData = DataPoolCacheImpl.getInstance().getCacheData("所有表信息(uuid)", new String[]{this.tableUuid});
         if (cacheData != null && cacheData.getRows() > 0) {
            String table_name = cacheData.getString(0, "table_name");
            this.tableName = table_name;
         }
      }
      return tableName;
   }
    /**
     * 条件字段
     *
     * @param fieldName      字段名称
     * @param faceUuid       字段uuid
     * @param columnName     列名
     * @param columnWidth    列宽
     * @param sequence       排序
     * @param fieldReference 参照
     */
    public void addField(String fieldName, String faceUuid, String columnName, String columnWidth, Integer sequence, String fieldReference) {
        FaceField faceField = new FaceField();
        faceField.setFieldName(fieldName);
        faceField.setFieldUuid(faceUuid);
        faceField.setColumnName(columnName);
        faceField.setColumnWidth(columnWidth);
        faceField.setSequence(sequence);
        faceField.setFieldReference(fieldReference);
        if (this.faceFields == null) {
            this.faceFields = Lists.newArrayList();
        }
        this.faceFields.add(faceField);
    }
   /**
    * 条件字段
    *
    * @param fieldName      字段名称
    * @param faceUuid       字段uuid
    * @param columnName     列名
    * @param columnWidth    列宽
    * @param sequence       排序
    * @param fieldReference 参照
    */
   public void addField(String fieldName, String faceUuid, String columnName, String columnWidth, Integer sequence, String fieldReference) {
      FaceField faceField = new FaceField();
      faceField.setFieldName(fieldName);
      faceField.setFieldUuid(faceUuid);
      faceField.setColumnName(columnName);
      faceField.setColumnWidth(columnWidth);
      faceField.setSequence(sequence);
      faceField.setFieldReference(fieldReference);
      if (this.faceFields == null) {
         this.faceFields = Lists.newArrayList();
      }
      this.faceFields.add(faceField);
   }
    /**
     * 字段排序方法
     */
    public void sortField() {
        if (this.faceFields != null && this.faceFields.size() > 0) {
            this.faceFields.sort((a, b) -> {
                return a.getSequence().compareTo(b.getSequence());
            });
        }
    }
   /**
    * 字段排序方法
    */
   public void sortField() {
      if (this.faceFields != null && this.faceFields.size() > 0) {
         this.faceFields.sort((a, b) -> {
            return a.getSequence().compareTo(b.getSequence());
         });
      }
   }
    public String getTableUuid() {
        return tableUuid;
    }
   public String getTableUuid() {
      return tableUuid;
   }
    public void setTableUuid(String tableUuid) {
        this.tableUuid = tableUuid;
    }
   public void setTableUuid(String tableUuid) {
      this.tableUuid = tableUuid;
   }
    public String getUuid() {
        return uuid;
    }
   public String getUuid() {
      return uuid;
   }
    public void setUuid(String uuid) {
        this.uuid = uuid;
    }
   public void setUuid(String uuid) {
      this.uuid = uuid;
   }
    public String getFaceName() {
        return faceName;
    }
   public String getFaceName() {
      return faceName;
   }
    public void setFaceName(String faceName) {
        this.faceName = faceName;
    }
   public void setFaceName(String faceName) {
      this.faceName = faceName;
   }
    public String getFunctionUuid() {
        return functionUuid;
    }
   public String getFunctionUuid() {
      return functionUuid;
   }
    public void setFunctionUuid(String functionUuid) {
        this.functionUuid = functionUuid;
    }
   public void setFunctionUuid(String functionUuid) {
      this.functionUuid = functionUuid;
   }
    public List<FaceField> getFaceFields() {
        return faceFields;
    }
   public List<FaceField> getFaceFields() {
      return faceFields;
   }
    public void setFaceFields(List<FaceField> faceFields) {
        this.faceFields = faceFields;
    }
   public void setFaceFields(List<FaceField> faceFields) {
      this.faceFields = faceFields;
   }
    /**
     * 获取参照条件
     *
     * @param fieldName
     * @param dictName
     * @return
     */
    private String getDictFilter(String fieldName, String dictName) {
        StringBuilder filter = new StringBuilder();
        DictService bean = SpringBeanUtil.getBean(DictService.class);
        String manager_type = null;
        SystemUser currentUser = SpringMVCContextHolder.getCurrentUser();
        if (currentUser != null && currentUser.getCurrentManager() != null) {
            manager_type = currentUser.getCurrentManager().getString(CmnConst.MANAGER_TYPE);
        } else {
            manager_type = null;
        }
        //拼装普通参照查询所需参数
        FieldSetEntity fse = new FieldSetEntity();
        fse.setTableName(CmnConst.PRODUCT_SYS_DICT);
        fse.setValue(CmnConst.DICT_NAME, dictName);
        fse.setValue(CoreConst.SYSTEM_CLIENT_TYPE_, currentUser.getClientType());
        //获取参照集合
        DataTableEntity dataTableEntity = bean.listDictByname(fse, manager_type);
        if (!BaseUtil.dataTableIsEmpty(dataTableEntity)) {
            //组成条件
            Object[] uuids = dataTableEntity.getUuids();
            filter.append(fieldName);
            filter.append(" in  (SELECT  dict_value FROM product_sys_dict where ");
            filter.append(BaseUtil.buildQuestionMarkFilter("uuid", uuids, true));
            filter.append(" and dict_label like concat('%','~val~','%') ) ");
        }
        return filter.toString();
    }
   /**
    * 获取参照条件
    *
    * @param fieldName
    * @param dictName
    * @return
    */
   private String getDictFilter(String fieldName, String dictName) {
      StringBuilder filter = new StringBuilder();
      DictService bean = SpringBeanUtil.getBean(DictService.class);
      String manager_type = null;
      SystemUser currentUser = SpringMVCContextHolder.getCurrentUser();
      if (currentUser != null && currentUser.getCurrentManager() != null) {
         manager_type = currentUser.getCurrentManager().getString(CmnConst.MANAGER_TYPE);
      } else {
         manager_type = null;
      }
      //拼装普通参照查询所需参数
      FieldSetEntity fse = new FieldSetEntity();
      fse.setTableName(CmnConst.PRODUCT_SYS_DICT);
      fse.setValue(CmnConst.DICT_NAME, dictName);
      fse.setValue(CoreConst.SYSTEM_CLIENT_TYPE_, currentUser.getClientType());
      //获取参照集合
      DataTableEntity dataTableEntity = bean.listDictByname(fse, manager_type);
      if (!BaseUtil.dataTableIsEmpty(dataTableEntity)) {
         //组成条件
         Object[] uuids = dataTableEntity.getUuids();
         filter.append(fieldName);
         filter.append(" in  (SELECT  dict_value FROM product_sys_dict where ");
         filter.append(BaseUtil.buildQuestionMarkFilter("uuid", uuids, true));
         filter.append(" and dict_label like concat('%','~val~','%') ) ");
      }
      return filter.toString();
   }
    /**
     * 获取条件
     *
     * @param tableAlias 表别名
     * @param aliasField 字段别名
     * @return
     */
    public Map<String, List<String>> getFilters(String tableAlias, Map<String, List<String>> aliasField) {
        DataPoolCacheImpl poolCache = null;
        //所有字段集合
        List<FaceField> faceFields = this.getFaceFields();
        //普通模糊查询字段集合
        List<String> fieldNames = Lists.newArrayList();
        //参照模糊查询条件集合
        List<String> filters = Lists.newArrayList();
        //返回的结果集
        Map<String, List<String>> maps = Maps.newHashMap();
        maps.put("fields", fieldNames);
        maps.put("filter", filters);
        for (int i = 0; i < faceFields.size(); i++) {
            FaceField faceField = faceFields.get(i);
            if (StringUtils.isEmpty(faceField.getFieldName()) || StringUtils.isEmpty(faceField.getFieldReference())) {
                if (poolCache == null) {
                    poolCache = DataPoolCacheImpl.getInstance();
                }
                DataTableEntity dt = poolCache.getCacheData("表字段信息", new String[]{getTableUuid(), faceField.getFieldName()});
                if (BaseUtil.dataTableIsEmpty(dt)) {
                } else {
                    FieldSetEntity f = dt.getFieldSetEntity(0);
                    faceField.setFieldName(f.getString(CmnConst.FIELD_NAME));
                    faceField.setFieldReference(f.getString("field_reference"));
                }
            }
            //字段名称
            String fieldName = faceField.getFieldName();
            if (aliasField != null && !StringUtils.isEmpty(fieldName)) {
                List<String> fieldAlias = aliasField.get(getTableName() + "." + fieldName);
                if (fieldAlias != null && fieldAlias.size() > 0) {
                    String alias = fieldAlias.get(0);
                    if (!StringUtils.isEmpty(alias)) {
                        fieldName = alias;
                    }
                }
            }
            //参照处理
            String field_reference = faceField.getFieldReference();
            if (!StringUtils.isEmpty(field_reference)) {
                if (field_reference.indexOf("《") == 0 && field_reference.indexOf("》") > 0) {
                    //普通参照
                    filters.add(getDictFilter(fieldName, field_reference.replace("《", "").replace("》", "")));
                    continue;
                } else {
                    if (poolCache == null) {
                        poolCache = DataPoolCacheImpl.getInstance();
                    }
                    //高级参照
                    DataTableEntity prompt = poolCache.getCacheData("高级参照配置信息", new String[]{field_reference});
                    if (BaseUtil.dataTableIsEmpty(prompt)) {
                        continue;
                    }
                    FieldSetEntity ff = prompt.getFieldSetEntity(0);
                    StringBuilder p = new StringBuilder();
                    p.append(fieldName).append(" in ").append(" ( SELECT ").append(ff.getString("value_field")).append(" FROM ").append(ff.getString("source_table"));
                    p.append(" WHERE ").append(ff.getString("view_fields")).append(" like concat('%','~val~','%') )");
                    filters.add(p.toString());
                    continue;
                }
            }
   /**
    * 获取条件
    *
    * @param tableAlias 表别名
    * @param aliasField 字段别名
    * @return
    */
   public Map<String, List<String>> getFilters(String tableAlias, Map<String, List<String>> aliasField) {
      DataPoolCacheImpl poolCache = null;
      //所有字段集合
      List<FaceField> faceFields = this.getFaceFields();
      //普通模糊查询字段集合
      List<String> fieldNames = Lists.newArrayList();
      //参照模糊查询条件集合
      List<String> filters = Lists.newArrayList();
      //返回的结果集
      Map<String, List<String>> maps = Maps.newHashMap();
      maps.put("fields", fieldNames);
      maps.put("filter", filters);
      for (int i = 0; i < faceFields.size(); i++) {
         FaceField faceField = faceFields.get(i);
         if (StringUtils.isEmpty(faceField.getFieldName()) || StringUtils.isEmpty(faceField.getFieldReference())) {
            if (poolCache == null) {
               poolCache = DataPoolCacheImpl.getInstance();
            }
            DataTableEntity dt = poolCache.getCacheData("表字段信息", new String[]{getTableUuid(), faceField.getFieldName()});
            if (BaseUtil.dataTableIsEmpty(dt)) {
            } else {
               FieldSetEntity f = dt.getFieldSetEntity(0);
               faceField.setFieldName(f.getString(CmnConst.FIELD_NAME));
               faceField.setFieldReference(f.getString("field_reference"));
            }
         }
         //字段名称
         String fieldName = faceField.getFieldName();
         if (aliasField != null && !StringUtils.isEmpty(fieldName)) {
            List<String> fieldAlias = aliasField.get(getTableName() + "." + fieldName);
            if (fieldAlias != null && fieldAlias.size() > 0) {
               String alias = fieldAlias.get(0);
               if (!StringUtils.isEmpty(alias)) {
                  fieldName = alias;
               }
            }
         }
         //参照处理
         String field_reference = faceField.getFieldReference();
         if (!StringUtils.isEmpty(field_reference)) {
            if (field_reference.indexOf("《") == 0 && field_reference.indexOf("》") > 0) {
               //普通参照
               filters.add(getDictFilter(getFieldName(tableAlias, fieldName), field_reference.replace("《", "").replace("》", "")));
               continue;
            } else {
               if (poolCache == null) {
                  poolCache = DataPoolCacheImpl.getInstance();
               }
               //高级参照
               DataTableEntity prompt = poolCache.getCacheData("高级参照配置信息", new String[]{field_reference});
               if (BaseUtil.dataTableIsEmpty(prompt)) {
                  continue;
               }
               FieldSetEntity ff = prompt.getFieldSetEntity(0);
               StringBuilder p = new StringBuilder();
               p.append(getFieldName(tableAlias, fieldName)).append("` in ").append(" ( SELECT `").append(ff.getString("value_field")).append("` FROM ").append(ff.getString("source_table"));
               p.append(" WHERE ").append(ff.getString("view_fields")).append(" like concat('%','~val~','%') )");
               filters.add(p.toString());
               continue;
            }
         }
            if (!StringUtils.isEmpty(faceField.getFieldName())) {
                fieldNames.add(StringUtils.isEmpty(tableAlias) ? faceField.getFieldName() : ("`" + tableAlias + "`.`" + fieldName + "`"));
            }
        }
        //获取redis 起始key
        String faceListKey = SystemFaceService.FACE_LIST_KEY;
        //重新放入redis
        RedisUtil.set(faceListKey + getUuid(), this);
        return maps;
    }
         if (!StringUtils.isEmpty(faceField.getFieldName())) {
            fieldNames.add(getFieldName(tableAlias, fieldName));
         }
      }
      //获取redis 起始key
      String faceListKey = SystemFaceService.FACE_LIST_KEY;
      //重新放入redis
      RedisUtil.set(faceListKey + getUuid(), this);
      return maps;
   }
    /**
     * 字段实体类
     */
    public class FaceField implements Serializable {
   private String getFieldName(String tableAlias, String fieldName) {
      fieldName = "`" + fieldName + "`";
      if (!StringUtils.isEmpty(tableAlias)) {
         return "`" + tableAlias + "`." + fieldName;
      }
      return fieldName;
   }
        private static final long serialVersionUID = 3154509166818911568L;
        /**
         * 字段名称
         */
        private String fieldName;
        /**
         * 字段uuid
         */
        private String fieldUuid;
        /**
         * 列名
         */
        private String columnName;
        /**
         * 列宽
         */
        private String columnWidth;
        /**
         * 排序
         */
        private Integer sequence;
        /**
         * 字段参照
         */
        private String fieldReference;
   /**
    * 字段实体类
    */
   public class FaceField implements Serializable {
        public String getFieldReference() {
            return fieldReference;
        }
      private static final long serialVersionUID = 3154509166818911568L;
      /**
       * 字段名称
       */
      private String fieldName;
      /**
       * 字段uuid
       */
      private String fieldUuid;
      /**
       * 列名
       */
      private String columnName;
      /**
       * 列宽
       */
      private String columnWidth;
      /**
       * 排序
       */
      private Integer sequence;
      /**
       * 字段参照
       */
      private String fieldReference;
        public void setFieldReference(String fieldReference) {
            this.fieldReference = fieldReference;
        }
      public String getFieldReference() {
         return fieldReference;
      }
        public String getFieldName() {
            return fieldName;
        }
      public void setFieldReference(String fieldReference) {
         this.fieldReference = fieldReference;
      }
        public void setFieldName(String fieldName) {
            this.fieldName = fieldName;
        }
      public String getFieldName() {
         return fieldName;
      }
        public String getFieldUuid() {
            return fieldUuid;
        }
      public void setFieldName(String fieldName) {
         this.fieldName = fieldName;
      }
        public void setFieldUuid(String fieldUuid) {
            this.fieldUuid = fieldUuid;
        }
      public String getFieldUuid() {
         return fieldUuid;
      }
        public String getColumnName() {
            return columnName;
        }
      public void setFieldUuid(String fieldUuid) {
         this.fieldUuid = fieldUuid;
      }
        public void setColumnName(String columnName) {
            this.columnName = columnName;
        }
      public String getColumnName() {
         return columnName;
      }
        public String getColumnWidth() {
            return columnWidth;
        }
      public void setColumnName(String columnName) {
         this.columnName = columnName;
      }
        public void setColumnWidth(String columnWidth) {
            this.columnWidth = columnWidth;
        }
      public String getColumnWidth() {
         return columnWidth;
      }
        public Integer getSequence() {
            return sequence;
        }
      public void setColumnWidth(String columnWidth) {
         this.columnWidth = columnWidth;
      }
        public void setSequence(Integer sequence) {
            this.sequence = sequence;
        }
      public Integer getSequence() {
         return sequence;
      }
    }
      public void setSequence(Integer sequence) {
         this.sequence = sequence;
      }
   }
}