From d80bcca121c43fe37b69f6e4d0ca4c55bd63d657 Mon Sep 17 00:00:00 2001 From: "DESKTOP-G961P6V\\Zhh" <839860190@qq.com> Date: Tue, 30 Apr 2024 04:50:17 +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 | 112 ++++++++++++++++++ .../ChargeRequestPlugInsBase.cs | 2 +- .../ChargeRequests/ChargeRequestAsbitemDto.cs | 14 +++ .../ChargeRequests/ChargeRequestDto.cs | 10 ++ .../ChargeRequests/ChargeRequestIdInputDto.cs | 11 ++ .../PatientRegisterOrNoDto.cs | 1 + .../RegisterCheckAsbitemOrAsbitemDto.cs | 1 + .../ChargeRequests/ChargeRequestAppService.cs | 110 ++++++++++++++++- .../PatientRegisterAppService.cs | 1 + .../RegisterCheckAsbitemAppService.cs | 1 + .../ChargeRequests/ChargeRequestManager.cs | 5 +- 11 files changed, 263 insertions(+), 5 deletions(-) create mode 100644 src/Shentun.Peis.Application.Contracts/ChargeRequests/ChargeRequestAsbitemDto.cs create mode 100644 src/Shentun.Peis.Application.Contracts/ChargeRequests/ChargeRequestIdInputDto.cs diff --git a/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/ChargeRequestPlugInsGem.cs b/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/ChargeRequestPlugInsGem.cs index e59fa66..e5e4807 100644 --- a/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/ChargeRequestPlugInsGem.cs +++ b/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/ChargeRequestPlugInsGem.cs @@ -130,7 +130,72 @@ namespace Shentun.Peis.PlugIns.Gem return new ChargeRequestPlugInsOut(); } + public override async Task CancelRequest(ChargeRequestPlugInsInput input) + { + var chargeRequestForPlugIns = await GeChargeRequestForPlugInsAsync(input.ChargeRequestId); + if (chargeRequestForPlugIns == null) + { + throw new Exception("没有申请单信息"); + } + var hisInput = new HisCancelQrCodeInput() + { + Data = new HisCancelQrCodeDataInput() + { + MsgHeader = new HisMsgHeaderInput() + { + Sender = "PEIS", + MsgType = "SVR_ODS_6105", + MsgVersion = "3.1", + }, + Item = new HisCancelQrCodeDataItemInput() + { + Yjxh = chargeRequestForPlugIns.HisChargeNo, + ExamRequestNo = chargeRequestForPlugIns.ChargeRequestNo + } + } + }; + + var result = await CancelQrCode(hisInput); + if (result.MsgHeader.Status != "true") + { + throw new Exception("作废申请单失败" + result.MsgHeader.Detail); + } + return new ChargeRequestPlugInsOut(); + } + public override async Task RefundRequest(ChargeRequestPlugInsInput input) + { + var chargeRequestForPlugIns = await GeChargeRequestForPlugInsAsync(input.ChargeRequestId); + if (chargeRequestForPlugIns == null) + { + throw new Exception("没有申请单信息"); + } + + var hisInput = new HisAgreeRefundInput() + { + Data = new HisAgreeRefundDataInput() + { + MsgHeader = new HisMsgHeaderInput() + { + Sender = "PEIS", + MsgType = "SVR_ODS_6105", + MsgVersion = "3.1", + }, + Item = new HisAgreeRefundDataItemInput() + { + Yjxh = chargeRequestForPlugIns.HisChargeNo, + ExamRequestNo = chargeRequestForPlugIns.ChargeRequestNo + } + } + }; + + var result = await AgreeRefund(hisInput); + if (result.MsgHeader.Status != "true") + { + throw new Exception("允许退费申请失败" + result.MsgHeader.Detail); + } + return new ChargeRequestPlugInsOut(); + } public async Task PatientQuery(HisPatientQueryInput input) { using (var client = CreateClient()) @@ -163,6 +228,53 @@ namespace Shentun.Peis.PlugIns.Gem } } + public async Task CancelQrCode(HisCancelQrCodeInput input) + { + using (var client = CreateClient()) + { + input.SeviceBaseArg.Service = "cancelQrCode"; + 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 PayStatus(HisPayStatusInput input) + { + using (var client = CreateClient()) + { + input.SeviceBaseArg.Service = "payStatus"; + 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 AgreeRefund(HisAgreeRefundInput input) + { + using (var client = CreateClient()) + { + input.SeviceBaseArg.Service = "agreeRefund"; + 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, diff --git a/src/Shentun.ColumnReferencePlugIns/ChargeRequestPlugInsBase.cs b/src/Shentun.ColumnReferencePlugIns/ChargeRequestPlugInsBase.cs index 1e668a6..fa6073a 100644 --- a/src/Shentun.ColumnReferencePlugIns/ChargeRequestPlugInsBase.cs +++ b/src/Shentun.ColumnReferencePlugIns/ChargeRequestPlugInsBase.cs @@ -26,7 +26,7 @@ namespace Shentun.Peis.PlugIns var result = new ChargeRequestPlugInsOut(); return result; } - public virtual async Task Refund(ChargeRequestPlugInsInput input) + public virtual async Task RefundRequest(ChargeRequestPlugInsInput input) { var result = new ChargeRequestPlugInsOut(); return result; diff --git a/src/Shentun.Peis.Application.Contracts/ChargeRequests/ChargeRequestAsbitemDto.cs b/src/Shentun.Peis.Application.Contracts/ChargeRequests/ChargeRequestAsbitemDto.cs new file mode 100644 index 0000000..1adf132 --- /dev/null +++ b/src/Shentun.Peis.Application.Contracts/ChargeRequests/ChargeRequestAsbitemDto.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.Peis.ChargeRequests +{ + public class ChargeRequestAsbitemDto + { + public Guid AsbitemId { get; set; } + public string AsbitemName { get; set; } + public decimal ChargePrice { get; set; } + public int Amount { get; set; } + } +} diff --git a/src/Shentun.Peis.Application.Contracts/ChargeRequests/ChargeRequestDto.cs b/src/Shentun.Peis.Application.Contracts/ChargeRequests/ChargeRequestDto.cs index 994ffcc..b0e6039 100644 --- a/src/Shentun.Peis.Application.Contracts/ChargeRequests/ChargeRequestDto.cs +++ b/src/Shentun.Peis.Application.Contracts/ChargeRequests/ChargeRequestDto.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; using System.Text; namespace Shentun.Peis.ChargeRequests @@ -8,5 +10,13 @@ namespace Shentun.Peis.ChargeRequests { public Guid Id { get; set; } public string ChargeRequestNo { get; set; } + + public string HisChargeNo { get; set; } + + public char ChargeRequestFlag { get; set; } + + public decimal Charges { get; set; } + + public DateTime CreationTime { get; set; } } } diff --git a/src/Shentun.Peis.Application.Contracts/ChargeRequests/ChargeRequestIdInputDto.cs b/src/Shentun.Peis.Application.Contracts/ChargeRequests/ChargeRequestIdInputDto.cs new file mode 100644 index 0000000..bb84229 --- /dev/null +++ b/src/Shentun.Peis.Application.Contracts/ChargeRequests/ChargeRequestIdInputDto.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.Peis.ChargeRequests +{ + public class ChargeRequestIdInputDto + { + public Guid ChargeRequestId { get; set; } + } +} diff --git a/src/Shentun.Peis.Application.Contracts/PatientRegisters/PatientRegisterOrNoDto.cs b/src/Shentun.Peis.Application.Contracts/PatientRegisters/PatientRegisterOrNoDto.cs index 7a5e419..38ec288 100644 --- a/src/Shentun.Peis.Application.Contracts/PatientRegisters/PatientRegisterOrNoDto.cs +++ b/src/Shentun.Peis.Application.Contracts/PatientRegisters/PatientRegisterOrNoDto.cs @@ -17,6 +17,7 @@ namespace Shentun.Peis.PatientRegisters /// 档案ID /// public Guid PatientId { get; set; } + public string HisPatientId { get; set; } /// /// 体检次数 diff --git a/src/Shentun.Peis.Application.Contracts/RegisterCheckAsbitems/RegisterCheckAsbitemOrAsbitemDto.cs b/src/Shentun.Peis.Application.Contracts/RegisterCheckAsbitems/RegisterCheckAsbitemOrAsbitemDto.cs index b2e9ce0..60973f0 100644 --- a/src/Shentun.Peis.Application.Contracts/RegisterCheckAsbitems/RegisterCheckAsbitemOrAsbitemDto.cs +++ b/src/Shentun.Peis.Application.Contracts/RegisterCheckAsbitems/RegisterCheckAsbitemOrAsbitemDto.cs @@ -8,6 +8,7 @@ namespace Shentun.Peis.RegisterAsbitems { public class RegisterCheckAsbitemOrAsbitemDto : AuditedEntityDtoName { + public Guid RegisterCheckAsbitemId { get; set; } /// /// 组合项目 /// diff --git a/src/Shentun.Peis.Application/ChargeRequests/ChargeRequestAppService.cs b/src/Shentun.Peis.Application/ChargeRequests/ChargeRequestAppService.cs index 2b852b9..2532ca8 100644 --- a/src/Shentun.Peis.Application/ChargeRequests/ChargeRequestAppService.cs +++ b/src/Shentun.Peis.Application/ChargeRequests/ChargeRequestAppService.cs @@ -4,6 +4,7 @@ using Org.BouncyCastle.Asn1.Ocsp; using Shentun.Peis.ChargeRequestAsbitems; using Shentun.Peis.LisRequests; using Shentun.Peis.Models; +using Shentun.Peis.PatientRegisters; using System; using System.Collections.Generic; using System.Linq; @@ -25,6 +26,7 @@ namespace Shentun.Peis.ChargeRequests private readonly IRepository _patientRegisterRepository; private readonly IRepository _registerCheckRepository; private readonly IRepository _registerCheckAsbitemRepository; + private readonly IRepository _asbitemRepository; private readonly ChargeRequestManager _chargeRequestManager; private readonly ChargeRequestAsbitemManager _chargeRequestAsbitemManager; private readonly IUnitOfWorkManager _unitOfWorkManager; @@ -34,6 +36,7 @@ namespace Shentun.Peis.ChargeRequests IRepository patientRegisterRepository, IRepository registerCheckRepository, IRepository registerCheckAsbitemRepository, + IRepository asbitemRepository, ChargeRequestManager chargeRequestManager, ChargeRequestAsbitemManager chargeRequestAsbitemManager, IUnitOfWorkManager unitOfWorkManager @@ -47,6 +50,7 @@ namespace Shentun.Peis.ChargeRequests _chargeRequestManager = chargeRequestManager; _chargeRequestAsbitemManager = chargeRequestAsbitemManager; _unitOfWorkManager = unitOfWorkManager; + _asbitemRepository = asbitemRepository; } /// /// @@ -61,7 +65,7 @@ namespace Shentun.Peis.ChargeRequests throw new UserFriendlyException("input参数不能为空"); } - var patientRegister = _patientRegisterRepository.GetAsync(input.PatientRegisterId); + //var patientRegister = await _patientRegisterRepository.GetAsync(input.PatientRegisterId); var list = (from registerCheck in await _registerCheckRepository.GetQueryableAsync() join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId @@ -103,12 +107,114 @@ namespace Shentun.Peis.ChargeRequests await _unitOfWorkManager.Current.CompleteAsync(); //await UnitOfWorkManager.Current.SaveChangesAsync(); //await UnitOfWorkManager.Current.CompleteAsync(); - await _chargeRequestManager.SendThirChargeRequestAsync(chargeRequest.Id); + await _chargeRequestManager.SendThirChargeRequestAsync(chargeRequest.Id,"SendRequest"); ChargeRequestDto result = new ChargeRequestDto(); result.Id = chargeRequest.Id; result.ChargeRequestNo = chargeRequest.ChargeRequestNo; return result; } + [HttpPost("api/app/ChargeRequest/CancelChargeRequest")] + public async Task CancelChargeRequestAsync(ChargeRequestIdInputDto input) + { + if (input == null) + { + throw new UserFriendlyException("input参数不能为空"); + } + + await _chargeRequestManager.SendThirChargeRequestAsync(input.ChargeRequestId,"CancelRequest"); + + ChargeRequestDto result = new ChargeRequestDto(); + + return result; + } + + [HttpPost("api/app/ChargeRequest/RefundChargeRequest")] + public async Task ReundChargeRequestAsync(ChargeRequestIdInputDto input) + { + if (input == null) + { + throw new UserFriendlyException("input参数不能为空"); + } + + await _chargeRequestManager.SendThirChargeRequestAsync(input.ChargeRequestId, "CancelRequest"); + + ChargeRequestDto result = new ChargeRequestDto(); + + return result; + } + /// + /// + /// + /// + /// + /// + [HttpPost("api/app/ChargeRequest/GetChargeRequestsByPatientRegisterId")] + public async Task> GetChargeRequestsByPatientRegisterIdAsync(PatientRegisterIdInputDto input) + { + if (input == null) + { + throw new UserFriendlyException("input参数不能为空"); + } + + //var patientRegister = _patientRegisterRepository.GetAsync(input.PatientRegisterId); + var list = (from chargeRequest in await _chargeRequestRepository.GetQueryableAsync() + join patientRegister in await _patientRegisterRepository.GetQueryableAsync() + on chargeRequest.PatientRegisterId equals patientRegister.Id + join chargeRequestAsbitem in await _chargeRequestAsbitemRepository.GetQueryableAsync() + on chargeRequest.Id equals chargeRequestAsbitem.ChargeRequestId + where patientRegister.Id == input.PatientRegisterId + select new + { + chargeRequest, + chargeRequestAsbitem + }).ToList(); + var result = list.GroupBy(o => o.chargeRequest).Select(o => new ChargeRequestDto() + { + Id = o.First().chargeRequest.Id, + ChargeRequestNo = o.First().chargeRequest.ChargeRequestNo, + ChargeRequestFlag = o.First().chargeRequest.ChargeRequestFlag, + HisChargeNo = o.First().chargeRequest.HisChargeNo, + Charges = o.Sum(o=>o.chargeRequestAsbitem.Amount * o.chargeRequestAsbitem.ChargePrice), + CreationTime = o.First().chargeRequest.CreationTime, + + }).OrderByDescending(o=>o.CreationTime).ToList(); + return result; + } + + [HttpPost("api/app/ChargeRequest/GetChargeRequestsByPatientRegisterId")] + public async Task> GetChargeRequestAsbitemsByPatientRegisterIdAsync(ChargeRequestIdInputDto input) + { + if (input == null) + { + throw new UserFriendlyException("input参数不能为空"); + } + + //var patientRegister = _patientRegisterRepository.GetAsync(input.PatientRegisterId); + var list = (from chargeRequest in await _chargeRequestRepository.GetQueryableAsync() + join chargeRequestAsbitem in await _chargeRequestAsbitemRepository.GetQueryableAsync() + on chargeRequest.Id equals chargeRequestAsbitem.ChargeRequestId + join asbitem in await _asbitemRepository.GetQueryableAsync() + on chargeRequestAsbitem.AsbitemId equals asbitem.Id + where chargeRequest.Id == input.ChargeRequestId + select new + { + chargeRequest, + chargeRequestAsbitem, + asbitem + }).ToList(); + var result = list.Select(o => new ChargeRequestAsbitemDto() + { + AsbitemId = o.chargeRequest.Id, + AsbitemName = o.asbitem.DisplayName, + ChargePrice = o.chargeRequestAsbitem.ChargePrice, + Amount = o.chargeRequestAsbitem.Amount + + + }).ToList(); + return result; + } + + } } diff --git a/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs b/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs index eb9d39e..ed29e61 100644 --- a/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs +++ b/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs @@ -225,6 +225,7 @@ namespace Shentun.Peis.PatientRegisters entdto = new PatientRegisterOrNoDto { + HisPatientId = ent.HisPatientId, Age = ent.Age, AuditDate = DataHelper.ConversionDateToString(ent.AuditDate), Id = ent.Id, diff --git a/src/Shentun.Peis.Application/RegisterCheckAsbitems/RegisterCheckAsbitemAppService.cs b/src/Shentun.Peis.Application/RegisterCheckAsbitems/RegisterCheckAsbitemAppService.cs index 02b61df..d347a60 100644 --- a/src/Shentun.Peis.Application/RegisterCheckAsbitems/RegisterCheckAsbitemAppService.cs +++ b/src/Shentun.Peis.Application/RegisterCheckAsbitems/RegisterCheckAsbitemAppService.cs @@ -350,6 +350,7 @@ namespace Shentun.Peis.RegisterAsbitems var entdto = entlist.Select(s => new RegisterCheckAsbitemOrAsbitemDto { + RegisterCheckAsbitemId = s.Id, Discount = s.StandardPrice == 0 ? 100 : Math.Round(Convert.ToDecimal(s.ChargePrice * 100 / s.StandardPrice), 2), IsLock = s.RegisterCheck.IsLock, CreationTime = s.CreationTime, diff --git a/src/Shentun.Peis.Domain/ChargeRequests/ChargeRequestManager.cs b/src/Shentun.Peis.Domain/ChargeRequests/ChargeRequestManager.cs index a562e07..4191d89 100644 --- a/src/Shentun.Peis.Domain/ChargeRequests/ChargeRequestManager.cs +++ b/src/Shentun.Peis.Domain/ChargeRequests/ChargeRequestManager.cs @@ -58,7 +58,7 @@ namespace Shentun.Peis.ChargeRequests }; } - public async Task SendThirChargeRequestAsync(Guid id) + public async Task SendThirChargeRequestAsync(Guid id,string funName) { var thirdInterfaces = (await _thirdInterfaceRepository.GetListAsync(o => o.ThirdInterfaceType == ThirdInterfaceTypeFlag.ChargeRequest)) .OrderBy(o => o.DisplayOrder).ToList(); @@ -76,10 +76,11 @@ namespace Shentun.Peis.ChargeRequests 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); + var chargeRequestPluginsOut = await InvokeAsync(assemblyName, className, parmValue, funName, objects); } } + private async Task InvokeAsync(string assemblyName, string className, string classConstructorArg, string methodName, object[] args = null) { Assembly assembly = Assembly.Load(assemblyName);