| 
						 | 
						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{    /// <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 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)        {            _patientRegisterRepository = patientRegisterRepository;            _cacheService = cacheService;            _registerCheckRepository = registerCheckRepository;            _registerCheckAsbitemRepository = registerCheckAsbitemRepository;            _registerCheckItemRepository = registerCheckItemRepository;            _itemRepository = itemRepository;            _itemTypeRepository = itemTypeRepository;            _asbitemRepository = asbitemRepository;            _patientRepository = patientRepository;        }
        /// <summary>
        /// 查询体检人员基本信息
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [Authorize(PeisPermissions.Third.Default)]        [HttpPost("api/Third/ThirdPartyPublicInterface/GetBasicInformationOfMedicalExaminationPersonnel")]        public async Task<BasicInformationOfMedicalExaminationPersonnelDto> 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;
        }
        /// <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() : ""                         }).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            };        }
    }}
  |