修改密码bug
parent
443329198a
commit
b992cab7ae
|
@ -247,7 +247,7 @@ namespace IRaCIS.Application.Services
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var list = await _userRepository.Where(t => t.EMail == email).Select(t => new UserAccountDto() { UserId = t.Id, UserName = t.UserName, UserRealName = t.LastName + " / " + t.FirstName,UserType = t.UserTypeRole.UserTypeShortName}).ToListAsync();
|
var list = await _userRepository.Where(t => t.EMail == email).Select(t => new UserAccountDto() { UserId = t.Id, UserName = t.UserName, UserRealName = t.LastName + " / " + t.FirstName, UserType = t.UserTypeRole.UserTypeShortName }).ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -291,40 +291,45 @@ namespace IRaCIS.Application.Services
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
|
[UnitOfWork]
|
||||||
public async Task<IResponseOutput> ModifyPassword(EditPasswordCommand editPwModel)
|
public async Task<IResponseOutput> ModifyPassword(EditPasswordCommand editPwModel)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(editPwModel.NewUserName))
|
|
||||||
{
|
|
||||||
if (await _userRepository.AnyAsync(t => t.UserName == editPwModel.NewUserName && t.Id != _userInfo.Id))
|
|
||||||
{
|
|
||||||
return ResponseOutput.NotOk("UserId already exists");
|
|
||||||
}
|
|
||||||
|
|
||||||
var success = await _userRepository.UpdateFromQueryAsync(t => t.Id == _userInfo.Id, u => new User()
|
|
||||||
{
|
|
||||||
UserName = editPwModel.NewUserName,
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//验证旧密码OK
|
//验证旧密码OK
|
||||||
var dbUser = await _userRepository.FirstOrDefaultAsync(t => t.Id == _userInfo.Id && t.Password == editPwModel.OldPassWord);
|
var dbUser = await _userRepository.FirstOrDefaultAsync(t => t.Id == _userInfo.Id && t.Password == editPwModel.OldPassWord);
|
||||||
|
|
||||||
if (dbUser != null)
|
if (dbUser != null)
|
||||||
{
|
{
|
||||||
if (dbUser.Password == editPwModel.OldPassWord)
|
if (dbUser.Password == editPwModel.NewPassWord)
|
||||||
{
|
{
|
||||||
return ResponseOutput.NotOk("password not change");
|
return ResponseOutput.NotOk("password not change");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(editPwModel.NewUserName))
|
||||||
|
{
|
||||||
|
if (await _userRepository.AnyAsync(t => t.UserName == editPwModel.NewUserName && t.Id != _userInfo.Id))
|
||||||
|
{
|
||||||
|
return ResponseOutput.NotOk("UserId already exists");
|
||||||
|
}
|
||||||
|
|
||||||
|
await _userRepository.UpdateFromQueryAsync(t => t.Id == _userInfo.Id, u => new User()
|
||||||
|
{
|
||||||
|
UserName = editPwModel.NewUserName,
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
var success = await _userRepository.UpdateFromQueryAsync(t => t.Id == _userInfo.Id, u => new User()
|
var success = await _userRepository.UpdateFromQueryAsync(t => t.Id == _userInfo.Id, u => new User()
|
||||||
{
|
{
|
||||||
Password = editPwModel.NewPassWord,
|
Password = editPwModel.NewPassWord,
|
||||||
IsFirstAdd = false
|
IsFirstAdd = false
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return ResponseOutput.Result(success);
|
return ResponseOutput.Result(success);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,16 +11,17 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
{
|
{
|
||||||
public interface ICommandRepository<TEntity>: ICommandRepository<TEntity, Guid> where TEntity : Entity
|
public interface ICommandRepository<TEntity>: ICommandRepository<TEntity, Guid> where TEntity : Entity
|
||||||
{
|
{
|
||||||
//Task<TEntity> InsertDictionaryAsync<TFrom>(TFrom from, params EntityVerifyExp<TEntity>[] verify);
|
|
||||||
Task<TEntity> InsertOrUpdateAsync<TFrom>(TFrom from, bool autoSave = false, params EntityVerifyExp<TEntity>[] verify);
|
Task<TEntity> InsertOrUpdateAsync<TFrom>(TFrom from, bool autoSave = false, params EntityVerifyExp<TEntity>[] verify);
|
||||||
|
|
||||||
|
|
||||||
Task<TEntity> InsertFromDTOAsync<TFrom>(TFrom from, bool autoSave = false, params EntityVerifyExp<TEntity>[] verify);
|
Task<TEntity> InsertFromDTOAsync<TFrom>(TFrom from, bool autoSave = false, params EntityVerifyExp<TEntity>[] verify);
|
||||||
|
|
||||||
|
|
||||||
Task<TEntity> UpdateFromDTOAsync<TFrom>(TFrom from, bool autoSave = false, bool ignoreDtoNullProperty = true, params EntityVerifyExp<TEntity>[] verify);
|
Task<TEntity> UpdateFromDTOAsync<TFrom>(TFrom from, bool autoSave = false, bool ignoreDtoNullProperty = true, params EntityVerifyExp<TEntity>[] verify);
|
||||||
|
|
||||||
|
|
||||||
|
TEntity UpdatePartialFields(TEntity entity, string[] propertyNames, bool autoSave = false, bool ignoreEntityNullProperty = true, params EntityVerifyExp<TEntity>[] verify);
|
||||||
|
|
||||||
|
//TEntity UpdatePartialFields(Guid id, Expression<Func<TEntity, TEntity>> updateFactory, bool autoSave = false, bool ignoreEntityNullProperty = true, params EntityVerifyExp<TEntity>[] verify);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface ICommandRepository<TEntity, TKey> where TEntity : class
|
public interface ICommandRepository<TEntity, TKey> where TEntity : class
|
||||||
|
|
|
@ -30,10 +30,6 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
|
|
||||||
public Repository(IRaCISDBContext dbContext, IMapper mapper)
|
public Repository(IRaCISDBContext dbContext, IMapper mapper)
|
||||||
{
|
{
|
||||||
//if (typeof(TEntity) = typeof(DataInspection))
|
|
||||||
//{
|
|
||||||
|
|
||||||
//}
|
|
||||||
_dbContext = dbContext;
|
_dbContext = dbContext;
|
||||||
_mapper = mapper;
|
_mapper = mapper;
|
||||||
}
|
}
|
||||||
|
@ -101,22 +97,52 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return await UpdateFromDTOAsync(from, autoSave,false, verify);
|
return await UpdateFromDTOAsync(from, autoSave, false, verify);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private async Task EntityVerifyAsync(bool isAdd, EntityVerifyExp<TEntity>[] verify, Guid? entitydId = null)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (isAdd)
|
||||||
|
{
|
||||||
|
foreach (var verifyItem in verify.Where(t => t.verifyType != VerifyEnum.OnlyUpdate && t.IsVerify))
|
||||||
|
{
|
||||||
|
if (await _dbSet.IgnoreQueryFilters().AnyAsync(verifyItem.VerifyExp).ConfigureAwait(false))
|
||||||
|
{
|
||||||
|
throw new BusinessValidationFailedException(verifyItem.VerifyMsg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach (var verifyItem in verify.Where(t => t.verifyType != VerifyEnum.OnlyAdd && t.IsVerify))
|
||||||
|
{
|
||||||
|
if (verifyItem.verifyType == VerifyEnum.OnlyUpdate)
|
||||||
|
{
|
||||||
|
if (await _dbSet.IgnoreQueryFilters().AnyAsync(verifyItem.VerifyExp).ConfigureAwait(false))
|
||||||
|
{
|
||||||
|
throw new BusinessValidationFailedException(verifyItem.VerifyMsg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (verifyItem.verifyType == VerifyEnum.Both)
|
||||||
|
{
|
||||||
|
if (await _dbSet.IgnoreQueryFilters().AnyAsync(verifyItem.VerifyExp.And(t => t.Id != entitydId)).ConfigureAwait(false))
|
||||||
|
{
|
||||||
|
throw new BusinessValidationFailedException(verifyItem.VerifyMsg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<TEntity> InsertFromDTOAsync<TFrom>(TFrom from, bool autoSave = false, params EntityVerifyExp<TEntity>[] verify)
|
public async Task<TEntity> InsertFromDTOAsync<TFrom>(TFrom from, bool autoSave = false, params EntityVerifyExp<TEntity>[] verify)
|
||||||
{
|
{
|
||||||
var entity = _mapper.Map<TEntity>(from);
|
var entity = _mapper.Map<TEntity>(from);
|
||||||
|
|
||||||
foreach (var verifyItem in verify.Where(t => t.verifyType != VerifyEnum.OnlyUpdate && t.IsVerify))
|
await EntityVerifyAsync(true, verify);
|
||||||
{
|
|
||||||
if (await _dbSet.IgnoreQueryFilters().AnyAsync(verifyItem.VerifyExp).ConfigureAwait(false))
|
|
||||||
{
|
|
||||||
throw new BusinessValidationFailedException(verifyItem.VerifyMsg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
await _dbSet.AddAsync(entity).ConfigureAwait(false);
|
await _dbSet.AddAsync(entity).ConfigureAwait(false);
|
||||||
|
|
||||||
|
@ -135,23 +161,7 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
|
|
||||||
var entity = _mapper.Map<TEntity>(from);
|
var entity = _mapper.Map<TEntity>(from);
|
||||||
|
|
||||||
foreach (var verifyItem in verify.Where(t => t.verifyType != VerifyEnum.OnlyAdd && t.IsVerify))
|
await EntityVerifyAsync(false, verify, entity.Id);
|
||||||
{
|
|
||||||
if (verifyItem.verifyType == VerifyEnum.OnlyUpdate)
|
|
||||||
{
|
|
||||||
if (await _dbSet.IgnoreQueryFilters().AnyAsync(verifyItem.VerifyExp).ConfigureAwait(false))
|
|
||||||
{
|
|
||||||
throw new BusinessValidationFailedException(verifyItem.VerifyMsg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (verifyItem.verifyType == VerifyEnum.Both)
|
|
||||||
{
|
|
||||||
if (await _dbSet.IgnoreQueryFilters().AnyAsync(verifyItem.VerifyExp.And(t => t.Id != entity.Id)).ConfigureAwait(false))
|
|
||||||
{
|
|
||||||
throw new BusinessValidationFailedException(verifyItem.VerifyMsg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var dbEntity = await _dbSet.IgnoreQueryFilters().FirstOrDefaultAsync(t => t.Id == entity.Id).ConfigureAwait(false);
|
var dbEntity = await _dbSet.IgnoreQueryFilters().FirstOrDefaultAsync(t => t.Id == entity.Id).ConfigureAwait(false);
|
||||||
|
|
||||||
|
@ -190,6 +200,108 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//public TEntity UpdatePartialFields(Guid id, Expression<Func<TEntity, TEntity>> updateFactory, bool autoSave = false, bool ignoreEntityNullProperty = true, params EntityVerifyExp<TEntity>[] verify)
|
||||||
|
//{
|
||||||
|
// EntityVerifyAsync(false, verify, id).RunSynchronously();
|
||||||
|
|
||||||
|
// var entity = updateFactory.Compile().Invoke(new TEntity() { Id = id });
|
||||||
|
|
||||||
|
// var entityEntry = _dbContext.Entry(entity);
|
||||||
|
// entityEntry.State = EntityState.Detached;
|
||||||
|
|
||||||
|
//}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 部分字段更新 (只更新传递的字段名)
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="entity"></param>
|
||||||
|
/// <param name="propertyNames"> 更新的字段数组 </param>
|
||||||
|
/// <param name="autoSave"></param>
|
||||||
|
/// <param name="ignoreEntityNullProperty"></param>
|
||||||
|
/// <param name="verify"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public TEntity UpdatePartialFields(TEntity entity, string[] propertyNames,
|
||||||
|
bool autoSave = false, bool ignoreEntityNullProperty = true, params EntityVerifyExp<TEntity>[] verify)
|
||||||
|
{
|
||||||
|
EntityVerifyAsync(false, verify, entity.Id).RunSynchronously();
|
||||||
|
|
||||||
|
var entityEntry = _dbContext.Entry(entity);
|
||||||
|
entityEntry.State = EntityState.Detached;
|
||||||
|
|
||||||
|
|
||||||
|
foreach (var propertyName in propertyNames)
|
||||||
|
{
|
||||||
|
_dbContext.Entry(entity).Property(propertyName).IsModified = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 忽略空值
|
||||||
|
IgnoreNullValues(ref entity, ignoreEntityNullProperty);
|
||||||
|
|
||||||
|
return entityEntry.Entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 更新 排除某些字段的更新
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="entity"></param>
|
||||||
|
/// <param name="propertyNames"></param>
|
||||||
|
/// <param name="autoSave"></param>
|
||||||
|
/// <param name="ignoreEntityNullProperty"></param>
|
||||||
|
/// <param name="verify"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public TEntity UpdateExcludeFields(TEntity entity, string[] propertyNames, bool autoSave = false, bool ignoreEntityNullProperty = true, params EntityVerifyExp<TEntity>[] verify)
|
||||||
|
{
|
||||||
|
|
||||||
|
EntityVerifyAsync(false, verify, entity.Id).RunSynchronously();
|
||||||
|
|
||||||
|
var entityEntry = _dbContext.Entry(entity);
|
||||||
|
entityEntry.State = EntityState.Modified;
|
||||||
|
|
||||||
|
|
||||||
|
foreach (var propertyName in propertyNames)
|
||||||
|
{
|
||||||
|
_dbContext.Entry(entity).Property(propertyName).IsModified = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 忽略空值
|
||||||
|
IgnoreNullValues(ref entity, ignoreEntityNullProperty);
|
||||||
|
|
||||||
|
return entityEntry.Entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 忽略空值属性
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="entity"></param>
|
||||||
|
/// <param name="ignoreNullValues"></param>
|
||||||
|
private void IgnoreNullValues(ref TEntity entity, bool? ignoreNullValues = null)
|
||||||
|
{
|
||||||
|
var isIgnore = ignoreNullValues;
|
||||||
|
if (isIgnore == false) return;
|
||||||
|
|
||||||
|
// 获取所有的属性
|
||||||
|
var properties = _dbSet.EntityType.GetProperties();
|
||||||
|
if (properties == null) return;
|
||||||
|
|
||||||
|
foreach (var propety in properties)
|
||||||
|
{
|
||||||
|
var entityProperty = _dbContext.Entry(entity).Property(propety.Name);
|
||||||
|
var propertyValue = entityProperty?.CurrentValue;
|
||||||
|
var propertyType = entityProperty?.Metadata?.PropertyInfo?.PropertyType;
|
||||||
|
|
||||||
|
// 判断是否是无效的值,比如为 null,默认时间,以及空 Guid 值
|
||||||
|
var isInvalid = propertyValue == null
|
||||||
|
|| (propertyType == typeof(DateTime) && propertyValue?.ToString() == new DateTime().ToString())
|
||||||
|
|| (propertyType == typeof(DateTimeOffset) && propertyValue?.ToString() == new DateTimeOffset().ToString())
|
||||||
|
|| (propertyType == typeof(Guid) && propertyValue?.ToString() == Guid.Empty.ToString());
|
||||||
|
|
||||||
|
if (isInvalid && entityProperty != null)
|
||||||
|
{
|
||||||
|
entityProperty.IsModified = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public async Task<bool> SaveChangesAsync(CancellationToken cancellationToken = default)
|
public async Task<bool> SaveChangesAsync(CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
|
@ -271,6 +383,8 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public async Task<bool> UpdateManyAsync(IEnumerable<TEntity> entities, bool autoSave = false, CancellationToken cancellationToken = default)
|
public async Task<bool> UpdateManyAsync(IEnumerable<TEntity> entities, bool autoSave = false, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
_dbSet.UpdateRange(entities);
|
_dbSet.UpdateRange(entities);
|
||||||
|
@ -285,6 +399,9 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public async Task<bool> DeleteAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default)
|
public async Task<bool> DeleteAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
_dbSet.Remove(entity);
|
_dbSet.Remove(entity);
|
||||||
|
|
Loading…
Reference in New Issue