StableVersion4.3/HL_DynamicElectrocardiogram/Form_CheckInECGPatient .cs

510 lines
21 KiB
C#
Raw Permalink Normal View History

2024-03-11 09:47:34 +08:00
using DevExpress.XtraEditors;
using HL_FristAidPlatform_DTO;
using HL_FristAidPlatform_Public;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data;
using System.Reflection;
using System.Windows.Forms;
namespace HL_FristAidPlatform_DynamicElectrocardiogram
{
public partial class Form_CheckInECGPatient : XtraForm
{
public Form_CheckInECGPatient()
{
InitializeComponent();
}
/// <summary>
/// 加载
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form_CheckInECGPatient_Load(object sender, EventArgs e)
{
GetEcgPatientList();
BindData();
}
#region 绑定数据
/// <summary>
/// 绑定数据
/// </summary>
private void BindData()
{
BindSystemModule();
BindAmbulance(1);
BindWristStrap(0);
}
/// <summary>
/// 绑定所属系统模块
/// </summary>
private void BindSystemModule()
{
try
{
string Url = string.Format("/api/admin/T_SYS_SystemModule/GetRightListByHospitalID?hospitalID={0}&isHaveTimeAxis=0", Information.Hospital.ID);
DataTable ResultDT = DBHelpClass.Get(Url);
if (ResultDT != null && ResultDT.Rows.Count > 0)
{
DataTable BindData = new DataTable();
BindData.Columns.Add("ID", Type.GetType("System.String"));
BindData.Columns.Add("SystemName", Type.GetType("System.String"));
BindData.Columns.Add("IconData", Type.GetType("System.Byte[]"));
foreach (DataRow item in ResultDT.Rows)
{
DataRow newRow = BindData.NewRow();
newRow["ID"] = item["ID"];
newRow["SystemName"] = item["ShortName"] + "患者";
if (!string.IsNullOrEmpty(PublicClass.ToString(item["IconData"], "")))
{
newRow["IconData"] = Convert.FromBase64String(item["IconData"].ToString());
}
else
{
newRow["IconData"] = null;
}
BindData.Rows.Add(newRow);
}
listBox_SystemModule.DataSource = BindData;
listBox_SystemModule.ValueMember = "ID";
listBox_SystemModule.DisplayMember = "SystemName";
}
}
catch (Exception ex)
{
PublicClass.WriteErrorLog(this.Text, "绑定所属系统模块:\r\n" + ex);
}
}
/// <summary>
/// 绑定标签卡
/// </summary>
/// <param name="state">状态-1:全部0:空闲1:使用中2:维护中</param>
private void BindWristStrap(int state)
{
try
{
string Url = string.Format("/api/base/T_Base_WristStrap?status={0}&deleteFlag=0", state);
DataTable WristStrapDT = DBHelpClass.Get(Url);
PublicClass.SetLookUpList(LUEdit_WristStrap, WristStrapDT, "ID", "Alias", true, "请选择");
}
catch (Exception ex)
{
PublicClass.WriteErrorLog(this.Text, "绑定标签卡:\r\n" + ex);
}
}
/// <summary>
/// 绑定当前院区空闲的急救车
/// </summary>
/// <param name="state">急救车状态-1、全部1、空闲2、出车中3、维修中4、已报废</param>
private void BindAmbulance(int state)
{
try
{
string Url = string.Format("/api/base/T_Base_Ambulance/GetListForState?state={0}&hospitalGuid={1}", state, Information.Hospital.GUID);
DataTable ResultDT = DBHelpClass.Get(Url);
PublicClass.SetLookUpList(lookUpEdit_Ambulance, ResultDT, "GUID", "PlateNumber", true, "请选择");
}
catch (Exception ex)
{
PublicClass.WriteErrorLog(this.Text, "绑定当前院区空闲的急救车:\r\n" + ex);
}
}
#endregion
/// <summary>
/// 获取当前心电患者列表
/// </summary>
private void GetEcgPatientList()
{
try
{
if (PublicHelp.IsConnectNetwork())
{
DataTable BindDT = new DataTable();
string guid = Guid.NewGuid().ToString();
string summary = Information.Hospital.Ecg_Summary;
string encryption = Util.Encryption(summary);
string authorKey = Information.Hospital.Ecg_AuthorKey;
string appId = Information.Hospital.Ecg_AppId;
string token = Information.Hospital.Ecg_Token;
string Url = "http://113.200.102.99:20018/api/mPublicEDataBs";//Information.Hospital.Ecg_URL;
string postText = "header[authorKey]=" + authorKey + "&header[appId]=" + appId + "&header[token]=" + token + "&header[ssid]" +
"=" + guid + "&header[service]=GETACTIVEWARDPRO&header[summary]=" + encryption;
var strJson = Util.ECGPostEncoding(Url, postText);
EcgRoot rootObject = JsonConvert.DeserializeObject<EcgRoot>(strJson);
if (rootObject.Result != null)
{
if (rootObject.Result.Count > 0)
{
BindDT = ListToDataTable(rootObject.Result);
}
}
gridControl_List.DataSource = BindDT;//显示结果
}
else
{
XtraMessageBox.Show("无法连接到Internet因此无法获取急救车上患者信息", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
catch (Exception ex)
{
PublicClass.WriteErrorLog(this.Text, "获取当前心电患者列表:\r\n" + ex);
}
}
/// <summary>
/// 选中行
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void gridControl_List_MouseClick(object sender, MouseEventArgs e)
{
try
{
#region 绑定详情
if (gridView_List.DataRowCount > 0)
{
int selectRow = gridView_List.GetSelectedRows()[0];
//标签卡号
string nid = PublicClass.ToString(gridView_List.GetRowCellValue(selectRow, "nid"), "").ToUpper();
LUEdit_WristStrap.Text = nid;
}
#endregion
}
catch (Exception ex)
{
PublicClass.WriteErrorLog(this.Text, "绑定详情:\r\n" + ex);
}
}
/// <summary>
/// 确认签入
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_CheckIn_Click(object sender, EventArgs e)
{
try
{
if (gridView_List.DataRowCount > 0)
{
int selectRow = gridView_List.GetSelectedRows()[0];
//心电合同编号
string Wid = PublicClass.ToString(gridView_List.GetRowCellValue(selectRow, "wid"), "");
if (!string.IsNullOrEmpty(Wid))
{
//设备编号
string Devid = PublicClass.ToString(gridView_List.GetRowCellValue(selectRow, "devid"), "");
//患者姓名
string Cname = PublicClass.ToString(gridView_List.GetRowCellValue(selectRow, "cname"), "");
//患者性别
string Sex = PublicClass.ToString(gridView_List.GetRowCellValue(selectRow, "sex"), "");
int SexCode = 0;
switch (Sex)
{
case "男":
SexCode = 1;
break;
case "女":
SexCode = 2;
break;
default:
SexCode = 0;
break;
}
//患者年龄
int Age = PublicClass.ToInt32(gridView_List.GetRowCellValue(selectRow, "age"), 0);
//身份证号码
string Ccno = PublicClass.ToString(gridView_List.GetRowCellValue(selectRow, "ccno"), "");
#region 保存信息
//验证
if (!DataVerification())
return;
#region 保存患者信息
List<T_Service_PatientDTO> list_Patient = new List<T_Service_PatientDTO>();
T_Service_PatientDTO model_Patient = new T_Service_PatientDTO();
string Url = "api/service/T_Service_Patient";
//患者编号
model_Patient.GUID = Guid.NewGuid().ToString();
//所属系统模块
model_Patient.SystemModuleID = PublicClass.ToInt64(listBox_SystemModule.SelectedValue, 0);
//所属院区编号
model_Patient.HospitalGuid = Information.Hospital.GUID;
//创建人编号
model_Patient.CreatorID = Information.User.ID;
//创建人
model_Patient.Creator = Information.User.FullName;
//创建时间
model_Patient.CreationDate = PublicClass.DateTimeNow();
//编辑时间
model_Patient.EditTime = PublicClass.DateTimeNow();
//档案归属日期
model_Patient.RegisterTime = PublicClass.DateTimeNow();
//是否三无人员
model_Patient.Category = 0;
//姓名
model_Patient.Name = Cname;
//性别
model_Patient.Gender = SexCode;
//年龄
model_Patient.Age = Age;
//证件类型
model_Patient.Credentials_Type = "1";
//证件号码
model_Patient.IdentityCard = Ccno;
#region 默认字段赋值
//急救状态
model_Patient.EmergencyState = 0;
//绕行方式 1:未绕行 2:单绕 3:双绕 4:三绕
model_Patient.IsGreenChannel = (int)Enumerate.CircumferenceMode.;
//是否上传到胸痛数据平台1是0否
model_Patient.CCPC_State = 0;
//填报状态
model_Patient.Status = 1;
//溶栓治疗 0:无 1:有 默认否
model_Patient.Thrombolysis = "0";
//是否介入治疗 0:否 1:是 默认否
model_Patient.Interventional_Therapy = "0";
#endregion
//备注
model_Patient.Note = "";
//标签卡
long WristStrapID = PublicClass.ToInt64(LUEdit_WristStrap.EditValue, -1);
model_Patient.WristStrapID = WristStrapID == -1 ? 0 : WristStrapID;
//急救车
string AmbulanceGuid = PublicClass.ToString(lookUpEdit_Ambulance.EditValue, "");
model_Patient.AmbulanceGuid = AmbulanceGuid == "" ? "" : AmbulanceGuid;
//心电合同号
model_Patient.WardshipId = Wid;
//心电回执ID
model_Patient.RecId = "";
//心电设备号
model_Patient.EqmtNo = Devid;
//病案操作更新日志
model_Patient.Operation_Log = string.Format("{0} 由 {1} 创建了患者病案\r\n", DateTime.Now.ToString(PublicClass.TimeToString), Information.User.FullName);
#endregion
list_Patient.Add(model_Patient);
ClientFactory<T_Service_PatientDTO> httpClient = new HttpClientFactory<T_Service_PatientDTO>();
Client<T_Service_PatientDTO> client = httpClient.VisitFactory();
//访问
ListEntity<T_Service_PatientDTO> t = client.Post(Url, list_Patient);
#endregion
if (t.Success)
{
//新增后更改标签卡和急救车的占用状态
#region 修改标签卡状态
Url = "/api/base/T_Base_WristStrap/UpdateStatus";
List<T_Base_WristStrapDTO> listWristStrap = new List<T_Base_WristStrapDTO>();
T_Base_WristStrapDTO modelWristStrap = new T_Base_WristStrapDTO();
modelWristStrap.ID = WristStrapID;
modelWristStrap.CreationDate = PublicClass.DateTimeNow();
modelWristStrap.Status = 1;//使用中
listWristStrap.Add(modelWristStrap);
//初始化两个工厂
ClientFactory<T_Base_WristStrapDTO> httpClientWristStrap = new HttpClientFactory<T_Base_WristStrapDTO>();
Client<T_Base_WristStrapDTO> clientWristStrap = httpClientWristStrap.VisitFactory();
//访问
ListEntity<T_Base_WristStrapDTO> tWristStrap = clientWristStrap.Post(Url, listWristStrap);
#endregion
#region 更改急救车信息
Url = "api/base/T_Base_Ambulance/UpdateState";
List<T_Base_AmbulanceDTO> listAmbulance = new List<T_Base_AmbulanceDTO>();
T_Base_AmbulanceDTO modelAmbulance = new T_Base_AmbulanceDTO();
modelAmbulance.GUID = AmbulanceGuid;
modelAmbulance.State = 2;
modelAmbulance.CreationDate = PublicClass.DateTimeNow();
listAmbulance.Add(modelAmbulance);
//初始化两个工厂
ClientFactory<T_Base_AmbulanceDTO> httpClientAmbulance = new HttpClientFactory<T_Base_AmbulanceDTO>();
Client<T_Base_AmbulanceDTO> clientAmbulance = httpClientAmbulance.VisitFactory();
//访问
clientAmbulance.Post(Url, listAmbulance);
#endregion
XtraMessageBox.Show(string.Format("签入【急救车病人】信息成功!"), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
DialogResult = DialogResult.OK;
Close();
}
else
{
XtraMessageBox.Show("保存失败,请稍后重试!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else
{
XtraMessageBox.Show("请在上方列表先选择病人!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else
{
XtraMessageBox.Show("当前没有急救病人!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
catch (Exception ex)
{
PublicClass.WriteErrorLog(this.Text, "确认签入:\r\n" + ex);
}
}
/// <summary>
/// 数据有效性验证
/// </summary>
private bool DataVerification()
{
string Cur_SystemModuleID = PublicClass.ToString(listBox_SystemModule.SelectedValue, "0");
if (Cur_SystemModuleID == "0")
{
XtraMessageBox.Show("请选择患者类型!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
listBox_SystemModule.Focus();
return false;
}
string AmbulanceGuid = PublicClass.ToString(lookUpEdit_Ambulance.EditValue, "-1");
if (AmbulanceGuid == "-1")
{
XtraMessageBox.Show("请选择急救车牌号!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
lookUpEdit_Ambulance.Focus();
return false;
}
return true;
}
/// <summary>
/// 将泛类型集合List类转换成DataTable
/// </summary>
/// <param name="list">泛类型集合</param>
/// <returns></returns>
public static DataTable ListToDataTable<T>(List<T> entitys)
{
//检查实体集合不能为空
if (entitys == null || entitys.Count < 1)
{
throw new Exception("需转换的集合为空");
}
//取出第一个实体的所有Propertie
Type entityType = entitys[0].GetType();
PropertyInfo[] entityProperties = entityType.GetProperties();
//生成DataTable的structure
//生产代码中应将生成的DataTable结构Cache起来此处略
DataTable dt = new DataTable();
for (int i = 0; i < entityProperties.Length; i++)
{
dt.Columns.Add(entityProperties[i].Name);
}
//将所有entity添加到DataTable中
foreach (object entity in entitys)
{
//检查所有的的实体都为同一类型
if (entity.GetType() != entityType)
{
throw new Exception("要转换的集合元素类型不一致");
}
object[] entityValues = new object[entityProperties.Length];
for (int i = 0; i < entityProperties.Length; i++)
{
entityValues[i] = entityProperties[i].GetValue(entity, null);
}
dt.Rows.Add(entityValues);
}
return dt;
}
#region 实体
/// <summary>
///
/// </summary>
public class ResultItem
{
/// <summary>
/// 设备编号
/// </summary>
public string wid { get; set; }
/// <summary>
/// 设备ID
/// </summary>
public string devid { get; set; }
/// <summary>
/// 患者姓名
/// </summary>
public string cname { get; set; }
/// <summary>
/// 患者性别
/// </summary>
public string sex { get; set; }
/// <summary>
/// 患者年龄
/// </summary>
public string age { get; set; }
/// <summary>
/// 患者身份证号码
/// </summary>
public string ccno { get; set; }
/// <summary>
/// 标签编号
/// </summary>
public string nid { get; set; }
}
public class Header
{
/// <summary>
///
/// </summary>
public string errorCode { get; set; }
/// <summary>
/// 成功
/// </summary>
public string errorMsg { get; set; }
/// <summary>
///
/// </summary>
public string resultCode { get; set; }
}
public class EcgRoot
{
/// <summary>
///
/// </summary>
public List<ResultItem> Result { get; set; }
/// <summary>
///
/// </summary>
public Header header { get; set; }
}
#endregion
}
}