//package com.trs.digital.module.manager.service.digsearch.impl;
//
//import cn.iocoder.yudao.framework.common.pojo.PageResult;
//import cn.iocoder.yudao.module.infra.dal.dataobject.category.CategoryDO;
//import com.baomidou.mybatisplus.core.toolkit.StringUtils;
//import com.ct.reslib.dataobject.TableFieldDO;
//import com.ct.reslib.mapper.TableFieldMapper;
//import com.ct.reslib.pojo.FnSearch;
//import com.ct.reslib.pojo.parms.advancedSearch;
//import com.ct.reslib.pojo.parms.commonType;
//import com.ct.reslib.scheduled.repository.IMetaDataCache;
//import com.ct.reslib.service.HyBaseService;
//import com.ct.reslib.service.Search;
//import com.ct.reslib.utils.HanyuPinyinHelper;
//import com.hankcs.hanlp.HanLP;
//import com.hankcs.hanlp.corpus.synonym.Synonym;
//import com.hankcs.hanlp.dictionary.CoreSynonymDictionary;
//import com.hankcs.hanlp.utility.Predefine;
//import com.trs.digital.framework.common.pojo.CommonResult;
//import com.trs.digital.framework.common.pojo.PageResult;
//import com.trs.digital.module.manager.dal.dataobject.digsearch.CommonType;
//import com.trs.digital.module.manager.dal.dataobject.digsearch.FnSearch;
//import com.trs.digital.module.manager.service.digsearch.HyBaseService;
//import com.trs.digital.module.manager.service.digsearch.Search;
//import com.trs.hybase.client.TRSConnection;
//import com.trs.hybase.client.TRSException;
//import com.trs.hybase.client.TRSRecord;
//import com.trs.hybase.client.TRSResultSet;
//import com.trs.hybase.client.params.SearchParams;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import javax.annotation.Resource;
//import java.util.*;
//import java.util.stream.Collectors;
//
//@Service
//public class SearchServiceImpl implements Search {
//
//    @Resource
//    TableFieldMapper tableFieldMapper;
//
//    @Resource
//    private ClassifyServiceImpl classifyService;
//
//    @Resource
//    HyBaseService hyBaseService;
//
//    @Autowired
//    IMetaDataCache metaDataCache;
//
//    public CommonResult<FnSearch> selectSolrPage(CommonType commontype) throws TRSException {
//        List<advancedSearch> advancedSearches = commontype.getAdvancedSearches();
//        String keyWord = commontype.getKeyWord();
//        String keyWord1 = commontype.getKeyWord1();
//        Integer listSet = commontype.getListSet();
//        Integer ts = commontype.getTs();
//        Integer pr = commontype.getPr();
//        Integer re = commontype.getRe();
//        Integer downloads = commontype.getDownloads();
//        boolean homo = commontype.isHomo();
//        List<Integer> sort = commontype.getSort();
//        Integer searchType = commontype.getSearchType();
//        Integer page = commontype.getPage();
//        Integer size = commontype.getSize();
//        if (homo) {
//            return searchSolrHomonym(commontype);
//        }
//        List<FnSearch> tableFieldDOList = new ArrayList<>();
//        SearchParams params = new SearchParams();
//        String queay = "";
//        int res = 0;
//        page = (page - 1) * size;
//        Map<String, String> map = entityTOMap(listSet);
//
//        // 0 全文检索 1 精确检索
//        if (searchType.equals(0)) {
//            queay += buildDynamicQuery(keyWord,keyWord1, listSet);
//        } else if (searchType.equals(1)) {
//            queay += AdvancedSearch(advancedSearches, listSet);
//        }
//        if (sort.size() > 0) {
//            queay += classify(sort);
//        }
//        if (ts != null || pr != null || re != null || downloads != null) { //时间、价格排序
//            params = hySort(ts, pr, re, downloads, listSet);
//        }
//        //调用search 查询的方法，与同义共用
//        PageResult<FnSearch> result = search(listSet, map, queay, page, size, params, tableFieldDOList, res);
//        //查询不到结果采用 根据关键字的同义词再进行搜索
//        if (result.getList().size() < 1){
//            if (StringUtils.isNotBlank(keyWord)){
//                //普通搜索获取同义词
//                List<String> synonymList =  getSynonym(keyWord);
//                if (synonymList.size() > 0){
//                    for (String s : synonymList) {
//                        //普通搜索的条件
//                        queay = buildDynamicQuery(s, keyWord1, listSet);
//                        result = search(listSet, map, queay, page, size, params, tableFieldDOList, res);
//                        if (result.getList().size() > 0){
//                            return result;
//                        }
//                    }
//                }
//
//                /*//普通搜索获取同义词 TODO 这个方法会将所有同义词所查到的结果都进行合并，是多条结果，但是查询时间较慢，比较重，暂时不采用
//                List<String> synonymList =  getSynonym(keyWord);
//                if (synonymList.size() > 0){
//                    for (String s : synonymList) {
//                        //普通搜索的条件
//                        queay = buildDynamicQuery(s, keyWord1, listSet);
//                        result = search(listSet, map, queay, page, size, params, tableFieldDOList, res);
//
//                        //过滤重复数据
//                        filterDuplicateData(listSet, map, queay, page, size, params, tableFieldDOList, res, result);
//
//                    }
//                    result.setTotal((long) result.getList().size());
//                }
//                return result;*/
//            }else if (advancedSearches.size() > 0){
//                if (StringUtils.isNotBlank(advancedSearches.get(0).getKeyWord())){
//                    //高级搜索获取同义词
//                    List<String> synonymList = getSynonym(advancedSearches.get(0).getKeyWord());
//                    if (synonymList.size() > 0){
//                        for (String s : synonymList) {
//                            advancedSearches.get(0).setKeyWord(s);
//                            //高级搜索的条件
//                            queay = AdvancedSearch(advancedSearches,listSet);
//                            result = search(listSet, map, queay, page, size, params, tableFieldDOList, res);
//                            if (result.getList().size() > 0){
//                                return result;
//                            }
//                        }
//                    }
//
//                    /*//高级搜索获取同义词 TODO 以下会将所有同义词所查到的结果都进行合并，是多条结果，但是查询时间较慢，比较重，暂时不采用
//                    List<String> synonymList = getSynonym(advancedSearches.get(0).getKeyWord());
//                    if (synonymList.size() > 0){
//                        for (String s : synonymList) {
//                            advancedSearches.get(0).setKeyWord(s);
//                            //高级搜索的条件
//                            queay = AdvancedSearch(advancedSearches,listSet);
//
//                            //过滤重复数据
//                            filterDuplicateData(listSet, map, queay, page, size, params, tableFieldDOList, res, result);
//
//                        }
//                        result.setTotal((long) result.getList().size());
//                    }
//                    return result;*/
//                }
//            }
//        }
//        return result;
//    }
//
//    /**
//     * 同义搜索后的数据合并并去重
//     * @param listSet
//     * @param page
//     * @param size
//     * @param params
//     * @param queay
//     * @param tableFieldDOList
//     * @param res
//     * @param map
//     * @param result
//     */
//    private void filterDuplicateData(Integer listSet, Map<String, String> map, String queay, Integer page, Integer size, SearchParams params, List<FnSearch> tableFieldDOList, int res, PageResult<FnSearch> result) {
//        PageResult<FnSearch> synonymResult = search(listSet, map, queay, page, size, params, tableFieldDOList, res);
//        if (result.getList().size() > 0){
//            result.getList().addAll(synonymResult.getList().stream()
//                    .filter(sr -> !result.getList().stream().anyMatch(r -> r.getFnId() == sr.getFnId())).collect(Collectors.toList()));
//            //对result.getList()中的每个对象的fnId进行去重
//            result.setList(result.getList().stream()
//                    .filter(fnSearch -> result.getList().stream().anyMatch(r -> r.getFnId() == fnSearch.getFnId())).collect(Collectors.toList()));
//        }
//    }
//
//    /**
//     * 根据关键字查询其同义词集合
//     * @param keyWord 关键字
//     * @return 同义词集合
//     */
//    private List<String> getSynonym(String keyWord) {
//        Predefine.HANLP_PROPERTIES_PATH = System.getProperty("user.dir")+"/reslib/src/main/resources".replaceAll("\\\\", "/");;
//        HanLP.Config.enableDebug();
//        List<Synonym> synonymList = null;
//        try {
//            synonymList = CoreSynonymDictionary.get(keyWord).synonymList;
//        } catch (Exception e) {
//            System.out.println("同义词查询无结果");
//        }
//        if (null == synonymList) {
//            return new ArrayList<>();
//        }
//        List<String> strList = synonymList.stream().map(s -> s.toString().split("#|=|@")[0]).collect(Collectors.toList());
//        return strList;
//    }
//
//    /**
//     * 查询的方法，与同义公用
//     * @param listSet
//     * @param map
//     * @param queay
//     * @param page
//     * @param size
//     * @param params
//     * @param tableFieldDOList
//     * @param res
//     * @return
//     */
//    private PageResult<FnSearch> search(Integer listSet,Map<String, String> map,String queay,Integer page,Integer size,SearchParams params,List<FnSearch> tableFieldDOList,int res){
//        String selectedTableName = "";
//        String query = "*:*";
//        switch (listSet) {
//            case 1: //图书库
//                map = entityTOMap(listSet);
//                selectedTableName = "tb_book";
//                query = queay;
//                break;
//            case 2: //视频库
//                map = entityTOMap(listSet);
//                selectedTableName = "rl_video";
//                query = queay;
//                break;
//            case 3: //音频库
//                map = entityTOMap(listSet);
//                selectedTableName = "rl_audio";
//                query = queay;
//                break;
//            case 4: //图片库
//                map = entityTOMap(listSet);
//                selectedTableName = "rl_picture";
//                query = "*:*".equals(queay) ? "type:10" : "type:10" + " AND " + queay;
//                break;
//            case 5: //期刊库
//                map = entityTOMap(listSet);
//                selectedTableName = "tb_periodical";
//                query = queay;
//                break;
//        }
//        TRSConnection conn = null;
//        try {
//            conn = hyBaseService.connection();
//            TRSResultSet resultSet = null;
//            resultSet = conn.executeSelect("system." + selectedTableName, query, page, size, params);
//            while (resultSet.moveNext()) {
//                FnSearch search = new FnSearch();
//                TRSRecord trsRecord = resultSet.get();
//                search.setFnId(Integer.parseInt(trsRecord.getString("id")));
//                search.setFnTitle(trsRecord.getString(map.get("fnTitle")));
//                search.setFnBrief(trsRecord.getString(map.get("fnBrief")));
//                search.setFnDoi(trsRecord.getString(map.get("fnDoi")));
//                search.setFnKeyword(trsRecord.getString(map.get("fnKeyword")));
//                search.setFnAuthor(trsRecord.getString(map.get("fnAuthor")));
//                search.setFnCover(trsRecord.getString(map.get("fnCover")));
//                search.setFnPics(trsRecord.getString(map.get("fnPics")));
//                search.setName(trsRecord.getString(map.get("fnName")));
//                search.setFnOrganizer(trsRecord.getString(map.get("fnOrganizer")));
//                search.setFnStandardNO(trsRecord.getString(map.get("fnStandardNO")));
//                search.setFnPublish(trsRecord.getString(map.get("fnPublish")));
//                search.setFnPubdate(trsRecord.getString(map.get("fnPubdate")));
//                search.setFnDraftUnit(trsRecord.getString(map.get("fnDraftUnit")));
//                search.setFnClassify(trsRecord.getString(map.get("fnClassify")));
//                search.setFnPublishername(trsRecord.getString(map.get("fnPublishername")));
//                search.setFnUrl(trsRecord.getString(map.get("fnUrl")));
//                search.setName(trsRecord.getString(map.get("name")));
//                search.setCreateTime(trsRecord.getString(map.get("createTime")));
//                search.setType(trsRecord.getString(map.get("type")));
//                tableFieldDOList.add(search);
//            }
//            res = (int) resultSet.getNumFound();
//        } catch (Exception e) {
//            e.printStackTrace();
//        } finally {
//            if (conn != null) {
//                conn.close();
//            }
//        }
//        if (res >= 10000) {
//            res = 9800;
//        }
//        PageResult<FnSearch> result = new PageResult<>();
//        result.setPageNo(page);
//        result.setPageSize(size);
//        result.setList(tableFieldDOList);
//        result.setTotal((long) res);
//        return result;
//    }
//
//    /**
//     * 同音词查询
//     *
//     * @param commontype 参数
//     * @return 列表
//     */
//
//    private PageResult<FnSearch> searchSolrHomonym(CommonType commontype) throws TRSException {
//        if (commontype == null) {
//            return new PageResult<>();
//        }
//        TRSConnection conn = hyBaseService.connection();
//        SearchParams params = new SearchParams();
//        List<FnSearch> tableFieldDOList = new ArrayList<>();
//        TRSResultSet resultSet = null;
//        String tableName = "";
//        String title = "";
//        String query = "*:*";
//        String keyWord = "";
//        if (commontype.getAdvancedSearches().size() == 0) {
//            keyWord = commontype.getKeyWord();
//        } else {
//            keyWord = commontype.getAdvancedSearches().get(0).getKeyWord();
//        }
//
//        Integer listSet = commontype.getListSet();
//        if (StringUtils.isNotBlank(keyWord) || null != listSet) {
//            switch (listSet) {
//                case 1: //图书库 tb_book
//                    tableName += "tb_book";
//                    title += "fn_title";
//                    break;
//                case 2: //视频库 rl_video
//                    tableName += "rl_video";
//                    title += "name";
//                    break;
//                case 3: //音频库 rl_audio
//                    tableName += "rl_audio";
//                    title += "name";
//                    break;
//                case 4: //图片库 rl_picture
//                    tableName += "rl_picture";
//                    title += "name";
//                    query = "type:10";
//                    break;
//                case 5: //期刊库 tb_periodical
//                    tableName += "tb_periodical";
//                    title += "fn_name";
//                    break;
//                default:
//                    //处理未知的 ListSet值
//                    break;
//            }
//            if (null == commontype.getPage() || null == commontype.getSize()) {
//                commontype.setPage(0);
//                commontype.setSize(10);
//            }
//            if (null != commontype.getTs() || null != commontype.getPr() || null != commontype.getRe() || null != commontype.getDownloads()) {
//                params = hySort(commontype.getTs(), commontype.getPr(), commontype.getRe(), commontype.getDownloads(), commontype.getListSet());
//            }
//            Integer page = commontype.getPage();
//            Integer size = commontype.getSize();
//            page = (page - 1) * size;
//            resultSet = conn.executeSelect("system." + tableName, query, page, size, params);
//            while (resultSet.moveNext()) {
//                FnSearch search = new FnSearch();
//                TRSRecord trsRecord = resultSet.get();
//                String name = trsRecord.getString(title);
//                if (HanyuPinyinHelper.toPinyin(name).contains(HanyuPinyinHelper.toPinyin(keyWord))) { //同音词覆盖返回
//                    search.setFnId(Integer.parseInt(trsRecord.getString("id")));
//                    if (listSet == 1) {
//                        search.setFnPics(trsRecord.getString("fn_pics"));
//                        search.setFnDoi(trsRecord.getString("fn_doi"));
//                        search.setFnTitle(trsRecord.getString("fn_title"));
//                        search.setFnBrief(trsRecord.getString("fn_brief"));
//                        search.setFnAuthor(trsRecord.getString("fn_author"));
//                        search.setFnKeyword(trsRecord.getString("fn_keyword"));
//                        search.setFnPublishername(trsRecord.getString("fn_publishername"));
//                        search.setFnPubdate(trsRecord.getString("fn_pubdate"));
//                        search.setFnXml(trsRecord.getString("fn_xml"));
//                        search.setFnClassify(trsRecord.getString("fn_classify"));
//                        search.setFnCover(trsRecord.getString("fn_cover"));
//                    } else if (listSet == 2) {
//                        search.setFnUrl(trsRecord.getString("url"));
//                        search.setFnTitle(trsRecord.getString("name"));
//                        search.setCreateTime(trsRecord.getString("create_time"));
//                    } else if (listSet == 3) {
//                        search.setFnTitle(trsRecord.getString("name"));
//                        search.setFnUrl(trsRecord.getString("url"));
//                        search.setCreateTime(trsRecord.getString("create_time"));
//                        search.setName(trsRecord.getString("name"));
//                        search.setFnDoi(trsRecord.getString("doi"));
//                        search.setFnClassify(trsRecord.getString("classify"));
//                        search.setFnAuthor(trsRecord.getString("author"));
//                    } else if (listSet == 4) {
//                        search.setFnTitle(trsRecord.getString("name"));
//                        search.setFnUrl(trsRecord.getString("url"));
//                        search.setCreateTime(trsRecord.getString("create_time"));
//                        search.setFnName(trsRecord.getString("name"));
//                        search.setFnDoi(trsRecord.getString("doi"));
//                        search.setFnClassify(trsRecord.getString("classify"));
//                        search.setFnKeyword(trsRecord.getString("keywords"));
//                        search.setFnCover(trsRecord.getString("fn_cover"));
//                        search.setType(trsRecord.getString("type"));
//                    } else if (listSet == 5) {
//                        search.setFnName(trsRecord.getString("fn_name"));
//                        //search.setCreateTime(trsRecord.getString("fn_ctime"));
//                    }
//                    tableFieldDOList.add(search);
//                }
//            }
//            PageResult<FnSearch> result = new PageResult<>();
//            result.setPageNo(commontype.getPage());
//            result.setPageSize(commontype.getSize());
//            result.setList(tableFieldDOList);
//            result.setTotal((long) tableFieldDOList.size());
//            return result;
//        }
//
//        return new PageResult<>();
//    }
//
//    /**
//     * 普通检索
//     *
//     * @param keyWord  关键字
//     * @param keyWord1 关键字1
//     * @param listSet  类型标识
//     * @return 拼接条件
//     */
//    private String buildDynamicQuery(String keyWord, String keyWord1, Integer listSet) {
//        // 构建表名与列名的映射关系
//        Map<String, List<String>> tableColumnsMap = metaDataCache.MetaDataCacheList();
//        //根据listSet标识 获取当前所查的 表字段
//        List<String> fieldNames = new ArrayList<>();
//        switch (listSet) {
//            case 1: // 图书
//                fieldNames.addAll(tableColumnsMap.get("tb_book"));
//                break;
//            case 2: // 视频
//                fieldNames.addAll(tableColumnsMap.get("rl_video"));
//                break;
//            case 3: // 音频
//                fieldNames.addAll(tableColumnsMap.get("rl_audio"));
//                break;
//            case 4: // 图片
//                fieldNames.addAll(tableColumnsMap.get("rl_picture"));
//                break;
//            case 5: // 期刊
//                fieldNames.addAll(tableColumnsMap.get("tb_periodical"));
//                break;
//            default:
//                //处理未知的 ListSet值
//                break;
//        }
//        // 构建查询条件
//        StringBuilder queryBuilder = new StringBuilder();
//        if (StringUtils.isNotBlank(keyWord) || StringUtils.isNotBlank(keyWord1)) {
//            queryBuilder.append("(");
//            for (String fieldName : fieldNames) {
//                if (StringUtils.isNotBlank(keyWord)) {
//                    queryBuilder.append(fieldName).append(":").append(keyWord).append(" OR ");
//                }
//                if (StringUtils.isNotBlank(keyWord1)) {
//                    queryBuilder.append(fieldName).append(":").append(keyWord1).append(" OR ");
//                }
//            }
//            queryBuilder.setLength(queryBuilder.length() - 4); // 移除多余的 " OR "
//            queryBuilder.append(")");
//        } else {
//            queryBuilder.append("*:*");
//        }
//        return queryBuilder.toString();
//    }
//
//    /**
//     * 高级检索
//     *
//     * @return 拼接条件
//     */
//    public String AdvancedSearch(List<advancedSearch> advancedSearches, Integer listSet) {
//        StringBuilder stringBuilder = new StringBuilder();
//        int size = advancedSearches.size();
//        for (int i = 0; i < size; i++) {
//            advancedSearch search = advancedSearches.get(i);
//            String fnType = search.getFnType();
//            String keyWork = search.getKeyWord();
//            String symbol = search.getSymbol();
//            String option = search.getOption();
//            if ("2".equals(option)) {
//                stringBuilder.append("*:* NOT ");
//            }
//            if (StringUtils.isNotEmpty(keyWork)) {
//                if ("fnTitle".equals(fnType)) {
//                    if (listSet == 5) { //期刊库 标题匹配fn_name
//                        stringBuilder.append("fn_name:").append(keyWork);
//                    } else if (listSet == 2 || listSet == 3 || listSet == 4) { //视频库、音频、图片 标题匹配name
//                        stringBuilder.append("name:").append(keyWork);
//                    } else {
//                        stringBuilder.append("fn_title:").append(keyWork);
//                    }
//                } else if ("fnBrief".equals(fnType)) {
//                    stringBuilder.append("fn_brief:").append(keyWork);
//                } else if ("fnKeyword".equals(fnType)) {
//                    stringBuilder.append("fn_keyword:").append(keyWork);
//                } else if ("fnPics".equals(fnType)) {
//                    stringBuilder.append("fn_pics:").append(keyWork);
//                } else if ("fnCover".equals(fnType)) {
//                    stringBuilder.append("fn_cover:").append(keyWork);
//                }else if("source".equals(fnType)){  //视频库 来源检索字段
//                    stringBuilder.append("source:").append(keyWork);
//
//                }
//            }
//            if (i < size - 1 && StringUtils.isNotEmpty(keyWork)) {
//                stringBuilder.append("==".equals(symbol) ? " AND " : " OR ");
//            } else if (StringUtils.isEmpty(keyWork)) {
//                stringBuilder.append("*:*");
//                break;
//            }
//        }
//        if (size > 0) {
//            advancedSearch lastSearch = advancedSearches.get(size - 1);
//            Integer startScope = lastSearch.getStartScope();
//            String startTime = lastSearch.getStartTime();
//            String endTime = lastSearch.getEndTime();
//            if (startScope != 0 && startTime != null && endTime != null && size == advancedSearches.size()) {
//                if (listSet == 1) { //图书库 时间匹配fn_pubdate
//                    stringBuilder.append(" AND fn_pubdate:[").append(startTime).append(" TO ").append(endTime).append("]");
//                } else if (listSet == 5) { //期刊 时间匹配 fn_ctime
//                    stringBuilder.append(" AND fn_ctime:[").append(startTime).append(" TO ").append(endTime).append("]");
//                } else if (listSet == 2 || listSet == 3 || listSet == 4) { //视频库、音频、图片 时间匹配 create_time
//                    stringBuilder.append(" AND create_time:[").append(startTime).append(" TO ").append(endTime).append("]");
//                }
//            }
//        }
//        return stringBuilder.toString();
//    }
//
//    public Map<String, Integer> calculateCategoryResults() throws TRSException {
//        // 获取所有第二级及以下的分类列表
//        List<CategoryDO> categories = classifyService.findThirdLevelCategories();
//
//        // 用于存储每个分类的检索结果数量
//        Map<String, Integer> categoryResults = new HashMap<>();
//
//        try (TRSConnection conn = hyBaseService.connection()) {
//            List<TableFieldDO> tableFieldDOS = tableFieldMapper.selectList();
//            List<String> tableNames = new ArrayList<>();
//            List<String> fieldNameList = new ArrayList<>();
//
//            for (TableFieldDO tableFieldDO : tableFieldDOS) {
//                String hyTableName = tableFieldDO.getTableName();
//                String fieldName = tableFieldDO.getFieldName();
//                fieldNameList.add(fieldName);
//                tableNames.add(hyTableName);
//            }
//
//            String fieldNames = String.join(";", fieldNameList);
//            fieldNames = fieldNames.replace(",", ";");
//            HashSet<String> tableNamesSet = new HashSet<>(tableNames);
//            System.out.println(tableNamesSet + ".....key");
//            SearchParams params = new SearchParams();
//            params.setReadColumns("id;" + fieldNames);
//            for (CategoryDO category : categories) {
//                String query = "fn_classify:" + category.getId();
//                TRSResultSet resultSet = conn.categoryQuery("tb_book", query, "fn_classify", "fn_classify", Long.MAX_VALUE);
//                int resultCount = (int) resultSet.getNumFound();
////                resultSet
//                categoryResults.put(category.getName(), resultCount);
//            }
//        }
//
//        return categoryResults;
//    }
//
//    /**
//     * 列表
//     *
//     * @param sort
//     * @return
//     */
//    public String classify(List<Integer> sort) throws TRSException {
//        StringBuilder stringBuilder = new StringBuilder(" AND ");
//        if (sort != null && !sort.isEmpty()) {
//            stringBuilder.append("(")
//                    .append(String.join(" OR ", sort.stream().map(s -> "fn_classify:" + s).toArray(String[]::new)))
//                    .append(")");
//        } else {
//            stringBuilder.append("null");
//        }
//
//        return stringBuilder.toString();
//    }
//
//    /**
//     * 排序
//     *
//     * @TODO 目前图书的价格 和 相关度排序 先暂时按id排序，随后将更改为价格 和 相关度 字段！！！
//     */
//    public SearchParams hySort(Integer ts, Integer pr, Integer re, Integer downloads, Integer listSet) {
//        SearchParams params = new SearchParams();
//        String sortMethod;
//        if (listSet == 1) { // 图书
//            if (ts != null) {
//                sortMethod = ts == 1 ? "+fn_pubdate" : "-fn_pubdate";
//                params.setSortMethod(sortMethod);
//            }
//            if (pr != null) {//TODO 目前先暂时按id排序，随后将更改为价格字段！！！
//                sortMethod = pr == 1 ? "+id" : "-id";
//                params.setSortMethod(sortMethod);
//            }
//            if (re != null) {//TODO 目前先暂时按id排序，随后将更改为相关度字段！！！
//                sortMethod = re == 1 ? "+id" : "-id";
//                params.setSortMethod(sortMethod);
//            }
//            if (downloads != null) {
//                sortMethod = downloads == 1 ? "+fn_downloads" : "-fn_downloads";
//                params.setSortMethod(sortMethod);
//            }
//        } else if (listSet == 2) { // 视频
//            if (ts != null) {
//                sortMethod = ts == 1 ? "+create_time" : "-create_time";
//                params.setSortMethod(sortMethod);
//            }
//        } else if (listSet == 3) { // 音频
//            if (ts != null) {
//                sortMethod = ts == 1 ? "+create_time" : "-create_time";
//                params.setSortMethod(sortMethod);
//            }
//        } else if (listSet == 4) { // 图片
//            if (ts != null) {
//                sortMethod = ts == 1 ? "+create_time" : "-create_time";
//                params.setSortMethod(sortMethod);
//            }
//        } else if (listSet == 5) { // 期刊
//            if (ts != null) {
//                sortMethod = ts == 1 ? "+fn_ctime" : "-fn_ctime";
//                params.setSortMethod(sortMethod);
//            }
//        }
//        return params;
//    }
//
//    private Map<String, String> entityTOMap(Integer listSet) {
//        Map<String, String> map = new HashMap<>();
//        switch (listSet) {
//            case 1: //图书库
//                map.put("fnTitle", "fn_title");
//                map.put("fnBrief", "fn_brief");
//                map.put("fnDoi", "fn_doi");
//                map.put("fnKeyword", "fn_keyword");
//                map.put("fnAuthor", "fn_author");
//                map.put("fnCover", "fn_cover");
//                map.put("fnPics", "fn_pics");
//                map.put("fnName", "fn_name");
//                map.put("fnOrganizer", "fn_organizer");
//                map.put("fnStandardNO", "fn_standardNO");
//                map.put("fnPublish", "fn_publish");
//                map.put("fnPubdate", "fn_pubdate");
//                map.put("fnDraftUnit", "fn_draftUnit");
//                map.put("fnClassify", "fn_classify");
//                map.put("fnPublishername", "fn_publishername");
//                map.put("fnUrl", "url");
//                map.put("name", "name");
//                map.put("createTime", "create_time");
//                map.put("fnXml", "fn_xml");
//                map.put("num", "num");
//                map.put("type", "type");
//                break;
//            case 2: //视频库
//                map.put("fnTitle", "name");
//                map.put("fnBrief", "");
//                map.put("fnDoi", "");
//                map.put("fnKeyword", "");
//                map.put("fnAuthor", "");
//                map.put("fnCover", "");
//                map.put("fnPics", "");
//                map.put("fnName", "");
//                map.put("fnOrganizer", "");
//                map.put("fnStandardNO", "");
//                map.put("fnPublish", "");
//                map.put("fnPubdate", "");
//                map.put("fnDraftUnit", "");
//                map.put("fnClassify", "");
//                map.put("fnPublishername", "");
//                map.put("fnUrl", "url");
//                map.put("name", "");
//                map.put("createTime", "create_time");
//                map.put("fnXml", "");
//                map.put("num", "");
//                map.put("type", "");
//                break;
//            case 3: //音频库
//                map.put("fnTitle", "name");
//                map.put("fnBrief", "");
//                map.put("fnDoi", "doi");
//                map.put("fnKeyword", "");
//                map.put("fnAuthor", "author");
//                map.put("fnCover", "");
//                map.put("fnPics", "");
//                map.put("fnName", "");
//                map.put("fnOrganizer", "");
//                map.put("fnStandardNO", "");
//                map.put("fnPublish", "");
//                map.put("fnPubdate", "");
//                map.put("fnDraftUnit", "");
//                map.put("fnClassify", "classify");
//                map.put("fnPublishername", "");
//                map.put("fnUrl", "url");
//                map.put("name", "name");
//                map.put("createTime", "create_time");
//                map.put("fnXml", "");
//                map.put("num", "");
//                map.put("type", "");
//                break;
//            case 4: //图片库
//                map.put("fnTitle", "name");
//                map.put("fnBrief", "");
//                map.put("fnDoi", "doi");
//                map.put("fnKeyword", "keywords");
//                map.put("fnAuthor", "author");
//                map.put("fnCover", "fn_cover");
//                map.put("fnPics", "");
//                map.put("fnName", "");
//                map.put("fnOrganizer", "");
//                map.put("fnStandardNO", "");
//                map.put("fnPublish", "");
//                map.put("fnPubdate", "");
//                map.put("fnDraftUnit", "");
//                map.put("fnClassify", "classify");
//                map.put("fnPublishername", "");
//                map.put("fnUrl", "url");
//                map.put("name", "name");
//                map.put("createTime", "create_time");
//                map.put("fnXml", "");
//                map.put("num", "");
//                map.put("type", "type");
//                break;
//            case 5: //期刊库
//                map.put("fnTitle", "fn_name");
//                map.put("fnBrief", "");
//                map.put("fnDoi", "");
//                map.put("fnKeyword", "");
//                map.put("fnAuthor", "");
//                map.put("fnCover", "");
//                map.put("fnPics", "");
//                map.put("fnName", "fn_name");
//                map.put("fnOrganizer", "");
//                map.put("fnStandardNO", "");
//                map.put("fnPublish", "");
//                map.put("fnPubdate", "");
//                map.put("fnDraftUnit", "");
//                map.put("fnClassify", "");
//                map.put("fnPublishername", "");
//                map.put("fnUrl", "");
//                map.put("name", "");
//                map.put("createTime", "");
//                map.put("fnXml", "");
//                map.put("num", "");
//                map.put("type", "");
//                break;
//        }
//        return map;
//    }
//
//    /**
//     * 获取联想词集合
//     * @param commonType
//     * @return
//     */
//    public List<Map<String, Object>> searchAssociationalWords(CommonType commonType) {
//        List<Map<String, Object>> list = new ArrayList<>();
//        String queryStr =commonType.getKeyWord();
//        Integer listSet = commonType.getListSet();
//        String tableName = "";
//        if (StringUtils.isBlank(queryStr) || listSet == 0){
//            return list;
//        }
//        switch (listSet) {
//            case 1: //图书库 tb_book
//                tableName += "tb_book";
//                break;
//            case 2: //视频库 rl_video
//                tableName += "rl_video";
//                break;
//            case 3: //音频库 rl_audio
//                tableName += "rl_audio";
//                break;
//            case 4: //图片库 rl_picture
//                tableName += "rl_picture";
//                break;
//            case 5: //期刊库 tb_periodical
//                tableName += "tb_periodical";
//                break;
//            default:
//                //处理未知的 ListSet值
//                break;
//        }
//
//        TRSConnection conn = null;
//        try {
//        conn = hyBaseService.connection();
//        TRSResultSet resultSet = null;
//        SearchParams params = new SearchParams();
//        queryStr = buildQuery(queryStr,listSet);
//        resultSet = conn.executeSelect("system." + tableName, queryStr,
//                (long) (commonType.getPage() - 1) * commonType.getSize(), commonType.getSize(), params);
//        while (resultSet.moveNext()){
//            TRSRecord trsRecord = resultSet.get();
//            String[] parts = queryStr.replace("(","").replace(")", "").split(" ");
//            for (String part : parts) {
//                if (part.contains(":")){
//                    String[] split = part.split(":", 2);
//                    Map<String, Object> map = new HashMap<>();
//                    map.put("value",trsRecord.getString(split[0]));
//                    list.add(map);
//                }
//            }
//        }
//
//        } catch (Exception e) {
//            e.printStackTrace();
//        }finally {
//            if (conn != null){
//                conn.close();
//            }
//        }
//
//        List<String> stringList = getSynonym(commonType.getKeyWord());
//        for (String s : stringList) {
//            Map<String, Object> map = new HashMap<>();
//            map.put("value",s);
//            list.add(map);
//        }
//
//        if (list.size() > 10){
//            list = list.subList(0, 10);
//
//        }
//        return list;
//    }
//
//    private String buildQuery(String keyWord, Integer listSet) {
//        //根据listSet标识 获取当前所查的 表字段
//        StringBuilder queryBuilder = new StringBuilder();
//        if (StringUtils.isNotBlank(keyWord)) {
//            queryBuilder.append("(");
//        switch (listSet) {
//            case 1: // 图书
//                queryBuilder.append("fn_title").append(":").append(keyWord).append(" OR ");
//                queryBuilder.append("fn_author").append(":").append(keyWord).append(" OR ");
//                queryBuilder.append("fn_publishername").append(":").append(keyWord).append(" OR ");
//                queryBuilder.append("fn_keyword").append(":").append(keyWord).append(" OR ");
//                break;
//            case 2: // 视频
//                queryBuilder.append("name").append(":").append(keyWord).append(" OR ");
//                break;
//            case 3: // 音频
//                queryBuilder.append("name").append(":").append(keyWord).append(" OR ");
//                queryBuilder.append("use_to").append(":").append(keyWord).append(" OR ");
//                break;
//            case 4: // 图片
//                queryBuilder.append("name").append(":").append(keyWord).append(" OR ");
//                break;
//            case 5: // 期刊
//                queryBuilder.append("fn_name").append(":").append(keyWord).append(" OR ");
//                break;
//            default:
//                //处理未知的 ListSet值
//                break;
//        }
//            queryBuilder.setLength(queryBuilder.length() - 4); // 移除多余的 " OR "
//            queryBuilder.append(")");
//        } else {
//            queryBuilder.append("*:*");
//        }
//        return queryBuilder.toString();
//    }
//
//}
