2025-08-29 | sunpengfei | ![]() |
2025-08-29 | sunpengfei | ![]() |
2025-08-29 | sunpengfei | ![]() |
2025-08-29 | sunpengfei | ![]() |
2025-08-29 | sunpengfei | ![]() |
2025-08-29 | sunpengfei | ![]() |
FlexJobApi.CommonServer.Application/LogRecords/Commands/ResendResourceCommandHandler.cs
@@ -7,6 +7,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; @@ -38,6 +39,7 @@ { it.Method, it.Path, it.RequestHeaders, it.Request, it.CreatedUserId }) @@ -60,7 +62,20 @@ }) .request .ToJson(); var result = await paramters.SendHttpAsync(resource.ServiceName, resource.Route, resource.Method); string? accessToken = null, refreshToken = null; if (log.RequestHeaders.IsNotNull()) { var headers = log.RequestHeaders.JsonTo<Dictionary<string, List<string>>>(); if (headers.ContainsKey("Authorization")) { accessToken = headers["Authorization"].FirstOrDefault(); } if (headers.ContainsKey("X-Authorization")) { refreshToken = headers["X-Authorization"].FirstOrDefault(); } } var result = await paramters.SendHttpAsync(resource.ServiceName, resource.Route, resource.Method, accessToken: accessToken, refreshToken: refreshToken); return result; } } FlexJobApi.Core/Enums/Tasks/EnumTaskUserSignContractStatus.cs
@@ -24,10 +24,6 @@ /// </summary> Refuse = 30, /// <summary> /// 生效中 /// </summary> Effect = 40, /// <summary> /// 已终止 /// </summary> Stop = 50 FlexJobApi.Core/FlexJobApi.Core.xml
@@ -3372,11 +3372,6 @@ 已拒签 </summary> </member> <member name="F:FlexJobApi.Core.EnumTaskUserSignContractStatus.Effect"> <summary> 生效中 </summary> </member> <member name="F:FlexJobApi.Core.EnumTaskUserSignContractStatus.Stop"> <summary> 已终止 @@ -5865,6 +5860,11 @@ 人员信息 </summary> </member> <member name="P:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitQueryResult.Date"> <summary> 验收时间 </summary> </member> <member name="P:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitQueryResult.CreatedTime"> <summary> 提交时间 @@ -6004,6 +6004,11 @@ <member name="P:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitsQueryResultItem.Id"> <summary> 提交Id </summary> </member> <member name="P:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitsQueryResultItem.Date"> <summary> 验收时间 </summary> </member> <member name="P:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitsQueryResultItem.CreatedTime"> @@ -8534,6 +8539,16 @@ 签署合同长链接 </summary> </member> <member name="T:FlexJobApi.Core.StopElectronSignCommand"> <summary> 灵工解约 </summary> </member> <member name="P:FlexJobApi.Core.StopElectronSignCommand.Id"> <summary> 灵工Id </summary> </member> <member name="T:FlexJobApi.Core.GetEnterpriseEmployeeQuery"> <summary> 查询灵工详情 FlexJobApi.Core/Models/FlexJobServer/TaskCheckReceive/Queries/GetCheckReceiveTaskUserSubmitQuery.cs
@@ -52,6 +52,11 @@ public GetCheckReceiveTaskUserSubmitsQueryResultObjectDataEnterpriseEmployeeUser TaskInfoUserEnterpriseEmployeeUser { get; set; } /// <summary> /// 验收时间 /// </summary> public DateTime Date { get; set; } /// <summary> /// 提交时间 /// </summary> public DateTimeOffset CreatedTime { get; set; } FlexJobApi.Core/Models/FlexJobServer/TaskCheckReceive/Queries/GetCheckReceiveTaskUserSubmitsQuery.cs
@@ -152,6 +152,11 @@ public Guid Id { get; set; } /// <summary> /// 验收时间 /// </summary> public DateTime Date { get; set; } /// <summary> /// 提交时间 /// </summary> public DateTimeOffset CreatedTime { get; set; } FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs
@@ -197,6 +197,11 @@ public EnumTaskUserHireStatus? HireStatus { get; set; } /// <summary> /// 灵工Id /// </summary> public Guid? EnterpriseEmployeeId { get; set; } /// <summary> /// 我的报名列表状态 /// </summary> public GetTaskInfoQueryResultApplyButton? ApplyButton { get; set; } FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/StopElectronSignCommand.cs
New file @@ -0,0 +1,21 @@ using MediatR; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.Core { /// <summary> /// 灵工解约 /// </summary> [Resource([EnumResourceController.UserServerEnterpriseEmployee])] public class StopElectronSignCommand : IRequest<Guid> { /// <summary> /// 灵工Id /// </summary> public Guid Id { get; set; } } } FlexJobApi.Core/Utils/JwtUtils/JwtUtils.cs
@@ -90,6 +90,7 @@ { if (accessToken.IsNotNull()) { accessToken = accessToken.Replace("Bearer ", null); var claims = JWTEncryption.ReadJwtToken(accessToken)?.Claims; if (claims != null) { FlexJobApi.Core/Utils/ResourceUtils/ResourceHttpProvider/DefaultResourceHttpProvider.cs
@@ -36,8 +36,8 @@ var logier = await accessToken.GetCurrentLogier(); if (logier != null) { builder = WithHeader(builder, "Authorization", logier.AccessToken); builder = WithHeader(builder, "X-Authorization", logier.RefreshToken); builder = WithHeader(builder, "Authorization", $"Bearer {logier.AccessToken}"); builder = WithHeader(builder, "X-Authorization", $"Bearer {logier.RefreshToken}"); response = await httpRemoteService.SendAsStringAsync(builder); } } @@ -51,7 +51,7 @@ string value = null; if (builder.Headers?.ContainsKey(name) ?? false) { value = builder.Headers[name].ToString(); value = builder.Headers[name].FirstOrDefault(); } else if (App.HttpContext.Request.Headers.ContainsKey(name)) { @@ -65,7 +65,7 @@ value ??= GetHeaderValue(builder, name); if (value.IsNotNull()) { builder = builder.WithHeader(name, value); builder = builder.WithHeader(name, value, replace: true); } return builder; } FlexJobApi.FlexJobServer.Application/TaskCheckReceives/Commands/TaskCheckReceiveCommandHandler.cs
@@ -52,7 +52,7 @@ var taskUser = await repTaskInfoUser.AsQueryable() .FirstOrDefaultAsync(it => it.TaskInfoId == task.Id && it.EnterpriseEmployee.UserId == logier.Id, cancellationToken); if (taskUser == null) throw Oops.Oh(EnumErrorCodeType.s404, "报名信息"); if (taskUser.HireStatus != EnumTaskUserHireStatus.Pass) throw Oops.Oh(EnumErrorCodeType.s510, "您未录用"); //if (taskUser.HireStatus != EnumTaskUserHireStatus.Pass) throw Oops.Oh(EnumErrorCodeType.s510, "您未录用"); if (taskUser.ArrangeStatus != EnumTaskUserArrangeStatus.Complete) throw Oops.Oh(EnumErrorCodeType.s510, "暂未安排"); task.CheckReceiveStatus = EnumTaskCheckReceiveStatus.WaitCheckReceive; task.LastSubmitTime = now; @@ -112,7 +112,7 @@ var taskUser = await repTaskInfoUser.AsQueryable() .FirstOrDefaultAsync(it => it.Id == submit.TaskInfoUserId, cancellationToken); if (taskUser == null) throw Oops.Oh(EnumErrorCodeType.s404, "灵工信息"); if (taskUser.HireStatus != EnumTaskUserHireStatus.Pass) throw Oops.Oh(EnumErrorCodeType.s510, "未录用灵工"); //if (taskUser.HireStatus != EnumTaskUserHireStatus.Pass) throw Oops.Oh(EnumErrorCodeType.s510, "未录用灵工"); if (taskUser.ArrangeStatus != EnumTaskUserArrangeStatus.Complete) throw Oops.Oh(EnumErrorCodeType.s510, "未安排灵工"); var task = await repTaskInfo.AsQueryable() .FirstOrDefaultAsync(it => it.Id == taskUser.TaskInfoId && it.EnterpriseId == logier.EnterpriseId, cancellationToken); FlexJobApi.FlexJobServer.Application/TaskCheckReceives/Queries/TaskCheckReceiveQueryHandler.cs
@@ -220,6 +220,7 @@ var s = q.Select(it => new GetCheckReceiveTaskUserSubmitsQueryResultItem { Id = it.Id, Date = it.Date, CreatedTime = it.CreatedTime, Files = it.Files.Select(f => f.File).ToList(), CheckReceiveStatus = it.CheckReceiveStatus, FlexJobApi.FlexJobServer.Application/TaskUsers/Commands/TaskUserCommandHandler.cs
@@ -102,7 +102,7 @@ if (entity.HireStatus == EnumTaskUserHireStatus.Pass) { entity.HireTime = DateTime.Now; if (entity.EnterpriseEmployee.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Effect) if (entity.EnterpriseEmployee.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Pass) { entity.ArrangeStatus = EnumTaskUserArrangeStatus.Wait; } @@ -128,7 +128,7 @@ && it.Id == request.Id) .FirstOrDefaultAsync(cancellationToken); if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "报名信息"); if (entity.EnterpriseEmployee.EnterpriseSignContractStatus != EnumTaskUserSignContractStatus.Effect) throw Oops.Oh(EnumErrorCodeType.s510, "灵工未签约"); if (entity.EnterpriseEmployee.EnterpriseSignContractStatus != EnumTaskUserSignContractStatus.Pass) throw Oops.Oh(EnumErrorCodeType.s510, "灵工未签约"); if (entity.ArrangeStatus == EnumTaskUserArrangeStatus.Complete) throw Oops.Oh(EnumErrorCodeType.s510, "灵工已安排"); entity.ArrangeStatus = request.ArrangeStatus; if (entity.ArrangeStatus == EnumTaskUserArrangeStatus.Complete) FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs
@@ -57,11 +57,13 @@ { it.Id, it.HireStatus, it.EnterpriseEmployeeId, it.EnterpriseEmployee.UserSignContractStatus }) .FirstOrDefaultAsync(); if (taskUser != null) { model.EnterpriseEmployeeId = taskUser.EnterpriseEmployeeId; model.HireStatus = taskUser.HireStatus; model.ApplyButton = taskUser.HireStatus == EnumTaskUserHireStatus.Wait ? GetTaskInfoQueryResultApplyButton.WaitHire FlexJobApi.UserServer.Application/ElectronSign/Commands/ElectronSignCallbackCommandHandler.cs
@@ -116,12 +116,12 @@ } if (data.Status == Core.Models.ElectronSignServer.ContractTemplates.EnumElectronSignContractStatus.Completed) { contract.UserSignContractStatus = EnumTaskUserSignContractStatus.Effect; contract.UserSignContractStatus = EnumTaskUserSignContractStatus.Pass; if (contract.UserSignContractTime == null) { contract.UserSignContractTime = DateTime.Now; } contract.EnterpriseSignContractStatus = EnumTaskUserSignContractStatus.Effect; contract.EnterpriseSignContractStatus = EnumTaskUserSignContractStatus.Pass; if (contract.EnterpriseSignContractTime == null) { contract.EnterpriseSignContractTime = DateTime.Now; FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs
@@ -37,13 +37,15 @@ IRepository<EnterpriseEmployeeContract> repEnterpriseEmployeeContract, IRepository<ElectronSignSetting> repElectronSignSetting, IRepository<ContractTemplate> repContractTemplate, IRepository<EnterpriseCost> repEnterpriseCost IRepository<EnterpriseCost> repEnterpriseCost, IRepository<TaskInfoUser> repTaskInfoUser ) : IRequestHandler<ImportEnterpriseEmployeesCommand, ImportEnterpriseEmployeesCommandResult>, IRequestHandler<EditEnterpriseEmployeeCommand, Guid>, IRequestHandler<InviteElectronSignCommand, Guid>, IRequestHandler<PersonalUserElectronSignCommand, PersonalUserElectronSignCommandResult>, IRequestHandler<EnterpriseUserElectronSignCommand, EnterpriseUserElectronSignCommandResult> IRequestHandler<EnterpriseUserElectronSignCommand, EnterpriseUserElectronSignCommandResult>, IRequestHandler<StopElectronSignCommand, Guid> { private readonly IMediator mediator = mediator; private readonly IRepository<EnterpriseEmployee> rep = rep; @@ -53,6 +55,7 @@ private readonly IRepository<ElectronSignSetting> repElectronSignSetting = repElectronSignSetting; private readonly IRepository<ContractTemplate> repContractTemplate = repContractTemplate; private readonly IRepository<EnterpriseCost> repEnterpriseCost = repEnterpriseCost; private readonly IRepository<TaskInfoUser> repTaskInfoUser = repTaskInfoUser; /// <summary> /// 导入灵工信息 @@ -226,7 +229,6 @@ if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "灵工"); if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Wait) throw Oops.Oh(EnumErrorCodeType.s400, "已邀请"); if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Pass) throw Oops.Oh(EnumErrorCodeType.s400, "已签约"); if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Effect) throw Oops.Oh(EnumErrorCodeType.s400, "已生效"); await mediator.Send(new CheckContractTemplateCommand { Id = request.ContractTemplateId @@ -272,7 +274,6 @@ if (entity == null) throw Oops.Oh(EnumErrorCodeType.s510, "未报名该企业"); if (entity.UserSignContractStatus == null) throw Oops.Oh(EnumErrorCodeType.s510, "企业未发起签约"); if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Pass) throw Oops.Oh(EnumErrorCodeType.s510, "已签约"); if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Effect) throw Oops.Oh(EnumErrorCodeType.s510, "已生效"); if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Refuse) throw Oops.Oh(EnumErrorCodeType.s510, "已拒签"); if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Stop) throw Oops.Oh(EnumErrorCodeType.s510, "已终止"); var contract = await repEnterpriseEmployeeContract.AsQueryable() @@ -343,7 +344,6 @@ if (entity == null) throw Oops.Oh(EnumErrorCodeType.s510, "灵工不存在"); if (entity.UserSignContractStatus == null) throw Oops.Oh(EnumErrorCodeType.s510, "未邀请签约"); if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Wait) throw Oops.Oh(EnumErrorCodeType.s510, "请先等待灵工签约完成"); if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Effect) throw Oops.Oh(EnumErrorCodeType.s510, "已生效"); if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Refuse) throw Oops.Oh(EnumErrorCodeType.s510, "已拒签"); if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Stop) throw Oops.Oh(EnumErrorCodeType.s510, "已终止"); var contract = await repEnterpriseEmployeeContract.AsQueryable() @@ -378,5 +378,47 @@ } return result.Result.Adapt<EnterpriseUserElectronSignCommandResult>(); } /// <summary> /// 灵工解约 /// </summary> /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public async Task<Guid> Handle(StopElectronSignCommand request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var entity = await rep.AsQueryable() .Where(it => it.EnterpriseId == logier.EnterpriseId && it.Id == request.Id) .FirstOrDefaultAsync(); if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "灵工"); if (entity.UserSignContractStatus != EnumTaskUserSignContractStatus.Pass) throw Oops.Oh(EnumErrorCodeType.s400, "未签约"); entity.UserSignContractStatus = EnumTaskUserSignContractStatus.Stop; entity.EnterpriseSignContractStatus = EnumTaskUserSignContractStatus.Stop; await rep.UpdateAsync(entity); var contract = await repEnterpriseEmployeeContract.AsQueryable() .OrderByDescending(it => it.CreatedTime) .Where(it => it.EnterpriseEmployeeId == entity.Id) .FirstOrDefaultAsync(); if (contract == null) throw Oops.Oh(EnumErrorCodeType.s404, "合同"); contract.UserSignContractStatus = EnumTaskUserSignContractStatus.Stop; contract.EnterpriseSignContractStatus = EnumTaskUserSignContractStatus.Stop; await repEnterpriseEmployeeContract.UpdateAsync(contract); var taskUsers = await repTaskInfoUser.AsQueryable() .Where(it => it.EnterpriseEmployeeId == entity.Id && it.HireStatus == EnumTaskUserHireStatus.Pass) .ToListAsync(); if (taskUsers.IsNotNull()) { foreach (var taskUser in taskUsers) { taskUser.HireStatus = EnumTaskUserHireStatus.Wait; } await repTaskInfoUser.UpdateAsync(taskUsers); } return entity.Id; } } } FlexJobApi.UserServer.Application/EnterpriseEmployees/Queries/EnterpriseEmployeeQueryHandler.cs
@@ -65,9 +65,30 @@ { q = q.Where(it => (it.UserId.HasValue && it.User.IsReal) == request.IsReal.Value); } if (request.UserSignContractStatus.HasValue) if (request.UserSignContractStatus.HasValue && logier.ClientType == EnumClientType.Wxmp) { q = q.Where(it => it.UserSignContractStatus == request.UserSignContractStatus); if (logier.ClientType == EnumClientType.Wxmp) { switch (request.UserSignContractStatus.Value) { case EnumTaskUserSignContractStatus.Wait: q = q.Where(it => it.UserSignContractStatus == null || it.UserSignContractStatus == request.UserSignContractStatus); break; case EnumTaskUserSignContractStatus.Pass: q = q.Where(it => it.UserSignContractStatus == request.UserSignContractStatus && it.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Pass); break; case EnumTaskUserSignContractStatus.Stop: q = q.Where(it => it.UserSignContractStatus == request.UserSignContractStatus); break; default: q = q.Where(it => it.UserSignContractStatus == request.UserSignContractStatus); break; } } else { q = q.Where(it => it.UserSignContractStatus == request.UserSignContractStatus); } } if (request.EnterpriseSignContractStatus.HasValue) { @@ -154,13 +175,20 @@ .Where(it => it.UserId == logier.Id); if (request.UserSignContractStatus.HasValue) { q = q.Where(it => it.UserSignContractStatus == request.UserSignContractStatus.Value); if (request.UserSignContractStatus == EnumTaskUserSignContractStatus.Pass) { q = q.Where(it => it.UserSignContractStatus == EnumTaskUserSignContractStatus.Pass && it.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Pass); } else { q = q.Where(it => it.UserSignContractStatus == request.UserSignContractStatus.Value); } } else { q = q.Where(it => it.UserSignContractStatus == EnumTaskUserSignContractStatus.Wait || it.UserSignContractStatus == EnumTaskUserSignContractStatus.Effect || it.UserSignContractStatus == EnumTaskUserSignContractStatus.Pass && it.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Pass || it.UserSignContractStatus == EnumTaskUserSignContractStatus.Stop); } var s = q.Select(it => new GetPersonalUserElectronSignsQueryResultItem FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml
@@ -374,7 +374,7 @@ 灵工命令处理器 </summary> </member> <member name="M:FlexJobApi.UserServer.Application.EnterpriseEmployeesCommandHandler.#ctor(MediatR.IMediator,Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseEmployee},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.User},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.Enterprise},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseEmployeeContract},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.ElectronSignSetting},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.ContractTemplate},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseCost})"> <member name="M:FlexJobApi.UserServer.Application.EnterpriseEmployeesCommandHandler.#ctor(MediatR.IMediator,Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseEmployee},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.User},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.Enterprise},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseEmployeeContract},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.ElectronSignSetting},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.ContractTemplate},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseCost},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfoUser})"> <summary> 灵工命令处理器 </summary> @@ -419,6 +419,14 @@ <param name="cancellationToken"></param> <returns></returns> </member> <member name="M:FlexJobApi.UserServer.Application.EnterpriseEmployeesCommandHandler.Handle(FlexJobApi.Core.StopElectronSignCommand,System.Threading.CancellationToken)"> <summary> 灵工解约 </summary> <param name="request"></param> <param name="cancellationToken"></param> <returns></returns> </member> <member name="T:FlexJobApi.UserServer.Application.EnterpriseEmployeeQueryHandler"> <summary> 灵工查询处理器