using LifePayment.Application.Contracts; using LifePayment.Domain; using LifePayment.Domain.Models; using LifePayment.Domain.Shared; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using System; using System.Linq; using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.Application.Services; using Volo.Abp.Domain.Repositories; using Volo.Abp.Identity; using Volo.Abp.Identity.Application.Contracts.Account; using Volo.Abp.IdentityModel; using ZeroD.Util; using static LifePayment.Domain.Shared.LifePaymentConstant; namespace LifePayment.Application { public class AccountService : ApplicationService, IAccountService { private readonly IWxManager _wxManager; private readonly IRepository _lifePayUserRepository; private readonly IConfiguration _configuration; private readonly IIdentityModelAuthenticationService _authenticator; private readonly IRepository _userRepository; private readonly IIdentityUserAppService _identityUserService; public AccountService( IWxManager wxManager, IConfiguration configuration, IIdentityModelAuthenticationService authenticator, IIdentityUserAppService identityUserService, IRepository lifePayUserRepository) { _configuration = configuration; _wxManager = wxManager; _identityUserService = identityUserService; _lifePayUserRepository = lifePayUserRepository; _authenticator = authenticator; } #region 查询 public async Task GetLifePayWxIndentity(string code) { var res = await _wxManager.GetWxOauth2AccessToken(code); var result = new WxMiniAppIndentityInfo { SessionKey = res.SessionKey, OpenId = res.OpenId, UnionId = res.UnionId }; return result; } #endregion #region 操作 #region life pay /// /// 手机验证码登录 /// 版本说明:使用验证码管理去校验和失效对应业务的验证码 /// /// /// /// public async Task LifePayPhoneMesssageCodeLogin(LifePayPhoneMesssageCodeLoginInput input) { //var vcodeType = VerificationCodeBusinessTypeEnum.LifePayPhoneMesssageCodeLogin; //var checkResult = await _verificationCodeManager.CheckVerificationCodeByBusinessType(vcodeType, // input.PhoneNumber, // input.Code, // true); //CheckExtensions.IfTrueThrowUserFriendlyException(!checkResult, // CustomeErrorMessage.SometingWrongOrSometing, "验证码", "已失效"); var lifeUser = await _lifePayUserRepository.Where(x => x.PhoneNumber == input.PhoneNumber).FirstOrDefaultAsync(); if (lifeUser == null) { lifeUser = new LifePayUser() { Id = GuidGenerator.Create(), PhoneNumber = input.PhoneNumber, LastLoginTime = DateTime.Now }; await _lifePayUserRepository.InsertAsync(lifeUser); } else { lifeUser.LastLoginTime = DateTime.Now; await _lifePayUserRepository.UpdateAsync(lifeUser); } return lifeUser.Id; } public async Task GetTokenForWeb(AccessRequestDto accessRequestDto, string webClientIp) { IdentityClientConfiguration config = new IdentityClientConfiguration { UserName = accessRequestDto.UserName, UserPassword = accessRequestDto.UserPassword, GrantType = accessRequestDto.GrantType == 1 ? "password" : "client_credentials", ClientId = accessRequestDto.ClientId, ClientSecret = "1q2w3e*", Authority = _configuration["AuthServer:Authority"], Scope = accessRequestDto.Scope + " offline_access", }; var result = await _authenticator.GetAccessTokenAsync(config); var user = await _userRepository.Where(r => r.UserName == accessRequestDto.UserName && !r.IsDeleted).FirstOrDefaultAsync(); // 记录日志 // await PublishUserOperateHistoryEvent(LogsSpecies.Login, LogsSpecies.Login, user.Id, user.Id, creatorName: user.Name); return result; } public async Task CreateAccount(CreateAccountInput input, bool isSend, bool isAdminCreate = false, string password = null) { if (input.ClientId == LifePaymentConstant.ClientId.Back) { CheckExtensions.IfTrueThrowUserFriendlyException(!input.CompanyOrgId.HasValue || !input.DepartmentOrgId.HasValue, "所属公司和部门不能为空"); } var any = await _userRepository.Where(x => x.PhoneNumber == input.PhoneNumber && x.ClientId == input.ClientId).AnyAsync(); CheckExtensions.IfTrueThrowUserFriendlyException(any, CustomeErrorMessage.PhoneNumberRepeatSaveFail); password ??= GlobalRandom.GetRandomPassword(); var res = await _identityUserService.CreateAsync(new IdentityUserCreateDto { Name = input.Name, PhoneNumber = input.PhoneNumber, UserName = input.UserName, RoleNames = input.RoleNames, ClientId = input.ClientId, Password = password, }); var user = await _userRepository.InsertAsync(new User { Id = res.Id, Name = input.Name, UserName = input.UserName, PhoneNumber = input.PhoneNumber, ClientId = input.ClientId, OpenId = input.OpenId, LastLoginTime = DateTime.Now, ContactPhone = input.PhoneNumber, Contact = isAdminCreate ? input.Name : null, EnterpriseName = input.EnterpriseName, AuthType = input.AuthType, Remark = input.Remark, DepartmentOrgId = input.ClientId == LifePaymentConstant.ClientId.Back ? input.DepartmentOrgId : null, CompanyOrgId = input.ClientId == LifePaymentConstant.ClientId.Back ? input.CompanyOrgId : null }); //if (input.ClientId == Constant.ClientType.Back) //{ // await _distributedEventBus.PublishAsync(new SendPhoneMessageInput // { // Phone = input.PhoneNumber, // ProviderName = "CreateBackAccount", // TemplateParams = new // { // account = input.UserName, // pwd = password, // }, // MessageType = PhoneMessageTypeEnum.Notice // }); //} //else //{ // if (isSend) // { // //await _commonManager.SendPhoneMessage(new SendPhoneMessageInput // //{ // // Phone = input.PhoneNumber, // // ProviderName = "CreateAccount", // // TemplateParams = new // // { // // name = input.Name, // // account = input.UserName, // // pwd = password, // // }, // //}); // await _distributedEventBus.PublishAsync(new SendPhoneMessageInput // { // Phone = input.PhoneNumber, // ProviderName = "CreateAccountNotice", // TemplateParams = new // { // account = input.UserName, // password = password, // }, // MessageType = PhoneMessageTypeEnum.Notice // }); // } //} var logoption = LogsSpecies.UserRegister; var creatorName = user.Name; // 记录日志 if (isAdminCreate) { logoption = LogsSpecies.Create; creatorName = CurrentUser.Name; } //await PublishUserOperateHistoryEvent(logoption, logoption, res.Id, res.Id, creatorName: creatorName); #region 添加IM用户 //await PublishAddTencentUserEvent(user.Id, user.UserName, user.AvatarUrl); #endregion return res.Id; } #endregion #endregion } }