package com.xcong.excoin.modules.otc.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.xcong.excoin.common.LoginUserUtils; import com.xcong.excoin.common.response.Result; import com.xcong.excoin.modules.member.dao.MemberDao; import com.xcong.excoin.modules.member.dao.MemberSettingDao; import com.xcong.excoin.modules.member.entity.MemberEntity; import com.xcong.excoin.modules.member.entity.MemberSettingEntity; import com.xcong.excoin.modules.otc.dao.OtcMsgHistoryDao; import com.xcong.excoin.modules.otc.dao.OtcMsgUserListDao; import com.xcong.excoin.modules.otc.dao.OtcOrderDao; import com.xcong.excoin.modules.otc.dto.*; import com.xcong.excoin.modules.otc.entity.OtcMsgHistoryEntity; import com.xcong.excoin.modules.otc.entity.OtcMsgUserListEntity; import com.xcong.excoin.modules.otc.service.OtcMsgService; import com.xcong.excoin.modules.otc.vo.ChatBoxVo; import com.xcong.excoin.modules.otc.vo.ChatOrderVo; import com.xcong.excoin.modules.otc.vo.MsgListVo; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; @Service @RequiredArgsConstructor public class OtcMsgServiceImpl extends ServiceImpl implements OtcMsgService { private final OtcMsgUserListDao otcMsgUserListDao; private final OtcMsgHistoryDao otcMsgHistoryDao; private final OtcOrderDao otcOrderDao; private final MemberSettingDao memberSettingDao; private final MemberDao memberDao; @Override public IPage getMsgList(MsgListDto msgListDto) { MemberEntity member = LoginUserUtils.getAppLoginUser(); Long memberId = member.getId(); // Long memberId = 444L; // MemberEntity member = memberDao.selectById(memberId); Page page = new Page<>(msgListDto.getPageNum(), msgListDto.getPageSize()); OtcMsgUserListEntity otcMsgUserListEntity = new OtcMsgUserListEntity(); otcMsgUserListEntity.setMemberId(memberId); otcMsgUserListEntity.setNickname(msgListDto.getNickname()); IPage msgList = otcMsgUserListDao.getMsgList(otcMsgUserListEntity, page); List records = msgList.getRecords(); //更新最外层的消息提醒 boolean flag = true; if(CollUtil.isNotEmpty(records)){ for(MsgListVo msgListVo : records){ long targetId = msgListVo.getTargetId(); // MemberEntity memberEntity = memberDao.selectById(targetId); // msgListVo.setNickname(memberEntity.getName()); ChatOrderVo chatOrderVo = new ChatOrderVo(); List chatOrderVos = otcOrderDao.selectOneByMemberIdAndTargetId(memberId,targetId); if(CollUtil.isNotEmpty(chatOrderVos)){ for(ChatOrderVo chatOrderVodone : chatOrderVos){ Long memberIdDone = chatOrderVodone.getMemberId(); if(memberId.equals(memberIdDone) || memberId == memberIdDone){ chatOrderVo = chatOrderVodone; } } } msgListVo.setChatOrderVo(chatOrderVo); Integer isRead = msgListVo.getIsRead(); if(OtcMsgUserListEntity.ISREAD_ONE == isRead){ flag = false; } } if(flag){ MemberSettingEntity memberSettingEntity = memberSettingDao.selectMemberSettingByMemberId(member.getId()); memberSettingEntity.setMessageReminder(0); memberSettingDao.updateById(memberSettingEntity); } } return msgList; } @Override @Transactional public Result getChatBox(ChatBoxDto chatBoxDto) { MemberEntity member = LoginUserUtils.getAppLoginUser(); // MemberEntity member = memberDao.selectById(443L); //对话是否存在 long id = chatBoxDto.getId(); if(ObjectUtil.isEmpty(id)){ return Result.fail("请下拉刷新"); } OtcMsgUserListEntity otcMsgUserListEntity = otcMsgUserListDao.selectById(id); if(ObjectUtil.isEmpty(otcMsgUserListEntity)){ return Result.fail("请下拉刷新"); } //更新为已读 otcMsgUserListEntity.setIsRead(OtcMsgUserListEntity.ISREAD_TWO); otcMsgUserListDao.updateById(otcMsgUserListEntity); long memberId = otcMsgUserListEntity.getMemberId(); long targetId = otcMsgUserListEntity.getTargetId(); Page page = new Page<>(chatBoxDto.getPageNum(), chatBoxDto.getPageSize()); OtcMsgHistoryEntity otcMsgHistoryEntity = new OtcMsgHistoryEntity(); otcMsgHistoryEntity.setMemberId(memberId); otcMsgHistoryEntity.setTargetId(targetId); IPage chatBoxVos= otcMsgHistoryDao.getChatBoxMsgList(page,otcMsgHistoryEntity); return Result.ok(chatBoxVos); } @Override @Transactional public Result sendMsg(SendMsgDto sendMsgDto) { MemberEntity member = LoginUserUtils.getAppLoginUser(); Long memberId = member.getId(); // Long memberId = 449L; long targetId = sendMsgDto.getTargetId(); if(ObjectUtil.isEmpty(targetId)){ return Result.fail("对话用户不存在"); } MemberEntity memberEntity = memberDao.selectById(targetId); if(ObjectUtil.isEmpty(memberEntity)){ return Result.fail("对话用户不存在"); } String msg = sendMsgDto.getMsg(); if(StrUtil.isEmpty(msg)){ return Result.fail("请输入发送消息"); } Integer msgType = sendMsgDto.getMsgType(); if(ObjectUtil.isEmpty(msgType)){ return Result.fail("请输入发送消息"); } //发送方 List otcMsgUserListEntityFrom = otcMsgUserListDao.selectListByMemberIdAndTargetId(memberId,targetId); if(CollUtil.isEmpty(otcMsgUserListEntityFrom)){ OtcMsgUserListEntity otcMsgUserListEntity = new OtcMsgUserListEntity(); otcMsgUserListEntity.setMemberId(memberId); otcMsgUserListEntity.setTargetId(targetId); otcMsgUserListEntity.setIsRead(OtcMsgUserListEntity.ISREAD_TWO); otcMsgUserListEntity.setLastMsgTime(DateUtil.date()); otcMsgUserListDao.insert(otcMsgUserListEntity); }else{ OtcMsgUserListEntity otcMsgUserListEntity = otcMsgUserListEntityFrom.get(0); otcMsgUserListEntity.setMemberId(memberId); otcMsgUserListEntity.setTargetId(targetId); otcMsgUserListEntity.setIsRead(OtcMsgUserListEntity.ISREAD_TWO); otcMsgUserListEntity.setLastMsgTime(DateUtil.date()); otcMsgUserListDao.updateById(otcMsgUserListEntity); } //历史消息中增加新纪录 OtcMsgHistoryEntity otcMsgHistoryEntityFrom = new OtcMsgHistoryEntity(); otcMsgHistoryEntityFrom.setMemberId(memberId); otcMsgHistoryEntityFrom.setFromMemberId(memberId); otcMsgHistoryEntityFrom.setTargetId(targetId); otcMsgHistoryEntityFrom.setMsg(msg); otcMsgHistoryEntityFrom.setMsgType(msgType); otcMsgHistoryEntityFrom.setIsSelf(OtcMsgHistoryEntity.ISSELF_ONE); otcMsgHistoryDao.insert(otcMsgHistoryEntityFrom); //接受方 List otcMsgUserListEntityTo = otcMsgUserListDao.selectListByMemberIdAndTargetId(targetId,memberId); if(CollUtil.isEmpty(otcMsgUserListEntityTo)){ OtcMsgUserListEntity otcMsgUserListEntity = new OtcMsgUserListEntity(); otcMsgUserListEntity.setMemberId(targetId); otcMsgUserListEntity.setTargetId(memberId); otcMsgUserListEntity.setIsRead(OtcMsgUserListEntity.ISREAD_ONE); otcMsgUserListEntity.setLastMsgTime(DateUtil.date()); otcMsgUserListDao.insert(otcMsgUserListEntity); }else{ OtcMsgUserListEntity otcMsgUserListEntity = otcMsgUserListEntityTo.get(0); otcMsgUserListEntity.setMemberId(targetId); otcMsgUserListEntity.setTargetId(memberId); otcMsgUserListEntity.setIsRead(OtcMsgUserListEntity.ISREAD_ONE); otcMsgUserListEntity.setLastMsgTime(DateUtil.date()); otcMsgUserListDao.updateById(otcMsgUserListEntity); } //历史消息中增加新纪录 OtcMsgHistoryEntity otcMsgHistoryEntityTo = new OtcMsgHistoryEntity(); otcMsgHistoryEntityTo.setMemberId(targetId); otcMsgHistoryEntityTo.setFromMemberId(memberId); otcMsgHistoryEntityTo.setTargetId(targetId); otcMsgHistoryEntityTo.setMsg(msg); otcMsgHistoryEntityTo.setMsgType(msgType); otcMsgHistoryEntityTo.setIsSelf(OtcMsgHistoryEntity.ISSELF_TWO); otcMsgHistoryDao.insert(otcMsgHistoryEntityTo); //增加一个提醒的 MemberSettingEntity memberSettingEntity = memberSettingDao.selectMemberSettingByMemberId(targetId); memberSettingEntity.setMessageReminder(1); memberSettingDao.updateById(memberSettingEntity); return Result.ok("发送成功"); } @Override public Result getChatBoxConnect(ConnectDto connectDto) { MemberEntity member = LoginUserUtils.getAppLoginUser(); Long memberId = member.getId(); // Long memberId = 443L; long targetId = connectDto.getTargetId(); if(ObjectUtil.isEmpty(targetId)){ return Result.fail("请返回重试"); } IPage chatBoxVos= new Page<>(); List otcMsgUserListEntitys = otcMsgUserListDao.selectListByMemberIdAndTargetId(memberId,targetId); if(CollUtil.isNotEmpty(otcMsgUserListEntitys)){ Page page = new Page<>(connectDto.getPageNum(), connectDto.getPageSize()); OtcMsgHistoryEntity otcMsgHistoryEntity = new OtcMsgHistoryEntity(); otcMsgHistoryEntity.setMemberId(memberId); otcMsgHistoryEntity.setTargetId(targetId); chatBoxVos = otcMsgHistoryDao.getChatBoxMsgList(page,otcMsgHistoryEntity); } return Result.ok(chatBoxVos); } @Override public Result getChatOrder(ChatOrderDto chatOrderDto) { MemberEntity member = LoginUserUtils.getAppLoginUser(); Long memberId = member.getId(); // Long memberId = 443L; long targetId = chatOrderDto.getTargetId(); if(ObjectUtil.isEmpty(targetId)){ return Result.fail("请返回重试"); } ArrayList chatOrderVoList = new ArrayList<>(); List chatOrderVos = otcOrderDao.selectByMemberIdAndTargetId(memberId,targetId); if(CollUtil.isNotEmpty(chatOrderVos)){ for(ChatOrderVo chatOrderVo : chatOrderVos){ Long memberIdDone = chatOrderVo.getMemberId(); if(memberId.equals(memberIdDone) || memberId == memberIdDone){ chatOrderVoList.add(chatOrderVo); } } } return Result.ok(chatOrderVoList); } }