| | |
| | | } |
| | | return filter.toString(); |
| | | } |
| | | |
| | | /** |
| | | * 获取条件 |
| | | * |
| | |
| | | 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; |
| | | } |
| | | |
| | | private String getFieldName(String tableAlias, String fieldName) { |
| | | fieldName = "`" + 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; |
| | | } |
| | | |
| | | /** |
| | | * 字段实体类 |