using DevExpress.Utils; using DevExpress.Utils.Layout; using DevExpress.XtraEditors; using HL_FristAidPlatform_DTO; using HL_FristAidPlatform_PreHospitalEmergency.Properties; using HL_FristAidPlatform_Public; using Microsoft.AspNetCore.SignalR.Client; using Newtonsoft.Json; using System; using System.Configuration; using System.Data; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Windows.Forms; namespace HL_FristAidPlatform_PreHospitalEmergency { public partial class Form_CurrentTaskInfo : XtraForm { /// /// 当前页 /// public int curPage = 1; /// /// 每页大小 /// public int pageSize = 100; /// /// 所有记录条数 /// public int totalNumber = 0; public int cardWidth = 250; public TablePanel tab; public DataTable dt; public int columnCount; public int rowCount; public const string guidStr = @"[0-9a-fA-F]"; public const string guid_match = "^(" + guidStr + "{8}(-" + guidStr + "{4}){3}-" + guidStr + "{12})?$"; public int width; //定义一个连接对象 private HubConnection connection; public Form_CurrentTaskInfo() { InitializeComponent(); SignalRConnection(); width = panel1.Width; } private async void Form_CurrentTaskInfo_Load(object sender, EventArgs e) { GetTotalDrvingCensus(Information.Hospital.GUID); QueryTaskInfo(Information.Hospital.GUID); QueryHosptialAmbulanceInfo(Information.Hospital.GUID); ReceiveMessage(); } 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(); }; } /// /// 今日统计 /// /// public void GetTotalDrvingCensus(string hospitalGuid) { var res = DBHelpClass.GetDateOfStr(string.Format("api/service/T_Service_FirstAid_Statistics/GetTodayCensus?hospitalGuid={0}", hospitalGuid)); DrvingCensusDTO dto = JsonConvert.DeserializeObject(res); if (dto != null) { lbl_standByTotal.Text = dto.StandByTotal.ToString(); lbl_sendTotal.Text = dto.SendTotal.ToString(); lbl_todaydrvingTotal.Text = dto.ToDayDrvingTotal.ToString(); lbl_todaycallTotal.Text = dto.ToDayCallTotal.ToString(); lbl_callTotal.Text = dto.CallTotal.ToString(); lbl_drvingTotal.Text = dto.DrvingTotal.ToString(); } } public void QueryTaskInfo(string guid) { panel1.Controls.Clear(); DataTable dt = DBHelpClass.Get(string.Format("api/service/T_Service_FirstAid_AlarmTaskInfo/GetTaskInfoTop8?guid={0}", Information.Hospital.GUID)); if (dt != null && dt.Rows.Count > 0) { CreateTabPanel(width, dt.Rows.Count, dt); } else { panel1.Visible = true; } } private string DateDiff(DateTime DateTime1, DateTime DateTime2) { string dateDiff = null; TimeSpan ts1 = new TimeSpan(DateTime1.Ticks); TimeSpan ts2 = new TimeSpan(DateTime2.Ticks); TimeSpan ts = ts1.Subtract(ts2).Duration(); dateDiff = ts.Hours.ToString().Trim() + "小时" + ts.Minutes.ToString().Trim() + "分钟" + ts.Seconds.ToString() + "秒"; return dateDiff; } /// /// 当天调度车辆状况 /// /// public void QueryHosptialAmbulanceInfo(string guid) { dt = DBHelpClass.GetJsonText(string.Format("api/base/T_Base_Ambulance/GetCurrentAmbulanceInfo?hospitalGuid={0}", Information.Hospital.GUID)); gridControl1.DataSource = dt;//显示分页结果 } public async void ReceiveMessage() { //发送上线信息 await connection.InvokeAsync("OnLine", Information.Hospital.GUID.ToString()); // 从中心调用客户端方法 一种订阅,可以从集线器方法中取消订阅 connection.On("ReceiveUpdate", (message) => { Invoke(new Action(() => { string Content = ""; Content = message.ToString(); if (Content.Contains("TaskList")) { GetTotalDrvingCensus(Information.Hospital.GUID); QueryTaskInfo(Information.Hospital.GUID); QueryHosptialAmbulanceInfo(Information.Hospital.GUID); } })); }); } /// /// /// /// 容器宽度 /// 数据条数 /// 数据 public void CreateTabPanel(int width, int total, DataTable dt) { columnCount = width / cardWidth; //列数 rowCount = total / columnCount;//行数 if ((total % columnCount) > 0) rowCount++; tab = new TablePanel(); tab.Columns.Clear(); for (int i = 0; i < columnCount; i++) { tab.Columns.Add(new TablePanelColumn(TablePanelEntityStyle.Relative, 410)); } tab.Rows.Clear(); for (int i = 0; i < rowCount; i++) { tab.Rows.Add(new TablePanelRow(TablePanelEntityStyle.Relative, 222)); } tab.AutoScroll = true; tab.Dock = DockStyle.Top; tab.AutoSize = true; tab.BackColor = System.Drawing.Color.White; tab.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; for (int i = 0; i < rowCount; i++) { for (int j = 0; j < columnCount; j++) { if ((i * columnCount + j) < dt.Rows.Count) { PanelControl panel = new PanelControl(); panel.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; panel.Dock = DockStyle.Fill; panel.Height = 230; panel.Padding = new Padding(10, 5, 10, 5); CreateCardDate(panel, dt.Rows[i * columnCount + j]["HospitalName"].ToString(), dt.Rows[i * columnCount + j]["WaitingAddress"].ToString(), dt.Rows[i * columnCount + j]["PlateNumber"].ToString(), dt.Rows[i * columnCount + j]["TaskState"].ToString(), dt.Rows[i * columnCount + j]["TaskProgress"].ToString(), dt.Rows[i * columnCount + j]["Abnormal"].ToString(), dt.Rows[i * columnCount + j]["GUID"].ToString()); tab.Controls.AddRange(new Control[] { panel }); tab.SetCell(panel, i, j); } } } panel1.Controls.Add(tab); } public void CreateCardDate(PanelControl panel, string hosptialname, string address, string platnumber, string statu, string jindu, string yichagn, string guid) { #region 卡片顶部 PanelControl top = new PanelControl(); top.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; top.Dock = DockStyle.Top; top.Height = 40; top.Appearance.BackColor = System.Drawing.Color.FromArgb(0, 96, 250); top.Appearance.BackColor2 = System.Drawing.Color.FromArgb(0, 143, 255); panel.Controls.Add(top); #endregion #region 顶部内容 TablePanel t1 = new TablePanel(); t1.Dock = System.Windows.Forms.DockStyle.Fill; t1.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; t1.Columns.Add(new TablePanelColumn(TablePanelEntityStyle.Relative, 50)); t1.Columns.Add(new TablePanelColumn(TablePanelEntityStyle.Relative, 20)); t1.Columns.Add(new TablePanelColumn(TablePanelEntityStyle.Relative, 50)); t1.Rows.Add(new TablePanelRow(TablePanelEntityStyle.Relative, 15)); LabelControl lab1 = new LabelControl(); //if (hosptialname.Length > 10) // hosptialname = hosptialname.Substring(0,9); //hosptialname = hosptialname + "..."; lab1.Text = hosptialname; lab1.Dock = DockStyle.Fill; lab1.ForeColor = System.Drawing.Color.White; lab1.Appearance.Font = new System.Drawing.Font("Tahoma", 11); lab1.Appearance.TextOptions.HAlignment = HorzAlignment.Center; lab1.AutoSizeMode = LabelAutoSizeMode.None; lab1.Name = guid; lab1.Click += PanelClick; PictureBox picture = new PictureBox(); picture.BackColor = System.Drawing.Color.Transparent; picture.Image = Resources.arrow2; picture.SizeMode = PictureBoxSizeMode.Zoom; picture.Dock = DockStyle.Fill; picture.Name = guid; picture.Click += PanelClick; LabelControl lab2 = new LabelControl(); lab2.Text = address; lab2.Dock = DockStyle.Fill; lab2.ForeColor = System.Drawing.Color.White; lab2.Appearance.Font = new System.Drawing.Font("Tahoma", 11); lab2.Appearance.TextOptions.HAlignment = HorzAlignment.Center; lab2.AutoSizeMode = LabelAutoSizeMode.None; lab2.Name = guid; lab2.Click += PanelClick; t1.Controls.AddRange(new Control[] { lab1, picture, lab2 }); t1.SetCell(lab1, 0, 0); t1.SetCell(picture, 0, 1); t1.SetCell(lab2, 0, 2); top.Controls.Add(t1); #endregion #region 卡片整体内容背景 PanelControl background = new PanelControl(); background.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; background.Appearance.BackColor = System.Drawing.Color.FromArgb(114, 188, 255); background.Appearance.BackColor2 = System.Drawing.Color.FromArgb(114, 165, 231); background.Width = 410; background.Height = 222; background.Padding = new Padding(20, 61, 20, 20); background.Dock = DockStyle.Fill; background.Click += PanelClick; panel.Controls.Add(background); #endregion #region 卡片内容容器 PanelControl conten = new PanelControl(); conten.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; conten.Appearance.BackColor = System.Drawing.Color.FromArgb(196, 237, 255); conten.Appearance.BackColor2 = System.Drawing.Color.White; conten.Name = guid; conten.Click += PanelClick; conten.Dock = DockStyle.Fill; background.Controls.Add(conten); #endregion #region 卡片内容数据 TablePanel t2 = new TablePanel(); t2.Dock = System.Windows.Forms.DockStyle.Fill; t2.BackColor = System.Drawing.Color.Transparent; t2.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; t2.Columns.Add(new TablePanelColumn(TablePanelEntityStyle.Relative, 50)); t2.Columns.Add(new TablePanelColumn(TablePanelEntityStyle.Relative, 50)); t2.Rows.Add(new TablePanelRow(TablePanelEntityStyle.Relative, 10)); t2.Rows.Add(new TablePanelRow(TablePanelEntityStyle.Relative, 10)); t2.Rows.Add(new TablePanelRow(TablePanelEntityStyle.Relative, 10)); t2.Rows.Add(new TablePanelRow(TablePanelEntityStyle.Relative, 10)); t2.Name = guid; t2.Click += PanelClick; LabelControl lab3 = new LabelControl(); lab3.Text = "车辆编号"; lab3.Dock = DockStyle.Fill; lab3.ForeColor = System.Drawing.Color.FromArgb(64, 64, 64); lab3.Appearance.Font = new System.Drawing.Font("Tahoma", 9); lab3.Appearance.TextOptions.HAlignment = HorzAlignment.Center; lab3.AutoSizeMode = LabelAutoSizeMode.None; lab3.Name = guid; lab3.Click += PanelClick; LabelControl lab4 = new LabelControl(); lab4.Text = platnumber; lab4.Dock = DockStyle.Fill; lab4.ForeColor = System.Drawing.Color.FromArgb(64, 64, 64); lab4.Appearance.Font = new System.Drawing.Font("Tahoma", 9); lab4.Appearance.TextOptions.HAlignment = HorzAlignment.Center; lab4.AutoSizeMode = LabelAutoSizeMode.None; lab4.Name = guid; lab4.Click += PanelClick; LabelControl lab5 = new LabelControl(); lab5.Text = "急救地址"; lab5.Dock = DockStyle.Fill; lab5.ForeColor = System.Drawing.Color.FromArgb(64, 64, 64); lab5.Appearance.Font = new System.Drawing.Font("Tahoma", 9); lab5.Appearance.TextOptions.HAlignment = HorzAlignment.Center; lab5.AutoSizeMode = LabelAutoSizeMode.None; lab5.Name = guid; lab5.Click += PanelClick; LabelControl lab6 = new LabelControl(); lab6.Text = address; lab6.Dock = DockStyle.Fill; lab6.ForeColor = System.Drawing.Color.FromArgb(64, 64, 64); lab6.Appearance.Font = new System.Drawing.Font("Tahoma", 9); lab6.Appearance.TextOptions.HAlignment = HorzAlignment.Center; lab6.AutoSizeMode = LabelAutoSizeMode.None; lab6.Name = guid; lab6.Click += PanelClick; LabelControl lab7 = new LabelControl(); lab7.Text = "任务状态"; lab7.Dock = DockStyle.Fill; lab7.ForeColor = System.Drawing.Color.FromArgb(64, 64, 64); lab7.Appearance.Font = new System.Drawing.Font("Tahoma", 9); lab7.Appearance.TextOptions.HAlignment = HorzAlignment.Center; lab7.AutoSizeMode = LabelAutoSizeMode.None; lab7.Name = guid; lab7.Click += PanelClick; LabelControl lab8 = new LabelControl(); //任务状态 0等待任务开始 1 任务开始 2 途中待命 3 站内待命 4 中止任务 5 暂停调用 6 恢复调用 7 任务完成 8 交接完成 switch (statu) { case "0": lab8.Text = "等待任务开始"; break; case "1": lab8.Text = "任务开始"; break; case "2": lab8.Text = "途中待命"; break; case "3": lab8.Text = "站内待命"; break; case "4": lab8.Text = "中止任务"; break; case "5": lab8.Text = "暂停调用"; break; case "6": lab8.Text = "恢复调用"; break; case "7": lab8.Text = "任务完成"; break; } lab8.Dock = DockStyle.Fill; lab8.ForeColor = System.Drawing.Color.FromArgb(64, 64, 64); lab8.Appearance.Font = new System.Drawing.Font("Tahoma", 9); lab8.Appearance.TextOptions.HAlignment = HorzAlignment.Center; lab8.AutoSizeMode = LabelAutoSizeMode.None; lab8.Name = guid; lab8.Click += PanelClick; LabelControl lab10 = new LabelControl(); lab10.Text = "任务进度"; lab10.Dock = DockStyle.Fill; lab10.ForeColor = System.Drawing.Color.FromArgb(64, 64, 64); lab10.Appearance.Font = new System.Drawing.Font("Tahoma", 9); lab10.Appearance.TextOptions.HAlignment = HorzAlignment.Center; lab10.AutoSizeMode = LabelAutoSizeMode.None; lab10.Name = guid; lab10.Click += PanelClick; LabelControl lab11 = new LabelControl(); // 任务进度 -1 等待接受指令 0确认接收指令 1 出车 2到达现场 3病人上车 4 开始转送 5 转送完成 6 返回医院 7 到达医院 switch (jindu) { case "-1": lab11.Text = "等待接受指令"; break; case "0": lab11.Text = "确认接收指令"; break; case "1": lab11.Text = "出车"; break; case "2": lab11.Text = "到达现场"; break; case "3": lab11.Text = "病人上车"; break; case "4": lab11.Text = "开始转送"; break; case "5": lab11.Text = "转送完成"; break; case "6": lab11.Text = "返回医院"; break; case "7": lab11.Text = "到达医院"; break; } lab11.Dock = DockStyle.Fill; lab11.ForeColor = System.Drawing.Color.FromArgb(64, 64, 64); lab11.Appearance.Font = new System.Drawing.Font("Tahoma", 9); lab11.Appearance.TextOptions.HAlignment = HorzAlignment.Center; lab11.AutoSizeMode = LabelAutoSizeMode.None; lab11.Name = guid; lab11.Click += PanelClick; t2.Controls.AddRange(new Control[] { lab3, lab4, lab5, lab6, lab7, lab8, lab10, lab11 }); t2.SetCell(lab3, 0, 0); t2.SetCell(lab4, 0, 1); t2.SetCell(lab5, 1, 0); t2.SetCell(lab6, 1, 1); t2.SetCell(lab7, 2, 0); t2.SetCell(lab8, 2, 1); t2.SetCell(lab10, 3, 0); t2.SetCell(lab11, 3, 1); conten.Controls.Add(t2); #endregion } private void PanelClick(object sender, EventArgs e) { string guid = ((System.Windows.Forms.Control)sender).Name; var isMath = Regex.IsMatch(guid, guid_match); if (Regex.IsMatch(guid, guid_match)) { Form_TaskDetailInfo from = new Form_TaskDetailInfo(guid, 1); from.Owner = this; from.Show(); } else { XtraMessageBox.Show("不是正确的Guid格式"); } } private void labelControl2_Click(object sender, EventArgs e) { Form_CurrentAllTaskInfo form = new Form_CurrentAllTaskInfo(); form.WindowState = FormWindowState.Maximized; form.Show(); } } }