AIMS/DrawGraph/AreaManage/TemplateManage.cs
leomon 82591fb825 器械清点生命体征不显示
数千访视添加了Ada分级,术中麻醉记录单应该同步过来
4间9:54血压显示的不对
点击获取数据的时候才会把有创血压加载出来 不自动画点血压
2022-11-09 20:32:37 +08:00

1001 lines
33 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using HelperDB;
using Newtonsoft.Json;
using AIMSExtension;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using System.Xml.Serialization;
namespace DrawGraph
{
[Serializable, JsonObject(MemberSerialization.OptOut)]
/// <summary>
/// 模板管理工具的具体类,全局绑定在这个类里
/// </summary>
public class TemplateManage
{
public TemplateManage()
{
}
#region
private List<AreaManageBase> manageList = new List<AreaManageBase>();
private string msgStr = "";
private string projectName = "";
private string direct = "";
private int id;
private object opeRecord = null;
PropertyObject operationRecordProObj = new PropertyObject();
private ZedGraphControl zedControl = null;
private int zjpyl = 0;
private int hzjpyl = 0;
private int dfzjpyl = 0;
private int locationY;
//private string hospitalName = "";
private XmlUtil xmlOpe = new XmlUtil(System.Windows.Forms.Application.StartupPath + "\\AIMS.xml");
private TypesettingEnum typesetting = TypesettingEnum.Vertical;
private PageTypeEnum pageType = PageTypeEnum.A4;
public int LocationY
{
set
{
locationY = value;
if (zedControl != null) zedControl.Location = new Point(0, 0 - LocationY);//0);
}
get { return locationY; }
}
/// <summary>
/// 管理器的列表
/// </summary>
public List<AreaManageBase> ManageList
{
get
{
return manageList;
}
}
[JsonIgnore]
[XmlIgnore]
public string MsgStr
{
get
{
return msgStr;
}
set
{
msgStr = value;
}
}
/// <summary>
/// 项目名称
/// </summary>
public string ProjectName
{
get
{
return projectName;
}
set
{
projectName = value;
Direct = value;
}
}
/// <summary>
/// 根据类.属性返回指定的绘图组件通知更新
/// </summary>
/// <param name="propertyName">类名加属性名</param>
/// <param name="newText">新文本</param>
/// <param name="newValue">新值</param>
/// <param name="isUpdate">是否更新数据库</param>
/// <param name="t">要更新的对象</param>
public int NotifyUpdate(string propertyName, string newText, string newValue, bool isUpdate = false, object t = null)
{
int i = 1;
if (isUpdate && t != null)
{
//为真时更新数据库
i = DBManage.SetOperationRecordValue(t, propertyName, newValue);
}
if (isUpdate && i <= 0) return i;
foreach (AreaManageBase area in manageList)
{
if (area.PackManage != null)
{
//找到以类.属性结尾的对象
List<PackObjBase> packObjs = area.PackManage.ListPob.Where<PackObjBase>(s => s.PackTag.EndsWith(propertyName.Replace('.', '_'))).ToList<PackObjBase>();
foreach (PackObjBase pack in packObjs)
{
pack.PackText = newText;
pack.PackValue = newValue;
//pack.IsSelfFresh = false;
pack.Draw();
}
}
}
return i;
}
/// <summary>
/// 设置对象的值
/// </summary>
/// <param name="t"></param>
/// <param name="propertyName"></param>
/// <param name="text"></param>
/// <param name="value"></param>
/// <param name="isUpdate"></param>
public void SetObjValue(object t, string propertyName, string text, string value, bool isUpdate = false)
{
//设置对象的值
object oldValue = EntityObjectChangeNotifier.SubObjSetValue(t, propertyName, value);
//是否更新数据库并通知组件重绘
NotifyUpdate(propertyName, text, value, isUpdate, t);
}
[JsonIgnore]
[XmlIgnore]
public int Id
{
get
{
return id;
}
set
{
id = value;
if (manageList.Count > 0)
{
foreach (AreaManageBase area in manageList)
{
area.Id = id;
}
}
}
}
[JsonIgnore]
[XmlIgnore]
public string Direct
{
get
{
return direct;
}
set
{
string dir = projectName;
if (manageList.Count > 0)
{
foreach (AreaManageBase area in manageList)
{
area.Direct = dir;
}
}
direct = dir;
}
}
[JsonIgnore]
[XmlIgnore]
public object OpeRecord
{
get
{
return opeRecord;
}
set
{
opeRecord = value;
foreach (AreaManageBase area in manageList)
{
area.OpeRecord = opeRecord;
}
}
}
[JsonIgnore]
[XmlIgnore]
public ZedGraphControl ZedControl
{
get
{
return zedControl;
}
set
{
zedControl = value;
if (zedControl != null)
{
//把本界面的画板控件给所有子包控件传递。
foreach (AreaManageBase area in manageList)
{
area.SetZedControl(zedControl);
}
}
}
}
/// <summary>
/// 组件的偏移量
/// </summary>
public int Zjpyl
{
get
{
return zjpyl;
}
set
{
foreach (AreaManageBase area in manageList)
{
List<PackObjBase> ableS = area.PackManage.ListPob.Where<PackObjBase>(s => s is AbleEditPackObj).ToList();
foreach (PackObjBase pack in ableS)
{
pack.Zjpyl = value;
}
}
zjpyl = value;
}
}
public int Hzjpyl
{
get
{
return hzjpyl;
}
set
{
foreach (AreaManageBase area in manageList)
{
List<PackObjBase> ableS = area.PackManage.ListPob.Where<PackObjBase>(s => s is AbleEditPackObj).ToList();
foreach (PackObjBase pack in ableS)
{
pack.Hzjpyl = value;
}
}
hzjpyl = value;
}
}
public int Dfzjpyl
{
get
{
return dfzjpyl;
}
set
{
//foreach (AreaManageBase area in manageList)
//{
// List<PackObjBase> ableS = area.PackManage.ListPob.Where<PackObjBase>(s => s is AbleEditPackObj).ToList();
// foreach (PackObjBase pack in ableS)
// {
// pack.DfHzjpyl = value;
// }
//}
dfzjpyl = value;
}
}
/// <summary>
/// 排版,默认竖着排
/// </summary>
public TypesettingEnum Typesetting
{
get
{
return typesetting;
}
set
{
typesetting = value;
}
}
public PageTypeEnum PageType
{
get
{
return pageType;
}
set
{
pageType = value;
}
}
#endregion
#region
/// <summary>
/// 鼠标点击画板
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void zedControl_MouseMoveEvent(ZedGraphControl sender, MouseEventArgs e)
{
foreach (AreaManageBase area in manageList)
{
area.MouseMove(sender, e);
}
}
/// <summary>
/// 点击画板
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void zedControl_MouseDownEvent(ZedGraphControl sender, MouseEventArgs e)
{
if (ZedControl == 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));
//foreach (AreaManageBase area in manageList)
//{
// if (e.Button == System.Windows.Forms.MouseButtons.Left)
// {
// #region 为可编辑组件触发响应事件
// List<PackObjBase> editPack = area.PackManage.ListPob.Where<PackObjBase>(s => s is AbleEditPackObj).ToList<PackObjBase>();
// foreach (PackObjBase pack in editPack)
// {
// AbleEditPackObj aEdit = pack as AbleEditPackObj;
// if (aEdit != null)
// {
// if ((x > aEdit.RealX && x < aEdit.RealEndX) && (y > aEdit.RealY && y < aEdit.RealEndY))
// {
// if (!aEdit.IsDoubleClick)
// {
// aEdit.onClick(e);
// break;
// }
// }
// }
// }
// #endregion
// }
// area.MouseDown(sender, e);
//}
foreach (AreaManageBase area in manageList)
{
area.MouseDown(sender, e);
}
}
public void zedControl_MouseUpEvent(ZedGraphControl sender, MouseEventArgs e)
{
foreach (AreaManageBase area in manageList)
{
area.MouseUp(sender, e);
}
}
public void zedControl_MouseDoubleClick(ZedGraphControl sender, MouseEventArgs e)
{
if (ZedControl == 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));
foreach (AreaManageBase area in manageList)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
#region
List<PackObjBase> editPack = area.PackManage.ListPob.Where<PackObjBase>(s => s is AbleEditPackObj).ToList<PackObjBase>();
foreach (PackObjBase pack in editPack)
{
AbleEditPackObj aEdit = pack as AbleEditPackObj;
if (aEdit != null)
{
if ((x > aEdit.RealX && x < aEdit.RealEndX) && (y > aEdit.RealY && y < aEdit.RealEndY))
{
if (!aEdit.IsDoubleClick)
{
aEdit.onClick(e);
break;
}
}
}
}
#endregion
}
area.MouseDoubleClick(sender, e);
}
}
public void zedControl_KeyUp(ZedGraphControl sender, KeyEventArgs e)
{
foreach (AreaManageBase area in manageList)
{
area.KeyUp(sender, e);
}
}
public void BindTempData()
{
foreach (AreaManageBase area in manageList)
{
area.BindTempData();
}
}
#endregion
/// <summary>
/// 增加一个管理器
/// </summary>
/// <param name="manager">管理器</param>
/// <returns></returns>
public bool AddManage(AreaManageBase _manager)
{
bool reVal = false;
AreaManageBase manage = manageList.FirstOrDefault<AreaManageBase>(s => s.Name == _manager.Name || s.ClassName == _manager.ClassName);
if (manage == null)
{
manageList.Add(_manager);
reVal = true;
}
return reVal;
}
public int GetPageWidth()
{
int w = 900;
if (pageType == PageTypeEnum.A3)
{
w = 1280;
}
return w;
}
/// <summary>
/// 重画区域
/// </summary>
public void DrawArea()
{
Clear();
for (int i = 0; i < ManageList.Count; i++)
{
AreaManageBase manageTemp = ManageList[i];
if (manageTemp != null)
{
if (i == 0)
{
manageTemp.Draw();
}
else
{
manageTemp.Draw(true);
}
}
}
}
/// <summary>
/// 根据标签查找指定的绘图组件
/// </summary>
/// <param name="tagName">标签名,使用类.属性就可以了</param>
/// <returns></returns>
public T GetPackObjectOTag<T>(string tagName) where T : PackObjBase
{
T pack = default;
for (int i = 0; i < ManageList.Count; i++)
{
AreaManageBase manageTemp = ManageList[i];
if (manageTemp != null)
{
pack = (T)manageTemp.GetPackObjectOTag(tagName);
if (pack != null) break;
}
}
return pack;
}
/// <summary>
/// 删除区域
/// </summary>
/// <param name="_manager"></param>
/// <returns></returns>
public bool DelManage(AreaManageBase _manager)
{
bool reVal = false;
if (_manager != null && manageList.Count > 0)
{
reVal = manageList.Remove(_manager);
}
return reVal;
}
/// <summary>
/// 保存
/// </summary>
/// <returns></returns>
public bool Save()
{
bool reVal = false;
try
{
if (ProjectName == "")
{
reVal = false;
MsgStr = "医院名称或项目名称不能为空";
return reVal;
}
string FilePath = Direct;
bool allAreaSaveOk = true;
if (manageList.Count > 0)
{
foreach (AreaManageBase area in manageList)
{
//区域保存值返回
bool areaSaveOk = area.Save();
if (!areaSaveOk)
{
allAreaSaveOk = false;
MsgStr = area.MsgStr;
}
}
}
else
{
//如果manageList为空则不允许保存模板管理器
allAreaSaveOk = false;
MsgStr = "没有具体的区域管理器不需要保存";
}
//如果所有区域都保存成功,才能保存模板管理器
if (allAreaSaveOk)
{
string jsonStr = JsonConvert.SerializeObject(this);
try
{
DBHelper.ExecNonQuery(" update [OperationRecordTemplate] set jsondate=N'" + jsonStr + "' where Id='" + Id + "' ");
msgStr = FilePath + "保存成功";
reVal = true;
}
catch (Exception ex)
{
msgStr = ex.Message.ToString();
}
finally
{
}
}
}
catch (Exception exp)
{
reVal = false;
MsgStr = exp.Message;
}
return reVal;
}
/// <summary>
/// 全局绑定之后在调用各自的区域管理器进行绑定
/// </summary>
public void Bind(string AreaManageName = null)
{
try
{
//各区域的数据绑定
foreach (AreaManageBase area in manageList)
{
if (AreaManageName != null && area.Name != AreaManageName && area.ClassName != AreaManageName) continue;
#region
//绑定所有可编辑区域
List<PackObjBase> editPack = area.PackManage.ListPob.Where<PackObjBase>(s => s is AbleEditPackObj).ToList<PackObjBase>();
foreach (PackObjBase pack in editPack)
{
AbleEditPackObj aEdit = pack as AbleEditPackObj;
if (aEdit != null)
{
//aEdit.ClearControl();
aEdit.IsVisible = false;
aEdit.Click -= new AbleEditPackObj.ClickEventHandler(editAr_Click);
aEdit.Click += new AbleEditPackObj.ClickEventHandler(editAr_Click);
aEdit.SetControl();
//aEdit.IsVisible = DrawGraphModels.Util.EIsBool.False;;
}
}
#endregion
area.IsSelfFresh = false;
area.Bind();
area.IsSelfFresh = true;
}
if (zedControl != null)
zedControl.Refresh();
}
catch (Exception ex)
{
throw ex;
}
}
public void ClearSelectCouve()
{
//各区域的数据绑定
foreach (AreaManageBase area in manageList)
{
area.clearSelectCouve_Click();
}
}
public void frmInstance_ConfigParam()
{
//各区域的数据绑定
foreach (AreaManageBase area in manageList)
{
area.frmInstance_ConfigParam();
}
}
public void initChart()
{
//各区域的数据绑定
foreach (AreaManageBase area in manageList)
{
area.initChart();
}
}
public bool Verification()
{
foreach (AreaManageBase area in manageList)
{
bool reVal = area.Verification();
if (!reVal)
{
//只要有一个区域的验证返回失败即失败
return reVal;
}
}
return true;
}
/// <summary>
/// 响应可编辑组件的单击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void editAr_Click(object sender, EventArgs e)
{
foreach (AreaManageBase area in manageList)
{
area.editAr_Click(sender, e);
}
}
/// <summary>
/// 加载所有区域里的组件
/// </summary>
public bool Load()
{
bool reVal = true;
if (manageList.Count > 0)
{
bool temp = true;
for (int i = 0; i < manageList.Count; i++)
{
AreaManageBase area = manageList[i];
//通过名称得到一个具体的区域实例
AreaManageBase areaSub = BoardFormUtil.AreaManageFactory(area.ClassName, area.OpeRecord, area.ZedControl, this, area.Name);
//父类的值传给子类
BoardUtil.MainToSub(area, areaSub);
manageList[i] = areaSub;
area = manageList[i];
//区域保存值返回
bool areaLoadOk = area.Load(Id);
if (!areaLoadOk)
{
MsgStr = area.Name + ":" + area.MsgStr;
temp = false;
}
#region
//绑定所有可编辑区域
List<PackObjBase> editPack = area.PackManage.ListPob.Where<PackObjBase>(s => s is AbleEditPackObj).ToList<PackObjBase>();
foreach (PackObjBase pack in editPack)
{
AbleEditPackObj aEdit = pack as AbleEditPackObj;
if (aEdit != null)
{
//aEdit.IsVisible = false;
aEdit.Click -= new AbleEditPackObj.ClickEventHandler(editAr_Click);
aEdit.Click += new AbleEditPackObj.ClickEventHandler(editAr_Click);
aEdit.SetControl();
//aEdit.IsVisible = DrawGraphModels.Util.EIsBool.False;
}
}
#endregion
}
SetPYL();
if (!temp)
{
reVal = false;
}
}
return reVal;
}
/// <summary>
/// 获取第一个板子的宽高
/// </summary>
public Point GetBorderPackWH()
{
Point point = new Point();
if (typesetting == TypesettingEnum.Vertical)
{
point.X = GetPageWidth();
point.Y = Convert.ToInt32(point.X * 1.414);
}
else
{
point.Y = GetPageWidth();
point.X = Convert.ToInt32(point.Y * 1.414);
}
//给所有子区域的板子设置成第一个版子的值
//if (manageList.Count > 0 && manageList[0].PackManage != null)
//{
// PackObjBase borderPack = manageList[0].PackManage.ListPob.FirstOrDefault<PackObjBase>(s => s is BorderPackObj);
// foreach (AreaManageBase areaT in manageList)
// {
// PackObjBase subBorder = areaT.PackManage.ListPob.FirstOrDefault<PackObjBase>(s => s is BorderPackObj);
// if (subBorder != null)
// {
// point.X = Convert.ToInt32(((BorderPackObj)borderPack).SetWidth);
// point.Y = Convert.ToInt32(((BorderPackObj)borderPack).SetHeight);
// }
// }
//}
return point;
}
/// <summary>
/// 清空板上的内容
/// </summary>
public void Clear()
{
if (zedControl == null) return;
zedControl.MasterPane.GraphObjList.Clear();
zedControl.Controls.Clear();
zedControl.GraphPane.CurveList.Clear();
Chart chart = zedControl.GraphPane.Chart;
chart.Rect = new System.Drawing.RectangleF(0f, 0f, 0f, 0f); //设定中间的图像显示区域chart.Rect = {X = 120.0 Y = 304.5 Width = 576.0 Height = 375.55}
//清除原图像
if (zedControl.GraphPane.YAxisList.Count > 1)
{
//清空除Y轴以外的所有纵坐标轴
zedControl.GraphPane.YAxisList.RemoveRange(1, zedControl.GraphPane.YAxisList.Count - 1);
}
Refresh();
}
/// <summary>
/// 清空界面上的组件,在重新加载界面前做
/// </summary>
public void ControlClear()
{
foreach (AreaManageBase area in manageList)
{
#region
//绑定所有可编辑区域
List<PackObjBase> editPack = area.PackManage.ListPob.Where<PackObjBase>(s => s is AbleEditPackObj).ToList<PackObjBase>();
foreach (PackObjBase pack in editPack)
{
AbleEditPackObj aEdit = pack as AbleEditPackObj;
if (aEdit != null)
{
aEdit.ClearControl();
//aEdit.IsVisible = DrawGraphModels.Util.EIsBool.False;
}
}
#endregion
}
}
/// <summary>
/// 绑定所有手术记录的值
/// </summary>
public void BindOperationRecordValueAll(Object obj)
{
//operationRecordProObj = new PropertyObject();
//operationRecordProObj.Key = "OperationRecord";
//operationRecordProObj.Description = "手术类";
foreach (AreaManageBase area in manageList)
{
area.IsSelfFresh = false;
}
List<PropertyObject> propertyList = BoardFormUtil.GetPropertyList(obj, this);
//operationRecordProObj.SubPropertyList = propertyList;
NotifyPackObj(propertyList);
foreach (AreaManageBase area in manageList)
{
area.IsSelfFresh = true;
}
Refresh();
}
private void Refresh()
{
if (zedControl != null)
{
zedControl.AxisChange();
zedControl.Refresh();
}
}
/// <summary>
/// 通知组件更新数据
/// </summary>
private void NotifyPackObj(List<PropertyObject> propertyList)
{
foreach (PropertyObject proTemp in propertyList)
{
NotifyUpdate(proTemp.ViewDesignTag(), proTemp.Text, proTemp.Value);
if (proTemp.SubPropertyList.Count > 0)
{
NotifyPackObj(proTemp.SubPropertyList);
}
}
}
/// <summary>
/// 通知区域绑定更新
/// </summary>
/// <param name="areaName">区域名称</param>
/// <returns>模板对象</returns>
public TemplateManage NotificationAreaBindingUpdate(string areaName)
{
AreaManageBase area = manageList.FirstOrDefault<AreaManageBase>(s => s.Name == areaName);
if (area != null)
{
area.Bind();
}
return this;
}
/// <summary>
/// 设置组件的偏移量
/// </summary>
/// <param name="isReturn0">强制返回到0时为真</param>
public void SetPYL(bool isReturn0 = false)
{
if (ZedControl == null)
{
Zjpyl = 0;
}
else
{
//如果是强制把流动条返回到头,就不需要取值了
if (isReturn0)
{
Zjpyl = 0;
}
else
{
Panel panel = ZedControl.Parent as Panel;
if (panel != null)
{
Zjpyl = panel.VerticalScroll.Value;
}
else
{
Zjpyl = 0;
}
}
}
//根据不同分辨率可能会有自己的配置偏移量可以单独设置在AIMS.xml里设置
int czpyl = 0;
int hzpyl = 0;
int dfzpyl = 0;
//try
//{
// czpyl = int.Parse(xmlOpe.GetNode("czpyl")[0].ToString());
// hzpyl = int.Parse(xmlOpe.GetNode("hzpyl")[0].ToString());
// //dfzpyl = int.Parse(xmlOpe.GetNode("dfzpyl")[0].ToString());
//}
//catch (Exception)
//{
//}
Zjpyl = Zjpyl + LocationY + czpyl;
Hzjpyl = hzpyl;
Dfzjpyl = dfzpyl;
}
/// <summary>
/// 组件内容批量清空
/// </summary>
public void ClearEdit(bool isFlash = true)
{
if (ZedControl == null) return;
foreach (AreaManageBase manage in ManageList)
{
List<PackObjBase> ables = manage.PackManage.ListPob.Where<PackObjBase>(s => s is AbleEditPackObj).ToList<PackObjBase>();
foreach (PackObjBase pack in ables)
{
AbleEditPackObj ableEdit = pack as AbleEditPackObj;
if (ableEdit != null)
{
string dstr = ableEdit.DataSourceName.Replace("_", ".");
string value = "";
EntityObjectChangeNotifier.SubObjSetValue(manage.OpeRecord, dstr, value);
ableEdit.PackText = value;
ableEdit.PackValue = value;
if (ableEdit.ControlType == EControlType.CheckBox)
{
foreach (Control conl in ableEdit.CControl.Controls)
{
CheckBox chk = conl as CheckBox;
chk.Checked = false;
}
}
}
}
}
if (isFlash)
{
DrawArea();
ZedControl.AxisChange();
ZedControl.Refresh();
}
}
/// <summary>
/// 绑定默认值
/// </summary>
public void BindDefaultValue()
{
foreach (AreaManageBase manage in ManageList)
{
List<PackObjBase> ables = manage.PackManage.ListPob.Where<PackObjBase>(s => s is AbleEditPackObj).ToList<PackObjBase>();
foreach (PackObjBase pack in ables)
{
AbleEditPackObj ableEdit = pack as AbleEditPackObj;
if (ableEdit != null && ableEdit.PackValue == "")
{
if (ableEdit.DefaultSelectValue.Trim() != "")
{
string[] defalutValues = new string[] { ableEdit.DefaultSelectValue };
if (ableEdit.DefaultSelectValue.Trim().Contains(","))
{
defalutValues = ableEdit.DefaultSelectValue.Split(',');
}
if (ableEdit.DefaultSelectValue.Trim().Contains(""))
{
defalutValues = ableEdit.DefaultSelectValue.Split('');
}
//ableEdit.PackValue = ableEdit.DefaultSelectValue;
foreach (string str in defalutValues)
{
string dstr = ableEdit.DataSourceName.Replace("_", ".");
if (ableEdit.ControlType == EControlType.CheckBox || ableEdit.ControlType == EControlType.RadioButtonList)
{
SetObjValue(manage.OpeRecord, dstr, ableEdit.PackText, str);
}
else
{
SetObjValue(manage.OpeRecord, dstr, str, str);
}
}
}
}
}
}
}
}
//排版的枚举
public enum TypesettingEnum { Horizontal, Vertical }
//纸张类型
public enum PageTypeEnum { A4, A3 }
}