正式用户 非正式用户代码修改

Test.EIImageViewer
{872297557@qq.com} 2023-01-03 16:17:01 +08:00
parent 75c598c912
commit caa573551e
14 changed files with 174 additions and 7 deletions

View File

@ -20,6 +20,8 @@ namespace IRaCIS.Core.Application.Auth
public int IsAdmin { get; }
public bool IsTestUser { get; set; }
public string Phone { get; set; } = String.Empty;
public static IRaCISClaims Create(UserBasicInfo user)
@ -31,6 +33,7 @@ namespace IRaCIS.Core.Application.Auth
RealName = user.RealName,
UserTypeEnum=user.UserTypeEnum,
UserTypeId=user.UserTypeId,
IsTestUser=user.IsTestUser,
Code = user.Code,
PermissionStr = user.PermissionStr,

View File

@ -35,7 +35,9 @@ namespace IRaCIS.Core.Application.Auth
new Claim(JwtIRaCISClaimType.UserTypeEnum,user.UserTypeEnum.ToString()),
new Claim(JwtIRaCISClaimType.UserTypeEnumInt,((int)user.UserTypeEnum).ToString()),
new Claim(JwtIRaCISClaimType.UserTypeShortName,user.UserTypeShortName),
new Claim(JwtIRaCISClaimType.PermissionStr,user.PermissionStr)
new Claim(JwtIRaCISClaimType.PermissionStr,user.PermissionStr),
new Claim(JwtIRaCISClaimType.IsTestUser,user.IsTestUser.ToString())
};
////创建令牌

View File

@ -3888,6 +3888,11 @@
问题标识
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.ReadingTableQuestionTrialAddOrEdit.QuestionEnName">
<summary>
问题英文名称
</summary>
</member>
<member name="T:IRaCIS.Core.Application.Service.Reading.Dto.ReadingTableQuestionSystemAddOrEdit">
<summary> ReadingTableQuestionSystemAddOrEdit 列表查询参数模型</summary>
</member>
@ -3931,6 +3936,11 @@
问题标识
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.ReadingTableQuestionSystemAddOrEdit.QuestionEnName">
<summary>
问题英文名称
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.ReadingCriterionPageQuery.PageName">
<summary> PageName</summary>
</member>
@ -4209,6 +4219,16 @@
数据来源
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.ReadingQuestionTrialView.QuestionEnName">
<summary>
问题英文名称
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.ReadingQuestionTrialView.GroupEnName">
<summary>
问题英文分组
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.ReadingQuestionSystemView.ValueType">
<summary>
数值类型
@ -4349,6 +4369,16 @@
序号标记
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.ReadingQuestionSystemView.QuestionEnName">
<summary>
问题英文名称
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.ReadingQuestionSystemView.GroupEnName">
<summary>
问题英文分组
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.CalculateRelationDto.CustomCalculateMark">
<summary>
自定义计算标记
@ -4634,6 +4664,16 @@
序号标记
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.AddOrUpdateReadingQuestionSystemInDto.QuestionEnName">
<summary>
问题英文名称
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.AddOrUpdateReadingQuestionSystemInDto.GroupEnName">
<summary>
问题英文分组
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.AddOrUpdateReadingQuestionTrialInDto.Id">
<summary>
Id
@ -4804,6 +4844,16 @@
限制编辑
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.AddOrUpdateReadingQuestionTrialInDto.QuestionEnName">
<summary>
问题英文名称
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.AddOrUpdateReadingQuestionTrialInDto.GroupEnName">
<summary>
问题英文分组
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetSystemCriterionSelectDto.Id">
<summary>
返回的对象

View File

@ -529,6 +529,14 @@ namespace IRaCIS.Application.Services
var saveItem = new User() { FirstName = doctor.FirstName, LastName = doctor.LastName, EMail = doctor.EMail };
var trialType = await _trialRepository.Where(t => t.Id == trialId).Select(t => t.TrialType).FirstOrDefaultAsync();
if (trialType == TrialType.NoneOfficial)
{
saveItem.IsTestUser = true;
}
saveItem.Code = _userRepository.Select(t => t.Code).DefaultIfEmpty().Max() + 1;
saveItem.UserCode = AppSettings.GetCodeStr(saveItem.Code, nameof(User));

View File

@ -39,6 +39,8 @@ namespace IRaCIS.Application.Contracts
public UserTypeEnum UserTypeEnum { get; set; }
public bool IsTestUser { get; set; }
public bool IsAdmin { get; set; } = false;
public string UserTypeShortName { get; set; } = string.Empty;
public bool PasswordChanged { get; set; }
@ -145,6 +147,8 @@ namespace IRaCIS.Application.Contracts
public string DepartmentName { get; set; } = String.Empty;
public string PositionName { get; set; } = String.Empty;
public bool IsTestUser { get; set; }
}
/// <summary>

View File

@ -695,7 +695,7 @@ namespace IRaCIS.Core.Application.Contracts
//await SendInviteEmail(new InviteEmailCommand() { TrialId = trialId, RouteUrl = siteSurvyeSubmit.RouteUrl, UserList = needGenerateList });
await GenerateAccountAsync(needGenerateList);
await GenerateAccountAsync(needGenerateList,trialId);
await SendSiteSurveyUserJoinEmail(new TrialSiteUserSurveyJoinCommand() { TrialId = trialId, TrialSiteSurveyId = trialSiteSurveyId, RouteUrl = siteSurvyeSubmit.RouteUrl, BaseUrl = siteSurvyeSubmit.BaseUrl, UserList = needGenerateList });
@ -706,7 +706,7 @@ namespace IRaCIS.Core.Application.Contracts
private async Task GenerateAccountAsync(List<TrialSiteUserSurveyView> needGenerateList)
private async Task GenerateAccountAsync(List<TrialSiteUserSurveyView> needGenerateList,Guid trialId)
{
foreach (var item in needGenerateList)
{
@ -722,6 +722,13 @@ namespace IRaCIS.Core.Application.Contracts
{
var saveItem = _mapper.Map<User>(item);
var trialType = _repository.Where<Trial>(t => t.Id == trialId).Select(t => t.TrialType).FirstOrDefault();
if (trialType == TrialType.NoneOfficial)
{
saveItem.IsTestUser = true;
}
saveItem.Code = _userRepository.Select(t => t.Code).DefaultIfEmpty().Max() + 1;
saveItem.UserCode = AppSettings.GetCodeStr(saveItem.Code, nameof(User));

View File

@ -110,10 +110,17 @@ namespace IRaCIS.Core.Application.Service
}
else
{
var trialType = await _repository.Where<Trial>(t => t.Id == addOrEditTrialExternalUser.TrialId).Select(t => t.TrialType).FirstOrDefaultAsync();
//生成账户 并插入
var generateUser = _mapper.Map<User>(addOrEditTrialExternalUser);
if (trialType == TrialType.NoneOfficial)
{
generateUser.IsTestUser = true;
}
generateUser.Code = _userRepository.Select(t => t.Code).DefaultIfEmpty().Max() + 1;

View File

@ -105,15 +105,21 @@ namespace IRaCIS.Application.Services
[HttpPost]
public async Task<PageOutput<TrialUserScreeningDTO>> GetTrialUserScreeningList(TrialUserQuery trialUserQuery)
{
var trialType = _trialRepository.Where(t => t.Id == trialUserQuery.TrialId).Select(t => t.TrialType).FirstOrDefault();
//之前已经选择的用户 不放在列表中,现在又要改回去 废弃
var query = _repository.Where<User>(t => t.UserTypeEnum != UserTypeEnum.SuperAdmin)
.WhereIf(!string.IsNullOrWhiteSpace(trialUserQuery.UserRealName), t => (t.FullName).Contains(trialUserQuery.UserRealName))
.WhereIf(!string.IsNullOrWhiteSpace(trialUserQuery.UserName), t => t.UserName.Contains(trialUserQuery.UserName))
//正式或者培训的项目不能允许测试用户
.WhereIf( trialType==TrialType.OfficialTrial||trialType==TrialType.Training, t => t.IsTestUser==false)
.WhereIf(!string.IsNullOrWhiteSpace(trialUserQuery.UserRealName), t => (t.FullName).Contains(trialUserQuery.UserRealName))
.WhereIf(!string.IsNullOrWhiteSpace(trialUserQuery.UserName), t => t.UserName.Contains(trialUserQuery.UserName))
//.WhereIf(!string.IsNullOrWhiteSpace(trialUserQuery.OrganizationName), t => t.OrganizationName.Contains(trialUserQuery.OrganizationName))
.WhereIf(trialUserQuery.UserTypeEnum != null, t => t.UserTypeEnum == trialUserQuery.UserTypeEnum)
.WhereIf(trialUserQuery.UserTypeEnum != null, t => t.UserTypeEnum == trialUserQuery.UserTypeEnum)
//.WhereIf(_userInfo.IsAdmin, t => t.UserTypeRole.Type == UserTypeGroup.TrialUser)
//.WhereIf(!_userInfo.IsAdmin, t => t.UserTypeRole.Type == UserTypeGroup.TrialUser || t.UserTypeEnum != UserTypeEnum.ProjectManager)
.ProjectTo<TrialUserScreeningDTO>(_mapper.ConfigurationProvider, new { trialId = trialUserQuery.TrialId });
.ProjectTo<TrialUserScreeningDTO>(_mapper.ConfigurationProvider, new { trialId = trialUserQuery.TrialId });
return await query.ToPagedListAsync(trialUserQuery.PageIndex,
trialUserQuery.PageSize, string.IsNullOrWhiteSpace(trialUserQuery.SortField) ? "UserRealName" : trialUserQuery.SortField, trialUserQuery.Asc);

View File

@ -138,6 +138,12 @@ namespace IRaCIS.Application.Services
throw new BusinessValidationFailedException("只有PM/APM拥有操作权限!");
}
//测试用户 只能创建非正式项目
if(_userInfo.IsTestUser && trialAddModel.TrialType != TrialType.NoneOfficial)
{
throw new BusinessValidationFailedException("测试用户 只能创建非正式项目");
}
if (trialAddModel.Id == Guid.Empty || trialAddModel.Id == null)
{
if (await _trialRepository.AnyAsync(u => u.TrialCode == trialAddModel.TrialCode))

View File

@ -105,6 +105,7 @@ namespace IRaCIS.Application.Services
//await _visitTaskRepositoryy.UpdatePartialFromQueryAsync( Guid.Parse("78360000-3E2C-0016-9B53-08DA6A002040"), c => new VisitTask() { UpdateTime = DateTime.Now.AddMinutes(1) });
var a= _userInfo.IsTestUser;
var list1 = await _repository.Where<Dictionary>().Select(t => t.TranslateValue(t.Value, t.ValueCN,true)).ToListAsync();
var list2 = await _repository.Where<Dictionary>().Select(t => t.TranslateValue(t.Value, t.ValueCN, false)).ToListAsync();

View File

@ -0,0 +1,52 @@
using EntityFrameworkCore.Triggered;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infrastructure;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IRaCIS.Core.Application.Triggers
{
// 统一处理 外部用户、中心调研、参与医生加入到项目
public class AddlTrialUserTrigger : IBeforeSaveTrigger<TrialUser>
{
private readonly IRepository<Trial> _trialRepository;
private readonly IRepository<User> _userRepository;
public AddlTrialUserTrigger(IRepository<Trial> trialRepository, IRepository<User> userRepository)
{
_trialRepository = trialRepository;
_userRepository = userRepository;
}
public async Task BeforeSave(ITriggerContext<TrialUser> context, CancellationToken cancellationToken)
{
var trialUser = context.Entity;
if (context.ChangeType == ChangeType.Added)
{
//批量添加的时候使用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 (user.IsTestUser)
{
throw new BusinessValidationFailedException("正式类型 、培训类型的项目 不允许加入测试用户 ");
}
}
}
}
}
}

View File

@ -25,6 +25,8 @@ namespace IRaCIS.Core.Domain.Share
bool IsAdmin { get; }
bool IsTestUser { get; }
string UserTypeShortName { get; }
string UserTypeEnumStr { get; }

View File

@ -154,6 +154,20 @@ namespace IRaCIS.Core.Domain.Share
}
}
public bool IsTestUser
{
get
{
var isTestUserClaime = _accessor?.HttpContext?.User?.FindFirst(JwtIRaCISClaimType.IsTestUser);
if (isTestUserClaime != null && !string.IsNullOrEmpty(isTestUserClaime.Value))
{
return bool.Parse(isTestUserClaime.Value);
}
return false;
}
}
public string UserToken
{
get
@ -304,6 +318,8 @@ namespace IRaCIS.Core.Domain.Share
public const string UserTypeShortName = "userTypeShortName";
public const string IsAdmin = "isAdmin";
public const string IsTestUser = "isTestUser";
public const string PermissionStr = "permissionStr";

View File

@ -77,6 +77,9 @@ namespace IRaCIS.Core.Domain.Models
//医生生成账号后,会有值
public Guid? DoctorId { get; set; }
public bool IsTestUser { get; set; }
[Projectable] public string FullName => LastName + " / " + FirstName;
//[Projectable] public string FullName => $"{LastName} / {FirstName}";