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.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 = 445L; Page page = new Page<>(msgListDto.getPageNum(), msgListDto.getPageSize()); OtcMsgUserListEntity otcMsgUserListEntity = new OtcMsgUserListEntity(); otcMsgUserListEntity.setMemberId(memberId); IPage msgList = otcMsgUserListDao.getMsgList(otcMsgUserListEntity, page); List records = msgList.getRecords(); if(CollUtil.isNotEmpty(records)){ for(MsgListVo msgListVo : records){ long targetId = msgListVo.getTargetId(); if(memberId == targetId){ MemberEntity memberEntity = memberDao.selectById(msgListVo.getMemberId()); msgListVo.setNickname(memberEntity.getName()); }else{ MemberEntity memberEntity = memberDao.selectById(targetId); msgListVo.setNickname(memberEntity.getName()); } } } 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); List records = chatBoxVos.getRecords(); if(CollUtil.isNotEmpty(records)){ for(ChatBoxVo chatBoxVo : records){ long memberIds = chatBoxVo.getMemberId(); if(memberIds == member.getId()){ chatBoxVo.setIsSelf(1); }else{ chatBoxVo.setIsSelf(2); } } } return Result.ok(chatBoxVos); } @Override @Transactional public Result sendMsg(SendMsgDto sendMsgDto) { MemberEntity member = LoginUserUtils.getAppLoginUser(); Long memberId = member.getId(); // Long memberId = 445L; 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("请输入发送消息"); } /** * 是否有记录 * 有就更新,没有就新增 * 在消息列表中增加一条记录 * 在历史记录中增加一条记录 * 增加一个提醒的 */ // QueryWrapper objectQueryWrapper = new QueryWrapper<>(); // objectQueryWrapper.eq("member_id",memberId); // objectQueryWrapper.eq("target_id",targetId); // OtcMsgUserListEntity otcMsgUserListEntity = otcMsgUserListDao.selectById(objectQueryWrapper); List otcMsgUserListEntitys = otcMsgUserListDao.selectListByMemberIdAndTargetId(memberId,targetId); if(CollUtil.isEmpty(otcMsgUserListEntitys)){ OtcMsgUserListEntity otcMsgUserListEntity = new OtcMsgUserListEntity(); otcMsgUserListEntity.setMemberId(memberId); otcMsgUserListEntity.setTargetId(targetId); otcMsgUserListEntity.setIsRead(OtcMsgUserListEntity.ISREAD_ONE); otcMsgUserListEntity.setLastMsgTime(DateUtil.date()); otcMsgUserListDao.insert(otcMsgUserListEntity); }else{ OtcMsgUserListEntity otcMsgUserListEntity = otcMsgUserListEntitys.get(0); otcMsgUserListEntity.setMemberId(memberId); otcMsgUserListEntity.setTargetId(targetId); otcMsgUserListEntity.setIsRead(OtcMsgUserListEntity.ISREAD_ONE); otcMsgUserListEntity.setLastMsgTime(DateUtil.date()); otcMsgUserListDao.updateById(otcMsgUserListEntity); } //历史消息中增加新纪录 OtcMsgHistoryEntity otcMsgHistoryEntity = new OtcMsgHistoryEntity(); otcMsgHistoryEntity.setMemberId(memberId); otcMsgHistoryEntity.setTargetId(targetId); otcMsgHistoryEntity.setMsg(msg); otcMsgHistoryEntity.setMsgType(msgType); otcMsgHistoryDao.insert(otcMsgHistoryEntity); //增加一个提醒的 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); List records = chatBoxVos.getRecords(); if(CollUtil.isNotEmpty(records)){ for(ChatBoxVo chatBoxVo : records){ long memberIds = chatBoxVo.getMemberId(); if(memberIds == memberId){ chatBoxVo.setIsSelf(1); }else{ chatBoxVo.setIsSelf(2); } } } } 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); } }