1039 lines
		
	
	
		
			44 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			1039 lines
		
	
	
		
			44 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using HelperDB;
 | ||
| using Newtonsoft.Json;
 | ||
| using AIMSExtension;
 | ||
| using System;
 | ||
| using System.Collections.Generic;
 | ||
| using System.Data;
 | ||
| using System.Drawing;
 | ||
| using System.Linq;
 | ||
| using System.Text;
 | ||
| using System.Windows.Forms;
 | ||
| using DevComponents.DotNetBar;
 | ||
| using System.Xml.Linq;
 | ||
| using System.Runtime.InteropServices;
 | ||
| 
 | ||
| namespace DrawGraph
 | ||
| {
 | ||
|     [Serializable, JsonObject(MemberSerialization.OptOut)]
 | ||
|     public class PhysioDataManage : AreaManageBase
 | ||
|     {
 | ||
|         /// <summary>
 | ||
|         /// 监测文本的对象
 | ||
|         /// </summary>
 | ||
|         TextPackObj janCePack = null;
 | ||
|         /// <summary>
 | ||
|         /// 图表的对象
 | ||
|         /// </summary>
 | ||
|         ChartPackObj chartPack = null;
 | ||
|         /// <summary>
 | ||
|         /// 动态填写对象
 | ||
|         /// </summary>
 | ||
|         AbleEditPackObj phListPack = null;
 | ||
|         /// <summary>
 | ||
|         /// 当前选中的生命体征对象 未改变前
 | ||
|         /// </summary>
 | ||
|         private PhysioData CurPhysioData = null;
 | ||
|         /// <summary>
 | ||
|         /// 悬浮选中的生命体征
 | ||
|         /// </summary>
 | ||
|         private PhysioData selPhysioData = null;
 | ||
|         /// <summary>
 | ||
|         /// 当前手术对象
 | ||
|         /// </summary>
 | ||
|         private OperationRecord myOpeRecord = null;
 | ||
|         /// <summary>
 | ||
|         /// 单例悬浮显示 公用
 | ||
|         /// </summary>
 | ||
|         private TipBox aSyncTip = null;
 | ||
| 
 | ||
| 
 | ||
|         #region 初始化生命体征区域
 | ||
|         public PhysioDataManage()
 | ||
|         {
 | ||
|             init();
 | ||
|         }
 | ||
|         public PhysioDataManage(object _operationRecor, DrawGraph.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;
 | ||
|             //动态生命体征填写对象 
 | ||
|             phListPack = template.GetPackObjectOTag<AbleEditPackObj>("MonitorManage_AbleEditPackObj_20_OperationRecord_SpareSeven");
 | ||
| 
 | ||
|             //自己要用的手术对象
 | ||
|             myOpeRecord = OpeRecord as OperationRecord;
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 初始画的前置方法
 | ||
|         /// </summary>
 | ||
|         public override void PrepositiveMethod()
 | ||
|         {
 | ||
|             //在这里可以初始化时间軕
 | ||
|             List<PackObjBase> AxisList = PackManage.ListPob.Where<PackObjBase>(s => s is XhAxisPackObj || s is Xd2AxisPackObj).ToList<PackObjBase>();
 | ||
|             foreach (PackObjBase pack in AxisList)
 | ||
|             {
 | ||
|                 AkxisPackObj axis = pack as AkxisPackObj;
 | ||
|                 if (axis != null)
 | ||
|                 {
 | ||
|                     DateTime dt = DateTime.Now.AddMinutes(-DateTime.Now.Minute).AddMinutes(15).AddSeconds(-DateTime.Now.Second).AddMilliseconds(-DateTime.Now.Millisecond);
 | ||
|                     axis.BeginTime = dt;
 | ||
|                 }
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 初始画的后置方法
 | ||
|         /// </summary>
 | ||
|         public override void FollowUpMethod()
 | ||
|         {
 | ||
|             init();
 | ||
|             initLegend(ZedControl.GraphPane);
 | ||
|             initChart(ZedControl.GraphPane);
 | ||
|         }
 | ||
| 
 | ||
|         public override void clearSelectCouve_Click()
 | ||
|         {
 | ||
|             if (myOpeRecord.SelPhysioConfig != null && myOpeRecord.SelPhysioConfig.IsClick == true)
 | ||
|             {
 | ||
|                 System.Windows.Forms.DialogResult dr = System.Windows.Forms.MessageBox.Show("是否删除当前选项的所有数据?", "系统提示", System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Information);
 | ||
|                 if (dr == System.Windows.Forms.DialogResult.Yes)
 | ||
|                 {
 | ||
|                     if (myOpeRecord.SelPhysioConfig.ShowText == true)
 | ||
|                     {
 | ||
|                         foreach (PointPair pp in myOpeRecord.SelPhysioConfig.APhysioParams)
 | ||
|                         {
 | ||
|                             PhysioData pd = myOpeRecord.SelPhysioConfig.PointPairToPhysioData(pp);
 | ||
|                             if (pd != null)
 | ||
|                                 myOpeRecord.SelPhysioConfig.delAddObj(pd);
 | ||
|                         }
 | ||
|                     }
 | ||
|                     foreach (PointPair pp in myOpeRecord.SelPhysioConfig.APhysioParams)
 | ||
|                     {
 | ||
|                         PhysioData pd = myOpeRecord.SelPhysioConfig.PointPairToPhysioData(pp);
 | ||
|                         if (pd != null && pd.Value == myOpeRecord.SelPhysioConfig.HighLimit)
 | ||
|                             myOpeRecord.SelPhysioConfig.delAddObj(pd);
 | ||
|                     }
 | ||
| 
 | ||
|                     myOpeRecord.SelPhysioConfig.DelItems(myOpeRecord.PageBegin, myOpeRecord.lastPageBegin);
 | ||
|                     myOpeRecord.SelPhysioConfig.clearAddObj(ZedControl);
 | ||
| 
 | ||
| 
 | ||
|                     ZedControl.Refresh();
 | ||
|                 }
 | ||
|             }
 | ||
|         }
 | ||
|         #endregion
 | ||
| 
 | ||
|         #region 重写的事件
 | ||
|         /// <summary>
 | ||
|         /// 鼠标点击画板
 | ||
|         /// </summary>
 | ||
|         /// <param name="sender"></param>
 | ||
|         /// <param name="e"></param>
 | ||
|         public override void MouseDown(ZedGraphControl sender, MouseEventArgs e)
 | ||
|         {
 | ||
|             if (myOpeRecord != null)
 | ||
|             {
 | ||
|                 if (e.Button != System.Windows.Forms.MouseButtons.Left) return;
 | ||
|                 //清空选中框
 | ||
|                 myOpeRecord.SAreaObj.setAnasArr(ZedControl, chartPack.RealX, chartPack.RealEndX, myOpeRecord.PageBegin,
 | ||
|                     myOpeRecord.PageBegin.AddMinutes(EVERY_PAGE_TIME_SPAN));
 | ||
|                 myOpeRecord.SAreaObj.Clear();
 | ||
| 
 | ||
|                 //触发可编辑区域的事件
 | ||
|                 double y = Convert.ToDouble(Convert.ToDouble(e.Y) / Convert.ToDouble(ZedControl.Height));
 | ||
|                 double x = Convert.ToDouble(Convert.ToDouble(e.X) / Convert.ToDouble(ZedControl.Width));
 | ||
|                 ZedGraphControl sender1 = sender as ZedGraphControl;
 | ||
| 
 | ||
|                 PointF mousePt = new PointF(e.X, e.Y);
 | ||
|                 GraphPane pane = sender1.MasterPane.FindChartRect(mousePt);
 | ||
|                 //如果在图例范围内
 | ||
|                 if (isLegendArea(sender1, mousePt))
 | ||
|                 {
 | ||
|                     //取得点击位置图例的中文
 | ||
|                     PhysioDataConfig appTemp = reClickParamName(sender1, mousePt);
 | ||
|                     ClickPhysioDataConfig(e, appTemp);
 | ||
|                 }
 | ||
|                 //如果点击在麻醉单子范围内
 | ||
|                 else if (pane != null)
 | ||
|                 {
 | ||
|                     if (myOpeRecord.SelPhysioConfig != null && myOpeRecord.SelPhysioConfig.IsClick)
 | ||
|                     {
 | ||
|                         bool isHave = false;
 | ||
| 
 | ||
|                         PhysioData pdTemp = rePD(sender, e);
 | ||
|                         if (pdTemp == null) return;
 | ||
| 
 | ||
|                         foreach (PointPair pp in myOpeRecord.SelPhysioConfig.APhysioParams)
 | ||
|                         {
 | ||
|                             if (pdTemp.isEquert(myOpeRecord.SelPhysioConfig.PointPairToPhysioData(pp)) && myOpeRecord.SelPhysioConfig.PointPairToPhysioData(pp).Value != Double.MaxValue)
 | ||
|                             {
 | ||
|                                 isHave = true;
 | ||
|                                 if (AnesOpeStatue == DoAnesOpeStatus.VIEW)
 | ||
|                                 {
 | ||
|                                     CurPhysioData = myOpeRecord.SelPhysioConfig.PointPairToPhysioData(pp);
 | ||
| 
 | ||
|                                     AnesOpeStatue = DoAnesOpeStatus.MOVEPD;
 | ||
|                                     break;
 | ||
|                                 }
 | ||
|                             }
 | ||
|                         }
 | ||
|                         if (!isHave)
 | ||
|                         {
 | ||
|                             AnesOpeStatue = DoAnesOpeStatus.ADDPD;
 | ||
|                             DateTime insTime = GetRecordTime(pdTemp.RecordTime);
 | ||
|                             myOpeRecord.SelPhysioConfig.AddMultipleItem(pdTemp, insTime, collectInterval);
 | ||
|                         }
 | ||
|                     }
 | ||
|                     else
 | ||
|                     {
 | ||
|                         if (AnesOpeStatue == DoAnesOpeStatus.VIEW)
 | ||
|                         {
 | ||
|                             PhysioData pdTemp = rePD(sender, e);
 | ||
|                             if (pdTemp == null) return;
 | ||
|                             AnesOpeStatue = DoAnesOpeStatus.SelectArea;
 | ||
|                             myOpeRecord.SAreaObj.StartPD = pdTemp;
 | ||
|                             myOpeRecord.SAreaObj.StartPDs = rePDs(sender, e);
 | ||
|                         }
 | ||
|                         //if (e.Button == System.Windows.Forms.MouseButtons.Left && e.Clicks == 1)
 | ||
|                         //{
 | ||
|                         //    if ((AnesOpeStatue == DoAnesOpeStatus.VIEW || AnesOpeStatue == DoAnesOpeStatus.SelectArea) && myOpeRecord.SelPhysioConfig == null)
 | ||
|                         //    {
 | ||
|                         //        List<PhysioData> pdTemps = rePDs(sender as ZedGraphControl, e);
 | ||
|                         //        if (pdTemps != null)
 | ||
|                         //        {
 | ||
|                         //            foreach (var pdTemp in pdTemps)
 | ||
|                         //            {
 | ||
|                         //                PhysioData pdTrue = GetPDOfPhysioParams(pdTemp);
 | ||
|                         //                if (pdTrue != null)
 | ||
|                         //                {
 | ||
|                         //                    ClickPhysioDataConfig(e, pdTrue.config);
 | ||
|                         //                    return;
 | ||
|                         //                }
 | ||
|                         //            }
 | ||
|                         //        }
 | ||
|                         //    }
 | ||
|                         //}
 | ||
|                     }
 | ||
|                 }
 | ||
|                 else
 | ||
|                 {
 | ||
|                     if (myOpeRecord.SelPhysioConfig != null)
 | ||
|                     {
 | ||
|                         myOpeRecord.SelPhysioConfig.IsClick = false;
 | ||
|                         myOpeRecord.SelPhysioConfig.onClick(e);
 | ||
|                         myOpeRecord.SelPhysioConfig = null;
 | ||
|                         //ZedControl.AxisChange();
 | ||
|                         ZedControl.Refresh();
 | ||
|                     }
 | ||
|                 }
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|         private void ClickPhysioDataConfig(MouseEventArgs e, PhysioDataConfig appTemp)
 | ||
|         {
 | ||
|             if (appTemp != null)
 | ||
|             {
 | ||
|                 if (myOpeRecord.SelPhysioConfig == null)
 | ||
|                 {
 | ||
|                     appTemp.IsClick = true;
 | ||
|                     myOpeRecord.SelPhysioConfig = appTemp;
 | ||
|                     myOpeRecord.SelPhysioConfig.PatientId = myOpeRecord.Id.Value;
 | ||
|                     myOpeRecord.SelPhysioConfig.onClick(e);
 | ||
|                 }
 | ||
|                 else
 | ||
|                 {
 | ||
|                     if (myOpeRecord.SelPhysioConfig.Name == appTemp.Name)
 | ||
|                     {
 | ||
|                         myOpeRecord.SelPhysioConfig.IsClick = false;
 | ||
|                         myOpeRecord.SelPhysioConfig.onClick(e);
 | ||
|                         myOpeRecord.SelPhysioConfig = null;
 | ||
|                     }
 | ||
|                     else
 | ||
|                     {
 | ||
|                         myOpeRecord.SelPhysioConfig.IsClick = false;
 | ||
|                         myOpeRecord.SelPhysioConfig.onClick(e);
 | ||
|                         appTemp.IsClick = true;
 | ||
|                         myOpeRecord.SelPhysioConfig = appTemp;
 | ||
|                         myOpeRecord.SelPhysioConfig.PatientId = myOpeRecord.Id.Value;
 | ||
|                         myOpeRecord.SelPhysioConfig.onClick(e);
 | ||
|                     }
 | ||
|                 }
 | ||
|                 ZedControl.Refresh();
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|         public override void MouseMove(ZedGraphControl sender, MouseEventArgs e)
 | ||
|         {
 | ||
|             double x = Convert.ToDouble(Convert.ToDouble(e.X) / Convert.ToDouble(sender.Width));
 | ||
|             double y = Convert.ToDouble(Convert.ToDouble(e.Y) / Convert.ToDouble(sender.Height));
 | ||
|             double yP = 18 / Convert.ToDouble(sender.Height);
 | ||
|             string viewStr = "";
 | ||
|             PointF mousePt = new PointF(e.X, e.Y);
 | ||
|             GraphPane pane = sender.MasterPane.FindChartRect(mousePt);
 | ||
|             if (pane != null && aSyncTip != null)
 | ||
|             {
 | ||
|                 List<PhysioData> pdNew = rePDs(sender, e);
 | ||
| 
 | ||
|                 if (pdNew != null && myOpeRecord != null)
 | ||
|                 {
 | ||
|                     PhysioData pdTrue = null;
 | ||
|                     foreach (var item in pdNew)
 | ||
|                     {
 | ||
|                         pdTrue = GetPDOfPhysioParams(item);
 | ||
|                         if (pdTrue != null)
 | ||
|                         {
 | ||
|                             string Name = pdTrue.config.Name;
 | ||
|                             if (pdTrue.config.Unit != null && pdTrue.config.Unit != "") Name += "(" + pdTrue.config.Unit + ")";
 | ||
|                             string value = pdTrue.config.Name == "体温" ? ((float)pdTrue.Value).ToString() : Math.Round(pdNew[0].Value, 0).ToString();
 | ||
|                             viewStr = Name + ":" + value + "\n时间:" + pdTrue.RecordTime.ToShortTimeString();
 | ||
|                             break;
 | ||
|                         }
 | ||
|                     }
 | ||
|                     if (viewStr == "" && pdNew.Count > 0)
 | ||
|                     {
 | ||
|                         viewStr = "值:" + Math.Round(pdNew[0].Value, 0).ToString() + "\n时间:" + pdNew[0].RecordTime.ToShortTimeString();
 | ||
|                     }
 | ||
|                 }
 | ||
|                 aSyncTip.ViewStr = viewStr;
 | ||
|                 aSyncTip.Show(x, (y + yP));
 | ||
|                 ZedControl.Refresh();
 | ||
|             }
 | ||
|             //考虑客户端拖拽数据库处理不及时 可以采用批量缓存新增修改的数据点集中处理
 | ||
|             if (AnesOpeStatue == DoAnesOpeStatus.MOVEPD || AnesOpeStatue == DoAnesOpeStatus.ADDPD)
 | ||
|             {
 | ||
|                 if (myOpeRecord.SelPhysioConfig != null)
 | ||
|                 {
 | ||
|                     PhysioData pdTemp = rePD(sender, e);
 | ||
|                     if (pdTemp == null) return;
 | ||
|                     DateTime insTime = GetRecordTime(pdTemp.RecordTime);
 | ||
|                     CurPhysioData = pdTemp;
 | ||
|                     CurPhysioData.RecordTime = insTime;
 | ||
| 
 | ||
|                     myOpeRecord.SelPhysioConfig.ModifyAddItem(CurPhysioData, CurPhysioData);
 | ||
|                     ZedControl.Refresh();
 | ||
|                 }
 | ||
|             }
 | ||
|             else
 | ||
|             {
 | ||
|                 if (AnesOpeStatue == DoAnesOpeStatus.SelectArea)
 | ||
|                 {
 | ||
|                     try
 | ||
|                     {
 | ||
|                         PhysioData pdNew = rePD(sender, e);
 | ||
|                         if (pdNew == null) return;
 | ||
|                         if (AnesOpeStatue == DoAnesOpeStatus.SelectArea)
 | ||
|                         {
 | ||
|                             myOpeRecord.SAreaObj.EndPd = pdNew;
 | ||
|                             myOpeRecord.SAreaObj.EndPds = rePDs(sender, e);
 | ||
|                             myOpeRecord.SAreaObj.Draw();
 | ||
|                         }
 | ||
|                     }
 | ||
|                     catch { return; }
 | ||
|                     finally
 | ||
|                     {
 | ||
|                         //ZedControl.AxisChange();
 | ||
|                         ZedControl.Refresh();
 | ||
|                     }
 | ||
|                 }
 | ||
|             }
 | ||
|         }
 | ||
|         public override void MouseUp(ZedGraphControl sender, MouseEventArgs e)
 | ||
|         {
 | ||
|             if (OpeRecord == null) return;
 | ||
|             double y = Convert.ToDouble(Convert.ToDouble(e.Y) / Convert.ToDouble(ZedControl.Height));
 | ||
|             double x = Convert.ToDouble(Convert.ToDouble(e.X) / Convert.ToDouble(ZedControl.Width));
 | ||
| 
 | ||
|             if (myOpeRecord.SelPhysioConfig != null && myOpeRecord.SelPhysioConfig.IsClick == true)
 | ||
|             {
 | ||
|                 PhysioData pdTemp = rePD(sender, e);
 | ||
|                 if (pdTemp == null) return;
 | ||
|                 if (AnesOpeStatue == DoAnesOpeStatus.MOVEPD)
 | ||
|                 {
 | ||
|                     if (CurPhysioData.isEquert(pdTemp))
 | ||
|                     {
 | ||
|                         PhysioData newPd = myOpeRecord.SelPhysioConfig.MoveItem(pdTemp);
 | ||
|                         if (newPd != null)//&& CurPhysioData.Value != newPd.Value
 | ||
|                         {
 | ||
|                             myOpeRecord.SelPhysioConfig.ModifyItem(CurPhysioData, newPd);
 | ||
|                         }
 | ||
|                     }
 | ||
|                     CurPhysioData = null;
 | ||
|                 }
 | ||
| 
 | ||
|                 AnesOpeStatue = DoAnesOpeStatus.VIEW;
 | ||
|                 //ZedControl.AxisChange();
 | ||
|                 ZedControl.Refresh();
 | ||
|             }
 | ||
|             else
 | ||
|             {
 | ||
|                 if (AnesOpeStatue == DoAnesOpeStatus.SelectArea)
 | ||
|                 {
 | ||
|                     AnesOpeStatue = DoAnesOpeStatus.VIEW;
 | ||
|                     DeletePhysios();
 | ||
|                 }
 | ||
|             }
 | ||
| 
 | ||
|             return;
 | ||
|         }
 | ||
|         public override void MouseDoubleClick(ZedGraphControl sender, MouseEventArgs e)
 | ||
|         {
 | ||
|             if (myOpeRecord == null) return;//|| IsReadOnly == true
 | ||
|             //只有鼠标左键双击才有效
 | ||
|             if (e.Button == System.Windows.Forms.MouseButtons.Left && e.Clicks == 2)
 | ||
|             {
 | ||
|                 if ((AnesOpeStatue == DoAnesOpeStatus.VIEW || AnesOpeStatue == DoAnesOpeStatus.SelectArea) && myOpeRecord.SelPhysioConfig == null)
 | ||
|                 {
 | ||
|                     List<PhysioData> pdTemps = rePDs(sender as ZedGraphControl, e);
 | ||
|                     if (pdTemps != null)
 | ||
|                     {
 | ||
|                         foreach (var pdTemp in pdTemps)
 | ||
|                         {
 | ||
|                             PhysioData pdTrue = GetPDOfPhysioParams(pdTemp);
 | ||
|                             if (pdTrue != null)
 | ||
|                             {
 | ||
|                                 pdTrue.config.DelItem(pdTrue);
 | ||
|                             }
 | ||
|                             //if (myOpeRecord.SelPhysioConfig != null)
 | ||
|                             //    ClickPhysioDataConfig(e, pdTrue.config);
 | ||
|                         }
 | ||
|                     }
 | ||
|                 }
 | ||
|             }
 | ||
|         }
 | ||
|         public override void KeyUp(ZedGraphControl sender, KeyEventArgs e)
 | ||
|         {
 | ||
|             if (e.KeyCode == Keys.Delete)
 | ||
|             {
 | ||
|                 if (myOpeRecord != null)
 | ||
|                 {
 | ||
|                     if (AnesOpeStatue == DoAnesOpeStatus.VIEW)
 | ||
|                     {
 | ||
|                         DeletePhysios();
 | ||
|                     }
 | ||
|                 }
 | ||
|             }
 | ||
|         }
 | ||
|         public void DeletePhysios()
 | ||
|         {
 | ||
|             if (myOpeRecord.SAreaObj.Selected)
 | ||
|             {
 | ||
|                 double startValue = myOpeRecord.SAreaObj.EndPds[0].Value;
 | ||
|                 double endValue = myOpeRecord.SAreaObj.StartPDs[0].Value;
 | ||
|                 double startValue2 = myOpeRecord.SAreaObj.EndPds[1].Value;
 | ||
|                 double endValue2 = myOpeRecord.SAreaObj.StartPDs[1].Value;
 | ||
| 
 | ||
|                 List<int> pdTemps = SelectPhysioDataByID(myOpeRecord.Id.Value,
 | ||
|                     myOpeRecord.SAreaObj.StartPD.RecordTime,
 | ||
|                     myOpeRecord.SAreaObj.EndPd.RecordTime,
 | ||
|                    startValue, endValue);
 | ||
|                 List<int> pdTemps2 = SelectPhysioDataByID(myOpeRecord.Id.Value,
 | ||
|                      myOpeRecord.SAreaObj.StartPD.RecordTime,
 | ||
|                      myOpeRecord.SAreaObj.EndPd.RecordTime,
 | ||
|                     startValue2, endValue2);
 | ||
| 
 | ||
|                 List<PhysioDataConfig> selparameters = new List<PhysioDataConfig>();
 | ||
|                 foreach (PhysioDataConfig addPP in myOpeRecord.PhysioConfigList)
 | ||
|                 {
 | ||
|                     bool istrue = false;
 | ||
|                     foreach (int item in pdTemps)
 | ||
|                     {
 | ||
|                         if (item == addPP.Id && addPP.YAisx == 0)
 | ||
|                         {
 | ||
|                             istrue = true;
 | ||
|                             break;
 | ||
|                         }
 | ||
|                     }
 | ||
|                     foreach (int item in pdTemps2)
 | ||
|                     {
 | ||
|                         if (item == addPP.Id && addPP.YAisx == 1)
 | ||
|                         {
 | ||
|                             istrue = true;
 | ||
|                             break;
 | ||
|                         }
 | ||
|                     }
 | ||
|                     if (istrue == true)
 | ||
|                         selparameters.Add(addPP);
 | ||
|                 }
 | ||
|                 if (selparameters.Count <= 0) return;
 | ||
| 
 | ||
|                 DeletePhysios frm = new DeletePhysios(myOpeRecord.Id.Value,
 | ||
|                     myOpeRecord.SAreaObj.StartPD.RecordTime,
 | ||
|                     myOpeRecord.SAreaObj.EndPd.RecordTime,
 | ||
|                    startValue, endValue,
 | ||
|                    startValue2, endValue2);
 | ||
|                 frm.selparameters = selparameters;
 | ||
|                 frm.FormClosed += (a, b) =>
 | ||
|                 {
 | ||
|                     if (frm.isDelete == true)
 | ||
|                     {
 | ||
|                         myOpeRecord.SAreaObj.Clear();
 | ||
| 
 | ||
|                         template.Bind("MonitorManage");
 | ||
|                         ZedControl.Refresh();
 | ||
|                     }
 | ||
|                     else
 | ||
|                     {
 | ||
|                         myOpeRecord.SAreaObj.Clear();
 | ||
|                     }
 | ||
|                 };
 | ||
|                 frm.ShowDialog();
 | ||
| 
 | ||
|             }
 | ||
|         }
 | ||
|         #endregion 重写的事件结束
 | ||
| 
 | ||
|         #region 绑定区域数据
 | ||
|         public override void initChart()
 | ||
|         {
 | ||
|             initChart(ZedControl.GraphPane);
 | ||
|         }
 | ||
|         public override void Bind()
 | ||
|         {
 | ||
|             try
 | ||
|             {
 | ||
|                 init();
 | ||
|                 InitPhysioDataConfigList(myOpeRecord.PhysioConfigList);
 | ||
|                 //悬浮tip初始化
 | ||
|                 aSyncTip = TipBox.CreateInstance("async");
 | ||
|                 aSyncTip.setAnasArr(ZedControl, chartPack.RealX, chartPack.RealEndX, myOpeRecord.PageBegin, myOpeRecord.PageBegin.AddMinutes(EVERY_PAGE_TIME_SPAN));
 | ||
| 
 | ||
|                 myOpeRecord.SAreaObj.maxnumber = ZedControl.GraphPane.YAxis.Scale.Max;
 | ||
|                 myOpeRecord.SAreaObj.minnumber = ZedControl.GraphPane.YAxis.Scale.Min;
 | ||
| 
 | ||
|                 //DrawPhysioData();
 | ||
| 
 | ||
|                 myOpeRecord.SelPhysioConfig = null;
 | ||
|                 CurPhysioData = null;
 | ||
|             }
 | ||
|             catch (Exception ex)
 | ||
|             {
 | ||
|                 throw ex;
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|         #endregion
 | ||
| 
 | ||
|         #region 初始化标题,图注和图表
 | ||
|         /// <summary>
 | ||
|         /// 定义图注释位置
 | ||
|         /// </summary>
 | ||
|         /// <param name="myPane"></param>
 | ||
|         private void initLegend(GraphPane myPane)
 | ||
|         {
 | ||
|             Legend legend = myPane.Legend;
 | ||
|             legend.IsVisible = true;
 | ||
|             legend.Position = LegendPos.Float;//定位图标位置
 | ||
|             legend.Location = new Location(janCePack.RealX, janCePack.RealEndY, CoordType.PaneFraction);
 | ||
|             legend.Border.Width = 0;
 | ||
|             legend.Border.IsVisible = false;  //不显示图标外边框 
 | ||
|             legend.Gap = 2.0f;
 | ||
|             legend.IsHStack = false;
 | ||
|             legend.FontSpec.Size = 7f;
 | ||
|             legend.FontSpec.Fill.IsVisible = false;
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 将坐标数值对加到相应的曲线上,从而初始化曲线Chart
 | ||
|         /// </summary>
 | ||
|         /// <param name="addPhysioList"></param>
 | ||
|         private void InitPhysioDataConfigList(List<PhysioDataConfig> addPhysioList)
 | ||
|         {
 | ||
|             try
 | ||
|             {
 | ||
|                 if (janCePack == null) return;
 | ||
|                 int YRows = 0;
 | ||
|                 addPhysioList.Clear();
 | ||
|                 myOpeRecord.phListPack = phListPack;
 | ||
|                 ZedControl.GraphPane.CurveList.Clear();
 | ||
|                 //监测区域里的第1根竖线,显示数值时用
 | ||
|                 LinesPackObj pack = template.GetPackObjectOTag<LinesPackObj>("MonitorManage_LinesPackObj_9");
 | ||
|                 int RowsCount = 0;
 | ||
|                 if (pack != null)
 | ||
|                     RowsCount = Convert.ToInt32(pack.XPageSpan / pack.XMajorGridStep);
 | ||
| 
 | ||
|                 //加载生命体征图标
 | ||
|                 IList<PhysioDataConfig> dt = PhysioDataConfig.GetLifeList();
 | ||
|                 int rowNum = 1;
 | ||
|                 for (int i = 0; i < dt.Count; i++)
 | ||
|                 {
 | ||
|                     PhysioDataConfig pp = dt[i];
 | ||
|                     pp.ConfigType = "生命体征";
 | ||
|                     pp.Click += new PhysioDataConfig.ClickEventHandler(pp_Click);
 | ||
|                     string[] str = pp.Color.Split('.');
 | ||
|                     int A = int.Parse(str[0].ToString());
 | ||
|                     int R = int.Parse(str[1].ToString());
 | ||
|                     int G = int.Parse(str[2].ToString());
 | ||
|                     int B = int.Parse(str[3].ToString());
 | ||
|                     pp.ConveColor = System.Drawing.Color.FromArgb(A, R, G, B);
 | ||
| 
 | ||
|                     pp.IsValid = true;
 | ||
|                     if (pp.IsDefalultShow == false || (pp.ShowImg == false && pp.ShowText == false))
 | ||
|                     {
 | ||
|                         pp.IsValid = false;
 | ||
|                     }
 | ||
|                     if (myOpeRecord.RecoverId == 2)
 | ||
|                     {
 | ||
|                         pp.IsValid = true;
 | ||
|                         pp.ShowText = false;
 | ||
|                         pp.ShowImg = true;
 | ||
|                     }
 | ||
|                     pp.ClearTagstr(ZedControl);
 | ||
|                     pp.phListPack = phListPack;
 | ||
|                     //如果模板管理不为空
 | ||
|                     if (pack != null && rowNum <= RowsCount && pp.ShowText == true)
 | ||
|                     {
 | ||
|                         double y = pack.RealY + getYPositionByListIndex(YRows, pack.RealY, pack.RealEndY, RowsCount);
 | ||
|                         if (RowsCount != 1)
 | ||
|                             ZUtil.DrawText(pp.Name, pack.RealX, y, ZedControl, "PP" + pp.Enname, 5.5f);
 | ||
|                         pp.YLocation = y + 0.002;
 | ||
|                         YRows++;
 | ||
|                         rowNum++;
 | ||
|                     }
 | ||
|                     pp.setAnasArr(ZedControl, chartPack.RealX, chartPack.RealEndX, myOpeRecord.PageBegin,
 | ||
|                                         myOpeRecord.PageBegin.AddMinutes(EVERY_PAGE_TIME_SPAN));
 | ||
|                     bool isHave = false;
 | ||
|                     foreach (PhysioDataConfig appTemp in addPhysioList)
 | ||
|                     {
 | ||
|                         if (appTemp.Name.Equals(pp.Name))
 | ||
|                         {
 | ||
|                             isHave = true;
 | ||
|                         }
 | ||
|                     }
 | ||
|                     if (!isHave)
 | ||
|                     {
 | ||
|                         addPhysioList.Add(pp);
 | ||
|                         pp.initCurve();
 | ||
|                         pp_Click(pp, null);
 | ||
|                     }
 | ||
|                 }
 | ||
|                 if (pack != null)
 | ||
|                 {
 | ||
|                     myOpeRecord.PhysioAnesConfigList.Clear();
 | ||
|                     IList<PhysioDataConfig> dt2 = PhysioDataConfig.GetAnesList();
 | ||
|                     for (int i = 0; i < dt2.Count; i++)
 | ||
|                     {
 | ||
|                         PhysioDataConfig pp = dt2[i];
 | ||
|                         pp.ConfigType = "麻醉体征";
 | ||
|                         pp.ClearTagstr(ZedControl);
 | ||
|                         pp.phListPack = phListPack;
 | ||
|                         pp.IsValid = true;
 | ||
|                         if (pp.IsDefalultShow == false) pp.IsValid = false;
 | ||
|                         pp.setAnasArr(ZedControl, chartPack.RealX, chartPack.RealEndX, myOpeRecord.PageBegin,
 | ||
|                                             myOpeRecord.PageBegin.AddMinutes(EVERY_PAGE_TIME_SPAN));
 | ||
|                         pp.ClearTagstr(ZedControl);
 | ||
|                         if (rowNum <= RowsCount && pp.IsDefalultShow == true)
 | ||
|                         {
 | ||
|                             double y = pack.RealY + getYPositionByListIndex(YRows, pack.RealY, pack.RealEndY, RowsCount);
 | ||
|                             ZUtil.DrawText(pp.Name, pack.RealX, y, ZedControl, "PP" + pp.Enname + pp.Id, 5.5f);
 | ||
|                             pp.YLocation = y + 0.002;
 | ||
|                             YRows++;
 | ||
|                             rowNum++;
 | ||
|                         }
 | ||
|                         myOpeRecord.PhysioAnesConfigList.Add(pp);
 | ||
|                     }
 | ||
|                 }
 | ||
|                 if (myOpeRecord.RecoverId == 1)
 | ||
|                 {
 | ||
|                     //加载事件图标
 | ||
|                     IList<PhysioDataConfig> dtevent = PhysioDataConfig.GetEventList();
 | ||
|                     for (int i = 0; i < dtevent.Count; i++)
 | ||
|                     {
 | ||
|                         PhysioDataConfig pp = dtevent[i];
 | ||
|                         pp.ConfigType = "事件";
 | ||
|                         pp.ConveColor = System.Drawing.Color.White;
 | ||
| 
 | ||
|                         if (pp.IsDefalultShow == true)
 | ||
|                         {
 | ||
|                             pp.IsValid = true;
 | ||
|                             pp.phListPack = phListPack;
 | ||
|                             pp.setAnasArr(ZedControl, chartPack.RealX, chartPack.RealEndX, myOpeRecord.PageBegin,
 | ||
|                                                 myOpeRecord.PageBegin.AddMinutes(EVERY_PAGE_TIME_SPAN));
 | ||
|                             pp.initCurve();
 | ||
|                         }
 | ||
|                     }
 | ||
|                 }
 | ||
|             }
 | ||
|             catch (Exception ex)
 | ||
|             {
 | ||
|                 //异常处理保存
 | ||
|                 throw ex;
 | ||
|             }
 | ||
|         }
 | ||
|         public void pp_Click(object sender, EventArgs e)
 | ||
|         {
 | ||
|             PhysioDataConfig app = (PhysioDataConfig)sender;
 | ||
|             if (app.IsClick)
 | ||
|             {
 | ||
|                 app.curve.Label.FontSpec = new FontSpec("微软雅黑", 5.9f, Color.Red, true, false, true);
 | ||
|                 app.curve.Label.FontSpec.Border.IsVisible = false;
 | ||
|                 app.curve.Label.FontSpec.Fill.IsVisible = false;
 | ||
|             }
 | ||
|             else
 | ||
|             {
 | ||
|                 app.curve.Label.FontSpec = new FontSpec("微软雅黑", 5.8f, Color.Black, false, false, false);
 | ||
|                 app.curve.Label.FontSpec.Border.IsVisible = false;
 | ||
|                 app.curve.Label.FontSpec.Fill.IsVisible = false;
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|         public override void frmInstance_ConfigParam()
 | ||
|         {
 | ||
|             //既然是全局变量,并且在初始化的时候已经定义过了,为什么在此还要重新定义呢?
 | ||
|             //原因:正是因为xmlOpe是全局变量,因此,在整个窗体生命周期都没有发生改变。
 | ||
|             //即在该段时间内驻留内存,及时其他窗体将其信息改变,其操作的XML内容仍然不变。
 | ||
|             //解决办法:重新定义,使XML操作对象发生变化。 
 | ||
|             int YRows = 0;
 | ||
|             //监测区域里的第1根竖线,显示数值时用 
 | ||
|             LinesPackObj pack = template.GetPackObjectOTag<LinesPackObj>("MonitorManage_LinesPackObj_9");
 | ||
| 
 | ||
|             int RowsCount = Convert.ToInt32(pack.XPageSpan / pack.XMajorGridStep);
 | ||
|             int rowNum = 1;
 | ||
|             foreach (var pp in myOpeRecord.PhysioConfigList)
 | ||
|             {
 | ||
|                 pp.ConfigType = "生命体征";
 | ||
|                 string[] str = pp.Color.Split('.');
 | ||
|                 int A = int.Parse(str[0].ToString());
 | ||
|                 int R = int.Parse(str[1].ToString());
 | ||
|                 int G = int.Parse(str[2].ToString());
 | ||
|                 int B = int.Parse(str[3].ToString());
 | ||
|                 pp.ConveColor = System.Drawing.Color.FromArgb(A, R, G, B);
 | ||
| 
 | ||
|                 pp.IsValid = true;
 | ||
|                 if (pp.IsDefalultShow == false || (pp.ShowImg == false && pp.ShowText == false))
 | ||
|                 {
 | ||
|                     pp.IsValid = false;
 | ||
|                 }
 | ||
| 
 | ||
|                 pp.setAnasArr(ZedControl, chartPack.RealX, chartPack.RealEndX, myOpeRecord.PageBegin,
 | ||
|                                  myOpeRecord.PageBegin.AddMinutes(EVERY_PAGE_TIME_SPAN));
 | ||
|                 pp.ClearTagstr(ZedControl);
 | ||
|                 //如果模板管理不为空
 | ||
|                 if (pack != null && rowNum < 5 && pp.ShowText == true)
 | ||
|                 {
 | ||
|                     double y = pack.RealY + getYPositionByListIndex(YRows, pack.RealY, pack.RealEndY, RowsCount);
 | ||
|                     ZUtil.DrawText(pp.Name, pack.RealX, y, ZedControl, "PP" + pp.Enname, 5.5f);
 | ||
|                     pp.YLocation = y + 0.002;
 | ||
|                     YRows++;
 | ||
|                     rowNum++;
 | ||
|                 }
 | ||
| 
 | ||
|                 //重新设置曲线属性
 | ||
|                 pp.reSetCurve();
 | ||
|                 break;
 | ||
|             }
 | ||
|             if (pack != null)
 | ||
|             {
 | ||
|                 foreach (var pp in myOpeRecord.PhysioConfigList)
 | ||
|                 {
 | ||
|                     pp.ConfigType = "麻醉体征";
 | ||
|                     pp.IsValid = true;
 | ||
|                     if (pp.IsDefalultShow == false) pp.IsValid = false;
 | ||
|                     pp.setAnasArr(ZedControl, chartPack.RealX, chartPack.RealEndX, myOpeRecord.PageBegin,
 | ||
|                                         myOpeRecord.PageBegin.AddMinutes(EVERY_PAGE_TIME_SPAN));
 | ||
|                     pp.ClearTagstr(ZedControl);
 | ||
|                     if (pp.ShowText == true && rowNum < 5 && pp.IsDefalultShow == true)
 | ||
|                     {
 | ||
|                         double y = pack.RealY + getYPositionByListIndex(YRows, pack.RealY, pack.RealEndY, RowsCount);
 | ||
|                         ZUtil.DrawText(pp.Name, pack.RealX, y, ZedControl, "PP" + pp.Enname + pp.Id, 5.5f);
 | ||
|                         pp.YLocation = y + 0.002;
 | ||
|                         YRows++;
 | ||
|                         rowNum++;
 | ||
|                     }
 | ||
|                 }
 | ||
|             }
 | ||
|             //加载事件图标
 | ||
|             //IList<PhysioDataConfig> dtevent = PhysioDataConfig.GetEventList();
 | ||
|             //for (int i = 0; i < dtevent.Count; i++)
 | ||
|             //{
 | ||
|             //    PhysioDataConfig pp = dtevent[i];
 | ||
|             //    pp.ConfigType = "事件";
 | ||
|             //    pp.ConveColor = System.Drawing.Color.White;
 | ||
| 
 | ||
|             //    pp.IsValid = true;
 | ||
|             //    pp.ClearTagstr(ZedControl);
 | ||
|             //    pp.phListPack = phListPack;
 | ||
|             //    pp.setAnasArr(ZedControl, chartPack.RealX, chartPack.RealEndX, myOpeRecord.PageBegin,
 | ||
|             //                        myOpeRecord.PageBegin.AddMinutes(EVERY_PAGE_TIME_SPAN));
 | ||
|             //    pp.initCurve();
 | ||
|             //}
 | ||
| 
 | ||
|             if (phListPack != null)
 | ||
|             {
 | ||
|                 Panel pan3 = phListPack.CControl as Panel;
 | ||
|                 if (pan3 != null)
 | ||
|                 {
 | ||
|                     pan3.Controls.Clear();
 | ||
|                 }
 | ||
|             }
 | ||
|         }
 | ||
|         #endregion
 | ||
| 
 | ||
|         #region 设置采集Chart区域的位置
 | ||
|         /// <summary>
 | ||
|         /// 设置采集Chart区域的位置
 | ||
|         /// </summary>
 | ||
|         /// <param name="myPane"></param>
 | ||
|         private void initChart(GraphPane myPane)
 | ||
|         {
 | ||
|             Chart chart = myPane.Chart;
 | ||
|             chart.Fill = new Fill(System.Drawing.Color.White);
 | ||
|             chart.Border.Width = 0.0f;
 | ||
|             chart.IsRectAuto = true;
 | ||
|             float cLeft = (float)(myPane.Rect.Width * chartPack.RealX);
 | ||
|             float cTop = (float)(myPane.Rect.Height * (chartPack.RealY));
 | ||
|             float cWidth = (float)(myPane.Rect.Width * (chartPack.RealEndX - chartPack.RealX));
 | ||
|             float cHeight = (float)(myPane.Rect.Height * (chartPack.RealEndY - chartPack.RealY));
 | ||
|             chart.Rect = new System.Drawing.RectangleF(cLeft, cTop, cWidth, cHeight); //设定中间的图像显示区域chart.Rect = {X = 120.0 Y = 304.5 Width = 576.0 Height = 375.55}
 | ||
| 
 | ||
|             myPane.XAxis.MajorGrid.Color = System.Drawing.Color.Black; //大跨度网格颜色
 | ||
|         }
 | ||
|         #endregion
 | ||
| 
 | ||
|         #region 点击编辑区域后的事件方法
 | ||
|         /// <summary>
 | ||
|         /// 响应可编辑区域的点击事件
 | ||
|         /// </summary>
 | ||
|         /// <param name="sender"></param>
 | ||
|         /// <param name="e"></param>
 | ||
|         public override void editAr_Click(object sender, EventArgs e)
 | ||
|         {
 | ||
|         }
 | ||
|         #endregion
 | ||
| 
 | ||
|         #region 当前区域公用事件方法
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 从所有曲线里得到相应的点
 | ||
|         /// </summary>
 | ||
|         /// <param name="pdTemp">要查找的物理点</param>
 | ||
|         private PhysioData GetPDOfPhysioParams(PhysioData pdTemp)
 | ||
|         {
 | ||
|             selPhysioData = null;
 | ||
|             foreach (PhysioDataConfig ppter in myOpeRecord.PhysioConfigList)
 | ||
|             {
 | ||
|                 if (pdTemp.config.YAisx != ppter.YAisx) continue;
 | ||
|                 foreach (PointPair pp in ppter.APhysioParams)
 | ||
|                 {
 | ||
|                     selPhysioData = ppter.PointPairToPhysioData(pp);
 | ||
|                     if (pdTemp.isEquertTrue(selPhysioData, collectInterval.ToString()))
 | ||
|                     {
 | ||
|                         selPhysioData.config = ppter;
 | ||
|                         selPhysioData.PatientId = myOpeRecord.Id.Value;
 | ||
|                         selPhysioData.PhysioDataConfigId = ppter.Id;
 | ||
|                         return selPhysioData;
 | ||
|                     }
 | ||
|                 }
 | ||
|             }
 | ||
|             return null;
 | ||
|         }
 | ||
|         /// <summary>
 | ||
|         /// 得到生命特征泛型集合
 | ||
|         /// </summary>
 | ||
|         /// <param name="sender"></param>
 | ||
|         /// <param name="e"></param>
 | ||
|         /// <returns></returns>
 | ||
|         private List<PhysioData> rePDs(ZedGraphControl sender, MouseEventArgs e)
 | ||
|         {
 | ||
|             List<PhysioData> pdNews = new List<PhysioData>();
 | ||
|             try
 | ||
|             {
 | ||
|                 double x, x2;
 | ||
|                 double[] y;
 | ||
|                 double[] y2;
 | ||
| 
 | ||
|                 PointF mousePt = new PointF(e.X, e.Y);
 | ||
| 
 | ||
|                 ZedGraphControl sender1 = sender as ZedGraphControl;
 | ||
|                 GraphPane pane = sender1.MasterPane.FindChartRect(mousePt);
 | ||
|                 if (pane != null)
 | ||
|                 {
 | ||
|                     pane.ReverseTransform(mousePt, out x, out x2, out y, out y2);
 | ||
|                     XDate xd = new XDate(x);
 | ||
| 
 | ||
|                     PhysioDataConfig physioParam = null;
 | ||
|                     if (myOpeRecord.SelPhysioConfig == null)
 | ||
|                         physioParam = myOpeRecord.PhysioConfigList[1];
 | ||
|                     else
 | ||
|                         physioParam = myOpeRecord.SelPhysioConfig;
 | ||
|                     double value = Math.Round(y[physioParam.YAisx], 0);
 | ||
|                     pdNews.Add(PhysioDataConfig.newPhysioData(physioParam, myOpeRecord.Id.Value, xd.DateTime, value));
 | ||
| 
 | ||
|                     if (y[1].ToString() != "")
 | ||
|                     {
 | ||
|                         value = Math.Round(y[1], 0);
 | ||
|                         pdNews.Add(PhysioDataConfig.newPhysioData(myOpeRecord.PhysioConfigList.Where(a => a.Name == "体温").ToList()[0], myOpeRecord.Id.Value, xd.DateTime, value));
 | ||
|                     }
 | ||
|                     //if (y[0].ToString() != "")
 | ||
|                     //{
 | ||
|                     //    value = Math.Round(y[physioParam.YAisx], 1);
 | ||
|                     //    pdNews.Add(PhysioDataConfig.newPhysioData(myOpeRecord.PhysioConfigList.Where(a => a.Name == "体温").ToList()[0], myOpeRecord.Id.Value, xd.DateTime, value));
 | ||
|                     //}
 | ||
| 
 | ||
|                 }
 | ||
|                 return pdNews;
 | ||
|             }
 | ||
|             catch (Exception)
 | ||
|             {
 | ||
|                 return pdNews;
 | ||
|             }
 | ||
|         }
 | ||
|         /// <summary>
 | ||
|         /// 得到单生命特征对象
 | ||
|         /// </summary>
 | ||
|         /// <param name="sender"></param>
 | ||
|         /// <param name="e">点击鼠标事件的参数</param>
 | ||
|         /// <returns></returns>
 | ||
|         private PhysioData rePD(ZedGraphControl sender, MouseEventArgs e)
 | ||
|         {
 | ||
|             try
 | ||
|             {
 | ||
|                 if (ZedControl == null) return null;
 | ||
| 
 | ||
|                 double x, x2;
 | ||
|                 double[] y;
 | ||
|                 double[] y2;
 | ||
| 
 | ||
|                 PointF mousePt = new PointF(e.X, e.Y); 
 | ||
|                 GraphPane pane = ZedControl.MasterPane.FindChartRect(mousePt);
 | ||
|                 if (pane == null) return null;
 | ||
|                 pane.ReverseTransform(mousePt, out x, out x2, out y, out y2);
 | ||
|                 XDate xd = new XDate(x);
 | ||
| 
 | ||
|                 PhysioDataConfig physioParam = null;
 | ||
|                 if (myOpeRecord.SelPhysioConfig == null)
 | ||
|                 {
 | ||
|                     physioParam = myOpeRecord.PhysioConfigList[1];
 | ||
|                 }
 | ||
|                 else
 | ||
|                 {
 | ||
|                     physioParam = myOpeRecord.SelPhysioConfig;
 | ||
|                 }
 | ||
|                 double value = physioParam.YAisx == 1 ? Math.Round(y[physioParam.YAisx], 1) : Math.Round(y[physioParam.YAisx], 0);
 | ||
|                 PhysioData pdNew = PhysioDataConfig.newPhysioData(physioParam, myOpeRecord.Id.Value, xd.DateTime, value);
 | ||
| 
 | ||
|                 return pdNew;
 | ||
|             }
 | ||
|             catch (Exception)
 | ||
|             {
 | ||
|                 return null;
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 返回控件的点击的Legend的图例文本
 | ||
|         /// </summary>
 | ||
|         /// <param name="zgc"></param>
 | ||
|         /// <param name="mousePt"></param>
 | ||
|         /// <returns></returns>
 | ||
|         private PhysioDataConfig reClickParamName(ZedGraphControl zgc, PointF mousePt)
 | ||
|         {
 | ||
|             PhysioDataConfig appTemp = null;
 | ||
|             Graphics g = zgc.CreateGraphics();
 | ||
|             GraphPane myPane = new GraphPane();
 | ||
|             object nearestObj;
 | ||
|             int ipt;
 | ||
|             zgc.MasterPane.FindNearestPaneObject(mousePt, g, out myPane, out nearestObj, out ipt);
 | ||
|             if (nearestObj is Legend)
 | ||
|             {
 | ||
|                 foreach (PhysioDataConfig Temp in myOpeRecord.PhysioConfigList)
 | ||
|                 {
 | ||
|                     if (myPane.CurveList[ipt].Tag.ToString().IndexOf(Temp.Name) >= 0)
 | ||
|                     {
 | ||
|                         appTemp = Temp;
 | ||
|                     }
 | ||
|                 }
 | ||
|             }
 | ||
|             return appTemp;
 | ||
|         }
 | ||
|         /// <summary>
 | ||
|         /// 点击时是否在图例范围内
 | ||
|         /// </summary>
 | ||
|         /// <param name="zgc"></param>
 | ||
|         /// <param name="mousePt"></param>
 | ||
|         /// <returns></returns>
 | ||
|         private bool isLegendArea(ZedGraphControl zgc, PointF mousePt)
 | ||
|         {
 | ||
|             Graphics g = zgc.CreateGraphics();
 | ||
|             GraphPane myPane = new GraphPane();
 | ||
|             object nearestObj;
 | ||
|             int ipt;
 | ||
|             zgc.MasterPane.FindNearestPaneObject(mousePt, g, out myPane, out nearestObj, out ipt);
 | ||
|             if (nearestObj is Legend)
 | ||
|             {
 | ||
|                 return true;
 | ||
|             }
 | ||
|             return false;
 | ||
|         }
 | ||
|         /// <summary>
 | ||
|         /// 根据顶部加药序号,确定数值生命体征的纵向位置(以1为单位)
 | ||
|         /// </summary>
 | ||
|         /// <param name="index"></param>
 | ||
|         /// <returns></returns>
 | ||
|         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;
 | ||
|         }
 | ||
|         #endregion
 | ||
| 
 | ||
|         //public 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 List<int> SelectPhysioDataByID(int operationId, DateTime startTime, DateTime endTime, double startValue, double endValue)
 | ||
|         {
 | ||
|             List<int> PhysioDatas = new List<int>();
 | ||
|             string sqlStr = "select * FROM PhysioData  where PatientId = " + operationId + " and [RecordTime] >='" + startTime + "' and  [RecordTime] <='" + endTime + "' ";// and  [Value] >='" + startValue + "' and  [Value] <='" + endValue + "' 
 | ||
|             DataTable dt = DBHelper.GetDataTable(sqlStr);
 | ||
|             foreach (DataRow dr in dt.Rows)
 | ||
|             {
 | ||
|                 double value = -1;
 | ||
|                 if (double.TryParse(dr["Value"].ToString(), out value))
 | ||
|                 {
 | ||
|                     if (value >= startValue && value <= endValue)
 | ||
|                     {
 | ||
|                         int PhysioDataConfigId = int.Parse(dr["PhysioDataConfigId"].ToString());
 | ||
|                         if (!PhysioDatas.Contains(PhysioDataConfigId))
 | ||
|                             PhysioDatas.Add(PhysioDataConfigId);
 | ||
|                     }
 | ||
|                 }
 | ||
|             }
 | ||
|             return PhysioDatas;
 | ||
|         }
 | ||
|         public DateTime GetRecordTime(DateTime pdTemp, int collectInterval = 5)
 | ||
|         {
 | ||
|             DateTime result = Convert.ToDateTime(pdTemp.ToString("yyyy-MM-dd HH:mm:00.000"));
 | ||
|             //小于入室时间默认不画 
 | ||
|             for (int i = 0; i < (480 / 5); i++)
 | ||
|             {//InRoomTime.Value
 | ||
|                 DateTime tempTime = myOpeRecord.PageBegin.AddMinutes(i * 5);
 | ||
|                 if (tempTime >= result && result < tempTime.AddMinutes(5))
 | ||
|                 {
 | ||
|                     result = tempTime;
 | ||
|                     break;
 | ||
|                 }
 | ||
|             }
 | ||
|             //if (result < myOpeRecord.InRoomTime.Value)
 | ||
|             //{
 | ||
|             //    result = myOpeRecord.InRoomTime.Value;
 | ||
|             //}
 | ||
|             return result;
 | ||
|         }
 | ||
|     }
 | ||
| }
 |