|
@@ -1,110 +0,0 @@
|
|
|
-using DotNetCore.CAP;
|
|
|
-using Hotline.Configurations;
|
|
|
-using Hotline.FlowEngine.Notifications;
|
|
|
-using Hotline.FlowEngine.WorkflowModules;
|
|
|
-using Hotline.Orders;
|
|
|
-using Hotline.Share.Dtos.Order;
|
|
|
-using Hotline.Share.Enums.Order;
|
|
|
-using Hotline.Share.Mq;
|
|
|
-using MapsterMapper;
|
|
|
-using MediatR;
|
|
|
-using Microsoft.Extensions.Options;
|
|
|
-using XF.Domain.Authentications;
|
|
|
-using XF.Domain.Repository;
|
|
|
-
|
|
|
-namespace Hotline.Application.Orders.OrderScreenHandler;
|
|
|
-public class OrderScreenNextWorkflowHandler : INotificationHandler<NextStepNotify>
|
|
|
-{
|
|
|
- private readonly ICapPublisher _capPublisher;
|
|
|
- private readonly IMapper _mapper;
|
|
|
- private readonly IOrderScreenRepository _orderScreenRepository;
|
|
|
- private readonly ISessionContext _sessionContext;
|
|
|
- private readonly IRepository<OrderScreenDetail> _orderScreenDetailRepository;
|
|
|
- private readonly IOptionsSnapshot<AppConfiguration> _appOptions;
|
|
|
-
|
|
|
- public OrderScreenNextWorkflowHandler(
|
|
|
- ICapPublisher capPublisher,
|
|
|
- IMapper mapper,
|
|
|
- IOrderScreenRepository orderScreenRepository,
|
|
|
- ISessionContext sessionContext,
|
|
|
- IOptionsSnapshot<AppConfiguration> appOptions,
|
|
|
- IRepository<OrderScreenDetail> orderScreenDetailRepository)
|
|
|
- {
|
|
|
- _capPublisher = capPublisher;
|
|
|
- _mapper = mapper;
|
|
|
- _orderScreenRepository = orderScreenRepository;
|
|
|
- _sessionContext = sessionContext;
|
|
|
- _orderScreenDetailRepository = orderScreenDetailRepository;
|
|
|
- _appOptions = appOptions;
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>Handles a notification</summary>
|
|
|
- /// <param name="notification">The notification</param>
|
|
|
- /// <param name="cancellationToken">Cancellation token</param>
|
|
|
- public async Task Handle(NextStepNotify notification, CancellationToken cancellationToken)
|
|
|
- {
|
|
|
- if (notification.Workflow.ModuleCode == WorkflowModuleConsts.OrderScreen)
|
|
|
- {
|
|
|
- var workflow = notification.Workflow;
|
|
|
- var nextTag = string.IsNullOrEmpty(notification.NextStepDefine.Tag)
|
|
|
- ? null
|
|
|
- : System.Text.Json.JsonSerializer.Deserialize<DefinitionTag>(notification.NextStepDefine.Tag);
|
|
|
- var screen = await _orderScreenRepository.Queryable().Includes(x => x.Order)
|
|
|
- .Where(x => x.Id == workflow.ExternalId).FirstAsync(cancellationToken);
|
|
|
- if (screen != null)
|
|
|
- {
|
|
|
- screen.Status = EScreenStatus.Approval;
|
|
|
- screen.Flowed(workflow.FlowedUserIds, workflow.FlowedOrgIds, workflow.HandlerUsers, workflow.HandlerOrgs);
|
|
|
- //如果下个节点是省审批,则修改为省甄别
|
|
|
- if (nextTag is not null && nextTag.Type == TagDefaults.TagType.Org && nextTag.Value == TagDefaults.TagValue.Province)
|
|
|
- screen.IsProScreen = true;
|
|
|
- await _orderScreenRepository.UpdateAsync(screen, cancellationToken);
|
|
|
- }
|
|
|
-
|
|
|
- if (nextTag is not null && nextTag.Type == TagDefaults.TagType.Org)
|
|
|
- {
|
|
|
- switch (nextTag.Value)
|
|
|
- {
|
|
|
- case TagDefaults.TagValue.Province:
|
|
|
- if (screen != null)
|
|
|
- {
|
|
|
- var screenDto = _mapper.Map<OrderScreenListDto>(screen);
|
|
|
- if (screen.Order != null && screen.Order.Source == ESource.ProvinceStraight)
|
|
|
- {
|
|
|
- var screenOrderDto = _mapper.Map<OrderDto>(screen.Order);
|
|
|
- //省件甄别--以省审批前一个节点整理的甄别意见为准推送省上 宜宾
|
|
|
- if (_appOptions.Value.IsYiBin)
|
|
|
- {
|
|
|
- screenDto.Content = notification.Dto.Opinion;
|
|
|
- screenDto.Files = new List<Share.Dtos.File.FileDto>();
|
|
|
- }
|
|
|
- if (_appOptions.Value.IsLuZhou)
|
|
|
- {
|
|
|
- screenDto.Content = notification.Dto.Opinion;
|
|
|
- }
|
|
|
- if (_appOptions.Value.IsLuZhou)
|
|
|
- {
|
|
|
- screenDto.Content = notification.Dto.Opinion;
|
|
|
- }
|
|
|
- //推省上
|
|
|
- _capPublisher.Publish(EventNames.HotlineOrderScreenApply, new PublishScreenDto()
|
|
|
- {
|
|
|
- Order = screenOrderDto,
|
|
|
- Screen = screenDto,
|
|
|
- ClientGuid = ""
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- OrderScreenDetail detail = new OrderScreenDetail
|
|
|
- {
|
|
|
- ScreenId = screen.Id
|
|
|
- };
|
|
|
- detail.Audit(_sessionContext.UserId, _sessionContext.UserName, _sessionContext.OrgId, _sessionContext.OrgName, 1);
|
|
|
- await _orderScreenDetailRepository.AddAsync(detail, cancellationToken);
|
|
|
- }
|
|
|
- }
|
|
|
-}
|