using Dapper; using Npgsql; using ServiceReferenceHzcyHis; using System; using System.Collections.Generic; using System.Data.Common; using System.Linq; using System.ServiceModel; using System.Text; using System.Threading.Tasks; using static ServiceReferenceHzcyHis.bstjPortTypeClient; namespace Shentun.Peis.PlugIns.Gem { public class ChargeRequestPlugInsGem : ChargeRequestPlugInsBase { private string _endpointAddress = ""; public ChargeRequestPlugInsGem(string parmValue) : base(parmValue) { _endpointAddress = InterfaceConfig.GetSection("Interface").GetSection("EndpointAddress").Value; } public override async Task SendRequest(ChargeRequestPlugInsInput input) { //建立人员档案 var patientRegisterForPlugIns = await GetPatientRegisterForPlugInsAsync(input.ChargeRequestId); var chargeRequestForPlugIns = await GeChargeRequestForPlugInsAsync(input.ChargeRequestId); if(chargeRequestForPlugIns == null) { throw new Exception("没有申请单信息"); } if (!chargeRequestForPlugIns.Asbitems.Any()) { throw new Exception("申请单没有组合项目信息"); } if (patientRegisterForPlugIns.BirthDate == null) { throw new Exception("出生日期不能为空"); } var hisPatientQueryInput = new HisPatientQueryInput() { Data = new HisPatientQueryDataInput() { MsgHeader = new HisMsgHeaderInput() { Sender = "PEIS", MsgType = "SVR_ODS_1101", MsgVersion = "3.1", }, Patient = new HisPatientQueryPatientInput() { IdCard = patientRegisterForPlugIns.IdNo, IdCardCode = "01", Name = patientRegisterForPlugIns.PatientName, Sex = "1", BirthDate = ((DateTime)patientRegisterForPlugIns.BirthDate).ToString("yyyy-MM-dd", System.Globalization.DateTimeFormatInfo.InvariantInfo), PatientPhone = patientRegisterForPlugIns.MobileTelephone, EthnicGroupCode = "01", WorkUnit = patientRegisterForPlugIns.CustomerOrgName, Address = patientRegisterForPlugIns.Address, } } }; var result = await PatientQuery(hisPatientQueryInput); if (result.MsgHeader.Status != "true") { throw new Exception("建立HIS档案失败"+ result.MsgHeader.Detail); } //更新人员登记信息 using (DbConnection conn = new NpgsqlConnection(AppConnctionStr)) { conn.Execute(@"update patient_register set his_patient_id = @HisPatientId where id = @PatientRegisterId", new { HisPatientId = result.Patient.PatientId, PatientRegisterId = patientRegisterForPlugIns.PatientRegisterId }); } //发送项目 var hisInput = new HisMecSaveInput() { Data = new HisMecSaveDataInput() { MsgHeader = new HisMsgHeaderInput() { Sender = "PEIS", MsgType = "SVR_ODS_6101", MsgVersion = "3.1", }, Items = new List() { new HisMecSaveDataItemInput() { ExamRequestNo =chargeRequestForPlugIns.ChargeRequestNo, FeeType = "1", EmpId = result.Patient.PatientId, DeptId = "", DoctId = "", ExeDeptId = "", Tjunit = patientRegisterForPlugIns.CustomerOrgName, Tjfee = chargeRequestForPlugIns.Asbitems.Sum(o=>o.Charges).ToString(), Ztxm = "", Remark = "体检科" }, } } }; var mecSaveResult = await MecSave(hisInput); if (mecSaveResult.MsgHeader.Status != "true") { throw new Exception("建立HIS档案失败" + mecSaveResult.MsgHeader.Detail); } //更新申请单信息 using (DbConnection conn = new NpgsqlConnection(AppConnctionStr)) { conn.Execute(@"update charge_request set his_charge_no = @HisChargeNo where id = @ChargeRequestId", new { HisChargeNo = mecSaveResult.MsgHeader.Yjxh, ChargeRequestId = input.ChargeRequestId }); } return new ChargeRequestPlugInsOut(); } public async Task PatientQuery(HisPatientQueryInput input) { using (var client = CreateClient()) { input.SeviceBaseArg.Service = "patientQuery"; var data = XmlHelper.SerializeToXml(input.Data); var resultStr = (await client.invokeAsync(input.SeviceBaseArg.Service, input.SeviceBaseArg.Urid, input.SeviceBaseArg.Pwd, data)).@return; var result = XmlHelper.DeserializeXml(resultStr); return result; } } public async Task MecSave(HisMecSaveInput input) { using (var client = CreateClient()) { input.SeviceBaseArg.Service = "mecSave"; var data = XmlHelper.SerializeToXml(input.Data); var resultStr = (await client.invokeAsync(input.SeviceBaseArg.Service, input.SeviceBaseArg.Urid, input.SeviceBaseArg.Pwd, data)).@return; var result = XmlHelper.DeserializeXml(resultStr); return result; } } private bstjPortTypeClient CreateClient() { return new bstjPortTypeClient(EndpointConfiguration.bstjHttpSoap11Endpoint, _endpointAddress); } } }