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; using static System.Runtime.InteropServices.JavaScript.JSType; namespace FlexJobApi.UserServer.Application { /// /// 灵工命令处理器 /// public class EnterpriseEmployeesCommandHandler( IRepository rep, IRepository repUser ) : IRequestHandler, IRequestHandler { private readonly IRepository rep = rep; private readonly IRepository repUser = repUser; /// /// 导入灵工信息 /// /// /// /// 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 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(); 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 { 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(); 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 async Task Handle(EditEnterpriseEmployeeCommand request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var entity = await 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) { 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; } } }