|
|
@@ -1,20 +1,31 @@
|
|
|
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
|
|
|
@@ -25,6 +36,13 @@ import org.springframework.stereotype.Service;
|
|
|
@Service
|
|
|
public class LocalImMsgService extends BaseService<ImRoomMsgMapper, ImMsgEntity,String> {
|
|
|
|
|
|
+ @Autowired
|
|
|
+ @Lazy
|
|
|
+ private LocalImRoomService imRoomService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ @Lazy
|
|
|
+ private ImRoomOperatorManager roomOperatorManager;
|
|
|
|
|
|
@Override
|
|
|
public void validateBeforeSave(ImMsgEntity entity) {
|
|
|
@@ -46,4 +64,27 @@ public class LocalImMsgService extends BaseService<ImRoomMsgMapper, ImMsgEntity,
|
|
|
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<ImRoomEntity> rooms = imRoomService.list(new QueryWrapper<ImRoomEntity>()
|
|
|
+ .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();
|
|
|
+ }
|
|
|
}
|