diff --git a/IRaCIS.Core.Application/Service/Inspection/InspectionService.cs b/IRaCIS.Core.Application/Service/Inspection/InspectionService.cs index 04c18a707..967765938 100644 --- a/IRaCIS.Core.Application/Service/Inspection/InspectionService.cs +++ b/IRaCIS.Core.Application/Service/Inspection/InspectionService.cs @@ -322,31 +322,34 @@ namespace IRaCIS.Core.Application.Service.Inspection //var childrenTypes= datas.Select(x => x.ChildrenType).Distinct().ToList(); //var objectTypes = datas.Select(x => x.ObjectType).Distinct().ToList(); - foreach (var add in datas) - { - await SetInspectionNameValue(add); - add.ParentId = (await _repository.GetQueryable().Where(x => x.TrialId == add.TrialId && x.SubjectVisitId == add.SubjectVisitId && x.SubjectId == add.SubjectId && x.SiteId == add.SiteId && x.ChildrenType == add.ChildrenType && x.ObjectType == add.ObjectType&&x.VisitStageId==add.VisitStageId&& x.GeneralId == add.GeneralId).OrderByDescending(x => x.CreateTime).FirstOrDefaultAsync())?.Id; - add.CreateUserId = _userInfo.Id; - add.IP = _userInfo.IP; + + await _dataInspectionRepository.AddListInspectionRecordAsync(datas); + + //foreach (var add in datas) + //{ + // await SetInspectionNameValue(add); + // add.ParentId = (await _repository.GetQueryable().Where(x => x.TrialId == add.TrialId && x.SubjectVisitId == add.SubjectVisitId && x.SubjectId == add.SubjectId && x.SiteId == add.SiteId && x.ChildrenType == add.ChildrenType && x.ObjectType == add.ObjectType&&x.VisitStageId==add.VisitStageId&& x.GeneralId == add.GeneralId).OrderByDescending(x => x.CreateTime).FirstOrDefaultAsync())?.Id; + // add.CreateUserId = _userInfo.Id; + // add.IP = _userInfo.IP; - var JsonData = JsonConvert.DeserializeObject>(add.JsonDetail); + // var JsonData = JsonConvert.DeserializeObject>(add.JsonDetail); - foreach (var item in JsonData.Keys) - { - if (JsonData[item].ToString().ToLower() == "true".ToLower()) - { - JsonData[item] = "是"; - } else if (JsonData[item].ToString().ToLower() == "false".ToLower()) - { - JsonData[item] = "否"; - } + // foreach (var item in JsonData.Keys) + // { + // if (JsonData[item].ToString().ToLower() == "true".ToLower()) + // { + // JsonData[item] = "是"; + // } else if (JsonData[item].ToString().ToLower() == "false".ToLower()) + // { + // JsonData[item] = "否"; + // } - } - add.JsonDetail= JsonConvert.SerializeObject(JsonData); - } + // } + // add.JsonDetail= JsonConvert.SerializeObject(JsonData); + //} - await _dataInspectionRepository.AddRangeAsync(datas); + //await _dataInspectionRepository.AddRangeAsync(datas); } @@ -492,92 +495,95 @@ namespace IRaCIS.Core.Application.Service.Inspection /// public async Task SetInspectionNameValue(DataInspection Data) { - #region 项目名称 - var trialdata = await _repository.GetQueryable().FirstOrDefaultAsync(x => x.Id == Data.TrialId); - Data.ResearchProgramNo = trialdata?.ResearchProgramNo; - if (Data.TrialName.IsNullOrEmpty()) - { - Data.TrialName = trialdata?.ExperimentName; - } - #endregion + await _dataInspectionRepository.SetInspectionNameValue(Data); - #region 测试中心名称 + //#region 项目名称 + + //var trialdata = await _repository.GetQueryable().FirstOrDefaultAsync(x => x.Id == Data.TrialId); + //Data.ResearchProgramNo = trialdata?.ResearchProgramNo; + //if (Data.TrialName.IsNullOrEmpty()) + //{ + // Data.TrialName = trialdata?.ExperimentName; + //} + //#endregion + + //#region 测试中心名称 - Data.SiteCode = (await _repository.GetQueryable().FirstOrDefaultAsync(x => x.TrialId == Data.TrialId && x.SiteId == Data.SiteId))?.TrialSiteCode; + //Data.SiteCode = (await _repository.GetQueryable().FirstOrDefaultAsync(x => x.TrialId == Data.TrialId && x.SiteId == Data.SiteId))?.TrialSiteCode; - var sitedata = await _repository.GetQueryable().FirstOrDefaultAsync(x => x.Id == Data.SiteId); + //var sitedata = await _repository.GetQueryable().FirstOrDefaultAsync(x => x.Id == Data.SiteId); - if (Data.SiteName.IsNullOrEmpty()) - { - Data.SiteName = sitedata?.SiteName; - } - #endregion + //if (Data.SiteName.IsNullOrEmpty()) + //{ + // Data.SiteName = sitedata?.SiteName; + //} + //#endregion - #region 受试者 + //#region 受试者 - if (Data.SubjectCode.IsNullOrEmpty()) - { + //if (Data.SubjectCode.IsNullOrEmpty()) + //{ - Data.SubjectCode = (await _repository.GetQueryable().FirstOrDefaultAsync(x => x.Id == Data.SubjectId))?.Code; - } - #endregion + // Data.SubjectCode = (await _repository.GetQueryable().FirstOrDefaultAsync(x => x.Id == Data.SubjectId))?.Code; + //} + //#endregion - #region 访视 - if (Data.SubjectVisitName.IsNullOrEmpty()) - { - Data.SubjectVisitName = (await _repository.GetQueryable().FirstOrDefaultAsync(x => x.Id == Data.SubjectVisitId))?.VisitName; - } - #endregion + //#region 访视 + //if (Data.SubjectVisitName.IsNullOrEmpty()) + //{ + // Data.SubjectVisitName = (await _repository.GetQueryable().FirstOrDefaultAsync(x => x.Id == Data.SubjectVisitId))?.VisitName; + //} + //#endregion - #region 创建者 - if (Data.CreateUserName.IsNullOrEmpty() || Data.RoleName.IsNullOrEmpty()) - { - var userdata = await _repository.GetQueryable().Where(x => x.Id == Data.CreateUserId).GroupJoin(_repository.GetQueryable(), a => a.UserTypeId, b => b.Id, (a, b) => new - { - UserName = a.FirstName + a.LastName, - Role = b - }).SelectMany(a => a.Role, (m, n) => new - { - UserName = m.UserName, - RoleName = n.UserTypeShortName - }).FirstOrDefaultAsync(); + //#region 创建者 + //if (Data.CreateUserName.IsNullOrEmpty() || Data.RoleName.IsNullOrEmpty()) + //{ + // var userdata = await _repository.GetQueryable().Where(x => x.Id == Data.CreateUserId).GroupJoin(_repository.GetQueryable(), a => a.UserTypeId, b => b.Id, (a, b) => new + // { + // UserName = a.FirstName + a.LastName, + // Role = b + // }).SelectMany(a => a.Role, (m, n) => new + // { + // UserName = m.UserName, + // RoleName = n.UserTypeShortName + // }).FirstOrDefaultAsync(); - if (userdata != null) - { - if (Data.CreateUserName.IsNullOrEmpty()) - { - Data.CreateUserName = userdata?.UserName; - } + // if (userdata != null) + // { + // if (Data.CreateUserName.IsNullOrEmpty()) + // { + // Data.CreateUserName = userdata?.UserName; + // } - if (Data.RoleName.IsNullOrEmpty()) - { - Data.RoleName = userdata?.RoleName; - } - } - } - #endregion + // if (Data.RoleName.IsNullOrEmpty()) + // { + // Data.RoleName = userdata?.RoleName; + // } + // } + //} + //#endregion - #region 取操作类型 - try - { - var from = await _frontAuditConfigRepository.FirstOrDefaultAsync(x => x.Identification == Data.Identification); - Data.ObjectType = from.ObjectTypeId; - Data.OptType = from.OptTypeId; - Data.ChildrenType = from.ChildrenTypeId; - Data.ModuleType = from.ModuleTypeId; - } - catch (Exception) - { + //#region 取操作类型 + //try + //{ + // var from = await _frontAuditConfigRepository.FirstOrDefaultAsync(x => x.Identification == Data.Identification); + // Data.ObjectType = from.ObjectTypeId; + // Data.OptType = from.OptTypeId; + // Data.ChildrenType = from.ChildrenTypeId; + // Data.ModuleType = from.ModuleTypeId; + //} + //catch (Exception) + //{ - throw new BusinessValidationFailedException("操作标识异常"); - } + // throw new BusinessValidationFailedException("操作标识异常"); + //} - #endregion + //#endregion } diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectService.cs index e5971fb37..5dab7e7b8 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectService.cs @@ -100,19 +100,22 @@ namespace IRaCIS.Application.Services if (isadd) { List datas = new List(); - datas.Add(new DataInspection() - { - TrialId = subjectCommand.TrialId, - SiteId = subjectCommand.SiteId, - SubjectId = mapedSubject.Id, - SubjectCode = subjectCommand.Code, - IsSign=false, - CreateTime = createtime, - Identification = "Init|Subject|Status|Subject", - JsonDetail= JsonConvert.SerializeObject(new { - Status= "新增", - }) - }); + + // 移到仓储了 + + //datas.Add(new DataInspection() + //{ + // TrialId = subjectCommand.TrialId, + // SiteId = subjectCommand.SiteId, + // SubjectId = mapedSubject.Id, + // SubjectCode = subjectCommand.Code, + // IsSign=false, + // CreateTime = createtime, + // Identification = "Init|Subject|Status|Subject", + // JsonDetail= JsonConvert.SerializeObject(new { + // Status= "新增", + // }) + //}); var visittime = createtime.AddSeconds(1); foreach (var item in mapedSubject.SubjectVisitList) diff --git a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs index 3fd87e046..a7785f634 100644 --- a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs +++ b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs @@ -138,7 +138,7 @@ namespace IRaCIS.Core.Infra.EFCore #region Subject and Visit and study public virtual DbSet StudyMonitor { get; set; } - public virtual DbSet Subjects { get; set; } + public virtual DbSet Subject { get; set; } public virtual DbSet VisitPlans { get; set; } public virtual DbSet VisitPlanInfluenceStudy { get; set; } @@ -197,6 +197,8 @@ namespace IRaCIS.Core.Infra.EFCore public virtual DbSet UserTrialSite { get; set; } public virtual DbSet TrialSite { get; set; } + public virtual DbSet Site { get; set; } + public virtual DbSet TrialSiteUserSurvey { get; set; } public virtual DbSet TrialSiteEquipmentSurvey { get; set; } public virtual DbSet TrialSiteSurvey { get; set; } diff --git a/IRaCIS.Core.Infra.EFCore/Repository/IRepository.cs b/IRaCIS.Core.Infra.EFCore/Repository/IRepository.cs index aa378cb31..4f2a85916 100644 --- a/IRaCIS.Core.Infra.EFCore/Repository/IRepository.cs +++ b/IRaCIS.Core.Infra.EFCore/Repository/IRepository.cs @@ -18,7 +18,19 @@ namespace IRaCIS.Core.Infra.EFCore { public interface IRepository : ICommandRepository, IQueryRepository where TEntity : Entity { + /// + /// 获取中心啥的名称 + /// + /// + /// + Task SetInspectionNameValue(DataInspection Data); + /// + /// 添加稽查记录 + /// + /// + /// + Task AddListInspectionRecordAsync(List datas); } @@ -418,7 +430,7 @@ namespace IRaCIS.Core.Infra.EFCore { bindings.Add(Expression.Bind(typeof(T).GetMember(nameof(IAuditUpdate.UpdateTime))[0], Expression.Constant(DateTime.Now))); - bindings.Add(Expression.Bind(typeof(TR).GetMember(nameof(IAuditUpdate.UpdateUserId))[0], Expression.Constant(_userInfo.Id))); + bindings.Add(Expression.Bind(typeof(T).GetMember(nameof(IAuditUpdate.UpdateUserId))[0], Expression.Constant(_userInfo.Id))); } diff --git a/IRaCIS.Core.Infra.EFCore/Repository/Repository.cs b/IRaCIS.Core.Infra.EFCore/Repository/Repository.cs index 4d453c527..d1dd56264 100644 --- a/IRaCIS.Core.Infra.EFCore/Repository/Repository.cs +++ b/IRaCIS.Core.Infra.EFCore/Repository/Repository.cs @@ -16,12 +16,14 @@ using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infrastructure; using IRaCIS.Core.Infrastructure.Extention; using Microsoft.Data.SqlClient; +using Newtonsoft.Json; namespace IRaCIS.Core.Infra.EFCore { public class Repository : IRepository where TEntity : Entity, new() { + public IMapper _mapper { get; set; } public IRaCISDBContext _dbContext { get; set; } @@ -34,6 +36,7 @@ namespace IRaCIS.Core.Infra.EFCore _dbContext = dbContext; _mapper = mapper; _userInfo = userInfo; + } #region 异步部分 @@ -142,6 +145,7 @@ namespace IRaCIS.Core.Infra.EFCore public async Task InsertFromDTOAsync(TFrom from, bool autoSave = false, params EntityVerifyExp[] verify) { + List datas = new List(); var entity = _mapper.Map(from); await EntityVerifyAsync(true, verify); @@ -150,11 +154,201 @@ namespace IRaCIS.Core.Infra.EFCore await SaveChangesAsync(autoSave); + // 这里用不了 switch + //switch (typeof(TEntity)) + //{ + // case typeof(Dictionary): + // break; + //} + var createtime = DateTime.Now.AddSeconds(1); + + // 受试者 + if (typeof(TEntity) == typeof(Subject)) + { + Subject data = entity as Subject; + datas.Add(new DataInspection() + { + TrialId = data.TrialId, + SiteId = data.SiteId, + SubjectId = data.Id, + SubjectCode = data.Code, + IsSign = false, + CreateTime = createtime, + Identification = "Init|Subject|Status|Subject", + JsonDetail = JsonConvert.SerializeObject(new + { + Status = "新增", + }) + }); + } + await AddListInspectionRecordAsync(datas); return entity; + } + #region 稽查 + /// + /// 添加稽查记录 + /// + /// + /// + public async Task AddListInspectionRecordAsync(List datas) + { + //var trialIds= datas.Select(x=>x.TrialId).Distinct().ToList(); + //var subjectVisitIds= datas.Select(x=>x.SubjectVisitId).Distinct().ToList(); + //var subjectIds = datas.Select(x => x.SubjectId).Distinct().ToList(); + //var siteIds = datas.Select(x => x.SiteId).Distinct().ToList(); + //var childrenTypes= datas.Select(x => x.ChildrenType).Distinct().ToList(); + //var objectTypes = datas.Select(x => x.ObjectType).Distinct().ToList(); + + foreach (var add in datas) + { + await SetInspectionNameValue(add); + add.ParentId = (await _dbContext.DataInspection.AsQueryable().Where(x => x.TrialId == add.TrialId && x.SubjectVisitId == add.SubjectVisitId && x.SubjectId == add.SubjectId && x.SiteId == add.SiteId && x.ChildrenType == add.ChildrenType && x.ObjectType == add.ObjectType && x.VisitStageId == add.VisitStageId && x.GeneralId == add.GeneralId).OrderByDescending(x => x.CreateTime).FirstOrDefaultAsync())?.Id; + add.CreateUserId = _userInfo.Id; + add.IP = _userInfo.IP; + var JsonData = JsonConvert.DeserializeObject>(add.JsonDetail); + + foreach (var item in JsonData.Keys) + { + if (JsonData[item].ToString().ToLower() == "true".ToLower()) + { + JsonData[item] = "是"; + } + else if (JsonData[item].ToString().ToLower() == "false".ToLower()) + { + JsonData[item] = "否"; + } + } + if (add.CreateTime == default(DateTime)) + { + add.CreateTime = DateTime.Now; + } + add.JsonDetail = JsonConvert.SerializeObject(JsonData); + } + + await _dbContext.DataInspection.AddRangeAsync(datas); + await _dbContext.SaveChangesAsync(); + + } + + /// + /// IsNullOrEmpty + /// + /// + /// + private bool IsNullOrEmpty(object value) + { + if (value.ToString() == null || value.ToString() == string.Empty) + { + return true; + } + else + { + return false; + } + } + + + + /// + /// 设置项目以及名称 + /// + /// + /// + public async Task SetInspectionNameValue(DataInspection Data) + { + #region 项目名称 + + var trialdata = await _dbContext.Trial.FirstOrDefaultAsync(x => x.Id == Data.TrialId); + Data.ResearchProgramNo = trialdata?.ResearchProgramNo; + if (IsNullOrEmpty(Data.TrialName)) + { + Data.TrialName = trialdata?.ExperimentName; + } + #endregion + + #region 测试中心名称 + + + Data.SiteCode = (await _dbContext.TrialSite.FirstOrDefaultAsync(x => x.TrialId == Data.TrialId && x.SiteId == Data.SiteId))?.TrialSiteCode; + + var sitedata = await _dbContext.Site.FirstOrDefaultAsync(x => x.Id == Data.SiteId); + + if (IsNullOrEmpty(Data.SiteName)) + { + Data.SiteName = sitedata?.SiteName; + } + #endregion + + #region 受试者 + + + if (IsNullOrEmpty(Data.SubjectCode)) + { + + Data.SubjectCode = (await _dbContext.Subject.FirstOrDefaultAsync(x => x.Id == Data.SubjectId))?.Code; + } + #endregion + + #region 访视 + if (IsNullOrEmpty(Data.SubjectVisitName)) + { + Data.SubjectVisitName = (await _dbContext.SubjectVisit.FirstOrDefaultAsync(x => x.Id == Data.SubjectVisitId))?.VisitName; + } + #endregion + + #region 创建者 + if (IsNullOrEmpty(Data.CreateUserName) || IsNullOrEmpty(Data.RoleName)) + { + var userdata = await _dbContext.Users.AsQueryable().Where(x => x.Id == Data.CreateUserId).GroupJoin(_dbContext.UserType.AsQueryable(), a => a.UserTypeId, b => b.Id, (a, b) => new + { + UserName = a.FirstName + a.LastName, + Role = b + }).SelectMany(a => a.Role, (m, n) => new + { + UserName = m.UserName, + RoleName = n.UserTypeShortName + }).FirstOrDefaultAsync(); + + if (userdata != null) + { + if (IsNullOrEmpty(Data.CreateUserName)) + { + Data.CreateUserName = userdata?.UserName; + } + + + if (IsNullOrEmpty(Data.RoleName)) + { + Data.RoleName = userdata?.RoleName; + } + } + } + #endregion + + #region 取操作类型 + try + { + var from = await _dbContext.FrontAuditConfig.FirstOrDefaultAsync(x => x.Identification == Data.Identification); + Data.ObjectType = from.ObjectTypeId; + Data.OptType = from.OptTypeId; + Data.ChildrenType = from.ChildrenTypeId; + Data.ModuleType = from.ModuleTypeId; + } + catch (Exception) + { + + throw new BusinessValidationFailedException("操作标识异常"); + } + + + #endregion + + } + #endregion /// /// 用前端传递的视图模型字段,更新,同时返回数据库该条记录的原始信息,方便对比某些字段是否更改,进行相应的逻辑操作