From 809cd3966929f4c4f190ed8aa604d137227fe641 Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期三, 13 八月 2025 15:39:38 +0800
Subject: [PATCH] feat:开发
---
FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 50 insertions(+), 7 deletions(-)
diff --git a/FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs b/FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs
index 6319fcd..6f0e55f 100644
--- a/FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs
+++ b/FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs
@@ -9,6 +9,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Security.Claims;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
@@ -27,7 +28,8 @@
IRequestHandler<WxmpLoginCommand, LoginCommandCallback>,
IRequestHandler<BindWxmpUserInfoCommand, LoginCommandCallback>,
IRequestHandler<ChangePhoneNumberCommand, bool>,
- IRequestHandler<RegisterPersonalUserCommand, bool>
+ IRequestHandler<RegisterPersonalUserCommand, bool>,
+ IRequestHandler<GetPersonalLoginInfoQuery, GetPersonalLoginInfoQueryResult>
{
private readonly IRepository<User> rep = rep;
private readonly SmsUtils smsUtils = smsUtils;
@@ -84,11 +86,15 @@
/// <returns></returns>
public async Task<LoginCommandCallback> Handle(WxmpLoginCommand request, CancellationToken cancellationToken)
{
+ if (request.Type == EnumUserType.Operation)
+ {
+ throw Oops.Oh(EnumErrorCodeType.s400, "涓嶆敮鎸佽绫诲瀷璐﹀彿鐧诲綍");
+ }
var snsJscode2session = await wxmpUtils.SnsJscode2sessionAsync(request.Type, request.Code, cancellationToken);
var user = await rep.AsQueryable().AsNoTracking()
.Where(it => it.WxmpOpenId == snsJscode2session.openid && it.Type == request.Type)
.FirstOrDefaultAsync(cancellationToken);
- if (user == null && request.Type == EnumUserType.Personal)
+ if (user == null)
{
user = new User
{
@@ -104,7 +110,7 @@
throw Oops.Oh(EnumUserErrorCodeType.u1000);
if (user.Status == EnumUserStatus.Disabled)
throw Oops.Oh(EnumUserErrorCodeType.u1001);
- return GetCurrentLogier(user, EnumClientType.Wxmp);
+ return GetCurrentLogier(user, EnumClientType.Wxmp, snsJscode2session.session_key);
}
/// <summary>
@@ -147,9 +153,15 @@
/// <exception cref="NotImplementedException"></exception>
public async Task<LoginCommandCallback> Handle(BindWxmpUserInfoCommand request, CancellationToken cancellationToken)
{
- var logier = JwtUtils.GetCurrentLogier();
+ var claims = JWTEncryption.ReadJwtToken(request.AccessToken).Claims;
+ var claimIdentity = new ClaimsIdentity("AuthenticationTypes.Federation");
+ claimIdentity.AddClaims(claims);
+ var claimsPrincipal = new ClaimsPrincipal(claimIdentity);
+ var id = claimsPrincipal.FindFirstValue("Id").ToGuid();
+ var type = claimsPrincipal.FindFirstValue("Type").ToEnum<EnumUserType>();
+
var user = await rep.AsQueryable()
- .Where(it => it.Type == logier.Type && it.Id == logier.Id)
+ .Where(it => it.Type == type && it.Id == id)
.FirstOrDefaultAsync(cancellationToken);
if (user == null) throw Oops.Oh(EnumErrorCodeType.s404, "褰撳墠璐﹀彿");
if (user.WxmpOpenId.IsNull()) throw Oops.Oh(EnumUserErrorCodeType.u1100);
@@ -182,10 +194,14 @@
}
var bindPhoneNumberUser = await rep.AsQueryable()
- .Where(it => it.Type == logier.Type && it.PhoneNumber == info.PhoneNumber && it.Id != user.Id)
+ .Where(it => it.Type == type && it.PhoneNumber == info.PhoneNumber && it.Id != user.Id)
.FirstOrDefaultAsync(cancellationToken);
if (bindPhoneNumberUser == null)
{
+ if (type == EnumUserType.Enterprise)
+ {
+ throw Oops.Oh(EnumErrorCodeType.s404, "璇ヨ处鍙�");
+ }
user.PhoneNumber = info.PhoneNumber;
user.ContactPhoneNumber = info.PhoneNumber;
user.IsCheckPhoneNumber = true;
@@ -233,6 +249,7 @@
Type = EnumUserType.Personal,
UserName = request.PhoneNumber,
PhoneNumber = request.PhoneNumber,
+ ContactPhoneNumber = request.PhoneNumber,
IsCheckPhoneNumber = true,
Level = 1,
Status = EnumUserStatus.Normal
@@ -243,12 +260,37 @@
}
/// <summary>
+ /// 鏌ヨ涓汉鐢ㄦ埛鐧诲綍淇℃伅
+ /// </summary>
+ /// <param name="request"></param>
+ /// <param name="cancellationToken"></param>
+ /// <returns></returns>
+ public async Task<GetPersonalLoginInfoQueryResult> Handle(GetPersonalLoginInfoQuery request, CancellationToken cancellationToken)
+ {
+ var model = await rep.GetPersonalQueryable(true)
+ .GetDetail<User, GetPersonalLoginInfoQueryResult>(cancellationToken);
+ var taskUserQueryable = rep.Change<TaskInfoUser>().AsQueryable().AsNoTracking()
+ .Where(it => it.EnterpriseEmployee.UserId == model.Id);
+ model.TaskCount = await taskUserQueryable.CountAsync(tu =>
+ tu.EnterpriseEmployee.HireStatus == EnumTaskUserHireStatus.Wait
+ || tu.EnterpriseEmployee.UserSignContractStatus == EnumTaskUserSignContractStatus.Wait);
+ model.HirePassTaskCount = await taskUserQueryable.CountAsync(tu =>
+ tu.ArrangeStatus == EnumTaskUserArrangeStatus.Complete);
+ model.HireRefuseTaskCount = await taskUserQueryable.CountAsync(tu =>
+ tu.EnterpriseEmployee.HireStatus == EnumTaskUserHireStatus.Refuse
+ || tu.EnterpriseEmployee.UserSignContractStatus == EnumTaskUserSignContractStatus.Refuse
+ || tu.EnterpriseEmployee.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Refuse);
+ return model;
+ }
+
+ /// <summary>
/// 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛
/// </summary>
/// <param name="user"></param>
/// <param name="clientType"></param>
+ /// <param name="session_key"></param>
/// <returns></returns>
- private LoginCommandCallback GetCurrentLogier(User user, EnumClientType clientType)
+ private LoginCommandCallback GetCurrentLogier(User user, EnumClientType clientType, string? session_key = null)
{
var logier = new CurrentLogier
{
@@ -269,6 +311,7 @@
Id = logier.Id,
AccessToken = logier.AccessToken,
RefreshToken = logier.RefreshToken,
+ SessionKey = session_key,
IsBindPhoneNumber = logier.PhoneNumber.IsNotNull()
};
}
--
Gitblit v1.9.1