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.

225 lines
9.6 KiB

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
{
/// <summary>
/// 检查明细项目记录
/// </summary>
[ApiExplorerSettings(GroupName = "Work")]
[Authorize]
public class RegisterCheckItemAppService : ApplicationService
{
private readonly IRepository<RegisterCheckItem> _registerCheckItemRepository;
private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;
private readonly IRepository<ReferenceRange, Guid> _referenceRangeRepository;
private readonly IRepository<IdentityUser, Guid> _userRepository;
private readonly IRepository<Unit, Guid> _unitRepository;
private readonly RegisterCheckItemManager _registerCheckItemManager;
private readonly ReferenceRangeManager _referenceRangeManager;
private readonly CacheService _cacheService;
public RegisterCheckItemAppService(
IRepository<RegisterCheckItem> registerCheckItemRepository,
IRepository<IdentityUser, Guid> userRepository,
RegisterCheckItemManager registerCheckItemManager,
ReferenceRangeManager referenceRangeManager,
IRepository<PatientRegister, Guid> patientRegisterRepository,
IRepository<ReferenceRange, Guid> referenceRangeRepository,
IRepository<Unit, Guid> 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;
}
/// <summary>
/// 获取检查明细项目记录 附带项目名称跟项目结果模板的集合
/// </summary>
/// <returns></returns>
[HttpGet("api/app/registercheckitem/getlistinregistercheckid")]
public async Task<List<RegisterCheckItemOrItemOrItemResultTemplateDto>> 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<RegisterCheckItem> update_list = new List<RegisterCheckItem>();
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;
}
///// <summary>
///// 修改结果内容
///// </summary>
///// <param name="RegisterCheckId">RegisterCheck表ID</param>
///// <param name="ItemId">项目ID</param>
///// <param name="input"></param>
///// <returns></returns>
//[HttpPost("api/app/registercheckitem/updateresult")]
//public async Task<RegisterCheckItemDto> 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<RegisterCheckItem, RegisterCheckItemDto>(entnew);
//}
/// <summary>
/// 批量修改检查明细项目记录
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/registercheckitem/updateregistercheckitemmany")]
public async Task<List<RegisterCheckItemDto>> UpdateRegisterCheckItemManyAsync(List<UpdateRegisterCheckItemManyDto> input)
{
throw new Exception("禁止");
if (!input.Any())
{
throw new UserFriendlyException("请求参数有误");
}
List<RegisterCheckItemDto> msg = new List<RegisterCheckItemDto>();
foreach (var item in input)
{
var entity = await _registerCheckItemRepository.GetAsync(m => m.RegisterCheckId == item.RegisterCheckId && m.ItemId == item.ItemId);
var entitydto = ObjectMapper.Map<UpdateRegisterCheckItemManyDto, RegisterCheckItem>(item);
var newentity = await _registerCheckItemManager.UpdateRegisterCheckItemAsync(entitydto, entity);
msg.Add(ObjectMapper.Map<RegisterCheckItem, RegisterCheckItemDto>(newentity));
}
return msg;
}
/// <summary>
/// 删除检查明细项目记录
/// </summary>
/// <param name="RegisterCheckId"></param>
/// <param name="ItemId"></param>
/// <returns></returns>
[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);
}
}
}