using DevExpress.XtraEditors; using HL_FristAidPlatform_DTO; using HL_FristAidPlatform_Public; using Microsoft.AspNetCore.SignalR.Client; using Microsoft.IdentityModel.Protocols; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Threading.Tasks; using System.Windows.Forms; //using HL_FristAidPlatform_DynamicElectrocardiogram; namespace HL_FristAidPlatform_MultiSystemPublic { public partial class Form_OneClickNotification : XtraForm { #region 变量 private string PatientId; /// /// 当前病人编号 /// private string Cur_PatientGuid; /// /// 当前病人姓名 /// private string Cur_PatientName = string.Empty; /// /// 当前病人性别 /// private string Cur_PatientGender = string.Empty; /// /// 当前病人年龄 /// private string Cur_PatientAge = string.Empty; /// /// 消息前缀 /// private string NoticeTitle = string.Empty; //定义一个连接对象 public HubConnection connection; #endregion //#region MultimediaManager //private IMultimediaManager multimediaManager = MultimediaManagerFactory.GetSingleton(); //public IMultimediaManager MultimediaManager //{ // get { return multimediaManager; } //} //#endregion //#region RapidPassiveEngine //private IRapidPassiveEngine rapidPassiveEngine = RapidEngineFactory.CreatePassiveEngine(); //public IRapidPassiveEngine RapidPassiveEngine //{ // get { return rapidPassiveEngine; } //} //#endregion //#region GroupOutter //private DynamicGroupOutter groupOutter = new DynamicGroupOutter(); //public DynamicGroupOutter GroupOutter //{ // get { return groupOutter; } //} //#endregion //private CustomizeHandler customizeHandler; /// /// 一键通知 /// /// 病人编号 /// 病人姓名 /// 病人性别 /// 病人年龄 public Form_OneClickNotification(string _patientGuid, string _patientName, string _patientGender, string _patientAge, string patientId) { InitializeComponent(); Cur_PatientGuid = _patientGuid; Cur_PatientName = _patientName; Cur_PatientGender = _patientGender; Cur_PatientAge = _patientAge; string gender = Cur_PatientGender == "1" ? "男" : "女"; NoticeTitle = Cur_PatientName + "," + gender + "," + Cur_PatientAge + "岁"; PatientId = patientId; SignalRConnection(); } public async void SignalRConnection() { connection = new HubConnectionBuilder().WithUrl(ConfigurationManager.AppSettings["WebApiUrl"] + "signalr/chatHub") .Build(); await connection.StartAsync(); connection.Closed += async (error) => { await Task.Delay(new Random().Next(0, 5) * 1000); await connection.StartAsync(); }; } /// /// 窗体加载 /// /// /// private void Form_OneClickNotification_Load(object sender, EventArgs e) { BindData(); string id = Information.SystemModuleInfo.ID.ToString(); if (id == PublicClassForDataBase.Config10001) txt_Notice.Text = "胸痛患者:" + NoticeTitle; if (id == PublicClassForDataBase.Config10002) txt_Notice.Text = "卒中患者:" + NoticeTitle; if (id == PublicClassForDataBase.Config10003) txt_Notice.Text = "创伤患者:" + NoticeTitle; } /// /// 绑定数据 /// public void BindData() { GetPatientInfo(Cur_PatientGuid); BindNoticeType(); } /// /// 绑定通知类型 /// private void BindNoticeType() { try { DataTable ResultDT = DBHelpClass.Get("/api/base/T_Base_NoticeType/GetList?isUser=1"); PublicClass.SetLookUpList(ref LUEdit_NoticeType, ResultDT, 0, 2, true, "请选择"); } catch (Exception ex) { PublicClass.WriteErrorLog(this.Text, "绑定通知类型:\r\n" + ex); } } /// /// 获取患者信息 /// /// private void GetPatientInfo(string _patientGuid) { try { string URL = string.Format("api/service/T_Service_Patient/GetModelByIdOrGuid?id={0}&guid={1}", 0, _patientGuid); DataTable PatientDT = DBHelpClass.Get(URL); if (PatientDT != null && PatientDT.Rows.Count > 0) { string EmergencyState = PublicClass.ToString(PatientDT.Rows[0]["EmergencyState"], ""); if (EmergencyState == "2") { lbl_Info.Visible = true; LUEdit_NoticeType.ReadOnly = true; txt_SelectUser.ReadOnly = true; btn_SelUser.Enabled = false; //ckb_IsSMS.ReadOnly = true; //txt_NoticeSMS.ReadOnly = true; txt_Notice.ReadOnly = true; btn_Send.Enabled = false; } else { lbl_Info.Visible = false; LUEdit_NoticeType.ReadOnly = false; txt_SelectUser.ReadOnly = false; btn_SelUser.Enabled = true; //ckb_IsSMS.ReadOnly = false; //txt_NoticeSMS.ReadOnly = false; txt_Notice.ReadOnly = false; btn_Send.Enabled = true; } } } catch (Exception ex) { PublicClass.WriteErrorLog(this.Text, "获取患者信息:\r\n" + ex); } } /// /// 选择用户 /// /// /// private async void btn_SelUser_Click(object sender, EventArgs e) { Form_SelectUser frm = new Form_SelectUser(); if (frm.ShowDialog() == DialogResult.OK) { txt_SelectUser.Tag = frm.SelUserIDS; txt_SelectUser.Text = frm.SelUserNameS; //string[] sUserName = txt_SelectUser.Text.ToString().Split(','); ////添加到指定的组 //foreach (var item in sUserName) //{ // await connection.InvokeAsync("AddToGroup", "一键通知"); //} } } /// /// 选择短信内容 /// /// /// private void LUEdit_NoticeType_EditValueChanged(object sender, EventArgs e) { int TypeID = PublicClass.ToInt32(LUEdit_NoticeType.EditValue, 0); DataTable DetailDT = DBHelpClass.GetDataRow(string.Format("/api/base/T_Base_NoticeType/{0}", TypeID)); if (DetailDT != null && DetailDT.Rows.Count > 0) { string Template = PublicClass.ToString(DetailDT.Rows[0]["Template"], ""); string Notice = string.Empty; if (!string.IsNullOrEmpty(Template)) { Notice = NoticeTitle + "," + Template; } else { Notice = NoticeTitle + ",请求" + LUEdit_NoticeType.Text.ToString(); } string id = Information.SystemModuleInfo.ID.ToString(); if (id == PublicClassForDataBase.Config10001) txt_Notice.Text = "胸痛患者:" + Notice; if (id == PublicClassForDataBase.Config10002) txt_Notice.Text = "卒中患者:" + Notice; if (id == PublicClassForDataBase.Config10003) txt_Notice.Text = "创伤患者:" + Notice; if (id == PublicClassForDataBase.Config10004) txt_Notice.Text = "危重孕产妇:" + Notice; if (id == PublicClassForDataBase.Config10005) txt_Notice.Text = "危重新生儿:" + Notice; if (id == PublicClassForDataBase.Config10007) txt_Notice.Text = "" + Notice; } } /// /// 发送通知 /// /// /// private async void btn_Send_Click(object sender, EventArgs e) { try { #region 发送通知 if (string.IsNullOrEmpty(txt_SelectUser.Text.ToString().Trim())) { XtraMessageBox.Show("请先选择要通知的用户!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); btn_SelUser.Focus(); return; } if (string.IsNullOrEmpty(txt_Notice.Text.ToString().Trim())) { XtraMessageBox.Show("请输入消息内容!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); txt_Notice.Focus(); return; } //消息表 List listNotice = new List(); T_Service_NoticeDTO modelNotice = new T_Service_NoticeDTO(); modelNotice.GUID = Guid.NewGuid().ToString(); modelNotice.CreationDate = PublicClass.DateTimeNow(); modelNotice.CreatorID = Information.User.ID; modelNotice.Creator = Information.User.FullName; modelNotice.DeleteFlag = 0; modelNotice.Content = txt_Notice.Text.ToString(); /*+ "|" + PatientId;*/ modelNotice.TypeID = PublicClass.ToInt32(LUEdit_NoticeType.EditValue, 0); //modelNotice.IsSendSMS = ckb_IsSMS.Checked == true ? 0 : 1; modelNotice.PatientGuid = Cur_PatientGuid; listNotice.Add(modelNotice); //初始化两个工厂 ClientFactory httpClient = new HttpClientFactory(); Client client = httpClient.VisitFactory(); //访问 ListEntity t = client.Post("api/service/T_Service_Notice/", listNotice); if (t.Success) { XtraMessageBox.Show("通知发送成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); DialogResult = DialogResult.OK; DataTable NoticeDT = DBHelpClass.JsonToDataRow(t.DataString); long NoticeID = Convert.ToInt64(NoticeDT.Rows[0]["ID"].ToString()); long NoticeSMSID = 0; #region 接收人 string[] sUserID = txt_SelectUser.Tag.ToString().Split(','); foreach (string userid in sUserID) { //接收人表 List listNoticeReceiving = new List(); T_Service_NoticeReceivingDTO modelNoticeReceiving = new T_Service_NoticeReceivingDTO(); modelNoticeReceiving.GUID = Guid.NewGuid().ToString(); modelNoticeReceiving.UserID = Convert.ToInt64(userid); modelNoticeReceiving.ReadState = 0; modelNoticeReceiving.NoticeID = NoticeID; modelNoticeReceiving.NoticeSMSID = NoticeSMSID; listNoticeReceiving.Add(modelNoticeReceiving); //初始化两个工厂 ClientFactory httpClient3 = new HttpClientFactory(); Client client3 = httpClient3.VisitFactory(); //访问 ListEntity t3 = client3.Post("api/service/T_Service_NoticeReceiving/", listNoticeReceiving); //从客户端调用集线器方法 使用指定的方法名称和参数在服务器上调用中心方法 await connection.InvokeAsync("SendMessageToGroupAsync", modelNoticeReceiving.UserID.ToString(), txt_Notice.Text + "|" + PatientId); } //从客户端调用集线器方法 使用指定的方法名称和参数在服务器上调用中心方法 //await connection.InvokeAsync("WinFormsApp", Information.User.FullName, txt_Notice.Text); //if (LUEdit_NoticeType.Text.Contains("远程会诊")) //{ // customizeHandler = new CustomizeHandler(); // if (Login()) // { // MainForm mainForm = new MainForm(); // //mainForm.Text = form.Text; // mainForm.Show(); // mainForm.Initialize(RapidPassiveEngine, multimediaManager, GroupOutter, Information.User.ID.ToString(), PatientId); // customizeHandler.Initialize(mainForm); // } //} #endregion //ClearText(); } else { XtraMessageBox.Show("通知发送失败,请稍后重试!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); } #endregion } catch (Exception ex) { PublicClass.WriteErrorLog(this.Text, "发送通知:\r\n" + ex); } } //private bool Login() //{ // //ESFramework 业务逻辑 // this.rapidPassiveEngine.WaitResponseTimeoutInSecs = 30; // this.rapidPassiveEngine.HeartBeatSpanInSecs = 5; // this.rapidPassiveEngine.SecurityLogEnabled = false; // groupOutter.TryP2PWhenGroupmateConnected = false; // groupOutter.RapidPassiveEngine = this.rapidPassiveEngine; // DynamicGroupPassiveHandler groupPassiveHandler = new DynamicGroupPassiveHandler(); // groupPassiveHandler.Initialize(groupOutter); // NDiskPassiveHandler nDiskPassiveHandler = new NDiskPassiveHandler(); // ComplexCustomizeHandler handler = new ComplexCustomizeHandler(this.customizeHandler, groupPassiveHandler, nDiskPassiveHandler); // LogonResponse result = this.rapidPassiveEngine.Initialize(Information.User.ID.ToString(), "", ConfigurationManager.AppSettings["ServerIP"], int.Parse(ConfigurationManager.AppSettings["ServerPort"]), handler); // if (result.LogonResult != LogonResult.Succeed) // { // if (result.LogonResult == LogonResult.HadLoggedOn) // { // MessageBox.Show("已经在其它地方登录!"); // } // else // { // MessageBox.Show("用户或者密码错误!"); // } // return false; // } // groupOutter.Initialize(this.rapidPassiveEngine.CurrentUserID); // nDiskPassiveHandler.Initialize(this.rapidPassiveEngine.FileOutter, null); // //OMCS 语音视频 参数设置 // multimediaManager.AutoReconnect = false; // multimediaManager.SecurityLogEnabled = true; // multimediaManager.AutoAdjustCameraEncodeQuality = false; // multimediaManager.MicrophoneDeviceIndex = 0; // multimediaManager.CameraDeviceIndex = 0; // multimediaManager.CameraEncodeQuality = 8; // multimediaManager.MaxCameraFrameRate = 12; // multimediaManager.DesktopEncodeQuality = 3; // multimediaManager.MaxDesktopFrameRate = 12; // multimediaManager.Advanced.AllowDiscardFrameWhenBroadcast = true; // multimediaManager.Advanced.MaxInterval4CameraKeyFrame = 20; // multimediaManager.Advanced.MaxInterval4DesktopKeyFrame = 20; // //try // //{ // string[] cameraSizeStr = ConfigurationManager.AppSettings["CameraVideoSize"].Split(','); // multimediaManager.CameraVideoSize = new System.Drawing.Size(int.Parse(cameraSizeStr[0]), int.Parse(cameraSizeStr[1])); // //} // //catch { } // multimediaManager.Initialize(Information.User.ID.ToString(), "", ConfigurationManager.AppSettings["ServerIP"], int.Parse(ConfigurationManager.AppSettings["OmcsPort"])); // multimediaManager.OutputAudio = true; // return true; //} /// /// 清除 /// private void ClearText() { txt_SelectUser.Tag = ""; txt_SelectUser.Text = ""; txt_Notice.Text = ""; //txt_NoticeSMS.Text = ""; } } }