package com.zbooksoft.gdmis.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.mapper.SqlRunner; import com.fasterxml.jackson.core.type.TypeReference; import com.ruili.wcp.common.CustomConfigUtil; import com.ruili.wcp.common.JSONUtil; import com.ruili.wcp.data.entity.config.TableColumn; import com.ruili.wcp.data.entity.management.User; import com.ruili.wcp.data.vo.config.AdvancedConditionVO; import com.ruili.wcp.engine.DataSourceConfig; import com.ruili.wcp.service.config.TableColumnService; import com.ruili.wcp.web.common.LicenseException; import com.ruili.wcp.web.model.AjaxResponse; import com.ruili.wcp.web.model.ErrorInfo; import com.ruili.wcp.web.model.easyui.DataTableVO; import com.ruili.wcp.web.model.easyui.PagedAndFilteredInputDto; import com.ruili.wcp.web.model.easyui.PagedSortedAndFilteredInputDto; import com.zbooksoft.gdmis.config.ArchivesCustomConfig; import com.zbooksoft.gdmis.data.entity.*; import com.zbooksoft.gdmis.service.CatAjjxxService; import com.zbooksoft.gdmis.service.CatCgwjxxService; import com.zbooksoft.gdmis.service.CatSwajxxService; import com.zbooksoft.gdmis.service.CatYswjxxService; import org.apache.commons.lang3.StringEscapeUtils; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.annotation.RequiresUser; import org.apache.shiro.session.Session; import org.apache.shiro.subject.Subject; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.text.Text; import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.index.query.*; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHits; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; import org.elasticsearch.search.fetch.subphase.highlight.HighlightField; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.*; import java.util.concurrent.TimeUnit; /** * @Description:资料检索 * @Author: zhai * @Date: 2024/8/28 **/ @Controller @RequestMapping("/search") public class SearchController { @Autowired CatAjjxxService catAjjxxService; @Autowired CatCgwjxxService catCgwjxxService; @Autowired CatSwajxxService catSwajxxService; @Autowired CatYswjxxService catYswjxxService; @Autowired CustomConfigUtil customConfigUtil; @Autowired TableColumnService tableColumnService; @Autowired JdbcTemplate jdbcTemplate; @Autowired RestHighLevelClient restHighLevelClient; private static final Logger logger = LoggerFactory.getLogger(SearchController.class); /** * 资料检索页面 * * @return */ @RequestMapping(value = "/retrieve") @RequiresUser public ModelAndView retrieve() { ModelAndView mv = new ModelAndView("gh/search/retrieve"); return mv; } /** * 全文案卷目录检索结果页 * * @param keyword * @return * @throws Exception */ @RequestMapping("/searchResult") @RequiresUser public ModelAndView searchResult(Integer isSuperSearch, String selectedValue, String keyword) throws Exception { ModelAndView mav = null; ArchivesCustomConfig archivesCustomConfig = customConfigUtil.getConfigObj(ArchivesCustomConfig.class); mav = new ModelAndView("gh/search/searchResult"); mav.addObject("archivesCustomConfig", archivesCustomConfig); mav.addObject("selectedValue", selectedValue); mav.addObject("keyword", keyword); return mav; } /** * 全文内容检索结果页 * * @param archivesType * @param keyword * @param request * @param response * @return * @throws Exception */ @RequestMapping("attach") @RequiresUser public ModelAndView attachSearch(Long archivesType, String keyword, HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mav = new ModelAndView("gh/search/result_attach"); Subject currentUser = SecurityUtils.getSubject(); Session session = currentUser.getSession(); mav.addObject("archivesType", archivesType); mav.addObject("keyword", keyword); return mav; } @RequestMapping("/getAttachSearchData") @ResponseBody @RequiresUser public Object getAttachSearchData(Long archivesType, PagedAndFilteredInputDto input, String filterMapStr) throws IOException, LicenseException { boolean isFieldUpper = DataSourceConfig.checkFieldNameIsNeedUpper(); try { BoolQueryBuilder boolBuilder = QueryBuilders.boolQuery(); SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); // 从全文内容和标题中检索关键字 MultiMatchQueryBuilder matchQueryBuilder = QueryBuilders.multiMatchQuery(input.getSearchText(), "fullText", "WJM") .minimumShouldMatch("50%").operator(Operator.OR); boolBuilder.must(matchQueryBuilder); if (filterMapStr != null && !filterMapStr.equals("")) { Map filterMap = JSONUtil.string2Obj(filterMapStr, new TypeReference>() { }); for (Map.Entry entry : filterMap.entrySet()) { String mapKey = getAvailableString(entry.getKey(), isFieldUpper); String mapValue = entry.getValue(); if (!mapValue.equals("") && !mapValue.equals(null)) { boolBuilder.must(new TermQueryBuilder(mapKey, mapValue)); } } } MatchPhraseQueryBuilder matchPhraseQueryBuilder = QueryBuilders.matchPhraseQuery("fullText", input.getSearchText()).slop(50); boolBuilder.should(matchPhraseQueryBuilder); sourceBuilder.query(boolBuilder); // 设置查询,可以是任何类型的QueryBuilder。 // 设置高亮显示字段 HighlightBuilder highlightBuilder = new HighlightBuilder(); highlightBuilder.field(getAvailableString("WJM", isFieldUpper), 250, 1); highlightBuilder.field("fullText", 250, 1); sourceBuilder.highlighter(highlightBuilder); int from = (input.getPage() - 1) * input.getRows(); sourceBuilder.from(from); // 设置确定结果要从哪个索引开始搜索的from选项,默认为0 sourceBuilder.size(input.getRows()); // 设置确定搜素命中返回数的size选项,默认为10 sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS)); // 设置一个可选的超时,控制允许搜索的时间。 SearchRequest searchRequest = new SearchRequest("attach"); // 索引 searchRequest.source(sourceBuilder); SearchResponse response = this.restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); SearchHits hits = response.getHits(); // SearchHits提供有关所有匹配的全局信息,例如总命中数或最高分数:. List> rows = new ArrayList>(); SearchHit[] hitsList = hits.getHits(); for (int i = 0; i < hitsList.length; i++) { Map hitMap = hitsList[i].getSourceAsMap(); Map highlightFields = hitsList[i].getHighlightFields(); // 获取对应的高亮域 Map row = new HashMap(); row.put("physicalName", getFieldValue(hitMap, highlightFields, getAvailableString("WJTM", isFieldUpper))); row.put("fullText", getFieldValue(hitMap, highlightFields, "fullText")); Object extension = hitMap.get(getAvailableString("WJGS", isFieldUpper)); if (extension != null) { extension = extension.toString().toLowerCase(); } row.put("extension", extension); row.put("attachId", hitMap.get(getAvailableString("attach_id", isFieldUpper))); row.put("moduleId", hitMap.get(getAvailableString("module_id", isFieldUpper))); row.put("keyId", hitMap.get(getAvailableString("ID", isFieldUpper))); rows.add(row); } Map data = new HashMap(); long total = hits.getTotalHits(); if (total >= 10000) { total = 10000; } data.put("total", total); data.put("rows", rows); data.put("searchTime", (double) (response.getTook().getMillis()) / 1000); return new AjaxResponse(data); } catch (Exception e) { logger.error(e.getMessage(), e); return new AjaxResponse(new ErrorInfo(e.getMessage()), false); } } @RequestMapping("/getSearchData") @ResponseBody @RequiresUser public Object getSearchData(String selectedValue, String keyword, String keywordMapStr, PagedSortedAndFilteredInputDto pageInput) { try { String selSql = "select * from view_all_utlization where 1=1"; if (selectedValue != null && !selectedValue.equals("") && keyword != null && !keyword.equals("")) { selSql += " and " + selectedValue + " like '%" + keyword + "%'"; } if (keywordMapStr != null && !keywordMapStr.equals("")) { keywordMapStr = StringEscapeUtils.unescapeHtml4(keywordMapStr); Map filterMap = JSONUtil.string2Obj(keywordMapStr, new TypeReference>() { }); for (Map.Entry entry : filterMap.entrySet()) { String value = entry.getValue(); String key = entry.getKey(); if (!value.equals("") && !value.equals(null)) { selSql += " and " + key + " like '%" + value + "%'"; } } } // 添加分页支持 String countSql = "SELECT COUNT(*) FROM (" + selSql + ") tmp_count"; Integer total = jdbcTemplate.queryForObject(countSql, Integer.class); // 添加分页查询 String pageSql = selSql + " LIMIT " + (pageInput.getPage() - 1) * pageInput.getRows() + ", " + pageInput.getRows(); List> rows = jdbcTemplate.queryForList(pageSql); // 构造分页结果 Map result = new HashMap<>(); result.put("total", total); result.put("rows", rows); return result; } catch (Exception e) { logger.error(e.getMessage(), e); return new AjaxResponse(new ErrorInfo(e.getMessage()), false); } } // @RequestMapping("/getSearchData") // @ResponseBody // @RequiresUser // public Object getSearchData(String selectedValue, String keyword, String keywordMapStr, PagedSortedAndFilteredInputDto pageInput) { // try { // Page page = new Page(pageInput.getPage(), pageInput.getRows()); // QueryWrapper catAjjxxQueryWrapper = new QueryWrapper<>(); // catAjjxxQueryWrapper.eq("fbzt", "1"); // if (keywordMapStr != null && !keywordMapStr.equals("")) { // Map filterMap = JSONUtil.string2Obj(keywordMapStr, new TypeReference>() { // }); // //{"XCSJ":"60年代","GZCD":"1:50000","ZLLB":"海洋区域地质调查","KC":"钛矿"} // for (Map.Entry entry : filterMap.entrySet()) { // String value = entry.getValue(); // String key = entry.getKey(); // if ("DESC".equals(value)) { // catAjjxxQueryWrapper.orderByDesc(key); // } else if ("GZCD".equals(key) && !"".equals(value)) { // catAjjxxQueryWrapper.eq("GZCD", value); // } else if ("ZLLB".equals(key) && !"".equals(value)) { // catAjjxxQueryWrapper.eq("ZLLB", value); // } else if ("KCMC".equals(key) && !"".equals(value)) { // catAjjxxQueryWrapper.like("KCMC", value); // } else if ("XCSJV".equals(key) && !"".equals(value)) { // switch (value) { // case "50年代": // catAjjxxQueryWrapper.between("XCSJ", "1950-01-01", "1960-01-01"); // break; // case "60年代": // catAjjxxQueryWrapper.between("XCSJ", "1960-01-01", "1970-01-01"); // break; // case "70年代": // catAjjxxQueryWrapper.between("XCSJ", "1970-01-01", "1980-01-01"); // break; // case "80年代": // catAjjxxQueryWrapper.between("XCSJ", "1980-01-01", "1990-01-01"); // break; // case "90年代": // catAjjxxQueryWrapper.between("XCSJ", "1990-01-01", "2000-01-01"); // break; // case "2000年以后": // catAjjxxQueryWrapper.gt("XCSJ", "2000-01-01"); // break; // case "解放前": // catAjjxxQueryWrapper.lt("XCSJ", "1949-01-01"); // break; // } // } // } // } // if (keyword == null || "".equals(keyword)) { // IPage logPage = catAjjxxService.page(page, catAjjxxQueryWrapper); // DataTableVO dataTable = new DataTableVO(); // dataTable.setTotal(logPage.getTotal()); // dataTable.setRows(logPage.getRecords()); // return dataTable; // } // if (selectedValue != null && !"".equals(selectedValue)) { // String[] keywords = keyword.split(","); // for (String kw : keywords) { // if ("SGDH".equals(selectedValue)) { // catAjjxxQueryWrapper.eq(selectedValue, kw); // } else { // catAjjxxQueryWrapper.like(selectedValue, kw); // } // } // IPage logPage = catAjjxxService.page(page, catAjjxxQueryWrapper); // DataTableVO dataTable = new DataTableVO(); // dataTable.setTotal(logPage.getTotal()); // dataTable.setRows(logPage.getRecords()); // return dataTable; // } // // catAjjxxQueryWrapper.like("zlmc", keyword).or().like("dh", keyword); // IPage logPage = catAjjxxService.page(page, catAjjxxQueryWrapper); // DataTableVO dataTable = new DataTableVO(); // dataTable.setTotal(logPage.getTotal()); // dataTable.setRows(logPage.getRecords()); // return dataTable; // // } catch (Exception e) { // logger.error(e.getMessage(), e); // return new AjaxResponse(new ErrorInfo(e.getMessage()), false); // } // } @RequestMapping("/getSuperSearchData") @ResponseBody @RequiresUser public Object getSuperSearchData(@RequestParam String keywordMapStr, PagedSortedAndFilteredInputDto pageInput) { keywordMapStr = StringEscapeUtils.unescapeHtml4(keywordMapStr); try { String selSql = "select * from view_all_utlization where 1=1"; if (keywordMapStr != null && !keywordMapStr.equals("")) { String customSql = getAdvancedConditionsSql(keywordMapStr, 1984044085226344449l); selSql += " and" + customSql; } // 添加分页支持 String countSql = "SELECT COUNT(*) FROM (" + selSql + ") tmp_count"; Integer total = jdbcTemplate.queryForObject(countSql, Integer.class); // 添加分页查询 String pageSql = selSql + " LIMIT " + (pageInput.getPage() - 1) * pageInput.getRows() + ", " + pageInput.getRows(); List> rows = jdbcTemplate.queryForList(pageSql); // 构造分页结果 Map result = new HashMap<>(); result.put("total", total); result.put("rows", rows); return result; } catch (Exception e) { logger.error(e.getMessage(), e); return new AjaxResponse(new ErrorInfo(e.getMessage()), false); } } @RequestMapping({"/advancedQuery"}) @RequiresUser public ModelAndView advancedQuery() { ModelAndView mav = new ModelAndView("gh/search/advancedQuery"); // ArrayList> columnList = new ArrayList<>(); // HashMap stringStringHashMap = new HashMap<>(); // stringStringHashMap.put("columnName", "SGDH"); // stringStringHashMap.put("columnLabel", "案卷号"); // columnList.add(stringStringHashMap); // stringStringHashMap = new HashMap<>(); // stringStringHashMap.put("columnName", "ZLMC"); // stringStringHashMap.put("columnLabel", "资料名称"); // columnList.add(stringStringHashMap); // stringStringHashMap = new HashMap<>(); // stringStringHashMap.put("columnName", "DH"); // stringStringHashMap.put("columnLabel", "案卷号"); // columnList.add(stringStringHashMap); // mav.addObject("columnList", columnList); return mav; } /** * 高级查询页面 * * @param keyword * @return * @throws Exception */ @RequestMapping("/searchFrom") @RequiresUser public ModelAndView searchFrom(String selectedValue, String keyword) throws Exception { ModelAndView mav = new ModelAndView("gh/search/searchFrom"); return mav; } /** * 资料详情页面 * * @return */ @RequestMapping(value = "/details") @RequiresUser public ModelAndView details(Long keyId) { CatAjjxx catAjjxx = catAjjxxService.getById(keyId); String zlmc = catAjjxx.getZlmc(); // Long swId = catAjjxx.getSwId(); ModelAndView mv = new ModelAndView("gh/search/details"); mv.addObject("zlmc", zlmc); mv.addObject("keyId", keyId); // mv.addObject("swId", swId); return mv; } @RequestMapping("/getDetails") @ResponseBody @RequiresUser public Object getDetails(Long keyId) { try { String sql = "select * from CAT_FILE_AJJXX where id =" + keyId; Map map = jdbcTemplate.queryForMap(sql); //其他编著者资料 String bzzs = map.get("BZZ") == null ? "" : map.get("BZZ").toString(); bzzs = bzzs.replace("[", "").replace("]", ""); String[] split = bzzs.split(","); ArrayList bzzqtzlList = new ArrayList<>(); for (int i = 0; i < split.length; i++) { QueryWrapper catAjjxxQueryWrapper = new QueryWrapper<>(); catAjjxxQueryWrapper.like("BZZ", split[i]); catAjjxxQueryWrapper.eq("fbzt", 1); List list = catAjjxxService.list(catAjjxxQueryWrapper); for (CatAjjxx catAjjxx : list) { bzzqtzlList.add(catAjjxx.getZlmc() + "_" + catAjjxx.getId() + "_" + catAjjxx.getBzz()); } } map.put("BZZQTZL", bzzqtzlList); //形成单位其他资料 String xcda = map.get("XCDWMC") == null ? "" : map.get("XCDWMC").toString(); ArrayList xcdwqtzlList = new ArrayList<>(); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like("XCDWMC", xcda); queryWrapper.eq("fbzt", 1); List list = catAjjxxService.list(queryWrapper); for (CatAjjxx catAjjxx : list) { xcdwqtzlList.add(catAjjxx.getZlmc() + "_" + catAjjxx.getId() + "_" + catAjjxx.getBzz()); } map.put("XCDWQTZL", xcdwqtzlList); //成果文件目录 ArrayList wjmuList = new ArrayList<>(); QueryWrapper cgwjxxQueryWrapper = new QueryWrapper<>(); cgwjxxQueryWrapper.eq("AJ_ID", keyId); List catCgwjxxList = catCgwjxxService.list(cgwjxxQueryWrapper); for (CatCgwjxx catCgwjxx : catCgwjxxList) { wjmuList.add(catCgwjxx.getWjm() + " " + catCgwjxx.getWjtm() + "_" + catCgwjxx.getId()); } map.put("CGWJMU", wjmuList); //原始文件目录 ArrayList yswjmuList = new ArrayList<>(); QueryWrapper ysWrapper = new QueryWrapper<>(); ysWrapper.eq("AJ_ID", keyId); List catYswjxxList = catYswjxxService.list(ysWrapper); for (CatYswjxx catYswjxx : catYswjxxList) { yswjmuList.add(catYswjxx.getWjm() + " " + catYswjxx.getWjtm() + "_" + catYswjxx.getId()); } map.put("YSWJMU", yswjmuList); //相识资料 ArrayList xszlList = new ArrayList<>(); String gjz = map.get("GJZ") == null ? "" : map.get("GJZ").toString(); String[] gjzs = gjz.split("[,,]"); for (int i = 0; i < gjzs.length; i++) { String gjzValue = gjzs[i]; if (!"".equals(gjzValue)) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.like("GJZ", gjzs[i]); wrapper.like("fbzt", 1); List xsList = catAjjxxService.list(wrapper); for (CatAjjxx catAjjxx : xsList) { xszlList.add(catAjjxx.getZlmc() + "_" + catAjjxx.getId() + "_" + catAjjxx.getBzz()); } } } map.put("XSZL", xszlList); return new AjaxResponse(map); } catch (Exception e) { logger.error(e.getMessage(), e); return new AjaxResponse(new ErrorInfo(e.getMessage()), false); } } // @RequestMapping("/getPhysicalDetails") // @ResponseBody // @RequiresUser // public Object getPhysicalDetails(Long keyId) { // try { // // String sql = "select * from CAT_FILE_SWAJXX where id =" + keyId; // Map map = jdbcTemplate.queryForMap(sql); // // //文件目录 // ArrayList wjmuList = new ArrayList<>(); // QueryWrapper swzkxxQueryWrapper = new QueryWrapper<>(); // swzkxxQueryWrapper.eq("AJ_ID", keyId); // List catSwyxxxList = catSwyxxxService.list(swzkxxQueryWrapper); // for (CatSwyxxx catSwyxxx : catSwyxxxList) { // wjmuList.add(catSwyxxx.getZkbh() + "_" + catSwyxxx.getId()); // } // map.put("ZKML", wjmuList); // // return new AjaxResponse(map); // } catch (Exception e) { // logger.error(e.getMessage(), e); // return new AjaxResponse(new ErrorInfo(e.getMessage()), false); // } // } /** * 实物资料详情页面 * * @return */ @RequestMapping(value = "/physicalDetails") @RequiresUser public ModelAndView physicalDetails(Long keyId) { CatSwajxx catSwajxx = catSwajxxService.getById(keyId); ModelAndView mv = new ModelAndView("gh/search/physicalDetails"); mv.addObject("keyId", keyId); mv.addObject("zlmc", catSwajxx.getSwzltm()); return mv; } private String getFieldValue(Map hitMap, Map highlightFields, String fieldName) { String fieldValue = ""; HighlightField highlightFullText = highlightFields.get(fieldName); if (highlightFullText != null) { // 为title串值增加自定义的高亮标签 Text[] titleTexts = highlightFullText.fragments(); String highlightText = ""; for (Text text : titleTexts) { highlightText += text; } fieldValue = highlightText; } else { if (hitMap.get(fieldName) != null) fieldValue = hitMap.get(fieldName).toString(); } return fieldValue; } private String getAvailableString(String sourceStr, boolean isFieldUpper) { if (isFieldUpper) { return sourceStr.toUpperCase(); } else { return sourceStr; } } protected String getAdvancedConditionsSql(String advancedConditionsStr, Long tableId) { String conditionsSql = ""; AdvancedConditionVO advancedCondition = null; try { advancedConditionsStr = StringEscapeUtils.unescapeHtml4(advancedConditionsStr); advancedCondition = (AdvancedConditionVO) JSONUtil.string2Obj(advancedConditionsStr, AdvancedConditionVO.class); } catch (Exception var6) { logger.error("高级查询条件字符串转换为查询条件对象失败", var6); } if (advancedCondition != null) { List tableColumns = this.tableColumnService.getColumnListByTableId(tableId); conditionsSql = generalGroupAdvancedConditionSql(advancedCondition, tableColumns); } return conditionsSql; } protected String generalGroupAdvancedConditionSql(AdvancedConditionVO advancedCondition, List tableColumns) { StringBuffer sqlBuffer = new StringBuffer(); if (advancedCondition.getChildren() != null && advancedCondition.getChildren().size() > 0) { sqlBuffer.append("("); Iterator var4 = advancedCondition.getChildren().iterator(); while (true) { while (var4.hasNext()) { AdvancedConditionVO condition = (AdvancedConditionVO) var4.next(); String subSqlStr; if (!condition.getOp().equals("and") && !condition.getOp().equals("or")) { subSqlStr = generalRuleAdvancedConditionSql(condition, tableColumns); if (!subSqlStr.equals("")) { if (sqlBuffer.length() > 1) { sqlBuffer.append(" " + condition.getLogicOp()); } sqlBuffer.append(" " + subSqlStr); } } else { subSqlStr = this.generalGroupAdvancedConditionSql(condition, tableColumns); if (!subSqlStr.equals("")) { if (sqlBuffer.length() > 1) { sqlBuffer.append(" " + condition.getOp()); } sqlBuffer.append(" " + subSqlStr); } } } sqlBuffer.append(")"); break; } } return sqlBuffer.toString(); } protected String generalRuleAdvancedConditionSql(AdvancedConditionVO advancedCondition, List tableColumns) { StringBuffer sqlBuffer = new StringBuffer(); sqlBuffer.append(advancedCondition.getField()); String operatorQueryText = ""; String queryValue = "'" + advancedCondition.getValue() + "'"; TableColumn tableColumn = (TableColumn) tableColumns.stream().filter((a) -> { return a.getColumnName().equals(advancedCondition.getField()); }).findFirst().orElse(null); byte var8; if (tableColumn != null) { switch (tableColumn.getDataType()) { case "datetime": if (DataSourceConfig.getDbType().getDb().equalsIgnoreCase("ORACLE")) { queryValue = "to_date('" + advancedCondition.getValue() + " 00:00:00','yyyy-mm-dd hh24:mi:ss')"; } break; case "int": case "float": case "decimal": case "bit": case "tinyint": case "bigint": queryValue = advancedCondition.getValue(); } } switch (advancedCondition.getOp()) { case "equal": operatorQueryText = "="; break; case "notequal": operatorQueryText = "!="; break; case "greater": operatorQueryText = ">"; break; case "greaterorequal": operatorQueryText = ">="; break; case "less": operatorQueryText = "<"; break; case "lessorequal": operatorQueryText = "<="; break; case "contains": operatorQueryText = " like "; queryValue = "'%" + advancedCondition.getValue() + "%'"; break; case "notcontains": operatorQueryText = " not like "; queryValue = "'%" + advancedCondition.getValue() + "%'"; break; case "beginwith": operatorQueryText = " like "; queryValue = "'" + advancedCondition.getValue() + "%'"; break; case "endwith": operatorQueryText = " like "; queryValue = "'%" + advancedCondition.getValue() + "'"; break; default: operatorQueryText = "="; } sqlBuffer.append(operatorQueryText + queryValue); return sqlBuffer.toString(); } }