|
@@ -1,8 +1,4 @@
|
|
-using DocumentFormat.OpenXml.Drawing.Diagrams;
|
|
|
|
-using DocumentFormat.OpenXml.Office.CustomUI;
|
|
|
|
-using DocumentFormat.OpenXml.Office2010.CustomUI;
|
|
|
|
-using DocumentFormat.OpenXml.Spreadsheet;
|
|
|
|
-using DotNetCore.CAP;
|
|
|
|
|
|
+using DotNetCore.CAP;
|
|
using FluentValidation;
|
|
using FluentValidation;
|
|
using Hotline.Application.FlowEngine;
|
|
using Hotline.Application.FlowEngine;
|
|
using Hotline.Application.OrderApp.OrderVisitApp;
|
|
using Hotline.Application.OrderApp.OrderVisitApp;
|
|
@@ -29,6 +25,7 @@ using Hotline.Settings;
|
|
using Hotline.Settings.Hotspots;
|
|
using Hotline.Settings.Hotspots;
|
|
using Hotline.Settings.TimeLimitDomain;
|
|
using Hotline.Settings.TimeLimitDomain;
|
|
using Hotline.Share.Dtos;
|
|
using Hotline.Share.Dtos;
|
|
|
|
+using Hotline.Share.Dtos.Article;
|
|
using Hotline.Share.Dtos.DataSharing.PusherHotlineDto;
|
|
using Hotline.Share.Dtos.DataSharing.PusherHotlineDto;
|
|
using Hotline.Share.Dtos.File;
|
|
using Hotline.Share.Dtos.File;
|
|
using Hotline.Share.Dtos.FlowEngine;
|
|
using Hotline.Share.Dtos.FlowEngine;
|
|
@@ -37,7 +34,7 @@ using Hotline.Share.Dtos.Order;
|
|
using Hotline.Share.Dtos.Order.Publish;
|
|
using Hotline.Share.Dtos.Order.Publish;
|
|
using Hotline.Share.Dtos.Push;
|
|
using Hotline.Share.Dtos.Push;
|
|
using Hotline.Share.Dtos.Settings;
|
|
using Hotline.Share.Dtos.Settings;
|
|
-using Hotline.Share.Dtos.Users;
|
|
|
|
|
|
+using Hotline.Share.Enums.Article;
|
|
using Hotline.Share.Enums.FlowEngine;
|
|
using Hotline.Share.Enums.FlowEngine;
|
|
using Hotline.Share.Enums.Order;
|
|
using Hotline.Share.Enums.Order;
|
|
using Hotline.Share.Enums.Push;
|
|
using Hotline.Share.Enums.Push;
|
|
@@ -46,6 +43,7 @@ using Hotline.Share.Enums.Settings;
|
|
using Hotline.Share.Mq;
|
|
using Hotline.Share.Mq;
|
|
using Hotline.Share.Requests;
|
|
using Hotline.Share.Requests;
|
|
using Hotline.Share.Tools;
|
|
using Hotline.Share.Tools;
|
|
|
|
+using Hotline.Snapshot;
|
|
using Hotline.Snapshot.IRepository;
|
|
using Hotline.Snapshot.IRepository;
|
|
using Hotline.Statistics;
|
|
using Hotline.Statistics;
|
|
using Hotline.Tools;
|
|
using Hotline.Tools;
|
|
@@ -56,15 +54,14 @@ using MapsterMapper;
|
|
using MediatR;
|
|
using MediatR;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.Extensions.Options;
|
|
using Microsoft.Extensions.Options;
|
|
-using NPOI.SS.Formula.Functions;
|
|
|
|
using PanGu;
|
|
using PanGu;
|
|
using SqlSugar;
|
|
using SqlSugar;
|
|
using System.Data;
|
|
using System.Data;
|
|
using System.Dynamic;
|
|
using System.Dynamic;
|
|
-using System.Threading;
|
|
|
|
using XF.Domain.Authentications;
|
|
using XF.Domain.Authentications;
|
|
using XF.Domain.Dependency;
|
|
using XF.Domain.Dependency;
|
|
using XF.Domain.Exceptions;
|
|
using XF.Domain.Exceptions;
|
|
|
|
+using XF.Domain.Locks;
|
|
using XF.Domain.Repository;
|
|
using XF.Domain.Repository;
|
|
using WordInfo = PanGu.WordInfo;
|
|
using WordInfo = PanGu.WordInfo;
|
|
|
|
|
|
@@ -72,6 +69,7 @@ namespace Hotline.Application.OrderApp;
|
|
|
|
|
|
public class OrderApplication : IOrderApplication, IScopeDependency
|
|
public class OrderApplication : IOrderApplication, IScopeDependency
|
|
{
|
|
{
|
|
|
|
+ #region 注入
|
|
private readonly IOrderSnapshotRepository _orderSnapshotRepository;
|
|
private readonly IOrderSnapshotRepository _orderSnapshotRepository;
|
|
private readonly IMediator _mediator;
|
|
private readonly IMediator _mediator;
|
|
private readonly IRepository<TranspondCityRawData> _transpondCityRawDataRepository;
|
|
private readonly IRepository<TranspondCityRawData> _transpondCityRawDataRepository;
|
|
@@ -83,8 +81,6 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
private readonly IWorkflowDomainService _workflowDomainService;
|
|
private readonly IWorkflowDomainService _workflowDomainService;
|
|
private readonly ISessionContext _sessionContext;
|
|
private readonly ISessionContext _sessionContext;
|
|
private readonly IOrderRepository _orderRepository;
|
|
private readonly IOrderRepository _orderRepository;
|
|
-
|
|
|
|
- //private readonly ITimeLimitDomainService _timeLimitDomainService;
|
|
|
|
private readonly IMapper _mapper;
|
|
private readonly IMapper _mapper;
|
|
private readonly ISystemSettingCacheManager _systemSettingCacheManager;
|
|
private readonly ISystemSettingCacheManager _systemSettingCacheManager;
|
|
private readonly IRepository<OrderWord> _orderWrodRepository;
|
|
private readonly IRepository<OrderWord> _orderWrodRepository;
|
|
@@ -127,6 +123,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
private readonly IRepository<OrderVisitDetailCopy> _orderVisitDetailCopyRepository;
|
|
private readonly IRepository<OrderVisitDetailCopy> _orderVisitDetailCopyRepository;
|
|
private readonly IRepository<OrderDelayAutomatic> _orderDelayAutomaticRepository;
|
|
private readonly IRepository<OrderDelayAutomatic> _orderDelayAutomaticRepository;
|
|
private readonly IRepository<Hotline.Orders.ObservationPiece> _observationPieceRepository;
|
|
private readonly IRepository<Hotline.Orders.ObservationPiece> _observationPieceRepository;
|
|
|
|
+ private readonly IDistributedLock _distributedLock;
|
|
|
|
|
|
public OrderApplication(
|
|
public OrderApplication(
|
|
IOrderDomainService orderDomainService,
|
|
IOrderDomainService orderDomainService,
|
|
@@ -182,9 +179,9 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
IRepository<Role> roleRepository,
|
|
IRepository<Role> roleRepository,
|
|
IRepository<OrderVisitDetailCopy> orderVisitDetailCopyRepository,
|
|
IRepository<OrderVisitDetailCopy> orderVisitDetailCopyRepository,
|
|
IRepository<OrderDelayAutomatic> orderDelayAutomaticRepository,
|
|
IRepository<OrderDelayAutomatic> orderDelayAutomaticRepository,
|
|
- IRepository<Hotline.Orders.ObservationPiece> observationPieceRepository
|
|
|
|
-,
|
|
|
|
- IOrderSnapshotRepository orderSnapshotRepository)
|
|
|
|
|
|
+ IRepository<Hotline.Orders.ObservationPiece> observationPieceRepository,
|
|
|
|
+ IOrderSnapshotRepository orderSnapshotRepository,
|
|
|
|
+ IDistributedLock distributedLock)
|
|
{
|
|
{
|
|
_orderDomainService = orderDomainService;
|
|
_orderDomainService = orderDomainService;
|
|
_workflowDomainService = workflowDomainService;
|
|
_workflowDomainService = workflowDomainService;
|
|
@@ -240,7 +237,9 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
_orderDelayAutomaticRepository = orderDelayAutomaticRepository;
|
|
_orderDelayAutomaticRepository = orderDelayAutomaticRepository;
|
|
_observationPieceRepository = observationPieceRepository;
|
|
_observationPieceRepository = observationPieceRepository;
|
|
_orderSnapshotRepository = orderSnapshotRepository;
|
|
_orderSnapshotRepository = orderSnapshotRepository;
|
|
|
|
+ _distributedLock = distributedLock;
|
|
}
|
|
}
|
|
|
|
+ #endregion
|
|
|
|
|
|
/// <summary>
|
|
/// <summary>
|
|
/// 更新工单办理期满时间(延期调用,其他不调用)
|
|
/// 更新工单办理期满时间(延期调用,其他不调用)
|
|
@@ -805,6 +804,13 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
public ISugarQueryable<Order> GetPublishOrderList(QueryOrderPublishDto dto)
|
|
public ISugarQueryable<Order> GetPublishOrderList(QueryOrderPublishDto dto)
|
|
{
|
|
{
|
|
var query = _orderRepository.Queryable().Includes(d => d.OrderTags);
|
|
var query = _orderRepository.Queryable().Includes(d => d.OrderTags);
|
|
|
|
+ if (_systemSettingCacheManager.Snapshot)
|
|
|
|
+ {
|
|
|
|
+ query = query.LeftJoin<OrderSnapshot>((d, snapshot) => d.Id == snapshot.Id)
|
|
|
|
+ .WhereIF(dto.IndustryId.NotNullOrEmpty(), (d, snapshot) => snapshot.IndustryId == dto.IndustryId)
|
|
|
|
+ .WhereIF(dto.IsRectifyDepartment.HasValue, (d, snapshot) => snapshot.IsRectifyDepartment == dto.IsRectifyDepartment)
|
|
|
|
+ .WhereIF(dto.IsDangerDepartment.HasValue, (d, snapshot) => snapshot.IsDangerDepartment == dto.IsDangerDepartment);
|
|
|
|
+ }
|
|
if (_appOptions.Value.IsLuZhou)
|
|
if (_appOptions.Value.IsLuZhou)
|
|
query = query.Includes(d => d.FwCallRecord);
|
|
query = query.Includes(d => d.FwCallRecord);
|
|
//.Includes(d => d.OrderPublish)
|
|
//.Includes(d => d.OrderPublish)
|
|
@@ -1509,7 +1515,9 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
//任务 314 关于修改回访结果后回访人更新的问题
|
|
//任务 314 关于修改回访结果后回访人更新的问题
|
|
if (_appOptions.Value.IsZiGong == true)
|
|
if (_appOptions.Value.IsZiGong == true)
|
|
{
|
|
{
|
|
- if (string.IsNullOrEmpty(visit.EmployeeId))
|
|
|
|
|
|
+ //if (string.IsNullOrEmpty(visit.EmployeeId)||)
|
|
|
|
+ // visit.EmployeeId = _sessionContext.UserId;
|
|
|
|
+ if (dto.IsUpdate == false)
|
|
visit.EmployeeId = _sessionContext.UserId;
|
|
visit.EmployeeId = _sessionContext.UserId;
|
|
}
|
|
}
|
|
else
|
|
else
|
|
@@ -1570,8 +1578,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
}
|
|
}
|
|
|
|
|
|
await _orderVisitRepository.UpdateAsync(visit, cancellationToken);
|
|
await _orderVisitRepository.UpdateAsync(visit, cancellationToken);
|
|
- await _orderVisitedDetailRepository.UpdateRangeAsync(visit.OrderVisitDetails, cancellationToken);
|
|
|
|
await _orderRepository.UpdateAsync(visit.Order, cancellationToken);
|
|
await _orderRepository.UpdateAsync(visit.Order, cancellationToken);
|
|
|
|
+ await _orderVisitedDetailRepository.UpdateRangeAsync(visit.OrderVisitDetails, cancellationToken);
|
|
|
|
|
|
//handle visit trace
|
|
//handle visit trace
|
|
//上面取得当前操作人,需求变动前暂时可以这样写
|
|
//上面取得当前操作人,需求变动前暂时可以这样写
|
|
@@ -1780,7 +1788,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
await _orderSnapshotRepository.Queryable().Where(m => m.Id == item.OrderId)
|
|
await _orderSnapshotRepository.Queryable().Where(m => m.Id == item.OrderId)
|
|
.Select(m => m.IndustryName)
|
|
.Select(m => m.IndustryName)
|
|
.FirstAsync()
|
|
.FirstAsync()
|
|
- .Then(name =>
|
|
|
|
|
|
+ .Then(name =>
|
|
{
|
|
{
|
|
if (name.Trim() == "电气焊作业申报") code = "1012";
|
|
if (name.Trim() == "电气焊作业申报") code = "1012";
|
|
});
|
|
});
|
|
@@ -2121,7 +2129,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
|
|
|
query = query
|
|
query = query
|
|
.Includes(x => x.OrderSupervises.OrderByDescending(d => d.CreationTime).Take(2).ToList())
|
|
.Includes(x => x.OrderSupervises.OrderByDescending(d => d.CreationTime).Take(2).ToList())
|
|
- .Includes(x => x.OrderVisits.Where(q=>q.VisitState == EVisitState.Visited).Take(1).ToList(), d => d.OrderVisitDetails.Where(c => c.VisitTarget == EVisitTarget.Org).Take(1).ToList());
|
|
|
|
|
|
+ .Includes(x => x.OrderVisits.Where(q => q.VisitState == EVisitState.Visited).Take(1).ToList(), d => d.OrderVisitDetails.Where(c => c.VisitTarget == EVisitTarget.Org).Take(1).ToList());
|
|
|
|
|
|
return query;
|
|
return query;
|
|
}
|
|
}
|
|
@@ -5549,6 +5557,10 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
if (files != null && files.Any())
|
|
if (files != null && files.Any())
|
|
order.FileJson = await _fileRepository.AddFileAsync(files, order.Id, "", cancellationToken);
|
|
order.FileJson = await _fileRepository.AddFileAsync(files, order.Id, "", cancellationToken);
|
|
await _orderDomainService.AddAsync(order, cancellationToken: cancellationToken);
|
|
await _orderDomainService.AddAsync(order, cancellationToken: cancellationToken);
|
|
|
|
+
|
|
|
|
+ //不同来源渠道的待受理工单需给坐席进行待受理提醒
|
|
|
|
+ if (_appOptions.Value.IsZiGong)
|
|
|
|
+ await PendingAcceptanceReminder(order.Id, cancellationToken);
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
@@ -5618,143 +5630,223 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
_mapper.Map(dto.OrderExtension, orderExtension);
|
|
_mapper.Map(dto.OrderExtension, orderExtension);
|
|
await _orderDomainService.UpdateExtensionAsync(orderExtension, cancellationToken);
|
|
await _orderDomainService.UpdateExtensionAsync(orderExtension, cancellationToken);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ //不同来源渠道的待受理工单需给坐席进行待受理提醒
|
|
|
|
+ if (_appOptions.Value.IsZiGong)
|
|
|
|
+ await PendingAcceptanceReminder(order.Id, cancellationToken);
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
- _mapper.Map(dto, order);
|
|
|
|
- if (files != null && files.Any())
|
|
|
|
- order.FileJson = await _fileRepository.AddFileAsync(files, order.Id, "", cancellationToken);
|
|
|
|
- else
|
|
|
|
- order.FileJson = new List<Share.Dtos.File.FileJson>();
|
|
|
|
- //order.ReTransactNum++;
|
|
|
|
- if (order.ProvinceReTransactNum.HasValue)
|
|
|
|
- order.ProvinceReTransactNum = order.ProvinceReTransactNum + 1;
|
|
|
|
- else
|
|
|
|
- order.ProvinceReTransactNum = 1;
|
|
|
|
-
|
|
|
|
- if (order.IsSecret == true)
|
|
|
|
- {
|
|
|
|
- order.FocusOnEventsName = "保密";
|
|
|
|
- order.FocusOnEvents = "99";
|
|
|
|
- }
|
|
|
|
- //await _orderRepository.UpdateAsync(order, cancellationToken);
|
|
|
|
-
|
|
|
|
- if (orderExtension is not null)
|
|
|
|
- {
|
|
|
|
- orderExtension.Id = order.Id;
|
|
|
|
- if (dto.OrderExtension != null)
|
|
|
|
- _mapper.Map(dto.OrderExtension, orderExtension);
|
|
|
|
- await _orderDomainService.UpdateExtensionAsync(orderExtension, cancellationToken);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- //计算order 期满时间
|
|
|
|
- ExpiredTimeWithConfig expiredTimeConfig;
|
|
|
|
- if (_appOptions.Value.IsZiGong)
|
|
|
|
- {
|
|
|
|
- expiredTimeConfig = await _expireTime.CalcExpiredTime(DateTime.Now, DateTime.Now, EFlowDirection.CenterToCenter,
|
|
|
|
- order.Adapt<OrderTimeClacInfo>());
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- //期满时间
|
|
|
|
- //expiredTimeConfig = _timeLimitDomainService.CalcExpiredTime(DateTime.Now, EFlowDirection.CenterToOrg, order.AcceptTypeCode);
|
|
|
|
- expiredTimeConfig =
|
|
|
|
- await _expireTime.CalcExpiredTime(DateTime.Now, DateTime.Now, EFlowDirection.CenterToOrg, order.Adapt<OrderTimeClacInfo>());
|
|
|
|
- }
|
|
|
|
|
|
+ //分布式锁执行锁定
|
|
|
|
+ var distributedLockKey = $"provinceordervisit_{order.Id}";
|
|
|
|
+ if (await _distributedLock.AcquireAsync(distributedLockKey, TimeSpan.FromMinutes(3), cancellationToken))
|
|
|
|
+ {
|
|
|
|
+ //锁定成功,执行正常业务
|
|
|
|
+ _mapper.Map(dto, order);
|
|
|
|
+ if (files != null && files.Any())
|
|
|
|
+ order.FileJson = await _fileRepository.AddFileAsync(files, order.Id, "", cancellationToken);
|
|
|
|
+ else
|
|
|
|
+ order.FileJson = new List<Share.Dtos.File.FileJson>();
|
|
|
|
+ //order.ReTransactNum++;
|
|
|
|
+ if (order.ProvinceReTransactNum.HasValue)
|
|
|
|
+ order.ProvinceReTransactNum = order.ProvinceReTransactNum + 1;
|
|
|
|
+ else
|
|
|
|
+ order.ProvinceReTransactNum = 1;
|
|
|
|
|
|
- _mapper.Map(expiredTimeConfig, order);
|
|
|
|
- //await _orderRepository.UpdateAsync(order, cancellationToken);
|
|
|
|
-
|
|
|
|
- //特提(撤回至发起)
|
|
|
|
- if (!string.IsNullOrEmpty(order.WorkflowId))
|
|
|
|
- {
|
|
|
|
- // FlowStepHandler? handler = null;
|
|
|
|
- // if (_appOptions.Value.IsZiGong)
|
|
|
|
- // {
|
|
|
|
- // // 平均派单
|
|
|
|
- // var averageSendOrder = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.AverageSendOrder).SettingValue[0]);
|
|
|
|
- // if (averageSendOrder)
|
|
|
|
- // {
|
|
|
|
- // handler = await _orderDomainService.AverageOrder(cancellationToken);
|
|
|
|
- // }
|
|
|
|
- // }
|
|
|
|
- //
|
|
|
|
- // StepAssignInfo? stepAssignInfo = null;
|
|
|
|
- // if (handler is not null)
|
|
|
|
- // {
|
|
|
|
- // stepAssignInfo = _mapper.Map<StepAssignInfo>(handler);
|
|
|
|
- // stepAssignInfo.FlowAssignType = EFlowAssignType.User;
|
|
|
|
- // }
|
|
|
|
- //
|
|
|
|
- // var reverseFlowStepAssignInfo = stepAssignInfo is null
|
|
|
|
- // ? new ReverseFlowStepAssignInfo(EReverseFlowStepCreationPolicy.OriginStep)
|
|
|
|
- // : new ReverseFlowStepAssignInfo(EReverseFlowStepCreationPolicy.OriginStepUser, stepAssignInfo);
|
|
|
|
- //await _workflowDomainService.RecallToStartStepAsync(order.WorkflowId, "省工单重派", current, order.Status >= EOrderStatus.Filed, cancellationToken);
|
|
|
|
-
|
|
|
|
- var flowAssignType = _appOptions.Value.IsYiBin
|
|
|
|
- ? EFlowAssignType.User
|
|
|
|
- : EFlowAssignType.Role;
|
|
|
|
-
|
|
|
|
- var (isPaiDan, workflow) = await _workflowDomainService.RecallToCenterFirstToSendAsync(order.WorkflowId, "省工单重派",
|
|
|
|
- order.Status >= EOrderStatus.Filed, order.ExpiredTime, EHandleMode.Redo, flowAssignType, cancellationToken);
|
|
|
|
-
|
|
|
|
- order.FileEmpty();
|
|
|
|
-
|
|
|
|
- order.CurrentStepName = workflow.CurrentStepName;
|
|
|
|
- order.CurrentStepCode = workflow.CurrentStepCode;
|
|
|
|
- order.CurrentStepId = workflow.CurrentStepId;
|
|
|
|
- order.CurrentStepCreateTime = workflow.CurrentStepCreateTime;
|
|
|
|
- order.CurrentHandleTime = workflow.CurrentHandleTime;
|
|
|
|
- order.CurrentHandlerId = workflow.CurrentHandlerId;
|
|
|
|
- order.CurrentHandlerName = workflow.CurrentHandlerName;
|
|
|
|
- order.CurrentHandleOrgName = workflow.CurrentHandleOrgName;
|
|
|
|
- order.CurrentHandleOrgId = workflow.CurrentHandleOrgId;
|
|
|
|
- order.CurrentHandleOrgLevel = workflow.CurrentHandleOrgLevel;
|
|
|
|
- order.CurrentHandleOrgAreaCode = workflow.CurrentHandleOrgAreaCode;
|
|
|
|
- order.CurrentHandleOrgAreaName = workflow.CurrentHandleOrgAreaName;
|
|
|
|
-
|
|
|
|
- order.Status = EOrderStatus.WaitForAccept;
|
|
|
|
- if (isPaiDan)
|
|
|
|
|
|
+ if (order.IsSecret == true)
|
|
{
|
|
{
|
|
- order.Status = EOrderStatus.Special;
|
|
|
|
|
|
+ order.FocusOnEventsName = "保密";
|
|
|
|
+ order.FocusOnEvents = "99";
|
|
}
|
|
}
|
|
- //await _orderRepository.Updateable().SetColumns(o => new Order { Status = status }).Where(o => o.Id == order.Id).ExecuteCommandAsync(cancellationToken);
|
|
|
|
|
|
+ //await _orderRepository.UpdateAsync(order, cancellationToken);
|
|
|
|
|
|
- //处理回访和发布信息
|
|
|
|
|
|
+ if (orderExtension is not null)
|
|
|
|
+ {
|
|
|
|
+ orderExtension.Id = order.Id;
|
|
|
|
+ if (dto.OrderExtension != null)
|
|
|
|
+ _mapper.Map(dto.OrderExtension, orderExtension);
|
|
|
|
+ await _orderDomainService.UpdateExtensionAsync(orderExtension, cancellationToken);
|
|
|
|
+ }
|
|
|
|
|
|
- var publish = await _orderPublishRepository.GetAsync(x => x.OrderId == order.Id);
|
|
|
|
- if (publish != null)
|
|
|
|
|
|
+ //计算order 期满时间
|
|
|
|
+ ExpiredTimeWithConfig expiredTimeConfig;
|
|
|
|
+ if (_appOptions.Value.IsZiGong)
|
|
{
|
|
{
|
|
- var publishHistory = _mapper.Map<OrderPublishHistory>(publish);
|
|
|
|
- publishHistory.OrderPublishId = publish.Id;
|
|
|
|
- publishHistory.ArrangeTitleAfter = publish.ArrangeTitle;
|
|
|
|
- publishHistory.ArrangeTitleBefor = publish.ArrangeTitle;
|
|
|
|
- publishHistory.ArrangeContentAfter = publish.ArrangeContent;
|
|
|
|
- publishHistory.ArrangeContentBefor = publish.ArrangeContent;
|
|
|
|
- publishHistory.ArrangeOpinionAfter = publish.ArrangeOpinion;
|
|
|
|
- publishHistory.ArrangeOpinionBefor = publish.ArrangeOpinion;
|
|
|
|
- await _orderPublishHistoryRepository.AddAsync(publishHistory, cancellationToken);
|
|
|
|
- await _orderPublishRepository.RemoveAsync(publish, false, cancellationToken);
|
|
|
|
|
|
+ expiredTimeConfig = await _expireTime.CalcExpiredTime(DateTime.Now, DateTime.Now, EFlowDirection.CenterToCenter,
|
|
|
|
+ order.Adapt<OrderTimeClacInfo>());
|
|
}
|
|
}
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ //期满时间
|
|
|
|
+ //expiredTimeConfig = _timeLimitDomainService.CalcExpiredTime(DateTime.Now, EFlowDirection.CenterToOrg, order.AcceptTypeCode);
|
|
|
|
+ expiredTimeConfig =
|
|
|
|
+ await _expireTime.CalcExpiredTime(DateTime.Now, DateTime.Now, EFlowDirection.CenterToOrg, order.Adapt<OrderTimeClacInfo>());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ _mapper.Map(expiredTimeConfig, order);
|
|
|
|
+ //await _orderRepository.UpdateAsync(order, cancellationToken);
|
|
|
|
|
|
- var visit = await _orderVisitRepository.GetAsync(x => x.OrderId == order.Id && x.VisitState != EVisitState.None);
|
|
|
|
- if (visit != null)
|
|
|
|
|
|
+ //特提(撤回至发起)
|
|
|
|
+ if (!string.IsNullOrEmpty(order.WorkflowId))
|
|
{
|
|
{
|
|
- visit.VisitState = EVisitState.None;
|
|
|
|
- await _orderVisitRepository.UpdateAsync(visit, cancellationToken);
|
|
|
|
|
|
+ // FlowStepHandler? handler = null;
|
|
|
|
+ // if (_appOptions.Value.IsZiGong)
|
|
|
|
+ // {
|
|
|
|
+ // // 平均派单
|
|
|
|
+ // var averageSendOrder = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.AverageSendOrder).SettingValue[0]);
|
|
|
|
+ // if (averageSendOrder)
|
|
|
|
+ // {
|
|
|
|
+ // handler = await _orderDomainService.AverageOrder(cancellationToken);
|
|
|
|
+ // }
|
|
|
|
+ // }
|
|
|
|
+ //
|
|
|
|
+ // StepAssignInfo? stepAssignInfo = null;
|
|
|
|
+ // if (handler is not null)
|
|
|
|
+ // {
|
|
|
|
+ // stepAssignInfo = _mapper.Map<StepAssignInfo>(handler);
|
|
|
|
+ // stepAssignInfo.FlowAssignType = EFlowAssignType.User;
|
|
|
|
+ // }
|
|
|
|
+ //
|
|
|
|
+ // var reverseFlowStepAssignInfo = stepAssignInfo is null
|
|
|
|
+ // ? new ReverseFlowStepAssignInfo(EReverseFlowStepCreationPolicy.OriginStep)
|
|
|
|
+ // : new ReverseFlowStepAssignInfo(EReverseFlowStepCreationPolicy.OriginStepUser, stepAssignInfo);
|
|
|
|
+ //await _workflowDomainService.RecallToStartStepAsync(order.WorkflowId, "省工单重派", current, order.Status >= EOrderStatus.Filed, cancellationToken);
|
|
|
|
+
|
|
|
|
+ var flowAssignType = _appOptions.Value.IsYiBin
|
|
|
|
+ ? EFlowAssignType.User
|
|
|
|
+ : EFlowAssignType.Role;
|
|
|
|
+
|
|
|
|
+ var (isPaiDan, workflow) = await _workflowDomainService.RecallToCenterFirstToSendAsync(order.WorkflowId, "省工单重派",
|
|
|
|
+ order.Status >= EOrderStatus.Filed, order.ExpiredTime, EHandleMode.Redo, flowAssignType, cancellationToken);
|
|
|
|
+
|
|
|
|
+ order.FileEmpty();
|
|
|
|
+
|
|
|
|
+ order.CurrentStepName = workflow.CurrentStepName;
|
|
|
|
+ order.CurrentStepCode = workflow.CurrentStepCode;
|
|
|
|
+ order.CurrentStepId = workflow.CurrentStepId;
|
|
|
|
+ order.CurrentStepCreateTime = workflow.CurrentStepCreateTime;
|
|
|
|
+ order.CurrentHandleTime = workflow.CurrentHandleTime;
|
|
|
|
+ order.CurrentHandlerId = workflow.CurrentHandlerId;
|
|
|
|
+ order.CurrentHandlerName = workflow.CurrentHandlerName;
|
|
|
|
+ order.CurrentHandleOrgName = workflow.CurrentHandleOrgName;
|
|
|
|
+ order.CurrentHandleOrgId = workflow.CurrentHandleOrgId;
|
|
|
|
+ order.CurrentHandleOrgLevel = workflow.CurrentHandleOrgLevel;
|
|
|
|
+ order.CurrentHandleOrgAreaCode = workflow.CurrentHandleOrgAreaCode;
|
|
|
|
+ order.CurrentHandleOrgAreaName = workflow.CurrentHandleOrgAreaName;
|
|
|
|
+
|
|
|
|
+ order.Status = EOrderStatus.WaitForAccept;
|
|
|
|
+ if (isPaiDan)
|
|
|
|
+ {
|
|
|
|
+ order.Status = EOrderStatus.Special;
|
|
|
|
+ }
|
|
|
|
+ //await _orderRepository.Updateable().SetColumns(o => new Order { Status = status }).Where(o => o.Id == order.Id).ExecuteCommandAsync(cancellationToken);
|
|
|
|
+
|
|
|
|
+ //处理回访和发布信息
|
|
|
|
+
|
|
|
|
+ var publish = await _orderPublishRepository.GetAsync(x => x.OrderId == order.Id);
|
|
|
|
+ if (publish != null)
|
|
|
|
+ {
|
|
|
|
+ var publishHistory = _mapper.Map<OrderPublishHistory>(publish);
|
|
|
|
+ publishHistory.OrderPublishId = publish.Id;
|
|
|
|
+ publishHistory.ArrangeTitleAfter = publish.ArrangeTitle;
|
|
|
|
+ publishHistory.ArrangeTitleBefor = publish.ArrangeTitle;
|
|
|
|
+ publishHistory.ArrangeContentAfter = publish.ArrangeContent;
|
|
|
|
+ publishHistory.ArrangeContentBefor = publish.ArrangeContent;
|
|
|
|
+ publishHistory.ArrangeOpinionAfter = publish.ArrangeOpinion;
|
|
|
|
+ publishHistory.ArrangeOpinionBefor = publish.ArrangeOpinion;
|
|
|
|
+ await _orderPublishHistoryRepository.AddAsync(publishHistory, cancellationToken);
|
|
|
|
+ await _orderPublishRepository.RemoveAsync(publish, false, cancellationToken);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ var visit = await _orderVisitRepository.GetAsync(x => x.OrderId == order.Id && x.VisitState != EVisitState.None);
|
|
|
|
+ if (visit != null)
|
|
|
|
+ {
|
|
|
|
+ visit.VisitState = EVisitState.None;
|
|
|
|
+ await _orderVisitRepository.UpdateAsync(visit, cancellationToken);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- }
|
|
|
|
|
|
|
|
- await _orderRepository.UpdateAsync(order, cancellationToken);
|
|
|
|
- //await _workflowDomainService.RecallToStartStepAsync(order.WorkflowId, "省工单重派", current, cancellationToken);
|
|
|
|
|
|
+ await _orderRepository.UpdateAsync(order, cancellationToken);
|
|
|
|
+ //await _workflowDomainService.RecallToStartStepAsync(order.WorkflowId, "省工单重派", current, cancellationToken);
|
|
|
|
+
|
|
|
|
+ //删除甄别、延期、二次办理等数据
|
|
|
|
+ await SpecialNewVerify(order, cancellationToken);
|
|
|
|
|
|
- //删除甄别、延期、二次办理等数据
|
|
|
|
- await SpecialNewVerify(order, cancellationToken);
|
|
|
|
|
|
+ //执行完成释放分布式锁
|
|
|
|
+ await _distributedLock.ReleaseAsync(distributedLockKey, cancellationToken);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ //锁定失败,调用消息队列,再次执行
|
|
|
|
+ _capPublisher.PublishDelay(TimeSpan.FromMinutes(2), EventNames.HotlineOrderAddAnonymous, dto);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
return _mapper.Map<AddOrderResponse>(order);
|
|
return _mapper.Map<AddOrderResponse>(order);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 自贡任务 不同来源渠道的待受理工单需给坐席进行待受理提醒
|
|
|
|
+ /// </summary>
|
|
|
|
+ /// <param name="orderId"></param>
|
|
|
|
+ /// <param name="cancellationToken"></param>
|
|
|
|
+ /// <returns></returns>
|
|
|
|
+ private async Task PendingAcceptanceReminder(string orderId, CancellationToken cancellationToken)
|
|
|
|
+ {
|
|
|
|
+ var order = await _orderRepository.GetAsync(p => p.Id == orderId && p.Status == EOrderStatus.WaitForAccept, cancellationToken);
|
|
|
|
+ if (order == null)
|
|
|
|
+ return;
|
|
|
|
+
|
|
|
|
+ try
|
|
|
|
+ {
|
|
|
|
+ var pendingAcceptanceReminder = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.PendingAcceptanceReminder);
|
|
|
|
+ if (pendingAcceptanceReminder != null && pendingAcceptanceReminder.Any())
|
|
|
|
+ {
|
|
|
|
+ if (pendingAcceptanceReminder.Any(p => p.DicDataValue.Contains(order.SourceChannelCode)))
|
|
|
|
+ {
|
|
|
|
+ //查询坐席角色
|
|
|
|
+ var setting = _systemSettingCacheManager.GetSetting(SettingConstants.RoleZuoXi).SettingValue;
|
|
|
|
+ var list = await _userRepository.Queryable()
|
|
|
|
+ .Includes(u => u.Roles)
|
|
|
|
+ .Where(u => u.Roles.Any(x => setting.Contains(x.Name)))
|
|
|
|
+ .ToListAsync();
|
|
|
|
+
|
|
|
|
+ //给坐席发送提醒
|
|
|
|
+ if (list != null && list.Any())
|
|
|
|
+ {
|
|
|
|
+ AddCircularDto circularDto = new()
|
|
|
|
+ {
|
|
|
|
+ Title = "待受理提醒",
|
|
|
|
+ Content = "您有新的【" + order.SourceChannel + "】工单待受理",
|
|
|
|
+ CircularTypeId = "5",
|
|
|
|
+ CircularTypeName = "系统消息",
|
|
|
|
+ IsMustRead = true,
|
|
|
|
+ SourceOrgId = OrgSeedData.CenterId,
|
|
|
|
+ SourceOrgName = OrgSeedData.CenterName,
|
|
|
|
+ CircularType = ECircularType.Person
|
|
|
|
+ };
|
|
|
|
+ List<CircularReadGroupDto> users = [];
|
|
|
|
+ foreach (var user in list)
|
|
|
|
+ {
|
|
|
|
+ users.Add(new CircularReadGroupDto()
|
|
|
|
+ {
|
|
|
|
+ UserId = user.Id,
|
|
|
|
+ UserName = user.Name,
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ circularDto.CircularReadGroups = users;
|
|
|
|
+ //调用推送消息通用接口
|
|
|
|
+ await _circularRecordDomainService.AddCircularMessage(circularDto, cancellationToken);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ catch (Exception)
|
|
|
|
+ {
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
/// <summary>
|
|
/// <summary>
|
|
/// 派单量统计
|
|
/// 派单量统计
|
|
/// </summary>
|
|
/// </summary>
|