sunpengfei
2025-09-01 bc7c0f9d8590835a648491a1b2c9eb2bc51caa14
feat:开发
5个文件已修改
199 ■■■■ 已修改文件
FlexJobApi.Core/FlexJobApi.Core.xml 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/InviteElectronSignCommand.cs 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/StopElectronSignCommand.cs 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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>
            账号或密码不存在