From 2370d9c2c36f6e132603a7674474489e82ae942c Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期五, 12 九月 2025 10:50:52 +0800 Subject: [PATCH] feat:开发 --- FlexJobApi.UserServer.Application/EnterpriseEmployees/Queries/EnterpriseEmployeeQueryHandler.cs | 240 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 230 insertions(+), 10 deletions(-) diff --git a/FlexJobApi.UserServer.Application/EnterpriseEmployees/Queries/EnterpriseEmployeeQueryHandler.cs b/FlexJobApi.UserServer.Application/EnterpriseEmployees/Queries/EnterpriseEmployeeQueryHandler.cs index e6f7c30..0c59ee7 100644 --- a/FlexJobApi.UserServer.Application/EnterpriseEmployees/Queries/EnterpriseEmployeeQueryHandler.cs +++ b/FlexJobApi.UserServer.Application/EnterpriseEmployees/Queries/EnterpriseEmployeeQueryHandler.cs @@ -1,11 +1,16 @@ -锘縰sing FlexJobApi.Core; +锘縰sing Aop.Api.Domain; +using FlexJobApi.Core; using Furion.DatabaseAccessor; +using Furion.DistributedIDGenerator; +using Furion.FriendlyException; using Mapster; using MediatR; +using Microsoft.AspNetCore.Components.Forms; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; +using System.Security.Principal; using System.Text; using System.Threading.Tasks; @@ -15,12 +20,24 @@ /// 鐏靛伐鏌ヨ澶勭悊鍣� /// </summary> public class EnterpriseEmployeeQueryHandler( - IRepository<EnterpriseEmployee> rep + IRepository<EnterpriseEmployee> rep, + IRepository<ContractTemplate> repContractTemplate, + IRepository<EnterpriseEmployeeContract> repEnterpriseEmployeeContract, + IRepository<Enterprise> repEnterprise, + IRepository<User> repUser, + IMediator mediator ) : IRequestHandler<GetEnterpriseEmployeesQuery, GetEnterpriseEmployeesQueryResult>, - IRequestHandler<GetEnterpriseEmployeeQuery, GetEnterpriseEmployeeQueryResult> + IRequestHandler<GetEnterpriseEmployeeQuery, GetEnterpriseEmployeeQueryResult>, + IRequestHandler<GetPersonalUserElectronSignsQuery, GetPersonalUserElectronSignsQueryResult>, + IRequestHandler<GetPersonalUserElectronSignQuery, GetPersonalUserElectronSignQueryResult> { private readonly IRepository<EnterpriseEmployee> rep = rep; + private readonly IRepository<ContractTemplate> repContractTemplate = repContractTemplate; + private readonly IRepository<EnterpriseEmployeeContract> repEnterpriseEmployeeContract = repEnterpriseEmployeeContract; + private readonly IRepository<Enterprise> repEnterprise = repEnterprise; + private readonly IRepository<User> repUser = repUser; + private readonly IMediator mediator = mediator; /// <summary> /// 鏌ヨ鐏靛伐鍒嗛〉鍒楄〃鏁版嵁 @@ -63,13 +80,56 @@ { q = q.Where(it => (it.UserId.HasValue && it.User.IsReal) == request.IsReal.Value); } - if (request.UserSignContractStatus.HasValue) + if (request.SignContractStatus.HasValue) { - q = q.Where(it => it.UserSignContractStatus == request.UserSignContractStatus); + switch (request.SignContractStatus.Value) + { + case EnumGetEnterpriseEmployeesQuerySignContractStatus.UserWait: + q = q.Where(it => it.UserSignContractStatus == null || it.UserSignContractStatus == EnumTaskUserSignContractStatus.Wait); + break; + case EnumGetEnterpriseEmployeesQuerySignContractStatus.EnterpriseWait: + q = q.Where(it => it.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Wait); + break; + case EnumGetEnterpriseEmployeesQuerySignContractStatus.Pass: + q = q.Where(it => + it.UserSignContractStatus == EnumTaskUserSignContractStatus.Pass + && it.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Pass); + break; + default: + break; + } } - if (request.EnterpriseSignContractStatus.HasValue) + else { - q = q.Where(it => it.EnterpriseSignContractStatus == request.EnterpriseSignContractStatus); + if (request.UserSignContractStatus.HasValue) + { + if (logier.ClientType == EnumClientType.Wxmp) + { + switch (request.UserSignContractStatus.Value) + { + case EnumTaskUserSignContractStatus.Wait: + q = q.Where(it => it.UserSignContractStatus == null || it.UserSignContractStatus == request.UserSignContractStatus); + break; + case EnumTaskUserSignContractStatus.Pass: + q = q.Where(it => it.UserSignContractStatus == request.UserSignContractStatus && it.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Pass); + break; + case EnumTaskUserSignContractStatus.Stop: + q = q.Where(it => it.UserSignContractStatus == request.UserSignContractStatus); + break; + default: + q = q.Where(it => it.UserSignContractStatus == request.UserSignContractStatus); + break; + } + } + else + { + q = q.Where(it => it.UserSignContractStatus == request.UserSignContractStatus); + } + } + if (request.EnterpriseSignContractStatus.HasValue) + { + q = q.Where(it => it.EnterpriseSignContractStatus == request.EnterpriseSignContractStatus); + } } var s = q.Select(it => new GetEnterpriseEmployeesQueryResultItem { @@ -80,7 +140,7 @@ Gender = it.Gender, Age = it.Age, ContactPhoneNumber = it.ContactPhoneNumber, - UserIsReal = it.User.IsReal, + UserIsReal = it.User.IsReal == true, RealMethod = it.User.RealMethod, PersonalIdentityCode = it.User.PersonalIdentityCode, PersonalIdentityContent = it.User.PersonalIdentity.Content, @@ -97,13 +157,14 @@ UserSignContractStatus = it.UserSignContractStatus, HireTime = it.TaskInfoUsers .OrderBy(tu => tu.HireTime) - .Where(tu => tu.HireStatus == EnumTaskUserHireStatus.Pass && tu.HireTime.HasValue) + .Where(tu => tu.HireTime.HasValue) .Select(tu => tu.HireTime) .FirstOrDefault(), UserRealTime = it.User.RealTime, UserSignContractTime = it.UserSignContractTime, EnterpriseSignContractStatus = it.EnterpriseSignContractStatus, - EnterpriseSignContractTime = it.EnterpriseSignContractTime + EnterpriseSignContractTime = it.EnterpriseSignContractTime, + ContractUrl = it.ContractUrl, }); return await request.PageModel.GetPagedListAsync<GetEnterpriseEmployeesQueryResult, GetEnterpriseEmployeesQueryResultItem>(s, cancellationToken); } @@ -138,5 +199,164 @@ return model; } + + /// <summary> + /// 鏌ヨ涓汉鐢ㄦ埛绛剧害鍒楄〃 + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<GetPersonalUserElectronSignsQueryResult> Handle(GetPersonalUserElectronSignsQuery request, CancellationToken cancellationToken) + { + var logier = JwtUtils.GetCurrentLogier(); + var q = rep.AsQueryable().AsNoTracking() + .Where(it => it.UserId == logier.Id); + if (request.UserSignContractStatus.HasValue) + { + if (request.UserSignContractStatus == EnumTaskUserSignContractStatus.Pass) + { + q = q.Where(it => it.UserSignContractStatus == EnumTaskUserSignContractStatus.Pass && it.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Pass); + } + else + { + q = q.Where(it => it.UserSignContractStatus == request.UserSignContractStatus.Value); + } + } + else + { + q = q.Where(it => + it.UserSignContractStatus == EnumTaskUserSignContractStatus.Wait + || it.UserSignContractStatus == EnumTaskUserSignContractStatus.Pass && it.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Pass + || it.UserSignContractStatus == EnumTaskUserSignContractStatus.Stop); + } + var s = q.Select(it => new GetPersonalUserElectronSignsQueryResultItem + { + Id = it.Id, + EnterpriseName = it.Enterprise.EnterpriseName, + UserSignContractStatus = it.UserSignContractStatus, + }); + return await request.PageModel.GetPagedListAsync<GetPersonalUserElectronSignsQueryResult, GetPersonalUserElectronSignsQueryResultItem>(s, cancellationToken); + } + + /// <summary> + /// 鏌ヨ涓汉鐢ㄦ埛绛剧害璇︽儏 + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<GetPersonalUserElectronSignQueryResult> Handle(GetPersonalUserElectronSignQuery request, CancellationToken cancellationToken) + { + var logier = JwtUtils.GetCurrentLogier(); + if (request.Id.HasValue) + { + var model = await rep.AsQueryable().AsNoTracking() + .Where(it => it.UserId == logier.Id && it.Id == request.Id) + .GetDetail<EnterpriseEmployee, GetPersonalUserElectronSignQueryResult>(); + return model; + } + else if (request.Code.IsNotNull()) + { + var contractTemplate = await repContractTemplate.AsQueryable().AsNoTracking() + .Where(it => it.Code == request.Code) + .FirstOrDefaultAsync(); + if (contractTemplate == null) throw Oops.Oh(EnumErrorCodeType.s404, "鍚堝悓"); + + await mediator.Send(new CheckContractTemplateCommand + { + Id = contractTemplate.Id + }, cancellationToken); + + var entity = await rep.AsQueryable() + .Where(it => + it.UserId == logier.Id + && it.ContractTemplateId == contractTemplate.Id) + .FirstOrDefaultAsync(); + var enterprise = await repEnterprise.AsQueryable() + .Where(it => it.Id == contractTemplate.EnterpriseId) + .Select(it => new + { + it.EnterpriseName + }) + .FirstOrDefaultAsync(); + if (enterprise == null) throw Oops.Oh(EnumErrorCodeType.s404, "浼佷笟"); + var add = false; + if (entity == null) + { + var user = await repUser.AsQueryable().AsNoTracking() + .Include(it => it.UserAuth) + .Where(it => it.Id == logier.Id) + .Select(it => new + { + it.Name, + it.Identity, + it.ContactPhoneNumber, + it.Gender, + it.Age, + it.UserAuth.IdentityImg, + it.UserAuth.IdentityBackImg + }) + .FirstOrDefaultAsync(cancellationToken); + if (user == null) throw Oops.Oh(EnumErrorCodeType.s404, "璐﹀彿"); + entity = new EnterpriseEmployee + { + Id = IDGen.NextID(), + EnterpriseId = contractTemplate.EnterpriseId, + UserId = logier.Id, + Name = user.Name, + Identity = user.Identity, + ContactPhoneNumber = user.ContactPhoneNumber, + Gender = user.Gender, + Age = user.Age, + IdentityImg = user.IdentityImg, + IdentityBackImg = user.IdentityBackImg, + }; + add = true; + } + if (entity.UserSignContractStatus == null) + { + entity.ContractTemplateId = contractTemplate.Id; + entity.UserSignContractStatus = EnumTaskUserSignContractStatus.Wait; + entity.UserSignContractTime = null; + entity.EnterpriseSignContractStatus = null; + entity.EnterpriseSignContractTime = null; + entity.ContractCode = $"{DateTime.Now:yyyyMMddHHmmss}{new Random(IDGen.NextID().GetHashCode()).Next(1000, 9999)}"; + entity.ContractUrl = null; + var contract = new EnterpriseEmployeeContract + { + EnterpriseEmployeeId = entity.Id, + ContractTemplateId = entity.ContractTemplateId, + ContractCode = entity.ContractCode, + UserSignContractStatus = entity.UserSignContractStatus, + }; + await repEnterpriseEmployeeContract.InsertAsync(contract); + } + if (add) + { + await rep.InsertAsync(entity); + } + else + { + await rep.UpdateAsync(entity); + } + return new GetPersonalUserElectronSignQueryResult + { + Id = entity.Id, + ContractCode = entity.ContractCode, + ContractTemplateAccess = contractTemplate.Access, + UserSignContractStatus = entity.UserSignContractStatus, + Name = entity.Name, + Identity = entity.Identity, + ContactPhoneNumber = entity.ContactPhoneNumber, + UserSignContractTime = entity.UserSignContractTime, + EnterpriseEnterpriseName = enterprise.EnterpriseName, + EnterpriseSignContractTime = entity.EnterpriseSignContractTime, + ContractUrl = entity.ContractUrl, + }; + } + else + { + throw Oops.Oh(EnumErrorCodeType.s400, "璇峰~鍐欑伒宸d鎴栧悎鍚屾ā鏉跨紪鍙�"); + } + } } } -- Gitblit v1.9.1