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.
1430 lines
61 KiB
1430 lines
61 KiB
using Microsoft.EntityFrameworkCore;
|
|
using NPOI.POIFS.Crypt.Dsig;
|
|
using Shentun.Peis.CustomerOrgRegisters;
|
|
using Shentun.Peis.CustomerOrgs;
|
|
using Shentun.Peis.Enums;
|
|
using Shentun.Peis.HelperDto;
|
|
using Shentun.Peis.Models;
|
|
using Shentun.Peis.OrganizationUnits;
|
|
using Shentun.Peis.Patients;
|
|
using Shentun.Peis.RegisterAsbitems;
|
|
using Shentun.Peis.RegisterCheckCriticalValues;
|
|
using Shentun.Peis.RegisterCheckItems;
|
|
using Shentun.Peis.RegisterCheckPictures;
|
|
using Shentun.Peis.RegisterChecks;
|
|
using Shentun.Peis.RegisterCheckSuggestions;
|
|
using Shentun.Peis.RegisterCheckSummarys;
|
|
using Shentun.Peis.SysParmValues;
|
|
using Shentun.Utilities;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel.DataAnnotations;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using Volo.Abp;
|
|
using Volo.Abp.Domain.Repositories;
|
|
using Volo.Abp.Domain.Services;
|
|
using Volo.Abp.Guids;
|
|
using Volo.Abp.Users;
|
|
|
|
namespace Shentun.Peis.PatientRegisters
|
|
{
|
|
|
|
/// <summary>
|
|
/// 人员体检登记
|
|
/// </summary>
|
|
public class PatientRegisterManager : DomainService
|
|
{
|
|
private readonly IRepository<PatientRegister, Guid> _repository;
|
|
|
|
private readonly IRepository<CustomerOrg, Guid> _customerOrgRepository;
|
|
private readonly IRepository<CustomerOrgRegister, Guid> _customerOrgRegisterRepository;
|
|
private readonly IRepository<CustomerOrgGroup, Guid> _customerOrgGroupRepository;
|
|
private readonly IRepository<MedicalType, Guid> _medicalTypeRepository;
|
|
private readonly IRepository<PersonnelType, Guid> _personnelTypeRepository;
|
|
private readonly IRepository<MedicalPackage, Guid> _medicalPackageRepository;
|
|
private readonly IRepository<MedicalConclusion, Guid> _medicalConclusionRepository;
|
|
private readonly IRepository<SexHormoneTerm, Guid> _sexHormoneTermRepository;
|
|
private readonly IRepository<PrimarykeyBuilder> _primarykeyBuilderRepository;
|
|
private readonly IRepository<Patient, Guid> _patientRepository;
|
|
private readonly IRepository<RegisterCheckAsbitem, Guid> _registerAsbitemRepository;
|
|
private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository;
|
|
private readonly IRepository<RegisterCheckCriticalValue, Guid> _registerCheckCriticalValueRepository;
|
|
private readonly IRepository<RegisterCheckItem> _registerCheckItemRepository;
|
|
private readonly CurrentUser _currentUser;
|
|
private readonly PeisOrganizationUnitManager _peisOrganizationUnitManager;
|
|
private readonly PatientManager _patientManager;
|
|
private readonly RegisterCheckAsbitemManager _registerAsbitemManager;
|
|
private readonly CustomerOrgManager _customerOrgManager;
|
|
private readonly CustomerOrgRegisterManager _customerOrgRegisterManager;
|
|
private readonly RegisterCheckSuggestionManager _registerCheckSuggestionManager;
|
|
private readonly RegisterCheckSummaryManager _registerCheckSummaryManager;
|
|
private readonly RegisterCheckPictureManager _registerCheckPictureManager;
|
|
private readonly RegisterCheckItemManager _registerCheckItemManager;
|
|
private readonly RegisterCheckCriticalValueManager _registerCheckCriticalValueManager;
|
|
private readonly RegisterCheckManager _registerCheckManager;
|
|
private readonly IRepository<SysParmValue> _sysParmValueRepository;
|
|
private readonly IGuidGenerator _guidGenerator;
|
|
private readonly SysParmValueManager _sysParmValueManager;
|
|
public PatientRegisterManager(
|
|
IRepository<PatientRegister, Guid> repository,
|
|
IRepository<CustomerOrgRegister, Guid> customerOrgRegisterRepository,
|
|
IRepository<CustomerOrgGroup, Guid> customerOrgGroupRepository,
|
|
IRepository<MedicalType, Guid> medicalTypeRepository,
|
|
IRepository<PersonnelType, Guid> personnelTypeRepository,
|
|
IRepository<MedicalPackage, Guid> medicalPackageRepository,
|
|
IRepository<MedicalConclusion, Guid> medicalConclusionRepository,
|
|
IRepository<SexHormoneTerm, Guid> sexHormoneTermRepository,
|
|
IRepository<SysParmValue> sysParmValueRepository,
|
|
IRepository<CustomerOrg, Guid> customerOrgRepository,
|
|
IRepository<PrimarykeyBuilder> primarykeyBuilderRepository,
|
|
IRepository<Patient, Guid> patientRepository,
|
|
IRepository<RegisterCheckAsbitem, Guid> registerAsbitemRepository,
|
|
IRepository<RegisterCheck, Guid> registerCheckRepository,
|
|
IRepository<RegisterCheckCriticalValue, Guid> registerCheckCriticalValueRepository,
|
|
IRepository<RegisterCheckItem> registerCheckItemRepository,
|
|
CurrentUser currentUser,
|
|
PeisOrganizationUnitManager peisOrganizationUnitManager,
|
|
PatientManager patientManager,
|
|
RegisterCheckAsbitemManager registerAsbitemManager,
|
|
CustomerOrgManager customerOrgManager,
|
|
CustomerOrgRegisterManager customerOrgRegisterManager,
|
|
RegisterCheckSuggestionManager registerCheckSuggestionManager,
|
|
RegisterCheckSummaryManager registerCheckSummaryManager,
|
|
RegisterCheckPictureManager registerCheckPictureManager,
|
|
RegisterCheckItemManager registerCheckItemManager,
|
|
RegisterCheckCriticalValueManager registerCheckCriticalValueManager,
|
|
RegisterCheckManager registerCheckManager,
|
|
IGuidGenerator guidGenerator,
|
|
SysParmValueManager sysParmValueManager)
|
|
{
|
|
_repository = repository;
|
|
this._customerOrgRepository = customerOrgRepository;
|
|
_customerOrgRegisterRepository = customerOrgRegisterRepository;
|
|
_customerOrgGroupRepository = customerOrgGroupRepository;
|
|
_medicalTypeRepository = medicalTypeRepository;
|
|
_personnelTypeRepository = personnelTypeRepository;
|
|
_medicalPackageRepository = medicalPackageRepository;
|
|
_medicalConclusionRepository = medicalConclusionRepository;
|
|
_sexHormoneTermRepository = sexHormoneTermRepository;
|
|
this._primarykeyBuilderRepository = primarykeyBuilderRepository;
|
|
this._patientRepository = patientRepository;
|
|
this._registerAsbitemRepository = registerAsbitemRepository;
|
|
this._registerCheckRepository = registerCheckRepository;
|
|
this._registerCheckCriticalValueRepository = registerCheckCriticalValueRepository;
|
|
this._registerCheckItemRepository = registerCheckItemRepository;
|
|
this._currentUser = currentUser;
|
|
_peisOrganizationUnitManager = peisOrganizationUnitManager;
|
|
this._patientManager = patientManager;
|
|
this._registerAsbitemManager = registerAsbitemManager;
|
|
this._customerOrgManager = customerOrgManager;
|
|
this._customerOrgRegisterManager = customerOrgRegisterManager;
|
|
this._registerCheckSuggestionManager = registerCheckSuggestionManager;
|
|
this._registerCheckSummaryManager = registerCheckSummaryManager;
|
|
this._registerCheckPictureManager = registerCheckPictureManager;
|
|
this._registerCheckItemManager = registerCheckItemManager;
|
|
this._registerCheckCriticalValueManager = registerCheckCriticalValueManager;
|
|
this._registerCheckManager = registerCheckManager;
|
|
this._sysParmValueRepository = sysParmValueRepository;
|
|
_guidGenerator = guidGenerator;
|
|
_sysParmValueManager = sysParmValueManager;
|
|
}
|
|
/// <summary>
|
|
/// 创建
|
|
/// </summary>
|
|
/// <param name="entity"></param>
|
|
/// <param name="patientEntity"></param>
|
|
/// <param name="IsMaxMedicalTimes">是否使用最后一次体检次数</param>
|
|
/// <returns></returns>
|
|
public async Task<PatientRegister> CreateAsync(
|
|
PatientRegister entity,
|
|
Patient patientEntity,
|
|
char IsMaxMedicalTimes
|
|
)
|
|
{
|
|
if (entity.PatientId == Guid.Empty)
|
|
{
|
|
//未选档号号,创建档案号
|
|
|
|
var ent = new Patient
|
|
{
|
|
Address = patientEntity.Address,
|
|
BirthDate = entity.BirthDate,
|
|
BirthPlaceId = patientEntity.BirthPlaceId,
|
|
DisplayName = entity.PatientName,
|
|
Email = patientEntity.Email,
|
|
IdNo = patientEntity.IdNo,
|
|
MaritalStatusId = entity.MaritalStatusId,
|
|
MobileTelephone = patientEntity.MobileTelephone,
|
|
NationId = patientEntity.NationId,
|
|
PatientPassword = "",
|
|
PostalCode = patientEntity.PostalCode,
|
|
SexId = entity.SexId,
|
|
Telephone = patientEntity.Telephone
|
|
};
|
|
var patientEnt = await _patientManager.CreateAsync(entity.MedicalCenterId, ent);
|
|
if (patientEnt != null)
|
|
{
|
|
entity.PatientId = patientEnt.Id;
|
|
}
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
//查档案信息
|
|
var oldent = await _patientRepository.GetAsync(entity.PatientId);
|
|
|
|
if (oldent != null)
|
|
{
|
|
oldent.Address = patientEntity.Address;
|
|
oldent.BirthDate = entity.BirthDate;
|
|
oldent.BirthPlaceId = patientEntity.BirthPlaceId;
|
|
oldent.DisplayName = entity.PatientName;
|
|
oldent.Email = patientEntity.Email;
|
|
oldent.IdNo = patientEntity.IdNo;
|
|
oldent.MaritalStatusId = entity.MaritalStatusId;
|
|
oldent.MobileTelephone = patientEntity.MobileTelephone;
|
|
oldent.NationId = patientEntity.NationId;
|
|
//oldent.PatientPassword = "",
|
|
oldent.PostalCode = patientEntity.PostalCode;
|
|
oldent.SexId = entity.SexId;
|
|
oldent.Telephone = patientEntity.Telephone;
|
|
}
|
|
|
|
await _patientRepository.UpdateAsync(oldent); //修改档案
|
|
|
|
|
|
}
|
|
|
|
//暂时如此使用,这段代码以后要废除
|
|
Guid CustomerOrgRegisterId = new Guid(); //最新单位次数ID
|
|
|
|
if (IsMaxMedicalTimes == 'Y')
|
|
{
|
|
|
|
Guid CustomerOrgParentId = EntityHelper.GetParentNoSql(await _customerOrgRepository.GetListAsync(), entity.CustomerOrgId); //一级单位ID
|
|
if (CustomerOrgParentId != Guid.Empty)
|
|
{
|
|
var customerOrgRegisterEnt = await _customerOrgRegisterManager.GetMaxAsync(CustomerOrgParentId);
|
|
if (customerOrgRegisterEnt != null)
|
|
CustomerOrgRegisterId = customerOrgRegisterEnt.Id;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CustomerOrgRegisterId = entity.CustomerOrgRegisterId;
|
|
}
|
|
|
|
|
|
|
|
|
|
var patientRegisterEnt = new PatientRegister(_guidGenerator.Create())
|
|
{
|
|
Age = entity.Age,
|
|
AuditDate = entity.AuditDate,
|
|
AuditDoctorId = entity.AuditDoctorId,
|
|
BirthDate = entity.BirthDate,
|
|
CompleteFlag = entity.CompleteFlag,
|
|
CustomerOrgGroupId = entity.CustomerOrgGroupId,
|
|
CustomerOrgId = entity.CustomerOrgId,
|
|
CustomerOrgRegisterId = CustomerOrgRegisterId,
|
|
GuidePrintTimes = entity.GuidePrintTimes,
|
|
InterposeMeasure = entity.InterposeMeasure,
|
|
IsAudit = entity.IsAudit,
|
|
IsLock = entity.IsLock,
|
|
IsMedicalStart = entity.IsMedicalStart,
|
|
IsNameHide = entity.IsNameHide,
|
|
IsPhoneFollow = entity.IsPhoneFollow,
|
|
IsRecoverGuide = entity.IsRecoverGuide,
|
|
IsUpload = entity.IsUpload,
|
|
IsVip = entity.IsVip,
|
|
JobCardNo = entity.JobCardNo,
|
|
JobPost = entity.JobPost,
|
|
JobTitle = entity.JobTitle,
|
|
MaritalStatusId = entity.MaritalStatusId,
|
|
MedicalCardNo = entity.MedicalCardNo,
|
|
MedicalConclusionId = entity.MedicalConclusionId,
|
|
MedicalPackageId = entity.MedicalPackageId,
|
|
MedicalStartDate = entity.MedicalStartDate,
|
|
MedicalTimes = entity.PatientId == Guid.Empty ? (short)1 : await GetPatientCount(entity.PatientId),
|
|
MedicalTypeId = entity.MedicalTypeId,
|
|
MedicalCenterId = entity.MedicalCenterId,
|
|
PatientId = entity.PatientId,
|
|
PatientName = entity.PatientName,
|
|
PatientRegisterNo = await CreatePatientRegisterNo(entity.MedicalCenterId),
|
|
PersonnelTypeId = entity.PersonnelTypeId,
|
|
Photo = entity.Photo,
|
|
Remark = entity.Remark,
|
|
ReportPrintTimes = entity.ReportPrintTimes,
|
|
Salesman = entity.Salesman,
|
|
SexHormoneTermId = entity.SexHormoneTermId,
|
|
SexId = entity.SexId,
|
|
SummaryDate = entity.SummaryDate,
|
|
SummaryDoctorId = entity.SummaryDoctorId,
|
|
ThirdInfo = entity.ThirdInfo
|
|
};
|
|
|
|
//return patientRegisterEnt;
|
|
|
|
return await _repository.InsertAsync(patientRegisterEnt, true);
|
|
}
|
|
|
|
public async Task<PatientRegister> CreateAsync(CreatePatientRegisterArg entity)
|
|
{
|
|
await VerifyCreate(entity);
|
|
if (entity.IsVip == default(char))
|
|
{
|
|
entity.IsVip = 'N';
|
|
}
|
|
DataHelper.CheckCharIsYOrN(entity.IsVip, "VIP标志");
|
|
|
|
DataHelper.CheckCharIsYOrN(entity.IsNameHide, "姓名隐藏");
|
|
|
|
|
|
if (entity.CompleteFlag == default(char))
|
|
{
|
|
entity.CompleteFlag = PatientRegisterCompleteFlag.PreRegistration;
|
|
}
|
|
|
|
|
|
if (entity.CompleteFlag != PatientRegisterCompleteFlag.PreRegistration &&
|
|
entity.CompleteFlag != PatientRegisterCompleteFlag.Registration)
|
|
{
|
|
throw new ArgumentException("完成标志错误");
|
|
}
|
|
|
|
|
|
|
|
|
|
var patientRegisterNo = await CreatePatientRegisterNo(entity.MedicalCenterId);
|
|
if (entity.MedicalTimes == 0)
|
|
{
|
|
entity.MedicalTimes = await GetPatientCount(entity.PatientId);
|
|
}
|
|
var patientRegisterEnt = new PatientRegister(_guidGenerator.Create())
|
|
{
|
|
Age = entity.Age,
|
|
AuditDate = null,
|
|
AuditDoctorId = null,
|
|
BirthDate = entity.BirthDate,
|
|
CompleteFlag = entity.CompleteFlag,
|
|
CustomerOrgGroupId = entity.CustomerOrgGroupId,
|
|
CustomerOrgId = entity.CustomerOrgId,
|
|
CustomerOrgRegisterId = entity.CustomerOrgRegisterId,
|
|
GuidePrintTimes = 0,
|
|
InterposeMeasure = null,
|
|
IsAudit = 'N',
|
|
IsLock = entity.IsLock,
|
|
IsMedicalStart = 'N',
|
|
IsNameHide = entity.IsNameHide,
|
|
IsPhoneFollow = 'N',
|
|
IsRecoverGuide = 'N',
|
|
IsUpload = 'N',
|
|
IsVip = entity.IsVip,
|
|
JobCardNo = entity.JobCardNo,
|
|
JobPost = entity.JobPost,
|
|
JobTitle = entity.JobTitle,
|
|
MaritalStatusId = entity.MaritalStatusId,
|
|
MedicalCardNo = entity.MedicalCardNo,
|
|
MedicalConclusionId = null,
|
|
MedicalPackageId = entity.MedicalPackageId,
|
|
MedicalStartDate = DateTime.Now,
|
|
MedicalTimes = entity.MedicalTimes,
|
|
MedicalTypeId = entity.MedicalTypeId,
|
|
MedicalCenterId = entity.MedicalCenterId,
|
|
PatientId = entity.PatientId,
|
|
PatientName = entity.PatientName,
|
|
PatientRegisterNo = patientRegisterNo,
|
|
PersonnelTypeId = entity.PersonnelTypeId,
|
|
Remark = entity.Remark,
|
|
ReportPrintTimes = 0,
|
|
Salesman = entity.Salesman,
|
|
SexHormoneTermId = entity.SexHormoneTermId,
|
|
SexId = entity.SexId,
|
|
SummaryDate = null,
|
|
SummaryDoctorId = null,
|
|
ThirdInfo = entity.ThirdInfo
|
|
};
|
|
|
|
if (patientRegisterEnt.CustomerOrgGroupId != Guid.Empty && patientRegisterEnt.CustomerOrgGroupId != null)
|
|
{
|
|
await SetCustomerOrgGroupId(patientRegisterEnt, (Guid)patientRegisterEnt.CustomerOrgGroupId);
|
|
}
|
|
return patientRegisterEnt;
|
|
}
|
|
private async Task VerifyCreate(CreatePatientRegisterArg entity)
|
|
{
|
|
DataHelper.CheckEntityIsNull(entity);
|
|
DataHelper.CheckGuidIsDefaultValue(entity.PatientId, "病人ID");
|
|
DataHelper.CheckStringIsNull(entity.PatientName, "姓名");
|
|
DataHelper.CheckGuidIsDefaultValue(entity.MedicalCenterId, "单位ID");
|
|
DataHelper.CheckGuidIsDefaultValue(entity.CustomerOrgId, "客户单位ID");
|
|
DataHelper.CheckSex(entity.SexId);
|
|
DataHelper.CheckMaritalStatus(entity.MaritalStatusId);
|
|
if (entity.MedicalTimes < 0)
|
|
{
|
|
throw new UserFriendlyException("体检次数必须大于等于0");
|
|
}
|
|
if (entity.Age <= 0)
|
|
{
|
|
throw new UserFriendlyException("年龄不能小于等于0");
|
|
}
|
|
|
|
|
|
|
|
if (entity.CustomerOrgGroupId != Guid.Empty && entity.CustomerOrgGroupId != null)
|
|
{
|
|
if ((await _customerOrgGroupRepository.GetQueryableAsync()).
|
|
Where(o => o.CustomerOrgRegisterId == entity.CustomerOrgRegisterId &&
|
|
o.Id == entity.CustomerOrgGroupId).Count() == 0)
|
|
{
|
|
throw new UserFriendlyException("单位分组ID不存在");
|
|
}
|
|
}
|
|
|
|
if (entity.MedicalPackageId != Guid.Empty && entity.MedicalPackageId != null)
|
|
{
|
|
if (await _medicalPackageRepository.GetQueryableAsync().Result.
|
|
Where(o => o.Id == entity.MedicalPackageId).CountAsync() == 0)
|
|
{
|
|
throw new UserFriendlyException("套餐ID不存在");
|
|
}
|
|
}
|
|
|
|
if (entity.MedicalTypeId != Guid.Empty && entity.MedicalTypeId != null)
|
|
{
|
|
if (await _medicalTypeRepository.GetQueryableAsync().Result.
|
|
Where(o => o.Id == entity.MedicalTypeId).CountAsync() == 0)
|
|
{
|
|
throw new UserFriendlyException("体检类别ID不存在");
|
|
}
|
|
}
|
|
if (entity.PersonnelTypeId != Guid.Empty && entity.PersonnelTypeId != null)
|
|
{
|
|
if (await _personnelTypeRepository.GetQueryableAsync().Result.
|
|
Where(o => o.Id == entity.PersonnelTypeId).CountAsync() == 0)
|
|
{
|
|
throw new UserFriendlyException("人员类别ID不存在");
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (entity.SexHormoneTermId != Guid.Empty && entity.SexHormoneTermId != null)
|
|
{
|
|
if (await _sexHormoneTermRepository.GetQueryableAsync().Result.
|
|
Where(o => o.Id == entity.SexHormoneTermId).CountAsync() == 0)
|
|
{
|
|
throw new UserFriendlyException("性激素期限ID不存在");
|
|
}
|
|
}
|
|
|
|
if (!await _peisOrganizationUnitManager.IsPeis(entity.MedicalCenterId))
|
|
{
|
|
throw new UserFriendlyException("组织单位ID不是体检中心");
|
|
}
|
|
var customerOrg = await _customerOrgRepository.FindAsync(o => o.Id == entity.CustomerOrgId);
|
|
if (customerOrg == null)
|
|
{
|
|
throw new UserFriendlyException("客户单位ID不存在");
|
|
}
|
|
if (customerOrg.Id == GuidFlag.PersonCustomerOrgId)
|
|
{
|
|
if (entity.CustomerOrgGroupId != Guid.Empty && entity.CustomerOrgGroupId != null)
|
|
{
|
|
throw new UserFriendlyException("个人体检不能选单位分组");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (entity.MedicalPackageId != Guid.Empty && entity.MedicalPackageId != null)
|
|
{
|
|
throw new UserFriendlyException("单位体检不能选套餐");
|
|
}
|
|
}
|
|
var customerOrgRegister = await _customerOrgRegisterRepository.FindAsync(o => o.Id == entity.CustomerOrgRegisterId);
|
|
if (customerOrgRegister == null)
|
|
{
|
|
throw new UserFriendlyException("客户登记单位次数不存在");
|
|
}
|
|
if (customerOrgRegister.CustomerOrgId != customerOrg.Id)
|
|
{
|
|
var topCustomerOrg = await _customerOrgManager.GetTopCustomerOrgAsync(customerOrg.Id);
|
|
var topCustomerOrgRegisterOrg = await _customerOrgManager.GetTopCustomerOrgAsync(customerOrgRegister.CustomerOrgId);
|
|
if (topCustomerOrg.Id != topCustomerOrgRegisterOrg.Id)
|
|
{
|
|
throw new UserFriendlyException("登记单位和登记单位体检次数不一致");
|
|
}
|
|
}
|
|
|
|
if ((entity.Age == 0 || entity.Age == null))
|
|
{
|
|
if (entity.BirthDate != null && entity.BirthDate > new DateTime(1900, 1, 1))
|
|
{
|
|
entity.Age = (short)ConvertExtr.ToAge(((DateTime)entity.BirthDate));
|
|
};
|
|
|
|
}
|
|
|
|
if (entity.BirthDate == null || entity.BirthDate <= new DateTime(1900, 1, 1))
|
|
{
|
|
if (entity.Age != null && entity.Age > 0)
|
|
{
|
|
entity.BirthDate = ConvertExtr.ToBirthDateByAge((short)entity.Age);
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 更新
|
|
/// </summary>
|
|
/// <param name="sourceEntity">Dto实体映射数据</param>
|
|
/// <param name="targetEntity">原始数据</param>
|
|
/// <returns></returns>
|
|
public async Task UpdateAsync(
|
|
UpdatePatientRegisterArg sourceEntity,
|
|
PatientRegister targetEntity
|
|
)
|
|
{
|
|
|
|
DataHelper.CheckStringIsNull(sourceEntity.PatientName, "姓名");
|
|
DataHelper.CheckGuidIsDefaultValue(sourceEntity.MedicalCenterId, "单位ID");
|
|
DataHelper.CheckGuidIsDefaultValue(sourceEntity.CustomerOrgId, "客户单位ID");
|
|
DataHelper.CheckSex(sourceEntity.SexId);
|
|
DataHelper.CheckMaritalStatus(sourceEntity.MaritalStatusId);
|
|
|
|
DataHelper.CheckCharIsYOrN(sourceEntity.IsVip, "VIP标志");
|
|
|
|
|
|
DataHelper.CheckCharIsYOrN(sourceEntity.IsNameHide, "姓名隐藏");
|
|
|
|
if (sourceEntity.CompleteFlag != PatientRegisterCompleteFlag.PreRegistration &&
|
|
sourceEntity.CompleteFlag != PatientRegisterCompleteFlag.Registration &&
|
|
sourceEntity.CompleteFlag != PatientRegisterCompleteFlag.PartCheck)
|
|
{
|
|
throw new ArgumentException("完成标志错误");
|
|
}
|
|
|
|
//if (sourceEntity.MedicalTimes < 1)
|
|
//{
|
|
// throw new UserFriendlyException("体检次数必须大于0");
|
|
//}
|
|
//if (sourceEntity.MedicalTimes != targetEntity.MedicalTimes)
|
|
//{
|
|
// var cnt = (await _repository.GetQueryableAsync()).Where(o => o.Id != targetEntity.Id &&
|
|
// o.PatientId == sourceEntity.PatientId &&
|
|
// o.MedicalTimes == sourceEntity.MedicalTimes).Count();
|
|
// if (cnt > 0)
|
|
// {
|
|
// throw new UserFriendlyException("体检次数已经使用过");
|
|
// }
|
|
//}
|
|
if (sourceEntity.Age <= 0)
|
|
{
|
|
throw new UserFriendlyException("年龄不能小于等于0");
|
|
}
|
|
|
|
|
|
|
|
if (sourceEntity.CustomerOrgGroupId != targetEntity.CustomerOrgGroupId &&
|
|
sourceEntity.CustomerOrgGroupId != Guid.Empty && sourceEntity.CustomerOrgGroupId != null)
|
|
{
|
|
if ((await _customerOrgGroupRepository.GetQueryableAsync()).
|
|
Where(o => o.CustomerOrgRegisterId == sourceEntity.CustomerOrgRegisterId &&
|
|
o.Id == sourceEntity.CustomerOrgGroupId).Count() == 0)
|
|
{
|
|
throw new UserFriendlyException("单位分组ID不存在");
|
|
}
|
|
}
|
|
|
|
if (sourceEntity.MedicalPackageId != targetEntity.MedicalPackageId && sourceEntity.MedicalPackageId != Guid.Empty && sourceEntity.MedicalPackageId != null)
|
|
{
|
|
if (await _medicalPackageRepository.GetQueryableAsync().Result.
|
|
Where(o => o.Id == sourceEntity.MedicalPackageId).CountAsync() == 0)
|
|
{
|
|
throw new UserFriendlyException("套餐ID不存在");
|
|
}
|
|
}
|
|
|
|
if (sourceEntity.MedicalTypeId != targetEntity.MedicalTypeId && sourceEntity.MedicalTypeId != Guid.Empty && sourceEntity.MedicalTypeId != null)
|
|
{
|
|
if (await _medicalTypeRepository.GetQueryableAsync().Result.
|
|
Where(o => o.Id == sourceEntity.MedicalTypeId).CountAsync() == 0)
|
|
{
|
|
throw new UserFriendlyException("体检类别ID不存在");
|
|
}
|
|
}
|
|
if (sourceEntity.PersonnelTypeId != targetEntity.PersonnelTypeId && sourceEntity.PersonnelTypeId != Guid.Empty && sourceEntity.PersonnelTypeId != null)
|
|
{
|
|
if (await _personnelTypeRepository.GetQueryableAsync().Result.
|
|
Where(o => o.Id == sourceEntity.PersonnelTypeId).CountAsync() == 0)
|
|
{
|
|
throw new UserFriendlyException("人员类别ID不存在");
|
|
}
|
|
}
|
|
|
|
//if (sourceEntity.MedicalConclusionId != targetEntity.MedicalConclusionId && sourceEntity.MedicalConclusionId != Guid.Empty && sourceEntity.MedicalConclusionId != null)
|
|
//{
|
|
// if (await _medicalConclusionRepository.GetQueryableAsync().Result.
|
|
// Where(o => o.Id == sourceEntity.MedicalConclusionId).CountAsync() == 0)
|
|
// {
|
|
// throw new UserFriendlyException("体检结论ID不存在");
|
|
// }
|
|
//}
|
|
|
|
if (sourceEntity.SexHormoneTermId != targetEntity.SexHormoneTermId && sourceEntity.SexHormoneTermId != Guid.Empty && sourceEntity.SexHormoneTermId != null)
|
|
{
|
|
if (await _sexHormoneTermRepository.GetQueryableAsync().Result.
|
|
Where(o => o.Id == sourceEntity.SexHormoneTermId).CountAsync() == 0)
|
|
{
|
|
throw new UserFriendlyException("性激素期限ID不存在");
|
|
}
|
|
}
|
|
|
|
if (sourceEntity.MedicalCenterId != targetEntity.MedicalCenterId && !await _peisOrganizationUnitManager.IsPeis(sourceEntity.MedicalCenterId))
|
|
{
|
|
throw new UserFriendlyException("组织单位ID不是体检中心");
|
|
}
|
|
CustomerOrg customerOrg = null;
|
|
if (sourceEntity.CustomerOrgId != targetEntity.CustomerOrgId)
|
|
{
|
|
customerOrg = await _customerOrgRepository.FindAsync(o => o.Id == sourceEntity.CustomerOrgId);
|
|
if (customerOrg == null)
|
|
{
|
|
throw new UserFriendlyException("客户单位ID不存在");
|
|
}
|
|
}
|
|
CustomerOrgRegister customerOrgRegister = null;
|
|
if (sourceEntity.CustomerOrgRegisterId != targetEntity.CustomerOrgRegisterId)
|
|
{
|
|
customerOrgRegister = await _customerOrgRegisterRepository.FindAsync(o => o.Id == sourceEntity.CustomerOrgRegisterId);
|
|
if (customerOrgRegister == null)
|
|
{
|
|
throw new UserFriendlyException("客户登记单位次数不存在");
|
|
}
|
|
}
|
|
if (sourceEntity.CustomerOrgId != targetEntity.CustomerOrgId || sourceEntity.CustomerOrgRegisterId != targetEntity.CustomerOrgRegisterId)
|
|
{
|
|
if (customerOrg == null)
|
|
{
|
|
customerOrg = await _customerOrgRepository.FindAsync(o => o.Id == sourceEntity.CustomerOrgId);
|
|
}
|
|
if (customerOrg == null)
|
|
{
|
|
throw new UserFriendlyException("客户单位ID不存在");
|
|
}
|
|
if (customerOrgRegister == null)
|
|
{
|
|
customerOrgRegister = await _customerOrgRegisterRepository.FindAsync(o => o.Id == sourceEntity.CustomerOrgRegisterId);
|
|
}
|
|
if (customerOrgRegister == null)
|
|
{
|
|
throw new UserFriendlyException("客户登记单位次数不存在");
|
|
}
|
|
|
|
if (customerOrgRegister.CustomerOrgId != customerOrg.Id)
|
|
{
|
|
var topCustomerOrg = await _customerOrgManager.GetTopCustomerOrgAsync(customerOrg.Id);
|
|
var topCustomerOrgRegisterOrg = await _customerOrgManager.GetTopCustomerOrgAsync(customerOrgRegister.CustomerOrgId);
|
|
if (topCustomerOrg.Id != topCustomerOrgRegisterOrg.Id)
|
|
{
|
|
throw new UserFriendlyException("登记单位和登记单位体检次数不一致");
|
|
}
|
|
}
|
|
}
|
|
|
|
if (sourceEntity.CustomerOrgId == GuidFlag.PersonCustomerOrgId)
|
|
{
|
|
if (sourceEntity.CustomerOrgGroupId != Guid.Empty && sourceEntity.CustomerOrgGroupId != null)
|
|
{
|
|
throw new UserFriendlyException("个人体检不能选单位分组");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (sourceEntity.MedicalPackageId != Guid.Empty && sourceEntity.MedicalPackageId != null)
|
|
{
|
|
throw new UserFriendlyException("单位体检不能选套餐");
|
|
}
|
|
}
|
|
|
|
|
|
if ((sourceEntity.Age == 0 || sourceEntity.Age == null))
|
|
{
|
|
if (sourceEntity.BirthDate != null && sourceEntity.BirthDate > new DateTime(1900, 1, 1))
|
|
{
|
|
sourceEntity.Age = (short)ConvertExtr.ToAge(((DateTime)sourceEntity.BirthDate));
|
|
};
|
|
|
|
}
|
|
|
|
if (sourceEntity.BirthDate == null || sourceEntity.BirthDate <= new DateTime(1900, 1, 1))
|
|
{
|
|
if (sourceEntity.Age != null && sourceEntity.Age > 0)
|
|
{
|
|
sourceEntity.BirthDate = ConvertExtr.ToBirthDateByAge((short)sourceEntity.Age);
|
|
}
|
|
}
|
|
|
|
if (targetEntity.PatientName != sourceEntity.PatientName && targetEntity.SexId != sourceEntity.SexId)
|
|
{
|
|
throw new UserFriendlyException("人员信息姓名和性别和原来的信息都不一致,禁止修改");
|
|
}
|
|
|
|
//预登记改正式登记 修改体检日期跟状态
|
|
if (targetEntity.CompleteFlag == PatientRegisterCompleteFlag.PreRegistration
|
|
&& sourceEntity.CompleteFlag == PatientRegisterCompleteFlag.Registration)
|
|
{
|
|
targetEntity.MedicalStartDate = DateTime.Now;
|
|
targetEntity.IsMedicalStart = 'Y';
|
|
}
|
|
|
|
|
|
//targetEntity.AuditDate = sourceEntity.AuditDate;
|
|
//targetEntity.AuditDoctor = sourceEntity.AuditDoctor;
|
|
targetEntity.BirthDate = sourceEntity.BirthDate;
|
|
targetEntity.Age = sourceEntity.Age;
|
|
targetEntity.CompleteFlag = sourceEntity.CompleteFlag;
|
|
targetEntity.CustomerOrgGroupId = sourceEntity.CustomerOrgGroupId;
|
|
targetEntity.CustomerOrgId = sourceEntity.CustomerOrgId;
|
|
targetEntity.CustomerOrgRegisterId = sourceEntity.CustomerOrgRegisterId;
|
|
//targetEntity.GuidePrintTimes = sourceEntity.GuidePrintTimes;
|
|
//targetEntity.InterposeMeasure = sourceEntity.InterposeMeasure;
|
|
//targetEntity.IsAudit = sourceEntity.IsAudit;
|
|
targetEntity.IsLock = sourceEntity.IsLock;
|
|
//targetEntity.IsMedicalStart = sourceEntity.IsMedicalStart;
|
|
targetEntity.IsNameHide = sourceEntity.IsNameHide;
|
|
//targetEntity.IsPhoneFollow = sourceEntity.IsPhoneFollow;
|
|
//targetEntity.IsRecoverGuide = sourceEntity.IsRecoverGuide;
|
|
//targetEntity.IsUpload = sourceEntity.IsUpload;
|
|
targetEntity.IsVip = sourceEntity.IsVip;
|
|
targetEntity.JobCardNo = sourceEntity.JobCardNo;
|
|
targetEntity.JobPost = sourceEntity.JobPost;
|
|
targetEntity.JobTitle = sourceEntity.JobTitle;
|
|
targetEntity.MaritalStatusId = sourceEntity.MaritalStatusId;
|
|
targetEntity.MedicalCardNo = sourceEntity.MedicalCardNo;
|
|
//targetEntity.MedicalConclusionId = sourceEntity.MedicalConclusionId;
|
|
targetEntity.MedicalPackageId = sourceEntity.MedicalPackageId;
|
|
//targetEntity.MedicalStartDate = sourceEntity.MedicalStartDate;
|
|
//targetEntity.MedicalTimes = sourceEntity.MedicalTimes;
|
|
targetEntity.MedicalTypeId = sourceEntity.MedicalTypeId;
|
|
targetEntity.MedicalCenterId = sourceEntity.MedicalCenterId;
|
|
//targetEntity.PatientId = sourceEntity.PatientId;
|
|
targetEntity.PatientName = sourceEntity.PatientName;
|
|
//targetEntity.PatientRegisterNo = sourceEntity.PatientRegisterNo;
|
|
targetEntity.PersonnelTypeId = sourceEntity.PersonnelTypeId;
|
|
targetEntity.Remark = sourceEntity.Remark;
|
|
//targetEntity.ReportPrintTimes = sourceEntity.ReportPrintTimes;
|
|
targetEntity.Salesman = sourceEntity.Salesman;
|
|
targetEntity.SexHormoneTermId = sourceEntity.SexHormoneTermId;
|
|
targetEntity.SexId = sourceEntity.SexId;
|
|
//targetEntity.SummaryDate = sourceEntity.SummaryDate;
|
|
//targetEntity.SummaryDoctor = sourceEntity.SummaryDoctor;
|
|
targetEntity.ThirdInfo = sourceEntity.ThirdInfo;
|
|
|
|
if (sourceEntity.CustomerOrgGroupId != Guid.Empty && sourceEntity.CustomerOrgGroupId != null)
|
|
{
|
|
await SetCustomerOrgGroupId(targetEntity, (Guid)sourceEntity.CustomerOrgGroupId);
|
|
}
|
|
//targetEntity.MedicalTimes = sourceEntity.MedicalTimes;
|
|
//targetEntity.PatientId = sourceEntity.PatientId;
|
|
//targetEntity.PatientRegisterNo = sourceEntity.PatientRegisterNo;
|
|
//if (isUpdateCheck)
|
|
//{
|
|
// //有更新性别或者年龄,需要更新check表数据
|
|
// await _registerAsbitemManager.UpdateCheckReferenceRange(targetEntity.Id);
|
|
//}
|
|
|
|
}
|
|
|
|
|
|
public async Task SetCustomerOrgGroupId(PatientRegister patientRegister, Guid customerOrgGroupId)
|
|
{
|
|
var customerOrgGroup = await _customerOrgGroupRepository.GetAsync(customerOrgGroupId);
|
|
if ((customerOrgGroup.ForSexId == ForSexFlag.Male && patientRegister.SexId != SexFlag.Male && patientRegister.SexId != SexFlag.UnKnown)
|
|
|| (customerOrgGroup.ForSexId == ForSexFlag.Female && patientRegister.SexId != SexFlag.Female && patientRegister.SexId != SexFlag.UnKnown))
|
|
{
|
|
throw new UserFriendlyException("分组和人员性别不一致");
|
|
}
|
|
|
|
if ((customerOrgGroup.MaritalStatusId == MaritalStatusFlag.UnMarried && patientRegister.MaritalStatusId != MaritalStatusFlag.UnMarried && patientRegister.MaritalStatusId != MaritalStatusFlag.UnKnown)
|
|
|| (customerOrgGroup.MaritalStatusId == MaritalStatusFlag.Married && patientRegister.MaritalStatusId == MaritalStatusFlag.UnMarried))
|
|
{
|
|
throw new UserFriendlyException("分组和人员婚姻状况不一致");
|
|
}
|
|
|
|
if (patientRegister.Age < customerOrgGroup.AgeLowerLimit)
|
|
{
|
|
throw new UserFriendlyException("年龄不能小于分组年龄下限");
|
|
}
|
|
if (patientRegister.Age > customerOrgGroup.AgeUpperLimit)
|
|
{
|
|
throw new UserFriendlyException("年龄不能大于于分组年龄上限");
|
|
}
|
|
patientRegister.CustomerOrgGroupId = customerOrgGroupId;
|
|
}
|
|
/// <summary>
|
|
/// 生成条码号(规则,先找体检中心的配置,如未找到,就直接使用全局的)
|
|
/// 模式(0 日期+尾号 1.顺序递增)
|
|
/// </summary>
|
|
/// <param name="medicalCenterId">体检中心ID</param>
|
|
/// <returns></returns>
|
|
public async Task<string> CreatePatientRegisterNo(Guid medicalCenterId)
|
|
{
|
|
string PatientRegisterNo = ""; //条码号
|
|
|
|
List<SysParmValue> spvlist = await _sysParmValueRepository.GetListAsync();
|
|
|
|
var spv_tjzx = spvlist.Where(m => m.MedicalCenterId == medicalCenterId); //体检中心配置
|
|
var spv_global = spvlist.Where(m => m.MedicalCenterId == Guid.Empty); //全局配置
|
|
|
|
var patient_register_no_rule_coding = ""; // 模式(0 日期+尾号 1.顺序递增)
|
|
var patient_register_no_rule_tail_len = ""; //尾号长度
|
|
var patient_register_no_rule_prefix = ""; //前缀
|
|
|
|
patient_register_no_rule_coding = await _sysParmValueManager.GetSysParmValueAsync(medicalCenterId, "patient_register_no_rule_coding");
|
|
patient_register_no_rule_tail_len = await _sysParmValueManager.GetSysParmValueAsync(medicalCenterId, "patient_register_no_rule_tail_len");
|
|
patient_register_no_rule_prefix = await _sysParmValueManager.GetSysParmValueAsync(medicalCenterId, "patient_register_no_rule_prefix");
|
|
|
|
|
|
if (string.IsNullOrWhiteSpace(patient_register_no_rule_tail_len))
|
|
{
|
|
throw new UserFriendlyException("人员条码号尾号长度不能为空");
|
|
}
|
|
int tailLen;
|
|
if (!int.TryParse(patient_register_no_rule_tail_len, out tailLen))
|
|
{
|
|
throw new UserFriendlyException("人员条码号尾号长度必须是数字");
|
|
};
|
|
if (tailLen < 4)
|
|
{
|
|
throw new UserFriendlyException("人员条码号尾号长度必须大于等于4");
|
|
}
|
|
|
|
|
|
|
|
var primarykeyBuilderEnt = await _primarykeyBuilderRepository.FirstOrDefaultAsync(f => f.PrimarykeyBuilderId == "patient_register_no");
|
|
|
|
|
|
|
|
|
|
string maxnum = "1";
|
|
string date = DateTime.Now.ToString("yyMMdd");// 当天
|
|
|
|
if (patient_register_no_rule_coding == "0")
|
|
{
|
|
//日期+尾号
|
|
#region 模式0 日期+尾号
|
|
|
|
if (primarykeyBuilderEnt != null)
|
|
{
|
|
if (primarykeyBuilderEnt.DateString != date)
|
|
{
|
|
//新的日期 为1 maxnum
|
|
primarykeyBuilderEnt.DateString = date;
|
|
maxnum = "1";
|
|
}
|
|
else
|
|
{
|
|
maxnum = (Convert.ToInt32(primarykeyBuilderEnt.SerialNo) + 1).ToString();
|
|
}
|
|
|
|
primarykeyBuilderEnt.SerialNo = maxnum; //更新新的序列号
|
|
|
|
PatientRegisterNo = patient_register_no_rule_prefix + date + maxnum.PadLeft(Convert.ToInt32(patient_register_no_rule_tail_len), '0');
|
|
|
|
await _primarykeyBuilderRepository.UpdateAsync(primarykeyBuilderEnt);
|
|
}
|
|
else
|
|
{
|
|
//初始写入
|
|
|
|
PatientRegisterNo = patient_register_no_rule_prefix + date + maxnum.PadLeft(Convert.ToInt32(patient_register_no_rule_tail_len), '0');
|
|
|
|
primarykeyBuilderEnt = new PrimarykeyBuilder
|
|
{
|
|
PrimarykeyBuilderId = "patient_register_no",
|
|
DateString = date,
|
|
SerialNo = maxnum
|
|
};
|
|
|
|
await _primarykeyBuilderRepository.InsertAsync(primarykeyBuilderEnt,true);
|
|
}
|
|
#endregion
|
|
}
|
|
else
|
|
{
|
|
//模式1 顺序递增
|
|
|
|
#region 模式1 顺序递增
|
|
|
|
if (primarykeyBuilderEnt != null)
|
|
{
|
|
maxnum = (Convert.ToInt32(primarykeyBuilderEnt.SerialNo) + 1).ToString();
|
|
primarykeyBuilderEnt.SerialNo = maxnum; //更新num
|
|
await _primarykeyBuilderRepository.UpdateAsync(primarykeyBuilderEnt);
|
|
}
|
|
else
|
|
{
|
|
//初始写入
|
|
|
|
primarykeyBuilderEnt = new PrimarykeyBuilder
|
|
{
|
|
PrimarykeyBuilderId = "patient_register_no",
|
|
DateString = "",
|
|
SerialNo = maxnum
|
|
};
|
|
|
|
await _primarykeyBuilderRepository.InsertAsync(primarykeyBuilderEnt,true);
|
|
}
|
|
|
|
|
|
PatientRegisterNo = patient_register_no_rule_prefix + maxnum.PadLeft(Convert.ToInt32(patient_register_no_rule_tail_len), '0');
|
|
#endregion
|
|
|
|
}
|
|
|
|
return PatientRegisterNo;
|
|
|
|
}
|
|
|
|
public async Task<string> CreatePrePatientRegisterNo()
|
|
{
|
|
string maxnum = "1";
|
|
string date = DateTime.Now.ToString("yyMMdd");// 当天
|
|
var primarykeyBuilderEnt = await _primarykeyBuilderRepository.FirstOrDefaultAsync(f => f.PrimarykeyBuilderId == "pre_patient_register_no");
|
|
string prePatientRegisterNo;
|
|
if (primarykeyBuilderEnt != null)
|
|
{
|
|
if (primarykeyBuilderEnt.DateString != date)
|
|
{
|
|
//新的日期 为1 maxnum
|
|
primarykeyBuilderEnt.DateString = date;
|
|
}
|
|
|
|
maxnum = (Convert.ToInt32(primarykeyBuilderEnt.SerialNo) + 1).ToString();
|
|
primarykeyBuilderEnt.SerialNo = maxnum; //更新新的序列号
|
|
|
|
prePatientRegisterNo = date + maxnum.PadLeft(Convert.ToInt32(5), '0');
|
|
|
|
await _primarykeyBuilderRepository.UpdateAsync(primarykeyBuilderEnt);
|
|
}
|
|
else
|
|
{
|
|
//初始写入
|
|
|
|
prePatientRegisterNo = date + maxnum.PadLeft(Convert.ToInt32(5), '0');
|
|
|
|
primarykeyBuilderEnt = new PrimarykeyBuilder
|
|
{
|
|
PrimarykeyBuilderId = "patient_register_no",
|
|
DateString = date,
|
|
SerialNo = maxnum
|
|
};
|
|
|
|
await _primarykeyBuilderRepository.InsertAsync(primarykeyBuilderEnt, true);
|
|
}
|
|
return prePatientRegisterNo;
|
|
}
|
|
///// <summary>
|
|
///// 生成条码号(规则,先找体检中心的配置,如未找到,就直接使用全局的)
|
|
///// 模式(0 日期+尾号 1.顺序递增)
|
|
///// </summary>
|
|
///// <param name="OrganizationUnitId">体检中心ID</param>
|
|
///// <returns></returns>
|
|
//public async Task<string> CreatePatientNo(Guid OrganizationUnitId)
|
|
//{
|
|
// string PatientNo = "";
|
|
|
|
// string prefix = ""; //前缀
|
|
// int lastLength = 0;
|
|
// string mode = "0";
|
|
// string beginValue = "0";
|
|
|
|
// List<SysParmValue> spvlist = await _sysParmValueRepository.GetListAsync();
|
|
|
|
// if (CustomerOrgId == null || CustomerOrgId == Guid.Empty)
|
|
// {
|
|
// //个人
|
|
// spvlist = spvlist.Where(m => m.OrganizationUnitId == Guid.Empty).ToList();
|
|
// }
|
|
// else
|
|
// {
|
|
// var OrganizationUnitId = (await _customerOrgRepository.FindAsync(m => m.Id == CustomerOrgId)).OrganizationUnitId;
|
|
// if (OrganizationUnitId == null || OrganizationUnitId == Guid.Empty)
|
|
// {
|
|
// spvlist = spvlist.Where(m => m.OrganizationUnitId == Guid.Empty).ToList();
|
|
// }
|
|
// else
|
|
// {
|
|
// spvlist = spvlist.Where(m => m.OrganizationUnitId == OrganizationUnitId).ToList();
|
|
// }
|
|
// }
|
|
|
|
// var org_barcode_no_begin_value = spvlist.Where(m => m.SysParmId == "org_barcode_no_begin_value").FirstOrDefault(); //条码号建立规则--单位登记条码号开始值
|
|
// var barcode_no_build_rule_mode = spvlist.Where(m => m.SysParmId == "barcode_no_build_rule_mode").FirstOrDefault(); //条码号建立规则--编码方式
|
|
// var barcode_no_build_rule_length = spvlist.Where(m => m.SysParmId == "barcode_no_build_rule_length").FirstOrDefault(); //条码号建立规则--尾号长度
|
|
// var barcode_no_build_rule_prefix = spvlist.Where(m => m.SysParmId == "barcode_no_build_rule_prefix").FirstOrDefault(); //条码号建立规则--条码号前缀
|
|
|
|
// if (barcode_no_build_rule_mode != null)
|
|
// {
|
|
// mode = barcode_no_build_rule_mode.ParmValue; //编码方式
|
|
// }
|
|
|
|
// if (org_barcode_no_begin_value != null)
|
|
// {
|
|
// beginValue = org_barcode_no_begin_value.ParmValue; //单位起始值
|
|
// }
|
|
|
|
// if (barcode_no_build_rule_length != null)
|
|
// {
|
|
// lastLength = Convert.ToInt32(barcode_no_build_rule_length.ParmValue); //尾号长度
|
|
// }
|
|
|
|
// if (barcode_no_build_rule_prefix != null)
|
|
// {
|
|
// prefix = barcode_no_build_rule_prefix.ParmValue; //前缀
|
|
// }
|
|
|
|
|
|
// var primarykeyBuilderEnt = await _primarykeyBuilderRepository.FindAsync(f => f.PrimarykeyBuilderId == "patient_register");
|
|
|
|
|
|
|
|
// string writenum = "0";
|
|
// string maxnum = "0";
|
|
// string date = DateTime.Now.ToString("yyyyMMdd");// 当天
|
|
|
|
// if (mode == "0")
|
|
// {
|
|
// //日期+尾号 区分个人跟单位 个人1开始 单位未设置的单位起始值开始
|
|
// #region 模式0 日期+尾号
|
|
|
|
// if (primarykeyBuilderEnt != null)
|
|
// {
|
|
|
|
|
|
// if (primarykeyBuilderEnt.DateString == date)
|
|
// {
|
|
// //当天
|
|
// if (CustomerOrgId == null || CustomerOrgId == Guid.Empty)
|
|
// {
|
|
// //个人
|
|
// maxnum = (Convert.ToInt32(primarykeyBuilderEnt.SerialNo) + 1).ToString();
|
|
|
|
// }
|
|
// else
|
|
// {
|
|
// maxnum = (Convert.ToInt32(beginValue) + Convert.ToInt32(primarykeyBuilderEnt.SerialNo) + 1).ToString();
|
|
// }
|
|
|
|
// writenum = (Convert.ToInt32(primarykeyBuilderEnt.SerialNo) + 1).ToString();
|
|
|
|
// PatientNo = prefix + date + maxnum.PadLeft(lastLength, '0');
|
|
|
|
|
|
// }
|
|
// else
|
|
// {
|
|
// //已更换日期 重新初始化
|
|
// if (CustomerOrgId == null || CustomerOrgId == Guid.Empty)
|
|
// {
|
|
// //个人
|
|
// maxnum = (Convert.ToInt32(maxnum) + 1).ToString();
|
|
|
|
// }
|
|
// else
|
|
// {
|
|
// maxnum = (Convert.ToInt32(beginValue) + Convert.ToInt32(maxnum) + 1).ToString();
|
|
// }
|
|
|
|
// writenum = (Convert.ToInt32(maxnum) + 1).ToString();
|
|
|
|
// PatientNo = prefix + date + maxnum.PadLeft(lastLength, '0');
|
|
// }
|
|
|
|
|
|
|
|
|
|
// primarykeyBuilderEnt.DateString = date;
|
|
// primarykeyBuilderEnt.SerialNo = writenum;
|
|
// await _primarykeyBuilderRepository.UpdateAsync(primarykeyBuilderEnt);
|
|
// }
|
|
// else
|
|
// {
|
|
// //初始写入
|
|
|
|
// // maxnum = (Convert.ToInt32(maxnum) + 1).ToString();
|
|
|
|
// writenum = (Convert.ToInt32(maxnum) + 1).ToString();
|
|
|
|
|
|
// if (CustomerOrgId == null || CustomerOrgId == Guid.Empty)
|
|
// {
|
|
// //个人
|
|
// maxnum = (Convert.ToInt32(maxnum) + 1).ToString();
|
|
|
|
// }
|
|
// else
|
|
// {
|
|
// maxnum = (Convert.ToInt32(beginValue) + Convert.ToInt32(maxnum) + 1).ToString();
|
|
// }
|
|
|
|
|
|
// PatientNo = prefix + date + maxnum.PadLeft(lastLength, '0');
|
|
|
|
// primarykeyBuilderEnt = new PrimarykeyBuilder
|
|
// {
|
|
// PrimarykeyBuilderId = "patient_register",
|
|
// DateString = date,
|
|
// SerialNo = writenum
|
|
// };
|
|
|
|
// await _primarykeyBuilderRepository.InsertAsync(primarykeyBuilderEnt);
|
|
// }
|
|
// #endregion
|
|
// }
|
|
// else
|
|
// {
|
|
// //模式1 顺序递增 不区分个人跟单位
|
|
|
|
// #region 模式1 顺序递增
|
|
|
|
// if (primarykeyBuilderEnt != null)
|
|
// {
|
|
// maxnum = (Convert.ToInt32(primarykeyBuilderEnt.SerialNo) + 1).ToString();
|
|
|
|
// }
|
|
// else
|
|
// {
|
|
// //初始写入
|
|
|
|
// maxnum = (Convert.ToInt32(maxnum) + 1).ToString();
|
|
|
|
|
|
|
|
// primarykeyBuilderEnt = new PrimarykeyBuilder
|
|
// {
|
|
// PrimarykeyBuilderId = "patient_register",
|
|
// DateString = "",
|
|
// SerialNo = maxnum
|
|
// };
|
|
|
|
// await _primarykeyBuilderRepository.InsertAsync(primarykeyBuilderEnt);
|
|
// }
|
|
|
|
|
|
// PatientNo = prefix + maxnum.PadLeft(lastLength, '0');
|
|
// #endregion
|
|
|
|
// }
|
|
|
|
|
|
// return PatientNo;
|
|
|
|
//}
|
|
|
|
/// <summary>
|
|
/// 获取体检次数 最后一次加一
|
|
/// </summary>
|
|
/// <param name="PatientId"></param>
|
|
/// <returns></returns>
|
|
private async Task<short> GetPatientCount(Guid PatientId)
|
|
{
|
|
short MaxMedicalTimes = 0;
|
|
|
|
var patientRegisterEntList = await _repository.GetListAsync(m => m.PatientId == PatientId);
|
|
if (patientRegisterEntList.Count > 0)
|
|
MaxMedicalTimes = patientRegisterEntList.Max(m => m.MedicalTimes);
|
|
|
|
return (short)(MaxMedicalTimes + 1);
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取体检次数 不加一
|
|
/// </summary>
|
|
/// <param name="PatientId"></param>
|
|
/// <returns></returns>
|
|
public short GetPatientCountNoAsync(Guid PatientId)
|
|
{
|
|
short MaxMedicalTimes = 0;
|
|
|
|
var patientRegisterEntList = _repository.GetListAsync(m => m.PatientId == PatientId).Result;
|
|
if (patientRegisterEntList.Count > 0)
|
|
MaxMedicalTimes = patientRegisterEntList.Max(m => m.MedicalTimes);
|
|
|
|
return MaxMedicalTimes;
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 获取最后登记时间
|
|
/// </summary>
|
|
/// <param name="PatientId"></param>
|
|
/// <returns></returns>
|
|
public DateTime? GetPatientRegisterLastTime(Guid PatientId)
|
|
{
|
|
DateTime? LastTime = null;
|
|
|
|
var patientRegisterEntList = _repository.GetListAsync(m => m.PatientId == PatientId).Result;
|
|
if (patientRegisterEntList.Count > 0)
|
|
LastTime = patientRegisterEntList.OrderByDescending(o => o.CreationTime).First().CreationTime;
|
|
|
|
return LastTime;
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 回收表格
|
|
/// </summary>
|
|
/// <param name="PatientRegisterId">登记表ID</param>
|
|
/// <returns></returns>
|
|
public async Task<PatientRegister> UpdateRecoverGuideAsync(Guid PatientRegisterId)
|
|
{
|
|
var entity = await _repository.FindAsync(f => f.Id == PatientRegisterId);
|
|
if (entity != null)
|
|
{
|
|
entity.IsRecoverGuide = 'Y';
|
|
return await _repository.UpdateAsync(entity);
|
|
}
|
|
else
|
|
{
|
|
return entity;
|
|
}
|
|
}
|
|
|
|
private bool IsParmNotNUll(object obj)
|
|
{
|
|
if (obj == null)
|
|
return false;
|
|
else return true;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 删除 已废弃
|
|
/// </summary>
|
|
/// <param name="PatientRegisterId">人员登记表ID</param>
|
|
/// <returns></returns>
|
|
public async Task IsDelete(Guid PatientRegisterId)
|
|
{
|
|
//体检开始不能删 有一项收费了不能删
|
|
|
|
var ent = await _repository.GetAsync(PatientRegisterId);
|
|
if (ent != null)
|
|
{
|
|
if (ent.IsMedicalStart == 'Y')
|
|
{
|
|
throw new UserFriendlyException($"体检已开始,不能删除");
|
|
}
|
|
else
|
|
{
|
|
var registerAsbitemList = await _registerAsbitemRepository.GetListAsync(m => m.PatientRegisterId == PatientRegisterId);
|
|
if (registerAsbitemList.Count > 0)
|
|
{
|
|
foreach (var item in registerAsbitemList)
|
|
{
|
|
await _registerAsbitemManager.DeleteAsync(item.Id); //删除登记组合项目
|
|
}
|
|
}
|
|
|
|
await _repository.DeleteAsync(ent); //执行删除
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
throw new UserFriendlyException($"数据有误");
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 1.已有已检组合项目的不允许删除。
|
|
/// 2.已有收费的不允许删除。
|
|
/// 3.删除的时候,同步删除(组合项目(register_asbitem),
|
|
/// 登记检查(register_check),register_check_critical_value(危急值),
|
|
/// register_check_item,register_check_picture,register_check_suggestion,register_check_summary)
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <returns></returns>
|
|
/// <exception cref="UserFriendlyException"></exception>
|
|
public async Task CheckAndDeleteAsync(Guid id)
|
|
{
|
|
//var patientRegisterEnt = await _repository.FindAsync(m => m.Id == id);
|
|
|
|
var patientRegisterEnt = (await _repository.GetDbSetAsync())
|
|
.Include(x => x.RegisterCheckAsbitems)
|
|
.Where(m => m.Id == id)
|
|
.FirstOrDefault();
|
|
if (patientRegisterEnt != null)
|
|
{
|
|
if (patientRegisterEnt.IsLock == 'Y')
|
|
{
|
|
throw new UserFriendlyException("已加锁,不能删除");
|
|
}
|
|
|
|
var patientRegisterQueryable = (from a in await _repository.GetQueryableAsync()
|
|
join b in await _registerAsbitemRepository.GetQueryableAsync() on a.Id equals b.PatientRegisterId
|
|
join c in await _registerCheckRepository.GetQueryableAsync() on b.RegisterCheckId equals c.Id
|
|
where a.Id == id
|
|
select new
|
|
{
|
|
RegisterAsbitemId = b.Id,
|
|
RegisterCheckId = c.Id,
|
|
IsCharge = b.IsCharge,
|
|
PatientName = a.PatientName,
|
|
CompleteFlag = c.CompleteFlag,
|
|
}).AsQueryable();
|
|
|
|
if (patientRegisterQueryable.Where(m => m.IsCharge == 'Y').Count() > 0)
|
|
{
|
|
throw new UserFriendlyException($"人员\"{patientRegisterEnt.PatientName}\"已有项目收费,不能删除");
|
|
}
|
|
|
|
if (patientRegisterQueryable.Where(m => m.CompleteFlag == RegisterCheckCompleteFlag.Checked).Count() > 0)
|
|
{
|
|
throw new UserFriendlyException($"人员\"{patientRegisterEnt.PatientName}\"已有项目检查,不能删除");
|
|
}
|
|
|
|
|
|
//删除逻辑
|
|
|
|
|
|
var RegisterCheckIds = patientRegisterQueryable.Select(s => s.RegisterCheckId);
|
|
var RegisterAsbitemIds = patientRegisterQueryable.Select(s => s.RegisterAsbitemId);
|
|
|
|
|
|
if (RegisterCheckIds.Any())
|
|
{
|
|
//删除registerCheckSuggestion
|
|
await _registerCheckSuggestionManager.CheckAndDeleteAsync(RegisterCheckIds.ToList());
|
|
|
|
|
|
//删除registerCheckSummary
|
|
await _registerCheckSummaryManager.CheckAndDeleteAsync(RegisterCheckIds.ToList());
|
|
|
|
//删除registerCheckPicture
|
|
await _registerCheckPictureManager.CheckAndDeleteAsync(RegisterCheckIds.ToList());
|
|
|
|
//删除registerCheckItem
|
|
await _registerCheckItemManager.CheckAndDeleteAsync(RegisterCheckIds.ToList());
|
|
|
|
|
|
//删除registerCheckCriticalValue危警值
|
|
await _registerCheckCriticalValueManager.CheckAndDeleteAsync(RegisterCheckIds.ToList());
|
|
|
|
|
|
|
|
//删除registerCheck
|
|
await _registerCheckManager.CheckAndDeleteAsync(RegisterCheckIds.ToList());
|
|
|
|
}
|
|
if (RegisterAsbitemIds.Any())
|
|
//删除registerAsbitem
|
|
await _registerAsbitemManager.DeleteManyAsync(RegisterAsbitemIds.ToList());
|
|
|
|
//var registerAsbitemList = await _registerAsbitemRepository.GetListAsync(m => RegisterAsbitemIds.Contains(m.Id));
|
|
//if (registerAsbitemList.Any())
|
|
//{
|
|
// await _registerAsbitemRepository.DeleteManyAsync(registerAsbitemList);
|
|
//}
|
|
|
|
//删除登记表数据
|
|
await _repository.DeleteAsync(id);
|
|
|
|
}
|
|
else
|
|
{
|
|
throw new UserFriendlyException("数据不存在");
|
|
}
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 更改总检审核医生信息(保存时,医生跟日期不传时取默认登录的用户跟当前时间;取消时,如果不传就不更新医生跟日期,只更新状态)
|
|
/// </summary>
|
|
/// <param name="entitydto"></param>
|
|
/// <param name="entity"></param>
|
|
/// <returns></returns>
|
|
/// <exception cref="UserFriendlyException"></exception>
|
|
public async Task<PatientRegister> UpdatePatientRegisterAuditorDoctorAsync(
|
|
PatientRegister entitydto,
|
|
PatientRegister entity)
|
|
{
|
|
if (entity == null)
|
|
{
|
|
throw new UserFriendlyException("请求参数有误");
|
|
}
|
|
VerifyUpdate(entity);
|
|
if (entitydto.IsAudit == 'Y')
|
|
{
|
|
|
|
if (entitydto.AuditDoctorId == null || entitydto.AuditDoctorId == Guid.Empty)
|
|
entity.AuditDoctorId = _currentUser.Id != null ? _currentUser.Id : null;
|
|
else
|
|
entity.AuditDoctorId = entitydto.AuditDoctorId;
|
|
if (entitydto.AuditDate == null)
|
|
entity.AuditDate = DateTime.Now;
|
|
else
|
|
entity.AuditDate = entitydto.AuditDate;
|
|
}
|
|
|
|
entity.IsAudit = entitydto.IsAudit;
|
|
|
|
return await _repository.UpdateAsync(entity);
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 更改总检检查医生信息(保存时,医生跟日期不传时取默认登录的用户跟当前时间;取消时,如果不传就不更新医生跟日期,只更新状态)
|
|
/// </summary>
|
|
/// <param name="entitydto"></param>
|
|
/// <param name="entity"></param>
|
|
/// <returns></returns>
|
|
/// <exception cref="UserFriendlyException"></exception>
|
|
public async Task<PatientRegister> UpdatePatientRegisterSummaryDoctorAsync(
|
|
PatientRegister entitydto,
|
|
PatientRegister entity)
|
|
{
|
|
if (entity == null)
|
|
{
|
|
throw new UserFriendlyException("请求参数有误");
|
|
}
|
|
|
|
VerifyUpdate(entity);
|
|
|
|
if (entitydto.SummaryDoctorId == null || entitydto.SummaryDoctorId == Guid.Empty)
|
|
entity.SummaryDoctorId = _currentUser.Id != null ? _currentUser.Id : null;
|
|
else
|
|
entity.SummaryDoctorId = entitydto.SummaryDoctorId;
|
|
|
|
if (entitydto.SummaryDate == null)
|
|
entity.SummaryDate = DateTime.Now;
|
|
else
|
|
entity.SummaryDate = entitydto.SummaryDate;
|
|
|
|
entity.CompleteFlag = PatientRegisterCompleteFlag.SumCheck;
|
|
|
|
entity.MedicalConclusionId = entitydto.MedicalConclusionId;
|
|
|
|
return await _repository.UpdateAsync(entity);
|
|
}
|
|
|
|
|
|
public void VerifyUpdate(PatientRegister entity)
|
|
{
|
|
if (entity.IsLock == 'Y')
|
|
{
|
|
throw new UserFriendlyException("已加锁,不能更新");
|
|
}
|
|
}
|
|
}
|
|
}
|