| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- using Abp.Application.Services.Dto;
- using Abp.Authorization;
- using Abp.Domain.Repositories;
- using Abp.UI;
- using Microsoft.EntityFrameworkCore;
- using VberZero.AppService.Base;
- using VberZero.AppService.Base.Dto;
- using VberZero.AppService.Workflows.Dto;
- using VberZero.Authorization.Users;
- using VberZero.BaseSystem;
- using VberZero.Workflow;
- using VberZero.Workflow.Persistence;
- namespace VberZero.AppService.Workflows;
- [AbpAuthorize]
- public class WorkflowAuditAppServiceBase : VzAppServiceBase, IWorkflowAuditAppServiceBase
- {
- private readonly IVberWorkflowManager _workflowManager;
- private readonly IRepository<CommonWorkflowAuditorInfo, string> _auditorRepository;
- private readonly IRepository<WorkflowInfo, string> _workflowRepository;
- private readonly VzUserManager _userManager;
- public WorkflowAuditAppServiceBase(IVberWorkflowManager workflowManager, IRepository<CommonWorkflowAuditorInfo, string> auditorRepository, IRepository<WorkflowInfo, string> workflowRepository, VzUserManager userManager)
- {
- _workflowManager = workflowManager;
- _auditorRepository = auditorRepository;
- _workflowRepository = workflowRepository;
- _userManager = userManager;
- }
- /// <summary>
- /// 获取我的审批流程
- /// </summary>
- /// <param name="input"></param>
- /// <returns></returns>
- public async Task<PagedResultDto<MyAuditWorkflowListOutput>> GetAllAsync(VzPagedRequestDto input)
- {
- var query = _auditorRepository.GetAll().Where(u => u.UserId == AbpSession.UserId);
- query = ApplyFilter(query, input);
- var totalCount = await query.CountAsync();
- query = query.OrderByDescending(u => u.CreationTime);
- var entities = query.Skip(input.SkipCount).Take(input.MaxResultCount);
- return new PagedResultDto<MyAuditWorkflowListOutput>(totalCount, entities.Select(a => new MyAuditWorkflowListOutput()
- {
- Id = a.Id,
- ExecutionPointerId = a.ExecutionPointerId,
- CreationTime = a.Workflow.CreationTime,
- Title = a.Workflow.WorkflowDefinitionInfo.Title,
- UserName = a.Workflow.CreateUserIdentityName,
- WorkflowDefinitionId = a.Workflow.WorkflowDefinitionId,
- Version = a.Workflow.WorkflowDefinitionInfo.Version,
- WorkflowId = a.WorkflowId,
- Status = a.Status,
- AuditTime = a.AuditTime
- }).ToList());
- }
- /// <summary>
- /// 获取详情
- /// </summary>
- /// <param name="input">流程ID</param>
- /// <returns></returns>
- public async Task<WorkflowAuditDto> GetAuditRecordsAsync(EntityDto<string> input)
- {
- var query = _auditorRepository.GetAll().Where(u => u.WorkflowId == input.Id).Select(a => new
- {
- a.ExecutionPointerId,
- a.AuditTime,
- a.Status,
- a.Remark,
- a.UserIdentityName,
- a.UserHeadPhoto,
- a.UserId,
- });
- var data = await query.ToListAsync();
- //审核记录
- var records = data.GroupBy(i => i.ExecutionPointerId).Select(u => new
- {
- ExecutionPointerId = u.Key,
- AuditRecords = u.Select(a => new WorkflowAuditRecord()
- {
- UserId = a.UserId,
- AuditTime = a.AuditTime,
- Status = a.Status,
- Remark = a.Remark,
- UserIdentityName = a.UserIdentityName,
- UserHeadPhoto = a.UserHeadPhoto,
- })
- })
- .ToDictionary(a => a.ExecutionPointerId, a => a.AuditRecords);
- return new WorkflowAuditDto() { NeedAudit = data.Any(i => i.UserId == AbpSession.UserId && i.Status == VzDefinition.WorkflowAuditStatus.UnAudited), AuditRecords = records };
- }
- /// <summary>
- /// 审核
- /// </summary>
- /// <param name="input"></param>
- /// <returns></returns>
- public async Task AuditAsync(WorkflowAuditInput input)
- {
- var entity = await _auditorRepository.FirstOrDefaultAsync(u => u.ExecutionPointerId == input.ExecutionPointerId && u.UserId == AbpSession.UserId);
- if (entity == null)
- {
- throw new UserFriendlyException("不需要您审核");
- }
- var user = await _userManager.GetUserByIdAsync(AbpSession.UserId ?? 0);
- entity.Status = input.Pass ? VzDefinition.WorkflowAuditStatus.Pass : VzDefinition.WorkflowAuditStatus.UnApprove;
- entity.Remark = input.Remark;
- entity.AuditTime = DateTime.Now;
- entity.UserIdentityName = user.FullName;
- entity.UserHeadPhoto = user.AvatarPath;
- entity.TenantId = AbpSession.TenantId;
- await CurrentUnitOfWork.SaveChangesAsync();
- //终止流程
- if (!input.Pass)
- {
- await _workflowManager.TerminateWorkflow(entity.WorkflowId);
- return;
- }
- //if (!_auditorRepository.GetAll().Any(u => u.ExecutionPointerId == input.ExecutionPointerId && u.Status == VzDefinition.WorkflowAuditStatus.UnAudited))
- //{
- // var pointer = await _workflowManager.PersistenceProvider.GetPersistedExecutionPointer(input.ExecutionPointerId);
- // await _workflowManager.PublishEventAsync(pointer.EventName, pointer.EventKey, null);
- //}
- var pointer = await _workflowManager.PersistenceProvider.GetPersistedExecutionPointer(input.ExecutionPointerId);
- await _workflowManager.PublishEventAsync(pointer.EventName, pointer.EventKey, null);
- }
- }
|