From baed9bce4ccb41668f3740d77a7b664918e6403b Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期五, 22 八月 2025 15:59:44 +0800 Subject: [PATCH] feat:开发 --- FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs | 191 ++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 179 insertions(+), 12 deletions(-) diff --git a/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs b/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs index cd62045..564a73d 100644 --- a/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs +++ b/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs @@ -1,17 +1,23 @@ 锘縰sing FlexJobApi.Core; using Furion; using Furion.DatabaseAccessor; +using Furion.DataValidation; +using Furion.DistributedIDGenerator; using Furion.FriendlyException; using Furion.HttpRemote; using Mapster; using MediatR; using Microsoft.EntityFrameworkCore; using MiniExcelLibs; +using NetTopologySuite.Index.HPRtree; using System; using System.Collections.Generic; using System.Linq; +using System.Security.Principal; using System.Text; +using System.Text.RegularExpressions; using System.Threading.Tasks; +using static System.Runtime.InteropServices.JavaScript.JSType; namespace FlexJobApi.UserServer.Application { @@ -19,12 +25,17 @@ /// 鐏靛伐鍛戒护澶勭悊鍣� /// </summary> public class EnterpriseEmployeesCommandHandler( - IRepository<EnterpriseEmployee> rep + IRepository<EnterpriseEmployee> rep, + IRepository<User> repUser, + IRepository<EnterpriseEmployeeContract> repEnterpriseEmployeeContract ) : - IRequestHandler<ImportEnterpriseEmployeesCommand, int>, - IRequestHandler<EditEnterpriseEmployeeCommand, Guid> + IRequestHandler<ImportEnterpriseEmployeesCommand, ImportEnterpriseEmployeesCommandResult>, + IRequestHandler<EditEnterpriseEmployeeCommand, Guid>, + IRequestHandler<InviteEnterpriseEmployeeElectronSignCommand, Guid> { private readonly IRepository<EnterpriseEmployee> rep = rep; + private readonly IRepository<User> repUser = repUser; + private readonly IRepository<EnterpriseEmployeeContract> repEnterpriseEmployeeContract = repEnterpriseEmployeeContract; /// <summary> /// 瀵煎叆鐏靛伐淇℃伅 @@ -32,11 +43,117 @@ /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> - public async Task<int> Handle(ImportEnterpriseEmployeesCommand request, CancellationToken cancellationToken) + public async Task<ImportEnterpriseEmployeesCommandResult> Handle(ImportEnterpriseEmployeesCommand request, CancellationToken cancellationToken) { + var logier = JwtUtils.GetCurrentLogier(); + var result = new ImportEnterpriseEmployeesCommandResult(); var models = await request.ExcelUrl.ImportExcelFromOSS<ImportEnterpriseEmployeesCommandModel>(); - Console.WriteLine(); - throw new NotImplementedException(); + var identities = models.DistinctSelect(it => it.Identity); + 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>(); + if (model.Name.IsNull()) + { + errors.Add("璇峰~鍐欏鍚�"); + } + if (model.ContactPhoneNumber.IsNull()) + { + errors.Add("璇峰~鍐欐墜鏈哄彿"); + } + else if (!model.ContactPhoneNumber.TryValidate(EnumValidationTypes.ValidPhoneNumber).IsValid) + { + errors.Add("鎵嬫満鍙锋牸寮忎笉姝g‘"); + } + if (model.Identity.IsNull()) + { + errors.Add("璇峰~鍐欒韩浠借瘉鍙�"); + } + else if (!model.Identity.TryValidate(EnumValidationTypes.ValiIdentity).IsValid) + { + errors.Add("韬唤璇佸彿鏍煎紡涓嶆纭�"); + } + else if (successList.Any(it => it.Identity == model.Identity)) + { + errors.Add("韬唤璇佸彿閲嶅"); + } + else + { + model.Gender = model.Identity.GetGender(); + model.Birthday = model.Identity.GetBirthday(); + model.Age = model.Identity.GetAge(); + } + + if (errors.IsNull()) + { + var enterpriseEmployee = enterpriseEmployees.FirstOrDefault(it => it.Identity == model.Identity); + if (enterpriseEmployee == null) + { + enterpriseEmployee = new EnterpriseEmployee + { + EnterpriseId = logier.EnterpriseId!.Value, + Name = model.Name, + Identity = model.Identity, + ContactPhoneNumber = model.ContactPhoneNumber, + Gender = model.Gender, + Birthday = model.Birthday, + Age = model.Age, + }; + await rep.InsertAsync(enterpriseEmployee); + successList.Add(model); + } + else + { + var canUpdate = true; + if (enterpriseEmployee.UserId.HasValue) + { + 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); + } + } + if (canUpdate) + { + enterpriseEmployee.Name = model.Name; + enterpriseEmployee.ContactPhoneNumber = model.ContactPhoneNumber; + enterpriseEmployee.Gender = model.Gender; + enterpriseEmployee.Birthday = model.Birthday; + enterpriseEmployee.Age = model.Age; + await rep.UpdateAsync(enterpriseEmployee); + successList.Add(model); + } + } + } + if (errors.IsNotNull()) + { + var error = model.Adapt<ImportEnterpriseEmployeesCommandResultError>(); + error.ErrorMessage = errors.SplitJoin("锛�"); + result.Errors.Add(error); + } + } + result.TotalCount = models.Count; + result.FailCount = result.Errors.Count; + result.SuccessCount = result.TotalCount - result.FailCount; + return result; } /// <summary> @@ -45,20 +162,70 @@ /// <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) { - return request.SaveData<EnterpriseEmployee, EditEnterpriseEmployeeCommand>( - null, - null, - (entity) => + var logier = JwtUtils.GetCurrentLogier(); + 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) => { 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(InviteEnterpriseEmployeeElectronSignCommand 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, "宸查個璇�"); + 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