StableVersion4.3/HL_FristAidPlatform_DataBase/TranService/EmergencyTriageService.cs

325 lines
16 KiB
C#

using HL_FristAidPlatform_Help;
using HL_FristAidPlatform_IDataBase;
using HL_FristAidPlatform_Models;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Data;
namespace HL_FristAidPlatform_DataBase
{
public class EmergencyTriageService : BaseDB, IEmergencyTriageService
{
public SqlSugarClient db = GetClient();
/// <summary>
/// 分诊保存
/// </summary>
/// <param name="fp"></param>
/// <param name="checkup"></param>
/// <param name="ass"></param>
/// <param name="patient"></param>
/// <param name="info"></param>
/// <param name="prehospital"></param>
/// <returns></returns>
public string EmergencyTriageTran(T_Service_FirstAid_PatientInfo fp, T_Service_FirstAid_HealthCheckup checkup, T_Service_FirstAid_AssistantExamination ass, T_Service_Patient patient, T_Service_ChestPain_FirstAIDInfo info, T_Service_Apoplexy_Prehospital prehospital, long CreatorID)
{
try
{
db.Ado.BeginTran();
db.Insertable(patient).IgnoreColumns(ignoreNullColumn: true).ExecuteCommand();
db.Insertable(fp).IgnoreColumns(ignoreNullColumn: true).ExecuteCommand();
if (!string.IsNullOrEmpty(checkup.GUID))
{
db.Insertable(checkup).IgnoreColumns(ignoreNullColumn: true).ExecuteCommand();
}
if (!string.IsNullOrEmpty(ass.GUID))
{
db.Insertable(ass).IgnoreColumns(ignoreNullColumn: true).ExecuteCommand();
}
if (!string.IsNullOrEmpty(info.GUID))
{
db.Insertable(info).IgnoreColumns(ignoreNullColumn: true).ExecuteCommand();
}
if (!string.IsNullOrEmpty(prehospital.GUID))
{
db.Insertable(prehospital).IgnoreColumns(ignoreNullColumn: true).ExecuteCommand();
}
if (patient.SystemModuleID == 2)//胸痛类型
{
//胸痛诊疗
T_Service_ChestPain_TreatmentInfo treatmentInfo = new T_Service_ChestPain_TreatmentInfo();
treatmentInfo.PatientGuid = patient.GUID;
treatmentInfo.CreatorID = CreatorID;
treatmentInfo.CreationDate = DateTime.Now;
treatmentInfo.GUID = Guid.NewGuid().ToString();
db.Insertable(treatmentInfo).IgnoreColumns(ignoreNullColumn: true).ExecuteCommand();
//冠状动脉造影
T_Service_ChestPain_CoronaryAngiographie coronary = new T_Service_ChestPain_CoronaryAngiographie();
coronary.PatientGuid = patient.GUID;
coronary.CreatorID = CreatorID;
coronary.CreationDate = DateTime.Now;
coronary.GUID = Guid.NewGuid().ToString();
db.Insertable(coronary).IgnoreColumns(ignoreNullColumn: true).ExecuteCommand();
//转归表
T_Service_ChestPain_OutComeInfo outComeInfo = new T_Service_ChestPain_OutComeInfo();
outComeInfo.PatientGuid = patient.GUID;
outComeInfo.CreatorID = CreatorID;
outComeInfo.CreationDate = DateTime.Now;
outComeInfo.GUID = Guid.NewGuid().ToString();
db.Insertable(outComeInfo).IgnoreColumns(ignoreNullColumn: true).ExecuteCommand();
//增加对应模块的时间节点记录业务 且排除已存在的记录
string Url = string.Format("SELECT ID FROM T_Base_TimeAxis WHERE SystemModuleID={0} AND IsDisplayTimeAxis=0 AND DeleteFlag=0 AND ID NOT IN(SELECT TimeAxisID FROM T_Service_ChestPain_PatientsTimeAxis WHERE PatientGuid='{1}' AND DeleteFlag=0) ORDER BY OrderBy", patient.SystemModuleID, patient.GUID);
DataTable dataTable = db.Ado.GetDataTable(Url);
int number = 0;
if (dataTable.Rows.Count > 0)
{
foreach (DataRow item in dataTable.Rows)
{
T_Service_ChestPain_PatientsTimeAxis InsertModel = new T_Service_ChestPain_PatientsTimeAxis();
InsertModel.GUID = Guid.NewGuid().ToString();
InsertModel.PatientGuid = patient.GUID;
InsertModel.TimeAxisID = Convert.ToInt32(item["ID"] + "");
InsertModel.DeleteFlag = 0;
InsertModel.IsAutoForRFID = 0;
InsertModel.SystemModuleID = patient.SystemModuleID;
number = db.Insertable(InsertModel).InsertColumns(it => new { it.GUID, it.PatientGuid, it.TimeAxisID, it.DeleteFlag, it.IsAutoForRFID, it.SystemModuleID }).ExecuteReturnIdentity();
}
}
}
if (patient.SystemModuleID == 3)
{
//增加对应模块的时间节点记录业务 且排除已存在的记录
string Url = string.Format("SELECT ID FROM T_Base_TimeAxis WHERE SystemModuleID={0} AND IsDisplayTimeAxis=0 AND DeleteFlag=0 AND ID NOT IN(SELECT TimeAxisID FROM T_Service_Apoplexy_PatientsTimeAxis WHERE PatientGuid='{1}' AND DeleteFlag=0) ORDER BY OrderBy", patient.SystemModuleID, patient.GUID);
DataTable dataTable = db.Ado.GetDataTable(Url);
int number = 0;
if (dataTable.Rows.Count > 0)
{
foreach (DataRow item in dataTable.Rows)
{
T_Service_Apoplexy_PatientsTimeAxis InsertModel = new T_Service_Apoplexy_PatientsTimeAxis();
InsertModel.GUID = Guid.NewGuid().ToString();
InsertModel.PatientGuid = patient.GUID;
InsertModel.SystemModuleID = patient.SystemModuleID;
InsertModel.TimeAxisID = Convert.ToInt32(item["ID"] + "");
InsertModel.DeleteFlag = 0;
InsertModel.IsAutoForRFID = 0;
number = db.Insertable(InsertModel).InsertColumns(it => new { it.GUID, it.PatientGuid, it.SystemModuleID, it.TimeAxisID, it.DeleteFlag, it.IsAutoForRFID }).ExecuteReturnIdentity();
}
}
}
var task = db.Queryable<T_Service_FirstAid_AlarmInfo>().Where(i => i.GUID == fp.TaskGUID).First();
if (task != null)
{
task.ActualPatientsNumber = task.ActualPatientsNumber + 1;
db.Updateable(task).ExecuteCommand();
}
db.Ado.CommitTran();
return patient.GUID;
}
catch (Exception ex)
{
db.Ado.RollbackTran();
Help.WriteErrorLog("急诊分诊:分诊保存(EmergencyTriageTran)", ex.ToString());
return "";
}
}
/// <summary>
/// 新增急诊分诊患者
/// </summary>
/// <param name="fp"></param>
/// <param name="checkup"></param>
/// <param name="ass"></param>
/// <param name="patient"></param>
/// <returns></returns>
public string AddEmergencyTriage(T_Service_FirstAid_PatientInfo fp, T_Service_FirstAid_HealthCheckup checkup, T_Service_FirstAid_AssistantExamination ass, T_Service_Patient patient)
{
try
{
db.Ado.BeginTran();
db.Insertable(patient).IgnoreColumns(ignoreNullColumn: true).ExecuteCommand();
db.Insertable(fp).IgnoreColumns(ignoreNullColumn: true).ExecuteCommand();
if (!string.IsNullOrEmpty(checkup.GUID))
{
db.Insertable(checkup).IgnoreColumns(ignoreNullColumn: true).ExecuteCommand();
}
if (!string.IsNullOrEmpty(ass.GUID))
{
db.Insertable(ass).IgnoreColumns(ignoreNullColumn: true).ExecuteCommand();
}
db.Ado.CommitTran();
return patient.GUID;
}
catch (Exception ex)
{
db.Ado.RollbackTran();
Help.WriteErrorLog("急诊分诊:分诊保存(EmergencyTriage)", ex.ToString());
return "";
}
}
public string AddBatchPatient(T_Service_FirstAid_PatientInfo fp,T_Service_Patient patient)
{
try
{
db.Ado.BeginTran();
db.Insertable(patient).IgnoreColumns(ignoreNullColumn: true).ExecuteCommand();
db.Insertable(fp).IgnoreColumns(ignoreNullColumn: true).ExecuteCommand();
db.Ado.CommitTran();
return patient.GUID;
}
catch (Exception ex)
{
db.Ado.RollbackTran();
Help.WriteErrorLog("急诊分诊:批量创建患者(AddBatchPatient)", ex.ToString());
return "";
}
}
/// <summary>
/// 出科召回
/// </summary>
/// <param name="fp"></param>
/// <returns></returns>
public string RecallDepartment(T_Service_FirstAid_PatientInfo fp)
{
try
{
return db.Updateable<T_Service_FirstAid_PatientInfo>(t => t.TriageDepartment == fp.TriageDepartment).Where(t => t.PatientGUID == fp.PatientGUID).ExecuteCommand().ToString();
}
catch (Exception ex)
{
db.Ado.RollbackTran();
Help.WriteErrorLog("急诊分诊:出科召回(RecallDepartment)", ex.ToString());
return "";
}
}
/// <summary>
/// 交接 非重大事故
/// </summary>
/// <param name="perlist"></param>
/// <param name="ambList"></param>
/// <param name="call"></param>
/// <param name="id"></param>
/// <returns></returns>
public bool HandoverVehicleAndPer(T_Service_Patient patient, T_Service_FirstAid_HealthCheckup health, List<T_Service_FirstAid_Personnel> perlist, List<T_Base_Ambulance> ambList, T_Service_FirstAid_Call call, int id)
{
try
{
db.Ado.BeginTran();
if (patient != null)
{
db.Insertable(patient).IgnoreColumns(ignoreNullColumn: true).ExecuteCommand();
db.Insertable(health).IgnoreColumns(ignoreNullColumn: true).ExecuteCommand();
// 新增工作量 评分统计
T_Service_FirstAid_WorkLoad work = new T_Service_FirstAid_WorkLoad();
if (!SqlFunc.IsNullOrEmpty(health.Pulse))
work.FourTestsMark = work.FourTestsMark + 1;
if (!SqlFunc.IsNullOrEmpty(health.HeartRate))
work.FourTestsMark = work.FourTestsMark + 1;
if (!SqlFunc.IsNullOrEmpty(health.SystolicPressure) && !SqlFunc.IsNullOrEmpty(health.DiastolicPressure))
work.FourTestsMark = work.FourTestsMark + 1;
if (!SqlFunc.IsNullOrEmpty(health.Temperature))
work.FourTestsMark = work.FourTestsMark + 1;
work.CensusScore = work.CensusScore + work.FourTestsMark;
if (work != null)
if (work != null)
{
work.GUID = Guid.NewGuid().ToString();
work.CallGUID = call.GUID;
db.Insertable(work).IgnoreColumns(ignoreNullColumn: true).ExecuteCommand();
}
}
if (perlist != null)
db.Updateable(perlist).SetColumns(t => t.CurrentState == 0).ExecuteCommand();
if (ambList != null)
db.Updateable(ambList).SetColumns(t => t.State == 1).ExecuteCommand();
db.Updateable<T_Service_FirstAid_Call>().SetColumns(it =>
new T_Service_FirstAid_Call
{
HandoverTime = DateTime.Now.ToString(),
HandoverUser = call.HandoverUser,
TaskState = 5
}).Where(it => it.GUID == call.GUID).ExecuteCommand();
if (id > 0)
db.Updateable<T_Base_WristStrap>().SetColumns(it => it.Status == 0).Where(it => it.ID == id).ExecuteCommand();
db.Ado.CommitTran();
return true;
}
catch (Exception ex)
{
return false;
Help.WriteErrorLog("急诊分诊:交接 非重大事故(HandoverVehicleAndPer)", ex.ToString());
throw;
}
}
/// <summary>
/// 交接 重大事故(未修改标签卡状态 后期加)
/// </summary>
/// <param name="perlist"></param>
/// <param name="ambList"></param>
/// <returns></returns>
public bool HandoverVehicleAndPer(List<T_Service_FirstAid_Personnel> perlist, List<T_Base_Ambulance> ambList, string guid)
{
try
{
db.Ado.BeginTran();
if (perlist != null && perlist.Count > 0)
db.Updateable(perlist).SetColumns(t => t.CurrentState == 0).ExecuteCommand();
if (ambList != null && ambList.Count > 0)
db.Updateable(ambList).SetColumns(t => t.State == 1).ExecuteCommand();
string sql = string.Format(@" select GUID, Name, CurrentState,Role,Gender from dbo.T_Service_FirstAid_Personnel where GUID in
(select SUBSTRING(a.AccompanyinPersonnel, number, CHARINDEX(',', a.AccompanyinPersonnel + ',', number) - number)
from dbo.T_Service_FirstAid_Call a,master..spt_values
where GUID = '{0}'
and CurrentState=2
and number >= 1 and number<len(a.AccompanyinPersonnel)
and type = 'p'
and SUBSTRING(',' + a.AccompanyinPersonnel,number,1)= ',')
", guid);
DataTable dt = db.Ado.GetDataTable(sql);
string JsonStr1 = Help.DataTableToJsonStr(dt);
string sql2 = string.Format(@"select GUID, PlateNumber, State from dbo.T_Base_Ambulance where GUID in (select SUBSTRING(a.VehicleGUID, number, CHARINDEX(',', a.VehicleGUID + ',', number) - number)
from dbo.T_Service_FirstAid_Call a,master..spt_values
where GUID = '{0}'
and State=2
and number >= 1 and number<len(a.VehicleGUID)
and type = 'p'
and SUBSTRING(',' + a.VehicleGUID,number,1)= ',')", guid);
DataTable dt2 = db.Ado.GetDataTable(sql2);
string JsonStr2 = Help.DataTableToJsonStr(dt2);
//没有存在未交接的人员和车辆时,更新状态
if (string.IsNullOrEmpty(JsonStr1.Replace("[", "").Replace("]", "")) && string.IsNullOrEmpty(JsonStr2.Replace("[", "").Replace("]", "")))
{
db.Updateable<T_Service_FirstAid_Call>().SetColumns(it => new T_Service_FirstAid_Call() { TaskState = 5, HandoverTime = DateTime.Now.ToString() }).Where(it => it.GUID == guid).ExecuteCommand();
}
db.Ado.CommitTran();
return true;
}
catch (Exception ex)
{
return false;
Help.WriteErrorLog("急诊分诊:交接 重大事故(HandoverVehicleAndPer)", ex.ToString());
throw;
}
}
}
}