From b9c55871b8f765d8313206b6dd489fc8b155b834 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Thu, 18 Dec 2025 16:57:55 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=AE=8C=E6=95=B4=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E5=AD=97=E5=85=B8=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/TrialSiteUser/TrialStatService.cs | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialStatService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialStatService.cs index 50eeb7833..1464e9423 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialStatService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialStatService.cs @@ -21,6 +21,7 @@ public class TrialStatService( IRepository _systemDocumentRepository, IRepository _systemNoticeRepository, IRepository _visitTaskRepository, + IRepository _dictionaryRepository, IRepository _readingQuestionCriterionTrialRepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService { @@ -144,6 +145,7 @@ public class TrialStatService( } + var query = _visitTaskRepository.WhereIf(inQuery.TrialSiteId != null, t => t.Subject.TrialSiteId == inQuery.TrialSiteId) .Where(t => t.TrialId == inQuery.TrialId && t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == false && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze)) @@ -179,6 +181,8 @@ public class TrialStatService( var list = await query.ToListAsync(); + var dicName = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == trialReadingCriterionId).SelectMany(t => t.ReadingQuestionTrialList.Where(t => t.QuestionType == questionType)) + .Select(t => t.DictionaryCode).FirstOrDefaultAsync(); if (criterion.IsArbitrationReading) @@ -197,8 +201,9 @@ public class TrialStatService( list = DealJudgeMark(criterion.ArbitrationRule, criterion.IsGlobalReading, list); + //判断subject的逻辑需要确认,这么多次访视任务,有的符合,有的不符合,准则是什么? - return list.GroupBy(t => t.OverallTumorEvaluation).Select(g => new EfficacyEvaluationStatViewModel() + var resultList = list.GroupBy(t => t.OverallTumorEvaluation).Select(g => new EfficacyEvaluationStatViewModel() { DictionaryCode = g.FirstOrDefault()?.DictionaryCode, OverallTumorEvaluation = g.Key, @@ -206,6 +211,26 @@ public class TrialStatService( }).ToList(); + // 先把 resultList 转成内存字典 + var resultDict = resultList.ToDictionary(r => r.OverallTumorEvaluation, r => r.SubjectCount); + + // 查询字典表,先把数据拉出来到内存,再合并 + var dicList = _dictionaryRepository + .Where(t => t.Parent.Code == dicName) + .Select(t => new + { + t.Code + }) + .ToList() + .Select(t => new EfficacyEvaluationStatViewModel + { + DictionaryCode = dicName, + OverallTumorEvaluation = t.Code, + SubjectCount = resultDict.ContainsKey(t.Code) ? resultDict[t.Code] : 0 + }) + .ToList(); + + return dicList; } From 6ad80f540d7e7634a1cd8367628cdcc354f871de Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Thu, 18 Dec 2025 17:08:42 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E9=82=AE=E4=BB=B6?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/TrialSiteUser/TrialService.cs | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs index ce8be47c4..1396841fe 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs @@ -34,10 +34,11 @@ namespace IRaCIS.Core.Application.Service IRepository _trialDictionaryRepository, IRepository _trialBodyPartRepository, IOptionsMonitor _verifyConfig, + IOptionsMonitor systemEmailConfig, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer, IFusionCache _fusionCache) : BaseService, ITrialService { - + private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue; public bool TrialExpeditedChange { get; set; } = false; @@ -113,9 +114,9 @@ namespace IRaCIS.Core.Application.Service List pm = new List() { (int)UserTypeEnum.ProjectManager }; // QA EA - List qAEq= new List() { (int)UserTypeEnum.QA, (int)UserTypeEnum.EA }; + List qAEq = new List() { (int)UserTypeEnum.QA, (int)UserTypeEnum.EA }; - List other = new List() { }; + List other = new List() { }; other.AddRange(sap); other.AddRange(pm); @@ -125,24 +126,24 @@ namespace IRaCIS.Core.Application.Service return await _trialRepository.AsQueryable() //SuperAdmin Admin OP - .WhereIf(sap.Contains(_userInfo.UserTypeEnumInt),x=> trialState.Contains(x.TrialStatusStr)) - + .WhereIf(sap.Contains(_userInfo.UserTypeEnumInt), x => trialState.Contains(x.TrialStatusStr)) + // pm - .WhereIf(pm.Contains(_userInfo.UserTypeEnumInt),t=> t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.IsDeleted == false + .WhereIf(pm.Contains(_userInfo.UserTypeEnumInt), t => t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.IsDeleted == false && t.TrialUserRoleList.Any(t => t.UserId == _userInfo.UserRoleId && t.IsDeleted == false)) && t.IsDeleted == false) - // QA EA + // QA EA .WhereIf(qAEq.Contains(_userInfo.UserTypeEnumInt), t => t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.IsDeleted == false && t.TrialUserRoleList.Any(t => t.UserId == _userInfo.UserRoleId && t.IsDeleted == false)) && t.IsDeleted == false && trialState.Contains(t.TrialStatusStr)) // other - .WhereIf(!other.Contains(_userInfo.UserTypeEnumInt), t => t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.IsDeleted == false + .WhereIf(!other.Contains(_userInfo.UserTypeEnumInt), t => t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.IsDeleted == false && t.TrialUserRoleList.Any(t => t.UserId == _userInfo.UserRoleId && t.IsDeleted == false)) - && t.IsDeleted == false&& t.TrialStatusStr == StaticData.TrialState.TrialOngoing) + && t.IsDeleted == false && t.TrialStatusStr == StaticData.TrialState.TrialOngoing) .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); } @@ -330,6 +331,14 @@ namespace IRaCIS.Core.Application.Service trial.UpdateTime = DateTime.Now; + #region 邮件默认值 + trial.EmailAuthorizationCode = _systemEmailConfig.AuthorizationCode; + trial.EmailFromEmail = _systemEmailConfig.FromEmail; + trial.EmailFromName = $"{_systemEmailConfig.FromName}-{trial.TrialCode}"; + trial.EmailSMTPServerAddress = _systemEmailConfig.Host; + trial.EmailSMTPServerPort = _systemEmailConfig.Port; + #endregion + var success = await _trialRepository.SaveChangesAsync(); //维护CRO Sponsor @@ -479,7 +488,7 @@ namespace IRaCIS.Core.Application.Service public async Task DeleteOSSFolder() { List trialids = await _trialRepository.Select(x => x.Id).ToListAsync(); - List path= _oSSService.GetRootFolderNames(); + List path = _oSSService.GetRootFolderNames(); foreach (var item in path) { if (Guid.TryParse(item, out Guid folderId) && !trialids.Contains(folderId))