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 { /// /// 人员体检登记 /// [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 _repository; private readonly IRepository _patientRepository; private readonly IRepository _userRepository; private readonly IRepository _sexRepository; private readonly IRepository _birthPlaceRepository; private readonly IRepository _maritalStatusRepository; private readonly IRepository _nationRepository; private readonly IRepository _customerOrgGroupRepository; private readonly IRepository _customerOrgGroupDetailRepository; private readonly IRepository _customerOrgRepository; private readonly IRepository _personnelTypeRepository; private readonly IRepository _medicalTypeRepository; private readonly IRepository _sexHormoneTermRepository; private readonly IRepository _payModeRepository; private readonly IRepository _registerCheckAsbitemRepository; private readonly IRepository _registerCheckRepository; private readonly IRepository _registerCheckItemRepository; private readonly IRepository _registerCheckPictureRepository; private readonly IRepository _itemRepository; private readonly IRepository _asbitemRepository; private readonly IPatientRegisterChargeRepository _patientRegisterChargeRepository; private readonly IRepository _medicalPackageDetailRepository; private readonly IRepository _sumSummaryHeaderRepository; private readonly IRepository _sumSummaryContentRepository; private readonly IRepository _sumSuggestionHeaderRepository; private readonly IRepository _sumSuggestionContentRepository; private readonly IRepository _sumDiagnosisRepository; private readonly ILogger _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 _customerOrgRepository; //private readonly IRepository _primarykeyBuilderRepository; //private readonly IRepository _sysParmValueRepository; private readonly PatientRegisterManager _manager; private readonly CacheService _cacheService; private readonly SysParmValueManager _sysParmValueManager; private readonly IRepository _patientRegisterExterRepository; private readonly PatientRegisterExterManager _patientRegisterExterManager; private readonly IRepository _lisRequestRepository; private readonly IConfiguration _configuration; private readonly ICurrentUser _currentUser; private readonly IRepository _userItemTypeRepository; private readonly PatientOccupationalDiseaseManager _patientOccupationalDiseaseManager; private readonly IRepository _thirdInterfaceRepository; private readonly IRepository _customerOrgRegisterRepository; private readonly IRepository _ocCheckTypeRepository; private readonly IRepository _poisonRepository; private readonly IRepository _ocCheckTypeDetailRepository; private readonly IRepository _patientOccupationalDiseaseRepository; private readonly IRepository _patientPoisonRepository; private readonly PatientPoisonManager _patientPoisonManager; private readonly IRepository _diagnosisRepository; private readonly ThirdBookingPushAppService _thirdBookingPushAppService; private readonly IRepository _thirdBookingRepository; private readonly IRepository _chargeRepository; private readonly IRepository _chargePayRepository; public PatientRegisterAppService( IRepository repository, IRepository patientRepository, IRepository userRepository, IRepository sexRepository, IRepository birthPlaceRepository, IRepository maritalStatusRepository, IRepository nationRepository, IRepository customerOrgGroupRepository, IRepository customerOrgGroupDetailRepository, IRepository customerOrgRepository, IRepository personnelTypeRepository, IRepository medicalTypeRepository, IRepository sexHormoneTermRepository, IRepository payModeRepository, IRepository registerAsbitemRepository, IRepository registerCheckRepository, IRepository registerCheckItemRepository, IRepository registerCheckPictureRepository, IRepository itemRepository, IRepository asbitemRepository, IRepository sumSummaryHeaderRepository, IRepository sumSummaryContentRepository, IRepository sumSuggestionHeaderRepository, IRepository sumSuggestionContentRepository, IRepository sumDiagnosisRepository, //IRepository sysParmValueRepository, //IRepository customerOrgRepository, //IRepository primarykeyBuilderRepository, IPatientRegisterChargeRepository patientRegisterChargeRepository, IRepository medicalPackageDetailRepository, ILogger 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 patientRegisterExterRepository, PatientRegisterExterManager patientRegisterExterManager, IRepository lisRequestRepository, IConfiguration configuration, ICurrentUser currentUser, IRepository userItemTypeRepository, PatientOccupationalDiseaseManager patientOccupationalDiseaseManager, IRepository thirdInterfaceRepository, IRepository customerOrgRegisterRepository, IRepository ocCheckTypeRepository, IRepository poisonRepository, IRepository ocCheckTypeDetailRepository, IRepository patientOccupationalDiseaseRepository, IRepository patientPoisonRepository, PatientPoisonManager patientPoisonManager, IRepository diagnosisRepository, ThirdBookingPushAppService thirdBookingPushAppService, IRepository thirdBookingRepository, IRepository chargeRepository, IRepository 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; } /// /// 获取通过主键 /// /// /// public override async Task GetAsync(Guid id) { return await base.GetAsync(id); } /// /// 根据lis申请单号 获取人员条码号 /// /// /// /// [HttpPost("api/app/PatientRegister/GetPatientRegisterNoByLisRequestNo")] public async Task 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申请单有误"); } } /// /// 根据检查单号 获取人员条码号 /// /// /// /// [HttpPost("api/app/PatientRegister/GetPatientRegisterNoByCheckRequestNo")] public async Task 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("检查单有误"); } } /// /// 编辑反写接口,包含档案表跟登记表的信息 /// /// /// [HttpPost("api/app/patientregister/getinfoorpatient")] public async Task 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; } /// /// 获取是否总检过 /// /// /// [HttpPost("api/app/patientregister/GetHaveSumData")] public async Task 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"; } /// /// 获取列表 人员体检 /// /// /// [RemoteService(false)] public override async Task> GetListAsync(PagedAndSortedResultRequestDto input) { return await base.GetListAsync(input); } ///// ///// 获取档案登记列表 带联合搜索条件 ///// ///// ///// //[HttpPost("api/app/patientregister/getlistinfilter")] //public async Task> 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(totalCount, entdto); //} /// /// 获取档案登记列表 带联合搜索条件 /// /// /// [HttpPost("api/app/PatientRegister/GetListInFilter")] public async Task> 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(totalCount, entdto); } /// /// 人员登记列表 带收费信息 /// /// /// [HttpPost("api/app/PatientRegister/GetPatientRegisterWithCharge")] public async Task> 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 entListDto = new List(); 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(totalCount, entListDto); } /// /// 获取档案登记信息 根据档案号或者条码号(档案号条件返回最新的一条) /// /// /// [HttpPost("api/app/patientregister/getpatientregisterorpatient")] public async Task 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; } /// /// 获取档案登记信息 根据档案号或者条码号(档案号条件返回最新的一条) /// /// /// /// [HttpPost("api/app/patientregister/GetAlreadyRegisterPatientRegisterByNo")] public async Task GetAlreadyRegisterPatientRegisterByNoAsync(PatientRegisterNoInputDto input) { var query = (await _repository.GetQueryableAsync()).Include(x => x.Patient).AsQueryable(); var patientRegisterList = new List(); 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; } ///// ///// 创建 登记档案 弃用 ///// ///// ///// //[RemoteService(false)] //public override async Task CreateAsync(CreatePatientRegisterDto input) //{ // var createEntity = ObjectMapper.Map(input); // var createPatientEntity = ObjectMapper.Map(input); // var entity = await _manager.CreateAsync(createEntity, createPatientEntity); // var dto = ObjectMapper.Map(entity); // return dto; //} /// /// 新版人员登记 /// /// /// [HttpPost("api/PatientRegister/CreatePatientRegister")] public async Task 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(input); var createPatientRegisterExterArg = ObjectMapper.Map(input); var updatePatientEntity = ObjectMapper.Map(input); var registerAsbitems = ObjectMapper.Map, List>(input.RegisterCheckAsbitems); var updatePatientRegisterArg = ObjectMapper.Map(input); var updatePatientRegisterExterArg = ObjectMapper.Map(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; } /// /// 总检时修改人员信息 /// /// private async Task SumCheckUpdatePatientRegister(CreatePatientRegisterDto input) { var patientRegister = await _repository.FirstOrDefaultAsync(f => f.Id == input.PatientRegisterId); if (patientRegister != null) { var updatePatientEntity = ObjectMapper.Map(input); var updatePatientRegisterArg = ObjectMapper.Map(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("人员不存在"); } } /// /// 批量增加组合项目 /// /// /// [HttpPost("api/PatientRegister/BatchAddAsbitems")] public async Task BatchAddAsbitems(PatientRegisterBatchAddAsbitemsDto input) { var registerAsbitems = ObjectMapper.Map, List>(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; } ///// ///// 体检记录查询 医生诊台 ///// ///// ///// //[HttpPost("api/app/PatientRegister/GetDoctorPeisRecordList")] //public async Task> 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 asbitemIds = new List(); // string AdminId = _configuration.GetValue("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 entlist = new List(); // 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(totalCount, entlist); //} /// /// 体检记录查询 医生诊台 /// /// /// [HttpPost("api/app/PatientRegister/GetDoctorPeisRecordList")] public async Task 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 asbitemIds = new List(); string AdminId = _configuration.GetValue("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 checkStatisticsList = new List(); 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 entlist = new List(); 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(totalCount, entlist); var entDto = new GetDoctorPeisRecordListDto(); entDto.TotalCount = pageDto.TotalCount; entDto.Items = pageDto.Items; entDto.CheckStatistics = checkStatisticsList; return entDto; } /// /// 体检记录查询 总症医生诊台 /// /// /// [HttpPost("api/app/PatientRegister/GetSumDoctorPeisRecordList")] public async Task> 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 entlist = new List(); 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(totalCount, entlist); } /// /// 更新 /// /// 登记表ID /// 更新参数(包含档案跟登记) /// [HttpPost("api/patientregister/UpdatePatientRegisterAndAsbitems")] public async Task UpdatePatientRegisterAndAsbitemsAsync(Guid PatientRegisterId, UpdatePatientRegisterDto input) { var patientRegisterEnt = await Repository.GetAsync(PatientRegisterId); var patientEnt = await _patientRepository.GetAsync(patientRegisterEnt.PatientId); var patientRegisterSourceEntity = ObjectMapper.Map(input); var patientSourceEntity = ObjectMapper.Map(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(patientRegisterEnt); } /// /// 修改人员照片 /// /// /// [HttpPost] public async Task 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(newent); } else { return new PatientRegisterDto(); } } ///// ///// 修改人员照片 二进制 ///// ///// ///// //[HttpPost] //public async Task 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(newent); // } // else // { // return new PatientRegisterDto(); // } //} // /// /// 上传图片 手动拼接"http://81.70.217.145/" /// /// 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 ""; } /// /// 删除 /// /// /// [HttpPost("api/app/PatientRegister/DeleteById")] public async Task DeleteByIdAsync(PatientRegisterIdInputDto input) { if (input == null) { throw new UserFriendlyException("input参数不能为空"); } await _manager.CheckAndDeleteAsync(input.PatientRegisterId); } /// /// 批量删除 /// /// /// [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($"无可删除数据"); } } /// /// 人员签到 批量 /// /// 登记表ID集合 /// [HttpPost("api/app/patientregister/updatesigninmany")] public async Task> UpdateSignInManyAsync(List PatientRegisterIds) { List msg = new List(); 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(newentity)); } } return msg; } /// /// 批量回收表格,暂时不加是否签到跟是否做完体检的判断 /// /// /// [HttpPost("api/app/patientregister/updaterecoverguidemany")] public async Task> UpdateRecoverGuideManyAsync(List PatientRegisterIds) { List msg = new List(); if (!PatientRegisterIds.Any()) throw new UserFriendlyException($"请求参数有误"); foreach (var PatientRegisterId in PatientRegisterIds) { var newentity = await _manager.UpdateRecoverGuideAsync(PatientRegisterId); msg.Add(ObjectMapper.Map(newentity)); } return msg; } /// /// 批量回收指引单 多功能 /// /// /// /// [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); } } } /// /// 批量回收指引单 根据条码号 /// /// /// /// [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); } } ///// ///// 人员签到 ///// ///// 登记表ID ///// //public async Task 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(newentity); // } //} ///// ///// 回收表格,暂时不加是否签到跟是否做完体检的判断 ///// ///// ///// //public async Task UpdateRecoverGuideAsync(Guid PatientRegisterId) //{ // var entity = await _manager.UpdateRecoverGuideAsync(PatientRegisterId); // return ObjectMapper.Map(entity); //} /// /// 修改人员锁定状态 /// /// 人员登记ID /// 是否锁住(Y N) /// public async Task 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(newent); } return msg; } /// /// 更改总检审核医生信息(保存时,医生跟日期不传时取默认登录的用户跟当前时间;取消时,如果不传就不更新医生跟日期,只更新状态) /// /// /// [HttpPost("api/app/patientregister/updatepatientregisterauditordoctor")] public async Task UpdatePatientRegisterAuditorDoctorAsync(UpdatePatientRegisterAuditorDoctorDto input) { if (input == null || input.PatientRegisterId == Guid.Empty) { throw new UserFriendlyException("请求参数有误"); } var entity = await _repository.GetAsync(input.PatientRegisterId); var entitydto = ObjectMapper.Map(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(newentity); } /// /// 取消总检 /// /// /// [HttpPost("api/app/patientregister/CancelSumCheck")] public async Task 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(newentity); } /// /// 更新病人总检综述建议 总检医生诊台保存 /// /// /// /// [HttpPost("api/app/patientregister/UpdatePatientRegisterSummarySuggestion")] public async Task 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(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 sumSummaryContentList = new List(); 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 diagnosisList = new List(); 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 sumSuggestionContentList = new List(); 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(newentity); } /// /// 批量修改指引单打印次数 原有基础上加1 /// /// /// [HttpPost("api/app/patientregister/updatepatientregisterguideprinttimesmany")] public async Task UpdatePatientRegisterGuidePrintTimesManyAsync(List Ids) { var entlist = await _repository.GetListAsync(m => Ids.Contains(m.Id)); entlist.ForEach(f => f.GuidePrintTimes = (short)(f.GuidePrintTimes + 1)); } /// /// 批量修改体检报告打印次数 原有基础上加1 /// /// /// [HttpPost("api/app/patientregister/updatepatientregisterreportprinttimesmany")] public async Task UpdatePatientRegisterReportPrintTimesManyAsync(List 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); } } /// /// 导入体检名单操作 /// /// /// /// [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 poisonIds = new List(); 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 registerAsbitems = new List(); //设置分组有关组合项目 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 patientPoisons = new List(); 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(); } /// /// 导入人员信息从第三方接口(青藏铁路接口) /// /// /// /// [HttpPost("api/app/patientregister/CreatePatientRegisterFromCustomerOrgInterface")] public async Task 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(assemblyName, className, [thirdInterface.Id], "ImportPatientRegisterByCustomerOrgRegisterIdAsync", objects); return pluginsOut; } return null; } /// /// 按全部数据查重名数据 /// /// /// [HttpPost("api/app/patientregister/GetSameNamePatient")] public async Task> 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(); 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; } /// /// 按部门数据查重名数据 /// /// /// [HttpPost("api/app/patientregister/GetCustomerOrgSameNamePatient")] public async Task> 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(); 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; } /// /// 查询历史登记信息 用做批量导入 /// /// /// [HttpPost("api/patientregister/getpatientregisterimportlist")] public async Task> 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; } /// /// 按历史登记导入体检名单操作 /// /// /// [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 调整分组 /// /// 调整体检人员分组 /// /// [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 ReserveList = new List(); //保留项目 List DeleteList = new List(); //删除项目 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 /// /// 调整体检人员分组 /// /// [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 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 收费、退费、未收费 /// /// 收费 /// /// /// [HttpPost("api/app/patientregister/getpatientregisterchargelist")] public async Task> 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(totalCount, patientRegisterChargeList); } /// /// 未收费 /// /// /// [HttpPost("api/app/patientregister/getpatientregisternotchargedlist")] public async Task> 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(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(totalCount, patientRegisterNotChargedList); } /// /// 退费 /// /// /// [HttpPost("api/app/patientregister/getpatientregisterchargebacklist")] public async Task> 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(totalCount, patientRegisterChargeBackList); } #endregion #region 查询体检人员项目情况 /// /// 查询体检人员的项目状况 /// /// [HttpGet("api/app/patientregister/getpatientregisteritemstatus")] public async Task 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 批量修改人员状态、体检日期 /// /// 批量修改人员状态、体检日期 可以同时修改状态跟日期 也可以单独修改某一个 不用修改的传 null /// /// /// /// [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 /// /// 修改体检日期 /// /// /// [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); } } /// /// 总检时修改人员信息 /// /// /// /// [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); } } /// /// 修改人员 手机、姓名、身份证 已总检特殊情况修改 /// /// /// [HttpPost("api/app/PatientRegister/UpdatePatientRegisterBaseInfoByPatientRegisterId")] public async Task 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; } /// /// 批量修改人员 备注、体检类别、人员类别 /// /// /// [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); } } } /// /// 批量领取报告 取消领取 /// /// /// [HttpPost("api/app/PatientRegister/BatchUpdatePatientRegisterReportReceive")] public async Task BatchUpdatePatientRegisterReportReceiveAsync(BatchUpdatePatientRegisterReportReceiveInputDto input) { if (!input.PatientRegisterIds.Any()) { throw new UserFriendlyException("未选择人员Id"); } List patientRegisters = new List(); var idPage = (input.PatientRegisterIds.Count / 200) + 1; for (int i = 0; i < idPage; i++) { List 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 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 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 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 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 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 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 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 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; } } }