1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651 |
- using Newtonsoft.Json;
- using System;
- using System.Collections.Generic;
- using System.Data.Common;
- using System.IO;
- using System.Linq;
- using System.Threading.Tasks;
- using Vinno.IUS.Common.IO;
- using Vinno.IUS.Common.Log;
- using Vinno.IUS.Common.Network.Leaf;
- using Vinno.IUS.Common.Network.Transfer;
- using Vinno.vCloud.Client.Proxy.Interfaces;
- using Vinno.vCloud.Common.Client.Managers;
- using Vinno.vCloud.Common.Client.Managers.Interfaces;
- using Vinno.vCloud.Common.Client.Managers.Interfaces.Data;
- using Vinno.vCloud.Common.Client.Managers.Interfaces.Data.RemoteConsultation;
- using Vinno.vCloud.Common.Client.Plugins.Account.ViewModels;
- using Vinno.vCloud.Common.Storage;
- using Vinno.vCloud.Common.Storage.Download;
- using Vinno.vCloud.Common.Storage.ObjectStorageInfo;
- using Vinno.vCloud.Common.Storage.Upload;
- using Vinno.vCloud.Protocol.Infrastructures;
- using Vinno.vCloud.Protocol.Messages.Admin.RemoteDiagnosis;
- using Vinno.vCloud.Protocol.Messages.Client;
- using Vinno.vCloud.Protocol.Messages.Client.Account;
- using Vinno.vCloud.Protocol.Messages.Client.Chat;
- using Vinno.vCloud.Protocol.Messages.Client.Live;
- using Vinno.vCloud.Protocol.Messages.Client.LiveTalking;
- using Vinno.vCloud.Protocol.Messages.Client.Remedical.Reports;
- using Vinno.vCloud.Protocol.Messages.Client.Remedical.TerminalDatas;
- using Vinno.vCloud.Protocol.Messages.Client.Remedical.TerminialReords;
- using Vinno.vCloud.Protocol.Messages.Client.RemoteDiagnosis;
- using Vinno.vCloud.Protocol.Messages.Common;
- using Vinno.vCloud.Protocol.Messages.Live;
- using Vinno.vCloud.Protocol.Messages.Report;
- namespace Vinno.vCloud.Client.Proxy
- {
- class VCloudClient : IFlyinsonoClient
- {
- private volatile int _livingTime;
- private readonly int _sessionLifecycle = 10; //30*10 minutes
- private readonly ClientManager _clientManager;
- private string _currentUserName;
- private string _accountId;
- /// <summary>
- /// 是否单点登录
- /// </summary>
- private bool _isSingleLogin;
- /// <summary>
- ///单点登录的模式
- /// </summary>
- private int _singleMode;
- private bool _isMeeting;
- private LoginSource _loginSource = LoginSource.ClientProxy;
- private LanguageType _languageType = LanguageType.Chinese;
- private GetAccountDetailInfoSuccess8 _getAccountDetailInfo;
- private object _storageInfoLocker = new object();
- private StorageInfo _storageInfo;
- private readonly string _fileCacheFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "FileCacheFolder");
- public int LeftTime => _sessionLifecycle - _livingTime;
- public VCloudClient(string openId, string hostUrl)
- {
- OpenId = openId;
- _clientManager = new ClientManager(hostUrl);
- _clientManager.MessageArrived += OnMessageArrived;
- }
- public event EventHandler<MeetingMemberNotification> MeetingMemberNotificationArrived;//成员改变通知
- public event EventHandler<MeetingHangupNotification> MeetingHangupNotificationArrived;//挂断通知
- public event EventHandler<StartMeetingNotification> StartMeetingNotificationArrived;
- public event EventHandler<CancelStartMeetingNotification> CancelStartMeetingNotificationArrived;
- public event EventHandler<AcceptMeetingNotification> AcceptMeetingNotificationArrived;
- public event EventHandler<RejectMeetingNotification> RejectMeetingNotificationArrived;
- public event EventHandler<ChatPendingMemberTimeoutNotification> ChatPendingMemberTimeoutNotificationArrived;
- public event EventHandler<ChatMemberHeartbeatStatusNotification> ChatMemberHeartbeatStatusNotificationArrived;
- public event EventHandler<MuteVideoUserChangeNotification> MuteVideoUserChangeNotificationArrived;
- /// <summary>
- /// OpenId
- /// </summary>
- public string OpenId { get; private set; }
- public int OnlineTimes { get; private set; }
- private void OnMessageArrived(object sender, Message e)
- {
- Logger.WriteLineInfo($"Message arrived -{e.Tag.Description}");
- #region 会诊
- var meetingMemberNotification = MeetingMemberNotification.Convert(e); //用户发生变化
- if (meetingMemberNotification != null)
- {
- Logger.WriteLineInfo($"UserName:{_currentUserName} LiveMeeting MeetingMemberNotification Arrived");
- MeetingMemberNotificationArrived?.Invoke(this, meetingMemberNotification);
- }
- var startMeetingNotification = StartMeetingNotification.Convert(e); //接收者收到被邀请通知
- if (startMeetingNotification != null)
- {
- Logger.WriteLineInfo($"UserName:{_currentUserName} LiveMeeting StartMeetingNotification Arrived");
- StartMeetingNotificationArrived?.Invoke(this, startMeetingNotification);
- }
- var cancelStartMeetingNotification = CancelStartMeetingNotification.Convert(e); //取消会诊通知
- if (cancelStartMeetingNotification != null)
- {
- Logger.WriteLineInfo($"UserName:{_currentUserName} LiveMeeting CancelStartMeetingNotification Arrived");
- CancelStartMeetingNotificationArrived?.Invoke(this, cancelStartMeetingNotification);
- }
- var acceptMeetingNotification = AcceptMeetingNotification.Convert(e);
- if (acceptMeetingNotification != null)
- {
- Logger.WriteLineInfo($"UserName:{_currentUserName} LiveMeeting AcceptMeetingNotification Arrived");
- AcceptMeetingNotificationArrived?.Invoke(this, acceptMeetingNotification);
- }
- var rejectChatNotification = RejectMeetingNotification.Convert(e); //拒绝会诊通知
- if (rejectChatNotification != null)
- {
- Logger.WriteLineInfo($"UserName:{_currentUserName} LiveMeeting RejectMeetingNotification Arrived");
- RejectMeetingNotificationArrived?.Invoke(this, rejectChatNotification);
- }
- var meetingHangupNotification = MeetingHangupNotification.Convert(e);
- if (meetingHangupNotification != null)
- {
- Logger.WriteLineInfo($"UserName:{_currentUserName} LiveMeeting MeetingHangupNotification Arrived");
- MeetingHangupNotificationArrived?.Invoke(this, meetingHangupNotification);
- }
- var chatPendingMemberTimeoutNotification = ChatPendingMemberTimeoutNotification.Convert(e);
- if (chatPendingMemberTimeoutNotification != null)
- {
- Logger.WriteLineInfo($"UserName:{_currentUserName} LiveMeeting ChatPendingMemberTimeoutNotification Arrived");
- ChatPendingMemberTimeoutNotificationArrived?.Invoke(this, chatPendingMemberTimeoutNotification);
- }
- var chatMemberHeartBeatStatusNotification = ChatMemberHeartbeatStatusNotification.Convert(e);
- if (chatMemberHeartBeatStatusNotification != null)
- {
- Logger.WriteLineInfo($"UserName:{_currentUserName} LiveMeeting ChatMemberHeartbeatStatusNotification Arrived");
- ChatMemberHeartbeatStatusNotificationArrived?.Invoke(this, chatMemberHeartBeatStatusNotification);
- }
- var muteVideoUserChangeNotification = MuteVideoUserChangeNotification.Convert(e);
- if (muteVideoUserChangeNotification != null)
- {
- Logger.WriteLineInfo($"UserName:{_currentUserName} LiveMeeting MuteVideoUserChangeNotification Arrived");
- MuteVideoUserChangeNotificationArrived?.Invoke(this, muteVideoUserChangeNotification);
- }
- #endregion
- }
- /// <summary>
- /// Client login
- /// </summary>
- /// <param name="username">vCloud user name</param>
- /// <param name="password">vCloud password</param>
- /// <returns></returns>
- public LoginStatus LoginByOpenId(string openId, string username = "", string password = "")
- {
- try
- {
- var result = _clientManager.LoginByOpenId(openId, username, password);
- if (result == LoginStatus.Success)
- {
- _currentUserName = GetUserInfoByOpenId(openId)?.NickName;
- _accountId = _clientManager.AccountId;
- _getAccountDetailInfo = GetCurrentAccountDetails();
- }
- return result;
- }
- catch (Exception ex)
- {
- Logger.WriteLineError($"VCloudClient Login ex:{ex}");
- }
- return LoginStatus.Unknown;
- }
- /// <summary>
- /// Log out the logined user
- /// </summary>
- /// <returns></returns>
- public bool Logout()
- {
- return false;
- }
- /// <summary>
- /// 查询系统默认报告模板
- /// </summary>
- /// <param name="languageCode"></param>
- /// <returns></returns>
- public List<ReportTemplateMessage> GetReportTemplates(string languageCode)
- {
- var resultData = new List<ReportTemplateMessage>();
- if (string.IsNullOrWhiteSpace(languageCode) || languageCode == "zh-CN")
- {
- resultData.Add(new ReportTemplateMessage
- {
- ReportFileName = "Default",
- ReportTemplateUrl = "1!U$https://cdn-bj.fis.plus/Default_zh-CN_flyinsono1.7_2023.json",
- });
- resultData.Add(new ReportTemplateMessage
- {
- ReportFileName = "Pet",
- ReportTemplateUrl = "1!U$https://cdn-bj.fis.plus/Pet_zh-CN_flyinsono1.7_2023.json",
- });
- resultData.Add(new ReportTemplateMessage
- {
- ReportFileName = "AI",
- ReportTemplateUrl = "1!U$https://cdn-bj.fis.plus/AI_zh-CN_flyinsono1.7_2023.json",
- });
- }
- else
- {
- resultData.Add(new ReportTemplateMessage
- {
- ReportFileName = "Default",
- ReportTemplateUrl = "1!U$https://cdn-bj.fis.plus/Default_en-US_flyinsono1.7_2023.json",
- });
- resultData.Add(new ReportTemplateMessage
- {
- ReportFileName = "Pet",
- ReportTemplateUrl = "1!U$https://cdn-bj.fis.plus/Pet_en-US_flyinsono1.7_2023.json",
- });
- resultData.Add(new ReportTemplateMessage
- {
- ReportFileName = "AI",
- ReportTemplateUrl = "1!U$https://cdn-bj.fis.plus/AI_en-US_flyinsono1.7_2023.json",
- });
- }
- if (_getAccountDetailInfo != null && _getAccountDetailInfo.ReportTemplates != null && _getAccountDetailInfo.ReportTemplates.Any())
- {
- resultData.AddRange(_getAccountDetailInfo.ReportTemplates);
- }
- return resultData;
- }
- /// <summary>
- /// 查询系统默认词条
- /// </summary>
- /// <param name="languageCode"></param>
- /// <returns></returns>
- public List<ReportTemplateMessage> GetThesaurusTemplates(string languageCode)
- {
- var resultData = new List<ReportTemplateMessage>();
- if (string.IsNullOrWhiteSpace(languageCode) || languageCode == "zh-CN")
- {
- resultData.Add(new ReportTemplateMessage
- {
- ReportFileName = "Default",
- ReportTemplateUrl = "1!U$https://cdn-bj.fis.plus/Thesaurus_General_zh-CN_flyinsono1.7_2023.json",
- });
- resultData.Add(new ReportTemplateMessage
- {
- ReportFileName = "Pet",
- ReportTemplateUrl = "1!U$https://cdn-bj.fis.plus/Thesaurus_Pet_zh-CN_flyinsono1.7_2023.json",
- });
- }
- else
- {
- resultData.Add(new ReportTemplateMessage
- {
- ReportFileName = "Default",
- ReportTemplateUrl = "1!U$https://cdn-bj.fis.plus/Thesaurus_General_en-US_flyinsono1.7_2023.json",
- });
- resultData.Add(new ReportTemplateMessage
- {
- ReportFileName = "Pet",
- ReportTemplateUrl = "1!U$https://cdn-bj.fis.plus/Thesaurus_Pet_en-US_flyinsono1.7_2023.json",
- });
- }
- return resultData;
- }
- /// <summary>
- /// 查询报告标签
- /// </summary>
- /// <returns></returns>
- public List<LabelInfoMessage> GetCustomerLabels()
- {
- try
- {
- var request = new GetReportTagsTreeRequest
- {
- UserId = _accountId,
- };
- var result = SendMessage(request);
- if (result != null)
- {
- var getReportTagsSuccess = GetReportTagsTreeResult.Convert(result);
- if (getReportTagsSuccess != null && getReportTagsSuccess.CustomLabels != null && getReportTagsSuccess.CustomLabels.Any())
- {
- return getReportTagsSuccess.CustomLabels;
- }
- }
- }
- catch (Exception ex)
- {
- Logger.WriteLineError($"VCloudClient userName:{_currentUserName} GetCustomerLabels ex:{ex}");
- }
- return new List<LabelInfoMessage>();
- }
- /// <summary>
- /// 开始会诊
- /// </summary>
- /// <param name="roomId"></param>
- /// <param name="recipientInfos"></param>
- /// <param name="terminalIds"></param>
- /// <param name="initiatorName"></param>
- /// <param name="consultationId"></param>
- /// <returns></returns>
- public ConsultationResult StartConversation(string roomId, string consultationId)
- {
- //获取会诊单子信息
- var consultation = FindConsultationById(consultationId);
- if (_isSingleLogin && _singleMode != 1)
- {
- using (var request = MessagePool.GetMessage<StartIndependConversationRequest2>())
- {
- request.RoomId = roomId;
- request.InitiatorId = _accountId;
- request.InitiatorName = _currentUserName;
- request.Mode = LiveTalkingMode.Video;
- request.FeatureSource = FeatureSource.RemoteDiagnosis;
- request.Source = _loginSource;
- request.TerminalId = consultation?.TerminalId;//会诊单子查询
- request.ConsulationRecordId = consultationId;
- request.ClientLanguage = _languageType;
- var result = SendMessage(request);
- if (result != null)
- {
- var resultMessage = MeetingResult.Convert(result);
- if (resultMessage != null)
- {
- List<MeetingMemberInfo> meetingMemberInfos = new List<MeetingMemberInfo>();
- foreach (var member in resultMessage.Members)
- {
- var meetingMemberInfo = new MeetingMemberInfo
- {
- OperationType = member.OperationType,
- RoleType = member.RoleType,
- RoomId = member.RoomId,
- LoginSource = member.LoginSource,
- State = member.State,
- Id = member.Id,
- Name = member.Name,
- DisplayName = member.DisplayName,
- Avatar = member.Avatar,
- UserSign = member.UserSign,
- PushUrl = member.PushUrl,
- PullRtmpUrl = member.PullRtmpUrl,
- PullFlvUrl = member.PullFlvUrl,
- PullHlsUrl = member.PullHlsUrl
- };
- meetingMemberInfos.Add(meetingMemberInfo);
- }
- List<LiveTerminalInfo> terminalInfos = new List<LiveTerminalInfo>();
- foreach (var liveTerminal in resultMessage.LiveTerminals)
- {
- if (liveTerminal.IsMultiChannels)
- {
- var mainTerminalInfo = liveTerminal.Channels.Select(f => f.Name).Contains("Main") ? liveTerminal.Channels.FirstOrDefault(f => f.Name == "Main") : liveTerminal.Channels.FirstOrDefault();
- var cameraInfo = liveTerminal.Channels.Count > 1 ? liveTerminal.Channels[1] : null;
- if (mainTerminalInfo != null)
- {
- var terminalInfo = new LiveTerminalInfo()
- {
- IsMultiChannels = liveTerminal.IsMultiChannels,
- OperationType = liveTerminal.OperationType,
- TerminalLiveEnabled = mainTerminalInfo.Enable,
- CameraLiveEnabled = cameraInfo?.Enable ?? false,
- IsMergeChannel = liveTerminal.IsMergeChannel,
- TerminalWidth = mainTerminalInfo.Width,
- TerminalHeight = mainTerminalInfo.Height,
- // TerminalUrl = mainTerminalInfo.RtmpUrl,
- CameraWidth = cameraInfo?.Width ?? 0,
- CameraHeight = cameraInfo?.Height ?? 0,
- // CameraUrl = cameraInfo?.RtmpUrl,
- // TerminalLiveProtocol = liveTerminal.LiveProtocol,
- IntegerRoomId = liveTerminal.IntegerRoomId,
- TerminalIntegerRoomId = liveTerminal.TerminalIntegerRoomId,
- State = liveTerminal.State,
- Id = mainTerminalInfo.UserId,
- CameraId = cameraInfo?.UserId,
- };
- terminalInfos.Add(terminalInfo);
- }
- }
- else
- {
- var terminalInfo = new LiveTerminalInfo()
- {
- OperationType = liveTerminal.OperationType,
- TerminalLiveEnabled = liveTerminal.TerminalLiveEnabled,
- CameraLiveEnabled = liveTerminal.CameraLiveEnabled,
- IsMergeChannel = liveTerminal.IsMergeChannel,
- TerminalWidth = liveTerminal.TerminalWidth,
- TerminalHeight = liveTerminal.TerminalHeight,
- // TerminalUrl = liveTerminal.TerminalUrl,
- CameraWidth = liveTerminal.CameraWidth,
- CameraHeight = liveTerminal.CameraHeight,
- // CameraUrl = liveTerminal.CameraUrl,
- // TerminalLiveProtocol = liveTerminal.LiveProtocol,
- IntegerRoomId = liveTerminal.IntegerRoomId,
- TerminalIntegerRoomId = liveTerminal.TerminalIntegerRoomId,
- State = liveTerminal.State,
- Id = liveTerminal.Id
- };
- terminalInfos.Add(terminalInfo);
- }
- }
- var requestResult = new ConsultationResult(resultMessage.State)
- {
- AppId = resultMessage.AppId,
- RoomId = resultMessage.RoomId,
- LiveProtocol = resultMessage.LiveProtocol,
- State = resultMessage.State,
- IntegerRoomId = resultMessage.IntegerRoomId,
- TerminalInfos = terminalInfos,
- MeetingMemberInfos = meetingMemberInfos
- };
- return requestResult;
- }
- }
- }
- }
- using (var request = MessagePool.GetMessage<StartMeetingRequest2>())
- {
- request.RoomId = roomId;
- request.InitiatorId = _accountId;
- request.InitiatorName = _currentUserName;
- request.Mode = LiveTalkingMode.Video;
- request.FeatureSource = FeatureSource.RemoteDiagnosis;
- request.Source = _loginSource;
- request.RecipientIds = new List<RecipientInfo>() { new RecipientInfo() { Id = consultation.DoctorId, RoleType = MeetingRoleType.Recipient } };
- request.TerminalIds = new List<string>() { consultation?.TerminalId };//会诊单子查询;
- request.ConsulationRecordId = consultationId;
- request.ClientLanguage = _languageType;
- var result = SendMessage(request);
- if (result != null)
- {
- var resultMessage = MeetingResult.Convert(result);
- if (resultMessage != null)
- {
- List<MeetingMemberInfo> meetingMemberInfos = new List<MeetingMemberInfo>();
- foreach (var member in resultMessage.Members)
- {
- var meetingMemberInfo = new MeetingMemberInfo
- {
- OperationType = member.OperationType,
- RoleType = member.RoleType,
- RoomId = member.RoomId,
- LoginSource = member.LoginSource,
- State = member.State,
- Id = member.Id,
- Name = member.Name,
- DisplayName = member.DisplayName,
- Avatar = member.Avatar,
- UserSign = member.UserSign,
- PushUrl = member.PushUrl,
- PullRtmpUrl = member.PullRtmpUrl,
- PullFlvUrl = member.PullFlvUrl,
- PullHlsUrl = member.PullHlsUrl
- };
- meetingMemberInfos.Add(meetingMemberInfo);
- }
- List<LiveTerminalInfo> terminalInfos = new List<LiveTerminalInfo>();
- foreach (var liveTerminal in resultMessage.LiveTerminals)
- {
- if (liveTerminal.IsMultiChannels)
- {
- var mainTerminalInfo = liveTerminal.Channels.Select(f => f.Name).Contains("Main") ? liveTerminal.Channels.FirstOrDefault(f => f.Name == "Main") : liveTerminal.Channels.FirstOrDefault();
- var cameraInfo = liveTerminal.Channels.Count > 1 ? liveTerminal.Channels[1] : null;
- if (mainTerminalInfo != null)
- {
- var terminalInfo = new LiveTerminalInfo()
- {
- IsMultiChannels = liveTerminal.IsMultiChannels,
- OperationType = liveTerminal.OperationType,
- TerminalLiveEnabled = mainTerminalInfo.Enable,
- CameraLiveEnabled = cameraInfo?.Enable ?? false,
- IsMergeChannel = liveTerminal.IsMergeChannel,
- TerminalWidth = mainTerminalInfo.Width,
- TerminalHeight = mainTerminalInfo.Height,
- // TerminalUrl = mainTerminalInfo.RtmpUrl,
- CameraWidth = cameraInfo?.Width ?? 0,
- CameraHeight = cameraInfo?.Height ?? 0,
- // CameraUrl = cameraInfo?.RtmpUrl,
- // TerminalLiveProtocol = liveTerminal.LiveProtocol,
- IntegerRoomId = liveTerminal.IntegerRoomId,
- TerminalIntegerRoomId = liveTerminal.TerminalIntegerRoomId,
- State = liveTerminal.State,
- Id = mainTerminalInfo.UserId,
- CameraId = cameraInfo?.UserId,
- };
- terminalInfos.Add(terminalInfo);
- }
- }
- else
- {
- var terminalInfo = new LiveTerminalInfo()
- {
- OperationType = liveTerminal.OperationType,
- TerminalLiveEnabled = liveTerminal.TerminalLiveEnabled,
- CameraLiveEnabled = liveTerminal.CameraLiveEnabled,
- IsMergeChannel = liveTerminal.IsMergeChannel,
- TerminalWidth = liveTerminal.TerminalWidth,
- TerminalHeight = liveTerminal.TerminalHeight,
- // TerminalUrl = liveTerminal.TerminalUrl,
- CameraWidth = liveTerminal.CameraWidth,
- CameraHeight = liveTerminal.CameraHeight,
- // CameraUrl = liveTerminal.CameraUrl,
- // TerminalLiveProtocol = liveTerminal.LiveProtocol,
- IntegerRoomId = liveTerminal.IntegerRoomId,
- TerminalIntegerRoomId = liveTerminal.TerminalIntegerRoomId,
- State = liveTerminal.State,
- Id = liveTerminal.Id
- };
- terminalInfos.Add(terminalInfo);
- }
- }
- var requestResult = new ConsultationResult(resultMessage.State)
- {
- AppId = resultMessage.AppId,
- RoomId = resultMessage.RoomId,
- LiveProtocol = resultMessage.LiveProtocol,
- State = resultMessage.State,
- IntegerRoomId = resultMessage.IntegerRoomId,
- TerminalInfos = terminalInfos,
- MeetingMemberInfos = meetingMemberInfos
- };
- if (resultMessage.State == LiveStates.OK)
- {
- if (consultation.State < ConsultationState.Started)
- {
- UpdateRecordState(new UpdateAppointmentStateRequest()
- {
- Id = consultationId,
- State = ConsultationState.Started
- });
- }
- }
- return requestResult;
- }
- }
- }
- return new ConsultationResult(LiveStates.UnknowException);
- }
- public ConsultationMessage FindConsultationById(string id)
- {
- try
- {
- using (var request = MessagePool.GetMessage<FindConsultationRequest>())
- {
- request.ConsultationId = id;
- var result = SendMessage(request);
- if (result != null)
- {
- var resultMessage = ConsultationMessage.Convert(result);
- if (resultMessage != null)
- {
- return resultMessage;
- }
- }
- }
- }
- catch (Exception ex)
- {
- Logger.WriteLineError($"FindConsultation exception:{ex}");
- }
- return null;
- }
- /// <summary>
- /// 取消发起过程中的会诊
- /// </summary>
- /// <param name="roomId"></param>
- /// <param name="recipientInfos"></param>
- /// <param name="terminalIds"></param>
- /// <param name="initiatorName"></param>
- /// <param name="consultationId"></param>
- /// <returns></returns>
- public LiveStates CancelStartConversation(string roomId)
- {
- try
- {
- using (var request = MessagePool.GetMessage<CancelStartMeetingtRequest>())
- {
- request.RoomId = roomId;
- request.InitiatorId = _accountId;
- if (_isMeeting)
- {
- request.ForceClosed = false;
- }
- else
- {
- request.ForceClosed = true;
- }
- request.LoginSource = LoginSource.ClientProxy;
- var result = SendMessage(request);
- if (result != null)
- {
- var resultMessage = CancelStartMeetingtResult.Convert(result);
- if (resultMessage != null)
- {
- return resultMessage.State;
- }
- }
- }
- }
- catch (Exception exception) { Logger.WriteLineError($" userName:{_currentUserName} GetUserInfoByOpenId error:{exception}"); }
- return LiveStates.UnknowException;
- }
- /// <summary>
- /// 会诊过程中邀请会诊成员
- /// </summary>
- /// <param name="roomId"></param>
- /// <param name="feature"></param>
- /// <param name="recipientInfos"></param>
- /// <returns></returns>
- public ConsultationResult InviteConsultationMember(string roomId, FeatureSource feature, List<RecipientInfo> recipientInfos)
- {
- try
- {
- using (var request = new InviteMeetingMembersRequest())
- {
- request.InitiatorId = _accountId;
- request.RoomId = roomId;
- request.FeatureSource = feature;
- request.Source = _loginSource;
- request.RecipientIds = recipientInfos;
- request.ClientLanguage = _languageType;
- var result = SendMessage(request);
- if (result != null)
- {
- var resultMessage = InviteMeetingMembersResult.Convert(result);
- if (resultMessage != null)
- {
- var inviteMeeting = new ConsultationResult(resultMessage.State);
- inviteMeeting.TerminalInfos = resultMessage.LiveTerminals.Select(liveTerminal => new LiveTerminalInfo()
- {
- TerminalLiveEnabled = liveTerminal.TerminalLiveEnabled,
- CameraLiveEnabled = liveTerminal.CameraLiveEnabled,
- IsMergeChannel = liveTerminal.IsMergeChannel,
- TerminalWidth = liveTerminal.TerminalWidth,
- TerminalHeight = liveTerminal.TerminalHeight,
- // TerminalUrl = liveTerminal.TerminalUrl,
- CameraWidth = liveTerminal.CameraWidth,
- CameraHeight = liveTerminal.CameraHeight,
- // CameraUrl = liveTerminal.CameraUrl,
- // TerminalLiveProtocol = liveTerminal.LiveProtocol,
- IntegerRoomId = liveTerminal.IntegerRoomId,
- State = liveTerminal.State,
- Id = liveTerminal.Id
- }).ToList();
- inviteMeeting.MeetingMemberInfos = resultMessage.Recipients.Select(member => new MeetingMemberInfo()
- {
- OperationType = member.OperationType,
- RoleType = member.RoleType,
- RoomId = member.RoomId,
- LoginSource = member.LoginSource,
- State = member.State,
- Id = member.Id,
- Name = member.Name,
- DisplayName = member.DisplayName,
- Avatar = member.Avatar,
- UserSign = member.UserSign,
- PushUrl = member.PushUrl,
- PullRtmpUrl = member.PullRtmpUrl,
- PullFlvUrl = member.PullFlvUrl,
- PullHlsUrl = member.PullHlsUrl
- }).ToList();
- return inviteMeeting;
- }
- }
- }
- }
- catch (Exception exception) { Logger.WriteLineError($" userName:{_currentUserName} InviteConsultationMember error:{exception}"); }
- return new ConsultationResult(LiveStates.UnknowException);
- }
- /// <summary>
- /// 退出会诊
- /// </summary>
- /// <param name="roomId"></param>
- /// <param name="forceClosed"></param>
- /// <param name="name"></param>
- /// <param name="terminalId"></param>
- /// <returns></returns>
- public LiveStates ExitConsultation(string roomId, bool forceClosed, string terminalId, string consultationId)
- {
- try
- {
- if (_isSingleLogin && _singleMode != 1)
- {
- using (var request = new ExitIndependConversationRequest())
- {
- request.RoomId = roomId;
- request.InitiatorId = _accountId;
- request.InitiatorName = _currentUserName;
- request.ClientLanguage = _languageType;
- request.Source = _loginSource;
- request.TerminalId = terminalId;
- var result = SendMessage(request);
- if (result != null)
- {
- var resultMessage = ResultMessage.Convert(result);
- if (resultMessage != null && resultMessage == CCR.OK)
- {
- return LiveStates.OK;
- }
- }
- }
- }
- else
- {
- using (var request = new ExitMeetingRequest())
- {
- request.UserId = _accountId;
- request.RoomId = roomId;
- request.RecipientIds = new List<string> { _accountId };
- request.LoginSource = _loginSource;
- request.ForceClosed = forceClosed;
- request.ClientLanguage = _languageType;
- var result = SendMessage(request);
- if (result != null)
- {
- var resultMessage = ExitMeetingResult.Convert(result);
- if (resultMessage != null)
- {
- var consultationResult = FindConsultationById(consultationId);
- if (consultationResult?.State != ConsultationState.WaitForReportUpload)
- {
- UpdateRecordState(new UpdateAppointmentStateRequest()
- {
- Id = consultationId,
- State = ConsultationState.WaitForReportUpload
- });
- }
- return resultMessage.State;
- }
- }
- }
- }
- _isMeeting = false;
- }
- catch (Exception exception)
- {
- Logger.WriteLineError($" userName:{_currentUserName} ExitConsultation error:{exception}");
- }
- return LiveStates.UnknowException;
- }
- /// <summary>
- /// 接受会诊邀请
- /// </summary>
- /// <param name="roomId"></param>
- /// <param name="featureSource"></param>
- /// <param name="liveStates"></param>
- /// <param name="initiatorId"></param>
- /// <returns></returns>
- public LiveStates AcceptConsultation(string roomId, FeatureSource featureSource, LiveStates liveStates, string initiatorId)
- {
- using (var request = new AcceptMeetingRequest())
- {
- request.RoomId = roomId;
- request.RecipientId = _accountId;
- request.FeatureSource = featureSource;
- request.InitiatorId = initiatorId;
- request.Source = _loginSource;
- request.PushLiveState = liveStates;
- request.ClientLanguage = _languageType;
- var result = SendMessage(request);
- if (result != null)
- {
- var resultMessage = AcceptMeetingResult.Convert(result);
- if (resultMessage != null)
- {
- return resultMessage.State;
- }
- }
- }
- return LiveStates.UnknowException;
- }
- /// <summary>
- /// 拒绝会诊邀请
- /// </summary>
- /// <param name="roomId"></param>
- /// <param name="initiatorId"></param>
- /// <returns></returns>
- public LiveStates RejectConsultation(string roomId, string initiatorId)
- {
- using (var request = new RejectMeetingRequest())
- {
- request.RoomId = roomId;
- request.RecipientId = _accountId;
- request.InitiatorId = initiatorId;
- request.LoginSource = _loginSource;
- request.ClientLanguage = _languageType;
- var result = SendMessage(request);
- if (result != null)
- {
- var resultMessage = MeetingResult.Convert(result); //拒绝会诊result
- if (resultMessage != null)
- {
- return resultMessage.State;
- }
- }
- }
- return LiveStates.UnknowException;
- }
- public WechatUserInfo GetUserInfoByOpenId(string openId)
- {
- try
- {
- using (var request = MessagePool.GetMessage<GetAccountByOpenIdRequest>())
- {
- request.Openid = openId;
- var messages = SendMessage(request);
- if (messages == null) return null;
- var result = GetAccountByOpenIdResult.Convert(messages);
- if (result == null || string.IsNullOrEmpty(result.UserId)) return null;
- _getAccountDetailInfo = GetCurrentAccountDetails();
- return new WechatUserInfo
- {
- NickName = result.NickName,
- PhoneNumber = result.Phone,
- Openid = request.Openid,
- Hospital = _getAccountDetailInfo.Hospital,
- UserId = result.UserId,
- };
- }
- }
- catch (Exception exception)
- {
- Logger.WriteLineError($" userName:{_currentUserName} GetUserInfoByOpenId error:{exception}");
- }
- return null;
- }
- /// <summary>
- /// 创建会诊
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- public string CreateConsultationRecord(CreateAppointmentRequest1 request)
- {
- try
- {
- request.InspectionItems = GetEnglishCheckPointEnName(request.InspectionItems);
- request.CreatorId = _accountId;
- var result = SendMessage(request);
- if (result != null)
- {
- var resultMessage = AddConsultationResult.Convert(result);
- if (resultMessage != null)
- {
- return resultMessage.Id;
- }
- }
- }
- catch (Exception exception)
- {
- Logger.WriteLineError($" userName:{_currentUserName} Create Appointment error:{exception}");
- }
- return string.Empty;
- }
- public FindNewAppointmentsResult6 FindConsultationRecords(int startIndex, int pageSize, AppointmentsFilterMessage filter)
- {
- var pageIndex = startIndex % pageSize == 0 ? startIndex / pageSize : startIndex / pageSize + 1;
- try
- {
- _getAccountDetailInfo = GetCurrentAccountDetails();
- filter.SuperiorHospitalIds = _getAccountDetailInfo.HospitalMessage.SuperiorHospitals.Select(v => v.OrganizationId).ToList();
- filter.LowerHospitalIds = _getAccountDetailInfo.HospitalMessage.LowerHospitals.Select(v => v.OrganizationId).ToList();
- using (var request = MessagePool.GetMessage<FindNewAppointmentsRequest6>())
- {
- request.UserId = _accountId;
- request.PageIndex = pageIndex;
- request.PageSize = pageSize;
- request.Filter = AppointmentsFilterMessage.ConvertToFilterMessage(filter);
- request.FollowUpVisitStatus = FollowUpVisitStatus.Unknown;
- request.EvaluateGrade = EvaluateGrade.UnSet;
- var result = SendMessage(request);
- if (result != null)
- {
- var resultMessage = FindNewAppointmentsResult6.Convert(result);
- if (resultMessage != null)
- {
- foreach (var item in resultMessage.AppointmentsMessages)
- {
- item.CheckPoint = GetCnCheckPointCnName(item.CheckPoint);
- }
- return resultMessage;
- }
- }
- }
- }
- catch (Exception ex)
- {
- Logger.WriteLineError($" userName:{_currentUserName} Find Appointments error:{ex}");
- }
- return null;
- }
- /// <summary>
- /// 获取自己的医院列表
- /// </summary>
- /// <returns></returns>
- public List<OrganBaseInfoMessage> GetMyHospitals()
- {
- var hospitals = new List<OrganBaseInfoMessage>();
- try
- {
- using (var request = MessagePool.GetMessage<GetHospitalsRequest2>())
- {
- request.UserId = _accountId;
- var result = SendMessage(request);
- if (result != null)
- {
- var resultMessage = GetHospitalsResult.Convert(result);
- if (resultMessage != null && resultMessage.Hospitals != null)
- {
- hospitals = resultMessage.Hospitals.ToList();
- }
- }
- }
- }
- catch (Exception exception)
- {
- Logger.WriteLineError($"GetHospitalsAsync userName:{_currentUserName} error:{exception}");
- }
- return hospitals;
- }
- /// <summary>
- /// 获取自己超声机
- /// </summary>
- /// <returns></returns>
- public List<Interfaces.TerminalInfo> GetMyTerminals()
- {
- try
- {
- using (var request = MessagePool.GetMessage<FindTerminalsRequest5>())
- {
- request.UserId = _accountId;
- var result = SendMessage(request);
- if (result != null)
- {
- var terminalsResult = FindTerminalsResult5.Convert(result);
- return terminalsResult?.EntityMessages.Select(m => new Interfaces.TerminalInfo()
- {
- Id = m.Id,
- OrganizationId = m.OrganizationId,
- OrganizationDecription = m.OrganizationDescription,
- OrganizationName = m.OrganizationName,
- Name = m.TerminalName,
- Model = m.TerminalModel,
- Description = m.Description,
- UniqueId = m.UniquedId,
- }).ToList();
- }
- }
- }
- catch (Exception ex)
- {
- Logger.WriteLineError($"VCloudClient userName:{_currentUserName} GetMyTerminals ex:{ex}");
- }
- return new List<Interfaces.TerminalInfo>();
- }
- /// <summary>
- /// 查询专家
- /// </summary>
- /// <param name="hospitalId"></param>
- /// <returns></returns>
- public List<ExpertDetailMessage> FindMyExpertsByHospitalId(string hospitalId)
- {
- try
- {
- using (var request = MessagePool.GetMessage<FindAllExpertsWithShiftsRequest>())
- {
- request.HospitalId = hospitalId;
- var result = SendMessage(request);
- if (result != null)
- {
- var resultMessage = FindAllExpertsWithShiftsResult.Convert(result);
- if (resultMessage != null && resultMessage.ExpertDetails != null)
- {
- return resultMessage.ExpertDetails.Select(v => v as ExpertDetailMessage).ToList();
- }
- }
- }
- }
- catch (Exception ex)
- {
- Logger.WriteLineError($"VCloudClient userName:{_currentUserName} FindMyExpertsByHospitalId ex:{ex}");
- }
- return null;
- }
- /// <summary>
- /// 获取检查部位
- /// </summary>
- /// <returns></returns>
- public List<string> GetCheckPoint()
- {
- return new List<string>()
- {
- "胎儿", "子宫","附件","盆腔","肝脏", "胆囊", "胆管","胰腺","脾脏","双肾","输尿管","膀胱","前列腺","肠系膜淋巴结","乳腺","甲状腺","颈部血管","椎动脉","外周浅表", "淋巴结","心脏", "睾丸","附睾","精索静脉"
- };
- }
- private string GetCnCheckPointCnName(string enName)
- {
- string cnName = enName;
- switch (enName)
- {
- case "Fetu":
- cnName = "胎儿";
- break;
- case "Uterus":
- cnName = "子宫";
- break;
- case "Appendages":
- cnName = "附件";
- break;
- case "PelvicCavity":
- cnName = "盆腔";
- break;
- case "Liver":
- cnName = "肝脏";
- break;
- case "GB":
- cnName = "胆囊";
- break;
- case "BileDuct":
- cnName = "胆管";
- break;
- case "Pancreas":
- cnName = "胰腺";
- break;
- case "Spleen":
- cnName = "脾脏";
- break;
- case "DoubleKidney":
- cnName = "双肾";
- break;
- case "Ureter":
- cnName = "输尿管";
- break;
- case "Bladder":
- cnName = "膀胱";
- break;
- case "Prostate":
- cnName = "前列腺";
- break;
- case "MesentericLymphNode":
- cnName = "肠系膜淋巴结";
- break;
- case "Breast":
- cnName = "乳腺";
- break;
- case "CervicalVessels":
- cnName = "颈部血管";
- break;
- case "VertebralArtery":
- cnName = "椎动脉";
- break;
- case "PeripheralSuperficial":
- cnName = "外周浅表";
- break;
- case "LymphNode":
- cnName = "淋巴结";
- break;
- case "Cardiac":
- cnName = "心脏";
- break;
- case "Testicle":
- cnName = "睾丸";
- break;
- case "Epididymis":
- cnName = "附睾";
- break;
- case "VenaeSpermatica":
- cnName = "精索静脉";
- break;
- }
- return cnName;
- }
- private string GetEnglishCheckPointEnName(string cnName)
- {
- string enName = cnName;
- switch (cnName)
- {
- case "胎儿":
- enName = "Fetu";
- break;
- case "子宫":
- enName = "Uterus";
- break;
- case "附件":
- enName = "Appendages";
- break;
- case "盆腔":
- enName = "PelvicCavity";
- break;
- case "肝脏":
- enName = "Liver";
- break;
- case "胆囊":
- enName = "GB";
- break;
- case "胆管":
- enName = "BileDuct";
- break;
- case "胰腺":
- enName = "Pancreas";
- break;
- case "脾脏":
- enName = "Spleen";
- break;
- case "双肾":
- enName = "DoubleKidney";
- break;
- case "输尿管":
- enName = "Ureter";
- break;
- case "膀胱":
- enName = "Bladder";
- break;
- case "前列腺":
- enName = "Prostate";
- break;
- case "肠系膜淋巴结":
- enName = "MesentericLymphNode";
- break;
- case "乳腺":
- enName = "Breast";
- break;
- case "颈部血管":
- enName = "CervicalVessels";
- break;
- case "椎动脉":
- enName = "VertebralArtery";
- break;
- case "外周浅表":
- enName = "PeripheralSuperficial";
- break;
- case "淋巴结":
- enName = "LymphNode";
- break;
- case "心脏":
- enName = "Cardiac";
- break;
- case "睾丸":
- enName = "Testicle";
- break;
- case "附睾":
- enName = "Epididymis";
- break;
- case "精索静脉":
- enName = "VenaeSpermatica";
- break;
- }
- return enName;
- }
- /// <summary>
- ///通过远程记录Id查询图像
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- public GetPatientRecordDatasSuccess9 GetPatientRecordImageById(GetPatientRecordDatasRequest11 request)
- {
- try
- {
- var result = SendMessage(request);
- if (result != null)
- {
- var getRecordsSuccess = GetPatientRecordDatasSuccess9.Convert(result);
- if (getRecordsSuccess != null)
- {
- return getRecordsSuccess;
- }
- }
- }
- catch (Exception ex)
- {
- Logger.WriteLineError($"VCloudClient userName:{_currentUserName} GetPatientRecordImageById ex:{ex}");
- }
- return null;
- }
- /// <summary>
- /// 通过记录Id获取报告
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- public NewGetReportsSuccess5 GetReportByecordId(NewGetReportsRequest5 request)
- {
- try
- {
- request.UserId = _accountId;
- var result = SendMessage(request);
- if (result != null)
- {
- var getRecordsSuccess = NewGetReportsSuccess5.Convert(result);
- if (getRecordsSuccess != null)
- {
- return getRecordsSuccess;
- }
- }
- }
- catch (Exception ex)
- {
- Logger.WriteLineError($"VCloudClient userName:{_currentUserName} GetReportByecordId ex:{ex}");
- }
- return null;
- }
- /// <summary>
- /// 查询报告详情
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- public NewReportInfoMessage5 GetReportById(string recordId, string reportId)
- {
- try
- {
- var request = new NewGetReportsRequest5
- {
- UserId = _accountId,
- TerminalRecordId = recordId,
- };
- var result = GetReportByecordId(request);
- return result?.Reports?.FirstOrDefault(x => x.Id == reportId);
- }
- catch (Exception ex)
- {
- Logger.WriteLineError($"VCloudClient userName:{_currentUserName} GetReportById ex:{ex}");
- }
- return null;
- }
- /// <summary>
- /// 查询分时远程诊断记录
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- public GetRecords11Success GetExamRecords(GetClientRecord11Request request)
- {
- try
- {
- _getAccountDetailInfo = GetCurrentAccountDetails();
- request.Filter.TerminalIds = _getAccountDetailInfo?.AssignedTerminals.Select(v => v.Id).ToList();
- request.Filter.OrganizationIds = _getAccountDetailInfo?.AssignedOrganizations.Select(v => v.OrganizationId).ToList();
- request.UserId = _accountId;
- var result = SendMessage(request);
- if (result != null)
- {
- var getRecordsSuccess = GetRecords11Success.Convert(result);
- if (getRecordsSuccess != null)
- {
- return getRecordsSuccess;
- }
- }
- }
- catch (Exception ex)
- {
- Logger.WriteLineError($"VCloudClient userName:{_currentUserName} GetExamRecords ex:{ex}");
- }
- return null;
- }
- /// <summary>
- /// 安排会诊申请单
- /// </summary>
- /// <param name="id"></param>
- /// <param name="arrangeDt"></param>
- /// <param name="expertId"></param>
- /// <returns></returns>
- public bool ArrangeConsultation(ArrangeAppointmentRequest request)
- {
- try
- {
- var result = SendMessage(request);
- if (result != null)
- {
- var resultMessage = ResultMessage.Convert(result);
- if (resultMessage == CCR.OK)
- {
- return true;
- }
- }
- }
- catch (Exception exception)
- {
- Logger.WriteLineError($" VCloudClient Finished Appointment error:{exception}");
- }
- return false;
- }
- public GetAccountDetailInfoSuccess8 GetCurrentAccountDetails()
- {
- try
- {
- using (var request = MessagePool.GetMessage<GetAccountDetailInfoRequest8>())
- {
- request.AccountId = _accountId;
- var result = SendMessage(request);
- if (result != null)
- {
- var accountInfoResult = GetAccountDetailInfoSuccess8.Convert(result);
- if (accountInfoResult != null)
- {
- return accountInfoResult;
- }
- }
- }
- }
- catch (Exception ex)
- {
- Logger.WriteLineError($"VCloudClient userName:{_currentUserName} GetCurrentAccountDetails ex:{ex}");
- }
- return null;
- }
- /// <summary>
- /// 上传会诊状态
- /// </summary>
- /// <param name=""></param>
- /// <returns></returns>
- public bool UpdateRecordState(UpdateAppointmentStateRequest request)
- {
- try
- {
- var result = SendMessage(request);
- if (result != null)
- {
- var resultMessage = ResultMessage.Convert(result);
- if (resultMessage == CCR.OK)
- {
- return true;
- }
- }
- }
- catch (Exception exception)
- {
- Logger.WriteLineError($" VCloudClient UpdateRecordState error:{exception}");
- }
- return false;
- }
- /// Active the session, it will reset the living time of this session.
- /// </summary>
- public virtual void Activate()
- {
- _livingTime = 0;
- }
- /// <summary>
- /// Deactive the session, it will increase the living time of this session.
- /// </summary>
- public virtual void DeActivate()
- {
- _livingTime++;
- }
- /// <summary>
- ///会诊过程上传截图
- /// </summary>
- /// <param name="consulationId"></param>
- /// <param name="imageToken"></param>
- /// <param name="userName"></param>
- /// <returns></returns>
- public bool UploadConsultationImages(string consulationId, string imageToken)
- {
- try
- {
- using (var request = MessagePool.GetMessage<AddImageAndVideoTokensRequest2>())
- {
- request.ConsultationRecordId = consulationId;
- request.GraphicInfos = new List<GraphicInfoClientMessage> { new GraphicInfoClientMessage() { GraphicType = 0, GraphicToken = imageToken, PreviewGraphicToken = imageToken, UserId = _accountId, UserName = _currentUserName } };
- var result = SendMessage(request);
- if (result != null)
- {
- var resultMessage = ResultMessage.Convert(result);
- if (resultMessage == CCR.OK)
- {
- return true;
- }
- }
- return false;
- }
- }
- catch (Exception e)
- {
- Logger.WriteLineError($"UploadConsultationImages Error:{e}");
- }
- return false;
- }
- /// <summary>
- ///会诊过程上传截图视频
- /// </summary>
- /// <param name="consulationId"></param>
- /// <param name="imageToken"></param>
- /// <param name="userName"></param>
- /// <returns></returns>
- public bool UploadConsulationVideos(string consulationId, string videoToken, string previewToken)
- {
- try
- {
- using (var request = MessagePool.GetMessage<AddImageAndVideoTokensRequest2>())
- {
- request.ConsultationRecordId = consulationId;
- request.GraphicInfos = new List<GraphicInfoClientMessage> { new GraphicInfoClientMessage() { GraphicType = 1, GraphicToken = videoToken, PreviewGraphicToken = previewToken, UserId = _accountId, UserName = _currentUserName } };
- var result = SendMessage(request);
- if (result != null)
- {
- var resultMessage = ResultMessage.Convert(result);
- if (resultMessage == CCR.OK)
- {
- return true;
- }
- }
- return false;
- }
- }
- catch (Exception e)
- {
- Logger.WriteLineError($"UploadConsulationVideos Error:{e}");
- }
- return false;
- }
- /// <summary>
- /// 获取会诊报告
- /// </summary>
- /// <param name="consulationId"></param>
- /// <param name="imageToken"></param>
- /// <returns></returns>
- public NewGetReportsSuccess5 GetConsultationReports(GetConsultationReportsRequest5 request)
- {
- try
- {
- request.UserId = _accountId;
- var result = SendMessage(request);
- if (result != null)
- {
- var getRecordsSuccess = NewGetReportsSuccess5.Convert(result);
- if (getRecordsSuccess != null)
- {
- return getRecordsSuccess;
- }
- }
- }
- catch (Exception ex)
- {
- Logger.WriteLineError($"VCloudClient userName:{_currentUserName} GetConsultationReports ex:{ex}");
- }
- return null;
- }
- /// <summary>
- /// 保存报告
- /// </summary>
- /// <param name=""></param>
- /// <returns></returns>
- public string SaveReport(NewAddReportRequest4 request)
- {
- try
- {
- request.UserId = _accountId;
- var reportElementValues = request.ReportInfo.ReportElementValues.ToList();
- reportElementValues.Add(new ReportElementMessage
- {
- ElementTag = new ReportElementTagMessage { Id = "9a7baa61-a91d-4399-a3f4-df29117d2d59", Name = "CreateUserId" },
- ElementValue = new ReportTextElementValueMessage { Text = _accountId },
- });
- request.ReportInfo.ReportElementValues = reportElementValues;
- Logger.WriteLineInfo($" VCloudClient SaveReport, recordId:{request.TerminalRecordId}, Detail:{JsonConvert.SerializeObject(request)}");
- var result = SendMessage(request);
- if (result != null)
- {
- var resultMessage = AddReportSuccess.Convert(result);
- if (resultMessage != null)
- {
- FinishRecordByUserId(request.TerminalRecordId, request.UserId);
- FinishConsultation(request.TerminalRecordId);
- return resultMessage.ReportCode;
- }
- }
- }
- catch (Exception exception)
- {
- Logger.WriteLineError($" VCloudClient SaveReport error:{exception}");
- }
- return string.Empty;
- }
- private void FinishRecordByUserId(string recordId, string userId)
- {
- try
- {
- var request = new FinishRecordRequest
- {
- TerminalRecordId = recordId,
- UserId = userId,
- };
- var result = SendMessage(request);
- }
- catch (Exception exception)
- {
- Logger.WriteLineError($" VCloudClient FinishRecordByUserId error:{exception}");
- }
- }
- private void FinishConsultation(string recordId)
- {
- try
- {
- var request = new UpdateAppointmentStateRequest
- {
- Id = recordId,
- State = ConsultationState.ReportUploaded,
- };
- var result = SendMessage(request);
- }
- catch (Exception exception)
- {
- Logger.WriteLineError($" VCloudClient FinishConsultation error:{exception}");
- }
- }
- public string UploadFile(byte[] fileData)
- {
- var storageInfo = GetStorageInfo();
- return UploadHelper.UploadFile(storageInfo, fileData);
- }
- private StorageInfo GetStorageInfo()
- {
- lock (_storageInfoLocker)
- {
- if (_storageInfo == null)
- {
- using (var request = MessagePool.GetMessage<GetStorageServerRequest2>())
- {
- var result = SendMessage(request);
- var getDisplayServerInfoResult = GetStorageServerResult2.Convert(result);
- if (getDisplayServerInfoResult != null)
- {
- var url = getDisplayServerInfoResult.ServerUrl;
- var storageType = getDisplayServerInfoResult.StorageType;
- var config = getDisplayServerInfoResult.Config;
- _storageInfo = new StorageInfo()
- {
- Url = url,
- StorageType = storageType,
- Config = config
- };
- NodeMapping.NodeMappingInilization(_storageInfo.StorageNodeItems);
- }
- }
- }
- return _storageInfo;
- }
- }
- public byte[] DownloadFile(string fileToken)
- {
- var data = new byte[0];
- var buffer = DownloadHelper.GetFile(fileToken, _fileCacheFolder, null, null, 0);
- if (buffer is ByteBuffer byteBuffer)
- {
- data = byteBuffer.GetBytes();
- }
- else if (buffer is FileBuffer fileBuffer)
- {
- data = fileBuffer.ReadBytes(0, fileBuffer.Size);
- fileBuffer.DeleteFile();
- Logger.WriteLineWarn($" Get file size large than fileName {fileToken} ,it shoud be fileBuffer");
- }
- return data;
- }
- private Message SendMessage(Message message)
- {
- return _clientManager.Leaf.Send(message, 1000 * 3);
- }
- public void Dispose()
- {
- _livingTime = 0;
- if (_clientManager != null)
- {
- _clientManager.MessageArrived -= OnMessageArrived;
- _clientManager.Dispose();
- }
- }
- }
- }
|