|
|
@@ -1,5 +1,6 @@
|
|
|
package com.nb.im.listener;
|
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.nb.app.msg.bean.MsgBean;
|
|
|
import com.nb.app.msg.enums.MsgEnum;
|
|
|
import com.nb.app.msg.event.SaveMsgEvent;
|
|
|
@@ -7,10 +8,13 @@ import com.nb.im.entity.ImRoomEntity;
|
|
|
import com.nb.im.entity.ImMsgEntity;
|
|
|
import com.nb.im.entity.ImRoomUserEntity;
|
|
|
import com.nb.im.enums.ImStatusEnum;
|
|
|
-import com.nb.im.enums.SponsorEnum;
|
|
|
+import com.nb.im.room.ImRoomOperator;
|
|
|
+import com.nb.im.room.ImRoomOperatorManager;
|
|
|
import com.nb.im.service.LocalImMsgService;
|
|
|
import com.nb.im.service.LocalImRoomService;
|
|
|
import com.nb.im.service.LocalImRoomUserService;
|
|
|
+import com.nb.im.utils.ImUtils;
|
|
|
+import com.nb.im.ws.PubMsgInfo;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import org.springframework.context.annotation.Configuration;
|
|
|
import org.springframework.context.event.EventListener;
|
|
|
@@ -31,6 +35,8 @@ public class ConsultMsgListener {
|
|
|
private final LocalImMsgService chatRoomMsgService;
|
|
|
private final LocalImRoomUserService roomUserService;
|
|
|
private final LocalImRoomService chatRoomService;
|
|
|
+ private final ImRoomOperatorManager operatorManager;
|
|
|
+ private final ImUtils imUtils;
|
|
|
|
|
|
@EventListener
|
|
|
@Async
|
|
|
@@ -44,36 +50,41 @@ public class ConsultMsgListener {
|
|
|
if (!MsgEnum.CONSUL.equals(msgType)&&!MsgEnum.PAIN_CALL.equals(msgType)) {
|
|
|
return;
|
|
|
}
|
|
|
- ImRoomEntity room = createRoom(payload);
|
|
|
- chatRoomService.save(room);
|
|
|
- createRoomUser(payload, room);
|
|
|
+ ImRoomEntity room = ImRoomEntity.createRoom(payload);
|
|
|
+ ImRoomEntity existRoom = chatRoomService.getOne(new QueryWrapper<ImRoomEntity>()
|
|
|
+ .lambda()
|
|
|
+ .eq(ImRoomEntity::getAssistId, room.getAssistId())
|
|
|
+ .eq(ImRoomEntity::getDoctorId, room.getDoctorId())
|
|
|
+ .eq(ImRoomEntity::getStatus, ImStatusEnum.SUCCESS)
|
|
|
+ .last("limit 1"));
|
|
|
+ if(existRoom==null){
|
|
|
+ if (chatRoomService.save(room)) {
|
|
|
+ createRoomUser(payload, room);
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ room=existRoom;
|
|
|
+ }
|
|
|
+
|
|
|
ImMsgEntity roomMsg = ImMsgEntity.createRoomMsg(payload, room);
|
|
|
- chatRoomMsgService.save(roomMsg);
|
|
|
- room.setLastMsgId(roomMsg.getId());
|
|
|
+ ImRoomOperator roomOperator = operatorManager.getRoomOperator(room.getId());
|
|
|
+ roomMsg.setSort(roomOperator.generateSortId());
|
|
|
+ roomMsg.setRoomId(room.getId());
|
|
|
|
|
|
- }
|
|
|
+ imUtils.send(room.getId(), PubMsgInfo.builder()
|
|
|
+ .key(roomMsg.getKey())
|
|
|
+ .payload(roomMsg.getPayload())
|
|
|
+ .senderType(roomMsg.getSponsor())
|
|
|
+ .senderId(roomMsg.getSenderId())
|
|
|
+ .senderNickname(roomMsg.getSenderNickname())
|
|
|
+ .senderAvatar(roomMsg.getSenderAvatar())
|
|
|
+ .msgType(roomMsg.getMsgType())
|
|
|
+ .sort(roomMsg.getSort())
|
|
|
+ .roomId(room.getId())
|
|
|
+ .operationType(msgType)
|
|
|
+ .build()
|
|
|
+ );
|
|
|
+ room.setLastMsgId(roomMsg.getId());
|
|
|
|
|
|
- /**
|
|
|
- * 描述: 由看护人发起的咨询或一件疼痛呼叫
|
|
|
- * @author lifang
|
|
|
- * @date 2022/8/16 10:38
|
|
|
- * @param source
|
|
|
- * @return ImRoomEntity
|
|
|
- */
|
|
|
- private ImRoomEntity createRoom(MsgBean source){
|
|
|
- ImRoomEntity result = new ImRoomEntity();
|
|
|
- result.setAssistId(source.getSenderId());
|
|
|
- result.setPatientId(source.getPatientId());
|
|
|
- result.setPatientCode(source.getPatientCode());
|
|
|
- result.setPatientName(source.getPatientName());
|
|
|
- result.setPatientSex(source.getPatientSex());
|
|
|
- result.setPatientAge(source.getPatientAge());
|
|
|
- result.setDoctorId(source.getReceiverId());
|
|
|
- result.setSponsorType(SponsorEnum.assist);
|
|
|
- result.setTotalCount(1);
|
|
|
- //等待医生确认
|
|
|
- result.setStatus(ImStatusEnum.WAITING);
|
|
|
- return result;
|
|
|
}
|
|
|
|
|
|
|