2018年01月21日 | Wizzer | 评论 后台代码,自定义tag: package cn.wizzer.app.web.modules.tags; import cn.wizzer.app.web.commons.ex.elasticsearch.EsService; import cn.wizzer.app.web.commons.utils.YcDateUtil; import cn.wizzer.app.ycold.modules.services.YcoldInquiryService; import cn.wizzer.framework.page.Pagination; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import org.beetl.core.GeneralVarTagBinding; import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchType; import org.elasticsearch.common.text.Text; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.SearchHits; import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; import org.elasticsearch.search.fetch.subphase.highlight.HighlightField; import org.elasticsearch.search.sort.SortOrder; import org.nutz.ioc.impl.PropertiesProxy; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.lang.Strings; import org.nutz.lang.Times; import org.nutz.log.Log; import org.nutz.log.Logs; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; /** * Created by wizzer on 2018/1/20. */ @IocBean public class YcoldInquiryListTag extends GeneralVarTagBinding { private final static Log log = Logs.get(); @Inject private EsService esService; @Inject private YcoldInquiryService ycoldInquiryService; @Inject private PropertiesProxy cfg; @Override public void render() { String startDate = Strings.sNull(this.getAttributeValue("startDate")); String endDate = Strings.sNull(this.getAttributeValue("endDate")); String keyword = Strings.sNull(this.getAttributeValue("keyword")); int pageNumber = NumberUtils.toInt(Strings.sNull(this.getAttributeValue("pageNumber")), 1); int pageSize = NumberUtils.toInt(Strings.sNull(this.getAttributeValue("pageSize")), 10); boolean highlight = BooleanUtils.toBoolean(Strings.sNull(this.getAttributeValue("highlight"))); boolean explain = BooleanUtils.toBoolean(Strings.sNull(this.getAttributeValue("explain"))); String sortName = Strings.sNull(this.getAttributeValue("sortName")); String sortOrder = Strings.sNull(this.getAttributeValue("sortOrder")); Pagination page = new Pagination(); page.setPageNo(pageNumber); page.setPageSize(pageSize); try { BoolQueryBuilder query = QueryBuilders.boolQuery(); //根据名称查询 if (Strings.isNotBlank(keyword)) { query.must(QueryBuilders.wildcardQuery("CASNM", "*" + keyword + "*")); } //截止时间大于等于现在 query.must(QueryBuilders.rangeQuery("IQDAT").gte(Times.format("yyyyMMddHHmmss", new Date()))); //公共日期起 if (Strings.isNotBlank(startDate)) { query.must(QueryBuilders.rangeQuery("ANNODAT").gte(startDate.replaceAll("-",""))); } //公共日期至 if (Strings.isNotBlank(endDate)) { query.must(QueryBuilders.rangeQuery("ANNODAT").lte(endDate.replaceAll("-",""))); } //几个状态条件 query.must(QueryBuilders.matchQuery("BUYER_STS", "N"));//采购商状态 query.must(QueryBuilders.matchQuery("STS", "A"));//状态 query.must(QueryBuilders.matchQuery("ANNOMK", "Y"));//公告註記 SearchRequestBuilder srb = esService.getClient().prepareSearch(cfg.get("es.index.name")) .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .setTypes("inquiry") .setQuery(query) //分页 .setFrom((pageNumber - 1) * pageSize).setSize(pageSize) //是否按匹配度排序 .setExplain(explain); if (highlight) { HighlightBuilder highlightBuilder = new HighlightBuilder().field("*").requireFieldMatch(false); highlightBuilder.preTags("<span style=\"color:red\">"); highlightBuilder.postTags("</span>"); srb.highlighter(highlightBuilder); } if (Strings.isNotBlank(sortName)) { String[] sortNames = StringUtils.split(sortName, ","); if ("asc".equalsIgnoreCase(sortOrder)) { for (String s : sortNames) { srb.addSort(s, SortOrder.ASC); } } else { for (String s : sortNames) { srb.addSort(s, SortOrder.DESC); } } } log.debug("srb:::\r\n" + srb.toString()); SearchResponse response = srb.execute().actionGet(); SearchHits hits = response.getHits(); page.setTotalCount((int) hits.getTotalHits()); List<Map<String, Object>> list = new ArrayList<>(); hits.forEach(searchHit -> { Map<String, Object> source = searchHit.getSourceAsMap(); Map<String, HighlightField> highlightFields = searchHit.getHighlightFields(); //name高亮 HighlightField nameField = highlightFields.get("CASNM"); if (nameField != null) { Text[] fragments = nameField.fragments(); String tmp = ""; for (Text text : fragments) { tmp += text; } source.put("CASNM", tmp); } source.put("IQDAT", YcDateUtil.get_yyyyMMdd_HHmm(Strings.sNull(source.get("IQDAT")))); source.put("ANNODAT", YcDateUtil.get_yyyyMMdd(Strings.sNull(source.get("ANNODAT")))); list.add(source); }); page.setList(list); } catch (Exception e) { e.printStackTrace(); } this.binds(page); this.doBodyRender(); } } 前台beetl页面: <#ycold_inquiry_list pageNumber="${pageNumber}" pageSize="${pageSize}" startDate="${startDate}" endDate="${endDate}" keyword="${keyword}" sortName="ANNODAT" sortOrder="desc" highlight="false" var="p"> <table class="list_table_blue even_table"> <thead> <tr> <th>公告日期</th> <th>案件名称</th> <th>交货地点</th> <th>报价截止日期</th> <th width="110">查看详细</th> </tr> </thead> <tbody> <%for(o in p.list){%> <tr> <td>${o.ANNODAT!}</td> <td class="l_text"><a href="${base!}/purchase/info/${o.XUID!}" target="_blank" class="td_a hide1">${o.CASNM!}</a> </td> <td class="l_text">${o.DLSITE!}</td> <td>${o.IQDAT!}</td> <td><a href="${base!}/purchase/info/${o.XUID!}" target="_blank" class="more_a png"></a></td> </tr> <%}%> </tbody> </table> <%if(p.totalCount>1){%> <div class="page round_s_a"></div> <script type="text/javascript"> $(function () { $(".page").createPage({ pageCount: ${p.totalPage}, totalCount: ${p.totalCount}, current: ${p.pageNo}, backFn: function (p) { window.location.href = "?page=" + p + "&size=${p.pageSize}"; } }); }); </script> <%}%> 1,434 total views, 1 views today