Elasticsearch 实现保存缓存数据和分页查询

1、保存
注意@Id注解,标识此条数据在es里的唯一性,多次保存的话会触发update操作:

package xxxxxx;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.ToString;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

import java.math.BigDecimal;
import java.util.Date;

@Data
@ToString
@ApiModel(description = "订单主表")
@Document(indexName = "hq-borrow-order#{esConfigBean.esConfig}", type = "BorrowOrderEsVo")
public class BorrowOrderEsVo {

private static final long serialVersionUID = -3915666721968467471L;

    @Id
    @ApiModelProperty(name = "orderNo",value = "借用订单编号")
    private String orderNo;
    //借用订单编号
    @ApiModelProperty(name = "legalPersonCode",value = "法人code")
    private String legalPersonCode;
    //法人名称
    @ApiModelProperty(name = "legalPersonName",value = "法人名称")
    private String legalPersonName;
    //如服务站编码
    @ApiModelProperty(name = "contacts",value = "联系人")
    private String contacts;
    //组织编码
    @ApiModelProperty(name = "organizationCode",value = "组织编码")
    private String organizationCode;
    //组织名称
    @ApiModelProperty(name = "organizationName",value = "组织名称")
    private String organizationName;

    @ApiModelProperty(name = "organizationNo",value = "6位服务站编码")
    private String organizationNo;

    //订单类型
    @ApiModelProperty(name = "orderType",value = "订单类型")
    private Integer orderType;
    //1笔记本2台式机
    @ApiModelProperty(name = "productLine",value = "产品线1笔记本2台式机")
    private String productLine;

    @ApiModelProperty(name = "productLineName",value = "产品线a1笔记本2台式机")
    private String productLineName;

    @ApiModelProperty(notes = "运作产线ID")
    private Long chargeLine;//运作产线ID
    @ApiModelProperty(notes = "运作产线名称")
    private String chargeLineName;//运作产线名称
    //币别
    @ApiModelProperty(name = "moneyType",value = "币别")
    private String moneyType;
    //是否运输0是 1否
    @ApiModelProperty(name = "isTransport",value = "是否运输0是 1否")
    private Integer isTransport;
    //收货地址
    @ApiModelProperty(name = "receivingAddress",value = "收货地址")
    private String receivingAddress;
    //地区
    @ApiModelProperty(name = "region",value = "地区")
    private String region;
    //国家
    @ApiModelProperty(name = "countryCode",value = "国家")
    private String countryCode;
    //省
    @ApiModelProperty(name = "province",value = "省")
    private String province;
    //市
    @ApiModelProperty(name = "city",value = "市")
    private String city;
    //区
    @ApiModelProperty(name = "area",value = "区")
    private String area;
    //总数量
    @ApiModelProperty(name = "totalCount",value = "总数量")
    private Integer totalCount;
    //总金额
    @ApiModelProperty(name = "totalAmount",value = "总金额")
    private BigDecimal totalAmount;
    //订单状态 10已保存 20已提交 30已审批 50已否决
    @ApiModelProperty(name = "orderState",value = "订单状态 10已保存 20已提交 25已审核 30已审批 40 已取消 50已关闭")
    private Integer orderState;
    //10 本部订单 20 服务站订单
    @ApiModelProperty(name = "orderFlag",value = "10 本部订单 20 服务站订单")
    private Integer orderFlag;
    //抛送状态 10待抛 20抛失败 30已抛
    @ApiModelProperty(name = "pullState",value = "抛送状态 10待抛 20抛失败 30已抛")
    private String pullState;
    //B2B订单B2C订单
    @ApiModelProperty(name = "b2BOrB2C",value = "B2B订单B2C订单")
    private Integer b2BOrB2C;
    @ApiModelProperty(name = "specialFlag",value = "是否时特殊订单 1是 0 否")
    private Integer specialFlag;
    //特殊原因编号
    @ApiModelProperty(name = "specialNo",value = "特殊原因编号")
    private String specialNo;
    //特殊原因名称
    @ApiModelProperty(name = "specialReason",value = "特殊原因名称")
    private String specialReason;
    //特殊原因说明
    @ApiModelProperty(name = "specialMemo",value = "特殊原因说明")
    private String specialMemo;
    //备注
    @ApiModelProperty(name = "memo",value = "备注")
    private String memo;
    //删除标识0正常 1删除
    @ApiModelProperty(name = "deleteFlag",value = "删除标识0正常 1删除")
    private Integer deleteFlag;
    //创建人
    @ApiModelProperty(name = "createBy",value = "创建人")
    private String createBy;
    //创建时间
    @ApiModelProperty(name = "createTime",value = "创建时间")
    private Date createTime;
    @ApiModelProperty(name = "submitTime",value = "提交时间")
    private Date submitTime;
    //修改人
    @ApiModelProperty(name = "updateBy",value = "修改人")
    private String updateBy;
    //修改时间
    @ApiModelProperty(name = "updateTime",value = "修改时间")
    private Date updateTime;
    //借用人员
    @ApiModelProperty(name = "borrower",value = "借用人员")
    private String borrower;
    // 借用目的码表
    @ApiModelProperty(name = "purposeBorrowing",value = " 借用目的码表")
    private Integer purposeBorrowing;
    //收货人
    @ApiModelProperty(name = "consignee",value = "收货人")
    private String consignee;
    //成本中心
    @ApiModelProperty(name = "costCenter",value = "成本中心")
    private String costCenter;
    //借用周期
    @ApiModelProperty(name = "borrowCycle",value = "借用周期")
    private Long borrowCycle;
    //附件url
    @ApiModelProperty(name = "annexUrl",value = "附件url")
    private String annexUrl;
    @ApiModelProperty(name = "annexName",value = "附件名称")
    private String annexName;

    @ApiModelProperty(name = "soid",value = "服务工单编号")
    private String soid;

    @ApiModelProperty(name = "orginType", value = "库存来源")
    private String orginType;

    @ApiModelProperty(name = "orderSource",value = "订单来源  0 是站端 ,1 是本部")
    private String orderSource;

    @ApiModelProperty(name = "productSN",value = "主机编号")
    private String productSN;
    
    @ApiModelProperty(name = "runCount",value = "执行数量")
    private String runCount;
}

ES持久化层代码如下:

package xxxxx;
import      xxxx,。。。。。。
import org.apache.commons.lang3.StringUtils;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Sort;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import java.util.List;
import java.util.Objects;

@Service
public interface BorrowOrderEsRepository extends ElasticsearchRepository<BorrowOrderEsVo, String> {
    
    List<BorrowOrderEsVo> findByOrderNoIn(List<String> orderNos);

    static QueryBuilder searchBuilder(QueryBorrowOrderRequestVo queryBorrowOrderRequestVo) {
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        if (StringUtils.isNotEmpty(queryBorrowOrderRequestVo.getLegalPersonCode())) {
            boolQueryBuilder.must(QueryBuilders.termQuery("legalPersonCode", queryBorrowOrderRequestVo.getLegalPersonCode().toLowerCase()));
        } else if(!CollectionUtils.isEmpty(queryBorrowOrderRequestVo.getLegalPersonCodes())) {
            boolQueryBuilder.must(QueryBuilders.termsQuery("legalPersonCode", queryBorrowOrderRequestVo.getLegalPersonCodes()));
        }
        if (StringUtils.isNotBlank(queryBorrowOrderRequestVo.getOrderNo()) &&!"".equals(queryBorrowOrderRequestVo.getOrderNo())) {
            boolQueryBuilder.must(QueryBuilders.termQuery("orderNo", queryBorrowOrderRequestVo.getOrderNo().toLowerCase()));
        }
        if(StringUtils.isNotBlank(queryBorrowOrderRequestVo.getOrderType()) &&!"".equals(queryBorrowOrderRequestVo.getOrderType()) ){
            boolQueryBuilder.must(QueryBuilders.termsQuery("orderType", queryBorrowOrderRequestVo.getOrderType().toLowerCase()));
        }
        if (Objects.nonNull(queryBorrowOrderRequestVo.getOrderState()) &&!"".equals(queryBorrowOrderRequestVo.getOrderState())) {
            boolQueryBuilder.must(QueryBuilders.termQuery("orderState", queryBorrowOrderRequestVo.getOrderState()));
        }
        if (Objects.nonNull(queryBorrowOrderRequestVo.getIsTransport()) &&!"".equals(queryBorrowOrderRequestVo.getIsTransport())) {
            //是否运输
            boolQueryBuilder.must(QueryBuilders.termQuery("isTransport", queryBorrowOrderRequestVo.getIsTransport()));
        }
        if (Objects.nonNull(queryBorrowOrderRequestVo.getIsSpecialOrder()) &&!"".equals(queryBorrowOrderRequestVo.getIsSpecialOrder())) {
            //是否运输
            boolQueryBuilder.must(QueryBuilders.termQuery("specialFlag", queryBorrowOrderRequestVo.getIsSpecialOrder()));
        }
        if (!CollectionUtils.isEmpty(queryBorrowOrderRequestVo.getOrganizationCodes())) {
            boolQueryBuilder.must(QueryBuilders.termsQuery("organizationCode", queryBorrowOrderRequestVo.getOrganizationCodes()));
        } else if (StringUtils.isNotBlank(queryBorrowOrderRequestVo.getOrganizationCode())) {
            boolQueryBuilder.must(QueryBuilders.termQuery("organizationCode", queryBorrowOrderRequestVo.getOrganizationCode().toLowerCase()));
        }
        if (StringUtils.isNotBlank(queryBorrowOrderRequestVo.getOrganizationName()) &&!"".equals(queryBorrowOrderRequestVo.getOrganizationName())) {
            boolQueryBuilder.must(QueryBuilders.matchPhraseQuery("organizationName", queryBorrowOrderRequestVo.getOrganizationName()));
        }
        if (Objects.nonNull(queryBorrowOrderRequestVo.getBeginCreatedTime()) &&!"".equals(queryBorrowOrderRequestVo.getBeginCreatedTime())) {
            boolQueryBuilder.must(QueryBuilders.rangeQuery("createTime").gt(DateUtils.getStartDateTime(DateUtils.getDate(queryBorrowOrderRequestVo.getBeginCreatedTime())).getTime()));
        }
        if (Objects.nonNull(queryBorrowOrderRequestVo.getEndCreatedTime()) &&!"".equals(queryBorrowOrderRequestVo.getEndCreatedTime())) {
            boolQueryBuilder.must(QueryBuilders.rangeQuery("createTime").lt(DateUtils.getLastDateTime(DateUtils.getDate(queryBorrowOrderRequestVo.getEndCreatedTime())).getTime()));
        }
        if (queryBorrowOrderRequestVo.getChargeLine() != null) {
            boolQueryBuilder.should(QueryBuilders.termQuery("chargeLine", queryBorrowOrderRequestVo.getChargeLine()));
            boolQueryBuilder.should(QueryBuilders.termQuery("chargeLineName", queryBorrowOrderRequestVo.getChargeLineName()));
            boolQueryBuilder.minimumNumberShouldMatch(1);
        }

        return boolQueryBuilder;
    }

    default Page<BorrowOrderEsVo> queryPage(QueryBorrowOrderRequestVo queryBorrowOrderRequestVo) {

        return this.search(searchBuilder(queryBorrowOrderRequestVo),
                queryBorrowOrderRequestVo.pageable(SortTools.basicSort(Sort.Direction.DESC, "createTime")));
    }
}

调用保存数据到es

borrowOrderEsRepository.save(borrowOrderEsVo);

2、分页查询
分页查询入参对象:

package xxx

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;
import java.util.List;

@Data
@ToString
@ApiModel(description = "订单主表条件查询入参")
public class QueryBorrowOrderRequestVo extends EsPageVO {

private static final long serialVersionUID = -3915666721968467471L;

    //法人code
    @ApiModelProperty(name = "legalPersonCode",value = "法人code")
    private String legalPersonCode;
    //法人名称
    @ApiModelProperty(name = "legalPersonName",value = "法人名称")
    private String legalPersonName;
    //借用订单编号
    @ApiModelProperty(name = "orderNo",value = "借用订单编号")
    private String orderNo;
    //订单类型
    @ApiModelProperty(name = "orderType",value = "订单类型")
    private String orderType;
    //订单状态 10已保存 20已提交 30已审批 50已否决
    @ApiModelProperty(name = "orderState",value = "订单状态 10已保存 20已提交 30已审批 50已否决")
    private Integer orderState;
    //是否运输0是 1否
    @ApiModelProperty(name = "isTransport",value = "是否运输1是 0否")
    private Integer isTransport;
    //组织编码
    @ApiModelProperty(name = "organizationCode",value = "组织编码")
    private String organizationCode;
    @ApiModelProperty(name = "organizationCode",value = "子站集合")
    private List<String> organizationCodes;
    //如服务站名称
    @ApiModelProperty(name = "organizationName",value = "组织名称")
    private String organizationName;
    @ApiModelProperty(name = "beginCreatedTime",value = "制单日期开始")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date beginCreatedTime;
    @ApiModelProperty(name = "endCreatedTime",value = "制单日期结束")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date endCreatedTime;
    @ApiModelProperty(name = "isSpecialOrder",value = "是否时特殊订单 1是 0 否")
    private String isSpecialOrder;

    private List<String> legalPersonCodes;
    @ApiModelProperty(name = "chargeLine",value = "运作产线")
    private Long chargeLine;
    
    @ApiModelProperty(name = "chargeLineName",value = "运作产线名字")
    private String chargeLineName;

}

业务逻辑层调用分页查询代码:

Page<BorrowOrderEsVo> borrowOrderEsVos = borrowOrderEsRepository.queryPage(queryBorrowOrderRequestVo);
        List<BorrowOrderEsVo> content = borrowOrderEsVos.getContent();//es里分页查询出来的对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值