|
|
|
@ -1,6 +1,7 @@ |
|
|
|
using Microsoft.EntityFrameworkCore; |
|
|
|
using Shentun.Peis.Models; |
|
|
|
using Shentun.Peis.ReferenceRanges; |
|
|
|
using Shentun.Peis.RegisterCheckItems; |
|
|
|
using Shentun.Peis.RegisterChecks; |
|
|
|
using System; |
|
|
|
using System.Collections.Generic; |
|
|
|
@ -24,34 +25,41 @@ namespace Shentun.Peis.RegisterAsbitems |
|
|
|
private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository; |
|
|
|
private readonly IRepository<RegisterCheckItem> _registerCheckItemRepository; |
|
|
|
private readonly IRepository<AsbitemDetail> _asbitemDetailRepository; |
|
|
|
private readonly IRepository<Asbitem, Guid> _asbitemRepository; |
|
|
|
private readonly IRepository<Unit, Guid> _unitRepository; |
|
|
|
private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository; |
|
|
|
private readonly IRepository<Item, Guid> _itemRepository; |
|
|
|
private readonly IRepository<ReferenceRange, Guid> _referenceRangeRepository; |
|
|
|
private readonly ReferenceRangeManager _referenceRangeManager; |
|
|
|
private readonly RegisterCheckManager _registerCheckManager; |
|
|
|
private readonly RegisterCheckItemManager _registerCheckItemManager; |
|
|
|
|
|
|
|
public RegisterAsbitemManager(IRepository<RegisterAsbitem, Guid> registerAsbitemRepository, |
|
|
|
IRepository<RegisterCheck, Guid> registerCheckRepository, |
|
|
|
IRepository<RegisterCheckItem> registerCheckItemRepository, |
|
|
|
IRepository<AsbitemDetail> asbitemDetailRepository, |
|
|
|
IRepository<Asbitem, Guid> asbitemRepository, |
|
|
|
IRepository<Unit, Guid> unitRepository, |
|
|
|
IRepository<PatientRegister, Guid> patientRegisterRepository, |
|
|
|
IRepository<Item, Guid> itemRepository, |
|
|
|
IRepository<ReferenceRange, Guid> referenceRangeRepository, |
|
|
|
ReferenceRangeManager referenceRangeManager, |
|
|
|
RegisterCheckManager registerCheckManager) |
|
|
|
RegisterCheckManager registerCheckManager, |
|
|
|
RegisterCheckItemManager registerCheckItemManager |
|
|
|
) |
|
|
|
{ |
|
|
|
this._registerAsbitemRepository = registerAsbitemRepository; |
|
|
|
this._registerCheckRepository = registerCheckRepository; |
|
|
|
this._registerCheckItemRepository = registerCheckItemRepository; |
|
|
|
this._asbitemDetailRepository = asbitemDetailRepository; |
|
|
|
this._asbitemRepository = asbitemRepository; |
|
|
|
this._unitRepository = unitRepository; |
|
|
|
this._patientRegisterRepository = patientRegisterRepository; |
|
|
|
this._itemRepository = itemRepository; |
|
|
|
this._referenceRangeRepository = referenceRangeRepository; |
|
|
|
this._referenceRangeManager = referenceRangeManager; |
|
|
|
this._registerCheckManager = registerCheckManager; |
|
|
|
this._registerCheckItemManager = registerCheckItemManager; |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
@ -67,10 +75,6 @@ namespace Shentun.Peis.RegisterAsbitems |
|
|
|
if (IsregisterAsbitemEnt == null) |
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//添加check跟item数据
|
|
|
|
|
|
|
|
#region 默认添加RegisterCheck数据
|
|
|
|
@ -164,6 +168,33 @@ namespace Shentun.Peis.RegisterAsbitems |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#region 数据登记完,自动合并 先判断自身组合项目能否合并 如果可以合并再去找当前登记下的组合项目是否有同项目类别的数据(并且判断这个组合项目是否为可以合并的)
|
|
|
|
|
|
|
|
var asbitemEnt = (await _asbitemRepository.GetDbSetAsync()).Include(x => x.ItemType).Where(m => m.Id == ent.AsbitemId).FirstOrDefault(); |
|
|
|
if (asbitemEnt != null) |
|
|
|
{ |
|
|
|
if (asbitemEnt.IsItemResultMerger == 'Y' && asbitemEnt.ItemType.IsMergeAsbitem == 'Y') |
|
|
|
{ |
|
|
|
//可以合并
|
|
|
|
//查询需要合并的数据
|
|
|
|
var mergerRegisterAsbitemList = (await _registerAsbitemRepository.GetDbSetAsync()).Include(x => x.Asbitem).Include(x => x.Asbitem.ItemType) |
|
|
|
.Where(m => m.PatientRegisterId == ent.PatientRegisterId |
|
|
|
&& m.Asbitem.IsItemResultMerger == 'Y' |
|
|
|
&& m.Asbitem.ItemType.IsMergeAsbitem == 'Y' |
|
|
|
&& m.Asbitem.ItemTypeId == asbitemEnt.ItemTypeId); |
|
|
|
|
|
|
|
//1就是本身
|
|
|
|
if (mergerRegisterAsbitemList.Count() > 1) |
|
|
|
{ |
|
|
|
//有需要合并的数据
|
|
|
|
|
|
|
|
await MergeRegisterAsbitemAsync(mergerRegisterAsbitemList.Select(s => s.Id).ToList(), OrganizationUnitId); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
return registerAsbitemEnt_Res; |
|
|
|
} |
|
|
|
@ -261,7 +292,243 @@ namespace Shentun.Peis.RegisterAsbitems |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 合并组合项目
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="RegisterAsbitemIds"></param>
|
|
|
|
/// <param name="OrganizationUnitId">体检中心ID</param>
|
|
|
|
/// <returns></returns>
|
|
|
|
public async Task MergeRegisterAsbitemAsync(List<Guid> RegisterAsbitemIds, Guid OrganizationUnitId) |
|
|
|
{ |
|
|
|
|
|
|
|
//原有项目
|
|
|
|
var registerAsbitemList = await _registerAsbitemRepository.GetListAsync(m => RegisterAsbitemIds.Contains(m.Id)); |
|
|
|
|
|
|
|
//待删除RegisterCheck
|
|
|
|
List<Guid> RegisterCheckIds = registerAsbitemList.GroupBy(g => g.RegisterCheckId).Select(s => s.Key).ToList(); |
|
|
|
|
|
|
|
//删除registerCheckItem
|
|
|
|
await _registerCheckItemManager.CheckAndDeleteAsync(RegisterCheckIds); |
|
|
|
|
|
|
|
//删除registerCheck
|
|
|
|
await _registerCheckManager.CheckAndDeleteAsync(RegisterCheckIds); |
|
|
|
|
|
|
|
#region 重新插入一个新的registerCheck
|
|
|
|
|
|
|
|
|
|
|
|
//添加check跟item数据
|
|
|
|
|
|
|
|
#region 默认添加RegisterCheck数据
|
|
|
|
|
|
|
|
RegisterCheck registerCheckEnt = new RegisterCheck |
|
|
|
{ |
|
|
|
CheckRequestNo = await _registerCheckManager.CreateCheckRequestNo(OrganizationUnitId), |
|
|
|
CheckRequestPrintTimes = 0, |
|
|
|
CompleteFlag = '0', |
|
|
|
IsAudit = 'N', |
|
|
|
IsLock = 'N' |
|
|
|
}; |
|
|
|
|
|
|
|
var registerCheckEnt_Res = await _registerCheckRepository.InsertAsync(registerCheckEnt, true); |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
if (registerCheckEnt_Res != null) |
|
|
|
{ |
|
|
|
#region 默认添加RegisterCheckItem数据 需要遍历Item
|
|
|
|
|
|
|
|
// var itemList = await _asbitemDetailRepository.GetListAsync(m => m.AsbitemId == ent.AsbitemId);
|
|
|
|
var asbitemDetailList = (await _asbitemDetailRepository.GetDbSetAsync()).Include(x => x.Item).Where(m => registerAsbitemList.Select(s => s.AsbitemId).Contains(m.AsbitemId)).ToList(); |
|
|
|
List<RegisterCheckItem> registerCheckItemList = new List<RegisterCheckItem>(); |
|
|
|
|
|
|
|
if (asbitemDetailList.Any()) |
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
var itemList = await _itemRepository.GetListAsync(); |
|
|
|
var referenceRangeList = await _referenceRangeRepository.GetListAsync(); |
|
|
|
var patientRegisterEnt = await _patientRegisterRepository.GetAsync(registerAsbitemList.FirstOrDefault().PatientRegisterId); |
|
|
|
|
|
|
|
foreach (var item in asbitemDetailList) |
|
|
|
{ |
|
|
|
//参考范围
|
|
|
|
// var referenceRangeEnt = await _referenceRangeManager.GetReferenceRangeInSexAge(item.ItemId, ent.PatientRegisterId);
|
|
|
|
var referenceRangeEnt = _referenceRangeManager.GetReferenceRangeInSexAgeTemp(referenceRangeList, |
|
|
|
itemList.Where(m => m.Id == item.ItemId).FirstOrDefault(), |
|
|
|
patientRegisterEnt.SexId, |
|
|
|
patientRegisterEnt.Age); |
|
|
|
|
|
|
|
string UnitName = ""; |
|
|
|
if (item.Item.UnitId != Guid.Empty) |
|
|
|
{ |
|
|
|
//单位
|
|
|
|
var unitEnt = await _unitRepository.GetAsync(item.Item.UnitId); |
|
|
|
if (unitEnt != null) |
|
|
|
{ |
|
|
|
UnitName = unitEnt.DisplayName; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
RegisterCheckItem registerCheckItem = new RegisterCheckItem |
|
|
|
{ |
|
|
|
ItemId = item.ItemId, |
|
|
|
RegisterCheckId = registerCheckEnt_Res.Id, |
|
|
|
ReferenceRangeValue = referenceRangeEnt == null ? "" : referenceRangeEnt.ReferenceRangeValue, |
|
|
|
CriticalRangeValue = referenceRangeEnt == null ? "" : referenceRangeEnt.CriticalRangeValue, |
|
|
|
Unit = UnitName |
|
|
|
}; |
|
|
|
|
|
|
|
//去重
|
|
|
|
if (!registerCheckItemList.Any() || (registerCheckItemList.Any() && registerCheckItemList.Where(m => m.ItemId == registerCheckItem.ItemId).Count() == 0)) |
|
|
|
registerCheckItemList.Add(registerCheckItem); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
await _registerCheckItemRepository.InsertManyAsync(registerCheckItemList); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
registerAsbitemList.ForEach(registerAsbitem => registerAsbitem.RegisterCheckId = registerCheckEnt_Res.Id); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 取消合并组合项目 按RegisterAsbitemId重新生成新的RegisterCheck数据
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="RegisterAsbitemIds"></param>
|
|
|
|
/// <param name="OrganizationUnitId">体检中心ID</param>
|
|
|
|
/// <returns></returns>
|
|
|
|
public async Task CancelMergeRegisterAsbitemAsync(List<Guid> RegisterAsbitemIds, Guid RegisterCheckId, Guid OrganizationUnitId) |
|
|
|
{ |
|
|
|
|
|
|
|
//原有项目
|
|
|
|
var registerAsbitemList = await _registerAsbitemRepository.GetListAsync(m => RegisterAsbitemIds.Contains(m.Id)); |
|
|
|
|
|
|
|
//待删除RegisterCheck
|
|
|
|
List<Guid> RegisterCheckIds = new List<Guid> { RegisterCheckId }; |
|
|
|
|
|
|
|
//删除registerCheckItem
|
|
|
|
await _registerCheckItemManager.CheckAndDeleteAsync(RegisterCheckIds); |
|
|
|
|
|
|
|
//删除registerCheck
|
|
|
|
await _registerCheckManager.CheckAndDeleteAsync(RegisterCheckIds); |
|
|
|
|
|
|
|
#region 重新插入多个新的registerCheck
|
|
|
|
|
|
|
|
foreach (var registerAsbitem in registerAsbitemList) |
|
|
|
{ |
|
|
|
#region 默认添加RegisterCheck数据
|
|
|
|
|
|
|
|
|
|
|
|
RegisterCheck registerCheckEnt = new RegisterCheck |
|
|
|
{ |
|
|
|
CheckRequestNo = await _registerCheckManager.CreateCheckRequestNo(OrganizationUnitId), |
|
|
|
CheckRequestPrintTimes = 0, |
|
|
|
CompleteFlag = '0', |
|
|
|
IsAudit = 'N', |
|
|
|
IsLock = 'N' |
|
|
|
}; |
|
|
|
|
|
|
|
var registerCheckEnt_Res = await _registerCheckRepository.InsertAsync(registerCheckEnt, true); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (registerCheckEnt_Res != null) |
|
|
|
{ |
|
|
|
#region 默认添加RegisterCheckItem数据 需要遍历Item
|
|
|
|
|
|
|
|
// var itemList = await _asbitemDetailRepository.GetListAsync(m => m.AsbitemId == ent.AsbitemId);
|
|
|
|
var asbitemDetailList = (await _asbitemDetailRepository.GetDbSetAsync()).Include(x => x.Item).Where(m => m.AsbitemId == registerAsbitem.AsbitemId).ToList(); |
|
|
|
List<RegisterCheckItem> registerCheckItemList = new List<RegisterCheckItem>(); |
|
|
|
|
|
|
|
if (asbitemDetailList.Any()) |
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
var itemList = await _itemRepository.GetListAsync(); |
|
|
|
var referenceRangeList = await _referenceRangeRepository.GetListAsync(); |
|
|
|
var patientRegisterEnt = await _patientRegisterRepository.GetAsync(registerAsbitemList.FirstOrDefault().PatientRegisterId); |
|
|
|
|
|
|
|
foreach (var item in asbitemDetailList) |
|
|
|
{ |
|
|
|
//参考范围
|
|
|
|
// var referenceRangeEnt = await _referenceRangeManager.GetReferenceRangeInSexAge(item.ItemId, ent.PatientRegisterId);
|
|
|
|
var referenceRangeEnt = _referenceRangeManager.GetReferenceRangeInSexAgeTemp(referenceRangeList, |
|
|
|
itemList.Where(m => m.Id == item.ItemId).FirstOrDefault(), |
|
|
|
patientRegisterEnt.SexId, |
|
|
|
patientRegisterEnt.Age); |
|
|
|
|
|
|
|
string UnitName = ""; |
|
|
|
if (item.Item.UnitId != Guid.Empty) |
|
|
|
{ |
|
|
|
//单位
|
|
|
|
var unitEnt = await _unitRepository.GetAsync(item.Item.UnitId); |
|
|
|
if (unitEnt != null) |
|
|
|
{ |
|
|
|
UnitName = unitEnt.DisplayName; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
RegisterCheckItem registerCheckItem = new RegisterCheckItem |
|
|
|
{ |
|
|
|
ItemId = item.ItemId, |
|
|
|
RegisterCheckId = registerCheckEnt_Res.Id, |
|
|
|
ReferenceRangeValue = referenceRangeEnt == null ? "" : referenceRangeEnt.ReferenceRangeValue, |
|
|
|
CriticalRangeValue = referenceRangeEnt == null ? "" : referenceRangeEnt.CriticalRangeValue, |
|
|
|
Unit = UnitName |
|
|
|
}; |
|
|
|
registerCheckItemList.Add(registerCheckItem); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
await _registerCheckItemRepository.InsertManyAsync(registerCheckItemList); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
registerAsbitem.RegisterCheckId = registerCheckEnt_Res.Id; |
|
|
|
} |
|
|
|
|
|
|
|
#endregion
|
|
|
|
} |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
//更新RegisterAsbitem表RegisterCheckId
|
|
|
|
await _registerAsbitemRepository.UpdateManyAsync(registerAsbitemList); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 检查是否能删除、合并、取消合并
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="RegisterAsbitemId"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
/// <exception cref="UserFriendlyException"></exception>
|
|
|
|
public async Task CheckIsDelete(Guid RegisterAsbitemId) |
|
|
|
{ |
|
|
|
var registerAsbitemEnt = await _registerAsbitemRepository.GetAsync(RegisterAsbitemId); |
|
|
|
if (registerAsbitemEnt == null) |
|
|
|
throw new UserFriendlyException($"数据有误"); |
|
|
|
if (registerAsbitemEnt.IsCharge == 'Y') |
|
|
|
throw new UserFriendlyException($"当前体检项目已收费,不能操作"); |
|
|
|
var registerCheckEnt = await _registerCheckRepository.GetAsync(m => m.Id == registerAsbitemEnt.RegisterCheckId); |
|
|
|
if (registerCheckEnt != null && (registerCheckEnt.CompleteFlag == '1' || registerCheckEnt.CompleteFlag == '2')) |
|
|
|
throw new UserFriendlyException($"当前体检项目已完成或者已弃检,不能操作"); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |