This commit is contained in:
he
2022-04-19 15:14:43 +08:00
parent fe6ac1a8be
commit bfc0fd4203
5 changed files with 319 additions and 102 deletions
@@ -138,7 +138,7 @@ namespace IRaCIS.Core.Infra.EFCore
#region Subject and Visit and study
public virtual DbSet<StudyMonitor> StudyMonitor { get; set; }
public virtual DbSet<Subject> Subjects { get; set; }
public virtual DbSet<Subject> Subject { get; set; }
public virtual DbSet<VisitStage> VisitPlans { get; set; }
public virtual DbSet<VisitPlanInfluenceStudy> VisitPlanInfluenceStudy { get; set; }
@@ -197,6 +197,8 @@ namespace IRaCIS.Core.Infra.EFCore
public virtual DbSet<TrialSiteUser> UserTrialSite { get; set; }
public virtual DbSet<TrialSite> TrialSite { get; set; }
public virtual DbSet<Site> Site { get; set; }
public virtual DbSet<TrialSiteUserSurvey> TrialSiteUserSurvey { get; set; }
public virtual DbSet<TrialSiteEquipmentSurvey> TrialSiteEquipmentSurvey { get; set; }
public virtual DbSet<TrialSiteSurvey> TrialSiteSurvey { get; set; }
@@ -18,7 +18,19 @@ namespace IRaCIS.Core.Infra.EFCore
{
public interface IRepository<TEntity> : ICommandRepository<TEntity>, IQueryRepository<TEntity> where TEntity : Entity
{
/// <summary>
/// 获取中心啥的名称
/// </summary>
/// <param name="Data"></param>
/// <returns></returns>
Task SetInspectionNameValue(DataInspection Data);
/// <summary>
/// 添加稽查记录
/// </summary>
/// <param name="datas"></param>
/// <returns></returns>
Task AddListInspectionRecordAsync(List<DataInspection> 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)));
}
@@ -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<TEntity> : IRepository<TEntity>
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<TEntity> InsertFromDTOAsync<TFrom>(TFrom from, bool autoSave = false, params EntityVerifyExp<TEntity>[] verify)
{
List<DataInspection> datas = new List<DataInspection>();
var entity = _mapper.Map<TEntity>(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
/// <summary>
/// 添加稽查记录
/// </summary>
/// <param name="datas"></param>
/// <returns></returns>
public async Task AddListInspectionRecordAsync(List<DataInspection> 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<IDictionary<string, object>>(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();
}
/// <summary>
/// IsNullOrEmpty
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
private bool IsNullOrEmpty(object value)
{
if (value.ToString() == null || value.ToString() == string.Empty)
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// 设置项目以及名称
/// </summary>
/// <param name="Data"></param>
/// <returns></returns>
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
/// <summary>
/// 用前端传递的视图模型字段,更新,同时返回数据库该条记录的原始信息,方便对比某些字段是否更改,进行相应的逻辑操作