From 67d5dbb966df4af4304b4168378c68ce83ad01b1 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期三, 10 九月 2025 13:05:50 +0800 Subject: [PATCH] feat:开发 --- FlexJobApi.UserServer.Application/ElectronSign/Commands/ContractTemplateCommandHandler.cs | 192 +++++++++++++++++++++++++++++------------------ 1 files changed, 118 insertions(+), 74 deletions(-) diff --git a/FlexJobApi.UserServer.Application/ElectronSign/Commands/ContractTemplateCommandHandler.cs b/FlexJobApi.UserServer.Application/ElectronSign/Commands/ContractTemplateCommandHandler.cs index f507dc1..945ba7b 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,13 +24,16 @@ /// 鍚堝悓妯℃澘鍛戒护澶勭悊鍣� /// </summary> public class ContractTemplateCommandHandler( + IMediator mediator, IRepository<ContractTemplate> rep, WxmpUtils wxmpUtils ) : IRequestHandler<SaveContractTemplateCommand, Guid>, IRequestHandler<SaveContractTemplateValuesCommand, Guid>, - IRequestHandler<SetIsDisabledContractTemplateCommand, int> + IRequestHandler<SetIsDisabledContractTemplateCommand, int>, + IRequestHandler<CheckContractTemplateCommand, bool> { + private readonly IMediator mediator = mediator; private readonly IRepository<ContractTemplate> rep = rep; private readonly WxmpUtils wxmpUtils = wxmpUtils; @@ -48,9 +52,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 +77,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 +106,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 +118,58 @@ 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.Name == nv.Name + && ov.Type == nv.Type + && ov.Recorder == nv.Recorder + && ov.UserType == nv.UserType + && ov.Label == nv.Label + && ov.BindProperty == nv.BindProperty + && 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); @@ -180,6 +213,35 @@ } /// <summary> + /// 鏍¢獙鍚堝悓妯℃槸鍚﹀彲鐢� + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<bool> Handle(CheckContractTemplateCommand request, CancellationToken cancellationToken) + { + var model = await rep.AsQueryable().AsNoTracking() + .Where(it => it.Id == request.Id && !it.IsDisabled) + .Select(it => new + { + it.Access, + it.Status + }) + .FirstOrDefaultAsync(); + if (model == null) throw Oops.Oh(EnumErrorCodeType.s404, "鍚堝悓妯℃澘"); + if (model.Status != EnumContractTemplateStatus.Completed) throw Oops.Oh(EnumErrorCodeType.s510, "鏈埗鐗�"); + await mediator.Send(new CheckElectronSignAccessEnabledsCommand + { + Accesses = new List<EnumElectronSignAccess> + { + model.Access!.Value + } + }, cancellationToken); + return true; + + } + + /// <summary> /// 鍚屾鐢靛瓙绛惧悎鍚屾ā鏉� /// </summary> /// <param name="entity"></param> @@ -199,25 +261,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