From 49c3a0d494381cdd1022716cac74e1110f2659ce Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 18 Apr 2025 13:06:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=9B=BD=E9=99=85=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TrialGlobalLimitActionFilter.cs | 10 ++- .../TrialSiteUser/TrialConfigService.cs | 1 + .../Service/Visit/PatientService.cs | 77 ++++++++++++------- 3 files changed, 56 insertions(+), 32 deletions(-) diff --git a/IRaCIS.Core.Application/BusinessFilter/LegacyController/TrialGlobalLimitActionFilter.cs b/IRaCIS.Core.Application/BusinessFilter/LegacyController/TrialGlobalLimitActionFilter.cs index 7144c020e..67e8b771d 100644 --- a/IRaCIS.Core.Application/BusinessFilter/LegacyController/TrialGlobalLimitActionFilter.cs +++ b/IRaCIS.Core.Application/BusinessFilter/LegacyController/TrialGlobalLimitActionFilter.cs @@ -179,8 +179,8 @@ public class TrialGlobalLimitActionFilter(IFusionCache _fusionCache, IUserInfo _ } catch (Exception) { - - context.Result = new JsonResult(ResponseOutput.NotOk(_localizer["该授权码与该项目不匹配"])); + //该授权码与该项目不匹配(无法解密) + context.Result = new JsonResult(ResponseOutput.NotOk(_localizer["TrialGlobalLimit_AuthorizationCodeError"])); return; } @@ -193,13 +193,15 @@ public class TrialGlobalLimitActionFilter(IFusionCache _fusionCache, IUserInfo _ if (authInfo.TrialCode != trialInfo.TrialCode || authInfo.CreateUserId != trialInfo.CreateUserId || authInfo.TrialId != trialInfo.TrialId || authInfo.HospitalCode != hospitalCode || trialInfo.CriterionTypeList.Except(authInfo.CriterionTypeList).Count() != 0) { - context.Result = new JsonResult(ResponseOutput.NotOk(_localizer["您的操作被禁止,系统检测到该项目授权码与该项目授权配置信息不一致,请还原项目授权配置信息!"])); + // 您的操作被禁止,系统检测到该项目授权码与该项目授权配置信息不一致,请还原项目授权配置信息! + context.Result = new JsonResult(ResponseOutput.NotOk(_localizer["TrialGlobalLimit_AuthorizationCodeInfoError"])); return; } if (DateTime.Now > authInfo.AuthorizationDeadLineDate.Value.AddDays(15)) { - context.Result = new JsonResult(ResponseOutput.NotOk(_localizer["当前时间已经超过项目授权截止时间半个月,请重新获取项目授权后再进行操作!"])); + //当前时间已经超过项目授权截止时间半个月,请重新获取项目授权后再进行操作! + context.Result = new JsonResult(ResponseOutput.NotOk(_localizer["TrialGlobalLimit_AuthorizationCodeAfterDeadLine15Days"])); return; } diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs index 536d54071..e7dd24115 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs @@ -1283,6 +1283,7 @@ namespace IRaCIS.Core.Application await _fusionCache.SetAsync(CacheKeys.Trial(trial.Id.ToString()), caheInfo, TimeSpan.FromDays(7)); + await _trialRepository.SaveChangesAsync(); return ResponseOutput.Ok(); diff --git a/IRaCIS.Core.Application/Service/Visit/PatientService.cs b/IRaCIS.Core.Application/Service/Visit/PatientService.cs index 9b5a22b53..3760f11f3 100644 --- a/IRaCIS.Core.Application/Service/Visit/PatientService.cs +++ b/IRaCIS.Core.Application/Service/Visit/PatientService.cs @@ -230,8 +230,8 @@ namespace IRaCIS.Application.Services } catch (Exception) { - - return ResponseOutput.Ok(trial, msg: "项目未授权,请确认。", code: ApiResponseCodeEnum.NeedTips); + //项目未授权,请确认。 + return ResponseOutput.Ok(trial, msg: _localizer["Patient_TrialNotAuthorization"], code: ApiResponseCodeEnum.NeedTips); } } return ResponseOutput.Ok(trial); @@ -276,7 +276,8 @@ namespace IRaCIS.Application.Services { if (await _trialRepository.AnyAsync(u => u.ResearchProgramNo == inCommand.ResearchProgramNo && u.CriterionTypes.Contains($"|{(int)criterionType}|"))) { - throw new BusinessValidationFailedException($"已存在研究方案号为{inCommand.ResearchProgramNo},该标准的项目"); + //"已存在研究方案号为{inCommand.ResearchProgramNo},该标准的项目" + throw new BusinessValidationFailedException(_localizer["Patient_SameResearchProgramNoTrial", inCommand.ResearchProgramNo]); } } @@ -338,7 +339,7 @@ namespace IRaCIS.Application.Services { if (await _trialRepository.AnyAsync(u => u.ResearchProgramNo == inCommand.ResearchProgramNo && u.CriterionTypes.Contains($"|{(int)criterionType}|") && u.Id != updateModel.Id)) { - throw new BusinessValidationFailedException($"已存在研究方案号为{inCommand.ResearchProgramNo},该标准的项目"); + throw new BusinessValidationFailedException(_localizer["Patient_SameResearchProgramNoTrial", inCommand.ResearchProgramNo]); } } @@ -490,8 +491,8 @@ namespace IRaCIS.Application.Services } catch (Exception) { - - return ResponseOutput.NotOk("激活码有误,请核对,无法激活"); + //"激活码有误,请核对,无法激活" + return ResponseOutput.NotOk(_localizer["Trial_ActivationCodeError"]); } var authInfo = JsonConvert.DeserializeObject(decodedText); @@ -502,7 +503,8 @@ namespace IRaCIS.Application.Services } else { - return ResponseOutput.NotOk("激活码信息有误!"); + //"激活码信息有误!" + return ResponseOutput.NotOk(_localizer["Trial_ActivationCodeError"] ); } } @@ -534,8 +536,8 @@ namespace IRaCIS.Application.Services } catch (Exception) { - - return ResponseOutput.NotOk("激活码有误,请核对,无法激活"); + //激活码有误,请核对,无法激活 + return ResponseOutput.NotOk(_localizer["Trial_ActivationCodeError"]); } var authInfo = JsonConvert.DeserializeObject(decodedText); @@ -545,12 +547,14 @@ namespace IRaCIS.Application.Services if (authInfo.TrialCode != trialInfo.TrialCode || authInfo.CreateUserId != trialInfo.CreateUserId || authInfo.HospitalCode != hospitalCode || authInfo.TrialId != trialInfo.Id || trialInfo.CriterionTypeList.Except(authInfo.CriterionTypeList).Count() != 0) { - return ResponseOutput.NotOk("该授权码与该项目不匹配"); + //"该授权码与该项目不匹配" + return ResponseOutput.NotOk(_localizer["Trial_ActivationCodeIsNotCurrentTrialError"]); } if (DateTime.Now > authInfo.ActiveDeadLineDate) { - return ResponseOutput.NotOk($"当前时间{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}超过激活时间{authInfo.ActiveDeadLineDate.Value.ToString("yyyy-MM-dd HH:mm:ss")},请联系授权方重新获取激活码"); + //$"当前时间{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}超过激活时间{authInfo.ActiveDeadLineDate.Value.ToString("yyyy-MM-dd HH:mm:ss")},请联系授权方重新获取激活码" + return ResponseOutput.NotOk(_localizer["Trial_ActivationCodeActiveTimeError", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), authInfo.ActiveDeadLineDate.Value.ToString("yyyy-MM-dd HH:mm:ss")]); } //截止日期 @@ -565,12 +569,13 @@ namespace IRaCIS.Application.Services await _trialRepository.BatchUpdateNoTrackingAsync(t => t.Id == trialId, u => new Trial() { AuthorizationEncrypt = newActivationCode, AuthorizationDate = deadLineDate }); var caheInfo = new TrialCacheInfo() { TrialId = trialInfo.Id, TrialStatusStr = trialInfo.TrialStatusStr, AuthorizationEncrypt = newActivationCode, CriterionTypes = trialInfo.CriterionTypes, AuthorizationDate = trialInfo.AuthorizationDate, CreateUserId = trialInfo.CreateUserId, TrialCode = trialInfo.TrialCode }; - - await _provider.SetAsync(trialInfo.Id.ToString(), JsonConvert.SerializeObject(caheInfo), TimeSpan.FromDays(7)); + + await _fusionCache.SetAsync(CacheKeys.Trial(trialInfo.Id.ToString()), caheInfo, TimeSpan.FromDays(7)); } else { - return ResponseOutput.NotOk("该授权码与该项目不匹配"); + // 激活信息反序列化错误 + return ResponseOutput.NotOk(_localizer["Trial_ActivationCodeDeserializeError"] ); } @@ -1244,7 +1249,12 @@ namespace IRaCIS.Application.Services var find = await _subjectRepository.FirstOrDefaultAsync(t => t.TrialId == inCommand.TrialId && t.Code == inCommand.SubjectCode); if (find != null) { - return ResponseOutput.NotOk($"项目中已存在编号为“{find.Code}”的受试者,状态为:{(find.Status == SubjectStatus.OnVisit ? "访视中" : "访视结束")},不允许添加。", ApiResponseCodeEnum.NeedTips); + //$"项目中已存在编号为“{find.Code}”的受试者,状态为:{(find.Status == SubjectStatus.OnVisit ? "访视中" : "访视结束")},不允许添加。" + + + + var identification = find.Status == SubjectStatus.OnVisit ? "Patient_TrialExistSubjectCodeError1" : "Patient_TrialExistSubjectCodeError2"; + return ResponseOutput.NotOk(_localizer[identification, find.Code], ApiResponseCodeEnum.NeedTips); } return ResponseOutput.Ok(); @@ -1304,8 +1314,8 @@ namespace IRaCIS.Application.Services } else { - - return ResponseOutput.NotOk($"项目中已存在编号为“{find.Code}”的受试者,状态为:{(find.Status == SubjectStatus.OnVisit ? "访视中" : "访视结束")},不允许添加。"); + var identification = find.Status == SubjectStatus.OnVisit ? "Patient_TrialExistSubjectCodeError1" : "Patient_TrialExistSubjectCodeError2"; + return ResponseOutput.NotOk(_localizer[identification, find.Code]); //subjectId = find.Id; } @@ -1417,7 +1427,8 @@ namespace IRaCIS.Application.Services } else if (_studySubjectVisitRepository.Any(t => t.SubjectId == subjectId && t.SubjectVisit.SubmitState == SubmitStateEnum.Submitted)) { - return ResponseOutput.NotOk(_localizer["该受试者有访视已提交,不允许解除受试者和该患者的绑定关系"]); + //该受试者有访视已提交,不允许解除受试者和该患者的绑定关系 + return ResponseOutput.NotOk(_localizer["Patient_SubjectVisitSubmitedCannotUnBinding"]); } @@ -1558,7 +1569,8 @@ namespace IRaCIS.Application.Services if (_subjectRepository.Any(t => t.Id == subjectId && t.Status == SubjectStatus.EndOfVisit)) { - return ResponseOutput.NotOk(_localizer["受试者状态为访视结束,不允许绑定访视和检查"]); + //受试者状态为访视结束,不允许绑定访视和检查 + return ResponseOutput.NotOk(_localizer["Patient_SubjectEndOfVisit"]); } var subjectVisit = await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId); @@ -1598,7 +1610,8 @@ namespace IRaCIS.Application.Services if (!arraysEqual) { - return ResponseOutput.NotOk(_localizer[$"{bindVisit.SubjectCode}所提交的访视中的检查时间,不符合后续访视的检查时间比前序检查的时间大的要求"]); + //_localizer[$"{bindVisit.SubjectCode}所提交的访视中的检查时间,不符合后续访视的检查时间比前序检查的时间大的要求"] + return ResponseOutput.NotOk(_localizer["Patient_SubjectVisitSubmmitTimeVerifyError", bindVisit.SubjectCode]); } @@ -1738,7 +1751,8 @@ namespace IRaCIS.Application.Services { if (allVisitList.Where(t => t.SubmitState != SubmitStateEnum.Submitted).Count() != inCommand.SubjectVisitIdList.Count()) { - return ResponseOutput.NotOk(_localizer["当前批量提交的访视中间有遗漏的访视或者前序有访视未提交"]); + //当前批量提交的访视中间有遗漏的访视或者前序有访视未提交 + return ResponseOutput.NotOk(_localizer["Patient_CurrentBatchSubmitVisitError"]); } } @@ -1746,25 +1760,29 @@ namespace IRaCIS.Application.Services { if (allVisitList.Any(t => t.VisitNum < curentMaxNum && t.SubmitState != SubmitStateEnum.Submitted)) { - return ResponseOutput.NotOk(_localizer["前序有访视未提交,请先提交前序访视"]); + //前序有访视未提交,请先提交前序访视 + return ResponseOutput.NotOk(_localizer["Patient_BeforeVisitNotSubmit"]); } } if (allVisitList.Any(t => t.Status == SubjectStatus.EndOfVisit)) { - return ResponseOutput.NotOk(_localizer["受试者状态为访视结束,不允许提交访视生成任务"]); + //受试者状态为访视结束,不允许提交访视生成任务 + return ResponseOutput.NotOk(_localizer["Patient_SubjectEndOfVisitNotSubmit"]); } var list = await _studySubjectVisitRepository.Where(t => inCommand.SubjectVisitIdList.Contains(t.SubjectVisitId)).Select(t => new { t.SCPStudyId, t.SCPStudy.PatientId, t.SubjectVisitId, t.SubjectVisit.VisitNum, t.SubjectVisit.SubjectId, SubjectCode = t.SubjectVisit.Subject.Code, t.SubjectVisit.TrialId, t.SCPStudy.StudyTime, t.StudyId, t.SCPStudy.IsUploadFinished }).OrderBy(t => t.StudyTime).ToListAsync(); if (list.Any(t => t.StudyId != null)) { - return ResponseOutput.NotOk(_localizer["有访视和检查处于已绑定关系,不允许再次提交绑定"]); + //有访视和检查处于已绑定关系,不允许再次提交绑定 + return ResponseOutput.NotOk(_localizer["Patient_VisitAndStudyHaveBind"]); } if (list.Any(t => t.IsUploadFinished == false)) { - return ResponseOutput.NotOk(_localizer["有访视检查正在传输中,不允许提交"]); + //有访视检查正在传输中,不允许提交 + return ResponseOutput.NotOk(_localizer["Patient_VisitStudyIsUploading"]); } @@ -1779,12 +1797,14 @@ namespace IRaCIS.Application.Services if (!arraysEqual) { - return ResponseOutput.NotOk(_localizer[$"{g.Key.SubjectCode}所提交的访视中的检查时间,不符合后续访视的检查时间比前序检查的时间大的要求"]); + //_localizer[$"{g.Key.SubjectCode}所提交的访视中的检查时间,不符合后续访视的检查时间比前序检查的时间大的要求"] + return ResponseOutput.NotOk(_localizer["Patient_SubjectVisitSubmmitTimeVerifyError", g.Key.SubjectCode] ); } if (DateTime.Now < studyTimeOrderList.Max(t => t.StudyTime)) { - return ResponseOutput.NotOk(_localizer[$"您当前修改了服务器时间,试图绕过软件授权,请恢复服务器时间,并联系授权方授权才可进行操作"]); + //$"您当前修改了服务器时间,试图绕过软件授权,请恢复服务器时间,并联系授权方授权才可进行操作" + return ResponseOutput.NotOk(_localizer["Patient_ModifyServerTimeError"]); } } @@ -1812,7 +1832,8 @@ namespace IRaCIS.Application.Services //提交的访视下没有检查 if (!_studySubjectVisitRepository.Any(t => t.SubjectVisitId == item.SubjectVisitId)) { - return ResponseOutput.NotOk(_localizer["提交的访视下必须有影像检查!"]); + //提交的访视下必须有影像检查! + return ResponseOutput.NotOk(_localizer["Patient_SubmitVisitMustHaveImage"]); } var dbSubjectVisit = await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == item.SubjectVisitId);