package com.iplatform.chat.support;
|
|
import com.iplatform.chat.ChatService;
|
import com.iplatform.chat.Constants;
|
import com.iplatform.chat.util.ChatUtils;
|
import com.iplatform.model.vo.ChatVo;
|
import com.walker.db.Sorts;
|
import com.walker.db.page.GenericPager;
|
import com.walker.db.page.ListPageContext;
|
import com.walker.db.page.PageSearch;
|
import com.walker.infrastructure.utils.DateUtils;
|
import com.walker.infrastructure.utils.NumberGenerator;
|
import com.walker.infrastructure.utils.StringUtils;
|
import com.walker.jdbc.mongo.ChatRecord;
|
import com.walker.jdbc.mongo.MongoService;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.data.mongodb.core.query.Criteria;
|
import org.springframework.data.mongodb.core.query.Query;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.regex.Pattern;
|
|
@Deprecated
|
public class MongoChatService implements ChatService {
|
|
protected final transient Logger logger = LoggerFactory.getLogger(this.getClass());
|
|
private Sorts.Sort timeDescSort = Sorts.DESC().setField("_id");
|
|
@Override
|
public void execInsertChat(ChatVo vo) {
|
if(vo == null){
|
return;
|
}
|
if(vo.getMe() <= 0){
|
logger.error("聊天错误,当前用户ID必须设置");
|
return;
|
}
|
if(StringUtils.isEmpty(vo.getMessage())){
|
logger.error("聊天错误,无法发送空消息");
|
return;
|
}
|
|
ChatRecord record = this.acquireChatRecord(vo);
|
if(!vo.isCustomerServiceSend()){
|
// ================= 我发的消息 =================
|
// 写入我的表中
|
record.setUserId(vo.getCustomerService());
|
record.setType(ChatVo.TYPE_SEND);
|
this.mongoService.insert(record, String.valueOf(vo.getMe()));
|
// 写入对方表中
|
if(vo.getCustomerService() != Constants.USER_ID_ROBOT){
|
record.setUserId(vo.getMe());
|
record.setType(ChatVo.TYPE_RECEIVED);
|
this.mongoService.insert(record, String.valueOf(vo.getCustomerService()));
|
}
|
|
} else {
|
// ================= 客服发的消息 =================
|
// 写入我的表中
|
record.setUserId(vo.getCustomerService());
|
record.setType(ChatVo.TYPE_RECEIVED);
|
this.mongoService.insert(record, String.valueOf(vo.getMe()));
|
// 写入对方表中
|
if(vo.getCustomerService() != Constants.USER_ID_ROBOT){
|
record.setUserId(vo.getMe());
|
record.setType(ChatVo.TYPE_SEND);
|
this.mongoService.insert(record, String.valueOf(vo.getCustomerService()));
|
}
|
}
|
/*// 写入我的表中
|
record.setUserId(vo.getCustomerService());
|
record.setType(ChatVo.TYPE_SEND);
|
this.mongoService.insert(record, String.valueOf(vo.getMe()));
|
// 写入对方表中
|
record.setUserId(vo.getMe());
|
record.setType(ChatVo.TYPE_RECEIVED);
|
this.mongoService.insert(record, String.valueOf(vo.getCustomerService()));*/
|
}
|
|
/**
|
* 生成一个聊天记录,不设置对方用户信息,在调用者中处理。
|
* @param vo
|
* @return
|
*/
|
public ChatRecord acquireChatRecord(ChatVo vo){
|
ChatRecord record = new ChatRecord();
|
record.setId(NumberGenerator.getLongSequenceId());
|
record.setCreateDate(DateUtils.getDateTimeNumber());
|
// record.setUserId(vo.getUserId());
|
// record.setType(vo.getType());
|
record.setMsgType(vo.getMsgType());
|
record.setMessage(vo.getMessage());
|
record.setBizId(vo.getBizId());
|
return record;
|
}
|
|
@Override
|
public void execDeleteChat(String id) {
|
throw new UnsupportedOperationException("未写代码");
|
}
|
|
@Override
|
public GenericPager<ChatVo> queryPageChatList(long me
|
, String bizId, long startTime, long endTime, long userId, String keyword, PageSearch pageSearch, boolean meIsCustomerService) {
|
if(me <= 0){
|
throw new IllegalArgumentException("缺少聊天人ID(me)");
|
}
|
// Criteria criteria = new Criteria();
|
Query mongoQuery = new Query();
|
if(StringUtils.isNotEmpty(bizId)){
|
mongoQuery.addCriteria(Criteria.where(Constants.CHAT_FIELD_BIZ_ID).is(bizId));
|
}
|
if(userId > 0){
|
mongoQuery.addCriteria(Criteria.where(Constants.CHAT_FIELD_USER_ID).is(userId));
|
}
|
if(startTime > 0){
|
mongoQuery.addCriteria(Criteria.where(Constants.CHAT_FIELD_CREATE_TIME).gte(startTime));
|
}
|
if(endTime > 0){
|
mongoQuery.addCriteria(Criteria.where(Constants.CHAT_FIELD_CREATE_TIME).lte(endTime));
|
}
|
if(StringUtils.isNotEmpty(keyword)){
|
// 模糊查询名字中带有 三 的数据
|
Pattern pattern = Pattern.compile(Constants.LIKE_PREFIX + keyword + Constants.LIKE_SUFFIX, Pattern.CASE_INSENSITIVE);
|
mongoQuery.addCriteria(Criteria.where(Constants.CHAT_FIELD_MESSAGE).regex(pattern));
|
}
|
|
GenericPager<ChatRecord> pager = this.mongoService.queryPageList(mongoQuery, ChatRecord.class, String.valueOf(me), pageSearch, timeDescSort);
|
List<ChatVo> chatVoList = null;
|
if(pager.getTotalRows() > 0){
|
List<ChatRecord> data = pager.getDatas();
|
chatVoList = new ArrayList<>(data.size());
|
for(ChatRecord record : data){
|
chatVoList.add(ChatUtils.acquireChatVo(record, me, meIsCustomerService));
|
}
|
} else {
|
chatVoList = new ArrayList<>(1);
|
}
|
return ListPageContext.createGenericPager(chatVoList, pager.getPageIndex(), pager.getPageSize(), (int)pager.getTotalRows());
|
}
|
|
public void setMongoService(MongoService mongoService) {
|
this.mongoService = mongoService;
|
}
|
|
private MongoService mongoService;
|
}
|