From fc35150cfe2401b93fa9f4d536b5e151b904bdf7 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期三, 13 八月 2025 16:40:38 +0800 Subject: [PATCH] feat:开发 --- FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseUserCollect.cs | 54 +++++++++ FlexJobApi.FlexJobServer.Application/TaskUsers/Commands/TaskUserCommandHandler.cs | 12 +- FlexJobApi.Core/Models/UserServer/UserResumes/Commands/CollectUserResumeCommand.cs | 26 ++++ FlexJobApi.FlexJobServer.Application/FlexJobApi.FlexJobServer.Application.xml | 2 FlexJobApi.UserServer.Application/UserResumes/Commands/UserResumeCommandHandler.cs | 76 ++++++++++++ FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs | 5 FlexJobApi.Core/FlexJobApi.Core.xml | 85 +++++++++++++ FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml | 18 ++ FlexJobApi.Core/Models/UserServer/UserResumes/Commands/ContactUserResumeCommand.cs | 21 +++ FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs | 2 FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskUserCollect.cs | 2 11 files changed, 286 insertions(+), 17 deletions(-) diff --git a/FlexJobApi.Core/Entities/FlexJobServer/Tasks/UserTaskCollect.cs b/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskUserCollect.cs similarity index 93% rename from FlexJobApi.Core/Entities/FlexJobServer/Tasks/UserTaskCollect.cs rename to FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskUserCollect.cs index f41cb8b..b036cea 100644 --- a/FlexJobApi.Core/Entities/FlexJobServer/Tasks/UserTaskCollect.cs +++ b/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskUserCollect.cs @@ -9,7 +9,7 @@ /// <summary> /// 鐢ㄦ埛浠诲姟鏀惰棌 /// </summary> - public class UserTaskCollect : CommonEntity + public class TaskUserCollect : CommonEntity { /// <summary> /// 鐢ㄦ埛Id diff --git a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseUserCollect.cs b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseUserCollect.cs new file mode 100644 index 0000000..311a309 --- /dev/null +++ b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseUserCollect.cs @@ -0,0 +1,54 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 浼佷笟鏀惰棌鐢ㄦ埛 + /// </summary> + public class EnterpriseUserCollect : CommonEntity + { + /// <summary> + /// 浼佷笟Id + /// </summary> + public Guid EnterpriseId { get; set; } + + /// <summary> + /// 浼佷笟 + /// </summary> + public Enterprise Enterprise { get; set; } + + /// <summary> + /// 鐢ㄦ埛淇℃伅Id + /// </summary> + public Guid UserId { get; set; } + + /// <summary> + /// 鐢ㄦ埛淇℃伅 + /// </summary> + public User User { get; set; } + + /// <summary> + /// 鏄惁宸叉敹钘� + /// </summary> + public bool IsCollected { get; set; } + + /// <summary> + /// 鏀惰棌鏃堕棿 + /// </summary> + public DateTime? CollectedTime { get; set; } + + /// <summary> + /// 鏄惁宸茶仈绯� + /// </summary> + public bool IsContacted { get; set; } + + /// <summary> + /// 鑱旂郴鏃堕棿 + /// </summary> + public DateTime? ContactedTime { get; set; } + } +} diff --git a/FlexJobApi.Core/FlexJobApi.Core.xml b/FlexJobApi.Core/FlexJobApi.Core.xml index 3bf7f1a..5568d03 100644 --- a/FlexJobApi.Core/FlexJobApi.Core.xml +++ b/FlexJobApi.Core/FlexJobApi.Core.xml @@ -1034,27 +1034,27 @@ 闄勪欢 </summary> </member> - <member name="T:FlexJobApi.Core.UserTaskCollect"> + <member name="T:FlexJobApi.Core.TaskUserCollect"> <summary> 鐢ㄦ埛浠诲姟鏀惰棌 </summary> </member> - <member name="P:FlexJobApi.Core.UserTaskCollect.UserId"> + <member name="P:FlexJobApi.Core.TaskUserCollect.UserId"> <summary> 鐢ㄦ埛Id </summary> </member> - <member name="P:FlexJobApi.Core.UserTaskCollect.User"> + <member name="P:FlexJobApi.Core.TaskUserCollect.User"> <summary> 鐢ㄦ埛 </summary> </member> - <member name="P:FlexJobApi.Core.UserTaskCollect.TaskInfoId"> + <member name="P:FlexJobApi.Core.TaskUserCollect.TaskInfoId"> <summary> 浠诲姟Id </summary> </member> - <member name="P:FlexJobApi.Core.UserTaskCollect.TaskInfo"> + <member name="P:FlexJobApi.Core.TaskUserCollect.TaskInfo"> <summary> 浠诲姟 </summary> @@ -1503,6 +1503,51 @@ <member name="P:FlexJobApi.Core.EnterpriseEmployee.TaskInfoUsers"> <summary> 浠诲姟浜哄憳淇℃伅 + </summary> + </member> + <member name="T:FlexJobApi.Core.EnterpriseUserCollect"> + <summary> + 浼佷笟鏀惰棌鐢ㄦ埛 + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseUserCollect.EnterpriseId"> + <summary> + 浼佷笟Id + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseUserCollect.Enterprise"> + <summary> + 浼佷笟 + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseUserCollect.UserId"> + <summary> + 鐢ㄦ埛淇℃伅Id + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseUserCollect.User"> + <summary> + 鐢ㄦ埛淇℃伅 + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseUserCollect.IsCollected"> + <summary> + 鏄惁宸叉敹钘� + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseUserCollect.CollectedTime"> + <summary> + 鏀惰棌鏃堕棿 + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseUserCollect.IsContacted"> + <summary> + 鏄惁宸茶仈绯� + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseUserCollect.ContactedTime"> + <summary> + 鑱旂郴鏃堕棿 </summary> </member> <member name="T:FlexJobApi.Core.Menu"> @@ -4666,6 +4711,11 @@ 浠诲姟鍚嶇О </summary> </member> + <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.Code"> + <summary> + 浠诲姟鍗曞彿 + </summary> + </member> <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.BillingMethod"> <summary> 缁撶畻鍛ㄦ湡 @@ -7154,6 +7204,31 @@ 鏄惁閫変腑 </summary> </member> + <member name="T:FlexJobApi.Core.CollectUserResumeCommand"> + <summary> + 鏀惰棌鐏靛伐 + </summary> + </member> + <member name="P:FlexJobApi.Core.CollectUserResumeCommand.Id"> + <summary> + 鐢ㄦ埛Id + </summary> + </member> + <member name="P:FlexJobApi.Core.CollectUserResumeCommand.IsCollected"> + <summary> + 鏄惁宸叉敹钘� + </summary> + </member> + <member name="T:FlexJobApi.Core.ContactUserResumeCommand"> + <summary> + 鑱旂郴鐏靛伐 + </summary> + </member> + <member name="P:FlexJobApi.Core.ContactUserResumeCommand.Id"> + <summary> + 鐢ㄦ埛Id + </summary> + </member> <member name="T:FlexJobApi.Core.DeleteUserResumeCredentialCommand"> <summary> 鍒犻櫎鐢ㄦ埛绠�鍘�-璧勬牸璇佷功 diff --git a/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs index b2e29cd..b87e2e4 100644 --- a/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs +++ b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs @@ -71,6 +71,11 @@ public string Name { get; set; } /// <summary> + /// 浠诲姟鍗曞彿 + /// </summary> + public string Code { get; set; } + + /// <summary> /// 缁撶畻鍛ㄦ湡 /// </summary> public EnumBillingMethod BillingMethod { get; set; } diff --git a/FlexJobApi.Core/Models/UserServer/UserResumes/Commands/CollectUserResumeCommand.cs b/FlexJobApi.Core/Models/UserServer/UserResumes/Commands/CollectUserResumeCommand.cs new file mode 100644 index 0000000..6454077 --- /dev/null +++ b/FlexJobApi.Core/Models/UserServer/UserResumes/Commands/CollectUserResumeCommand.cs @@ -0,0 +1,26 @@ +锘縰sing MediatR; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 鏀惰棌鐏靛伐 + /// </summary> + [Resource([EnumResourceController.UserResume])] + public class CollectUserResumeCommand : IRequest<Guid> + { + /// <summary> + /// 鐢ㄦ埛Id + /// </summary> + public Guid Id { get; set; } + + /// <summary> + /// 鏄惁宸叉敹钘� + /// </summary> + public bool IsCollected { get; set; } + } +} diff --git a/FlexJobApi.Core/Models/UserServer/UserResumes/Commands/ContactUserResumeCommand.cs b/FlexJobApi.Core/Models/UserServer/UserResumes/Commands/ContactUserResumeCommand.cs new file mode 100644 index 0000000..6fcf844 --- /dev/null +++ b/FlexJobApi.Core/Models/UserServer/UserResumes/Commands/ContactUserResumeCommand.cs @@ -0,0 +1,21 @@ +锘縰sing MediatR; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 鑱旂郴鐏靛伐 + /// </summary> + [Resource([EnumResourceController.UserResume])] + public class ContactUserResumeCommand : IRequest<Guid> + { + /// <summary> + /// 鐢ㄦ埛Id + /// </summary> + public Guid Id { get; set; } + } +} diff --git a/FlexJobApi.FlexJobServer.Application/FlexJobApi.FlexJobServer.Application.xml b/FlexJobApi.FlexJobServer.Application/FlexJobApi.FlexJobServer.Application.xml index 2873482..d7aa267 100644 --- a/FlexJobApi.FlexJobServer.Application/FlexJobApi.FlexJobServer.Application.xml +++ b/FlexJobApi.FlexJobServer.Application/FlexJobApi.FlexJobServer.Application.xml @@ -196,7 +196,7 @@ 浠诲姟浜哄憳鍛戒护澶勭悊鍣� </summary> </member> - <member name="M:FlexJobApi.FlexJobServer.Application.TaskUserCommandHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfoUser},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.UserTaskCollect})"> + <member name="M:FlexJobApi.FlexJobServer.Application.TaskUserCommandHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfoUser},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskUserCollect})"> <summary> 浠诲姟浜哄憳鍛戒护澶勭悊鍣� </summary> diff --git a/FlexJobApi.FlexJobServer.Application/TaskUsers/Commands/TaskUserCommandHandler.cs b/FlexJobApi.FlexJobServer.Application/TaskUsers/Commands/TaskUserCommandHandler.cs index ad9edce..76760be 100644 --- a/FlexJobApi.FlexJobServer.Application/TaskUsers/Commands/TaskUserCommandHandler.cs +++ b/FlexJobApi.FlexJobServer.Application/TaskUsers/Commands/TaskUserCommandHandler.cs @@ -16,14 +16,14 @@ /// </summary> public class TaskUserCommandHandler( IRepository<TaskInfoUser> rep, - IRepository<UserTaskCollect> repUserTaskCollect + IRepository<TaskUserCollect> repTaskUserCollect ) : IRequestHandler<CollectTaskCommand, int>, IRequestHandler<SetTaskUserHireCommand, Guid>, IRequestHandler<SetTaskUserArrangeCommand, Guid> { private readonly IRepository<TaskInfoUser> rep = rep; - private readonly IRepository<UserTaskCollect> repUserTaskCollect = repUserTaskCollect; + private readonly IRepository<TaskUserCollect> repTaskUserCollect = repTaskUserCollect; /// <summary> /// 鏀惰棌浠诲姟 @@ -34,7 +34,7 @@ public async Task<int> Handle(CollectTaskCommand request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); - var collects = await repUserTaskCollect.AsQueryable().AsNoTracking() + var collects = await repTaskUserCollect.AsQueryable().AsNoTracking() .Where(it => request.Ids.Contains(it.TaskInfoId) && it.UserId == logier.Id) .ToListAsync(cancellationToken); if (request.IsCollect) @@ -42,18 +42,18 @@ var addIds = request.Ids.Where(it => !collects.Any(c => c.TaskInfoId == it)).ToList(); foreach (var addId in addIds) { - var entity = new UserTaskCollect + var entity = new TaskUserCollect { TaskInfoId = addId, UserId = logier.Id }; - await repUserTaskCollect.InsertAsync(entity); + await repTaskUserCollect.InsertAsync(entity); } return addIds.Count; } else { - await repUserTaskCollect.DeleteAsync(collects); + await repTaskUserCollect.DeleteAsync(collects); return collects.Count; } } diff --git a/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs b/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs index 50ab0f0..9b55d17 100644 --- a/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs +++ b/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs @@ -81,7 +81,7 @@ } } } - model.IsCollected = await rep.Change<UserTaskCollect>().AsQueryable().AsNoTracking() + model.IsCollected = await rep.Change<TaskUserCollect>().AsQueryable().AsNoTracking() .AnyAsync(it => it.TaskInfoId == request.Id && it.UserId == logier.Id); } return model; diff --git a/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml b/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml index 4bb4519..d2c16a1 100644 --- a/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml +++ b/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml @@ -502,7 +502,7 @@ 鐢ㄦ埛绠�鍘嗗懡浠ゅ鐞嗗櫒 </summary> </member> - <member name="M:FlexJobApi.UserServer.Application.UserResumeCommandHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.User})"> + <member name="M:FlexJobApi.UserServer.Application.UserResumeCommandHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.User},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseUserCollect})"> <summary> 鐢ㄦ埛绠�鍘嗗懡浠ゅ鐞嗗櫒 </summary> @@ -555,6 +555,22 @@ <param name="cancellationToken"></param> <returns></returns> </member> + <member name="M:FlexJobApi.UserServer.Application.UserResumeCommandHandler.Handle(FlexJobApi.Core.CollectUserResumeCommand,System.Threading.CancellationToken)"> + <summary> + 鏀惰棌鐏靛伐 + </summary> + <param name="request"></param> + <param name="cancellationToken"></param> + <returns></returns> + </member> + <member name="M:FlexJobApi.UserServer.Application.UserResumeCommandHandler.Handle(FlexJobApi.Core.ContactUserResumeCommand,System.Threading.CancellationToken)"> + <summary> + 鑱旂郴鐏靛伐 + </summary> + <param name="request"></param> + <param name="cancellationToken"></param> + <returns></returns> + </member> <member name="T:FlexJobApi.UserServer.Application.UserResumeQueryHandler"> <summary> 鐢ㄦ埛绠�鍘嗘煡璇㈠鐞嗗櫒 diff --git a/FlexJobApi.UserServer.Application/UserResumes/Commands/UserResumeCommandHandler.cs b/FlexJobApi.UserServer.Application/UserResumes/Commands/UserResumeCommandHandler.cs index 4f681cd..128fbbe 100644 --- a/FlexJobApi.UserServer.Application/UserResumes/Commands/UserResumeCommandHandler.cs +++ b/FlexJobApi.UserServer.Application/UserResumes/Commands/UserResumeCommandHandler.cs @@ -16,16 +16,20 @@ /// 鐢ㄦ埛绠�鍘嗗懡浠ゅ鐞嗗櫒 /// </summary> public class UserResumeCommandHandler( - IRepository<User> rep + IRepository<User> rep, + IRepository<EnterpriseUserCollect> repEnterpriseUserCollect ) : IRequestHandler<SaveUserResumePersonalCommand, Guid>, IRequestHandler<SaveUserResumeJobSeekingCommand, Guid>, IRequestHandler<SaveUserResumeCredentialCommand, Guid>, IRequestHandler<DeleteUserResumeCredentialCommand, int>, IRequestHandler<SaveUserResumeWorkExperienceCommand, Guid>, - IRequestHandler<SaveUserResumeDetailCommand, Guid> + IRequestHandler<SaveUserResumeDetailCommand, Guid>, + IRequestHandler<CollectUserResumeCommand, Guid>, + IRequestHandler<ContactUserResumeCommand, Guid> { private readonly IRepository<User> rep = rep; + private readonly IRepository<EnterpriseUserCollect> repEnterpriseUserCollect = repEnterpriseUserCollect; /// <summary> /// 淇濆瓨鐢ㄦ埛绠�鍘�-涓汉淇℃伅 @@ -114,5 +118,73 @@ .Include(it => it.Photos) .UpdateData(request, cancellationToken: cancellationToken); } + + /// <summary> + /// 鏀惰棌鐏靛伐 + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<Guid> Handle(CollectUserResumeCommand request, CancellationToken cancellationToken) + { + var logier = JwtUtils.GetCurrentLogier(); + if (logier.Type != EnumUserType.Enterprise) throw Oops.Oh(EnumErrorCodeType.s400, "闇�浼佷笟鐢ㄦ埛鏂瑰彲鑱旂郴"); + var entity = await repEnterpriseUserCollect.AsQueryable() + .FirstOrDefaultAsync(it => it.EnterpriseId == logier.EnterpriseId && it.UserId == request.Id); + if (entity == null) + { + entity = new EnterpriseUserCollect + { + EnterpriseId = logier.EnterpriseId!.Value, + UserId = request.Id, + IsCollected = true, + CollectedTime = request.IsCollected + ? DateTime.Now + : null + }; + await repEnterpriseUserCollect.InsertAsync(entity); + } + else if (entity.IsCollected != request.IsCollected) + { + entity.IsCollected = request.IsCollected; + entity.CollectedTime = request.IsCollected + ? DateTime.Now + : null; + await repEnterpriseUserCollect.UpdateAsync(entity); + } + return entity.Id; + } + + /// <summary> + /// 鑱旂郴鐏靛伐 + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<Guid> Handle(ContactUserResumeCommand request, CancellationToken cancellationToken) + { + var logier = JwtUtils.GetCurrentLogier(); + if (logier.Type != EnumUserType.Enterprise) throw Oops.Oh(EnumErrorCodeType.s400, "闇�浼佷笟鐢ㄦ埛鏂瑰彲鑱旂郴"); + var entity = await repEnterpriseUserCollect.AsQueryable() + .FirstOrDefaultAsync(it => it.EnterpriseId == logier.EnterpriseId && it.UserId == request.Id); + if (entity == null) + { + entity = new EnterpriseUserCollect + { + EnterpriseId = logier.EnterpriseId!.Value, + UserId = request.Id, + IsContacted = true, + ContactedTime = DateTime.Now + }; + await repEnterpriseUserCollect.InsertAsync(entity); + } + else if (entity.IsContacted == false) + { + entity.IsContacted = true; + entity.ContactedTime = DateTime.Now; + await repEnterpriseUserCollect.UpdateAsync(entity); + } + return entity.Id; + } } } -- Gitblit v1.9.1