diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index ab5932cc5..3f9956fd4 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -2294,14 +2294,6 @@
-
-
- 用户登陆
-
-
-
-
-
账号验证,获取账号角色信息 获取临时token
diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs
index d0a7037ae..26c03087f 100644
--- a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs
+++ b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs
@@ -82,7 +82,7 @@ namespace IRaCIS.Core.Application.Service.Common
.WhereIf(param.IsDeleted != null, t => t.IsDeleted == param.IsDeleted)
.WhereIf(!string.IsNullOrWhiteSpace(param.OrganizationName),
- t => t.UserRole.OrganizationName.Contains(param.OrganizationName))
+ t => t.UserRole.IdentityUser.OrganizationName.Contains(param.OrganizationName))
.WhereIf(!string.IsNullOrWhiteSpace(param.UserRealName),
t => (t.UserRole.FullName).Contains(param.UserRealName))
.Select(t => new TrialMaintenanceDTO()
diff --git a/IRaCIS.Core.Application/Service/Management/Interface/IUserService.cs b/IRaCIS.Core.Application/Service/Management/Interface/IUserService.cs
index 473297ed3..f3a745821 100644
--- a/IRaCIS.Core.Application/Service/Management/Interface/IUserService.cs
+++ b/IRaCIS.Core.Application/Service/Management/Interface/IUserService.cs
@@ -10,7 +10,7 @@ namespace IRaCIS.Core.Application.Service
//Task DeleteUser(Guid userId);
//Task GetUser(Guid id);
Task> GetUserList(UserListQueryDTO param);
- Task> Login(string userName, string password);
+ //Task> Login(string userName, string password);
Task VerifyMFACodeAsync(string Code);
Task SendMFAEmail(SendMfaCommand sendMfa);
diff --git a/IRaCIS.Core.Application/Service/Management/UserService.cs b/IRaCIS.Core.Application/Service/Management/UserService.cs
index f4742e88c..48685c210 100644
--- a/IRaCIS.Core.Application/Service/Management/UserService.cs
+++ b/IRaCIS.Core.Application/Service/Management/UserService.cs
@@ -825,116 +825,7 @@ namespace IRaCIS.Core.Application.Service
return ResponseOutput.Ok();
}
- ///
- /// 用户登陆
- ///
- ///
- ///
- ///
- [NonDynamicMethod]
- public async Task> Login(string userName, string password)
- {
- int maxFailures = _verifyConfig.CurrentValue.LoginMaxFailCount;
- int lockoutMinutes = _verifyConfig.CurrentValue.LoginFailLockMinutes;
-
- // 生成缓存键
- string cacheKey = CacheKeys.UserLoginError(userName);
-
- // 从缓存中获取登录失败次数
- int? failCount = await _fusionCache.GetOrDefaultAsync(cacheKey);
-
- if (failCount == null)
- {
- failCount = 0;
- }
-
- //每次登录 都重置缓存时间
- await _fusionCache.SetAsync(cacheKey, failCount, TimeSpan.FromMinutes(lockoutMinutes));
-
-
- if (failCount >= maxFailures)
- {
- //await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, LoginUserId = Guid.Empty, OptUserId = Guid.Empty, LoginFaildName = userName, LoginPassword = password, OptType = UserOptType.AccountLocked }, true);
-
- //$"密码连续错误{maxFailures}次,当前账号已被限制登录,请等待 {lockoutMinutes} 分钟后再试。"
- throw new BusinessValidationFailedException(_localizer["User_ErrorLimit", maxFailures, lockoutMinutes]);
- }
-
- var userLoginReturnModel = new LoginReturnDTO();
-
-
- var loginUser = await _userRoleRepository.Where(u => u.UserName.Equals(userName) && u.Password == password).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
-
- if (loginUser == null)
- {
-
- //错误次数累加
- failCount++;
- await _fusionCache.SetAsync(cacheKey, failCount, TimeSpan.FromMinutes(lockoutMinutes));
-
- 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);
-
- return ResponseOutput.NotOk(_localizer["User_CheckNameOrPw"], new LoginReturnDTO());
-
- }
-
- if (loginUser.Status == 0)
- {
- //await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, LoginUserId = loginUser.IdentityUserId, OptUserId = loginUser.IdentityUserId, LoginFaildName = userName, OptType = UserOptType.LoginLockedAccount }, true);
-
- //---该用户已经被禁用。
- return ResponseOutput.NotOk(_localizer["User_Disabled"], new LoginReturnDTO());
- }
-
- //登录成功 清除缓存
- await _fusionCache.SetAsync(cacheKey, 0, TimeSpan.FromMinutes(lockoutMinutes));
- var ipinfo = _searcher.Search(_userInfo.IP);
-
- var iPRegion = string.Join('|', ipinfo.Split('|').TakeLast(3));
-
- if (loginUser.LastLoginIP != string.Empty)
- {
- // 与上一次IP不一致
- if (loginUser.LastLoginIP != iPRegion)
- {
- loginUser.LoginState = 2;
- }
- }
-
- //超过90天没修改密码
- if (_verifyConfig.CurrentValue.IsNeedChangePassWord && loginUser.LastChangePassWordTime != null && DateTime.Now.AddDays(-_verifyConfig.CurrentValue.ChangePassWordDays) > loginUser.LastChangePassWordTime.Value)
- {
- loginUser.NeedChangePassWord = true;
-
- }
-
- //await _userLogRepository.AddAsync(new UserLog() { IP = _userInfo.IP, LoginUserId = loginUser.IdentityUserId, OptUserId = loginUser.IdentityUserId, OptType = UserOptType.Login }, true);
-
- userLoginReturnModel.BasicInfo = loginUser;
-
- if (loginUser.LastChangePassWordTime == null)
- {
- await _identityUserRepository.BatchUpdateNoTrackingAsync(x => x.Id == loginUser.IdentityUserId, x => new IdentityUser()
- {
- LastChangePassWordTime = DateTime.Now
-
- });
-
- }
-
- await _identityUserRepository.BatchUpdateNoTrackingAsync(x => x.Id == loginUser.IdentityUserId, x => new IdentityUser()
- {
- LastLoginIP = iPRegion,
- LastLoginTime = DateTime.Now
-
- });
-
- return ResponseOutput.Ok(userLoginReturnModel);
-
- }
[HttpPost]
public async Task> GetUserLogList(UserLogQuery inQuery)
diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs
index 6ac4fb9ab..f8a8ad884 100644
--- a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs
+++ b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs
@@ -778,7 +778,9 @@ namespace IRaCIS.Core.Application
{
- var newQuery = _trialReadingCriterionRepository.Where(t => t.IsSigned && t.IsConfirm && t.Trial.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.TrialUserRoleList.Any(t => t.UserRole.UserTypeId == _userInfo.UserTypeId)))
+ var newQuery = _trialReadingCriterionRepository
+ .Where(t => t.Trial.TrialStatusStr == StaticData.TrialState.TrialOngoing)
+ .Where(t => t.IsSigned && t.IsConfirm && t.Trial.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.TrialUserRoleList.Any(t => t.UserRole.UserTypeId == _userInfo.UserTypeId)))
.Select(c => new IRImageReadingToBeDoneDto()
{
TrialId = c.TrialId,
@@ -1197,16 +1199,16 @@ namespace IRaCIS.Core.Application
PM_SiteSurveryCount = isPM ? siteSurveyCount : 0,
- PM_CheckCount = isPM ? await _trialRepository
+ PM_CheckCount = isPM ? await _trialRepository.Where(t => t.TrialStatusStr == StaticData.TrialState.TrialOngoing)
.Where(t => t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.TrialUserRoleList.Any(t => t.UserRole.UserTypeId == _userInfo.UserTypeId)))
.Where(u => u.SubjectVisitList.Any(t => t.CheckState == CheckStateEnum.ToCheck || (t.CheckState == CheckStateEnum.CVIng &&
t.CheckChallengeDialogList.OrderByDescending(t => t.CreateTime).First().UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator))).CountAsync() : 0,
- PM_ReviewerSelectCount = isPM ? await _trialRepository
+ PM_ReviewerSelectCount = isPM ? await _trialRepository.Where(t => t.TrialStatusStr == StaticData.TrialState.TrialOngoing)
.Where(t => t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.TrialUserRoleList.Any(t => t.UserRole.UserTypeId == _userInfo.UserTypeId)))
.Where(t => t.EnrollList.Where(u => u.EnrollStatus == EnrollStatus.InviteIntoGroup).Count() > 0).CountAsync() : 0,
- PM_ReReadingApprovalCount = isPM ? await _visitTaskReReadingRepository
+ PM_ReReadingApprovalCount = isPM ? await _visitTaskReReadingRepository.Where(t => t.Trial.TrialStatusStr == StaticData.TrialState.TrialOngoing)
.Where(t => t.OriginalReReadingTask.Trial.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.TrialUserRoleList.Any(t => t.UserRole.UserTypeId == _userInfo.UserTypeId)))
.Where(t => t.OriginalReReadingTask.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed)
.GroupBy(t => t.OriginalReReadingTask.TrialId)
@@ -1217,7 +1219,7 @@ namespace IRaCIS.Core.Application
}).Where(x => x.ToBeApprovalCount > 0).CountAsync() : 0,
- PM_ClinicalDataCount = isPM ? await _trialRepository
+ PM_ClinicalDataCount = isPM ? await _trialRepository.Where(t => t.TrialStatusStr == StaticData.TrialState.TrialOngoing)
.Where(t => t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.TrialUserRoleList.Any(t => t.UserRole.UserTypeId == _userInfo.UserTypeId)))
.Where(t => t.ReadModuleList.Where(u => u.IsCRCConfirm && !u.IsPMConfirm).Count() > 0).CountAsync() : 0,
@@ -1225,34 +1227,34 @@ namespace IRaCIS.Core.Application
#region CRC
- CRC_ImageSubmitCount = isCRC ? await _trialRepository
+ CRC_ImageSubmitCount = isCRC ? await _trialRepository.Where(t => t.TrialStatusStr == StaticData.TrialState.TrialOngoing)
.Where(t => t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.TrialUserRoleList.Any(t => t.UserRole.UserTypeId == _userInfo.UserTypeId)) && (t.IsUrgent || t.IsSubjectExpeditedView || t.IsEnrollementQualificationConfirm || t.IsPDProgressView))
.Where(t => t.SubjectVisitList.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.UserRoleId)).Where(u => u.SubmitState == SubmitStateEnum.ToSubmit).Count() > 0).CountAsync() : 0,
- CRC_ImageQuestionCount = isCRC ? await _trialRepository
+ CRC_ImageQuestionCount = isCRC ? await _trialRepository.Where(t => t.TrialStatusStr == StaticData.TrialState.TrialOngoing)
.Where(t => t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.TrialUserRoleList.Any(t => t.UserRole.UserTypeId == _userInfo.UserTypeId)))
.Where(t => t.SubjectVisitList.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.UserRoleId)).SelectMany(c => c.QCChallengeList)
.Where(u => u.IsClosed == false && (u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IQC || u.LatestReplyUserId == null)).Count() > 0).CountAsync() : 0,
- CRC_CheckQuestionCount = isCRC ? await _trialRepository
+ CRC_CheckQuestionCount = isCRC ? await _trialRepository.Where(t => t.TrialStatusStr == StaticData.TrialState.TrialOngoing)
.Where(t => t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.TrialUserRoleList.Any(t => t.UserRole.UserTypeId == _userInfo.UserTypeId)))
.Where(t => t.SubjectVisitList.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.UserRoleId))
.Where(u => u.CheckState == CheckStateEnum.CVIng && u.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply).Count() > 0).CountAsync() : 0,
- CRC_ImageReUploadCount = isCRC ? await _trialRepository
+ CRC_ImageReUploadCount = isCRC ? await _trialRepository.Where(t => t.TrialStatusStr == StaticData.TrialState.TrialOngoing)
.Where(t => t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.TrialUserRoleList.Any(t => t.UserRole.UserTypeId == _userInfo.UserTypeId)))
.Where(t => t.SubjectVisitList
.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.UserRoleId))
.Where(u => (u.SubmitState == SubmitStateEnum.ToSubmit && u.IsPMBackOrReReading) || (u.IsQCConfirmedReupload)).Count() > 0).CountAsync() : 0,
- CRC_ClinicalDataTobeDoneCount = isCRC ? await _trialRepository
+ CRC_ClinicalDataTobeDoneCount = isCRC ? await _trialRepository.Where(t => t.TrialStatusStr == StaticData.TrialState.TrialOngoing)
.Where(t => t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.TrialUserRoleList.Any(t => t.UserRole.UserTypeId == _userInfo.UserTypeId)))
.Where(t => t.ReadingClinicalDataList.Where(x => !x.IsSign && x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC).Count() > 0).CountAsync() : 0,
- CRC_ClinialDataTobeConfirmCount = isCRC ? await _trialRepository
+ CRC_ClinialDataTobeConfirmCount = isCRC ? await _trialRepository.Where(t => t.TrialStatusStr == StaticData.TrialState.TrialOngoing)
.Where(t => t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.TrialUserRoleList.Any(t => t.UserRole.UserTypeId == _userInfo.UserTypeId)))
.Where(t => t.ReadModuleList.Where(x => !x.IsCRCConfirm).Count() > 0).CountAsync() : 0,
@@ -1266,11 +1268,11 @@ namespace IRaCIS.Core.Application
SPM_SiteSurveryCount = isSPMOrCPM ? siteSurveyCount : 0,
- SPM_ReviewerApprovalCount = isSPMOrCPM ? await _trialRepository
+ SPM_ReviewerApprovalCount = isSPMOrCPM ? await _trialRepository.Where(t => t.TrialStatusStr == StaticData.TrialState.TrialOngoing)
.Where(t => t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.TrialUserRoleList.Any(t => t.UserRole.UserTypeId == _userInfo.UserTypeId)))
.Where(t => t.EnrollList.Where(u => u.EnrollStatus == EnrollStatus.HasCommittedToCRO).Count() > 0).CountAsync() : 0,
- SPM_ReReadingApprovalCount = isSPMOrCPM ? await _visitTaskReReadingRepository
+ SPM_ReReadingApprovalCount = isSPMOrCPM ? await _visitTaskReReadingRepository.Where(t => t.Trial.TrialStatusStr == StaticData.TrialState.TrialOngoing)
.Where(t => t.OriginalReReadingTask.Trial.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.TrialUserRoleList.Any(t => t.UserRole.UserTypeId == _userInfo.UserTypeId)))
.Where(t => t.OriginalReReadingTask.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed)
.GroupBy(t => t.OriginalReReadingTask.TrialId)
@@ -1287,7 +1289,7 @@ namespace IRaCIS.Core.Application
#region IQC
- IQC_IamgeQCCount = isIQC ? await _trialRepository
+ IQC_IamgeQCCount = isIQC ? await _trialRepository.Where(t => t.TrialStatusStr == StaticData.TrialState.TrialOngoing)
.Where(t => t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.TrialUserRoleList.Any(t => t.UserRole.UserTypeId == _userInfo.UserTypeId)))
.Where(t => t.QCProcessEnum != TrialQCProcess.NotAudit)
.Select(t => new
@@ -1301,7 +1303,7 @@ namespace IRaCIS.Core.Application
}).Where(x => x.ToBeClaimedCount + x.ToBeReviewedCount > 0).CountAsync() : 0,
- IQC_QCQuestionCount = isIQC ? await _trialRepository
+ IQC_QCQuestionCount = isIQC ? await _trialRepository.Where(t => t.TrialStatusStr == StaticData.TrialState.TrialOngoing)
.Where(t => t.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.TrialUserRoleList.Any(t => t.UserRole.UserTypeId == _userInfo.UserTypeId)))
.Where(t => t.SubjectVisitList.SelectMany(c => c.QCChallengeList)
.Where(u => u.CreateUserId == _userInfo.UserRoleId && u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count() > 0).CountAsync() : 0,
@@ -1326,7 +1328,9 @@ namespace IRaCIS.Core.Application
// .Where(y => y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true)).Count()>0).CountAsync() : 0,
- await _trialReadingCriterionRepository.Where(t => t.IsSigned == true && t.IsConfirm == true && t.Trial.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.TrialUserRoleList.Any(t => t.UserRole.UserTypeId == _userInfo.UserTypeId)))
+ await _trialReadingCriterionRepository
+ .Where(t => t.Trial.TrialStatusStr == StaticData.TrialState.TrialOngoing)
+ .Where(t => t.IsSigned == true && t.IsConfirm == true && t.Trial.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.TrialUserRoleList.Any(t => t.UserRole.UserTypeId == _userInfo.UserTypeId)))
.Where(c => c.VisitTaskList.Where(t => t.DoctorUserId == _userInfo.UserRoleId && t.ReadingTaskState != ReadingTaskState.HaveSigned && t.TaskState == TaskState.Effect)
// 前序 不存在 未一致性核查未通过的
.Where(t => !t.Subject.SubjectVisitList.Any(sv => sv.CheckState != CheckStateEnum.CVPassed && t.VisitTaskNum > sv.VisitNum))
@@ -1339,7 +1343,9 @@ namespace IRaCIS.Core.Application
: 0,
- IR_MedicalReviewCount = isIR ? await _taskMedicalReviewRepository.Where(t => t.Trial.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.TrialUserRoleList.Any(t => t.UserRole.UserTypeId == _userInfo.UserTypeId)))
+ IR_MedicalReviewCount = isIR ? await _taskMedicalReviewRepository
+ .Where(t => t.Trial.TrialStatusStr == StaticData.TrialState.TrialOngoing)
+ .Where(t => t.Trial.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.TrialUserRoleList.Any(t => t.UserRole.UserTypeId == _userInfo.UserTypeId)))
.Where(t => t.IsClosedDialog == false && t.VisitTask.TaskState == TaskState.Effect && t.IsInvalid == false && t.VisitTask.DoctorUserId == _userInfo.UserRoleId)
.GroupBy(t => new { t.TrialId, t.VisitTask.TrialReadingCriterionId })
.Where(g => g.Where(u => u.LatestReplyUser.UserTypeEnum == UserTypeEnum.MIM && u.AuditState == MedicalReviewAuditState.Auditing).Count() > 0).CountAsync() : 0,
@@ -1350,7 +1356,8 @@ namespace IRaCIS.Core.Application
#region MIM
MIM_MedicalReviewCount = isMIM ? await _taskMedicalReviewRepository
- .Where(t => t.Trial.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.TrialUserRoleList.Any(t => t.UserRole.UserTypeId == _userInfo.UserTypeId)))
+ .Where(t => t.Trial.TrialStatusStr == StaticData.TrialState.TrialOngoing)
+ .Where(t => t.Trial.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId && t.TrialUserRoleList.Any(t => t.UserRole.UserTypeId == _userInfo.UserTypeId)))
.Where(t => t.IsClosedDialog == false && t.VisitTask.TaskState == TaskState.Effect && t.IsInvalid == false && t.MedicalManagerUserId == _userInfo.UserRoleId)
.GroupBy(t => new { t.TrialId, t.VisitTask.TrialReadingCriterionId })
.Select(g => new
diff --git a/IRaCIS.Core.Application/TestService.cs b/IRaCIS.Core.Application/TestService.cs
index da88b7db3..c4384409e 100644
--- a/IRaCIS.Core.Application/TestService.cs
+++ b/IRaCIS.Core.Application/TestService.cs
@@ -239,7 +239,7 @@ namespace IRaCIS.Core.Application.Service
var identityUserId = NewId.NextSequentialGuid();
- var selectUser = item.OrderByDescending(t => t.Status).ThenBy(t => t.CreateTime).FirstOrDefault();
+ var selectUser = item.OrderBy(t => t.CreateTime).FirstOrDefault();
var identityUser = _mapper.Map(selectUser);
diff --git a/IRaCIS.Core.Domain/Management/User.cs b/IRaCIS.Core.Domain/Management/User.cs
index 149358eb6..3d53959b9 100644
--- a/IRaCIS.Core.Domain/Management/User.cs
+++ b/IRaCIS.Core.Domain/Management/User.cs
@@ -40,54 +40,6 @@ public class UserRole : BaseFullAuditEntity
[Comment("Զлһ")]
public bool AutoCutNextTask { get; set; }
- #region ɾûϢ
-
- public int Code { get; set; }
- public string UserCode { get; set; }
-
-
- public string Password { get; set; }
-
-
- public string Phone { get; set; }
- public string OrganizationName { get; set; }
-
- [StringLength(1000)]
- public string EmailToken { get; set; }
-
-
- public bool PasswordChanged { get; set; }
- public int? Sex { get; set; }
-
- public UserStateEnum Status { get; set; } = UserStateEnum.Enable;
-
-
- public string PositionName { 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; }
-
- [Comment("ɾ")]
- public bool SuperAdmin { get; set; }
-
-
- #endregion
-
[Comment("ҽ˺źֵ")]