using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.VisualBasic; using NPOI.SS.Formula.Functions; using Shentun.Peis.Models; using Shentun.Peis.PatientRegisters; using Shentun.Peis.Permissions; 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 { /// /// 第三方公开接口 /// public class ThirdPartyPublicInterfaceAppService : ApplicationService { private readonly IRepository _patientRegisterRepository; private readonly IRepository _registerCheckRepository; private readonly IRepository _registerCheckAsbitemRepository; private readonly IRepository _registerCheckItemRepository; private readonly IRepository _itemRepository; private readonly IRepository _itemTypeRepository; private readonly IRepository _asbitemRepository; private readonly IRepository _patientRepository; private readonly CacheService _cacheService; public ThirdPartyPublicInterfaceAppService( IRepository patientRegisterRepository, CacheService cacheService, IRepository registerCheckRepository, IRepository registerCheckAsbitemRepository, IRepository registerCheckItemRepository, IRepository itemRepository, IRepository itemTypeRepository, IRepository asbitemRepository, IRepository patientRepository) { _patientRegisterRepository = patientRegisterRepository; _cacheService = cacheService; _registerCheckRepository = registerCheckRepository; _registerCheckAsbitemRepository = registerCheckAsbitemRepository; _registerCheckItemRepository = registerCheckItemRepository; _itemRepository = itemRepository; _itemTypeRepository = itemTypeRepository; _asbitemRepository = asbitemRepository; _patientRepository = patientRepository; } /// /// 查询体检人员基本信息 /// /// /// [Authorize(PeisPermissions.Third.Default)] [HttpPost("api/Third/ThirdPartyPublicInterface/GetBasicInformationOfMedicalExaminationPersonnel")] public async Task GetBasicInformationOfMedicalExaminationPersonnelAsync(PublicPatientRegisterNoInputDto input) { if (input == null) { throw new UserFriendlyException($"请求参数错误"); } var result = new BasicInformationOfMedicalExaminationPersonnelDto(); var patientRegisterEnt = await _patientRegisterRepository.FirstOrDefaultAsync(m => m.PatientRegisterNo == input.PatientRegisterNo); if (patientRegisterEnt != null) { result = new BasicInformationOfMedicalExaminationPersonnelDto { BirthDate = patientRegisterEnt.BirthDate != null ? patientRegisterEnt.BirthDate.Value.ToString("yyyy-MM-dd") : "", 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") : "", }; } else { throw new UserFriendlyException($"条码号不正确"); } return result; } /// /// 查询体检明细项目信息 /// /// /// [Authorize(PeisPermissions.Third.Default)] [HttpPost("api/Third/ThirdPartyPublicInterface/GetPhysicalExaminationDetailsItemInformation")] public async Task> 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; } /// /// 查询pacs条码信息 /// /// /// [HttpPost("api/Third/ThirdPartyPublicInterface/getPatientItems")] public async Task 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() : "" }).ToList(); if (!string.IsNullOrEmpty(input.xmlx)) { //检查类型检索 } if (query.Count == 0) throw new UserFriendlyException($"体检编号不存在"); var patientInfo = new PatientPacsInfo_PatientInfoDto { addr = "", tjbh = query.FirstOrDefault().CheckRequestNo, csrq = query.FirstOrDefault().patientRegister.BirthDate != null ? query.FirstOrDefault().patientRegister.BirthDate.Value.ToString("yyyy-MM-dd HH:mm:ss") : "", djr = _cacheService.GetSurnameAsync(query.FirstOrDefault().patientRegister.CreatorId).Result, djrq = query.FirstOrDefault().patientRegister.CreationTime.ToString("yyyy-MM-dd HH:mm:ss"), lxdh = query.FirstOrDefault().MobileTelephone, nl = query.FirstOrDefault().patientRegister.Age.ToString(), sfzh = query.FirstOrDefault().IdNo, tjrq = query.FirstOrDefault().patientRegister.MedicalStartDate != null ? query.FirstOrDefault().patientRegister.MedicalStartDate.Value.ToString("yyyy-MM-dd HH:mm:ss") : "", xb = query.FirstOrDefault().patientRegister.SexId == 'M' ? "1" : (query.FirstOrDefault().patientRegister.SexId == 'F' ? "2" : "9"), xm = query.FirstOrDefault().patientRegister.PatientName }; var items = query.Select(s => new PatientPacsInfo_ItemsDto { ksbm = s.ItemTypeId, ksmc = s.ItemTypeName, sqdh = s.CheckRequestNo + "-" + (query.IndexOf(s) + 1), xmbh = s.asbitem.Id.ToString(), xmlx = "1", xmmc = s.asbitem.DisplayName, }).ToList(); return new PatientPacsInfoDto { PatientInfo = patientInfo, Items = items }; } } }