| | |
| | | package com.product.face.entity; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.google.common.collect.Lists; |
| | | import com.google.common.collect.Maps; |
| | | import com.product.admin.config.CmnConst; |
| | |
| | | private String tableName; |
| | | |
| | | /** |
| | | * 是否显示树 |
| | | */ |
| | | private String treeShow; |
| | | |
| | | /** |
| | | * 树数据源类型 |
| | | */ |
| | | private String treeDataType; |
| | | |
| | | /** |
| | | * 数据源 |
| | | */ |
| | | private String treeDataSource; |
| | | |
| | | /** |
| | | * 树label key |
| | | */ |
| | | private String treeLabelKey; |
| | | |
| | | /** |
| | | * 树value key |
| | | */ |
| | | private String treeValueKey; |
| | | |
| | | /** |
| | | * 获取表名 |
| | | * |
| | | * @return |
| | |
| | | * @param columnWidth 列宽 |
| | | * @param sequence 排序 |
| | | * @param fieldReference 参照 |
| | | * @param search 是否搜索 |
| | | */ |
| | | public void addField(String fieldName, String faceUuid, String columnName, String columnWidth, Integer sequence, String fieldReference) { |
| | | public void addField(String fieldName, String faceUuid, String columnName, String columnWidth, Integer sequence, String fieldReference, boolean search) { |
| | | FaceField faceField = new FaceField(); |
| | | faceField.setFieldName(fieldName); |
| | | faceField.setFieldUuid(faceUuid); |
| | |
| | | faceField.setColumnWidth(columnWidth); |
| | | faceField.setSequence(sequence); |
| | | faceField.setFieldReference(fieldReference); |
| | | faceField.setSearch(search); |
| | | if (this.faceFields == null) { |
| | | this.faceFields = Lists.newArrayList(); |
| | | } |
| | |
| | | this.faceFields = faceFields; |
| | | } |
| | | |
| | | public void setTableName(String tableName) { |
| | | this.tableName = tableName; |
| | | } |
| | | |
| | | public String getTreeShow() { |
| | | return treeShow; |
| | | } |
| | | |
| | | public void setTreeShow(String treeShow) { |
| | | this.treeShow = treeShow; |
| | | } |
| | | |
| | | public String getTreeDataType() { |
| | | return treeDataType; |
| | | } |
| | | |
| | | public void setTreeDataType(String treeDataType) { |
| | | this.treeDataType = treeDataType; |
| | | } |
| | | |
| | | public String getTreeDataSource() { |
| | | return treeDataSource; |
| | | } |
| | | |
| | | public void setTreeDataSource(String treeDataSource) { |
| | | this.treeDataSource = treeDataSource; |
| | | } |
| | | |
| | | public String getTreeLabelKey() { |
| | | return treeLabelKey; |
| | | } |
| | | |
| | | public void setTreeLabelKey(String treeLabelKey) { |
| | | this.treeLabelKey = treeLabelKey; |
| | | } |
| | | |
| | | public String getTreeValueKey() { |
| | | return treeValueKey; |
| | | } |
| | | |
| | | public void setTreeValueKey(String treeValueKey) { |
| | | this.treeValueKey = treeValueKey; |
| | | } |
| | | |
| | | /** |
| | | * 获取参照条件 |
| | | * |
| | |
| | | } |
| | | return filter.toString(); |
| | | } |
| | | |
| | | /** |
| | | * 获取条件 |
| | | * |
| | |
| | | maps.put("filter", filters); |
| | | for (int i = 0; i < faceFields.size(); i++) { |
| | | FaceField faceField = faceFields.get(i); |
| | | if (!faceField.isSearch()) { |
| | | continue; |
| | | } |
| | | if (StringUtils.isEmpty(faceField.getFieldName()) || StringUtils.isEmpty(faceField.getFieldReference())) { |
| | | if (poolCache == null) { |
| | | poolCache = DataPoolCacheImpl.getInstance(); |
| | |
| | | } |
| | | //字段名称 |
| | | String fieldName = faceField.getFieldName(); |
| | | if (!StringUtils.isEmpty(fieldName)) { |
| | | fieldName.trim(); |
| | | } |
| | | 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; |
| | | fieldName = alias.trim(); |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | 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(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; |
| | |
| | | //获取redis 起始key |
| | | String faceListKey = SystemFaceService.FACE_LIST_KEY; |
| | | //重新放入redis |
| | | RedisUtil.set(faceListKey + getUuid(), this); |
| | | RedisUtil.set(faceListKey + getUuid(), JSON.parseObject(JSON.toJSONString(this), com.product.admin.entity.FaceListEntity.class)); |
| | | return maps; |
| | | } |
| | | /** |
| | | * 新的方法,根据查询语句的中的表别名,生成查询条件 |
| | | * |
| | | * @param tableAlias 表别名 |
| | | * @param aliasField 字段别名 |
| | | * @param tableAndField 表中字段 |
| | | * @return |
| | | */ |
| | | public Map<String, List<String>> getFilters(Map<String, List<String>> tableAlias, Map<String, List<String>> aliasField,Map<String, List<String>> tableAndField) { |
| | | 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 (!faceField.isSearch()) { |
| | | continue; |
| | | } |
| | | 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 (!StringUtils.isEmpty(fieldName)) { |
| | | fieldName.trim(); |
| | | } |
| | | 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.trim(); |
| | | } |
| | | } |
| | | } |
| | | //参照处理 |
| | | String field_reference = faceField.getFieldReference(); |
| | | if (!StringUtils.isEmpty(field_reference)) { |
| | | if (field_reference.indexOf("《") == 0 && field_reference.indexOf("》") > 0) { |
| | | //普通参照 |
| | | filters.add(getDictFilter(getFieldName(tableAlias,aliasField, tableAndField, 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,aliasField, tableAndField, 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(getFieldName(tableAlias,aliasField, tableAndField, fieldName)); |
| | | } |
| | | } |
| | | //获取redis 起始key |
| | | String faceListKey = SystemFaceService.FACE_LIST_KEY; |
| | | //重新放入redis |
| | | RedisUtil.set(faceListKey + getUuid(), JSON.parseObject(JSON.toJSONString(this), com.product.admin.entity.FaceListEntity.class)); |
| | | return maps; |
| | | } |
| | | |
| | |
| | | fieldName = "`" + fieldName + "`"; |
| | | if (!StringUtils.isEmpty(tableAlias)) { |
| | | return "`" + tableAlias + "`." + fieldName; |
| | | } |
| | | return fieldName; |
| | | } |
| | | //新方法 |
| | | private String getFieldName(Map<String, List<String>> tableAlias,Map<String, List<String>> aliasField, Map<String, List<String>> tableAndField, String fieldName) { |
| | | String table=null; |
| | | boolean b=false; |
| | | if(!tableAndField.isEmpty()) { |
| | | for(String key:tableAndField.keySet()) { |
| | | for(String field:tableAndField.get(key)) { |
| | | if(fieldName.equals(field)) { |
| | | |
| | | List<String>alias=tableAlias.get(key); |
| | | if(!alias.isEmpty()) { |
| | | table=alias.get(0);//取第一个别名 |
| | | } |
| | | b=true; |
| | | break; |
| | | } |
| | | } |
| | | if(b)break; |
| | | } |
| | | } |
| | | b=false; |
| | | //找到字段的真实名字 |
| | | for(String f:aliasField.keySet()) { |
| | | List<String> fs=aliasField.get(f); |
| | | if(!fs.isEmpty()) { |
| | | for(String af:fs) { |
| | | //字段别名有可能是带 表别名 |
| | | int c=af.indexOf('.'); |
| | | if(c>0)af=af.substring(c+1); |
| | | if(fieldName.equals(af)) { |
| | | fieldName=f; |
| | | b=true; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | if(b)break; |
| | | } |
| | | |
| | | if (fieldName.indexOf('.')<0 && !StringUtils.isEmpty(table)) { |
| | | return "`" + table + "`." + fieldName; |
| | | } |
| | | return fieldName; |
| | | } |
| | |
| | | * 字段参照 |
| | | */ |
| | | private String fieldReference; |
| | | |
| | | private boolean search; |
| | | |
| | | public String getFieldReference() { |
| | | return fieldReference; |
| | |
| | | this.sequence = sequence; |
| | | } |
| | | |
| | | public boolean isSearch() { |
| | | return search; |
| | | } |
| | | |
| | | public void setSearch(boolean search) { |
| | | this.search = search; |
| | | } |
| | | } |
| | | |
| | | |
| | | } |