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 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 pager = this.mongoService.queryPageList(mongoQuery, ChatRecord.class, String.valueOf(me), pageSearch, timeDescSort); List chatVoList = null; if(pager.getTotalRows() > 0){ List 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; }