From 4b574fd74eece20f4e64b48c39c5aa6ad70b0d0f Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期一, 18 八月 2025 16:47:46 +0800 Subject: [PATCH] feat:开发 --- FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs | 132 +++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 123 insertions(+), 9 deletions(-) diff --git a/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs b/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs index 575f837..d7ea59e 100644 --- a/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs +++ b/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs @@ -1,6 +1,7 @@ 锘縰sing FlexJobApi.Core; using Furion; using Furion.DatabaseAccessor; +using Furion.DataValidation; using Furion.FriendlyException; using Furion.HttpRemote; using Mapster; @@ -11,9 +12,11 @@ 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 { @@ -21,12 +24,14 @@ /// 鐏靛伐鍛戒护澶勭悊鍣� /// </summary> public class EnterpriseEmployeesCommandHandler( - IRepository<EnterpriseEmployee> rep + IRepository<EnterpriseEmployee> rep, + IRepository<User> repUser ) : IRequestHandler<ImportEnterpriseEmployeesCommand, ImportEnterpriseEmployeesCommandResult>, IRequestHandler<EditEnterpriseEmployeeCommand, Guid> { private readonly IRepository<EnterpriseEmployee> rep = rep; + private readonly IRepository<User> repUser = repUser; /// <summary> /// 瀵煎叆鐏靛伐淇℃伅 @@ -36,20 +41,114 @@ /// <returns></returns> public async Task<ImportEnterpriseEmployeesCommandResult> Handle(ImportEnterpriseEmployeesCommand request, CancellationToken cancellationToken) { + var logier = JwtUtils.GetCurrentLogier(); var result = new ImportEnterpriseEmployeesCommandResult(); var models = await request.ExcelUrl.ImportExcelFromOSS<ImportEnterpriseEmployeesCommandModel>(); + 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 error = new ImportEnterpriseEmployeesCommandResultError(); + var errors = new List<string>(); + if (model.Name.IsNull()) + { + errors.Add("璇峰~鍐欏鍚�"); + } if (model.ContactPhoneNumber.IsNull()) { - error.ErrorMessage += "璇峰~鍐欐墜鏈哄彿"; + errors.Add("璇峰~鍐欐墜鏈哄彿"); } - else if (!Regex.IsMatch(model.ContactPhoneNumber, @"^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$")) + else if (!model.ContactPhoneNumber.TryValidate(EnumValidationTypes.ValidPhoneNumber).IsValid) { - error.ErrorMessage += "鎵嬫満鍙锋牸寮忎笉姝g‘"; + 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; } @@ -61,14 +160,29 @@ /// <returns></returns> public Task<Guid> Handle(EditEnterpriseEmployeeCommand request, CancellationToken cancellationToken) { + var logier = JwtUtils.GetCurrentLogier(); return request.SaveData<EnterpriseEmployee, EditEnterpriseEmployeeCommand>( - null, - null, - (entity) => + q => q.Where(it => it.EnterpriseId == logier.EnterpriseId), + it => it.EnterpriseId == logier.EnterpriseId && it.Id != request.Id && it.Identity == request.Identity, + async (entity) => { if (request.Id.HasValue && entity.UserId.HasValue) { - throw Oops.Oh(EnumErrorCodeType.s510, "璇ョ伒宸ュ凡鎶ュ悕鏃犳硶淇敼淇℃伅"); + var user = await repUser.AsQueryable().FirstOrDefaultAsync(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; + await repUser.UpdateAsync(user); + } } request.Adapt(entity); }, -- Gitblit v1.9.1