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
{
///
/// 监测管理类
///
public class MonitorManage : AreaManageBase
{
///
/// 监测文本的对象
///
TextPackObj janCePack = null;
///
/// 图表的对象
///
ChartPackObj chartPack = null;
///
/// 当前手术对象
///
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()
{
//监测文本的对象
janCePack = GetPackObjectOTag("PhysioDataManage_TextPackObj_17") as TextPackObj;
//图表的对象
chartPack = GetPackObjectOTag("PhysioDataManage_ChartPackObj_6") as ChartPackObj;
//自己要用的手术对象
myOpeRecord = OpeRecord as OperationRecord;
}
#region 重写的事件
///
/// 鼠标点击画板
///
///
///
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 ables = PackManage.ListPob.Where(s => s is AbleEditPackObj).ToList();
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("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 panPanels = new List();
//循环加载数值生命体征
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;
}
}
///
/// 画生理数据
///
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;
}
}
}