using FlexJobApi.Core; using Furion; using Furion.DatabaseAccessor; using Furion.DataValidation; 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; namespace FlexJobApi.UserServer.Application { /// /// 灵工命令处理器 /// public class EnterpriseEmployeesCommandHandler( IRepository rep ) : IRequestHandler, IRequestHandler { private readonly IRepository rep = rep; /// /// 导入灵工信息 /// /// /// /// public async Task Handle(ImportEnterpriseEmployeesCommand request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var result = new ImportEnterpriseEmployeesCommandResult(); var models = await request.ExcelUrl.ImportExcelFromOSS(); var identities = models.DistinctSelect(it => it.Identity); var enterpriseEmployees = await rep.AsQueryable() .Where(it => it.EnterpriseId == logier.EnterpriseId && identities.Contains(it.Identity)) .ToListAsync(); var successList = new List(); foreach (var model in models) { var errors = new List(); if (model.Name.IsNull()) { errors.Add("请填写姓名"); } if (model.ContactPhoneNumber.IsNull()) { errors.Add("请填写手机号"); } else if (!model.ContactPhoneNumber.TryValidate(EnumValidationTypes.ValidPhoneNumber).IsValid) { errors.Add("手机号格式不正确"); } 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 { if (enterpriseEmployee.UserId.HasValue) { errors.Add("已报名无法修改信息"); } else { 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(); 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; } /// /// 编辑灵工信息 /// /// /// /// public Task Handle(EditEnterpriseEmployeeCommand request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); return request.SaveData( 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, "已报名无法修改信息"); } request.Adapt(entity); }, cancellationToken); } } }