WeConversationArchiveServiceImpl.java 7.7 KB
Newer Older
S
sunxiwang 已提交
1 2
package com.linkwechat.wecom.service.impl;

3
import cn.hutool.core.collection.CollectionUtil;
S
sunxiwang 已提交
4
import com.alibaba.fastjson.JSONObject;
5
import com.github.pagehelper.PageInfo;
S
sunxiwang 已提交
6
import com.linkwechat.common.constant.WeConstans;
7
import com.linkwechat.common.core.domain.ConversationArchiveQuery;
S
sunxiwang 已提交
8
import com.linkwechat.common.core.elasticsearch.ElasticSearch;
9 10
import com.linkwechat.common.core.page.PageDomain;
import com.linkwechat.common.core.page.TableSupport;
11 12
import com.linkwechat.common.utils.DateUtils;
import com.linkwechat.common.utils.StringUtils;
S
sunxiwang 已提交
13 14 15 16 17 18 19 20 21
import com.linkwechat.wecom.service.IWeConversationArchiveService;
import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

22
import java.util.Date;
S
sunxiwang 已提交
23 24
import java.util.List;

S
sunxiwang 已提交
25 26 27 28 29 30 31 32 33 34 35 36 37 38
/**
 * @author sxw
 * @description 会话存档业务实现类
 * @date 2020/12/19 14:00
 **/
@Slf4j
@Service
public class WeConversationArchiveServiceImpl implements IWeConversationArchiveService {
    @Autowired
    private ElasticSearch elasticSearch;

    /**
     * 根据用户ID 获取对应内部联系人列表
     *
39
     * @param query 入参
S
sunxiwang 已提交
40 41 42
     * @return
     */
    @Override
43
    public PageInfo<JSONObject> getChatContactList(ConversationArchiveQuery query) {
44 45 46
        PageDomain pageDomain = TableSupport.buildPageRequest();
        Integer pageNum = pageDomain.getPageNum() == null ? 1 : pageDomain.getPageNum();
        Integer pageSize = pageDomain.getPageSize() == null ? 10 : pageDomain.getPageSize();
S
sunxiwang 已提交
47
        SearchSourceBuilder builder = new SearchSourceBuilder();
48 49
        int from = (pageNum - 1) * pageSize;
        builder.size(pageSize);
50
        builder.from(from);
51
        builder.sort("msgtime", SortOrder.DESC);
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
        BoolQueryBuilder fromBuilder = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("roomid", ""))
                .must(QueryBuilders.matchQuery("from", query.getFromId()))
                .must(QueryBuilders.matchQuery("tolist.keyword", query.getReceiveId()));

        BoolQueryBuilder toLsitBuilder = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("roomid", ""))
                .must(QueryBuilders.matchQuery("from", query.getReceiveId()))
                .must(QueryBuilders.matchQuery("tolist.keyword", query.getFromId()));
        //查询聊天类型
        if (StringUtils.isNotEmpty(query.getMsgType())) {
            fromBuilder.must(QueryBuilders.termQuery("msgtype", query.getMsgType()));
            toLsitBuilder.must(QueryBuilders.termQuery("msgtype", query.getMsgType()));
        }
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery()
                .should(fromBuilder)
                .should(toLsitBuilder)
                .minimumShouldMatch(1);
        //时间范围查询
        if (StringUtils.isNotEmpty(query.getBeginTime()) && StringUtils.isNotEmpty(query.getEndTime())) {
            Date beginTime = DateUtils.dateTime(query.getBeginTime(), DateUtils.YYYY_MM_DD);
            Date endTime = DateUtils.dateTime(query.getEndTime(), DateUtils.YYYY_MM_DD);
            boolQueryBuilder.filter(QueryBuilders.rangeQuery("msgtime").gte(beginTime).lte(endTime));
        }
        builder.query(boolQueryBuilder);
75
        return elasticSearch.searchPage(WeConstans.WECOM_FINANCE_INDEX, builder, pageNum, pageSize, JSONObject.class);
76 77 78 79
    }

    @Override
    public PageInfo<JSONObject> getChatRoomContactList(ConversationArchiveQuery query) {
80 81 82
        PageDomain pageDomain = TableSupport.buildPageRequest();
        Integer pageNum = pageDomain.getPageNum() == null ? 1 : pageDomain.getPageNum();
        Integer pageSize = pageDomain.getPageSize() == null ? 10 : pageDomain.getPageSize();
83
        SearchSourceBuilder builder = new SearchSourceBuilder();
84 85
        int from = (pageNum - 1) * pageSize;
        builder.size(pageSize);
86
        builder.from(from);
87
        builder.sort("msgtime", SortOrder.DESC);
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112

        BoolQueryBuilder fromBuilder = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("roomid", query.getRoomId()))
                .must(QueryBuilders.matchQuery("from", query.getFromId()));

        BoolQueryBuilder roomidBuilder = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("roomid", query.getRoomId()))
                .must(QueryBuilders.matchQuery("tolist.keyword", query.getFromId()));

        //查询聊天类型
        if (StringUtils.isNotEmpty(query.getMsgType())) {
            fromBuilder.must(QueryBuilders.termQuery("msgtype", query.getMsgType()));
            roomidBuilder.must(QueryBuilders.termQuery("msgtype", query.getMsgType()));
        }

        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery()
                .should(fromBuilder)
                .should(roomidBuilder);

        //时间范围查询
        if (StringUtils.isNotEmpty(query.getBeginTime()) && StringUtils.isNotEmpty(query.getEndTime())) {
            Date beginTime = DateUtils.dateTime(query.getBeginTime(), DateUtils.YYYY_MM_DD);
            Date endTime = DateUtils.dateTime(query.getEndTime(), DateUtils.YYYY_MM_DD);
            boolQueryBuilder.filter(QueryBuilders.rangeQuery("msgtime").gte(beginTime).lte(endTime));
        }

        builder.query(boolQueryBuilder);
113
        return elasticSearch.searchPage(WeConstans.WECOM_FINANCE_INDEX, builder, pageNum, pageSize, JSONObject.class);
114 115 116 117 118 119
    }


    @Override
    public JSONObject getFinalChatContactInfo(String fromId, String receiveId) {
        SearchSourceBuilder builder = new SearchSourceBuilder();
120
        builder.sort("msgtime", SortOrder.DESC);
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
        builder.size(1);
        BoolQueryBuilder fromBuilder = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("roomid", ""))
                .must(QueryBuilders.matchQuery("from", fromId))
                .must(QueryBuilders.matchQuery("tolist.keyword", receiveId));

        BoolQueryBuilder toLsitBuilder = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("roomid", ""))
                .must(QueryBuilders.matchQuery("from", receiveId))
                .must(QueryBuilders.matchQuery("tolist.keyword", fromId));
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery()
                .should(fromBuilder)
                .should(toLsitBuilder)
                .minimumShouldMatch(1);
        builder.query(boolQueryBuilder);
        List<JSONObject> resultList = elasticSearch.search(WeConstans.WECOM_FINANCE_INDEX, builder, JSONObject.class);
        if (CollectionUtil.isNotEmpty(resultList)) {
            return resultList.get(0);
        } else {
            return null;
        }
    }

    @Override
    public JSONObject getFinalChatRoomContactInfo(String fromId, String roomId) {
        SearchSourceBuilder builder = new SearchSourceBuilder();
145
        builder.sort("msgtime", SortOrder.DESC);
146 147 148 149 150 151
        builder.size(1);
        BoolQueryBuilder fromBuilder = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("roomid", roomId))
                .must(QueryBuilders.matchQuery("from", fromId));

        BoolQueryBuilder roomidBuilder = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("roomid", roomId))
                .must(QueryBuilders.matchQuery("tolist.keyword", fromId));
S
sunxiwang 已提交
152
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery()
153 154
                .should(fromBuilder)
                .should(roomidBuilder);
S
sunxiwang 已提交
155
        builder.query(boolQueryBuilder);
156 157 158 159 160 161
        List<JSONObject> resultList = elasticSearch.search(WeConstans.WECOM_FINANCE_INDEX, builder, JSONObject.class);
        if (CollectionUtil.isNotEmpty(resultList)) {
            return resultList.get(0);
        } else {
            return null;
        }
S
sunxiwang 已提交
162 163
    }
}