package com.nb.im.service; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.extra.spring.SpringUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.nb.app.msg.enums.MsgEnum; import com.nb.auth.enums.StpTypeEnum; import com.nb.common.crud.BaseService; import com.nb.core.exception.CustomException; import com.nb.im.controller.vo.UnreadVo; import com.nb.im.entity.ImMsgEntity; import com.nb.im.entity.ImRoomEntity; import com.nb.im.enums.ImMsgType; import com.nb.im.enums.ImStatusEnum; import com.nb.im.enums.SponsorEnum; import com.nb.im.event.ImMsgEvent; import com.nb.im.mapper.ImRoomMsgMapper; import com.nb.im.room.ImRoomOperatorManager; import com.nb.im.utils.ImUtils; import com.nb.im.ws.PubMsgInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import java.util.List; import java.util.concurrent.atomic.AtomicLong; /** * @author lifang * @version 1.0.0 * @ClassName LocalChatRoomMsgService.java * @Description TODO * @createTime 2022年08月16日 09:31:00 */ @Service public class LocalImMsgService extends BaseService { @Autowired @Lazy private LocalImRoomService imRoomService; @Autowired @Lazy private ImRoomOperatorManager roomOperatorManager; @Override public void validateBeforeSave(ImMsgEntity entity) { } @Override public void validateBeforeUpdate(ImMsgEntity entity) { } @Override public void postSave(ImMsgEntity entity) { SpringUtil.publishEvent(new ImMsgEvent(this,entity)); } @Override public void validateBeforeDelete(String id) { } public Long unReadCount(UnreadVo vo){ if (StrUtil.isEmpty(vo.getAssistId()) && StrUtil.isEmpty(vo.getDoctorId())) { throw new CustomException("看护人id和医生id不能同时为空"); } String userId=StrUtil.isEmpty(vo.getAssistId())?vo.getDoctorId():vo.getAssistId(); AtomicLong result=new AtomicLong(0); List rooms = imRoomService.list(new QueryWrapper() .lambda() .select(ImRoomEntity::getId) .eq(StrUtil.isNotEmpty(vo.getAssistId()), ImRoomEntity::getAssistId, vo.getAssistId()) .eq(StrUtil.isNotEmpty(vo.getDoctorId()), ImRoomEntity::getDoctorId, vo.getDoctorId()) .eq(ImRoomEntity::getStatus, ImStatusEnum.SUCCESS) ); if(CollectionUtil.isNotEmpty(rooms)){ rooms.stream() .map(ImRoomEntity::getId).map(roomOperatorManager::getRoomOperator) .forEach(operator->{ result.addAndGet(operator.unReadCount(userId)); }); } return result.get(); } }