From ad209abf1b63aab2ba7fc2d78da683142972e2df Mon Sep 17 00:00:00 2001 From: wxd <123@qq.com> Date: Mon, 8 Jul 2024 17:19:34 +0800 Subject: [PATCH] =?UTF-8?q?lis=E5=AF=BC=E5=85=A5=E3=80=81excel=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E3=80=81=E4=BA=BA=E5=91=98=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CreatePatientRegisterExcelRequestDto.cs | 34 +++- .../ImportLisResultAppService.cs | 62 +++--- .../PatientRegisterAppService.cs | 176 +++++++++++++++++- 3 files changed, 241 insertions(+), 31 deletions(-) diff --git a/src/Shentun.Peis.Application.Contracts/PatientRegisters/CreatePatientRegisterExcelRequestDto.cs b/src/Shentun.Peis.Application.Contracts/PatientRegisters/CreatePatientRegisterExcelRequestDto.cs index 2977104..4904442 100644 --- a/src/Shentun.Peis.Application.Contracts/PatientRegisters/CreatePatientRegisterExcelRequestDto.cs +++ b/src/Shentun.Peis.Application.Contracts/PatientRegisters/CreatePatientRegisterExcelRequestDto.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Text; +using System.Xml.Schema; namespace Shentun.Peis.PatientRegisters { @@ -119,7 +120,7 @@ namespace Shentun.Peis.PatientRegisters #region 添加时不需要 - + /// /// 完成标志 0:预登记 1:未检 2:部份已检 3:已总检 默认未检 @@ -175,5 +176,36 @@ namespace Shentun.Peis.PatientRegisters public string? BirthPlaceName { get; set; } #endregion + + + #region 职业病信息 + + /// + /// 是否职业病 + /// + public char IsOccupationalDisease { get; set; } = 'N'; + + /// + /// 工种 + /// + public string JobType { get; set; } + + + /// + /// 职业病检查类别 名称 + /// + public string OcCheckTypeName { get; set; } + + /// + /// 毒害因素名称 集合 + /// + public List Poisons { get; set;} + + /// + /// 是否使用默认体检类别 职业病导入用 Y=使用系统参数配置的体检类别ID N=使用请求参数中的体检类别 + /// + public char IsDefaultMedicalType { get; set; } = 'N'; + + #endregion } } diff --git a/src/Shentun.Peis.Application/ImportLisResults/ImportLisResultAppService.cs b/src/Shentun.Peis.Application/ImportLisResults/ImportLisResultAppService.cs index 651a778..8ad66e5 100644 --- a/src/Shentun.Peis.Application/ImportLisResults/ImportLisResultAppService.cs +++ b/src/Shentun.Peis.Application/ImportLisResults/ImportLisResultAppService.cs @@ -424,49 +424,57 @@ namespace Shentun.Peis.ImportLisResults /// /// [HttpPost("api/app/ImportLisResult/ImportResultByLisRequestNo")] - public async Task ImportResultByLisRequestNoAsync(ImportResultByLisRequestNoInputDto input) + public async Task ImportResultByLisRequestNoAsync(List input) { - if (input == null) + if (!input.Any()) throw new UserFriendlyException("请求参数无效"); - + var thirdInterface = await _thirdInterfaceRepository.FirstOrDefaultAsync(o => o.ThirdInterfaceType == ThirdInterfaceTypeFlag.ImportLisResult); - if(thirdInterface==null) + if (thirdInterface == null) throw new UserFriendlyException($"未配置检验导入的参数"); var parmValue = thirdInterface.ParmValue; var configurationBuilder = new ConfigurationBuilder() .AddJsonStream(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(parmValue))); var config = configurationBuilder.Build(); - Guid execOrganizationUnitId =Guid.Parse(config.GetSection("Interface").GetSection("ExecOrganizationUnitId").Value); + Guid execOrganizationUnitId = Guid.Parse(config.GetSection("Interface").GetSection("ExecOrganizationUnitId").Value); Guid columnReferenId = Guid.Parse(config.GetSection("Interface").GetSection("ColumnReferenId").Value); - string codeValue = await _columnReferenceCodeManager.GetColumnReferenCodeValueAsync(columnReferenId, input.ItemId); - if (string.IsNullOrWhiteSpace(codeValue)) - { - throw new UserFriendlyException($"项目编号:{input.ItemId}没有对照"); - } - Guid itemId = Guid.Parse(codeValue); List inputDtoList = new List(); - var inputDto = new CreateImportLisResultDto + + foreach (var item in input) { - CheckDate = input.CheckDate, - CheckDoctorName = input.CheckDoctorName, - CriticalRangeValue = input.CriticalRangeValue, - CriticalValue = input.CriticalValue, - ExecOrganizationUnitId = execOrganizationUnitId, - ItemId = itemId, - ItemName = input.ItemName, - LisRequestNo = input.LisRequestNo, - ReferenceRangeValue = input.ReferenceRangeValue, - ReportPrompt = "", - ResultStatusId = null, - Result = input.Result, - Unit = input.Unit - }; + string codeValue = await _columnReferenceCodeManager.GetColumnReferenCodeValueAsync(columnReferenId, item.ItemId); + if (string.IsNullOrWhiteSpace(codeValue)) + { + throw new UserFriendlyException($"项目编号:{item.ItemId}没有对照"); + } + Guid itemId = Guid.Parse(codeValue); + + + var inputDto = new CreateImportLisResultDto + { + CheckDate = item.CheckDate, + CheckDoctorName = item.CheckDoctorName, + CriticalRangeValue = item.CriticalRangeValue, + CriticalValue = item.CriticalValue, + ExecOrganizationUnitId = execOrganizationUnitId, + ItemId = itemId, + ItemName = item.ItemName, + LisRequestNo = item.LisRequestNo, + ReferenceRangeValue = item.ReferenceRangeValue, + ReportPrompt = "", + ResultStatusId = null, + Result = item.Result, + Unit = item.Unit + }; + + inputDtoList.Add(inputDto); + + } - inputDtoList.Add(inputDto); await ImportResultAsync(inputDtoList); } diff --git a/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs b/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs index ae76144..d33ad04 100644 --- a/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs +++ b/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs @@ -6,6 +6,7 @@ using Microsoft.EntityFrameworkCore.Metadata.Internal; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using NPOI.POIFS.Properties; +using NPOI.SS.Formula.Functions; using NPOI.Util; using NUglify.Helpers; using Org.BouncyCastle.Asn1.Ocsp; @@ -16,7 +17,9 @@ using Shentun.Peis.CustomerOrgs; using Shentun.Peis.Enums; using Shentun.Peis.LisRequests; using Shentun.Peis.Models; +using Shentun.Peis.OcCheckTypeDetails; using Shentun.Peis.PatientOccupationalDiseases; +using Shentun.Peis.PatientPoisons; using Shentun.Peis.PatientRegisterExters; using Shentun.Peis.Patients; using Shentun.Peis.PeisReports; @@ -119,6 +122,12 @@ namespace Shentun.Peis.PatientRegisters private readonly PatientOccupationalDiseaseManager _patientOccupationalDiseaseManager; private readonly IRepository _thirdInterfaceRepository; private readonly IRepository _customerOrgRegisterRepository; + private readonly IRepository _ocCheckTypeRepository; + private readonly IRepository _poisonRepository; + private readonly IRepository _ocCheckTypeDetailRepository; + private readonly IRepository _patientOccupationalDiseaseRepository; + private readonly IRepository _patientPoisonRepository; + private readonly PatientPoisonManager _patientPoisonManager; public PatientRegisterAppService( IRepository repository, IRepository patientRepository, @@ -171,7 +180,13 @@ namespace Shentun.Peis.PatientRegisters IRepository userItemTypeRepository, PatientOccupationalDiseaseManager patientOccupationalDiseaseManager, IRepository thirdInterfaceRepository, - IRepository customerOrgRegisterRepository) + IRepository customerOrgRegisterRepository, + IRepository ocCheckTypeRepository, + IRepository poisonRepository, + IRepository ocCheckTypeDetailRepository, + IRepository patientOccupationalDiseaseRepository, + IRepository patientPoisonRepository, + PatientPoisonManager patientPoisonManager) : base(repository) { this._repository = repository; @@ -226,6 +241,12 @@ namespace Shentun.Peis.PatientRegisters _patientOccupationalDiseaseManager = patientOccupationalDiseaseManager; _thirdInterfaceRepository = thirdInterfaceRepository; _customerOrgRegisterRepository = customerOrgRegisterRepository; + _ocCheckTypeRepository = ocCheckTypeRepository; + _poisonRepository = poisonRepository; + _ocCheckTypeDetailRepository = ocCheckTypeDetailRepository; + _patientOccupationalDiseaseRepository = patientOccupationalDiseaseRepository; + _patientPoisonRepository = patientPoisonRepository; + _patientPoisonManager = patientPoisonManager; } /// /// 获取通过主键 @@ -2416,6 +2437,80 @@ namespace Shentun.Peis.PatientRegisters { throw new UserFriendlyException("姓名不能为空"); } + + + #region 转换职业病信息 + + Guid ocCheckTypeId = Guid.Empty; + List poisonIds = new List(); + + if (input.IsOccupationalDisease == 'Y') + { + if (string.IsNullOrWhiteSpace(input.OcCheckTypeName)) + { + throw new UserFriendlyException("职业病检查类别不能为空"); + } + + if (string.IsNullOrWhiteSpace(input.JobType)) + { + throw new UserFriendlyException("职业病工种不能为空"); + } + + if (!input.Poisons.Any()) + { + throw new UserFriendlyException("职业病毒害因素不能为空"); + } + + #region 职业病检查类别 + var ocCheckTypeEnt = await _ocCheckTypeRepository.FirstOrDefaultAsync(f => f.DisplayName == input.OcCheckTypeName); + if (ocCheckTypeEnt == null) + { + throw new UserFriendlyException("职业病检查类别名称不正确"); + } + + ocCheckTypeId = ocCheckTypeEnt.Id; + #endregion + + #region 职业病毒害因素 + + + foreach (var poisonItem in input.Poisons) + { + var poisonEnt = await _poisonRepository.FirstOrDefaultAsync(f => f.DisplayName == poisonItem); + if (poisonEnt == null) + { + throw new UserFriendlyException("职业病毒害因素名称不正确"); + } + if (!poisonIds.Contains(poisonEnt.Id)) + { + poisonIds.Add(poisonEnt.Id); + } + } + + #endregion + + + } + + Guid? medicalTypeId; + + if (input.IsDefaultMedicalType == 'Y' && input.IsOccupationalDisease == 'Y') + { + //人员登记检查类别 + var systemMedicalTypeId = await _sysParmValueManager.GetSysParmValueAsync(input.MedicalCenterId, "patient_register_occ_check_id"); + if (string.IsNullOrWhiteSpace(systemMedicalTypeId)) + throw new UserFriendlyException("系统参数中未配置职业病检查的体检类别ID"); + medicalTypeId = Guid.Parse(systemMedicalTypeId); + } + else + { + medicalTypeId = await GetMedicalTypeIdByName(input.MedicalTypeName); + } + + + #endregion + + //设置人员信息 Patient patient = null; Patient updatePatientEntity = new Patient() @@ -2490,7 +2585,7 @@ namespace Shentun.Peis.PatientRegisters MaritalStatusId = updatePatientEntity.MaritalStatusId, MedicalCardNo = input.MedicalCardNo, MedicalPackageId = null, - MedicalTypeId = await GetMedicalTypeIdByName(input.MedicalTypeName), + MedicalTypeId = medicalTypeId, MedicalCenterId = input.MedicalCenterId, PatientId = patient.Id, PatientName = input.PatientName, @@ -2521,6 +2616,44 @@ namespace Shentun.Peis.PatientRegisters StandardPrice = s.Asbitem.Price }).ToList(); + + #region 职业病业务 检索职业病对应的项目 + + if (input.IsOccupationalDisease == 'Y') + { + //var ocCheckTypeDetailList = await _ocCheckTypeDetailRepository.GetListAsync(f => f.OcCheckTypeId == ocCheckTypeId && poisonIds.Contains(f.PoisonId)); + var ocCheckTypeDetailList = from ocCheckTypeDetail in await _ocCheckTypeDetailRepository.GetQueryableAsync() + join asbitem in await _asbitemRepository.GetQueryableAsync() on ocCheckTypeDetail.AsbitemId equals asbitem.Id + where ocCheckTypeDetail.OcCheckTypeId == ocCheckTypeId && poisonIds.Contains(ocCheckTypeDetail.PoisonId) + select new + { + Amount = ocCheckTypeDetail.Amount, + AsbitemId = ocCheckTypeDetail.AsbitemId, + ChargePrice = ocCheckTypeDetail.Price, + StandardPrice = asbitem.Price + }; + + foreach (var item in ocCheckTypeDetailList) + { + if (registerAsbitems.Where(m => m.AsbitemId == item.AsbitemId).Count() == 0) + { + registerAsbitems.Add(new RegisterCheckAsbitem + { + Amount = item.Amount, + AsbitemId = item.AsbitemId, + ChargePrice = item.ChargePrice, + IsCharge = 'N', + PatientRegisterId = patientRegister.Id, + PayTypeFlag = PayTypeFlag.OrgPay, + StandardPrice = item.StandardPrice + }); + } + } + + + } + #endregion + createRegisterCheckAsbitemEntity = await _registerAsbitemManager.UpdateManyAsync(patientRegister, registerAsbitems); if (createRegisterCheckAsbitemEntity != null) @@ -2528,6 +2661,43 @@ namespace Shentun.Peis.PatientRegisters await UpdateRegisterChecks(createRegisterCheckAsbitemEntity); } + + #region 增加职业病信息 + + if (input.IsOccupationalDisease == 'Y') + { + + //基础信息 + var patientOccupationalDiseaseEnt = new PatientOccupationalDisease + { + JobType = input.JobType, + OcCheckTypeId = ocCheckTypeId, + RiskFactors = string.Join(",", input.Poisons), + PatientRegisterId = patientRegister.Id + }; + + patientOccupationalDiseaseEnt = _patientOccupationalDiseaseManager.CreateAsync(patientOccupationalDiseaseEnt); + await _patientOccupationalDiseaseRepository.InsertAsync(patientOccupationalDiseaseEnt); + + //毒害因素 + List patientPoisons = new List(); + + foreach (var poisonId in poisonIds) + { + var patientPoisonEnt = new PatientPoison + { + PatientRegisterId = patientRegister.Id, + PoisonId = poisonId + }; + + patientPoisonEnt = _patientPoisonManager.CreateAsync(patientPoisonEnt); + + patientPoisons.Add(patientPoisonEnt); + } + + await _patientPoisonRepository.InsertManyAsync(patientPoisons); + } + #endregion } @@ -3571,7 +3741,7 @@ namespace Shentun.Peis.PatientRegisters /// /// /// - [HttpGet("api/app/PatientRegister/UpdatePatientRegisterBaseInfoByPatientRegisterId")] + [HttpPost("api/app/PatientRegister/UpdatePatientRegisterBaseInfoByPatientRegisterId")] public async Task UpdatePatientRegisterBaseInfoByPatientRegisterIdAsync(UpdatePatientRegisterBaseInfoByPatientRegisterIdInputDto input) { PatientRegisterOrNoDto msg = new PatientRegisterOrNoDto();