许鹏程
2023-05-24 30d06cd40ab7c59a0bb8641f5d28e219af2c085c
协同个人已办
已修改1个文件
574 ■■■■ 文件已修改
src/main/java/com/product/face/entity/FaceListEntity.java 574 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
        }
    }
}