2025-01-14 16:11:31 +08:00

225 lines
7.8 KiB
C#

using Microsoft.EntityFrameworkCore;
using YD_XinWei.Commons;
using YD_XinWei.Api.Utilities;
using YD_XinWei.Commons.Exceptions;
using Microsoft.AspNetCore.Mvc;
using TGJ.NetworkFreight.SeckillAggregateServices.Pos.UserService;
using YD_XinWei.Api.Entitys;
using YD_XinWei.Commons.Users;
using System.Linq.Expressions;
using YD_XinWei.Api.WeChat.Lib;
using YD_XinWei.Api.Context;
using YD_XinWei.Api.Services.Interface;
using YD_XinWei.Api.WeChat;
namespace YD_XinWei.Api.Services.Impl
{
public class UserService : IUserService
{
public UserContext _userContext;
public SmartSportsContext _smartSportsContext;
public UserService(UserContext userContext, SmartSportsContext smartSportsContext)
{
_userContext = userContext;
_smartSportsContext = smartSportsContext;
}
public async Task<UserInfoDto> Login(LoginInfo paramDto)
{
User userModel = null;
//switch (paramDto.RoleId)
//{
// case 2: // 教师登录
// userModel = await QueryUserByRole(
// x => x.PhoneNo == paramDto.Key && x.UserPwd == paramDto.Password,
// () => GetTeacherUser(paramDto)
// );
// break;
// case 3: // 家长登录
// userModel = await QueryUserByRole(
// x => x.UserName == paramDto.Key && x.UserPwd == paramDto.Password,
// () => GetParentUser(paramDto)
// );
// break;
// default:
// throw new BizException("无效的角色ID");
//}
//if (userModel == null || userModel.User_Id <= 0)
// throw new BizException("用户新增失败");
return GenerateUserInfoDto(userModel);
}
private async Task<User> QueryUserByRole(Expression<Func<User, bool>> queryCondition, Func<Task<UserModelDataDto>> createUser)
{
var userModel = await _userContext.Users.FirstOrDefaultAsync(queryCondition);
if (userModel == null)
{
var userData = await createUser();
if (userData == null)
throw new BizException("账号或密码错误");
userModel = CreateUserModel(userData);
// 保存新用户信息
await _userContext.Users.AddAsync(userModel);
await _userContext.SaveChangesAsync();
}
return userModel;
}
private User CreateUserModel(UserModelDataDto userData)
{
return new User()
{
ModifyDate = DateTime.Now,
CreateDate = DateTime.Now,
Enable = true,
RoleName = userData.RoleName,
Role_Id = userData.RoleId,
HeadImageUrl = userData.HeadImageUrl,
Address = userData.Address,
Gender = userData.Gender,
Email = userData.Email,
PhoneNo = userData.PhoneNo,
SchoolCode = userData.SchoolCode,
UserName = userData.UserName,
UserPwd = userData.UserPwd,
RelevanceId = Guid.NewGuid()
};
}
private UserInfoDto GenerateUserInfoDto(User userModel)
{
string token = JwtHelper.IssueJwt(new UserInfoDto()
{
User_Id = userModel.User_Id,
UserName = userModel.UserName,
Role_Id = userModel.Role_Id,
PhoneNo = userModel.PhoneNo ?? "",
SchoolCode = userModel.SchoolCode,
UserTrueName = userModel.UserName
});
return new UserInfoDto()
{
SchoolCode = userModel.SchoolCode,
Enable = userModel.Enable,
PhoneNo = userModel.PhoneNo,
RoleName = userModel.RoleName,
Role_Id = userModel.Role_Id,
UserName = userModel.UserName,
UserTrueName = userModel.UserName,
User_Id = userModel.User_Id,
RelevanceId = userModel.RelevanceId,
Token = token
};
}
public async Task<UserInfoDto> WxLogin(WXLoginPo loginPo)
{
var wli = new WechatLoginInfo();
wli.code = loginPo.code;
wli.encryptedData = loginPo.encryptedData;
wli.iv = loginPo.iv;
wli.rawData = loginPo.rawData;
wli.signature = loginPo.signature;
wli.appid = AppSettings.WeChat.Appid;
wli.secret = AppSettings.WeChat.Appid;
WechatUserInfo wechatResult = new WeChatAppDecrypt().Decrypt(wli);
if (wechatResult == null || string.IsNullOrWhiteSpace(wechatResult.phoneNumber))
{
throw new BizException("手机号获取失败");
}
var userInfo = await _userContext.Users.FirstOrDefaultAsync(x => x.wx_OpenID == wechatResult.openId);
if (null == userInfo || userInfo.User_Id == 0)
{
var model = new User()
{
ModifyDate = DateTime.Now,
CreateDate = DateTime.Now,
PhoneNo = wechatResult.phoneNumber,
wx_HeadImgUrl = wechatResult.avatarUrl,
wx_NickName = wechatResult.nickName,
UserTrueName = wechatResult.nickName,
wx_OpenID = wechatResult.openId,
wx_UnionID = wechatResult.unionId,
Enable = true,
RoleName = "用户",
Role_Id = 1,
RelevanceId = loginPo.RelevanceId ?? Guid.NewGuid()
};
await _userContext.Users.AddAsync(model);
await _userContext.SaveChangesAsync();
if (model == null || model.User_Id <= 0)
{
throw new BizException("用户新增失败");
}
}
else
{
userInfo.wx_HeadImgUrl = wechatResult.avatarUrl;
userInfo.wx_NickName = wechatResult.nickName;
userInfo.wx_UnionID = wechatResult.unionId;
userInfo.ModifyDate = DateTime.Now;
_userContext.Users.Update(userInfo);
await _userContext.SaveChangesAsync();
}
string token = JwtHelper.IssueJwt(new UserInfoDto()
{
User_Id = userInfo.User_Id,
UserName = userInfo.UserName,
Role_Id = userInfo.Role_Id
});
return new UserInfoDto()
{
Enable = userInfo.Enable,
PhoneNo = userInfo.PhoneNo,
RoleName = userInfo.RoleName,
Role_Id = userInfo.Role_Id,
UserName = userInfo.UserName,
UserTrueName = userInfo.UserName,
User_Id = userInfo.User_Id,
RelevanceId = userInfo.RelevanceId,
Token = token
};
}
public async Task<List<RelatedAccountsDto>> RelatedAccounts(Guid relevanceId)
{
var roleId = UserLoginContext.Current.RoleId;
var res = await _userContext.Users.Where(x => x.RelevanceId == relevanceId).Select(s => new RelatedAccountsDto()
{
RoleId = s.Role_Id,
IsCurrentLogin = s.Role_Id == roleId,
Key = s.UserName ?? "",
UserPwd = s.UserPwd ?? "",
OpenId = s.wx_OpenID ?? ""
}).ToListAsync();
return res;
}
}
}