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); } } }