杜洪波
13 小时以前 35c390431b4ffa1e3f50371a46b4e9ac63d9aa70
src/main/java/com/product/face/service/FaceListSearchService.java
@@ -1,5 +1,6 @@
package com.product.face.service;
import com.alibaba.fastjson.JSON;
import com.product.common.lang.StringUtils;
import com.product.core.cache.util.RedisUtil;
import com.product.core.exception.BaseException;
@@ -18,7 +19,18 @@
 */
@Component
public class FaceListSearchService extends AbstractBaseService {
   /**
    * 不用
    * 列表关键字搜索
    * @param aliasTable
    * @param aliasField
    * @param faceUuid
    * @param faceNumber
    * @param val
    * @return
    * @throws BaseException
    */
   public String getFaceListSearchFilter(Map<String, List<String>> aliasTable, Map<String, List<String>> aliasField, String faceUuid, String faceNumber, String val) throws BaseException {
      if (StringUtils.isEmpty(val)) {
         return "";
@@ -26,8 +38,8 @@
      FaceListEntity face = null;
      if (!StringUtils.isEmpty(faceNumber)) {
         face = (FaceListEntity) RedisUtil.get(FaceConst.FACE_LIST_KEY + ":face-number" + faceNumber);
      } else if (!StringUtils.isEmpty(faceUuid)){
         face = (FaceListEntity) RedisUtil.get(FaceConst.FACE_LIST_KEY + faceUuid);
      } else if (!StringUtils.isEmpty(faceUuid)) {
         face = JSON.parseObject(JSON.toJSONString(RedisUtil.get(FaceConst.FACE_LIST_KEY + faceUuid)), FaceListEntity.class);
      }
      if (face != null) {
         String tableAlias = null;
@@ -56,4 +68,78 @@
      }
      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"]
      }
    * @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,Boolean unionSql) throws BaseException {
      if (StringUtils.isEmpty(val)) {
         return "";
      }
      FaceListEntity face = null;
      if (!StringUtils.isEmpty(faceNumber)) {
         face = (FaceListEntity) RedisUtil.get(FaceConst.FACE_LIST_KEY + ":face-number" + faceNumber);
      } else if (!StringUtils.isEmpty(faceUuid)) {
         face = JSON.parseObject(JSON.toJSONString(RedisUtil.get(FaceConst.FACE_LIST_KEY + faceUuid)), FaceListEntity.class);
      }
      if (face != null) {
//         String tableAlias = null;
//         String tableName = face.getTableName();
//         List<String> t = aliasTable.get(tableName);
//         if (t != null && t.size() > 0) {
//            tableAlias = t.get(0);
//         }
         Map<String, List<String>> params = face.getFilters(aliasTable, aliasField,tableOfField,unionSql);
         List<String> fieldNames = params.get("fields");
         List<String> filters = params.get("filter");
         StringBuilder filter = new StringBuilder();
         for (int i = 0; i < fieldNames.size(); i++) {
            if (i > 0) {
               filter.append(" or ");
            }
            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.append(" or ");
            }
            filter.append(filters.get(i).replace("~val~", val));
         }
         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);
   }
}