using NPOI.Util; using Shentun.Peis.Enums; using Shentun.Peis.HelperDto; using Shentun.Peis.Models; using Shentun.Utilities; 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; namespace Shentun.Peis.Items { /// /// 项目设置 /// public class ItemManager : DomainService { private readonly IRepository _repository; private readonly IRepository _asbtiemDetailRepository; private readonly IRepository _itemTemplateDetailRepository; private readonly IRepository _registerCheckItemRepository; private readonly IRepository _referenceRangeRepository; private readonly IRepository _itemResultTemplateRepository; private readonly IRepository _itemResultMatchRepository; private readonly IRepository _patientRegisterRepository; private readonly IRepository _registerAsbitemRepository; private readonly IRepository _registerCheckRepository; public ItemManager( IRepository repository, IRepository itemResultMatchRepository, IRepository itemResultTemplateRepository, IRepository referenceRangeRepository, IRepository asbtiemDetailRepository, IRepository itemTemplateDetailRepository, IRepository registerCheckItemRepository, IRepository sexHormoneReferenceRangeRepository, IRepository patientRegisterRepository, IRepository registerAsbitemRepository, IRepository registerCheckRepository) { this._repository = repository; this._asbtiemDetailRepository = asbtiemDetailRepository; this._itemTemplateDetailRepository = itemTemplateDetailRepository; this._registerCheckItemRepository = registerCheckItemRepository; this._registerCheckRepository = registerCheckRepository; this._referenceRangeRepository = referenceRangeRepository; this._itemResultTemplateRepository = itemResultTemplateRepository; this._itemResultMatchRepository = itemResultMatchRepository; this._patientRegisterRepository = patientRegisterRepository; this._registerAsbitemRepository = registerAsbitemRepository; } /// /// 创建 /// /// /// public async Task CreateAsync( Item entity ) { Verify(entity); //await EntityHelper.CheckSameName(_repository, entity.DisplayName); var existEntity = await _repository.CountAsync(o => o.DisplayName == entity.DisplayName && o.ItemTypeId == entity.ItemTypeId); if (existEntity > 0) { throw new UserFriendlyException($"名称:'{entity.DisplayName}'在同一科室下已存在"); } return new Item { DisplayName = entity.DisplayName, SimpleCode = LanguageConverter.GetPYSimpleCode(entity.DisplayName), DisplayOrder = await EntityHelper.CreateMaxDisplayOrder(_repository), DefaultResult = entity.DefaultResult, DiagnosisFunction = entity.DiagnosisFunction, IsActive = entity.IsActive, IsContinueProcess = entity.IsContinueProcess, IsDiagnosisFunction = entity.IsDiagnosisFunction, ItemTypeId = entity.ItemTypeId, Price = entity.Price, CalculationFunction = entity.CalculationFunction, EnglishShortName = entity.EnglishShortName, InputCheck = entity.InputCheck, IsCalculationItem = entity.IsCalculationItem, IsNameIntoSummary = entity.IsNameIntoSummary, IsProduceSummary = entity.IsProduceSummary, PriceItemId = entity.PriceItemId, ReferenceRangeTypeFlag = entity.ReferenceRangeTypeFlag, ResultTemplateTypeFlag = entity.ResultTemplateTypeFlag, UnitId = entity.UnitId, LineModeFlag = entity.LineModeFlag, DeviceTypeId = entity.DeviceTypeId, IsCriticalValueFunction = entity.IsCriticalValueFunction, IsFollowUpFunction = entity.IsFollowUpFunction, FollowUpFunction = entity.FollowUpFunction, CriticalValueFunction = entity.CriticalValueFunction }; } /// /// 更新 /// /// /// /// public async Task UpdateAsync( Item sourceEntity, Item targetEntity ) { DataHelper.CheckEntityIsNull(targetEntity); Verify(sourceEntity); if (sourceEntity.DisplayName != targetEntity.DisplayName) { var existEntity = await _repository.CountAsync(o => o.Id != targetEntity.Id && o.DisplayName == sourceEntity.DisplayName && o.ItemTypeId == sourceEntity.ItemTypeId); if (existEntity > 0) { throw new UserFriendlyException($"名称:'{sourceEntity.DisplayName}'在同一科室下已存在"); } //await EntityHelper.CheckSameName(_repository, sourceEntity.DisplayName, targetEntity); targetEntity.DisplayName = sourceEntity.DisplayName; targetEntity.SimpleCode = LanguageConverter.GetPYSimpleCode(targetEntity.DisplayName); } targetEntity.DefaultResult = sourceEntity.DefaultResult; targetEntity.DiagnosisFunction = sourceEntity.DiagnosisFunction; targetEntity.IsActive = sourceEntity.IsActive; targetEntity.IsContinueProcess = sourceEntity.IsContinueProcess; targetEntity.IsDiagnosisFunction = sourceEntity.IsDiagnosisFunction; targetEntity.ItemTypeId = sourceEntity.ItemTypeId; targetEntity.Price = sourceEntity.Price; targetEntity.CalculationFunction = sourceEntity.CalculationFunction; targetEntity.EnglishShortName = sourceEntity.EnglishShortName; targetEntity.InputCheck = sourceEntity.InputCheck; targetEntity.IsCalculationItem = sourceEntity.IsCalculationItem; targetEntity.IsNameIntoSummary = sourceEntity.IsNameIntoSummary; targetEntity.IsProduceSummary = sourceEntity.IsProduceSummary; targetEntity.PriceItemId = sourceEntity.PriceItemId; targetEntity.ReferenceRangeTypeFlag = sourceEntity.ReferenceRangeTypeFlag; targetEntity.ResultTemplateTypeFlag = sourceEntity.ResultTemplateTypeFlag; targetEntity.UnitId = sourceEntity.UnitId; targetEntity.LineModeFlag = sourceEntity.LineModeFlag; targetEntity.DeviceTypeId = sourceEntity.DeviceTypeId; targetEntity.IsCriticalValueFunction = sourceEntity.IsCriticalValueFunction; targetEntity.IsFollowUpFunction = sourceEntity.IsFollowUpFunction; targetEntity.CriticalValueFunction = sourceEntity.CriticalValueFunction; targetEntity.FollowUpFunction = sourceEntity.FollowUpFunction; } private void Verify(Item entity) { DataHelper.CheckEntityIsNull(entity); DataHelper.CheckStringIsNull(entity.DisplayName, "名称"); DataHelper.CheckGuidIsDefaultValue(entity.ItemTypeId, "项目类别"); DataHelper.CheckCharIsYOrN(entity.IsProduceSummary, "是否生成小结"); DataHelper.CheckCharIsYOrN(entity.IsNameIntoSummary, "名称是否进入小结"); DataHelper.CheckCharIsYOrN(entity.IsDiagnosisFunction, "是否启用诊断函数"); DataHelper.CheckCharIsYOrN(entity.IsCalculationItem, "是否计算项目"); DataHelper.CheckCharIsYOrN(entity.IsContinueProcess, "是否继续处理"); DataHelper.CheckCharIsYOrN(entity.IsActive, "是否启用"); if (entity.ReferenceRangeTypeFlag != ItemReferenceRangeTypeFlag.None && entity.ReferenceRangeTypeFlag != ItemReferenceRangeTypeFlag.Number && entity.ReferenceRangeTypeFlag != ItemReferenceRangeTypeFlag.Character && entity.ReferenceRangeTypeFlag != ItemReferenceRangeTypeFlag.SexHormone) { throw new ArgumentException($"参考范围类别参数为:{entity.ReferenceRangeTypeFlag},是无效值,只能为'{ItemReferenceRangeTypeFlag.None}','{ItemReferenceRangeTypeFlag.Number}','{ItemReferenceRangeTypeFlag.Character}','{ItemReferenceRangeTypeFlag.SexHormone}'"); } DataHelper.CheckCharIsYOrN(entity.IsCriticalValueFunction, "是否启用危急值函数"); DataHelper.CheckCharIsYOrN(entity.IsFollowUpFunction, "是否启用随访函数"); } /// /// 更新参考范围类型 /// /// /// /// public async Task UpdateRangeTypeAsync(Guid itemid, char ReferenceRangeTypeFlag) { var itement = await _repository.GetAsync(itemid); if (itement != null) { itement.ReferenceRangeTypeFlag = ReferenceRangeTypeFlag; await _repository.UpdateAsync(itement); } } /// /// 修改排序 置顶,置底 /// /// 需要修改的ID /// 修改方式:1 置顶 2 置底 /// public async Task UpdateManySortAsync(Guid id, int SortType) { await EntityHelper.UpdateManySortAsync(_repository, id, SortType); } /// /// 修改排序 拖拽 /// /// /// /// /// public async Task UpdateSortManyAsync(UpdateSortManyDto input) { await EntityHelper.UpdateSortManyAsync(_repository, input); } /// /// 删除项目时,同步删除项目结果模板( item_result_template)、参考范围(reference_range)、结果匹配(item_result_match)、组合项目包含的项目(asbitem_detail),项目模板明细(ItemTemplateDetail)。 /// /// /// /// public async Task CheckAndDeleteAsync(Guid id) { var itemEnt = await _repository.FindAsync(m => m.Id == id); if (itemEnt != null) { var IsRegister = from a in await _patientRegisterRepository.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 join d in await _registerCheckItemRepository.GetQueryableAsync() on c.Id equals d.RegisterCheckId where d.ItemId == id select new { PatientName = a.PatientName }; if (IsRegister.Count() > 0) { throw new UserFriendlyException($"该项目已被{IsRegister.ToList().FirstOrDefault().PatientName}登记,无法删除"); } //删除item_result_match数据 var itemResultMatchList = await _itemResultMatchRepository.GetListAsync(m => m.ItemId == id); if (itemResultMatchList.Any()) { await _itemResultMatchRepository.DeleteManyAsync(itemResultMatchList); } //删除item_result_template数据 var itemResultTemplateList = await _itemResultTemplateRepository.GetListAsync(m => m.ItemId == id); if (itemResultTemplateList.Any()) { await _itemResultTemplateRepository.DeleteManyAsync(itemResultTemplateList); } //删除reference_range数据 var referenceRangeList = await _referenceRangeRepository.GetListAsync(m => m.ItemId == id); if (referenceRangeList.Any()) { await _referenceRangeRepository.DeleteManyAsync(referenceRangeList); } //删除asbitem_detail数据 var asbtiemDetailList = await _asbtiemDetailRepository.GetListAsync(m => m.ItemId == id); if (asbtiemDetailList.Any()) { await _asbtiemDetailRepository.DeleteManyAsync(asbtiemDetailList); } //删除项目模板明细 await _itemTemplateDetailRepository.DeleteAsync(m => m.ItemId == id); //删除项目 await _repository.DeleteAsync(id); } else { throw new UserFriendlyException("数据不存在"); } } } }