| | |
| | | * @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())) { |
| | | 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 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(),factFieldName}); |
| | | if (BaseUtil.dataTableIsEmpty(dt)) { |
| | | |
| | | } else { |
| | | FieldSetEntity f = dt.getFieldSetEntity(0); |
| | | // faceField.setFieldName(f.getString(CmnConst.FIELD_NAME)); |
| | | faceField.setFieldReference(f.getString("field_reference")); |
| | | } |
| | | } |
| | | |
| | | // 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; |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | //大写字段值显示转换 |
| | | JSONObject formInfo = faceFormCache.getData(); |
| | | formInfo.put("formRules", formInfo.getString("form_rules")); |
| | | formInfo.put("formModel", formInfo.getString("form_model")); |
| | | formInfo.put("labelWidth", formInfo.getString("label_width")); |
| | | // formInfo.put("formRules", formInfo.getString("form_rules")); |
| | | // formInfo.put("formModel", formInfo.getString("form_model")); |
| | | // formInfo.put("labelWidth", formInfo.getString("label_width")); |
| | | return BaseUtil.success(faceFormCache.getData(), MapUtil.builder("drawingList", (Object) faceFormCache.getDrawingList()).map()); |
| | | } |
| | | |
| | |
| | | } |
| | | fse.getSubData().clear(); |
| | | //大写字段值显示转换 |
| | | fse.setValue("formRules", fse.getString("form_rules")); |
| | | fse.setValue("formModel", fse.getString("form_model")); |
| | | fse.setValue("labelWidth", fse.getString("label_width")); |
| | | // fse.setValue("formRules", fse.getString("form_rules")); |
| | | // fse.setValue("formModel", fse.getString("form_model")); |
| | | // fse.setValue("labelWidth", fse.getString("label_width")); |
| | | return BaseUtil.success(fse, other); |
| | | } |
| | | |
| | |
| | | } |
| | | fse.removeSubData(FaceConst.FACE_FIELD); |
| | | //大写字段值保存转换 |
| | | fse.setValue("form_rules", fse.getString("formRules")); |
| | | fse.setValue("form_model", fse.getString("formModel")); |
| | | fse.setValue("label_width", fse.getString("labelWidth")); |
| | | // fse.setValue("form_rules", fse.getString("formRules")); |
| | | // fse.setValue("form_model", fse.getString("formModel")); |
| | | // fse.setValue("label_width", fse.getString("labelWidth")); |
| | | BaseUtil.createCreatorAndCreationTime(fse); |
| | | fields.setData(fieldSetEntityList); |
| | | fse.addSubDataTable(fields); |
| | |
| | | "product_sys_users": ["uuid1", "user_name", "user_id", "user_account", "status"], |
| | | "product_sys_job_posts": ["job_post_uuid"], |
| | | "product_sys_org_levels": ["uuid2", "uuid3", "org_level_uuid", "dept_uuid"] |
| | | } |
| | | } |
| | | * @param unionSql 是否是由union 组成的多表查询,且是放在最外层的查询条件,是则不能在字段前面加表别名,否则要添加表别名,适用sql如: |
| | | * select * from (select* from xxx a union all select * from xxx b) where 条件 |
| | | * @return |
| | | * @throws BaseException |
| | | */ |
| | | public String getFaceListSearchFilter(Map<String, List<String>> aliasTable, Map<String, List<String>> aliasField, String faceUuid, String faceNumber, String val, Map<String, List<String>> tableOfField) throws BaseException { |
| | | public String getFaceListSearchFilter(Map<String, List<String>> aliasTable, Map<String, List<String>> aliasField, String faceUuid, String faceNumber, String val, Map<String, List<String>> tableOfField,Boolean unionSql) throws BaseException { |
| | | if (StringUtils.isEmpty(val)) { |
| | | return ""; |
| | | } |
| | |
| | | // if (t != null && t.size() > 0) { |
| | | // tableAlias = t.get(0); |
| | | // } |
| | | Map<String, List<String>> params = face.getFilters(aliasTable, aliasField,tableOfField); |
| | | Map<String, List<String>> params = face.getFilters(aliasTable, aliasField,tableOfField,unionSql); |
| | | List<String> fieldNames = params.get("fields"); |
| | | List<String> filters = params.get("filter"); |
| | | String filter = ""; |
| | | StringBuilder filter = new StringBuilder(); |
| | | for (int i = 0; i < fieldNames.size(); i++) { |
| | | if (i > 0) { |
| | | filter += " or "; |
| | | filter.append(" or "); |
| | | } |
| | | filter += " " + fieldNames.get(i) + " LIKE BINARY concat('%','" + val + "','%')"; |
| | | filter.append(" ").append(fieldNames.get(i)).append( " LIKE BINARY concat('%','").append( val).append("','%')"); |
| | | } |
| | | for (int i = 0; i < filters.size(); i++) { |
| | | if (!"".equals(filter)) { |
| | | filter += " or "; |
| | | filter.append(" or "); |
| | | } |
| | | filter += filters.get(i).replace("~val~", val); |
| | | filter.append(filters.get(i).replace("~val~", val)); |
| | | } |
| | | return "".equals(filter) ? "" : "( " + filter + " )"; |
| | | return "".equals(filter) ? "" :filter.insert(0, "( ").append(" )").toString(); |
| | | } |
| | | return ""; |
| | | } |
| | | /** |
| | | * 列表关键字搜索 |
| | | * @param aliasTable {"product_sys_staffs":["a"],"product_sys_users":["b"],"product_sys_job_posts":["e"],"product_sys_org_levels":["c","d"]} |
| | | * @param aliasField |
| | | * @param faceUuid |
| | | * @param faceNumber |
| | | * @param val |
| | | * @param tableOfField 表对应字段 如:table_relate_fields = { |
| | | "product_sys_staffs": ["uuid", "staff_status", "staff_avatar", "show_name", "mobile_phone", "staff_status_save_value", "status_save_value"], |
| | | "product_sys_users": ["uuid1", "user_name", "user_id", "user_account", "status"], |
| | | "product_sys_job_posts": ["job_post_uuid"], |
| | | "product_sys_org_levels": ["uuid2", "uuid3", "org_level_uuid", "dept_uuid"] |
| | | } |
| | | * @return |
| | | * @throws BaseException |
| | | */ |
| | | public String getFaceListSearchFilter(Map<String, List<String>> aliasTable, Map<String, List<String>> aliasField, String faceUuid, String faceNumber, String val, Map<String, List<String>> tableOfField) throws BaseException { |
| | | return getFaceListSearchFilter(aliasTable, aliasField, faceUuid, faceNumber, val, tableOfField,false); |
| | | } |
| | | } |