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.

5298 lines
265 KiB

using Castle.Core.Logging;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using NPOI.POIFS.Properties;
using NPOI.SS.Formula.Functions;
using NPOI.Util;
using NUglify.Helpers;
using Org.BouncyCastle.Asn1.Ocsp;
using Shentun.Peis.AppointPatientRegisters;
using Shentun.Peis.CommonCharTypes;
using Shentun.Peis.CustomerOrgRegisters;
using Shentun.Peis.CustomerOrgs;
using Shentun.Peis.Enums;
using Shentun.Peis.LisRequests;
using Shentun.Peis.Models;
using Shentun.Peis.OcCheckTypeDetails;
using Shentun.Peis.PatientOccupationalDiseases;
using Shentun.Peis.PatientPoisons;
using Shentun.Peis.PatientRegisterExters;
using Shentun.Peis.Patients;
using Shentun.Peis.PeisReports;
using Shentun.Peis.PlugIns.Extensions.ImportLisResults.Dian;
using Shentun.Peis.RegisterAsbitems;
using Shentun.Peis.RegisterCheckAsbitems;
using Shentun.Peis.RegisterChecks;
using Shentun.Peis.Rooms;
using Shentun.Peis.SumSuggestionContents;
using Shentun.Peis.SumSuggestionHeaders;
using Shentun.Peis.SumSummaryContents;
using Shentun.Peis.SumSummaryHeaders;
using Shentun.Peis.SumSummaryReports;
using Shentun.Peis.SysParmValues;
using Shentun.Peis.ThirdBookingPushs;
using Shentun.Utilities;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Linq.Dynamic.Core;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Transactions;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Guids;
using Volo.Abp.Identity;
using Volo.Abp.ObjectMapping;
using Volo.Abp.Uow;
using Volo.Abp.Users;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
namespace Shentun.Peis.PatientRegisters
{
/// <summary>
/// 人员体检登记
/// </summary>
[ApiExplorerSettings(GroupName = "Work")]
[Authorize]
public class PatientRegisterAppService : CrudAppService<
PatientRegister, //The Book entity
PatientRegisterDto, //Used to show books
Guid, //Primary key of the book entity
PagedAndSortedResultRequestDto, //Used for paging/sorting
CreatePatientRegisterDto,
UpdatePatientRegisterDto>
{
private readonly IRepository<PatientRegister, Guid> _repository;
private readonly IRepository<Patient, Guid> _patientRepository;
private readonly IRepository<IdentityUser, Guid> _userRepository;
private readonly IRepository<Sex> _sexRepository;
private readonly IRepository<BirthPlace, Guid> _birthPlaceRepository;
private readonly IRepository<MaritalStatus> _maritalStatusRepository;
private readonly IRepository<Nation> _nationRepository;
private readonly IRepository<CustomerOrgGroup, Guid> _customerOrgGroupRepository;
private readonly IRepository<CustomerOrgGroupDetail> _customerOrgGroupDetailRepository;
private readonly IRepository<CustomerOrg, Guid> _customerOrgRepository;
private readonly IRepository<PersonnelType, Guid> _personnelTypeRepository;
private readonly IRepository<MedicalType, Guid> _medicalTypeRepository;
private readonly IRepository<SexHormoneTerm, Guid> _sexHormoneTermRepository;
private readonly IRepository<PayMode> _payModeRepository;
private readonly IRepository<RegisterCheckAsbitem, Guid> _registerCheckAsbitemRepository;
private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository;
private readonly IRepository<RegisterCheckItem> _registerCheckItemRepository;
private readonly IRepository<RegisterCheckPicture, Guid> _registerCheckPictureRepository;
private readonly IRepository<Item, Guid> _itemRepository;
private readonly IRepository<Asbitem, Guid> _asbitemRepository;
private readonly IPatientRegisterChargeRepository _patientRegisterChargeRepository;
private readonly IRepository<MedicalPackageDetail> _medicalPackageDetailRepository;
private readonly IRepository<SumSummaryHeader, Guid> _sumSummaryHeaderRepository;
private readonly IRepository<SumSummaryContent, Guid> _sumSummaryContentRepository;
private readonly IRepository<SumSuggestionHeader, Guid> _sumSuggestionHeaderRepository;
private readonly IRepository<SumSuggestionContent, Guid> _sumSuggestionContentRepository;
private readonly IRepository<SumDiagnosis> _sumDiagnosisRepository;
private readonly ILogger<PatientRegisterAppService> _logger;
private readonly CustomerOrgManager _customerOrgManager;
private readonly CustomerOrgRegisterManager _customerOrgRegisterManager;
private readonly PatientManager _patientManager;
private readonly PatientRegisterManager _patientRegisterManager;
private readonly RegisterCheckAsbitemManager _registerAsbitemManager;
private readonly SumSummaryHeaderManager _sumSummaryHeaderManager;
private readonly SumSummaryContentManager _sumSummaryContentManager;
private readonly SumSuggestionHeaderManager _sumSuggestionHeaderManager;
private readonly SumSuggestionContentManager _sumSuggestionContentManager;
//private readonly IRepository<CustomerOrg, Guid> _customerOrgRepository;
//private readonly IRepository<PrimarykeyBuilder> _primarykeyBuilderRepository;
//private readonly IRepository<SysParmValue> _sysParmValueRepository;
private readonly PatientRegisterManager _manager;
private readonly CacheService _cacheService;
private readonly SysParmValueManager _sysParmValueManager;
private readonly IRepository<PatientRegisterExter> _patientRegisterExterRepository;
private readonly PatientRegisterExterManager _patientRegisterExterManager;
private readonly IRepository<LisRequest, Guid> _lisRequestRepository;
private readonly IConfiguration _configuration;
private readonly ICurrentUser _currentUser;
private readonly IRepository<UserItemType> _userItemTypeRepository;
private readonly PatientOccupationalDiseaseManager _patientOccupationalDiseaseManager;
private readonly IRepository<ThirdInterface, Guid> _thirdInterfaceRepository;
private readonly IRepository<CustomerOrgRegister, Guid> _customerOrgRegisterRepository;
private readonly IRepository<OcCheckType, Guid> _ocCheckTypeRepository;
private readonly IRepository<Poison, Guid> _poisonRepository;
private readonly IRepository<OcCheckTypeDetail> _ocCheckTypeDetailRepository;
private readonly IRepository<PatientOccupationalDisease, Guid> _patientOccupationalDiseaseRepository;
private readonly IRepository<PatientPoison> _patientPoisonRepository;
private readonly PatientPoisonManager _patientPoisonManager;
private readonly IRepository<Diagnosis> _diagnosisRepository;
private readonly ThirdBookingPushAppService _thirdBookingPushAppService;
private readonly IRepository<ThirdBooking, Guid> _thirdBookingRepository;
private readonly IRepository<Charge, Guid> _chargeRepository;
private readonly IRepository<ChargePay, Guid> _chargePayRepository;
public PatientRegisterAppService(
IRepository<PatientRegister, Guid> repository,
IRepository<Patient, Guid> patientRepository,
IRepository<IdentityUser, Guid> userRepository,
IRepository<Sex> sexRepository,
IRepository<BirthPlace, Guid> birthPlaceRepository,
IRepository<MaritalStatus> maritalStatusRepository,
IRepository<Nation> nationRepository,
IRepository<CustomerOrgGroup, Guid> customerOrgGroupRepository,
IRepository<CustomerOrgGroupDetail> customerOrgGroupDetailRepository,
IRepository<CustomerOrg, Guid> customerOrgRepository,
IRepository<PersonnelType, Guid> personnelTypeRepository,
IRepository<MedicalType, Guid> medicalTypeRepository,
IRepository<SexHormoneTerm, Guid> sexHormoneTermRepository,
IRepository<PayMode> payModeRepository,
IRepository<RegisterCheckAsbitem, Guid> registerAsbitemRepository,
IRepository<RegisterCheck, Guid> registerCheckRepository,
IRepository<RegisterCheckItem> registerCheckItemRepository,
IRepository<RegisterCheckPicture, Guid> registerCheckPictureRepository,
IRepository<Item, Guid> itemRepository,
IRepository<Asbitem, Guid> asbitemRepository,
IRepository<SumSummaryHeader, Guid> sumSummaryHeaderRepository,
IRepository<SumSummaryContent, Guid> sumSummaryContentRepository,
IRepository<SumSuggestionHeader, Guid> sumSuggestionHeaderRepository,
IRepository<SumSuggestionContent, Guid> sumSuggestionContentRepository,
IRepository<SumDiagnosis> sumDiagnosisRepository,
//IRepository<SysParmValue> sysParmValueRepository,
//IRepository<CustomerOrg, Guid> customerOrgRepository,
//IRepository<PrimarykeyBuilder> primarykeyBuilderRepository,
IPatientRegisterChargeRepository patientRegisterChargeRepository,
IRepository<MedicalPackageDetail> medicalPackageDetailRepository,
ILogger<PatientRegisterAppService> logger,
CustomerOrgManager customerOrgManager,
CustomerOrgRegisterManager customerOrgRegisterManager,
PatientManager patientManager,
PatientRegisterManager patientRegisterManager,
RegisterCheckAsbitemManager registerAsbitemManager,
PatientRegisterManager manager,
CacheService cacheService,
SumSummaryHeaderManager sumSummaryHeaderManager,
SumSummaryContentManager sumSummaryContentManager,
SumSuggestionHeaderManager sumSuggestionHeaderManager,
SumSuggestionContentManager sumSuggestionContentManager,
SysParmValueManager sysParmValueManager,
IRepository<PatientRegisterExter> patientRegisterExterRepository,
PatientRegisterExterManager patientRegisterExterManager,
IRepository<LisRequest, Guid> lisRequestRepository,
IConfiguration configuration,
ICurrentUser currentUser,
IRepository<UserItemType> userItemTypeRepository,
PatientOccupationalDiseaseManager patientOccupationalDiseaseManager,
IRepository<ThirdInterface, Guid> thirdInterfaceRepository,
IRepository<CustomerOrgRegister, Guid> customerOrgRegisterRepository,
IRepository<OcCheckType, Guid> ocCheckTypeRepository,
IRepository<Poison, Guid> poisonRepository,
IRepository<OcCheckTypeDetail> ocCheckTypeDetailRepository,
IRepository<PatientOccupationalDisease, Guid> patientOccupationalDiseaseRepository,
IRepository<PatientPoison> patientPoisonRepository,
PatientPoisonManager patientPoisonManager,
IRepository<Diagnosis> diagnosisRepository,
ThirdBookingPushAppService thirdBookingPushAppService,
IRepository<ThirdBooking, Guid> thirdBookingRepository,
IRepository<Charge, Guid> chargeRepository,
IRepository<ChargePay, Guid> chargePayRepository)
: base(repository)
{
this._repository = repository;
this._patientRepository = patientRepository;
this._userRepository = userRepository;
this._sexRepository = sexRepository;
this._birthPlaceRepository = birthPlaceRepository;
this._maritalStatusRepository = maritalStatusRepository;
this._nationRepository = nationRepository;
this._customerOrgGroupRepository = customerOrgGroupRepository;
this._customerOrgGroupDetailRepository = customerOrgGroupDetailRepository;
this._customerOrgRepository = customerOrgRepository;
this._personnelTypeRepository = personnelTypeRepository;
this._medicalTypeRepository = medicalTypeRepository;
this._sexHormoneTermRepository = sexHormoneTermRepository;
this._payModeRepository = payModeRepository;
this._registerCheckAsbitemRepository = registerAsbitemRepository;
this._registerCheckRepository = registerCheckRepository;
this._registerCheckItemRepository = registerCheckItemRepository;
this._registerCheckPictureRepository = registerCheckPictureRepository;
this._itemRepository = itemRepository;
this._patientRegisterChargeRepository = patientRegisterChargeRepository;
this._logger = logger;
this._customerOrgManager = customerOrgManager;
this._customerOrgRegisterManager = customerOrgRegisterManager;
this._patientManager = patientManager;
this._patientRegisterManager = patientRegisterManager;
this._registerAsbitemManager = registerAsbitemManager;
//this._customerOrgRepository = customerOrgRepository;
//this._primarykeyBuilderRepository = primarykeyBuilderRepository;
//this._sysParmValueRepository = sysParmValueRepository;
_sumSummaryHeaderRepository = sumSummaryHeaderRepository;
_sumSummaryContentRepository = sumSummaryContentRepository;
_sumSuggestionHeaderRepository = sumSuggestionHeaderRepository;
_sumSuggestionContentRepository = sumSuggestionContentRepository;
_sumDiagnosisRepository = sumDiagnosisRepository;
_manager = manager;
_cacheService = cacheService;
_medicalPackageDetailRepository = medicalPackageDetailRepository;
_asbitemRepository = asbitemRepository;
_sumSummaryHeaderManager = sumSummaryHeaderManager;
_sumSummaryContentManager = sumSummaryContentManager;
_sumSuggestionHeaderManager = sumSuggestionHeaderManager;
_sumSuggestionContentManager = sumSuggestionContentManager;
_sysParmValueManager = sysParmValueManager;
_patientRegisterExterRepository = patientRegisterExterRepository;
_patientRegisterExterManager = patientRegisterExterManager;
_lisRequestRepository = lisRequestRepository;
_configuration = configuration;
_currentUser = currentUser;
_userItemTypeRepository = userItemTypeRepository;
_patientOccupationalDiseaseManager = patientOccupationalDiseaseManager;
_thirdInterfaceRepository = thirdInterfaceRepository;
_customerOrgRegisterRepository = customerOrgRegisterRepository;
_ocCheckTypeRepository = ocCheckTypeRepository;
_poisonRepository = poisonRepository;
_ocCheckTypeDetailRepository = ocCheckTypeDetailRepository;
_patientOccupationalDiseaseRepository = patientOccupationalDiseaseRepository;
_patientPoisonRepository = patientPoisonRepository;
_patientPoisonManager = patientPoisonManager;
_diagnosisRepository = diagnosisRepository;
_thirdBookingPushAppService = thirdBookingPushAppService;
_thirdBookingRepository = thirdBookingRepository;
_chargeRepository = chargeRepository;
_chargePayRepository = chargePayRepository;
}
/// <summary>
/// 获取通过主键
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public override async Task<PatientRegisterDto> GetAsync(Guid id)
{
return await base.GetAsync(id);
}
/// <summary>
/// 根据lis申请单号 获取人员条码号
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
[HttpPost("api/app/PatientRegister/GetPatientRegisterNoByLisRequestNo")]
public async Task<PatientRegisterSimpleDto> GetPatientRegisterNoByLisRequestNoAsync(LisRequestNoInputDto input)
{
if (input == null)
{
throw new UserFriendlyException("请求参数有误");
}
//0-每个条码打印lis_request_no(即现在使用的模式),1-每个条码打印patient_register_no
var lisRequestNoPrintMode = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "lis_request_no_print_mode");
if (string.IsNullOrWhiteSpace(lisRequestNoPrintMode))
lisRequestNoPrintMode = "0";
if (lisRequestNoPrintMode == "1")
{
return new PatientRegisterSimpleDto
{
PatientRegisterNo = input.LisRequestNo
};
}
var patientRegisterNo = (from lisRequest in await _lisRequestRepository.GetQueryableAsync()
join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on lisRequest.Id equals registerCheckAsbitem.LisRequestId
join registerCheck in await _registerCheckRepository.GetQueryableAsync() on registerCheckAsbitem.RegisterCheckId equals registerCheck.Id
join patientRegister in await Repository.GetQueryableAsync() on registerCheck.PatientRegisterId equals patientRegister.Id
where lisRequest.LisRequestNo == input.LisRequestNo
select patientRegister.PatientRegisterNo).FirstOrDefault();
if (!string.IsNullOrEmpty(patientRegisterNo))
{
return new PatientRegisterSimpleDto
{
PatientRegisterNo = patientRegisterNo
};
}
else
{
throw new UserFriendlyException("Lis申请单有误");
}
}
/// <summary>
/// 根据检查单号 获取人员条码号
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
[HttpPost("api/app/PatientRegister/GetPatientRegisterNoByCheckRequestNo")]
public async Task<PatientRegisterSimpleDto> GetPatientRegisterNoByCheckRequestNoAsync(CheckRequestNoInputDto input)
{
if (input == null)
{
throw new UserFriendlyException("请求参数有误");
}
var patientRegisterNo = (from registerCheck in await _registerCheckRepository.GetQueryableAsync()
join patientRegister in await Repository.GetQueryableAsync() on registerCheck.PatientRegisterId equals patientRegister.Id
where registerCheck.CheckRequestNo == input.CheckRequestNo
select patientRegister.PatientRegisterNo).FirstOrDefault();
if (!string.IsNullOrEmpty(patientRegisterNo))
{
return new PatientRegisterSimpleDto
{
PatientRegisterNo = patientRegisterNo
};
}
else
{
throw new UserFriendlyException("检查单有误");
}
}
/// <summary>
/// 编辑反写接口,包含档案表跟登记表的信息
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/patientregister/getinfoorpatient")]
public async Task<PatientRegisterOrNoDto> GetInfoOrPatientAsync(PatientRegisterIdInputDto input)
{
return await GetPatientRegisterOrNo(input.PatientRegisterId);
//var ent = (await _repository.GetQueryableAsync()).Include(x => x.Patient).Where(m => m.Id == input.PatientRegisterId).FirstOrDefault();
//var entdto = new PatientRegisterOrNoDto();
//if (ent != null)
//{
// //var userList = await _userRepository.GetListAsync();
// //var customerOrgList = await _customerOrgRepository.GetListAsync();
// entdto = new PatientRegisterOrNoDto
// {
// HisPatientId = ent.HisPatientId,
// Age = ent.Age,
// AuditDate = DataHelper.ConversionDateToString(ent.AuditDate),
// Id = ent.Id,
// AuditDoctorId = ent.AuditDoctorId,
// BirthDate = DataHelper.ConversionDateToString(ent.BirthDate),
// CompleteFlag = ent.CompleteFlag,
// CreationTime = ent.CreationTime,
// CreatorId = ent.CreatorId,
// CustomerOrgGroupId = ent.CustomerOrgGroupId,
// CustomerOrgId = ent.CustomerOrgId,
// CustomerOrgRegisterId = ent.CustomerOrgRegisterId,
// GuidePrintTimes = ent.GuidePrintTimes,
// InterposeMeasure = ent.InterposeMeasure,
// IsAudit = ent.IsAudit,
// IsLock = ent.IsLock,
// IsMedicalStart = ent.IsMedicalStart,
// IsNameHide = ent.IsNameHide,
// IsPhoneFollow = ent.IsPhoneFollow,
// IsRecoverGuide = ent.IsRecoverGuide,
// IsUpload = ent.IsUpload,
// IsVip = ent.IsVip,
// JobCardNo = ent.JobCardNo,
// JobPost = ent.JobPost,
// JobTitle = ent.JobTitle,
// LastModificationTime = ent.LastModificationTime,
// LastModifierId = ent.LastModifierId,
// MaritalStatusId = ent.MaritalStatusId,
// MedicalCardNo = ent.MedicalCardNo,
// MedicalConclusionId = ent.MedicalConclusionId,
// MedicalPackageId = ent.MedicalPackageId,
// MedicalStartDate = DataHelper.ConversionDateToString(ent.MedicalStartDate),
// MedicalTimes = ent.MedicalTimes,
// MedicalTypeId = ent.MedicalTypeId,
// MedicalCenterId = ent.MedicalCenterId,
// PatientId = ent.PatientId,
// PatientName = ent.PatientName,
// PatientRegisterNo = ent.PatientRegisterNo,
// PersonnelTypeId = ent.PersonnelTypeId,
// Photo = ent.Photo,
// Remark = ent.Remark,
// ReportPrintTimes = ent.ReportPrintTimes,
// Salesman = ent.Salesman,
// SexHormoneTermId = ent.SexHormoneTermId,
// SexId = ent.SexId,
// SummaryDate = DataHelper.ConversionDateToString(ent.SummaryDate),
// SummaryDoctorId = ent.SummaryDoctorId,
// ThirdInfo = ent.ThirdInfo,
// CreatorName = _cacheService.GetSurnameAsync(ent.CreatorId).Result,
// LastModifierName = _cacheService.GetSurnameAsync(ent.LastModifierId).Result,
// Address = ent.Patient.Address, //档案表信息
// BirthPlaceId = ent.Patient.BirthPlaceId,
// DisplayName = ent.Patient.DisplayName,
// Email = ent.Patient.Email,
// IdNo = ent.Patient.IdNo,
// MobileTelephone = ent.Patient.MobileTelephone,
// NationId = ent.Patient.NationId,
// PatientNo = ent.Patient.PatientNo,
// PatientPassword = ent.Patient.PatientPassword,
// PostalCode = ent.Patient.PostalCode,
// Telephone = ent.Patient.Telephone,
// CustomerOrgName = _cacheService.GetCustomerOrgNameAsync(ent.CustomerOrgId).Result,
// CustomerOrgParentId = _cacheService.GetTopCustomerOrgAsync(ent.CustomerOrgId).Result.Id
// //CustomerOrgParentName = EntityHelper.GetCustomerOrgParentNameNoSql(customerOrgList, ent.CustomerOrgId)
// };
//}
//return entdto;
}
/// <summary>
/// 获取是否总检过
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/patientregister/GetHaveSumData")]
public async Task<string> GetHaveSumData(PatientRegisterIdInputDto input)
{
var sumSummaryHeader = await _sumSummaryHeaderRepository.GetListAsync(o => o.PatientRegisterId == input.PatientRegisterId);
if (sumSummaryHeader.Any())
{
return "Y";
}
var sumSuggestionHeader = await _sumSuggestionHeaderRepository.GetListAsync(o => o.PatientRegisterId == input.PatientRegisterId);
if (sumSuggestionHeader.Any())
{
return "Y";
}
return "N";
}
/// <summary>
/// 获取列表 人员体检
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[RemoteService(false)]
public override async Task<PagedResultDto<PatientRegisterDto>> GetListAsync(PagedAndSortedResultRequestDto input)
{
return await base.GetListAsync(input);
}
///// <summary>
///// 获取档案登记列表 带联合搜索条件
///// </summary>
///// <param name="input"></param>
///// <returns></returns>
//[HttpPost("api/app/patientregister/getlistinfilter")]
//public async Task<PagedResultDto<PatientRegisterOrNoDto>> GetListInFilterAsync(GetListInSearchDto input)
//{
// //var customerOrgList = await _customerOrgRepository.GetListAsync();
// #region MyRegion
// var entlist = from patientRegister in (await _repository.GetQueryableAsync()).Include(x => x.Patient).AsQueryable()
// join patientRegisterExter in await _patientRegisterExterRepository.GetQueryableAsync()
// on patientRegister.Id equals patientRegisterExter.PatientRegisterId into patientRegisterExterTemp
// from patientRegisterExterHaveEmpty in patientRegisterExterTemp.DefaultIfEmpty()
// select new
// {
// patientRegister,
// patientRegisterExterHaveEmpty
// };
// if (!string.IsNullOrEmpty(input.PatientNo))
// entlist = entlist.Where(m => m.patientRegister.Patient.PatientNo == input.PatientNo);
// if (!string.IsNullOrEmpty(input.IdNo))
// entlist = entlist.Where(m => m.patientRegister.Patient.IdNo == input.IdNo);
// if (!string.IsNullOrEmpty(input.PatientName))
// entlist = entlist.Where(m => !string.IsNullOrEmpty(m.patientRegister.PatientName) && m.patientRegister.PatientName.Contains(input.PatientName));
// if (!string.IsNullOrEmpty(input.PatientRegisterNo))
// entlist = entlist.Where(m => m.patientRegister.PatientRegisterNo == input.PatientRegisterNo);
// if (!string.IsNullOrEmpty(input.Phone))
// entlist = entlist.Where(m => m.patientRegister.Patient.MobileTelephone == input.Phone || m.patientRegister.Patient.Telephone == input.Phone);
// if (input.SexId != null && input.SexId != ForSexFlag.All)
// entlist = entlist.Where(m => m.patientRegister.SexId == input.SexId);
// if (!string.IsNullOrEmpty(input.StartDate) && !string.IsNullOrEmpty(input.EndDate))
// {
// if (input.DateType == '1')
// {
// entlist = entlist.Where(m => m.patientRegister.CreationTime >= Convert.ToDateTime(input.StartDate) &&
// m.patientRegister.CreationTime < Convert.ToDateTime(input.EndDate).AddDays(1));
// }
// else if (input.DateType == '2')
// {
// entlist = entlist.Where(m => m.patientRegister.MedicalStartDate >= Convert.ToDateTime(input.StartDate) &&
// m.patientRegister.MedicalStartDate < Convert.ToDateTime(input.EndDate).AddDays(1));
// }
// else
// {
// entlist = entlist.Where(m => (m.patientRegister.CreationTime >= Convert.ToDateTime(input.StartDate) &&
// m.patientRegister.CreationTime < Convert.ToDateTime(input.EndDate).AddDays(1))
// || (m.patientRegister.MedicalStartDate >= Convert.ToDateTime(input.StartDate) &&
// m.patientRegister.MedicalStartDate < Convert.ToDateTime(input.EndDate).AddDays(1))
// );
// }
// }
// if (input.CompleteFlags.Any())
// {
// entlist = entlist.Where(m => input.CompleteFlags.Contains(m.patientRegister.CompleteFlag));
// }
// if (input.MedicalTypeIds.Any())
// {
// entlist = entlist.Where(m => input.MedicalTypeIds.Contains(m.patientRegister.MedicalTypeId));
// }
// if (input.CustomerOrgId != null)
// {
// var CustomerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(input.CustomerOrgId.Value);
// entlist = entlist.Where(m => CustomerOrgIds.Contains(m.patientRegister.CustomerOrgId));
// }
// if (input.CustomerOrgRegisterId != null && input.CustomerOrgRegisterId != Guid.Empty)
// {
// entlist = entlist.Where(m => m.patientRegister.CustomerOrgRegisterId == input.CustomerOrgRegisterId);
// }
// if (input.CustomerOrgGroupIds.Any())
// {
// entlist = entlist.Where(m => m.patientRegister.CustomerOrgGroupId != null && input.CustomerOrgGroupIds.Contains(m.patientRegister.CustomerOrgGroupId.Value));
// }
// #endregion
// int totalCount = entlist.Count();
// entlist = entlist.OrderByDescending(o => o.patientRegister.CompleteFlag).ThenBy(o => o.patientRegister.Id).Skip(input.SkipCount * input.MaxResultCount).Take(input.MaxResultCount);
// var ggg = entlist.Select(s => s.patientRegister.CustomerOrgId).ToList();
// var entdto = entlist.Select(s => new PatientRegisterOrNoDto
// {
// CreationTime = s.patientRegister.CreationTime,
// CreatorId = s.patientRegister.CreatorId,
// Id = s.patientRegister.Id,
// LastModificationTime = s.patientRegister.LastModificationTime,
// LastModifierId = s.patientRegister.LastModifierId,
// ThirdInfo = s.patientRegister.ThirdInfo,
// SummaryDoctorId = s.patientRegister.SummaryDoctorId,
// SummaryDate = DataHelper.ConversionDateToString(s.patientRegister.SummaryDate),
// SexId = s.patientRegister.SexId,
// Age = s.patientRegister.Age,
// AuditDate = DataHelper.ConversionDateToString(s.patientRegister.AuditDate),
// AuditDoctorId = s.patientRegister.AuditDoctorId,
// BirthDate = DataHelper.ConversionDateToString(s.patientRegister.BirthDate),
// CompleteFlag = s.patientRegister.CompleteFlag,
// CustomerOrgGroupId = s.patientRegister.CustomerOrgGroupId,
// CustomerOrgId = s.patientRegister.CustomerOrgId,
// CustomerOrgRegisterId = s.patientRegister.CustomerOrgRegisterId,
// GuidePrintTimes = s.patientRegister.GuidePrintTimes,
// InterposeMeasure = s.patientRegister.InterposeMeasure,
// IsAudit = s.patientRegister.IsAudit,
// IsLock = s.patientRegister.IsLock,
// IsMedicalStart = s.patientRegister.IsMedicalStart,
// IsNameHide = s.patientRegister.IsNameHide,
// IsPhoneFollow = s.patientRegister.IsPhoneFollow,
// IsRecoverGuide = s.patientRegister.IsRecoverGuide,
// IsUpload = s.patientRegister.IsUpload,
// IsVip = s.patientRegister.IsVip,
// JobCardNo = s.patientRegister.JobCardNo,
// JobPost = s.patientRegister.JobPost,
// JobTitle = s.patientRegister.JobTitle,
// MaritalStatusId = s.patientRegister.MaritalStatusId,
// MedicalCardNo = s.patientRegister.MedicalCardNo,
// MedicalConclusionId = s.patientRegister.MedicalConclusionId,
// MedicalPackageId = s.patientRegister.MedicalPackageId,
// MedicalStartDate = DataHelper.ConversionDateToString(s.patientRegister.MedicalStartDate),
// MedicalTimes = s.patientRegister.MedicalTimes,
// MedicalTypeId = s.patientRegister.MedicalTypeId,
// MedicalCenterId = s.patientRegister.MedicalCenterId,
// PatientId = s.patientRegister.PatientId,
// PatientName = s.patientRegister.PatientName,
// PatientRegisterNo = s.patientRegister.PatientRegisterNo,
// PersonnelTypeId = s.patientRegister.PersonnelTypeId,
// Photo = s.patientRegister.Photo,
// Remark = s.patientRegister.Remark,
// ReportPrintTimes = s.patientRegister.ReportPrintTimes,
// Salesman = s.patientRegister.Salesman,
// SexHormoneTermId = s.patientRegister.SexHormoneTermId,
// CreatorName = _cacheService.GetSurnameAsync(s.patientRegister.CreatorId).GetAwaiter().GetResult(),
// LastModifierName = _cacheService.GetSurnameAsync(s.patientRegister.LastModifierId).GetAwaiter().GetResult(),
// Address = s.patientRegister.Patient.Address, //档案表信息
// BirthPlaceId = s.patientRegister.Patient.BirthPlaceId,
// DisplayName = s.patientRegister.Patient.DisplayName,
// Email = s.patientRegister.Patient.Email,
// IdNo = s.patientRegister.Patient.IdNo,
// MobileTelephone = s.patientRegister.Patient.MobileTelephone,
// NationId = s.patientRegister.Patient.NationId,
// PatientNo = s.patientRegister.Patient.PatientNo,
// PatientPassword = s.patientRegister.Patient.PatientPassword,
// PostalCode = s.patientRegister.Patient.PostalCode,
// Telephone = s.patientRegister.Patient.Telephone,
// Planuserid = s.patientRegisterExterHaveEmpty != null ? s.patientRegisterExterHaveEmpty.Planuserid : "",
// QztlIsCw = s.patientRegisterExterHaveEmpty != null ? s.patientRegisterExterHaveEmpty.QztlIsCw : null,
// QztlIsCy = s.patientRegisterExterHaveEmpty != null ? s.patientRegisterExterHaveEmpty.QztlIsCy : null,
// QztlIsFj = s.patientRegisterExterHaveEmpty != null ? s.patientRegisterExterHaveEmpty.QztlIsFj : null,
// QztlIsGt = s.patientRegisterExterHaveEmpty != null ? s.patientRegisterExterHaveEmpty.QztlIsGt : null,
// QztlIsMain = s.patientRegisterExterHaveEmpty != null ? s.patientRegisterExterHaveEmpty.QztlIsMain : null,
// QztlIsWh = s.patientRegisterExterHaveEmpty != null ? s.patientRegisterExterHaveEmpty.QztlIsWh : null,
// QztlType = s.patientRegisterExterHaveEmpty != null ? s.patientRegisterExterHaveEmpty.QztlType : null,
// IsQztlImport = s.patientRegisterExterHaveEmpty != null ? s.patientRegisterExterHaveEmpty.IsQztlImport : null,
// Remark2 = s.patientRegisterExterHaveEmpty != null ? s.patientRegisterExterHaveEmpty.Remark2 : null,
// Remark3 = s.patientRegisterExterHaveEmpty != null ? s.patientRegisterExterHaveEmpty.Remark3 : null,
// Remark4 = s.patientRegisterExterHaveEmpty != null ? s.patientRegisterExterHaveEmpty.Remark4 : null,
// UploadQztlFlag = s.patientRegisterExterHaveEmpty != null ? s.patientRegisterExterHaveEmpty.UploadQztlFlag : null,
// //CustomerOrgName = EntityHelper.GetCustomerOrgNameNoSql(customerOrgList, s.patientRegister.CustomerOrgId),
// //CustomerOrgParentId = EntityHelper.GetParentNoSql(customerOrgList, s.patientRegister.CustomerOrgId),
// //CustomerOrgParentName = EntityHelper.GetCustomerOrgParentNameNoSql(customerOrgList, s.patientRegister.CustomerOrgId)
// CustomerOrgName = _cacheService.GetCustomerOrgNameAsync(s.patientRegister.CustomerOrgId).GetAwaiter().GetResult(),
// CustomerOrgParentId = _cacheService.GetTopCustomerOrgAsync(s.patientRegister.CustomerOrgId).GetAwaiter().GetResult().Id,
// CustomerOrgParentName = _cacheService.GetTopCustomerOrgNameAsync(s.patientRegister.CustomerOrgId).GetAwaiter().GetResult()
// }).ToList();
// return new PagedResultDto<PatientRegisterOrNoDto>(totalCount, entdto);
//}
/// <summary>
/// 获取档案登记列表 带联合搜索条件
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/PatientRegister/GetListInFilter")]
public async Task<PagedResultDto<PatientRegisterOrNoDto>> GetListInFilterAsync(GetListInSearchDto input)
{
string patientRegisterQueryName = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "patient_register_query_name");
#region MyRegion
var entlist = from patientRegister in await _repository.GetQueryableAsync()
join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id
join patientRegisterExter in await _patientRegisterExterRepository.GetQueryableAsync()
on patientRegister.Id equals patientRegisterExter.PatientRegisterId into patientRegisterExterTemp
from patientRegisterExterHaveEmpty in patientRegisterExterTemp.DefaultIfEmpty()
select new
{
patientRegister,
patient,
patientRegisterExterHaveEmpty
};
if (!string.IsNullOrEmpty(input.PatientNo))
entlist = entlist.Where(m => m.patient.PatientNo == input.PatientNo);
if (!string.IsNullOrEmpty(input.IdNo))
entlist = entlist.Where(m => m.patient.IdNo == input.IdNo);
if (!string.IsNullOrEmpty(input.PatientName))
{
if (patientRegisterQueryName == "Y")
{
entlist = entlist.Where(m => m.patientRegister.PatientName == input.PatientName);
}
else
{
entlist = entlist.Where(m => !string.IsNullOrWhiteSpace(input.PatientName) && m.patientRegister.PatientName.Contains(input.PatientName));
}
}
//if (!string.IsNullOrEmpty(input.PatientName))
// entlist = entlist.Where(m => !string.IsNullOrEmpty(m.patientRegister.PatientName) && m.patientRegister.PatientName.Contains(input.PatientName));
if (!string.IsNullOrEmpty(input.PatientRegisterNo))
entlist = entlist.Where(m => m.patientRegister.PatientRegisterNo == input.PatientRegisterNo);
if (!string.IsNullOrEmpty(input.Phone))
entlist = entlist.Where(m => m.patient.MobileTelephone == input.Phone || m.patient.Telephone == input.Phone);
if (input.SexId != null)
entlist = entlist.Where(m => m.patientRegister.SexId == input.SexId);
if (!string.IsNullOrEmpty(input.StartDate) && !string.IsNullOrEmpty(input.EndDate))
{
if (input.DateType == '1')
{
entlist = entlist.Where(m => m.patientRegister.CreationTime >= Convert.ToDateTime(input.StartDate) &&
m.patientRegister.CreationTime < Convert.ToDateTime(input.EndDate).AddDays(1));
}
else if (input.DateType == '2')
{
entlist = entlist.Where(m => m.patientRegister.MedicalStartDate >= Convert.ToDateTime(input.StartDate) &&
m.patientRegister.MedicalStartDate < Convert.ToDateTime(input.EndDate).AddDays(1));
}
else
{
entlist = entlist.Where(m => (m.patientRegister.CreationTime >= Convert.ToDateTime(input.StartDate) &&
m.patientRegister.CreationTime < Convert.ToDateTime(input.EndDate).AddDays(1))
|| (m.patientRegister.MedicalStartDate >= Convert.ToDateTime(input.StartDate) &&
m.patientRegister.MedicalStartDate < Convert.ToDateTime(input.EndDate).AddDays(1))
);
}
}
if (input.CompleteFlags.Any())
{
entlist = entlist.Where(m => input.CompleteFlags.Contains(m.patientRegister.CompleteFlag));
}
if (input.MedicalTypeIds.Any())
{
entlist = entlist.Where(m => m.patientRegister.MedicalTypeId != null && input.MedicalTypeIds.Contains(m.patientRegister.MedicalTypeId.Value));
}
if (input.PersonnelTypeIds.Any())
{
entlist = entlist.Where(m => m.patientRegister.PersonnelTypeId != null && input.PersonnelTypeIds.Contains(m.patientRegister.PersonnelTypeId.Value));
}
if (input.IsRecoverGuide != null)
entlist = entlist.Where(m => m.patientRegister.IsRecoverGuide == input.IsRecoverGuide);
if (input.CustomerOrgId != null)
{
var CustomerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(input.CustomerOrgId.Value);
entlist = entlist.Where(m => CustomerOrgIds.Contains(m.patientRegister.CustomerOrgId));
}
if (input.CustomerOrgRegisterId != null && input.CustomerOrgRegisterId != Guid.Empty)
{
entlist = entlist.Where(m => m.patientRegister.CustomerOrgRegisterId == input.CustomerOrgRegisterId);
}
if (input.CustomerOrgGroupIds.Any())
{
entlist = entlist.Where(m => m.patientRegister.CustomerOrgGroupId != null && input.CustomerOrgGroupIds.Contains(m.patientRegister.CustomerOrgGroupId.Value));
}
#endregion
int totalCount = entlist.Count();
entlist = entlist.OrderByDescending(o => o.patientRegister.CompleteFlag).ThenBy(o => o.patientRegister.Id).Skip(input.SkipCount * input.MaxResultCount).Take(input.MaxResultCount);
var entdto = entlist.ToList().Select(s => new PatientRegisterOrNoDto
{
CreationTime = s.patientRegister.CreationTime,
CreatorId = s.patientRegister.CreatorId,
Id = s.patientRegister.Id,
LastModificationTime = s.patientRegister.LastModificationTime,
LastModifierId = s.patientRegister.LastModifierId,
ThirdInfo = s.patientRegister.ThirdInfo,
SummaryDoctorId = s.patientRegister.SummaryDoctorId,
SummaryDate = DataHelper.ConversionDateToString(s.patientRegister.SummaryDate),
SexId = s.patientRegister.SexId,
Age = s.patientRegister.Age,
AuditDate = DataHelper.ConversionDateToString(s.patientRegister.AuditDate),
AuditDoctorId = s.patientRegister.AuditDoctorId,
BirthDate = DataHelper.ConversionDateToString(s.patientRegister.BirthDate),
CompleteFlag = s.patientRegister.CompleteFlag,
CustomerOrgGroupId = s.patientRegister.CustomerOrgGroupId,
CustomerOrgId = s.patientRegister.CustomerOrgId,
CustomerOrgRegisterId = s.patientRegister.CustomerOrgRegisterId,
GuidePrintTimes = s.patientRegister.GuidePrintTimes,
InterposeMeasure = s.patientRegister.InterposeMeasure,
IsAudit = s.patientRegister.IsAudit,
IsLock = s.patientRegister.IsLock,
IsMedicalStart = s.patientRegister.IsMedicalStart,
IsNameHide = s.patientRegister.IsNameHide,
IsPhoneFollow = s.patientRegister.IsPhoneFollow,
IsRecoverGuide = s.patientRegister.IsRecoverGuide,
IsUpload = s.patientRegister.IsUpload,
IsVip = s.patientRegister.IsVip,
JobCardNo = s.patientRegister.JobCardNo,
JobPost = s.patientRegister.JobPost,
JobTitle = s.patientRegister.JobTitle,
MaritalStatusId = s.patientRegister.MaritalStatusId,
MedicalCardNo = s.patientRegister.MedicalCardNo,
MedicalConclusionId = s.patientRegister.MedicalConclusionId,
MedicalPackageId = s.patientRegister.MedicalPackageId,
MedicalStartDate = DataHelper.ConversionDateToString(s.patientRegister.MedicalStartDate),
MedicalTimes = s.patientRegister.MedicalTimes,
MedicalTypeId = s.patientRegister.MedicalTypeId,
MedicalCenterId = s.patientRegister.MedicalCenterId,
PatientId = s.patientRegister.PatientId,
PatientName = s.patientRegister.PatientName,
PatientRegisterNo = s.patientRegister.PatientRegisterNo,
PersonnelTypeId = s.patientRegister.PersonnelTypeId,
Photo = s.patientRegister.Photo,
Remark = s.patientRegister.Remark,
ReportPrintTimes = s.patientRegister.ReportPrintTimes,
Salesman = s.patientRegister.Salesman,
SexHormoneTermId = s.patientRegister.SexHormoneTermId,
CreatorName = _cacheService.GetSurnameAsync(s.patientRegister.CreatorId).GetAwaiter().GetResult(),
LastModifierName = _cacheService.GetSurnameAsync(s.patientRegister.LastModifierId).GetAwaiter().GetResult(),
Address = s.patientRegister.Patient.Address, //档案表信息
BirthPlaceId = s.patientRegister.Patient.BirthPlaceId,
DisplayName = s.patientRegister.Patient.DisplayName,
Email = s.patientRegister.Patient.Email,
IdNo = s.patientRegister.Patient.IdNo,
MobileTelephone = s.patientRegister.Patient.MobileTelephone,
NationId = s.patientRegister.Patient.NationId,
PatientNo = s.patientRegister.Patient.PatientNo,
PatientPassword = s.patientRegister.Patient.PatientPassword,
PostalCode = s.patientRegister.Patient.PostalCode,
Telephone = s.patientRegister.Patient.Telephone,
Planuserid = s.patientRegisterExterHaveEmpty != null ? s.patientRegisterExterHaveEmpty.Planuserid : "",
QztlIsCw = s.patientRegisterExterHaveEmpty != null ? s.patientRegisterExterHaveEmpty.QztlIsCw : null,
QztlIsCy = s.patientRegisterExterHaveEmpty != null ? s.patientRegisterExterHaveEmpty.QztlIsCy : null,
QztlIsFj = s.patientRegisterExterHaveEmpty != null ? s.patientRegisterExterHaveEmpty.QztlIsFj : null,
QztlIsGt = s.patientRegisterExterHaveEmpty != null ? s.patientRegisterExterHaveEmpty.QztlIsGt : null,
QztlIsMain = s.patientRegisterExterHaveEmpty != null ? s.patientRegisterExterHaveEmpty.QztlIsMain : null,
QztlIsWh = s.patientRegisterExterHaveEmpty != null ? s.patientRegisterExterHaveEmpty.QztlIsWh : null,
QztlType = s.patientRegisterExterHaveEmpty != null ? s.patientRegisterExterHaveEmpty.QztlType : null,
IsQztlImport = s.patientRegisterExterHaveEmpty != null ? s.patientRegisterExterHaveEmpty.IsQztlImport : null,
Remark2 = s.patientRegisterExterHaveEmpty != null ? s.patientRegisterExterHaveEmpty.Remark2 : null,
Remark3 = s.patientRegisterExterHaveEmpty != null ? s.patientRegisterExterHaveEmpty.Remark3 : null,
Remark4 = s.patientRegisterExterHaveEmpty != null ? s.patientRegisterExterHaveEmpty.Remark4 : null,
UploadQztlFlag = s.patientRegisterExterHaveEmpty != null ? s.patientRegisterExterHaveEmpty.UploadQztlFlag : null,
//CustomerOrgName = EntityHelper.GetCustomerOrgNameNoSql(customerOrgList, s.patientRegister.CustomerOrgId),
//CustomerOrgParentId = EntityHelper.GetParentNoSql(customerOrgList, s.patientRegister.CustomerOrgId),
//CustomerOrgParentName = EntityHelper.GetCustomerOrgParentNameNoSql(customerOrgList, s.patientRegister.CustomerOrgId)
CustomerOrgName = _cacheService.GetCustomerOrgNameAsync(s.patientRegister.CustomerOrgId).GetAwaiter().GetResult(),
CustomerOrgParentId = _cacheService.GetTopCustomerOrgAsync(s.patientRegister.CustomerOrgId).GetAwaiter().GetResult().Id,
CustomerOrgParentName = _cacheService.GetTopCustomerOrgNameAsync(s.patientRegister.CustomerOrgId).GetAwaiter().GetResult(),
MedicalPackageName = s.patientRegister.MedicalPackageId == null ? "" : _cacheService.GetMedicalPackageAsync(s.patientRegister.MedicalPackageId.Value).GetAwaiter().GetResult().DisplayName,
CustomerOrgGroupName = s.patientRegister.CustomerOrgGroupId == null ? "" : _cacheService.GetCustomerOrgGroupAsync(s.patientRegister.CustomerOrgGroupId.Value).GetAwaiter().GetResult().DisplayName,
NationName = _cacheService.GetNationNameAsync(s.patient.NationId).GetAwaiter().GetResult(),
PersonnelTypeName = _cacheService.GetPersonnelTypeNameAsync(s.patientRegister.PersonnelTypeId).GetAwaiter().GetResult(),
MaritalStatusName = _cacheService.GetMaritalStatusNameAsync(s.patientRegister.MaritalStatusId).GetAwaiter().GetResult(),
MedicalTypeName = _cacheService.GetMedicalTypeNameAsync(s.patientRegister.MedicalTypeId).GetAwaiter().GetResult(),
SexName = _cacheService.GetSexNameAsync(s.patientRegister.SexId).GetAwaiter().GetResult()
// SummaryHistoricalReview = s.patientRegister.SummaryHistoricalReview
}).ToList();
return new PagedResultDto<PatientRegisterOrNoDto>(totalCount, entdto);
}
/// <summary>
/// 人员登记列表 带收费信息
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/PatientRegister/GetPatientRegisterWithCharge")]
public async Task<PagedResultDto<GetPatientRegisterWithChargeDto>> GetPatientRegisterWithChargeAsync(GetListInSearchDto input)
{
string patientRegisterQueryName = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "patient_register_query_name");
#region MyRegion
var query = from patientRegister in await _repository.GetQueryableAsync()
join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id
select new
{
patientRegister,
patient
};
if (!string.IsNullOrEmpty(input.PatientNo))
query = query.Where(m => m.patient.PatientNo == input.PatientNo);
if (!string.IsNullOrEmpty(input.IdNo))
query = query.Where(m => m.patient.IdNo == input.IdNo);
//if (!string.IsNullOrEmpty(input.PatientName))
// query = query.Where(m => !string.IsNullOrEmpty(m.patientRegister.PatientName) && m.patientRegister.PatientName.Contains(input.PatientName));
if (!string.IsNullOrEmpty(input.PatientName))
{
if (patientRegisterQueryName == "Y")
{
query = query.Where(m => m.patientRegister.PatientName == input.PatientName);
}
else
{
query = query.Where(m => !string.IsNullOrWhiteSpace(input.PatientName) && m.patientRegister.PatientName.Contains(input.PatientName));
}
}
if (!string.IsNullOrEmpty(input.PatientRegisterNo))
query = query.Where(m => m.patientRegister.PatientRegisterNo == input.PatientRegisterNo);
if (!string.IsNullOrEmpty(input.Phone))
query = query.Where(m => m.patient.MobileTelephone == input.Phone || m.patient.Telephone == input.Phone);
if (input.SexId != null)
query = query.Where(m => m.patientRegister.SexId == input.SexId);
if (!string.IsNullOrEmpty(input.StartDate) && !string.IsNullOrEmpty(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 >= Convert.ToDateTime(input.StartDate) &&
m.patientRegister.MedicalStartDate < Convert.ToDateTime(input.EndDate).AddDays(1));
}
else
{
query = query.Where(m => (m.patientRegister.CreationTime >= Convert.ToDateTime(input.StartDate) &&
m.patientRegister.CreationTime < Convert.ToDateTime(input.EndDate).AddDays(1))
|| (m.patientRegister.MedicalStartDate >= Convert.ToDateTime(input.StartDate) &&
m.patientRegister.MedicalStartDate < Convert.ToDateTime(input.EndDate).AddDays(1))
);
}
}
if (input.CompleteFlags.Any())
{
query = query.Where(m => input.CompleteFlags.Contains(m.patientRegister.CompleteFlag));
}
if (input.MedicalTypeIds.Any())
{
query = query.Where(m => m.patientRegister.MedicalTypeId != null && input.MedicalTypeIds.Contains(m.patientRegister.MedicalTypeId.Value));
}
if (input.PersonnelTypeIds.Any())
{
query = query.Where(m => m.patientRegister.PersonnelTypeId != null && input.PersonnelTypeIds.Contains(m.patientRegister.PersonnelTypeId.Value));
}
if (input.IsRecoverGuide != null)
query = query.Where(m => m.patientRegister.IsRecoverGuide == input.IsRecoverGuide);
if (input.CustomerOrgId != null)
{
var CustomerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(input.CustomerOrgId.Value);
query = query.Where(m => CustomerOrgIds.Contains(m.patientRegister.CustomerOrgId));
}
if (input.CustomerOrgRegisterId != null && input.CustomerOrgRegisterId != Guid.Empty)
{
query = query.Where(m => m.patientRegister.CustomerOrgRegisterId == input.CustomerOrgRegisterId);
}
if (input.CustomerOrgGroupIds.Any())
{
query = query.Where(m => m.patientRegister.CustomerOrgGroupId != null && input.CustomerOrgGroupIds.Contains(m.patientRegister.CustomerOrgGroupId.Value));
}
#endregion
int totalCount = query.Count(); //总数
//分页后的id集合
var patientRegisterIds = query
.OrderByDescending(g => g.patientRegister.CompleteFlag)
.ThenBy(g => g.patientRegister.Id)
.Skip(input.SkipCount * input.MaxResultCount)
.Take(input.MaxResultCount)
.Select(s => s.patientRegister.Id)
.ToList();
var entlist = from patientRegister in await _repository.GetQueryableAsync()
join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id
join patientRegisterExter in await _patientRegisterExterRepository.GetQueryableAsync()
on patientRegister.Id equals patientRegisterExter.PatientRegisterId into patientRegisterExterTemp
from patientRegisterExterHaveEmpty in patientRegisterExterTemp.DefaultIfEmpty()
join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId into registerCheckTemp
from registerCheckHaveEmpty in registerCheckTemp.DefaultIfEmpty()
join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheckHaveEmpty.Id equals registerCheckAsbitem.RegisterCheckId into registerCheckAsbitemTemp
from registerCheckAsbitemHaveEmpty in registerCheckAsbitemTemp.DefaultIfEmpty()
join charge in await _chargeRepository.GetQueryableAsync() on patientRegister.Id equals charge.PatientRegisterId into chargeTemp
from chargeHaveEmpty in chargeTemp.DefaultIfEmpty()
join chargePay in await _chargePayRepository.GetQueryableAsync() on chargeHaveEmpty.Id equals chargePay.ChargeId into chargePayTemp
from chargePayHaveEmpty in chargePayTemp.DefaultIfEmpty()
join payMode in await _payModeRepository.GetQueryableAsync() on chargePayHaveEmpty.PayModeId equals payMode.Id into payModeTemp
from payModePayHaveEmpty in payModeTemp.DefaultIfEmpty()
where patientRegisterIds.Contains(patientRegister.Id)
select new
{
patientRegister,
patient,
patientRegisterExterHaveEmpty,
registerCheckAsbitemHaveEmpty = registerCheckAsbitemHaveEmpty != null ? new
{
registerCheckAsbitemHaveEmpty.Id,
registerCheckAsbitemHaveEmpty.StandardPrice,
registerCheckAsbitemHaveEmpty.Amount,
registerCheckAsbitemHaveEmpty.ChargePrice,
registerCheckAsbitemHaveEmpty.IsCharge,
registerCheckAsbitemHaveEmpty.PayTypeFlag
} : null,
payModePayHaveEmpty = payModePayHaveEmpty != null ? new
{
payModePayHaveEmpty.DisplayName
} : null
};
var queryGroup = entlist.ToList().GroupBy(g => g.patientRegister);
List<GetPatientRegisterWithChargeDto> entListDto = new List<GetPatientRegisterWithChargeDto>();
foreach (var group in queryGroup)
{
var entDto = new GetPatientRegisterWithChargeDto
{
CreationTime = group.Key.CreationTime,
CreatorId = group.Key.CreatorId,
Id = group.Key.Id,
LastModificationTime = group.Key.LastModificationTime,
LastModifierId = group.Key.LastModifierId,
ThirdInfo = group.Key.ThirdInfo,
SummaryDoctorId = group.Key.SummaryDoctorId,
SummaryDate = DataHelper.ConversionDateToString(group.Key.SummaryDate),
SexId = group.Key.SexId,
Age = group.Key.Age,
AuditDate = DataHelper.ConversionDateToString(group.Key.AuditDate),
AuditDoctorId = group.Key.AuditDoctorId,
BirthDate = DataHelper.ConversionDateToString(group.Key.BirthDate),
CompleteFlag = group.Key.CompleteFlag,
CustomerOrgGroupId = group.Key.CustomerOrgGroupId,
CustomerOrgId = group.Key.CustomerOrgId,
CustomerOrgRegisterId = group.Key.CustomerOrgRegisterId,
GuidePrintTimes = group.Key.GuidePrintTimes,
InterposeMeasure = group.Key.InterposeMeasure,
IsAudit = group.Key.IsAudit,
IsLock = group.Key.IsLock,
IsMedicalStart = group.Key.IsMedicalStart,
IsNameHide = group.Key.IsNameHide,
IsPhoneFollow = group.Key.IsPhoneFollow,
IsRecoverGuide = group.Key.IsRecoverGuide,
IsUpload = group.Key.IsUpload,
IsVip = group.Key.IsVip,
JobCardNo = group.Key.JobCardNo,
JobPost = group.Key.JobPost,
JobTitle = group.Key.JobTitle,
MaritalStatusId = group.Key.MaritalStatusId,
MedicalCardNo = group.Key.MedicalCardNo,
MedicalConclusionId = group.Key.MedicalConclusionId,
MedicalPackageId = group.Key.MedicalPackageId,
MedicalStartDate = DataHelper.ConversionDateToString(group.Key.MedicalStartDate),
MedicalTimes = group.Key.MedicalTimes,
MedicalTypeId = group.Key.MedicalTypeId,
MedicalCenterId = group.Key.MedicalCenterId,
PatientId = group.Key.PatientId,
PatientName = group.Key.PatientName,
PatientRegisterNo = group.Key.PatientRegisterNo,
PersonnelTypeId = group.Key.PersonnelTypeId,
Photo = group.Key.Photo,
Remark = group.Key.Remark,
ReportPrintTimes = group.Key.ReportPrintTimes,
Salesman = group.Key.Salesman,
SexHormoneTermId = group.Key.SexHormoneTermId,
CreatorName = _cacheService.GetSurnameAsync(group.Key.CreatorId).GetAwaiter().GetResult(),
LastModifierName = _cacheService.GetSurnameAsync(group.Key.LastModifierId).GetAwaiter().GetResult(),
Address = group.First().patient.Address, //档案表信息
BirthPlaceId = group.First().patient.BirthPlaceId,
DisplayName = group.First().patient.DisplayName,
Email = group.First().patient.Email,
IdNo = group.First().patient.IdNo,
MobileTelephone = group.First().patient.MobileTelephone,
NationId = group.First().patient.NationId,
PatientNo = group.First().patient.PatientNo,
PatientPassword = group.First().patient.PatientPassword,
PostalCode = group.First().patient.PostalCode,
Telephone = group.First().patient.Telephone,
Planuserid = group.FirstOrDefault().patientRegisterExterHaveEmpty != null ? group.FirstOrDefault().patientRegisterExterHaveEmpty.Planuserid : "",
QztlIsCw = group.FirstOrDefault().patientRegisterExterHaveEmpty != null ? group.FirstOrDefault().patientRegisterExterHaveEmpty.QztlIsCw : null,
QztlIsCy = group.FirstOrDefault().patientRegisterExterHaveEmpty != null ? group.FirstOrDefault().patientRegisterExterHaveEmpty.QztlIsCy : null,
QztlIsFj = group.FirstOrDefault().patientRegisterExterHaveEmpty != null ? group.FirstOrDefault().patientRegisterExterHaveEmpty.QztlIsFj : null,
QztlIsGt = group.FirstOrDefault().patientRegisterExterHaveEmpty != null ? group.FirstOrDefault().patientRegisterExterHaveEmpty.QztlIsGt : null,
QztlIsMain = group.FirstOrDefault().patientRegisterExterHaveEmpty != null ? group.FirstOrDefault().patientRegisterExterHaveEmpty.QztlIsMain : null,
QztlIsWh = group.FirstOrDefault().patientRegisterExterHaveEmpty != null ? group.FirstOrDefault().patientRegisterExterHaveEmpty.QztlIsWh : null,
QztlType = group.FirstOrDefault().patientRegisterExterHaveEmpty != null ? group.FirstOrDefault().patientRegisterExterHaveEmpty.QztlType : null,
IsQztlImport = group.FirstOrDefault().patientRegisterExterHaveEmpty != null ? group.FirstOrDefault().patientRegisterExterHaveEmpty.IsQztlImport : null,
Remark2 = group.FirstOrDefault().patientRegisterExterHaveEmpty != null ? group.FirstOrDefault().patientRegisterExterHaveEmpty.Remark2 : null,
Remark3 = group.FirstOrDefault().patientRegisterExterHaveEmpty != null ? group.FirstOrDefault().patientRegisterExterHaveEmpty.Remark3 : null,
Remark4 = group.FirstOrDefault().patientRegisterExterHaveEmpty != null ? group.FirstOrDefault().patientRegisterExterHaveEmpty.Remark4 : null,
UploadQztlFlag = group.FirstOrDefault().patientRegisterExterHaveEmpty != null ? group.FirstOrDefault().patientRegisterExterHaveEmpty.UploadQztlFlag : null,
CustomerOrgName = _cacheService.GetCustomerOrgNameAsync(group.Key.CustomerOrgId).GetAwaiter().GetResult(),
CustomerOrgParentId = _cacheService.GetTopCustomerOrgAsync(group.Key.CustomerOrgId).GetAwaiter().GetResult().Id,
CustomerOrgParentName = _cacheService.GetTopCustomerOrgNameAsync(group.Key.CustomerOrgId).GetAwaiter().GetResult(),
MedicalPackageName = group.Key.MedicalPackageId == null ? "" : _cacheService.GetMedicalPackageAsync(group.Key.MedicalPackageId.Value).GetAwaiter().GetResult().DisplayName,
CustomerOrgGroupName = group.Key.CustomerOrgGroupId == null ? "" : _cacheService.GetCustomerOrgGroupAsync(group.Key.CustomerOrgGroupId.Value).GetAwaiter().GetResult().DisplayName,
NationName = _cacheService.GetNationNameAsync(group.FirstOrDefault().patient.NationId).GetAwaiter().GetResult(),
PersonnelTypeName = _cacheService.GetPersonnelTypeNameAsync(group.Key.PersonnelTypeId).GetAwaiter().GetResult(),
MaritalStatusName = _cacheService.GetMaritalStatusNameAsync(group.Key.MaritalStatusId).GetAwaiter().GetResult(),
MedicalTypeName = _cacheService.GetMedicalTypeNameAsync(group.Key.MedicalTypeId).GetAwaiter().GetResult(),
SexName = _cacheService.GetSexNameAsync(group.Key.SexId).GetAwaiter().GetResult()
};
entDto.StandardAmount = 0;
entDto.ReceivableAmount = 0;
entDto.ChargeAmount = 0;
entDto.ChargePayMode = "";
if (group.Count(m => m.registerCheckAsbitemHaveEmpty != null) > 0)
{
entDto.StandardAmount = group.Where(m => m.registerCheckAsbitemHaveEmpty != null).GroupBy(g => g.registerCheckAsbitemHaveEmpty).Sum(s => s.Key.StandardPrice * s.Key.Amount);
entDto.ReceivableAmount = group.Where(m => m.registerCheckAsbitemHaveEmpty != null && m.registerCheckAsbitemHaveEmpty.PayTypeFlag != RegisterCheckAsbitemPayTypeFlag.Free).GroupBy(g => g.registerCheckAsbitemHaveEmpty).Sum(s => s.Key.ChargePrice * s.Key.Amount);
entDto.ChargeAmount = group.Where(m => m.registerCheckAsbitemHaveEmpty != null && m.registerCheckAsbitemHaveEmpty.IsCharge == 'Y').GroupBy(g => g.registerCheckAsbitemHaveEmpty).Sum(s => s.Key.ChargePrice * s.Key.Amount);
}
if (group.Count(m => m.payModePayHaveEmpty != null) > 0)
{
entDto.ChargePayMode = string.Join(",", group.Where(m => m.payModePayHaveEmpty != null).GroupBy(g => g.payModePayHaveEmpty).Select(s => s.Key.DisplayName));
}
entListDto.Add(entDto);
}
return new PagedResultDto<GetPatientRegisterWithChargeDto>(totalCount, entListDto);
}
/// <summary>
/// 获取档案登记信息 根据档案号或者条码号(档案号条件返回最新的一条)
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/patientregister/getpatientregisterorpatient")]
public async Task<PatientRegisterOrNoDto> GetPatientRegisterOrPatientAsync(GetPatientRegisterOrPatientDto input)
{
var entdto = new PatientRegisterOrNoDto();
#region MyRegion
var entlist = (await _repository.GetDbSetAsync()).Include(x => x.Patient).AsQueryable();
if (input.SType == 1)
entlist = entlist.Where(m => m.PatientRegisterNo == input.PatientRegisterNo);
else
entlist = entlist.Where(m => m.Patient.PatientNo == input.PatientNo).OrderByDescending(o => o.MedicalTimes);
if (input.IsFilterPreRegistration != null && input.IsFilterPreRegistration == 'Y')
{
//直接过滤
entlist = entlist.Where(m => m.CompleteFlag != PatientRegisterCompleteFlag.PreRegistration);
}
var ent = entlist.FirstOrDefault();
#endregion
if (ent != null)
{
var userList = await _userRepository.GetListAsync();
var customerOrgList = await _customerOrgRepository.GetListAsync();
entdto = new PatientRegisterOrNoDto
{
CreationTime = ent.CreationTime,
CreatorId = ent.CreatorId,
Id = ent.Id,
LastModificationTime = ent.LastModificationTime,
LastModifierId = ent.LastModifierId,
ThirdInfo = ent.ThirdInfo,
SummaryDoctorId = ent.SummaryDoctorId,
SummaryDate = DataHelper.ConversionDateToString(ent.SummaryDate),
SexId = ent.SexId,
Age = ent.Age,
AuditDate = DataHelper.ConversionDateToString(ent.AuditDate),
AuditDoctorId = ent.AuditDoctorId,
BirthDate = DataHelper.ConversionDateToString(ent.BirthDate),
CompleteFlag = ent.CompleteFlag,
CustomerOrgGroupId = ent.CustomerOrgGroupId,
CustomerOrgId = ent.CustomerOrgId,
CustomerOrgRegisterId = ent.CustomerOrgRegisterId,
GuidePrintTimes = ent.GuidePrintTimes,
InterposeMeasure = ent.InterposeMeasure,
IsAudit = ent.IsAudit,
IsLock = ent.IsLock,
IsMedicalStart = ent.IsMedicalStart,
IsNameHide = ent.IsNameHide,
IsPhoneFollow = ent.IsPhoneFollow,
IsRecoverGuide = ent.IsRecoverGuide,
IsUpload = ent.IsUpload,
IsVip = ent.IsVip,
JobCardNo = ent.JobCardNo,
JobPost = ent.JobPost,
JobTitle = ent.JobTitle,
MaritalStatusId = ent.MaritalStatusId,
MedicalCardNo = ent.MedicalCardNo,
MedicalConclusionId = ent.MedicalConclusionId,
MedicalPackageId = ent.MedicalPackageId,
MedicalStartDate = DataHelper.ConversionDateToString(ent.MedicalStartDate),
MedicalTimes = ent.MedicalTimes,
MedicalTypeId = ent.MedicalTypeId,
MedicalCenterId = ent.MedicalCenterId,
PatientId = ent.PatientId,
PatientName = ent.PatientName,
PatientRegisterNo = ent.PatientRegisterNo,
PersonnelTypeId = ent.PersonnelTypeId,
Photo = ent.Photo,
Remark = ent.Remark,
ReportPrintTimes = ent.ReportPrintTimes,
Salesman = ent.Salesman,
SexHormoneTermId = ent.SexHormoneTermId,
CreatorName = EntityHelper.GetSurnameNoSql(userList, ent.CreatorId),
LastModifierName = EntityHelper.GetSurnameNoSql(userList, ent.LastModifierId),
Address = ent.Patient.Address, //档案表信息
BirthPlaceId = ent.Patient.BirthPlaceId,
DisplayName = ent.Patient.DisplayName,
Email = ent.Patient.Email,
IdNo = ent.Patient.IdNo,
MobileTelephone = ent.Patient.MobileTelephone,
NationId = ent.Patient.NationId,
PatientNo = ent.Patient.PatientNo,
PatientPassword = ent.Patient.PatientPassword,
PostalCode = ent.Patient.PostalCode,
Telephone = ent.Patient.Telephone,
CustomerOrgName = EntityHelper.GetCustomerOrgNameNoSql(customerOrgList, ent.CustomerOrgId),
CustomerOrgParentId = EntityHelper.GetParentNoSql(customerOrgList, ent.CustomerOrgId),
CustomerOrgParentName = EntityHelper.GetCustomerOrgParentNameNoSql(customerOrgList, ent.CustomerOrgId)
};
}
else
{
entdto = null;
}
return entdto;
}
/// <summary>
/// 获取档案登记信息 根据档案号或者条码号(档案号条件返回最新的一条)
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
[HttpPost("api/app/patientregister/GetAlreadyRegisterPatientRegisterByNo")]
public async Task<PatientRegisterOrNoDto> GetAlreadyRegisterPatientRegisterByNoAsync(PatientRegisterNoInputDto input)
{
var query = (await _repository.GetQueryableAsync()).Include(x => x.Patient).AsQueryable();
var patientRegisterList = new List<PatientRegister>();
PatientRegister ent = null;
if (!string.IsNullOrWhiteSpace(input.PatientRegisterNo))
{
ent = query.Where(m => m.PatientRegisterNo == input.PatientRegisterNo).FirstOrDefault();
if (ent == null)
{
throw new UserFriendlyException("未找到人员信息");
}
}
else if (!string.IsNullOrWhiteSpace(input.PatientNo))
{
patientRegisterList = query.Where(m => m.Patient.PatientNo == input.PatientNo).OrderByDescending(o => o.MedicalTimes).ToList();
if (patientRegisterList.Count == 0)
{
throw new UserFriendlyException("未找到人员信息");
}
patientRegisterList = patientRegisterList.Where(m => m.CompleteFlag != PatientRegisterCompleteFlag.PreRegistration).ToList();
if (patientRegisterList.Count == 0)
{
throw new UserFriendlyException("该人未正式登记");
}
ent = patientRegisterList.First();
}
else if (!string.IsNullOrWhiteSpace(input.IdNo))
{
patientRegisterList = query.Where(m => m.Patient.IdNo == input.IdNo).OrderByDescending(o => o.CreationTime).ToList();
if (patientRegisterList.Count == 0)
{
throw new UserFriendlyException("未找到人员信息");
}
patientRegisterList = patientRegisterList.Where(m => m.CompleteFlag != PatientRegisterCompleteFlag.PreRegistration).ToList();
if (patientRegisterList.Count == 0)
{
throw new UserFriendlyException("该人未正式登记");
}
ent = patientRegisterList.First();
}
else
{
throw new UserFriendlyException("检索条件不能为空");
}
if (ent.CompleteFlag == PatientRegisterCompleteFlag.PreRegistration)
{
throw new UserFriendlyException("该人未正式登记");
}
var entdto = new PatientRegisterOrNoDto
{
CreationTime = ent.CreationTime,
CreatorId = ent.CreatorId,
Id = ent.Id,
LastModificationTime = ent.LastModificationTime,
LastModifierId = ent.LastModifierId,
ThirdInfo = ent.ThirdInfo,
SummaryDoctorId = ent.SummaryDoctorId,
SummaryDate = DataHelper.ConversionDateToString(ent.SummaryDate),
SexId = ent.SexId,
SexName = _cacheService.GetSexNameAsync(ent.SexId).Result,
Age = ent.Age,
AuditDate = DataHelper.ConversionDateToString(ent.AuditDate),
AuditDoctorId = ent.AuditDoctorId,
BirthDate = DataHelper.ConversionDateToString(ent.BirthDate),
CompleteFlag = ent.CompleteFlag,
CustomerOrgGroupId = ent.CustomerOrgGroupId,
CustomerOrgId = ent.CustomerOrgId,
CustomerOrgRegisterId = ent.CustomerOrgRegisterId,
GuidePrintTimes = ent.GuidePrintTimes,
InterposeMeasure = ent.InterposeMeasure,
IsAudit = ent.IsAudit,
IsLock = ent.IsLock,
IsMedicalStart = ent.IsMedicalStart,
IsNameHide = ent.IsNameHide,
IsPhoneFollow = ent.IsPhoneFollow,
IsRecoverGuide = ent.IsRecoverGuide,
IsUpload = ent.IsUpload,
IsVip = ent.IsVip,
JobCardNo = ent.JobCardNo,
JobPost = ent.JobPost,
JobTitle = ent.JobTitle,
MaritalStatusId = ent.MaritalStatusId,
MaritalStatusName = _cacheService.GetMaritalStatusNameAsync(ent.MaritalStatusId).GetAwaiter().GetResult(),
MedicalCardNo = ent.MedicalCardNo,
MedicalConclusionId = ent.MedicalConclusionId,
MedicalPackageId = ent.MedicalPackageId,
MedicalStartDate = DataHelper.ConversionDateToString(ent.MedicalStartDate),
MedicalTimes = ent.MedicalTimes,
MedicalTypeId = ent.MedicalTypeId,
MedicalTypeName = _cacheService.GetMedicalTypeNameAsync(ent.MedicalTypeId).GetAwaiter().GetResult(),
MedicalCenterId = ent.MedicalCenterId,
PatientId = ent.PatientId,
PatientName = ent.PatientName,
PatientRegisterNo = ent.PatientRegisterNo,
PersonnelTypeId = ent.PersonnelTypeId,
PersonnelTypeName = _cacheService.GetPersonnelTypeNameAsync(ent.PersonnelTypeId).GetAwaiter().GetResult(),
Remark = ent.Remark,
ReportPrintTimes = ent.ReportPrintTimes,
Salesman = ent.Salesman,
SexHormoneTermId = ent.SexHormoneTermId,
Photo = ent.Photo,
CreatorName = _cacheService.GetSurnameAsync(ent.CreatorId).GetAwaiter().GetResult(),
LastModifierName = _cacheService.GetSurnameAsync(ent.LastModifierId).GetAwaiter().GetResult(),
Address = ent.Patient.Address, //档案表信息
BirthPlaceId = ent.Patient.BirthPlaceId,
DisplayName = ent.Patient.DisplayName,
Email = ent.Patient.Email,
IdNo = ent.Patient.IdNo,
MobileTelephone = ent.Patient.MobileTelephone,
NationId = ent.Patient.NationId,
NationName = _cacheService.GetNationNameAsync(ent.Patient.NationId).GetAwaiter().GetResult(),
PatientNo = ent.Patient.PatientNo,
PostalCode = ent.Patient.PostalCode,
Telephone = ent.Patient.Telephone,
CustomerOrgName = _cacheService.GetCustomerOrgNameAsync(ent.CustomerOrgId).GetAwaiter().GetResult(),
CustomerOrgParentId = _cacheService.GetTopCustomerOrgAsync(ent.CustomerOrgId).GetAwaiter().GetResult().Id,
CustomerOrgParentName = _cacheService.GetTopCustomerOrgAsync(ent.CustomerOrgId).GetAwaiter().GetResult().DisplayName,
IsPatientOccupationalDisease = _patientOccupationalDiseaseManager.GetPatientRegisterIsOccupationalDisease(ent.Id).GetAwaiter().GetResult()
// SummaryHistoricalReview = ent.SummaryHistoricalReview
};
return entdto;
}
///// <summary>
///// 创建 登记档案 弃用
///// </summary>
///// <param name="input"></param>
///// <returns></returns>
//[RemoteService(false)]
//public override async Task<PatientRegisterDto> CreateAsync(CreatePatientRegisterDto input)
//{
// var createEntity = ObjectMapper.Map<CreatePatientRegisterDto, PatientRegister>(input);
// var createPatientEntity = ObjectMapper.Map<CreatePatientRegisterDto, Patient>(input);
// var entity = await _manager.CreateAsync(createEntity, createPatientEntity);
// var dto = ObjectMapper.Map<PatientRegister, PatientRegisterDto>(entity);
// return dto;
//}
/// <summary>
/// 新版人员登记
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/PatientRegister/CreatePatientRegister")]
public async Task<PatientRegisterOrNoDto> CreatePatientRegisterAsync(CreatePatientRegisterDto input)
{
//总检时特殊处理
if (input.CompleteFlag == PatientRegisterCompleteFlag.SumCheck)
{
return await SumCheckUpdatePatientRegister(input);
}
PatientRegisterOrNoDto msg = new PatientRegisterOrNoDto();
input.RegisterCheckAsbitems.ForEach(o =>
{
if (o.Id == null)
{
o.Id = Guid.Empty;
}
});
var createPatientRegisterArg = ObjectMapper.Map<CreatePatientRegisterDto, CreatePatientRegisterArg>(input);
var createPatientRegisterExterArg = ObjectMapper.Map<CreatePatientRegisterDto, CreatePatientRegisterExterArg>(input);
var updatePatientEntity = ObjectMapper.Map<CreatePatientRegisterDto, Patient>(input);
var registerAsbitems = ObjectMapper.Map<List<CreatePatientRegisterRegisterCheckAsbitem>, List<RegisterCheckAsbitem>>(input.RegisterCheckAsbitems);
var updatePatientRegisterArg = ObjectMapper.Map<CreatePatientRegisterDto, UpdatePatientRegisterArg>(input);
var updatePatientRegisterExterArg = ObjectMapper.Map<CreatePatientRegisterDto, UpdatePatientRegisterExterArg>(input);
updatePatientEntity.DisplayName = input.PatientName;
//创建人员信息
Patient patient = null;
_patientManager.IsAllowIdNoSexError = input.IsAllowIdNoSexError;
if (createPatientRegisterArg.PatientId == Guid.Empty)
{
patient = await _patientManager.CreateAsync(updatePatientEntity);
await _patientRepository.InsertAsync(patient);
}
else
{
patient = await _patientRepository.GetAsync(createPatientRegisterArg.PatientId);
await _patientManager.UpdateAsync(updatePatientEntity, patient);
}
//创建人员登记信息
createPatientRegisterArg.PatientId = patient.Id;
if (patient.BirthDate != null)
{
createPatientRegisterArg.BirthDate = patient.BirthDate;
}
PatientRegister entity = null;
PatientRegisterExter patientRegisterExterEntity = null;
CreateRegisterCheckAsbitemEntity createRegisterCheckAsbitemEntity = null;
if (input.PatientRegisterId == null || input.PatientRegisterId == Guid.Empty)
{
entity = await _manager.CreateAsync(createPatientRegisterArg);
createRegisterCheckAsbitemEntity = await _registerAsbitemManager.UpdateManyAsync(entity, registerAsbitems);
entity = await _repository.InsertAsync(entity, true);
createPatientRegisterExterArg.PatientRegisterId = entity.Id;
#region 扩展表
patientRegisterExterEntity = _patientRegisterExterManager.CreateAsync(createPatientRegisterExterArg);
await _patientRegisterExterRepository.InsertAsync(patientRegisterExterEntity);
#endregion
}
else
{
entity = await Repository.GetAsync((Guid)input.PatientRegisterId);
char oldCompleteFlag = entity.CompleteFlag; //更新前状态
//更新patientId
updatePatientRegisterArg.PatientId = patient.Id;
await _manager.UpdateAsync(updatePatientRegisterArg, entity);
createRegisterCheckAsbitemEntity = await _registerAsbitemManager.UpdateManyAsync(entity, registerAsbitems);
#region 预登记转正式登记修改登记者ID
string goRegisterIsUpdateRegisterPerson = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "go_register_is_update_register_person");
if (goRegisterIsUpdateRegisterPerson == "1")
{
if (oldCompleteFlag == PatientRegisterCompleteFlag.PreRegistration
&& entity.CompleteFlag == PatientRegisterCompleteFlag.Registration
&& _currentUser.Id != null)
{
//判断是预登记转正式登记
entity.UpdateCreatorId(_currentUser.Id.Value);
}
}
#endregion
await _repository.UpdateAsync(entity);
#region 扩展表
patientRegisterExterEntity = await _patientRegisterExterRepository.FirstOrDefaultAsync(m => m.PatientRegisterId == entity.Id);
if (patientRegisterExterEntity != null)
{
_patientRegisterExterManager.UpdateAsync(updatePatientRegisterExterArg, patientRegisterExterEntity);
await _patientRegisterExterRepository.UpdateAsync(patientRegisterExterEntity);
}
#endregion
}
#region 推送人寿状态
if (!string.IsNullOrWhiteSpace(entity.ThirdBookingId))
{
try
{
await _thirdBookingPushAppService.PushRegisterAsync(new PatientRegisterIdInputDto { PatientRegisterId = entity.Id });
}
catch (Exception ex)
{
_logger.LogError($"推送人寿完成登记=》{ex.Message}");
}
}
#endregion
//throw new Exception("后续不更新");
if (createRegisterCheckAsbitemEntity != null)
{
await UpdateRegisterChecks(createRegisterCheckAsbitemEntity);
}
await CurrentUnitOfWork.SaveChangesAsync();
msg = await GetPatientRegisterOrNo(entity.Id);
return msg;
}
/// <summary>
/// 总检时修改人员信息
/// </summary>
/// <returns></returns>
private async Task<PatientRegisterOrNoDto> SumCheckUpdatePatientRegister(CreatePatientRegisterDto input)
{
var patientRegister = await _repository.FirstOrDefaultAsync(f => f.Id == input.PatientRegisterId);
if (patientRegister != null)
{
var updatePatientEntity = ObjectMapper.Map<CreatePatientRegisterDto, Patient>(input);
var updatePatientRegisterArg = ObjectMapper.Map<CreatePatientRegisterDto, UpdatePatientRegisterArg>(input);
//档案
updatePatientEntity.DisplayName = input.PatientName;
//创建人员信息
Patient patient = null;
_patientManager.IsAllowIdNoSexError = input.IsAllowIdNoSexError;
if (updatePatientRegisterArg.PatientId == Guid.Empty)
{
patient = await _patientManager.CreateAsync(updatePatientEntity);
await _patientRepository.InsertAsync(patient, true);
updatePatientRegisterArg.PatientId = patient.Id;
}
else
{
patient = await _patientRepository.GetAsync(updatePatientRegisterArg.PatientId);
await _patientManager.UpdateAsync(updatePatientEntity, patient);
await _patientRepository.UpdateAsync(patient, true);
}
//人员
var patientRegisterEntity = await _repository.GetAsync((Guid)input.PatientRegisterId);
await _manager.UpdateAsync(updatePatientRegisterArg, patientRegisterEntity, false);
await _repository.UpdateAsync(patientRegisterEntity, true);
return await GetPatientRegisterOrNo((Guid)input.PatientRegisterId);
}
else
{
throw new UserFriendlyException("人员不存在");
}
}
/// <summary>
/// 批量增加组合项目
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/PatientRegister/BatchAddAsbitems")]
public async Task BatchAddAsbitems(PatientRegisterBatchAddAsbitemsDto input)
{
var registerAsbitems = ObjectMapper.Map<List<BatchCreateRegisterCheckAsbitem>, List<RegisterCheckAsbitem>>(input.RegisterCheckAsbitems);
CreateRegisterCheckAsbitemEntity createRegisterCheckAsbitemEntity = null;
var entity = await Repository.GetAsync((Guid)input.PatientRegisterId);
if (input.RegisterCheckAsbitems.Count == 0)
{
return;
}
var existRegisterChecks = (await _registerCheckRepository.GetQueryableAsync()).Where(o => o.PatientRegisterId == input.PatientRegisterId).AsNoTracking().ToList();
var existRegisterAsbitems = (await _registerCheckAsbitemRepository.GetQueryableAsync()).Where(o =>
existRegisterChecks.Select(x => x.Id).Contains(o.RegisterCheckId)).AsNoTracking().ToList();
foreach (var registerCheckAsbitem in input.RegisterCheckAsbitems)
{
if (existRegisterAsbitems.Where(o => o.AsbitemId == registerCheckAsbitem.AsbitemId).Count() > 0)
{
continue;
}
var asbitem = await _asbitemRepository.GetAsync(registerCheckAsbitem.AsbitemId);
var newRegisterCheckAsbitem = new RegisterCheckAsbitem()
{
AsbitemId = registerCheckAsbitem.AsbitemId,
Amount = registerCheckAsbitem.Amount,
StandardPrice = asbitem.Price,
ChargePrice = registerCheckAsbitem.ChargePrice,
PayTypeFlag = registerCheckAsbitem.PayTypeFlag,
IsCharge = 'N'
};
existRegisterAsbitems.Add(newRegisterCheckAsbitem);
}
createRegisterCheckAsbitemEntity = await _registerAsbitemManager.UpdateManyAsync(entity, existRegisterAsbitems);
if (createRegisterCheckAsbitemEntity != null)
{
await UpdateRegisterChecks(createRegisterCheckAsbitemEntity);
}
await CurrentUnitOfWork.SaveChangesAsync();
return;
}
[HttpPost("api/PatientRegister/BatchDeleteAsbitems")]
public async Task BatchDeleteAsbitems(PatientRegisterBatchDeleteAsbitemsDto input)
{
DataHelper.CheckCharIsYOrN(input.IsDeleteGroup, "如果组合项目属于分组删除分组");
CreateRegisterCheckAsbitemEntity createRegisterCheckAsbitemEntity = null;
var entity = await Repository.GetAsync((Guid)input.PatientRegisterId);
if (input.RegisterCheckAsbitems.Count == 0)
{
return;
}
//删除组合项目时是否删除分组
bool IsPatientRegisterModified = false;
if (input.IsDeleteGroup == 'Y')
{
if (entity.CustomerOrgGroupId != null && entity.CustomerOrgGroupId != Guid.Empty)
{
var customerOrgGroupDetails = (await _customerOrgGroupDetailRepository.GetQueryableAsync()).Where(o => o.CustomerOrgGroupId == entity.CustomerOrgGroupId).ToList();
foreach (var registerCheckAsbitem in input.RegisterCheckAsbitems)
{
if (customerOrgGroupDetails.Where(o => o.AsbitemId == registerCheckAsbitem.AsbitemId).Count() > 0)
{
entity.CustomerOrgGroupId = null;
IsPatientRegisterModified = true;
break;
}
}
}
else if (entity.MedicalPackageId != null && entity.MedicalPackageId != Guid.Empty)
{
var medicalPackageDetails = (await _medicalPackageDetailRepository.GetQueryableAsync()).Where(o => o.MedicalPackageId == entity.MedicalPackageId).ToList();
foreach (var registerCheckAsbitem in input.RegisterCheckAsbitems)
{
if (medicalPackageDetails.Where(o => o.AsbitemId == registerCheckAsbitem.AsbitemId).Count() > 0)
{
entity.CustomerOrgGroupId = null;
IsPatientRegisterModified = true;
break;
}
}
}
}
if (IsPatientRegisterModified)
{
await _repository.UpdateAsync(entity);
}
//批量删除项目
var existRegisterChecks = (await _registerCheckRepository.GetQueryableAsync()).Where(o => o.PatientRegisterId == input.PatientRegisterId).AsNoTracking().ToList();
var existRegisterAsbitems = (await _registerCheckAsbitemRepository.GetQueryableAsync()).Where(o =>
existRegisterChecks.Select(x => x.Id).Contains(o.RegisterCheckId)).AsNoTracking().ToList();
foreach (var registerCheckAsbitem in input.RegisterCheckAsbitems)
{
var existRegisterAsbitem = existRegisterAsbitems.Where(o => o.AsbitemId == registerCheckAsbitem.AsbitemId).FirstOrDefault();
if (existRegisterAsbitem != null)
{
existRegisterAsbitems.Remove(existRegisterAsbitem);
}
}
createRegisterCheckAsbitemEntity = await _registerAsbitemManager.UpdateManyAsync(entity, existRegisterAsbitems);
if (createRegisterCheckAsbitemEntity != null)
{
await UpdateRegisterChecks(createRegisterCheckAsbitemEntity);
}
await CurrentUnitOfWork.SaveChangesAsync();
return;
}
///// <summary>
///// 体检记录查询 医生诊台
///// </summary>
///// <param name="input"></param>
///// <returns></returns>
//[HttpPost("api/app/PatientRegister/GetDoctorPeisRecordList")]
//public async Task<PagedResultDto<PatientRegisterOrNoDto>> GetDoctorPeisRecordListAsync(DoctorPeisRecordListInputDto input)
//{
// var query = from a in await _repository.GetQueryableAsync()
// join b in await _patientRepository.GetQueryableAsync() on a.PatientId equals b.Id into bb
// from ab in bb.DefaultIfEmpty()
// join c in await _registerCheckRepository.GetQueryableAsync() on a.Id equals c.PatientRegisterId into cc
// from ac in cc.DefaultIfEmpty()
// join d in await _registerCheckAsbitemRepository.GetQueryableAsync() on ac.Id equals d.RegisterCheckId into dd
// from ad in dd.DefaultIfEmpty()
// join e in await _asbitemRepository.GetQueryableAsync() on ad.AsbitemId equals e.Id
// where e.IsCheck == 'Y'
// select new
// {
// a,
// ab,
// AsbitemId = ad != null ? ad.AsbitemId : Guid.Empty,
// RegisterCheckCompleteFlag = ac != null ? ac.CompleteFlag : '9',
// RegisterCheckIsAudit = ac != null ? ac.IsAudit : '9',
// CheckDoctorId = ac.CheckDoctorId,
// CheckDate = ac.CheckDate
// };
// var sumquery = query;
// if (input.CustomerOrgs.Any())
// {
// var item = input.CustomerOrgs[0];
// if (item.CustomerOrgGroupId.Any())
// {
// sumquery = sumquery.Where(m => m.a.CustomerOrgGroupId != null && item.CustomerOrgGroupId.Contains(m.a.CustomerOrgGroupId.Value));
// }
// if (item.CustomerOrgRegisterId != null && item.CustomerOrgRegisterId != Guid.Empty)
// {
// sumquery = sumquery.Where(m => m.a.CustomerOrgRegisterId == item.CustomerOrgRegisterId);
// }
// if (item.CustomerOrgId != null)
// {
// var CustomerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(item.CustomerOrgId.Value);
// sumquery = sumquery.Where(m => CustomerOrgIds.Contains(m.a.CustomerOrgId));
// }
// if (!string.IsNullOrEmpty(item.StartDate) && !string.IsNullOrEmpty(item.EndDate))
// {
// if (item.DateType == '1')
// {
// sumquery = sumquery.Where(m => m.a.CreationTime >= Convert.ToDateTime(item.StartDate) &&
// m.a.CreationTime < Convert.ToDateTime(item.EndDate).AddDays(1));
// }
// else if (item.DateType == '2')
// {
// sumquery = sumquery.Where(m => m.a.MedicalStartDate != null && m.a.MedicalStartDate >= Convert.ToDateTime(item.StartDate) &&
// m.a.MedicalStartDate.Value < Convert.ToDateTime(item.EndDate).AddDays(1));
// }
// else if (item.DateType == '3')
// {
// sumquery = sumquery.Where(m => m.a.SummaryDate != null && m.a.SummaryDate.Value >= Convert.ToDateTime(item.StartDate) &&
// m.a.SummaryDate.Value < Convert.ToDateTime(item.EndDate).AddDays(1));
// }
// else if (item.DateType == '4')
// {
// sumquery = sumquery.Where(m => m.CheckDate != null && m.CheckDate.Value >= Convert.ToDateTime(item.StartDate) &&
// m.CheckDate.Value < Convert.ToDateTime(item.EndDate).AddDays(1));
// }
// }
// if (input.CustomerOrgs.Count > 1)
// {
// foreach (var item2 in input.CustomerOrgs)
// {
// if (input.CustomerOrgs.IndexOf(item2) > 0)
// {
// var newquery = query;
// if (item2.CustomerOrgGroupId.Any())
// {
// newquery = newquery.Where(m => m.a.CustomerOrgGroupId != null && item2.CustomerOrgGroupId.Contains(m.a.CustomerOrgGroupId.Value));
// }
// if (item2.CustomerOrgRegisterId != null && item2.CustomerOrgRegisterId != Guid.Empty)
// {
// newquery = newquery.Where(m => m.a.CustomerOrgRegisterId == item2.CustomerOrgRegisterId);
// }
// if (item2.CustomerOrgId != null)
// {
// var CustomerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(item2.CustomerOrgId.Value);
// newquery = newquery.Where(m => CustomerOrgIds.Contains(m.a.CustomerOrgId));
// }
// if (!string.IsNullOrEmpty(item2.StartDate) && !string.IsNullOrEmpty(item2.EndDate))
// {
// if (item2.DateType == '1')
// {
// newquery = newquery.Where(m => m.a.CreationTime >= Convert.ToDateTime(item2.StartDate) &&
// m.a.CreationTime < Convert.ToDateTime(item2.EndDate).AddDays(1));
// }
// else if (item2.DateType == '2')
// {
// newquery = newquery.Where(m => m.a.MedicalStartDate != null && m.a.MedicalStartDate.Value >= Convert.ToDateTime(item2.StartDate) &&
// m.a.MedicalStartDate.Value < Convert.ToDateTime(item2.EndDate).AddDays(1));
// }
// else if (item2.DateType == '3')
// {
// newquery = newquery.Where(m => m.a.SummaryDate != null && m.a.SummaryDate.Value >= Convert.ToDateTime(item2.StartDate) &&
// m.a.SummaryDate.Value < Convert.ToDateTime(item2.EndDate).AddDays(1));
// }
// else if (item2.DateType == '4')
// {
// newquery = newquery.Where(m => m.CheckDate != null && m.CheckDate.Value >= Convert.ToDateTime(item2.StartDate) &&
// m.CheckDate.Value < Convert.ToDateTime(item2.EndDate).AddDays(1));
// }
// }
// sumquery = sumquery.Union(newquery);
// }
// }
// }
// }
// if (!string.IsNullOrEmpty(input.PatientName))
// {
// sumquery = sumquery.Where(m => m.a.PatientName != null && m.a.PatientName.Contains(input.PatientName));
// }
// if (input.SexId != null)
// {
// sumquery = sumquery.Where(m => m.a.SexId == input.SexId);
// }
// if (input.CheckDoctorIds.Any())
// {
// sumquery = sumquery.Where(m => input.CheckDoctorIds.Contains(m.CheckDoctorId));
// }
// if (input.CompleteFlag != null)
// {
// sumquery = sumquery.Where(m => m.a.CompleteFlag == input.CompleteFlag);
// }
// else
// {
// //直接过滤
// sumquery = sumquery.Where(m => m.a.CompleteFlag != PatientRegisterCompleteFlag.PreRegistration);
// }
// if (input.IsAudit != null)
// {
// sumquery = sumquery.Where(m => m.a.IsAudit == input.IsAudit);
// }
// if (input.Asbitems.Any())
// {
// sumquery = sumquery.Where(m => input.Asbitems.Contains(m.AsbitemId));
// }
// //if (input.IsPicture == 'Y')
// //{
// // //查询有图数据
// // var query_picture = from a in await _registerCheckAsbitemRepository.GetQueryableAsync()
// // join b in await _registerCheckPictureRepository.GetQueryableAsync() on a.RegisterCheckId equals b.RegisterCheckId
// // select a.PatientRegisterId;
// // sumquery = sumquery.Where(m => query_picture.Contains(m.a.Id));
// //}
// if (input.AsbitemCompleteFlag != null)
// {
// sumquery = sumquery.Where(m => m.RegisterCheckCompleteFlag == input.AsbitemCompleteFlag);
// }
// if (input.AsbitemIsAudit != null)
// {
// sumquery = sumquery.Where(m => m.RegisterCheckIsAudit == input.AsbitemIsAudit);
// }
// if (input.MedicalTypeIds.Any())
// {
// sumquery = sumquery.Where(m => m.a.MedicalTypeId != null && input.MedicalTypeIds.Contains(m.a.MedicalTypeId.Value));
// }
// if (input.PersonnelTypeIds.Any())
// {
// sumquery = sumquery.Where(m => m.a.PersonnelTypeId != null && input.PersonnelTypeIds.Contains(m.a.PersonnelTypeId.Value));
// }
// #region 增加项目类别权限
// List<Guid> asbitemIds = new List<Guid>();
// string AdminId = _configuration.GetValue<string>("AdminId");
// if (_currentUser.Id.Value != Guid.Parse(AdminId))
// {
// asbitemIds = (from userItemType in await _userItemTypeRepository.GetQueryableAsync()
// join asbitem in await _asbitemRepository.GetQueryableAsync() on userItemType.ItemTypeId equals asbitem.ItemTypeId
// where userItemType.UserId == _currentUser.Id.Value
// select asbitem.Id).ToList();
// }
// #endregion
// var sumqueryGroup = sumquery.ToList().GroupBy(g => g.a.Id);
// List<PatientRegisterOrNoDto> entlist = new List<PatientRegisterOrNoDto>();
// foreach (var s in sumqueryGroup.OrderBy(o => o.Key))
// {
// bool IsDisplay = false;
// if (_currentUser.Id.Value == Guid.Parse(AdminId))
// {
// IsDisplay = true;
// }
// else if (s.Where(m => asbitemIds.Contains(m.AsbitemId)).Count() > 0)
// {
// IsDisplay = true;
// }
// if (IsDisplay)
// {
// entlist.Add(new PatientRegisterOrNoDto
// {
// CreationTime = s.FirstOrDefault().a.CreationTime,
// CreatorId = s.FirstOrDefault().a.CreatorId,
// Id = s.FirstOrDefault().a.Id,
// LastModificationTime = s.FirstOrDefault().a.LastModificationTime,
// LastModifierId = s.FirstOrDefault().a.LastModifierId,
// ThirdInfo = s.FirstOrDefault().a.ThirdInfo,
// SummaryDoctorId = s.FirstOrDefault().a.SummaryDoctorId,
// SummaryDate = DataHelper.ConversionDateToString(s.FirstOrDefault().a.SummaryDate),
// SexId = s.FirstOrDefault().a.SexId,
// Age = s.FirstOrDefault().a.Age,
// AuditDate = DataHelper.ConversionDateToString(s.FirstOrDefault().a.AuditDate),
// AuditDoctorId = s.FirstOrDefault().a.AuditDoctorId,
// BirthDate = DataHelper.ConversionDateToString(s.FirstOrDefault().a.BirthDate),
// CompleteFlag = s.FirstOrDefault().a.CompleteFlag,
// CustomerOrgGroupId = s.FirstOrDefault().a.CustomerOrgGroupId,
// CustomerOrgId = s.FirstOrDefault().a.CustomerOrgId,
// CustomerOrgRegisterId = s.FirstOrDefault().a.CustomerOrgRegisterId,
// GuidePrintTimes = s.FirstOrDefault().a.GuidePrintTimes,
// InterposeMeasure = s.FirstOrDefault().a.InterposeMeasure,
// IsAudit = s.FirstOrDefault().a.IsAudit,
// IsLock = s.FirstOrDefault().a.IsLock,
// IsMedicalStart = s.FirstOrDefault().a.IsMedicalStart,
// IsNameHide = s.FirstOrDefault().a.IsNameHide,
// IsPhoneFollow = s.FirstOrDefault().a.IsPhoneFollow,
// IsRecoverGuide = s.FirstOrDefault().a.IsRecoverGuide,
// IsUpload = s.FirstOrDefault().a.IsUpload,
// IsVip = s.FirstOrDefault().a.IsVip,
// JobCardNo = s.FirstOrDefault().a.JobCardNo,
// JobPost = s.FirstOrDefault().a.JobPost,
// JobTitle = s.FirstOrDefault().a.JobTitle,
// MaritalStatusId = s.FirstOrDefault().a.MaritalStatusId,
// MedicalCardNo = s.FirstOrDefault().a.MedicalCardNo,
// MedicalConclusionId = s.FirstOrDefault().a.MedicalConclusionId,
// MedicalPackageId = s.FirstOrDefault().a.MedicalPackageId,
// MedicalStartDate = DataHelper.ConversionDateToString(s.FirstOrDefault().a.MedicalStartDate),
// MedicalTimes = s.FirstOrDefault().a.MedicalTimes,
// MedicalTypeId = s.FirstOrDefault().a.MedicalTypeId,
// MedicalCenterId = s.FirstOrDefault().a.MedicalCenterId,
// PatientId = s.FirstOrDefault().a.PatientId,
// PatientName = s.FirstOrDefault().a.PatientName,
// PatientRegisterNo = s.FirstOrDefault().a.PatientRegisterNo,
// PersonnelTypeId = s.FirstOrDefault().a.PersonnelTypeId,
// Photo = s.FirstOrDefault().a.Photo,
// Remark = s.FirstOrDefault().a.Remark,
// ReportPrintTimes = s.FirstOrDefault().a.ReportPrintTimes,
// Salesman = s.FirstOrDefault().a.Salesman,
// SexHormoneTermId = s.FirstOrDefault().a.SexHormoneTermId,
// CreatorName = "",
// LastModifierName = "",
// Address = s.FirstOrDefault().ab.Address, //档案表信息
// BirthPlaceId = s.FirstOrDefault().ab.BirthPlaceId,
// DisplayName = s.FirstOrDefault().ab.DisplayName,
// Email = s.FirstOrDefault().ab.Email,
// IdNo = s.FirstOrDefault().ab.IdNo,
// MobileTelephone = s.FirstOrDefault().ab.MobileTelephone,
// NationId = s.FirstOrDefault().ab.NationId,
// PatientNo = s.FirstOrDefault().ab.PatientNo,
// PatientPassword = s.FirstOrDefault().ab.PatientPassword,
// PostalCode = s.FirstOrDefault().ab.PostalCode,
// Telephone = s.FirstOrDefault().ab.Telephone,
// CustomerOrgName = _cacheService.GetCustomerOrgNameAsync(s.FirstOrDefault().a.CustomerOrgId).Result,
// CustomerOrgParentId = _cacheService.GetTopCustomerOrgAsync(s.FirstOrDefault().a.CustomerOrgId).Result.Id,
// CustomerOrgParentName = _cacheService.GetTopCustomerOrgNameAsync(s.FirstOrDefault().a.CustomerOrgId).Result,
// MedicalPackageName = s.FirstOrDefault().a.MedicalPackageId == null ? "" : _cacheService.GetMedicalPackageAsync(s.FirstOrDefault().a.MedicalPackageId.Value).GetAwaiter().GetResult().DisplayName,
// CustomerOrgGroupName = s.FirstOrDefault().a.CustomerOrgGroupId == null ? "" : _cacheService.GetCustomerOrgGroupAsync(s.FirstOrDefault().a.CustomerOrgGroupId.Value).GetAwaiter().GetResult().DisplayName,
// PersonnelTypeName = _cacheService.GetPersonnelTypeNameAsync(s.FirstOrDefault().a.PersonnelTypeId).GetAwaiter().GetResult(),
// MaritalStatusName = _cacheService.GetMaritalStatusNameAsync(s.FirstOrDefault().a.MaritalStatusId).GetAwaiter().GetResult(),
// MedicalTypeName = _cacheService.GetMedicalTypeNameAsync(s.FirstOrDefault().a.MedicalTypeId).GetAwaiter().GetResult(),
// SexName = _cacheService.GetSexNameAsync(s.FirstOrDefault().a.SexId).GetAwaiter().GetResult()
// });
// }
// }
// int totalCount = entlist.Count;
// entlist = entlist.Skip(input.SkipCount * input.MaxResultCount).Take(input.MaxResultCount).ToList();
// return new PagedResultDto<PatientRegisterOrNoDto>(totalCount, entlist);
//}
/// <summary>
/// 体检记录查询 医生诊台
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/PatientRegister/GetDoctorPeisRecordList")]
public async Task<GetDoctorPeisRecordListDto> GetDoctorPeisRecordListAsync(DoctorPeisRecordListInputDto input)
{
var queryPatientRegisterIds = from patientRegister in await _repository.GetQueryableAsync()
join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.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
join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id
where asbitem.IsCheck == 'Y'
select new
{
patientRegister,
patient,
registerCheckAsbitem = new
{
registerCheckAsbitem.AsbitemId
},
registerCheck = new
{
registerCheck.CompleteFlag,
registerCheck.IsAudit,
registerCheck.CheckDoctorId,
registerCheck.CheckDate
}
};
var sumquery = queryPatientRegisterIds;
if (input.CustomerOrgs.Any())
{
var item = input.CustomerOrgs[0];
if (item.CustomerOrgGroupId.Any())
{
sumquery = sumquery.Where(m => m.patientRegister.CustomerOrgGroupId != null && item.CustomerOrgGroupId.Contains(m.patientRegister.CustomerOrgGroupId.Value));
}
if (item.CustomerOrgRegisterId != null && item.CustomerOrgRegisterId != Guid.Empty)
{
sumquery = sumquery.Where(m => m.patientRegister.CustomerOrgRegisterId == item.CustomerOrgRegisterId);
}
if (item.CustomerOrgId != null)
{
var CustomerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(item.CustomerOrgId.Value);
sumquery = sumquery.Where(m => CustomerOrgIds.Contains(m.patientRegister.CustomerOrgId));
}
if (!string.IsNullOrEmpty(item.StartDate) && !string.IsNullOrEmpty(item.EndDate))
{
if (item.DateType == '1')
{
sumquery = sumquery.Where(m => m.patientRegister.CreationTime >= Convert.ToDateTime(item.StartDate) &&
m.patientRegister.CreationTime < Convert.ToDateTime(item.EndDate).AddDays(1));
}
else if (item.DateType == '2')
{
sumquery = sumquery.Where(m => m.patientRegister.MedicalStartDate != null && m.patientRegister.MedicalStartDate >= Convert.ToDateTime(item.StartDate) &&
m.patientRegister.MedicalStartDate.Value < Convert.ToDateTime(item.EndDate).AddDays(1));
}
else if (item.DateType == '3')
{
sumquery = sumquery.Where(m => m.patientRegister.SummaryDate != null && m.patientRegister.SummaryDate.Value >= Convert.ToDateTime(item.StartDate) &&
m.patientRegister.SummaryDate.Value < Convert.ToDateTime(item.EndDate).AddDays(1));
}
else if (item.DateType == '4')
{
sumquery = sumquery.Where(m => m.registerCheck.CheckDate != null && m.registerCheck.CheckDate.Value >= Convert.ToDateTime(item.StartDate) &&
m.registerCheck.CheckDate.Value < Convert.ToDateTime(item.EndDate).AddDays(1));
}
}
if (input.CustomerOrgs.Count > 1)
{
foreach (var item2 in input.CustomerOrgs)
{
if (input.CustomerOrgs.IndexOf(item2) > 0)
{
var newquery = queryPatientRegisterIds;
if (item2.CustomerOrgGroupId.Any())
{
newquery = newquery.Where(m => m.patientRegister.CustomerOrgGroupId != null && item2.CustomerOrgGroupId.Contains(m.patientRegister.CustomerOrgGroupId.Value));
}
if (item2.CustomerOrgRegisterId != null && item2.CustomerOrgRegisterId != Guid.Empty)
{
newquery = newquery.Where(m => m.patientRegister.CustomerOrgRegisterId == item2.CustomerOrgRegisterId);
}
if (item2.CustomerOrgId != null)
{
var CustomerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(item2.CustomerOrgId.Value);
newquery = newquery.Where(m => CustomerOrgIds.Contains(m.patientRegister.CustomerOrgId));
}
if (!string.IsNullOrEmpty(item2.StartDate) && !string.IsNullOrEmpty(item2.EndDate))
{
if (item2.DateType == '1')
{
newquery = newquery.Where(m => m.patientRegister.CreationTime >= Convert.ToDateTime(item2.StartDate) &&
m.patientRegister.CreationTime < Convert.ToDateTime(item2.EndDate).AddDays(1));
}
else if (item2.DateType == '2')
{
newquery = newquery.Where(m => m.patientRegister.MedicalStartDate != null && m.patientRegister.MedicalStartDate.Value >= Convert.ToDateTime(item2.StartDate) &&
m.patientRegister.MedicalStartDate.Value < Convert.ToDateTime(item2.EndDate).AddDays(1));
}
else if (item2.DateType == '3')
{
newquery = newquery.Where(m => m.patientRegister.SummaryDate != null && m.patientRegister.SummaryDate.Value >= Convert.ToDateTime(item2.StartDate) &&
m.patientRegister.SummaryDate.Value < Convert.ToDateTime(item2.EndDate).AddDays(1));
}
else if (item2.DateType == '4')
{
newquery = newquery.Where(m => m.registerCheck.CheckDate != null && m.registerCheck.CheckDate.Value >= Convert.ToDateTime(item2.StartDate) &&
m.registerCheck.CheckDate.Value < Convert.ToDateTime(item2.EndDate).AddDays(1));
}
}
sumquery = sumquery.Union(newquery);
}
}
}
}
if (!string.IsNullOrEmpty(input.PatientName))
{
sumquery = sumquery.Where(m => m.patientRegister.PatientName != null && m.patientRegister.PatientName.Contains(input.PatientName));
}
if (input.SexId != null)
{
sumquery = sumquery.Where(m => m.patientRegister.SexId == input.SexId);
}
if (input.CheckDoctorIds.Any())
{
sumquery = sumquery.Where(m => input.CheckDoctorIds.Contains(m.registerCheck.CheckDoctorId));
}
if (input.CompleteFlag != null)
{
sumquery = sumquery.Where(m => m.patientRegister.CompleteFlag == input.CompleteFlag);
}
else
{
//直接过滤
sumquery = sumquery.Where(m => m.patientRegister.CompleteFlag != PatientRegisterCompleteFlag.PreRegistration);
}
if (input.IsAudit != null)
{
sumquery = sumquery.Where(m => m.patientRegister.IsAudit == input.IsAudit);
}
if (input.Asbitems.Any())
{
sumquery = sumquery.Where(m => input.Asbitems.Contains(m.registerCheckAsbitem.AsbitemId));
}
if (input.AsbitemCompleteFlag != null)
{
sumquery = sumquery.Where(m => m.registerCheck.CompleteFlag == input.AsbitemCompleteFlag);
}
if (input.AsbitemIsAudit != null)
{
sumquery = sumquery.Where(m => m.registerCheck.IsAudit == input.AsbitemIsAudit);
}
if (input.MedicalTypeIds.Any())
{
sumquery = sumquery.Where(m => m.patientRegister.MedicalTypeId != null && input.MedicalTypeIds.Contains(m.patientRegister.MedicalTypeId.Value));
}
if (input.PersonnelTypeIds.Any())
{
sumquery = sumquery.Where(m => m.patientRegister.PersonnelTypeId != null && input.PersonnelTypeIds.Contains(m.patientRegister.PersonnelTypeId.Value));
}
#region 增加项目类别权限
List<Guid> asbitemIds = new List<Guid>();
string AdminId = _configuration.GetValue<string>("AdminId");
if (_currentUser.Id.Value != Guid.Parse(AdminId))
{
asbitemIds = (from userItemType in await _userItemTypeRepository.GetQueryableAsync()
join asbitem in await _asbitemRepository.GetQueryableAsync() on userItemType.ItemTypeId equals asbitem.ItemTypeId
where userItemType.UserId == _currentUser.Id.Value
select asbitem.Id).ToList();
sumquery = sumquery.Where(m => asbitemIds.Contains(m.registerCheckAsbitem.AsbitemId));
}
#endregion
List<GetDoctorPeisRecordListCheckStatistics> checkStatisticsList = new List<GetDoctorPeisRecordListCheckStatistics>();
if (input.Asbitems.Any())
{
//统计项目人数
var checkedPatientRegisterList = sumquery.Where(m => m.registerCheck.CompleteFlag == RegisterCheckCompleteFlag.Checked)
.Select(s => new { s.patientRegister.Id, s.patientRegister.SexId }).Distinct().ToList();
var unCheckedPatientRegisterList = sumquery.Where(m => m.registerCheck.CompleteFlag == RegisterCheckCompleteFlag.UnChecked)
.Select(s => new { s.patientRegister.Id, s.patientRegister.SexId }).Distinct().ToList();
var giveUpCheckedPatientRegisterList = sumquery.Where(m => m.registerCheck.CompleteFlag == RegisterCheckCompleteFlag.GiveUpChecked)
.Select(s => new { s.patientRegister.Id, s.patientRegister.SexId }).Distinct().ToList();
checkStatisticsList.Add(new GetDoctorPeisRecordListCheckStatistics
{
CheckStatus = "已检",
MaleCount = checkedPatientRegisterList.Count(c => c.SexId == SexFlag.Male),
FemaleCount = checkedPatientRegisterList.Count(c => c.SexId == SexFlag.Female),
UnknownCount = checkedPatientRegisterList.Count(c => c.SexId == SexFlag.UnKnown)
});
checkStatisticsList.Add(new GetDoctorPeisRecordListCheckStatistics
{
CheckStatus = "未检",
MaleCount = unCheckedPatientRegisterList.Count(c => c.SexId == SexFlag.Male),
FemaleCount = unCheckedPatientRegisterList.Count(c => c.SexId == SexFlag.Female),
UnknownCount = unCheckedPatientRegisterList.Count(c => c.SexId == SexFlag.UnKnown)
});
checkStatisticsList.Add(new GetDoctorPeisRecordListCheckStatistics
{
CheckStatus = "弃检",
MaleCount = giveUpCheckedPatientRegisterList.Count(c => c.SexId == SexFlag.Male),
FemaleCount = giveUpCheckedPatientRegisterList.Count(c => c.SexId == SexFlag.Female),
UnknownCount = giveUpCheckedPatientRegisterList.Count(c => c.SexId == SexFlag.UnKnown)
});
}
var patientRegisterIds = sumquery.Select(s => new
{
patientRegisterId = s.patientRegister.Id,
medicalStartDate = s.patientRegister.MedicalStartDate
}).Distinct();
int totalCount = patientRegisterIds.Count();
var pagedIds = patientRegisterIds.OrderBy(o => o.medicalStartDate).Skip(input.SkipCount * input.MaxResultCount).Take(input.MaxResultCount)
.Select(s => s.patientRegisterId).ToList();
var queryList = (from patientRegister in await _repository.GetQueryableAsync()
join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id
where pagedIds.Contains(patientRegister.Id)
select new
{
patientRegister,
patient
}).ToList();
List<PatientRegisterOrNoDto> entlist = new List<PatientRegisterOrNoDto>();
foreach (var item in queryList)
{
var patientRegisterFirst = item.patientRegister;
var patientFirst = item.patient;
entlist.Add(new PatientRegisterOrNoDto
{
CreationTime = patientRegisterFirst.CreationTime,
CreatorId = patientRegisterFirst.CreatorId,
Id = patientRegisterFirst.Id,
LastModificationTime = patientRegisterFirst.LastModificationTime,
LastModifierId = patientRegisterFirst.LastModifierId,
ThirdInfo = patientRegisterFirst.ThirdInfo,
SummaryDoctorId = patientRegisterFirst.SummaryDoctorId,
SummaryDate = DataHelper.ConversionDateToString(patientRegisterFirst.SummaryDate),
SexId = patientRegisterFirst.SexId,
Age = patientRegisterFirst.Age,
AuditDate = DataHelper.ConversionDateToString(patientRegisterFirst.AuditDate),
AuditDoctorId = patientRegisterFirst.AuditDoctorId,
BirthDate = DataHelper.ConversionDateToString(patientRegisterFirst.BirthDate),
CompleteFlag = patientRegisterFirst.CompleteFlag,
CustomerOrgGroupId = patientRegisterFirst.CustomerOrgGroupId,
CustomerOrgId = patientRegisterFirst.CustomerOrgId,
CustomerOrgRegisterId = patientRegisterFirst.CustomerOrgRegisterId,
GuidePrintTimes = patientRegisterFirst.GuidePrintTimes,
InterposeMeasure = patientRegisterFirst.InterposeMeasure,
IsAudit = patientRegisterFirst.IsAudit,
IsLock = patientRegisterFirst.IsLock,
IsMedicalStart = patientRegisterFirst.IsMedicalStart,
IsNameHide = patientRegisterFirst.IsNameHide,
IsPhoneFollow = patientRegisterFirst.IsPhoneFollow,
IsRecoverGuide = patientRegisterFirst.IsRecoverGuide,
IsUpload = patientRegisterFirst.IsUpload,
IsVip = patientRegisterFirst.IsVip,
JobCardNo = patientRegisterFirst.JobCardNo,
JobPost = patientRegisterFirst.JobPost,
JobTitle = patientRegisterFirst.JobTitle,
MaritalStatusId = patientRegisterFirst.MaritalStatusId,
MedicalCardNo = patientRegisterFirst.MedicalCardNo,
MedicalConclusionId = patientRegisterFirst.MedicalConclusionId,
MedicalPackageId = patientRegisterFirst.MedicalPackageId,
MedicalStartDate = DataHelper.ConversionDateToString(patientRegisterFirst.MedicalStartDate),
MedicalTimes = patientRegisterFirst.MedicalTimes,
MedicalTypeId = patientRegisterFirst.MedicalTypeId,
MedicalCenterId = patientRegisterFirst.MedicalCenterId,
PatientId = patientRegisterFirst.PatientId,
PatientName = patientRegisterFirst.PatientName,
PatientRegisterNo = patientRegisterFirst.PatientRegisterNo,
PersonnelTypeId = patientRegisterFirst.PersonnelTypeId,
Photo = patientRegisterFirst.Photo,
Remark = patientRegisterFirst.Remark,
ReportPrintTimes = patientRegisterFirst.ReportPrintTimes,
Salesman = patientRegisterFirst.Salesman,
SexHormoneTermId = patientRegisterFirst.SexHormoneTermId,
CreatorName = _cacheService.GetSurnameAsync(patientRegisterFirst.CreatorId).GetAwaiter().GetResult(),
LastModifierName = _cacheService.GetSurnameAsync(patientRegisterFirst.LastModifierId).GetAwaiter().GetResult(),
Address = patientFirst.Address, //档案表信息
BirthPlaceId = patientFirst.BirthPlaceId,
DisplayName = patientFirst.DisplayName,
Email = patientFirst.Email,
IdNo = patientFirst.IdNo,
MobileTelephone = patientFirst.MobileTelephone,
NationId = patientFirst.NationId,
PatientNo = patientFirst.PatientNo,
PatientPassword = patientFirst.PatientPassword,
PostalCode = patientFirst.PostalCode,
Telephone = patientFirst.Telephone,
CustomerOrgName = _cacheService.GetCustomerOrgNameAsync(patientRegisterFirst.CustomerOrgId).Result,
CustomerOrgParentId = _cacheService.GetTopCustomerOrgAsync(patientRegisterFirst.CustomerOrgId).Result.Id,
CustomerOrgParentName = _cacheService.GetTopCustomerOrgNameAsync(patientRegisterFirst.CustomerOrgId).Result,
MedicalPackageName = patientRegisterFirst.MedicalPackageId == null ? "" : _cacheService.GetMedicalPackageAsync(patientRegisterFirst.MedicalPackageId.Value).GetAwaiter().GetResult().DisplayName,
CustomerOrgGroupName = patientRegisterFirst.CustomerOrgGroupId == null ? "" : _cacheService.GetCustomerOrgGroupAsync(patientRegisterFirst.CustomerOrgGroupId.Value).GetAwaiter().GetResult().DisplayName,
PersonnelTypeName = _cacheService.GetPersonnelTypeNameAsync(patientRegisterFirst.PersonnelTypeId).GetAwaiter().GetResult(),
MaritalStatusName = _cacheService.GetMaritalStatusNameAsync(patientRegisterFirst.MaritalStatusId).GetAwaiter().GetResult(),
MedicalTypeName = _cacheService.GetMedicalTypeNameAsync(patientRegisterFirst.MedicalTypeId).GetAwaiter().GetResult(),
SexName = _cacheService.GetSexNameAsync(patientRegisterFirst.SexId).GetAwaiter().GetResult(),
SummaryDoctorName = _cacheService.GetSurnameAsync(patientRegisterFirst.SummaryDoctorId).GetAwaiter().GetResult(),
AuditDoctorName = _cacheService.GetSurnameAsync(patientRegisterFirst.AuditDoctorId).GetAwaiter().GetResult()
});
}
var pageDto = new PagedResultDto<PatientRegisterOrNoDto>(totalCount, entlist);
var entDto = new GetDoctorPeisRecordListDto();
entDto.TotalCount = pageDto.TotalCount;
entDto.Items = pageDto.Items;
entDto.CheckStatistics = checkStatisticsList;
return entDto;
}
/// <summary>
/// 体检记录查询 总症医生诊台
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/PatientRegister/GetSumDoctorPeisRecordList")]
public async Task<PagedResultDto<PatientRegisterOrNoDto>> GetSumDoctorPeisRecordListAsync(SumDoctorPeisRecordListInputtDto input)
{
var query = from a in await _repository.GetQueryableAsync()
join b in await _patientRepository.GetQueryableAsync() on a.PatientId equals b.Id into bb
from ab in bb.DefaultIfEmpty()
join c in await _registerCheckRepository.GetQueryableAsync() on a.Id equals c.PatientRegisterId into cc
from ac in cc.DefaultIfEmpty()
join d in await _registerCheckAsbitemRepository.GetQueryableAsync() on ac.Id equals d.RegisterCheckId into dd
from ad in dd.DefaultIfEmpty()
join e in await _asbitemRepository.GetQueryableAsync() on ad.AsbitemId equals e.Id
where e.IsCheck == 'Y'
select new
{
a,
ab,
AsbitemId = ad != null ? ad.AsbitemId : Guid.Empty,
RegisterCheckCompleteFlag = ac != null ? ac.CompleteFlag : '9',
RegisterCheckIsAudit = ac != null ? ac.IsAudit : '9',
CheckDoctorId = ac.CheckDoctorId
};
var sumquery = query;
if (input.CustomerOrgs.Any())
{
var item = input.CustomerOrgs[0];
if (item.CustomerOrgGroupId.Any())
{
sumquery = sumquery.Where(m => m.a.CustomerOrgGroupId != null && item.CustomerOrgGroupId.Contains(m.a.CustomerOrgGroupId.Value));
}
if (item.CustomerOrgRegisterId != null && item.CustomerOrgRegisterId != Guid.Empty)
{
sumquery = sumquery.Where(m => m.a.CustomerOrgRegisterId == item.CustomerOrgRegisterId);
}
if (item.CustomerOrgId != null)
{
var CustomerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(item.CustomerOrgId.Value);
sumquery = sumquery.Where(m => CustomerOrgIds.Contains(m.a.CustomerOrgId));
}
if (!string.IsNullOrEmpty(item.StartDate) && !string.IsNullOrEmpty(item.EndDate))
{
if (item.DateType == '1')
{
sumquery = sumquery.Where(m => m.a.CreationTime >= Convert.ToDateTime(item.StartDate) &&
m.a.CreationTime < Convert.ToDateTime(item.EndDate).AddDays(1));
}
else if (item.DateType == '2')
{
sumquery = sumquery.Where(m => m.a.MedicalStartDate != null && m.a.MedicalStartDate >= Convert.ToDateTime(item.StartDate) &&
m.a.MedicalStartDate.Value < Convert.ToDateTime(item.EndDate).AddDays(1));
}
else if (item.DateType == '3')
{
sumquery = sumquery.Where(m => m.a.SummaryDate != null && m.a.SummaryDate.Value >= Convert.ToDateTime(item.StartDate) &&
m.a.SummaryDate.Value < Convert.ToDateTime(item.EndDate).AddDays(1));
}
}
if (input.CustomerOrgs.Count > 1)
{
foreach (var item2 in input.CustomerOrgs)
{
if (input.CustomerOrgs.IndexOf(item2) > 0)
{
var newquery = query;
if (item2.CustomerOrgGroupId.Any())
{
newquery = newquery.Where(m => m.a.CustomerOrgGroupId != null && item2.CustomerOrgGroupId.Contains(m.a.CustomerOrgGroupId.Value));
}
if (item2.CustomerOrgRegisterId != null && item2.CustomerOrgRegisterId != Guid.Empty)
{
newquery = newquery.Where(m => m.a.CustomerOrgRegisterId == item2.CustomerOrgRegisterId);
}
if (item2.CustomerOrgId != null)
{
var CustomerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(item2.CustomerOrgId.Value);
newquery = newquery.Where(m => CustomerOrgIds.Contains(m.a.CustomerOrgId));
}
if (!string.IsNullOrEmpty(item2.StartDate) && !string.IsNullOrEmpty(item2.EndDate))
{
if (item2.DateType == '1')
{
newquery = newquery.Where(m => m.a.CreationTime >= Convert.ToDateTime(item2.StartDate) &&
m.a.CreationTime < Convert.ToDateTime(item2.EndDate).AddDays(1));
}
else if (item2.DateType == '2')
{
newquery = newquery.Where(m => m.a.MedicalStartDate != null && m.a.MedicalStartDate.Value >= Convert.ToDateTime(item2.StartDate) &&
m.a.MedicalStartDate.Value < Convert.ToDateTime(item2.EndDate).AddDays(1));
}
else if (item2.DateType == '3')
{
newquery = newquery.Where(m => m.a.SummaryDate != null && m.a.SummaryDate.Value >= Convert.ToDateTime(item2.StartDate) &&
m.a.SummaryDate.Value < Convert.ToDateTime(item2.EndDate).AddDays(1));
}
}
sumquery = sumquery.Union(newquery);
}
}
}
}
if (!string.IsNullOrEmpty(input.PatientName))
{
sumquery = sumquery.Where(m => m.a.PatientName != null && m.a.PatientName.Contains(input.PatientName));
}
if (input.SexId != null)
{
sumquery = sumquery.Where(m => m.a.SexId == input.SexId);
}
if (input.CheckDoctorIds.Any())
{
sumquery = sumquery.Where(m => input.CheckDoctorIds.Contains(m.CheckDoctorId));
}
if (input.CompleteFlag != null
&& input.CompleteFlag != PatientRegisterCompleteFlag.ItemCheckUnSumCheck)
{
sumquery = sumquery.Where(m => m.a.CompleteFlag == input.CompleteFlag);
}
else
{
//直接过滤
sumquery = sumquery.Where(m => m.a.CompleteFlag != PatientRegisterCompleteFlag.PreRegistration);
}
if (input.IsAudit != null)
{
sumquery = sumquery.Where(m => m.a.IsAudit == input.IsAudit);
}
if (input.Asbitems.Any())
{
sumquery = sumquery.Where(m => input.Asbitems.Contains(m.AsbitemId));
}
if (input.AsbitemCompleteFlag != null)
{
sumquery = sumquery.Where(m => m.RegisterCheckCompleteFlag == input.AsbitemCompleteFlag);
}
if (input.AsbitemIsAudit != null)
{
sumquery = sumquery.Where(m => m.RegisterCheckIsAudit == input.AsbitemIsAudit);
}
if (input.MedicalTypeIds.Any())
{
sumquery = sumquery.Where(m => m.a.MedicalTypeId != null && input.MedicalTypeIds.Contains(m.a.MedicalTypeId.Value));
}
if (input.PersonnelTypeIds.Any())
{
sumquery = sumquery.Where(m => m.a.PersonnelTypeId != null && input.PersonnelTypeIds.Contains(m.a.PersonnelTypeId.Value));
}
if (input.SummaryDoctorIds.Any())
{
sumquery = sumquery.Where(m => m.a.SummaryDoctorId != null && input.SummaryDoctorIds.Contains(m.a.SummaryDoctorId.Value));
}
if (input.AuditDoctorIds.Any())
{
sumquery = sumquery.Where(m => m.a.AuditDoctorId != null && input.AuditDoctorIds.Contains(m.a.AuditDoctorId.Value));
}
var sumqueryGroup = sumquery.ToList().GroupBy(g => g.a.Id);
List<PatientRegisterOrNoDto> entlist = new List<PatientRegisterOrNoDto>();
foreach (var s in sumqueryGroup.OrderBy(o => o.Key))
{
bool IsDisplay = false;
if (input.CompleteFlag == PatientRegisterCompleteFlag.ItemCheckUnSumCheck)
{
if (s.Where(m => m.RegisterCheckCompleteFlag != RegisterCheckCompleteFlag.Checked && m.RegisterCheckCompleteFlag != RegisterCheckCompleteFlag.GiveUpChecked).Count() == 0
&& s.FirstOrDefault().a.CompleteFlag != PatientRegisterCompleteFlag.SumCheck)
{
IsDisplay = true;
}
else
{
IsDisplay = false;
}
}
else
{
IsDisplay = true;
}
if (IsDisplay)
{
entlist.Add(new PatientRegisterOrNoDto
{
CreationTime = s.FirstOrDefault().a.CreationTime,
CreatorId = s.FirstOrDefault().a.CreatorId,
Id = s.FirstOrDefault().a.Id,
LastModificationTime = s.FirstOrDefault().a.LastModificationTime,
LastModifierId = s.FirstOrDefault().a.LastModifierId,
ThirdInfo = s.FirstOrDefault().a.ThirdInfo,
SummaryDoctorId = s.FirstOrDefault().a.SummaryDoctorId,
SummaryDate = DataHelper.ConversionDateToString(s.FirstOrDefault().a.SummaryDate),
SexId = s.FirstOrDefault().a.SexId,
Age = s.FirstOrDefault().a.Age,
AuditDate = DataHelper.ConversionDateToString(s.FirstOrDefault().a.AuditDate),
AuditDoctorId = s.FirstOrDefault().a.AuditDoctorId,
BirthDate = DataHelper.ConversionDateToString(s.FirstOrDefault().a.BirthDate),
CompleteFlag = s.FirstOrDefault().a.CompleteFlag,
CustomerOrgGroupId = s.FirstOrDefault().a.CustomerOrgGroupId,
CustomerOrgId = s.FirstOrDefault().a.CustomerOrgId,
CustomerOrgRegisterId = s.FirstOrDefault().a.CustomerOrgRegisterId,
GuidePrintTimes = s.FirstOrDefault().a.GuidePrintTimes,
InterposeMeasure = s.FirstOrDefault().a.InterposeMeasure,
IsAudit = s.FirstOrDefault().a.IsAudit,
IsLock = s.FirstOrDefault().a.IsLock,
IsMedicalStart = s.FirstOrDefault().a.IsMedicalStart,
IsNameHide = s.FirstOrDefault().a.IsNameHide,
IsPhoneFollow = s.FirstOrDefault().a.IsPhoneFollow,
IsRecoverGuide = s.FirstOrDefault().a.IsRecoverGuide,
IsUpload = s.FirstOrDefault().a.IsUpload,
IsVip = s.FirstOrDefault().a.IsVip,
JobCardNo = s.FirstOrDefault().a.JobCardNo,
JobPost = s.FirstOrDefault().a.JobPost,
JobTitle = s.FirstOrDefault().a.JobTitle,
MaritalStatusId = s.FirstOrDefault().a.MaritalStatusId,
MedicalCardNo = s.FirstOrDefault().a.MedicalCardNo,
MedicalConclusionId = s.FirstOrDefault().a.MedicalConclusionId,
MedicalPackageId = s.FirstOrDefault().a.MedicalPackageId,
MedicalStartDate = DataHelper.ConversionDateToString(s.FirstOrDefault().a.MedicalStartDate),
MedicalTimes = s.FirstOrDefault().a.MedicalTimes,
MedicalTypeId = s.FirstOrDefault().a.MedicalTypeId,
MedicalCenterId = s.FirstOrDefault().a.MedicalCenterId,
PatientId = s.FirstOrDefault().a.PatientId,
PatientName = s.FirstOrDefault().a.PatientName,
PatientRegisterNo = s.FirstOrDefault().a.PatientRegisterNo,
PersonnelTypeId = s.FirstOrDefault().a.PersonnelTypeId,
Photo = s.FirstOrDefault().a.Photo,
Remark = s.FirstOrDefault().a.Remark,
ReportPrintTimes = s.FirstOrDefault().a.ReportPrintTimes,
Salesman = s.FirstOrDefault().a.Salesman,
SexHormoneTermId = s.FirstOrDefault().a.SexHormoneTermId,
CreatorName = _cacheService.GetSurnameAsync(s.FirstOrDefault().a.CreatorId).GetAwaiter().GetResult(),
LastModifierName = _cacheService.GetSurnameAsync(s.FirstOrDefault().a.LastModifierId).GetAwaiter().GetResult(),
Address = s.FirstOrDefault().ab.Address, //档案表信息
BirthPlaceId = s.FirstOrDefault().ab.BirthPlaceId,
DisplayName = s.FirstOrDefault().ab.DisplayName,
Email = s.FirstOrDefault().ab.Email,
IdNo = s.FirstOrDefault().ab.IdNo,
MobileTelephone = s.FirstOrDefault().ab.MobileTelephone,
NationId = s.FirstOrDefault().ab.NationId,
PatientNo = s.FirstOrDefault().ab.PatientNo,
PatientPassword = s.FirstOrDefault().ab.PatientPassword,
PostalCode = s.FirstOrDefault().ab.PostalCode,
Telephone = s.FirstOrDefault().ab.Telephone,
CustomerOrgName = _cacheService.GetCustomerOrgNameAsync(s.FirstOrDefault().a.CustomerOrgId).Result,
CustomerOrgParentId = _cacheService.GetTopCustomerOrgAsync(s.FirstOrDefault().a.CustomerOrgId).Result.Id,
CustomerOrgParentName = _cacheService.GetTopCustomerOrgNameAsync(s.FirstOrDefault().a.CustomerOrgId).Result,
MedicalPackageName = s.FirstOrDefault().a.MedicalPackageId == null ? "" : _cacheService.GetMedicalPackageAsync(s.FirstOrDefault().a.MedicalPackageId.Value).GetAwaiter().GetResult().DisplayName,
CustomerOrgGroupName = s.FirstOrDefault().a.CustomerOrgGroupId == null ? "" : _cacheService.GetCustomerOrgGroupAsync(s.FirstOrDefault().a.CustomerOrgGroupId.Value).GetAwaiter().GetResult().DisplayName,
AuditDoctorName = _cacheService.GetSurnameAsync(s.FirstOrDefault().a.AuditDoctorId).GetAwaiter().GetResult(),
SummaryDoctorName = _cacheService.GetSurnameAsync(s.FirstOrDefault().a.SummaryDoctorId).GetAwaiter().GetResult(),
PersonnelTypeName = _cacheService.GetPersonnelTypeNameAsync(s.FirstOrDefault().a.PersonnelTypeId).GetAwaiter().GetResult(),
MaritalStatusName = _cacheService.GetMaritalStatusNameAsync(s.FirstOrDefault().a.MaritalStatusId).GetAwaiter().GetResult(),
MedicalTypeName = _cacheService.GetMedicalTypeNameAsync(s.FirstOrDefault().a.MedicalTypeId).GetAwaiter().GetResult(),
SexName = _cacheService.GetSexNameAsync(s.FirstOrDefault().a.SexId).GetAwaiter().GetResult()
});
}
}
int totalCount = entlist.Count;
entlist = entlist.Skip(input.SkipCount * input.MaxResultCount).Take(input.MaxResultCount).ToList();
return new PagedResultDto<PatientRegisterOrNoDto>(totalCount, entlist);
}
/// <summary>
/// 更新
/// </summary>
/// <param name="PatientRegisterId">登记表ID</param>
/// <param name="input">更新参数(包含档案跟登记)</param>
/// <returns></returns>
[HttpPost("api/patientregister/UpdatePatientRegisterAndAsbitems")]
public async Task<PatientRegisterDto> UpdatePatientRegisterAndAsbitemsAsync(Guid PatientRegisterId, UpdatePatientRegisterDto input)
{
var patientRegisterEnt = await Repository.GetAsync(PatientRegisterId);
var patientEnt = await _patientRepository.GetAsync(patientRegisterEnt.PatientId);
var patientRegisterSourceEntity = ObjectMapper.Map<UpdatePatientRegisterDto, UpdatePatientRegisterArg>(input);
var patientSourceEntity = ObjectMapper.Map<UpdatePatientRegisterDto, Patient>(input);
patientSourceEntity.DisplayName = input.PatientName;
await _patientManager.UpdateAsync(patientSourceEntity, patientEnt);
await _manager.UpdateAsync(patientRegisterSourceEntity, patientRegisterEnt);
await _patientRepository.UpdateAsync(patientEnt);
patientRegisterEnt = await Repository.UpdateAsync(patientRegisterEnt);
return ObjectMapper.Map<PatientRegister, PatientRegisterDto>(patientRegisterEnt);
}
/// <summary>
/// 修改人员照片
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<PatientRegisterDto> UpdatePhotoAsync(UpdatePhotoDto input)
{
var ent = await _repository.GetAsync(input.PatientRegisterId);
if (ent != null)
{
ent.Photo = input.Photo;
var newent = await _repository.UpdateAsync(ent);
return ObjectMapper.Map<PatientRegister, PatientRegisterDto>(newent);
}
else
{
return new PatientRegisterDto();
}
}
///// <summary>
///// 修改人员照片 二进制
///// </summary>
///// <param name="input"></param>
///// <returns></returns>
//[HttpPost]
//public async Task<PatientRegisterDto> UpdatePhoto2Async(UpdatePhoto2Dto input)
//{
// var ent = await _repository.GetAsync(input.PatientRegisterId);
// if (ent != null)
// {
// ent.Photo = input.Photo;
// var newent = await _repository.UpdateAsync(ent);
// return ObjectMapper.Map<PatientRegister, PatientRegisterDto>(newent);
// }
// else
// {
// return new PatientRegisterDto();
// }
//}
//
/// <summary>
/// 上传图片 手动拼接"http://81.70.217.145/"
/// </summary>
/// <returns></returns>
public string UpLoadImg(UpdatePhotoDto input)
{
//_logger.LogInformation(input.Photo);
string imgurl = $"photo/{DateTime.Now.Year}/{DateTime.Now.Month}/{DateTime.Now.Day}/{input.PatientRegisterId}";
var isupload = ImageHelper.Base64StrToImage(input.Photo, imgurl);
if (!string.IsNullOrEmpty(isupload))
return isupload;
else
return "";
}
/// <summary>
/// 删除
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost("api/app/PatientRegister/DeleteById")]
public async Task DeleteByIdAsync(PatientRegisterIdInputDto input)
{
if (input == null)
{
throw new UserFriendlyException("input参数不能为空");
}
await _manager.CheckAndDeleteAsync(input.PatientRegisterId);
}
/// <summary>
/// 批量删除
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task DeleteManyAsync(DeletePatientRegisterManyDto input)
{
if (input.PatientRegisterIds.Count > 0)
{
var entlist = await _repository.GetListAsync(m => input.PatientRegisterIds.Contains(m.Id));
if (entlist.Count > 0)
{
foreach (var ent in entlist)
{
await _manager.CheckAndDeleteAsync(ent.Id);
}
}
}
else
{
throw new UserFriendlyException($"无可删除数据");
}
}
/// <summary>
/// 人员签到 批量
/// </summary>
/// <param name="PatientRegisterIds">登记表ID集合</param>
/// <returns></returns>
[HttpPost("api/app/patientregister/updatesigninmany")]
public async Task<List<PatientRegisterDto>> UpdateSignInManyAsync(List<Guid> PatientRegisterIds)
{
List<PatientRegisterDto> msg = new List<PatientRegisterDto>();
if (!PatientRegisterIds.Any())
throw new UserFriendlyException($"请求参数有误");
foreach (var PatientRegisterId in PatientRegisterIds)
{
var entity = await Repository.FindAsync(f => f.Id == PatientRegisterId && f.IsMedicalStart != 'Y');
if (entity != null)
{
entity.IsMedicalStart = 'Y';
entity.MedicalStartDate = DateTime.Now;
var newentity = await Repository.UpdateAsync(entity);
msg.Add(ObjectMapper.Map<PatientRegister, PatientRegisterDto>(newentity));
}
}
return msg;
}
/// <summary>
/// 批量回收表格,暂时不加是否签到跟是否做完体检的判断
/// </summary>
/// <param name="PatientRegisterIds"></param>
/// <returns></returns>
[HttpPost("api/app/patientregister/updaterecoverguidemany")]
public async Task<List<PatientRegisterDto>> UpdateRecoverGuideManyAsync(List<Guid> PatientRegisterIds)
{
List<PatientRegisterDto> msg = new List<PatientRegisterDto>();
if (!PatientRegisterIds.Any())
throw new UserFriendlyException($"请求参数有误");
foreach (var PatientRegisterId in PatientRegisterIds)
{
var newentity = await _manager.UpdateRecoverGuideAsync(PatientRegisterId);
msg.Add(ObjectMapper.Map<PatientRegister, PatientRegisterDto>(newentity));
}
return msg;
}
/// <summary>
/// 批量回收指引单 多功能
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
[HttpPost("api/app/PatientRegister/BatchRecoverGuide")]
public async Task BatchRecoverGuideAsync(BatchRecoverGuideInputDto input)
{
if (!input.Barcodes.Any())
throw new UserFriendlyException("条码号不能为空");
foreach (var barcode in input.Barcodes)
{
PatientRegister patientRegisterEntity;
if (input.RecoverType == '0')
{
patientRegisterEntity = await _repository.FirstOrDefaultAsync(f => f.PatientRegisterNo == barcode);
}
else
{
patientRegisterEntity = (from patientRegister in await _repository.GetQueryableAsync()
join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id
where patient.PatientNo == barcode
orderby patientRegister.MedicalStartDate descending
select patientRegister).FirstOrDefault();
}
if (patientRegisterEntity != null)
{
patientRegisterEntity.IsRecoverGuide = input.IsRecoverGuide;
await _repository.UpdateAsync(patientRegisterEntity);
}
}
}
/// <summary>
/// 批量回收指引单 根据条码号
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
[HttpPost("api/app/PatientRegister/BatchRecoverGuideByPatientRegisterNo")]
public async Task BatchRecoverGuideByPatientRegisterNoAsync(BatchRecoverGuideByPatientRegisterNoInputDto input)
{
if (!input.PatientRegisterNos.Any())
throw new UserFriendlyException("条码号不能为空");
foreach (var patientRegisterNo in input.PatientRegisterNos)
{
var patientRegister = await _repository.FirstOrDefaultAsync(f => f.PatientRegisterNo == patientRegisterNo);
await _patientRegisterManager.BatchRecoverGuideByPatientRegisterNoAsync(patientRegister);
}
}
///// <summary>
///// 人员签到
///// </summary>
///// <param name="PatientRegisterId">登记表ID</param>
///// <returns></returns>
//public async Task<PatientRegisterDto> UpdateSignIn(Guid PatientRegisterId)
//{
// var entity = await Repository.GetAsync(PatientRegisterId);
// if (entity == null)
// {
// throw new UserFriendlyException($"最后一次体检还未结束,不能新开,请结束最后一次体检");
// }
// else
// {
// entity.IsMedicalStart = 'N';
// entity.MedicalStartDate = DateOnly.FromDateTime(DateTime.Now);
// var newentity = await Repository.UpdateAsync(entity);
// return ObjectMapper.Map<PatientRegister, PatientRegisterDto>(newentity);
// }
//}
///// <summary>
///// 回收表格,暂时不加是否签到跟是否做完体检的判断
///// </summary>
///// <param name="PatientRegisterId"></param>
///// <returns></returns>
//public async Task<PatientRegisterDto> UpdateRecoverGuideAsync(Guid PatientRegisterId)
//{
// var entity = await _manager.UpdateRecoverGuideAsync(PatientRegisterId);
// return ObjectMapper.Map<PatientRegister, PatientRegisterDto>(entity);
//}
/// <summary>
/// 修改人员锁定状态
/// </summary>
/// <param name="PatientRegisterId">人员登记ID</param>
/// <param name="IsLock">是否锁住(Y N)</param>
/// <returns></returns>
public async Task<PatientRegisterDto> UpdatePatientRegisterIsLockAsync(Guid PatientRegisterId, char IsLock)
{
PatientRegisterDto msg = new PatientRegisterDto();
var ent = await _repository.GetAsync(PatientRegisterId);
if (ent != null)
{
ent.IsLock = IsLock;
var newent = await _repository.UpdateAsync(ent);
msg = ObjectMapper.Map<PatientRegister, PatientRegisterDto>(newent);
}
return msg;
}
/// <summary>
/// 更改总检审核医生信息(保存时,医生跟日期不传时取默认登录的用户跟当前时间;取消时,如果不传就不更新医生跟日期,只更新状态)
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/patientregister/updatepatientregisterauditordoctor")]
public async Task<PatientRegisterDto> UpdatePatientRegisterAuditorDoctorAsync(UpdatePatientRegisterAuditorDoctorDto input)
{
if (input == null || input.PatientRegisterId == Guid.Empty)
{
throw new UserFriendlyException("请求参数有误");
}
var entity = await _repository.GetAsync(input.PatientRegisterId);
var entitydto = ObjectMapper.Map<UpdatePatientRegisterAuditorDoctorDto, PatientRegister>(input);
var newentity = await _manager.UpdatePatientRegisterAuditorDoctorAsync(entitydto, entity);
#region 推送人寿体检完成状态
if (!string.IsNullOrWhiteSpace(entity.ThirdBookingId)
&& input.IsAudit == 'Y')
{
try
{
await _thirdBookingPushAppService.PushCompletePhysicalAsync(new PatientRegisterIdInputDto { PatientRegisterId = entity.Id });
}
catch (Exception ex)
{
_logger.LogError($"推送人寿完成体检=》{ex.Message}");
}
}
#endregion
return ObjectMapper.Map<PatientRegister, PatientRegisterDto>(newentity);
}
/// <summary>
/// 取消总检
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/patientregister/CancelSumCheck")]
public async Task<PatientRegisterDto> CancelSumCheckAsync(PatientRegisterIdInputDto input)
{
if (input == null || input.PatientRegisterId == Guid.Empty)
{
throw new UserFriendlyException("请求参数有误");
}
var entity = await _repository.GetAsync(input.PatientRegisterId);
if (entity.CompleteFlag != PatientRegisterCompleteFlag.SumCheck)
{
throw new UserFriendlyException("没有总检,无需取消总检");
}
if (entity.IsAudit == 'Y')
{
throw new UserFriendlyException("已审核,请先取消审核");
}
var isSummaryCheckOnlySelfCanCancel = await _sysParmValueManager.GetSysParmValueAsync(entity.MedicalCenterId, "summary_check_only_self_can_cancel");
if (isSummaryCheckOnlySelfCanCancel == "Y")
{
if (entity.SummaryDoctorId != CurrentUser.Id)
{
throw new UserFriendlyException("只有本人才能取消总检");
}
}
#region 如果所有检查都没有做 改为正式登记
var checkedCount = await _registerCheckRepository.CountAsync(c => c.PatientRegisterId == input.PatientRegisterId && c.CompleteFlag == RegisterCheckCompleteFlag.Checked);
if (checkedCount == 0)
{
entity.CompleteFlag = PatientRegisterCompleteFlag.Registration;
}
else
{
entity.CompleteFlag = PatientRegisterCompleteFlag.PartCheck;
}
#endregion
var cancelClearManAndDate = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "cancel_clear_manAndDate");
if (string.IsNullOrWhiteSpace(cancelClearManAndDate))
{
cancelClearManAndDate = "N";
}
if (cancelClearManAndDate == "Y")
{
entity.SummaryDate = null;
}
var newentity = await _repository.UpdateAsync(entity);
return ObjectMapper.Map<PatientRegister, PatientRegisterDto>(newentity);
}
/// <summary>
/// 更新病人总检综述建议 总检医生诊台保存
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
[HttpPost("api/app/patientregister/UpdatePatientRegisterSummarySuggestion")]
public async Task<PatientRegisterDto> UpdatePatientRegisterSummarySuggestionAsync(UpdatePatientRegisterSummarySuggestionDto input)
{
if (input == null || input.PatientRegisterId == Guid.Empty)
{
throw new UserFriendlyException("请求参数有误");
}
if (!input.SumSuggestions.Any())
throw new UserFriendlyException("请完善总检建议");
//更新总检
var entity = await _repository.GetAsync(input.PatientRegisterId);
var entitydto = ObjectMapper.Map<UpdatePatientRegisterSummarySuggestionDto, PatientRegister>(input);
var newentity = await _manager.UpdatePatientRegisterSummaryDoctorAsync(entitydto, entity);
//删除综述题头时通过级联关系删除相应的综述内容
await _sumSummaryHeaderRepository.DeleteAsync(m => m.PatientRegisterId == input.PatientRegisterId, true);
//先删除建议内容
await _sumSuggestionHeaderRepository.DeleteAsync(m => m.PatientRegisterId == input.PatientRegisterId, true);
//删除对应的诊断数据
await _sumDiagnosisRepository.DeleteAsync(m => m.PatientRegisterId == input.PatientRegisterId, true);
//更新综述
if (input.SumSummarys != null && input.SumSummarys.Any())
{
foreach (var item in input.SumSummarys)
{
#region 插入SumSummaryHeader
SumSummaryHeader sumSummaryHeaderEnt = _sumSummaryHeaderManager.CreateAsync(patientRegisterId: input.PatientRegisterId,
summaryTitle: item.SummaryTitle,
summaryFlag: null,
displayOrder: input.SumSummarys.IndexOf(item) + 1);
var sumSummaryHeaderEnt_New = await _sumSummaryHeaderRepository.InsertAsync(sumSummaryHeaderEnt, true);
if (sumSummaryHeaderEnt_New != null)
{
#region 插入SumSummaryContent
List<SumSummaryContent> sumSummaryContentList = new List<SumSummaryContent>();
foreach (var item2 in item.Details)
{
SumSummaryContent sumSummaryContentEnt = _sumSummaryContentManager.CreateAsync(sumSummaryHeaderId: sumSummaryHeaderEnt_New.Id,
summaryContent: item2.SummaryContent,
displayOrder: item.Details.IndexOf(item2) + 1);
sumSummaryContentList.Add(sumSummaryContentEnt);
}
await _sumSummaryContentRepository.InsertManyAsync(sumSummaryContentList);
#endregion
}
#endregion
}
}
//更新建议和诊断
if (input.SumSuggestions != null && input.SumSuggestions.Any())
{
//判断有没有重复诊断
List<Guid> diagnosisList = new List<Guid>();
foreach (var item in input.SumSuggestions)
{
if (item.DiagnosisIds != null)
{
diagnosisList.AddRange(item.DiagnosisIds);
}
}
if (diagnosisList.Count() != diagnosisList.Distinct().Count())
{
throw new UserFriendlyException("不允许有重复诊断");
}
foreach (var item in input.SumSuggestions)
{
#region 插入SumSuggestionHeader
SumSuggestionHeader sumSuggestionHeaderEnt = _sumSuggestionHeaderManager.CreateAsync(patientRegisterId: input.PatientRegisterId,
suggestionTitle: item.SuggestionTitle,
suggestionFlag: null,
displayOrder: input.SumSuggestions.IndexOf(item) + 1);
var sumSuggestionHeaderEnt_New = await _sumSuggestionHeaderRepository.InsertAsync(sumSuggestionHeaderEnt, true);
if (sumSuggestionHeaderEnt_New != null)
{
#region 插入SumDiagnosis
if (item.DiagnosisIds != null && item.DiagnosisIds.Any())
{
foreach (var diagnosisId in item.DiagnosisIds)
{
#region 校验诊断性别
var diagnosisEnt = await _diagnosisRepository.FirstOrDefaultAsync(f => f.Id == diagnosisId);
if (diagnosisEnt == null)
throw new UserFriendlyException("诊断不存在");
if (diagnosisEnt.ForSexId != ForSexFlag.All
&& entity.SexId != SexFlag.UnKnown
&& diagnosisEnt.ForSexId != entity.SexId)
{
throw new UserFriendlyException($"诊断:{diagnosisEnt.DisplayName}与性别不符");
}
#endregion
SumDiagnosis sumDiagnosis = new SumDiagnosis
{
DiagnosisId = diagnosisId,
DisplayOrder = item.DiagnosisIds.IndexOf(diagnosisId) + 1,
PatientRegisterId = input.PatientRegisterId,
SumSuggestionHeaderId = sumSuggestionHeaderEnt_New.Id
};
await _sumDiagnosisRepository.InsertAsync(sumDiagnosis);
}
}
#endregion
#region 插入SumSuggestionContent
List<SumSuggestionContent> sumSuggestionContentList = new List<SumSuggestionContent>();
if (item.MedicalInterpretations != null)
{
foreach (var item2 in item.MedicalInterpretations)
{
SumSuggestionContent sumSuggestionContentEnt = _sumSuggestionContentManager.CreateAsync(sumSuggestionHeaderId: sumSuggestionHeaderEnt_New.Id,
suggestionContent: item2.SuggestionContent,
suggestionType: SuggestionTypeFlag.MedicalInterpretation,
displayOrder: item.MedicalInterpretations.IndexOf(item2) + 1);
sumSuggestionContentList.Add(sumSuggestionContentEnt);
}
}
if (item.CommonReasons != null)
{
foreach (var item2 in item.CommonReasons)
{
SumSuggestionContent sumSuggestionContentEnt = _sumSuggestionContentManager.CreateAsync(sumSuggestionHeaderId: sumSuggestionHeaderEnt_New.Id,
suggestionContent: item2.SuggestionContent,
suggestionType: SuggestionTypeFlag.CommonReasons,
displayOrder: item.CommonReasons.IndexOf(item2) + 1);
sumSuggestionContentList.Add(sumSuggestionContentEnt);
}
}
if (item.HealthGuidances != null)
{
foreach (var item2 in item.HealthGuidances)
{
SumSuggestionContent sumSuggestionContentEnt = _sumSuggestionContentManager.CreateAsync(sumSuggestionHeaderId: sumSuggestionHeaderEnt_New.Id,
suggestionContent: item2.SuggestionContent,
suggestionType: SuggestionTypeFlag.HealthGuidance,
displayOrder: item.HealthGuidances.IndexOf(item2) + 1);
sumSuggestionContentList.Add(sumSuggestionContentEnt);
}
}
await _sumSuggestionContentRepository.InsertManyAsync(sumSuggestionContentList);
#endregion
}
#endregion
}
}
return ObjectMapper.Map<PatientRegister, PatientRegisterDto>(newentity);
}
/// <summary>
/// 批量修改指引单打印次数 原有基础上加1
/// </summary>
/// <param name="Ids"></param>
/// <returns></returns>
[HttpPost("api/app/patientregister/updatepatientregisterguideprinttimesmany")]
public async Task UpdatePatientRegisterGuidePrintTimesManyAsync(List<Guid> Ids)
{
var entlist = await _repository.GetListAsync(m => Ids.Contains(m.Id));
entlist.ForEach(f => f.GuidePrintTimes = (short)(f.GuidePrintTimes + 1));
}
/// <summary>
/// 批量修改体检报告打印次数 原有基础上加1
/// </summary>
/// <param name="Ids"></param>
/// <returns></returns>
[HttpPost("api/app/patientregister/updatepatientregisterreportprinttimesmany")]
public async Task UpdatePatientRegisterReportPrintTimesManyAsync(List<Guid> Ids)
{
var entlist = await _repository.GetListAsync(m => Ids.Contains(m.Id));
if (entlist.Any())
{
foreach (var item in entlist)
{
item.ReportPrintTimes = (short)(item.ReportPrintTimes + 1);
if (_currentUser.Id != null)
item.ReportPrintOperating = _currentUser.Id;
}
await _repository.UpdateManyAsync(entlist);
}
}
/// <summary>
/// 导入体检名单操作
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
[HttpPost("api/app/patientregister/CreatePatientRegisterFromExcel")]
public async Task CreatePatientRegisterFromExcelAsync(CreatePatientRegisterExcelRequestDto input)
{
if (input == null)
{
throw new UserFriendlyException("input参数不能为空");
}
if (string.IsNullOrWhiteSpace(input.PatientName))
{
throw new UserFriendlyException("姓名不能为空");
}
if (!string.IsNullOrWhiteSpace(input.IdNo))
{
input.IdNo = input.IdNo.Trim();
var idInfo = DataHelper.AutoIDCard(input.IdNo);
if (idInfo != null)
{
if (input.Age == null)
{
input.Age = idInfo.Age;
}
if (string.IsNullOrWhiteSpace(input.BirthDate))
{
input.BirthDate = idInfo.BirthDate;
}
if (string.IsNullOrWhiteSpace(input.SexName))
{
input.SexName = idInfo.SexId == 'M' ? "男" : "女";
}
}
}
#region 转换职业病信息
Guid ocCheckTypeId = Guid.Empty;
List<Guid> poisonIds = new List<Guid>();
if (input.IsOccupationalDisease == 'Y')
{
if (string.IsNullOrWhiteSpace(input.OcCheckTypeName))
{
throw new UserFriendlyException("职业病检查类别不能为空");
}
if (string.IsNullOrWhiteSpace(input.JobType))
{
throw new UserFriendlyException("职业病工种不能为空");
}
if (!input.Poisons.Any())
{
throw new UserFriendlyException("职业病毒害因素不能为空");
}
#region 职业病检查类别
var ocCheckTypeEnt = await _ocCheckTypeRepository.FirstOrDefaultAsync(f => f.DisplayName == input.OcCheckTypeName);
if (ocCheckTypeEnt == null)
{
throw new UserFriendlyException($"职业病检查类别{input.OcCheckTypeName}名称不正确");
}
ocCheckTypeId = ocCheckTypeEnt.Id;
#endregion
#region 职业病毒害因素
foreach (var poisonItem in input.Poisons)
{
if (string.IsNullOrWhiteSpace(poisonItem))
throw new UserFriendlyException($"职业病毒害因素{poisonItem}不能为空");
var poisonEnt = await _poisonRepository.FirstOrDefaultAsync(f => f.DisplayName == poisonItem);
if (poisonEnt == null)
{
throw new UserFriendlyException($"职业病毒害因素{poisonItem}名称不正确");
}
if (!poisonIds.Contains(poisonEnt.Id))
{
poisonIds.Add(poisonEnt.Id);
}
}
#endregion
}
Guid? medicalTypeId;
if (input.IsDefaultMedicalType == 'Y' && input.IsOccupationalDisease == 'Y')
{
//人员登记检查类别
var systemMedicalTypeId = await _sysParmValueManager.GetSysParmValueAsync(input.MedicalCenterId, "patient_register_occ_check_id");
if (string.IsNullOrWhiteSpace(systemMedicalTypeId))
throw new UserFriendlyException("系统参数中未配置职业病检查的体检类别ID");
medicalTypeId = Guid.Parse(systemMedicalTypeId);
}
else
{
medicalTypeId = await GetMedicalTypeIdByName(input.MedicalTypeName);
}
#endregion
//设置人员信息
Patient patient = null;
Patient updatePatientEntity = new Patient()
{
MedicalCenterId = input.MedicalCenterId,
DisplayName = input.PatientName,
MaritalStatusId = await GetMaritalStatusIdByName(input.MaritalStatusName),
Address = input.Address,
BirthDate = GetBirthDateByString(input.BirthDate),
BirthPlaceId = await GetBirthPlaceIdByName(input.BirthPlaceName),
Email = input.Email,
IdNo = input.IdNo,
MobileTelephone = input.MobileTelephone,
NationId = await GetNationIdByName(input.NationName),
PostalCode = input.PostalCode,
SexId = await GetSexIdByName(input.SexName),
Telephone = input.Telephone
};
if (!string.IsNullOrWhiteSpace(input.IdNo))
{
var patientList = await _patientRepository.GetListAsync(o => o.IdNo == input.IdNo);
if (patientList.Count > 0)
{
if (patientList.Where(m => m.DisplayName == input.PatientName).Count() == 0)
throw new UserFriendlyException("系统中已有该身份证号的不同姓名人员");
else
{
//patientList = patientList.Where(m => m.DisplayName == input.PatientName).ToList();
//if (patientList.Count > 1)
//{
// var tPatientRegisterList = await _repository.GetListAsync(m => patientList.Select(s => s.Id).Contains(m.PatientId));
// if (tPatientRegisterList.Count > 0)
// {
// patient = patientList.FirstOrDefault(f => f.Id == tPatientRegisterList.OrderByDescending(o => o.MedicalTimes).Select(s => s.PatientId).FirstOrDefault());
// }
// else
// {
// patient = patientList.FirstOrDefault(f => f.DisplayName == input.PatientName);
// }
//}
//else
//{
// patient = patientList.FirstOrDefault(f => f.DisplayName == input.PatientName);
//}
if (patientList.Count > 1)
{
var tPatientRegisterList = await _repository.GetListAsync(m => patientList.Select(s => s.Id).Contains(m.PatientId));
if (tPatientRegisterList.Count > 0)
{
patient = patientList.FirstOrDefault(f => f.Id == tPatientRegisterList.OrderByDescending(o => o.MedicalTimes).Select(s => s.PatientId).FirstOrDefault());
if (patient.DisplayName != input.PatientName)
{
throw new UserFriendlyException("最后一次体检的姓名跟当前导入的不一致");
}
}
else
{
patient = patientList.FirstOrDefault(f => f.DisplayName == input.PatientName);
if (patient == null)
{
patient = patientList.FirstOrDefault();
}
}
}
else
{
patient = patientList.FirstOrDefault();
}
}
}
}
if (!string.IsNullOrWhiteSpace(input.PatientNo))
{
patient = await _patientRepository.FirstOrDefaultAsync(o => o.PatientNo == input.PatientNo);
if (patient.DisplayName != input.PatientName)
{
throw new UserFriendlyException("系统中已有该档案号的不同姓名人员");
}
}
if (patient == null)
{
patient = await _patientManager.CreateAsync(updatePatientEntity);
await _patientRepository.InsertAsync(patient, true);
}
else
{
Patient newUpdatePatientEntity = patient;
#region 有档案时,导入的信息空的情况,使用档案的信息
if (!string.IsNullOrWhiteSpace(input.PatientName))
{
newUpdatePatientEntity.DisplayName = input.PatientName;
}
if (!string.IsNullOrWhiteSpace(input.MaritalStatusName))
{
newUpdatePatientEntity.MaritalStatusId = await GetMaritalStatusIdByName(input.MaritalStatusName);
}
if (!string.IsNullOrWhiteSpace(input.Address))
{
newUpdatePatientEntity.Address = input.Address;
}
if (!string.IsNullOrWhiteSpace(input.BirthDate))
{
newUpdatePatientEntity.BirthDate = GetBirthDateByString(input.BirthDate);
}
if (!string.IsNullOrWhiteSpace(input.BirthPlaceName))
{
newUpdatePatientEntity.BirthPlaceId = await GetBirthPlaceIdByName(input.BirthPlaceName);
}
if (!string.IsNullOrWhiteSpace(input.Email))
{
newUpdatePatientEntity.Email = input.Email;
}
if (!string.IsNullOrWhiteSpace(input.IdNo))
{
newUpdatePatientEntity.IdNo = input.IdNo;
}
if (!string.IsNullOrWhiteSpace(input.MobileTelephone))
{
newUpdatePatientEntity.MobileTelephone = input.MobileTelephone;
}
if (!string.IsNullOrWhiteSpace(input.NationName))
{
newUpdatePatientEntity.NationId = await GetNationIdByName(input.NationName);
}
if (!string.IsNullOrWhiteSpace(input.PostalCode))
{
newUpdatePatientEntity.PostalCode = input.PostalCode;
}
if (!string.IsNullOrWhiteSpace(input.Telephone))
{
newUpdatePatientEntity.Telephone = input.Telephone;
}
if (!string.IsNullOrWhiteSpace(input.SexName))
{
newUpdatePatientEntity.SexId = await GetSexIdByName(input.SexName);
}
#endregion
if (newUpdatePatientEntity != patient)
{
await _patientManager.UpdateAsync(newUpdatePatientEntity, patient);
await _patientRepository.UpdateAsync(patient, true);
}
}
Guid? customerOrgId = await GetCustomerOrgIdByName(input.CustomerOrgId, input.DepartmentName, input.IsAutoCreateDepartment);
if (customerOrgId == null)
{
customerOrgId = input.CustomerOrgId;
}
Guid? customerOrgGroupId = await GetCustomerOrgGroupIdByName(input.CustomerOrgRegisterId, input.CustomerOrgGroupName);
//创建人员登记信息
var createPatientRegisterArg = new CreatePatientRegisterArg()
{
Age = input.Age,
BirthDate = updatePatientEntity.BirthDate,
CompleteFlag = input.CompleteFlag,
CustomerOrgGroupId = customerOrgGroupId,
CustomerOrgId = (Guid)customerOrgId,
CustomerOrgRegisterId = input.CustomerOrgRegisterId,
IsNameHide = 'N',
IsVip = 'N',
JobCardNo = input.JobCardNo,
JobPost = input.JobPost,
JobTitle = input.JobTitle,
MaritalStatusId = updatePatientEntity.MaritalStatusId,
MedicalCardNo = input.MedicalCardNo,
MedicalPackageId = null,
MedicalTypeId = medicalTypeId,
MedicalCenterId = input.MedicalCenterId,
PatientId = patient.Id,
PatientName = input.PatientName,
PersonnelTypeId = await GetPersonnelTypeIdByName(input.PersonnelTypeName),
Remark = input.Remark,
Salesman = input.Salesman,
SexId = updatePatientEntity.SexId,
ThirdInfo = input.ThirdInfo
};
PatientRegister patientRegister = null;
CreateRegisterCheckAsbitemEntity createRegisterCheckAsbitemEntity = null;
patientRegister = await _manager.CreateAsync(createPatientRegisterArg);
#region 人寿的信息生成一个预约ID
var thirdBookingInterface = await _thirdInterfaceRepository.FirstOrDefaultAsync(o => o.ThirdInterfaceType ==
ThirdInterfaceTypeFlag.ThirdBooking);
if (thirdBookingInterface != null && thirdBookingInterface.IsActive == 'Y')
{
var parmValue = thirdBookingInterface.ParmValue;
var configurationBuilder = new ConfigurationBuilder()
.AddJsonStream(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(parmValue)));
var interfaceConfig = configurationBuilder.Build();
var customerOrgRegisterId = interfaceConfig.GetSection("Interface").GetSection("CustomerOrgRegisterId").Value;
if (customerOrgRegisterId == input.CustomerOrgRegisterId.ToString())
{
var thirdBookingEnt = await _thirdBookingRepository.FirstOrDefaultAsync(f => f.PatientName == input.PatientName
&& f.IdNo == input.IdNo
&& (f.Phone == input.MobileTelephone || f.Phone == input.Telephone)
&& f.MedicalStatus != '3');
if (thirdBookingEnt != null)
{
patientRegister.ThirdBookingId = thirdBookingEnt.Id.ToString();
}
else
{
throw new UserFriendlyException("该人员未预约,请先预约");
}
}
}
#endregion
if (customerOrgGroupId != null)
await _patientRegisterManager.SetCustomerOrgGroupId(patientRegister, (Guid)customerOrgGroupId);
await _repository.InsertAsync(patientRegister, true);
List<RegisterCheckAsbitem> registerAsbitems = new List<RegisterCheckAsbitem>();
//设置分组有关组合项目
if (customerOrgGroupId != null)
{
registerAsbitems = (await _customerOrgGroupDetailRepository.GetQueryableAsync()).Include(x => x.Asbitem)
.Where(m => m.CustomerOrgGroupId == customerOrgGroupId)
.Select(s => new RegisterCheckAsbitem
{
Amount = s.Amount,
AsbitemId = s.AsbitemId,
ChargePrice = s.Price,
IsCharge = 'N',
PatientRegisterId = patientRegister.Id,
PayTypeFlag = PayTypeFlag.OrgPay,
StandardPrice = s.Asbitem.Price
}).ToList();
}
#region 职业病业务 检索职业病对应的项目
if (input.IsOccupationalDisease == 'Y')
{
//var ocCheckTypeDetailList = await _ocCheckTypeDetailRepository.GetListAsync(f => f.OcCheckTypeId == ocCheckTypeId && poisonIds.Contains(f.PoisonId));
var ocCheckTypeDetailList = from ocCheckTypeDetail in await _ocCheckTypeDetailRepository.GetQueryableAsync()
join asbitem in await _asbitemRepository.GetQueryableAsync() on ocCheckTypeDetail.AsbitemId equals asbitem.Id
where ocCheckTypeDetail.OcCheckTypeId == ocCheckTypeId && poisonIds.Contains(ocCheckTypeDetail.PoisonId)
select new
{
Amount = ocCheckTypeDetail.Amount,
AsbitemId = ocCheckTypeDetail.AsbitemId,
ChargePrice = ocCheckTypeDetail.Price,
StandardPrice = asbitem.Price
};
foreach (var item in ocCheckTypeDetailList)
{
if (registerAsbitems.Where(m => m.AsbitemId == item.AsbitemId).Count() == 0)
{
registerAsbitems.Add(new RegisterCheckAsbitem
{
Amount = item.Amount,
AsbitemId = item.AsbitemId,
ChargePrice = item.ChargePrice,
IsCharge = 'N',
PatientRegisterId = patientRegister.Id,
PayTypeFlag = PayTypeFlag.OrgPay,
StandardPrice = item.StandardPrice
});
}
}
}
#endregion
if (registerAsbitems.Any())
{
createRegisterCheckAsbitemEntity = await _registerAsbitemManager.UpdateManyAsync(patientRegister, registerAsbitems);
if (createRegisterCheckAsbitemEntity != null)
{
await UpdateRegisterChecks(createRegisterCheckAsbitemEntity);
}
}
#region 增加职业病信息
if (input.IsOccupationalDisease == 'Y')
{
//基础信息
var patientOccupationalDiseaseEnt = new PatientOccupationalDisease
{
JobType = input.JobType,
OcCheckTypeId = ocCheckTypeId,
RiskFactors = string.Join(",", input.Poisons),
PatientRegisterId = patientRegister.Id,
DrinkFlag = '0',
SmokeFlag = '0',
FamilyGeneticHistory = "无",
Other = "无"
};
patientOccupationalDiseaseEnt = _patientOccupationalDiseaseManager.CreateAsync(patientOccupationalDiseaseEnt);
await _patientOccupationalDiseaseRepository.InsertAsync(patientOccupationalDiseaseEnt);
//毒害因素
List<PatientPoison> patientPoisons = new List<PatientPoison>();
foreach (var poisonId in poisonIds)
{
var patientPoisonEnt = new PatientPoison
{
PatientRegisterId = patientRegister.Id,
PoisonId = poisonId
};
patientPoisonEnt = _patientPoisonManager.CreateAsync(patientPoisonEnt);
patientPoisons.Add(patientPoisonEnt);
}
await _patientPoisonRepository.InsertManyAsync(patientPoisons);
}
#endregion
await CurrentUnitOfWork.SaveChangesAsync();
}
/// <summary>
/// 导入人员信息从第三方接口(青藏铁路接口)
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
[HttpPost("api/app/patientregister/CreatePatientRegisterFromCustomerOrgInterface")]
public async Task<ImportPatientRegisterByCustomerOrgRegisterIdDto> CreatePatientRegisterFromCustomerOrgInterfaceAsync(CustomerOrgRegisterIdInputDto input)
{
if (input == null)
{
throw new UserFriendlyException("input参数不能为空");
}
var thirdInterfaces = await _thirdInterfaceRepository.GetListAsync(o => o.ThirdInterfaceType == ThirdInterfaceTypeFlag.ImportPatientRegister);
foreach (var thirdInterface in thirdInterfaces)
{
if (thirdInterface.IsActive != 'Y')
{
continue;
}
var parmValue = thirdInterface.ParmValue;
var configurationBuilder = new ConfigurationBuilder()
.AddJsonStream(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(parmValue)));
var config = configurationBuilder.Build();
var customerOrgIdStr = config.GetSection("Interface").GetSection("CustomerOrgId").Value;
if (!Guid.TryParse(customerOrgIdStr, out var customerOrgId))
{
throw new UserFriendlyException("接口配置中的CustomerOrgId无法解析成GUID");
}
var customerOrgRegister = (await _customerOrgRegisterRepository.GetQueryableAsync())
.Where(o => o.Id == input.CustomerOrgRegisterId).First();
if (customerOrgRegister.CustomerOrgId != customerOrgId)
{
continue;
}
object[] objects = [input.CustomerOrgRegisterId];
var assemblyName = config.GetSection("Interface").GetSection("AssemblyName").Value;
var className = config.GetSection("Interface").GetSection("ClassName").Value;
var pluginsOut = await Utilities.ReflectionHelper.InvokeAsync<ImportPatientRegisterByCustomerOrgRegisterIdDto>(assemblyName,
className, [thirdInterface.Id], "ImportPatientRegisterByCustomerOrgRegisterIdAsync", objects);
return pluginsOut;
}
return null;
}
/// <summary>
/// 按全部数据查重名数据
/// </summary>
/// <param name="getSameNamePatientInputDto"></param>
/// <returns></returns>
[HttpPost("api/app/patientregister/GetSameNamePatient")]
public async Task<List<GetSameNamePatientDto>> GetSameNamePatientAsync(GetSameNamePatientInputDto getSameNamePatientInputDto)
{
var patientQuery = await _patientRepository.GetQueryableAsync();
var patientRegisterQuery = await Repository.GetQueryableAsync();
var customerOrgQuery = await _customerOrgRepository.GetQueryableAsync();
var topCustomerOrgQuery = await _customerOrgRepository.GetQueryableAsync();
var result = (from patient in patientQuery
join patientRegister in patientRegisterQuery
on patient.Id equals patientRegister.PatientId
where patient.DisplayName == getSameNamePatientInputDto.Name
select new
{
PatientName = patient.DisplayName,
PatientNo = patient.PatientNo,
SexId = patient.SexId,
NationId = patient.NationId,
BirthDate = patient.BirthDate,
IdNo = patient.IdNo,
PostalCode = patient.PostalCode,
Email = patient.Email,
Telephone = patient.Telephone,
MobileTelephone = patient.MobileTelephone,
Address = patient.Address,
CustomerOrgId = patientRegister.CustomerOrgId,
MedicalStartDate = patientRegister.MedicalStartDate,
CustomerOrgGroupId = patientRegister.CustomerOrgGroupId,
MedicalPackageId = patientRegister.MedicalPackageId
}).Distinct().ToList();
var getSameNamePatientDtos = new List<GetSameNamePatientDto>();
var patientGroup = result.GroupBy(g => g.PatientNo);
foreach (var itemPatient in patientGroup)
{
var item = itemPatient.OrderByDescending(o => o.MedicalStartDate).FirstOrDefault();
getSameNamePatientDtos.Add(new GetSameNamePatientDto()
{
PatientName = item.PatientName,
PatientNo = item.PatientNo,
SexName = _cacheService.GetSexNameAsync(item.SexId).Result,
NationName = _cacheService.GetNationNameAsync(item.NationId).Result,
BirthDate = DataHelper.ConversionDateToString(item.BirthDate),
IdNo = item.IdNo,
PostalCode = item.PostalCode,
Email = item.Email,
Telephone = item.Telephone,
MobileTelephone = item.MobileTelephone,
Address = item.Address,
CustomerOrgName = _cacheService.GetTopCustomerOrgNameAsync(item.CustomerOrgId).GetAwaiter().GetResult(),
DepartmentName = _cacheService.GetCustomerOrgNameAsync(item.CustomerOrgId).GetAwaiter().GetResult(),
CustomerOrgGroupName = item.CustomerOrgGroupId == null ? "" : _cacheService.GetCustomerOrgGroupAsync(item.CustomerOrgGroupId.Value).GetAwaiter().GetResult().DisplayName,
MedicalPackageName = _cacheService.GetMedicalTypeNameAsync(item.MedicalPackageId).GetAwaiter().GetResult()
});
}
return getSameNamePatientDtos;
}
/// <summary>
/// 按部门数据查重名数据
/// </summary>
/// <param name="getCustomerOrgSameNamePatientInputDto"></param>
/// <returns></returns>
[HttpPost("api/app/patientregister/GetCustomerOrgSameNamePatient")]
public async Task<List<GetSameNamePatientDto>> GetCustomerOrgSameNamePatientAsync(GetCustomerOrgSameNamePatientInputDto getCustomerOrgSameNamePatientInputDto)
{
var customerOrgEntity = await _customerOrgManager.GetTopCustomerOrgAsync(getCustomerOrgSameNamePatientInputDto.CustomerOrgId);
var patientQuery = await _patientRepository.GetQueryableAsync();
var patientRegisterQuery = await Repository.GetQueryableAsync();
var customerOrgQuery = await _customerOrgRepository.GetQueryableAsync();
var topCustomerOrgQuery = await _customerOrgRepository.GetQueryableAsync();
var result = (from patient in patientQuery
join patientRegister in patientRegisterQuery
on patient.Id equals patientRegister.PatientId
join customerOrg in customerOrgQuery
on patientRegister.CustomerOrgId equals customerOrg.Id
where patient.DisplayName == getCustomerOrgSameNamePatientInputDto.Name &&
customerOrg.PathCode.Substring(0, 5) == customerOrgEntity.PathCode
select new
{
PatientName = patient.DisplayName,
PatientNo = patient.PatientNo,
SexId = patient.SexId,
NationId = patient.NationId,
BirthDate = patient.BirthDate,
IdNo = patient.IdNo,
PostalCode = patient.PostalCode,
Email = patient.Email,
Telephone = patient.Telephone,
MobileTelephone = patient.MobileTelephone,
Address = patient.Address,
CustomerOrgId = patientRegister.CustomerOrgId,
CustomerOrgGroupId = patientRegister.CustomerOrgGroupId,
MedicalPackageId = patientRegister.MedicalPackageId,
MedicalStartDate = patientRegister.MedicalStartDate
}).Distinct().ToList();
var getSameNamePatientDtos = new List<GetSameNamePatientDto>();
var patientGroup = result.GroupBy(g => g.PatientNo);
foreach (var itemPatient in patientGroup)
{
var item = itemPatient.OrderByDescending(o => o.MedicalStartDate).FirstOrDefault();
getSameNamePatientDtos.Add(new GetSameNamePatientDto()
{
PatientName = item.PatientName,
PatientNo = item.PatientNo,
SexName = _cacheService.GetSexNameAsync(item.SexId).Result,
NationName = _cacheService.GetNationNameAsync(item.NationId).Result,
BirthDate = DataHelper.ConversionDateToString(item.BirthDate),
IdNo = item.IdNo,
PostalCode = item.PostalCode,
Email = item.Email,
Telephone = item.Telephone,
MobileTelephone = item.MobileTelephone,
Address = item.Address,
CustomerOrgName = _cacheService.GetTopCustomerOrgNameAsync(item.CustomerOrgId).GetAwaiter().GetResult(),
DepartmentName = _cacheService.GetCustomerOrgNameAsync(item.CustomerOrgId).GetAwaiter().GetResult(),
CustomerOrgGroupName = item.CustomerOrgGroupId == null ? "" : _cacheService.GetCustomerOrgGroupAsync(item.CustomerOrgGroupId.Value).GetAwaiter().GetResult().DisplayName,
MedicalPackageName = _cacheService.GetMedicalTypeNameAsync(item.MedicalPackageId).GetAwaiter().GetResult()
});
}
return getSameNamePatientDtos;
}
/// <summary>
/// 查询历史登记信息 用做批量导入
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/patientregister/getpatientregisterimportlist")]
public async Task<List<PatientRegisterOrNoDto>> GetPatientRegisterImportListAsync(GetPatientRegisterImportListRequestDto input)
{
var customerOrgList = await _customerOrgRepository.GetListAsync();
var query = from a in await _repository.GetQueryableAsync()
join ab in await _patientRepository.GetQueryableAsync() on a.PatientId equals ab.Id
select new
{
a,
ab
};
//找单位下的所有部门ID 包含本身
var CustomerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(input.CustomerOrgId);
if (CustomerOrgIds.Any())
{
query = query.Where(m => CustomerOrgIds.Contains(m.a.CustomerOrgId));
}
//体检次数
if (input.CustomerOrgRegisterId != Guid.Empty)
{
query = query.Where(m => m.a.CustomerOrgRegisterId == input.CustomerOrgRegisterId);
}
//登记日期
if (!string.IsNullOrEmpty(input.StartDate) && !string.IsNullOrEmpty(input.EndDate))
{
query = query.Where(m => m.a.CreationTime >= Convert.ToDateTime(input.StartDate) &&
m.a.CreationTime < Convert.ToDateTime(input.EndDate).AddDays(1));
}
//姓名
if (!string.IsNullOrEmpty(input.PatientName))
{
query = query.Where(m => m.a.PatientName != null && m.a.PatientName.Contains(input.PatientName));
}
if (input.SexId != null && input.SexId != ForSexFlag.All)
{
query = query.Where(m => m.a.SexId == input.SexId);
}
if (input.CompleteFlag != null)
{
query = query.Where(m => m.a.CompleteFlag == input.CompleteFlag);
}
////档案号区间
if (!string.IsNullOrEmpty(input.StartPatientNo) && !string.IsNullOrEmpty(input.EndPatientNo))
{
query = query.Where(m => String.Compare(m.ab.PatientNo, input.StartPatientNo, StringComparison.OrdinalIgnoreCase) > 0
&& String.Compare(m.ab.PatientNo, input.EndPatientNo, StringComparison.OrdinalIgnoreCase) <= 0).AsQueryable();
}
var entlist = query.Select(s => new PatientRegisterOrNoDto
{
CreationTime = s.a.CreationTime,
CreatorId = s.a.CreatorId,
Id = s.a.Id,
LastModificationTime = s.a.LastModificationTime,
LastModifierId = s.a.LastModifierId,
ThirdInfo = s.a.ThirdInfo,
SummaryDoctorId = s.a.SummaryDoctorId,
SummaryDate = DataHelper.ConversionDateToString(s.a.SummaryDate),
SexId = s.a.SexId,
Age = s.a.Age,
AuditDate = DataHelper.ConversionDateToString(s.a.AuditDate),
AuditDoctorId = s.a.AuditDoctorId,
BirthDate = DataHelper.ConversionDateToString(s.a.BirthDate),
CompleteFlag = s.a.CompleteFlag,
CustomerOrgGroupId = s.a.CustomerOrgGroupId,
CustomerOrgId = s.a.CustomerOrgId,
CustomerOrgRegisterId = s.a.CustomerOrgRegisterId,
GuidePrintTimes = s.a.GuidePrintTimes,
InterposeMeasure = s.a.InterposeMeasure,
IsAudit = s.a.IsAudit,
IsLock = s.a.IsLock,
IsMedicalStart = s.a.IsMedicalStart,
IsNameHide = s.a.IsNameHide,
IsPhoneFollow = s.a.IsPhoneFollow,
IsRecoverGuide = s.a.IsRecoverGuide,
IsUpload = s.a.IsUpload,
IsVip = s.a.IsVip,
JobCardNo = s.a.JobCardNo,
JobPost = s.a.JobPost,
JobTitle = s.a.JobTitle,
MaritalStatusId = s.a.MaritalStatusId,
MedicalCardNo = s.a.MedicalCardNo,
MedicalConclusionId = s.a.MedicalConclusionId,
MedicalPackageId = s.a.MedicalPackageId,
MedicalStartDate = DataHelper.ConversionDateToString(s.a.MedicalStartDate),
MedicalTimes = s.a.MedicalTimes,
MedicalTypeId = s.a.MedicalTypeId,
MedicalCenterId = s.a.MedicalCenterId,
PatientId = s.a.PatientId,
PatientName = s.a.PatientName,
PatientRegisterNo = s.a.PatientRegisterNo,
PersonnelTypeId = s.a.PersonnelTypeId,
Photo = s.a.Photo,
Remark = s.a.Remark,
ReportPrintTimes = s.a.ReportPrintTimes,
Salesman = s.a.Salesman,
SexHormoneTermId = s.a.SexHormoneTermId,
CreatorName = "",
LastModifierName = "",
Address = s.ab.Address, //档案表信息
BirthPlaceId = s.ab.BirthPlaceId,
DisplayName = s.ab.DisplayName,
Email = s.ab.Email,
IdNo = s.ab.IdNo,
MobileTelephone = s.ab.MobileTelephone,
NationId = s.ab.NationId,
PatientNo = s.ab.PatientNo,
PatientPassword = s.ab.PatientPassword,
PostalCode = s.ab.PostalCode,
Telephone = s.ab.Telephone,
CustomerOrgName = _cacheService.GetCustomerOrgNameAsync(s.a.CustomerOrgId).GetAwaiter().GetResult(),
CustomerOrgParentId = _cacheService.GetTopCustomerOrgIdAsync(s.a.CustomerOrgId).GetAwaiter().GetResult(),
CustomerOrgParentName = _cacheService.GetTopCustomerOrgNameAsync(s.a.CustomerOrgId).GetAwaiter().GetResult(),
CustomerOrgGroupName = s.a.CustomerOrgGroupId == null ? "" : _cacheService.GetCustomerOrgGroupAsync(s.a.CustomerOrgGroupId.Value).GetAwaiter().GetResult().DisplayName,
MedicalPackageName = _cacheService.GetMedicalTypeNameAsync(s.a.MedicalPackageId).GetAwaiter().GetResult()
}).ToList();
return entlist;
}
/// <summary>
/// 按历史登记导入体检名单操作
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/patientregister/CreatePatientRegisterFromHistory")]
public async Task CreatePatientRegisterFromHistoryAsync(CreatePatientRegisterHistoryRequestDto input)
{
if (input == null)
{
throw new UserFriendlyException("input参数不能为空");
}
var oldPatientRegisterEntity = await _repository.FirstOrDefaultAsync(m => m.Id == input.PatientRegisterId);
if (oldPatientRegisterEntity == null)
{
throw new UserFriendlyException("人员登记ID查找人员登记信息不存在");
}
var oldPatientEntity = await _patientRepository.FirstOrDefaultAsync(m => m.Id == oldPatientRegisterEntity.PatientId);
if (oldPatientEntity == null)
{
throw new UserFriendlyException("人员档案信息不存在");
}
var createPatientRegisterArg = new CreatePatientRegisterArg()
{
BirthDate = oldPatientRegisterEntity.BirthDate,
CompleteFlag = input.CompleteFlag,
CustomerOrgGroupId = input.CustomerOrgGroupId,
CustomerOrgId = input.CustomerOrgId,
CustomerOrgRegisterId = input.CustomerOrgRegisterId,
IsNameHide = 'N',
IsVip = 'N',
JobCardNo = oldPatientRegisterEntity.JobCardNo,
JobPost = oldPatientRegisterEntity.JobPost,
JobTitle = oldPatientRegisterEntity.JobTitle,
MaritalStatusId = oldPatientRegisterEntity.MaritalStatusId,
MedicalCardNo = oldPatientRegisterEntity.MedicalCardNo,
MedicalPackageId = null,
MedicalTypeId = oldPatientRegisterEntity.MedicalTypeId,
MedicalCenterId = input.MedicalCenterId,
PatientId = oldPatientRegisterEntity.PatientId,
PatientName = oldPatientRegisterEntity.PatientName,
PersonnelTypeId = oldPatientRegisterEntity.PersonnelTypeId,
SexId = oldPatientRegisterEntity.SexId
};
var patientRegister = await _manager.CreateAsync(createPatientRegisterArg);
await _patientRegisterManager.SetCustomerOrgGroupId(patientRegister, input.CustomerOrgGroupId);
await _repository.InsertAsync(patientRegister, true);
//设置分组有关组合项目
var registerAsbitems = (await _customerOrgGroupDetailRepository.GetQueryableAsync()).Include(x => x.Asbitem)
.Where(m => m.CustomerOrgGroupId == input.CustomerOrgGroupId)
.Select(s => new RegisterCheckAsbitem
{
Amount = s.Amount,
AsbitemId = s.AsbitemId,
ChargePrice = s.Price,
IsCharge = 'N',
PatientRegisterId = patientRegister.Id,
PayTypeFlag = PayTypeFlag.OrgPay,
StandardPrice = s.Asbitem.Price
}).ToList();
var createRegisterCheckAsbitemEntity = await _registerAsbitemManager.UpdateManyAsync(patientRegister, registerAsbitems);
if (createRegisterCheckAsbitemEntity != null)
{
await UpdateRegisterChecks(createRegisterCheckAsbitemEntity);
}
await CurrentUnitOfWork.SaveChangesAsync();
}
#region 调整分组
/// <summary>
/// 调整体检人员分组
/// </summary>
/// <returns></returns>
[HttpPost("api/app/patientregister/updatepatientregistercustomerorggroup_bak")]
public async Task UpdatePatientRegisterCustomerOrgGroupAsyncBak(UpdatePatientRegisterCustomerOrgGroupDto input)
{
//当前人员信息
var patientRegisterEnt = (await _repository.GetDbSetAsync())
.Include(x => x.RegisterCheckAsbitems)
.ThenInclude(x => x.RegisterCheck)
.Where(m => m.Id == input.PatientRegisterId).FirstOrDefault();
if (patientRegisterEnt != null)
{
if (patientRegisterEnt.CustomerOrgId == null || patientRegisterEnt.CustomerOrgId == Guid.Empty)
{
throw new UserFriendlyException("个人体检不支持调整");
}
if (patientRegisterEnt.CompleteFlag == PatientRegisterCompleteFlag.SumCheck)
{
throw new UserFriendlyException("当前体检人员已完成总检");
}
if (patientRegisterEnt.CustomerOrgGroupId == input.CustomerOrgGroupId)
{
throw new UserFriendlyException("当前体检人员已在此分组");
}
//原有分组下的组合项目
//var oldGroupAsbitemList = await _customerOrgGroupDetailRepository.GetListAsync(m => m.CustomerOrgGroupId == patientRegisterEnt.CustomerOrgGroupId);
var oldGroupAsbitemList = (await _customerOrgGroupDetailRepository.GetDbSetAsync())
.Include(x => x.Asbitem)
.Where(m => m.CustomerOrgGroupId == patientRegisterEnt.CustomerOrgGroupId).ToList();
//需要调整的分组包含的组合项目
//var newGroupAsbitemList = await _customerOrgGroupDetailRepository.GetListAsync(m => m.CustomerOrgGroupId == input.CustomerOrgGroupId);
var newGroupAsbitemList = (await _customerOrgGroupDetailRepository.GetDbSetAsync())
.Include(x => x.Asbitem)
.Where(m => m.CustomerOrgGroupId == input.CustomerOrgGroupId).ToList();
var registerAsbitem = patientRegisterEnt.RegisterCheckAsbitems; //当前登记的组合项目
if (registerAsbitem.Any())
{
//删除操作
List<RegisterCheckAsbitem> ReserveList = new List<RegisterCheckAsbitem>(); //保留项目
List<RegisterCheckAsbitem> DeleteList = new List<RegisterCheckAsbitem>(); //删除项目
foreach (var item in registerAsbitem)
{
//判断是否为已收费、已检、弃检
if (item.IsCharge == 'Y' || item.RegisterCheck.CompleteFlag != RegisterCheckCompleteFlag.UnChecked)
{
//保留
ReserveList.Add(item);
}
else
{
if (input.IsReserveAddAsbitem == 'Y')
{
//保留额外项目
if (oldGroupAsbitemList.Where(m => m.AsbitemId == item.AsbitemId).Count() == 0)
{
//额外项目
ReserveList.Add(item);
}
else
{
DeleteList.Add(item);
}
}
else
{
DeleteList.Add(item);
}
}
}
await _registerCheckAsbitemRepository.DeleteManyAsync(DeleteList);
//遍历查询保留的项目是否存在新分组,如果存在,修改新分组的ID,然后list里面剔除项目
ReserveList.ForEach(reserveitem =>
{
var IsnewGroupAsbitem = newGroupAsbitemList.Find(m => m.AsbitemId == reserveitem.AsbitemId); //项目是否存在新分组内
if (IsnewGroupAsbitem != null)
{
//新分组内有需要保留的项目
reserveitem.GroupPackageId = input.CustomerOrgGroupId; //修改之前项目的分组ID
//从list里面删除新分组包含的组合项目
newGroupAsbitemList.Remove(IsnewGroupAsbitem);
}
else
{
reserveitem.GroupPackageId = null; //不包含,修改为null
}
});
await _registerCheckAsbitemRepository.UpdateManyAsync(ReserveList); //修改保留项目的分组
}
if (newGroupAsbitemList.Any())
{
//需要处理的新分组下的数据 重复的已剔除
var newRegisterAsbitemList = newGroupAsbitemList.Select(s => new RegisterCheckAsbitem
{
Amount = 1,
AsbitemId = s.AsbitemId,
ChargePrice = s.Price,
GroupPackageId = input.CustomerOrgGroupId,
IsCharge = 'N',
PatientRegisterId = input.PatientRegisterId,
PayTypeFlag = input.PayTypeFlag,
StandardPrice = s.Asbitem.Price
}).ToList();
foreach (var item in newRegisterAsbitemList)
{
await _registerAsbitemManager.CreateAsync(patientRegisterEnt.MedicalCenterId, item, true);
}
}
patientRegisterEnt.CustomerOrgGroupId = input.CustomerOrgGroupId;
await _repository.UpdateAsync(patientRegisterEnt);
}
else
{
throw new UserFriendlyException("人员不存在");
}
}
#endregion
/// <summary>
/// 调整体检人员分组
/// </summary>
/// <returns></returns>
[HttpPost("api/app/patientregister/BatchUpdateCustomerOrgGroup")]
public async Task BatchUpdateCustomerOrgGroupAsync(UpdatePatientRegisterCustomerOrgGroupDto input)
{
DataHelper.CheckCharIsYOrN(input.IsReserveAddAsbitem, "是否保留加做项目");
//当前人员信息
var patientRegisterEnt = (await _repository.GetQueryableAsync())
.Where(m => m.Id == input.PatientRegisterId).AsNoTracking().FirstOrDefault();
if (patientRegisterEnt == null)
{
throw new UserFriendlyException("人员不存在");
}
if (patientRegisterEnt.CustomerOrgId == GuidFlag.PersonCustomerOrgId)
{
throw new UserFriendlyException("个人体检不支持调整");
}
if (patientRegisterEnt.CompleteFlag == PatientRegisterCompleteFlag.SumCheck)
{
throw new UserFriendlyException("当前体检人员已完成总检");
}
if (patientRegisterEnt.CustomerOrgGroupId == input.CustomerOrgGroupId)
{
throw new UserFriendlyException("当前体检人员已在此分组");
}
//原有分组下的组合项目
var oldGroupAsbitemList = (await _customerOrgGroupDetailRepository.GetQueryableAsync())
.Include(x => x.Asbitem)
.Where(m => m.CustomerOrgGroupId == patientRegisterEnt.CustomerOrgGroupId).ToList();
//需要调整的分组包含的组合项目
var newGroupAsbitemList = (await _customerOrgGroupDetailRepository.GetQueryableAsync())
.Include(x => x.Asbitem)
.Where(m => m.CustomerOrgGroupId == input.CustomerOrgGroupId).ToList();
if (newGroupAsbitemList.Count() == 0)
{
throw new UserFriendlyException("分组没有分配组合项目");
}
//删除属于原分组而不属于新分组的项目
var existRegisterChecks = (await _registerCheckRepository.GetQueryableAsync()).Where(o => o.PatientRegisterId == input.PatientRegisterId).AsNoTracking().ToList();
var existRegisterAsbitems = (await _registerCheckAsbitemRepository.GetQueryableAsync()).Where(o =>
existRegisterChecks.Select(x => x.Id).Contains(o.RegisterCheckId)).AsNoTracking().ToList();
for (var i = existRegisterAsbitems.Count - 1; i >= 0; i--)
{
if (oldGroupAsbitemList.Where(o => o.AsbitemId == existRegisterAsbitems[i].AsbitemId).Count() > 0)
{
if (newGroupAsbitemList.Where(o => o.AsbitemId == existRegisterAsbitems[i].AsbitemId).Count() == 0)
{
existRegisterAsbitems.RemoveAt(i);
}
}
}
//如果不保留加做的组合项目则删除不属于新分组的项目
if (input.IsReserveAddAsbitem != 'Y')
{
for (var i = existRegisterAsbitems.Count - 1; i >= 0; i--)
{
if (newGroupAsbitemList.Where(o => o.AsbitemId == existRegisterAsbitems[i].AsbitemId).Count() == 0)
{
existRegisterAsbitems.RemoveAt(i);
}
}
}
//加入新分组中的项目
foreach (var groupAsbitem in newGroupAsbitemList)
{
if (existRegisterAsbitems.Where(o => o.AsbitemId == groupAsbitem.AsbitemId).Count() == 0)
{
var asbitem = await _cacheService.GetAsbitemAsync(groupAsbitem.AsbitemId);
var newRegisterCheckAsbitem = new RegisterCheckAsbitem()
{
AsbitemId = groupAsbitem.AsbitemId,
Amount = groupAsbitem.Amount,
StandardPrice = asbitem.Price,
ChargePrice = groupAsbitem.Price,
PayTypeFlag = input.PayTypeFlag,
IsCharge = 'N'
};
existRegisterAsbitems.Add(newRegisterCheckAsbitem);
}
}
patientRegisterEnt.CustomerOrgGroupId = input.CustomerOrgGroupId;
await _manager.SetCustomerOrgGroupId(patientRegisterEnt, input.CustomerOrgGroupId);
await _repository.UpdateAsync(patientRegisterEnt);
var createRegisterCheckAsbitemEntity = await _registerAsbitemManager.UpdateManyAsync(patientRegisterEnt, existRegisterAsbitems);
if (createRegisterCheckAsbitemEntity != null)
{
await UpdateRegisterChecks(createRegisterCheckAsbitemEntity);
}
await CurrentUnitOfWork.SaveChangesAsync();
}
#region 登记完返回的数据
private async Task<PatientRegisterOrNoDto> GetPatientRegisterOrNo(Guid PatientRegisterId)
{
// var entold = await _repository.GetAsync(PatientRegisterId);
var ent = (await _repository.GetQueryableAsync()).Include(x => x.Patient).Where(m => m.Id == PatientRegisterId).FirstOrDefault();
// var entold = await _repository.FindAsync(m=>m.Id== PatientRegisterId);
var entdto = new PatientRegisterOrNoDto();
if (ent != null)
{
entdto = new PatientRegisterOrNoDto
{
HisPatientId = ent.HisPatientId,
Age = ent.Age,
AuditDate = DataHelper.ConversionDateToString(ent.AuditDate),
Id = ent.Id,
AuditDoctorId = ent.AuditDoctorId,
BirthDate = DataHelper.ConversionDateToString(ent.BirthDate),
CompleteFlag = ent.CompleteFlag,
CreationTime = ent.CreationTime,
CreatorId = ent.CreatorId,
CustomerOrgGroupId = ent.CustomerOrgGroupId,
CustomerOrgId = ent.CustomerOrgId,
CustomerOrgRegisterId = ent.CustomerOrgRegisterId,
GuidePrintTimes = ent.GuidePrintTimes,
InterposeMeasure = ent.InterposeMeasure,
IsAudit = ent.IsAudit,
IsLock = ent.IsLock,
IsMedicalStart = ent.IsMedicalStart,
IsNameHide = ent.IsNameHide,
IsPhoneFollow = ent.IsPhoneFollow,
IsRecoverGuide = ent.IsRecoverGuide,
IsUpload = ent.IsUpload,
IsVip = ent.IsVip,
JobCardNo = ent.JobCardNo,
JobPost = ent.JobPost,
JobTitle = ent.JobTitle,
LastModificationTime = ent.LastModificationTime,
LastModifierId = ent.LastModifierId,
MaritalStatusId = ent.MaritalStatusId,
MedicalCardNo = ent.MedicalCardNo,
MedicalConclusionId = ent.MedicalConclusionId,
MedicalPackageId = ent.MedicalPackageId,
MedicalStartDate = DataHelper.ConversionDateToString(ent.MedicalStartDate),
MedicalTimes = ent.MedicalTimes,
MedicalTypeId = ent.MedicalTypeId,
MedicalCenterId = ent.MedicalCenterId,
PatientId = ent.PatientId,
PatientName = ent.PatientName,
PatientRegisterNo = ent.PatientRegisterNo,
PersonnelTypeId = ent.PersonnelTypeId,
Photo = ent.Photo,
Remark = ent.Remark,
ReportPrintTimes = ent.ReportPrintTimes,
Salesman = ent.Salesman,
SexHormoneTermId = ent.SexHormoneTermId,
SexId = ent.SexId,
SummaryDate = DataHelper.ConversionDateToString(ent.SummaryDate),
SummaryDoctorId = ent.SummaryDoctorId,
ThirdInfo = ent.ThirdInfo,
CreatorName = _cacheService.GetSurnameAsync(ent.CreatorId).GetAwaiter().GetResult(),
LastModifierName = _cacheService.GetSurnameAsync(ent.LastModifierId).GetAwaiter().GetResult(),
Address = ent.Patient.Address, //档案表信息
BirthPlaceId = ent.Patient.BirthPlaceId,
DisplayName = ent.Patient.DisplayName,
Email = ent.Patient.Email,
IdNo = ent.Patient.IdNo,
MobileTelephone = ent.Patient.MobileTelephone,
NationId = ent.Patient.NationId,
PatientNo = ent.Patient.PatientNo,
PatientPassword = ent.Patient.PatientPassword,
PostalCode = ent.Patient.PostalCode,
Telephone = ent.Patient.Telephone,
CustomerOrgName = _cacheService.GetCustomerOrgNameAsync(ent.CustomerOrgId).GetAwaiter().GetResult(),
CustomerOrgParentName = _cacheService.GetTopCustomerOrgNameAsync(ent.CustomerOrgId).GetAwaiter().GetResult(),
CustomerOrgParentId = _cacheService.GetTopCustomerOrgIdAsync(ent.CustomerOrgId).GetAwaiter().GetResult(),
IsPatientOccupationalDisease = _patientOccupationalDiseaseManager.GetPatientRegisterIsOccupationalDisease(ent.Id).GetAwaiter().GetResult()
};
var registerCheckAsbitems = (await _registerCheckAsbitemRepository.GetQueryableAsync())
.Include(x => x.Asbitem)
.Include(x => x.Asbitem.ItemType)
.Include(x => x.RegisterCheck)
.Where(m => m.PatientRegisterId == PatientRegisterId).ToList().OrderByDescending(o => o.GroupPackageId).ThenBy(o => o.Asbitem.DisplayOrder);
entdto.RegisterCheckAsbitems = registerCheckAsbitems.Select(s => new RegisterCheckAsbitemOrAsbitemDto
{
Discount = s.StandardPrice == 0 ? 100 : Math.Round(Convert.ToDecimal(s.ChargePrice * 100 / s.StandardPrice), 2),
IsLock = s.RegisterCheck.IsLock,
CreationTime = s.CreationTime,
CreatorId = s.CreatorId,
Id = s.Id,
LastModificationTime = s.LastModificationTime,
LastModifierId = s.LastModifierId,
Amount = s.Amount,
AsbitemId = s.AsbitemId,
AsbitemName = s.Asbitem.DisplayName,
ChargePrice = s.ChargePrice,
IsBelongGroupPackage = 'N',
//GroupPackageId = s.GroupPackageId,
CheckCompleteFlag = s.RegisterCheck.CompleteFlag,
DeviceTypeName = s.Asbitem.DeviceTypeId != null ? _cacheService.GetDeviceTypeNameAsync(s.Asbitem.DeviceTypeId.Value).Result : "",
IsCharge = s.IsCharge,
ItemTypeName = s.Asbitem.ItemType.DisplayName,
LisRequestId = s.LisRequestId,
PatientRegisterId = s.PatientRegisterId,
PayTypeFlag = s.PayTypeFlag,
SexName = _cacheService.GetForSexNameAsync(s.Asbitem.ForSexId).Result,
StandardPrice = s.StandardPrice,
CreatorName = _cacheService.GetSurnameAsync(s.CreatorId).GetAwaiter().GetResult(),
LastModifierName = _cacheService.GetSurnameAsync(s.LastModifierId).GetAwaiter().GetResult(),
IsDiscount = s.Asbitem.IsDiscount,
MedicalCenterId = s.Asbitem.MedicalCenterId
}).ToList();
//设置GroupPackageId
if (entdto.CustomerOrgGroupId != null && entdto.CustomerOrgGroupId != Guid.Empty)
{
var groupDetails = (await _customerOrgGroupDetailRepository.GetQueryableAsync()).Where(o => o.CustomerOrgGroupId == entdto.CustomerOrgGroupId).ToList();
entdto.RegisterCheckAsbitems.ForEach(o =>
{
if (groupDetails.Where(x => x.AsbitemId == o.AsbitemId).Count() > 0)
{
o.IsBelongGroupPackage = 'Y';
}
});
}
else if (entdto.MedicalPackageId != null && entdto.MedicalPackageId != Guid.Empty)
{
var groupDetails = (await _medicalPackageDetailRepository.GetQueryableAsync()).Where(o => o.MedicalPackageId == entdto.MedicalPackageId).ToList();
entdto.RegisterCheckAsbitems.ForEach(o =>
{
if (groupDetails.Where(x => x.AsbitemId == o.AsbitemId).Count() > 0)
{
o.IsBelongGroupPackage = 'Y';
}
});
}
entdto.RegisterCheckAsbitems = entdto.RegisterCheckAsbitems.OrderByDescending(o => o.IsBelongGroupPackage).
OrderBy(o => o.Id).ToList();
#region 扩展信息
var patientRegisterExterEnt = await _patientRegisterExterRepository.FirstOrDefaultAsync(m => m.PatientRegisterId == PatientRegisterId);
if (patientRegisterExterEnt != null)
{
entdto.QztlIsCw = patientRegisterExterEnt.QztlIsCw;
entdto.QztlIsCy = patientRegisterExterEnt.QztlIsCy;
entdto.QztlIsFj = patientRegisterExterEnt.QztlIsFj;
entdto.QztlIsGt = patientRegisterExterEnt.QztlIsGt;
entdto.QztlIsMain = patientRegisterExterEnt.QztlIsMain;
entdto.QztlIsWh = patientRegisterExterEnt.QztlIsWh;
entdto.QztlType = patientRegisterExterEnt.QztlType;
entdto.Remark2 = patientRegisterExterEnt.Remark2;
entdto.Remark3 = patientRegisterExterEnt.Remark3;
entdto.Remark4 = patientRegisterExterEnt.Remark4;
entdto.UploadQztlFlag = patientRegisterExterEnt.UploadQztlFlag;
entdto.IsQztlImport = patientRegisterExterEnt.IsQztlImport;
entdto.Planuserid = patientRegisterExterEnt.Planuserid;
}
#endregion
}
return entdto;
}
#endregion
#region 收费、退费、未收费
/// <summary>
/// 收费
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/patientregister/getpatientregisterchargelist")]
public async Task<PagedResultDto<GetPatientRegisterChargeListDto>> GetPatientRegisterChargeListAsync(PatientRegisterChargeRequestDto input)
{
PatientRegisterChargeEfCoreDto patientRegisterChargeEfCoreDto = new PatientRegisterChargeEfCoreDto
{
EndDate = input.EndDate,
InvoiceNo = input.InvoiceNo,
PatientName = input.PatientName,
PatientNo = input.PatientNo,
PatientRegisterNo = input.PatientRegisterNo,
StartDate = input.StartDate
};
var patientRegisterChargeList = await _patientRegisterChargeRepository.GetPatientRegisterChargeListAsync(patientRegisterChargeEfCoreDto);
int totalCount = patientRegisterChargeList.Count;
patientRegisterChargeList = patientRegisterChargeList.Skip(input.SkipCount * input.MaxResultCount).Take(input.MaxResultCount).ToList();
return new PagedResultDto<GetPatientRegisterChargeListDto>(totalCount, patientRegisterChargeList);
}
/// <summary>
/// 未收费
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/patientregister/getpatientregisternotchargedlist")]
public async Task<PagedResultDto<GetPatientRegisterNotChargedListDto>> GetPatientRegisterNotChargedListAsync(PatientRegisterChargeRequestDto input)
{
var query = from patientRegister in await _repository.GetQueryableAsync()
join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.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 registerCheckAsbitem.IsCharge == 'N' && registerCheckAsbitem.PayTypeFlag == PayTypeFlag.PersonPay
orderby patientRegister.Id ascending
select new
{
patientRegister,
patient
};
if (!string.IsNullOrEmpty(input.StartDate) && !string.IsNullOrEmpty(input.EndDate))
{
query = query.Where(m => m.patientRegister.CreationTime >= Convert.ToDateTime(input.StartDate) &&
m.patientRegister.CreationTime < Convert.ToDateTime(input.EndDate).AddDays(1));
}
if (!string.IsNullOrEmpty(input.PatientName))
{
query = query.Where(m => !string.IsNullOrEmpty(m.patientRegister.PatientName) && m.patientRegister.PatientName.Contains(input.PatientName));
}
if (!string.IsNullOrEmpty(input.PatientNo))
{
query = query.Where(m => m.patient.PatientNo == input.PatientNo);
}
if (!string.IsNullOrEmpty(input.PatientRegisterNo))
{
query = query.Where(m => m.patientRegister.PatientRegisterNo == input.PatientRegisterNo);
}
var patientRegisterGroup = query.ToList().GroupBy(g => g.patientRegister);
int totalCount = patientRegisterGroup.Count();
patientRegisterGroup = patientRegisterGroup.Skip(input.SkipCount * input.MaxResultCount).Take(input.MaxResultCount);
var entListDto = patientRegisterGroup.ToList().Select(s => new GetPatientRegisterNotChargedListDto
{
PatientRegisterId = s.Key.Id,
Address = s.FirstOrDefault().patient.Address,
Age = s.Key.Age,
CustomerOrgName = _cacheService.GetCustomerOrgAsync(s.Key.CustomerOrgId).GetAwaiter().GetResult().DisplayName,
CustomerOrgParentName = _cacheService.GetTopCustomerOrgAsync(s.Key.CustomerOrgId).GetAwaiter().GetResult().DisplayName,
Email = s.FirstOrDefault().patient.Email,
IdNo = s.FirstOrDefault().patient.IdNo,
IsVip = s.Key.IsVip,
MedicalTimes = s.Key.MedicalTimes,
MobileTelephone = s.FirstOrDefault().patient.MobileTelephone,
PatientName = s.Key.PatientName,
PatientNo = s.FirstOrDefault().patient.PatientNo,
PatientRegisterNo = s.Key.PatientRegisterNo,
Salesman = s.Key.Salesman,
SexId = _cacheService.GetSexNameAsync(s.Key.SexId).GetAwaiter().GetResult(),
Telephone = s.FirstOrDefault().patient.Telephone
}).ToList();
return new PagedResultDto<GetPatientRegisterNotChargedListDto>(totalCount, entListDto);
//PatientRegisterChargeEfCoreDto patientRegisterChargeEfCoreDto = new PatientRegisterChargeEfCoreDto
//{
// EndDate = input.EndDate,
// InvoiceNo = input.InvoiceNo,
// PatientName = input.PatientName,
// PatientNo = input.PatientNo,
// PatientRegisterNo = input.PatientRegisterNo,
// StartDate = input.StartDate
//};
//var patientRegisterNotChargedList = await _patientRegisterChargeRepository.GetPatientRegisterNotChargedListAsync(patientRegisterChargeEfCoreDto);
//int totalCount = patientRegisterNotChargedList.Count;
//patientRegisterNotChargedList = patientRegisterNotChargedList.Skip(input.SkipCount * input.MaxResultCount).Take(input.MaxResultCount).ToList();
//return new PagedResultDto<GetPatientRegisterNotChargedListDto>(totalCount, patientRegisterNotChargedList);
}
/// <summary>
/// 退费
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/patientregister/getpatientregisterchargebacklist")]
public async Task<PagedResultDto<GetPatientRegisterChargeBackListDto>> GetPatientRegisterChargeBackListAsync(PatientRegisterChargeRequestDto input)
{
PatientRegisterChargeEfCoreDto patientRegisterChargeEfCoreDto = new PatientRegisterChargeEfCoreDto
{
EndDate = input.EndDate,
InvoiceNo = input.InvoiceNo,
PatientName = input.PatientName,
PatientNo = input.PatientNo,
PatientRegisterNo = input.PatientRegisterNo,
StartDate = input.StartDate
};
var patientRegisterChargeBackList = await _patientRegisterChargeRepository.GetPatientRegisterChargeBackListAsync(patientRegisterChargeEfCoreDto);
int totalCount = patientRegisterChargeBackList.Count;
patientRegisterChargeBackList = patientRegisterChargeBackList.Skip(input.SkipCount * input.MaxResultCount).Take(input.MaxResultCount).ToList();
return new PagedResultDto<GetPatientRegisterChargeBackListDto>(totalCount, patientRegisterChargeBackList);
}
#endregion
#region 查询体检人员项目情况
/// <summary>
/// 查询体检人员的项目状况
/// </summary>
/// <returns></returns>
[HttpGet("api/app/patientregister/getpatientregisteritemstatus")]
public async Task<GetPatientRegisterItemStatusDto> GetPatientRegisterItemStatusAsync(Guid PatientRegisterId)
{
//未检组合项目
var UnCheckedAsbitem = (await _registerCheckAsbitemRepository.GetQueryableAsync())
.Include(x => x.Asbitem)
.Include(x => x.RegisterCheck)
.Where(m => m.PatientRegisterId == PatientRegisterId
&& m.RegisterCheck.CompleteFlag == RegisterCheckCompleteFlag.UnChecked
&& m.Asbitem.IsCheck == 'Y')
.OrderBy(o => o.Asbitem.DisplayOrder).Select(s => s.Asbitem.DisplayName).ToList();
//弃检检组合项目
var GiveUpAsbitem = (await _registerCheckAsbitemRepository.GetQueryableAsync())
.Include(x => x.Asbitem)
.Include(x => x.RegisterCheck)
.Where(m => m.PatientRegisterId == PatientRegisterId && m.RegisterCheck.CompleteFlag == RegisterCheckCompleteFlag.GiveUpChecked).OrderBy(o => o.Asbitem.DisplayOrder).Select(s => s.Asbitem.DisplayName).ToList();
//组合项目已检,项目无明细的项目
var registerAsbItemQueryable = await _registerCheckAsbitemRepository.GetQueryableAsync();
var registerCheckQueryable = await _registerCheckRepository.GetQueryableAsync();
var registerCheckItemQueryable = await _registerCheckItemRepository.GetQueryableAsync();
var itemQueryable = await _itemRepository.GetQueryableAsync();
var checkedNullValueItem = (from a in registerCheckItemQueryable
join b in registerCheckQueryable on a.RegisterCheckId equals b.Id
join d in itemQueryable on a.ItemId equals d.Id into dd
from ad in dd.DefaultIfEmpty()
where (b.PatientRegisterId == PatientRegisterId && string.IsNullOrEmpty(a.Result) && b.CompleteFlag == RegisterCheckCompleteFlag.Checked)
orderby ad.DisplayOrder ascending
select new { ItemName = ad.DisplayName }).Select(s => s.ItemName).ToList();
//组合项目已检,项目弃检
var checkedGiveUpItem = (from a in registerCheckItemQueryable
join b in registerCheckQueryable on a.RegisterCheckId equals b.Id
join c in registerAsbItemQueryable on b.Id equals c.RegisterCheckId
join d in itemQueryable on a.ItemId equals d.Id into dd
from ad in dd.DefaultIfEmpty()
where (c.PatientRegisterId == PatientRegisterId && b.CompleteFlag == RegisterCheckCompleteFlag.Checked && !string.IsNullOrEmpty(a.Result) && a.Result.Contains("放弃检查"))
orderby ad.DisplayOrder ascending
select new { ItemName = ad.DisplayName }).Select(s => s.ItemName).ToList();
var entdto = new GetPatientRegisterItemStatusDto
{
GiveUpAsbitem = GiveUpAsbitem,
CheckedGiveUpItem = checkedGiveUpItem,
CheckedNullValueItem = checkedNullValueItem,
UnCheckedAsbitem = UnCheckedAsbitem
};
return entdto;
}
#endregion
#region 批量修改人员状态、体检日期
/// <summary>
/// 批量修改人员状态、体检日期 可以同时修改状态跟日期 也可以单独修改某一个 不用修改的传 null
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
[HttpPost("api/app/patientregister/updatepatientregistercompleteflagormedicalstartdate")]
public async Task UpdatePatientRegisterCompleteFlagOrMedicalStartDateAsync(UpdatePatientRegisterCompleteFlagOrMedicalStartDateDto input)
{
if (input.PatientRegisterIds.Any())
{
var patientRegisterList = await _repository.GetListAsync(m => input.PatientRegisterIds.Contains(m.Id) &&
(m.CompleteFlag == PatientRegisterCompleteFlag.PreRegistration || m.CompleteFlag == PatientRegisterCompleteFlag.Registration));
if (input.CompleteFlag != PatientRegisterCompleteFlag.PreRegistration && input.CompleteFlag != PatientRegisterCompleteFlag.Registration)
{
throw new UserFriendlyException("登记状态只能是预登记或正式登记");
}
patientRegisterList.ForEach(f =>
{
if (f.CompleteFlag == PatientRegisterCompleteFlag.PreRegistration
&& input.CompleteFlag == PatientRegisterCompleteFlag.Registration)
{
f.MedicalStartDate = DateTime.Now;
f.IsMedicalStart = 'Y';
if (f.PatientRegisterNo.StartsWith("P"))
{
f.PatientRegisterNo = _manager.CreatePatientRegisterNo(f.MedicalCenterId).Result;
}
#region 预登记转正式登记修改登记者ID
string goRegisterIsUpdateRegisterPerson = _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "go_register_is_update_register_person").GetAwaiter().GetResult();
if (goRegisterIsUpdateRegisterPerson == "1")
{
if (_currentUser.Id != null)
{
//判断是预登记转正式登记
f.UpdateCreatorId(_currentUser.Id.Value);
}
}
#endregion
}
f.CompleteFlag = input.CompleteFlag.Value;
}
);
if (!string.IsNullOrEmpty(input.MedicalStartDate))
{
patientRegisterList.ForEach(f => f.MedicalStartDate = PageHelper.ConvertDatetimeV(input.MedicalStartDate));
}
await _repository.UpdateManyAsync(patientRegisterList);
}
else
{
throw new UserFriendlyException("参数有误");
}
}
#endregion
/// <summary>
/// 修改体检日期
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/PatientRegister/UpdatePatientRegisterMedicalStartDate")]
public async Task UpdatePatientRegisterMedicalStartDateAsync(UpdatePatientRegisterMedicalStartDateInputDto input)
{
if (!input.PatientRegisterIds.Any())
{
throw new UserFriendlyException("请选择人员");
}
var patientRegisterList = await _repository.GetListAsync(m => input.PatientRegisterIds.Contains(m.Id));
if (!string.IsNullOrEmpty(input.MedicalStartDate))
{
patientRegisterList.ForEach(f => f.MedicalStartDate = PageHelper.ConvertDatetimeV(input.MedicalStartDate));
await _repository.UpdateManyAsync(patientRegisterList);
}
}
/// <summary>
/// 总检时修改人员信息
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
[HttpPost("api/app/PatientRegister/UpdatePatientRegisterBySumCheck")]
public async Task UpdatePatientRegisterBySumCheckAsync(UpdatePatientRegisterBySumCheckInputDto input)
{
var patientRegisterEnt = await _repository.FirstOrDefaultAsync(f => f.Id == input.PatientRegisterId);
if (patientRegisterEnt == null)
{
throw new UserFriendlyException("人员ID不正确");
}
var patientEnt = await _patientRepository.FirstOrDefaultAsync(f => f.Id == patientRegisterEnt.PatientId);
if (patientEnt != null)
{
patientEnt.DisplayName = input.PatientName;
patientRegisterEnt.PatientName = input.PatientName;
patientEnt.IdNo = input.IdNo;
patientEnt.MobileTelephone = input.MobileTelephone;
patientRegisterEnt.PersonnelTypeId = input.PersonnelTypeId;
patientRegisterEnt.MedicalTypeId = input.MedicalTypeId;
patientRegisterEnt.Remark = input.Remark;
patientRegisterEnt.SexHormoneTermId = input.SexHormoneTermId;
await _patientRepository.UpdateAsync(patientEnt);
await _repository.UpdateAsync(patientRegisterEnt);
}
}
/// <summary>
/// 修改人员 手机、姓名、身份证 已总检特殊情况修改
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/PatientRegister/UpdatePatientRegisterBaseInfoByPatientRegisterId")]
public async Task<PatientRegisterOrNoDto> UpdatePatientRegisterBaseInfoByPatientRegisterIdAsync(UpdatePatientRegisterBaseInfoByPatientRegisterIdInputDto input)
{
PatientRegisterOrNoDto msg = new PatientRegisterOrNoDto();
if (input == null ||
string.IsNullOrWhiteSpace(input.IdNo)
&& string.IsNullOrWhiteSpace(input.PatientName)
&& string.IsNullOrWhiteSpace(input.MobileTelephone))
throw new UserFriendlyException("请求参数有误");
var patientRegisterEnt = await _repository.FirstOrDefaultAsync(f => f.Id == input.PatientRegisterId);
if (patientRegisterEnt == null)
{
throw new UserFriendlyException("人员ID不正确");
}
var patientEnt = await _patientRepository.FirstOrDefaultAsync(f => f.Id == patientRegisterEnt.PatientId);
if (patientEnt != null)
{
if (!string.IsNullOrWhiteSpace(input.PatientName))
{
patientEnt.DisplayName = input.PatientName;
patientRegisterEnt.PatientName = input.PatientName;
}
if (!string.IsNullOrWhiteSpace(input.IdNo))
{
patientEnt.IdNo = input.IdNo;
}
if (!string.IsNullOrWhiteSpace(input.MobileTelephone))
{
patientEnt.MobileTelephone = input.MobileTelephone;
}
await _patientRepository.UpdateAsync(patientEnt, true);
await _repository.UpdateAsync(patientRegisterEnt, true);
}
msg = await GetPatientRegisterOrNo(patientRegisterEnt.Id);
return msg;
}
/// <summary>
/// 批量修改人员 备注、体检类别、人员类别
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/PatientRegister/BatchUpdatePatientRegisterInfoByPatientRegisterId")]
public async Task BatchUpdatePatientRegisterInfoByPatientRegisterIdAsync(BatchUpdatePatientRegisterInfoByPatientRegisterIdInputDto input)
{
if (!input.PatientRegisterIds.Any())
{
throw new UserFriendlyException("人员id不能为空");
}
foreach (var item in input.PatientRegisterIds)
{
var patientRegister = await _repository.FirstOrDefaultAsync(f => f.Id == item);
if (patientRegister != null)
{
if (!string.IsNullOrWhiteSpace(input.Remark))
{
patientRegister.Remark = input.Remark;
}
if (input.PersonnelTypeId != null)
{
patientRegister.PersonnelTypeId = input.PersonnelTypeId;
}
if (input.MedicalTypeId != null)
{
patientRegister.MedicalTypeId = input.MedicalTypeId;
}
await _repository.UpdateAsync(patientRegister);
}
}
}
/// <summary>
/// 批量领取报告 取消领取
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/PatientRegister/BatchUpdatePatientRegisterReportReceive")]
public async Task BatchUpdatePatientRegisterReportReceiveAsync(BatchUpdatePatientRegisterReportReceiveInputDto input)
{
if (!input.PatientRegisterIds.Any())
{
throw new UserFriendlyException("未选择人员Id");
}
List<PatientRegister> patientRegisters = new List<PatientRegister>();
var idPage = (input.PatientRegisterIds.Count / 200) + 1;
for (int i = 0; i < idPage; i++)
{
List<Guid> ids = input.PatientRegisterIds.Skip(i).Take(200).ToList();
var patientRegisterList = await _repository.GetListAsync(m => ids.Contains(m.Id));
patientRegisters.AddRange(patientRegisterList);
}
patientRegisters = patientRegisters.Distinct().ToList();
foreach (var item in patientRegisters)
{
if (input.IsReceiveReport == 'Y')
{
item.IsReceiveReport = 'Y';
item.ReportReceiveDate = DateTime.Now;
item.ReportReceiveName = input.ReportReceiveName;
}
else
{
item.IsReceiveReport = 'N';
item.ReportReceiveDate = DateTime.Now;
item.ReportReceiveName = "";
}
}
await _repository.UpdateManyAsync(patientRegisters);
}
private async Task UpdateRegisterChecks(CreateRegisterCheckAsbitemEntity createRegisterCheckAsbitemEntity)
{
if (createRegisterCheckAsbitemEntity == null)
{
throw new UserFriendlyException("createRegisterCheckAsbitemEntity未赋值");
}
await _registerCheckItemRepository.DeleteManyAsync(createRegisterCheckAsbitemEntity.DeleteRegisterCheckItems);
await _registerCheckAsbitemRepository.DeleteManyAsync(createRegisterCheckAsbitemEntity.DeleteRegisterCheckAsbitems);
await _registerCheckRepository.DeleteManyAsync(createRegisterCheckAsbitemEntity.DeleteRegisterChecks);
await _registerCheckItemRepository.UpdateManyAsync(createRegisterCheckAsbitemEntity.UpdateRegisterCheckItems);
await _registerCheckAsbitemRepository.UpdateManyAsync(createRegisterCheckAsbitemEntity.UpdateRegisterCheckAsbitems);
await _registerCheckRepository.UpdateManyAsync(createRegisterCheckAsbitemEntity.UpdateRegisterChecks);
await _registerCheckRepository.InsertManyAsync(createRegisterCheckAsbitemEntity.NewRegisterChecks);
await _registerCheckAsbitemRepository.InsertManyAsync(createRegisterCheckAsbitemEntity.NewRegisterCheckAsbitems);
await _registerCheckItemRepository.InsertManyAsync(createRegisterCheckAsbitemEntity.NewRegisterCheckItems);
}
private async Task<char> GetMaritalStatusIdByName(string name)
{
if (string.IsNullOrWhiteSpace(name))
{
return MaritalStatusFlag.UnKnown;
}
var entity = await _maritalStatusRepository.FirstOrDefaultAsync(m => m.DisplayName == name.Trim());
if (entity != null)
{
return entity.Id;
}
else
{
throw new UserFriendlyException($"{name}是无效婚姻状况名称");
}
}
private async Task<Guid?> GetBirthPlaceIdByName(string name)
{
if (string.IsNullOrWhiteSpace(name))
{
return null;
}
var entity = await _birthPlaceRepository.FirstOrDefaultAsync(m => m.DisplayName == name.Trim());
if (entity != null)
{
return entity.Id;
}
else
{
throw new UserFriendlyException($"{name}是无效出生地名称");
}
}
private async Task<string> GetNationIdByName(string name)
{
if (string.IsNullOrWhiteSpace(name))
{
return null;
}
var entity = await _nationRepository.FirstOrDefaultAsync(m => m.DisplayName == name.Trim());
if (entity != null)
{
return entity.Id;
}
else
{
throw new UserFriendlyException($"{name}是无效民族名称");
}
}
private async Task<char> GetSexIdByName(string name)
{
if (string.IsNullOrWhiteSpace(name))
{
return SexFlag.UnKnown;
}
var entity = await _sexRepository.FirstOrDefaultAsync(m => m.DisplayName == name.Trim());
if (entity != null)
{
return entity.Id;
}
else
{
throw new UserFriendlyException($"{name}是无效性别名称");
}
}
private async Task<Guid?> GetMedicalTypeIdByName(string name)
{
if (string.IsNullOrWhiteSpace(name))
{
return null;
}
var entity = await _medicalTypeRepository.FirstOrDefaultAsync(m => m.DisplayName == name.Trim());
if (entity != null)
{
return entity.Id;
}
else
{
throw new UserFriendlyException($"{name}是无效体检类别名称");
}
}
private async Task<Guid?> GetPersonnelTypeIdByName(string name)
{
if (string.IsNullOrWhiteSpace(name))
{
return null;
}
var entity = await _personnelTypeRepository.FirstOrDefaultAsync(m => m.DisplayName == name.Trim());
if (entity != null)
{
return entity.Id;
}
else
{
throw new UserFriendlyException($"{name}是无效人员类别名称");
}
}
private async Task<Guid?> GetCustomerOrgIdByName(Guid customerOrgId, string name, char IsAutoCreateDepartment = 'N')
{
if (string.IsNullOrWhiteSpace(name))
{
return null;
}
if (customerOrgId == Guid.Empty)
{
throw new UserFriendlyException($"单位不能为空");
}
var departmentent = await _customerOrgRepository.FirstOrDefaultAsync(m => m.ParentId == customerOrgId && m.DisplayName == name); //当前单位下一级
if (departmentent != null)
{
return departmentent.Id; //找到部门,单位ID为下级的部门ID
}
if (IsAutoCreateDepartment != 'Y')
{
throw new UserFriendlyException($"{name}是无效部门名称");
}
var parentCustomerOrgEnt = await _customerOrgRepository.FirstOrDefaultAsync(m => m.Id == customerOrgId); //当前单位
if (parentCustomerOrgEnt == null)
{
throw new UserFriendlyException($"根据单位ID未找到单位");
}
var customerOrg_Insert = new CustomerOrg
{
Accounts = parentCustomerOrgEnt.Accounts,
Address = parentCustomerOrgEnt.Address,
Bank = parentCustomerOrgEnt.Bank,
DisplayName = name,
Fax = parentCustomerOrgEnt.Fax,
InvoiceName = parentCustomerOrgEnt.InvoiceName,
IsActive = parentCustomerOrgEnt.IsActive,
IsLock = parentCustomerOrgEnt.IsLock,
MedicalCenterId = parentCustomerOrgEnt.MedicalCenterId,
OrgTypeId = parentCustomerOrgEnt.OrgTypeId,
ParentId = parentCustomerOrgEnt.Id,
PostalCode = parentCustomerOrgEnt.PostalCode,
Remark = parentCustomerOrgEnt.Remark,
ShortName = name.Length > 20 ? "" : name,
Telephone = parentCustomerOrgEnt.Telephone
};
var DepartmentEnt = await _customerOrgManager.CreateAsync(customerOrg_Insert);
var DepartmentReturn = await _customerOrgRepository.InsertAsync(DepartmentEnt, true);
#region 更新缓存版本
var versonNo = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
_cacheService.SetDataVersonCache("customer_three", versonNo);
#endregion
return DepartmentReturn.Id;
}
private async Task<Guid?> GetCustomerOrgGroupIdByName(Guid customerOrgRegisterId, string name)
{
if (string.IsNullOrWhiteSpace(name))
{
return null;
}
var CustomerOrgGroupEnt = await _customerOrgGroupRepository.FirstOrDefaultAsync(m => m.DisplayName == name && m.CustomerOrgRegisterId == customerOrgRegisterId);
if (CustomerOrgGroupEnt == null)
{
throw new UserFriendlyException($"{name}是无效分组名称");
}
return CustomerOrgGroupEnt.Id;
}
private DateTime? GetBirthDateByString(string name)
{
if (string.IsNullOrWhiteSpace(name))
{
return null;
}
if (DateTime.TryParse(name, out var date))
{
return date;
}
return null;
}
}
}