From 6001ccc7e7052b64931235b65a8b5d02f35ad1bd Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期四, 14 八月 2025 09:56:24 +0800 Subject: [PATCH] feat:开发 --- FlexJobApi.Core/FlexJobApi.Core.xml | 10 +++++ FlexJobApi.FlexJobServer.Application/TaskCheckReceives/Commands/TaskCheckReceiveCommandHandler.cs | 21 ++++++++++ FlexJobApi.UserServer.Application/UserResumes/Queries/UserResumeQueryHandler.cs | 55 +++++++++++++++++++++------ FlexJobApi.Core/Utils/ExcelUtils/ExcelUtils.cs | 14 ++++++ FlexJobApi.Core/Models/FlexJobServer/TaskCheckReceive/Commands/ExportTaskCheckReceiveTaskUsersCommand.cs | 8 ++++ FlexJobApi.Core/Models/UserServer/UserResumes/Queries/GetUserResumeQuery.cs | 7 +++ 6 files changed, 100 insertions(+), 15 deletions(-) diff --git a/FlexJobApi.Core/FlexJobApi.Core.xml b/FlexJobApi.Core/FlexJobApi.Core.xml index 307761e..96c374a 100644 --- a/FlexJobApi.Core/FlexJobApi.Core.xml +++ b/FlexJobApi.Core/FlexJobApi.Core.xml @@ -3828,6 +3828,11 @@ 浠诲姟Id </summary> </member> + <member name="P:FlexJobApi.Core.ExportTaskCheckReceiveTaskUsersCommandModel.UserId"> + <summary> + Id + </summary> + </member> <member name="P:FlexJobApi.Core.ExportTaskCheckReceiveTaskUsersCommandModel.Name"> <summary> 濮撳悕 @@ -7778,6 +7783,11 @@ 鐢ㄦ埛Id </summary> </member> + <member name="P:FlexJobApi.Core.GetUserResumeQuery.EnterpriseEmployeeId"> + <summary> + 鐏靛伐Id + </summary> + </member> <member name="T:FlexJobApi.Core.GetUserResumeQueryResult"> <summary> 鏌ヨ鐢ㄦ埛绠�鍘�-缁撴灉 diff --git a/FlexJobApi.Core/Models/FlexJobServer/TaskCheckReceive/Commands/ExportTaskCheckReceiveTaskUsersCommand.cs b/FlexJobApi.Core/Models/FlexJobServer/TaskCheckReceive/Commands/ExportTaskCheckReceiveTaskUsersCommand.cs index c5895c8..59cb68e 100644 --- a/FlexJobApi.Core/Models/FlexJobServer/TaskCheckReceive/Commands/ExportTaskCheckReceiveTaskUsersCommand.cs +++ b/FlexJobApi.Core/Models/FlexJobServer/TaskCheckReceive/Commands/ExportTaskCheckReceiveTaskUsersCommand.cs @@ -1,4 +1,6 @@ 锘縰sing MediatR; +using Newtonsoft.Json; +using Swashbuckle.AspNetCore.Annotations; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -23,6 +25,12 @@ public class ExportTaskCheckReceiveTaskUsersCommandModel { /// <summary> + /// Id + /// </summary> + [JsonIgnore, SwaggerIgnore] + public Guid UserId { get; set; } + + /// <summary> /// 濮撳悕 /// </summary> public string Name { get; set; } diff --git a/FlexJobApi.Core/Models/UserServer/UserResumes/Queries/GetUserResumeQuery.cs b/FlexJobApi.Core/Models/UserServer/UserResumes/Queries/GetUserResumeQuery.cs index 9b2c211..2547c4c 100644 --- a/FlexJobApi.Core/Models/UserServer/UserResumes/Queries/GetUserResumeQuery.cs +++ b/FlexJobApi.Core/Models/UserServer/UserResumes/Queries/GetUserResumeQuery.cs @@ -21,6 +21,11 @@ /// 鐢ㄦ埛Id /// </summary> public Guid? UserId { get; set; } + + /// <summary> + /// 鐏靛伐Id + /// </summary> + public Guid? EnterpriseEmployeeId { get; set; } } /// <summary> @@ -39,7 +44,7 @@ /// <summary> /// 鐢ㄦ埛Id /// </summary> - public Guid Id { get; set; } + public Guid? Id { get; set; } /// <summary> /// 瀹屽杽搴� diff --git a/FlexJobApi.Core/Utils/ExcelUtils/ExcelUtils.cs b/FlexJobApi.Core/Utils/ExcelUtils/ExcelUtils.cs index c13dd1d..efbe2d7 100644 --- a/FlexJobApi.Core/Utils/ExcelUtils/ExcelUtils.cs +++ b/FlexJobApi.Core/Utils/ExcelUtils/ExcelUtils.cs @@ -47,6 +47,14 @@ var config = new OpenXmlConfiguration(); config.TableStyles = TableStyles.None; config.AutoFilter = false; + config.FastMode = true; + config.EnableAutoWidth = true; + config.StyleOptions = new OpenXmlStyleOptions + { + WrapCellContents = false + }; + config.FreezeRowCount = 0; + config.DynamicColumns = typeof(T).GetProperties().Select(it => { var propertyType = it.PropertyType; @@ -68,8 +76,12 @@ return model?.Description; } return v; - } + }, }; + if (propertyType == typeof(DateTime)) + { + column.Format = "yyyy-MM-dd HH:mm:ss"; + } return column; }).ToArray(); var stream = new MemoryStream(); diff --git a/FlexJobApi.FlexJobServer.Application/TaskCheckReceives/Commands/TaskCheckReceiveCommandHandler.cs b/FlexJobApi.FlexJobServer.Application/TaskCheckReceives/Commands/TaskCheckReceiveCommandHandler.cs index 4a5a2c2..761c75c 100644 --- a/FlexJobApi.FlexJobServer.Application/TaskCheckReceives/Commands/TaskCheckReceiveCommandHandler.cs +++ b/FlexJobApi.FlexJobServer.Application/TaskCheckReceives/Commands/TaskCheckReceiveCommandHandler.cs @@ -168,6 +168,7 @@ .Where(it => it.TaskInfoUser.TaskInfoId == request.Id) .Select(it => new ExportTaskCheckReceiveTaskUsersCommandModel { + UserId = it.TaskInfoUser.EnterpriseEmployee.UserId!.Value, Name = it.TaskInfoUser.EnterpriseEmployee.User.Name, Identity = it.TaskInfoUser.EnterpriseEmployee.User.Identity, ContactPhoneNumber = it.TaskInfoUser.EnterpriseEmployee.User.ContactPhoneNumber, @@ -177,6 +178,26 @@ Code = "456" }) .ToListAsync(cancellationToken); + if (models.IsNotNull()) + { + var userIds = models.DistinctSelect(it => it.UserId); + var bankCards = await repTaskInfoUserSubmit.Change<UserBankCard>().AsQueryable().AsNoTracking() + .Where(it => userIds.Contains(it.UserId)) + .Select(it => new + { + it.UserId, + it.Bank, + it.Code + }) + .ToListAsync(cancellationToken); + foreach (var model in models) + { + var bankCard = bankCards.FirstOrDefault(it => it.UserId == model.UserId); + model.Bank = bankCard?.Bank; + model.Code = bankCard?.Code; + } + } + var url = await models.ExportExcelToOSS("TaskCheckReceive/Export", "楠屾敹璁板綍.xlsx"); url = AliyunOSSUtils.GetUrl(url); return url; diff --git a/FlexJobApi.UserServer.Application/UserResumes/Queries/UserResumeQueryHandler.cs b/FlexJobApi.UserServer.Application/UserResumes/Queries/UserResumeQueryHandler.cs index 92d1f94..995e92e 100644 --- a/FlexJobApi.UserServer.Application/UserResumes/Queries/UserResumeQueryHandler.cs +++ b/FlexJobApi.UserServer.Application/UserResumes/Queries/UserResumeQueryHandler.cs @@ -115,20 +115,49 @@ { request.UserId = logier.Id; } - if (request.UserId == null) throw Oops.Oh(EnumErrorCodeType.s400, "璇烽�夋嫨鐢ㄦ埛"); - var model = await rep.AsQueryable().AsNoTracking() - .Where(it => it.Id == request.UserId) - .GetDetail<User, GetUserResumeQueryResult>(cancellationToken); - model.TaskInfoUsers = model.TaskInfoUsers.Where(it => it.SignContractTime.HasValue).ToList(); - model.TaskCount = await rep.Change<TaskInfoUser>().AsQueryable().AsNoTracking() - .Where(it => it.EnterpriseEmployee.UserId == model.Id && it.EnterpriseEmployee.HireStatus == EnumTaskUserHireStatus.Pass) - .CountAsync(); - if (logier.Type == EnumUserType.Enterprise) + EnterpriseEmployee? enterpriseEmployee = null; + if (logier.Type == EnumUserType.Enterprise && request.UserId == null && request.EnterpriseEmployeeId.HasValue) { - model.IsCollected = await rep.Change<EnterpriseUserCollect>().AsQueryable().AsNoTracking() - .Where(it => it.EnterpriseId == logier.EnterpriseId && it.UserId == model.Id) - .Select(it => it.IsCollected) - .FirstOrDefaultAsync(); + enterpriseEmployee = await rep.Change<EnterpriseEmployee>().AsQueryable().AsNoTracking() + .Where(it => it.EnterpriseId == logier.EnterpriseId && it.Id == request.EnterpriseEmployeeId) + .FirstOrDefaultAsync(cancellationToken); + if (enterpriseEmployee == null) throw Oops.Oh(EnumErrorCodeType.s404, "璇ョ伒宸�"); + request.UserId = enterpriseEmployee.UserId; + } + else if (request.UserId == null) throw Oops.Oh(EnumErrorCodeType.s400, "璇烽�夋嫨鐢ㄦ埛"); + + GetUserResumeQueryResult? model = null; + if (request.UserId.HasValue) + { + model = await rep.AsQueryable().AsNoTracking() + .Where(it => it.Id == request.UserId) + .GetDetail<User, GetUserResumeQueryResult>(cancellationToken); + } + else if (enterpriseEmployee != null) + { + model = new GetUserResumeQueryResult + { + Name = enterpriseEmployee.Name, + ContactPhoneNumber = enterpriseEmployee.ContactPhoneNumber, + Identity = enterpriseEmployee.Identity, + Gender = enterpriseEmployee.Gender, + Age = enterpriseEmployee.Age, + }; + } + if (model == null) throw Oops.Oh(EnumErrorCodeType.s404, "璇ヤ俊鎭�"); + model.TaskInfoUsers = model.TaskInfoUsers.Where(it => it.SignContractTime.HasValue).ToList(); + if (model.Id.HasValue) + { + model.TaskCount = await rep.Change<TaskInfoUser>().AsQueryable().AsNoTracking() + .Where(it => it.EnterpriseEmployee.UserId == model.Id && it.EnterpriseEmployee.HireStatus == EnumTaskUserHireStatus.Pass) + .CountAsync(); + if (logier.Type == EnumUserType.Enterprise) + { + model.IsCollected = await rep.Change<EnterpriseUserCollect>().AsQueryable().AsNoTracking() + .Where(it => it.EnterpriseId == logier.EnterpriseId && it.UserId == model.Id) + .Select(it => it.IsCollected) + .FirstOrDefaultAsync(); + } } if (model.CityCode.IsNotNull()) { -- Gitblit v1.9.1