| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- using Abp.Dependency;
- using Abp.Domain.Repositories;
- using Abp.Domain.Uow;
- using VberZero.Authorization.Users;
- using VberZero.BaseSystem;
- using VberZero.DomainService.Notifications;
- using VberZero.DomainService.Notifications.Data;
- using VberZero.Workflow.DesignInfo;
- using VberZero.Workflow.Persistence;
- using WorkflowCore.Interface;
- using WorkflowCore.Models;
- namespace VberZero.Workflows;
- /// <summary>
- /// 通用审批
- /// </summary>
- public class GeneralAuditingStepBody : StepBodyAsync, ITransientDependency
- {
- private const string ActionName = "UserAuditEvent";
- private readonly IAppNotifier _appNotifier;
- private readonly VzUserManager _userManager;
- private readonly IRepository<CommonWorkflowAuditorInfo, string> _auditorRepository;
- private readonly IRepository<WorkflowDefinitionInfo, string> _WorkflowDefinitionRepository;
- private readonly IRepository<WorkflowInfo, string> _workflowInfoRepository;
- private readonly IUnitOfWorkManager _unitOfWorkManager;
- public GeneralAuditingStepBody(IAppNotifier appNotifier, VzUserManager userManager, IRepository<CommonWorkflowAuditorInfo, string> auditorRepository, IRepository<WorkflowDefinitionInfo, string> workflowDefinitionRepository, IRepository<WorkflowInfo, string> workflowInfoRepository, IUnitOfWorkManager unitOfWorkManager)
- {
- _appNotifier = appNotifier;
- _userManager = userManager;
- _auditorRepository = auditorRepository;
- _WorkflowDefinitionRepository = workflowDefinitionRepository;
- _workflowInfoRepository = workflowInfoRepository;
- _unitOfWorkManager = unitOfWorkManager;
- }
- /// <summary>
- /// 审核人
- /// </summary>
- // ReSharper disable once MemberCanBePrivate.Global
- // ReSharper disable once UnusedAutoPropertyAccessor.Global
- public long UserId { get; set; }
- [UnitOfWork]
- public override async Task<ExecutionResult> RunAsync(IStepExecutionContext context)
- {
- WorkflowInfo workflow; WorkflowDefinitionInfo workflowDefinition;
- using (_unitOfWorkManager.Current.DisableFilter(AbpDataFilters.MayHaveTenant))
- {
- workflow = await _workflowInfoRepository.FirstOrDefaultAsync(a => a.Id == context.Workflow.Id);
- workflowDefinition = await
- _WorkflowDefinitionRepository.FirstOrDefaultAsync(a => a.Id == context.Workflow.WorkflowDefinitionId && a.Version ==
- context.Workflow.Version);
- }
- if (workflow == null) return new ExecutionResult() { Proceed = false };
- using (_unitOfWorkManager.Current.SetTenantId(workflow.TenantId))
- {
- if (!context.ExecutionPointer.EventPublished)
- {
- var user = await _userManager.GetUserByIdAsync(workflow.CreatorUserId ?? 0);
- var auditUserInfo = await _userManager.GetUserByIdAsync(UserId);
- var recordId = Guid.NewGuid().ToString("N");
- await _auditorRepository.InsertAsync(new CommonWorkflowAuditorInfo()
- {
- Id = recordId,
- WorkflowId = workflow.Id,
- ExecutionPointerId = context.ExecutionPointer.Id,
- Status = VzDefinition.WorkflowAuditStatus.UnAudited,
- UserId = UserId,
- TenantId = workflow.TenantId,
- UserIdentityName = auditUserInfo.FullName,
- UserHeadPhoto = auditUserInfo.AvatarPath
- });
- //通知审批人
- await _appNotifier.SendWorkflowAuditNotifyAsync(UserId, workflow.TenantId, new WorkflowAuditNotificationData(workflowDefinition.Title, user.Surname, workflow.Id, recordId));
- DateTime effectiveDate = DateTime.MinValue;
- return ExecutionResult.WaitForEvent(ActionName, Guid.NewGuid().ToString("N"), effectiveDate);
- }
- var passCount = await _auditorRepository.CountAsync(u => u.ExecutionPointerId == context.ExecutionPointer.Id && u.UserId == UserId && u.Status == VzDefinition.WorkflowAuditStatus.Pass);
- if (passCount > 0)
- {
- return ExecutionResult.Next();
- }
- }
- //再次开启事件推送
- context.ExecutionPointer.EventPublished = false;
- return ExecutionResult.WaitForEvent(ActionName, Guid.NewGuid().ToString("N"), DateTime.MinValue);
- }
- }
|