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.
686 lines
30 KiB
686 lines
30 KiB
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.EntityFrameworkCore.Metadata.Internal;
|
|
using Microsoft.Extensions.Configuration;
|
|
using Newtonsoft.Json;
|
|
using NPOI.POIFS.Storage;
|
|
using Shentun.Peis.DirectorManagement;
|
|
using Shentun.Peis.Enums;
|
|
using Shentun.Peis.InternalReports;
|
|
using Shentun.Peis.Models;
|
|
using Shentun.Peis.PatientRegisters;
|
|
using Shentun.Peis.PrintReports;
|
|
using Shentun.Peis.TransToWebPeiss;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net.Http;
|
|
using System.Net.Http.Headers;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using Volo.Abp;
|
|
using Volo.Abp.Application.Services;
|
|
using Volo.Abp.Domain.Repositories;
|
|
|
|
namespace Shentun.Peis.DirectorManagements
|
|
{
|
|
/// <summary>
|
|
/// 主任管理报表数据
|
|
/// </summary>
|
|
[ApiExplorerSettings(GroupName = "Work")]
|
|
[Authorize]
|
|
public class DirectorManagementAppService : ApplicationService
|
|
{
|
|
private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;
|
|
private readonly IRepository<Patient, Guid> _patientRepository;
|
|
private readonly CacheService _cacheService;
|
|
private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository;
|
|
private readonly IRepository<RegisterCheckAsbitem, Guid> _registerCheckAsbitemRepository;
|
|
private readonly IRepository<Asbitem, Guid> _asbitemRepository;
|
|
private readonly IRepository<MedicalPackage, Guid> _medicalPackageRepository;
|
|
private readonly IRepository<CustomerOrg, Guid> _customerOrgRepository;
|
|
private readonly InternalReportAppService _internalReportAppService;
|
|
private readonly IRepository<ThirdInterface, Guid> _thirdInterfaceRepository;
|
|
private readonly PrintReportAppService _printReportAppService;
|
|
|
|
public DirectorManagementAppService(
|
|
IRepository<PatientRegister, Guid> patientRegisterRepository,
|
|
IRepository<Patient, Guid> patientRepository,
|
|
CacheService cacheService,
|
|
IRepository<RegisterCheck, Guid> registerCheckRepository,
|
|
IRepository<RegisterCheckAsbitem, Guid> registerCheckAsbitemRepository,
|
|
IRepository<Asbitem, Guid> asbitemRepository,
|
|
IRepository<MedicalPackage, Guid> medicalPackageRepository,
|
|
IRepository<CustomerOrg, Guid> customerOrgRepository,
|
|
InternalReportAppService internalReportAppService,
|
|
IRepository<ThirdInterface, Guid> thirdInterfaceRepository,
|
|
PrintReportAppService printReportAppService)
|
|
{
|
|
_patientRegisterRepository = patientRegisterRepository;
|
|
_patientRepository = patientRepository;
|
|
_cacheService = cacheService;
|
|
_registerCheckRepository = registerCheckRepository;
|
|
_registerCheckAsbitemRepository = registerCheckAsbitemRepository;
|
|
_asbitemRepository = asbitemRepository;
|
|
_medicalPackageRepository = medicalPackageRepository;
|
|
_customerOrgRepository = customerOrgRepository;
|
|
_internalReportAppService = internalReportAppService;
|
|
_thirdInterfaceRepository = thirdInterfaceRepository;
|
|
_printReportAppService = printReportAppService;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 查询客户信息
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/DirectorManagement/GetPatientList")]
|
|
public async Task<List<GetPatientListDto>> GetPatientListAsync(GetPatientListInputDto input)
|
|
{
|
|
var query = from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
|
|
join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id
|
|
select new
|
|
{
|
|
idNo = patient.IdNo,
|
|
mobileTelephone = patient.MobileTelephone,
|
|
nationId = patient.NationId,
|
|
patientRegister
|
|
};
|
|
if (!string.IsNullOrWhiteSpace(input.IdNo))
|
|
{
|
|
query = query.Where(m => m.idNo == input.IdNo);
|
|
}
|
|
if (!string.IsNullOrWhiteSpace(input.PatientName))
|
|
{
|
|
query = query.Where(m => m.patientRegister.PatientName == input.PatientName);
|
|
}
|
|
if (string.IsNullOrWhiteSpace(input.IdNo) && string.IsNullOrWhiteSpace(input.PatientName))
|
|
{
|
|
if (input.DateType != null
|
|
&& !string.IsNullOrWhiteSpace(input.StartDate)
|
|
&& !string.IsNullOrWhiteSpace(input.EndDate))
|
|
{
|
|
if (input.DateType == '1')
|
|
{
|
|
query = query.Where(m => m.patientRegister.CreationTime >= Convert.ToDateTime(input.StartDate)
|
|
&& m.patientRegister.CreationTime < Convert.ToDateTime(input.EndDate).AddDays(1));
|
|
}
|
|
else if (input.DateType == '2')
|
|
{
|
|
query = query.Where(m => m.patientRegister.MedicalStartDate != null
|
|
&& m.patientRegister.MedicalStartDate.Value >= Convert.ToDateTime(input.StartDate)
|
|
&& m.patientRegister.MedicalStartDate.Value < Convert.ToDateTime(input.EndDate).AddDays(1));
|
|
}
|
|
else if (input.DateType == '3')
|
|
{
|
|
query = query.Where(m => m.patientRegister.SummaryDate != null
|
|
&& m.patientRegister.SummaryDate.Value >= Convert.ToDateTime(input.StartDate)
|
|
&& m.patientRegister.SummaryDate.Value < Convert.ToDateTime(input.EndDate).AddDays(1));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
throw new UserFriendlyException("日期参数不完整");
|
|
}
|
|
|
|
}
|
|
var entListDto = query.ToList().Select(s => new GetPatientListDto
|
|
{
|
|
Age = s.patientRegister.Age == null ? "" : s.patientRegister.Age.Value.ToString(),
|
|
CompleteFlag = s.patientRegister.CompleteFlag.ToString(),
|
|
IdNo = s.idNo,
|
|
MaritalStatusName = _cacheService.GetMaritalStatusNameAsync(s.patientRegister.MaritalStatusId).GetAwaiter().GetResult(),
|
|
MedicalStartDate = DataHelper.ConversionDateToString(s.patientRegister.MedicalStartDate),
|
|
MedicalTimes = s.patientRegister.MedicalTimes,
|
|
MobileTelephone = s.mobileTelephone,
|
|
NationName = _cacheService.GetNationNameAsync(s.nationId).GetAwaiter().GetResult(),
|
|
PatientName = s.patientRegister.PatientName,
|
|
SexName = _cacheService.GetSexNameAsync(s.patientRegister.SexId).GetAwaiter().GetResult()
|
|
}).ToList();
|
|
|
|
return entListDto;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 收入统计 查询某个时间断
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/DirectorManagement/GetRevenueReport")]
|
|
public async Task<GetRevenueReportDto> GetRevenueReportAsync(GetRevenueReportInputDto input)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(input.StartDate) || string.IsNullOrWhiteSpace(input.EndDate))
|
|
{
|
|
throw new UserFriendlyException("请选择查询时间段");
|
|
}
|
|
var query = from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
|
|
join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
|
|
join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
|
|
where patientRegister.MedicalStartDate != null
|
|
&& patientRegister.MedicalStartDate.Value >= Convert.ToDateTime(input.StartDate)
|
|
&& patientRegister.MedicalStartDate.Value < Convert.ToDateTime(input.EndDate).AddDays(1)
|
|
select new
|
|
{
|
|
patientRegisterId = patientRegister.Id,
|
|
customerOrgId = patientRegister.CustomerOrgId,
|
|
ischarge = registerCheckAsbitem.IsCharge,
|
|
standardPrice = registerCheckAsbitem.StandardPrice,
|
|
chargePrice = registerCheckAsbitem.ChargePrice,
|
|
amount = registerCheckAsbitem.Amount
|
|
};
|
|
|
|
if (input.IsCharge != null)
|
|
{
|
|
query = query.Where(m => m.ischarge == input.IsCharge);
|
|
}
|
|
|
|
var queryList = query.ToList();
|
|
|
|
if (queryList.Count == 0)
|
|
{
|
|
return new GetRevenueReportDto
|
|
{
|
|
ChargeMoney = 0,
|
|
CustomerOrgCount = 0,
|
|
PersonCount = 0,
|
|
StandardMoney = 0,
|
|
SumCount = 0
|
|
};
|
|
}
|
|
|
|
var chargeMoney = queryList.Sum(s => s.chargePrice * s.amount);
|
|
var standardMoney = queryList.Sum(s => s.standardPrice * s.amount);
|
|
var sumCount = queryList.GroupBy(g => g.patientRegisterId).Count();
|
|
var customerOrgCount = queryList.Where(m => m.customerOrgId != GuidFlag.PersonCustomerOrgId).GroupBy(g => g.patientRegisterId).Count();
|
|
var personCount = queryList.Where(m => m.customerOrgId == GuidFlag.PersonCustomerOrgId).GroupBy(g => g.patientRegisterId).Count();
|
|
var entDto = new GetRevenueReportDto
|
|
{
|
|
ChargeMoney = chargeMoney,
|
|
StandardMoney = standardMoney,
|
|
SumCount = sumCount,
|
|
CustomerOrgCount = customerOrgCount,
|
|
PersonCount = personCount
|
|
};
|
|
|
|
return entDto;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 收入统计 某段时间内组合项目售卖数量和金额排行榜
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/DirectorManagement/GetAsbitemRevenueReport")]
|
|
public async Task<List<GetAsbitemRevenueReportDto>> GetAsbitemRevenueReportAsync(GetRevenueReportInputDto input)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(input.StartDate) || string.IsNullOrWhiteSpace(input.EndDate))
|
|
{
|
|
throw new UserFriendlyException("请选择查询时间段");
|
|
}
|
|
var query = from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
|
|
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
|
|
where patientRegister.MedicalStartDate != null
|
|
&& patientRegister.MedicalStartDate.Value >= Convert.ToDateTime(input.StartDate)
|
|
&& patientRegister.MedicalStartDate.Value < Convert.ToDateTime(input.EndDate).AddDays(1)
|
|
select new
|
|
{
|
|
patientRegisterId = patientRegister.Id,
|
|
registerCheckAsbitem,
|
|
asbitemName = asbitem.DisplayName
|
|
};
|
|
|
|
if (input.IsCharge != null)
|
|
{
|
|
query = query.Where(m => m.registerCheckAsbitem.IsCharge == input.IsCharge);
|
|
}
|
|
|
|
var queryList = query.ToList();
|
|
|
|
var entListDto = queryList.GroupBy(g => g.registerCheckAsbitem.AsbitemId).Select(s => new GetAsbitemRevenueReportDto
|
|
{
|
|
AsbitemName = s.FirstOrDefault().asbitemName,
|
|
SalesCount = s.Sum(sa => sa.registerCheckAsbitem.Amount),
|
|
SalesChargeAmount = s.Sum(sa => sa.registerCheckAsbitem.ChargePrice * sa.registerCheckAsbitem.Amount),
|
|
SalesStandardAmount = s.Sum(sa => sa.registerCheckAsbitem.StandardPrice * sa.registerCheckAsbitem.Amount)
|
|
}).OrderByDescending(o => o.SalesChargeAmount).ToList();
|
|
|
|
return entListDto;
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 收入统计 某段时间内套餐售卖数量和金额排行榜
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/DirectorManagement/GetMedicalPackageRevenueReport")]
|
|
public async Task<List<GetMedicalPackageRevenueReportDto>> GetMedicalPackageRevenueReportAsync(GetMedicalPackageRevenueReportInputDto input)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(input.StartDate) || string.IsNullOrWhiteSpace(input.EndDate))
|
|
{
|
|
throw new UserFriendlyException("请选择查询时间段");
|
|
}
|
|
var query = from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
|
|
join medicalPackage in await _medicalPackageRepository.GetQueryableAsync() on patientRegister.MedicalPackageId equals medicalPackage.Id
|
|
where patientRegister.MedicalStartDate != null
|
|
&& patientRegister.MedicalStartDate.Value >= Convert.ToDateTime(input.StartDate)
|
|
&& patientRegister.MedicalStartDate.Value < Convert.ToDateTime(input.EndDate).AddDays(1)
|
|
select new
|
|
{
|
|
patientRegisterId = patientRegister.Id,
|
|
medicalPackage
|
|
};
|
|
|
|
|
|
|
|
var queryList = query.ToList();
|
|
|
|
var entListDto = queryList.GroupBy(g => g.medicalPackage).Select(s => new GetMedicalPackageRevenueReportDto
|
|
{
|
|
MedicalPackageName = s.Key.DisplayName,
|
|
SalesCount = s.Count(),
|
|
SalesAmount = s.Sum(sa => sa.medicalPackage.Price)
|
|
}).OrderByDescending(o => o.SalesAmount).ToList();
|
|
|
|
return entListDto;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 单位体检人数和金额排行榜
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/DirectorManagement/GetCustomerOrgPhysicalExaminationStatisticsReport")]
|
|
public async Task<List<GetCustomerOrgPhysicalExaminationStatisticsReportDto>> GetCustomerOrgPhysicalExaminationStatisticsReportAsync(GetCustomerOrgPhysicalExaminationStatisticsReportInputDto input)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(input.StartDate) || string.IsNullOrWhiteSpace(input.EndDate))
|
|
{
|
|
throw new UserFriendlyException("请选择查询时间段");
|
|
}
|
|
|
|
var query = from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
|
|
join customerOrg in await _customerOrgRepository.GetQueryableAsync() on patientRegister.CustomerOrgId equals customerOrg.Id
|
|
join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
|
|
join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
|
|
where patientRegister.CustomerOrgId != GuidFlag.PersonCustomerOrgId
|
|
&& patientRegister.MedicalStartDate != null
|
|
&& patientRegister.MedicalStartDate.Value >= Convert.ToDateTime(input.StartDate)
|
|
&& patientRegister.MedicalStartDate.Value < Convert.ToDateTime(input.EndDate).AddDays(1)
|
|
select new
|
|
{
|
|
patientRegisterId = patientRegister.Id,
|
|
customerOrg,
|
|
registerCheckAsbitem
|
|
};
|
|
|
|
if (input.IsCharge != null)
|
|
{
|
|
query = query.Where(m => m.registerCheckAsbitem.IsCharge == input.IsCharge);
|
|
}
|
|
|
|
var queryList = query.ToList();
|
|
|
|
var entListDto = queryList.GroupBy(g => g.customerOrg).Select(s => new GetCustomerOrgPhysicalExaminationStatisticsReportDto
|
|
{
|
|
CustomerOrgName = _cacheService.GetTopCustomerOrgNameAsync(s.Key.Id).GetAwaiter().GetResult(),
|
|
CustomerOrgCount = s.Select(x => x.patientRegisterId).Distinct().Count(),
|
|
SalesChargeAmount = s.Where(m => m.registerCheckAsbitem.PayTypeFlag == PayTypeFlag.OrgPay).Sum(sa => sa.registerCheckAsbitem.ChargePrice * sa.registerCheckAsbitem.Amount),
|
|
SalesStandardAmount = s.Where(m => m.registerCheckAsbitem.PayTypeFlag == PayTypeFlag.OrgPay).Sum(sa => sa.registerCheckAsbitem.StandardPrice * sa.registerCheckAsbitem.Amount)
|
|
}).OrderByDescending(o => o.SalesChargeAmount).ToList();
|
|
|
|
return entListDto;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 工作量统计 某段时间科室工作量统计
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/DirectorManagement/GetItemTypeWorkLoadReport")]
|
|
public async Task<List<GetItemTypeWorkLoadInStandardDto>> GetItemTypeWorkLoadReportAsync(GetItemTypeWorkLoadReportInputDto input)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(input.StartDate) || string.IsNullOrWhiteSpace(input.EndDate))
|
|
{
|
|
throw new UserFriendlyException("请选择查询时间段");
|
|
}
|
|
|
|
var entListDto = await _internalReportAppService.GetItemTypeWorkLoadInStandardAsync(new GetItemTypeWorkLoadInStandardRequestDto
|
|
{
|
|
StartDate = input.StartDate,
|
|
EndDate = input.EndDate
|
|
});
|
|
|
|
return entListDto;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 工作量统计 某段时间医生工作量统计
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/DirectorManagement/GetDoctorWorkLoadReport")]
|
|
public async Task<List<GetDoctorPersonnelWorkLoadReportDto>> GetDoctorWorkLoadReportAsync(GetDoctorWorkLoadReportInputDto input)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(input.StartDate) || string.IsNullOrWhiteSpace(input.EndDate))
|
|
{
|
|
throw new UserFriendlyException("请选择查询时间段");
|
|
}
|
|
|
|
var entListDto = await _internalReportAppService.GetDoctorPersonnelWorkLoadReportAsync(new GetDoctorPersonnelWorkLoadReportRequestDto
|
|
{
|
|
StartDate = input.StartDate,
|
|
EndDate = input.EndDate
|
|
});
|
|
|
|
return entListDto;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 套餐价格查询
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/DirectorManagement/GetMedicalPackage")]
|
|
public async Task<List<GetMedicalPackageDto>> GetMedicalPackageAsync(GetMedicalPackageInputDto input)
|
|
{
|
|
var query = from medicalPackage in await _medicalPackageRepository.GetQueryableAsync()
|
|
where medicalPackage.IsActive == 'Y'
|
|
select medicalPackage;
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(input.MedicalPackageName))
|
|
{
|
|
query = query.Where(m => input.MedicalPackageName.Contains(m.DisplayName));
|
|
}
|
|
|
|
|
|
var entListDto = query.ToList().Select(s => new GetMedicalPackageDto
|
|
{
|
|
DisplayOrder = s.DisplayOrder,
|
|
ForSexName = GetForSexName(s.ForSexId),
|
|
MaritalStatusName = _cacheService.GetMaritalStatusNameAsync(s.MaritalStatusId).GetAwaiter().GetResult(),
|
|
MedicalPackageName = s.DisplayName,
|
|
Price = s.Price,
|
|
Remark = s.Remark
|
|
}).OrderBy(o => o.DisplayOrder).ToList();
|
|
|
|
return entListDto;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 组合项目价格查询
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/DirectorManagement/GetAsbitem")]
|
|
public async Task<List<GetAsbitemDto>> GetAsbitemAsync(GetAsbitemInputDto input)
|
|
{
|
|
var query = from asbitem in await _asbitemRepository.GetQueryableAsync()
|
|
where asbitem.IsActive == 'Y'
|
|
select asbitem;
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(input.AsbitemName))
|
|
{
|
|
query = query.Where(m => input.AsbitemName.Contains(m.DisplayName));
|
|
}
|
|
|
|
|
|
var entListDto = query.ToList().Select(s => new GetAsbitemDto
|
|
{
|
|
DisplayOrder = s.DisplayOrder,
|
|
ForSexName = GetForSexName(s.ForSexId),
|
|
MaritalStatusName = _cacheService.GetMaritalStatusNameAsync(s.MaritalStatusId).GetAwaiter().GetResult(),
|
|
AsbitemName = s.DisplayName,
|
|
Price = s.Price
|
|
}).OrderBy(o => o.DisplayOrder).ToList();
|
|
|
|
return entListDto;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 客户体检报告查询
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/DirectorManagement/GetPeisReport")]
|
|
public async Task<List<GetPeisReportDto>> GetPeisReportAsync(GetPeisReportInputDto input)
|
|
{
|
|
var query = from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
|
|
join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id
|
|
where patientRegister.CompleteFlag == PatientRegisterCompleteFlag.Audit || patientRegister.CompleteFlag == PatientRegisterCompleteFlag.SumCheck
|
|
select new
|
|
{
|
|
patientRegister,
|
|
patient
|
|
};
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(input.PatientName))
|
|
{
|
|
query = query.Where(m => m.patientRegister.PatientName == input.PatientName);
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(input.MobileTelephone))
|
|
{
|
|
query = query.Where(m => m.patient.MobileTelephone == input.MobileTelephone);
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(input.PatientNo))
|
|
{
|
|
query = query.Where(m => m.patient.PatientNo == input.PatientNo);
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(input.IdNo))
|
|
{
|
|
query = query.Where(m => m.patient.IdNo == input.IdNo);
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(input.PatientRegisterNo))
|
|
{
|
|
query = query.Where(m => m.patientRegister.PatientRegisterNo == input.PatientRegisterNo);
|
|
}
|
|
|
|
var entListDto = query.Select(s => new GetPeisReportDto
|
|
{
|
|
Age = s.patientRegister.Age == null ? "" : s.patientRegister.Age.ToString(),
|
|
MedicalStartDate = DataHelper.ConversionDateShortToString(s.patientRegister.MedicalStartDate),
|
|
AuditDate = DataHelper.ConversionDateShortToString(s.patientRegister.AuditDate),
|
|
AuditDoctorName = _cacheService.GetSurnameAsync(s.patientRegister.AuditDoctorId).GetAwaiter().GetResult(),
|
|
IdNo = s.patient.IdNo,
|
|
MobileTelephone = s.patient.MobileTelephone,
|
|
PatientNo = s.patient.PatientNo,
|
|
SexName = GetSexName(s.patientRegister.SexId),
|
|
CompleteFlag = GetPatientRegisterCompleteFlag(s.patientRegister.CompleteFlag),
|
|
IsUpload = s.patientRegister.IsUpload == 'Y' ? "已上传" : "未上传",
|
|
PatientName = s.patientRegister.PatientName,
|
|
PatientRegisterId = s.patientRegister.Id,
|
|
PatientRegisterNo = s.patientRegister.PatientRegisterNo,
|
|
SummaryDate = DataHelper.ConversionDateShortToString(s.patientRegister.SummaryDate),
|
|
SummaryDoctorName = _cacheService.GetSurnameAsync(s.patientRegister.SummaryDoctorId).GetAwaiter().GetResult(),
|
|
CustomerOrgName = _cacheService.GetTopCustomerOrgNameAsync(s.patientRegister.CustomerOrgId).GetAwaiter().GetResult(),
|
|
DepartmentName = _cacheService.GetCustomerOrgNameAsync(s.patientRegister.CustomerOrgId).GetAwaiter().GetResult()
|
|
}).OrderBy(o => o.PatientRegisterId).ToList();
|
|
|
|
return entListDto;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 根据体检人员Id查询报告 返回的报告base64
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/DirectorManagement/GetPeisReportBase64ByPatientRegisterId")]
|
|
public async Task<GetPeisReportBase64ByPatientRegisterIdDto> GetPeisReportBase64ByPatientRegisterIdAsync(PatientRegisterIdInputDto input)
|
|
{
|
|
var entDto = new GetPeisReportBase64ByPatientRegisterIdDto();
|
|
|
|
entDto.Base64Str = await GetPeisBase64Async(input);
|
|
|
|
return entDto;
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 获取报告bse64 调用服务器上客户端
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
/// <exception cref="UserFriendlyException"></exception>
|
|
/// <exception cref="Exception"></exception>
|
|
private async Task<string> GetPeisBase64Async(PatientRegisterIdInputDto input)
|
|
{
|
|
|
|
var thirdInterface = await _thirdInterfaceRepository.FirstOrDefaultAsync(f => f.ThirdInterfaceType == ThirdInterfaceTypeFlag.TranToWebPeis);
|
|
if (thirdInterface.IsActive != 'Y')
|
|
{
|
|
throw new UserFriendlyException("该接口已禁用");
|
|
}
|
|
|
|
var parmValue = thirdInterface.ParmValue;
|
|
var configurationBuilder = new ConfigurationBuilder()
|
|
.AddJsonStream(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(parmValue)));
|
|
var config = configurationBuilder.Build();
|
|
var reportApiBaseAddress = config.GetSection("Interface").GetSection("ReportApiBaseAddress").Value;
|
|
var reportApiUrl = config.GetSection("Interface").GetSection("ReportApiUrl").Value;
|
|
|
|
string reportBase64 = "";
|
|
|
|
|
|
var printReportData = await _printReportAppService.GetMedicalReportConvertToReportAsync(input);
|
|
|
|
|
|
using (var httpClientHandler = new HttpClientHandler())
|
|
{
|
|
using (var httpClient = new HttpClient(httpClientHandler))
|
|
{
|
|
httpClient.BaseAddress = new Uri(reportApiBaseAddress);
|
|
|
|
httpClient.DefaultRequestHeaders.Accept.Add(
|
|
new MediaTypeWithQualityHeaderValue("application/json"));//设置accept标头,告诉JSON是可接受的响应类型
|
|
|
|
|
|
var sendData = JsonConvert.SerializeObject(printReportData);
|
|
using (HttpContent httpContent = new StringContent(sendData))
|
|
{
|
|
httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
|
|
HttpResponseMessage response = null;
|
|
|
|
response = await httpClient.PostAsync(reportApiUrl, httpContent);
|
|
|
|
|
|
string result;
|
|
if (!response.IsSuccessStatusCode)
|
|
{
|
|
result = response.Content.ReadAsStringAsync().Result;
|
|
throw new Exception("http通信错误:" + response.StatusCode + ",结果:" + result);
|
|
}
|
|
result = await response.Content.ReadAsStringAsync();
|
|
|
|
var resultDto = JsonConvert.DeserializeObject<WebApiClientOutDto>(result);
|
|
if (resultDto != null)
|
|
{
|
|
if (resultDto.code != 1)
|
|
{
|
|
throw new Exception($"调用WebApi失败,返回-1,消息:" + result);
|
|
}
|
|
|
|
reportBase64 = resultDto.data;
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
return reportBase64;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 转换适用性别
|
|
/// </summary>
|
|
/// <param name="ForSexId"></param>
|
|
/// <returns></returns>
|
|
private string GetForSexName(char ForSexId)
|
|
{
|
|
string msg = "";
|
|
if (ForSexId == 'A')
|
|
{
|
|
msg = "全部";
|
|
}
|
|
else if (ForSexId == 'M')
|
|
{
|
|
msg = "男";
|
|
}
|
|
else if (ForSexId == 'F')
|
|
{
|
|
msg = "女";
|
|
}
|
|
return msg;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 转换性别
|
|
/// </summary>
|
|
/// <param name="SexId"></param>
|
|
/// <returns></returns>
|
|
private string GetSexName(char SexId)
|
|
{
|
|
string msg = "";
|
|
if (SexId == 'U')
|
|
{
|
|
msg = "未知";
|
|
}
|
|
else if (SexId == 'M')
|
|
{
|
|
msg = "男";
|
|
}
|
|
else if (SexId == 'F')
|
|
{
|
|
msg = "女";
|
|
}
|
|
return msg;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 转换人员状态
|
|
/// </summary>
|
|
/// <param name="completeFlag"></param>
|
|
/// <returns></returns>
|
|
private string GetPatientRegisterCompleteFlag(char completeFlag)
|
|
{
|
|
string msg = "";
|
|
if (completeFlag == '0')
|
|
{
|
|
msg = "预登记";
|
|
}
|
|
else if (completeFlag == '1')
|
|
{
|
|
msg = "正式登记";
|
|
}
|
|
else if (completeFlag == '2')
|
|
{
|
|
msg = "部分已检";
|
|
}
|
|
else if (completeFlag == '3')
|
|
{
|
|
msg = "已总检";
|
|
}
|
|
return msg;
|
|
}
|
|
|
|
}
|
|
}
|