| | |
| | | * @return |
| | | */ |
| | | public Map<String, List<String>> getFilters(Map<String, List<String>> tableAlias, Map<String, List<String>> aliasField,Map<String, List<String>> tableAndField) { |
| | | return getFilters(tableAlias, aliasField,tableAndField,false); |
| | | } |
| | | /** |
| | | * 新的方法,根据查询语句的中的表别名,生成查询条件 |
| | | * |
| | | * @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,boolean unionSql) { |
| | | |
| | | DataPoolCacheImpl poolCache = null; |
| | | //所有字段集合 |
| | | List<FaceField> faceFields = this.getFaceFields(); |
| | |
| | | if (!faceField.isSearch()) { |
| | | continue; |
| | | } |
| | | if (StringUtils.isEmpty(faceField.getFieldName()) || StringUtils.isEmpty(faceField.getFieldReference())) { |
| | | //字段名称,可能是字段别名 |
| | | String fieldName = faceField.getFieldName(); |
| | | String factFieldName =fieldName;//真实的字段名 |
| | | //需要去查出真实字段名 |
| | | if (aliasField != null) { |
| | | |
| | | for(String key:aliasField.keySet()) { |
| | | List<String> fieldAlias = aliasField.get(key); |
| | | if (fieldAlias != null && fieldAlias.size() > 0) { |
| | | for(int j=0;j<fieldAlias.size();j++){ |
| | | String alias = fieldAlias.get(j); |
| | | if(fieldName.equals(alias)) { |
| | | factFieldName = key.trim(); |
| | | if(factFieldName.indexOf('.')>0) { |
| | | factFieldName=factFieldName.substring(factFieldName.indexOf('.')+1); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | //取查询条件中的字段,如果有别名,则显示【别名.字段名】 |
| | | String aliasTableField=getFieldName(tableAlias,aliasField, tableAndField, fieldName,factFieldName,unionSql); |
| | | |
| | | //查出字段对应的参照配置 |
| | | if (//StringUtils.isEmpty(faceField.getFieldName()) || |
| | | StringUtils.isEmpty(faceField.getFieldReference())) { |
| | | if (poolCache == null) { |
| | | poolCache = DataPoolCacheImpl.getInstance(); |
| | | } |
| | | DataTableEntity dt = poolCache.getCacheData("表字段信息", new String[]{getTableUuid(), faceField.getFieldName()}); |
| | | DataTableEntity dt = poolCache.getCacheData("表字段信息", new String[]{getTableUuid(),factFieldName}); |
| | | if (BaseUtil.dataTableIsEmpty(dt)) { |
| | | |
| | | } else { |
| | | FieldSetEntity f = dt.getFieldSetEntity(0); |
| | | faceField.setFieldName(f.getString(CmnConst.FIELD_NAME)); |
| | | // 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(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 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("》", ""))); |
| | | // filters.add(getDictFilter(getFieldName(tableAlias,aliasField, tableAndField, fieldName), field_reference.replace("《", "").replace("》", ""))); |
| | | filters.add(getDictFilter(aliasTableField, field_reference.replace("《", "").replace("》", ""))); |
| | | continue; |
| | | } else { |
| | | if (poolCache == null) { |
| | |
| | | } |
| | | 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(getFieldName(tableAlias,aliasField, tableAndField, fieldName)).append(" in ").append(" ( SELECT ").append(ff.getString("value_field")).append(" FROM ").append(ff.getString("source_table")); |
| | | p.append(aliasTableField).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)); |
| | | } |
| | | // if (!StringUtils.isEmpty(faceField.getFieldName())) { |
| | | // fieldNames.add(getFieldName(tableAlias,aliasField, tableAndField, fieldName);); |
| | | // } |
| | | fieldNames.add(aliasTableField); |
| | | } |
| | | //获取redis 起始key |
| | | String faceListKey = SystemFaceService.FACE_LIST_KEY; |
| | |
| | | return fieldName; |
| | | } |
| | | //新方法 |
| | | private String getFieldName(Map<String, List<String>> tableAlias,Map<String, List<String>> aliasField, Map<String, List<String>> tableAndField, String fieldName) { |
| | | //获取【表名.字段名】,哪果没有表别名,只返回字段名 |
| | | private String getFieldName(Map<String, List<String>> tableAlias,Map<String, List<String>> aliasField, Map<String, List<String>> tableAndField, String fieldName,String factFieldName) { |
| | | return getFieldName(tableAlias,aliasField, tableAndField, fieldName,factFieldName,false); |
| | | } |
| | | //新方法 |
| | | /** |
| | | * 获取【表名.字段名】,哪果没有表别名,只返回字段名 |
| | | * @param tableAlias |
| | | * @param aliasField |
| | | * @param tableAndField |
| | | * @param fieldName |
| | | * @param factFieldName |
| | | * @param unionSql 是否是由union 组成的多表查询,且是放在最外层的查询条件,是则不能在字段前面加表别名,否则要添加表别名,适用sql如: |
| | | * select * from (select* from xxx a union all select * from xxx b) where 条件 |
| | | * @return |
| | | */ |
| | | private String getFieldName(Map<String, List<String>> tableAlias,Map<String, List<String>> aliasField, Map<String, List<String>> tableAndField, String fieldName,String factFieldName,boolean unionSql) { |
| | | |
| | | if(unionSql) return fieldName; |
| | | |
| | | String table=null; |
| | | boolean b=false; |
| | | if(tableAndField!=null && !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!=null && !alias.isEmpty()) { |
| | | table=alias.get(0);//取第一个别名 |
| | | table=alias.get(0);//取第一个表别名 |
| | | } |
| | | b=true; |
| | | 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; |
| | | } |
| | | // //找到字段的真实名字 |
| | | // 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 "`" + table + "`." + factFieldName; |
| | | } |
| | | return fieldName; |
| | | return factFieldName; |
| | | } |
| | | |
| | | /** |