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 System.Windows.Forms.Design; namespace DrawGraph { public class IconManage : AreaManageBase { public RectangleFramePackObj IconPpack; public LinePackObj H5pack; public TextPackObj Extend2; /// /// 当前手术对象 /// private OperationRecord myOpeRecord = null; public IconManage() { } public IconManage(object _operationRecor, ZedGraphControl _zedControl, TemplateManage _template, string _name) : base(_operationRecor, _zedControl, _template, _name) { init(); } public void init() { //自己要用的手术对象 myOpeRecord = OpeRecord as OperationRecord; } /// /// 初始画的后置方法 /// public override void FollowUpMethod() { H5pack = template.GetPackObjectOTag("IconManage_LinePackObj_5"); if (H5pack != null) { eventstartX = H5pack.RealX; eventy = H5pack.RealY; eventendy = H5pack.RealEndY; } IconPpack = template.GetPackObjectOTag("IconManage_RectangleFramePackObj_2"); if (IconPpack != null) { eventy = IconPpack.RealY; eventendy = IconPpack.RealEndY; eventendX = IconPpack.RealEndX + 0.02; } LinePackObj line = template.GetPackObjectOTag("IconManage_LinePackObj_6"); if (line != null) { eventstartX = line.RealX; eventendX = line.RealEndX + 0.02; } } #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) { } #endregion 重写的事件结束 public override void Bind() { init(); DrawEvent(); } /// /// 画事件 /// private void DrawEvent() { if (myOpeRecord.FactEventsList.Count > 0) { foreach (FactEvents temp in myOpeRecord.FactEventsList) { temp.clearAddObj(ZedControl); } reDrawEvent(); } } double eventy; double eventendy; double eventendX; double eventstartX; /// /// 重新画事件文本 /// private void reDrawEvent() { //画在第几行 int rowIndex = 0; DateTime? drawDatetime = null; FactEvents drawEvent = null; string LastNumber = ""; double span = getYPositionByListIndex(1, eventy, eventendy, 2); List eventListstr = new List(); eventListstr.Add("【事件】"); myOpeRecord.FactEventsList.Sort(new FactEventsComparer()); //循环加药集体 for (int i = 0; i < myOpeRecord.FactEventsList.Count; i++) { FactEvents temp = myOpeRecord.FactEventsList[i]; //判断该事件是否存在当前时间段 if (IfInTimeExist(temp.EventBeginTime.Value, temp.EventEndTime.Value) == false) continue; if (temp.EventBeginTime.Value.ToShortTimeString() == temp.EventEndTime.Value.ToShortTimeString()) { eventListstr.Add(string.Format("{0}{1} {2} {3}{4}", getNumber(i), temp.EventBeginTime.Value.ToShortTimeString(), temp.EventName, "", temp.Remark == null ? "" : temp.Remark.ToString())); } else { eventListstr.Add(string.Format("{0}{1}->{2} {3} {4}{5}", getNumber(i), temp.EventBeginTime.Value.ToShortTimeString(), temp.EventEndTime.Value.ToShortTimeString(), temp.EventName, "", temp.Remark == null ? "" : temp.Remark.ToString())); } temp.setAnasArr(ZedControl, eventstartX, eventendX, myOpeRecord.PageBegin, myOpeRecord.PageBegin.AddMinutes(EVERY_PAGE_TIME_SPAN)); try { string EventName = temp.EventName; if (EventName == "喉罩") EventName = "插管"; DataRow[] dr = myOpeRecord.PhysioParamList.Select("Name ='" + EventName + "' ", ""); if (dr.Length > 0) { temp.clearDNAndDT(ZedControl); string tagName = dr[0]["imgPath"].ToString(); temp.drawIMG(ZedControl, tagName, eventy, 0.013); } else { int DValue = 0; string drawNumber = ""; if (drawDatetime != null && temp.EventBeginTime > drawDatetime.Value.AddMinutes(-1) && temp.EventBeginTime < drawDatetime.Value.AddMinutes(10) && LastNumber != "" && drawEvent != null) { drawEvent.clearDNAndDT(ZedControl); drawEvent = temp; drawNumber = LastNumber + "-" + getNumber(i); DValue = (int)(((TimeSpan)(temp.EventBeginTime - drawDatetime.Value)).TotalMinutes / 2); } else { LastNumber = getNumber(i); drawNumber = LastNumber; drawEvent = temp; drawDatetime = temp.EventBeginTime.Value; } //画图上的序号 temp.drawNumber(ZedControl, drawNumber, eventy + span - 0.001, DValue, Color.DarkBlue); } rowIndex++; } catch (Exception exp) { PublicMethod.WriteLog(exp, ""); } } myOpeRecord.EventListstr = eventListstr; TextPackObj packObj2 = template.GetPackObjectOTag("IconManage_TextPackObj_14_OperationRecord_AnalgesiaRecord_Extend2"); if (packObj2 != null) { List AfterDrugsListstr = new List(); myOpeRecord.ClearIconstr(ZedControl); myOpeRecord.FactDrugList.Sort(new FactDrugComparer()); foreach (var item in myOpeRecord.FactDrugList) { ListAddDrugs(AfterDrugsListstr, item); } if (AfterDrugsListstr.Count > 0) { SetRemarkInfo(AfterDrugsListstr, packObj2, 15, 6.5f, 40, "IconDrugRemarkRow"); //packObj2.PackText = ""; //foreach (var item in AfterDrugsListstr) //{ // packObj2.PackText += item ;//+ "\n" //} //packObj2.PackValue = packObj2.PackText; //packObj2.Draw(); } } TextPackObj packObj = template.GetPackObjectOTag("IconManage_TextPackObj_40_OperationRecord_AnalgesiaRecord_Extend3"); if (packObj != null && eventListstr.Count > 1) { List Eventststr = new List(); foreach (var item in eventListstr) { if (item != "【事件】") Eventststr.Add(((item.Substring(1, item.Length - 1)))); } myOpeRecord.FactEventsList.Sort(new FactEventsComparer()); if (Eventststr.Count > 0) { SetRemarkInfo(Eventststr, packObj, 15, 7f, 38, "IconeventRemarkRow"); } //packObj.PackText = ""; //foreach (var item in eventListstr) //{ // if (item != "【事件】") // packObj.PackText += ((item.Substring(1, item.Length - 1)) + "\n"); //} //packObj.PackValue = packObj.PackText; //packObj.Draw(); } } private void SetRemarkInfo(List PunctureAndIntubatios, TextPackObj remarkPpack, int remarkRowscount, float fontsize, int fontlength, string TagName) { int remarkRow = 0; int AllRemarkRow = 0; double lastIndex = remarkPpack.RealEndY; double x = remarkPpack.RealX; double y = remarkPpack.RealY + getYPositionByListIndex(remarkRow, remarkPpack.RealY, lastIndex, remarkRowscount); if (PunctureAndIntubatios != null) { foreach (string item in PunctureAndIntubatios) { List PunStr = stringformat(item, fontlength); for (int m = 0; m < PunStr.Count; m++) { if (PunStr[m] == null) continue; y = remarkPpack.RealY + getYPositionByListIndex(remarkRow, remarkPpack.RealY, lastIndex, remarkRowscount); if (PunStr[m] == null || PunStr[m].Trim() == "") break; ZUtil.DrawText(PunStr[m], x, y, ZedControl, fontsize, TagName + AllRemarkRow); remarkRow++; AllRemarkRow++; } } } } private static void ListAddDrugs(List DrugListstr, FactDrug temp) { string dose = ""; if (temp.Density != 0) { dose += ((double)temp.Density).ToString(); if (temp.DensityUnit != null) { dose += temp.DensityUnit; } } if (dose.Trim() != "") dose += " "; if (temp.Velocity != "") { dose += temp.Velocity; if (temp.VelocityUnit != null) { dose += temp.VelocityUnit; } } if (dose.Trim() != "") dose += " "; if (temp.Dosage != 0) { dose += ((double)temp.Dosage).ToString(); if (temp.DosageUnit != null) { dose += temp.DosageUnit; } } DrugListstr.Add(string.Format("{0}{1} {2} {3}{4}{5}", "", (temp.DrugBeginTime == temp.DrugEndTime) ? temp.DrugBeginTime.ToShortTimeString() : temp.DrugBeginTime.ToShortTimeString() + "->" + temp.DrugEndTime.ToShortTimeString(), temp.DrugName.Trim(), dose, "", temp.DrugChannel == null ? "" : " " + temp.DrugChannel.ToString())); //DrugListstr.Append(" "); } #region 格式化字符串长度 /// /// 格式化字符串长度 /// /// 输入的字符串 /// 截取的长度 /// 被截取完的字符串 public static List stringformat(string str, int n) { /// ///格式化字符串长度,超出部分显示省略号,区分汉字跟字母。汉字2个字节,字母数字一个字节 /// List strList = new List(); string temp = string.Empty; if (System.Text.Encoding.Default.GetByteCount(str) <= n)//如果长度比需要的长度n小,返回原字符串 { strList.Add(str); } else { int t = 0; char[] q = str.ToCharArray(); for (int i = 0; i <= q.Length; i++) { if (t > n) { strList.Add(temp); temp = ""; t = 0; } if (i == q.Length)// - 1 { strList.Add(temp); break; } //判断是否汉字: if ((int)q[i] >= 0x4E00 && (int)q[i] <= 0x9FA5) { temp += q[i]; t += 2; } //判断半角如下: else if (q[i].ToString().Length == Encoding.Default.GetByteCount(q[i].ToString())) { temp += q[i]; t++; } //判断全角如下: else if (2 * q[i].ToString().Length == Encoding.Default.GetByteCount(q[i].ToString())) { temp += q[i]; t += 2; } else { temp += q[i]; t++; } } } return strList; } #endregion private bool IfInTimeExist(DateTime Begin, DateTime End) { DateTime lastime = myOpeRecord.lastPageBegin.AddSeconds(59); bool b = false; if (End == null) { if (Begin > myOpeRecord.PageBegin && Begin < lastime) { b = true; } } else { if (Begin >= myOpeRecord.PageBegin && Begin <= lastime) { b = true; } else if (End >= myOpeRecord.PageBegin && End <= lastime) { b = true; } else if (Begin < myOpeRecord.PageBegin && End > lastime) { b = true; } } return b; } private DateTime GetInsertTime(DateTime pdTemp, bool IsInRToomTime = false) { DateTime insTime = pdTemp.Date.AddHours(pdTemp.Hour).AddMinutes(pdTemp.Minute); if (collectInterval == 5) { int minute = pdTemp.Minute % 5;//计算5的整数分钟 if (minute >= 3) insTime = insTime.AddMinutes(5 - minute); else if (minute != 0 && IsInRToomTime == true) insTime = insTime.AddMinutes(5 - minute); else insTime = insTime.AddMinutes(0 - minute); } else if (collectInterval == 10) { double minute = pdTemp.Minute % 10;//计算5的整数分钟 if (minute >= 5) insTime = insTime.AddMinutes(10 - minute); else insTime = insTime.AddMinutes(0 - minute); } return insTime; } /// /// 根据顶部加药序号,确定数值生命体征的纵向位置(以1为单位) /// /// /// 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; } public static string getNumber(int number) { try { string str = "①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮"; if (number >= 15) str = "①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳㉑㉒㉓㉔㉕㉖㉗㉘㉙㉚㉛㉜㉝㉞㉟㊱㊲㊳㊴㊵㊶㊷㊸㊹㊺㊻㊼㊽㊾㊿"; str = str.Substring(number, 1); return str; } catch (Exception) { return number.ToString() + ":"; } } } }