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();