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.

141 lines
7.1 KiB

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Shentun.Peis.DiagnosisFunctions;
using Shentun.Peis.Models;
using Shentun.Peis.PlugIns;
using Shentun.Peis.RegisterCheckItems;
using Shentun.Peis.RegisterChecks;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Guids;
using Volo.Abp.Identity;
using Volo.Abp.Users;
namespace Shentun.Peis.ImportLisResults
{
public class ImportLisResultAppService : ApplicationService
{
private readonly IRepository<RegisterCheckItem> _registerCheckItemRepository;
private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;
private readonly IRepository<ReferenceRange, Guid> _referenceRangeRepository;
private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository;
private readonly IRepository<RegisterCheckAsbitem, Guid> _registerCheckAsbitemRepository;
private readonly IRepository<LisRequest, Guid> _lisRequestRepository;
private readonly IRepository<RegisterCheckSummary, Guid> _registerCheckSummaryRepository;
private readonly IRepository<RegisterCheckSuggestion, Guid> _registerCheckSuggestionRepository;
private readonly IRepository<IdentityUser, Guid> _userRepository;
private readonly RegisterCheckManager _registerCheckManager;
private readonly RegisterCheckItemManager _registerCheckItemManager;
private readonly CacheService _cacheService;
private readonly IGuidGenerator _guidGenerator;
private readonly IConfiguration _configuration;
private readonly ICurrentUser _currentUser;
private readonly IRepository<UserItemType> _userItemTypeRepository;
private readonly IRepository<Asbitem, Guid> _asbitemRepository;
private readonly DiagnosisFunctionAppService _diagnosisFunctionAppService;
public ImportLisResultAppService(IRepository<RegisterCheck, Guid> registerCheckRepository,
IRepository<RegisterCheckItem> registerCheckItemRepository,
IRepository<PatientRegister, Guid> patientRegisterRepository,
IRepository<ReferenceRange, Guid> referenceRangeRepository,
IRepository<RegisterCheckSummary, Guid> registerCheckSummaryRepository,
IRepository<RegisterCheckSuggestion, Guid> registerCheckSuggestionRepository,
IRepository<IdentityUser, Guid> userRepository,
RegisterCheckManager registerCheckManager,
RegisterCheckItemManager registerCheckItemManager,
CacheService cacheService,
IGuidGenerator guidGenerator,
IConfiguration configuration,
ICurrentUser currentUser,
IRepository<UserItemType> userItemTypeRepository,
IRepository<Asbitem, Guid> asbitemRepository,
IRepository<RegisterCheckAsbitem, Guid> registerCheckAsbitemRepository,
IRepository<LisRequest, Guid> lisRequestRepository,
DiagnosisFunctionAppService diagnosisFunctionAppService)
{
_registerCheckRepository = registerCheckRepository;
_userRepository = userRepository;
_registerCheckManager = registerCheckManager;
_patientRegisterRepository = patientRegisterRepository;
_referenceRangeRepository = referenceRangeRepository;
_registerCheckItemRepository = registerCheckItemRepository;
_registerCheckSummaryRepository = registerCheckSummaryRepository;
_registerCheckSuggestionRepository = registerCheckSuggestionRepository;
_registerCheckItemManager = registerCheckItemManager;
_cacheService = cacheService;
_guidGenerator = guidGenerator;
_configuration = configuration;
_currentUser = currentUser;
_userItemTypeRepository = userItemTypeRepository;
_asbitemRepository = asbitemRepository;
_registerCheckAsbitemRepository = registerCheckAsbitemRepository;
_lisRequestRepository = lisRequestRepository;
_diagnosisFunctionAppService = diagnosisFunctionAppService;
}
[HttpGet("api/app/ImportLisResult/ImportResult")]
public async Task ImportResultAsync(List<LisResult> input)
{
//设置结果
var list = (from registerCheck in await _registerCheckRepository.GetQueryableAsync()
join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync()
on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
join registerCheckItem in await _registerCheckItemRepository.GetQueryableAsync()
on registerCheck.Id equals registerCheckItem.RegisterCheckId
join lisRequest in await _lisRequestRepository.GetQueryableAsync()
on registerCheckAsbitem.LisRequestId equals lisRequest.Id
where input.Select(o => o.LisRequestNo).ToList().Contains(lisRequest.LisRequestNo)
select new
{
registerCheck,
registerCheckAsbitem,
registerCheckItem,
lisRequest,
}).ToList();
var lisRequestNos = input.Select(o => o.LisRequestNo).Distinct().ToList();
foreach(var inputItem in input)
{
var lisRequestItem = list.Where(o=>o.lisRequest.LisRequestNo == inputItem.LisRequestNo
&& o.registerCheckItem.ItemId == new Guid(inputItem.ItemId)).FirstOrDefault();
if(lisRequestItem == null)
{
continue;
}
var itemSource = new RegisterCheckItem()
{
Result = inputItem.Result,
ReferenceRangeValue = inputItem.ReferenceRangeValue,
Unit = inputItem.Unit,
CriticalRangeValue = inputItem.CriticalRangeValue
};
await _registerCheckItemManager.UpdateRegisterCheckItemAsync(itemSource, lisRequestItem.registerCheckItem);
await _registerCheckItemRepository.UpdateAsync(lisRequestItem.registerCheckItem);
}
//生成小结
var registerChecks = list.Select(o=>o.registerCheck).Distinct().ToList();
foreach(var registerCheck in registerChecks)
{
var getDiagnosisResultRequestDto = new GetDiagnosisResultRequestDto()
{
RegisterCheckId = registerCheck.Id,
Items = list.Where(o=>o.registerCheck.Id == registerCheck.Id)
.Select(o=>new GetDiagnosisResultRequest_Item()
{
ItemId = o.registerCheckItem.ItemId,
Result = o.registerCheckItem.Result,
}).ToList()
};
}
//保存小结
}
}
}