123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785 |
- using WingInterfaceLibrary.LiveConsultation;
- using WingInterfaceLibrary.Enum;
- using WingInterfaceLibrary.Request.Notification;
- using WingServerCommon.Config;
- using WingInterfaceLibrary.Notifications;
- using WingServerCommon.Interfaces.Cache;
- using WingInterfaceLibrary.Rtc;
- using WingServerCommon.Log;
- using System.Text;
- using WingInterfaceLibrary.DTO.User;
- using WingInterfaceLibrary.LiveConsultation.Consultation;
- namespace WingLiveConsultationService
- {
- /// <summary>
- /// 会诊房间
- /// </summary>
- public partial class LiveConsultationRoom : LiveConsultationRoomDTO
- {
- public static Func<int, string, GenerateRoomUrlResult> OnRtcGenerateRoomUrl;
- public static Func<string, string> OnGetUserSign;
- public LiveConsultationRoom(string roomId, int roomNo, string patientName, DateTime consultationTime, TransactionStatusEnum consultationStatus
- , string applyOrganizationCode, string applyUserCode, string expertOrganizationCode, List<LiveConsultationMember> liveMembers, string expertUserCode, bool isEmergency) : base(roomId)
- {
- RoomId = roomId;
- RoomNo = roomNo;
- PatientName = patientName ?? string.Empty;
- ConsultationTime = consultationTime;
- ConsultationStatus = consultationStatus;
- ApplyOrganizationCode = applyOrganizationCode;
- ApplyUserCode = applyUserCode;
- ExpertOrganizationCode = expertOrganizationCode;
- Members = liveMembers ?? new List<LiveConsultationMember>();
- ExpertUserCode = expertUserCode;
- IsEmergency = isEmergency;
- InteractiveBoardDatas = new List<InteractiveBoardDataDTO>();
- }
- /// <summary>
- /// 修改预约记录状态
- /// </summary>
- /// <param name="status"></param>
- public void ChangeConsultationStatus(TransactionStatusEnum status)
- {
- WriteDebugLogs("ChangeConsultationStatus", null, $"{ConsultationStatus.ToString()}>>{status.ToString()}");
- ConsultationStatus = status;
- }
- /// <summary>
- /// 参与人员同意参加会诊
- /// </summary>
- /// <param name="userCode"></param>
- public void Agree(string userCode)
- {
- var liveMember = Members.FirstOrDefault(x => x.Id == userCode);
- if (liveMember != null)
- {
- liveMember.Status = LiveConsultationMemberStatus.Default;
- }
- else
- {
- liveMember = InitLiveMemberByCode(userCode);
- liveMember.Status = LiveConsultationMemberStatus.Default;
- Members.Add(liveMember);
- }
- WriteDebugLogs("Agree", liveMember);
- }
- /// <summary>
- /// 开始会诊
- /// </summary>
- /// <param name="initiatorCode"></param>
- /// <param name="integerRoomId"></param>
- /// <param name="timeout"></param>
- /// <param name="sdkAppId"></param>
- public void Initiate(string initiatorCode, int integerRoomId, int timeout, int sdkAppId, bool pushMessage = false)
- {
- var initiator = Members.FirstOrDefault(x => x.Id == initiatorCode);
- if (initiator != null)
- {
- initiator.IsInitiator = true;
- initiator.Status = LiveConsultationMemberStatus.Joined;
- }
- else
- {
- initiator = InitLiveMemberByCode(initiatorCode);
- initiator.IsInitiator = true;
- initiator.Status = LiveConsultationMemberStatus.Joined;
- Members.Add(initiator);
- }
- foreach (var liveMember in Members)
- {
- if (liveMember.Id != initiatorCode)
- {
- liveMember.IsInitiator = false;
- liveMember.Status = LiveConsultationMemberStatus.Default;
- }
- liveMember.Mute = false;
- liveMember.VideoOpend = true;
- liveMember.IsControllingParameter = false;
- }
- RoomNo = integerRoomId;
- ConsultationStatus = TransactionStatusEnum.InProgress;
- Status = LiveConsultationRoomStatus.Initiating;
- InteractiveBoardDatas = new List<InteractiveBoardDataDTO>();
- EmergencyAccepted = false;
- RefreshMemberInfosByToken();
- //StartCheckConnectionTimeout(timeout);
- if (pushMessage)
- {
- PushInitiateMessage(sdkAppId);
- }
- WriteDebugLogs("Initiate", initiator);
- }
- /// <summary>
- /// 接受会诊邀请-参与人员
- /// </summary>
- /// <param name="userCode"></param>
- public void Accept(string userCode, bool pushMessage = false)
- {
- var accepter = Members.FirstOrDefault(x => x.Id == userCode);
- if (accepter != null)
- {
- accepter.Status = LiveConsultationMemberStatus.Accepted;
- accepter.Mute = false;
- accepter.IsControllingParameter = false;
- accepter.VideoOpend = true;
- RemoveInteractiveBoardDatasByUserCode(userCode);
- if (Status == LiveConsultationRoomStatus.Connected)
- {
- Status = LiveConsultationRoomStatus.Initiating;
- }
- if (pushMessage)
- {
- PushCancelInviteInMessage(new List<string> { accepter.Id }, true);//取消其他端的呼叫行为
- PushAcceptMessage(accepter);
- }
- }
- WriteDebugLogs("Accept", accepter);
- }
- /// <summary>
- /// 接受会诊邀请-急诊专家
- /// </summary>
- /// <param name="userCode"></param>
- /// <param name="orgCode"></param>
- /// <param name="pushMessage"></param>
- public void EmergencyAccept(string userCode, string orgCode, bool pushMessage = false)
- {
- EmergencyAccepted = true;
- var accepter = Members.FirstOrDefault(x => x.Id == userCode);
- if (accepter == null)
- {
- accepter = InitLiveMemberByCode(userCode);
- accepter.Status = LiveConsultationMemberStatus.Accepted;
- Members.Add(accepter);
- //急诊专家信息
- ExpertUserCode = userCode;
- ExpertOrganizationCode = orgCode;
- }
- accepter.Status = LiveConsultationMemberStatus.Accepted;
- accepter.Mute = false;
- accepter.VideoOpend = true;
- accepter.IsControllingParameter = false;
- if (Status == LiveConsultationRoomStatus.Connected)
- {
- Status = LiveConsultationRoomStatus.Initiating;
- }
- if (pushMessage)
- {
- PushAcceptMessage(accepter);
- }
- WriteDebugLogs("EmergencyAccept", accepter);
- }
- /// <summary>
- /// 拒绝会诊邀请-参与人员
- /// </summary>
- /// <param name="userCode"></param>
- public void Reject(string userCode, bool pushMessage = false)
- {
- var rejecter = Members.FirstOrDefault(x => x.Id == userCode);
- if (rejecter != null)
- {
- rejecter.Status = LiveConsultationMemberStatus.Rejected;
- if (pushMessage)
- {
- PushCancelInviteInMessage(new List<string> { rejecter.Id }, true);//取消其他端的呼叫行为
- PushRejectMessage(rejecter);
- }
- }
- WriteDebugLogs("Reject", rejecter);
- }
- /// <summary>
- /// 取消会诊
- /// </summary>
- public void CancelInitiate(bool pushMessage = false)
- {
- Status = LiveConsultationRoomStatus.Cancelled;
- ConsultationStatus = TransactionStatusEnum.ToStart;
- if (pushMessage)
- {
- PushCancelMessage();
- PushCloseMessage();
- }
- foreach (var liveMember in Members)
- {
- if (liveMember.Status == LiveConsultationMemberStatus.Joined)
- {
- liveMember.Status = LiveConsultationMemberStatus.Left;
- }
- }
- WriteDebugLogs("CancelInitiate", Initiator);
- }
- /// <summary>
- /// 会诊心跳,进入房间
- /// </summary>
- /// <param name="userCode"></param>
- public void HeartRateJoin(string userCode, bool pushMessage = false)
- {
- var joiner = Members.FirstOrDefault(x => x.Id == userCode);
- if (joiner != null && joiner.Status != LiveConsultationMemberStatus.Joined)
- {
- joiner.Status = LiveConsultationMemberStatus.Joined;
- if (pushMessage)
- {
- PushHeartRateJoinMessage(joiner);
- }
- }
- WriteDebugLogs("HeartRateJoin", joiner);
- }
- /// <summary>
- /// 会诊心跳,网络质量不佳
- /// </summary>
- /// <param name="userCode"></param>
- public void NetworkErr(string userCode, bool pushMessage = false)
- {
- var liveMember = Members.FirstOrDefault(x => x.Id == userCode);
- if (liveMember != null && liveMember.Status == LiveConsultationMemberStatus.Joined)
- {
- if (pushMessage)
- {
- PushNetworkErrMessage(liveMember);
- }
- }
- WriteDebugLogs("NetworkErr", liveMember);
- }
- /// <summary>
- /// 会诊心跳,离开房间
- /// </summary>
- /// <param name="userCode"></param>
- public bool HeartRateLeave(string userCode, bool pushMessage = false)
- {
- var leaver = Members.FirstOrDefault(x => x.Id == userCode);
- var needClose = false;
- if (leaver != null && leaver.Status == LiveConsultationMemberStatus.Joined)
- {
- leaver.Status = LiveConsultationMemberStatus.Left;
- if (pushMessage)
- {
- PushHeartRateLeaveMessage(leaver);
- }
- if (MainUserInfos == null || MainUserInfos.All(x => x.Status != LiveConsultationMemberStatus.Joined))
- {
- Close(pushMessage);
- needClose = true;
- }
- }
- WriteDebugLogs("HeartRateLeave", leaver);
- return needClose;
- }
- /// <summary>
- /// 离开房间,含结束会诊
- /// </summary>
- /// <param name="userCode"></param>
- public bool Leave(string userCode, bool pushMessage = false)
- {
- var leaver = Members.FirstOrDefault(x => x.Id == userCode);
- var needClose = false;
- if (leaver != null && leaver.Status == LiveConsultationMemberStatus.Joined)
- {
- leaver.Status = LiveConsultationMemberStatus.Left;
- leaver.Mute = false;
- leaver.IsControllingParameter = false;
- leaver.VideoOpend = true;
- RemoveInteractiveBoardDatasByUserCode(userCode);
- if (pushMessage)
- {
- PushLeaveMessage(leaver);
- }
- if (MainUserInfos == null || MainUserInfos.All(x => x.Status != LiveConsultationMemberStatus.Joined))
- {
- Close(pushMessage);
- needClose = true;
- }
- }
- WriteDebugLogs("Leave", leaver, $"close:{needClose.ToString()}");
- return needClose;
- }
- /// <summary>
- /// 结束会诊
- /// </summary>
- public void Close(bool pushMessage = false)
- {
- Status = LiveConsultationRoomStatus.Closed;
- ConsultationStatus = TransactionStatusEnum.PendingReport;
- if (pushMessage)
- {
- PushCancelMessage();
- PushCloseMessage();
- }
- foreach (var liveMember in Members)
- {
- if (liveMember.Status == LiveConsultationMemberStatus.Joined)
- {
- liveMember.Status = LiveConsultationMemberStatus.Left;
- }
- }
- InteractiveBoardDatas = new List<InteractiveBoardDataDTO>();
- WriteDebugLogs("Close");
- }
- /// <summary>
- /// 开启关闭静音
- /// </summary>
- /// <param name="userCode"></param>
- /// <param name="mute"></param>
- public void ChangeMuteState(string userCode, bool mute, bool pushMessage = false)
- {
- var liveMember = Members.FirstOrDefault(x => x.Id == userCode);
- if (liveMember != null && liveMember.Status == LiveConsultationMemberStatus.Joined)
- {
- liveMember.Mute = mute;
- if (pushMessage)
- {
- PushMuteStateMessage(liveMember);
- }
- }
- WriteDebugLogs("ChangeMuteState", liveMember, $"mute:{mute.ToString()}");
- }
- /// <summary>
- /// 开启关闭视频
- /// </summary>
- /// <param name="userCode"></param>
- /// <param name="isVideoOpen"></param>
- public void ChangeVideoOpenState(string userCode, bool isVideoOpen, bool pushMessage = false)
- {
- var liveMember = Members.FirstOrDefault(x => x.Id == userCode);
- if (liveMember != null && liveMember.Status == LiveConsultationMemberStatus.Joined)
- {
- liveMember.VideoOpend = isVideoOpen;
- if (pushMessage)
- {
- PushVideoOpenStateMessage(liveMember);
- }
- }
- WriteDebugLogs("ChangeVideoOpenState", liveMember, $"isVideoOpen:{isVideoOpen.ToString()}");
- }
- /// <summary>
- /// 更改调参状态
- /// </summary>
- /// <param name="userCode"></param>
- /// <param name="isVideoOpen"></param>
- public void ChangeControllingParameterState(string userCode, bool isControllingParameter)
- {
- var liveMember = Members.FirstOrDefault(x => x.Id == userCode);
- if (liveMember != null && liveMember.Status == LiveConsultationMemberStatus.Joined)
- {
- liveMember.IsControllingParameter = isControllingParameter;
- }
- WriteDebugLogs("ChangeControllingParameterState", liveMember, $"isControllingParameter:{isControllingParameter.ToString()}");
- }
- /// <summary>
- /// 会诊中邀请
- /// </summary>
- /// <param name="userCode"></param>
- /// <param name="clientIds"></param>
- public void InviteIn(string userCode, List<string> clientIds, bool pushMessage = false)
- {
- var liveMember = Members.FirstOrDefault(x => x.Id == userCode);
- if (liveMember != null && liveMember.Status == LiveConsultationMemberStatus.Joined)
- {
- if (pushMessage)
- {
- PushInviteInMessage(liveMember, clientIds);
- }
- }
- WriteDebugLogs("InviteIn", liveMember);
- }
- /// <summary>
- /// 取消会诊中邀请
- /// </summary>
- /// <param name="userCode"></param>
- /// <param name="clientIds"></param>
- public void CancelInviteIn(string userCode, List<string> clientIds, bool pushMessage = false)
- {
- var liveMember = Members.FirstOrDefault(x => x.Id == userCode);
- if (liveMember != null && liveMember.Status == LiveConsultationMemberStatus.Joined)
- {
- var notifyUserCodes = new List<string>();
- foreach (var clientId in clientIds)
- {
- if (Members.Any(x => x.Id == clientId && x.Status == LiveConsultationMemberStatus.Joined))
- {
- continue;
- }
- notifyUserCodes.Add(clientId);
- }
- if (notifyUserCodes.Any())
- {
- if (pushMessage)
- {
- PushCancelInviteInMessage(notifyUserCodes);
- }
- }
- }
- WriteDebugLogs("CancelInviteIn", liveMember);
- }
- /// <summary>
- /// 接受会诊中邀请
- /// </summary>
- /// <param name="userCode"></param>
- public void AcceptIn(string userCode, bool pushMessage = false)
- {
- var liveMember = Members.FirstOrDefault(x => x.Id == userCode);
- if (liveMember != null)
- {
- liveMember.Status = LiveConsultationMemberStatus.Accepted;
- liveMember.Mute = false;
- liveMember.IsControllingParameter = false;
- liveMember.VideoOpend = true;
- }
- else
- {
- liveMember = InitLiveMemberByCode(userCode);
- liveMember.Status = LiveConsultationMemberStatus.Accepted;
- liveMember.Mute = false;
- liveMember.IsControllingParameter = false;
- liveMember.VideoOpend = true;
- Members.Add(liveMember);
- }
- RemoveInteractiveBoardDatasByUserCode(userCode);
- if (pushMessage)
- {
- PushCancelInviteInMessage(new List<string> { liveMember.Id }, true);//取消其他端的呼叫行为
- PushAcceptInMessage(liveMember);
- }
- WriteDebugLogs("AcceptIn", liveMember);
- }
- /// <summary>
- /// 拒绝会诊中邀请
- /// </summary>
- /// <param name="rejecterCode"></param>
- public void RejectIn(string rejecterCode, bool pushMessage = false)
- {
- if (Initiator != null && Initiator.Status == LiveConsultationMemberStatus.Joined)
- {
- var userInfo = CacheMaintenance.Instance.Get<IUserInfoManager>().Get(rejecterCode);
- WriteDebugLogs("RejectIn", Initiator, $"rejecter name:{userInfo.UserName};{userInfo.FullName}");
- if (pushMessage)
- {
- PushCancelInviteInMessage(new List<string> { userInfo.Code }, true);//取消其他端的呼叫行为
- PushRejectInMessage(Initiator, userInfo);
- }
- }
- else
- {
- WriteDebugLogs("RejectIn", Initiator);
- }
- }
- /// <summary>
- /// 发送白板交互数据
- /// </summary>
- /// <param name="userCode"></param>
- /// <param name="boardData"></param>
- /// <param name="isClear"></param>
- public void SendBoardData(string userCode, string boardData, DateTime interactiveTime, bool isClear, bool pushMessage = false)
- {
- var liveMember = Members.FirstOrDefault(x => x.Id == userCode);
- if (liveMember != null && liveMember.Status == LiveConsultationMemberStatus.Joined)
- {
- if (!isClear)
- {
- InteractiveBoardDatas.Add(new InteractiveBoardDataDTO
- {
- InteractiveTime = interactiveTime,
- UserCode = userCode,
- BoardData = boardData,
- });
- }
- else
- {
- RemoveInteractiveBoardDatasByUserCode(userCode);
- }
- if (pushMessage)
- {
- PushBoardDataMessage(liveMember, boardData, isClear);
- }
- }
- WriteDebugLogs("SendBoardData", liveMember);
- }
- /// <summary>
- /// 呼叫急诊专家
- /// </summary>
- /// <param name="doctor"></param>
- /// <param name="timeOut"></param>
- public void CallEmergencyDoctor(UserDTO doctor, int timeOut)
- {
- if (!EmergencyAccepted)
- {
- PushEmergencyMessage(doctor, timeOut);
- }
- }
- /// <summary>
- /// 急诊呼叫失败
- /// </summary>
- public void EmergencyFailed()
- {
- if (!EmergencyAccepted)
- {
- PushEmergencyFailedMessage();
- }
- }
- /// <summary>
- /// 切换会诊房间
- /// </summary>
- /// <param name="userCode"></param>
- /// <param name="current"></param>
- /// <param name="timeout"></param>
- /// <param name="sdkAppId"></param>
- /// <returns></returns>
- public void ChangeRoom(string userCode, LiveConsultationRoom current, int timeout, int sdkAppId)
- {
- current.Initiate(Initiator.Id, RoomNo, timeout, sdkAppId, false);
- var closeMemberCodes = new List<string>();
- foreach (var origMember in Members)
- {
- if (origMember.Status != LiveConsultationMemberStatus.Joined)
- {
- continue;
- }
- var liveMember = current.Members.FirstOrDefault(x => x.Id == origMember.Id);
- if (liveMember != null)
- {
- liveMember.Status = LiveConsultationMemberStatus.Accepted;
- liveMember.Mute = origMember.Mute;
- liveMember.VideoOpend = origMember.VideoOpend;
- liveMember.IsControllingParameter = origMember.IsControllingParameter;
- }
- else
- {
- closeMemberCodes.Add(origMember.Id);
- }
- }
- PushCloseDueToChangeMessage(closeMemberCodes);
- PushChangeRoomMessage(userCode, current);
- Close(false);
- }
- private void StartCheckConnectionTimeout(int timeout)
- {
- Task.Run(async () =>
- {
- Status = LiveConsultationRoomStatus.Initiating;
- await Task.Delay(timeout * 1000);
- if (Status != LiveConsultationRoomStatus.Connected)
- {
- Status = LiveConsultationRoomStatus.ConnectionTimeout;
- }
- });
- }
- public LiveConsultationMember InitLiveMemberByCode(string userCode)
- {
- var user = CacheMaintenance.Instance.Get<IUserInfoManager>().Get(userCode);
- var userName = !string.IsNullOrWhiteSpace(user.FullName) ? user.FullName : user.UserName;
- var liveMember = new LiveConsultationMember
- {
- Id = userCode,
- MemberType = LiveMemberEnum.User,
- Name = userName,
- HeadImageToken = user.HeadImageToken,
- IsInitiator = false,
- Status = LiveConsultationMemberStatus.Default,
- //LiveData = liveData,
- };
- var userToken = CacheMaintenance.Instance.Get<ITokensManager>().Where(t => t.ClientId == userCode)?.OrderByDescending(x => x.IsOnline)?.FirstOrDefault();
- if (userToken != null)
- {
- var loginSource = (LoginSource)userToken.LoginSource;
- liveMember.LoginServerUrl = userToken.LoginServer;
- liveMember.LoginSource = (LoginSource)userToken.LoginSource;
- liveMember.IsOnline = userToken.IsOnline;
- liveMember.IsBusy = false;
- }
- return liveMember;
- }
- private void RefreshMemberInfosByToken(string liveMemberId = "")
- {
- var tokenManager = CacheMaintenance.Instance.Get<ITokensManager>();
- foreach (var liveMember in Members)
- {
- var id = liveMember.Id;
- if (!string.IsNullOrWhiteSpace(liveMemberId) && id != liveMemberId)
- {
- continue;
- }
- var userToken = tokenManager.Where(t => t.ClientId == id)?.OrderByDescending(x => x.IsOnline)?.FirstOrDefault();
- if (userToken != null)
- {
- var loginSource = (LoginSource)userToken.LoginSource;
- liveMember.LoginServerUrl = userToken.LoginServer;
- liveMember.LoginSource = (LoginSource)userToken.LoginSource;
- liveMember.IsOnline = userToken.IsOnline;
- }
- var agenerateRoomUrlResult = OnRtcGenerateRoomUrl.Invoke(RoomNo, id);
- liveMember.LiveData = new LiveData
- {
- RtmpPullUrl = agenerateRoomUrlResult.RtmpUrl,
- HlsPullUrl = agenerateRoomUrlResult.HlsUrl,
- HttpPullUrl = agenerateRoomUrlResult.FlvUrl,
- };
- }
- }
- private void WriteDebugLogs(string actionName, LiveConsultationMember liveMember = null, string log = "")
- {
- var logs = new StringBuilder();
- logs.AppendLine($"LiveConsultationRoom action:{actionName}, patientName:{PatientName}, roomId:{RoomId}, room status:{Status.ToString()}");
- if (liveMember != null)
- {
- logs.AppendLine($"user:{liveMember.Name}, status:{liveMember.Status.ToString()}");
- }
- else
- {
- logs.AppendLine($"user:not existed");
- }
- logs.AppendLine($"log:{log}");
- Logger.WriteLineInfo($"{logs.ToString()}");
- }
- /// <summary>
- /// 清除白板数据
- /// </summary>
- /// <param name="userCode"></param>
- private void RemoveInteractiveBoardDatasByUserCode(string userCode)
- {
- InteractiveBoardDatas = InteractiveBoardDatas.Where(x => x.UserCode != userCode)?.ToList() ?? new List<InteractiveBoardDataDTO>();
- }
- }
- public class LiveConsultationRoomDTO
- {
- public LiveConsultationRoomDTO(string roomId)
- {
- RoomId = roomId;
- }
- /// <summary>
- /// The consultation unique id
- /// </summary>
- /// <value></value>
- public string RoomId { get; set; }
- /// <summary>
- /// The diagnosis room No
- /// </summary>
- /// <value></value>
- public int RoomNo { get; set; }
- public string MsgQueueId { get; set; }
- public IList<LiveConsultationMember> Members { get; set; } = new List<LiveConsultationMember>();
- public LiveConsultationMember Initiator
- {
- get
- {
- return Members.FirstOrDefault(x => x.IsInitiator);
- }
- }
- public IEnumerable<LiveConsultationMember> UserInfos
- {
- get
- {
- return Members.Where(x => x.MemberType == LiveMemberEnum.User);
- }
- }
- public IEnumerable<LiveConsultationMember> DeviceInfos
- {
- get
- {
- return Members.Where(x => x.MemberType == LiveMemberEnum.Device);
- }
- }
- public IEnumerable<LiveConsultationMember> MainUserInfos
- {
- get
- {
- return Members.Where(x => x.IsInitiator || x.Id == ApplyUserCode || x.Id == ExpertUserCode);
- }
- }
- /// <summary>
- /// The diagnosis room status
- /// </summary>
- /// <value></value>
- public LiveConsultationRoomStatus Status { get; set; }
- /// <summary>
- /// 病人名称
- /// </summary>
- public string PatientName { get; set; }
- /// <summary>
- /// 会诊时间
- /// </summary>
- public DateTime ConsultationTime { get; set; }
- /// <summary>
- /// 会诊状态
- /// </summary>
- public TransactionStatusEnum ConsultationStatus { get; set; }
- /// <summary>
- /// 申请机构编码
- /// </summary>
- public string ApplyOrganizationCode { get; set; }
- /// <summary>
- /// 申请医师编码
- /// </summary>
- public string ApplyUserCode { get; set; }
- /// <summary>
- /// 会诊机构编码
- /// </summary>
- public string ExpertOrganizationCode { get; set; }
- /// <summary>
- /// 会诊专家编码
- /// </summary>
- public string ExpertUserCode { get; set; }
- /// <summary>
- /// 是否急诊标识
- /// </summary>
- /// <value></value>
- public bool IsEmergency { get; set; }
- /// <summary>
- /// 急诊已接通
- /// </summary>
- /// <value></value>
- public bool EmergencyAccepted { get; set; }
- /// <summary>
- /// 白板数据集合
- /// </summary>
- /// <typeparam name="InteractiveBoardDataDTO"></typeparam>
- /// <returns></returns>
- public IList<InteractiveBoardDataDTO> InteractiveBoardDatas { get; set; } = new List<InteractiveBoardDataDTO>();
- }
- }
|