diff --git a/src/Shentun.Peis.Application.Contracts/CustomerOrgGroups/GetListDto.cs b/src/Shentun.Peis.Application.Contracts/CustomerOrgGroups/GetListDto.cs index 72c6acb..3eb5006 100644 --- a/src/Shentun.Peis.Application.Contracts/CustomerOrgGroups/GetListDto.cs +++ b/src/Shentun.Peis.Application.Contracts/CustomerOrgGroups/GetListDto.cs @@ -16,5 +16,10 @@ namespace Shentun.Peis.CustomerOrgGroups /// public short? MedicalTimes { get; set; } + /// + /// 体检次数ID + /// + public Guid? CustomerOrgRegisterId { get; set; } + } } diff --git a/src/Shentun.Peis.Application.Contracts/RegisterAsbitems/CancelMergeRegisterAsbitemDto.cs b/src/Shentun.Peis.Application.Contracts/RegisterAsbitems/CancelMergeRegisterAsbitemDto.cs new file mode 100644 index 0000000..2ba4a24 --- /dev/null +++ b/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 + { + /// + /// RegisterCheckId + /// + public Guid RegisterCheckId { get; set; } + + /// + /// 体检中心ID + /// + public Guid OrganizationUnitId { get; set; } + } +} diff --git a/src/Shentun.Peis.Application.Contracts/RegisterAsbitems/MergeRegisterAsbitemDto.cs b/src/Shentun.Peis.Application.Contracts/RegisterAsbitems/MergeRegisterAsbitemDto.cs new file mode 100644 index 0000000..b6fe7d6 --- /dev/null +++ b/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 + { + /// + /// 包含所有新旧一起 + /// + public List< Guid> RegisterAsbitemIds { get; set; } + + /// + /// 体检中心ID + /// + public Guid OrganizationUnitId { get; set; } + } +} diff --git a/src/Shentun.Peis.Application/CustomerOrgGroups/CustomerOrgGroupAppService.cs b/src/Shentun.Peis.Application/CustomerOrgGroups/CustomerOrgGroupAppService.cs index f382cb4..87f9c44 100644 --- a/src/Shentun.Peis.Application/CustomerOrgGroups/CustomerOrgGroupAppService.cs +++ b/src/Shentun.Peis.Application/CustomerOrgGroups/CustomerOrgGroupAppService.cs @@ -76,24 +76,28 @@ namespace Shentun.Peis.CustomerOrgGroups /// /// /// + [HttpGet("api/app/customerorggroup/getlistinfilter")] public async Task> 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(); diff --git a/src/Shentun.Peis.Application/RegisterAsbitems/RegisterAsbitemAppService.cs b/src/Shentun.Peis.Application/RegisterAsbitems/RegisterAsbitemAppService.cs index 8b188d4..1b5f590 100644 --- a/src/Shentun.Peis.Application/RegisterAsbitems/RegisterAsbitemAppService.cs +++ b/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 - /// - /// 创建数据 创建成功 生成 registercheck registercheckitem 数据 - /// - /// 体检中心ID - /// - /// - [RemoteService(false)] - [HttpPost("api/app/registerasbitem/create")] - public async Task CreateAsync(Guid OrganizationUnitId, CreateRegisterAsbitemDto input) - { + ///// + ///// 创建数据 创建成功 生成 registercheck registercheckitem 数据 + ///// + ///// 体检中心ID + ///// + ///// + //[RemoteService(false)] + //[HttpPost("api/app/registerasbitem/create")] + //public async Task CreateAsync(Guid OrganizationUnitId, CreateRegisterAsbitemDto input) + //{ - var createEntity = ObjectMapper.Map(input); - var newent = await _registerAsbitemManager.CreateAsync(OrganizationUnitId, createEntity); - return ObjectMapper.Map(newent); - } + // var createEntity = ObjectMapper.Map(input); + // var newent = await _registerAsbitemManager.CreateAsync(OrganizationUnitId, createEntity); + // return ObjectMapper.Map(newent); + //} /// /// 批量创建数据 创建成功 生成 registercheck registercheckitem 数据 @@ -244,7 +250,7 @@ namespace Shentun.Peis.RegisterAsbitems - + var userList = await _userRepository.GetListAsync(); @@ -736,6 +742,60 @@ namespace Shentun.Peis.RegisterAsbitems #region 合并项目、取消合并 + /// + /// 合并组合项目 手动 + /// + /// + /// + [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("参数有误"); + } + } + + + /// + /// 取消合并 手动 + /// + /// + /// + [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 } diff --git a/src/Shentun.Peis.Domain/CustomerOrgs/CustomerOrgManager.cs b/src/Shentun.Peis.Domain/CustomerOrgs/CustomerOrgManager.cs index 5070575..fb6b0d1 100644 --- a/src/Shentun.Peis.Domain/CustomerOrgs/CustomerOrgManager.cs +++ b/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(_repository, entity.DisplayName); + //await EntityHelper.CheckSameName(_repository, entity.DisplayName); return new CustomerOrg { DisplayName = entity.DisplayName, diff --git a/src/Shentun.Peis.Domain/RegisterAsbitems/RegisterAsbitemManager.cs b/src/Shentun.Peis.Domain/RegisterAsbitems/RegisterAsbitemManager.cs index 57bd66e..9d6c2f0 100644 --- a/src/Shentun.Peis.Domain/RegisterAsbitems/RegisterAsbitemManager.cs +++ b/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 _registerCheckRepository; private readonly IRepository _registerCheckItemRepository; private readonly IRepository _asbitemDetailRepository; + private readonly IRepository _asbitemRepository; private readonly IRepository _unitRepository; private readonly IRepository _patientRegisterRepository; private readonly IRepository _itemRepository; private readonly IRepository _referenceRangeRepository; private readonly ReferenceRangeManager _referenceRangeManager; private readonly RegisterCheckManager _registerCheckManager; + private readonly RegisterCheckItemManager _registerCheckItemManager; public RegisterAsbitemManager(IRepository registerAsbitemRepository, IRepository registerCheckRepository, IRepository registerCheckItemRepository, IRepository asbitemDetailRepository, + IRepository asbitemRepository, IRepository unitRepository, IRepository patientRegisterRepository, IRepository itemRepository, IRepository 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; } /// @@ -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 } + /// + /// 合并组合项目 + /// + /// + /// 体检中心ID + /// + public async Task MergeRegisterAsbitemAsync(List RegisterAsbitemIds, Guid OrganizationUnitId) + { + + //原有项目 + var registerAsbitemList = await _registerAsbitemRepository.GetListAsync(m => RegisterAsbitemIds.Contains(m.Id)); + + //待删除RegisterCheck + List 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 registerCheckItemList = new List(); + + 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 + } + + + /// + /// 取消合并组合项目 按RegisterAsbitemId重新生成新的RegisterCheck数据 + /// + /// + /// 体检中心ID + /// + public async Task CancelMergeRegisterAsbitemAsync(List RegisterAsbitemIds, Guid RegisterCheckId, Guid OrganizationUnitId) + { + + //原有项目 + var registerAsbitemList = await _registerAsbitemRepository.GetListAsync(m => RegisterAsbitemIds.Contains(m.Id)); + + //待删除RegisterCheck + List RegisterCheckIds = new List { 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 registerCheckItemList = new List(); + + 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); + } + + + /// + /// 检查是否能删除、合并、取消合并 + /// + /// + /// + /// + 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($"当前体检项目已完成或者已弃检,不能操作"); + } } }