2025-01-13 21:06:59 +08:00
|
|
|
|
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;
|
|
|
|
|
|
2025-01-14 16:11:31 +08:00
|
|
|
|
//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("用户新增失败");
|
2025-01-13 21:06:59 +08:00
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-14 16:11:31 +08:00
|
|
|
|
|
2025-01-13 21:06:59 +08:00
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|