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<String, String> filterMap = JSONUtil.string2Obj(filterMapStr, new TypeReference<Map<String, String>>() {
|
});
|
for (Map.Entry<String, String> 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<Map<String, Object>> rows = new ArrayList<Map<String, Object>>();
|
|
SearchHit[] hitsList = hits.getHits();
|
for (int i = 0; i < hitsList.length; i++) {
|
Map<String, Object> hitMap = hitsList[i].getSourceAsMap();
|
Map<String, HighlightField> highlightFields = hitsList[i].getHighlightFields(); // 获取对应的高亮域
|
|
Map<String, Object> row = new HashMap<String, Object>();
|
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<String, Object> data = new HashMap<String, Object>();
|
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<String, String> filterMap = JSONUtil.string2Obj(keywordMapStr, new TypeReference<Map<String, String>>() {
|
});
|
for (Map.Entry<String, String> 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<Map<String, Object>> rows = jdbcTemplate.queryForList(pageSql);
|
|
// 构造分页结果
|
Map<String, Object> 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<CatAjjxx> page = new Page(pageInput.getPage(), pageInput.getRows());
|
// QueryWrapper<CatAjjxx> catAjjxxQueryWrapper = new QueryWrapper<>();
|
// catAjjxxQueryWrapper.eq("fbzt", "1");
|
// if (keywordMapStr != null && !keywordMapStr.equals("")) {
|
// Map<String, String> filterMap = JSONUtil.string2Obj(keywordMapStr, new TypeReference<Map<String, String>>() {
|
// });
|
// //{"XCSJ":"60年代","GZCD":"1:50000","ZLLB":"海洋区域地质调查","KC":"钛矿"}
|
// for (Map.Entry<String, String> 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<CatAjjxx> logPage = catAjjxxService.page(page, catAjjxxQueryWrapper);
|
// DataTableVO<CatAjjxx> 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<CatAjjxx> logPage = catAjjxxService.page(page, catAjjxxQueryWrapper);
|
// DataTableVO<CatAjjxx> dataTable = new DataTableVO();
|
// dataTable.setTotal(logPage.getTotal());
|
// dataTable.setRows(logPage.getRecords());
|
// return dataTable;
|
// }
|
//
|
// catAjjxxQueryWrapper.like("zlmc", keyword).or().like("dh", keyword);
|
// IPage<CatAjjxx> logPage = catAjjxxService.page(page, catAjjxxQueryWrapper);
|
// DataTableVO<CatAjjxx> 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<Map<String, Object>> rows = jdbcTemplate.queryForList(pageSql);
|
|
// 构造分页结果
|
Map<String, Object> 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<HashMap<String, String>> columnList = new ArrayList<>();
|
// HashMap<String, String> 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<String, Object> map = jdbcTemplate.queryForMap(sql);
|
//其他编著者资料
|
String bzzs = map.get("BZZ") == null ? "" : map.get("BZZ").toString();
|
bzzs = bzzs.replace("[", "").replace("]", "");
|
String[] split = bzzs.split(",");
|
ArrayList<String> bzzqtzlList = new ArrayList<>();
|
for (int i = 0; i < split.length; i++) {
|
QueryWrapper<CatAjjxx> catAjjxxQueryWrapper = new QueryWrapper<>();
|
catAjjxxQueryWrapper.like("BZZ", split[i]);
|
catAjjxxQueryWrapper.eq("fbzt", 1);
|
List<CatAjjxx> 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<String> xcdwqtzlList = new ArrayList<>();
|
QueryWrapper<CatAjjxx> queryWrapper = new QueryWrapper<>();
|
queryWrapper.like("XCDWMC", xcda);
|
queryWrapper.eq("fbzt", 1);
|
List<CatAjjxx> list = catAjjxxService.list(queryWrapper);
|
for (CatAjjxx catAjjxx : list) {
|
xcdwqtzlList.add(catAjjxx.getZlmc() + "_" + catAjjxx.getId() + "_" + catAjjxx.getBzz());
|
}
|
map.put("XCDWQTZL", xcdwqtzlList);
|
|
//成果文件目录
|
ArrayList<String> wjmuList = new ArrayList<>();
|
QueryWrapper<CatCgwjxx> cgwjxxQueryWrapper = new QueryWrapper<>();
|
cgwjxxQueryWrapper.eq("AJ_ID", keyId);
|
List<CatCgwjxx> catCgwjxxList = catCgwjxxService.list(cgwjxxQueryWrapper);
|
for (CatCgwjxx catCgwjxx : catCgwjxxList) {
|
wjmuList.add(catCgwjxx.getWjm() + " " + catCgwjxx.getWjtm() + "_" + catCgwjxx.getId());
|
}
|
map.put("CGWJMU", wjmuList);
|
|
//原始文件目录
|
ArrayList<String> yswjmuList = new ArrayList<>();
|
QueryWrapper<CatYswjxx> ysWrapper = new QueryWrapper<>();
|
ysWrapper.eq("AJ_ID", keyId);
|
List<CatYswjxx> catYswjxxList = catYswjxxService.list(ysWrapper);
|
for (CatYswjxx catYswjxx : catYswjxxList) {
|
yswjmuList.add(catYswjxx.getWjm() + " " + catYswjxx.getWjtm() + "_" + catYswjxx.getId());
|
}
|
map.put("YSWJMU", yswjmuList);
|
|
//相识资料
|
ArrayList<String> 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<CatAjjxx> wrapper = new QueryWrapper<>();
|
wrapper.like("GJZ", gjzs[i]);
|
wrapper.like("fbzt", 1);
|
|
List<CatAjjxx> 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<String, Object> map = jdbcTemplate.queryForMap(sql);
|
//
|
// //文件目录
|
// ArrayList<String> wjmuList = new ArrayList<>();
|
// QueryWrapper<CatSwyxxx> swzkxxQueryWrapper = new QueryWrapper<>();
|
// swzkxxQueryWrapper.eq("AJ_ID", keyId);
|
// List<CatSwyxxx> 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<String, Object> hitMap, Map<String, HighlightField> 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<TableColumn> tableColumns = this.tableColumnService.getColumnListByTableId(tableId);
|
conditionsSql = generalGroupAdvancedConditionSql(advancedCondition, tableColumns);
|
}
|
|
return conditionsSql;
|
}
|
|
|
protected String generalGroupAdvancedConditionSql(AdvancedConditionVO advancedCondition, List<TableColumn> 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<TableColumn> 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();
|
}
|
}
|