|
@@ -1319,7 +1319,11 @@ public class OrderController : BaseController
|
|
|
.FirstAsync(x => x.Id == id);
|
|
|
var rspModel = _mapper.Map<OrderDelayDto>(model);
|
|
|
rspModel.IsCanHandle = model.CanHandle(_sessionContext.RequiredUserId, _sessionContext.RequiredOrgId);
|
|
|
- rspModel.Handle = await _workflowDomainService.CheckCurrentIsStartStepAsync(rspModel.WorkflowId, _sessionContext.RequiredUserId, _sessionContext.RequiredOrgId, HttpContext.RequestAborted);
|
|
|
+ rspModel.Handle = false;
|
|
|
+ if (!string.IsNullOrEmpty(rspModel.WorkflowId))
|
|
|
+ {
|
|
|
+ rspModel.Handle = await _workflowDomainService.CheckCurrentIsStartStepAsync(rspModel.WorkflowId, _sessionContext.RequiredUserId, _sessionContext.RequiredOrgId, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
if (rspModel.FileJson != null && rspModel.FileJson.Any())
|
|
|
{
|
|
|
var ids = rspModel.FileJson.Select(x => x.Id).ToList();
|
|
@@ -1595,7 +1599,11 @@ public class OrderController : BaseController
|
|
|
.FirstAsync(x => x.Id == id);
|
|
|
var rspModel = _mapper.Map<OrderScreenListDto>(model);
|
|
|
rspModel.IsCanHandle = model.CanHandle(_sessionContext.RequiredUserId, _sessionContext.RequiredOrgId);
|
|
|
- rspModel.Handle = await _workflowDomainService.CheckCurrentIsStartStepAsync(rspModel.WorkflowId, _sessionContext.RequiredUserId, _sessionContext.RequiredOrgId, HttpContext.RequestAborted);
|
|
|
+ rspModel.Handle = false;
|
|
|
+ if (!string.IsNullOrEmpty(rspModel.WorkflowId))
|
|
|
+ {
|
|
|
+ rspModel.Handle = await _workflowDomainService.CheckCurrentIsStartStepAsync(rspModel.WorkflowId, _sessionContext.RequiredUserId, _sessionContext.RequiredOrgId, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
if (rspModel.FileJson != null && rspModel.FileJson.Any())
|
|
|
{
|
|
|
var ids = rspModel.FileJson.Select(x => x.Id).ToList();
|
|
@@ -2046,7 +2054,7 @@ public class OrderController : BaseController
|
|
|
.WhereIF(dto.Channels.Any(), d => dto.Channels.Contains(d.SourceChannelCode)) //来源渠道
|
|
|
.WhereIF(dto.HotspotIds.Any(), d => dto.HotspotIds.Contains(d.HotspotId)) //热点类型
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.TransferPhone), d => d.TransferPhone.Contains(dto.TransferPhone!)) //转接号码
|
|
|
- //.WhereIF(dto.OrgCodes.Any(), d => d.Workflow.Assigns.Any(s => dto.OrgCodes.Contains(s.OrgCode)))
|
|
|
+ //.WhereIF(dto.OrgCodes.Any(), d => d.Workflow.Assigns.Any(s => dto.OrgCodes.Contains(s.OrgCode)))
|
|
|
.WhereIF(dto.OrgCodes.Any(), d => dto.OrgCodes.Contains(d.ActualHandleOrgCode)) //接办部门
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.NameOrNo), d => d.AcceptorName.Contains(dto.NameOrNo!) || d.AcceptorStaffNo.Contains(dto.NameOrNo!)) //受理人/坐席
|
|
|
.WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart) //受理时间开始
|
|
@@ -2070,8 +2078,8 @@ public class OrderController : BaseController
|
|
|
.WhereIF(dto.IdentityType != null, d => d.IdentityType == dto.IdentityType) //来电主体
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.FromName), d => d.FromName.Contains(dto.FromName)) //来电人姓名
|
|
|
.WhereIF(dto.AreaCodes.Any(), d => dto.AreaCodes.Contains(d.AreaCode)) //区域
|
|
|
- .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == true,x=>x.IsProvince == true)
|
|
|
- .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == false,x=>x.IsProvince == false)
|
|
|
+ .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == true, x => x.IsProvince == true)
|
|
|
+ .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == false, x => x.IsProvince == false)
|
|
|
.OrderByDescending(d => d.CreationTime)
|
|
|
.ToPagedListAsync(dto, HttpContext.RequestAborted);
|
|
|
|
|
@@ -2130,13 +2138,15 @@ public class OrderController : BaseController
|
|
|
return new();
|
|
|
|
|
|
string? countersignId = null;
|
|
|
+ var canPrevious = false;
|
|
|
if (!string.IsNullOrEmpty(order.WorkflowId))
|
|
|
{
|
|
|
- var (workflow, unCompleteCountersignId) = await _workflowDomainService.GetWorkflowHandlePermissionAsync(
|
|
|
+ var result = await _workflowDomainService.GetWorkflowHandlePermissionAsync(
|
|
|
order.WorkflowId, _sessionContext.RequiredUserId, _sessionContext.RequiredOrgId,
|
|
|
cancellationToken: HttpContext.RequestAborted);
|
|
|
- order.Workflow = workflow;
|
|
|
- countersignId = unCompleteCountersignId;
|
|
|
+ order.Workflow = result.workflow;
|
|
|
+ countersignId = result.countersignId;
|
|
|
+ canPrevious = result.canPrevious;
|
|
|
|
|
|
await _mediator.Publish(new GetOrderDetailNotify(order.Workflow,
|
|
|
_sessionContext.RequiredUserId, _sessionContext.UserName,
|
|
@@ -2150,6 +2160,7 @@ public class OrderController : BaseController
|
|
|
dto.IsCanDelay = !order.OrderDelays.Any(x => x.DelayState == EDelayState.Examining);
|
|
|
var delayModel = order.OrderDelays.Where(x => x.DelayState == EDelayState.Pass).MaxBy(x => x.CreationTime);
|
|
|
dto.DelayString = delayModel != null ? delayModel?.DelayNum + "个" + delayModel?.DelayUnit.GetDescription() : "";
|
|
|
+ dto.CanPrevious = canPrevious;
|
|
|
|
|
|
if (dto.FileJson != null && dto.FileJson.Any())
|
|
|
{
|
|
@@ -2161,10 +2172,6 @@ public class OrderController : BaseController
|
|
|
var call = await _trCallRecordRepository.Queryable().Where(x => x.CallAccept == order.CallId).FirstAsync();
|
|
|
if (call != null) dto.RecordingFileUrl = call.RecordingFileUrl;
|
|
|
|
|
|
- if (order.Workflow != null)
|
|
|
- {
|
|
|
- dto.CanPrevious = !order.Workflow.IsInCountersign;
|
|
|
- }
|
|
|
var repeatablesMap = await _repeatableEventDetailRepository.Queryable()
|
|
|
.Includes(x => x.Order)
|
|
|
.Where(x => x.OrderId == id).Distinct().ToListAsync();
|
|
@@ -2392,7 +2399,6 @@ public class OrderController : BaseController
|
|
|
[HttpPost("handle")]
|
|
|
public async Task Handle([FromBody] NextWorkflowDto dto)
|
|
|
{
|
|
|
- //todo 需求待确认
|
|
|
var order = await _orderRepository.Queryable()
|
|
|
.FirstAsync(d => d.WorkflowId == dto.WorkflowId, HttpContext.RequestAborted);
|
|
|
//if (await _orderDelayRepository.AnyAsync(x => x.OrderId == order.Id && x.DelayState == EDelayState.Examining, HttpContext.RequestAborted))
|
|
@@ -2404,6 +2410,26 @@ public class OrderController : BaseController
|
|
|
throw UserFriendlyException.SameMessage("该工单存在正在审核中的退回,不能办理");
|
|
|
}
|
|
|
|
|
|
+ if (dto.FlowDirection.HasValue
|
|
|
+ && dto.External.TimeLimit.HasValue
|
|
|
+ && dto.External.TimeLimitUnit.HasValue)
|
|
|
+ {
|
|
|
+ var expiredTimeConfig = _timeLimitDomainService.CalcEndTime(DateTime.Now,
|
|
|
+ new TimeConfig(dto.External.TimeLimit.Value, dto.External.TimeLimitUnit.Value), order.AcceptTypeCode);
|
|
|
+ if (dto.FlowDirection is EFlowDirection.CenterToOrg)
|
|
|
+ {
|
|
|
+ order.CenterToOrg(expiredTimeConfig.TimeText, expiredTimeConfig.Count,
|
|
|
+ expiredTimeConfig.TimeType, expiredTimeConfig.ExpiredTime, expiredTimeConfig.NearlyExpiredTime);
|
|
|
+ //写入质检
|
|
|
+ await _qualityApplication.AddQualityAsync(EQualitySource.Send, order.Id, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ else if(dto.FlowDirection is EFlowDirection.OrgToCenter)
|
|
|
+ {
|
|
|
+ order.OrgToCenter(expiredTimeConfig.TimeText, expiredTimeConfig.Count,
|
|
|
+ expiredTimeConfig.TimeType, expiredTimeConfig.ExpiredTime, expiredTimeConfig.NearlyExpiredTime);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
await _workflowApplication.NextAsync(dto, HttpContext.RequestAborted);
|
|
|
}
|
|
|
|
|
@@ -2572,7 +2598,7 @@ public class OrderController : BaseController
|
|
|
.WhereIF(dto.IsCounterSign.HasValue && dto.IsCounterSign == true, d => d.CounterSignType.HasValue)
|
|
|
.WhereIF(dto.IsCounterSign.HasValue && dto.IsCounterSign == false, d => !d.CounterSignType.HasValue)
|
|
|
.Where(x => x.Source < ESource.MLSQ || x.Source > ESource.WZSC)
|
|
|
- .Where(x=>x.Status!= EOrderStatus.BackToProvince)
|
|
|
+ .Where(x => x.Status != EOrderStatus.BackToProvince)
|
|
|
.OrderByDescending(d => d.StartTime)
|
|
|
.ToPagedListAsync(dto, HttpContext.RequestAborted);
|
|
|
|
|
@@ -2619,7 +2645,7 @@ public class OrderController : BaseController
|
|
|
{
|
|
|
var oneSendBack = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.OneOrgSendBack)?.SettingValue[0]);
|
|
|
var twoSendBack = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.TwoOrgSendBack)?.SettingValue[0]);
|
|
|
- if (oneSendBack || twoSendBack)
|
|
|
+ if (oneSendBack || twoSendBack)
|
|
|
{
|
|
|
var workflow =
|
|
|
await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, withSteps: true, cancellationToken: HttpContext.RequestAborted);
|
|
@@ -2633,19 +2659,19 @@ public class OrderController : BaseController
|
|
|
if (prevStep == null)
|
|
|
throw UserFriendlyException.SameMessage("未查询到前一节点");
|
|
|
|
|
|
- var sendBack = await _orderSendBackAuditRepository.Queryable().Where(x => x.OrderId == workflow.ExternalId && x.State == ESendBackAuditState.Apply ).AnyAsync();
|
|
|
+ var sendBack = await _orderSendBackAuditRepository.Queryable().Where(x => x.OrderId == workflow.ExternalId && x.State == ESendBackAuditState.Apply).AnyAsync();
|
|
|
if (sendBack)
|
|
|
- throw UserFriendlyException.SameMessage("当前工单已经生成退回记录");
|
|
|
+ throw UserFriendlyException.SameMessage("当前工单已经生成退回记录");
|
|
|
|
|
|
var order = await _orderRepository
|
|
|
- .Queryable()
|
|
|
- .Includes(d => d.Workflow)
|
|
|
- .FirstAsync(d => d.Id == workflow.ExternalId);
|
|
|
+ .Queryable()
|
|
|
+ .Includes(d => d.Workflow)
|
|
|
+ .FirstAsync(d => d.Id == workflow.ExternalId);
|
|
|
if (order.Workflow.IsInCountersign) throw UserFriendlyException.SameMessage("工单会签中,无法进行退回!");
|
|
|
|
|
|
- var applyOrg = _organizeRepository.Get(currentStep.AcceptorOrgId);
|
|
|
+ var applyOrg = _organizeRepository.Get(currentStep.AcceptorOrgId);
|
|
|
var sendBackOrg = _organizeRepository.Get(prevStep.AcceptorOrgId);
|
|
|
- if ((twoSendBack && 2.Equals(applyOrg.Level) && 1.Equals(sendBackOrg.Level) && !sendBackOrg.IsCenter)
|
|
|
+ if ((twoSendBack && 2.Equals(applyOrg.Level) && 1.Equals(sendBackOrg.Level) && !sendBackOrg.IsCenter)
|
|
|
|| (oneSendBack && 1.Equals(applyOrg.Level) && sendBackOrg.IsCenter && !applyOrg.IsCenter))
|
|
|
{
|
|
|
var audit = new OrderSendBackAudit
|
|
@@ -2728,7 +2754,7 @@ public class OrderController : BaseController
|
|
|
.WhereIF(dto.AuditState == 1, d => d.State == ESendBackAuditState.Apply)
|
|
|
.WhereIF(dto.AuditState == 2 && !dto.State.HasValue, d => d.State > ESendBackAuditState.Apply)
|
|
|
.WhereIF(dto.AuditState == 2 && dto.State.HasValue, d => d.State == dto.State)
|
|
|
- .Where(x=>x.SendBackOrgId == _sessionContext.OrgId)
|
|
|
+ .Where(x => x.SendBackOrgId == _sessionContext.OrgId)
|
|
|
.OrderByDescending(x => x.CreationTime)
|
|
|
.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
|
|
|
@@ -2781,7 +2807,7 @@ public class OrderController : BaseController
|
|
|
/// <param name="dto"></param>
|
|
|
/// <returns></returns>
|
|
|
[HttpPost("send_back/batch")]
|
|
|
- public async Task<object> BatchApplyUrge([FromBody]BatchOrderSendBackAddDto dto)
|
|
|
+ public async Task<object> BatchApplyUrge([FromBody] BatchOrderSendBackAddDto dto)
|
|
|
{
|
|
|
int count = dto.OrderIds.Count;
|
|
|
int successCount = 0;
|
|
@@ -2806,10 +2832,11 @@ public class OrderController : BaseController
|
|
|
errorCount++;
|
|
|
continue;
|
|
|
}
|
|
|
- var model = new OrderSendBack() {
|
|
|
- Content = dto.Content,
|
|
|
- OrderId = item,
|
|
|
- Destination = ESendBackDestination.Province
|
|
|
+ var model = new OrderSendBack()
|
|
|
+ {
|
|
|
+ Content = dto.Content,
|
|
|
+ OrderId = item,
|
|
|
+ Destination = ESendBackDestination.Province
|
|
|
};
|
|
|
await _orderSendBackRepository.AddAsync(model, HttpContext.RequestAborted);
|
|
|
if (!string.IsNullOrEmpty(model.Id))
|
|
@@ -2892,7 +2919,7 @@ public class OrderController : BaseController
|
|
|
var sendBackDto = _mapper.Map<OrderSendBackDto>(sendBack);
|
|
|
var OrderDto = _mapper.Map<OrderDto>(order);
|
|
|
//await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderFlowPrevious,
|
|
|
- // new PublishOrderSendBackDto() { Order = OrderDto, SendBack = sendBackDto, ClientGuid = "" });
|
|
|
+ // new PublishOrderSendBackDto() { Order = OrderDto, SendBack = sendBackDto, ClientGuid = "" });
|
|
|
//try
|
|
|
//{
|
|
|
// await _provinceService.GetCaseBackApply(
|