diff --git a/IRaCIS.Core.Application/BusinessFilter/ProjectExceptionFilter.cs b/IRaCIS.Core.Application/BusinessFilter/ProjectExceptionFilter.cs index 2948ee64f..358095f00 100644 --- a/IRaCIS.Core.Application/BusinessFilter/ProjectExceptionFilter.cs +++ b/IRaCIS.Core.Application/BusinessFilter/ProjectExceptionFilter.cs @@ -32,8 +32,10 @@ namespace IRaCIS.Core.Application.Filter if (context.Exception.GetType() == typeof(BusinessValidationFailedException)) { - context.Result = new JsonResult(ResponseOutput.NotOk(context.Exception.Message,ApiResponseCodeEnum.BusinessValidationFailed)); - } + var error = context.Exception as BusinessValidationFailedException; + + context.Result = new JsonResult(ResponseOutput.NotOk(context.Exception.Message, error!.Code)); + } else if(context.Exception.GetType() == typeof(QueryBusinessObjectNotExistException)) { context.Result = new JsonResult(ResponseOutput.NotOk( context.Exception.Message, ApiResponseCodeEnum.DataNotExist)); diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 2eabf674d..bfad115dd 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -4521,6 +4521,11 @@ 是否是第一次转化的任务 + + + 是否存在临床数据 + + 当新答案为空的时候 是否是有原数据 diff --git a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs index 429bf4df3..b442a2519 100644 --- a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs @@ -364,7 +364,10 @@ namespace IRaCIS.Core.Application.ViewModel { public Guid TrialId { get; set; } - public Guid TrialReadingCriterionId { get; set; } + + public Guid? SubjectId { get; set; } + + public Guid TrialReadingCriterionId { get; set; } public string? SubjectCode { get; set; } = null; diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs index a8a98d348..aa0f92110 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs @@ -280,12 +280,12 @@ namespace IRaCIS.Core.Application.Service var defaultState = trialReadingCriterionConfig.FollowVisitAutoAssignDefaultState == TaskAllocateDefaultState.InitAllocated ? TaskAllocationState.InitAllocated : TaskAllocationState.Allocated; } - await _visitTaskRepository.SaveChangesAsync(); } } + await _visitTaskRepository.SaveChangesAsync(); } diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs index 98252cc95..f87a7e3b7 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs @@ -26,6 +26,7 @@ using IRaCIS.Application.Services.BackGroundJob; using Magicodes.ExporterAndImporter.Core.Extension; using Hangfire; using MassTransit; +using static IRaCIS.Core.Domain.Models.ReadingQuestionTrial; namespace IRaCIS.Core.Application.Service.Allocation { @@ -226,6 +227,8 @@ namespace IRaCIS.Core.Application.Service.Allocation public async Task>> GetPIReadingAuditList(VisitTaskQuery queryVisitTask) { + //CriterionType? criterionType = _trialReadingCriterionRepository.Where(t => t.Id == queryVisitTask.TrialReadingCriterionId).Select(t=>t.CriterionType).FirstOrDefault(); + var visitTaskQueryable = GetReadingTaskQueryable(queryVisitTask) .ProjectTo(_mapper.ConfigurationProvider); @@ -237,6 +240,8 @@ namespace IRaCIS.Core.Application.Service.Allocation var questionList = _readingQuestionTrialRepository.Where(t => t.TrialId == queryVisitTask.TrialId && t.ReadingQuestionCriterionTrialId == queryVisitTask.TrialReadingCriterionId) .Where(t => t.IsJudgeQuestion == true) + //.WhereIf(criterionType!=null&& criterionType!=CriterionType.SelfDefine,t=>t.IsJudgeQuestion==true) + // .WhereIf(criterionType != null && criterionType == CriterionType.SelfDefine, t => t.AssessmentResultEnum == AssessmentResultType.AssessmentResult) .Select(t => new { QuestionId = t.Id, QuestionName = _userInfo.IsEn_Us ? t.QuestionEnName : t.QuestionName ,t.DictionaryCode}).ToList(); trialTaskConfig!.OtherObj = questionList; @@ -658,9 +663,9 @@ namespace IRaCIS.Core.Application.Service.Allocation var visitQuery = _visitTaskRepository .Where(x => x.TrialId == inDto.TrialId && x.TaskState == TaskState.Effect) - - //PI 读基线的时候,subject 如果PI基线没阅片完,SR就不能看 - .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SR && piReadingScopenEnum == PIReadingScopenEnum.AllBaseline && readingDivisionEnum == ReadingDivisionEnum.PIandSR, + .WhereIf(inDto.SubjectId!=null,t=>t.SubjectId==inDto.SubjectId) + //PI 读基线的时候,subject 如果PI基线没阅片完,SR就不能看 + .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SR && piReadingScopenEnum == PIReadingScopenEnum.AllBaseline && readingDivisionEnum == ReadingDivisionEnum.PIandSR, t => t.Subject.SubjectVisitTaskList.Any(c => c.SourceSubjectVisit.IsBaseLine == true && c.ReadingTaskState == ReadingTaskState.HaveSigned && c.TaskState == TaskState.Effect && c.TrialReadingCriterionId == trialReadingCriterionId)) //PI 读随访的时候, subject 如果SR基线没阅片完,PI就不能看 diff --git a/IRaCIS.Core.Application/Service/Allocation/_MapConfig.cs b/IRaCIS.Core.Application/Service/Allocation/_MapConfig.cs index 8962c149a..b2960f5c4 100644 --- a/IRaCIS.Core.Application/Service/Allocation/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/Allocation/_MapConfig.cs @@ -4,6 +4,7 @@ using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Domain.Share; +using static IRaCIS.Core.Domain.Models.ReadingQuestionTrial; namespace IRaCIS.Core.Application.Service { @@ -85,7 +86,8 @@ namespace IRaCIS.Core.Application.Service CreateMap().IncludeBase() .ForMember(t=>t.PIReadingResultList,u=>u.MapFrom(c=>c.ReadingTaskQuestionAnswerList - .Where(t=>t.ReadingQuestionTrial.IsJudgeQuestion==true ).Select(d=>new PIReadingResult() { QuestionId= d.ReadingQuestionTrialId,Answer=d.Answer}))); + .Where(t=> /*t.ReadingQuestionCriterionTrial.CriterionType==CriterionType.SelfDefine? t.ReadingQuestionTrial.AssessmentResultEnum == AssessmentResultType.AssessmentResult:*/ t.ReadingQuestionTrial.IsJudgeQuestion==true) + .Select(d=>new PIReadingResult() { QuestionId= d.ReadingQuestionTrialId,Answer=d.Answer}))); CreateMap().IncludeBase() .ForMember(o => o.FirstAuditUserName, t => t.MapFrom(u => u.FirstAuditUser.UserName)) diff --git a/IRaCIS.Core.Application/Service/Common/InternationalizationService.cs b/IRaCIS.Core.Application/Service/Common/InternationalizationService.cs index 46ed1e447..848de647d 100644 --- a/IRaCIS.Core.Application/Service/Common/InternationalizationService.cs +++ b/IRaCIS.Core.Application/Service/Common/InternationalizationService.cs @@ -144,7 +144,8 @@ namespace IRaCIS.Core.Application.Service await _internationalizationRepository.SaveChangesAsync(); - + //清理缓存 + _provider.Set>(StaticData.InternationalData.Front, new List(), TimeSpan.FromDays(1)); return ResponseOutput.Ok(); } @@ -183,6 +184,9 @@ namespace IRaCIS.Core.Application.Service } + //清理缓存 + _provider.Set>(StaticData.InternationalData.Front, new List(), TimeSpan.FromDays(1)); + return ResponseOutput.Ok(entity.Id.ToString()); } @@ -192,6 +196,9 @@ namespace IRaCIS.Core.Application.Service public async Task DeleteInternationalization(Guid internationalizationId) { var success = await _internationalizationRepository.DeleteFromQueryAsync(t => t.Id == internationalizationId, true); + + //清理缓存 + _provider.Set>(StaticData.InternationalData.Front, new List(), TimeSpan.FromDays(1)); return ResponseOutput.Ok(); } diff --git a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs index 2df1d2848..ec7c73af0 100644 --- a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs +++ b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs @@ -1322,13 +1322,14 @@ namespace IRaCIS.Core.Application.Service /// /// /// + [HttpPost] public async Task> GetSysEmailNoticeConfigList(EmailNoticeConfigQuery queryEmailNoticeConfig) { var emailNoticeConfigQueryable = _emailNoticeConfigRepository .WhereIf(queryEmailNoticeConfig.BusinessScenarioEnum != null, t => t.BusinessScenarioEnum == queryEmailNoticeConfig.BusinessScenarioEnum) .WhereIf(queryEmailNoticeConfig.IsReturnRequired != null, t => t.IsReturnRequired == queryEmailNoticeConfig.IsReturnRequired) .WhereIf(queryEmailNoticeConfig.IsEnable != null, t => t.IsEnable == queryEmailNoticeConfig.IsEnable) - + .WhereIf(queryEmailNoticeConfig.CriterionTypeEnum != null, t => t.CriterionTypeEnum == queryEmailNoticeConfig.CriterionTypeEnum) .ProjectTo(_mapper.ConfigurationProvider, new { trialId = queryEmailNoticeConfig.TrialId }); return await emailNoticeConfigQueryable.ToPagedListAsync(queryEmailNoticeConfig.PageIndex, queryEmailNoticeConfig.PageSize, queryEmailNoticeConfig.SortField, queryEmailNoticeConfig.Asc); diff --git a/IRaCIS.Core.Application/Service/Inspection/FrontAuditConfigService.cs b/IRaCIS.Core.Application/Service/Inspection/FrontAuditConfigService.cs index 95b543718..752d76ce7 100644 --- a/IRaCIS.Core.Application/Service/Inspection/FrontAuditConfigService.cs +++ b/IRaCIS.Core.Application/Service/Inspection/FrontAuditConfigService.cs @@ -319,9 +319,9 @@ namespace IRaCIS.Core.Application.Service { continue; } - str = await GetInspectionEnumValue(listIdentification, str); - str = await SetEnum(dto.TrialId, listIdentification, str); - str = await SetDataInspectionDateType(listIdentification, str); + str = await GetInspectionEnumValue(listIdentification, item.Identification, str); + str = await SetEnum(dto.TrialId, listIdentification, item.Identification, str); + str = await SetDataInspectionDateType(listIdentification, item.Identification, str); jsonDict[nameof(InspectionJsonDetail.Data)] = JsonConvert.DeserializeObject(str); @@ -331,9 +331,9 @@ namespace IRaCIS.Core.Application.Service { continue; } - str2 = await GetInspectionEnumValue(listIdentification, str2); - str2 = await SetEnum(dto.TrialId, listIdentification, str2); - str2 = await SetDataInspectionDateType(listIdentification, str2); + str2 = await GetInspectionEnumValue(listIdentification, item.Identification, str2); + str2 = await SetEnum(dto.TrialId, listIdentification, item.Identification, str2); + str2 = await SetDataInspectionDateType(listIdentification, item.Identification, str2); jsonDict[nameof(InspectionJsonDetail.CommonData)] = JsonConvert.DeserializeObject(str2); #endregion @@ -456,20 +456,23 @@ namespace IRaCIS.Core.Application.Service /// /// /// - private async Task SetDataInspectionDateType(List identificationList, string jsonStr) + private async Task SetDataInspectionDateType(List identificationList,string identification, string jsonStr) { var list = await (from parent in _frontAuditConfigRepository.AsQueryable().Where(x => identificationList.Contains(x.Identification)) join child in _frontAuditConfigRepository.AsQueryable().Where(x => x.EnumType == "Date" && x.IsEnable) on parent.Id equals child.ParentId select new DateDto() { - Code = child.Code, + Identification= parent.Identification, + + Code = child.Code, DateType = child.DateType, }).ToListAsync(); list = list.GroupBy(x => new { x.Code }, (key, lst) => new DateDto() { + Code = key.Code, - DateType = lst.Max(x => x.DateType), + DateType = lst.FirstOrDefault(y => y.Identification == identification)?.DateType ?? lst.Max(x => x.DateType), }).ToList(); var jsonDataDic = JsonConvert.DeserializeObject>(jsonStr); @@ -519,23 +522,25 @@ namespace IRaCIS.Core.Application.Service ///// 外键value ///// 要查询的外键值 ///// 传入的纸 - private async Task GetInspectionEnumValue(List identificationList, string jsonStr) + private async Task GetInspectionEnumValue(List identificationList,string identification, string jsonStr) { var list = await (from u in _frontAuditConfigRepository.Where(x => identificationList.Contains(x.Identification)) join p in _frontAuditConfigRepository.Where(x => x.EnumType == "Foreign" && x.IsEnable) on u.Id equals p.ParentId select new { Key = p.Code, - ForeignKeyValue = p.ForeignKeyValue, + Identification=u.Identification, + ForeignKeyValue = p.ForeignKeyValue, ForeignKeyText = p.ForeignKeyText, ForeignKeyTable = p.ForeignKeyTableName }).ToListAsync(); list = list.GroupBy(x => new { x.Key }, (key, lst) => new { Key = key.Key, - ForeignKeyValue = lst.Max(x => x.ForeignKeyValue), - ForeignKeyText = lst.Max(x => x.ForeignKeyText), - ForeignKeyTable = lst.Max(x => x.ForeignKeyTable), + Identification=string.Empty, + ForeignKeyValue= lst.FirstOrDefault(y => y.Identification == identification)?.ForeignKeyValue ?? lst.Max(x => x.ForeignKeyValue), + ForeignKeyText = lst.FirstOrDefault(y => y.Identification == identification)?.ForeignKeyText ?? lst.Max(x => x.ForeignKeyText), + ForeignKeyTable = lst.FirstOrDefault(y => y.Identification == identification)?.ForeignKeyTable ?? lst.Max(x => x.ForeignKeyTable), }).ToList(); @@ -585,7 +590,7 @@ namespace IRaCIS.Core.Application.Service /// 标识 /// Json对象 /// - private async Task SetEnum(Guid trialId, List identificationList, string jsonStr) + private async Task SetEnum(Guid trialId, List identificationList, string identification, string jsonStr) { if (jsonStr == null || jsonStr == "null") { @@ -598,27 +603,41 @@ namespace IRaCIS.Core.Application.Service join p in _frontAuditConfigRepository.Where(x => (x.DictionaryCode != string.Empty && x.EnumType == "Dictionary") || (x.DataType == "Table") && x.IsEnable) on u.Id equals p.ParentId select new { - //前端展示类型 - DataType = p.DataType, - TableConfigJsonStr = p.TableConfigJsonStr, - Key = p.Code, + Key = p.Code, + Identification = u.Identification, + //前端展示类型 + DataType = p.DataType, + + TableConfigJsonStr = p.TableConfigJsonStr, + Code = p.DictionaryCode, Type = p.DictionaryType }).ToListAsync(); //两条不同的标识 但是里面配置有相同的翻译字典 - list = list.Distinct().ToList(); + list = list.GroupBy(x => new { x.Key }, (key, lst) => new + { + Key = key.Key, + Identification = string.Empty, + DataType = lst.FirstOrDefault(y => y.Identification == identification)?.DataType ?? lst.Max(x => x.DataType), + TableConfigJsonStr = lst.FirstOrDefault(y => y.Identification == identification)?.TableConfigJsonStr ?? lst.Max(x => x.TableConfigJsonStr), + Code = lst.FirstOrDefault(y => y.Identification == identification)?.Code ?? lst.Max(x => x.Code), + Type = lst.FirstOrDefault(y => y.Identification == identification)?.Type ?? lst.Max(x => x.Type), + - // 添加单双审 - var trialtype = await _trialRepository.AsQueryable().Where(x => x.Id == trialId).Select(x => x.QCProcessEnum).FirstOrDefaultAsync(); + }).ToList(); + + // 添加单双审 + var trialtype = await _trialRepository.AsQueryable().Where(x => x.Id == trialId).Select(x => x.QCProcessEnum).FirstOrDefaultAsync(); if (!list.Any(x => x.Key == "AuditState")) { list.Add(new - { - DataType = string.Empty, - TableConfigJsonStr = string.Empty, - Key = "AuditState", + { + Key = "AuditState", + Identification = string.Empty, + DataType = string.Empty, + TableConfigJsonStr = string.Empty, Code = trialtype == TrialQCProcess.SingleAudit ? "AuditStatePE" : "AuditStateRC", Type = "Code", }); diff --git a/IRaCIS.Core.Application/Service/Institution/DTO/SiteModel.cs b/IRaCIS.Core.Application/Service/Institution/DTO/SiteModel.cs index 6e1bd9bf1..674ca75ee 100644 --- a/IRaCIS.Core.Application/Service/Institution/DTO/SiteModel.cs +++ b/IRaCIS.Core.Application/Service/Institution/DTO/SiteModel.cs @@ -3,9 +3,9 @@ using IRaCIS.Core.Infrastructure.Extention; namespace IRaCIS.Application.Contracts { - public class SiteDTO: SiteCommand + public class SiteDTO : SiteCommand { - + } public class SiteCommand @@ -24,7 +24,7 @@ namespace IRaCIS.Application.Contracts public string AliasName { get; set; } = string.Empty; public string City { get; set; } = string.Empty; public string Country { get; set; } = string.Empty; - public Guid? HospitalId { get; set; } + public Guid? HospitalId { get; set; } public string DirectorName { get; set; } = string.Empty; public string DirectorPhone { get; set; } = string.Empty; public string ContactName { get; set; } = string.Empty; @@ -35,6 +35,9 @@ namespace IRaCIS.Application.Contracts { public Guid Id { get; set; } public string SiteName { get; set; } = String.Empty; + + public string SiteNameCN { get; set; } = String.Empty; + public string City { get; set; } = String.Empty; public string Province { get; set; } = string.Empty; diff --git a/IRaCIS.Core.Application/Service/Institution/HospitalService.cs b/IRaCIS.Core.Application/Service/Institution/HospitalService.cs index 58fec58d1..80fe35f2e 100644 --- a/IRaCIS.Core.Application/Service/Institution/HospitalService.cs +++ b/IRaCIS.Core.Application/Service/Institution/HospitalService.cs @@ -3,18 +3,20 @@ using IRaCIS.Application.Contracts; using IRaCIS.Core.Infra.EFCore; using Microsoft.AspNetCore.Mvc; using IRaCIS.Core.Infrastructure; +using Microsoft.Data.Sqlite; namespace IRaCIS.Application.Services { - [ ApiExplorerSettings(GroupName = "Institution")] + [ApiExplorerSettings(GroupName = "Institution")] public class HospitalService : BaseService, IHospitalService { private readonly IRepository _hospitalRepository; + private readonly IRepository _siteRepository; - public HospitalService(IRepository hospitalRepository ) + public HospitalService(IRepository hospitalRepository, IRepository siteRepository) { _hospitalRepository = hospitalRepository; - + _siteRepository = siteRepository; } /// 获取所有医院列表 @@ -37,15 +39,26 @@ namespace IRaCIS.Application.Services var exp1 = new EntityVerifyExp() { VerifyExp = x => x.SiteId == hospitalCommand.SiteId && hospitalCommand.SiteId != null, - //---已经存在同名的医院,请确认。 + //---当前中心已经添加到其他医院了。 VerifyMsg = _localizer["Hospital_SiteAdded"] }; - - var hospital = await _hospitalRepository.InsertOrUpdateAsync(hospitalCommand, true, exp,exp1); - + + var hospital = await _hospitalRepository.InsertOrUpdateAsync(hospitalCommand, true, exp, exp1); + + //手动解绑医院与site的关系 + if (hospitalCommand.SiteId == null && hospital.SiteId != null) + { + await _siteRepository.BatchUpdateNoTrackingAsync(t => t.Id == hospital.SiteId, u => new Site() { HospitalId = null }); + } + + //手动绑 + if (hospitalCommand.SiteId != null) + { + await _siteRepository.BatchUpdateNoTrackingAsync(t => t.Id == hospitalCommand.SiteId, u => new Site() { HospitalId = hospital.Id }); + } return ResponseOutput.Ok(hospital.Id.ToString()); - + } @@ -54,11 +67,6 @@ namespace IRaCIS.Application.Services [HttpDelete("{hospitalId:guid}")] public async Task DeleteHospital(Guid hospitalId) { - - //if (_userRepository.Find().Any(t => t.OrganizationId == hospitalId)) - //{ - // return ResponseOutput.NotOk("该医院下存在用户,暂时无法删除。"); - //} var success = await _hospitalRepository.BatchDeleteNoTrackingAsync(x => x.Id == hospitalId); @@ -67,12 +75,12 @@ namespace IRaCIS.Application.Services /// 分页获取医院列表 [HttpPost] - public async Task> GetHospitalPageList(HospitalQueryDTO hospitalSearchModel) + public async Task> GetHospitalPageList(HospitalQueryDTO hospitalSearchModel) { var hospitalQueryable = _hospitalRepository - .WhereIf(hospitalSearchModel.HospitalName!=null, t => t.HospitalName.Contains(hospitalSearchModel.HospitalName!) || t.HospitalNameCN.Contains(hospitalSearchModel.HospitalName!)) + .WhereIf(hospitalSearchModel.HospitalName != null, t => t.HospitalName.Contains(hospitalSearchModel.HospitalName!) || t.HospitalNameCN.Contains(hospitalSearchModel.HospitalName!)) .WhereIf(hospitalSearchModel.City != null, t => t.City.Contains(hospitalSearchModel.City!) || t.HospitalNameCN.Contains(hospitalSearchModel.City!)) .WhereIf(hospitalSearchModel.Province != null, t => t.Province.Contains(hospitalSearchModel.Province!) || t.HospitalNameCN.Contains(hospitalSearchModel.Province!)) .ProjectTo(_mapper.ConfigurationProvider); diff --git a/IRaCIS.Core.Application/Service/Institution/SiteService.cs b/IRaCIS.Core.Application/Service/Institution/SiteService.cs index 9d77f48ed..24cb6bf8c 100644 --- a/IRaCIS.Core.Application/Service/Institution/SiteService.cs +++ b/IRaCIS.Core.Application/Service/Institution/SiteService.cs @@ -4,6 +4,7 @@ using IRaCIS.Core.Infra.EFCore; using Microsoft.AspNetCore.Mvc; using IRaCIS.Core.Domain.Share; using Medallion.Threading; +using IRaCIS.Core.Domain.Models; namespace IRaCIS.Application.Services { @@ -13,12 +14,14 @@ namespace IRaCIS.Application.Services private readonly IRepository _siteRepository; private readonly IRepository _trialSiteUserRepository; private readonly IDistributedLockProvider _distributedLockProvider; + private readonly IRepository _hospitalRepository; - public SiteService(IRepository siteRepository, IRepository trialSiteUserRepository, IDistributedLockProvider distributedLockProvider) + public SiteService(IRepository siteRepository, IRepository trialSiteUserRepository, IDistributedLockProvider distributedLockProvider, IRepository hospitalRepository) { _siteRepository = siteRepository; _trialSiteUserRepository = trialSiteUserRepository; _distributedLockProvider = distributedLockProvider; + _hospitalRepository = hospitalRepository; } /// 分页获取研究中心列表 @@ -32,7 +35,7 @@ namespace IRaCIS.Application.Services .WhereIf(!string.IsNullOrWhiteSpace(searchModel.City), t => t.City.Contains(searchModel.City)) .WhereIf(!string.IsNullOrWhiteSpace(searchModel.Country), t => t.Country.Contains(searchModel.Country)) .WhereIf(!string.IsNullOrWhiteSpace(searchModel.Province), t => t.Province.Contains(searchModel.Province)) - .ProjectTo(_mapper.ConfigurationProvider, new { isEn_Us = _userInfo.IsEn_Us }); + .ProjectTo(_mapper.ConfigurationProvider, new { isEn_Us = _userInfo.IsEn_Us }); return await siteQueryable.ToPagedListAsync(searchModel.PageIndex, searchModel.PageSize, string.IsNullOrWhiteSpace(searchModel.SortField) ? "SiteName" : searchModel.SortField, searchModel.Asc); @@ -72,6 +75,18 @@ namespace IRaCIS.Application.Services var site = await _siteRepository.InsertOrUpdateAsync(siteCommand, true, exp); + //手动解绑医院与site的关系 + if (siteCommand.HospitalId == null && site.HospitalId != null) + { + await _hospitalRepository.BatchUpdateNoTrackingAsync(t => t.Id == site.HospitalId, u => new Hospital() { SiteId = null }); + } + + //手动绑 + if (siteCommand.HospitalId != null) + { + await _hospitalRepository.BatchUpdateNoTrackingAsync(t => t.Id == siteCommand.HospitalId, u => new Hospital() { SiteId = site.Id }); + } + return ResponseOutput.Ok(site.Id.ToString()); } diff --git a/IRaCIS.Core.Application/Service/Management/UserService.cs b/IRaCIS.Core.Application/Service/Management/UserService.cs index 9fc51f6b4..ea5e82ae7 100644 --- a/IRaCIS.Core.Application/Service/Management/UserService.cs +++ b/IRaCIS.Core.Application/Service/Management/UserService.cs @@ -311,7 +311,7 @@ namespace IRaCIS.Application.Services { //检查手机或者邮箱是否有效 - if (!Regex.IsMatch(email, @"^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$")) + if (!Regex.IsMatch(email, @"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$")) { //---请输入一个正确的邮箱。 diff --git a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs index 4cb37bf78..e76d0cb3b 100644 --- a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs +++ b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs @@ -1355,40 +1355,40 @@ namespace IRaCIS.Core.Application.Image.QA //dbSubjectVisit.Subject.IsMissingImages = await _subjectVisitRepository.AnyAsync(t => (t.VisitNum < maxVisitNum && t.SubmitState != SubmitStateEnum.Submitted && t.IsLostVisit == false)); //项目或者Subject IsUrgent 提交时 访视也设置为紧急 - if (trialConfig.IsUrgent || dbSubjectVisit.Subject.IsUrgent || (dbSubjectVisit.PDState == PDStateEnum.PDProgress && !dbSubjectVisit.IsBaseLine) || (dbSubjectVisit.IsEnrollmentConfirm && dbSubjectVisit.IsBaseLine)) + if (trialConfig.IsUrgent || dbSubjectVisit.Subject.IsUrgent || (dbSubjectVisit.IsEnrollmentConfirm && dbSubjectVisit.IsBaseLine)) { - if (dbSubjectVisit.PDState == PDStateEnum.PDProgress) - { - await _subjectVisitRepository.BatchUpdateNoTrackingAsync(x => x.SubjectId == dbSubjectVisit.SubjectId && x.VisitNum <= dbSubjectVisit.VisitNum, x => new SubjectVisit() - { - IsUrgent = true - }); + //if (dbSubjectVisit.PDState == PDStateEnum.PDProgress) + //{ + // await _subjectVisitRepository.BatchUpdateNoTrackingAsync(x => x.SubjectId == dbSubjectVisit.SubjectId && x.VisitNum <= dbSubjectVisit.VisitNum, x => new SubjectVisit() + // { + // IsUrgent = true + // }); + // await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId) && x.SubjectId == dbSubjectVisit.SubjectId && + // dbSubjectVisit.VisitNum <= x.VisitTaskNum && x.VisitTaskNum < Math.Ceiling(dbSubjectVisit.VisitNum + 0.01m) // 当前的访视 全局 裁判 及之前 全都加急 + // && x.ReadingTaskState != ReadingTaskState.HaveSigned && x.TaskState == TaskState.Effect, x => new VisitTask() + // { + // IsUrgent = true, + // TaskUrgentType = TaskUrgentType.PDProgress, + // IsCanEditUrgentState = false, + // }); - await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId)&& x.SubjectId == dbSubjectVisit.SubjectId&& - dbSubjectVisit.VisitNum<= x.VisitTaskNum && x.VisitTaskNum < Math.Ceiling(dbSubjectVisit.VisitNum+0.01m) // 当前的访视 全局 裁判 及之前 全都加急 - && x.ReadingTaskState != ReadingTaskState.HaveSigned && x.TaskState == TaskState.Effect, x => new VisitTask() - { + // await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId) && x.SubjectId == dbSubjectVisit.SubjectId + // && x.VisitTaskNum < dbSubjectVisit.VisitNum // 当前的访视 全局 裁判 及之前 全都加急 + // && x.ReadingTaskState != ReadingTaskState.HaveSigned && x.TaskState == TaskState.Effect, x => new VisitTask() + // { - IsUrgent = true, - TaskUrgentType = TaskUrgentType.PDProgress, - IsCanEditUrgentState=false, - }); - - await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId) && x.SubjectId == dbSubjectVisit.SubjectId - && x.VisitTaskNum < dbSubjectVisit.VisitNum // 当前的访视 全局 裁判 及之前 全都加急 - && x.ReadingTaskState != ReadingTaskState.HaveSigned && x.TaskState == TaskState.Effect, x => new VisitTask() - { - - IsUrgent = true, - TaskUrgentType = TaskUrgentType.Other, - TaskUrgentRemake= "后续访视设为pd", - IsCanEditUrgentState = false, - }); - } - else if (dbSubjectVisit.IsEnrollmentConfirm) + // IsUrgent = true, + // TaskUrgentType = TaskUrgentType.Other, + // TaskUrgentRemake = "后续访视设为pd", + // IsCanEditUrgentState = false, + // }); + //} + //else + + if (dbSubjectVisit.IsEnrollmentConfirm) { await _subjectVisitRepository.BatchUpdateNoTrackingAsync(x => x.Id == dbSubjectVisit.Id, x => new SubjectVisit() { @@ -1420,14 +1420,14 @@ namespace IRaCIS.Core.Application.Image.QA dbSubjectVisit.IsUrgent = true; - //PD确认的紧急会把前面所有未QC完成的访视均标记为紧急 + ////PD确认的紧急会把前面所有未QC完成的访视均标记为紧急 - var previosSVlist = await _subjectVisitRepository.Where(t => t.SubjectId == dbSubjectVisit.SubjectId && t.VisitNum < dbSubjectVisit.VisitNum && t.IsUrgent == false && t.SubmitState == SubmitStateEnum.Submitted, true).ToListAsync(); + //var previosSVlist = await _subjectVisitRepository.Where(t => t.SubjectId == dbSubjectVisit.SubjectId && t.VisitNum < dbSubjectVisit.VisitNum && t.IsUrgent == false && t.SubmitState == SubmitStateEnum.Submitted, true).ToListAsync(); - previosSVlist.ForEach(t => - { - t.IsUrgent = true; - }); + //previosSVlist.ForEach(t => + //{ + // t.IsUrgent = true; + //}); } diff --git a/IRaCIS.Core.Application/Service/QC/_MapConfig.cs b/IRaCIS.Core.Application/Service/QC/_MapConfig.cs index afde027f9..a9bbd6151 100644 --- a/IRaCIS.Core.Application/Service/QC/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/QC/_MapConfig.cs @@ -104,7 +104,7 @@ namespace IRaCIS.Core.Application.Service .ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.Subject.Code)) .ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.TrialSite.TrialSiteCode)) - .ForMember(d => d.CheckDialogStr, u => u.MapFrom(t => string.Join(" | ", t.CheckChallengeDialogList.OrderBy(t => t.CreateTime).Select(c => c.CreateUser.UserName + " " + c.CreateTime.ToString("yyyy-mm-dd hh:mm:ss") + " :" + c.TalkContent)))) + .ForMember(d => d.CheckDialogStr, u => u.MapFrom(t => string.Join(" | ", t.CheckChallengeDialogList.OrderBy(t => t.CreateTime).Select(c => c.CreateUser.UserName + " " + c.CreateTime.ToString("yyyy-MM-dd HH:mm:ss") + " :" + c.TalkContent)))) .ForMember(d => d.ModalityList, c => c.MapFrom(s => (s.NoneDicomStudyList.Select(t => t.Modality) .Union(s.StudyList.Select(k => k.ModalityForEdit))).Distinct())) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs index 57ef41677..7156f4d5a 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs @@ -190,23 +190,24 @@ namespace IRaCIS.Application.Services .WhereIf(inDto.IsBaseline, x => x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.Subject || x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit) .WhereIf(!inDto.IsBaseline, x => x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit) .Where(x => x.ClinicalDataTrialSet.TrialId == inDto.TrialId && x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC) - .Include(x=>x.ClinicalDataTrialSet) - .OrderBy(x=>x.ClinicalDataTrialSet.CreateTime) + .Include(x => x.ClinicalDataTrialSet) + .OrderBy(x => x.ClinicalDataTrialSet.CreateTime) .Select(x => new GetCRCClinicalDataOutDto() { Id = x.Id, - ClinicalDataSetName = x.ClinicalDataTrialSet.ClinicalDataSetName.LanguageName(x.ClinicalDataTrialSet.ClinicalDataSetEnName, _userInfo.IsEn_Us) , + ClinicalDataSetName = x.ClinicalDataTrialSet.ClinicalDataSetName.LanguageName(x.ClinicalDataTrialSet.ClinicalDataSetEnName, _userInfo.IsEn_Us), ClinicalUploadType = x.ClinicalDataTrialSet.ClinicalUploadType, - ClinicalDataSetEnName=x.ClinicalDataTrialSet.ClinicalDataSetEnName, + ClinicalDataSetEnName = x.ClinicalDataTrialSet.ClinicalDataSetEnName, ClinicalDataTrialSetId = x.ClinicalDataTrialSet.Id, FileName = x.ClinicalDataTrialSet.FileName, UploadRole = x.ClinicalDataTrialSet.UploadRole, Path = x.ClinicalDataTrialSet.Path, IsBlind = x.IsBlind, IsComplete = x.IsComplete, - ClinicalFromList=x.Subject.ClinicalFormList.Where(y=>y.ReadingId==x.ReadingId&&y.ClinicalDataTrialSetId==x.ClinicalDataTrialSetId).Select(y=> new ClinicalFromData() { - CheckDate=y.CheckDate, - ClinicalFormId=y.Id + ClinicalFromList = x.Subject.ClinicalFormList.Where(y => y.ReadingId == x.ReadingId && y.ClinicalDataTrialSetId == x.ClinicalDataTrialSetId).Select(y => new ClinicalFromData() + { + CheckDate = y.CheckDate, + ClinicalFormId = y.Id }).ToList(), PDFFileList = x.ReadingClinicalDataPDFList.Select(y => new GetFileDto() { @@ -215,7 +216,7 @@ namespace IRaCIS.Application.Services Path = y.Path, CreateTime = y.CreateTime, }).ToList(), - + }).ToListAsync(); var previousHistoryList = await _previousHistoryRepository.Where(x => x.SubjectVisitId == inDto.SubjectVisitId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); @@ -287,7 +288,7 @@ namespace IRaCIS.Application.Services //} data.IsBlind = inDto.IsBlind; - data.IsComplete=inDto.IsComplete; + data.IsComplete = inDto.IsComplete; data.IsSign = true; data.ReadingClinicalDataState = ReadingClinicalDataStatus.HaveSigned; @@ -304,7 +305,24 @@ namespace IRaCIS.Application.Services await this.iServiceProvider.GetService().AddOncologyTask(readingId); - await DealVisiTaskClinicalDataSignedAsync(data.TrialId, data.SubjectId, data.ReadingId, data.IsVisit, inDto.TrialReadingCriterionId); + //如果先生成了任务,再签名subject级别 PM 临床数据,那么会导致其他标准的任务签名状态无法得到维护 + + if (await _repository.AnyAsync(t => t.Id == data.ClinicalDataTrialSetId && t.UploadRole == UploadRole.PM && t.ClinicalDataLevel == ClinicalLevel.Subject)) + { + var needDealTrialReadingCriterionIdList = _repository.Where(t => t.Id == data.ClinicalDataTrialSetId) + .SelectMany(t => t.TrialClinicalDataSetCriteriaList) + .Select(u => u.TrialReadingCriterionId).Distinct().ToList(); + + foreach (var trialReadingCriterionId in needDealTrialReadingCriterionIdList) + { + await DealVisiTaskClinicalDataSignedAsync(data.TrialId, data.SubjectId, data.ReadingId, data.IsVisit, trialReadingCriterionId); + } + } + else + { + await DealVisiTaskClinicalDataSignedAsync(data.TrialId, data.SubjectId, data.ReadingId, data.IsVisit, inDto.TrialReadingCriterionId); + + } return ResponseOutput.Result(result); } @@ -313,7 +331,7 @@ namespace IRaCIS.Application.Services public async Task DealVisiTaskClinicalDataSignedAsync(Guid trialId, Guid subjectId, Guid readingId, bool isVisit, Guid trialReadingCritrialId) { //获取确认的临床数据配置 - var trialClinicalDataSetList = _clinicalDataTrialSetRepository.Where(t => t.TrialId == trialId && t.IsConfirm).Include(t => t.TrialClinicalDataSetCriteriaList).ToList(); + var trialClinicalDataSetList = _clinicalDataTrialSetRepository.Where(t => t.TrialId == trialId && t.IsConfirm).Include(t => t.TrialClinicalDataSetCriteriaList).ToList(); //var criterionType = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == trialReadingCritrialId).Select(t => t.CriterionType).FirstOrDefaultAsync(); @@ -328,7 +346,7 @@ namespace IRaCIS.Application.Services { var isBaseLine = await _subjectVisitRepository.Where(t => t.Id == readingId).Select(t => t.IsBaseLine).FirstOrDefaultAsync(); - + //判断是否基线 if (isBaseLine) @@ -414,7 +432,7 @@ namespace IRaCIS.Application.Services } //有序阅片才维护 IsFrontTaskNeedSignButNotSign 这个状态 - if (_readingQuestionCriterionTrialRepository.Any(t=>t.Id==trialReadingCritrialId && t.IsReadingTaskViewInOrder == true)) + if (_readingQuestionCriterionTrialRepository.Any(t => t.Id == trialReadingCritrialId && t.IsReadingTaskViewInOrder == true)) { @@ -429,8 +447,8 @@ namespace IRaCIS.Application.Services (t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum) // 前序存在 未一致性核查未通过的 - || t.Subject.SubjectVisitList.Any(sv => sv.CheckState != CheckStateEnum.CVPassed && t.VisitTaskNum>sv.VisitNum) - + || t.Subject.SubjectVisitList.Any(sv => sv.CheckState != CheckStateEnum.CVPassed && t.VisitTaskNum > sv.VisitNum) + )) .Select(t => t.Id); @@ -442,7 +460,7 @@ namespace IRaCIS.Application.Services var visitTaskIdQueryable2 = _visitTaskRepository.Where(visitTaskLambda) //该Subject 该标准的任务 - + .Where(t => t.IsFrontTaskNeedSignButNotSign == true && //前序任务 不存在需要签名 但是没签名 @@ -461,14 +479,14 @@ namespace IRaCIS.Application.Services } - + } // 废弃 接口合并到签名哪里 - + [HttpPut] public async Task PMClinicalDataConfirm(PMClinicalDataConfirmCommand command) { @@ -522,7 +540,7 @@ namespace IRaCIS.Application.Services keyValuePairs.Add(ModuleTypeEnum.Oncology, ClinicalLevel.OncologyRead); - + var usedIdsQuery = _readingClinicalDataRepository.Where(x => x.ReadingId == inDto.ReadingId && x.Id != inDto.ReadingClinicalDataId).Select(x => x.ClinicalDataTrialSetId); @@ -537,20 +555,20 @@ namespace IRaCIS.Application.Services .WhereIf(inDto.IsVisit && !inDto.IsBaseLine, x => x.ClinicalDataLevel == ClinicalLevel.SubjectVisit) .WhereIf(!inDto.IsVisit, x => x.ClinicalDataLevel == ClinicalLevel.ImageRead || x.ClinicalDataLevel == ClinicalLevel.OncologyRead) .WhereIf(readModule != null, x => x.ClinicalDataLevel == keyValuePairs[readModule!.ModuleType]) - .WhereIf(inDto.TrialReadingCriterionId!=null,x=>x.TrialClinicalDataSetCriteriaList.Any(y=>y.TrialReadingCriterionId== inDto.TrialReadingCriterionId)) + .WhereIf(inDto.TrialReadingCriterionId != null, x => x.TrialClinicalDataSetCriteriaList.Any(y => y.TrialReadingCriterionId == inDto.TrialReadingCriterionId)) //.WhereIf(criterion!=null,x=>x.CriterionEnumListStr.Contains($"|{(int)criterion.CriterionType}|")) .Select(x => new GetTrialClinicalDataSelectOutDto() { ClinicalDataLevel = x.ClinicalDataLevel, ClinicalDataSetName = x.ClinicalDataSetName.LanguageName(x.ClinicalDataSetEnName, _userInfo.IsEn_Us), - ClinicalDataSetEnName=x.ClinicalDataSetEnName, + ClinicalDataSetEnName = x.ClinicalDataSetEnName, ClinicalUploadType = x.ClinicalUploadType, FileName = x.FileName, Path = x.Path, Id = x.Id, CriterionEnumList = x.CriterionEnumList, }).ToListAsync(); - + return clinicalList; } @@ -699,20 +717,21 @@ namespace IRaCIS.Application.Services Path = y.Path, CreateTime = y.CreateTime, }).ToList(), - + }); var result = new List(); if (!inDto.IsOnlyGetCRCReadModule) { - result = await resultQuery.ToListAsync(); + result = await resultQuery.ToListAsync(); } var readingIds = result.Select(x => x.ReadingId).ToList(); - var clinical = await _clinicalFormRepository.Where(x => readingIds.Contains(x.ReadingId??default(Guid))).ToListAsync(); - result.Where(x => x.ClinicalUploadType == ClinicalUploadType.Structuring).ForEach(x => { + var clinical = await _clinicalFormRepository.Where(x => readingIds.Contains(x.ReadingId ?? default(Guid))).ToListAsync(); + result.Where(x => x.ClinicalUploadType == ClinicalUploadType.Structuring).ForEach(x => + { - x.ClinicalFromList = clinical.Where(y => y.ReadingId == x.ReadingId&&y.ClinicalDataTrialSetId==x.ClinicalDataTrialSetId).Select(y => new ClinicalFromData() + x.ClinicalFromList = clinical.Where(y => y.ReadingId == x.ReadingId && y.ClinicalDataTrialSetId == x.ClinicalDataTrialSetId).Select(y => new ClinicalFromData() { CheckDate = y.CheckDate, ClinicalFormId = y.Id @@ -723,35 +742,36 @@ namespace IRaCIS.Application.Services // 这里处理CRC上传 阅片期的临床数据 var readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadingId) - .WhereIf(inDto.SelectIsSign,x=>x.IsPMConfirm) - .WhereIf(!inDto.SelectIsSign, x => x.IsCRCConfirm) - .FirstOrDefaultAsync(); + .WhereIf(inDto.SelectIsSign, x => x.IsPMConfirm) + .WhereIf(!inDto.SelectIsSign, x => x.IsCRCConfirm) + .FirstOrDefaultAsync(); if (readModule != null) { var moduleCriterionFromList = await _readModuleCriterionFromRepository .WhereIf(inDto.ClinicalDataTrialSetId != null, x => x.ClinicalForm.ClinicalDataTrialSetId == inDto.ClinicalDataTrialSetId) - .Where(x => x.ReadModuleId == readModule.Id).Select(x => new{ - ClinicalFormId= x.ClinicalFormId, - CheckDate= x.ClinicalForm.CheckDate, - ClinicalDataTrialSetId= x.ClinicalForm.ClinicalDataTrialSetId - - - }).ToListAsync(); + .Where(x => x.ReadModuleId == readModule.Id).Select(x => new + { + ClinicalFormId = x.ClinicalFormId, + CheckDate = x.ClinicalForm.CheckDate, + ClinicalDataTrialSetId = x.ClinicalForm.ClinicalDataTrialSetId + + + }).ToListAsync(); var clinicalresult = await _clinicalDataTrialSetRepository.Where(x => x.UploadRole == UploadRole.CRC && x.ClinicalUploadType == ClinicalUploadType.Structuring) .WhereIf(readModule.ReadingSetType == ReadingSetType.ImageReading, x => x.ClinicalDataLevel == ClinicalLevel.ImageRead) .WhereIf(readModule.ReadingSetType == ReadingSetType.TumorReading, x => x.ClinicalDataLevel == ClinicalLevel.OncologyRead) - .Where(x=>x.TrialClinicalDataSetCriteriaList.Any(y=>y.TrialReadingCriterionId==readModule.TrialReadingCriterionId)) + .Where(x => x.TrialClinicalDataSetCriteriaList.Any(y => y.TrialReadingCriterionId == readModule.TrialReadingCriterionId)) .Select(x => new GetReadingClinicalDataListOutDto() { ClinicalDataLevel = x.ClinicalDataLevel, SubjectId = inDto.SubjectId, ReadingId = default(Guid), - IsCRCApplicationRevoke=readModule.IsCRCApplicationRevoke, - IsCRCConfirm= readModule.IsCRCConfirm, - IsPMConfirm= readModule.IsPMConfirm, + IsCRCApplicationRevoke = readModule.IsCRCApplicationRevoke, + IsCRCConfirm = readModule.IsCRCConfirm, + IsPMConfirm = readModule.IsPMConfirm, ClinicalDataSetName = x.ClinicalDataSetName.LanguageName(x.ClinicalDataSetEnName, _userInfo.IsEn_Us), ClinicalDataSetEnName = x.ClinicalDataSetEnName, ClinicalDataTrialSetId = x.Id, @@ -762,7 +782,7 @@ namespace IRaCIS.Application.Services IsCRCUpload = x.UploadRole == UploadRole.CRC, IsNeedMerge = true, ReadModuleId = readModule.Id, - TrialClinicalDataSetCriteriaList=x.TrialClinicalDataSetCriteriaList, + TrialClinicalDataSetCriteriaList = x.TrialClinicalDataSetCriteriaList, //FileCount = x.FileCount, //ReadingClinicalDataState = x.ReadingClinicalDataState, @@ -791,8 +811,8 @@ namespace IRaCIS.Application.Services }); - result.AddRange(clinicalresult); - } + result.AddRange(clinicalresult); + } @@ -813,7 +833,7 @@ namespace IRaCIS.Application.Services result = result.Where(x => x.UploadRole == UploadRole.PM).ToList(); break; case GetClinicalType.CRCConfirm: - result = result.Where(x => x.UploadRole == UploadRole.CRC&&x.IsCRCConfirm&&!x.IsPMConfirm).ToList(); + result = result.Where(x => x.UploadRole == UploadRole.CRC && x.IsCRCConfirm && !x.IsPMConfirm).ToList(); break; case GetClinicalType.HasSign: result = result.Where(x => x.IsSign).ToList(); @@ -849,15 +869,15 @@ namespace IRaCIS.Application.Services { var resultQuery = _readingClinicalDataRepository.Where(x => x.SubjectId == inDto.SubjectId) .Where(x => x.ReadingId == inDto.ReadingId) - .WhereIf(inDto.ClinicalDataTrialSetId!=null, x=>x.ClinicalDataTrialSetId==inDto.TrialReadingCriterionId) - .Where(x => x.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList.Any(t=>t.TrialReadingCriterionId==inDto.TrialReadingCriterionId)) + .WhereIf(inDto.ClinicalDataTrialSetId != null, x => x.ClinicalDataTrialSetId == inDto.TrialReadingCriterionId) + .Where(x => x.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList.Any(t => t.TrialReadingCriterionId == inDto.TrialReadingCriterionId)) .Select(x => new GetReadingClinicalDataListOutDto() { ClinicalDataLevel = x.ClinicalDataTrialSet.ClinicalDataLevel, SubjectId = x.SubjectId, ReadingId = x.ReadingId, ClinicalDataSetName = x.ClinicalDataTrialSet.ClinicalDataSetName.LanguageName(x.ClinicalDataTrialSet.ClinicalDataSetEnName, _userInfo.IsEn_Us), - ClinicalDataSetEnName =x.ClinicalDataTrialSet.ClinicalDataSetEnName, + ClinicalDataSetEnName = x.ClinicalDataTrialSet.ClinicalDataSetEnName, ClinicalDataTrialSetId = x.ClinicalDataTrialSetId, IsSign = x.IsSign, ClinicalUploadType = x.ClinicalDataTrialSet.ClinicalUploadType, @@ -884,7 +904,8 @@ namespace IRaCIS.Application.Services var readingIds = result.Select(x => x.ReadingId).ToList(); var clinical = await _clinicalFormRepository.Where(x => readingIds.Contains(x.ReadingId ?? default(Guid))).ToListAsync(); - result.Where(x => x.ClinicalUploadType == ClinicalUploadType.Structuring).ForEach(x => { + result.Where(x => x.ClinicalUploadType == ClinicalUploadType.Structuring).ForEach(x => + { x.ClinicalFromList = clinical.Where(y => y.ReadingId == x.ReadingId && y.ClinicalDataTrialSetId == x.ClinicalDataTrialSetId).Select(y => new ClinicalFromData() { @@ -895,77 +916,78 @@ namespace IRaCIS.Application.Services }); // 这里处理CRC上传 阅片期的临床数据 - var readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadingId&&x.IsCRCConfirm) + var readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadingId && x.IsCRCConfirm) .FirstOrDefaultAsync(); if (readModule != null) { - var moduleCriterionFromList = await _readModuleCriterionFromRepository.Where(x => x.ReadModuleId == readModule.Id) + var moduleCriterionFromList = await _readModuleCriterionFromRepository.Where(x => x.ReadModuleId == readModule.Id) .WhereIf(inDto.ClinicalDataTrialSetId != null, x => x.ClinicalForm.ClinicalDataTrialSetId == inDto.TrialReadingCriterionId) - .Select(x => new { - ClinicalFormId = x.ClinicalFormId, - CheckDate = x.ClinicalForm.CheckDate, - ClinicalDataTrialSetId = x.ClinicalForm.ClinicalDataTrialSetId + .Select(x => new + { + ClinicalFormId = x.ClinicalFormId, + CheckDate = x.ClinicalForm.CheckDate, + ClinicalDataTrialSetId = x.ClinicalForm.ClinicalDataTrialSetId - }).ToListAsync(); + }).ToListAsync(); - - var clinicalresult = await _clinicalDataTrialSetRepository.Where(x => x.UploadRole == UploadRole.CRC&&x.ClinicalUploadType== ClinicalUploadType.Structuring) - .WhereIf(readModule.ReadingSetType == ReadingSetType.ImageReading,x=>x.ClinicalDataLevel== ClinicalLevel.ImageRead) + + var clinicalresult = await _clinicalDataTrialSetRepository.Where(x => x.UploadRole == UploadRole.CRC && x.ClinicalUploadType == ClinicalUploadType.Structuring) + .WhereIf(readModule.ReadingSetType == ReadingSetType.ImageReading, x => x.ClinicalDataLevel == ClinicalLevel.ImageRead) .WhereIf(readModule.ReadingSetType == ReadingSetType.TumorReading, x => x.ClinicalDataLevel == ClinicalLevel.OncologyRead) .Where(x => x.TrialClinicalDataSetCriteriaList.Any(y => y.TrialReadingCriterionId == readModule.TrialReadingCriterionId)) .Select(x => new GetReadingClinicalDataListOutDto() - { + { - ClinicalDataLevel = x.ClinicalDataLevel, - SubjectId = inDto.SubjectId, - ReadingId = default(Guid), - IsCRCApplicationRevoke= readModule.IsCRCApplicationRevoke, + ClinicalDataLevel = x.ClinicalDataLevel, + SubjectId = inDto.SubjectId, + ReadingId = default(Guid), + IsCRCApplicationRevoke = readModule.IsCRCApplicationRevoke, IsCRCConfirm = readModule.IsCRCConfirm, - IsPMConfirm=readModule.IsPMConfirm, + IsPMConfirm = readModule.IsPMConfirm, ClinicalDataSetName = x.ClinicalDataSetName.LanguageName(x.ClinicalDataSetEnName, _userInfo.IsEn_Us), - ClinicalDataSetEnName = x.ClinicalDataSetEnName, - ClinicalDataTrialSetId = x.Id, - IsSign = readModule.IsPMConfirm, - ClinicalUploadType = x.ClinicalUploadType, - Id = default(Guid), - UploadRole = x.UploadRole, - IsCRCUpload = x.UploadRole == UploadRole.CRC, - IsNeedMerge = true, - ReadModuleId = readModule.Id, - //FileCount = x.FileCount, + ClinicalDataSetEnName = x.ClinicalDataSetEnName, + ClinicalDataTrialSetId = x.Id, + IsSign = readModule.IsPMConfirm, + ClinicalUploadType = x.ClinicalUploadType, + Id = default(Guid), + UploadRole = x.UploadRole, + IsCRCUpload = x.UploadRole == UploadRole.CRC, + IsNeedMerge = true, + ReadModuleId = readModule.Id, + //FileCount = x.FileCount, - //ReadingClinicalDataState = x.ReadingClinicalDataState, + //ReadingClinicalDataState = x.ReadingClinicalDataState, - //FileList = x.ReadingClinicalDataPDFList.Select(y => new GetFileDto() - //{ - // Id = y.Id, - // FileName = y.FileName, - // Path = y.Path, - // CreateTime = y.CreateTime, - //}).ToList() + //FileList = x.ReadingClinicalDataPDFList.Select(y => new GetFileDto() + //{ + // Id = y.Id, + // FileName = y.FileName, + // Path = y.Path, + // CreateTime = y.CreateTime, + //}).ToList() - }).ToListAsync(); + }).ToListAsync(); - clinicalresult.ForEach(x => - { - x.FileCount = moduleCriterionFromList.Where(y => y.ClinicalDataTrialSetId == x.ClinicalDataTrialSetId).Count(); - x.ClinicalFromList = moduleCriterionFromList.Where(y => y.ClinicalDataTrialSetId == x.ClinicalDataTrialSetId).OrderBy(y => y.CheckDate).Select(x => new ClinicalFromData - { - CheckDate = x.CheckDate, - ClinicalFormId = x.ClinicalFormId + clinicalresult.ForEach(x => + { + x.FileCount = moduleCriterionFromList.Where(y => y.ClinicalDataTrialSetId == x.ClinicalDataTrialSetId).Count(); + x.ClinicalFromList = moduleCriterionFromList.Where(y => y.ClinicalDataTrialSetId == x.ClinicalDataTrialSetId).OrderBy(y => y.CheckDate).Select(x => new ClinicalFromData + { + CheckDate = x.CheckDate, + ClinicalFormId = x.ClinicalFormId - }).ToList(); + }).ToList(); - x.IsSign = readModule.IsPMConfirm ?true : false; + x.IsSign = readModule.IsPMConfirm ? true : false; x.ReadingClinicalDataState = readModule.IsPMConfirm ? ReadingClinicalDataStatus.HaveSigned : ReadingClinicalDataStatus.HaveChecked; - }); + }); - result.AddRange(clinicalresult); - } + result.AddRange(clinicalresult); + } if (inDto.GetClinicalType != null) @@ -976,7 +998,7 @@ namespace IRaCIS.Application.Services result = result.Where(x => x.UploadRole == UploadRole.PM).ToList(); break; case GetClinicalType.CRCConfirm: - result = result.Where(x => x.UploadRole == UploadRole.CRC&&x.IsCRCConfirm&&!x.IsPMConfirm).ToList(); + result = result.Where(x => x.UploadRole == UploadRole.CRC && x.IsCRCConfirm && !x.IsPMConfirm).ToList(); break; case GetClinicalType.HasSign: result = result.Where(x => x.IsSign).ToList(); @@ -984,7 +1006,7 @@ namespace IRaCIS.Application.Services } } - + return result; } diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs index a787d8d4f..27d09e5b3 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs @@ -1162,7 +1162,13 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// 是否是第一次转化的任务 /// public bool IsFirstChangeTask { get; set; } = false; - } + + /// + /// 是否存在临床数据 + /// + public bool IsExistsClinicalData { get; set; } = false; + + } public class GetVisitReadingQuestionOutDto { diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs index 3bac6c7a3..64dac6310 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs @@ -5,6 +5,7 @@ using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; +using static IRaCIS.Core.Domain.Models.ReadingQuestionTrial; namespace IRaCIS.Core.Application.Service.Reading.Dto { @@ -1044,7 +1045,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public List RelevanceValueList { get; set; } public List CalculateQuestionList { get; set; } - } + + } public class ReadingQuestionSystemView { @@ -1983,8 +1985,10 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public List ParentTriggerValueList { get; set; } public List RelevanceValueList { get; set; } - - } + + + + } public class GetSystemCriterionSelectDto { diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index c15434d98..39adb7875 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -539,7 +539,21 @@ namespace IRaCIS.Application.Services }).ToListAsync(); - if (!taskInfo.TrialReadingCriterion.IsReadingTaskViewInOrder) + foreach (var item in result) + { + var clinicalDataList = await _readingClinicalDataService.GetClinicalDataList(new GetReadingOrTaskClinicalDataListInDto() + { + + SubjectId = taskInfo.SubjectId, + TrialId = taskInfo.TrialId, + VisitTaskId = item.VisitTaskId, + }); + + item.IsExistsClinicalData = clinicalDataList.Count > 0; + } + + + if (!taskInfo.TrialReadingCriterion.IsReadingTaskViewInOrder) { result = result.Where(x => x.VisitTaskId == inDto.VisitTaskId).ToList(); } @@ -2315,6 +2329,7 @@ namespace IRaCIS.Application.Services var subjectTaskList = (await _visitTaskService.GetOrderReadingIQueryable(new GetOrderReadingIQueryableInDto() { TrialId = inDto.TrialId, + SubjectId=inDto.SubjectId, TrialReadingCriterionId = trialReadingCriterionId!.Value, Page = new PageInput() { @@ -2336,7 +2351,7 @@ namespace IRaCIS.Application.Services if (currentSubject == null) { - throw new BusinessValidationFailedException(_localizer["ReadingImage_TaskFinish"]); + throw new BusinessValidationFailedException(_localizer["ReadingImage_TaskFinish"], ApiResponseCodeEnum.CloseCurrentWindows); } task = currentSubject.UnReadCanReadTaskList.Select(x => new GetReadingTaskDto() @@ -2409,7 +2424,7 @@ namespace IRaCIS.Application.Services if (task == null) { - throw new BusinessValidationFailedException(_localizer["ReadingImage_TaskFinish"]); + throw new BusinessValidationFailedException(_localizer["ReadingImage_TaskFinish"], ApiResponseCodeEnum.CloseCurrentWindows); } if (task.SubjectCode.IsNullOrEmpty()) diff --git a/IRaCIS.Core.Application/Triggers/AddSubjectTrigger.cs b/IRaCIS.Core.Application/Triggers/AddSubjectTrigger.cs index e760e859e..3bd4f28cc 100644 --- a/IRaCIS.Core.Application/Triggers/AddSubjectTrigger.cs +++ b/IRaCIS.Core.Application/Triggers/AddSubjectTrigger.cs @@ -54,7 +54,7 @@ namespace IRaCIS.Core.Application.Triggers t.TrialId = subject.TrialId; t.SiteId = subject.SiteId; t.IsEnrollmentConfirm = t.IsBaseLine ? triconfig.IsEnrollementQualificationConfirm : false; - t.PDState = PDStateEnum.None; + t.PDState = t.IsBaseLine == false && triconfig.IsPDProgressView ? PDStateEnum.PDProgress : PDStateEnum.None; t.Id = NewId.NextGuid(); }); diff --git a/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs b/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs index 5603cb53f..f8eb807b4 100644 --- a/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs +++ b/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs @@ -191,6 +191,8 @@ namespace IRaCIS.Core.Application.MediatR.Handlers dbSV.CheckState = CheckStateEnum.CVPassed; dbSV.CheckUserId = _userInfo.Id; dbSV.CheckPassedTime = DateTime.Now; + dbSV.CheckChallengeState = CheckChanllengeTypeEnum.Closed; + //---核对EDC数据,完全一致 dbSV.CheckResult = _localizer["ConsistencyVerification_EDCB"]; //---自动核查通过 diff --git a/IRaCIS.Core.Domain/Document/TrialDocument.cs b/IRaCIS.Core.Domain/Document/TrialDocument.cs index b25c5f3a8..e99be270a 100644 --- a/IRaCIS.Core.Domain/Document/TrialDocument.cs +++ b/IRaCIS.Core.Domain/Document/TrialDocument.cs @@ -14,7 +14,7 @@ namespace IRaCIS.Core.Domain.Models /// [Table("TrialDocument")] public class TrialDocument : Entity, IAuditUpdate, IAuditAdd - { + { //需要确认的项目用户 通过TrialId 关联 用中间表过滤 diff --git a/IRaCIS.Core.Domain/Document/TrialEmailNoticeConfig.cs b/IRaCIS.Core.Domain/Document/TrialEmailNoticeConfig.cs index dffef0de0..8dccfbba8 100644 --- a/IRaCIS.Core.Domain/Document/TrialEmailNoticeConfig.cs +++ b/IRaCIS.Core.Domain/Document/TrialEmailNoticeConfig.cs @@ -41,7 +41,7 @@ namespace IRaCIS.Core.Domain.Models [JsonIgnore] public List TrialEmailNoticeUserList { get; set; } = new List(); - + [JsonIgnore] public List TrialEmailBlackUserList { get; set; } = new List(); diff --git a/IRaCIS.Core.Domain/Reading/ReadingCriterionQuestion/ReadingQuestionTrial.cs b/IRaCIS.Core.Domain/Reading/ReadingCriterionQuestion/ReadingQuestionTrial.cs index 1f7307fe3..4a9cdf6d1 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingCriterionQuestion/ReadingQuestionTrial.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingCriterionQuestion/ReadingQuestionTrial.cs @@ -266,7 +266,11 @@ namespace IRaCIS.Core.Domain.Models /// public Guid? GroupId { get; set; } - [JsonIgnore] + + + // + + [JsonIgnore] [ForeignKey("GroupId")] public ReadingQuestionTrial GroupInfo { get; set; } @@ -289,8 +293,18 @@ namespace IRaCIS.Core.Domain.Models [JsonIgnore] public List ReadingTableQuestionTrialList { get; set; } - - [NotMapped] + + public enum AssessmentResultType + { + //没有特殊标记 + None=0, + + //评估结果 + AssessmentResult = 1, + } + + + [NotMapped] public List ParentTriggerValueList { get diff --git a/IRaCIS.Core.Domain/Reading/ReadingFormAnswer/ReadingTaskQuestionAnswer.cs b/IRaCIS.Core.Domain/Reading/ReadingFormAnswer/ReadingTaskQuestionAnswer.cs index ccc45dda0..c60afbc26 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingFormAnswer/ReadingTaskQuestionAnswer.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingFormAnswer/ReadingTaskQuestionAnswer.cs @@ -74,7 +74,9 @@ namespace IRaCIS.Core.Domain.Models public ReadingQuestionTrial ReadingQuestionTrial { get; set; } - + [JsonIgnore] + [ForeignKey("ReadingQuestionCriterionTrialId")] + public ReadingQuestionCriterionTrial ReadingQuestionCriterionTrial { get; set; } } diff --git a/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs b/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs index 032dd2f80..8d1b80f21 100644 --- a/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs +++ b/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs @@ -69,18 +69,40 @@ namespace IRaCIS.Core.Infra.EFCore.Common typeof(TrialSiteSurvey), typeof(TrialSiteUser), typeof(VisitStage), - typeof(TrialSite) - }; + typeof(TrialSite), + + }; } } + // 修改为删除 + private List UpdateIsDelete + { + get + { + return new List() + { + typeof(TrialDocument) + }; + } + } - public string GetEntityAuditOpt(EntityEntry entityEntry) + + public string GetEntityAuditOpt(EntityEntry entityEntry) { if (entityEntry.State == EntityState.Added) { return AuditOpt.Add; } + else if ( + UpdateIsDelete.Contains(entityEntry.Entity.GetType()) + && entityEntry.State == EntityState.Modified + && (bool)entityEntry.Entity.GetType().GetProperty(nameof(ISoftDelete.IsDeleted)).GetValue(entityEntry.Entity) + + ) + { + return AuditOpt.Deleted; + } else if (entityEntry.State == EntityState.Deleted || (entityEntry.State == EntityState.Modified @@ -1272,6 +1294,8 @@ namespace IRaCIS.Core.Infra.EFCore.Common var entity = item.Entity as QCChallenge; + var challengeState= await _dbContext.SubjectVisit.Where(x => x.Id == entity.SubjectVisitId).Select(x => x.ChallengeState).FirstOrDefaultAsync(); + await InsertInspection(entity, type, x => new InspectionConvertDTO() { SubjectVisitId = x.SubjectVisitId, @@ -1281,7 +1305,8 @@ namespace IRaCIS.Core.Infra.EFCore.Common { IsOverTime = entity.IsClosed ? entity.ClosedTime > entity.DeadlineTime : DateTime.Now > entity.DeadlineTime, - }); + ChallengeState= challengeState, + }); } // 质疑 对话 @@ -1394,19 +1419,25 @@ namespace IRaCIS.Core.Infra.EFCore.Common var trialSiteId = entity.TrialSite?.Id; - await InsertInspection(item.Entity as TrialSiteSurvey, type, x => new InspectionConvertDTO() + var equipmentTypeList = await _dbContext.TrialSiteEquipmentSurvey.Where(x => x.TrialSiteSurveyId == entity.Id).Select(x => x.EquipmentType.ValueCN).ToListAsync(); + + + var siteUserList = await _dbContext.TrialSiteUserSurvey.Where(x => x.TrialSiteSurveyId == entity.Id).Select(x => x.LastName + "/" + x.FirstName).ToListAsync(); + + await InsertInspection(item.Entity as TrialSiteSurvey, type, x => new InspectionConvertDTO() { ObjectRelationParentId = trialSiteId, }, new { - //TrialSiteCode = entity.TrialSite.TrialSiteCode, - //TrialSiteAliasName = entity.TrialSite.TrialSiteAliasName, - //Phone = entity.Phone, - //Email = entity.Email, + //TrialSiteCode = entity.TrialSite.TrialSiteCode, + //TrialSiteAliasName = entity.TrialSite.TrialSiteAliasName, + //Phone = entity.Phone, + //Email = entity.Email, - - PreliminaryUser = entity.PreliminaryUser == null ? "" : entity.PreliminaryUser.FullName, + EquipmentTypeList=string.Join(",", equipmentTypeList), + SiteUserList= string.Join(",", siteUserList), + PreliminaryUser = entity.PreliminaryUser == null ? "" : entity.PreliminaryUser.FullName, ReviewerUser = entity.ReviewerUser == null ? "" : entity.ReviewerUser.FullName, }); diff --git a/IRaCIS.Core.Infra.EFCore/Common/Dto/DateDto.cs b/IRaCIS.Core.Infra.EFCore/Common/Dto/DateDto.cs index 9bd9e5ac3..6256cd01b 100644 --- a/IRaCIS.Core.Infra.EFCore/Common/Dto/DateDto.cs +++ b/IRaCIS.Core.Infra.EFCore/Common/Dto/DateDto.cs @@ -10,7 +10,8 @@ namespace IRaCIS.Core.Infra.EFCore.Common.Dto { public string Code { get; set; } - public string DateType { get; set; } + public string Identification { get; set; } + public string DateType { get; set; } } public class TypeNameDto diff --git a/IRaCIS.Core.Infrastructure/_IRaCIS/Exception/BusinessValidationFailedException.cs b/IRaCIS.Core.Infrastructure/_IRaCIS/Exception/BusinessValidationFailedException.cs index ccda66221..bda936380 100644 --- a/IRaCIS.Core.Infrastructure/_IRaCIS/Exception/BusinessValidationFailedException.cs +++ b/IRaCIS.Core.Infrastructure/_IRaCIS/Exception/BusinessValidationFailedException.cs @@ -1,17 +1,22 @@ -using System; +using IRaCIS.Core.Infrastructure.Extention; +using System; namespace IRaCIS.Core.Infrastructure { public class BusinessValidationFailedException : Exception { + public ApiResponseCodeEnum Code { get; set; } - public BusinessValidationFailedException() + public BusinessValidationFailedException() { } - public BusinessValidationFailedException( string message) : base(message) - { - } + public BusinessValidationFailedException(string message, ApiResponseCodeEnum code = ApiResponseCodeEnum.BusinessValidationFailed) : base(message) + { + Code = code; + + } + } } diff --git a/IRaCIS.Core.Infrastructure/_IRaCIS/Output/ApiResponseCodeEnum.cs b/IRaCIS.Core.Infrastructure/_IRaCIS/Output/ApiResponseCodeEnum.cs index 73b9597ae..91e809fdb 100644 --- a/IRaCIS.Core.Infrastructure/_IRaCIS/Output/ApiResponseCodeEnum.cs +++ b/IRaCIS.Core.Infrastructure/_IRaCIS/Output/ApiResponseCodeEnum.cs @@ -24,11 +24,15 @@ namespace IRaCIS.Core.Infrastructure.Extention ProgramException = 4, //需要提示 ,需要提示 从Result 取数据 ( 0 可以继续处理提交 ,1 不能进行继续处理提交 ,2 刷新列表 ) - NeedTips = 5, + NeedTips = 5, + /// + /// 关闭当前页面 + /// + CloseCurrentWindows=6, - //在其他地方登陆,被迫下线 - LoginInOtherPlace = -1, + //在其他地方登陆,被迫下线 + LoginInOtherPlace = -1, //没有带token访问(未登陆) NoToken=10,