|
|
using Microsoft.AspNetCore.Authorization;using Microsoft.AspNetCore.Mvc;using Microsoft.EntityFrameworkCore;using Microsoft.VisualBasic;using NPOI.SS.Formula.Functions;using Shentun.Peis.Enums;using Shentun.Peis.Models;using Shentun.Peis.PatientRegisters;using Shentun.Peis.Permissions;using SqlSugar;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using Volo.Abp;using Volo.Abp.Application.Services;using Volo.Abp.Domain.Repositories;
namespace Shentun.Peis.ThirdPartyPublicInterfaces{ /// <summary>
/// 第三方公开接口
/// </summary>
public class ThirdPartyPublicInterfaceAppService : ApplicationService { private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository; private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository; private readonly IRepository<RegisterCheckAsbitem, Guid> _registerCheckAsbitemRepository; private readonly IRepository<RegisterCheckItem> _registerCheckItemRepository; private readonly IRepository<Item, Guid> _itemRepository; private readonly IRepository<ItemType, Guid> _itemTypeRepository; private readonly IRepository<Asbitem, Guid> _asbitemRepository; private readonly IRepository<Patient, Guid> _patientRepository; private readonly IRepository<SumSuggestionHeader, Guid> _sumSuggestionHeaderRepository; private readonly IRepository<SumSuggestionContent, Guid> _sumSuggestionContentRepository; private readonly IRepository<SumSummaryHeader, Guid> _sumSummaryHeaderRepository; private readonly IRepository<SumSummaryContent, Guid> _sumSummaryContentRepository; private readonly IRepository<RegisterCheckSummary, Guid> _registerCheckSummaryRepository; private readonly IRepository<ResultStatus> _resultStatusRepository; private readonly IRepository<ColumnReference, Guid> _columnReferenceRepository; private readonly IRepository<ColumnReferenceCode, Guid> _columnReferenceCodeRepository; private readonly IRepository<ColumnReferenceInterface, Guid> _columnReferenceInterfaceRepository; private readonly CacheService _cacheService; public ThirdPartyPublicInterfaceAppService( IRepository<PatientRegister, Guid> patientRegisterRepository, CacheService cacheService, IRepository<RegisterCheck, Guid> registerCheckRepository, IRepository<RegisterCheckAsbitem, Guid> registerCheckAsbitemRepository, IRepository<RegisterCheckItem> registerCheckItemRepository, IRepository<Item, Guid> itemRepository, IRepository<ItemType, Guid> itemTypeRepository, IRepository<Asbitem, Guid> asbitemRepository, IRepository<Patient, Guid> patientRepository, IRepository<SumSuggestionHeader, Guid> sumSuggestionHeaderRepository, IRepository<SumSuggestionContent, Guid> sumSuggestionContentRepository, IRepository<SumSummaryHeader, Guid> sumSummaryHeaderRepository, IRepository<SumSummaryContent, Guid> sumSummaryContentRepository, IRepository<RegisterCheckSummary, Guid> registerCheckSummaryRepository, IRepository<ResultStatus> resultStatusRepository, IRepository<ColumnReference, Guid> columnReferenceRepository, IRepository<ColumnReferenceCode, Guid> columnReferenceCodeRepository, IRepository<ColumnReferenceInterface, Guid> columnReferenceInterfaceRepository) { _patientRegisterRepository = patientRegisterRepository; _cacheService = cacheService; _registerCheckRepository = registerCheckRepository; _registerCheckAsbitemRepository = registerCheckAsbitemRepository; _registerCheckItemRepository = registerCheckItemRepository; _itemRepository = itemRepository; _itemTypeRepository = itemTypeRepository; _asbitemRepository = asbitemRepository; _patientRepository = patientRepository; _sumSuggestionHeaderRepository = sumSuggestionHeaderRepository; _sumSuggestionContentRepository = sumSuggestionContentRepository; _sumSummaryHeaderRepository = sumSummaryHeaderRepository; _sumSummaryContentRepository = sumSummaryContentRepository; _registerCheckSummaryRepository = registerCheckSummaryRepository; _resultStatusRepository = resultStatusRepository; _columnReferenceRepository = columnReferenceRepository; _columnReferenceCodeRepository = columnReferenceCodeRepository; _columnReferenceInterfaceRepository = columnReferenceInterfaceRepository; }
/// <summary>
/// 查询体检人员基本信息
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[Authorize(PeisPermissions.Third.Default)] [HttpPost("api/Third/ThirdPartyPublicInterface/GetBasicInformationOfMedicalExaminationPersonnel")] public async Task<List<BasicInformationOfMedicalExaminationPersonnelDto>> GetBasicInformationOfMedicalExaminationPersonnelAsync(PublicPatientRegisterNoInputDto input) { if (input == null) { throw new UserFriendlyException($"请求参数错误"); }
if (!input.PatientRegisterNos.Any()) throw new UserFriendlyException($"体检编号不能为空"); var listDto = new List<BasicInformationOfMedicalExaminationPersonnelDto>();
var patientRegisterList = (await _patientRegisterRepository.GetQueryableAsync()).Include(x => x.Patient) .Where(m => input.PatientRegisterNos.Contains(m.PatientRegisterNo) && m.CompleteFlag == PatientRegisterCompleteFlag.SumCheck).ToList(); if (patientRegisterList.Any()) { foreach (var patientRegisterEnt in patientRegisterList) {
//基础信息
var result = new BasicInformationOfMedicalExaminationPersonnelDto { BirthDate = patientRegisterEnt.BirthDate != null ? patientRegisterEnt.BirthDate.Value.ToString("yyyy-MM-dd HH:mm:ss") : "", PatientRegisterNo = patientRegisterEnt.PatientRegisterNo, CompleteFlag = patientRegisterEnt.CompleteFlag, IsMedicalStart = patientRegisterEnt.IsMedicalStart, MedicalStartDate = patientRegisterEnt.MedicalStartDate != null ? patientRegisterEnt.MedicalStartDate.Value.ToString("yyyy-MM-dd HH:mm:ss") : "", PatientName = patientRegisterEnt.PatientName, SexName = _cacheService.GetSexNameAsync(patientRegisterEnt.SexId).Result, SummaryDoctorName = _cacheService.GetSurnameAsync(patientRegisterEnt.SummaryDoctorId).Result, SummaryDate = patientRegisterEnt.SummaryDate != null ? patientRegisterEnt.SummaryDate.Value.ToString("yyyy-MM-dd HH:mm:ss") : "", CustomerOrgName = _cacheService.GetTopCustomerOrgNameAsync(patientRegisterEnt.CustomerOrgId).Result, IdNo = patientRegisterEnt.Patient.IdNo, MobileTelephone = patientRegisterEnt.Patient.MobileTelephone };
var registerCheckItemList = from patientRegister in await _patientRegisterRepository.GetQueryableAsync() join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId join registerCheckItem in await _registerCheckItemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckItem.RegisterCheckId join item in await _itemRepository.GetQueryableAsync() on registerCheckItem.ItemId equals item.Id join itemType in await _itemTypeRepository.GetQueryableAsync() on item.ItemTypeId equals itemType.Id into itemTypeTemp from itemTypeHaveEmpty in itemTypeTemp.DefaultIfEmpty() join resultStatus in await _resultStatusRepository.GetQueryableAsync() on registerCheckItem.ResultStatusId equals resultStatus.Id into resultStatusTemp from resultStatusHaveEmpty in resultStatusTemp.DefaultIfEmpty() where patientRegister.Id == patientRegisterEnt.Id select new { registerCheckItem, ItemName = item.DisplayName, DepartmentName = itemTypeHaveEmpty != null ? itemTypeHaveEmpty.DisplayName : "", ResultStatusName = resultStatusHaveEmpty != null ? resultStatusHaveEmpty.DisplayName : "正常" };
//明细项目
result.Items = registerCheckItemList.Select(s => new BasicInformationOfMedicalExaminationPersonnelItemDto { DepartmentName = s.DepartmentName, ItemName = s.ItemName, ReferenceRangeValue = s.registerCheckItem.ReferenceRangeValue, Result = s.registerCheckItem.Result, Unit = s.registerCheckItem.Unit, ResultStatusName = s.ResultStatusName }).ToList();
//组合项目情况
#region 组合项目情况
var sumSummaryList = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync() join sumSummaryHeader in await _sumSummaryHeaderRepository.GetQueryableAsync() on patientRegister.Id equals sumSummaryHeader.PatientRegisterId join sumSummaryContent in await _sumSummaryContentRepository.GetQueryableAsync() on sumSummaryHeader.Id equals sumSummaryContent.SumSummaryHeaderId where patientRegister.Id == patientRegisterEnt.Id orderby sumSummaryHeader.DisplayOrder, sumSummaryContent.DisplayOrder select new { sumSummaryHeaderId = sumSummaryHeader.Id, SummaryTitle = sumSummaryHeader.SummaryTitle, SummaryContent = sumSummaryContent.SummaryContent }).ToList();
var sumSummaryGroup = sumSummaryList.GroupBy(g => g.sumSummaryHeaderId);
List<BasicInformationOfMedicalExaminationPersonnelSumSummaryDto> sumSummarys = new List<BasicInformationOfMedicalExaminationPersonnelSumSummaryDto>();
foreach (var item in sumSummaryGroup) { sumSummarys.Add(new BasicInformationOfMedicalExaminationPersonnelSumSummaryDto { SumSummaryTitle = item.FirstOrDefault().SummaryTitle, SumSummaryContent = string.Join(',', item.Select(s => s.SummaryContent.Trim().Replace("\n", "")).ToList()) }); }
result.SumSummarys = sumSummarys; #endregion
#region 组合项目异常
var registerCheckSummaryList = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync() join registerCheck in (await _registerCheckRepository.GetQueryableAsync()) .Include(x => x.RegisterCheckAsbitems).ThenInclude(x => x.Asbitem).AsQueryable() on patientRegister.Id equals registerCheck.PatientRegisterId join registerCheckSummary in await _registerCheckSummaryRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckSummary.RegisterCheckId where patientRegister.Id == patientRegisterEnt.Id select new { registerCheck, registerCheckSummary }).ToList();
var registerCheckSummaryGroup = registerCheckSummaryList.GroupBy(g => g.registerCheck.Id);
List<BasicInformationOfMedicalExaminationPersonnelAsbitemAbnormalDto> asbitemAbnormals = new List<BasicInformationOfMedicalExaminationPersonnelAsbitemAbnormalDto>();
foreach (var item in registerCheckSummaryGroup) { //默认结果集合
var defaultResultList = item.FirstOrDefault().registerCheck.RegisterCheckAsbitems.Select(s => s.Asbitem.DefaultResult.Trim().Replace("\n", "")).ToList();
var summaryList = item.Where(m => !defaultResultList.Contains(m.registerCheckSummary.Summary.Trim().Replace("\n", ""))).Select(s => s.registerCheckSummary.Summary).ToList();
if (summaryList.Any()) { asbitemAbnormals.Add(new BasicInformationOfMedicalExaminationPersonnelAsbitemAbnormalDto { AsbitemName = string.Join(',', item.FirstOrDefault().registerCheck.RegisterCheckAsbitems.Select(s => s.Asbitem.DisplayName).ToList()), AsbitemAbnormalResult = string.Join(',', summaryList), }); } }
result.AsbitemAbnormals = asbitemAbnormals; #endregion
#region 总检建议
//总检建议
var sumSuggestionsList = from patientRegister in await _patientRegisterRepository.GetQueryableAsync() join sumSuggestionHeader in await _sumSuggestionHeaderRepository.GetQueryableAsync() on patientRegister.Id equals sumSuggestionHeader.PatientRegisterId join sumSuggestionContent in await _sumSuggestionContentRepository.GetQueryableAsync() on sumSuggestionHeader.Id equals sumSuggestionContent.SumSuggestionHeaderId where patientRegister.Id == patientRegisterEnt.Id orderby sumSuggestionHeader.DisplayOrder, sumSuggestionContent.DisplayOrder select new { SuggestionTitle = sumSuggestionHeader.SuggestionTitle, SuggestionFlag = sumSuggestionHeader.SuggestionFlag, SuggestionContent = sumSuggestionContent.SuggestionContent };
result.SumSuggestions = sumSuggestionsList.Select(s => new BasicInformationOfMedicalExaminationPersonnelSumSuggestionDto { DiagnosisName = s.SuggestionTitle, CommonReasons = sumSuggestionsList.Where(m => m.SuggestionFlag == SuggestionTypeFlag.CommonReasons) .Select(ss => new BasicInformationOfMedicalExaminationPersonnelSumSuggestionDetailDto { SumSuggestionContent = ss.SuggestionContent }).ToList(), HealthGuidances = sumSuggestionsList.Where(m => m.SuggestionFlag == SuggestionTypeFlag.HealthGuidance) .Select(ss => new BasicInformationOfMedicalExaminationPersonnelSumSuggestionDetailDto { SumSuggestionContent = ss.SuggestionContent }).ToList(), MedicalInterpretations = sumSuggestionsList.Where(m => m.SuggestionFlag == SuggestionTypeFlag.MedicalInterpretation) .Select(ss => new BasicInformationOfMedicalExaminationPersonnelSumSuggestionDetailDto { SumSuggestionContent = ss.SuggestionContent }).ToList() }).ToList(); #endregion
listDto.Add(result); } } else { throw new UserFriendlyException($"体检编号不正确"); }
return listDto;
}
///// <summary>
///// 查询体检明细项目信息
///// </summary>
///// <param name="input"></param>
///// <returns></returns>
//[Authorize(PeisPermissions.Third.Default)]
//[HttpPost("api/Third/ThirdPartyPublicInterface/GetPhysicalExaminationDetailsItemInformation")]
//public async Task<List<PhysicalExaminationDetailsItemInformationDto>> GetPhysicalExaminationDetailsItemInformationAsync(PublicPatientRegisterNoInputDto input)
//{
// if (input == null)
// {
// throw new UserFriendlyException($"请求参数错误");
// }
// var query = from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
// join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
// join registerCheckItem in await _registerCheckItemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckItem.RegisterCheckId
// join item in await _itemRepository.GetQueryableAsync() on registerCheckItem.ItemId equals item.Id
// join itemType in await _itemTypeRepository.GetQueryableAsync() on item.ItemTypeId equals itemType.Id into itemTypeTemp
// from itemTypeHaveEmpty in itemTypeTemp.DefaultIfEmpty()
// where patientRegister.PatientRegisterNo == input.PatientRegisterNo
// select new
// {
// PatientRegisterNo = patientRegister.PatientRegisterNo,
// registerCheckItem,
// ItemName = item.DisplayName,
// ItemTypeName = itemTypeHaveEmpty != null ? itemTypeHaveEmpty.DisplayName : ""
// };
// if (query.Count() == 0)
// {
// throw new UserFriendlyException($"条码号不正确");
// }
// var entList = query.Select(s => new PhysicalExaminationDetailsItemInformationDto
// {
// ItemName = s.ItemName,
// ItemResult = s.registerCheckItem.Result,
// ItemTypeName = s.ItemTypeName,
// PatientRegisterNo = s.PatientRegisterNo,
// ReferenceRangeValue = s.registerCheckItem.ReferenceRangeValue,
// Unit = s.registerCheckItem.Unit
// }).ToList();
// return entList;
//}
/// <summary>
/// 查询pacs条码信息
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/Third/ThirdPartyPublicInterface/getPatientItems")] public async Task<PatientPacsInfoDto> GetPatientPacsInfoAsync(PatientPacsInfoInputDto input) { if (input == null) { throw new UserFriendlyException($"请求参数错误"); }
if (string.IsNullOrEmpty(input.tjbh)) throw new UserFriendlyException($"体检编号不能为空");
var query = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync() join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id into patientTemp from patientHaveEmpty in patientTemp.DefaultIfEmpty() join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id join itemType in await _itemTypeRepository.GetQueryableAsync() on asbitem.ItemTypeId equals itemType.Id into itemTypeTemp from itemTypeHaveEmpty in itemTypeTemp.DefaultIfEmpty() where registerCheck.CheckRequestNo == input.tjbh orderby asbitem.DisplayOrder ascending select new { patientRegister, IdNo = patientHaveEmpty != null ? patientHaveEmpty.IdNo : "", MobileTelephone = patientHaveEmpty != null ? patientHaveEmpty.MobileTelephone : "", CheckRequestNo = registerCheck.CheckRequestNo, asbitem, ItemTypeName = itemTypeHaveEmpty != null ? itemTypeHaveEmpty.DisplayName : "", ItemTypeId = itemTypeHaveEmpty != null ? itemTypeHaveEmpty.Id.ToString() : "" });
var NoSetupDeviceType = query.Where(m => m.asbitem.DeviceTypeId == null || m.asbitem.DeviceTypeId == Guid.Empty).Select(s => s.asbitem.DisplayName).ToList();
if (NoSetupDeviceType.Any()) throw new UserFriendlyException($"检查项目{string.Join(',', NoSetupDeviceType)}未设置仪器类别");
if (!string.IsNullOrEmpty(input.xmlx)) { //检查类型检索
//仪器类别ID
var deviceTypeId = (from columnReference in await _columnReferenceRepository.GetQueryableAsync() join columnReferenceCode in await _columnReferenceCodeRepository.GetQueryableAsync() on columnReference.Id equals columnReferenceCode.ColumnReferenceId join columnReferenceInterface in await _columnReferenceInterfaceRepository.GetQueryableAsync() on columnReferenceCode.Id equals columnReferenceInterface.ColumnReferenceCodeId where columnReference.DisplayName == "仪器类别" && columnReferenceInterface.InterfaceCodeValue == input.xmlx select columnReferenceCode.CodeValue).FirstOrDefault();
query = query.Where(m => m.asbitem.DeviceTypeId == Guid.Parse(deviceTypeId)); }
var queryList = query.ToList();
if (queryList.Count() == 0) throw new UserFriendlyException($"体检编号不存在");
var patientInfo = new PatientPacsInfo_PatientInfoDto { addr = "", tjbh = queryList.FirstOrDefault().CheckRequestNo, csrq = queryList.FirstOrDefault().patientRegister.BirthDate != null ? queryList.FirstOrDefault().patientRegister.BirthDate.Value.ToString("yyyy-MM-dd HH:mm:ss") : "", djr = _cacheService.GetSurnameAsync(queryList.FirstOrDefault().patientRegister.CreatorId).Result, djrq = queryList.FirstOrDefault().patientRegister.CreationTime.ToString("yyyy-MM-dd HH:mm:ss"), lxdh = queryList.FirstOrDefault().MobileTelephone, nl = queryList.FirstOrDefault().patientRegister.Age.ToString(), sfzh = queryList.FirstOrDefault().IdNo, tjrq = queryList.FirstOrDefault().patientRegister.MedicalStartDate != null ? queryList.FirstOrDefault().patientRegister.MedicalStartDate.Value.ToString("yyyy-MM-dd HH:mm:ss") : "", xb = queryList.FirstOrDefault().patientRegister.SexId == 'M' ? "1" : (queryList.FirstOrDefault().patientRegister.SexId == 'F' ? "2" : "9"), xm = queryList.FirstOrDefault().patientRegister.PatientName };
var items = queryList.Select(s => new PatientPacsInfo_ItemsDto { ksbm = s.ItemTypeId, ksmc = s.ItemTypeName, sqdh = s.CheckRequestNo + "-" + (queryList.IndexOf(s) + 1), xmbh = s.asbitem.Id.ToString(), xmlx = "1", xmmc = s.asbitem.DisplayName, }).ToList();
return new PatientPacsInfoDto { PatientInfo = patientInfo, Items = items }; }
}}
|