KKSU
2024-04-29 0d30c93d000413c6eb34f489ef17688ad4175201
src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcMsgServiceImpl.java
@@ -4,6 +4,7 @@
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;
@@ -15,19 +16,20 @@
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.dto.ChatBoxDto;
import com.xcong.excoin.modules.otc.dto.MsgListDto;
import com.xcong.excoin.modules.otc.dto.SendMsgDto;
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
@@ -36,6 +38,7 @@
    private final OtcMsgUserListDao otcMsgUserListDao;
    private final OtcMsgHistoryDao otcMsgHistoryDao;
    private final OtcOrderDao otcOrderDao;
    private final MemberSettingDao memberSettingDao;
    private final MemberDao memberDao;
@@ -45,23 +48,45 @@
    public IPage<MsgListVo> getMsgList(MsgListDto msgListDto) {
        MemberEntity member = LoginUserUtils.getAppLoginUser();
        Long memberId = member.getId();
//        Long memberId = 445L;
//        Long memberId = 444L;
//        MemberEntity member = memberDao.selectById(memberId);
        Page<MsgListVo> page = new Page<>(msgListDto.getPageNum(), msgListDto.getPageSize());
        OtcMsgUserListEntity otcMsgUserListEntity = new OtcMsgUserListEntity();
        otcMsgUserListEntity.setMemberId(memberId);
        otcMsgUserListEntity.setNickname(msgListDto.getNickname());
        IPage<MsgListVo> msgList = otcMsgUserListDao.getMsgList(otcMsgUserListEntity, page);
        List<MsgListVo> records = msgList.getRecords();
        //更新最外层的消息提醒
        boolean flag = true;
        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());
//                MemberEntity memberEntity = memberDao.selectById(targetId);
//                msgListVo.setNickname(memberEntity.getName());
                ChatOrderVo chatOrderVo = new ChatOrderVo();
                List<ChatOrderVo> 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;
@@ -92,17 +117,6 @@
        otcMsgHistoryEntity.setMemberId(memberId);
        otcMsgHistoryEntity.setTargetId(targetId);
        IPage<ChatBoxVo> chatBoxVos= otcMsgHistoryDao.getChatBoxMsgList(page,otcMsgHistoryEntity);
        List<ChatBoxVo> 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);
    }
@@ -111,7 +125,7 @@
    public Result sendMsg(SendMsgDto sendMsgDto) {
        MemberEntity member = LoginUserUtils.getAppLoginUser();
        Long memberId = member.getId();
//        Long memberId = 445L;
//        Long memberId = 449L;
        long targetId = sendMsgDto.getTargetId();
        if(ObjectUtil.isEmpty(targetId)){
            return Result.fail("对话用户不存在");
@@ -128,41 +142,58 @@
        if(ObjectUtil.isEmpty(msgType)){
            return Result.fail("请输入发送消息");
        }
        /**
         * 是否有记录
         *  有就更新,没有就新增
         * 在消息列表中增加一条记录
         * 在历史记录中增加一条记录
         * 增加一个提醒的
         */
//        QueryWrapper<OtcMsgHistoryEntity> objectQueryWrapper = new QueryWrapper<>();
//        objectQueryWrapper.eq("member_id",memberId);
//        objectQueryWrapper.eq("target_id",targetId);
//        OtcMsgUserListEntity otcMsgUserListEntity = otcMsgUserListDao.selectById(objectQueryWrapper);
        List<OtcMsgUserListEntity> otcMsgUserListEntitys = otcMsgUserListDao.selectListByMemberIdAndTargetId(memberId,targetId);
        if(CollUtil.isEmpty(otcMsgUserListEntitys)){
        //发送方
        List<OtcMsgUserListEntity> 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<OtcMsgUserListEntity> 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 = otcMsgUserListEntitys.get(0);
            otcMsgUserListEntity.setMemberId(memberId);
            otcMsgUserListEntity.setTargetId(targetId);
            OtcMsgUserListEntity otcMsgUserListEntity = otcMsgUserListEntityTo.get(0);
            otcMsgUserListEntity.setMemberId(targetId);
            otcMsgUserListEntity.setTargetId(memberId);
            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);
        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);
@@ -171,5 +202,51 @@
        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<ChatBoxVo> chatBoxVos= new Page<>();
        List<OtcMsgUserListEntity> otcMsgUserListEntitys = otcMsgUserListDao.selectListByMemberIdAndTargetId(memberId,targetId);
        if(CollUtil.isNotEmpty(otcMsgUserListEntitys)){
            Page<ChatBoxVo> 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<ChatOrderVo> chatOrderVoList = new ArrayList<>();
        List<ChatOrderVo> 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);
    }
}