StableVersion4.3/HL_FristAidPlatform_PreHosp.../Form_CurrentTaskInfo.cs

485 lines
19 KiB
C#

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
{
/// <summary>
/// 当前页
/// </summary>
public int curPage = 1;
/// <summary>
/// 每页大小
/// </summary>
public int pageSize = 100;
/// <summary>
/// 所有记录条数
/// </summary>
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();
};
}
/// <summary>
/// 今日统计
/// </summary>
/// <param name="hospitalGuid"></param>
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<DrvingCensusDTO>(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;
}
/// <summary>
/// 当天调度车辆状况
/// </summary>
/// <param name="guid"></param>
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<object>("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);
}
}));
});
}
/// <summary>
///
/// </summary>
/// <param name="width">容器宽度</param>
/// <param name="total">数据条数</param>
/// <param name="dt">数据</param>
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();
}
}
}