|
@@ -41,6 +41,7 @@ using Hotline.Share.Dtos.Push;
|
|
|
using Hotline.Share.Enums.Push;
|
|
|
using XF.Domain.Cache;
|
|
|
using Hotline.Api.Filter;
|
|
|
+using XF.Domain.Entities;
|
|
|
|
|
|
namespace Hotline.Api.Controllers;
|
|
|
|
|
@@ -94,9 +95,9 @@ public class OrderController : BaseController
|
|
|
private readonly IPushDomainService _pushDomainService;
|
|
|
private readonly ILogger<OrderController> _logger;
|
|
|
private readonly ITypedCache<EnterpriseVo> _cacheResponse;
|
|
|
+ private readonly IRepository<OrderSendBackAudit> _orderSendBackAuditRepository;
|
|
|
|
|
|
-
|
|
|
- public OrderController(
|
|
|
+ public OrderController(
|
|
|
IOrderDomainService orderDomainService,
|
|
|
IOrderRepository orderRepository,
|
|
|
IWorkflowApplication workflowApplication,
|
|
@@ -141,8 +142,9 @@ public class OrderController : BaseController
|
|
|
IEnterpriseService enterpriseService,
|
|
|
IPushDomainService pushDomainService,
|
|
|
ILogger<OrderController> logger,
|
|
|
- ITypedCache<EnterpriseVo> cacheResponse
|
|
|
- )
|
|
|
+ ITypedCache<EnterpriseVo> cacheResponse,
|
|
|
+ IRepository<OrderSendBackAudit> orderSendBackAuditRepository
|
|
|
+ )
|
|
|
{
|
|
|
_orderDomainService = orderDomainService;
|
|
|
_orderRepository = orderRepository;
|
|
@@ -189,7 +191,9 @@ public class OrderController : BaseController
|
|
|
_enterpriseService = enterpriseService;
|
|
|
_pushDomainService = pushDomainService;
|
|
|
_cacheResponse = cacheResponse;
|
|
|
- }
|
|
|
+ _orderSendBackAuditRepository = orderSendBackAuditRepository;
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
#region 工单发布
|
|
|
|
|
@@ -2277,15 +2281,14 @@ public class OrderController : BaseController
|
|
|
var setting = _systemSettingCacheManager.GetSetting(SettingConstants.RepeatableEventNum);
|
|
|
return count >= int.Parse(setting?.SettingValue[0] ?? "0");
|
|
|
}
|
|
|
+ #endregion
|
|
|
|
|
|
- #endregion
|
|
|
-
|
|
|
- #region 工单待办
|
|
|
+ #region 工单待办
|
|
|
|
|
|
- /// <summary>
|
|
|
- /// 查询待办工单
|
|
|
- /// </summary>
|
|
|
- [HttpGet("waited")]
|
|
|
+ /// <summary>
|
|
|
+ /// 查询待办工单
|
|
|
+ /// </summary>
|
|
|
+ [HttpGet("waited")]
|
|
|
public async Task<PagedDto<OrderDto>> QueryWaited([FromQuery] QueryOrderWaitedDto dto)
|
|
|
{
|
|
|
EWorkflowStepStatus[] handleStatuses = Array.Empty<EWorkflowStepStatus>();
|
|
@@ -2336,16 +2339,114 @@ public class OrderController : BaseController
|
|
|
return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
|
|
|
}
|
|
|
|
|
|
- #endregion
|
|
|
+ #endregion
|
|
|
+ #region 业务工单退回
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 工单退回退回(返回前一节点)
|
|
|
+ /// </summary>
|
|
|
+ [HttpPost("order_previous")]
|
|
|
+ public async Task Previous([FromBody] PreviousWorkflowDto dto)
|
|
|
+ {
|
|
|
+ var oneSendBack = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.OneOrgSendBack)?.SettingValue[0]);
|
|
|
+ var twoSendBack = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.TwoOrgSendBack)?.SettingValue[0]);
|
|
|
+ if (oneSendBack || twoSendBack)
|
|
|
+ {
|
|
|
+ var workflow =
|
|
|
+ await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, withSteps: true, cancellationToken: HttpContext.RequestAborted);
|
|
|
+ var currentStep = _workflowDomainService.GetUnHandleStep(workflow.Steps, _sessionContext.RequiredOrgId,
|
|
|
+ _sessionContext.RequiredUserId);
|
|
|
|
|
|
- #region 工单退回
|
|
|
+ if (currentStep.StepType is EStepType.Start)
|
|
|
+ throw UserFriendlyException.SameMessage("当前流程已退回到开始节点");
|
|
|
+
|
|
|
+ var prevStep = workflow.Steps.FirstOrDefault(d => d.Id == currentStep.PrevStepId);
|
|
|
+ if (prevStep == null)
|
|
|
+ throw UserFriendlyException.SameMessage("未查询到前一节点");
|
|
|
+
|
|
|
+ var applyOrg = _organizeRepository.Get(currentStep.AcceptorOrgId);
|
|
|
+ var sendBackOrg = _organizeRepository.Get(prevStep.AcceptorOrgId);
|
|
|
+ if ((twoSendBack && 2.Equals(applyOrg.Level) && 1.Equals(sendBackOrg.Level)) || (oneSendBack && 1.Equals(applyOrg.Level) && sendBackOrg.IsCenter))
|
|
|
+ {
|
|
|
+ var audit = new OrderSendBackAudit
|
|
|
+ {
|
|
|
+ OrderId = workflow.ExternalId,
|
|
|
+ State = ESendBackAuditState.Apply,
|
|
|
+ Content = dto.Opinion,
|
|
|
+ SendBackData = dto,
|
|
|
+ ApplyOrgId = applyOrg.Id,
|
|
|
+ ApplyOrgName = applyOrg.Name,
|
|
|
+ SendBackOrgId = sendBackOrg.Id,
|
|
|
+ SendBackOrgName = sendBackOrg.Name
|
|
|
+ };
|
|
|
+ await _orderSendBackAuditRepository.AddAsync(audit, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ await _workflowApplication.PreviousAsync(dto, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 工单退回列表
|
|
|
+ /// 工单业务退回审批
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [Permission(EPermission.OrderPreviousAudit)]
|
|
|
+ [HttpPost("order_previous_audit")]
|
|
|
+ public async Task Audit([FromBody] AuditSendBackDto dto)
|
|
|
+ {
|
|
|
+ //验证是否存在退回
|
|
|
+ var sendBack = await _orderSendBackAuditRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
|
|
|
+ if (sendBack is null)
|
|
|
+ throw UserFriendlyException.SameMessage("无效退回");
|
|
|
+ if (sendBack.State != ESendBackAuditState.Apply)
|
|
|
+ throw UserFriendlyException.SameMessage("退回已审批,请勿重复审批");
|
|
|
+
|
|
|
+ _mapper.Map(dto, sendBack);
|
|
|
+ sendBack.AuditId = _sessionContext.UserId;
|
|
|
+ sendBack.AuditUser = _sessionContext.UserName;
|
|
|
+ sendBack.AuditTime = DateTime.Now;
|
|
|
+ await _orderSendBackAuditRepository.UpdateAsync(sendBack, HttpContext.RequestAborted);
|
|
|
+ //执行退回
|
|
|
+ if (sendBack.State == ESendBackAuditState.End)
|
|
|
+ {
|
|
|
+ await _workflowApplication.PreviousAsync(sendBack.SendBackData, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 工单业务退回审批列表
|
|
|
/// </summary>
|
|
|
/// <param name="dto"></param>
|
|
|
/// <returns></returns>
|
|
|
- [Permission(EPermission.SendBackOrderList)]
|
|
|
+ [Permission(EPermission.OrderPreviousList)]
|
|
|
+ [HttpPost("order_previous_list")]
|
|
|
+ public async Task<PagedDto<SendBackDto>> AuditList([FromQuery] SendBackListDto dto)
|
|
|
+ {
|
|
|
+ var (total, items) = await _orderSendBackAuditRepository.Queryable()
|
|
|
+ .Includes(x => x.Order)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Keyword),
|
|
|
+ d => d.Order.Title.Contains(dto.Keyword!) || d.Order.No.Contains(dto.Keyword!))
|
|
|
+ .WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart)
|
|
|
+ .WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd)
|
|
|
+ .WhereIF(dto.State.HasValue, d => d.State == dto.State)
|
|
|
+ .OrderByDescending(x => x.CreationTime)
|
|
|
+ .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ return new PagedDto<SendBackDto>(total, _mapper.Map<IReadOnlyList<SendBackDto>>(items));
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region 省工单退回
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 工单退回列表
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [Permission(EPermission.SendBackOrderList)]
|
|
|
[HttpGet("send_back")]
|
|
|
public async Task<PagedDto<OrderSendBackDto>> UrgeList([FromQuery] OrderSendBackListDto dto)
|
|
|
{
|