diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 4fa46de3c..69c2c262f 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -1062,7 +1062,7 @@ Site用户列表导出 - isAllSiteUser true : site用户列表,false :Site调研汇总表 + isAllSiteUser true : site用户列表,false :Site调研汇总表 @@ -2076,7 +2076,7 @@ - 重置密码发邮件 (未登陆修改) 发送成功,返回用户账户Id + 重置密码发邮件 (未登陆修改) @@ -2188,6 +2188,15 @@ 最新工作量 (已确定的)[New] + + + 项目参与人员导出 + + + + + + Setting页面 获取项目参与人员列表 @@ -2232,14 +2241,6 @@ - - - 手动更新项目状态 - - 项目Id - 状态值 - - 删除临床项目 临床试验项目Id diff --git a/IRaCIS.Core.Application/Service/Management/UserService.cs b/IRaCIS.Core.Application/Service/Management/UserService.cs index fe795cb18..527d20929 100644 --- a/IRaCIS.Core.Application/Service/Management/UserService.cs +++ b/IRaCIS.Core.Application/Service/Management/UserService.cs @@ -175,7 +175,7 @@ namespace IRaCIS.Application.Services /// - /// 重置密码发邮件 (未登陆修改) 发送成功,返回用户账户Id + /// 重置密码发邮件 (未登陆修改) /// /// /// diff --git a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs index cf075412b..20b45d2c9 100644 --- a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs +++ b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs @@ -608,10 +608,32 @@ namespace IRaCIS.Core.Application.Image.QA } else if (fileName.EndsWith(".csv")) { + #region 临时方案 MiniExcel读取 然后保存为xlsx 再用 Magicodes验证数据 //因为csv 需要加配置文件 不然都是null - etcCheckList = MiniExcel.Query(filePath, null, configuration: config).ToList(); + etcCheckList = MiniExcel.Query(filePath, null, configuration: config).ToList(); + var csVToXlsxPath = Path.Combine(uploadFolderPath, DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss") + Path.GetFileNameWithoutExtension(fileName) + ".xlsx"); + + await MiniExcel.SaveAsAsync(csVToXlsxPath, etcCheckList, excelType: ExcelType.XLSX); + + + var Importer = new ExcelImporter(); + + var import = await Importer.Import(File.OpenRead(csVToXlsxPath)); + + if (import.Exception != null) return ResponseOutput.NotOk(import.Exception.ToString()); + + if (import.RowErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.RowErrors)); + + if (import.TemplateErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.TemplateErrors)); + + etcCheckList = import.Data.ToList(); + + #endregion + + + #region 导入组件有问题 //var Importer = new CsvImporter(); //var import = await Importer.Import(File.OpenRead(filePath)); @@ -623,6 +645,8 @@ namespace IRaCIS.Core.Application.Image.QA //if (import.TemplateErrors.Count > 0) return ResponseOutput.NotOk(JsonConvert.SerializeObject(import.TemplateErrors)); //etcCheckList = import.Data.ToList(); + #endregion + } //ExcelReaderFactory 需要自己验证数据 并且从固定列取数据 else @@ -1725,7 +1749,7 @@ namespace IRaCIS.Core.Application.Image.QA var info = await _subjectVisitRepository.Where(t => t.Id == subjectVisitId).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync(); - var targetPath ="/IMPORT-IMAGES/"+info.TrialCode + "_" + info.SubjectCode + "_" + info.VisitName; + var targetPath = "/IMPORT-IMAGES/" + info.TrialCode + "_" + info.SubjectCode + "_" + info.VisitName; var path = _dicomFileStoreHelper.GetSubjectVisitPath(info.TrialId, info.SiteId, info.SubjectId, info.SubjectVisitId); @@ -1755,14 +1779,14 @@ namespace IRaCIS.Core.Application.Image.QA foreach (var studyFolder in studyFolders) { - if (!session.FileExists(Path.Combine(targetPath,studyFolder.Name))) + if (!session.FileExists(Path.Combine(targetPath, studyFolder.Name))) { session.CreateDirectory(targetPath); } foreach (var file in studyFolder.GetFiles()) { - if (file.Extension.Contains("dcm",StringComparison.OrdinalIgnoreCase)) + if (file.Extension.Contains("dcm", StringComparison.OrdinalIgnoreCase)) { string remoteFilePath = RemotePath.TranslateLocalPathToRemote(file.FullName, studyFolder.FullName, targetPath); @@ -1779,20 +1803,20 @@ namespace IRaCIS.Core.Application.Image.QA } } } - + } } catch (Exception e) { - + await _subjectVisitRepository.UpdateFromQueryAsync(t => t.Id == subjectVisitId, u => new SubjectVisit() { ForwardState = ForwardStateEnum.ForwardFailed }); } - + await _subjectVisitRepository.UpdateFromQueryAsync(t => t.Id == subjectVisitId, u => new SubjectVisit() { ForwardState = ForwardStateEnum.Forwarded }); diff --git a/IRaCIS.Core.Application/Service/QC/_MapConfig.cs b/IRaCIS.Core.Application/Service/QC/_MapConfig.cs index 928fa3379..f2cac1e4f 100644 --- a/IRaCIS.Core.Application/Service/QC/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/QC/_MapConfig.cs @@ -47,7 +47,6 @@ namespace IRaCIS.Core.Application.Service - CreateMap(); diff --git a/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs b/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs index 338254287..cd795a2be 100644 --- a/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs +++ b/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs @@ -11,8 +11,6 @@ using IRaCIS.Application.Services; using IRaCIS.Core.Application.Auth; using IRaCIS.Application.Contracts; using Microsoft.AspNetCore.Authorization; -using IRaCIS.Core.Application.Filter; -using IRaCIS.Core.Infra.EFCore; using MailKit.Security; using MimeKit; @@ -585,7 +583,6 @@ namespace IRaCIS.Core.Application.Contracts } - /// /// 驳回 /// @@ -643,8 +640,6 @@ namespace IRaCIS.Core.Application.Contracts } - - public async Task SendInviteEmail(InviteEmailCommand inviteEmailCommand) { diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs new file mode 100644 index 000000000..ab3e606a3 --- /dev/null +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs @@ -0,0 +1,62 @@ +using System; +using IRaCIS.Application.Contracts; +using IRaCIS.Core.Domain.Share; + +namespace IRaCIS.Core.Application.Contracts +{ + + public class PersonalStataDTO + { + // 项目数量(排除 废除的) + public int? TrialCount { get; set; } + + //废除的 + public int? DeletedCount { get; set; } + + //项目数量 (包括废除的) + public int? TotalTrialCount => TrialCount + DeletedCount; + + + //总共需要签署项目文档的数量 (排除掉废除的 + 废除的但是签署了) + public int? TotalNeedSignTrialDocCount { get; set; } + + + //已签署的项目文档总数 + public int? HaveSignedTrialDocCount { get; set; } + + //现在需要签署的项目文档总数 + public int? WaitSignTrialDocCount => TotalNeedSignTrialDocCount - HaveSignedTrialDocCount; + + + + + public int? TotalNeedSignSystemDocCount { get; set; } + + public int? HaveSignedSystemDocCount { get; set; } + + public int? WaitSignSystemDocCount => TotalNeedSignSystemDocCount - HaveSignedSystemDocCount; + + + + //现在需要签署的总数(项目待签署 +系统待签署) + public int? WaitSignDocCount => TotalNeedSignTrialDocCount + TotalNeedSignSystemDocCount; + } + + public class TrialSiteSurveyStatQuery : PageInput + { + + } + + public class TrialSiteSurveyStat:TrialSelectDTO + { + public int? ApprovalRequiredCount { get; set; } + } + + + public class DocSignStat : TrialSelectDTO + { + public int? WaitSignCount { get; set; } + } + + +} \ No newline at end of file diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/QANoticeViewModel.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/QANoticeViewModel.cs deleted file mode 100644 index 52db5cc76..000000000 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/QANoticeViewModel.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using IRaCIS.Core.Domain.Share; - -namespace IRaCIS.Core.Application.Contracts -{ - - public class QANoticeDTO - { - public Guid Id { get; set; } - public Guid TrialId { get; set; } - - public Guid StudyId { get; set; } - - public string StudyStatusStr { get; set; } = string.Empty; - - public string Message { get; set; } = string.Empty; - - public DateTime SendTime { get; set; } - - public DateTime? DealTime { get; set; } - - - public string FromUser { get; set; } = string.Empty; - - public string FromUserType { get; set; } = string.Empty; - - public NoticeType NoticeTypeEnum { get; set; } - - public bool NeedDeal { get; set; } - - public bool IsMessageReceiver { get; set; } = false; - } - - -} \ No newline at end of file diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/UserTrialViewModel.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/UserTrialViewModel.cs index 09a14a85f..81a063086 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/UserTrialViewModel.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/UserTrialViewModel.cs @@ -19,14 +19,14 @@ namespace IRaCIS.Application.Contracts public bool IsDeleted { get; set; } - [ExcelFormat("yyyy-mm-dd hh:mm:ss")] + [ExcelFormat("yyyy-MM-dd hh:mm:ss")] public DateTime? DeletedTime { get; set; } public Guid? SiteId { get; set; } public string Phone { get; set; } = String.Empty; public DateTime UpdateTime { get; set; } - [ExcelFormat("yyyy-mm-dd hh:mm:ss")] + [ExcelFormat("yyyy-MM-dd hh:mm:ss")] public DateTime CreateTime { get; set; } @@ -54,22 +54,22 @@ namespace IRaCIS.Application.Contracts public bool IsDeleted { get; set; } [ExporterHeader(Format = "yyyy-mm-DD hh:mm:ss")] - [ExcelFormat("yyyy-mm-dd hh:mm:ss")] + [ExcelFormat("yyyy-MM-dd hh:mm:ss")] public DateTime? DeletedTime { get; set; } [ExporterHeader(Format = "yyyy-mm-DD")] - [ExcelFormat("yyyy-mm-dd")] + [ExcelFormat("yyyy-MM-dd")] public DateTime? RemoveTime { get; set; } [ExporterHeader(Format = "yyyy-mm-DD")] - [ExcelFormat("yyyy-mm-DD")] + [ExcelFormat("yyyy-MM-dd")] public DateTime? JoinTime { get; set; } [ExporterHeader(Format = "yyyy-mm-DD hh:mm:ss")] - [ExcelFormat("yyyy-mm-DD hh:mm:ss")] + [ExcelFormat("yyyy-MM-dd hh:mm:ss")] public DateTime CreateTime { get; set; } diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/Interface/ITrialService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/Interface/ITrialService.cs index a80376497..4b7483c75 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/Interface/ITrialService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/Interface/ITrialService.cs @@ -8,7 +8,6 @@ namespace IRaCIS.Application.Interfaces bool TrialExpeditedChange { get; set; } Task AddOrUpdateTrial(TrialCommand trialAddModel); - Task UpdateTrialStatus(Guid trialId, string statusStr); Task ConfirmTrialVisitPlan(Guid trialId, bool confirmOrCancel = true); Task DeleteTrial(Guid trialId); diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs new file mode 100644 index 000000000..04e924bcb --- /dev/null +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs @@ -0,0 +1,94 @@ +using IRaCIS.Core.Application.Contracts; +using IRaCIS.Core.Domain.Share; +using Microsoft.AspNetCore.Mvc; + +namespace IRaCIS.Core.Application +{ + [ApiExplorerSettings(GroupName = "Trial")] + public class PersonalWorkstation : BaseService + { + private readonly IRepository _trialRepository; + private readonly IRepository _trialUserRepository; + private readonly IRepository _trialDocumentRepository; + private readonly IRepository _systemDocumentRepository; + + public PersonalWorkstation(IRepository trialRepository, IRepository trialUserRepository, IRepository trialDocumentRepository,IRepository systemDocumentRepository) + { + _trialRepository = trialRepository; + _trialUserRepository = trialUserRepository; + _trialDocumentRepository = trialDocumentRepository; + _systemDocumentRepository = systemDocumentRepository; + } + + + public async Task GetBasicStat() + { + + + return new PersonalStataDTO() + { + //正参与的数量 + TrialCount = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin + ? await _trialRepository.CountAsync() + : await _trialUserRepository.Where(t => t.UserId == _userInfo.Id).CountAsync(), + + DeletedCount = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin + ? await _trialRepository.AsQueryable(true).CountAsync(t => t.IsDeleted) + : await _trialUserRepository.AsQueryable(true).Where(t => t.UserId == _userInfo.Id && t.IsDeleted) + .CountAsync(), + + + TotalNeedSignTrialDocCount = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin + ? 0 + : await _trialDocumentRepository + .Where(t => t.IsAbandon == false || (t.IsAbandon == true && + t.TrialDocConfirmedUserList.Any(t => + t.ConfirmUserId == _userInfo.Id))) + .SelectMany(t => t.NeedConfirmedUserTypeList) + .CountAsync(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId), + + HaveSignedTrialDocCount = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin + ? 0 + : await _trialDocumentRepository + .Where(t => t.NeedConfirmedUserTypeList.Any( + t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId)) + .SelectMany(t => t.TrialDocConfirmedUserList) + .CountAsync(t => t.ConfirmUserId == _userInfo.Id), + + TotalNeedSignSystemDocCount = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin + ? 0 + : await _systemDocumentRepository + .Where(t => t.IsAbandon == false || (t.IsAbandon == true && t.SystemDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.Id))) + .SelectMany(t => t.NeedConfirmedUserTypeList) + .CountAsync(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId), + + + HaveSignedSystemDocCount = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin + ? 0 + : await _systemDocumentRepository + .Where(t => t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId)) + .SelectMany(t => t.SystemDocConfirmedUserList) + .CountAsync(t => t.ConfirmUserId == _userInfo.Id), + + }; + + + + } + + + public async Task> GetSiteSurveyApprovalList(TrialSiteSurveyStatQuery query) + { + + return await _trialRepository.ProjectTo(_mapper.ConfigurationProvider, new { userTypeEnumInt = _userInfo.UserTypeEnumInt, userId = _userInfo.Id }) + .ToPagedListAsync(query.PageIndex, query.PageSize, query.SortField, query.Asc); + + + } + + + + + + } +} diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs index 4357b97e7..ae8c704dc 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs @@ -26,7 +26,13 @@ namespace IRaCIS.Application.Services _trialRepository = trialRepository; } - + /// + /// 项目参与人员导出 + /// + /// + /// + /// + /// [HttpGet] [AllowAnonymous] public async Task TrialUserListExport(Guid trialId, [FromServices] IRepository _commonDocumentRepository) @@ -87,6 +93,8 @@ namespace IRaCIS.Application.Services } + + /// /// Setting页面 获取项目参与人员列表 /// diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs index 6e414b604..2689de605 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs @@ -89,7 +89,7 @@ namespace IRaCIS.Application.Services [HttpGet("{projectId:guid}")] public async Task GetTrialInfoAndLockState(Guid projectId) { - return await _trialRepository.Where(o => o.Id == projectId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync().IfNullThrowException(); + return (await _trialRepository.Where(o => o.Id == projectId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException(); } @@ -119,15 +119,6 @@ namespace IRaCIS.Application.Services return trial.Expedited; } - [HttpPut("{trialId:guid}/{isAbandon:bool}")] - public async Task AbandonTrial(Guid trialId, bool isAbandon) - { - - await _trialRepository.UpdateFromQueryAsync(t => t.Id == trialId, u => new Trial() { IsDeleted = isAbandon }); - - return ResponseOutput.Ok(); - } - /// @@ -244,108 +235,6 @@ namespace IRaCIS.Application.Services } - - - #region MyRegion - ///// - ///// 添加项目 - ///// - ///// - ///// - //[NonDynamicMethod] - //public virtual async Task AddOrUpdateTrial(TrialCommand trialAddModel) - //{ - - // if (trialAddModel.Id == Guid.Empty || trialAddModel.Id == null) - // { - // if (await _repository.AnyAsync(u => u.TrialCode == trialAddModel.TrialCode)) - // { - // return ResponseOutput.NotOk("Same Trial ID already exists."); - // } - - // var currentYearMaxCodeNext = await _repository.Where(t => t.CreateTime.Year == DateTime.Now.Year).Select(t => t.Code).DefaultIfEmpty().MaxAsync() + 1; - - // //var test = _trialRepository.Where(t => t.CreateTime.Year == DateTime.Now.Year + 1).Select(t => t.Code).DefaultIfEmpty(1).ToList(); - - // var trial = _mapper.Map(trialAddModel); - // var yearStr = DateTime.Now.Year.ToString(); - - // trial.Code = currentYearMaxCodeNext; - // trial.TrialCode = (trial.TrialType == 1 ? yearStr.Substring(yearStr.Length - 2) : "T0") + trial.TrialCode + currentYearMaxCodeNext.ToString("D3"); - - - // //多选信息 - // trialAddModel.ModalityIds.ForEach(modalityId => trial.TrialDicList.Add(new TrialDictionary() { DictionaryId = modalityId, KeyName = StaticData.Modality, TrialId = trial.Id })); - // trialAddModel.CriterionIds.ForEach(criterionId => trial.TrialDicList.Add(new TrialDictionary() { DictionaryId = criterionId, KeyName = StaticData.Criterion, TrialId = trial.Id })); - - // //添加项目后 项目状态变更为申请下载简历 - // trial.TrialStatus = (int)TrialEnrollStatus.ChooseDoctor; - // trial.TrialStatusStr = StaticData.TrialOngoing; - - // //状态变更详细表 - // trial.ClinicalTrialProjectDetails.Add(new TrialStatusDetail() { TrialId = trial.Id, TrialStatus = (int)TrialEnrollStatus.ChooseDoctor }); - - // trial = await _repository.AddAsync(trial); - // //如果是PM, 则需要将该人员添加到 运维人员表 - - - // //添加运维人员PM - // await _repository.AddAsync(new TrialUser() { TrialId = trial.Id, UserId = _userInfo.Id }); - - // // 添加扩展信息表记录 - // await _repository.AddAsync(new TrialPaymentPrice() { TrialId = trial.Id }); - - // //添加访视 - // await _repository.AddAsync(new VisitStage { TrialId = trial.Id, VisitNum = 0, BlindName = "B" + 0.ToString("D3"), VisitDay = 1, VisitName = "Baseline", IsBaseLine = true }); - // await _repository.AddAsync(new VisitStage { TrialId = trial.Id, VisitNum = 1, BlindName = "B" + 10.ToString("D3"), VisitDay = 30, VisitName = "Visit 1" }); - - - // var success = await _repository.SaveChangesAsync(); - - // return ResponseOutput.Result(success, new { Id = trial.Id, TrialCode = trial.TrialCode }); - // } - // else - // { - // var updateModel = trialAddModel; - // // 判断项目Id 是否已经存在 - // if (await _repository.AnyAsync(u => u.TrialCode == updateModel.TrialCode && u.Id != updateModel.Id)) - // { - // return ResponseOutput.NotOk("Same Trial ID already exists."); - - // } - - // var trial = await _repository.FirstOrDefaultAsync(t => t.Id == updateModel.Id); - - - // //删除中间表 Title对应的记录 - // await _repository.DeleteFromQueryAsync(t => t.TrialId == updateModel.Id); - - // //重新插入新的 Title记录 - // updateModel.ModalityIds.ForEach(async modalityId => await _repository.AddAsync(new TrialDictionary() { TrialId = updateModel.Id.Value, KeyName = StaticData.Modality, DictionaryId = modalityId })); - - // updateModel.CriterionIds.ForEach(async criterionId => await _repository.AddAsync(new TrialDictionary() { TrialId = updateModel.Id.Value, KeyName = StaticData.Criterion, DictionaryId = criterionId })); - - // if (updateModel.Expedited != trial.Expedited && updateModel.Expedited != null) - // { - // TrialExpeditedChange = true; - // await TrialExpeditedStatusChange(trial.Id, trial.Expedited, (int)updateModel.Expedited); - // } - // _mapper.Map(updateModel, trial); - - // var success = await _repository.SaveChangesAsync(); - - // return ResponseOutput.Result(success); - - - // } - //} - - #endregion - - - - - // TODO: 需要优化,嵌套两层 switch case ? [NonDynamicMethod] private async Task TrialExpeditedStatusChange(Guid trialId, int oldState, int newState) @@ -445,44 +334,7 @@ namespace IRaCIS.Application.Services } } - /// - /// 手动更新项目状态 - /// - /// 项目Id - /// 状态值 - /// - [HttpPost("{trialId:guid}/{statusStr}")] - [TypeFilter(typeof(TrialResourceFilter))] - public virtual async Task UpdateTrialStatus(Guid trialId, string statusStr) - { - //Paused、 添加工总量 算医生读片中 - if (statusStr.Contains(StaticData.TrialCompleted) || statusStr.Contains(StaticData.TrialStopped)) - { - await _repository.UpdateFromQueryAsync(u => u.TrialId == trialId, e => new Enroll - { - EnrollStatus = (int)EnrollStatus.Finished - }); - } - - if (statusStr.Contains(StaticData.TrialCompleted)) - { - await _trialRepository.UpdateFromQueryAsync(u => u.Id == trialId, s => new Trial { TrialFinishedTime = DateTime.UtcNow.AddHours(8) }); - } - - //if (statusStr.Contains(StaticData.TrialOngoing) || statusStr.Contains(StaticData.TrialPaused)) - //{ - // _enrollRepository.Update(u => u.TrialId == trialId, e => new Enroll - // { - // EnrollStatus = (int)EnrollStatus.DoctorReading - // }); - //} - - - await _provider.SetAsync(trialId.ToString(), statusStr, TimeSpan.FromDays(7)); - return ResponseOutput.Result(await _repository.UpdateFromQueryAsync(u => u.Id == trialId, s => new Trial { TrialStatusStr = statusStr })); - - } /// 删除临床项目 /// 临床试验项目Id @@ -556,6 +408,8 @@ namespace IRaCIS.Application.Services } + + /// /// 根据项目Id 获取医生Id,用于出发计算费用 /// diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs index 6773e3ad4..a468b641a 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs @@ -33,19 +33,19 @@ namespace IRaCIS.Core.Application.Services /// Site用户列表导出 /// /// - /// isAllSiteUser true : site用户列表,false :Site调研汇总表 + /// isAllSiteUser true : site用户列表,false :Site调研汇总表 /// /// [HttpGet, Route("{trialId:guid}/{isSiteUserNotAll:bool}")] [AllowAnonymous] - public async Task TrialSiteUserListExport(Guid trialId, bool isAllSiteUser, + public async Task TrialSiteUserListExport(Guid trialId, bool isSiteUserNotAll, [FromServices] IRepository _commonDocumentRepository, [FromServices] IRepository _trialSiteSurveyRepository, [FromServices] IRepository _trialSiteUserSurveyRepository ) { - var code = isAllSiteUser ? "TrialSiteUserSummary_Export" : "TrialSiteUserList_Export"; + var code = isSiteUserNotAll ? "TrialSiteUserList_Export":"TrialSiteUserSummary_Export"; var doc = _commonDocumentRepository.AsQueryable(true).FirstOrDefault(t => t.Code == code); @@ -65,7 +65,7 @@ namespace IRaCIS.Core.Application.Services object exportInfo = default; - if (isAllSiteUser == false) + if (isSiteUserNotAll) { exportInfo = await _trialRepository.Where(t => t.Id == trialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync(); @@ -112,6 +112,9 @@ namespace IRaCIS.Core.Application.Services } + + + /// Pannel 进去 SiteTab [HttpPost] public async Task> GetSiteCRCList(SiteCrcQueryDTO param) diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/_MapConfig.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/_MapConfig.cs index 6b812ef27..b8639d5be 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/_MapConfig.cs @@ -213,10 +213,23 @@ namespace IRaCIS.Core.Application.Service CreateMap(); + + + CreateMap(); + CreateMap() .ForMember(t => t.TrialRoleName, u => u.MapFrom(d => d.TrialRoleName.Value)) - .ForMember(d => d.UserType, u => u.MapFrom(s => s.UserTypeRole.UserTypeShortName)); ; - + .ForMember(d => d.UserType, u => u.MapFrom(s => s.UserTypeRole.UserTypeShortName)); + + + CreateMap() + .ForMember(t=>t.ApprovalRequiredCount,u=> + u.MapFrom( c => userTypeEnumInt == (int)UserTypeEnum.SuperAdmin|| userTypeEnumInt == (int)UserTypeEnum.APM ? + c.TrialSiteSurveyList.Where(t=> t.State==TrialSiteSurveyEnum.SPMApproved).Count() + : c.TrialSiteSurveyList.Where(t => t.State == TrialSiteSurveyEnum.CRCSubmitted).Count()) + ); + + } } diff --git a/IRaCIS.Core.Domain/Trial/Trial.cs b/IRaCIS.Core.Domain/Trial/Trial.cs index c8f9aa90a..417fa9a49 100644 --- a/IRaCIS.Core.Domain/Trial/Trial.cs +++ b/IRaCIS.Core.Domain/Trial/Trial.cs @@ -15,6 +15,8 @@ namespace IRaCIS.Core.Domain.Models TrialDicList = new List(); } + + public List TrialSiteSurveyList { get; set; } public List TrialDocumentList { get; set; } public List EnrollList { get; set; } public List WorkloadList { get; set; }