using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Transactions;
using System.Data;
using System.Data.Common;
using IL.Common;
using System.Xml;
namespace MediII.Adapter.BizComponent.ADT
{
///
/// 住院就诊记录
///
public class ADT_A01B04_Handler : ADTHandler
{
public override void Handler(string m, string ID)
{
var isql = @"insert into dbo.zhuyuan_original(No,patient_zyh,patient_id,RY_DATE,RY_UNIT,RY_BQ,RY_BED,CY_DATE,CY_UNIT,CY_BQ,age,patient_name,Sex,address,JG_DOCT_GH,SZ_DOCT_GH,Nurse_grade,ICD_CODE_RY1,ICD_CODE_RY2,ICD_CODE_RY3,ICD_CODE_RY4,ICD_CODE_CY1,ICD_CODE_CY2,ICD_CODE_CY3,ICD_CODE_CY4,CY_Kind) Value();";
//初始化
var rtnMsg = string.Empty;
var msgHead = string.Empty;
var msgBody = string.Empty;
var resultCode = string.Empty;
var result = string.Empty;
WebService server = new WebService();
OperateXmlUtil xmlHelper = new OperateXmlUtil();
//读取配置的凭证号
var cert = System.Configuration.ConfigurationManager.AppSettings["cert"];
//读取就诊流水号
//string visitNo = xmlHelper.XpathRead(m, "//*[@root='2.16.156.10011.2.5.1.9']", "extension");
string visitNo = m;
//拼接接口访问参数
msgBody = xmlHelper.GetMsgBody(visitNo);
msgHead = xmlHelper.GetMsgHead("getTransInfo", cert);
//接口访问
rtnMsg = server.TestInterface(msgHead, msgBody);
//存储访问记录
MessageHelper.SaveSendMsg(Scanctx, ID, "ADT^A01[B04]", msgHead, msgBody, rtnMsg);
//消息判断是否成功
if (!xmlHelper.isSuccess(rtnMsg, ref resultCode, ref result))
{
//存储访问记录
throw new Exception(result);
}
//更新发送表,保存留档
//返回数据解析
XmlNode root = xmlHelper.GetContentRootNode(rtnMsg);
XmlNodeList list = root.SelectNodes("//returnContents//returnContent");
if (list.Count <= 0)
return;
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew))
{
var delSql = @"delete from dbo.patient_trans where patient_zyh=@patient_zyh";
var cmd = ctx.DBGetSqlStringCommand(delSql);
ctx.AddInParameter(cmd, "patient_zyh", System.Data.DbType.String, visitNo);
ctx.DBExecuteNonQuery(cmd);//
var fsql = @"insert into dbo.patient_trans(patient_zyh,patient_id,TRANS_DATE,TRANS_UNIT,TRANS_BQ,TRANS_BED,zk_UNIT,zk_BQ,zk_BED) Values(@patient_zyh,@patient_id,@TRANS_DATE,@TRANS_UNIT,@TRANS_BQ,@TRANS_BED,@zk_UNIT,@zk_BQ,@zk_BED)";
//住院转科转床
foreach (XmlElement xn in list)
{
var dcmd = ctx.DBGetSqlStringCommand(fsql);
ctx.AddInParameter(dcmd, "patient_zyh", System.Data.DbType.String, xn.SelectSingleNode("patient_zyh").InnerText);
ctx.AddInParameter(dcmd, "patient_id", System.Data.DbType.String, xn.SelectSingleNode("patient_id").InnerText);
ctx.AddInParameter(dcmd, "TRANS_DATE", System.Data.DbType.DateTime, xn.SelectSingleNode("TRANS_DATE").InnerText);
ctx.AddInParameter(dcmd, "TRANS_UNIT", System.Data.DbType.String, xn.SelectSingleNode("TRANS_UNIT").InnerText);
ctx.AddInParameter(dcmd, "TRANS_BQ", System.Data.DbType.String, xn.SelectSingleNode("TRANS_BQ").InnerText);
ctx.AddInParameter(dcmd, "TRANS_BED", System.Data.DbType.String, xn.SelectSingleNode("TRANS_BED").InnerText);
ctx.AddInParameter(dcmd, "zk_UNIT", System.Data.DbType.String, xn.SelectSingleNode("zk_UNIT").InnerText);
ctx.AddInParameter(dcmd, "zk_BQ", System.Data.DbType.String, xn.SelectSingleNode("zk_BQ").InnerText);
ctx.AddInParameter(dcmd, "zk_BED", System.Data.DbType.String, xn.SelectSingleNode("zk_BED").InnerText);
ctx.DBExecuteNonQuery(dcmd);//
}
scope.Complete();
}
}
///
/// 获取门诊就诊次数
///
///
private int GetOutNumByChartNo(string chartNo)
{
string OutPatientSql = @"select count(1)
from HealthCare.dbo.OutPatient a, HealthCare.dbo.VisitRecord b
where a.VisitNo = b.VisitNo AND b.ChartNo= @ChartNo
AND a.VisitStatus<>'D' ";
var cmd = SqlDataAccess.GetSqlStringCommand(ctx, OutPatientSql);
SqlDataAccess.AddInParameter(ctx, cmd, "ChartNo", DbType.AnsiString, chartNo);
return int.Parse(StrHelepr.Obj2StrTrim(SqlDataAccess.ExecuteScalar(ctx, cmd))); //看诊次数
}
///
/// 获取急诊就诊次数
///
///
private int GetEmgNumByChartNo(string chartNo)
{
string EmgPatientSql = @"select count(1) from HealthCare.dbo.Emergency a, HealthCare.dbo.VisitRecord b
where a.VisitNo = b.VisitNo
AND b.ChartNo= @ChartNo AND a.VisitStatus<>'D' ";
var cmd = SqlDataAccess.GetSqlStringCommand(ctx, EmgPatientSql);
SqlDataAccess.AddInParameter(ctx, cmd, "ChartNo", DbType.AnsiString, chartNo);
return int.Parse(StrHelepr.Obj2StrTrim(SqlDataAccess.ExecuteScalar(ctx, cmd))); //看诊次数
}
}
}