diff --git a/IRaCIS.Core.Application/GlobalUsings.cs b/IRaCIS.Core.Application/GlobalUsings.cs
index b1a5af97b..7712c2f49 100644
--- a/IRaCIS.Core.Application/GlobalUsings.cs
+++ b/IRaCIS.Core.Application/GlobalUsings.cs
@@ -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;
diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index d1e2ce5c1..f4e8064e6 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -2269,14 +2269,6 @@
-
-
- 禁用或者启用账户
-
-
-
-
-
发送MFA 验证邮件
@@ -2313,7 +2305,7 @@
验证密码成功后,选定角色,然后获取当前角色的Token
-
+
@@ -13125,7 +13117,7 @@
-
+
用户多账号,初次维护数据
diff --git a/IRaCIS.Core.Application/Service/Management/DTO/UserModel.cs b/IRaCIS.Core.Application/Service/Management/DTO/UserModel.cs
index 9ef57dafb..648a5b261 100644
--- a/IRaCIS.Core.Application/Service/Management/DTO/UserModel.cs
+++ b/IRaCIS.Core.Application/Service/Management/DTO/UserModel.cs
@@ -90,7 +90,7 @@ namespace IRaCIS.Application.Contracts
public string UserName { get; set; } = string.Empty;
public string FullName { get; set; } = string.Empty;
public int? Sex { get; set; } // 1-男 2-女
- public string UserCode { get; set; }
+ public string UserCode { get; set; }
public string EMail { get; set; }
public int Status { get; set; }
@@ -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 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 UserRoleList { get; set; }
diff --git a/IRaCIS.Core.Application/Service/Management/Interface/IUserService.cs b/IRaCIS.Core.Application/Service/Management/Interface/IUserService.cs
index 5ca28d3f2..6c863dfbe 100644
--- a/IRaCIS.Core.Application/Service/Management/Interface/IUserService.cs
+++ b/IRaCIS.Core.Application/Service/Management/Interface/IUserService.cs
@@ -18,7 +18,7 @@ namespace IRaCIS.Core.Application.Service
Task ResetPassword(Guid userId);
Task UpdateUser(UserCommand model);
- Task UpdateUserState(Guid userId, UserStateEnum state);
+ //Task UpdateUserState(Guid userId, UserStateEnum state);
//Task SendVerificationCode(string emailOrPhone, VerifyType verificationType, bool isReviewer = false);
//Task SetNewPassword(ResetPasswordCommand resetPwdModel);
diff --git a/IRaCIS.Core.Application/Service/Management/UserService.cs b/IRaCIS.Core.Application/Service/Management/UserService.cs
index f1584d4c3..4eaefe28e 100644
--- a/IRaCIS.Core.Application/Service/Management/UserService.cs
+++ b/IRaCIS.Core.Application/Service/Management/UserService.cs
@@ -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 _trialRepository,
IOptionsMonitor _verifyConfig,
IOptionsMonitor systemEmailConfig,
+ IRepository _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> 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(_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 GetUser()
{
- var userQuery = _userRepository.Where(t => t.IdentityUserId == _userInfo.IdentityUserId).ProjectTo(_mapper.ConfigurationProvider);
+ var userQuery = _identityUserRepository.Where(t => t.Id == _userInfo.IdentityUserId).ProjectTo(_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(userAddModel);
+ var saveItem = _mapper.Map(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();
+ foreach (var role in userAddModel.UserRoleList)
+ {
+ var addRole = _mapper.Map(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(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
- ///
- /// 禁用或者启用账户
- ///
- ///
- ///
- ///
+ /////
+ ///// 禁用或者启用账户
+ /////
+ /////
+ /////
+ /////
- [HttpPost("{userId:guid}/{state:int}")]
- public async Task UpdateUserState(Guid userId, UserStateEnum state)
- {
+ //[HttpPost("{userId:guid}/{state:int}")]
+ //public async Task 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 GetUserBasicInfo(Guid userId, string pwd)
{
- var info = await _userRepository.Where(u => u.Id == userId && u.Password == pwd).ProjectTo(_mapper.ConfigurationProvider).FirstNotNullAsync();
+ var info = await _identityUserRepository.Where(u => u.Id == userId && u.Password == pwd).ProjectTo(_mapper.ConfigurationProvider).FirstNotNullAsync();
return info;
}
@@ -719,7 +735,7 @@ namespace IRaCIS.Core.Application.Service
[AllowAnonymous]
public async Task 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(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
+ var loginUser = await _identityUserRepository.Where(u => u.UserName.Equals(userName) && u.Password == password).ProjectTo(_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(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
+ var loginUser = await _identityUserRepository.Where(u => u.UserName.Equals(userName) && u.Password == password).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
+
+ if (loginUser == null)
+ {
+ loginUser = await _identityUserRepository.Where(u => u.UserName.Equals(userName) && u.Password == password).ProjectTo(_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(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 };
diff --git a/IRaCIS.Core.Application/Service/Management/_MapConfig.cs b/IRaCIS.Core.Application/Service/Management/_MapConfig.cs
index 521b044a3..9db604cc6 100644
--- a/IRaCIS.Core.Application/Service/Management/_MapConfig.cs
+++ b/IRaCIS.Core.Application/Service/Management/_MapConfig.cs
@@ -146,6 +146,9 @@ namespace IRaCIS.Core.Application.Service
CreateMap()
.ForMember(d => d.UserTypeShortName, c => c.MapFrom(t => t.UserTypeRole.UserTypeShortName));
+
+ CreateMap();
+
}
}
diff --git a/IRaCIS.Core.Application/TestService.cs b/IRaCIS.Core.Application/TestService.cs
index c50b2e95f..3d68451c3 100644
--- a/IRaCIS.Core.Application/TestService.cs
+++ b/IRaCIS.Core.Application/TestService.cs
@@ -157,18 +157,24 @@ namespace IRaCIS.Core.Application.Service
/// 用户多账号,初次维护数据
///
///
- public async Task UserMutiAccount()
+ public async Task UserMutiAccount([FromServices] IRepository _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(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();
diff --git a/IRaCIS.Core.Domain/Management/User.cs b/IRaCIS.Core.Domain/Management/User.cs
index 1e1706907..65782b7e6 100644
--- a/IRaCIS.Core.Domain/Management/User.cs
+++ b/IRaCIS.Core.Domain/Management/User.cs
@@ -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; }
@@ -44,7 +50,7 @@ public class User : BaseFullAuditEntity
public bool PasswordChanged { get; set; }
- public string Phone { get; set; }
+ public string Phone { get; set; }
public int? Sex { 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 UserRoleList { get; set; } = new List();
+
+ [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
+}
\ No newline at end of file
diff --git a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs
index a9402c07c..a2c2a5c85 100644
--- a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs
+++ b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs
@@ -630,7 +630,7 @@ public class IRaCISDBContext : DbContext
public virtual DbSet EventStoreRecord { get; set; }
-
+ public virtual DbSet IdentityUser { get; set; }
}
diff --git a/IRaCIS.Core.Infra.EFCore/EntityConfigration/SubjectConfigration.cs b/IRaCIS.Core.Infra.EFCore/EntityConfigration/SubjectConfigration.cs
index e80bf8f1c..87639013c 100644
--- a/IRaCIS.Core.Infra.EFCore/EntityConfigration/SubjectConfigration.cs
+++ b/IRaCIS.Core.Infra.EFCore/EntityConfigration/SubjectConfigration.cs
@@ -89,4 +89,17 @@ namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
}
}
+ public class IdentityUserConfigration : IEntityTypeConfiguration
+ {
+ //当一个实体,针对同一个类,有两个一对一导航属性,但是是不同的外键,一个外键是一对一,一个是一对多,那么需要显示配置一对多的关系
+ public void Configure(EntityTypeBuilder builder)
+ {
+ builder.HasMany(s => s.UserRoleList)
+ .WithOne(t => t.IdentityUser)
+ .HasForeignKey(s => s.IdentityUserId);
+
+
+
+ }
+ }
}
diff --git a/IRaCIS.Core.Infra.EFCore/Migrations/20241224082051_AddIdentityUser.Designer.cs b/IRaCIS.Core.Infra.EFCore/Migrations/20241224082051_AddIdentityUser.Designer.cs
new file mode 100644
index 000000000..f38fef7c9
--- /dev/null
+++ b/IRaCIS.Core.Infra.EFCore/Migrations/20241224082051_AddIdentityUser.Designer.cs
@@ -0,0 +1,18400 @@
+//
+using System;
+using IRaCIS.Core.Infra.EFCore;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+#nullable disable
+
+namespace IRaCIS.Core.Infra.EFCore.Migrations
+{
+ [DbContext(typeof(IRaCISDBContext))]
+ [Migration("20241224082051_AddIdentityUser")]
+ partial class AddIdentityUser
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "8.0.10")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128);
+
+ SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
+
+ modelBuilder.Entity("IRaCIS.Core.Domain.Models.Attachment", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Code")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)")
+ .HasComment("编码");
+
+ b.Property("CreateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DoctorId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ExpiryDate")
+ .HasColumnType("datetime2")
+ .HasComment("过期时间");
+
+ b.Property("FileName")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("IsOfficial")
+ .HasColumnType("bit")
+ .HasComment("是否正式简历");
+
+ b.Property("Language")
+ .HasColumnType("int")
+ .HasComment("1 中文 2为英文");
+
+ b.Property("Path")
+ .IsRequired()
+ .HasMaxLength(1000)
+ .HasColumnType("nvarchar(1000)");
+
+ b.Property("Type")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)")
+ .HasComment("文件类型名");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CreateUserId");
+
+ b.HasIndex("DoctorId");
+
+ b.ToTable("Attachment", t =>
+ {
+ t.HasComment("医生 - 简历|证书 文档表");
+ });
+ });
+
+ modelBuilder.Entity("IRaCIS.Core.Domain.Models.CRO", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CROCode")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("CROName")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("CRONameCN")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("CreateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("IsTrialLevel")
+ .HasColumnType("bit")
+ .HasComment("是否是项目级别");
+
+ b.Property("TrialId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("UpdateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("UpdateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CreateUserId");
+
+ b.ToTable("CROCompany", t =>
+ {
+ t.HasComment("机构 - CRO");
+ });
+ });
+
+ modelBuilder.Entity("IRaCIS.Core.Domain.Models.CheckChallengeDialog", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CreateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("IsCRCNeedReply")
+ .HasColumnType("bit")
+ .HasComment("CRC是否需要回复 前端使用");
+
+ b.Property("ParamInfo")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)")
+ .HasComment("核查的检查信息Json");
+
+ b.Property("SubjectVisitId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("TalkContent")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("UserTypeEnum")
+ .HasColumnType("int")
+ .HasComment("核查过程中的操作用户类型");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CreateUserId");
+
+ b.HasIndex("SubjectVisitId");
+
+ b.ToTable("CheckChallengeDialog", t =>
+ {
+ t.HasComment("一致性核查 - 对话记录表");
+ });
+ });
+
+ modelBuilder.Entity("IRaCIS.Core.Domain.Models.ClinicalAnswerRowInfo", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ClinicalFormId")
+ .HasColumnType("uniqueidentifier")
+ .HasComment("表单Id");
+
+ b.Property("CreateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("QuestionId")
+ .HasColumnType("uniqueidentifier")
+ .HasComment("问题Id");
+
+ b.Property("RowIndex")
+ .HasColumnType("int");
+
+ b.Property("SubjectId")
+ .HasColumnType("uniqueidentifier")
+ .HasComment("受试者Id");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CreateUserId");
+
+ b.ToTable("ClinicalAnswerRowInfo", t =>
+ {
+ t.HasComment("受试者 - 临床表单表格问题行记录");
+ });
+ });
+
+ modelBuilder.Entity("IRaCIS.Core.Domain.Models.ClinicalDataSystemSet", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ClinicalDataLevel")
+ .HasColumnType("int");
+
+ b.Property("ClinicalDataSetEnName")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("ClinicalDataSetEnum")
+ .HasColumnType("int")
+ .HasComment("枚举(字典里面取的)");
+
+ b.Property("ClinicalDataSetName")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("ClinicalUploadType")
+ .HasColumnType("int")
+ .HasComment("上传方式");
+
+ b.Property("CreateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CriterionEnumListStr")
+ .IsRequired()
+ .HasMaxLength(1000)
+ .HasColumnType("nvarchar(1000)");
+
+ b.Property("FileName")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("IsApply")
+ .HasColumnType("bit")
+ .HasComment("是否应用");
+
+ b.Property("IsEnable")
+ .HasColumnType("bit");
+
+ b.Property("Path")
+ .IsRequired()
+ .HasMaxLength(1000)
+ .HasColumnType("nvarchar(1000)");
+
+ b.Property("UploadRole")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CreateUserId");
+
+ b.ToTable("ClinicalDataSystemSet", t =>
+ {
+ t.HasComment("系统 - 临床数据配置");
+ });
+ });
+
+ modelBuilder.Entity("IRaCIS.Core.Domain.Models.ClinicalDataTrialSet", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ClinicalDataLevel")
+ .HasColumnType("int")
+ .HasComment("临床级别");
+
+ b.Property("ClinicalDataSetEnName")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("ClinicalDataSetName")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("ClinicalUploadType")
+ .HasColumnType("int")
+ .HasComment("上传方式");
+
+ b.Property("CreateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CriterionEnumListStr")
+ .IsRequired()
+ .HasMaxLength(1000)
+ .HasColumnType("nvarchar(1000)");
+
+ b.Property("FileName")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("IsApply")
+ .HasColumnType("bit")
+ .HasComment("是否应用");
+
+ b.Property("IsConfirm")
+ .HasColumnType("bit");
+
+ b.Property("Path")
+ .IsRequired()
+ .HasMaxLength(1000)
+ .HasColumnType("nvarchar(1000)");
+
+ b.Property("SystemClinicalDataSetId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("TrialId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("UploadRole")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CreateUserId");
+
+ b.HasIndex("SystemClinicalDataSetId");
+
+ b.HasIndex("TrialId");
+
+ b.ToTable("ClinicalDataTrialSet", t =>
+ {
+ t.HasComment("项目 - 临床数据适应标准配置");
+ });
+ });
+
+ modelBuilder.Entity("IRaCIS.Core.Domain.Models.ClinicalForm", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CheckDate")
+ .HasColumnType("datetime2")
+ .HasComment("检查日期");
+
+ b.Property("ClinicalDataTrialSetId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CreateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("PicturePath")
+ .IsRequired()
+ .HasMaxLength(1000)
+ .HasColumnType("nvarchar(1000)")
+ .HasComment("截图地址");
+
+ b.Property("ReadingId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("SubjectId")
+ .HasColumnType("uniqueidentifier")
+ .HasComment("受试者Id");
+
+ b.Property("TrialId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("VisitId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ClinicalDataTrialSetId");
+
+ b.HasIndex("CreateUserId");
+
+ b.HasIndex("SubjectId");
+
+ b.ToTable("ClinicalForm", t =>
+ {
+ t.HasComment("受试者 - 临床表单");
+ });
+ });
+
+ modelBuilder.Entity("IRaCIS.Core.Domain.Models.ClinicalQuestionAnswer", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Answer")
+ .IsRequired()
+ .HasMaxLength(1000)
+ .HasColumnType("nvarchar(1000)");
+
+ b.Property("ClinicalDataTrialSetId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ClinicalFormId")
+ .HasColumnType("uniqueidentifier")
+ .HasComment("表单Id");
+
+ b.Property("CreateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("QuestionId")
+ .HasColumnType("uniqueidentifier")
+ .HasComment("问题Id");
+
+ b.Property("SubjectId")
+ .HasColumnType("uniqueidentifier")
+ .HasComment("受试者Id");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ClinicalFormId");
+
+ b.HasIndex("CreateUserId");
+
+ b.ToTable("ClinicalQuestionAnswer", t =>
+ {
+ t.HasComment("受试者 - 临床表单问题答案");
+ });
+ });
+
+ modelBuilder.Entity("IRaCIS.Core.Domain.Models.ClinicalTableAnswer", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Answer")
+ .IsRequired()
+ .HasMaxLength(1000)
+ .HasColumnType("nvarchar(1000)")
+ .HasComment("答案");
+
+ b.Property("ClinicalFormId")
+ .HasColumnType("uniqueidentifier")
+ .HasComment("表单Id");
+
+ b.Property("CreateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("QuestionId")
+ .HasColumnType("uniqueidentifier")
+ .HasComment("问题Id");
+
+ b.Property("RowId")
+ .HasColumnType("uniqueidentifier")
+ .HasComment("答案行的Id");
+
+ b.Property("SubjectId")
+ .HasColumnType("uniqueidentifier")
+ .HasComment("受试者Id");
+
+ b.Property("TableQuestionId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CreateUserId");
+
+ b.HasIndex("RowId");
+
+ b.ToTable("ClinicalTableAnswer", t =>
+ {
+ t.HasComment("受试者 - 临床表单表格问题答案");
+ });
+ });
+
+ modelBuilder.Entity("IRaCIS.Core.Domain.Models.CommonDocument", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("BusinessScenarioEnum")
+ .HasColumnType("int")
+ .HasComment("业务场景");
+
+ b.Property("Code")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("CreateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CriterionTypeEnum")
+ .HasColumnType("int")
+ .HasComment("系统标准枚举");
+
+ b.Property("DeleteUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DeletedTime")
+ .HasColumnType("datetime2");
+
+ b.Property("Description")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("FileTypeEnum")
+ .HasColumnType("int")
+ .HasComment("类型-上传|导出|邮件附件");
+
+ b.Property("IsDeleted")
+ .HasColumnType("bit");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("NameCN")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("Path")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("UpdateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("UpdateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CreateUserId");
+
+ b.ToTable("CommonDocument", t =>
+ {
+ t.HasComment("数据上传 | 数据导出 | 邮件附件 文件记录表 (需要同步)");
+ });
+ });
+
+ modelBuilder.Entity("IRaCIS.Core.Domain.Models.CriterionNidusSystem", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CreateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CriterionId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("IsSystemCriterion")
+ .HasColumnType("bit");
+
+ b.Property("LesionType")
+ .HasColumnType("int")
+ .HasComment("病灶类型");
+
+ b.Property("OrganType")
+ .HasColumnType("int")
+ .HasComment("器官类型");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CreateUserId");
+
+ b.HasIndex("CriterionId");
+
+ b.ToTable("CriterionNidusSystem", t =>
+ {
+ t.HasComment("系统标准 - 病灶器官表 (需要同步)");
+ });
+ });
+
+ modelBuilder.Entity("IRaCIS.Core.Domain.Models.CriterionNidusTrial", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CreateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CriterionId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("LesionType")
+ .HasColumnType("int");
+
+ b.Property("OrganType")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CreateUserId");
+
+ b.ToTable("CriterionNidusTrial", t =>
+ {
+ t.HasComment("项目标准 - 病灶器官表");
+ });
+ });
+
+ modelBuilder.Entity("IRaCIS.Core.Domain.Models.DataInspection", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("BatchId")
+ .HasColumnType("uniqueidentifier")
+ .HasComment("批次Id");
+
+ b.Property("ChildrenTypeId")
+ .HasColumnType("uniqueidentifier")
+ .HasComment("子类");
+
+ b.Property("CreateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CreateUserName")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)")
+ .HasComment("创建人姓名");
+
+ b.Property("CreateUserRealName")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("DoctorUserId")
+ .HasColumnType("uniqueidentifier")
+ .HasComment("阅片医生");
+
+ b.Property("EntityName")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)")
+ .HasComment("被稽查实体名");
+
+ b.Property("GeneralId")
+ .HasColumnType("uniqueidentifier")
+ .HasComment("要稽查对象Id");
+
+ b.Property("IP")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("Identification")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)")
+ .HasComment("标识");
+
+ b.Property("IsFrontAdd")
+ .HasColumnType("bit")
+ .HasComment("是否是前端添加");
+
+ b.Property("IsSign")
+ .HasColumnType("bit");
+
+ b.Property("JsonDetail")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("LastJsonDetail")
+ .HasColumnType("nvarchar(max)")
+ .HasComment("上一条json");
+
+ b.Property("ModuleTypeId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ObjectRelationParentId")
+ .HasColumnType("uniqueidentifier")
+ .HasComment("被稽查对象外键1");
+
+ b.Property("ObjectRelationParentId2")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ObjectRelationParentId3")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ObjectTypeId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("OptTypeId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ParentId")
+ .HasColumnType("uniqueidentifier")
+ .HasComment("父ID");
+
+ b.Property("Reason")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("RoleName")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)")
+ .HasComment("角色名称");
+
+ b.Property("SignId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("SubjectId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("SubjectVisitId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("TrialId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("TrialReadingCriterionId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("TrialSiteId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("VisitStageId")
+ .HasColumnType("uniqueidentifier")
+ .HasComment("访视计划ID");
+
+ b.Property("VisitTaskId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CreateUserId");
+
+ b.HasIndex("TrialReadingCriterionId");
+
+ b.HasIndex("VisitTaskId");
+
+ b.ToTable("DataInspection", t =>
+ {
+ t.HasComment("稽查 - 记录表");
+ });
+ });
+
+ modelBuilder.Entity("IRaCIS.Core.Domain.Models.DicomInstance", b =>
+ {
+ b.Property("SeqId")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Anonymize")
+ .HasColumnType("bit");
+
+ b.Property("CPIStatus")
+ .HasColumnType("bit");
+
+ b.Property("CreateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("FileSize")
+ .HasColumnType("bigint");
+
+ b.Property("FrameOfReferenceUID")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("HtmlPath")
+ .IsRequired()
+ .HasMaxLength(1000)
+ .HasColumnType("nvarchar(1000)");
+
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ImageColumns")
+ .HasColumnType("int");
+
+ b.Property("ImageRows")
+ .HasColumnType("int");
+
+ b.Property("ImagerPixelSpacing")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("InstanceNumber")
+ .HasColumnType("int");
+
+ b.Property("InstanceTime")
+ .HasColumnType("datetime2");
+
+ b.Property("NumberOfFrames")
+ .HasColumnType("int");
+
+ b.Property("Path")
+ .IsRequired()
+ .HasMaxLength(1000)
+ .HasColumnType("nvarchar(1000)");
+
+ b.Property("PixelSpacing")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("SeriesId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("SeriesInstanceUid")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("SliceLocation")
+ .HasColumnType("int");
+
+ b.Property("SliceThickness")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("SopInstanceUid")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("StudyId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("StudyInstanceUid")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("SubjectId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("SubjectVisitId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("TrialId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("UpdateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("UpdateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("WindowCenter")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("WindowWidth")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.HasKey("SeqId");
+
+ b.HasIndex("CreateUserId");
+
+ b.HasIndex("SeriesId");
+
+ b.HasIndex("StudyId");
+
+ b.ToTable("DicomInstance", t =>
+ {
+ t.HasComment("归档 - Instance表");
+ });
+ });
+
+ modelBuilder.Entity("IRaCIS.Core.Domain.Models.DicomSeries", b =>
+ {
+ b.Property("SeqId")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("AcquisitionNumber")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("AcquisitionTime")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("BodyPartExamined")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("BodyPartForEdit")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("CreateTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreateUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DeleteUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DeletedTime")
+ .HasColumnType("datetime2");
+
+ b.Property("Description")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ImageOrientationPatient")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("ImagePositionPatient")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("ImageResizePath")
+ .IsRequired()
+ .HasMaxLength(1000)
+ .HasColumnType("nvarchar(1000)");
+
+ b.Property("ImagerPixelSpacing")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("InstanceCount")
+ .HasColumnType("int");
+
+ b.Property("IsDeleted")
+ .HasColumnType("bit");
+
+ b.Property("IsReading")
+ .HasColumnType("bit");
+
+ b.Property("Modality")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("ProtocolName")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property("SequenceName")
+ .IsRequired()
+ .HasMaxLength(400)
+ .HasColumnType("nvarchar(400)");
+
+ b.Property