From 3a57c342ff5b39467b9dd0d5ba3c624311a581f1 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期五, 22 八月 2025 16:44:06 +0800 Subject: [PATCH] feat:开发 --- FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs | 108 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 97 insertions(+), 11 deletions(-) diff --git a/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs b/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs index 1dea969..ba2e8dd 100644 --- a/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs +++ b/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs @@ -2,10 +2,12 @@ using Furion; using Furion.DatabaseAccessor; using Furion.DataValidation; +using Furion.DistributedIDGenerator; using Furion.FriendlyException; using Furion.HttpRemote; using Mapster; using MediatR; +using Microsoft.AspNetCore.Components.Forms; using Microsoft.EntityFrameworkCore; using MiniExcelLibs; using NetTopologySuite.Index.HPRtree; @@ -16,6 +18,7 @@ using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; +using static System.Runtime.InteropServices.JavaScript.JSType; namespace FlexJobApi.UserServer.Application { @@ -23,12 +26,19 @@ /// 鐏靛伐鍛戒护澶勭悊鍣� /// </summary> public class EnterpriseEmployeesCommandHandler( - IRepository<EnterpriseEmployee> rep + IMediator mediator, + IRepository<EnterpriseEmployee> rep, + IRepository<User> repUser, + IRepository<EnterpriseEmployeeContract> repEnterpriseEmployeeContract ) : IRequestHandler<ImportEnterpriseEmployeesCommand, ImportEnterpriseEmployeesCommandResult>, - IRequestHandler<EditEnterpriseEmployeeCommand, Guid> + IRequestHandler<EditEnterpriseEmployeeCommand, Guid>, + IRequestHandler<InviteElectronSignCommand, Guid> { + private readonly IMediator mediator = mediator; private readonly IRepository<EnterpriseEmployee> rep = rep; + private readonly IRepository<User> repUser = repUser; + private readonly IRepository<EnterpriseEmployeeContract> repEnterpriseEmployeeContract = repEnterpriseEmployeeContract; /// <summary> /// 瀵煎叆鐏靛伐淇℃伅 @@ -45,6 +55,11 @@ var enterpriseEmployees = await rep.AsQueryable() .Where(it => it.EnterpriseId == logier.EnterpriseId && identities.Contains(it.Identity)) .ToListAsync(); + var userIds = enterpriseEmployees.DistinctSelect(it => it.UserId.HasValue, it => it.UserId!.Value); + var users = await repUser.AsQueryable() + .Where(it => userIds.Contains(it.Id)) + .ToListAsync(); + var successList = new List<ImportEnterpriseEmployeesCommandModel>(); foreach (var model in models) { var errors = new List<string>(); @@ -56,7 +71,7 @@ { errors.Add("璇峰~鍐欐墜鏈哄彿"); } - else if (!model.ContactPhoneNumber.TryValidate(EnumValidationTypes.PhoneNumber).IsValid) + else if (!model.ContactPhoneNumber.TryValidate(EnumValidationTypes.ValidPhoneNumber).IsValid) { errors.Add("鎵嬫満鍙锋牸寮忎笉姝g‘"); } @@ -64,11 +79,11 @@ { errors.Add("璇峰~鍐欒韩浠借瘉鍙�"); } - else if (!model.Identity.TryValidate(EnumValidationTypes.Identity).IsValid) + else if (!model.Identity.TryValidate(EnumValidationTypes.ValiIdentity).IsValid) { errors.Add("韬唤璇佸彿鏍煎紡涓嶆纭�"); } - else if (models.Any(it => it.Identity == model.Identity)) + else if (successList.Any(it => it.Identity == model.Identity)) { errors.Add("韬唤璇佸彿閲嶅"); } @@ -95,14 +110,31 @@ Age = model.Age, }; await rep.InsertAsync(enterpriseEmployee); + successList.Add(model); } else { + var canUpdate = true; if (enterpriseEmployee.UserId.HasValue) { - errors.Add("璇ョ伒宸ュ凡鎶ュ悕鏃犳硶淇敼淇℃伅"); + var user = users.FirstOrDefault(it => it.Id == enterpriseEmployee.UserId.Value)!; + if (user.IsReal == true) + { + canUpdate = false; + errors.Add("宸插疄鍚嶆棤娉曚慨鏀逛俊鎭�"); + } + else + { + user.Name = model.Name; + user.ContactPhoneNumber = model.ContactPhoneNumber; + user.Identity = model.Identity; + user.Gender = model.Gender; + user.Birthday = model.Birthday; + user.Age = model.Age; + await repUser.UpdateAsync(user); + } } - else + if (canUpdate) { enterpriseEmployee.Name = model.Name; enterpriseEmployee.ContactPhoneNumber = model.ContactPhoneNumber; @@ -110,6 +142,7 @@ enterpriseEmployee.Birthday = model.Birthday; enterpriseEmployee.Age = model.Age; await rep.UpdateAsync(enterpriseEmployee); + successList.Add(model); } } } @@ -132,21 +165,74 @@ /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> - public Task<Guid> Handle(EditEnterpriseEmployeeCommand request, CancellationToken cancellationToken) + public async Task<Guid> Handle(EditEnterpriseEmployeeCommand request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); - return request.SaveData<EnterpriseEmployee, EditEnterpriseEmployeeCommand>( + var entity = await request.SaveData<EnterpriseEmployee, EditEnterpriseEmployeeCommand>( q => q.Where(it => it.EnterpriseId == logier.EnterpriseId), it => it.EnterpriseId == logier.EnterpriseId && it.Id != request.Id && it.Identity == request.Identity, - (entity) => + (entity) => { if (request.Id.HasValue && entity.UserId.HasValue) { - throw Oops.Oh(EnumErrorCodeType.s510, "璇ョ伒宸ュ凡鎶ュ悕鏃犳硶淇敼淇℃伅"); + var user = repUser.AsQueryable().FirstOrDefault(it => it.Id == entity.UserId.Value); + if (user!.IsReal == true) + { + throw Oops.Oh(EnumErrorCodeType.s510, "宸插疄鍚嶆棤娉曚慨鏀逛俊鎭�"); + } + else + { + user.Name = request.Name; + user.ContactPhoneNumber = request.ContactPhoneNumber; + user.Identity = request.Identity; + user.Birthday = request.Identity.GetBirthday(); + user.Gender = request.Gender; + user.Age = request.Age; + repUser.Update(user); + } } request.Adapt(entity); }, cancellationToken); + return entity.Id; + } + + /// <summary> + /// 閭�璇风伒宸ョ绾� + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<Guid> Handle(InviteElectronSignCommand request, CancellationToken cancellationToken) + { + var logier = JwtUtils.GetCurrentLogier(); + var entity = await rep.AsQueryable() + .Where(it => it.EnterpriseId == logier.EnterpriseId && it.Id == request.Id) + .FirstOrDefaultAsync(); + if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "鐏靛伐"); + if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Pass) throw Oops.Oh(EnumErrorCodeType.s400, "宸茬绾�"); + if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Effect) throw Oops.Oh(EnumErrorCodeType.s400, "宸茬敓鏁�"); + if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Wait) throw Oops.Oh(EnumErrorCodeType.s400, "宸查個璇�"); + await mediator.Send(new CheckContractTemplateCommand + { + Id = request.Id + }, cancellationToken); + entity.ContractTemplateId = request.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)}"; + var contract = new EnterpriseEmployeeContract + { + EnterpriseEmployeeId = entity.Id, + ContractTemplateId = entity.ContractTemplateId, + ContractCode = entity.ContractCode, + UserSignContractStatus = entity.UserSignContractStatus, + }; + await repEnterpriseEmployeeContract.InsertAsync(contract); + await rep.UpdateAsync(entity); + return entity.Id; } } } -- Gitblit v1.9.1