From bc7c0f9d8590835a648491a1b2c9eb2bc51caa14 Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期一, 01 九月 2025 11:28:43 +0800
Subject: [PATCH] feat:开发

---
 FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/InviteElectronSignCommand.cs         |    9 +
 FlexJobApi.Core/FlexJobApi.Core.xml                                                                 |  114 ++++++++++++++++++++++
 FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/StopElectronSignCommand.cs           |    9 +
 FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml                             |   13 ++
 FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs |  114 ++++++++++++----------
 5 files changed, 202 insertions(+), 57 deletions(-)

diff --git a/FlexJobApi.Core/FlexJobApi.Core.xml b/FlexJobApi.Core/FlexJobApi.Core.xml
index 40f14e6..62f6154 100644
--- a/FlexJobApi.Core/FlexJobApi.Core.xml
+++ b/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 @@
             鐏靛伐瑙g害
             </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>
+            鏀粯瀹濅唬鎵e崗璁殑瀹為檯绛剧害鏃堕棿锛屾牸寮忎负yyyy-MM-dd HH:mm:ss銆�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.external_logon_id">
+            <summary>
+            鐢ㄦ埛鍦ㄥ晢鎴风綉绔欑殑鐧诲綍璐﹀彿锛屽鏋滃晢鎴锋帴鍙d腑鏈紶锛屽垯涓嶄細杩斿洖
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.app_id">
+            <summary>
+            鏀粯瀹濆垎閰嶇粰寮�鍙戣�呯殑搴旂敤Id
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.auth_app_id">
+            <summary>
+            鏀粯瀹濆垎閰嶇粰鍟嗘埛鐨勫簲鐢↖d
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.external_agreement_no">
+            <summary>
+            浠f墸鍗忚涓爣绀虹敤鎴风殑鍞竴绛剧害鍙凤紙纭繚鍦ㄥ晢鎴风郴缁熶腑鍞竴锛夈��
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.AlipayUserAgreementPageSignNotifyQuery.valid_time">
+            <summary>
+            鐢ㄦ埛浠f墸鍗忚鐨勫疄闄呯敓鏁堟椂闂达紝鏍煎紡涓簓yyy-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>
             鍒犻櫎鑿滃崟
diff --git a/FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/InviteElectronSignCommand.cs b/FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/InviteElectronSignCommand.cs
index 24cec29..f43f693 100644
--- a/FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/InviteElectronSignCommand.cs
+++ b/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
diff --git a/FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/StopElectronSignCommand.cs b/FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/StopElectronSignCommand.cs
index 93f5a3c..25b260d 100644
--- a/FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/StopElectronSignCommand.cs
+++ b/FlexJobApi.Core/Models/UserServer/EnterpriseEmployees/Commands/StopElectronSignCommand.cs
@@ -11,11 +11,16 @@
     /// 鐏靛伐瑙g害
     /// </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; }
     }
 }
diff --git a/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs b/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs
index 6fdbf87..5ae1bbd 100644
--- a/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs
+++ b/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,43 +220,49 @@
         /// <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);
-            entity.ContractTemplateId = request.ContractTemplateId;
-            entity.UserSignContractStatus = EnumTaskUserSignContractStatus.Wait;
-            entity.UserSignContractTime = null;
-            entity.EnterpriseSignContractStatus = null;
-            entity.EnterpriseSignContractTime = null;
-            entity.ContractCode = $"{DateTime.Now:yyyyMMddHHmmss}{new Random(IDGen.NextID().GetHashCode()).Next(1000, 9999)}";
-            entity.ContractUrl = null;
-            var contract = new EnterpriseEmployeeContract
+
+            var entities = await rep.AsQueryable()
+                .Where(it => it.EnterpriseId == logier.EnterpriseId && request.Ids.Contains(it.Id))
+                .ToListAsync();
+            foreach (var id in request.Ids)
             {
-                EnterpriseEmployeeId = entity.Id,
-                ContractTemplateId = entity.ContractTemplateId,
-                ContractCode = entity.ContractCode,
-                UserSignContractStatus = entity.UserSignContractStatus,
-            };
-            await repEnterpriseEmployeeContract.InsertAsync(contract);
-            //await mediator.Send(new SaveEnterpriseCostCommand
-            //{
-            //    EnterpriseId = logier.EnterpriseId!.Value,
-            //    ContractTemplateId = request.ContractTemplateId,
-            //    EnterpriseEmployeeContractId = contract.Id,
-            //    Type = EnumEnterpriseCostType.ElectronSign
-            //});
-            await rep.UpdateAsync(entity);
-            return entity.Id;
+                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;
+                entity.EnterpriseSignContractStatus = null;
+                entity.EnterpriseSignContractTime = null;
+                entity.ContractCode = $"{DateTime.Now:yyyyMMddHHmmss}{new Random(IDGen.NextID().GetHashCode()).Next(1000, 9999)}";
+                entity.ContractUrl = null;
+                var contract = new EnterpriseEmployeeContract
+                {
+                    EnterpriseEmployeeId = entity.Id,
+                    ContractTemplateId = entity.ContractTemplateId,
+                    ContractCode = entity.ContractCode,
+                    UserSignContractStatus = entity.UserSignContractStatus,
+                };
+                await repEnterpriseEmployeeContract.InsertAsync(contract);
+                //await mediator.Send(new SaveEnterpriseCostCommand
+                //{
+                //    EnterpriseId = logier.EnterpriseId!.Value,
+                //    ContractTemplateId = request.ContractTemplateId,
+                //    EnterpriseEmployeeContractId = contract.Id,
+                //    Type = EnumEnterpriseCostType.ElectronSign
+                //});
+                await rep.UpdateAsync(entity);
+            }
+            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();
-            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 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, $"鏈绾entity.Name}");
+                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 contract = entity.Contracts
+                    .OrderByDescending(it => it.CreatedTime)
+                    .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;
         }
     }
 }
diff --git a/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml b/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml
index 00800d5..1939991 100644
--- a/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml
+++ b/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>
             璐﹀彿鎴栧瘑鐮佷笉瀛樺湪

--
Gitblit v1.9.1