2018年 的存档
201811 月12

NutzWk 5.1.0 微服务开发框架,Vue版本已发布

NutzWk 5.1.0 Vue版本已发布,演示地址: https://nutzwk.wizzer.cn

源码Github:https://github.com/Wizzercn/NutzWk 码云Gitee:https://gitee.com/wizzer/NutzWk

本次更新内容:

  • wk-nb-web-vue 新增全新的Vue后台管理界面,基于Vue.js + Element.js 等,增强交互体验;
  • 基础服务类 BaseService 新增一些常用的查询方法;
  • 微信模块增加图片自动回复、群发图片、微信菜单可配小程序等功能;
  • CMS模块增加前台模板标签示例代码;
  • 增强Oracle及MySQL兼容性;
  • 支持Openjdk 11;

后端技术架构:java nutzboot + dubbo + zookeeper 前端技术架构:vue.js + element.js + bootstrap

20187 月19

MqttWk: 基于nutzboot + t-io + redis + kafka 实现的MQTT服务端开源项目

项目首页:https://github.com/Wizzercn/MqttWk

MqttWk

基于 nutzboot + t-io + redis + kafka 实现的MQTT服务broker

本项目代码主要来源于 netty/t-io/iot-mqtt-server 等众多项目,开源免费,欢迎交流学习

参考项目

使用说明

软件架构说明

  1. 使用t-io实现通信及协议解析
  2. 使用nutzboot提供依赖注入及属性配置
  3. 使用redis实现消息缓存,集群
  4. 使用kafka实现消息代理

项目结构

MqttWk
  ├── mqtt-codec -- MQTT协议解析的t-io实现
  ├── mqtt-auth -- MQTT服务连接时用户名和密码认证
  ├── mqtt-broker -- MQTT服务器功能的核心实现
  ├── mqtt-common -- 公共类及其他模块使用的服务接口及对象
  ├── mqtt-store -- MQTT服务器会话信息(redis缓存及kafka加载)
  ├── mqtt-zoo -- 教程文档或文件
    ├── mqtt-test-kafka -- kafka消费者接收消息
    ├── mqtt-test-websocket -- websocket通信测试示例

功能说明

  1. 参考MQTT3.1.1规范实现
  2. 完整的QoS服务质量等级实现
  3. 遗嘱消息, 保留消息及消息分发重试
  4. 心跳机制
  5. MQTT连接认证(可选择是否开启)
  6. SSL方式连接(可选择是否开启)
  7. 主题过滤(支持单主题订阅如 /mqtt/test –不可以/结尾, 通配符订阅 /mqtt/# –以/#结尾)
  8. Websocket支持(可选择是否开启)
  9. 集群功能

快速开始

  • 下载已打包好的可运行的jar文件
  • 运行jar文件(如果需要修改配置项,可以在application.properties修改)
  • 打开mqtt-spy客户端, 填写相应配置下载
  • 连接端口:8885, websocket 端口: 9995 websocket path: /mqtt
  • 连接使用的用户名: demo
  • 连接使用的密码: 8F3B8DE2FDC8BD3D792BE77EAC412010971765E5BDD6C499ADCEE840CE441BDEF17E30684BD95CA708F55022222CC6161D0D23C2DFCB12F8AC998F59E7213393
  • 连接使用的证书在 mqtt-zoo\keystore\server.cer

集群使用

  • 多机环境集群:
    • mqttwk.broker.kafka.bootstrap.servers=192.168.1.101:9092,192.168.1.102:9093
    • redis.mode=cluster
    • redis.nodes=192.168.1.103:16379,192.168.1.104:26379
  • 单机环境集群:
    • mqttwk.broker.kafka.bootstrap.servers=127.0.0.1:9092,127.0.0.1:9093
    • redis.mode=normal
    • redis.host=127.0.0.1

自定义 – 连接认证

  • 默认只是简单使用对用户名进行RSA密钥对加密生成密码, 连接认证时对密码进行解密和相应用户名进行匹配认证
  • 使用中如果需要实现连接数据库或其他方式进行连接认证, 只需要重写mqtt-auth模块下的相应方法即可

自定义 – 服务端证书

  • 服务端证书存储在mqtt-brokerresources/keystore/server.jks
  • 用户可以制作自己的证书, 但存储位置和文件名必须使用上述描述的位置及文件名

生成环境部署

  • 生成环境部署建议使用keepalived+nginx+mqtt-broker方式
  • 使用nginx的tcp和websocket反向代理mqtt-broker集群实现负载均衡
  • 使用keepalived实现nginx的高可用
20186 月9

NutzWk 5.0.x 微服务分布式版本开发及部署说明

NutzWk 5.x 已发布一段时间,这段时间基于此版本开发了智慧水务系统(NB-IOT)、某物联网平台、某设备租赁平台、某智慧睡眠平台、某智慧园区项目等,开发和部署过程中遇到一些小问题,开这个帖子把一些经验分享出来省的大家走弯路。

项目地址1: https://github.com/Wizzercn/NutzWk 项目地址2: https://gitee.com/wizzer/NutzWk

1、运行环境 其实项目readme和wk-wiki 已经写的很清楚了,在此强调一下,不是说非这些版本不可,但对于新手来说最好版本号保持一致,能跑起来了您再折腾玩~~

<span class="pln">JDK </span>
<span class="lit">8</span> <span class="lit">162</span> <span class="pun">+</span>
<span class="typ">Maven</span> <span class="lit">3.5</span>
<span class="pun">.</span>
<span class="lit">3</span> <span class="pun">+</span>
<span class="typ">Redis</span> <span class="lit">4.0</span>
<span class="pun">.</span>
<span class="lit">8</span> <span class="pun">+</span>
<span class="typ">MySql</span> <span class="lit">5.7</span> <span class="pun">+</span>
<span class="typ">Zookeeper</span> <span class="lit">3.4</span>
<span class="pun">.</span>
<span class="lit">11</span> <span class="pun">+</span>

2、开发环境 一般建议使用IDEA进行开发,因为是maven多模块的项目,直接用IDEA打开项目根目录,它会通过maven下载jar包,自动构建项目 然后如何启动项目呢,有很多种方式,简单说几个: 1)打开每个NB项目(nutzboot简称)项目里的main类,右击运行,例如 cn.wizzer.sys.commons.core.***MainLauncher 2)通过IDEA 的Run 配置 Application 运行,详见 https://github.com/Wizzercn/NutzWk/blob/nutzboot-dubbo/wk-wiki/01.QuickStart/01.02.Start.md 3)命令行在NB项目根目录运行mvn compile nutzboot:run 或者IDEA右侧Maven管理界面里通过插件运行,,详见 https://github.com/nutzam/nutzboot-maven-plugin

3、启动顺序 保证MySQL、Redis、Zookeeper 都正常启动且为默认端口及默认配置(当然这些配置项可以在application.properties 修改的) 1)MySQL创建一个空白数据库,编码格式为UTF-8,数据库名称 nutzwk_nb 2)NB项目的模块启动顺序是 sys –> cms[可选] –> wx[可选] –> task[可选] –> web-platform –> web-api[可选] 3)如上所述,如果想运行访问后台,只需要启动 sys 和 web-platform即可,注意是有启动顺序的,其他模块需要用就启 4)task 定时任务是依赖于sys的,而web-platform系统管理对定时任务管理是依赖于 task模块的,如果你想让task独立运行并且不需要通过页面进行管理,自己少做改动即可,不是不可以哦

4、部署注意事项 1)因为登录页面对密码进行了RSA加密,有时候部署会遇到怎么也登录不了,而后台抛异常 java.lang.SecurityException: JCE cannot authenticate the provider BC 的情况,解决方法在代码注释里已写明了,不过很少有人去看 https://github.com/Wizzercn/NutzWk/blob/nutzboot-dubbo/wk-app/wk-nb-web-platform/src/main/java/cn/wizzer/app/web/commons/shiro/filter/PlatformAuthenticationFilter.java

<span class="lit">1</span>
<span class="pun">、编辑文件</span> <span class="pun">/</span>
<span class="pln">usr</span>
<span class="pun">/</span>
<span class="pln">java</span>
<span class="pun">/</span>
<span class="pln">jdk1</span>
<span class="pun">.</span>
<span class="lit">8.0</span>
<span class="pln">_162</span>
<span class="pun">/</span>
<span class="pln">jre</span>
<span class="pun">/</span>
<span class="pln">lib</span>
<span class="pun">/</span>
<span class="pln">security</span>
<span class="pun">/</span>
<span class="pln">java</span>
<span class="pun">.</span>
<span class="pln">security
     </span>
<span class="pun">在</span>
<span class="lit">9</span>
<span class="pun">下面添加</span>
<span class="pln"> security</span>
<span class="pun">.</span>
<span class="pln">provider</span>
<span class="pun">.</span>
<span class="lit">10</span>
<span class="pun">=</span>
<span class="pln">org</span>
<span class="pun">.</span>
<span class="pln">bouncycastle</span>
<span class="pun">.</span>
<span class="pln">jce</span>
<span class="pun">.</span>
<span class="pln">provider</span>
<span class="pun">.</span>
<span class="typ">BouncyCastleProvider</span>
<span class="lit">2</span>
<span class="pun">、拷贝</span>
<span class="pln"> bcprov</span>
<span class="pun">-</span>
<span class="pln">jdk16</span>
<span class="pun">-</span>
<span class="lit">143.jar</span> <span class="pun">和</span>
<span class="pln"> bcprov</span>
<span class="pun">-</span>
<span class="pln">jdk15</span>
<span class="pun">-</span>
<span class="lit">135.jar</span> <span class="pun">到</span> <span class="pun">/</span>
<span class="pln">usr</span>
<span class="pun">/</span>
<span class="pln">java</span>
<span class="pun">/</span>
<span class="pln">jdk1</span>
<span class="pun">.</span>
<span class="lit">8.0</span>
<span class="pln">_162</span>
<span class="pun">/</span>
<span class="pln">jre</span>
<span class="pun">/</span>
<span class="pln">lib</span>
<span class="pun">/</span>
<span class="pln">ext </span>
<span class="pun">目录下</span>
<span class="lit">3</span>
<span class="pun">、别问我上面两个文件怎么找……</span>

(如果您是https的话可以把RSA加密方式改掉弃用哦) 2)服务器注意事项:服务器时间同步做没做、hosts里配没配主机名hostname和127.0.0.1的映射关系、内存够不够用(有没有给jar指定内存大小)等

5、其他 1)请关注 NutzWk 的动态,有新的版本发布建议及时更新,往往会修复问题或新增功能 2)如果 NutzWk 给了您帮助,或已用于生产, https://wizzer.cn/donation 欢迎打赏一定金额以资鼓励,创造国内良好的开源环境 3)最后感谢兽兽及nutz社区广大网友的帮助和鼓励,没有您们的支持,这个项目不会历经6年多还在更新前进

20184 月24

Java代码中使用代理

//设置代理  
System.setProperty("http.proxySet", "true");  
System.setProperty("http.proxyHost", "127.0.0.1");  
System.setProperty("http.proxyPort", "1080");
20182 月26

利用nutz+t-io实现硬件设备的socket通信

 

1、MainServer 启动类

/**
 * Created by Wizzer on 2018/2/26.
 */
@IocBean
public class MainServer {
    private static final Log log = Logs.get();

    public static void main(String[] args) {
        try {
            ComboIocLoader loader = new ComboIocLoader(
                    new String[]{"*json", "config/ioc/", "*anno", "cn.wizzer","*rabbitmq"}
            );
            NutIoc ioc = new NutIoc(loader);
            //socket
            ioc.get(SocketServer.class).init();
            //http
            ioc.get(HttpServer.class).init();
            //mq
            String topicQueue = "sweeper-tioTopicQueue";
            ConnectionFactory factory = ioc.get(ConnectionFactory.class, "rabbitmq_cf");
            Connection rabbitmq_conn = factory.newConnection();
            Channel rabbitmq_channel = rabbitmq_conn.createChannel();
            rabbitmq_channel.queueDeclare(topicQueue, true, false, false, null);
            rabbitmq_channel.exchangeDeclare("sweeper-tioTopicExchange", BuiltinExchangeType.TOPIC, true);
            rabbitmq_channel.queueBind(topicQueue, "sweeper-tioTopicExchange", "tio.#");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

2、SocketServer 数据接收

 

/**
 * Created by Wizzer on 2018/2/26.
 */
@IocBean
public class SocketServer {
    private static final Log log = Logs.get();
    //handler, 包括编码、解码、消息处理
    @Inject
    private MyServerAioHandler myServerAioHandler;
    //事件监听器,可以为null,但建议自己实现该接口,可以参考showcase了解些接口
    private ServerAioListener aioListener;
    //一组连接共用的上下文对象
    private ServerGroupContext serverGroupContext;
    //aioServer对象
    private AioServer aioServer;
    //有时候需要绑定ip,不需要则null
    private String serverIp;
    @Inject
    private PropertiesProxy conf;

    public void init() throws Exception {
        int port = conf.getInt("server.socket.port", 8600);
        log.debug("socket port::" + port);
        serverGroupContext = new ServerGroupContext("tio", myServerAioHandler, aioListener);
        serverGroupContext.setHeartbeatTimeout(30000);
        aioServer = new AioServer(serverGroupContext);
        aioServer.start(serverIp, port);
    }
}

3、socket 数据包的解析

4、RabbitMQ 队列+消费者 实现数据入库

5、HttpServer 提供HTTP API用于对设备发送命令

6、socket 命令包的下发

 

源码:https://gitee.com/wizzer/demo



20181 月21

Elasticsearch 6.1.2 (二)分页查询、排序、关键词查询,集合beetl实现前台展示

后台代码,自定义tag:

<span class="kwd">package</span>
<span class="pln"> cn</span>
<span class="pun">.</span>
<span class="pln">wizzer</span>
<span class="pun">.</span>
<span class="pln">app</span>
<span class="pun">.</span>
<span class="pln">web</span>
<span class="pun">.</span>
<span class="pln">modules</span>
<span class="pun">.</span>
<span class="pln">tags</span>
<span class="pun">;</span>

<span class="kwd">import</span>
<span class="pln"> cn</span>
<span class="pun">.</span>
<span class="pln">wizzer</span>
<span class="pun">.</span>
<span class="pln">app</span>
<span class="pun">.</span>
<span class="pln">web</span>
<span class="pun">.</span>
<span class="pln">commons</span>
<span class="pun">.</span>
<span class="pln">ex</span>
<span class="pun">.</span>
<span class="pln">elasticsearch</span>
<span class="pun">.</span>
<span class="typ">EsService</span>
<span class="pun">;</span>
<span class="kwd">import</span>
<span class="pln"> cn</span>
<span class="pun">.</span>
<span class="pln">wizzer</span>
<span class="pun">.</span>
<span class="pln">app</span>
<span class="pun">.</span>
<span class="pln">web</span>
<span class="pun">.</span>
<span class="pln">commons</span>
<span class="pun">.</span>
<span class="pln">utils</span>
<span class="pun">.</span>
<span class="typ">YcDateUtil</span>
<span class="pun">;</span>
<span class="kwd">import</span>
<span class="pln"> cn</span>
<span class="pun">.</span>
<span class="pln">wizzer</span>
<span class="pun">.</span>
<span class="pln">app</span>
<span class="pun">.</span>
<span class="pln">ycold</span>
<span class="pun">.</span>
<span class="pln">modules</span>
<span class="pun">.</span>
<span class="pln">services</span>
<span class="pun">.</span>
<span class="typ">YcoldInquiryService</span>
<span class="pun">;</span>
<span class="kwd">import</span>
<span class="pln"> cn</span>
<span class="pun">.</span>
<span class="pln">wizzer</span>
<span class="pun">.</span>
<span class="pln">framework</span>
<span class="pun">.</span>
<span class="pln">page</span>
<span class="pun">.</span>
<span class="typ">Pagination</span>
<span class="pun">;</span>
<span class="kwd">import</span>
<span class="pln"> org</span>
<span class="pun">.</span>
<span class="pln">apache</span>
<span class="pun">.</span>
<span class="pln">commons</span>
<span class="pun">.</span>
<span class="pln">lang3</span>
<span class="pun">.</span>
<span class="typ">BooleanUtils</span>
<span class="pun">;</span>
<span class="kwd">import</span>
<span class="pln"> org</span>
<span class="pun">.</span>
<span class="pln">apache</span>
<span class="pun">.</span>
<span class="pln">commons</span>
<span class="pun">.</span>
<span class="pln">lang3</span>
<span class="pun">.</span>
<span class="typ">StringUtils</span>
<span class="pun">;</span>
<span class="kwd">import</span>
<span class="pln"> org</span>
<span class="pun">.</span>
<span class="pln">apache</span>
<span class="pun">.</span>
<span class="pln">commons</span>
<span class="pun">.</span>
<span class="pln">lang3</span>
<span class="pun">.</span>
<span class="pln">math</span>
<span class="pun">.</span>
<span class="typ">NumberUtils</span>
<span class="pun">;</span>
<span class="kwd">import</span>
<span class="pln"> org</span>
<span class="pun">.</span>
<span class="pln">beetl</span>
<span class="pun">.</span>
<span class="pln">core</span>
<span class="pun">.</span>
<span class="typ">GeneralVarTagBinding</span>
<span class="pun">;</span>
<span class="kwd">import</span>
<span class="pln"> org</span>
<span class="pun">.</span>
<span class="pln">elasticsearch</span>
<span class="pun">.</span>
<span class="pln">action</span>
<span class="pun">.</span>
<span class="pln">search</span>
<span class="pun">.</span>
<span class="typ">SearchRequestBuilder</span>
<span class="pun">;</span>
<span class="kwd">import</span>
<span class="pln"> org</span>
<span class="pun">.</span>
<span class="pln">elasticsearch</span>
<span class="pun">.</span>
<span class="pln">action</span>
<span class="pun">.</span>
<span class="pln">search</span>
<span class="pun">.</span>
<span class="typ">SearchResponse</span>
<span class="pun">;</span>
<span class="kwd">import</span>
<span class="pln"> org</span>
<span class="pun">.</span>
<span class="pln">elasticsearch</span>
<span class="pun">.</span>
<span class="pln">action</span>
<span class="pun">.</span>
<span class="pln">search</span>
<span class="pun">.</span>
<span class="typ">SearchType</span>
<span class="pun">;</span>
<span class="kwd">import</span>
<span class="pln"> org</span>
<span class="pun">.</span>
<span class="pln">elasticsearch</span>
<span class="pun">.</span>
<span class="pln">common</span>
<span class="pun">.</span>
<span class="pln">text</span>
<span class="pun">.</span>
<span class="typ">Text</span>
<span class="pun">;</span>
<span class="kwd">import</span>
<span class="pln"> org</span>
<span class="pun">.</span>
<span class="pln">elasticsearch</span>
<span class="pun">.</span>
<span class="pln">index</span>
<span class="pun">.</span>
<span class="pln">query</span>
<span class="pun">.</span>
<span class="typ">BoolQueryBuilder</span>
<span class="pun">;</span>
<span class="kwd">import</span>
<span class="pln"> org</span>
<span class="pun">.</span>
<span class="pln">elasticsearch</span>
<span class="pun">.</span>
<span class="pln">index</span>
<span class="pun">.</span>
<span class="pln">query</span>
<span class="pun">.</span>
<span class="typ">QueryBuilders</span>
<span class="pun">;</span>
<span class="kwd">import</span>
<span class="pln"> org</span>
<span class="pun">.</span>
<span class="pln">elasticsearch</span>
<span class="pun">.</span>
<span class="pln">search</span>
<span class="pun">.</span>
<span class="typ">SearchHits</span>
<span class="pun">;</span>
<span class="kwd">import</span>
<span class="pln"> org</span>
<span class="pun">.</span>
<span class="pln">elasticsearch</span>
<span class="pun">.</span>
<span class="pln">search</span>
<span class="pun">.</span>
<span class="pln">fetch</span>
<span class="pun">.</span>
<span class="pln">subphase</span>
<span class="pun">.</span>
<span class="pln">highlight</span>
<span class="pun">.</span>
<span class="typ">HighlightBuilder</span>
<span class="pun">;</span>
<span class="kwd">import</span>
<span class="pln"> org</span>
<span class="pun">.</span>
<span class="pln">elasticsearch</span>
<span class="pun">.</span>
<span class="pln">search</span>
<span class="pun">.</span>
<span class="pln">fetch</span>
<span class="pun">.</span>
<span class="pln">subphase</span>
<span class="pun">.</span>
<span class="pln">highlight</span>
<span class="pun">.</span>
<span class="typ">HighlightField</span>
<span class="pun">;</span>
<span class="kwd">import</span>
<span class="pln"> org</span>
<span class="pun">.</span>
<span class="pln">elasticsearch</span>
<span class="pun">.</span>
<span class="pln">search</span>
<span class="pun">.</span>
<span class="pln">sort</span>
<span class="pun">.</span>
<span class="typ">SortOrder</span>
<span class="pun">;</span>
<span class="kwd">import</span>
<span class="pln"> org</span>
<span class="pun">.</span>
<span class="pln">nutz</span>
<span class="pun">.</span>
<span class="pln">ioc</span>
<span class="pun">.</span>
<span class="pln">impl</span>
<span class="pun">.</span>
<span class="typ">PropertiesProxy</span>
<span class="pun">;</span>
<span class="kwd">import</span>
<span class="pln"> org</span>
<span class="pun">.</span>
<span class="pln">nutz</span>
<span class="pun">.</span>
<span class="pln">ioc</span>
<span class="pun">.</span>
<span class="pln">loader</span>
<span class="pun">.</span>
<span class="pln">annotation</span>
<span class="pun">.</span>
<span class="typ">Inject</span>
<span class="pun">;</span>
<span class="kwd">import</span>
<span class="pln"> org</span>
<span class="pun">.</span>
<span class="pln">nutz</span>
<span class="pun">.</span>
<span class="pln">ioc</span>
<span class="pun">.</span>
<span class="pln">loader</span>
<span class="pun">.</span>
<span class="pln">annotation</span>
<span class="pun">.</span>
<span class="typ">IocBean</span>
<span class="pun">;</span>
<span class="kwd">import</span>
<span class="pln"> org</span>
<span class="pun">.</span>
<span class="pln">nutz</span>
<span class="pun">.</span>
<span class="pln">lang</span>
<span class="pun">.</span>
<span class="typ">Strings</span>
<span class="pun">;</span>
<span class="kwd">import</span>
<span class="pln"> org</span>
<span class="pun">.</span>
<span class="pln">nutz</span>
<span class="pun">.</span>
<span class="pln">lang</span>
<span class="pun">.</span>
<span class="typ">Times</span>
<span class="pun">;</span>
<span class="kwd">import</span>
<span class="pln"> org</span>
<span class="pun">.</span>
<span class="pln">nutz</span>
<span class="pun">.</span>
<span class="pln">log</span>
<span class="pun">.</span>
<span class="typ">Log</span>
<span class="pun">;</span>
<span class="kwd">import</span>
<span class="pln"> org</span>
<span class="pun">.</span>
<span class="pln">nutz</span>
<span class="pun">.</span>
<span class="pln">log</span>
<span class="pun">.</span>
<span class="typ">Logs</span>
<span class="pun">;</span>

<span class="kwd">import</span>
<span class="pln"> java</span>
<span class="pun">.</span>
<span class="pln">util</span>
<span class="pun">.</span>
<span class="typ">ArrayList</span>
<span class="pun">;</span>
<span class="kwd">import</span>
<span class="pln"> java</span>
<span class="pun">.</span>
<span class="pln">util</span>
<span class="pun">.</span>
<span class="typ">Date</span>
<span class="pun">;</span>
<span class="kwd">import</span>
<span class="pln"> java</span>
<span class="pun">.</span>
<span class="pln">util</span>
<span class="pun">.</span>
<span class="typ">List</span>
<span class="pun">;</span>
<span class="kwd">import</span>
<span class="pln"> java</span>
<span class="pun">.</span>
<span class="pln">util</span>
<span class="pun">.</span>
<span class="typ">Map</span>
<span class="pun">;</span>

<span class="com">/**
 * Created by wizzer on 2018/1/20.
 */</span>
<span class="lit">@IocBean</span>
<span class="kwd">public</span> <span class="kwd">class</span> <span class="typ">YcoldInquiryListTag</span> <span class="kwd">extends</span> <span class="typ">GeneralVarTagBinding</span> <span class="pun">{</span>
    <span class="kwd">private</span> <span class="kwd">final</span> <span class="kwd">static</span> <span class="typ">Log</span>
<span class="pln"> log </span>
<span class="pun">=</span> <span class="typ">Logs</span>
<span class="pun">.</span>
<span class="kwd">get</span>
<span class="pun">();</span>
    <span class="lit">@Inject</span>
    <span class="kwd">private</span> <span class="typ">EsService</span>
<span class="pln"> esService</span>
<span class="pun">;</span>
    <span class="lit">@Inject</span>
    <span class="kwd">private</span> <span class="typ">YcoldInquiryService</span>
<span class="pln"> ycoldInquiryService</span>
<span class="pun">;</span>
    <span class="lit">@Inject</span>
    <span class="kwd">private</span> <span class="typ">PropertiesProxy</span>
<span class="pln"> cfg</span>
<span class="pun">;</span>

    <span class="lit">@Override</span>
    <span class="kwd">public</span> <span class="kwd">void</span>
<span class="pln"> render</span>
<span class="pun">()</span> <span class="pun">{</span>
        <span class="typ">String</span>
<span class="pln"> startDate </span>
<span class="pun">=</span> <span class="typ">Strings</span>
<span class="pun">.</span>
<span class="pln">sNull</span>
<span class="pun">(</span>
<span class="kwd">this</span>
<span class="pun">.</span>
<span class="pln">getAttributeValue</span>
<span class="pun">(</span>
<span class="str">"startDate"</span>
<span class="pun">));</span>
        <span class="typ">String</span>
<span class="pln"> endDate </span>
<span class="pun">=</span> <span class="typ">Strings</span>
<span class="pun">.</span>
<span class="pln">sNull</span>
<span class="pun">(</span>
<span class="kwd">this</span>
<span class="pun">.</span>
<span class="pln">getAttributeValue</span>
<span class="pun">(</span>
<span class="str">"endDate"</span>
<span class="pun">));</span>
        <span class="typ">String</span>
<span class="pln"> keyword </span>
<span class="pun">=</span> <span class="typ">Strings</span>
<span class="pun">.</span>
<span class="pln">sNull</span>
<span class="pun">(</span>
<span class="kwd">this</span>
<span class="pun">.</span>
<span class="pln">getAttributeValue</span>
<span class="pun">(</span>
<span class="str">"keyword"</span>
<span class="pun">));</span>
        <span class="kwd">int</span>
<span class="pln"> pageNumber </span>
<span class="pun">=</span> <span class="typ">NumberUtils</span>
<span class="pun">.</span>
<span class="pln">toInt</span>
<span class="pun">(</span>
<span class="typ">Strings</span>
<span class="pun">.</span>
<span class="pln">sNull</span>
<span class="pun">(</span>
<span class="kwd">this</span>
<span class="pun">.</span>
<span class="pln">getAttributeValue</span>
<span class="pun">(</span>
<span class="str">"pageNumber"</span>
<span class="pun">)),</span> <span class="lit">1</span>
<span class="pun">);</span>
        <span class="kwd">int</span>
<span class="pln"> pageSize </span>
<span class="pun">=</span> <span class="typ">NumberUtils</span>
<span class="pun">.</span>
<span class="pln">toInt</span>
<span class="pun">(</span>
<span class="typ">Strings</span>
<span class="pun">.</span>
<span class="pln">sNull</span>
<span class="pun">(</span>
<span class="kwd">this</span>
<span class="pun">.</span>
<span class="pln">getAttributeValue</span>
<span class="pun">(</span>
<span class="str">"pageSize"</span>
<span class="pun">)),</span> <span class="lit">10</span>
<span class="pun">);</span>
        <span class="kwd">boolean</span>
<span class="pln"> highlight </span>
<span class="pun">=</span> <span class="typ">BooleanUtils</span>
<span class="pun">.</span>
<span class="pln">toBoolean</span>
<span class="pun">(</span>
<span class="typ">Strings</span>
<span class="pun">.</span>
<span class="pln">sNull</span>
<span class="pun">(</span>
<span class="kwd">this</span>
<span class="pun">.</span>
<span class="pln">getAttributeValue</span>
<span class="pun">(</span>
<span class="str">"highlight"</span>
<span class="pun">)));</span>
        <span class="kwd">boolean</span>
<span class="pln"> explain </span>
<span class="pun">=</span> <span class="typ">BooleanUtils</span>
<span class="pun">.</span>
<span class="pln">toBoolean</span>
<span class="pun">(</span>
<span class="typ">Strings</span>
<span class="pun">.</span>
<span class="pln">sNull</span>
<span class="pun">(</span>
<span class="kwd">this</span>
<span class="pun">.</span>
<span class="pln">getAttributeValue</span>
<span class="pun">(</span>
<span class="str">"explain"</span>
<span class="pun">)));</span>
        <span class="typ">String</span>
<span class="pln"> sortName </span>
<span class="pun">=</span> <span class="typ">Strings</span>
<span class="pun">.</span>
<span class="pln">sNull</span>
<span class="pun">(</span>
<span class="kwd">this</span>
<span class="pun">.</span>
<span class="pln">getAttributeValue</span>
<span class="pun">(</span>
<span class="str">"sortName"</span>
<span class="pun">));</span>
        <span class="typ">String</span>
<span class="pln"> sortOrder </span>
<span class="pun">=</span> <span class="typ">Strings</span>
<span class="pun">.</span>
<span class="pln">sNull</span>
<span class="pun">(</span>
<span class="kwd">this</span>
<span class="pun">.</span>
<span class="pln">getAttributeValue</span>
<span class="pun">(</span>
<span class="str">"sortOrder"</span>
<span class="pun">));</span>
        <span class="typ">Pagination</span>
<span class="pln"> page </span>
<span class="pun">=</span> <span class="kwd">new</span> <span class="typ">Pagination</span>
<span class="pun">();</span>
<span class="pln">
        page</span>
<span class="pun">.</span>
<span class="pln">setPageNo</span>
<span class="pun">(</span>
<span class="pln">pageNumber</span>
<span class="pun">);</span>
<span class="pln">
        page</span>
<span class="pun">.</span>
<span class="pln">setPageSize</span>
<span class="pun">(</span>
<span class="pln">pageSize</span>
<span class="pun">);</span>
        <span class="kwd">try</span> <span class="pun">{</span>
            <span class="typ">BoolQueryBuilder</span>
<span class="pln"> query </span>
<span class="pun">=</span> <span class="typ">QueryBuilders</span>
<span class="pun">.</span>
<span class="pln">boolQuery</span>
<span class="pun">();</span>
            <span class="com">//根据名称查询</span>
            <span class="kwd">if</span> <span class="pun">(</span>
<span class="typ">Strings</span>
<span class="pun">.</span>
<span class="pln">isNotBlank</span>
<span class="pun">(</span>
<span class="pln">keyword</span>
<span class="pun">))</span> <span class="pun">{</span>
<span class="pln">
                query</span>
<span class="pun">.</span>
<span class="pln">must</span>
<span class="pun">(</span>
<span class="typ">QueryBuilders</span>
<span class="pun">.</span>
<span class="pln">wildcardQuery</span>
<span class="pun">(</span>
<span class="str">"CASNM"</span>
<span class="pun">,</span> <span class="str">"*"</span> <span class="pun">+</span>
<span class="pln"> keyword </span>
<span class="pun">+</span> <span class="str">"*"</span>
<span class="pun">));</span>
            <span class="pun">}</span>
            <span class="com">//截止时间大于等于现在</span>
<span class="pln">
            query</span>
<span class="pun">.</span>
<span class="pln">must</span>
<span class="pun">(</span>
<span class="typ">QueryBuilders</span>
<span class="pun">.</span>
<span class="pln">rangeQuery</span>
<span class="pun">(</span>
<span class="str">"IQDAT"</span>
<span class="pun">).</span>
<span class="pln">gte</span>
<span class="pun">(</span>
<span class="typ">Times</span>
<span class="pun">.</span>
<span class="pln">format</span>
<span class="pun">(</span>
<span class="str">"yyyyMMddHHmmss"</span>
<span class="pun">,</span> <span class="kwd">new</span> <span class="typ">Date</span>
<span class="pun">())));</span>
            <span class="com">//公共日期起</span>
            <span class="kwd">if</span> <span class="pun">(</span>
<span class="typ">Strings</span>
<span class="pun">.</span>
<span class="pln">isNotBlank</span>
<span class="pun">(</span>
<span class="pln">startDate</span>
<span class="pun">))</span> <span class="pun">{</span>
<span class="pln">
                query</span>
<span class="pun">.</span>
<span class="pln">must</span>
<span class="pun">(</span>
<span class="typ">QueryBuilders</span>
<span class="pun">.</span>
<span class="pln">rangeQuery</span>
<span class="pun">(</span>
<span class="str">"ANNODAT"</span>
<span class="pun">).</span>
<span class="pln">gte</span>
<span class="pun">(</span>
<span class="pln">startDate</span>
<span class="pun">.</span>
<span class="pln">replaceAll</span>
<span class="pun">(</span>
<span class="str">"-"</span>
<span class="pun">,</span>
<span class="str">""</span>
<span class="pun">)));</span>
            <span class="pun">}</span>
            <span class="com">//公共日期至</span>
            <span class="kwd">if</span> <span class="pun">(</span>
<span class="typ">Strings</span>
<span class="pun">.</span>
<span class="pln">isNotBlank</span>
<span class="pun">(</span>
<span class="pln">endDate</span>
<span class="pun">))</span> <span class="pun">{</span>
<span class="pln">
                query</span>
<span class="pun">.</span>
<span class="pln">must</span>
<span class="pun">(</span>
<span class="typ">QueryBuilders</span>
<span class="pun">.</span>
<span class="pln">rangeQuery</span>
<span class="pun">(</span>
<span class="str">"ANNODAT"</span>
<span class="pun">).</span>
<span class="pln">lte</span>
<span class="pun">(</span>
<span class="pln">endDate</span>
<span class="pun">.</span>
<span class="pln">replaceAll</span>
<span class="pun">(</span>
<span class="str">"-"</span>
<span class="pun">,</span>
<span class="str">""</span>
<span class="pun">)));</span>
            <span class="pun">}</span>
            <span class="com">//几个状态条件</span>
<span class="pln">
            query</span>
<span class="pun">.</span>
<span class="pln">must</span>
<span class="pun">(</span>
<span class="typ">QueryBuilders</span>
<span class="pun">.</span>
<span class="pln">matchQuery</span>
<span class="pun">(</span>
<span class="str">"BUYER_STS"</span>
<span class="pun">,</span> <span class="str">"N"</span>
<span class="pun">));</span>
<span class="com">//采购商状态</span>
<span class="pln">
            query</span>
<span class="pun">.</span>
<span class="pln">must</span>
<span class="pun">(</span>
<span class="typ">QueryBuilders</span>
<span class="pun">.</span>
<span class="pln">matchQuery</span>
<span class="pun">(</span>
<span class="str">"STS"</span>
<span class="pun">,</span> <span class="str">"A"</span>
<span class="pun">));</span>
<span class="com">//状态</span>
<span class="pln">
            query</span>
<span class="pun">.</span>
<span class="pln">must</span>
<span class="pun">(</span>
<span class="typ">QueryBuilders</span>
<span class="pun">.</span>
<span class="pln">matchQuery</span>
<span class="pun">(</span>
<span class="str">"ANNOMK"</span>
<span class="pun">,</span> <span class="str">"Y"</span>
<span class="pun">));</span>
<span class="com">//公告註記</span>
            <span class="typ">SearchRequestBuilder</span>
<span class="pln"> srb </span>
<span class="pun">=</span>
<span class="pln"> esService</span>
<span class="pun">.</span>
<span class="pln">getClient</span>
<span class="pun">().</span>
<span class="pln">prepareSearch</span>
<span class="pun">(</span>
<span class="pln">cfg</span>
<span class="pun">.</span>
<span class="kwd">get</span>
<span class="pun">(</span>
<span class="str">"es.index.name"</span>
<span class="pun">))</span>
                    <span class="pun">.</span>
<span class="pln">setSearchType</span>
<span class="pun">(</span>
<span class="typ">SearchType</span>
<span class="pun">.</span>
<span class="pln">DFS_QUERY_THEN_FETCH</span>
<span class="pun">)</span>
                    <span class="pun">.</span>
<span class="pln">setTypes</span>
<span class="pun">(</span>
<span class="str">"inquiry"</span>
<span class="pun">)</span>
                    <span class="pun">.</span>
<span class="pln">setQuery</span>
<span class="pun">(</span>
<span class="pln">query</span>
<span class="pun">)</span>
                    <span class="com">//分页</span>
                    <span class="pun">.</span>
<span class="pln">setFrom</span>
<span class="pun">((</span>
<span class="pln">pageNumber </span>
<span class="pun">-</span> <span class="lit">1</span>
<span class="pun">)</span> <span class="pun">*</span>
<span class="pln"> pageSize</span>
<span class="pun">).</span>
<span class="pln">setSize</span>
<span class="pun">(</span>
<span class="pln">pageSize</span>
<span class="pun">)</span>
                    <span class="com">//是否按匹配度排序</span>
                    <span class="pun">.</span>
<span class="pln">setExplain</span>
<span class="pun">(</span>
<span class="pln">explain</span>
<span class="pun">);</span>

            <span class="kwd">if</span> <span class="pun">(</span>
<span class="pln">highlight</span>
<span class="pun">)</span> <span class="pun">{</span>
                <span class="typ">HighlightBuilder</span>
<span class="pln"> highlightBuilder </span>
<span class="pun">=</span> <span class="kwd">new</span> <span class="typ">HighlightBuilder</span>
<span class="pun">().</span>
<span class="pln">field</span>
<span class="pun">(</span>
<span class="str">"*"</span>
<span class="pun">).</span>
<span class="pln">requireFieldMatch</span>
<span class="pun">(</span>
<span class="kwd">false</span>
<span class="pun">);</span>
<span class="pln">
                highlightBuilder</span>
<span class="pun">.</span>
<span class="pln">preTags</span>
<span class="pun">(</span>
<span class="str">"<span style=\"color:red\">"</span>
<span class="pun">);</span>
<span class="pln">
                highlightBuilder</span>
<span class="pun">.</span>
<span class="pln">postTags</span>
<span class="pun">(</span>
<span class="str">"</span>"</span>
<span class="pun">);</span>
<span class="pln">
                srb</span>
<span class="pun">.</span>
<span class="pln">highlighter</span>
<span class="pun">(</span>
<span class="pln">highlightBuilder</span>
<span class="pun">);</span>
            <span class="pun">}</span>
            <span class="kwd">if</span> <span class="pun">(</span>
<span class="typ">Strings</span>
<span class="pun">.</span>
<span class="pln">isNotBlank</span>
<span class="pun">(</span>
<span class="pln">sortName</span>
<span class="pun">))</span> <span class="pun">{</span>
                <span class="typ">String</span>
<span class="pun">[]</span>
<span class="pln"> sortNames </span>
<span class="pun">=</span> <span class="typ">StringUtils</span>
<span class="pun">.</span>
<span class="pln">split</span>
<span class="pun">(</span>
<span class="pln">sortName</span>
<span class="pun">,</span> <span class="str">","</span>
<span class="pun">);</span>
                <span class="kwd">if</span> <span class="pun">(</span>
<span class="str">"asc"</span>
<span class="pun">.</span>
<span class="pln">equalsIgnoreCase</span>
<span class="pun">(</span>
<span class="pln">sortOrder</span>
<span class="pun">))</span> <span class="pun">{</span>
                    <span class="kwd">for</span> <span class="pun">(</span>
<span class="typ">String</span>
<span class="pln"> s </span>
<span class="pun">:</span>
<span class="pln"> sortNames</span>
<span class="pun">)</span> <span class="pun">{</span>
<span class="pln">
                        srb</span>
<span class="pun">.</span>
<span class="pln">addSort</span>
<span class="pun">(</span>
<span class="pln">s</span>
<span class="pun">,</span> <span class="typ">SortOrder</span>
<span class="pun">.</span>
<span class="pln">ASC</span>
<span class="pun">);</span>
                    <span class="pun">}</span>
                <span class="pun">}</span> <span class="kwd">else</span> <span class="pun">{</span>
                    <span class="kwd">for</span> <span class="pun">(</span>
<span class="typ">String</span>
<span class="pln"> s </span>
<span class="pun">:</span>
<span class="pln"> sortNames</span>
<span class="pun">)</span> <span class="pun">{</span>
<span class="pln">
                        srb</span>
<span class="pun">.</span>
<span class="pln">addSort</span>
<span class="pun">(</span>
<span class="pln">s</span>
<span class="pun">,</span> <span class="typ">SortOrder</span>
<span class="pun">.</span>
<span class="pln">DESC</span>
<span class="pun">);</span>
                    <span class="pun">}</span>
                <span class="pun">}</span>
            <span class="pun">}</span>
<span class="pln">
            log</span>
<span class="pun">.</span>
<span class="pln">debug</span>
<span class="pun">(</span>
<span class="str">"srb:::\r\n"</span> <span class="pun">+</span>
<span class="pln"> srb</span>
<span class="pun">.</span>
<span class="pln">toString</span>
<span class="pun">());</span>

            <span class="typ">SearchResponse</span>
<span class="pln"> response </span>
<span class="pun">=</span>
<span class="pln"> srb</span>
<span class="pun">.</span>
<span class="pln">execute</span>
<span class="pun">().</span>
<span class="pln">actionGet</span>
<span class="pun">();</span>
            <span class="typ">SearchHits</span>
<span class="pln"> hits </span>
<span class="pun">=</span>
<span class="pln"> response</span>
<span class="pun">.</span>
<span class="pln">getHits</span>
<span class="pun">();</span>
<span class="pln">
            page</span>
<span class="pun">.</span>
<span class="pln">setTotalCount</span>
<span class="pun">((</span>
<span class="kwd">int</span>
<span class="pun">)</span>
<span class="pln"> hits</span>
<span class="pun">.</span>
<span class="pln">getTotalHits</span>
<span class="pun">());</span>
            <span class="typ">List</span>
<span class="pun"><</span>
<span class="typ">Map</span>
<span class="pun"><</span>
<span class="typ">String</span>
<span class="pun">,</span> <span class="typ">Object</span>
<span class="pun">>></span>
<span class="pln"> list </span>
<span class="pun">=</span> <span class="kwd">new</span> <span class="typ">ArrayList</span>
<span class="pun"><>();</span>
<span class="pln">
            hits</span>
<span class="pun">.</span>
<span class="pln">forEach</span>
<span class="pun">(</span>
<span class="pln">searchHit </span>
<span class="pun">-></span> <span class="pun">{</span>
                <span class="typ">Map</span>
<span class="pun"><</span>
<span class="typ">String</span>
<span class="pun">,</span> <span class="typ">Object</span>
<span class="pun">></span>
<span class="pln"> source </span>
<span class="pun">=</span>
<span class="pln"> searchHit</span>
<span class="pun">.</span>
<span class="pln">getSourceAsMap</span>
<span class="pun">();</span>
                <span class="typ">Map</span>
<span class="pun"><</span>
<span class="typ">String</span>
<span class="pun">,</span> <span class="typ">HighlightField</span>
<span class="pun">></span>
<span class="pln"> highlightFields </span>
<span class="pun">=</span>
<span class="pln"> searchHit</span>
<span class="pun">.</span>
<span class="pln">getHighlightFields</span>
<span class="pun">();</span>
                <span class="com">//name高亮</span>
                <span class="typ">HighlightField</span>
<span class="pln"> nameField </span>
<span class="pun">=</span>
<span class="pln"> highlightFields</span>
<span class="pun">.</span>
<span class="kwd">get</span>
<span class="pun">(</span>
<span class="str">"CASNM"</span>
<span class="pun">);</span>
                <span class="kwd">if</span> <span class="pun">(</span>
<span class="pln">nameField </span>
<span class="pun">!=</span> <span class="kwd">null</span>
<span class="pun">)</span> <span class="pun">{</span>
                    <span class="typ">Text</span>
<span class="pun">[]</span>
<span class="pln"> fragments </span>
<span class="pun">=</span>
<span class="pln"> nameField</span>
<span class="pun">.</span>
<span class="pln">fragments</span>
<span class="pun">();</span>
                    <span class="typ">String</span>
<span class="pln"> tmp </span>
<span class="pun">=</span> <span class="str">""</span>
<span class="pun">;</span>
                    <span class="kwd">for</span> <span class="pun">(</span>
<span class="typ">Text</span>
<span class="pln"> text </span>
<span class="pun">:</span>
<span class="pln"> fragments</span>
<span class="pun">)</span> <span class="pun">{</span>
<span class="pln">
                        tmp </span>
<span class="pun">+=</span>
<span class="pln"> text</span>
<span class="pun">;</span>
                    <span class="pun">}</span>
<span class="pln">
                    source</span>
<span class="pun">.</span>
<span class="pln">put</span>
<span class="pun">(</span>
<span class="str">"CASNM"</span>
<span class="pun">,</span>
<span class="pln"> tmp</span>
<span class="pun">);</span>
                <span class="pun">}</span>
<span class="pln">
                source</span>
<span class="pun">.</span>
<span class="pln">put</span>
<span class="pun">(</span>
<span class="str">"IQDAT"</span>
<span class="pun">,</span> <span class="typ">YcDateUtil</span>
<span class="pun">.</span>
<span class="pln">get_yyyyMMdd_HHmm</span>
<span class="pun">(</span>
<span class="typ">Strings</span>
<span class="pun">.</span>
<span class="pln">sNull</span>
<span class="pun">(</span>
<span class="pln">source</span>
<span class="pun">.</span>
<span class="kwd">get</span>
<span class="pun">(</span>
<span class="str">"IQDAT"</span>
<span class="pun">))));</span>
<span class="pln">
                source</span>
<span class="pun">.</span>
<span class="pln">put</span>
<span class="pun">(</span>
<span class="str">"ANNODAT"</span>
<span class="pun">,</span> <span class="typ">YcDateUtil</span>
<span class="pun">.</span>
<span class="pln">get_yyyyMMdd</span>
<span class="pun">(</span>
<span class="typ">Strings</span>
<span class="pun">.</span>
<span class="pln">sNull</span>
<span class="pun">(</span>
<span class="pln">source</span>
<span class="pun">.</span>
<span class="kwd">get</span>
<span class="pun">(</span>
<span class="str">"ANNODAT"</span>
<span class="pun">))));</span>
<span class="pln">
                list</span>
<span class="pun">.</span>
<span class="pln">add</span>
<span class="pun">(</span>
<span class="pln">source</span>
<span class="pun">);</span>
            <span class="pun">});</span>
<span class="pln">
            page</span>
<span class="pun">.</span>
<span class="pln">setList</span>
<span class="pun">(</span>
<span class="pln">list</span>
<span class="pun">);</span>
        <span class="pun">}</span> <span class="kwd">catch</span> <span class="pun">(</span>
<span class="typ">Exception</span>
<span class="pln"> e</span>
<span class="pun">)</span> <span class="pun">{</span>
<span class="pln">
            e</span>
<span class="pun">.</span>
<span class="pln">printStackTrace</span>
<span class="pun">();</span>
        <span class="pun">}</span>
        <span class="kwd">this</span>
<span class="pun">.</span>
<span class="pln">binds</span>
<span class="pun">(</span>
<span class="pln">page</span>
<span class="pun">);</span>
        <span class="kwd">this</span>
<span class="pun">.</span>
<span class="pln">doBodyRender</span>
<span class="pun">();</span>
    <span class="pun">}</span>
<span class="pun">}</span>

前台beetl页面:

<span class="pln">  <#ycold_inquiry_list pageNumber="${pageNumber}" pageSize="${pageSize}" startDate="${startDate}" endDate="${endDate}" keyword="${keyword}" sortName="ANNODAT" sortOrder="desc" highlight="false" var="p">

    </span>
<span class="tag"><table</span> <span class="atn">class</span>
<span class="pun">=</span>
<span class="atv">"list_table_blue even_table"</span>
<span class="tag">></span>
        <span class="tag"><thead></span>
        <span class="tag"><tr></span>
            <span class="tag"><th></span>
<span class="pln">公告日期</span>
<span class="tag"></th></span>
            <span class="tag"><th></span>
<span class="pln">案件名称</span>
<span class="tag"></th></span>
            <span class="tag"><th></span>
<span class="pln">交货地点</span>
<span class="tag"></th></span>
            <span class="tag"><th></span>
<span class="pln">报价截止日期</span>
<span class="tag"></th></span>
            <span class="tag"><th</span> <span class="atn">width</span>
<span class="pun">=</span>
<span class="atv">"110"</span>
<span class="tag">></span>
<span class="pln">查看详细</span>
<span class="tag"></th></span>
        <span class="tag"></tr></span>
        <span class="tag"></thead></span>
        <span class="tag"><tbody></span>
        <span class="pun"><%</span>
<span class="kwd">for</span>
<span class="pun">(</span>
<span class="pln">o </span>
<span class="kwd">in</span>
<span class="pln"> p</span>
<span class="pun">.</span>
<span class="pln">list</span>
<span class="pun">){</span>
<span class="pln">%>
        </span>
<span class="tag"><tr></span>
            <span class="tag"><td></span>
<span class="pln">${o.ANNODAT!}</span>
<span class="tag"></td></span>
            <span class="tag"><td</span> <span class="atn">class</span>
<span class="pun">=</span>
<span class="atv">"l_text"</span>
<span class="tag">><a</span> <span class="atn">href</span>
<span class="pun">=</span>
<span class="atv">"${base!}/purchase/info/${o.XUID!}"</span> <span class="atn">target</span>
<span class="pun">=</span>
<span class="atv">"_blank"</span> <span class="atn">class</span>
<span class="pun">=</span>
<span class="atv">"td_a hide1"</span>
<span class="tag">></span>
<span class="pln">${o.CASNM!}</span>
<span class="tag"></a></span>
            <span class="tag"></td></span>
            <span class="tag"><td</span> <span class="atn">class</span>
<span class="pun">=</span>
<span class="atv">"l_text"</span>
<span class="tag">></span>
<span class="pln">${o.DLSITE!}</span>
<span class="tag"></td></span>
            <span class="tag"><td></span>
<span class="pln">${o.IQDAT!}</span>
<span class="tag"></td></span>
            <span class="tag"><td><a</span> <span class="atn">href</span>
<span class="pun">=</span>
<span class="atv">"${base!}/purchase/info/${o.XUID!}"</span> <span class="atn">target</span>
<span class="pun">=</span>
<span class="atv">"_blank"</span> <span class="atn">class</span>
<span class="pun">=</span>
<span class="atv">"more_a png"</span>
<span class="tag">></a></td></span>
        <span class="tag"></tr></span>
        <span class="pun"><%}</span>
<span class="pln">%>
        </span>
<span class="tag"></tbody></span>
    <span class="tag"></table></span>
    <span class="pun"><%</span>
<span class="kwd">if</span>
<span class="pun">(</span>
<span class="pln">p</span>
<span class="pun">.</span>
<span class="pln">totalCount</span>
<span class="pun">></span>
<span class="lit">1</span>
<span class="pun">){</span>
<span class="pln">%>
    </span>
<span class="tag"><div</span> <span class="atn">class</span>
<span class="pun">=</span>
<span class="atv">"page round_s_a"</span>
<span class="tag">></div></span>
    <span class="tag"><script</span> <span class="atn">type</span>
<span class="pun">=</span>
<span class="atv">"text/javascript"</span>
<span class="tag">></span>
<span class="pln">
        $</span>
<span class="pun">(</span>
<span class="kwd">function</span> <span class="pun">()</span> <span class="pun">{</span>
<span class="pln">
            $</span>
<span class="pun">(</span>
<span class="str">".page"</span>
<span class="pun">).</span>
<span class="pln">createPage</span>
<span class="pun">({</span>
<span class="pln">
                pageCount</span>
<span class="pun">:</span>
<span class="pln"> $</span>
<span class="pun">{</span>
<span class="pln">p</span>
<span class="pun">.</span>
<span class="pln">totalPage</span>
<span class="pun">},</span>
<span class="pln">
                totalCount</span>
<span class="pun">:</span>
<span class="pln"> $</span>
<span class="pun">{</span>
<span class="pln">p</span>
<span class="pun">.</span>
<span class="pln">totalCount</span>
<span class="pun">},</span>
<span class="pln">
                current</span>
<span class="pun">:</span>
<span class="pln"> $</span>
<span class="pun">{</span>
<span class="pln">p</span>
<span class="pun">.</span>
<span class="pln">pageNo</span>
<span class="pun">},</span>
<span class="pln">
                backFn</span>
<span class="pun">:</span> <span class="kwd">function</span> <span class="pun">(</span>
<span class="pln">p</span>
<span class="pun">)</span> <span class="pun">{</span>
<span class="pln">
                    window</span>
<span class="pun">.</span>
<span class="pln">location</span>
<span class="pun">.</span>
<span class="pln">href </span>
<span class="pun">=</span> <span class="str">"?page="</span> <span class="pun">+</span>
<span class="pln"> p </span>
<span class="pun">+</span> <span class="str">"&size=${p.pageSize}"</span>
<span class="pun">;</span>
                <span class="pun">}</span>
            <span class="pun">});</span>
        <span class="pun">});</span>
    <span class="tag"></script></span>
    <span class="pun"><%}</span>
<span class="pln">%></span>
20181 月21

Elasticsearch 6.1.2 (一)中文分词设置、字符串字段排序设置

<span class="kwd">if</span> <span class="pun">(!</span>
<span class="pln">esService</span>
<span class="pun">.</span>
<span class="pln">isExistsType</span>
<span class="pun">(</span>
<span class="pln">cfg</span>
<span class="pun">.</span>
<span class="kwd">get</span>
<span class="pun">(</span>
<span class="str">"es.index.name"</span>
<span class="pun">),</span>
<span class="pln"> type</span>
<span class="pun">))</span> <span class="pun">{</span>
                <span class="com">//初始化索引表</span>
                <span class="typ">XContentBuilder</span>
<span class="pln"> mapping </span>
<span class="pun">=</span>
<span class="pln"> jsonBuilder</span>
<span class="pun">().</span>
<span class="pln">startObject</span>
<span class="pun">()</span>
                        <span class="pun">.</span>
<span class="pln">startObject</span>
<span class="pun">(</span>
<span class="pln">type</span>
<span class="pun">)</span>
                        <span class="pun">.</span>
<span class="pln">startObject</span>
<span class="pun">(</span>
<span class="str">"_all"</span>
<span class="pun">)</span>
<span class="com">//设置IK分词</span>
                        <span class="pun">.</span>
<span class="pln">field</span>
<span class="pun">(</span>
<span class="str">"analyzer"</span>
<span class="pun">,</span> <span class="str">"ik_max_word"</span>
<span class="pun">)</span>
                        <span class="pun">.</span>
<span class="pln">field</span>
<span class="pun">(</span>
<span class="str">"search_analyzer"</span>
<span class="pun">,</span> <span class="str">"ik_max_word"</span>
<span class="pun">)</span>
                        <span class="pun">.</span>
<span class="pln">field</span>
<span class="pun">(</span>
<span class="str">"term_vector"</span>
<span class="pun">,</span> <span class="str">"no"</span>
<span class="pun">)</span>
                        <span class="pun">.</span>
<span class="pln">field</span>
<span class="pun">(</span>
<span class="str">"store"</span>
<span class="pun">,</span> <span class="str">"false"</span>
<span class="pun">)</span>
                        <span class="pun">.</span>
<span class="pln">endObject</span>
<span class="pun">()</span>
                        <span class="pun">.</span>
<span class="pln">startObject</span>
<span class="pun">(</span>
<span class="str">"properties"</span>
<span class="pun">)</span>
                        <span class="pun">.</span>
<span class="pln">startObject</span>
<span class="pun">(</span>
<span class="str">"CASNM"</span>
<span class="pun">).</span>
<span class="pln">field</span>
<span class="pun">(</span>
<span class="str">"type"</span>
<span class="pun">,</span> <span class="str">"text"</span>
<span class="pun">).</span>
<span class="pln">field</span>
<span class="pun">(</span>
<span class="str">"analyzer"</span>
<span class="pun">,</span> <span class="str">"ik_max_word"</span>
<span class="pun">).</span>
<span class="pln">endObject</span>
<span class="pun">()</span>
                        <span class="pun">.</span>
<span class="pln">startObject</span>
<span class="pun">(</span>
<span class="str">"IQDAT"</span>
<span class="pun">).</span>
<span class="pln">field</span>
<span class="pun">(</span>
<span class="str">"type"</span>
<span class="pun">,</span> <span class="str">"text"</span>
<span class="pun">).</span>
<span class="pln">field</span>
<span class="pun">(</span>
<span class="str">"index"</span>
<span class="pun">,</span> <span class="str">"true"</span>
<span class="pun">).</span>
<span class="pln">field</span>
<span class="pun">(</span>
<span class="str">"fielddata"</span>
<span class="pun">,</span>
<span class="str">"true"</span>
<span class="pun">).</span>
<span class="pln">endObject</span>
<span class="pun">()</span>
                        <span class="pun">.</span>
<span class="pln">startObject</span>
<span class="pun">(</span>
<span class="str">"ANNODAT"</span>
<span class="pun">).</span>
<span class="pln">field</span>
<span class="pun">(</span>
<span class="str">"type"</span>
<span class="pun">,</span> <span class="str">"text"</span>
<span class="pun">).</span>
<span class="pln">field</span>
<span class="pun">(</span>
<span class="str">"index"</span>
<span class="pun">,</span> <span class="str">"true"</span>
<span class="pun">).</span>
<span class="pln">field</span>
<span class="pun">(</span>
<span class="str">"fielddata"</span>
<span class="pun">,</span>
<span class="str">"true"</span>
<span class="pun">).</span>
<span class="pln">endObject</span>
<span class="pun">()</span>
                        <span class="pun">.</span>
<span class="pln">endObject</span>
<span class="pun">()</span>
                        <span class="pun">.</span>
<span class="pln">endObject</span>
<span class="pun">()</span>
                        <span class="pun">.</span>
<span class="pln">endObject</span>
<span class="pun">();</span>
<span class="pln">
                esService</span>
<span class="pun">.</span>
<span class="pln">putMapping</span>
<span class="pun">(</span>
<span class="pln">cfg</span>
<span class="pun">.</span>
<span class="kwd">get</span>
<span class="pun">(</span>
<span class="str">"es.index.name"</span>
<span class="pun">),</span> <span class="str">"inquiry"</span>
<span class="pun">,</span>
<span class="pln"> mapping</span>
<span class="pun">);</span>
            <span class="pun">}</span>

    <span class="com">/**
     * @param indexName 索引名
     * @param type      数据类型(表名)
     * @param mapping   mapping对象
     */</span>
    <span class="kwd">public</span> <span class="kwd">boolean</span>
<span class="pln"> putMapping</span>
<span class="pun">(</span>
<span class="typ">String</span>
<span class="pln"> indexName</span>
<span class="pun">,</span> <span class="typ">String</span>
<span class="pln"> type</span>
<span class="pun">,</span> <span class="typ">XContentBuilder</span>
<span class="pln"> mapping</span>
<span class="pun">)</span> <span class="pun">{</span>
        <span class="typ">PutMappingRequest</span>
<span class="pln"> mappingRequest </span>
<span class="pun">=</span> <span class="typ">Requests</span>
<span class="pun">.</span>
<span class="pln">putMappingRequest</span>
<span class="pun">(</span>
<span class="pln">indexName</span>
<span class="pun">).</span>
<span class="pln">type</span>
<span class="pun">(</span>
<span class="pln">type</span>
<span class="pun">).</span>
<span class="pln">source</span>
<span class="pun">(</span>
<span class="pln">mapping</span>
<span class="pun">);</span>
        <span class="typ">PutMappingResponse</span>
<span class="pln"> response </span>
<span class="pun">=</span>
<span class="pln"> getClient</span>
<span class="pun">().</span>
<span class="pln">admin</span>
<span class="pun">().</span>
<span class="pln">indices</span>
<span class="pun">().</span>
<span class="pln">putMapping</span>
<span class="pun">(</span>
<span class="pln">mappingRequest</span>
<span class="pun">).</span>
<span class="pln">actionGet</span>
<span class="pun">();</span>
        <span class="kwd">return</span>
<span class="pln"> response</span>
<span class="pun">.</span>
<span class="pln">isAcknowledged</span>
<span class="pun">();</span>
    <span class="pun">}</span>

.field(“fielddata”,”true”) //text字段默认不允许排序,是单独设置数据格式