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.
304 lines
14 KiB
304 lines
14 KiB
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
|
|
{
|
|
|
|
/// <summary>
|
|
/// 项目设置
|
|
/// </summary>
|
|
public class ItemManager : DomainService
|
|
{
|
|
private readonly IRepository<Item, Guid> _repository;
|
|
private readonly IRepository<AsbitemDetail> _asbtiemDetailRepository;
|
|
private readonly IRepository<ItemTemplateDetail> _itemTemplateDetailRepository;
|
|
private readonly IRepository<RegisterCheckItem> _registerCheckItemRepository;
|
|
private readonly IRepository<ReferenceRange, Guid> _referenceRangeRepository;
|
|
private readonly IRepository<ItemResultTemplate, Guid> _itemResultTemplateRepository;
|
|
private readonly IRepository<ItemResultMatch, Guid> _itemResultMatchRepository;
|
|
private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;
|
|
private readonly IRepository<RegisterCheckAsbitem, Guid> _registerAsbitemRepository;
|
|
private readonly IRepository<RegisterCheck> _registerCheckRepository;
|
|
|
|
public ItemManager(
|
|
IRepository<Item, Guid> repository,
|
|
IRepository<ItemResultMatch, Guid> itemResultMatchRepository,
|
|
IRepository<ItemResultTemplate, Guid> itemResultTemplateRepository,
|
|
IRepository<ReferenceRange, Guid> referenceRangeRepository,
|
|
IRepository<AsbitemDetail> asbtiemDetailRepository,
|
|
IRepository<ItemTemplateDetail> itemTemplateDetailRepository,
|
|
IRepository<RegisterCheckItem> registerCheckItemRepository,
|
|
IRepository<SexHormoneReferenceRange, Guid> sexHormoneReferenceRangeRepository,
|
|
IRepository<PatientRegister, Guid> patientRegisterRepository,
|
|
IRepository<RegisterCheckAsbitem, Guid> registerAsbitemRepository,
|
|
IRepository<RegisterCheck, Guid> 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;
|
|
}
|
|
/// <summary>
|
|
/// 创建
|
|
/// </summary>
|
|
/// <param name="entity"></param>
|
|
/// <returns></returns>
|
|
public async Task<Item> CreateAsync(
|
|
Item entity
|
|
)
|
|
{
|
|
Verify(entity);
|
|
//await EntityHelper.CheckSameName<Item, Guid>(_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<Item>(_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
|
|
};
|
|
}
|
|
/// <summary>
|
|
/// 更新
|
|
/// </summary>
|
|
/// <param name="sourceEntity"></param>
|
|
/// <param name="targetEntity"></param>
|
|
/// <returns></returns>
|
|
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<Item, Guid>(_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, "是否启用随访函数");
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 更新参考范围类型
|
|
/// </summary>
|
|
/// <param name="sourceEntity"></param>
|
|
/// <param name="targetEntity"></param>
|
|
/// <returns></returns>
|
|
public async Task UpdateRangeTypeAsync(Guid itemid, char ReferenceRangeTypeFlag)
|
|
{
|
|
var itement = await _repository.GetAsync(itemid);
|
|
if (itement != null)
|
|
{
|
|
itement.ReferenceRangeTypeFlag = ReferenceRangeTypeFlag;
|
|
await _repository.UpdateAsync(itement);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 修改排序 置顶,置底
|
|
/// </summary>
|
|
/// <param name="id">需要修改的ID</param>
|
|
/// <param name="SortType">修改方式:1 置顶 2 置底</param>
|
|
/// <returns></returns>
|
|
public async Task UpdateManySortAsync(Guid id, int SortType)
|
|
{
|
|
await EntityHelper.UpdateManySortAsync(_repository, id, SortType);
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 修改排序 拖拽
|
|
/// </summary>
|
|
/// <typeparam name="TEntity"></typeparam>
|
|
/// <param name="repository"></param>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
public async Task UpdateSortManyAsync(UpdateSortManyDto input)
|
|
{
|
|
await EntityHelper.UpdateSortManyAsync(_repository, input);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 删除项目时,同步删除项目结果模板( item_result_template)、参考范围(reference_range)、结果匹配(item_result_match)、组合项目包含的项目(asbitem_detail),项目模板明细(ItemTemplateDetail)。
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <returns></returns>
|
|
/// <exception cref="UserFriendlyException"></exception>
|
|
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("数据不存在");
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
}
|