修改 正式 非正式用户

Uat_Study
{872297557@qq.com} 2023-01-16 17:18:45 +08:00
parent 261a038cf3
commit 26cd63936f
10 changed files with 116 additions and 29 deletions

View File

@ -1080,7 +1080,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
public async Task<IResponseOutput> AIRReReading(AIRReReadingCommand command, [FromServices] IVisitTaskHelpeService _visitTaskCommonService)
{
var baseLineTaskList = await _visitTaskRepository.Where(t => t.TrialId == command.TrialId && t.TrialReadingCriterionId == command.TrialReadingCriterionId && t.DoctorUserId == _userInfo.Id
&& t.TaskState == TaskState.Effect && t.ReadingCategory == ReadingCategory.Visit && t.ReadingTaskState == ReadingTaskState.HaveSigned && t.SourceSubjectVisit.IsBaseLine == true && t.DoctorUserId == _userInfo.Id).ToListAsync();
&& t.TaskState == TaskState.Effect && t.ReadingCategory == ReadingCategory.Visit && t.ReadingTaskState == ReadingTaskState.HaveSigned && t.SourceSubjectVisit.IsBaseLine == true).ToListAsync();
var baseLineTaskIdList = baseLineTaskList.Select(t => t.Id).ToList();
@ -2235,7 +2235,8 @@ namespace IRaCIS.Core.Application.Service.Allocation
}
else
{
await _readingClinicalDataReposiotry.UpdatePartialFromQueryAsync(t => t.ReadingId == sv.Id && t.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit, c => new ReadingClinicalData() { IsSign = false, ReadingClinicalDataState =ReadingClinicalDataStatus.HaveUploaded });
await _readingClinicalDataReposiotry.UpdatePartialFromQueryAsync(t => t.ReadingId == sv.Id && t.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit, c => new ReadingClinicalData() {
IsSign = false, ReadingClinicalDataState =ReadingClinicalDataStatus.HaveUploaded,IsBlind=null,IsComplete=null });
}

View File

@ -194,9 +194,14 @@ namespace IRaCIS.Application.Contracts
public class UserListQueryDTO : PageInput
{
public string UserName { get; set; } = string.Empty;
public string RealName { get; set; }
public string Phone { get; set; } = string.Empty;
public string OrganizationName { get; set; } = string.Empty;
public Guid? UserType { get; set; }
public bool? IsTestUser { get; set; }
public bool ? IsZhiZhun { get; set; }
public UserStateEnum? UserState { get; set; }
}

View File

@ -448,11 +448,14 @@ namespace IRaCIS.Application.Services
public async Task<PageOutput<UserListDTO>> GetUserList(UserListQueryDTO param)
{
var userQueryable = _userRepository.Where(x => x.UserTypeEnum != UserTypeEnum.SuperAdmin)
.WhereIf(!string.IsNullOrWhiteSpace(param.UserName), t => t.UserName.Contains(param.UserName) || (t.FullName).Contains(param.UserName))
.WhereIf(!string.IsNullOrWhiteSpace(param.UserName), t => t.UserName.Contains(param.UserName) )
.WhereIf(!string.IsNullOrWhiteSpace(param.RealName), t => t.FullName.Contains(param.RealName))
.WhereIf(!string.IsNullOrWhiteSpace(param.Phone), t => t.Phone.Contains(param.Phone))
.WhereIf(!string.IsNullOrWhiteSpace(param.OrganizationName), t => t.OrganizationName.Contains(param.OrganizationName))
.WhereIf(param.UserType != null, t => t.UserTypeId == param.UserType)
.WhereIf(param.UserState != null, t => t.Status == param.UserState)
.WhereIf(param.IsTestUser != null, t => t.IsTestUser == param.IsTestUser)
.WhereIf(param.IsZhiZhun != null, t => t.IsZhiZhun == param.IsZhiZhun)
.ProjectTo<UserListDTO>(_mapper.ConfigurationProvider);
return await userQueryable.ToPagedListAsync(param.PageIndex, param.PageSize, param.SortField == string.Empty ? "UserName" : param.SortField, param.Asc);
@ -540,7 +543,7 @@ namespace IRaCIS.Application.Services
if (user.IsZhiZhun)
{
user.OrganizationName = "Zhizhun";
user.OrganizationName = AppSettings.DefaultInternalOrganizationName;
}
var success = await _userRepository.SaveChangesAsync();

View File

@ -108,7 +108,7 @@ namespace IRaCIS.Core.Application.Contracts
if (userTypeSelectEnum == UserTypeSelectEnum.InnerUser)
{
userTypeEnums = new List<UserTypeEnum>() { UserTypeEnum.IQC, UserTypeEnum.APM, UserTypeEnum.MIM, UserTypeEnum.MW };
userTypeEnums = new List<UserTypeEnum>() { UserTypeEnum.IQC, UserTypeEnum.APM, UserTypeEnum.MIM, UserTypeEnum.QA ,UserTypeEnum.MW};
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin)
{

View File

@ -54,7 +54,7 @@ namespace IRaCIS.Core.Application.Contracts
if (existSysUser.LastName != addOrEditTrialSiteUserSurvey.LastName || existSysUser.FirstName != addOrEditTrialSiteUserSurvey.FirstName)
{
return ResponseOutput.NotOk($"该用户在系统中账户名为:{existSysUser.LastName + " / " + existSysUser.FirstName} ,与填写信息存在不一致项, 现将界面信息修改为与系统一致,可进行保存",
new { existSysUser.LastName, existSysUser.FirstName, existSysUser.Phone }, ApiResponseCodeEnum.NeedTips);
new { existSysUser.LastName, existSysUser.FirstName, existSysUser.Phone,existSysUser.IsTestUser,existSysUser.IsZhiZhun }, ApiResponseCodeEnum.NeedTips);
}
}

View File

@ -68,7 +68,8 @@ namespace IRaCIS.Core.Application.Service
/// <param name="addOrEditTrialExternalUser"></param>
/// <returns></returns>
[Authorize(Policy = IRaCISPolicy.PM_APM)]
[TypeFilter(typeof(TrialResourceFilter),Arguments = new object[] { "AfterStopCannNotOpt" })]
[UnitOfWork]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
public async Task<IResponseOutput> AddOrUpdateTrialExternalUser(TrialExternalUserAddAndSendEmail addOrEditTrialExternalUser)
{
@ -80,7 +81,7 @@ namespace IRaCIS.Core.Application.Service
{
if (existSysUser.LastName != addOrEditTrialExternalUser.LastName || existSysUser.FirstName != addOrEditTrialExternalUser.FirstName)
{
return ResponseOutput.NotOk($"该用户在系统中的用户名为:{existSysUser.LastName + " / " + existSysUser.FirstName} 电话:{existSysUser.Phone},与填写信息存在不一致项, 请将界面信息修改为与系统一致,再进行保存", new { existSysUser.LastName, existSysUser.FirstName, existSysUser.Phone }, ApiResponseCodeEnum.NeedTips);
return ResponseOutput.NotOk($"该用户在系统中的用户名为:{existSysUser.LastName + " / " + existSysUser.FirstName} 电话:{existSysUser.Phone},与填写信息存在不一致项, 请将界面信息修改为与系统一致,再进行保存", new { existSysUser.LastName, existSysUser.FirstName, existSysUser.Phone, existSysUser.IsZhiZhun, existSysUser.IsTestUser }, ApiResponseCodeEnum.NeedTips);
}
}
@ -95,6 +96,7 @@ namespace IRaCIS.Core.Application.Service
}
var addEntity = _mapper.Map<TrialExternalUser>(addOrEditTrialExternalUser);
await _trialExternalUseRepository.AddAsync(addEntity);
@ -206,7 +208,7 @@ namespace IRaCIS.Core.Application.Service
//New 省掉邀请流程
[HttpPost]
[Authorize(Policy = IRaCISPolicy.PM_APM)]
[TypeFilter(typeof(TrialResourceFilter),Arguments = new object[] { "AfterStopCannNotOpt" })]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
[UnitOfWork]
public async Task<IResponseOutput> SendExternalUserJoinEmail(TrialExternalUserSendEmail sendEmail)
{
@ -224,7 +226,7 @@ namespace IRaCIS.Core.Application.Service
if (!await _trialUserRepository.AnyAsync(t => t.TrialId == trialId && t.UserId == userId, true))
{
await _repository.AddAsync(new TrialUser() { TrialId = trialId, UserId = userId ,JoinTime = DateTime.Now });
await _repository.AddAsync(new TrialUser() { TrialId = trialId, UserId = userId, JoinTime = DateTime.Now });
await _userRepository.BatchUpdateNoTrackingAsync(t => t.Id == userId, u => new User() { Status = UserStateEnum.Enable });

View File

@ -107,11 +107,25 @@ namespace IRaCIS.Application.Services
{
var trialType = _trialRepository.Where(t => t.Id == trialUserQuery.TrialId).Select(t => t.TrialType).FirstOrDefault();
var userTypeEnums = new List<UserTypeEnum>() { UserTypeEnum.IQC, UserTypeEnum.APM, UserTypeEnum.MIM, UserTypeEnum.QA, UserTypeEnum.MW };
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin)
{
userTypeEnums.Add(UserTypeEnum.ProjectManager);
}
//之前已经选择的用户 不放在列表中,现在又要改回去 废弃
var query = _repository.Where<User>(t => t.UserTypeEnum != UserTypeEnum.SuperAdmin)
//正式或者培训的项目不能允许测试用户
.WhereIf(trialType == TrialType.OfficialTrial || trialType == TrialType.Training, t => t.IsTestUser == false)
//正式或者培训的项目不能允许测试用户 同时必须是内部的用户
.WhereIf(trialType == TrialType.OfficialTrial || trialType == TrialType.Training, t => t.IsTestUser == false && t.IsZhiZhun)
//测试用户 或者内部正式用户
.WhereIf(trialType == TrialType.NoneOfficial, t => t.IsTestUser == true || (t.IsTestUser == false && t.IsZhiZhun))
.WhereIf(!string.IsNullOrWhiteSpace(trialUserQuery.UserRealName), t => (t.FullName).Contains(trialUserQuery.UserRealName))
.WhereIf(!string.IsNullOrWhiteSpace(trialUserQuery.UserName), t => t.UserName.Contains(trialUserQuery.UserName))

View File

@ -33,10 +33,11 @@ namespace IRaCIS.Core.Application.Triggers
//批量添加的时候使用Find 不会多次查询,优先从跟踪的内存中查找
var trialInfo = await _trialRepository.FindAsync(trialUser.TrialId);
if(trialInfo.TrialType==Domain.Share.TrialType.OfficialTrial || trialInfo.TrialType == Domain.Share.TrialType.Training )
// 必须包在同一个事务,有的时候是数据库还没用户,不能直接查询数据库
var user = await _userRepository.FindAsync(trialUser.UserId);
if (trialInfo.TrialType == Domain.Share.TrialType.OfficialTrial || trialInfo.TrialType == Domain.Share.TrialType.Training)
{
// 必须包在同一个事务,有的时候是数据库还没用户,不能直接查询数据库
var user = await _userRepository.FindAsync(trialUser.UserId);
if (user.IsTestUser)
{
@ -44,6 +45,16 @@ namespace IRaCIS.Core.Application.Triggers
}
}
if (trialInfo.TrialType == TrialType.NoneOfficial)
{
if (user.IsTestUser == false && user.IsZhiZhun == false)
{
throw new BusinessValidationFailedException("测试项目 不允许加入外部正式用户 ");
}
}
}
}
}

View File

@ -42,6 +42,9 @@ namespace IRaCIS.Core.Domain.Models
public DateTime? LastLoginTime { get; set; }
public Guid UserTypeId { get; set; } = Guid.Empty;
// 内部用户 外部用户
public bool IsZhiZhun { get; set; }
public UserTypeEnum UserTypeEnum { get; set; }

View File

@ -392,35 +392,83 @@ namespace IRaCIS.Core.Infra.EFCore.Common
});
}
//项目器官
foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(OrganTrialInfo)))
if (entitys.Any(x => x.Entity.GetType() == typeof(OrganTrialInfo)))
{
var type = GetEntityAuditOpt(item);
var entity = item.Entity as OrganTrialInfo;
var organTrialEntityEnrtyList = entitys.Where(x => x.Entity.GetType() == typeof(OrganTrialInfo));
var extraIdentification = string.Empty;
if (_userInfo.RequestUrl != "OrganInfo/batchAddTrialOrgan" && type == AuditOpt.Add)
//同步添加
if (_userInfo.RequestUrl != "OrganInfo/batchAddTrialOrgan" && organTrialEntityEnrtyList.Any( t=>GetEntityAuditOpt(t) == AuditOpt.Add) )
{
extraIdentification = "/Auto";
var list = organTrialEntityEnrtyList.Select(t => t.Entity as OrganTrialInfo);
var organIdList = list.Select(t => t.OrganInfoId).ToList();
var organList = await _dbContext.OrganInfo.Where(x => organIdList.Contains(x.Id)).ToListAsync();
var firstEntity = list.FirstOrDefault();
var cloneEntity = firstEntity.Clone();
//保证Id 唯一
cloneEntity.Id = IdentifierHelper.CreateGuid(firstEntity.TrialId.ToString(), firstEntity.TrialCriterionId.ToString());
await InsertInspection<OrganTrialInfo>(cloneEntity, AuditOpt.Add, x => new InspectionConvertDTO()
{
IsDistinctionInterface = false,
TrialReadingCriterionId = cloneEntity.TrialCriterionId,
ObjectRelationParentId = cloneEntity.TrialCriterionId,
ObjectRelationParentId2 = cloneEntity.OrganInfoId,
ExtraIndentification = extraIdentification
}, new
{
QuestionAnswerList = list.Join(organList, t => t.OrganInfoId, u => u.Id, (t, u) => u).OrderBy(t => t.ShowOrder).ToList(),
});
}
await InsertInspection<OrganTrialInfo>(entity, type, x => new InspectionConvertDTO()
else
{
IsDistinctionInterface = false,
//手动操作
foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(OrganTrialInfo)))
{
var type = GetEntityAuditOpt(item);
TrialReadingCriterionId = entity.TrialCriterionId,
var entity = item.Entity as OrganTrialInfo;
ObjectRelationParentId = entity.TrialCriterionId,
await InsertInspection<OrganTrialInfo>(entity, type, x => new InspectionConvertDTO()
{
IsDistinctionInterface = false,
ObjectRelationParentId2 = entity.OrganInfoId,
TrialReadingCriterionId = entity.TrialCriterionId,
ExtraIndentification =extraIdentification
ObjectRelationParentId = entity.TrialCriterionId,
});
ObjectRelationParentId2 = entity.OrganInfoId,
ExtraIndentification = extraIdentification
});
}
}
}
// 项目 系统公用表
//病灶管理 区分项目 还是系统的
foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(CriterionNidus)))
@ -1987,7 +2035,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
await InsertInspection<ReadingGlobalTaskInfo>(cloneEntity, type, x => new InspectionConvertDTO()
{
VisitTaskId = x.TaskId,
VisitTaskId = x.GlobalTaskId,
TrialReadingCriterionId = trialReadingCriterionId,
ObjectRelationParentId = x.TaskId,
}, new { GlobalAnswerList = objList } );