449 lines
22 KiB
C#
449 lines
22 KiB
C#
using HelperDB;
|
|
using Newtonsoft.Json;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
|
|
|
|
namespace DrawGraph
|
|
{
|
|
/// <summary>
|
|
/// 监测管理类
|
|
/// </summary>
|
|
public class MonitorManage : AreaManageBase
|
|
{
|
|
/// <summary>
|
|
/// 图表的对象
|
|
/// </summary>
|
|
ChartPackObj chartPack = null;
|
|
/// <summary>
|
|
/// 当前手术对象
|
|
/// </summary>
|
|
private OperationRecord myOpeRecord = null;
|
|
public MonitorManage()
|
|
{
|
|
init();
|
|
}
|
|
public MonitorManage(object _operationRecor, ZedGraphControl _zedControl, TemplateManage _template, string _name) : base(_operationRecor, _zedControl, _template, _name)
|
|
{
|
|
init();
|
|
}
|
|
|
|
public void init()
|
|
{
|
|
//图表的对象
|
|
chartPack = GetPackObjectOTag("PhysioDataManage_ChartPackObj_6") as ChartPackObj;
|
|
//自己要用的手术对象
|
|
myOpeRecord = OpeRecord as OperationRecord;
|
|
}
|
|
#region 重写的事件
|
|
/// <summary>
|
|
/// 鼠标点击画板
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
public override void MouseDown(ZedGraphControl sender, MouseEventArgs e)
|
|
{
|
|
//if (e.Button == System.Windows.Forms.MouseButtons.Left)
|
|
//{
|
|
// MessageBox.Show(this.GetType().Name + "is Click Left Button");
|
|
//}
|
|
}
|
|
public override void MouseMove(ZedGraphControl sender, MouseEventArgs e)
|
|
{
|
|
}
|
|
public override void MouseUp(ZedGraphControl sender, MouseEventArgs e)
|
|
{
|
|
}
|
|
public override void MouseDoubleClick(ZedGraphControl sender, MouseEventArgs e)
|
|
{
|
|
}
|
|
public override void KeyUp(ZedGraphControl sender, KeyEventArgs e)
|
|
{
|
|
}
|
|
public override void Bind()
|
|
{
|
|
try
|
|
{
|
|
init();
|
|
|
|
List<PackObjBase> ables = PackManage.ListPob.Where<PackObjBase>(s => s is AbleEditPackObj).ToList<PackObjBase>();
|
|
foreach (PackObjBase pack in ables)
|
|
{
|
|
AbleEditPackObj ableEdit = pack as AbleEditPackObj;
|
|
|
|
if (ableEdit != null)
|
|
{
|
|
if (ableEdit.ControlType == EControlType.Panel)
|
|
{
|
|
ableEdit.IsVisible = true;
|
|
Panel pan = ableEdit.CControl as Panel;
|
|
if (pan != null)
|
|
{
|
|
if (pan.Controls.Count == 0)
|
|
{
|
|
Font font = new System.Drawing.Font("微软雅黑", 7f);
|
|
int pyl = 1;
|
|
if (myOpeRecord.ComputerRect.Width >= 3840)
|
|
{
|
|
font = new System.Drawing.Font("微软雅黑", 11f);
|
|
}
|
|
else if (myOpeRecord.ComputerRect.Width >= 2560)
|
|
{
|
|
font = new System.Drawing.Font("微软雅黑", 9f);
|
|
}
|
|
else if (myOpeRecord.ComputerRect.Width >= 1920)
|
|
{
|
|
font = new System.Drawing.Font("宋体", 9f);
|
|
}
|
|
else if (myOpeRecord.ComputerRect.Width >= 1600)
|
|
{
|
|
font = new System.Drawing.Font("宋体", 7f);
|
|
}
|
|
else if (myOpeRecord.ComputerRect.Width >= 1024)
|
|
{
|
|
font = new System.Drawing.Font("宋体", 5f);
|
|
}
|
|
|
|
LinesPackObj pack2 = template.GetPackObjectOTag<LinesPackObj>("MonitorManage_LinesPackObj_9");
|
|
int RowsCount = 4;
|
|
if (pack2 != null)
|
|
RowsCount = Convert.ToInt32(pack2.XPageSpan / pack2.XMajorGridStep);
|
|
//pan.Controls.Clear();
|
|
ToolTip toolTip1 = new System.Windows.Forms.ToolTip();
|
|
int Width = pan.Width;
|
|
int Height = pan.Height / RowsCount;
|
|
List<Panel> panPanels = new List<Panel>();
|
|
//循环加载数值生命体征
|
|
for (int x = 0; x < myOpeRecord.PhysioConfigList.Count; x++)
|
|
{
|
|
PhysioDataConfig ade = myOpeRecord.PhysioConfigList[x];
|
|
if (ade.IsDefalultShow == false) continue;
|
|
if (!ade.ShowText) continue;
|
|
System.Windows.Forms.Panel panel = new System.Windows.Forms.Panel();
|
|
panel.Tag = ade;
|
|
panel.Dock = System.Windows.Forms.DockStyle.Top;
|
|
panel.Size = new System.Drawing.Size(Width, Height);
|
|
for (int i = (240 / 5); i >= 0; i--)
|
|
{
|
|
DateTime SpanTime = getInRoomSpanTime(myOpeRecord.PageBegin.AddMinutes(i * 5));
|
|
PhysioData pdNew = PhysioDataConfig.newPhysioData(ade, myOpeRecord.Id.Value, SpanTime, -1);
|
|
|
|
System.Windows.Forms.TextBox textNum = new System.Windows.Forms.TextBox();
|
|
textNum.Name = pdNew.config.Id + "" + SpanTime.ToString("HHmm");
|
|
textNum.Tag = pdNew;
|
|
textNum.Font = font;
|
|
textNum.Multiline = true;
|
|
textNum.Width = Width / (240 / 5) + pyl;
|
|
textNum.Height = panel.Height;
|
|
textNum.Dock = System.Windows.Forms.DockStyle.Left;
|
|
textNum.Leave += TextNum_Leave;
|
|
textNum.DoubleClick += TextNum_DoubleClick;
|
|
toolTip1.SetToolTip(textNum, SpanTime.ToString("HH:mm"));
|
|
panel.Controls.Add(textNum);
|
|
}
|
|
panPanels.Add(panel);
|
|
}
|
|
for (int x = 0; x < myOpeRecord.PhysioAnesConfigList.Count; x++)
|
|
{
|
|
PhysioDataConfig ade = myOpeRecord.PhysioAnesConfigList[x];
|
|
if (ade.IsDefalultShow == false) continue;
|
|
System.Windows.Forms.Panel panel = new System.Windows.Forms.Panel();
|
|
panel.Tag = ade;
|
|
panel.Dock = System.Windows.Forms.DockStyle.Top;
|
|
panel.Size = new System.Drawing.Size(Width, Height);
|
|
for (int i = (240 / ade.YAisx); i >= 0; i--)
|
|
{
|
|
DateTime SpanTime = getInRoomSpanTime(myOpeRecord.PageBegin.AddMinutes(i * ade.YAisx));
|
|
PhysioData pdNew = PhysioDataConfig.newPhysioData(ade, myOpeRecord.Id.Value, SpanTime, -1);
|
|
//if (ade.ImgPath != null && ade.ImgPath != "")
|
|
//{
|
|
// System.Windows.Forms.ComboBox textNum = new System.Windows.Forms.ComboBox();
|
|
// textNum.Items.AddRange(ade.ImgPath.Split('|'));
|
|
// textNum.Name = pdNew.config.Id + "" + SpanTime.ToString("HHmm");
|
|
// textNum.Tag = pdNew;
|
|
// textNum.Font = new System.Drawing.Font("微软雅黑", fontSize);
|
|
// textNum.Width = Width / (240 / ade.YAisx) + 1;
|
|
// textNum.Height = panel.Height;
|
|
// textNum.Dock = System.Windows.Forms.DockStyle.Left;
|
|
// textNum.DropDownStyle = ComboBoxStyle.DropDownList;
|
|
// textNum.Leave += ComeBoxNum_Leave;
|
|
// toolTip1.SetToolTip(textNum, SpanTime.ToString("HH:mm"));
|
|
// panel.Controls.Add(textNum);
|
|
//}
|
|
System.Windows.Forms.TextBox textNum = new System.Windows.Forms.TextBox();
|
|
textNum.Name = pdNew.config.Id + "" + SpanTime.ToString("HHmm");
|
|
textNum.Tag = pdNew;
|
|
textNum.Font = font;
|
|
textNum.Multiline = true;
|
|
textNum.Width = Width / (240 / ade.YAisx) + pyl;
|
|
textNum.Height = panel.Height;
|
|
textNum.Dock = System.Windows.Forms.DockStyle.Left;
|
|
textNum.Leave += TextNum_Leave;
|
|
textNum.DoubleClick += TextNum_DoubleClick;
|
|
toolTip1.SetToolTip(textNum, SpanTime.ToString("HH:mm"));
|
|
panel.Controls.Add(textNum);
|
|
}
|
|
panPanels.Add(panel);
|
|
}
|
|
|
|
System.Windows.Forms.Panel wmpanel = new System.Windows.Forms.Panel();
|
|
wmpanel.Size = pan.Size;
|
|
wmpanel.Dock = DockStyle.Fill;
|
|
for (int i = RowsCount - 1; i >= 0; i--)
|
|
{
|
|
if (i > panPanels.Count - 1)
|
|
{
|
|
System.Windows.Forms.Panel panel = new System.Windows.Forms.Panel();
|
|
panel.Tag = null;
|
|
panel.Dock = System.Windows.Forms.DockStyle.Top;
|
|
panel.Size = new System.Drawing.Size(Width, Height);
|
|
for (int j = (240 / 5); j >= 0; j--)
|
|
{
|
|
DateTime SpanTime = getInRoomSpanTime(myOpeRecord.PageBegin.AddMinutes(j * 5));
|
|
System.Windows.Forms.TextBox textNum = new System.Windows.Forms.TextBox();
|
|
textNum.Font = font;
|
|
textNum.Multiline = true;
|
|
textNum.Width = Width / (240 / 5) + pyl;
|
|
textNum.ReadOnly = true;
|
|
textNum.Height = panel.Height;
|
|
textNum.Dock = System.Windows.Forms.DockStyle.Left;
|
|
toolTip1.SetToolTip(textNum, SpanTime.ToString("HH:mm"));
|
|
panel.Controls.Add(textNum);
|
|
}
|
|
panPanels.Add(panel);
|
|
};
|
|
|
|
wmpanel.Controls.Add(panPanels[i]);
|
|
}
|
|
pan.Controls.Clear();
|
|
pan.Controls.Add(wmpanel);
|
|
|
|
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
DrawPhysioData();
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 画生理数据
|
|
/// </summary>
|
|
private void DrawPhysioData()
|
|
{
|
|
DataTable dtPhysioData = getByOpeIDIsPhysioData(myOpeRecord.Id.Value);
|
|
if (dtPhysioData.Rows.Count <= 0)
|
|
{
|
|
foreach (PhysioDataConfig item in myOpeRecord.PhysioConfigList)
|
|
{
|
|
item.clearAddObj(ZedControl);
|
|
}
|
|
foreach (PhysioDataConfig item in myOpeRecord.PhysioAnesConfigList)
|
|
{
|
|
item.clearAddObj(ZedControl);
|
|
}
|
|
return;
|
|
}
|
|
if (dtPhysioData != null && dtPhysioData.Rows.Count > 0)
|
|
{
|
|
foreach (PhysioDataConfig addPP in myOpeRecord.PhysioConfigList)
|
|
{
|
|
addPP.clearAddObj(ZedControl);
|
|
if (addPP.IsDefalultShow == false) continue;
|
|
for (int i = 0; i < dtPhysioData.Rows.Count; i++)
|
|
{
|
|
if (dtPhysioData.Rows[i]["Name"].ToString().Equals(addPP.Name.ToString()))
|
|
{
|
|
PhysioData pdTemp = PhysioDataConfig.newPhysioData(addPP, myOpeRecord.Id.Value, DateTime.Parse(dtPhysioData.Rows[i]["RecordTime"].ToString()), dtPhysioData.Rows[i]["Value"].ToString());
|
|
addPP.AddPointItem(pdTemp, false);
|
|
}
|
|
}
|
|
}
|
|
foreach (PhysioDataConfig addPP in myOpeRecord.PhysioAnesConfigList)
|
|
{
|
|
addPP.clearAddObj(ZedControl);
|
|
if (addPP.IsDefalultShow == false) continue;
|
|
for (int i = 0; i < dtPhysioData.Rows.Count; i++)
|
|
{
|
|
if (dtPhysioData.Rows[i]["Name"].ToString().Equals(addPP.Name.ToString()))
|
|
{
|
|
PhysioData pdTemp = PhysioDataConfig.newPhysioData(addPP, myOpeRecord.Id.Value, DateTime.Parse(dtPhysioData.Rows[i]["RecordTime"].ToString()), dtPhysioData.Rows[i]["Value"].ToString());
|
|
addPP.AddText(pdTemp);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
public DateTime getInRoomSpanTime(DateTime time)
|
|
{
|
|
DateTime resultTime = time;
|
|
//for (int i = (240 / 5); i >= 0; i--)
|
|
//{
|
|
// DateTime spanTime = myOpeRecord.InRoomTime.Value.AddMinutes(i * 5);
|
|
// if (spanTime >= resultTime && spanTime < resultTime.AddMinutes(5))
|
|
// {
|
|
// resultTime = spanTime;
|
|
// break;
|
|
// }
|
|
//}
|
|
return resultTime;
|
|
}
|
|
|
|
public string TempValue;
|
|
private void TextNum_Leave(object sender, EventArgs e)
|
|
{
|
|
TextBox txtNum = sender as TextBox;
|
|
PhysioData pdNew = txtNum.Tag as PhysioData;
|
|
if (txtNum.Text.Trim() == "" && pdNew.Value > -1)
|
|
{
|
|
if (pdNew.config.ConfigType == "麻醉体征")
|
|
pdNew.config.EditDelItem(pdNew);
|
|
else
|
|
pdNew.config.DelItem(pdNew);
|
|
pdNew.Value = -1;
|
|
txtNum.Tag = pdNew;
|
|
TempValue = "";
|
|
ZedControl.Refresh();
|
|
}
|
|
else if (txtNum.Text.Trim() != "" && pdNew.Value > -1)
|
|
{
|
|
if (pdNew.Value.ToString() != txtNum.Text)
|
|
{
|
|
string value = checkValue(txtNum, pdNew);
|
|
if (value != "")
|
|
{
|
|
pdNew.ValueString = value;
|
|
if (pdNew.config.ConfigType == "麻醉体征")
|
|
pdNew.config.EditModifyItem(pdNew, pdNew);
|
|
else
|
|
pdNew.config.ModifyItem(pdNew, pdNew);
|
|
txtNum.Tag = pdNew;
|
|
TempValue = txtNum.Text.Trim();
|
|
ZedControl.Refresh();
|
|
}
|
|
}
|
|
}
|
|
else if (txtNum.Text.Trim() != "")
|
|
{
|
|
string value = checkValue(txtNum, pdNew);
|
|
if (value != "")
|
|
{
|
|
pdNew.ValueString = value;
|
|
if (pdNew.config.ConfigType == "麻醉体征")
|
|
pdNew.config.EditAddItem(pdNew);
|
|
else
|
|
pdNew.config.AddPointItem(pdNew);
|
|
txtNum.Tag = pdNew;
|
|
TempValue = txtNum.Text.Trim();
|
|
ZedControl.Refresh();
|
|
}
|
|
}
|
|
}
|
|
private void ComeBoxNum_Leave(object sender, EventArgs e)
|
|
{
|
|
ComboBox txtNum = sender as ComboBox;
|
|
PhysioData pdNew = txtNum.Tag as PhysioData;
|
|
if (txtNum.Text.Trim() == "" && pdNew.Value > -1)
|
|
{
|
|
pdNew.config.EditDelItem(pdNew);
|
|
pdNew.Value = -1;
|
|
txtNum.Tag = pdNew;
|
|
TempValue = "";
|
|
}
|
|
else if (txtNum.Text.Trim() != "" && pdNew.Value > -1)
|
|
{
|
|
if (pdNew.Value.ToString() != txtNum.Text)
|
|
{
|
|
pdNew.ValueString = txtNum.Text.Trim();
|
|
pdNew.config.EditModifyItem(pdNew, pdNew);
|
|
txtNum.Tag = pdNew;
|
|
TempValue = txtNum.Text.Trim();
|
|
}
|
|
}
|
|
else if (txtNum.Text.Trim() != "")
|
|
{
|
|
pdNew.ValueString = txtNum.Text.Trim();
|
|
pdNew.config.EditAddItem(pdNew);
|
|
txtNum.Tag = pdNew;
|
|
TempValue = txtNum.Text.Trim();
|
|
}
|
|
}
|
|
public string checkValue(TextBox txtNum, PhysioData pdNew)
|
|
{
|
|
string Result = "";
|
|
double value = -1;
|
|
if (pdNew.config.ConfigType == "生命体征" || pdNew.config.ShowText == true)
|
|
{
|
|
if (!double.TryParse(txtNum.Text.ToString(), out value))
|
|
{
|
|
MessageBox.Show("请填写正确数值!", "系统提示");
|
|
txtNum.Focus();
|
|
}
|
|
else
|
|
{
|
|
if (value < pdNew.config.WarningLowLimit || value > pdNew.config.WarningHighLimit)
|
|
{
|
|
DialogResult dr = MessageBox.Show("数值:" + value + " 超出 " + pdNew.config.Name + "[" + pdNew.config.WarningLowLimit + "-" + pdNew.config.WarningHighLimit + "] 报警范围! ", "系统提示");//, MessageBoxButtons.YesNo); //if (dr != DialogResult.Yes) { txtNum.Focus(); }
|
|
if (value < pdNew.config.WarningLowLimit)
|
|
{
|
|
value = pdNew.config.WarningLowLimit;
|
|
}
|
|
if (value > pdNew.config.WarningHighLimit)
|
|
{
|
|
value = pdNew.config.WarningHighLimit;
|
|
}
|
|
}
|
|
}
|
|
if (value > 0) Result = value.ToString();
|
|
}
|
|
else
|
|
{
|
|
Result = txtNum.Text.ToString();
|
|
}
|
|
return Result;
|
|
}
|
|
private void TextNum_DoubleClick(object sender, EventArgs e)
|
|
{
|
|
TextBox txtNum = sender as TextBox;
|
|
if (TempValue != "")
|
|
{
|
|
txtNum.Text = TempValue;
|
|
}
|
|
}
|
|
|
|
#endregion 重写的事件结束
|
|
public static DataTable getByOpeIDIsPhysioData(int operationId)
|
|
{
|
|
string sqlStr = "SELECT [PhysioDataConfig].Name , PhysioData.RecordTime, PhysioData.[Value] FROM [dbo].[PhysioDataConfig] INNER JOIN PhysioData ON [PhysioDataConfig].Id = PhysioData.PhysioDataConfigId where PatientId = " + operationId + " order by PhysioDataConfigId,PhysioData.RecordTime ASC";
|
|
return DBHelper.GetDataTable(sqlStr);
|
|
}
|
|
public double getYPositionByListIndex(double index, double yTop, double yBottom, int rowCount)
|
|
{
|
|
double heightT = ZedControl.Height * (yBottom - yTop);
|
|
double setpTemp = heightT / rowCount;
|
|
//求一格在实际高度中的百分比
|
|
double bfb = (setpTemp / heightT);
|
|
//两线之间度*百分比得到一格的百分比高度
|
|
double ygBFB = (yBottom - yTop) * bfb;
|
|
double y = ygBFB * index;
|
|
return y;
|
|
}
|
|
}
|
|
}
|