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;
@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;
}
}
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;
private String toUserId;
private String content;
private Integer type;
private Integer productId;
private String imageUri;
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;
}
}