Browse Source

合并组合项目

bjmzak
wxd 2 years ago
parent
commit
3c632b927c
  1. 5
      src/Shentun.Peis.Application.Contracts/CustomerOrgGroups/GetListDto.cs
  2. 19
      src/Shentun.Peis.Application.Contracts/RegisterAsbitems/CancelMergeRegisterAsbitemDto.cs
  3. 19
      src/Shentun.Peis.Application.Contracts/RegisterAsbitems/MergeRegisterAsbitemDto.cs
  4. 18
      src/Shentun.Peis.Application/CustomerOrgGroups/CustomerOrgGroupAppService.cs
  5. 90
      src/Shentun.Peis.Application/RegisterAsbitems/RegisterAsbitemAppService.cs
  6. 2
      src/Shentun.Peis.Domain/CustomerOrgs/CustomerOrgManager.cs
  7. 277
      src/Shentun.Peis.Domain/RegisterAsbitems/RegisterAsbitemManager.cs

5
src/Shentun.Peis.Application.Contracts/CustomerOrgGroups/GetListDto.cs

@ -16,5 +16,10 @@ namespace Shentun.Peis.CustomerOrgGroups
/// </summary>
public short? MedicalTimes { get; set; }
/// <summary>
/// 体检次数ID
/// </summary>
public Guid? CustomerOrgRegisterId { get; set; }
}
}

19
src/Shentun.Peis.Application.Contracts/RegisterAsbitems/CancelMergeRegisterAsbitemDto.cs

@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Shentun.Peis.RegisterAsbitems
{
public class CancelMergeRegisterAsbitemDto
{
/// <summary>
/// RegisterCheckId
/// </summary>
public Guid RegisterCheckId { get; set; }
/// <summary>
/// 体检中心ID
/// </summary>
public Guid OrganizationUnitId { get; set; }
}
}

19
src/Shentun.Peis.Application.Contracts/RegisterAsbitems/MergeRegisterAsbitemDto.cs

@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Shentun.Peis.RegisterAsbitems
{
public class MergeRegisterAsbitemDto
{
/// <summary>
/// 包含所有新旧一起
/// </summary>
public List< Guid> RegisterAsbitemIds { get; set; }
/// <summary>
/// 体检中心ID
/// </summary>
public Guid OrganizationUnitId { get; set; }
}
}

18
src/Shentun.Peis.Application/CustomerOrgGroups/CustomerOrgGroupAppService.cs

@ -76,24 +76,28 @@ namespace Shentun.Peis.CustomerOrgGroups
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet("api/app/customerorggroup/getlistinfilter")]
public async Task<PagedResultDto<CustomerOrgGroupOrCustomerOrgDto>> GetListInFilterAsync(GetListDto input)
{
int totalCount = 0;
var oldlist = (await Repository.GetDbSetAsync()).Include(x => x.CustomerOrgRegister).Include(x => x.CustomerOrgRegister.CustomerOrg).ToList();
var oldlist = (await Repository.GetDbSetAsync()).Include(x => x.CustomerOrgRegister).Include(x => x.CustomerOrgRegister.CustomerOrg).AsEnumerable();
if (!string.IsNullOrEmpty(input.Filter))
oldlist = oldlist.Where(m => m.DisplayName.Contains(input.Filter)).ToList();
oldlist = oldlist.Where(m => m.DisplayName.Contains(input.Filter));
if (input.CustomerOrgId != Guid.Empty)
oldlist = oldlist.Where(m => m.Id == input.CustomerOrgId).ToList();
if (input.CustomerOrgId != null && input.CustomerOrgId != Guid.Empty)
oldlist = oldlist.Where(m => m.CustomerOrgRegister.CustomerOrg.Id == input.CustomerOrgId);
if (input.CustomerOrgRegisterId != null && input.CustomerOrgRegisterId != Guid.Empty)
oldlist = oldlist.Where(m => m.CustomerOrgRegisterId == input.CustomerOrgRegisterId);
if (input.MedicalTimes != null)
oldlist = oldlist.Where(m => m.CustomerOrgRegister.MedicalTimes == input.MedicalTimes).ToList();
oldlist = oldlist.Where(m => m.CustomerOrgRegister.MedicalTimes == input.MedicalTimes);
totalCount = oldlist.Count;
totalCount = oldlist.Count();
oldlist = oldlist.OrderBy(m => m.DisplayOrder).Skip(input.SkipCount * input.MaxResultCount).Take(input.MaxResultCount).ToList();
oldlist = oldlist.OrderBy(m => m.DisplayOrder).Skip(input.SkipCount * input.MaxResultCount).Take(input.MaxResultCount);
var userList = await _userRepository.GetListAsync();

90
src/Shentun.Peis.Application/RegisterAsbitems/RegisterAsbitemAppService.cs

@ -5,6 +5,12 @@ using Shentun.Peis.CustomerOrgs;
using Shentun.Peis.DeviceTypes;
using Shentun.Peis.ForSexs;
using Shentun.Peis.Models;
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.Sexs;
using System;
using System.Collections.Generic;
@ -91,21 +97,21 @@ namespace Shentun.Peis.RegisterAsbitems
/// <summary>
/// 创建数据 创建成功 生成 registercheck registercheckitem 数据
/// </summary>
/// <param name="OrganizationUnitId">体检中心ID</param>
/// <param name="input"></param>
/// <returns></returns>
[RemoteService(false)]
[HttpPost("api/app/registerasbitem/create")]
public async Task<RegisterAsbitemDto> CreateAsync(Guid OrganizationUnitId, CreateRegisterAsbitemDto input)
{
///// <summary>
///// 创建数据 创建成功 生成 registercheck registercheckitem 数据
///// </summary>
///// <param name="OrganizationUnitId">体检中心ID</param>
///// <param name="input"></param>
///// <returns></returns>
//[RemoteService(false)]
//[HttpPost("api/app/registerasbitem/create")]
//public async Task<RegisterAsbitemDto> CreateAsync(Guid OrganizationUnitId, CreateRegisterAsbitemDto input)
//{
var createEntity = ObjectMapper.Map<CreateRegisterAsbitemDto, RegisterAsbitem>(input);
var newent = await _registerAsbitemManager.CreateAsync(OrganizationUnitId, createEntity);
return ObjectMapper.Map<RegisterAsbitem, RegisterAsbitemDto>(newent);
}
// var createEntity = ObjectMapper.Map<CreateRegisterAsbitemDto, RegisterAsbitem>(input);
// var newent = await _registerAsbitemManager.CreateAsync(OrganizationUnitId, createEntity);
// return ObjectMapper.Map<RegisterAsbitem, RegisterAsbitemDto>(newent);
//}
/// <summary>
/// 批量创建数据 创建成功 生成 registercheck registercheckitem 数据
@ -244,7 +250,7 @@ namespace Shentun.Peis.RegisterAsbitems
var userList = await _userRepository.GetListAsync();
@ -736,6 +742,60 @@ namespace Shentun.Peis.RegisterAsbitems
#region 合并项目、取消合并
/// <summary>
/// 合并组合项目 手动
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/registerasbitem/mergeregisterasbitem")]
public async Task MergeRegisterAsbitemAsync(MergeRegisterAsbitemDto input)
{
if (input != null)
{
//检查项目状态 是否能合并
foreach (var item in input.RegisterAsbitemIds)
{
await _registerAsbitemManager.CheckIsDelete(item);
}
//删除registercheck 并创建新的registercheck 绑定新的registercheckId
await _registerAsbitemManager.MergeRegisterAsbitemAsync(input.RegisterAsbitemIds, input.OrganizationUnitId);
}
else
{
throw new UserFriendlyException("参数有误");
}
}
/// <summary>
/// 取消合并 手动
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/registerasbitem/cancelmergeregisterasbitem")]
public async Task CancelMergeRegisterAsbitemAsync(CancelMergeRegisterAsbitemDto input)
{
if (input != null)
{
var RegisterAsbitemIds = (await _registerAsbitemRepository.GetListAsync(m => m.RegisterCheckId == input.RegisterCheckId)).Select(s => s.Id).ToList();
//检查项目状态 是否能取消合并
foreach (var item in RegisterAsbitemIds)
{
await _registerAsbitemManager.CheckIsDelete(item);
}
//删除registercheck 并创建新的registercheck 绑定新的registercheckId
await _registerAsbitemManager.CancelMergeRegisterAsbitemAsync(RegisterAsbitemIds, input.RegisterCheckId, input.OrganizationUnitId);
}
else
{
throw new UserFriendlyException("参数有误");
}
}
#endregion
}

2
src/Shentun.Peis.Domain/CustomerOrgs/CustomerOrgManager.cs

@ -58,7 +58,7 @@ namespace Shentun.Peis.CustomerOrgs
)
{
Check.NotNullOrWhiteSpace(entity.DisplayName, nameof(entity.DisplayName));
await EntityHelper.CheckSameName<CustomerOrg, Guid>(_repository, entity.DisplayName);
//await EntityHelper.CheckSameName<CustomerOrg, Guid>(_repository, entity.DisplayName);
return new CustomerOrg
{
DisplayName = entity.DisplayName,

277
src/Shentun.Peis.Domain/RegisterAsbitems/RegisterAsbitemManager.cs

@ -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($"当前体检项目已完成或者已弃检,不能操作");
}
}
}
Loading…
Cancel
Save