| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- package com.nb.im.service;
- import cn.hutool.core.util.StrUtil;
- import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
- import com.baomidou.mybatisplus.core.toolkit.IdWorker;
- import com.nb.app.msg.enums.MsgEnum;
- import com.nb.auth.bean.LoginUser;
- import com.nb.auth.utils.SecurityUtil;
- import com.nb.common.crud.BaseService;
- 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.mapper.ImRoomMapper;
- import com.nb.im.room.ImRoomOperator;
- import com.nb.im.room.ImRoomOperatorManager;
- import com.nb.im.service.dto.ImRoomDto;
- import com.nb.im.utils.ImUtils;
- import com.nb.im.ws.PubMsgInfo;
- import com.nb.web.api.feign.IPatientClient;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.annotation.Lazy;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.Map;
- /**
- * @author lifang
- * @version 1.0.0
- * @ClassName LocalImRoomService.java
- * @Description TODO
- * @createTime 2022年08月16日 09:30:00
- */
- @Service
- public class LocalImRoomService extends BaseService<ImRoomMapper, ImRoomEntity,String> {
- @Autowired
- @Lazy
- private LocalImRoomUserService chatRoomUserService;
- @Autowired
- @Lazy
- private IPatientClient patientClient;
- @Autowired
- @Lazy
- private ImUtils imUtils;
- @Autowired
- @Lazy
- private ImRoomOperatorManager roomOperatorManager;
- @Override
- public void validateBeforeSave(ImRoomEntity entity) {
- if(entity.getManageType()==null&& StrUtil.isNotEmpty(entity.getPatientId())){
- entity.setManageType(patientClient.getManageType(entity.getPatientId()));
- }
- }
- @Override
- public void validateBeforeUpdate(ImRoomEntity entity) {
- }
- @Override
- public void validateBeforeDelete(String id) {
- }
- /**
- * 描述: 创建聊天室
- * @author lifang
- * @date 2022/8/16 16:46
- * @param source
- * @return void
- */
- @Transactional(rollbackFor = Exception.class)
- public ImRoomEntity createChatRoom(ImRoomDto source) {
- ImRoomEntity result = new ImRoomEntity();
- result.setAssistId(source.getAssistId());
- result.setPatientId(source.getPatientId());
- result.setPatientAge(source.getPatientAge());
- result.setPatientCode(source.getPatientCode());
- result.setPatientName(source.getPatientName());
- result.setPatientSex(source.getPatientSex());
- result.setDoctorId(source.getDoctorId());
- result.setSponsorType(source.getSponsorType());
- result.setTotalCount(0);
- //等待医生确认
- result.setStatus(source.getStatus());
- this.save(result);
- chatRoomUserService.createRoomUser(result.getId(),source.getAssistId(),SponsorEnum.assist);
- chatRoomUserService.createRoomUser(result.getId(),source.getDoctorId(),SponsorEnum.doctor);
- return result;
- }
- /**
- * 描述: 与看护人成功建立联系
- * @author lifang
- * @date 2022/8/16 16:48
- * @param chatRoomId
- * @param doctorId
- * @return void
- */
- @Transactional(rollbackFor = Exception.class)
- public void successChatRoom(String chatRoomId,String doctorId) {
- this.update(new UpdateWrapper<ImRoomEntity>()
- .lambda()
- .eq(ImRoomEntity::getId,chatRoomId)
- .set(ImRoomEntity::getSuccessTime,new Date())
- .set(ImRoomEntity::getStatus,ImStatusEnum.SUCCESS)
- );
- }
- /**
- * 描述: 找到当前聊天室最大的信息序号
- * @author lifang
- * @date 2022/8/18 19:47
- * @param roomId
- * @return long
- */
- public long getMasSort(String roomId) {
- Long result = this.baseMapper.maxSort(roomId);
- return result==null?0L:result;
- }
- public Boolean finished(String roomId) {
- boolean result = this.update(new UpdateWrapper<ImRoomEntity>()
- .lambda()
- .eq(ImRoomEntity::getId, roomId)
- .set(ImRoomEntity::getStatus, ImStatusEnum.DOCTOR_LIFT));
- if(result){
- ImRoomOperator roomOperator = roomOperatorManager.getRoomOperator(roomId);
- imUtils.send(roomId,
- PubMsgInfo.builder()
- .key(IdWorker.getIdStr())
- .roomId(roomId)
- .payload("医生已关闭聊天")
- .senderType(SponsorEnum.doctor)
- .senderId(roomOperator.getDoctorId())
- .msgType(ImMsgType.txt)
- .operationType(MsgEnum.FINISHED)
- .build());
- roomOperator.close();
- }
- return result;
- }
- }
|