LocalImRoomService.java 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package com.nb.im.service;
  2. import cn.hutool.core.util.StrUtil;
  3. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  4. import com.baomidou.mybatisplus.core.toolkit.IdWorker;
  5. import com.nb.app.msg.enums.MsgEnum;
  6. import com.nb.auth.bean.LoginUser;
  7. import com.nb.auth.utils.SecurityUtil;
  8. import com.nb.common.crud.BaseService;
  9. import com.nb.im.entity.ImRoomEntity;
  10. import com.nb.im.enums.ImMsgType;
  11. import com.nb.im.enums.ImStatusEnum;
  12. import com.nb.im.enums.SponsorEnum;
  13. import com.nb.im.mapper.ImRoomMapper;
  14. import com.nb.im.room.ImRoomOperator;
  15. import com.nb.im.room.ImRoomOperatorManager;
  16. import com.nb.im.service.dto.ImRoomDto;
  17. import com.nb.im.utils.ImUtils;
  18. import com.nb.im.ws.PubMsgInfo;
  19. import com.nb.web.api.feign.IPatientClient;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.context.annotation.Lazy;
  22. import org.springframework.stereotype.Service;
  23. import org.springframework.transaction.annotation.Transactional;
  24. import java.util.Date;
  25. import java.util.HashMap;
  26. import java.util.Map;
  27. /**
  28. * @author lifang
  29. * @version 1.0.0
  30. * @ClassName LocalImRoomService.java
  31. * @Description TODO
  32. * @createTime 2022年08月16日 09:30:00
  33. */
  34. @Service
  35. public class LocalImRoomService extends BaseService<ImRoomMapper, ImRoomEntity,String> {
  36. @Autowired
  37. @Lazy
  38. private LocalImRoomUserService chatRoomUserService;
  39. @Autowired
  40. @Lazy
  41. private IPatientClient patientClient;
  42. @Autowired
  43. @Lazy
  44. private ImUtils imUtils;
  45. @Autowired
  46. @Lazy
  47. private ImRoomOperatorManager roomOperatorManager;
  48. @Override
  49. public void validateBeforeSave(ImRoomEntity entity) {
  50. if(entity.getManageType()==null&& StrUtil.isNotEmpty(entity.getPatientId())){
  51. entity.setManageType(patientClient.getManageType(entity.getPatientId()));
  52. }
  53. }
  54. @Override
  55. public void validateBeforeUpdate(ImRoomEntity entity) {
  56. }
  57. @Override
  58. public void validateBeforeDelete(String id) {
  59. }
  60. /**
  61. * 描述: 创建聊天室
  62. * @author lifang
  63. * @date 2022/8/16 16:46
  64. * @param source
  65. * @return void
  66. */
  67. @Transactional(rollbackFor = Exception.class)
  68. public ImRoomEntity createChatRoom(ImRoomDto source) {
  69. ImRoomEntity result = new ImRoomEntity();
  70. result.setAssistId(source.getAssistId());
  71. result.setPatientId(source.getPatientId());
  72. result.setPatientAge(source.getPatientAge());
  73. result.setPatientCode(source.getPatientCode());
  74. result.setPatientName(source.getPatientName());
  75. result.setPatientSex(source.getPatientSex());
  76. result.setDoctorId(source.getDoctorId());
  77. result.setSponsorType(source.getSponsorType());
  78. result.setTotalCount(0);
  79. //等待医生确认
  80. result.setStatus(source.getStatus());
  81. this.save(result);
  82. chatRoomUserService.createRoomUser(result.getId(),source.getAssistId(),SponsorEnum.assist);
  83. chatRoomUserService.createRoomUser(result.getId(),source.getDoctorId(),SponsorEnum.doctor);
  84. return result;
  85. }
  86. /**
  87. * 描述: 与看护人成功建立联系
  88. * @author lifang
  89. * @date 2022/8/16 16:48
  90. * @param chatRoomId
  91. * @param doctorId
  92. * @return void
  93. */
  94. @Transactional(rollbackFor = Exception.class)
  95. public void successChatRoom(String chatRoomId,String doctorId) {
  96. this.update(new UpdateWrapper<ImRoomEntity>()
  97. .lambda()
  98. .eq(ImRoomEntity::getId,chatRoomId)
  99. .set(ImRoomEntity::getSuccessTime,new Date())
  100. .set(ImRoomEntity::getStatus,ImStatusEnum.SUCCESS)
  101. );
  102. }
  103. /**
  104. * 描述: 找到当前聊天室最大的信息序号
  105. * @author lifang
  106. * @date 2022/8/18 19:47
  107. * @param roomId
  108. * @return long
  109. */
  110. public long getMasSort(String roomId) {
  111. Long result = this.baseMapper.maxSort(roomId);
  112. return result==null?0L:result;
  113. }
  114. public Boolean finished(String roomId) {
  115. boolean result = this.update(new UpdateWrapper<ImRoomEntity>()
  116. .lambda()
  117. .eq(ImRoomEntity::getId, roomId)
  118. .set(ImRoomEntity::getStatus, ImStatusEnum.DOCTOR_LIFT));
  119. if(result){
  120. ImRoomOperator roomOperator = roomOperatorManager.getRoomOperator(roomId);
  121. imUtils.send(roomId,
  122. PubMsgInfo.builder()
  123. .key(IdWorker.getIdStr())
  124. .roomId(roomId)
  125. .payload("医生已关闭聊天")
  126. .senderType(SponsorEnum.doctor)
  127. .senderId(roomOperator.getDoctorId())
  128. .msgType(ImMsgType.txt)
  129. .operationType(MsgEnum.FINISHED)
  130. .build());
  131. roomOperator.close();
  132. }
  133. return result;
  134. }
  135. }