From 193fa41f6419b80f33dabad90ed65ed1e310add8 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期四, 11 九月 2025 15:48:05 +0800
Subject: [PATCH] fix: s

---
 FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs |  103 +++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 78 insertions(+), 25 deletions(-)

diff --git a/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs b/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs
index eb73bde..28b6bcf 100644
--- a/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs
+++ b/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs
@@ -194,8 +194,13 @@
             var logier = JwtUtils.GetCurrentLogier();
             var entity = await request.SaveData<EnterpriseEmployee, EditEnterpriseEmployeeCommand>(
                 q => q.Where(it => it.EnterpriseId == logier.EnterpriseId),
-                it => it.EnterpriseId == logier.EnterpriseId && it.Id != request.Id && it.Identity == request.Identity,
-                 (entity) =>
+                it => 
+                    it.EnterpriseId == logier.EnterpriseId 
+                    && it.Id != request.Id 
+                    && it.Name == request.Name 
+                    && it.Identity == request.Identity 
+                    && it.ContactPhoneNumber == request.ContactPhoneNumber,
+                (entity) =>
                 {
                     if (request.Id.HasValue && entity.UserId.HasValue)
                     {
@@ -260,13 +265,6 @@
                     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;
@@ -281,27 +279,67 @@
         public async Task<int> Handle(SendInviteElectronSignSmsCommand request, CancellationToken cancellationToken)
         {
             var logier = JwtUtils.GetCurrentLogier();
+
+            await mediator.Send(new CheckContractTemplateCommand
+            {
+                Id = request.ContractTemplateId
+            }, cancellationToken);
+
             var entities = await rep.AsQueryable()
                 .Include(it => it.Enterprise)
                 .Include(it => it.ContractTemplate)
                 .Where(it =>
                     it.EnterpriseId == logier.EnterpriseId
-                    && request.Ids.Contains(it.Id)
-                    && it.UserSignContractStatus == EnumTaskUserSignContractStatus.Wait)
+                    && request.Ids.Contains(it.Id))
                 .ToListAsync();
-            foreach (var entity in entities)
+
+            foreach (var id in request.Ids)
             {
-                await smsUtils.Send(new SendSmsModel
+                var entity = entities.FirstOrDefault(it => it.Id == id);
+                if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "鐏靛伐");
+                if (entity.UserSignContractStatus == null
+                    || entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Refuse
+                    || entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Stop)
                 {
-                    PhoneNumber = entity.ContactPhoneNumber,
-                    TemplateCode = EnumSmsTemplateCode.InviteElectronSign,
-                },
-                new
+                    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 rep.UpdateAsync(entity);
+                }
+                if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Wait)
                 {
-                    name = entity.Enterprise.EnterpriseName,
-                    code = entity.ContractTemplate.Code
-                });
+                    var codeUrl = new SaveCodeUrlCommand
+                    {
+                        Scene = EnumCodeUrlScene.InviteElectronSign,
+                        ParamValue1 = entity.Id.ToString(),
+                        ExpiredTime = DateTime.Now.AddMonths(1)
+                    };
+                    var code = await mediator.Send(codeUrl);
+                    await smsUtils.Send(new SendSmsModel
+                    {
+                        PhoneNumber = entity.ContactPhoneNumber,
+                        TemplateCode = EnumSmsTemplateCode.InviteElectronSign,
+                    },
+                    new
+                    {
+                        name = entity.Enterprise.EnterpriseName,
+                        code = code
+                    });
+                }
             }
+
             return entities.Count;
         }
 
@@ -313,11 +351,26 @@
         /// <returns></returns>
         public async Task<PersonalUserElectronSignCommandResult> Handle(PersonalUserElectronSignCommand request, CancellationToken cancellationToken)
         {
-            var logier = JwtUtils.GetCurrentLogier();
+            if (request.Id == null)
+            {
+                if (request.SmsCode.IsNotNull())
+                {
+                    var codeUrl = await mediator.Send(new GetCodeUrlQuery
+                    {
+                        Code = request.SmsCode,
+                        Scene = EnumCodeUrlScene.InviteElectronSign
+                    });
+                    request.Id = codeUrl.ParamValue1.ToGuid()!;
+                }
+                else
+                {
+                    throw Oops.Oh(EnumErrorCodeType.s400, "璇峰~鍐欑伒宸d鎴栫煭淇$紪鍙�");
+                }
+            }
             var entity = await rep.AsQueryable()
                 .Include(it => it.Enterprise)
                 .Include(it => it.ContractTemplate).ThenInclude(it => it.Values)
-                .Where(it => it.UserId == logier.Id && it.Id == request.Id)
+                .Where(it => it.Id == request.Id)
                 .FirstOrDefaultAsync();
             if (entity == null) throw Oops.Oh(EnumErrorCodeType.s510, "鏈姤鍚嶈浼佷笟");
             if (entity.UserSignContractStatus == null) throw Oops.Oh(EnumErrorCodeType.s510, "浼佷笟鏈彂璧风绾�");
@@ -331,7 +384,7 @@
             if (contract == null) throw Oops.Oh(EnumErrorCodeType.s404, "鍚堝悓");
             var user = await repUser.AsQueryable().AsNoTracking()
                 .Include(it => it.UserAuth)
-                .Where(it => it.Id == logier.Id)
+                .Where(it => it.Id == entity.UserId)
                 .FirstOrDefaultAsync();
             if (user == null) throw Oops.Oh(EnumErrorCodeType.s404, "鐢ㄦ埛");
             if (entity.ContractTemplate.Access == EnumElectronSignAccess.BestSign && !user.IsReal) throw Oops.Oh(EnumErrorCodeType.s510, "璇峰厛瀹炲悕");
@@ -340,7 +393,7 @@
                 OutContractId = contract.Id.ToString(),
                 TemplateId = entity.ContractTemplate.ElectronSignContractTemplateId!.Value,
                 Title = entity.ContractTemplate.Name,
-                OutUserId = logier.Id.ToString(),
+                OutUserId = entity.UserId.ToString(),
                 Values = entity.ContractTemplate.Values
                     .Where(it => it.UserType == EnumUserType.Personal)
                     .Select(it =>
@@ -378,7 +431,7 @@
                 .Replace("https://openapi.bestsign.info:443", "https://wx115.bestsign.info")
                 .Replace("https://openapi.bestsign.cn:443", "https://wx115.bestsign.cn");
 
-            if (entity.ContractTemplate.Access == EnumElectronSignAccess.AlipaySign)
+            if (request.SmsCode.IsNull() && entity.ContractTemplate.Access == EnumElectronSignAccess.AlipaySign)
             {
                 var codeUrl = new SaveCodeUrlCommand
                 {

--
Gitblit v1.9.1