FlexJobApi.Core/FlexJobApi.Core.xml
@@ -1935,6 +1935,26 @@ 联系时间 </summary> </member> <member name="T:FlexJobApi.Core.EnterpriseWallet"> <summary> 企业钱包 </summary> </member> <member name="P:FlexJobApi.Core.EnterpriseWallet.EnterpriseId"> <summary> 企业Id </summary> </member> <member name="P:FlexJobApi.Core.EnterpriseWallet.Enterprise"> <summary> 企业 </summary> </member> <member name="P:FlexJobApi.Core.EnterpriseWallet.Access"> <summary> 通道 </summary> </member> <member name="T:FlexJobApi.Core.Menu"> <summary> 菜单 @@ -2977,6 +2997,11 @@ 企业信息 </summary> </member> <member name="F:FlexJobApi.Core.EnumResourceController.UserServerEnterpriseWallet"> <summary> 企业钱包 </summary> </member> <member name="F:FlexJobApi.Core.EnumResourceController.UserServerEnterpriseEmployee"> <summary> 灵工信息 @@ -3505,6 +3530,16 @@ <member name="F:FlexJobApi.Core.EnumEnterpriseRealMethod.Identity4"> <summary> 企业四要素 </summary> </member> <member name="T:FlexJobApi.Core.EnumEnterpriseWalletAccess"> <summary> 企业钱包通道 </summary> </member> <member name="F:FlexJobApi.Core.EnumEnterpriseWalletAccess.Alipay"> <summary> 支付宝 </summary> </member> <member name="T:FlexJobApi.Core.EnumMenuType"> @@ -8509,7 +8544,7 @@ 邀请灵工签约 </summary> </member> <member name="P:FlexJobApi.Core.InviteElectronSignCommand.Id"> <member name="P:FlexJobApi.Core.InviteElectronSignCommand.Ids"> <summary> 灵工Id </summary> @@ -8549,7 +8584,7 @@ 灵工解约 </summary> </member> <member name="P:FlexJobApi.Core.StopElectronSignCommand.Id"> <member name="P:FlexJobApi.Core.StopElectronSignCommand.Ids"> <summary> 灵工Id </summary> @@ -8819,6 +8854,11 @@ <member name="P:FlexJobApi.Core.GetEnterpriseEmployeesQueryResultItem.EnterpriseSignContractTime"> <summary> 企业签约时间 </summary> </member> <member name="P:FlexJobApi.Core.GetEnterpriseEmployeesQueryResultItem.ContractUrl"> <summary> 电子合同 </summary> </member> <member name="T:FlexJobApi.Core.GetPersonalUserElectronSignQuery"> @@ -9272,6 +9312,76 @@ 是否已配置 </summary> </member> <member name="T:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery"> <summary> 支付宝用户授权协议签约通知 </summary> </member> <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.personal_product_code"> <summary> 协议产品码,商户和支付宝签约时确定,不同业务场景对应不同的签约产品码。 </summary> </member> <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.sign_scene"> <summary> 当前签约的协议场景。 </summary> </member> <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.status"> <summary> NORMAL 协议当前状态 1. TEMP:暂存,协议未生效过; 2. NORMAL:正常; 3. STOP:暂停 </summary> </member> <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.alipay_user_id"> <summary> 用户签约的支付宝账号对应的支付宝唯一用户号。 以2088开头的16位纯数字组成。 </summary> </member> <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.agreement_no"> <summary> 支付宝系统中用以唯一标识用户签约记录的编号。 </summary> </member> <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.sign_time"> <summary> 支付宝代扣协议的实际签约时间,格式为yyyy-MM-dd HH:mm:ss。 </summary> </member> <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.external_logon_id"> <summary> 用户在商户网站的登录账号,如果商户接口中未传,则不会返回 </summary> </member> <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.app_id"> <summary> 支付宝分配给开发者的应用Id </summary> </member> <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.auth_app_id"> <summary> 支付宝分配给商户的应用Id </summary> </member> <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.external_agreement_no"> <summary> 代扣协议中标示用户的唯一签约号(确保在商户系统中唯一)。 </summary> </member> <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.valid_time"> <summary> 用户代扣协议的实际生效时间,格式为yyyy-MM-dd HH:mm:ss。 </summary> </member> <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.alipay_logon_id"> <summary> 返回脱敏的支付宝账号。 </summary> </member> <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.notify_type"> <summary> 用户签约成功通知类型 </summary> </member> <member name="T:FlexJobApi.Core.DeleteMenuCommand"> <summary> 删除菜单 FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/InviteElectronSignCommand.cs
@@ -11,12 +11,17 @@ /// 邀请灵工签约 /// </summary> [Resource([EnumResourceController.UserServerEnterpriseEmployee])] public class InviteElectronSignCommand : IRequest<Guid> public class InviteElectronSignCommand : IRequest<int> { public InviteElectronSignCommand() { Ids = []; } /// <summary> /// 灵工Id /// </summary> public Guid Id { get; set; } public List<Guid> Ids { get; set; } /// <summary> /// 合同模板Id FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/StopElectronSignCommand.cs
@@ -11,11 +11,16 @@ /// 灵工解约 /// </summary> [Resource([EnumResourceController.UserServerEnterpriseEmployee])] public class StopElectronSignCommand : IRequest<Guid> public class StopElectronSignCommand : IRequest<int> { public StopElectronSignCommand() { Ids = []; } /// <summary> /// 灵工Id /// </summary> public Guid Id { get; set; } public List<Guid> Ids { get; set; } } } FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs
@@ -42,10 +42,10 @@ ) : IRequestHandler<ImportEnterpriseEmployeesCommand, ImportEnterpriseEmployeesCommandResult>, IRequestHandler<EditEnterpriseEmployeeCommand, Guid>, IRequestHandler<InviteElectronSignCommand, Guid>, IRequestHandler<InviteElectronSignCommand, int>, IRequestHandler<PersonalUserElectronSignCommand, PersonalUserElectronSignCommandResult>, IRequestHandler<EnterpriseUserElectronSignCommand, EnterpriseUserElectronSignCommandResult>, IRequestHandler<StopElectronSignCommand, Guid> IRequestHandler<StopElectronSignCommand, int> { private readonly IMediator mediator = mediator; private readonly IRepository<EnterpriseEmployee> rep = rep; @@ -220,19 +220,24 @@ /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public async Task<Guid> Handle(InviteElectronSignCommand request, CancellationToken cancellationToken) public async Task<int> Handle(InviteElectronSignCommand 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.Wait) throw Oops.Oh(EnumErrorCodeType.s400, "已邀请"); if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Pass) throw Oops.Oh(EnumErrorCodeType.s400, "已签约"); await mediator.Send(new CheckContractTemplateCommand { Id = request.ContractTemplateId }, cancellationToken); var entities = await rep.AsQueryable() .Where(it => it.EnterpriseId == logier.EnterpriseId && request.Ids.Contains(it.Id)) .ToListAsync(); foreach (var id in request.Ids) { var entity = entities.FirstOrDefault(it => it.Id == id); if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "灵工"); if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Wait) throw Oops.Oh(EnumErrorCodeType.s400, $"已邀请{entity.Name}"); if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Pass) throw Oops.Oh(EnumErrorCodeType.s400, $"已签约{entity.Name}"); entity.ContractTemplateId = request.ContractTemplateId; entity.UserSignContractStatus = EnumTaskUserSignContractStatus.Wait; entity.UserSignContractTime = null; @@ -256,7 +261,8 @@ // Type = EnumEnterpriseCostType.ElectronSign //}); await rep.UpdateAsync(entity); return entity.Id; } return entities.Count; } /// <summary> @@ -386,29 +392,35 @@ /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public async Task<Guid> Handle(StopElectronSignCommand request, CancellationToken cancellationToken) public async Task<int> 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(); var entities = await rep.AsQueryable() .Include(it => it.Contracts) .Where(it => it.EnterpriseId == logier.EnterpriseId && request.Ids.Contains(it.Id)) .ToListAsync(); foreach (var id in request.Ids) { var entity = entities.FirstOrDefault(it => it.Id == id); if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "灵工"); if (entity.UserSignContractStatus != EnumTaskUserSignContractStatus.Pass) throw Oops.Oh(EnumErrorCodeType.s400, "未签约"); if (entity.UserSignContractStatus != EnumTaskUserSignContractStatus.Pass) throw Oops.Oh(EnumErrorCodeType.s400, $"未签约{entity.Name}"); entity.UserSignContractStatus = EnumTaskUserSignContractStatus.Stop; entity.EnterpriseSignContractStatus = EnumTaskUserSignContractStatus.Stop; await rep.UpdateAsync(entity); var contract = await repEnterpriseEmployeeContract.AsQueryable() var contract = entity.Contracts .OrderByDescending(it => it.CreatedTime) .Where(it => it.EnterpriseEmployeeId == entity.Id) .FirstOrDefaultAsync(); if (contract == null) throw Oops.Oh(EnumErrorCodeType.s404, "合同"); .FirstOrDefault(); if (contract == null) throw Oops.Oh(EnumErrorCodeType.s404, $"与{entity.Name}的合同"); 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) .Where(it => it.HireStatus == EnumTaskUserHireStatus.Pass && request.Ids.Contains(it.EnterpriseEmployeeId)) .ToListAsync(); if (taskUsers.IsNotNull()) { @@ -419,7 +431,7 @@ await repTaskInfoUser.UpdateAsync(taskUsers); } return entity.Id; return entities.Count; } } } FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml
@@ -564,6 +564,19 @@ <param name="cancellationToken"></param> <returns></returns> </member> <member name="T:FlexJobApi.UserServer.Application.AlipayUserAgreementPageSignNotifyQueryHandler"> <summary> 支付宝用户授权协议签约通知 </summary> </member> <member name="M:FlexJobApi.UserServer.Application.AlipayUserAgreementPageSignNotifyQueryHandler.Handle(FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery,System.Threading.CancellationToken)"> <summary> 支付宝用户授权协议签约通知 </summary> <param name="request"></param> <param name="cancellationToken"></param> <returns></returns> </member> <member name="F:FlexJobApi.UserServer.Application.EnumUserErrorCodeType.u1000"> <summary> 账号或密码不存在