添加新的用户表提交
continuous-integration/drone/push Build is pending
Details
continuous-integration/drone/push Build is pending
Details
parent
f7519b2095
commit
dc32df27ec
|
@ -10,5 +10,6 @@ global using Microsoft.Extensions.Localization;
|
||||||
global using AutoMapper;
|
global using AutoMapper;
|
||||||
global using IRaCIS.Core.Domain.Share;
|
global using IRaCIS.Core.Domain.Share;
|
||||||
global using IRaCIS.Core.Application.BusinessFilter;
|
global using IRaCIS.Core.Application.BusinessFilter;
|
||||||
|
global using IdentityUser = IRaCIS.Core.Domain.Models.IdentityUser;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2269,14 +2269,6 @@
|
||||||
<param name="model"></param>
|
<param name="model"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</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)">
|
<member name="M:IRaCIS.Core.Application.Service.UserService.SendMFAEmail(System.Guid,IRaCIS.Core.Domain.Share.UserMFAType)">
|
||||||
<summary>
|
<summary>
|
||||||
发送MFA 验证邮件
|
发送MFA 验证邮件
|
||||||
|
@ -2313,7 +2305,7 @@
|
||||||
<summary>
|
<summary>
|
||||||
验证密码成功后,选定角色,然后获取当前角色的Token
|
验证密码成功后,选定角色,然后获取当前角色的Token
|
||||||
</summary>
|
</summary>
|
||||||
<param name="userTypeId"></param>
|
<param name="userRoleId"></param>
|
||||||
<param name="_tokenService"></param>
|
<param name="_tokenService"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
<exception cref="T:IRaCIS.Core.Infrastructure.BusinessValidationFailedException"></exception>
|
<exception cref="T:IRaCIS.Core.Infrastructure.BusinessValidationFailedException"></exception>
|
||||||
|
@ -13125,7 +13117,7 @@
|
||||||
<param name="_readingConsistentClinicalDataRepository"></param>
|
<param name="_readingConsistentClinicalDataRepository"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</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>
|
||||||
用户多账号,初次维护数据
|
用户多账号,初次维护数据
|
||||||
</summary>
|
</summary>
|
||||||
|
|
|
@ -160,7 +160,9 @@ namespace IRaCIS.Application.Contracts
|
||||||
{
|
{
|
||||||
//public bool CanEditUserType { get; set; }
|
//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; }
|
public List<UserAccountInfo> AccountList { get; set; }
|
||||||
}
|
}
|
||||||
|
@ -205,7 +207,7 @@ namespace IRaCIS.Application.Contracts
|
||||||
|
|
||||||
public class UserCommand : UserInfo
|
public class UserCommand : UserInfo
|
||||||
{
|
{
|
||||||
public Guid? IdentityUserId { get; set; }
|
public Guid? Id { get; set; }
|
||||||
|
|
||||||
public List<UserAddUserType> UserRoleList { get; set; }
|
public List<UserAddUserType> UserRoleList { get; set; }
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
Task<IResponseOutput> ResetPassword(Guid userId);
|
Task<IResponseOutput> ResetPassword(Guid userId);
|
||||||
|
|
||||||
Task<IResponseOutput> UpdateUser(UserCommand model);
|
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> SendVerificationCode(string emailOrPhone, VerifyType verificationType, bool isReviewer = false);
|
||||||
//Task<IResponseOutput> SetNewPassword(ResetPasswordCommand resetPwdModel);
|
//Task<IResponseOutput> SetNewPassword(ResetPasswordCommand resetPwdModel);
|
||||||
|
|
|
@ -17,6 +17,7 @@ using Org.BouncyCastle.Utilities.Encoders;
|
||||||
using Panda.DynamicWebApi.Attributes;
|
using Panda.DynamicWebApi.Attributes;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using ZiggyCreatures.Caching.Fusion;
|
using ZiggyCreatures.Caching.Fusion;
|
||||||
|
|
||||||
using LoginReturnDTO = IRaCIS.Application.Contracts.LoginReturnDTO;
|
using LoginReturnDTO = IRaCIS.Application.Contracts.LoginReturnDTO;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.Service
|
namespace IRaCIS.Core.Application.Service
|
||||||
|
@ -32,6 +33,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
IRepository<Trial> _trialRepository,
|
IRepository<Trial> _trialRepository,
|
||||||
IOptionsMonitor<ServiceVerifyConfigOption> _verifyConfig,
|
IOptionsMonitor<ServiceVerifyConfigOption> _verifyConfig,
|
||||||
IOptionsMonitor<SystemEmailSendConfig> systemEmailConfig,
|
IOptionsMonitor<SystemEmailSendConfig> systemEmailConfig,
|
||||||
|
IRepository<IdentityUser> _identityUserRepository,
|
||||||
|
|
||||||
ISearcher _searcher, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer, IFusionCache _fusionCache) : BaseService, IUserService
|
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)
|
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"]);
|
throw new BusinessValidationFailedException(_localizer["User_UsernameExist"]);
|
||||||
|
@ -49,7 +51,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
private async Task VerifyUserPhoneAsync(Guid? identityUserId, string phone)
|
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"]);
|
throw new BusinessValidationFailedException(_localizer["User_PhoneDup"]);
|
||||||
|
@ -59,7 +61,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
private async Task VerifyUserEmailAsync(Guid? identityUserId, string email)
|
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"]);
|
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)
|
if (oldPwd != null && dbUser.Password != oldPwd)
|
||||||
{
|
{
|
||||||
|
@ -104,7 +106,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
if (oldPwd == null)
|
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())
|
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,
|
LastChangePassWordTime = DateTime.Now,
|
||||||
});
|
});
|
||||||
|
@ -192,7 +194,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
await VerifyUserEmailAsync(_userInfo.IdentityUserId, newEmail);
|
await VerifyUserEmailAsync(_userInfo.IdentityUserId, newEmail);
|
||||||
|
|
||||||
|
|
||||||
await _userRepository.UpdatePartialFromQueryAsync(_userInfo.IdentityUserId, u => new User()
|
await _identityUserRepository.UpdatePartialFromQueryAsync(_userInfo.IdentityUserId, u => new IdentityUser()
|
||||||
{
|
{
|
||||||
EMail = newEmail
|
EMail = newEmail
|
||||||
});
|
});
|
||||||
|
@ -215,7 +217,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
await VerifyUserPhoneAsync(_userInfo.IdentityUserId, newPhone);
|
await VerifyUserPhoneAsync(_userInfo.IdentityUserId, newPhone);
|
||||||
|
|
||||||
await _userRepository.UpdatePartialFromQueryAsync(_userInfo.IdentityUserId, u => new User()
|
await _identityUserRepository.UpdatePartialFromQueryAsync(_userInfo.IdentityUserId, u => new IdentityUser()
|
||||||
{
|
{
|
||||||
Phone = newPhone
|
Phone = newPhone
|
||||||
});
|
});
|
||||||
|
@ -232,7 +234,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
await VerifyUserNameAsync(_userInfo.IdentityUserId, newUserName);
|
await VerifyUserNameAsync(_userInfo.IdentityUserId, newUserName);
|
||||||
|
|
||||||
|
|
||||||
await _userRepository.UpdatePartialFromQueryAsync(_userInfo.IdentityUserId, u => new User()
|
await _identityUserRepository.UpdatePartialFromQueryAsync(_userInfo.IdentityUserId, u => new IdentityUser()
|
||||||
{
|
{
|
||||||
UserName = newUserName
|
UserName = newUserName
|
||||||
});
|
});
|
||||||
|
@ -253,7 +255,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
await VerifyUserNameAsync(_userInfo.IdentityUserId, newUserName);
|
await VerifyUserNameAsync(_userInfo.IdentityUserId, newUserName);
|
||||||
|
|
||||||
await _userRepository.UpdatePartialFromQueryAsync(_userInfo.IdentityUserId, u => new User()
|
await _identityUserRepository.UpdatePartialFromQueryAsync(_userInfo.IdentityUserId, u => new IdentityUser()
|
||||||
{
|
{
|
||||||
UserName = newUserName,
|
UserName = newUserName,
|
||||||
|
|
||||||
|
@ -286,13 +288,13 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
await _mailVerificationService.AdminResetPwdSendEmailAsync(identityUserId, pwd);
|
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),
|
Password = MD5Helper.Md5(pwd),
|
||||||
IsFirstAdd = true
|
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));
|
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)
|
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);
|
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,
|
Password = newPwd,
|
||||||
IsFirstAdd = false
|
IsFirstAdd = false
|
||||||
|
@ -431,14 +433,14 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
await VerifyUserNameAsync(_userInfo.Id, editPwModel.NewUserName);
|
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,
|
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,
|
Password = editPwModel.NewPassWord,
|
||||||
IsFirstAdd = false
|
IsFirstAdd = false
|
||||||
|
@ -462,7 +464,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<PageOutput<UserListDTO>> GetUserList(UserListQueryDTO inQuery)
|
public async Task<PageOutput<UserListDTO>> GetUserList(UserListQueryDTO inQuery)
|
||||||
{
|
{
|
||||||
var userQueryable = _userRepository.Where(x => x.UserTypeEnum != UserTypeEnum.SuperAdmin)
|
|
||||||
|
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.UserName), t => t.UserName.Contains(inQuery.UserName))
|
||||||
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.RealName), t => t.FullName.Contains(inQuery.RealName))
|
.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.Phone), t => t.Phone.Contains(inQuery.Phone))
|
||||||
|
@ -472,35 +475,52 @@ namespace IRaCIS.Core.Application.Service
|
||||||
.WhereIf(inQuery.EndCreateTime != null, t => t.CreateTime <= inQuery.EndCreateTime)
|
.WhereIf(inQuery.EndCreateTime != null, t => t.CreateTime <= inQuery.EndCreateTime)
|
||||||
.WhereIf(inQuery.BeginLastLoginTime != null, t => t.LastLoginTime >= inQuery.BeginLastLoginTime)
|
.WhereIf(inQuery.BeginLastLoginTime != null, t => t.LastLoginTime >= inQuery.BeginLastLoginTime)
|
||||||
.WhereIf(inQuery.EndLastLoginTime != null, t => t.LastLoginTime <= inQuery.EndLastLoginTime)
|
.WhereIf(inQuery.EndLastLoginTime != null, t => t.LastLoginTime <= inQuery.EndLastLoginTime)
|
||||||
.WhereIf(inQuery.UserType != null, t => t.UserTypeId == inQuery.UserType)
|
.WhereIf(inQuery.UserType != null, t => t.UserRoleList.Any(t => t.UserTypeId == inQuery.UserType))
|
||||||
.WhereIf(inQuery.UserState != null, t => t.Status == inQuery.UserState)
|
.WhereIf(inQuery.UserState != null, t => t.Status == inQuery.UserState)
|
||||||
.WhereIf(inQuery.IsTestUser != null, t => t.IsTestUser == inQuery.IsTestUser)
|
.WhereIf(inQuery.IsTestUser != null, t => t.IsTestUser == inQuery.IsTestUser)
|
||||||
.WhereIf(inQuery.IsZhiZhun != null, t => t.IsZhiZhun == inQuery.IsZhiZhun)
|
.WhereIf(inQuery.IsZhiZhun != null, t => t.IsZhiZhun == inQuery.IsZhiZhun)
|
||||||
.GroupBy(t => t.IdentityUserId).Select(g => new UserListDTO()
|
.ProjectTo<UserListDTO>(_mapper.ConfigurationProvider);
|
||||||
{
|
|
||||||
IdentityUserId = g.Key,
|
|
||||||
UserRoleList = g.Select(c => new UserAddUserType()
|
|
||||||
{
|
|
||||||
UserTypeEnum = c.UserTypeEnum,
|
|
||||||
UserTypeId = c.UserTypeId,
|
|
||||||
}).ToList(),
|
|
||||||
|
|
||||||
UserCode = g.FirstOrDefault().UserCode,
|
|
||||||
DepartmentName = g.FirstOrDefault().DepartmentName,
|
//var userQueryable = _identityUserRepository.Where(x => x.UserTypeEnum != UserTypeEnum.SuperAdmin)
|
||||||
CreateTime = g.FirstOrDefault().CreateTime,
|
// .WhereIf(!string.IsNullOrWhiteSpace(inQuery.UserName), t => t.UserName.Contains(inQuery.UserName))
|
||||||
EMail = g.FirstOrDefault().EMail,
|
// .WhereIf(!string.IsNullOrWhiteSpace(inQuery.RealName), t => t.FullName.Contains(inQuery.RealName))
|
||||||
FirstName = g.FirstOrDefault().FirstName,
|
// .WhereIf(!string.IsNullOrWhiteSpace(inQuery.Phone), t => t.Phone.Contains(inQuery.Phone))
|
||||||
IsTestUser = g.FirstOrDefault().IsTestUser,
|
// .WhereIf(!string.IsNullOrWhiteSpace(inQuery.OrganizationName), t => t.OrganizationName.Contains(inQuery.OrganizationName))
|
||||||
IsZhiZhun = g.FirstOrDefault().IsZhiZhun,
|
// .WhereIf(!string.IsNullOrWhiteSpace(inQuery.EMail), t => t.EMail.Contains(inQuery.EMail))
|
||||||
LastName = g.FirstOrDefault().LastName,
|
// .WhereIf(inQuery.BeginCreateTime != null, t => t.CreateTime >= inQuery.BeginCreateTime)
|
||||||
OrganizationName = g.FirstOrDefault().OrganizationName,
|
// .WhereIf(inQuery.EndCreateTime != null, t => t.CreateTime <= inQuery.EndCreateTime)
|
||||||
FullName = g.FirstOrDefault().FullName,
|
// .WhereIf(inQuery.BeginLastLoginTime != null, t => t.LastLoginTime >= inQuery.BeginLastLoginTime)
|
||||||
Phone = g.FirstOrDefault().Phone,
|
// .WhereIf(inQuery.EndLastLoginTime != null, t => t.LastLoginTime <= inQuery.EndLastLoginTime)
|
||||||
PositionName = g.FirstOrDefault().PositionName,
|
// .WhereIf(inQuery.UserType != null, t => t.UserTypeId == inQuery.UserType)
|
||||||
Sex = g.FirstOrDefault().Sex,
|
// .WhereIf(inQuery.UserState != null, t => t.Status == inQuery.UserState)
|
||||||
Status = g.FirstOrDefault().Status,
|
// .WhereIf(inQuery.IsTestUser != null, t => t.IsTestUser == inQuery.IsTestUser)
|
||||||
UserName = g.FirstOrDefault().UserName,
|
// .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);
|
return await userQueryable.ToPagedListAsync(inQuery);
|
||||||
|
|
||||||
|
@ -513,7 +533,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
public async Task<UserDetailDTO> GetUser()
|
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();
|
var userRole = await userQuery.FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
@ -561,18 +581,17 @@ namespace IRaCIS.Core.Application.Service
|
||||||
//await VerifyUserPhoneAsync(null, userAddModel.UserTypeId, userAddModel.Phone);
|
//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");
|
var @lock = _distributedLockProvider.CreateLock($"UserAccount");
|
||||||
|
|
||||||
using (await @lock.AcquireAsync())
|
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)
|
if (saveItem.IsZhiZhun)
|
||||||
{
|
{
|
||||||
|
@ -584,29 +603,29 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
saveItem.Password = MD5Helper.Md5(IRCEmailPasswordHelper.GenerateRandomPassword(10));
|
saveItem.Password = MD5Helper.Md5(IRCEmailPasswordHelper.GenerateRandomPassword(10));
|
||||||
|
|
||||||
|
var addRoleList = new List<User>();
|
||||||
|
|
||||||
}
|
foreach (var role in userAddModel.UserRoleList)
|
||||||
|
|
||||||
//处理多个角色
|
|
||||||
|
|
||||||
foreach (var item in userAddModel.UserRoleList)
|
|
||||||
{
|
{
|
||||||
var cloneUser = saveItem.Clone();
|
var addRole = _mapper.Map<User>(userAddModel);
|
||||||
|
|
||||||
cloneUser.UserTypeId = item.UserTypeId;
|
addRole.UserTypeEnum = role.UserTypeEnum;
|
||||||
cloneUser.UserTypeEnum = item.UserTypeEnum;
|
addRole.UserTypeId = role.UserTypeId;
|
||||||
cloneUser.IsUserRoleDisabled = item.IsUserRoleDisabled;
|
|
||||||
|
|
||||||
await _userRepository.AddAsync(cloneUser);
|
|
||||||
|
|
||||||
|
addRoleList.Add(addRole);
|
||||||
}
|
}
|
||||||
|
|
||||||
var success = await _userRepository.SaveChangesAsync();
|
saveItem.UserRoleList = addRoleList;
|
||||||
|
|
||||||
await _mailVerificationService.AddUserSendEmailAsync(saveItem.IdentityUserId, userAddModel.BaseUrl, userAddModel.RouteUrl);
|
await _identityUserRepository.AddAsync(saveItem);
|
||||||
|
|
||||||
|
var success = await _identityUserRepository.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
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);
|
//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);
|
//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;
|
var find = existDBRoleList.FirstOrDefault(t => t.UserTypeEnum == role.UserTypeEnum && t.UserTypeId == role.UserTypeId);
|
||||||
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;
|
|
||||||
|
|
||||||
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();
|
user.UserRoleList = existDBRoleList;
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var success = await _userRepository.SaveChangesAsync();
|
var success = await _userRepository.SaveChangesAsync();
|
||||||
|
|
||||||
|
@ -682,30 +698,30 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
///// <summary>
|
||||||
/// 禁用或者启用账户
|
///// 禁用或者启用账户
|
||||||
/// </summary>
|
///// </summary>
|
||||||
/// <param name="userId"></param>
|
///// <param name="userId"></param>
|
||||||
/// <param name="state"></param>
|
///// <param name="state"></param>
|
||||||
/// <returns></returns>
|
///// <returns></returns>
|
||||||
|
|
||||||
[HttpPost("{userId:guid}/{state:int}")]
|
//[HttpPost("{userId:guid}/{state:int}")]
|
||||||
public async Task<IResponseOutput> UpdateUserState(Guid userId, UserStateEnum state)
|
//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
|
// var success = await _identityUserRepository.BatchUpdateNoTrackingAsync(u => u.IdentityUserId == userId, t => new User
|
||||||
{
|
// {
|
||||||
Status = state
|
// Status = state
|
||||||
});
|
// });
|
||||||
return ResponseOutput.Result(success);
|
// return ResponseOutput.Result(success);
|
||||||
}
|
//}
|
||||||
|
|
||||||
|
|
||||||
public async Task<UserBasicInfo> GetUserBasicInfo(Guid userId, string pwd)
|
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;
|
return info;
|
||||||
}
|
}
|
||||||
|
@ -719,7 +735,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
[AllowAnonymous]
|
[AllowAnonymous]
|
||||||
public async Task<IResponseOutput> SendMFAEmail(Guid userId, UserMFAType mfaType)
|
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);
|
int verificationCode = new Random().Next(100000, 1000000);
|
||||||
|
|
||||||
|
@ -813,7 +829,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
var userLoginReturnModel = new LoginReturnDTO();
|
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)
|
if (loginUser == null)
|
||||||
{
|
{
|
||||||
|
@ -822,7 +838,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
failCount++;
|
failCount++;
|
||||||
await _fusionCache.SetAsync(cacheKey, failCount, TimeSpan.FromMinutes(lockoutMinutes));
|
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);
|
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)
|
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
|
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,
|
LastLoginIP = iPRegion,
|
||||||
LastLoginTime = DateTime.Now
|
LastLoginTime = DateTime.Now
|
||||||
|
@ -973,7 +989,12 @@ namespace IRaCIS.Core.Application.Service
|
||||||
var userLoginReturnModel = new IRCLoginReturnDTO();
|
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)
|
if (loginUser == null)
|
||||||
{
|
{
|
||||||
|
@ -982,7 +1003,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
failCount++;
|
failCount++;
|
||||||
await _fusionCache.SetAsync(cacheKey, failCount, TimeSpan.FromMinutes(lockoutMinutes));
|
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);
|
//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)
|
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
|
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,
|
LastLoginIP = iPRegion,
|
||||||
LastLoginTime = DateTime.Now
|
LastLoginTime = DateTime.Now
|
||||||
|
@ -1124,36 +1145,43 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
var selectUserInfo = _userRepository.Where(t => t.IdentityUserId == identityUserId && t.Id == userRoleId).FirstOrDefault();
|
var selectUserInfo = _userRepository.Where(t => t.IdentityUserId == identityUserId && t.Id == userRoleId).FirstOrDefault();
|
||||||
|
|
||||||
//多账号没维护
|
//if (!_identityUserRepository.Any(t => t.Id == identityUserId))
|
||||||
if (await _userRepository.Where(t => t.IdentityUserId == identityUserId).AnyAsync(t => t.IsMutiAccountInfoConfirm == false))
|
//{
|
||||||
{
|
// var identityUser = _mapper.Map<IdentityUser>(selectUserInfo);
|
||||||
//将信息维护为一致
|
|
||||||
await _userRepository.BatchUpdateNoTrackingAsync(t => t.IdentityUserId == identityUserId, u => new User()
|
// await _identityUserRepository.AddAsync(identityUser, true);
|
||||||
{
|
//}
|
||||||
Code = selectUserInfo.Code,
|
|
||||||
UserName = selectUserInfo.UserName,
|
////多账号没维护
|
||||||
FirstName = selectUserInfo.FirstName,
|
//if (await _userRepository.Where(t => t.IdentityUserId == identityUserId).AnyAsync(t => t.IsMutiAccountInfoConfirm == false))
|
||||||
LastName = selectUserInfo.LastName,
|
//{
|
||||||
Phone = selectUserInfo.Phone,
|
// //将信息维护为一致
|
||||||
EMail = selectUserInfo.EMail,
|
// await _userRepository.BatchUpdateNoTrackingAsync(t => t.IdentityUserId == identityUserId, u => new User()
|
||||||
DepartmentName = selectUserInfo.DepartmentName,
|
// {
|
||||||
OrganizationName = selectUserInfo.OrganizationName,
|
// Code = selectUserInfo.Code,
|
||||||
IsFirstAdd = selectUserInfo.IsFirstAdd,
|
// UserName = selectUserInfo.UserName,
|
||||||
Sex = selectUserInfo.Sex,
|
// FirstName = selectUserInfo.FirstName,
|
||||||
Status = selectUserInfo.Status,
|
// LastName = selectUserInfo.LastName,
|
||||||
UserCode = selectUserInfo.UserCode,
|
// Phone = selectUserInfo.Phone,
|
||||||
Password = selectUserInfo.Password,
|
// EMail = selectUserInfo.EMail,
|
||||||
PasswordChanged = selectUserInfo.PasswordChanged,
|
// DepartmentName = selectUserInfo.DepartmentName,
|
||||||
LastChangePassWordTime = selectUserInfo.LastChangePassWordTime,
|
// OrganizationName = selectUserInfo.OrganizationName,
|
||||||
PositionName = selectUserInfo.PositionName,
|
// IsFirstAdd = selectUserInfo.IsFirstAdd,
|
||||||
IsTestUser = selectUserInfo.IsTestUser,
|
// Sex = selectUserInfo.Sex,
|
||||||
IsZhiZhun = selectUserInfo.IsZhiZhun,
|
// Status = selectUserInfo.Status,
|
||||||
AutoCutNextTask = selectUserInfo.AutoCutNextTask,
|
// UserCode = selectUserInfo.UserCode,
|
||||||
//DoctorId=selectUserInfo.DoctorId,
|
// Password = selectUserInfo.Password,
|
||||||
LastLoginIP = selectUserInfo.LastLoginIP,
|
// PasswordChanged = selectUserInfo.PasswordChanged,
|
||||||
LastLoginTime = selectUserInfo.LastLoginTime,
|
// 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 jwt;
|
||||||
//return new LoginSelectRoleReturn() { AccountList = accountList, JwtStr = jwt };
|
//return new LoginSelectRoleReturn() { AccountList = accountList, JwtStr = jwt };
|
||||||
|
|
|
@ -146,6 +146,9 @@ namespace IRaCIS.Core.Application.Service
|
||||||
CreateMap<User, UserAccountInfo>()
|
CreateMap<User, UserAccountInfo>()
|
||||||
.ForMember(d => d.UserTypeShortName, c => c.MapFrom(t => t.UserTypeRole.UserTypeShortName));
|
.ForMember(d => d.UserTypeShortName, c => c.MapFrom(t => t.UserTypeRole.UserTypeShortName));
|
||||||
|
|
||||||
|
|
||||||
|
CreateMap<IdentityUser, User>();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -157,18 +157,24 @@ namespace IRaCIS.Core.Application.Service
|
||||||
/// 用户多账号,初次维护数据
|
/// 用户多账号,初次维护数据
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <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()))
|
foreach (var item in userList.GroupBy(t => t.EMail.Trim()))
|
||||||
{
|
{
|
||||||
var emailUserIdList = item.Select(t => t.Id).ToList();
|
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();
|
return ResponseOutput.Ok();
|
||||||
|
|
|
@ -3,12 +3,18 @@ using IRaCIS.Core.Domain.Share;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Domain.Models;
|
namespace IRaCIS.Core.Domain.Models;
|
||||||
|
|
||||||
[Comment("后台 - 系统账户")]
|
[Comment("后台 - 系统账户角色关系表")]
|
||||||
[Table("User")]
|
[Table("User")]
|
||||||
public class User : BaseFullAuditEntity
|
public class User : BaseFullAuditEntity
|
||||||
{
|
{
|
||||||
#region 导航属性
|
#region 导航属性
|
||||||
|
|
||||||
|
[ForeignKey("IdentityUserId")]
|
||||||
|
[JsonIgnore]
|
||||||
|
public IdentityUser IdentityUser { get; set; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
|
||||||
[ForeignKey("UserTypeId")]
|
[ForeignKey("UserTypeId")]
|
||||||
public UserType UserTypeRole { get; set; }
|
public UserType UserTypeRole { get; set; }
|
||||||
|
|
||||||
|
@ -56,15 +62,10 @@ public class User : BaseFullAuditEntity
|
||||||
|
|
||||||
public string PositionName { get; set; }
|
public string PositionName { get; set; }
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
[Comment("自动切换下一个任务")]
|
[Comment("自动切换下一个任务")]
|
||||||
public bool AutoCutNextTask { get; set; }
|
public bool AutoCutNextTask { get; set; }
|
||||||
|
|
||||||
public string DepartmentName { get; set; } = null!;
|
public string DepartmentName { get; set; }
|
||||||
|
|
||||||
[Comment("医生生成账号后,会有值")]
|
|
||||||
public Guid? DoctorId { get; set; }
|
|
||||||
|
|
||||||
[Comment("首次登录需要修改密码")]
|
[Comment("首次登录需要修改密码")]
|
||||||
public bool IsFirstAdd { get; set; } = true;
|
public bool IsFirstAdd { get; set; } = true;
|
||||||
|
@ -82,21 +83,89 @@ public class User : BaseFullAuditEntity
|
||||||
public DateTime? LastLoginTime { get; set; }
|
public DateTime? LastLoginTime { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[Comment("医生生成账号后,会有值")]
|
||||||
|
public Guid? DoctorId { get; set; }
|
||||||
|
|
||||||
public UserTypeEnum UserTypeEnum { get; set; }
|
public UserTypeEnum UserTypeEnum { get; set; }
|
||||||
|
|
||||||
public Guid UserTypeId { get; set; }
|
public Guid UserTypeId { get; set; }
|
||||||
|
|
||||||
#region 新增字段
|
#region 新增字段
|
||||||
|
|
||||||
|
[Comment("后续删除")]
|
||||||
public bool SuperAdmin { get; set; }
|
public bool SuperAdmin { get; set; }
|
||||||
|
|
||||||
|
|
||||||
public bool IsUserRoleDisabled { get; set; }
|
|
||||||
|
|
||||||
public Guid IdentityUserId { get; set; }
|
public Guid IdentityUserId { get; set; }
|
||||||
|
|
||||||
[Comment("多账号信息是否已经确认")]
|
public bool IsUserRoleDisabled { get; set; }
|
||||||
public bool IsMutiAccountInfoConfirm { 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
|
#endregion
|
||||||
}
|
}
|
|
@ -630,7 +630,7 @@ public class IRaCISDBContext : DbContext
|
||||||
|
|
||||||
public virtual DbSet<EventStoreRecord> EventStoreRecord { get; set; }
|
public virtual DbSet<EventStoreRecord> EventStoreRecord { get; set; }
|
||||||
|
|
||||||
|
public virtual DbSet<IdentityUser> IdentityUser { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
18400
IRaCIS.Core.Infra.EFCore/Migrations/20241224082051_AddIdentityUser.Designer.cs
generated
Normal file
18400
IRaCIS.Core.Infra.EFCore/Migrations/20241224082051_AddIdentityUser.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
|
@ -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: "多账号信息是否已经确认");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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 =>
|
modelBuilder.Entity("IRaCIS.Core.Domain.Models.ImageShare", b =>
|
||||||
{
|
{
|
||||||
b.Property<Guid>("Id")
|
b.Property<Guid>("Id")
|
||||||
|
@ -12728,10 +12849,6 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
.HasColumnType("bit")
|
.HasColumnType("bit")
|
||||||
.HasComment("首次登录需要修改密码");
|
.HasComment("首次登录需要修改密码");
|
||||||
|
|
||||||
b.Property<bool>("IsMutiAccountInfoConfirm")
|
|
||||||
.HasColumnType("bit")
|
|
||||||
.HasComment("多账号信息是否已经确认");
|
|
||||||
|
|
||||||
b.Property<bool>("IsTestUser")
|
b.Property<bool>("IsTestUser")
|
||||||
.HasColumnType("bit");
|
.HasColumnType("bit");
|
||||||
|
|
||||||
|
@ -12789,7 +12906,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
.HasColumnType("int");
|
.HasColumnType("int");
|
||||||
|
|
||||||
b.Property<bool>("SuperAdmin")
|
b.Property<bool>("SuperAdmin")
|
||||||
.HasColumnType("bit");
|
.HasColumnType("bit")
|
||||||
|
.HasComment("后续删除");
|
||||||
|
|
||||||
b.Property<DateTime>("UpdateTime")
|
b.Property<DateTime>("UpdateTime")
|
||||||
.HasColumnType("datetime2");
|
.HasColumnType("datetime2");
|
||||||
|
@ -12821,11 +12939,13 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
.IsUnique()
|
.IsUnique()
|
||||||
.HasFilter("[DoctorId] IS NOT NULL");
|
.HasFilter("[DoctorId] IS NOT NULL");
|
||||||
|
|
||||||
|
b.HasIndex("IdentityUserId");
|
||||||
|
|
||||||
b.HasIndex("UserTypeId");
|
b.HasIndex("UserTypeId");
|
||||||
|
|
||||||
b.ToTable("User", t =>
|
b.ToTable("User", t =>
|
||||||
{
|
{
|
||||||
t.HasComment("后台 - 系统账户");
|
t.HasComment("后台 - 系统账户角色关系表");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -14483,6 +14603,17 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
b.Navigation("Site");
|
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 =>
|
modelBuilder.Entity("IRaCIS.Core.Domain.Models.InspectionFile", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("IRaCIS.Core.Domain.Models.User", "CreateUser")
|
b.HasOne("IRaCIS.Core.Domain.Models.User", "CreateUser")
|
||||||
|
@ -17476,6 +17607,12 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
.WithOne("User")
|
.WithOne("User")
|
||||||
.HasForeignKey("IRaCIS.Core.Domain.Models.User", "DoctorId");
|
.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")
|
b.HasOne("IRaCIS.Core.Domain.Models.UserType", "UserTypeRole")
|
||||||
.WithMany("UserList")
|
.WithMany("UserList")
|
||||||
.HasForeignKey("UserTypeId")
|
.HasForeignKey("UserTypeId")
|
||||||
|
@ -17484,6 +17621,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
|
|
||||||
b.Navigation("CreateUser");
|
b.Navigation("CreateUser");
|
||||||
|
|
||||||
|
b.Navigation("IdentityUser");
|
||||||
|
|
||||||
b.Navigation("UserTypeRole");
|
b.Navigation("UserTypeRole");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -17914,6 +18053,11 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
b.Navigation("DoctorList");
|
b.Navigation("DoctorList");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("IRaCIS.Core.Domain.Models.IdentityUser", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("UserRoleList");
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("IRaCIS.Core.Domain.Models.Menu", b =>
|
modelBuilder.Entity("IRaCIS.Core.Domain.Models.Menu", b =>
|
||||||
{
|
{
|
||||||
b.Navigation("UserTypeMenuList");
|
b.Navigation("UserTypeMenuList");
|
||||||
|
|
Loading…
Reference in New Issue