mongo在项目中的具体应用

package com.xxx.customerserviceadmin.dao;

import com.xxx.common.base.constant.CommonConstant;
import com.xxx.common.base.entity.ChatMessage;
import com.xxx.common.mongo.MongoDao;
import org.apache.commons.lang.StringUtils;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 保存聊天记录,查询聊天记录工具类
 * @Description:
 * @Date: Created in 11:32 2019/10/11
 */
@Repository
public class ChatMessageDao extends MongoDao{


    public void save(String productSign, ChatMessage chatMessage){
        this.mongoTemplate.insert(chatMessage, CommonConstant.chatMessagePre + productSign);
    }

    public ChatMessage getLastMessage(String productSign,String msgNum){
        Query query = new Query(Criteria.where("msgNum").is(msgNum));
        query.with(new Sort(Sort.Direction.DESC,"timestamp"));
        ChatMessage chatMessage = mongoTemplate.findOne(query, ChatMessage.class, CommonConstant.chatMessagePre + productSign);
        return chatMessage;
    }

    public List<ChatMessage> getUserMessage(String productSign, String msgNum, String timestamp,Integer pageSize){
        Query query = new Query();
        Criteria criteria = new Criteria();
        if(StringUtils.isNotBlank(timestamp)){
            query.addCriteria(criteria.orOperator(Criteria.where("msgNum").is(msgNum).and("timestamp").lt(timestamp),
                    Criteria.where("msgNum").is(msgNum).and("timestamp").lt(timestamp)));
        }else{
            query.addCriteria(criteria.orOperator(Criteria.where("msgNum").is(msgNum),
                    Criteria.where("msgNum").is(msgNum)));
        }
        query.with(new Sort(Sort.Direction.DESC,"timestamp"));
        query.skip(0);
        query.limit(pageSize);
        List<ChatMessage> chatMessages = mongoTemplate.find(query, ChatMessage.class, CommonConstant.chatMessagePre + productSign);
        return chatMessages;
    }
}
/**
 * 抽象类,对mongo的封装,用于其他类继承
 * @Description:
 * @Date: Created in 11:32 2019/10/11
 */
package com.xxx.common.mongo;

import com.mongodb.WriteResult;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Set;
import javax.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;

public abstract class MongoDao<T> {
    private static Logger logger = LoggerFactory.getLogger(MongoDao.class);
    @Resource
    protected MongoTemplate mongoTemplate;

    public MongoDao() {
    }

    protected void setMongoTemplate(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }

    public T save(T entity) {
        this.mongoTemplate.insert(entity);
        return entity;
    }

    public T findById(String id) {
        return this.mongoTemplate.findById(id, this.getEntityClass());
    }

    public T findById(String id, String collectionName) {
        return this.mongoTemplate.findById(id, this.getEntityClass(), collectionName);
    }

    public List<T> findAll() {
        return this.mongoTemplate.findAll(this.getEntityClass());
    }

    public List<T> findAll(String collectionName) {
        return this.mongoTemplate.findAll(this.getEntityClass(), collectionName);
    }

    public List<T> find(Query query) {
        return this.mongoTemplate.find(query, this.getEntityClass());
    }

    public T findOne(Query query) {
        return this.mongoTemplate.findOne(query, this.getEntityClass());
    }

    public long count(Query query) {
        return this.mongoTemplate.count(query, this.getEntityClass());
    }

    public WriteResult update(Query query, Update update) {
        return update == null ? null : this.mongoTemplate.updateMulti(query, update, this.getEntityClass());
    }

    public T updateOne(Query query, Update update) {
        return update == null ? null : this.mongoTemplate.findAndModify(query, update, this.getEntityClass());
    }

    public WriteResult update(T entity) {
        Field[] fields = this.getEntityClass().getDeclaredFields();
        if (fields != null && fields.length > 0) {
            Field idField = null;
            Field[] var4 = fields;
            int var5 = fields.length;

            for(int var6 = 0; var6 < var5; ++var6) {
                Field field = var4[var6];
                if (field.getName() != null && "id".equals(field.getName().toLowerCase())) {
                    idField = field;
                    break;
                }
            }

            if (idField == null) {
                return null;
            } else {
                idField.setAccessible(true);
                String id = null;

                try {
                    id = (String)idField.get(entity);
                } catch (IllegalArgumentException var8) {
                    logger.error("错误信息:{}", var8);
                } catch (IllegalAccessException var9) {
                    logger.error("错误信息:{}", var9);
                }

                if (id != null && !"".equals(id.trim())) {
                    Query query = new Query(Criteria.where("_id").is(id));
                    Update update = ReflectionUtils.getUpdateObj(entity);
                    return update == null ? null : this.mongoTemplate.updateFirst(query, update, this.getEntityClass());
                } else {
                    return null;
                }
            }
        } else {
            return null;
        }
    }

    public void remove(Query query) {
        this.mongoTemplate.remove(query, this.getEntityClass());
    }

    private Class<T> getEntityClass() {
        return ReflectionUtils.getSuperClassGenricType(this.getClass());
    }

    public Set<String> getCollectionName() {
        return this.mongoTemplate.getCollectionNames();
    }
}

/**
 * 聊天消息实体
 */
public class ChatMessage{
    private String msgNum;//聊天编号
    private String timestamp;// 消息发送时间
    private String fromUseId;//发送人id(融云注册id)
    private String toUserId;//接收人id(融云注册id)
    private String content;//消息内容
    private Integer type;//消息类型
    private Integer productId;//产品线id
    private String imageUri;//图片uri
    private String extra;//拓展字段

    public enum Type{
        txt( "文本消息"),
        img( "图片消息");
        private String showName;
        Type(String showName){
            this.showName = showName;
        }
        public String getShowName() {
            return showName;
        }
    }
     public ChatMessage(){}

    public ChatMessage(String msgNum, String timestamp, String fromUseId, String toUserId,String content, Integer type, Integer productId, String imageUri,String extra) {
        this.msgNum = msgNum;
        this.timestamp = timestamp;
        this.fromUseId = fromUseId;
        this.toUserId = toUserId;
        this.content = content;
        this.type = type;
        this.productId = productId;
        this.imageUri = imageUri;
        this.extra = extra;
    }
//省略了get,set方法......
}    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值