From 684031914e867106b6244ea9aed25313bee859a4 Mon Sep 17 00:00:00 2001 From: "DESKTOP-G961P6V\\Zhh" <839860190@qq.com> Date: Tue, 30 Apr 2024 03:04:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B6=E8=B4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ChargeRequestPlugInsGem.cs | 173 ++++++++++++++++++ .../LisRequestPlugInsGem.cs | 6 +- .../PatientRegisterPluginsGemHis.cs | 6 +- .../LisRequestPlugInsGemTest.cs | 2 +- .../ChargeRequestAsbitemForPlugIns.cs | 16 ++ .../ChargeRequestForPlugIns.cs | 31 ++++ .../ChargeRequestPlugInsBase.cs | 99 +++++++++- .../ColumnReferencePlugInsBase.cs | 7 +- .../LisRequestPlugInsBase.cs | 12 +- .../PlugInsBase.cs | 9 +- .../ThirdPlugInsBase.cs | 2 +- .../ChargeRequests/ChargeRequestAppService.cs | 26 ++- .../RegisterCheckAsbitemAppService.cs | 4 +- .../ChargeRequestAsbitemManager.cs | 14 +- .../ChargeRequests/ChargeRequestManager.cs | 59 +++++- .../LisRequests/LisRequestManager.cs | 10 +- .../ChargeRequestAppServiceTest.cs | 8 +- 17 files changed, 436 insertions(+), 48 deletions(-) create mode 100644 ThirdPlugIns/Shentun.Peis.PlugIns.Gem/ChargeRequestPlugInsGem.cs create mode 100644 src/Shentun.ColumnReferencePlugIns/ChargeRequestAsbitemForPlugIns.cs create mode 100644 src/Shentun.ColumnReferencePlugIns/ChargeRequestForPlugIns.cs diff --git a/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/ChargeRequestPlugInsGem.cs b/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/ChargeRequestPlugInsGem.cs new file mode 100644 index 0000000..e59fa66 --- /dev/null +++ b/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/ChargeRequestPlugInsGem.cs @@ -0,0 +1,173 @@ +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); + } + + } +} diff --git a/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/LisRequestPlugInsGem.cs b/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/LisRequestPlugInsGem.cs index 71071af..1066355 100644 --- a/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/LisRequestPlugInsGem.cs +++ b/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/LisRequestPlugInsGem.cs @@ -16,7 +16,7 @@ namespace Shentun.Peis.PlugIns.Gem { } - public override async Task SendRequest(LisRequestPluginsInput input) + public override async Task SendRequest(LisRequestPlugInsInput input) { var patientRegisterForPlugIns = await GetPatientRegisterForPlugInsAsync(input.LisRequestId); var lisRequestForPlugIns = await GetLisRequestForPlugInsAsync(input.LisRequestId); @@ -54,7 +54,7 @@ namespace Shentun.Peis.PlugIns.Gem } } - using (DbConnection conn = new NpgsqlConnection(ConnctionStr)) + using (DbConnection conn = new NpgsqlConnection(AppConnctionStr)) { conn.Execute("delete from third_lis_request where lis_request_id = @LisRequestId", new { LisRequestId = input.LisRequestId }); @@ -101,7 +101,7 @@ namespace Shentun.Peis.PlugIns.Gem conn.Execute(sql, thirdLisRequestEntity); } - return new LisRequestPluginsOut(); + return new LisRequestPlugInsOut(); } } diff --git a/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/PatientRegisterPluginsGemHis.cs b/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/PatientRegisterPluginsGemHis.cs index 4333292..f5da4cc 100644 --- a/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/PatientRegisterPluginsGemHis.cs +++ b/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/PatientRegisterPluginsGemHis.cs @@ -16,10 +16,8 @@ namespace Shentun.Peis.PlugIns.Gem public PatientRegisterPluginsGemHis(string parmValue) : base(parmValue) { - var configurationBuilder = new ConfigurationBuilder() - .AddJsonStream(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(parmValue))); - var interfaceConfig = configurationBuilder.Build(); - _endpointAddress = interfaceConfig.GetSection("Interface").GetSection("EndpointAddress").Value; + + _endpointAddress = InterfaceConfig.GetSection("Interface").GetSection("EndpointAddress").Value; } public async Task PatientQuery(HisPatientQueryInput input) diff --git a/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/test/Shentun.Peis.PlugIns.Gem.Test/LisRequestPlugInsGemTest.cs b/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/test/Shentun.Peis.PlugIns.Gem.Test/LisRequestPlugInsGemTest.cs index 2fd48ce..be9d0b8 100644 --- a/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/test/Shentun.Peis.PlugIns.Gem.Test/LisRequestPlugInsGemTest.cs +++ b/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/test/Shentun.Peis.PlugIns.Gem.Test/LisRequestPlugInsGemTest.cs @@ -20,7 +20,7 @@ namespace Shentun.Peis.PlugIns.Gem.Test public async Task SendRequest() { var lisRequestPlugInsGem = new LisRequestPlugInsGem(GetConfigParm()); - await lisRequestPlugInsGem.SendRequest(new LisRequestPluginsInput() + await lisRequestPlugInsGem.SendRequest(new LisRequestPlugInsInput() { LisRequestId = new Guid("3a123266-4581-83c4-9099-1f24cd0f3a49") }); diff --git a/src/Shentun.ColumnReferencePlugIns/ChargeRequestAsbitemForPlugIns.cs b/src/Shentun.ColumnReferencePlugIns/ChargeRequestAsbitemForPlugIns.cs new file mode 100644 index 0000000..8b7d312 --- /dev/null +++ b/src/Shentun.ColumnReferencePlugIns/ChargeRequestAsbitemForPlugIns.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shentun.Peis.PlugIns +{ + public class ChargeRequestAsbitemForPlugIns + { + public Guid AsbitemId { get; set; } + public string AsbitemName { get; set; } = string.Empty; + public string ThirdAsbitemCode { get; set; } = string.Empty; + public decimal Charges { get; set; } + } +} diff --git a/src/Shentun.ColumnReferencePlugIns/ChargeRequestForPlugIns.cs b/src/Shentun.ColumnReferencePlugIns/ChargeRequestForPlugIns.cs new file mode 100644 index 0000000..96b8d12 --- /dev/null +++ b/src/Shentun.ColumnReferencePlugIns/ChargeRequestForPlugIns.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shentun.Peis.PlugIns +{ + public class ChargeRequestForPlugIns + { + /// + /// 收费申请单号 + /// + + public string ChargeRequestNo { get; set; } + + /// + /// HIS收费单号 + /// + public string HisChargeNo { get; set; } + + /// + /// 0、申请 1-收费,2-退费 + /// + public char ChargeRequestFlag { get; set; } + + public List Asbitems = new List (); + } +} diff --git a/src/Shentun.ColumnReferencePlugIns/ChargeRequestPlugInsBase.cs b/src/Shentun.ColumnReferencePlugIns/ChargeRequestPlugInsBase.cs index f00ff2f..1e668a6 100644 --- a/src/Shentun.ColumnReferencePlugIns/ChargeRequestPlugInsBase.cs +++ b/src/Shentun.ColumnReferencePlugIns/ChargeRequestPlugInsBase.cs @@ -1,5 +1,8 @@ -using System; +using Dapper; +using Npgsql; +using System; using System.Collections.Generic; +using System.Data.Common; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -12,20 +15,104 @@ namespace Shentun.Peis.PlugIns { } - public virtual async Task Send(ChargeRequestPluginsInput input) + public virtual async Task SendRequest(ChargeRequestPlugInsInput input) { - var result = new ChargeRequestPluginsOut(); + var result = new ChargeRequestPlugInsOut(); return result; } + + public virtual async Task CancelRequest(ChargeRequestPlugInsInput input) + { + var result = new ChargeRequestPlugInsOut(); + return result; + } + public virtual async Task Refund(ChargeRequestPlugInsInput input) + { + var result = new ChargeRequestPlugInsOut(); + return result; + } + + public async Task GetPatientRegisterForPlugInsAsync(Guid chargeRequestId) + { + using (DbConnection conn = new NpgsqlConnection(AppConnctionStr)) + { + string sql; + sql = @"SELECT DISTINCT patient.id as patient_id, + patient_register.id as patient_register_id, + patient_register.patient_register_no, + patient.patient_no , + patient_register.his_patient_id, + patient_register.medical_center_id, + patient_register.patient_name, + patient_register.sex_id, + patient_register.marital_status_id, + patient_register.birth_date, + patient_register.age, + patient.nation_id, + patient.id_no, + patient.email, + patient.telephone, + patient.mobile_telephone, + patient.address +from patient,patient_register,charge_request +where patient.id = patient_register.patient_id and + patient_register.id = charge_request.patient_register_id and + charge_request.id =@ChargeRequestId + "; + var patientRegisterForPlugIns = (await conn.QueryAsync(sql, + new { ChargeRequestId = chargeRequestId })).SingleOrDefault(); + return patientRegisterForPlugIns; + } + + } + + public async Task GeChargeRequestForPlugInsAsync(Guid chargeRequestId) + { + using (DbConnection conn = new NpgsqlConnection(AppConnctionStr)) + { + string sql; + sql = @"SELECT charge_request_no, + his_charge_no, + charge_request_flag + FROM charge_request + WHERE id =@ChargeRequestId + "; + var chargeRequestForPlugIns = (await conn.QueryAsync(sql, + new { ChargeRequestId = chargeRequestId })).SingleOrDefault(); + if (chargeRequestForPlugIns == null) + { + return null; + } + sql = @" + SELECT register_check_asbitem.asbitem_id, + asbitem.display_name as asbitem_name, + register_check_asbitem.amount * register_check_asbitem.charge_price as charges + from register_check + JOIN register_check_asbitem on register_check.id = register_check_asbitem.register_check_id + JOIN charge_request on register_check_asbitem.charge_request_id = charge_request.id + JOIN asbitem on register_check_asbitem.asbitem_id = asbitem.id + where + charge_request.id=@ChargeRequestId + "; + + chargeRequestForPlugIns.Asbitems = (await conn.QueryAsync(sql, + new { ChargeRequestId = chargeRequestId })).ToList(); + + return chargeRequestForPlugIns; + } + } } - public class ChargeRequestPluginsInput + public class ChargeRequestPlugInsInput { public Guid ChargeRequestId { get; set; } - + } + //public class ChargeRequestAsbitemPlugInsInput + //{ - public class ChargeRequestPluginsOut + //} + public class ChargeRequestPlugInsOut { public string? ThirdChargeRequestId { get; set; } } diff --git a/src/Shentun.ColumnReferencePlugIns/ColumnReferencePlugInsBase.cs b/src/Shentun.ColumnReferencePlugIns/ColumnReferencePlugInsBase.cs index 9cfb19b..6c974a2 100644 --- a/src/Shentun.ColumnReferencePlugIns/ColumnReferencePlugInsBase.cs +++ b/src/Shentun.ColumnReferencePlugIns/ColumnReferencePlugInsBase.cs @@ -15,7 +15,7 @@ namespace Shentun.Peis.PlugIns public class ColumnReferencePlugInsBase : PlugInsBase,IColumnReferencePlugIns { - protected IConfiguration InterfaceConfig; + protected string AppSql; private List _columns; private List _interfaceColumns; @@ -23,9 +23,6 @@ namespace Shentun.Peis.PlugIns public ColumnReferencePlugInsBase(string parmValue):base(parmValue) { - var configurationBuilder = new ConfigurationBuilder() - .AddJsonStream(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(parmValue))); - InterfaceConfig = configurationBuilder.Build(); AppSql = InterfaceConfig.GetSection("App").GetSection("Sql").Value; var columns = InterfaceConfig.GetSection("App").GetSection("Columns").Value; string[]? columnArry; @@ -116,7 +113,7 @@ namespace Shentun.Peis.PlugIns } public virtual async Task> GetAppCodeValuesAsync() { - using (DbConnection conn = new NpgsqlConnection(ConnctionStr)) + using (DbConnection conn = new NpgsqlConnection(AppConnctionStr)) { var list = (await conn.QueryAsync(AppSql)).ToList(); return list; diff --git a/src/Shentun.ColumnReferencePlugIns/LisRequestPlugInsBase.cs b/src/Shentun.ColumnReferencePlugIns/LisRequestPlugInsBase.cs index d545b50..e06376c 100644 --- a/src/Shentun.ColumnReferencePlugIns/LisRequestPlugInsBase.cs +++ b/src/Shentun.ColumnReferencePlugIns/LisRequestPlugInsBase.cs @@ -36,15 +36,15 @@ namespace Shentun.Peis.PlugIns } - public virtual async Task SendRequest(LisRequestPluginsInput input) + public virtual async Task SendRequest(LisRequestPlugInsInput input) { - var result = new LisRequestPluginsOut(); + var result = new LisRequestPlugInsOut(); return result; } public async Task GetPatientRegisterForPlugInsAsync(Guid lisRequestId) { - using (DbConnection conn = new NpgsqlConnection(ConnctionStr)) + using (DbConnection conn = new NpgsqlConnection(AppConnctionStr)) { string sql; sql = @"SELECT DISTINCT patient.id as patient_id, @@ -80,7 +80,7 @@ where patient.id = patient_register.patient_id and public async Task GetLisRequestForPlugInsAsync(Guid lisRequestId) { - using (DbConnection conn = new NpgsqlConnection(ConnctionStr)) + using (DbConnection conn = new NpgsqlConnection(AppConnctionStr)) { string sql; sql = @"SELECT DISTINCT lis_request.id as lis_request_id, @@ -133,14 +133,14 @@ where patient.id = patient_register.patient_id and } } - public class LisRequestPluginsInput + public class LisRequestPlugInsInput { public Guid LisRequestId { get; set; } } - public class LisRequestPluginsOut + public class LisRequestPlugInsOut { public string? ThirdLisRequestId { get; set; } } diff --git a/src/Shentun.ColumnReferencePlugIns/PlugInsBase.cs b/src/Shentun.ColumnReferencePlugIns/PlugInsBase.cs index 7f42a48..851e9a2 100644 --- a/src/Shentun.ColumnReferencePlugIns/PlugInsBase.cs +++ b/src/Shentun.ColumnReferencePlugIns/PlugInsBase.cs @@ -11,7 +11,8 @@ namespace Shentun.Peis.PlugIns public class PlugInsBase { protected IConfiguration AppConfig; - protected string? ConnctionStr; + protected IConfiguration InterfaceConfig; + protected string? AppConnctionStr; static PlugInsBase() { Dapper.DefaultTypeMap.MatchNamesWithUnderscores = true; @@ -22,9 +23,13 @@ namespace Shentun.Peis.PlugIns .SetBasePath(DirectoryHelper.GetAppDirectory()) // 设置基础路径为当前目录 .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .Build(); - ConnctionStr = AppConfig.GetSection("ConnectionStrings") + AppConnctionStr = AppConfig.GetSection("ConnectionStrings") .GetSection("Default").Value; + var configurationBuilder = new ConfigurationBuilder() + .AddJsonStream(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(parmValue))); + InterfaceConfig = configurationBuilder.Build(); + } } } diff --git a/src/Shentun.ColumnReferencePlugIns/ThirdPlugInsBase.cs b/src/Shentun.ColumnReferencePlugIns/ThirdPlugInsBase.cs index 4088f97..516d22c 100644 --- a/src/Shentun.ColumnReferencePlugIns/ThirdPlugInsBase.cs +++ b/src/Shentun.ColumnReferencePlugIns/ThirdPlugInsBase.cs @@ -22,7 +22,7 @@ namespace Shentun.Peis.PlugIns public async Task> GetColumnReferenceInterfaceCodeValues(Guid columnReferenceId, string appCodeValue) { - using (DbConnection conn = new NpgsqlConnection(ConnctionStr)) + using (DbConnection conn = new NpgsqlConnection(AppConnctionStr)) { string sql; sql = @" diff --git a/src/Shentun.Peis.Application/ChargeRequests/ChargeRequestAppService.cs b/src/Shentun.Peis.Application/ChargeRequests/ChargeRequestAppService.cs index 532335a..2b852b9 100644 --- a/src/Shentun.Peis.Application/ChargeRequests/ChargeRequestAppService.cs +++ b/src/Shentun.Peis.Application/ChargeRequests/ChargeRequestAppService.cs @@ -1,5 +1,8 @@ -using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Org.BouncyCastle.Asn1.Ocsp; using Shentun.Peis.ChargeRequestAsbitems; +using Shentun.Peis.LisRequests; using Shentun.Peis.Models; using System; using System.Collections.Generic; @@ -9,9 +12,12 @@ using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.Application.Services; using Volo.Abp.Domain.Repositories; +using Volo.Abp.Uow; namespace Shentun.Peis.ChargeRequests { + [ApiExplorerSettings(GroupName = "Work")] + [Authorize] public class ChargeRequestAppService: ApplicationService { private readonly IRepository _chargeRequestRepository; @@ -21,6 +27,7 @@ namespace Shentun.Peis.ChargeRequests private readonly IRepository _registerCheckAsbitemRepository; private readonly ChargeRequestManager _chargeRequestManager; private readonly ChargeRequestAsbitemManager _chargeRequestAsbitemManager; + private readonly IUnitOfWorkManager _unitOfWorkManager; public ChargeRequestAppService( IRepository chargeRequestRepository, IRepository chargeRequestAsbitemRepository, @@ -28,7 +35,9 @@ namespace Shentun.Peis.ChargeRequests IRepository registerCheckRepository, IRepository registerCheckAsbitemRepository, ChargeRequestManager chargeRequestManager, - ChargeRequestAsbitemManager chargeRequestAsbitemManager) + ChargeRequestAsbitemManager chargeRequestAsbitemManager, + IUnitOfWorkManager unitOfWorkManager + ) { _chargeRequestRepository = chargeRequestRepository; _chargeRequestAsbitemRepository = chargeRequestAsbitemRepository; @@ -37,6 +46,7 @@ namespace Shentun.Peis.ChargeRequests _registerCheckAsbitemRepository = registerCheckAsbitemRepository; _chargeRequestManager = chargeRequestManager; _chargeRequestAsbitemManager = chargeRequestAsbitemManager; + _unitOfWorkManager = unitOfWorkManager; } /// /// @@ -71,10 +81,10 @@ namespace Shentun.Peis.ChargeRequests foreach (var item in list) { item.registerCheckAsbitem.ChargeRequestId = chargeRequest.Id; - await _registerCheckAsbitemRepository.UpdateAsync(item.registerCheckAsbitem); + await _registerCheckAsbitemRepository.UpdateAsync(item.registerCheckAsbitem,true); } //插入申请单信息 - chargeRequest = await _chargeRequestRepository.InsertAsync(chargeRequest); + chargeRequest = await _chargeRequestRepository.InsertAsync(chargeRequest,true); foreach (var item in list) { var chargeRequestAsbitemSource = new ChargeRequestAsbitem() @@ -87,8 +97,14 @@ namespace Shentun.Peis.ChargeRequests IsCharge = 'N' }; var chargeRequestAsbitem = await _chargeRequestAsbitemManager.CreateAsync(chargeRequestAsbitemSource); - await _chargeRequestAsbitemRepository.InsertAsync(chargeRequestAsbitem); + await _chargeRequestAsbitemRepository.InsertAsync(chargeRequestAsbitem,true); } + //await _unitOfWorkManager.Current.SaveChangesAsync(); + await _unitOfWorkManager.Current.CompleteAsync(); + //await UnitOfWorkManager.Current.SaveChangesAsync(); + //await UnitOfWorkManager.Current.CompleteAsync(); + await _chargeRequestManager.SendThirChargeRequestAsync(chargeRequest.Id); + ChargeRequestDto result = new ChargeRequestDto(); result.Id = chargeRequest.Id; result.ChargeRequestNo = chargeRequest.ChargeRequestNo; diff --git a/src/Shentun.Peis.Application/RegisterCheckAsbitems/RegisterCheckAsbitemAppService.cs b/src/Shentun.Peis.Application/RegisterCheckAsbitems/RegisterCheckAsbitemAppService.cs index d71d75b..02b61df 100644 --- a/src/Shentun.Peis.Application/RegisterCheckAsbitems/RegisterCheckAsbitemAppService.cs +++ b/src/Shentun.Peis.Application/RegisterCheckAsbitems/RegisterCheckAsbitemAppService.cs @@ -336,7 +336,7 @@ namespace Shentun.Peis.RegisterAsbitems /// /// /// - [HttpGet("api/app/registerasbitem/GetCanChargeAsbitemsByPatientRegisterId")] + [HttpPost("api/app/registerasbitem/GetCanChargeAsbitemsByPatientRegisterId")] public async Task> GetCanChargeAsbitemsByPatientRegisterIdAsync(PatientRegisterIdInputDto input) { var patientReigister = await _patientRegisterRepository.GetAsync(input.PatientRegisterId); @@ -345,7 +345,7 @@ namespace Shentun.Peis.RegisterAsbitems .Include(x => x.Asbitem.ItemType) .Include(x => x.RegisterCheck) .Where(m => m.PatientRegisterId == input.PatientRegisterId && - m.IsCharge == 'Y' && m.PayTypeFlag == PayTypeFlag.PersonPay).ToList().OrderByDescending(o => o.GroupPackageId).ThenBy(o => o.Asbitem.DisplayOrder); + m.IsCharge == 'N' && m.PayTypeFlag == PayTypeFlag.PersonPay).ToList().OrderByDescending(o => o.GroupPackageId).ThenBy(o => o.Asbitem.DisplayOrder); var entdto = entlist.Select(s => new RegisterCheckAsbitemOrAsbitemDto diff --git a/src/Shentun.Peis.Domain/ChargeRequestAsbitems/ChargeRequestAsbitemManager.cs b/src/Shentun.Peis.Domain/ChargeRequestAsbitems/ChargeRequestAsbitemManager.cs index 70a0dd7..12c5d78 100644 --- a/src/Shentun.Peis.Domain/ChargeRequestAsbitems/ChargeRequestAsbitemManager.cs +++ b/src/Shentun.Peis.Domain/ChargeRequestAsbitems/ChargeRequestAsbitemManager.cs @@ -1,7 +1,12 @@ -using Shentun.Peis.Models; +using Microsoft.Extensions.Configuration; +using Shentun.Peis.Enums; +using Shentun.Peis.Models; +using Shentun.Peis.PlugIns; using System; using System.Collections.Generic; +using System.IO; using System.Linq; +using System.Reflection; using System.Text; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories; @@ -12,7 +17,9 @@ namespace Shentun.Peis.ChargeRequestAsbitems public class ChargeRequestAsbitemManager : DomainService { private readonly IRepository _repository; - public ChargeRequestAsbitemManager(IRepository repository) + + public ChargeRequestAsbitemManager(IRepository repository, + IRepository thirdInterfaceRepository) { _repository = repository; @@ -41,5 +48,8 @@ namespace Shentun.Peis.ChargeRequestAsbitems }; } + + + } } diff --git a/src/Shentun.Peis.Domain/ChargeRequests/ChargeRequestManager.cs b/src/Shentun.Peis.Domain/ChargeRequests/ChargeRequestManager.cs index ff23346..a562e07 100644 --- a/src/Shentun.Peis.Domain/ChargeRequests/ChargeRequestManager.cs +++ b/src/Shentun.Peis.Domain/ChargeRequests/ChargeRequestManager.cs @@ -1,9 +1,13 @@ -using Shentun.Peis.Enums; +using Microsoft.Extensions.Configuration; +using Shentun.Peis.Enums; using Shentun.Peis.Models; +using Shentun.Peis.PlugIns; using Shentun.Peis.SysParmValues; using System; using System.Collections.Generic; +using System.IO; using System.Linq; +using System.Reflection; using System.Text; using System.Threading.Tasks; using Volo.Abp; @@ -18,15 +22,18 @@ namespace Shentun.Peis.ChargeRequests private readonly IRepository _patientRegisterRepository; private readonly IRepository _primarykeyBuilderRepository; private readonly SysParmValueManager _sysParmValueManager; + private readonly IRepository _thirdInterfaceRepository; public ChargeRequestManager(IRepository repository, IRepository primarykeyBuilderRepository, SysParmValueManager sysParmValueManager, - IRepository patientRegisterRepository) + IRepository patientRegisterRepository, + IRepository thirdInterfaceRepository) { _repository = repository; _primarykeyBuilderRepository = primarykeyBuilderRepository; _sysParmValueManager = sysParmValueManager; _patientRegisterRepository = patientRegisterRepository; + _thirdInterfaceRepository = thirdInterfaceRepository; } /// @@ -51,6 +58,54 @@ namespace Shentun.Peis.ChargeRequests }; } + public async Task SendThirChargeRequestAsync(Guid id) + { + var thirdInterfaces = (await _thirdInterfaceRepository.GetListAsync(o => o.ThirdInterfaceType == ThirdInterfaceTypeFlag.ChargeRequest)) + .OrderBy(o => o.DisplayOrder).ToList(); + foreach (var thirdInterface in thirdInterfaces) + { + var chargeRequestPlugInsInput = new ChargeRequestPlugInsInput() + { + ChargeRequestId = id + }; + + var parmValue = thirdInterface.ParmValue; + var configurationBuilder = new ConfigurationBuilder() + .AddJsonStream(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(parmValue))); + var config = configurationBuilder.Build(); + var assemblyName = config.GetSection("Interface").GetSection("AssemblyName").Value; + var className = config.GetSection("Interface").GetSection("ClassName").Value; + object[] objects = new object[] { chargeRequestPlugInsInput }; + var chargeRequestPluginsOut = await InvokeAsync(assemblyName, className, parmValue, "SendRequest", objects); + } + } + + private async Task InvokeAsync(string assemblyName, string className, string classConstructorArg, string methodName, object[] args = null) + { + Assembly assembly = Assembly.Load(assemblyName); + Type type = assembly.GetType(className); + // 创建类的实例 + object instance = Activator.CreateInstance(type, classConstructorArg); + // 获取方法信息 + MethodInfo method = type.GetMethod(methodName); + // 调用方法,如果方法需要参数,可以传入对应的参数数组,例如: new object[] { arg1, arg2 } + ChargeRequestPlugInsOut returnValue; + var isAsync = (method.ReturnType == typeof(Task) || + (method.ReturnType.IsGenericType && method.ReturnType.GetGenericTypeDefinition() == typeof(Task<>))); + if (isAsync) + { + // 使用反射调用方法 + + //object returnValue = method.Invoke(instance, args); + returnValue = await (Task)method.Invoke(instance, args); + } + else + { + returnValue = (ChargeRequestPlugInsOut)method.Invoke(instance, args); + + } + return returnValue; + } private async Task CreateChargeRequestNo(Guid medicalCenterId) { string LisRequestNo = ""; //条码号 diff --git a/src/Shentun.Peis.Domain/LisRequests/LisRequestManager.cs b/src/Shentun.Peis.Domain/LisRequests/LisRequestManager.cs index b0d5506..da8ec0a 100644 --- a/src/Shentun.Peis.Domain/LisRequests/LisRequestManager.cs +++ b/src/Shentun.Peis.Domain/LisRequests/LisRequestManager.cs @@ -325,7 +325,7 @@ namespace Shentun.Peis.LisRequests .OrderBy(o => o.DisplayOrder).ToList(); foreach (var thirdInterface in thirdInterfaces) { - var lisRequestPluginsInput = new LisRequestPluginsInput() + var lisRequestPluginsInput = new LisRequestPlugInsInput() { LisRequestId = id }; @@ -474,7 +474,7 @@ namespace Shentun.Peis.LisRequests public Guid SampleGroupId { get; set; } public Guid? LisRequestId { get; set; } } - private async Task InvokeAsync(string assemblyName, string className, string classConstructorArg, string methodName, object[] args = null) + private async Task InvokeAsync(string assemblyName, string className, string classConstructorArg, string methodName, object[] args = null) { Assembly assembly = Assembly.Load(assemblyName); Type type = assembly.GetType(className); @@ -483,7 +483,7 @@ namespace Shentun.Peis.LisRequests // 获取方法信息 MethodInfo method = type.GetMethod(methodName); // 调用方法,如果方法需要参数,可以传入对应的参数数组,例如: new object[] { arg1, arg2 } - LisRequestPluginsOut returnValue; + LisRequestPlugInsOut returnValue; var isAsync = (method.ReturnType == typeof(Task) || (method.ReturnType.IsGenericType && method.ReturnType.GetGenericTypeDefinition() == typeof(Task<>))); if (isAsync) @@ -491,11 +491,11 @@ namespace Shentun.Peis.LisRequests // 使用反射调用方法 //object returnValue = method.Invoke(instance, args); - returnValue = await (Task)method.Invoke(instance, args); + returnValue = await (Task)method.Invoke(instance, args); } else { - returnValue = (LisRequestPluginsOut)method.Invoke(instance, args); + returnValue = (LisRequestPlugInsOut)method.Invoke(instance, args); } return returnValue; diff --git a/test/Shentun.Peis.Application.Tests/ChargeRequestAppServiceTest.cs b/test/Shentun.Peis.Application.Tests/ChargeRequestAppServiceTest.cs index 4492614..54a57a5 100644 --- a/test/Shentun.Peis.Application.Tests/ChargeRequestAppServiceTest.cs +++ b/test/Shentun.Peis.Application.Tests/ChargeRequestAppServiceTest.cs @@ -38,11 +38,11 @@ namespace Shentun.Peis var entity = new CreateChargeRequestDto() { - PatientRegisterId = new Guid("3a11ee70-02cb-c5e6-a087-79ecdd0356b6"), - RegisterCheckAsbitems = new List() + PatientRegisterId = new Guid("3a123c55-06de-4988-691c-448b5af468ff"), + RegisterCheckAsbitems = new List() { - new CreateChargeRequestAsbitemDto() {RegisterCheckAsbitemId = new Guid("3a11ee70-0319-2fb3-5bf1-e3796dadda1c")}, - new CreateChargeRequestAsbitemDto() {RegisterCheckAsbitemId = new Guid("3a11ee70-0319-359e-164c-3bbd31234ffd")} + new CreateChargeRequestAsbitemDto() {RegisterCheckAsbitemId = new Guid("3a123c55-0792-17bd-6d63-d7b3238aca18")}, + new CreateChargeRequestAsbitemDto() {RegisterCheckAsbitemId = new Guid("3a123c55-0791-2d82-97be-1bf9a6152513")} } };