From 5454e326a76e695ba4a51d5994c88ef7ded76efc Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期四, 21 八月 2025 13:24:10 +0800
Subject: [PATCH] feat:开发

---
 FlexJobApi.UserServer.Application/ElectronSign/Commands/ContractTemplateCommandHandler.cs |  147 +++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 129 insertions(+), 18 deletions(-)

diff --git a/FlexJobApi.UserServer.Application/ElectronSign/Commands/ContractTemplateCommandHandler.cs b/FlexJobApi.UserServer.Application/ElectronSign/Commands/ContractTemplateCommandHandler.cs
index d098fe9..5e701ff 100644
--- a/FlexJobApi.UserServer.Application/ElectronSign/Commands/ContractTemplateCommandHandler.cs
+++ b/FlexJobApi.UserServer.Application/ElectronSign/Commands/ContractTemplateCommandHandler.cs
@@ -1,4 +1,10 @@
-锘縰sing FlexJobApi.Core;
+锘縰sing Azure.Core;
+using FlexJobApi.Core;
+using FlexJobApi.Core.Models.ElectronSignServer.Common;
+using FlexJobApi.Core.Models.ElectronSignServer.ContractTemplates;
+using FlexJobApi.Core.Models.ElectronSignServer.PersonalUserReals;
+using FlexJobApi.Core.Models.ElectronSignServer.Users;
+using Furion;
 using Furion.DatabaseAccessor;
 using Furion.FriendlyException;
 using Mapster;
@@ -9,6 +15,7 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
 
 namespace FlexJobApi.UserServer.Application
 {
@@ -19,6 +26,7 @@
             IRepository<ContractTemplate> rep
         ) :
         IRequestHandler<SaveContractTemplateCommand, Guid>,
+        IRequestHandler<SaveContractTemplateValuesCommand, Guid>,
         IRequestHandler<SetIsDisabledContractTemplateCommand, int>
     {
         private readonly IRepository<ContractTemplate> rep = rep;
@@ -38,11 +46,45 @@
             }
             if (request.EnterpriseId == null) throw Oops.Oh(EnumErrorCodeType.s400, "璇烽�夋嫨浼佷笟");
 
-            return await request.SaveData<ContractTemplate, SaveContractTemplateCommand>(
+            var entity = await request.SaveData<ContractTemplate, SaveContractTemplateCommand>(
                  q => q
                     .Include(it => it.Values)
                     .Where(it => it.EnterpriseId == request.EnterpriseId && !it.IsDisabled),
                  it => it.EnterpriseId == request.EnterpriseId && it.Name == request.Name && !it.IsDisabled && it.Id != request.Id,
+                 entity =>
+                 {
+                     request.Adapt(entity);
+                     if (request.Id == null)
+                     {
+                         entity.Status = EnumContractTemplateStatus.Wait;
+                     }
+                     else if (entity.Access.HasValue && entity.TemplateId.IsNotNull() && entity.Values.IsNotNull())
+                     {
+                         entity.Status = EnumContractTemplateStatus.Completed;
+                         entity.CompletedTime = DateTime.Now;
+                     }
+                 },
+                 cancellationToken);
+
+            await SyncElectronSignContractTemplate(entity);
+
+            return entity.Id;
+        }
+
+        /// <summary>
+        /// 鍚堝悓鍒剁増
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task<Guid> Handle(SaveContractTemplateValuesCommand request, CancellationToken cancellationToken)
+        {
+            var logier = JwtUtils.GetCurrentLogier();
+            var entity = await request.SaveData<ContractTemplate, SaveContractTemplateValuesCommand>(
+                 q => q
+                    .Include(it => it.Values)
+                    .Where(it => !it.IsDisabled),
+                 null,
                  entity =>
                  {
                      request.Adapt(entity);
@@ -69,21 +111,17 @@
                          entity.UpdatedUserId = logier.Id;
                          entity.UpdatedTime = DateTime.Now;
                      }
-                     if (entity.Access.HasValue && entity.TemplateId.IsNotNull())
+                     if (entity.Access.HasValue && entity.TemplateId.IsNotNull() && request.Values.IsNotNull())
                      {
-                         if (entity.Status == EnumContractTemplateStatus.Wait)
-                         {
-                             entity.Status = EnumContractTemplateStatus.Completed;
-                             entity.CompletedTime = DateTime.Now;
-                         }
-                     }
-                     else
-                     {
-                         entity.Status = EnumContractTemplateStatus.Wait;
-                         entity.CompletedTime = null;
+                         entity.Status = EnumContractTemplateStatus.Completed;
+                         entity.CompletedTime = DateTime.Now;
                      }
                  },
                  cancellationToken);
+
+            await SyncElectronSignContractTemplate(entity);
+
+            return entity.Id;
         }
 
         /// <summary>
@@ -95,14 +133,87 @@
         public async Task<int> Handle(SetIsDisabledContractTemplateCommand request, CancellationToken cancellationToken)
         {
             var logier = JwtUtils.GetCurrentLogier();
-            return await request.SetIsDisabled<ContractTemplate>(q =>
+            var q = rep.AsQueryable();
+            if (logier.Type == EnumUserType.Enterprise)
             {
-                if (logier.Type == EnumUserType.Enterprise)
+                q = q.Where(it => it.EnterpriseId == logier.EnterpriseId);
+            }
+            var entities = await q
+                .Where(it => request.Ids.Contains(it.Id) && it.IsDisabled != request.IsDisabled)
+                .ToListAsync();
+            foreach (var entity in entities)
+            {
+                entity.IsDisabled = request.IsDisabled;
+            }
+            var ids = entities.DistinctSelect(it => it.ElectronSignContractTemplateId.HasValue, it => it.ElectronSignContractTemplateId!.Value);
+            if (ids.IsNotNull())
+            {
+                var result = await new DeleteContractTemplateInput
                 {
-                    q = q.Where(it => it.EnterpriseId == logier.EnterpriseId);
+                    Ids = ids
+                }.SendHttpAsync<DeleteContractTemplateInput, ElectronSignServerResult<object>>(EnumResourceHttpProvider.ElectronSignServerCustomer);
+                if (result?.Success != true)
+                {
+                    throw Oops.Oh(EnumErrorCodeType.s510, result?.Message ?? "鍒犻櫎鐢靛瓙绛惧悎鍚屾ā鏉垮紓甯�");
                 }
-                return q;
-            }, cancellationToken);
+            }
+            return entities.Count;
+        }
+
+        /// <summary>
+        /// 鍚屾鐢靛瓙绛惧悎鍚屾ā鏉�
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        private async Task SyncElectronSignContractTemplate(ContractTemplate entity)
+        {
+            if (entity.Status == EnumContractTemplateStatus.Completed)
+            {
+                var enterprise = await rep.Change<Enterprise>().AsQueryable()
+                    .Include(it => it.EnterpriseAuth)
+                    .Where(it => it.Id == entity.EnterpriseId)
+                    .FirstOrDefaultAsync();
+                if (enterprise == null) throw Oops.Oh(EnumErrorCodeType.s404, "浼佷笟");
+                if (enterprise.EnterpriseAuth == null)
+                {
+                    enterprise.EnterpriseAuth = new EnterpriseAuth();
+                }
+                if (enterprise.EnterpriseAuth.ElectronSignEnterpriseId == null)
+                {
+                    var resultRegOrUpdateUser = await new RegOrUpdateUserInput
+                    {
+                        OutUserId = enterprise.Id.ToString(),
+                        UserType = EnumElectronSignUserType.Personal,
+                        EnterpriseName = enterprise.EnterpriseName,
+                        SocietyCreditCode = enterprise.SocietyCreditCode,
+                        Name = enterprise.EnterpriseAuth?.Name,
+                        Identity = enterprise?.EnterpriseAuth?.Identity,
+                        Mobile = enterprise?.EnterpriseAuth?.PhoneNumber
+                    }.SendHttpAsync<RegOrUpdateUserInput, ElectronSignServerResult<Guid?>>(EnumResourceHttpProvider.ElectronSignServerCustomer);
+
+                    if (resultRegOrUpdateUser?.Success == true)
+                    {
+                        enterprise!.EnterpriseAuth!.ElectronSignEnterpriseId = resultRegOrUpdateUser.Result;
+                    }
+                    else
+                    {
+                        throw Oops.Oh(EnumErrorCodeType.s510, resultRegOrUpdateUser?.Message ?? "娉ㄥ唽鐢靛瓙绛捐处鍙峰紓甯�");
+                    }
+                }
+                var result = await new CreateOrUpdateContractTemplateInput
+                {
+                    CustomerId = App.GetConfig<Guid>("ElectronSignServer:AppId"),
+                    UserId = enterprise.EnterpriseAuth.ElectronSignEnterpriseId,
+                    Supplier = (EnumElectronSignContractSupplier)entity.Access!,
+                    Name = entity.Name,
+                    TemplateCode = entity.TemplateId,
+                    Values = entity.Values.Adapt<List<CreateOrUpdateContractTemplateValueInput>>()
+                }.SendHttpAsync<CreateOrUpdateContractTemplateInput, ElectronSignServerResult<Guid>>(EnumResourceHttpProvider.ElectronSignServerCustomer);
+                if (result?.Success == true)
+                {
+                    entity.ElectronSignContractTemplateId = result.Result;
+                }
+            }
         }
     }
 }

--
Gitblit v1.9.1