using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Shentun.Peis.Enums; using Shentun.Peis.GuideTypes; using Shentun.Peis.Models; using Shentun.Peis.ReferenceRanges; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using TencentCloud.Ame.V20190916.Models; using Volo.Abp; using Volo.Abp.Application.Services; using Volo.Abp.Domain.Repositories; using Volo.Abp.Identity; using Volo.Abp.ObjectMapping; using Volo.Abp.Users; namespace Shentun.Peis.RegisterCheckItems { /// /// 检查明细项目记录 /// [ApiExplorerSettings(GroupName = "Work")] [Authorize] public class RegisterCheckItemAppService : ApplicationService { private readonly IRepository _registerCheckItemRepository; private readonly IRepository _patientRegisterRepository; private readonly IRepository _referenceRangeRepository; private readonly IRepository _userRepository; private readonly IRepository _unitRepository; private readonly RegisterCheckItemManager _registerCheckItemManager; private readonly ReferenceRangeManager _referenceRangeManager; private readonly CacheService _cacheService; public RegisterCheckItemAppService( IRepository registerCheckItemRepository, IRepository userRepository, RegisterCheckItemManager registerCheckItemManager, ReferenceRangeManager referenceRangeManager, IRepository patientRegisterRepository, IRepository referenceRangeRepository, IRepository unitRepository, CacheService cacheService) { this._registerCheckItemRepository = registerCheckItemRepository; this._userRepository = userRepository; this._registerCheckItemManager = registerCheckItemManager; this._referenceRangeManager = referenceRangeManager; this._patientRegisterRepository = patientRegisterRepository; this._referenceRangeRepository = referenceRangeRepository; _unitRepository = unitRepository; _cacheService = cacheService; } /// /// 获取检查明细项目记录 附带项目名称跟项目结果模板的集合 /// /// [HttpGet("api/app/registercheckitem/getlistinregistercheckid")] public async Task> GetListInRegisterCheckIdAsync(Guid RegisterCheckId, Guid PatientRegisterId) { var entlist = (await _registerCheckItemRepository.GetQueryableAsync()) .Include(x => x.Item) .Include(x => x.Item.ItemResultTemplates) .Include(x => x.Item.ItemType) .Include(x => x.RegisterCheck) .Where(m => m.RegisterCheckId == RegisterCheckId); #region 未检查的项目重新更新参考范围、危警值 var PatientRegisterEnt = await _patientRegisterRepository.GetAsync(PatientRegisterId); var referenceRangeList = await _referenceRangeRepository.GetListAsync(); List update_list = new List(); var units = await _unitRepository.GetListAsync(); foreach (var ent in entlist) { if (ent.RegisterCheck.CompleteFlag == RegisterCheckCompleteFlag.UnChecked) { var referenceRangeEnt = _referenceRangeManager.GetReferenceRangeInSexAgeTemp(referenceRangeList, ent.Item, PatientRegisterEnt.SexId, PatientRegisterEnt.Age); if (referenceRangeEnt != null) { ent.ReferenceRangeValue = referenceRangeEnt.ReferenceRangeValue; ent.CriticalRangeValue = referenceRangeEnt.CriticalRangeValue; } var unit = units.Where(o => o.Id == ent.Item.UnitId).FirstOrDefault(); if (unit != null) { ent.Unit = unit.DisplayName; } update_list.Add(ent); } } if (update_list.Any()) { await _registerCheckItemRepository.UpdateManyAsync(update_list, true); } #endregion var entdto = entlist.Select(s => new RegisterCheckItemOrItemOrItemResultTemplateDto { CheckDate = DataHelper.ConversionDateToString(s.CheckDate), CheckDoctorName = s.CheckDoctorName, CriticalRangeValue = s.CriticalRangeValue, CriticalValue = s.CriticalValue, ItemId = s.ItemId, IsCalculationItem = s.Item.IsCalculationItem, ItemName = s.Item.DisplayName, itemResultTemplates = s.Item.ItemResultTemplates.Select(si => new ItemResultTemplates.ItemResultTemplateDropDto { DiagnosisId = si.DiagnosisId, IsNameIntoSummary = si.IsNameIntoSummary, IsResultIntoSummary = si.IsResultIntoSummary, ItemId = si.ItemId, Result = si.Result, ResultStatusId = si.ResultStatusId, SimpleCode = si.SimpleCode }).ToList(), ReferenceRangeValue = s.ReferenceRangeValue, ReferenceRangeTypeFlag = s.Item.ReferenceRangeTypeFlag, RegisterCheckId = RegisterCheckId, Result = string.IsNullOrEmpty(s.Result) && s.RegisterCheck.CompleteFlag == RegisterCheckCompleteFlag.UnChecked ? s.Item.DefaultResult : s.Result, ResultStatusId = s.ResultStatusId, Unit = s.Unit, LineModeFlag = s.Item.LineModeFlag == '2' ? (s.Item.ItemType.IsWrap == 'N' ? '0' : '1') : s.Item.LineModeFlag, CreationTime = s.CreationTime, CreatorId = s.CreatorId, LastModificationTime = s.LastModificationTime, LastModifierId = s.LastModifierId, CreatorName = _cacheService.GetUserNameAsync(s.CreatorId).Result, LastModifierName = _cacheService.GetUserNameAsync(s.LastModifierId).Result, InputCheck = s.Item.InputCheck }).ToList(); return entdto; } ///// ///// 修改结果内容 ///// ///// RegisterCheck表ID ///// 项目ID ///// ///// //[HttpPost("api/app/registercheckitem/updateresult")] //public async Task UpdateResultAsync(Guid RegisterCheckId, Guid ItemId, UpdateRegisterCheckItemResultDto input) //{ // var ent = await _registerCheckItemRepository.GetAsync(m => m.RegisterCheckId == RegisterCheckId && m.ItemId == ItemId); // ent.Result = input.Result; // ent.CheckDoctorName = input.CheckDoctorName; // ent.CriticalValue = input.CriticalValue; // ent.CheckDate = PageHelper.ConvertDate(input.CheckDate); // var entnew = await _registerCheckItemRepository.UpdateAsync(ent); // return ObjectMapper.Map(entnew); //} /// /// 批量修改检查明细项目记录 /// /// /// [HttpPost("api/app/registercheckitem/updateregistercheckitemmany")] public async Task> UpdateRegisterCheckItemManyAsync(List input) { throw new Exception("禁止"); if (!input.Any()) { throw new UserFriendlyException("请求参数有误"); } List msg = new List(); foreach (var item in input) { var entity = await _registerCheckItemRepository.GetAsync(m => m.RegisterCheckId == item.RegisterCheckId && m.ItemId == item.ItemId); var entitydto = ObjectMapper.Map(item); var newentity = await _registerCheckItemManager.UpdateRegisterCheckItemAsync(entitydto, entity); msg.Add(ObjectMapper.Map(newentity)); } return msg; } /// /// 删除检查明细项目记录 /// /// /// /// [HttpPost("api/app/registercheckitem/deleteregistercheckitem")] public async Task DeleteRegisterCheckItemAsync(Guid RegisterCheckId, Guid ItemId) { // await _registerCheckItemRepository.DeleteAsync(m => m.RegisterCheckId == RegisterCheckId && m.ItemId == ItemId); await _registerCheckItemManager.CheckAndDeleteAsync(RegisterCheckId, ItemId); } } }