using IRaCIS.Application.Interfaces;
using IRaCIS.Core.Infra.EFCore;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Application.Filter;
using Microsoft.AspNetCore.Mvc;
using IRaCIS.Core.Application.Service.WorkLoad.DTO;
using Microsoft.AspNetCore.Authorization;
using IRaCIS.Core.Application.Auth;
using IRaCIS.Core.Application.Service.Reading.Dto;
using IRaCIS.Core.Domain.Share.Reading;
namespace IRaCIS.Application.Services
{
///
/// 生成的阅片模块(在大列表上展示的)
///
[ApiExplorerSettings(GroupName = "Reading")]
public class ReadModuleService : BaseService
{
public IRepository _subjectVisitRepository;
private readonly IRepository _subjectRepository;
private readonly IRepository _readModuleRepository;
public ReadModuleService(IRepository subjectVisitRepository,
IRepository subjectRepository,
IRepository readModuleRepository
)
{
_subjectVisitRepository = subjectVisitRepository;
this._subjectRepository = subjectRepository;
this._readModuleRepository = readModuleRepository;
}
///
/// 获取读片模块
///
[HttpPost]
public async Task<(PageOutput,object)> GetReadModule(GetReadModuleDto dto)
{
var subjectquery = _subjectRepository.WhereIf(dto.TrialId!=null, x => x.TrialId == dto.TrialId).Include(x => x.SubjectVisitList).Include(x=>x.Site)
.Select(x => new GetReadModuleDtoOut
{
SiteCode = x.Site.SiteCode,
SiteId = x.SiteId,
SubjectCode = x.Code,
SubjectId = x.Id,
Data=x.SubjectVisitList.Select(y=>new GetReadModuleOutDto()
{
CreateTime = y.CreateTime,
Id = y.Id,
SubjectId = x.Id,
SubjectVisitId = y.Id,
IsUrgent = x.IsUrgent,
ModuleName = y.InPlan ? "计划内访视" : "计划外访视",
ModuleType = y.InPlan ? ModuleTypeEnum.InPlanSubjectVisit : ModuleTypeEnum.OutPlanSubjectVisit,
SubjectCode = y.Subject.Code,
SiteCode = x.Site.SiteCode,
SiteId = x.Site.Id,
VisitName = y.VisitName,
}).ToList()
});
var pageList = await subjectquery.ToPagedListAsync(dto.PageIndex, dto.PageSize, dto.SortField == null|| dto.SortField==string.Empty ? "SiteCode" : dto.SortField,
dto.Asc);
var subjectisd = pageList.CurrentPageData.Select(x => x.SubjectId).ToList();
var readModules =await _readModuleRepository.Where(x => subjectisd.Contains(x.SubjectId)).ToListAsync();
pageList.CurrentPageData.ForEach(x => {
x.Data.AddRange(readModules.Where(y => y.SubjectId == x.SubjectId).Select(
y => new GetReadModuleOutDto()
{
CreateTime = y.CreateTime,
Id = y.Id,
SubjectId=x.SubjectId,
}));
});
return (pageList, new
{
MaxLength = pageList.CurrentPageData.ToList().Max(x => x.Data.Count)
});
}
///
/// 新增或者修改
///
///
///
[HttpPost]
public async Task AddOrUpdateReadModuleService(ReadModuleAddOrEdit addOrEditReadModule)
{
var entity = await _repository.InsertOrUpdateAsync(addOrEditReadModule, true);
return ResponseOutput.Ok(entity.Id.ToString());
}
///
/// 删除
///
///
///
[HttpDelete("{readModuleId:guid}")]
public async Task DeleteReadModule(Guid readModuleId)
{
var success = await _readModuleRepository.DeleteFromQueryAsync(t => t.Id == readModuleId, true);
return ResponseOutput.Result(true);
}
}
}