You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

230 lines
11 KiB

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
};
}
}
}