From e9960b323c486a3d34275824fd9bd6259d1b5c20 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期五, 22 八月 2025 14:16:53 +0800
Subject: [PATCH] Merge branch 'master' of http://120.26.58.240:8888/r/ApiFlexJob

---
 FlexJobApi.UserServer.Application/ElectronSign/Commands/ContractTemplateCommandHandler.cs |  158 ++++++++++++++++++++++++++++------------------------
 1 files changed, 85 insertions(+), 73 deletions(-)

diff --git a/FlexJobApi.UserServer.Application/ElectronSign/Commands/ContractTemplateCommandHandler.cs b/FlexJobApi.UserServer.Application/ElectronSign/Commands/ContractTemplateCommandHandler.cs
index f507dc1..8753ea0 100644
--- a/FlexJobApi.UserServer.Application/ElectronSign/Commands/ContractTemplateCommandHandler.cs
+++ b/FlexJobApi.UserServer.Application/ElectronSign/Commands/ContractTemplateCommandHandler.cs
@@ -9,6 +9,7 @@
 using Furion.FriendlyException;
 using Mapster;
 using MediatR;
+using Microsoft.AspNetCore.Components.Forms;
 using Microsoft.EntityFrameworkCore;
 using System;
 using System.Collections.Generic;
@@ -23,6 +24,7 @@
     /// 鍚堝悓妯℃澘鍛戒护澶勭悊鍣�
     /// </summary>
     public class ContractTemplateCommandHandler(
+            IMediator mediator,
             IRepository<ContractTemplate> rep,
             WxmpUtils wxmpUtils
         ) :
@@ -30,6 +32,7 @@
         IRequestHandler<SaveContractTemplateValuesCommand, Guid>,
         IRequestHandler<SetIsDisabledContractTemplateCommand, int>
     {
+        private readonly IMediator mediator = mediator;
         private readonly IRepository<ContractTemplate> rep = rep;
         private readonly WxmpUtils wxmpUtils = wxmpUtils;
 
@@ -48,9 +51,23 @@
             }
             if (request.EnterpriseId == null) throw Oops.Oh(EnumErrorCodeType.s400, "璇烽�夋嫨浼佷笟");
 
-            var existCode = await rep.AsQueryable().AsNoTracking()
-                .AnyAsync(it => it.Code == request.Code && !it.IsDisabled && it.Id != request.Id);
-            if (existCode) throw Oops.Oh(EnumErrorCodeType.s405, "涓氬姟缂栫爜");
+            if (request.Code.IsNotNull())
+            {
+                var existCode = await rep.AsQueryable().AsNoTracking()
+                    .AnyAsync(it => it.Code == request.Code && !it.IsDisabled && it.Id != request.Id);
+                if (existCode) throw Oops.Oh(EnumErrorCodeType.s405, "涓氬姟缂栫爜");
+            }
+
+            if (request.Access.HasValue)
+            {
+                await mediator.Send(new CheckElectronSignAccessEnabledsCommand
+                {
+                    Accesses = new List<EnumElectronSignAccess>
+                {
+                    request.Access.Value
+                }
+                }, cancellationToken);
+            }
 
             var entity = await request.SaveData<ContractTemplate, SaveContractTemplateCommand>(
                  q => q
@@ -59,7 +76,21 @@
                  null,
                  entity =>
                  {
+                     if (entity.Code.IsNotNull() && entity.Name.IsNotNull() && (entity.Code != request.Code || entity.Name != request.Name || entity.WxmpQrCode.IsNull()))
+                     {
+                         entity.WxmpQrCode = wxmpUtils.GetQrCodeOssUrl(new WxmpGetQrCodeCommand
+                         {
+                             UserType = EnumUserType.Personal,
+                             OssScene = "Wxmp/QrCode/ContractTemplate",
+                             OssFileName = $"{request.Name}.png",
+                             Page = "subpackages/mine/mineAgreementSignDetail/mineAgreementSignDetail",
+                             CheckPath = false,
+                             Scene = $"{request.Code}",
+                         }).Result;
+                     }
+
                      request.Adapt(entity);
+
                      if (request.Id == null)
                      {
                          entity.Status = EnumContractTemplateStatus.Wait;
@@ -74,19 +105,6 @@
 
             await SyncElectronSignContractTemplate(entity);
 
-            if (request.Id == null)
-            {
-                entity.WxmpQrCode = await wxmpUtils.GetQrCodeOssUrl(new WxmpGetQrCodeCommand
-                {
-                    UserType = EnumUserType.Personal,
-                    OssScene = "Wxmp/QrCode/ContractTemplate",
-                    OssFileName = $"{entity.Name}.png",
-                    Page = "subpackages/mine/mineAgreementSignDetail/mineAgreementSignDetail",
-                    CheckPath = false,
-                    Scene = $"{entity.Code}",
-                });
-            }
-
             return entity.Id;
         }
 
@@ -99,44 +117,56 @@
         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);
-                     if (entity.Values.Count != request.Values.Count
-                        || entity.Values.Any(ov =>
-                                request.Values.Count(nv =>
-                                    ov.Id == nv.Id
-                                    && ov.Type == nv.Type
-                                    && ov.Recorder == nv.Recorder
-                                    && ov.UserType == nv.UserType
-                                    && ov.Label == nv.Label
-                                    && ov.Required == nv.Required) != 1))
-                     {
-                         entity.Values = request.Values.Select(it =>
-                         {
-                             var value = entity.Values.FirstOrDefault(v => v.Id == it.Id);
-                             if (value == null)
-                             {
-                                 value = new ContractTemplateValue();
-                             }
-                             it.Adapt(value);
-                             return value;
-                         }).ToList();
-                         entity.UpdatedUserId = logier.Id;
-                         entity.UpdatedTime = DateTime.Now;
-                     }
-                     if (entity.Access.HasValue && entity.TemplateId.IsNotNull() && request.Values.IsNotNull())
-                     {
-                         entity.Status = EnumContractTemplateStatus.Completed;
-                         entity.CompletedTime = DateTime.Now;
-                     }
-                 },
-                 cancellationToken);
+            var entity = await rep.AsQueryable()
+                .Include(it => it.Values)
+                .Where(it => it.Id == request.Id && !it.IsDisabled)
+                .FirstOrDefaultAsync();
+            if (entity == null)
+            {
+                throw Oops.Oh(EnumErrorCodeType.s404, "鍚堝悓妯℃澘");
+            }
+
+            if (entity.Access.HasValue)
+            {
+                await mediator.Send(new CheckElectronSignAccessEnabledsCommand
+                {
+                    Accesses = new List<EnumElectronSignAccess>
+                    {
+                        entity.Access.Value
+                    }
+                }, cancellationToken);
+            }
+
+            request.Adapt(entity);
+
+            if (entity.Values.Count != request.Values.Count
+               || entity.Values.Any(ov =>
+                       request.Values.Count(nv =>
+                           ov.Id == nv.Id
+                           && ov.Type == nv.Type
+                           && ov.Recorder == nv.Recorder
+                           && ov.UserType == nv.UserType
+                           && ov.Label == nv.Label
+                           && ov.Required == nv.Required) != 1))
+            {
+                entity.Values = request.Values.Select(it =>
+                {
+                    var value = entity.Values.FirstOrDefault(v => v.Id == it.Id);
+                    if (value == null)
+                    {
+                        value = new ContractTemplateValue();
+                    }
+                    it.Adapt(value);
+                    return value;
+                }).ToList();
+                entity.UpdatedUserId = logier.Id;
+                entity.UpdatedTime = DateTime.Now;
+            }
+            if (entity.Access.HasValue && entity.TemplateId.IsNotNull() && request.Values.IsNotNull())
+            {
+                entity.Status = EnumContractTemplateStatus.Completed;
+                entity.CompletedTime = DateTime.Now;
+            }
 
             await SyncElectronSignContractTemplate(entity);
 
@@ -199,25 +229,7 @@
                 }
                 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 ?? "娉ㄥ唽鐢靛瓙绛捐处鍙峰紓甯�");
-                    }
+                    throw Oops.Oh(EnumErrorCodeType.s510, "鏈敞鍐岀數瀛愮璐﹀彿锛岃閲嶆柊鍚屾818璐﹀彿淇℃伅");
                 }
                 var result = await new CreateOrUpdateContractTemplateInput
                 {

--
Gitblit v1.9.1