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

4181 lines
202 KiB

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