using Mapster; using Znyc.CloudCar.Auth.HttpContextUser; using Znyc.CloudCar.Configuration; using Znyc.CloudCar.IRepository.User; using Znyc.CloudCar.IServices.CaChe; using Znyc.CloudCar.IServices.User; using Znyc.CloudCar.Model.Dtos.User; using Znyc.CloudCar.Model.Entities; using Znyc.CloudCar.Model.ViewModels.ReportsCallBack; using Znyc.CloudCar.Utility.Extensions; namespace Znyc.CloudCar.Services.User { public class UserService : IUserService { private readonly IUserRepository _userRepository; private readonly ICacheService _cacheService; private readonly IHttpContextUser _httpContextUser; private readonly IUserCardRepository _userCardRepository; public UserService( IUserRepository userRepository, ICacheService cacheService, IHttpContextUser httpContextUser, IUserCardRepository userCardRepository) { _userRepository = userRepository; _cacheService = cacheService; _httpContextUser = httpContextUser; _userCardRepository = userCardRepository; } /// /// 新增用户 /// /// /// /// public async Task AddUserAsync(WxUnifyUserAddInput wxUnifyUserAddInput, string openId, string unionId) { var user = await _userRepository.GetAsync(x => x.OpenId == openId && x.IsDeleted == false); if (user == null) { user = await _userRepository.InsertAsync(new UserEntity { UserName = GlobalConstVars.User.Default_UserName, OpenId = openId, AvatarUrl = GlobalConstVars.User.DefaultImagePrefix + GlobalConstVars.User.DefaultAvataUrl, Phone = "", UnionId = unionId, State = (int)GlobalEnumVars.CommonEnum.Normal, }); } return user; } /// /// 根据Id获取用户信息 /// /// public async Task GetUserAsync() { UserOutput userOutput = await _cacheService.GetUserAsync(_httpContextUser.Id); if (userOutput.IsNull()) { userOutput = await _userRepository.GetAsync(_httpContextUser.Id); if (userOutput.IsNull()) { return userOutput; } userOutput.AvatarUrl = userOutput.AvatarUrl; await _cacheService.SetUserAsync(userOutput.Id, userOutput); } return userOutput; } public async Task GetUserByIdAsync(long id) { UserOutput userOutput = await _cacheService.GetUserAsync(id); if (userOutput.IsNull()) { userOutput = await _userRepository.GetAsync(id); if (userOutput.IsNull()) { return userOutput; } userOutput.AvatarUrl = userOutput.AvatarUrl; await _cacheService.SetUserAsync(userOutput.Id, userOutput); } return userOutput; } /// /// 修改用户信息 /// /// /// public async Task UpdateAsync(UserUpdateInput userUpdateInput) { ResponseOutput response = new ResponseOutput(); UserEntity entity = await _userRepository.GetAsync(_httpContextUser.Id); if (entity.IsNull()) { response.Successed = false; response.Msg = "用户不存在!"; return response; } entity.UserName = userUpdateInput.UserName; entity.AvatarUrl = GlobalConstVars.User.DefaultImagePrefix+ userUpdateInput.AvatarUrl.Substring(userUpdateInput.AvatarUrl.LastIndexOf("/") + 1); entity.Phone = userUpdateInput.Phone; await _userRepository.UpdateAsync(entity); await _cacheService.RemoveUserAsync(_httpContextUser.Id); var userOutput = entity.Adapt(); userOutput.AvatarUrl = userOutput.AvatarUrl; var usercar = await _userCardRepository.GetAsync(x => x.UserId == _httpContextUser.Id && x.IsEnabled == true && x.EndTime > DateTime.Now); userOutput.CardType = usercar.IsNotNull() ? usercar.CardId : 0; response.Successed = true; response.Data = userOutput; response.Code = 1; return response; } /// /// 获取当前用户信息 /// /// public async Task GetUserInfoAsync() { ResponseOutput response = new ResponseOutput(); UserOutput userOutput = await _cacheService.GetUserAsync(_httpContextUser.Id); if (userOutput.IsNull()) { userOutput = await _userRepository.GetAsync(_httpContextUser.Id); if (userOutput.IsNull()) { response.Successed = false; response.Msg = "当前用户不存在"; return response; } userOutput.AvatarUrl = userOutput.AvatarUrl; await _cacheService.SetUserAsync(userOutput.Id, userOutput); } var usercar = await _userCardRepository.Where(x => x.UserId == _httpContextUser.Id && x.IsEnabled == true && x.EndTime > DateTime.Now).OrderByDescending(x=>x.CardId).FirstAsync(); userOutput.CardType = usercar.IsNotNull() ? usercar.CardId : 0; response.Successed = true; response.Data = userOutput; response.Code = 1; return response; } } }