From c682cd59ded8e71957a802dd4f8dcf58e0113c0f Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期四, 11 九月 2025 15:33:30 +0800 Subject: [PATCH] feat:开发 --- 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