using System.Data;
using System.Threading.Tasks;
using Znyc.Cloudcar.Admin.Commons;
using Znyc.Cloudcar.Admin.Commons.Dtos;
using Znyc.Cloudcar.Admin.Commons.Entitys;
using Znyc.Cloudcar.Admin.Commons.Enums;
using Znyc.Cloudcar.Admin.Commons.Mapping;
using Znyc.Cloudcar.Admin.Commons.Pages;
using Znyc.Cloudcar.Admin.Commons.Services;
using Znyc.Cloudcar.Admin.Security.Dtos;
using Znyc.Cloudcar.Admin.Security.Entitys;
using Znyc.Cloudcar.Admin.Security.IRepositories;
using Znyc.Cloudcar.Admin.Security.IServices;
namespace Znyc.Cloudcar.Admin.Security.Services
{
///
///
public class UserService : BaseService, IUserService
{
private readonly ICertificationRepository _certificationRepository;
private readonly ILoginLogsRepository _loginLogsRepository;
private readonly IUserRepository _userRepository;
public UserService(IUserRepository repository,
ILoginLogsRepository loginLogsRepository,
ICertificationRepository certificationRepository) : base(repository)
{
_userRepository = repository;
_certificationRepository = certificationRepository;
_loginLogsRepository = loginLogsRepository;
}
///
/// 异步更新实体。
///
/// 实体
/// 主键ID
/// 事务对象
///
public override async Task UpdateAsync(UserEntity entity, long id, IDbTransaction trans = null)
{
bool result = await repository.UpdateAsync(entity, id, trans);
return result;
}
///
/// 根据条件查询数据库,并返回对象集合(用于分页数据显示)
///
/// 查询的条件
/// 指定对象的集合
public override async Task> FindWithPagerAsync(SearchInputDto search)
{
bool order = search.Order == "asc" ? false : true;
string where = GetDataPrivilege(false);
if (!string.IsNullOrEmpty(search.Keywords))
{
@where += string.Format(" and (UserName like '%{0}%')", search.Keywords);
};
PagerInfo pagerInfo = new PagerInfo
{
CurrenetPageIndex = search.CurrenetPageIndex,
PageSize = search.PageSize
};
System.Collections.Generic.List list = await repository.FindWithPagerAsync(where, pagerInfo, search.Sort, order);
PageResult pageResult = new PageResult
{
CurrentPage = pagerInfo.CurrenetPageIndex,
Items = list.MapTo(),
ItemsPerPage = pagerInfo.PageSize,
TotalItems = pagerInfo.RecordCount
};
return pageResult;
}
///
/// 异步分页查询(根据时间状态关键字)
///
///
///
public async Task> FindWithPagerSearchAsync(SearchUserModel search)
{
PagerInfo pagerInfo = new PagerInfo
{
CurrenetPageIndex = search.CurrenetPageIndex,
PageSize = search.PageSize
};
System.Collections.Generic.List list = (await _userRepository.FindUserWithPagerAsync(search, pagerInfo)).MapTo();
System.Collections.Generic.List LastLoginLogsList = await _loginLogsRepository.GetLastLoginLogAsync();
foreach (UserOutputDto item in list)
{
item.PositivePhoto = "";
item.ReversePhoto = "";
item.IdCard = "";
item.IssuedAddress = "";
item.Gender = "";
item.CertificationState = (int)UserCertificationEnum.None;
CertificationEntity certification = await _certificationRepository.GetWhereAsync($"UserId={item.Id}");
if (certification != null)
{
item.CertificationId = certification.Id;
item.PositivePhoto = string.Format(CommonConst.Default_Identity_Prefix, item.Id) + certification.PositivePhoto;
item.ReversePhoto = string.Format(CommonConst.Default_Identity_Prefix, item.Id) + certification.ReversePhoto;
item.IdCard = certification.IdCard;
item.IssuedAddress = certification.IssuedAddress;
item.Gender = certification.Gender;
item.CertificationState = certification.State;
}
item.AvatarUrl = item.AvatarUrl;
item.LastLoginTime = LastLoginLogsList.Find(x => x.CreatedUserId == item.Id)?.LoginTime;
item.Contact = item.Contact;
}
PageResult pageResult = new PageResult
{
CurrentPage = pagerInfo.CurrenetPageIndex,
Items = list,
ItemsPerPage = pagerInfo.PageSize,
TotalItems = pagerInfo.RecordCount
};
return pageResult;
}
///
/// 异步禁用/启用用户
///
///
/// 1-启用/99-禁用
///
public async Task UpdateStatusAsync(long id, int status)
{
CommonResult result = new CommonResult();
UserEntity user = await repository.GetAsync(id);
if (!(user?.Id > 0))
{
result.Success = false;
result.ErrMsg = "用户不存在";
return result;
}
user.State = status;
await repository.UpdateAsync(user, id);
result.Success = true;
return result;
}
///
/// 异步禁用/启用用户
///
///
///
public async Task UpdateIsPromoteAsync(long id)
{
CommonResult result = new CommonResult();
UserEntity user = await repository.GetAsync(id);
if (!(user?.Id > 0))
{
result.Success = false;
result.ErrMsg = "用户不存在";
return result;
}
user.IsPromote = !user.IsPromote;
await repository.UpdateAsync(user, id);
result.Success = true;
return result;
}
}
}