using Shentun.Peis.Enums; using Shentun.Peis.Models; using Shentun.Peis.RegisterCheckSuggestions; using Shentun.Peis.RegisterCheckSummarys; using System; using System.Collections.Generic; 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.Identity; using Volo.Abp.Users; namespace Shentun.Peis.RegisterChecks { /// /// 登记检查单 /// public class RegisterCheckManager : DomainService { private readonly IRepository _patientRegisterRepository; private readonly IRepository _registerCheckRepository; private readonly IRepository _registerCheckItemRepository; private readonly IRepository _sysParmValueRepository; private readonly IRepository _customerOrgRepository; private readonly IRepository _primarykeyBuilderRepository; private readonly IRepository _usersRepository; private readonly IRepository _identityUserOrganizationUnitRepository; private readonly RegisterCheckSummaryManager _registerCheckSummaryManager; private readonly RegisterCheckSuggestionManager _registerCheckSuggestionManager; private readonly CurrentUser _currentUser; public RegisterCheckManager(IRepository registerCheckRepository, IRepository sysParmValueRepository, IRepository customerOrgRepository, IRepository primarykeyBuilderRepository, CurrentUser currentUser, IRepository registerCheckItemRepository, RegisterCheckSummaryManager registerCheckSummaryManager, RegisterCheckSuggestionManager registerCheckSuggestionManager, IRepository patientRegisterRepository, IRepository usersRepository, IRepository identityUserOrganizationUnitRepository) { this._registerCheckRepository = registerCheckRepository; this._sysParmValueRepository = sysParmValueRepository; this._customerOrgRepository = customerOrgRepository; this._primarykeyBuilderRepository = primarykeyBuilderRepository; this._currentUser = currentUser; this._registerCheckItemRepository = registerCheckItemRepository; this._registerCheckSummaryManager = registerCheckSummaryManager; this._registerCheckSuggestionManager = registerCheckSuggestionManager; _patientRegisterRepository = patientRegisterRepository; _usersRepository = usersRepository; _identityUserOrganizationUnitRepository = identityUserOrganizationUnitRepository; } /// /// 添加数据 /// /// /// public async Task CreateAsync(RegisterCheck ent) { return await _registerCheckRepository.InsertAsync(ent); } /// /// 修改检查状态 0(为未检), 1(已检), 2(弃检) /// /// 检查单ID /// 检查状态 /// public async Task UpdateCompleteAsync(Guid RegisterCheckId, char CompleteFlag) { var registerCheckEnt = await _registerCheckRepository.GetAsync(RegisterCheckId); //if (registerCheckEnt == null) // throw new UserFriendlyException($"数据有误"); if (CompleteFlag != RegisterCheckCompleteFlag.UnChecked && CompleteFlag != RegisterCheckCompleteFlag.GiveUpChecked) { throw new UserFriendlyException("只能删除结果和弃检时使用,禁止调用"); } var patientRegister = await _patientRegisterRepository.GetAsync(registerCheckEnt.PatientRegisterId); if (patientRegister.CompleteFlag == PatientRegisterCompleteFlag.SumCheck) { throw new UserFriendlyException("已总检,不能修改检查状态"); } if (patientRegister.IsLock == 'Y') { throw new UserFriendlyException("人员登记信息已加锁,不能修改检查状态"); } if (registerCheckEnt.IsLock == 'Y') { throw new UserFriendlyException("组合项目已加锁,不能修改检查状态"); } var count = (await _registerCheckRepository.GetQueryableAsync()).Where(o => o.PatientRegisterId == patientRegister.Id && o.Id != RegisterCheckId && o.CompleteFlag != RegisterCheckCompleteFlag.UnChecked).Count(); if (count == 0) { patientRegister.CompleteFlag = PatientRegisterCompleteFlag.Registration; await _patientRegisterRepository.UpdateAsync(patientRegister); } registerCheckEnt.CompleteFlag = CompleteFlag; if (registerCheckEnt.CompleteFlag == RegisterCheckCompleteFlag.UnChecked) { registerCheckEnt.CheckDoctorId = null; registerCheckEnt.ExecOrganizationUnitId = null; registerCheckEnt.CheckDate = null; } var result = await _registerCheckRepository.UpdateAsync(registerCheckEnt); if (registerCheckEnt.CompleteFlag == RegisterCheckCompleteFlag.UnChecked) { List registerCheckItems = await _registerCheckItemRepository.GetListAsync(m => m.RegisterCheckId == RegisterCheckId); foreach (var item in registerCheckItems) { item.Result = ""; } await _registerCheckItemRepository.UpdateManyAsync(registerCheckItems); await _registerCheckSummaryManager.CheckAndDeleteAsync(RegisterCheckId); await _registerCheckSuggestionManager.CheckAndDeleteAsync(RegisterCheckId); } return result; } /// /// 更新审核状态 Y 已审核 N 未审核 /// /// 检查单ID /// 审核状态( Y 已审核 N 未审核) /// public async Task UpdateIsAuditAsync(Guid RegisterCheckId, char IsAudit) { var registerCheckEnt = await _registerCheckRepository.GetAsync(RegisterCheckId); if (registerCheckEnt == null) throw new UserFriendlyException($"数据有误"); registerCheckEnt.IsAudit = IsAudit; return await _registerCheckRepository.UpdateAsync(registerCheckEnt); } /// /// 更改检查医生(自动更新完成状态为已检) /// /// /// /// /// public async Task UpdateCheckDoctorAsync( RegisterCheck entitydto, RegisterCheck entity) { if (entity == null) { throw new UserFriendlyException("请求参数有误"); } if (entitydto.CheckDate == null) entity.CheckDate = DateTime.Now; else entity.CheckDate = entitydto.CheckDate; if (string.IsNullOrWhiteSpace(entitydto.CheckDoctorId)) { entitydto.CheckDoctorId = _currentUser.Id.ToString(); } entity.CheckDoctorId = entitydto.CheckDoctorId; entity.CompleteFlag = RegisterCheckCompleteFlag.Checked; return await _registerCheckRepository.UpdateAsync(entity); } public void UpdateCheckDoctorAndDateAsync( PatientRegister patientRegister, RegisterCheck entity, string checkDoctorId, DateTime? checkDate, Guid? execOrganizationUnitId ) { if (entity == null) { throw new UserFriendlyException("请求参数有误"); } if (patientRegister.CompleteFlag == PatientRegisterCompleteFlag.SumCheck) { throw new UserFriendlyException("已总检不允许修改"); } if (patientRegister.IsLock == 'Y') { throw new UserFriendlyException("人员已加锁不允许修改"); } if (entity.IsLock == 'Y') { throw new UserFriendlyException("检查项目已加锁不允许修改"); } if (checkDate == null) entity.CheckDate = DateTime.Now; else entity.CheckDate = checkDate; if (string.IsNullOrWhiteSpace(checkDoctorId)) { checkDoctorId = _currentUser.Id.ToString(); } entity.CheckDoctorId = checkDoctorId; entity.CompleteFlag = RegisterCheckCompleteFlag.Checked; if(execOrganizationUnitId != null && execOrganizationUnitId != Guid.Empty) { entity.ExecOrganizationUnitId = execOrganizationUnitId; } else { if(Guid.TryParse(entity.CheckDoctorId,out var checkDoctorIdGuid)) { var identityUserOrganizationUnit = _identityUserOrganizationUnitRepository.GetAsync(o => o.UserId == checkDoctorIdGuid).Result; entity.ExecOrganizationUnitId = identityUserOrganizationUnit.OrganizationUnitId; } } } /// /// 更改危警值内容 /// /// /// /// /// public async Task UpdateCriticalValueAsync( RegisterCheck entitydto, RegisterCheck entity) { if (entity == null) { throw new UserFriendlyException("请求参数有误"); } entity.CriticalRangeValue = entitydto.CriticalRangeValue; //if (entitydto.CriticalValueCreateDate == null) // entity.CriticalValueCreateDate = DateTime.Now; //else // entity.CriticalValueCreateDate = entitydto.CriticalValueCreateDate; //entity.CriticalValueContent = entitydto.CriticalValueContent; //if (entitydto.CriticalValueProcessDate == null) // entity.CriticalValueProcessDate = DateTime.Now; //else // entity.CriticalValueProcessDate = entitydto.CriticalValueProcessDate; entity.IsCriticalValue = entitydto.IsCriticalValue; //entity.CriticalValueProcessDoctor = entitydto.CriticalValueProcessDoctor; //entity.CriticalValueProcessFlag = entitydto.CriticalValueProcessFlag; return await _registerCheckRepository.UpdateAsync(entity); } /// /// 更改审核医生(自动更新审核状态为已审核) /// /// /// /// /// public async Task UpdateAuditorDoctorAsync( RegisterCheck entitydto, RegisterCheck entity) { if (entity == null) { throw new UserFriendlyException("请求参数有误"); } //取当前登录用户ID entity.AuditorUserId = _currentUser.Id; if (entitydto.AuditTime == null) entity.AuditTime = DateTime.Now; else entity.AuditTime = entitydto.AuditTime; entity.IsAudit = 'Y'; return await _registerCheckRepository.UpdateAsync(entity); } ///// ///// 生成检查单号 ///// ///// 单位ID ///// //public async Task CreateCheckRequestNo(Guid? CustomerOrgId) //{ // string PatientNo = ""; // string prefix = ""; //前缀 // int lastLength = 4; // List 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 check_barcode_format_prefix = spvlist.Where(m => m.SysParmId == "check_barcode_format_prefix").FirstOrDefault(); //条码号建立规则--单位登记条码号开始值 // var check_barcode_format_length = spvlist.Where(m => m.SysParmId == "check_barcode_format_length").FirstOrDefault(); //条码号建立规则--编码方式 // if (check_barcode_format_length == null && CustomerOrgId != null && CustomerOrgId != Guid.Empty) // { // //组织下未找到参数,查找全局 // spvlist = await _sysParmValueRepository.GetListAsync(m => m.OrganizationUnitId == Guid.Empty); // check_barcode_format_prefix = spvlist.Where(m => m.SysParmId == "check_barcode_format_prefix").FirstOrDefault(); //条码号建立规则--单位登记条码号开始值 // check_barcode_format_length = spvlist.Where(m => m.SysParmId == "check_barcode_format_length").FirstOrDefault(); //条码号建立规则--编码方式 // } // if (check_barcode_format_length != null) // { // lastLength = Convert.ToInt32(check_barcode_format_length.ParmValue); //尾号长度 // } // if (check_barcode_format_prefix != null) // { // prefix = check_barcode_format_prefix.ParmValue; //前缀 // } // var primarykeyBuilderEnt = await _primarykeyBuilderRepository.FindAsync(f => f.PrimarykeyBuilderId == "register_check"); // string maxnum = "0"; // string date = DateTime.Now.ToString("yyyyMMdd");// 当天 // //日期+尾号 个人1开始 // #region 日期+尾号 // if (primarykeyBuilderEnt != null) // { // if (primarykeyBuilderEnt.DateString == date) // { // //当天 // //个人 // maxnum = (Convert.ToInt32(primarykeyBuilderEnt.SerialNo) + 1).ToString(); // } // else // { // //已更换日期 重新初始化 // //个人 // maxnum = (Convert.ToInt32(maxnum) + 1).ToString(); // } // // // primarykeyBuilderEnt.DateString = date; // primarykeyBuilderEnt.SerialNo = maxnum; // await _primarykeyBuilderRepository.UpdateAsync(primarykeyBuilderEnt); // } // else // { // //初始写入 // maxnum = (Convert.ToInt32(maxnum) + 1).ToString(); // primarykeyBuilderEnt = new PrimarykeyBuilder // { // DateString = date, // PrimarykeyBuilderId = "register_check", // SerialNo = maxnum, // }; // await _primarykeyBuilderRepository.InsertAsync(primarykeyBuilderEnt); // } // #endregion // PatientNo = prefix + DateTime.Now.ToString("yyyyMMdd") + maxnum.PadLeft(lastLength, '0'); // return PatientNo; //} /// /// 生成检查单号(规则,先找体检中心的配置,如未找到,就直接使用全局的) /// 模式(0 日期+尾号 1.顺序递增) /// /// 体检中心ID /// public async Task CreateCheckRequestNo(Guid OrganizationUnitId) { //register_check CheckRequestNo string CheckRequestNo = ""; //检查单号 List spvlist = await _sysParmValueRepository.GetListAsync(); var spv_tjzx = spvlist.Where(m => m.MedicalCenterId == OrganizationUnitId); //体检中心配置 var spv_global = spvlist.Where(m => m.MedicalCenterId == Guid.Empty); //全局配置 var check_request_no_rule_coding = "0"; // 模式(0 日期+尾号 1.顺序递增) var check_request_no_rule_tail_len = "4"; //尾号长度 var check_request_no_rule_prefix = ""; //前缀 if (spv_tjzx.Where(m => m.SysParmId == "check_request_no_rule_coding").Count() > 0) { //获取体检中心配置 check_request_no_rule_coding = spv_tjzx.Where(m => m.SysParmId == "check_request_no_rule_coding").FirstOrDefault().ParmValue; } if (string.IsNullOrWhiteSpace(check_request_no_rule_coding)) { var check_request_no_rule_coding_ent = spv_global.Where(m => m.SysParmId == "check_request_no_rule_coding").FirstOrDefault(); if (check_request_no_rule_coding_ent == null) { throw new UserFriendlyException("全局系统参数check_request_no_rule_coding未配置"); } else { //获取全局配置 check_request_no_rule_coding = check_request_no_rule_coding_ent.ParmValue; } } if (string.IsNullOrWhiteSpace(check_request_no_rule_coding)) { throw new UserFriendlyException("检查申请单号编码方式不能为空"); } if (spv_tjzx.Where(m => m.SysParmId == "check_request_no_rule_tail_len").Count() > 0) { //获取体检中心配置 check_request_no_rule_tail_len = spv_tjzx.Where(m => m.SysParmId == "check_request_no_rule_tail_len").FirstOrDefault().ParmValue; } if (string.IsNullOrWhiteSpace(check_request_no_rule_tail_len)) { var check_request_no_rule_tail_len_ent = spv_global.Where(m => m.SysParmId == "check_request_no_rule_tail_len").FirstOrDefault(); if (check_request_no_rule_tail_len_ent == null) { throw new UserFriendlyException("全局系统参数check_request_no_rule_tail_len未配置"); } else { //获取全局配置 check_request_no_rule_tail_len = check_request_no_rule_tail_len_ent.ParmValue; } } if (spv_tjzx.Where(m => m.SysParmId == "check_request_no_rule_prefix").Count() > 0) { //获取体检中心配置 check_request_no_rule_prefix = spv_tjzx.Where(m => m.SysParmId == "check_request_no_rule_prefix").FirstOrDefault().ParmValue; } if (string.IsNullOrWhiteSpace(check_request_no_rule_prefix)) { var check_request_no_rule_prefix_ent = spv_global.Where(m => m.SysParmId == "check_request_no_rule_prefix").FirstOrDefault(); if (check_request_no_rule_prefix_ent == null) { throw new UserFriendlyException("全局系统参数check_request_no_rule_prefix未配置"); } else { //获取全局配置 check_request_no_rule_prefix = check_request_no_rule_prefix_ent.ParmValue; } } if (string.IsNullOrWhiteSpace(check_request_no_rule_tail_len)) { throw new UserFriendlyException("检查申请单号尾号长度不能为空"); } int tailLen; if (!int.TryParse(check_request_no_rule_tail_len, out tailLen)) { throw new UserFriendlyException("检查申请单号尾号长度必须是数字"); }; if (tailLen < 4) { throw new UserFriendlyException("检查申请单号尾号长度必须大于等于4"); } var primarykeyBuilderEnt = await _primarykeyBuilderRepository.FirstOrDefaultAsync(f => f.PrimarykeyBuilderId == "check_request_no"); string maxnum = "1"; string date = DateTime.Now.ToString("yyMMdd");// 当天 if (check_request_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; //更新新的序列号 CheckRequestNo = check_request_no_rule_prefix + date + maxnum.PadLeft(Convert.ToInt32(check_request_no_rule_tail_len), '0'); await _primarykeyBuilderRepository.UpdateAsync(primarykeyBuilderEnt); } else { //初始写入 CheckRequestNo = check_request_no_rule_prefix + date + maxnum.PadLeft(Convert.ToInt32(check_request_no_rule_tail_len), '0'); primarykeyBuilderEnt = new PrimarykeyBuilder { PrimarykeyBuilderId = "check_request_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 = "check_request_no", DateString = "", SerialNo = maxnum }; await _primarykeyBuilderRepository.InsertAsync(primarykeyBuilderEnt,true); } CheckRequestNo = check_request_no_rule_prefix + maxnum.PadLeft(Convert.ToInt32(check_request_no_rule_tail_len), '0'); #endregion } return CheckRequestNo; } /// /// 批量 /// /// RegisterCheck表ID 集合 /// /// public async Task CheckAndDeleteAsync(List RegisterCheckIds) { if (RegisterCheckIds.Count > 0) { var registerCheckCriticalValueList = await _registerCheckRepository.GetListAsync(m => RegisterCheckIds.Contains(m.Id)); if (registerCheckCriticalValueList.Any()) { await _registerCheckRepository.DeleteManyAsync(registerCheckCriticalValueList); } } else { throw new UserFriendlyException("数据不存在"); } } } }