添加新的用户表提交
continuous-integration/drone/push Build is pending Details

Uat_IRC_Net8
hang 2024-12-24 16:25:04 +08:00
parent f7519b2095
commit dc32df27ec
13 changed files with 18999 additions and 209 deletions

View File

@ -10,5 +10,6 @@ global using Microsoft.Extensions.Localization;
global using AutoMapper;
global using IRaCIS.Core.Domain.Share;
global using IRaCIS.Core.Application.BusinessFilter;
global using IdentityUser = IRaCIS.Core.Domain.Models.IdentityUser;

View File

@ -2269,14 +2269,6 @@
<param name="model"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.UserService.UpdateUserState(System.Guid,IRaCIS.Core.Domain.Share.UserStateEnum)">
<summary>
禁用或者启用账户
</summary>
<param name="userId"></param>
<param name="state"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.UserService.SendMFAEmail(System.Guid,IRaCIS.Core.Domain.Share.UserMFAType)">
<summary>
发送MFA 验证邮件
@ -2313,7 +2305,7 @@
<summary>
验证密码成功后选定角色然后获取当前角色的Token
</summary>
<param name="userTypeId"></param>
<param name="userRoleId"></param>
<param name="_tokenService"></param>
<returns></returns>
<exception cref="T:IRaCIS.Core.Infrastructure.BusinessValidationFailedException"></exception>
@ -13125,7 +13117,7 @@
<param name="_readingConsistentClinicalDataRepository"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.TestService.UserMutiAccount">
<member name="M:IRaCIS.Core.Application.Service.TestService.UserMutiAccount(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.IdentityUser})">
<summary>
用户多账号,初次维护数据
</summary>

View File

@ -160,7 +160,9 @@ namespace IRaCIS.Application.Contracts
{
//public bool CanEditUserType { get; set; }
public Guid IdentityUserId { get; set; }
public string FullName { get; set; }
public Guid Id { get; set; }
public List<UserAccountInfo> AccountList { get; set; }
}
@ -205,7 +207,7 @@ namespace IRaCIS.Application.Contracts
public class UserCommand : UserInfo
{
public Guid? IdentityUserId { get; set; }
public Guid? Id { get; set; }
public List<UserAddUserType> UserRoleList { get; set; }

View File

@ -18,7 +18,7 @@ namespace IRaCIS.Core.Application.Service
Task<IResponseOutput> ResetPassword(Guid userId);
Task<IResponseOutput> UpdateUser(UserCommand model);
Task<IResponseOutput> UpdateUserState(Guid userId, UserStateEnum state);
//Task<IResponseOutput> UpdateUserState(Guid userId, UserStateEnum state);
//Task<IResponseOutput> SendVerificationCode(string emailOrPhone, VerifyType verificationType, bool isReviewer = false);
//Task<IResponseOutput> SetNewPassword(ResetPasswordCommand resetPwdModel);

View File

@ -17,6 +17,7 @@ using Org.BouncyCastle.Utilities.Encoders;
using Panda.DynamicWebApi.Attributes;
using System.Text.RegularExpressions;
using ZiggyCreatures.Caching.Fusion;
using LoginReturnDTO = IRaCIS.Application.Contracts.LoginReturnDTO;
namespace IRaCIS.Core.Application.Service
@ -32,6 +33,7 @@ namespace IRaCIS.Core.Application.Service
IRepository<Trial> _trialRepository,
IOptionsMonitor<ServiceVerifyConfigOption> _verifyConfig,
IOptionsMonitor<SystemEmailSendConfig> systemEmailConfig,
IRepository<IdentityUser> _identityUserRepository,
ISearcher _searcher, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer, IFusionCache _fusionCache) : BaseService, IUserService
{
@ -40,7 +42,7 @@ namespace IRaCIS.Core.Application.Service
private async Task VerifyUserNameAsync(Guid? identityUserId, string userName)
{
if (await _userRepository.WhereIf(identityUserId != null, t => t.IdentityUserId != identityUserId).AnyAsync(t => t.UserName == userName))
if (await _identityUserRepository.WhereIf(identityUserId != null, t => t.Id != identityUserId).AnyAsync(t => t.UserName == userName))
{
//---用户名已经存在。
throw new BusinessValidationFailedException(_localizer["User_UsernameExist"]);
@ -49,7 +51,7 @@ namespace IRaCIS.Core.Application.Service
private async Task VerifyUserPhoneAsync(Guid? identityUserId, string phone)
{
if (await _userRepository.WhereIf(identityUserId != null, t => t.IdentityUserId != identityUserId).AnyAsync(t => (t.Phone == phone)))
if (await _identityUserRepository.WhereIf(identityUserId != null, t => t.Id != identityUserId).AnyAsync(t => (t.Phone == phone)))
{
//---该用户类型中已存在具有相同的电话的用户。
throw new BusinessValidationFailedException(_localizer["User_PhoneDup"]);
@ -59,7 +61,7 @@ namespace IRaCIS.Core.Application.Service
private async Task VerifyUserEmailAsync(Guid? identityUserId, string email)
{
if (await _userRepository.WhereIf(identityUserId != null, t => t.IdentityUserId != identityUserId).AnyAsync(t => t.EMail == email))
if (await _identityUserRepository.WhereIf(identityUserId != null, t => t.Id != identityUserId).AnyAsync(t => t.EMail == email))
{
//---该用户类型中已存在具有相同邮箱的用户。
throw new BusinessValidationFailedException(_localizer["User_EmailDup"]);
@ -79,7 +81,7 @@ namespace IRaCIS.Core.Application.Service
}
var dbUser = (await _userRepository.Where(t => t.IdentityUserId == identityUserId).FirstOrDefaultAsync()).IfNullThrowException();
var dbUser = (await _identityUserRepository.Where(t => t.Id == identityUserId).FirstOrDefaultAsync()).IfNullThrowException();
if (oldPwd != null && dbUser.Password != oldPwd)
{
@ -104,7 +106,7 @@ namespace IRaCIS.Core.Application.Service
if (oldPwd == null)
{
oldPwd = await _userRepository.Where(x => x.IdentityUserId == identityUserId).Select(x => x.Password).FirstOrDefaultAsync();
oldPwd = await _identityUserRepository.Where(x => x.Id == identityUserId).Select(x => x.Password).FirstOrDefaultAsync();
}
if (oldPwd.IsNotNullOrEmpty())
@ -118,7 +120,7 @@ namespace IRaCIS.Core.Application.Service
});
}
await _userRepository.BatchUpdateNoTrackingAsync(x => x.IdentityUserId == identityUserId, x => new User()
await _identityUserRepository.BatchUpdateNoTrackingAsync(x => x.Id == identityUserId, x => new IdentityUser()
{
LastChangePassWordTime = DateTime.Now,
});
@ -192,7 +194,7 @@ namespace IRaCIS.Core.Application.Service
await VerifyUserEmailAsync(_userInfo.IdentityUserId, newEmail);
await _userRepository.UpdatePartialFromQueryAsync(_userInfo.IdentityUserId, u => new User()
await _identityUserRepository.UpdatePartialFromQueryAsync(_userInfo.IdentityUserId, u => new IdentityUser()
{
EMail = newEmail
});
@ -215,7 +217,7 @@ namespace IRaCIS.Core.Application.Service
await VerifyUserPhoneAsync(_userInfo.IdentityUserId, newPhone);
await _userRepository.UpdatePartialFromQueryAsync(_userInfo.IdentityUserId, u => new User()
await _identityUserRepository.UpdatePartialFromQueryAsync(_userInfo.IdentityUserId, u => new IdentityUser()
{
Phone = newPhone
});
@ -232,7 +234,7 @@ namespace IRaCIS.Core.Application.Service
await VerifyUserNameAsync(_userInfo.IdentityUserId, newUserName);
await _userRepository.UpdatePartialFromQueryAsync(_userInfo.IdentityUserId, u => new User()
await _identityUserRepository.UpdatePartialFromQueryAsync(_userInfo.IdentityUserId, u => new IdentityUser()
{
UserName = newUserName
});
@ -253,7 +255,7 @@ namespace IRaCIS.Core.Application.Service
await VerifyUserNameAsync(_userInfo.IdentityUserId, newUserName);
await _userRepository.UpdatePartialFromQueryAsync(_userInfo.IdentityUserId, u => new User()
await _identityUserRepository.UpdatePartialFromQueryAsync(_userInfo.IdentityUserId, u => new IdentityUser()
{
UserName = newUserName,
@ -286,13 +288,13 @@ namespace IRaCIS.Core.Application.Service
await _mailVerificationService.AdminResetPwdSendEmailAsync(identityUserId, pwd);
await _userRepository.UpdatePartialFromQueryAsync(t => t.IdentityUserId == identityUserId, u => new User()
await _identityUserRepository.UpdatePartialFromQueryAsync(t => t.Id == identityUserId, u => new IdentityUser()
{
Password = MD5Helper.Md5(pwd),
IsFirstAdd = true
});
var userName = _userRepository.Where(t => t.IdentityUserId == identityUserId).Select(t => t.UserName).FirstOrDefault();
var userName = _identityUserRepository.Where(t => t.Id == identityUserId).Select(t => t.UserName).FirstOrDefault();
await _fusionCache.RemoveAsync(CacheKeys.UserLoginError(userName));
@ -323,7 +325,7 @@ namespace IRaCIS.Core.Application.Service
}
////查找改邮箱或者手机的用户
var exist = await _userRepository.AnyAsync(t => t.EMail == email);
var exist = await _identityUserRepository.AnyAsync(t => t.EMail == email);
if (!exist)
{
@ -380,7 +382,7 @@ namespace IRaCIS.Core.Application.Service
}
}
var list = await _userRepository.Where(t => t.EMail == email && t.Status == UserStateEnum.Enable).Select(t => new UserAccountDto() { UserId = t.Id, UserName = t.UserName, UserRealName = t.FullName, UserType = t.UserTypeRole.UserTypeShortName }).ToListAsync();
var list = await _identityUserRepository.Where(t => t.EMail == email && t.Status == UserStateEnum.Enable).Select(t => new UserAccountDto() { UserId = t.Id, UserName = t.UserName, UserRealName = t.FullName }).ToListAsync();
@ -402,7 +404,7 @@ namespace IRaCIS.Core.Application.Service
await VerifyUserPwdAsync(identityUserId, newPwd);
var success = await _userRepository.BatchUpdateNoTrackingAsync(t => t.IdentityUserId == identityUserId, u => new User()
var success = await _identityUserRepository.BatchUpdateNoTrackingAsync(t => t.Id == identityUserId, u => new IdentityUser()
{
Password = newPwd,
IsFirstAdd = false
@ -431,14 +433,14 @@ namespace IRaCIS.Core.Application.Service
await VerifyUserNameAsync(_userInfo.Id, editPwModel.NewUserName);
await _userRepository.BatchUpdateNoTrackingAsync(t => t.IdentityUserId == _userInfo.IdentityUserId, u => new User()
await _identityUserRepository.BatchUpdateNoTrackingAsync(t => t.Id == _userInfo.IdentityUserId, u => new IdentityUser()
{
UserName = editPwModel.NewUserName,
});
}
var success = await _userRepository.BatchUpdateNoTrackingAsync(t => t.IdentityUserId == _userInfo.IdentityUserId, u => new User()
var success = await _identityUserRepository.BatchUpdateNoTrackingAsync(t => t.Id == _userInfo.IdentityUserId, u => new IdentityUser()
{
Password = editPwModel.NewPassWord,
IsFirstAdd = false
@ -462,45 +464,63 @@ namespace IRaCIS.Core.Application.Service
[HttpPost]
public async Task<PageOutput<UserListDTO>> GetUserList(UserListQueryDTO inQuery)
{
var userQueryable = _userRepository.Where(x => x.UserTypeEnum != UserTypeEnum.SuperAdmin)
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserName), t => t.UserName.Contains(inQuery.UserName))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.RealName), t => t.FullName.Contains(inQuery.RealName))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.Phone), t => t.Phone.Contains(inQuery.Phone))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.OrganizationName), t => t.OrganizationName.Contains(inQuery.OrganizationName))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.EMail), t => t.EMail.Contains(inQuery.EMail))
.WhereIf(inQuery.BeginCreateTime != null, t => t.CreateTime >= inQuery.BeginCreateTime)
.WhereIf(inQuery.EndCreateTime != null, t => t.CreateTime <= inQuery.EndCreateTime)
.WhereIf(inQuery.BeginLastLoginTime != null, t => t.LastLoginTime >= inQuery.BeginLastLoginTime)
.WhereIf(inQuery.EndLastLoginTime != null, t => t.LastLoginTime <= inQuery.EndLastLoginTime)
.WhereIf(inQuery.UserType != null, t => t.UserTypeId == inQuery.UserType)
.WhereIf(inQuery.UserState != null, t => t.Status == inQuery.UserState)
.WhereIf(inQuery.IsTestUser != null, t => t.IsTestUser == inQuery.IsTestUser)
.WhereIf(inQuery.IsZhiZhun != null, t => t.IsZhiZhun == inQuery.IsZhiZhun)
.GroupBy(t => t.IdentityUserId).Select(g => new UserListDTO()
{
IdentityUserId = g.Key,
UserRoleList = g.Select(c => new UserAddUserType()
{
UserTypeEnum = c.UserTypeEnum,
UserTypeId = c.UserTypeId,
}).ToList(),
UserCode = g.FirstOrDefault().UserCode,
DepartmentName = g.FirstOrDefault().DepartmentName,
CreateTime = g.FirstOrDefault().CreateTime,
EMail = g.FirstOrDefault().EMail,
FirstName = g.FirstOrDefault().FirstName,
IsTestUser = g.FirstOrDefault().IsTestUser,
IsZhiZhun = g.FirstOrDefault().IsZhiZhun,
LastName = g.FirstOrDefault().LastName,
OrganizationName = g.FirstOrDefault().OrganizationName,
FullName = g.FirstOrDefault().FullName,
Phone = g.FirstOrDefault().Phone,
PositionName = g.FirstOrDefault().PositionName,
Sex = g.FirstOrDefault().Sex,
Status = g.FirstOrDefault().Status,
UserName = g.FirstOrDefault().UserName,
});
var userQueryable = _identityUserRepository.Where(x => x.UserRoleList.Any(x => x.UserTypeEnum != UserTypeEnum.SuperAdmin))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserName), t => t.UserName.Contains(inQuery.UserName))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.RealName), t => t.FullName.Contains(inQuery.RealName))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.Phone), t => t.Phone.Contains(inQuery.Phone))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.OrganizationName), t => t.OrganizationName.Contains(inQuery.OrganizationName))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.EMail), t => t.EMail.Contains(inQuery.EMail))
.WhereIf(inQuery.BeginCreateTime != null, t => t.CreateTime >= inQuery.BeginCreateTime)
.WhereIf(inQuery.EndCreateTime != null, t => t.CreateTime <= inQuery.EndCreateTime)
.WhereIf(inQuery.BeginLastLoginTime != null, t => t.LastLoginTime >= inQuery.BeginLastLoginTime)
.WhereIf(inQuery.EndLastLoginTime != null, t => t.LastLoginTime <= inQuery.EndLastLoginTime)
.WhereIf(inQuery.UserType != null, t => t.UserRoleList.Any(t => t.UserTypeId == inQuery.UserType))
.WhereIf(inQuery.UserState != null, t => t.Status == inQuery.UserState)
.WhereIf(inQuery.IsTestUser != null, t => t.IsTestUser == inQuery.IsTestUser)
.WhereIf(inQuery.IsZhiZhun != null, t => t.IsZhiZhun == inQuery.IsZhiZhun)
.ProjectTo<UserListDTO>(_mapper.ConfigurationProvider);
//var userQueryable = _identityUserRepository.Where(x => x.UserTypeEnum != UserTypeEnum.SuperAdmin)
// .WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserName), t => t.UserName.Contains(inQuery.UserName))
// .WhereIf(!string.IsNullOrWhiteSpace(inQuery.RealName), t => t.FullName.Contains(inQuery.RealName))
// .WhereIf(!string.IsNullOrWhiteSpace(inQuery.Phone), t => t.Phone.Contains(inQuery.Phone))
// .WhereIf(!string.IsNullOrWhiteSpace(inQuery.OrganizationName), t => t.OrganizationName.Contains(inQuery.OrganizationName))
// .WhereIf(!string.IsNullOrWhiteSpace(inQuery.EMail), t => t.EMail.Contains(inQuery.EMail))
// .WhereIf(inQuery.BeginCreateTime != null, t => t.CreateTime >= inQuery.BeginCreateTime)
// .WhereIf(inQuery.EndCreateTime != null, t => t.CreateTime <= inQuery.EndCreateTime)
// .WhereIf(inQuery.BeginLastLoginTime != null, t => t.LastLoginTime >= inQuery.BeginLastLoginTime)
// .WhereIf(inQuery.EndLastLoginTime != null, t => t.LastLoginTime <= inQuery.EndLastLoginTime)
// .WhereIf(inQuery.UserType != null, t => t.UserTypeId == inQuery.UserType)
// .WhereIf(inQuery.UserState != null, t => t.Status == inQuery.UserState)
// .WhereIf(inQuery.IsTestUser != null, t => t.IsTestUser == inQuery.IsTestUser)
// .WhereIf(inQuery.IsZhiZhun != null, t => t.IsZhiZhun == inQuery.IsZhiZhun)
// .GroupBy(t => t.IdentityUserId).Select(g => new UserListDTO()
// {
// IdentityUserId = g.Key,
// UserRoleList = g.Select(c => new UserAddUserType()
// {
// UserTypeEnum = c.UserTypeEnum,
// UserTypeId = c.UserTypeId,
// }).ToList(),
// UserCode = g.FirstOrDefault().UserCode,
// DepartmentName = g.FirstOrDefault().DepartmentName,
// CreateTime = g.FirstOrDefault().CreateTime,
// EMail = g.FirstOrDefault().EMail,
// FirstName = g.FirstOrDefault().FirstName,
// IsTestUser = g.FirstOrDefault().IsTestUser,
// IsZhiZhun = g.FirstOrDefault().IsZhiZhun,
// LastName = g.FirstOrDefault().LastName,
// OrganizationName = g.FirstOrDefault().OrganizationName,
// FullName = g.FirstOrDefault().FullName,
// Phone = g.FirstOrDefault().Phone,
// PositionName = g.FirstOrDefault().PositionName,
// Sex = g.FirstOrDefault().Sex,
// Status = g.FirstOrDefault().Status,
// UserName = g.FirstOrDefault().UserName,
// });
return await userQueryable.ToPagedListAsync(inQuery);
@ -513,7 +533,7 @@ namespace IRaCIS.Core.Application.Service
public async Task<UserDetailDTO> GetUser()
{
var userQuery = _userRepository.Where(t => t.IdentityUserId == _userInfo.IdentityUserId).ProjectTo<UserDetailDTO>(_mapper.ConfigurationProvider);
var userQuery = _identityUserRepository.Where(t => t.Id == _userInfo.IdentityUserId).ProjectTo<UserDetailDTO>(_mapper.ConfigurationProvider);
var userRole = await userQuery.FirstOrDefaultAsync();
@ -561,18 +581,17 @@ namespace IRaCIS.Core.Application.Service
//await VerifyUserPhoneAsync(null, userAddModel.UserTypeId, userAddModel.Phone);
var saveItem = _mapper.Map<User>(userAddModel);
var saveItem = _mapper.Map<IdentityUser>(userAddModel);
//设置用户标识
saveItem.IdentityUserId = NewId.NextSequentialGuid();
var @lock = _distributedLockProvider.CreateLock($"UserAccount");
using (await @lock.AcquireAsync())
{
saveItem.Code = await _userRepository.Select(t => t.Code).DefaultIfEmpty().MaxAsync() + 1;
saveItem.Code = await _identityUserRepository.Select(t => t.Code).DefaultIfEmpty().MaxAsync() + 1;
saveItem.UserCode = AppSettings.GetCodeStr(saveItem.Code, nameof(User));
saveItem.UserCode = AppSettings.GetCodeStr(saveItem.Code, nameof(IdentityUser));
if (saveItem.IsZhiZhun)
{
@ -584,29 +603,29 @@ namespace IRaCIS.Core.Application.Service
saveItem.Password = MD5Helper.Md5(IRCEmailPasswordHelper.GenerateRandomPassword(10));
var addRoleList = new List<User>();
foreach (var role in userAddModel.UserRoleList)
{
var addRole = _mapper.Map<User>(userAddModel);
addRole.UserTypeEnum = role.UserTypeEnum;
addRole.UserTypeId = role.UserTypeId;
addRoleList.Add(addRole);
}
saveItem.UserRoleList = addRoleList;
await _identityUserRepository.AddAsync(saveItem);
var success = await _identityUserRepository.SaveChangesAsync();
}
//处理多个角色
foreach (var item in userAddModel.UserRoleList)
{
var cloneUser = saveItem.Clone();
cloneUser.UserTypeId = item.UserTypeId;
cloneUser.UserTypeEnum = item.UserTypeEnum;
cloneUser.IsUserRoleDisabled = item.IsUserRoleDisabled;
await _userRepository.AddAsync(cloneUser);
}
var success = await _userRepository.SaveChangesAsync();
await _mailVerificationService.AddUserSendEmailAsync(saveItem.IdentityUserId, userAddModel.BaseUrl, userAddModel.RouteUrl);
await _mailVerificationService.AddUserSendEmailAsync(saveItem.Id, userAddModel.BaseUrl, userAddModel.RouteUrl);
return ResponseOutput.Ok(new UserAddedReturnDTO { Id = saveItem.IdentityUserId, UserCode = saveItem.UserCode });
return ResponseOutput.Ok(new UserAddedReturnDTO { Id = saveItem.Id, UserCode = saveItem.UserCode });
}
@ -619,60 +638,57 @@ namespace IRaCIS.Core.Application.Service
{
await VerifyUserNameAsync(model.IdentityUserId, model.UserName);
await VerifyUserEmailAsync(model.IdentityUserId, model.EMail);
await VerifyUserNameAsync(model.Id, model.UserName);
await VerifyUserEmailAsync(model.Id, model.EMail);
//await VerifyUserPhoneAsync(model.Id, model.UserTypeId, model.Phone);
var userRoleList = await _userRepository.Where(t => t.IdentityUserId == model.IdentityUserId, true).ToListAsync();
var user = await _identityUserRepository.Where(t => t.Id == model.Id, true).Include(t => t.UserRoleList).FirstOrDefaultAsync();
if (userRoleList.Any(t => t.Status != model.Status))
if (user == null) return Null404NotFound(user);
var existDBRoleList = user.UserRoleList;
if (user.Status != model.Status)
{
//await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, LoginUserId = _userInfo.Id, OptUserId = model.Id, OptType = model.Status == UserStateEnum.Enable ? UserOptType.AccountEnable : UserOptType.AccountLocked }, true);
}
if (model.IsZhiZhun)
_mapper.Map(model, user);
if (user.IsZhiZhun)
{
model.OrganizationName = _userInfo.IsEn_Us ? _systemEmailConfig.OrganizationName : _systemEmailConfig.OrganizationNameCN;
user.OrganizationName = _userInfo.IsEn_Us ? _systemEmailConfig.OrganizationName : _systemEmailConfig.OrganizationNameCN;
}
//await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, LoginUserId = _userInfo.Id, OptUserId = model.Id, OptType = UserOptType.UpdateUser });
await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, LoginUserId = _userInfo.Id, OptUserId = model.Id, OptType = UserOptType.UpdateUser });
foreach (var role in userRoleList)
//处理角色的添加、禁用
foreach (var role in model.UserRoleList)
{
role.UserName = model.UserName;
role.FirstName = model.FirstName;
role.LastName = model.LastName;
role.Phone = model.Phone;
role.EMail = model.EMail;
role.DepartmentName = model.DepartmentName;
role.OrganizationName = model.OrganizationName;
role.Sex = model.Sex;
role.Status = model.Status;
role.UserCode = model.UserCode;
role.PositionName = model.PositionName;
role.IsTestUser = model.IsTestUser;
role.IsZhiZhun = model.IsZhiZhun;
var find = existDBRoleList.FirstOrDefault(t => t.UserTypeEnum == role.UserTypeEnum && t.UserTypeId == role.UserTypeId);
role.IsUserRoleDisabled = model.UserRoleList.FirstOrDefault(t => t.UserTypeId == role.UserTypeId)?.IsUserRoleDisabled ?? false;
if (find != null)
{
find.IsUserRoleDisabled = false;
}
else
{
var addRole = _mapper.Map<User>(model);
addRole.UserTypeEnum = role.UserTypeEnum;
addRole.UserTypeId = role.UserTypeId;
existDBRoleList.Add(addRole);
}
}
var needAddRoleList = model.UserRoleList.Where(t => !userRoleList.Any(c => c.UserTypeId == t.UserTypeId)).ToList();
foreach (var addRole in needAddRoleList)
{
var cloneUser = userRoleList.FirstOrDefault().Clone();
cloneUser.UserTypeId = addRole.UserTypeId;
cloneUser.UserTypeEnum = addRole.UserTypeEnum;
cloneUser.IsUserRoleDisabled = addRole.IsUserRoleDisabled;
await _userRepository.AddAsync(cloneUser);
}
user.UserRoleList = existDBRoleList;
var success = await _userRepository.SaveChangesAsync();
@ -682,30 +698,30 @@ namespace IRaCIS.Core.Application.Service
/// <summary>
/// 禁用或者启用账户
/// </summary>
/// <param name="userId"></param>
/// <param name="state"></param>
/// <returns></returns>
///// <summary>
///// 禁用或者启用账户
///// </summary>
///// <param name="userId"></param>
///// <param name="state"></param>
///// <returns></returns>
[HttpPost("{userId:guid}/{state:int}")]
public async Task<IResponseOutput> UpdateUserState(Guid userId, UserStateEnum state)
{
//[HttpPost("{userId:guid}/{state:int}")]
//public async Task<IResponseOutput> UpdateUserState(Guid userId, UserStateEnum state)
//{
await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, LoginUserId = _userInfo.Id, OptUserId = userId, OptType = state == UserStateEnum.Enable ? UserOptType.AccountEnable : UserOptType.AccountLocked }, true);
// await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, LoginUserId = _userInfo.Id, OptUserId = userId, OptType = state == UserStateEnum.Enable ? UserOptType.AccountEnable : UserOptType.AccountLocked }, true);
var success = await _userRepository.BatchUpdateNoTrackingAsync(u => u.IdentityUserId == userId, t => new User
{
Status = state
});
return ResponseOutput.Result(success);
}
// var success = await _identityUserRepository.BatchUpdateNoTrackingAsync(u => u.IdentityUserId == userId, t => new User
// {
// Status = state
// });
// return ResponseOutput.Result(success);
//}
public async Task<UserBasicInfo> GetUserBasicInfo(Guid userId, string pwd)
{
var info = await _userRepository.Where(u => u.Id == userId && u.Password == pwd).ProjectTo<UserBasicInfo>(_mapper.ConfigurationProvider).FirstNotNullAsync();
var info = await _identityUserRepository.Where(u => u.Id == userId && u.Password == pwd).ProjectTo<UserBasicInfo>(_mapper.ConfigurationProvider).FirstNotNullAsync();
return info;
}
@ -719,7 +735,7 @@ namespace IRaCIS.Core.Application.Service
[AllowAnonymous]
public async Task<IResponseOutput> SendMFAEmail(Guid userId, UserMFAType mfaType)
{
var userInfo = await _userRepository.Where(u => u.Id == userId).Select(t => new { t.FullName, t.EMail }).FirstOrDefaultAsync();
var userInfo = await _identityUserRepository.Where(u => u.Id == userId).Select(t => new { t.FullName, t.EMail }).FirstOrDefaultAsync();
int verificationCode = new Random().Next(100000, 1000000);
@ -813,7 +829,7 @@ namespace IRaCIS.Core.Application.Service
var userLoginReturnModel = new LoginReturnDTO();
var loginUser = await _userRepository.Where(u => u.UserName.Equals(userName) && u.Password == password).ProjectTo<UserBasicInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
var loginUser = await _identityUserRepository.Where(u => u.UserName.Equals(userName) && u.Password == password).ProjectTo<UserBasicInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
if (loginUser == null)
{
@ -822,7 +838,7 @@ namespace IRaCIS.Core.Application.Service
failCount++;
await _fusionCache.SetAsync(cacheKey, failCount, TimeSpan.FromMinutes(lockoutMinutes));
var errorPwdUserId = await _userRepository.Where(u => u.UserName == userName).Select(t => t.Id).FirstOrDefaultAsync();
var errorPwdUserId = await _identityUserRepository.Where(u => u.UserName == userName).Select(t => t.Id).FirstOrDefaultAsync();
await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, LoginUserId = errorPwdUserId, OptUserId = errorPwdUserId, LoginFaildName = userName, LoginPassword = password, OptType = UserOptType.AccountOrPasswordError }, true);
@ -865,7 +881,7 @@ namespace IRaCIS.Core.Application.Service
if (loginUser.LastChangePassWordTime == null)
{
await _userRepository.BatchUpdateNoTrackingAsync(x => x.Id == loginUser.Id, x => new User()
await _identityUserRepository.BatchUpdateNoTrackingAsync(x => x.Id == loginUser.Id, x => new IdentityUser()
{
LastChangePassWordTime = DateTime.Now
@ -873,7 +889,7 @@ namespace IRaCIS.Core.Application.Service
}
await _userRepository.BatchUpdateNoTrackingAsync(x => x.Id == loginUser.Id, x => new User()
await _identityUserRepository.BatchUpdateNoTrackingAsync(x => x.Id == loginUser.Id, x => new IdentityUser()
{
LastLoginIP = iPRegion,
LastLoginTime = DateTime.Now
@ -973,7 +989,12 @@ namespace IRaCIS.Core.Application.Service
var userLoginReturnModel = new IRCLoginReturnDTO();
var loginUser = await _userRepository.Where(u => u.UserName.Equals(userName) && u.Password == password).ProjectTo<UserBasicInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
var loginUser = await _identityUserRepository.Where(u => u.UserName.Equals(userName) && u.Password == password).ProjectTo<UserBasicInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
if (loginUser == null)
{
loginUser = await _identityUserRepository.Where(u => u.UserName.Equals(userName) && u.Password == password).ProjectTo<UserBasicInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
}
if (loginUser == null)
{
@ -982,7 +1003,7 @@ namespace IRaCIS.Core.Application.Service
failCount++;
await _fusionCache.SetAsync(cacheKey, failCount, TimeSpan.FromMinutes(lockoutMinutes));
var errorPwdUserId = await _userRepository.Where(u => u.UserName == userName).Select(t => t.Id).FirstOrDefaultAsync();
var errorPwdUserId = await _identityUserRepository.Where(u => u.UserName == userName).Select(t => t.Id).FirstOrDefaultAsync();
//await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, LoginUserId = errorPwdUserId, OptUserId = errorPwdUserId, LoginFaildName = userName, LoginPassword = password, OptType = UserOptType.AccountOrPasswordError }, true);
@ -1025,7 +1046,7 @@ namespace IRaCIS.Core.Application.Service
if (loginUser.LastChangePassWordTime == null)
{
await _userRepository.BatchUpdateNoTrackingAsync(x => x.IdentityUserId == loginUser.IdentityUserId, x => new User()
await _identityUserRepository.BatchUpdateNoTrackingAsync(x => x.Id == loginUser.IdentityUserId, x => new IdentityUser()
{
LastChangePassWordTime = DateTime.Now
@ -1033,7 +1054,7 @@ namespace IRaCIS.Core.Application.Service
}
await _userRepository.BatchUpdateNoTrackingAsync(x => x.IdentityUserId == loginUser.IdentityUserId, x => new User()
await _identityUserRepository.BatchUpdateNoTrackingAsync(x => x.Id == loginUser.IdentityUserId, x => new IdentityUser()
{
LastLoginIP = iPRegion,
LastLoginTime = DateTime.Now
@ -1124,36 +1145,43 @@ namespace IRaCIS.Core.Application.Service
var selectUserInfo = _userRepository.Where(t => t.IdentityUserId == identityUserId && t.Id == userRoleId).FirstOrDefault();
//多账号没维护
if (await _userRepository.Where(t => t.IdentityUserId == identityUserId).AnyAsync(t => t.IsMutiAccountInfoConfirm == false))
{
//将信息维护为一致
await _userRepository.BatchUpdateNoTrackingAsync(t => t.IdentityUserId == identityUserId, u => new User()
{
Code = selectUserInfo.Code,
UserName = selectUserInfo.UserName,
FirstName = selectUserInfo.FirstName,
LastName = selectUserInfo.LastName,
Phone = selectUserInfo.Phone,
EMail = selectUserInfo.EMail,
DepartmentName = selectUserInfo.DepartmentName,
OrganizationName = selectUserInfo.OrganizationName,
IsFirstAdd = selectUserInfo.IsFirstAdd,
Sex = selectUserInfo.Sex,
Status = selectUserInfo.Status,
UserCode = selectUserInfo.UserCode,
Password = selectUserInfo.Password,
PasswordChanged = selectUserInfo.PasswordChanged,
LastChangePassWordTime = selectUserInfo.LastChangePassWordTime,
PositionName = selectUserInfo.PositionName,
IsTestUser = selectUserInfo.IsTestUser,
IsZhiZhun = selectUserInfo.IsZhiZhun,
AutoCutNextTask = selectUserInfo.AutoCutNextTask,
//DoctorId=selectUserInfo.DoctorId,
LastLoginIP = selectUserInfo.LastLoginIP,
LastLoginTime = selectUserInfo.LastLoginTime,
});
}
//if (!_identityUserRepository.Any(t => t.Id == identityUserId))
//{
// var identityUser = _mapper.Map<IdentityUser>(selectUserInfo);
// await _identityUserRepository.AddAsync(identityUser, true);
//}
////多账号没维护
//if (await _userRepository.Where(t => t.IdentityUserId == identityUserId).AnyAsync(t => t.IsMutiAccountInfoConfirm == false))
//{
// //将信息维护为一致
// await _userRepository.BatchUpdateNoTrackingAsync(t => t.IdentityUserId == identityUserId, u => new User()
// {
// Code = selectUserInfo.Code,
// UserName = selectUserInfo.UserName,
// FirstName = selectUserInfo.FirstName,
// LastName = selectUserInfo.LastName,
// Phone = selectUserInfo.Phone,
// EMail = selectUserInfo.EMail,
// DepartmentName = selectUserInfo.DepartmentName,
// OrganizationName = selectUserInfo.OrganizationName,
// IsFirstAdd = selectUserInfo.IsFirstAdd,
// Sex = selectUserInfo.Sex,
// Status = selectUserInfo.Status,
// UserCode = selectUserInfo.UserCode,
// Password = selectUserInfo.Password,
// PasswordChanged = selectUserInfo.PasswordChanged,
// LastChangePassWordTime = selectUserInfo.LastChangePassWordTime,
// PositionName = selectUserInfo.PositionName,
// IsTestUser = selectUserInfo.IsTestUser,
// IsZhiZhun = selectUserInfo.IsZhiZhun,
// AutoCutNextTask = selectUserInfo.AutoCutNextTask,
// //DoctorId=selectUserInfo.DoctorId,
// LastLoginIP = selectUserInfo.LastLoginIP,
// LastLoginTime = selectUserInfo.LastLoginTime,
// });
//}
return jwt;
//return new LoginSelectRoleReturn() { AccountList = accountList, JwtStr = jwt };

View File

@ -146,6 +146,9 @@ namespace IRaCIS.Core.Application.Service
CreateMap<User, UserAccountInfo>()
.ForMember(d => d.UserTypeShortName, c => c.MapFrom(t => t.UserTypeRole.UserTypeShortName));
CreateMap<IdentityUser, User>();
}
}

View File

@ -157,18 +157,24 @@ namespace IRaCIS.Core.Application.Service
/// 用户多账号,初次维护数据
/// </summary>
/// <returns></returns>
public async Task<IResponseOutput> UserMutiAccount()
public async Task<IResponseOutput> UserMutiAccount([FromServices] IRepository<IdentityUser> _identityUserRepository)
{
var userList = _userRepository.Where().Select(t => new { t.Id, t.EMail, t.DoctorId }).ToList();
var userList = _userRepository.Where().ToList();
foreach (var item in userList.GroupBy(t => t.EMail.Trim()))
{
var emailUserIdList = item.Select(t => t.Id).ToList();
var doctorId = item.Select(t => t.DoctorId).First();
var identityUserId = NewId.NextSequentialGuid();
await _userRepository.BatchUpdateNoTrackingAsync(t => emailUserIdList.Contains(t.Id), u => new User() { IdentityUserId = NewId.NextSequentialGuid(), DoctorId = doctorId });
var identityUser = _mapper.Map<IdentityUser>(item.FirstOrDefault());
identityUser.Id = identityUserId;
await _identityUserRepository.AddAsync(identityUser);
await _userRepository.BatchUpdateNoTrackingAsync(t => emailUserIdList.Contains(t.Id), u => new User() { IdentityUserId = identityUserId });
}
return ResponseOutput.Ok();

View File

@ -3,12 +3,18 @@ using IRaCIS.Core.Domain.Share;
namespace IRaCIS.Core.Domain.Models;
[Comment("后台 - 系统账户")]
[Comment("后台 - 系统账户角色关系表")]
[Table("User")]
public class User : BaseFullAuditEntity
{
#region 导航属性
[ForeignKey("IdentityUserId")]
[JsonIgnore]
public IdentityUser IdentityUser { get; set; }
[JsonIgnore]
[ForeignKey("UserTypeId")]
public UserType UserTypeRole { get; set; }
@ -56,15 +62,10 @@ public class User : BaseFullAuditEntity
public string PositionName { get; set; }
#endregion
[Comment("自动切换下一个任务")]
public bool AutoCutNextTask { get; set; }
public string DepartmentName { get; set; } = null!;
[Comment("医生生成账号后,会有值")]
public Guid? DoctorId { get; set; }
public string DepartmentName { get; set; }
[Comment("首次登录需要修改密码")]
public bool IsFirstAdd { get; set; } = true;
@ -82,21 +83,89 @@ public class User : BaseFullAuditEntity
public DateTime? LastLoginTime { get; set; }
#endregion
[Comment("医生生成账号后,会有值")]
public Guid? DoctorId { get; set; }
public UserTypeEnum UserTypeEnum { get; set; }
public Guid UserTypeId { get; set; }
#region 新增字段
[Comment("后续删除")]
public bool SuperAdmin { get; set; }
public bool IsUserRoleDisabled { get; set; }
public Guid IdentityUserId { get; set; }
[Comment("多账号信息是否已经确认")]
public bool IsMutiAccountInfoConfirm { get; set; }
public bool IsUserRoleDisabled { get; set; }
#endregion
}
[Comment("后台 - 系统真实账户表")]
[Table("IdentityUser")]
public class IdentityUser: BaseFullAuditEntity
{
public List<User> UserRoleList { get; set; } = new List<User>();
[Projectable]
public string FullName => LastName + " / " + FirstName;
#region 用户信息
public int Code { get; set; }
public string UserCode { get; set; }
public string UserName { get; set; }
public string EMail { get; set; }
[StringLength(1000)]
public string EmailToken { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Password { get; set; }
public bool PasswordChanged { get; set; }
public string Phone { get; set; }
public int? Sex { get; set; }
public UserStateEnum Status { get; set; } = UserStateEnum.Enable;
public string OrganizationName { get; set; }
public string PositionName { get; set; }
[Comment("自动切换下一个任务")]
public bool AutoCutNextTask { get; set; }
public string DepartmentName { get; set; }
[Comment("首次登录需要修改密码")]
public bool IsFirstAdd { get; set; } = true;
public bool IsTestUser { get; set; }
[Comment("内部用户 外部用户")]
public bool IsZhiZhun { get; set; }
[Comment("上一次修改密码的时间")]
public DateTime? LastChangePassWordTime { get; set; }
public string LastLoginIP { get; set; }
public DateTime? LastLoginTime { get; set; }
#endregion
}

View File

@ -630,7 +630,7 @@ public class IRaCISDBContext : DbContext
public virtual DbSet<EventStoreRecord> EventStoreRecord { get; set; }
public virtual DbSet<IdentityUser> IdentityUser { get; set; }
}

View File

@ -89,4 +89,17 @@ namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
}
}
public class IdentityUserConfigration : IEntityTypeConfiguration<IdentityUser>
{
//当一个实体,针对同一个类,有两个一对一导航属性,但是是不同的外键,一个外键是一对一,一个是一对多,那么需要显示配置一对多的关系
public void Configure(EntityTypeBuilder<IdentityUser> builder)
{
builder.HasMany(s => s.UserRoleList)
.WithOne(t => t.IdentityUser)
.HasForeignKey(s => s.IdentityUserId);
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,132 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace IRaCIS.Core.Infra.EFCore.Migrations
{
/// <inheritdoc />
public partial class AddIdentityUser : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "IsMutiAccountInfoConfirm",
table: "User");
migrationBuilder.AlterTable(
name: "User",
comment: "后台 - 系统账户角色关系表",
oldComment: "后台 - 系统账户");
migrationBuilder.AlterColumn<bool>(
name: "SuperAdmin",
table: "User",
type: "bit",
nullable: false,
comment: "后续删除",
oldClrType: typeof(bool),
oldType: "bit");
migrationBuilder.CreateTable(
name: "IdentityUser",
columns: table => new
{
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
Code = table.Column<int>(type: "int", nullable: false),
UserCode = table.Column<string>(type: "nvarchar(400)", maxLength: 400, nullable: false),
UserName = table.Column<string>(type: "nvarchar(400)", maxLength: 400, nullable: false),
EMail = table.Column<string>(type: "nvarchar(400)", maxLength: 400, nullable: false),
EmailToken = table.Column<string>(type: "nvarchar(1000)", maxLength: 1000, nullable: false),
FirstName = table.Column<string>(type: "nvarchar(400)", maxLength: 400, nullable: false),
LastName = table.Column<string>(type: "nvarchar(400)", maxLength: 400, nullable: false),
Password = table.Column<string>(type: "nvarchar(400)", maxLength: 400, nullable: false),
PasswordChanged = table.Column<bool>(type: "bit", nullable: false),
Phone = table.Column<string>(type: "nvarchar(400)", maxLength: 400, nullable: false),
Sex = table.Column<int>(type: "int", nullable: true),
Status = table.Column<int>(type: "int", nullable: false),
OrganizationName = table.Column<string>(type: "nvarchar(400)", maxLength: 400, nullable: false),
PositionName = table.Column<string>(type: "nvarchar(400)", maxLength: 400, nullable: false),
AutoCutNextTask = table.Column<bool>(type: "bit", nullable: false, comment: "自动切换下一个任务"),
DepartmentName = table.Column<string>(type: "nvarchar(400)", maxLength: 400, nullable: false),
IsFirstAdd = table.Column<bool>(type: "bit", nullable: false, comment: "首次登录需要修改密码"),
IsTestUser = table.Column<bool>(type: "bit", nullable: false),
IsZhiZhun = table.Column<bool>(type: "bit", nullable: false, comment: "内部用户 外部用户"),
LastChangePassWordTime = table.Column<DateTime>(type: "datetime2", nullable: true, comment: "上一次修改密码的时间"),
LastLoginIP = table.Column<string>(type: "nvarchar(400)", maxLength: 400, nullable: false),
LastLoginTime = table.Column<DateTime>(type: "datetime2", nullable: true),
CreateUserId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
CreateTime = table.Column<DateTime>(type: "datetime2", nullable: false),
UpdateUserId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
UpdateTime = table.Column<DateTime>(type: "datetime2", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_IdentityUser", x => x.Id);
table.ForeignKey(
name: "FK_IdentityUser_User_CreateUserId",
column: x => x.CreateUserId,
principalTable: "User",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
},
comment: "后台 - 系统真实账户表");
migrationBuilder.CreateIndex(
name: "IX_User_IdentityUserId",
table: "User",
column: "IdentityUserId");
migrationBuilder.CreateIndex(
name: "IX_IdentityUser_CreateUserId",
table: "IdentityUser",
column: "CreateUserId");
migrationBuilder.AddForeignKey(
name: "FK_User_IdentityUser_IdentityUserId",
table: "User",
column: "IdentityUserId",
principalTable: "IdentityUser",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_User_IdentityUser_IdentityUserId",
table: "User");
migrationBuilder.DropTable(
name: "IdentityUser");
migrationBuilder.DropIndex(
name: "IX_User_IdentityUserId",
table: "User");
migrationBuilder.AlterTable(
name: "User",
comment: "后台 - 系统账户",
oldComment: "后台 - 系统账户角色关系表");
migrationBuilder.AlterColumn<bool>(
name: "SuperAdmin",
table: "User",
type: "bit",
nullable: false,
oldClrType: typeof(bool),
oldType: "bit",
oldComment: "后续删除");
migrationBuilder.AddColumn<bool>(
name: "IsMutiAccountInfoConfirm",
table: "User",
type: "bit",
nullable: false,
defaultValue: false,
comment: "多账号信息是否已经确认");
}
}
}

View File

@ -2697,6 +2697,127 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
});
});
modelBuilder.Entity("IRaCIS.Core.Domain.Models.IdentityUser", b =>
{
b.Property<Guid>("Id")
.HasColumnType("uniqueidentifier");
b.Property<bool>("AutoCutNextTask")
.HasColumnType("bit")
.HasComment("自动切换下一个任务");
b.Property<int>("Code")
.HasColumnType("int");
b.Property<DateTime>("CreateTime")
.HasColumnType("datetime2");
b.Property<Guid>("CreateUserId")
.HasColumnType("uniqueidentifier");
b.Property<string>("DepartmentName")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("nvarchar(400)");
b.Property<string>("EMail")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("nvarchar(400)");
b.Property<string>("EmailToken")
.IsRequired()
.HasMaxLength(1000)
.HasColumnType("nvarchar(1000)");
b.Property<string>("FirstName")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("nvarchar(400)");
b.Property<bool>("IsFirstAdd")
.HasColumnType("bit")
.HasComment("首次登录需要修改密码");
b.Property<bool>("IsTestUser")
.HasColumnType("bit");
b.Property<bool>("IsZhiZhun")
.HasColumnType("bit")
.HasComment("内部用户 外部用户");
b.Property<DateTime?>("LastChangePassWordTime")
.HasColumnType("datetime2")
.HasComment("上一次修改密码的时间");
b.Property<string>("LastLoginIP")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("nvarchar(400)");
b.Property<DateTime?>("LastLoginTime")
.HasColumnType("datetime2");
b.Property<string>("LastName")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("nvarchar(400)");
b.Property<string>("OrganizationName")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("nvarchar(400)");
b.Property<string>("Password")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("nvarchar(400)");
b.Property<bool>("PasswordChanged")
.HasColumnType("bit");
b.Property<string>("Phone")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("nvarchar(400)");
b.Property<string>("PositionName")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("nvarchar(400)");
b.Property<int?>("Sex")
.HasColumnType("int");
b.Property<int>("Status")
.HasColumnType("int");
b.Property<DateTime>("UpdateTime")
.HasColumnType("datetime2");
b.Property<Guid>("UpdateUserId")
.HasColumnType("uniqueidentifier");
b.Property<string>("UserCode")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("nvarchar(400)");
b.Property<string>("UserName")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("nvarchar(400)");
b.HasKey("Id");
b.HasIndex("CreateUserId");
b.ToTable("IdentityUser", t =>
{
t.HasComment("后台 - 系统真实账户表");
});
});
modelBuilder.Entity("IRaCIS.Core.Domain.Models.ImageShare", b =>
{
b.Property<Guid>("Id")
@ -12728,10 +12849,6 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
.HasColumnType("bit")
.HasComment("首次登录需要修改密码");
b.Property<bool>("IsMutiAccountInfoConfirm")
.HasColumnType("bit")
.HasComment("多账号信息是否已经确认");
b.Property<bool>("IsTestUser")
.HasColumnType("bit");
@ -12789,7 +12906,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
.HasColumnType("int");
b.Property<bool>("SuperAdmin")
.HasColumnType("bit");
.HasColumnType("bit")
.HasComment("后续删除");
b.Property<DateTime>("UpdateTime")
.HasColumnType("datetime2");
@ -12821,11 +12939,13 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
.IsUnique()
.HasFilter("[DoctorId] IS NOT NULL");
b.HasIndex("IdentityUserId");
b.HasIndex("UserTypeId");
b.ToTable("User", t =>
{
t.HasComment("后台 - 系统账户");
t.HasComment("后台 - 系统账户角色关系表");
});
});
@ -14483,6 +14603,17 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.Navigation("Site");
});
modelBuilder.Entity("IRaCIS.Core.Domain.Models.IdentityUser", b =>
{
b.HasOne("IRaCIS.Core.Domain.Models.User", "CreateUser")
.WithMany()
.HasForeignKey("CreateUserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("CreateUser");
});
modelBuilder.Entity("IRaCIS.Core.Domain.Models.InspectionFile", b =>
{
b.HasOne("IRaCIS.Core.Domain.Models.User", "CreateUser")
@ -17476,6 +17607,12 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
.WithOne("User")
.HasForeignKey("IRaCIS.Core.Domain.Models.User", "DoctorId");
b.HasOne("IRaCIS.Core.Domain.Models.IdentityUser", "IdentityUser")
.WithMany("UserRoleList")
.HasForeignKey("IdentityUserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("IRaCIS.Core.Domain.Models.UserType", "UserTypeRole")
.WithMany("UserList")
.HasForeignKey("UserTypeId")
@ -17484,6 +17621,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.Navigation("CreateUser");
b.Navigation("IdentityUser");
b.Navigation("UserTypeRole");
});
@ -17914,6 +18053,11 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.Navigation("DoctorList");
});
modelBuilder.Entity("IRaCIS.Core.Domain.Models.IdentityUser", b =>
{
b.Navigation("UserRoleList");
});
modelBuilder.Entity("IRaCIS.Core.Domain.Models.Menu", b =>
{
b.Navigation("UserTypeMenuList");