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/ElectronSign/Commands/ElectronSignCallbackCommandHandler.cs | 186 ++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 154 insertions(+), 32 deletions(-) diff --git a/FlexJobApi.UserServer.Application/ElectronSign/Commands/ElectronSignCallbackCommandHandler.cs b/FlexJobApi.UserServer.Application/ElectronSign/Commands/ElectronSignCallbackCommandHandler.cs index 495bd7a..7896a22 100644 --- a/FlexJobApi.UserServer.Application/ElectronSign/Commands/ElectronSignCallbackCommandHandler.cs +++ b/FlexJobApi.UserServer.Application/ElectronSign/Commands/ElectronSignCallbackCommandHandler.cs @@ -1,9 +1,11 @@ -锘縰sing FlexJobApi.Core; +锘縰sing Azure.Core; +using FlexJobApi.Core; using Furion; using Furion.DatabaseAccessor; using Furion.FriendlyException; using MediatR; using Microsoft.EntityFrameworkCore; +using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Linq; @@ -16,11 +18,17 @@ /// 鐢靛瓙绛惧洖浼� /// </summary> public class ElectronSignCallbackCommandHandler( - IRepository<User> repUser + IRepository<User> repUser, + IRepository<EnterpriseEmployeeContract> repEnterpriseEmployeeContract, + IRepository<EnterpriseEmployee> repEnterpriseEmployee, + IRepository<TaskInfoUser> repTaskInfoUser ) : IRequestHandler<ElectronSignCallbackCommand, bool> { private readonly IRepository<User> repUser = repUser; + private readonly IRepository<EnterpriseEmployeeContract> repEnterpriseEmployeeContract = repEnterpriseEmployeeContract; + private readonly IRepository<EnterpriseEmployee> repEnterpriseEmployee = repEnterpriseEmployee; + private readonly IRepository<TaskInfoUser> repTaskInfoUser = repTaskInfoUser; /// <summary> /// 鐢靛瓙绛惧洖浼� @@ -33,39 +41,153 @@ var appId = App.GetConfig<Guid>("ElectronSignServer:AppId"); if (appId != request.CustomerId) throw Oops.Oh(EnumErrorCodeType.s400, "鏃犳晥鐨凙ppId"); - if (request.Action == "UserSign") + switch (request.Action) { - var user = await repUser.AsQueryable() - .Include(it => it.UserAuth) - .Where(it => it.UserAuth.ElectronSignUserId == request.RelationId) - .FirstOrDefaultAsync(); - if (user == null) - throw Oops.Oh(EnumErrorCodeType.s404, "鐢ㄦ埛"); - if (request.Data is ElectronSignCallbackCommandUserSignModel data) - { - if (user.Id != data.OutUserId) - throw Oops.Oh(EnumErrorCodeType.s404, "鐢ㄦ埛"); - var enterpriseEmployees = request.Success - ? await repUser.Change<EnterpriseEmployee>().AsQueryable() - .Where(it => it.UserId == user.Id) - .ToListAsync() - : new List<EnterpriseEmployee>(); - PersonalUserRealCommandHandler.PersonalReal( - request.Success == true - ? EnumPersonalUserRealStatus.Real - : EnumPersonalUserRealStatus.Fail, - EnumUserRealMethod.Face, - user, - enterpriseEmployees, - user.UserAuth.Name, - user.UserAuth.Identity, - user.UserAuth.IdentityImg, - user.UserAuth.IdentityBackImg, - faceRealUrl: user.UserAuth.FaceRealUrl); - await repUser.UpdateAsync(user); - } + case "UserSign": + await UserSign(request); + break; + case "ContractSign": + await ContractSign(request); + break; + default: + break; } return true; } + + private async Task ContractSign(ElectronSignCallbackCommand request) + { + var data = ((JObject)request.Data).ToObject<ElectronSignCallbackCommandContractSignModel>()!; + var contractId = data.OutContractId.ToGuid("鏃犳晥鐨勫悎鍚孖d")!.Value; + var contract = await repEnterpriseEmployeeContract.AsQueryable() + .Include(it=>it.ContractTemplate) + .Where(it => it.Id == contractId) + .FirstOrDefaultAsync(); + if (contract == null) throw Oops.Oh(EnumErrorCodeType.s404, "鍚堝悓"); + var entity = await repEnterpriseEmployee.AsQueryable() + .Include(it => it.ContractTemplate) + .Where(it => it.Id == contract.EnterpriseEmployeeId) + .FirstOrDefaultAsync(); + if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "鐏靛伐"); + if (entity.ContractTemplateId != contract.ContractTemplateId + || entity.UserSignContractStatus != contract.UserSignContractStatus + || entity.UserSignContractTime != contract.UserSignContractTime + || entity.EnterpriseSignContractStatus != contract.EnterpriseSignContractStatus + || entity.EnterpriseSignContractTime != contract.EnterpriseSignContractTime) + { + throw Oops.Oh(EnumErrorCodeType.s510, "鍚堝悓宸插け鏁�"); + } + if (request.Success) + { + if (entity.ContractTemplate.Access == EnumElectronSignAccess.BestSign) + { + if (data.UserType == Core.Models.ElectronSignServer.PersonalUserReals.EnumElectronSignUserType.Personal) + { + if (data.Status == Core.Models.ElectronSignServer.ContractTemplates.EnumElectronSignContractStatus.Signing) + { + contract.UserSignContractStatus = EnumTaskUserSignContractStatus.Pass; + contract.UserSignContractTime = DateTime.Now; + contract.EnterpriseSignContractStatus = EnumTaskUserSignContractStatus.Wait; + } + } + else + { + if (data.Status == Core.Models.ElectronSignServer.ContractTemplates.EnumElectronSignContractStatus.Signing) + { + contract.EnterpriseSignContractStatus = EnumTaskUserSignContractStatus.Pass; + contract.EnterpriseSignContractTime = DateTime.Now; + } + } + } + if (data.Status == Core.Models.ElectronSignServer.ContractTemplates.EnumElectronSignContractStatus.Completed) + { + contract.UserSignContractStatus = EnumTaskUserSignContractStatus.Pass; + if (contract.UserSignContractTime == null) + { + contract.UserSignContractTime = DateTime.Now; + } + contract.EnterpriseSignContractStatus = EnumTaskUserSignContractStatus.Pass; + if (contract.EnterpriseSignContractTime == null) + { + contract.EnterpriseSignContractTime = DateTime.Now; + } + contract.ContractUrl = AliyunOSSUtils.Upload("Contact", data.ContactUrl, $"{contract.ContractTemplate.Name}.pdf").Url; + } + } + else + { + if (entity.ContractTemplate.Access == EnumElectronSignAccess.BestSign) + { + if (data.UserType == Core.Models.ElectronSignServer.PersonalUserReals.EnumElectronSignUserType.Personal) + { + contract.UserSignContractErrorMessage = request.Message; + } + else + { + contract.EnterpriseSignContractErrorMessage = request.Message; + } + } + else + { + contract.UserSignContractErrorMessage = request.Message; + contract.EnterpriseSignContractErrorMessage = request.Message; + } + } + await repEnterpriseEmployeeContract.UpdateAsync(contract); + + entity.UserSignContractStatus = contract.UserSignContractStatus; + entity.UserSignContractTime = contract.UserSignContractTime; + entity.EnterpriseSignContractStatus = contract.EnterpriseSignContractStatus; + entity.EnterpriseSignContractTime = contract.EnterpriseSignContractTime; + entity.ContractUrl = contract.ContractUrl; + await repEnterpriseEmployee.UpdateAsync(entity); + + if (entity.UserSignContractStatus == EnumTaskUserSignContractStatus.Pass && entity.EnterpriseSignContractStatus == EnumTaskUserSignContractStatus.Pass) + { + var taskUsers = await repTaskInfoUser.AsQueryable() + .Where(it => it.EnterpriseEmployeeId == entity.Id && it.HireStatus == EnumTaskUserHireStatus.Pass && it.ArrangeStatus == null) + .ToListAsync(); + if (taskUsers.IsNotNull()) + { + foreach (var taskUser in taskUsers) + { + taskUser.ArrangeStatus = EnumTaskUserArrangeStatus.Wait; + } + await repTaskInfoUser.UpdateAsync(taskUsers); + } + } + } + + private async Task UserSign(ElectronSignCallbackCommand request) + { + var user = await repUser.AsQueryable() + .Include(it => it.UserAuth) + .Where(it => it.UserAuth.ElectronSignUserId == request.RelationId) + .FirstOrDefaultAsync(); + if (user == null) + throw Oops.Oh(EnumErrorCodeType.s404, "鐢ㄦ埛"); + var data = ((JObject)request.Data).ToObject<ElectronSignCallbackCommandUserSignModel>()!; + if (user.Id != data.OutUserId) + throw Oops.Oh(EnumErrorCodeType.s404, "鐢ㄦ埛"); + var enterpriseEmployees = request.Success + ? await repUser.Change<EnterpriseEmployee>().AsQueryable() + .Where(it => it.UserId == user.Id) + .ToListAsync() + : new List<EnterpriseEmployee>(); + PersonalUserRealCommandHandler.PersonalReal( + request.Success == true + ? EnumPersonalUserRealStatus.Real + : EnumPersonalUserRealStatus.Fail, + user.RealMethod!.Value, + user, + enterpriseEmployees, + user.UserAuth.Name, + user.UserAuth.Identity, + user.UserAuth.IdentityImg, + user.UserAuth.IdentityBackImg, + user.UserAuth.PhoneNumber, + user.UserAuth.FaceRealUrl); + await repUser.UpdateAsync(user); + } } } -- Gitblit v1.9.1