|
@@ -1,12 +1,13 @@
|
|
|
-using Consul;
|
|
|
-using DotNetCore.CAP;
|
|
|
+using DotNetCore.CAP;
|
|
|
using Hotline.Api.Filter;
|
|
|
+using Hotline.Application.CallCenter;
|
|
|
using Hotline.Application.ExportExcel;
|
|
|
using Hotline.Application.FlowEngine;
|
|
|
using Hotline.Application.Orders;
|
|
|
using Hotline.Application.Quality;
|
|
|
using Hotline.Caching.Interfaces;
|
|
|
-using Hotline.CallCenter.Calls;
|
|
|
+using Hotline.CallCenter.Configs;
|
|
|
+using Hotline.ContingencyManagement;
|
|
|
using Hotline.Enterprise;
|
|
|
using Hotline.File;
|
|
|
using Hotline.FlowEngine.Definitions;
|
|
@@ -26,6 +27,7 @@ using Hotline.Settings;
|
|
|
using Hotline.Settings.Hotspots;
|
|
|
using Hotline.Settings.TimeLimits;
|
|
|
using Hotline.Share.Dtos;
|
|
|
+using Hotline.Share.Dtos.ContingencyManagement;
|
|
|
using Hotline.Share.Dtos.Enterprise;
|
|
|
using Hotline.Share.Dtos.FlowEngine;
|
|
|
using Hotline.Share.Dtos.FlowEngine.Workflow;
|
|
@@ -47,26 +49,16 @@ using MapsterMapper;
|
|
|
using MediatR;
|
|
|
using Microsoft.AspNetCore.Authorization;
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
-using Microsoft.OpenApi.Writers;
|
|
|
+using Microsoft.Extensions.Options;
|
|
|
using MiniExcelLibs;
|
|
|
using MongoDB.Driver;
|
|
|
-using NPOI.SS.Formula.Functions;
|
|
|
-using NPOI.SS.Util;
|
|
|
-using Org.BouncyCastle.Utilities;
|
|
|
using SqlSugar;
|
|
|
-using StackExchange.Redis;
|
|
|
-using System.Diagnostics.Tracing;
|
|
|
-using Hotline.Application.CallCenter;
|
|
|
-using Hotline.CallCenter.Configs;
|
|
|
-using Microsoft.Extensions.Options;
|
|
|
using XF.Domain.Authentications;
|
|
|
using XF.Domain.Cache;
|
|
|
-using XF.Domain.Constants;
|
|
|
using XF.Domain.Entities;
|
|
|
using XF.Domain.Exceptions;
|
|
|
using XF.Domain.Repository;
|
|
|
using XF.Utility.EnumExtensions;
|
|
|
-using Hotline.Repository.SqlSugar.CallCenter;
|
|
|
|
|
|
namespace Hotline.Api.Controllers;
|
|
|
|
|
@@ -75,6 +67,7 @@ namespace Hotline.Api.Controllers;
|
|
|
/// </summary>
|
|
|
public class OrderController : BaseController
|
|
|
{
|
|
|
+ #region 注入
|
|
|
private readonly IOrderDomainService _orderDomainService;
|
|
|
private readonly IOrderRepository _orderRepository;
|
|
|
private readonly IWorkflowApplication _workflowApplication;
|
|
@@ -113,10 +106,7 @@ public class OrderController : BaseController
|
|
|
private readonly IRepository<OrderFinality> _orderFinalityRepository;
|
|
|
private readonly IRepository<OrderSendBack> _orderSendBackRepository;
|
|
|
private readonly IRepository<OrderSpecial> _orderSpecialRepository;
|
|
|
-
|
|
|
private readonly IRepository<WorkflowTrace> _workflowTraceRepository;
|
|
|
-
|
|
|
- //private readonly IRepository<TrCallRecord> _trCallRecordRepository;
|
|
|
private readonly IOrderApplication _orderApplication;
|
|
|
private readonly IEnterpriseService _enterpriseService;
|
|
|
private readonly IPushDomainService _pushDomainService;
|
|
@@ -134,6 +124,8 @@ public class OrderController : BaseController
|
|
|
private readonly ICallApplication _callApplication;
|
|
|
private readonly IOptionsSnapshot<CallCenterConfiguration> _callcenterOptions;
|
|
|
private readonly IOrderSendBackAuditApplication _orderSendBackAuditApplication;
|
|
|
+ private readonly IRepository<ContingencyManagementOrders> _contingencyManagementOrdersRepository;
|
|
|
+ private readonly IRepository<ContingencyManagementHotspot> _contingencyManagementHotspotRepository;
|
|
|
|
|
|
public OrderController(
|
|
|
IOrderDomainService orderDomainService,
|
|
@@ -175,7 +167,6 @@ public class OrderController : BaseController
|
|
|
IRepository<OrderSendBack> orderSendBackRepository,
|
|
|
IRepository<OrderSpecial> orderSpecialRepository,
|
|
|
IRepository<WorkflowTrace> workflowTraceRepository,
|
|
|
- //IRepository<TrCallRecord> trCallRecordRepository,
|
|
|
IOrderApplication orderApplication,
|
|
|
IEnterpriseService enterpriseService,
|
|
|
IPushDomainService pushDomainService,
|
|
@@ -192,7 +183,9 @@ public class OrderController : BaseController
|
|
|
ICallApplication callApplication,
|
|
|
IOptionsSnapshot<CallCenterConfiguration> callcenterOptions,
|
|
|
IRepository<OrderModifyingRecords> orderModifyingRecordsRepository,
|
|
|
- IOrderSendBackAuditApplication orderSendBackAuditApplication
|
|
|
+ IOrderSendBackAuditApplication orderSendBackAuditApplication,
|
|
|
+ IRepository<ContingencyManagementOrders> contingencyManagementOrdersRepository,
|
|
|
+ IRepository<ContingencyManagementHotspot> contingencyManagementHotspotRepository
|
|
|
)
|
|
|
{
|
|
|
_orderDomainService = orderDomainService;
|
|
@@ -234,7 +227,6 @@ public class OrderController : BaseController
|
|
|
_orderSendBackRepository = orderSendBackRepository;
|
|
|
_orderSpecialRepository = orderSpecialRepository;
|
|
|
_workflowTraceRepository = workflowTraceRepository;
|
|
|
- //_trCallRecordRepository = trCallRecordRepository;
|
|
|
_logger = logger;
|
|
|
_orderApplication = orderApplication;
|
|
|
_enterpriseService = enterpriseService;
|
|
@@ -252,8 +244,10 @@ public class OrderController : BaseController
|
|
|
_callApplication = callApplication;
|
|
|
_callcenterOptions = callcenterOptions;
|
|
|
_orderSendBackAuditApplication = orderSendBackAuditApplication;
|
|
|
-
|
|
|
+ _contingencyManagementOrdersRepository = contingencyManagementOrdersRepository;
|
|
|
+ _contingencyManagementHotspotRepository = contingencyManagementHotspotRepository;
|
|
|
}
|
|
|
+ #endregion
|
|
|
|
|
|
#region 工单发布
|
|
|
|
|
@@ -327,6 +321,47 @@ public class OrderController : BaseController
|
|
|
publishPublishOrder.Order = _mapper.Map<OrderDto>(order);
|
|
|
await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderPublishOrder, publishPublishOrder);
|
|
|
|
|
|
+ try
|
|
|
+ {
|
|
|
+ //应急管理局业务处理
|
|
|
+ //是否是指定热点
|
|
|
+ if (await _contingencyManagementHotspotRepository.AnyAsync(p => p.Id == order.HotspotId, HttpContext.RequestAborted))
|
|
|
+ {
|
|
|
+ var orderData = await _contingencyManagementOrdersRepository.GetAsync(p => p.Id == order.Id, HttpContext.RequestAborted);
|
|
|
+ //不存在新增
|
|
|
+ if (orderData == null)
|
|
|
+ {
|
|
|
+ orderData = new ContingencyManagementOrders();
|
|
|
+ orderData = _mapper.Map<ContingencyManagementOrders>(order);
|
|
|
+ orderData.Id = order.Id;
|
|
|
+ orderData.ArrangementOpinion = order.ActualOpinion;
|
|
|
+ orderData.ArrangeTitle = order.Title;
|
|
|
+ orderData.ArrangeContent = order.Content;
|
|
|
+ orderData.PushState = "0";
|
|
|
+ await _contingencyManagementOrdersRepository.AddAsync(orderData, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //存在修改
|
|
|
+ _mapper.Map(order, orderData);
|
|
|
+ orderData.ArrangementOpinion = order.ActualOpinion;
|
|
|
+ orderData.ArrangeTitle = order.Title;
|
|
|
+ orderData.ArrangeContent = order.Content;
|
|
|
+ orderData.PushState = "0";
|
|
|
+ await _contingencyManagementOrdersRepository.UpdateAsync(orderData, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ //推送消息
|
|
|
+ var pushaData = _mapper.Map<ContingencyManagementOrdersDto>(orderData);
|
|
|
+ pushaData.Id = orderData.Id;
|
|
|
+ //推送消息
|
|
|
+ await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderContingencyManagement,
|
|
|
+ pushaData, Hotline.Share.Mq.EventNames.HotlineOrderContingencyManagementState);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (Exception)
|
|
|
+ {
|
|
|
+ }
|
|
|
+
|
|
|
var orderVisit = new OrderVisit();
|
|
|
orderVisit.No = order.No;
|
|
|
orderVisit.OrderId = order.Id;
|
|
@@ -461,6 +496,48 @@ public class OrderController : BaseController
|
|
|
}
|
|
|
await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderPublishOrder, publishPublishOrder);
|
|
|
|
|
|
+ try
|
|
|
+ {
|
|
|
+ //应急管理局业务处理
|
|
|
+ //是否是指定热点
|
|
|
+ if (await _contingencyManagementHotspotRepository.AnyAsync(p => p.Id == order.HotspotId, HttpContext.RequestAborted))
|
|
|
+ {
|
|
|
+ var orderData = await _contingencyManagementOrdersRepository.GetAsync(p => p.Id == order.Id, HttpContext.RequestAborted);
|
|
|
+ //不存在新增
|
|
|
+ if (orderData == null)
|
|
|
+ {
|
|
|
+ orderData = new ContingencyManagementOrders();
|
|
|
+ orderData = _mapper.Map<ContingencyManagementOrders>(order);
|
|
|
+ orderData.Id = order.Id;
|
|
|
+ orderData.ArrangementOpinion = dto.ArrangeOpinion;
|
|
|
+ orderData.ArrangeTitle = dto.ArrangeTitle;
|
|
|
+ orderData.ArrangeContent = dto.ArrangeContent;
|
|
|
+ orderData.PushState = "0";
|
|
|
+ await _contingencyManagementOrdersRepository.AddAsync(orderData, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //存在修改
|
|
|
+ _mapper.Map(order, orderData);
|
|
|
+ orderData.ArrangementOpinion = dto.ArrangeOpinion;
|
|
|
+ orderData.ArrangeTitle = dto.ArrangeTitle;
|
|
|
+ orderData.ArrangeContent = dto.ArrangeContent;
|
|
|
+ orderData.PushState = "0";
|
|
|
+ await _contingencyManagementOrdersRepository.UpdateAsync(orderData, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ var pushaData = _mapper.Map<ContingencyManagementOrdersDto>(orderData);
|
|
|
+ pushaData.Id = order.Id;
|
|
|
+ pushaData.CreationTime = order.CreationTime;
|
|
|
+ //推送消息
|
|
|
+ await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderContingencyManagement,
|
|
|
+ pushaData, Hotline.Share.Mq.EventNames.HotlineOrderContingencyManagementState, HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (Exception)
|
|
|
+ {
|
|
|
+ }
|
|
|
+
|
|
|
var orderVisit = new OrderVisit();
|
|
|
orderVisit.No = order.No;
|
|
|
orderVisit.OrderId = order.Id;
|
|
@@ -770,6 +847,7 @@ public class OrderController : BaseController
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.EmployeeName), d => !string.IsNullOrEmpty(d.EmployeeId) && d.Employee.Name == dto.EmployeeName)
|
|
|
.WhereIF(dto.IsProvince != null && dto.IsProvince == true, d => d.Order.IsProvince == true)
|
|
|
.WhereIF(dto.IsProvince != null && dto.IsProvince == false, d => d.Order.IsProvince == false)
|
|
|
+ .WhereIF(dto.IsEffectiveAiVisit != null, d => d.IsEffectiveAiVisit == dto.IsEffectiveAiVisit)
|
|
|
.OrderByDescending(x => x.PublishTime)
|
|
|
.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
|
return new PagedDto<OrderVisitDto>(total, _mapper.Map<IReadOnlyList<OrderVisitDto>>(items));
|
|
@@ -822,6 +900,7 @@ public class OrderController : BaseController
|
|
|
var recordingFileUrl = "";
|
|
|
var recordingBaseAddress = "";
|
|
|
var recordingAbsolutePath = "";
|
|
|
+ var aiVisitVoiceBaseUrl = "";
|
|
|
if (_callcenterOptions.Value.CallCenterType == AppDefaults.CallCenterType.TianRun)
|
|
|
{
|
|
|
var callRecord = await _callApplication.GetTianrunCallAsync(orderVisit.CallId, HttpContext.RequestAborted);
|
|
@@ -842,6 +921,8 @@ public class OrderController : BaseController
|
|
|
recordingAbsolutePath = call.AudioFile;
|
|
|
}
|
|
|
}
|
|
|
+ //获取系统配置智能回访语音URL头
|
|
|
+ aiVisitVoiceBaseUrl = _systemSettingCacheManager.GetSetting(SettingConstants.AiVisitVoiceBaseUrl)?.SettingValue[0];
|
|
|
|
|
|
return new
|
|
|
{
|
|
@@ -856,6 +937,7 @@ public class OrderController : BaseController
|
|
|
RecordingFileUrl = recordingFileUrl,
|
|
|
RecordingBaseAddress = recordingBaseAddress,
|
|
|
RecordingAbsolutePath = recordingAbsolutePath,
|
|
|
+ AiVisitVoiceBaseUrl = aiVisitVoiceBaseUrl,
|
|
|
};
|
|
|
}
|
|
|
|
|
@@ -1020,9 +1102,9 @@ public class OrderController : BaseController
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.No), x => x.No == dto.No)
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Order.Title.Contains(dto.Title))
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.VisitUserName), x => x.Employee.Name.Contains(dto.VisitUserName))
|
|
|
- .WhereIF(dto.AcceptTypes.Any(), d => dto.AcceptTypes.Contains(d.Order.AcceptTypeCode)) //受理类型
|
|
|
- .WhereIF(dto.HotspotIds.Any(), d => dto.HotspotIds.Contains(d.Order.HotspotId)) //热点类型
|
|
|
- .WhereIF(dto.OrgCodes.Any(), d => dto.OrgCodes.Contains(d.Order.ActualHandleOrgCode)) //接办部门
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), d => d.Order.AcceptTypeCode == dto.AcceptType)//受理类型
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Hotspot), d => d.Order.HotspotSpliceName != null && d.Order.HotspotSpliceName.Contains(dto.Hotspot))//热点类型
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.OrgId), d => d.Order.CurrentHandleOrgId == dto.OrgId)//接办部门
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.NameOrNo),
|
|
|
d => d.Order.AcceptorName.Contains(dto.NameOrNo!) || d.Order.AcceptorStaffNo.Contains(dto.NameOrNo!)) //受理人/坐席
|
|
|
.WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart) //受理时间开始
|
|
@@ -1492,8 +1574,8 @@ public class OrderController : BaseController
|
|
|
if (dto.Data.Files.Any())
|
|
|
delay.FileJson = await _fileRepository.AddFileAsync(dto.Data.Files, delay.Id, "", HttpContext.RequestAborted);
|
|
|
else
|
|
|
- delay.FileJson = new List<Share.Dtos.File.FileJson>();
|
|
|
- await _orderDelayRepository.UpdateAsync(delay, HttpContext.RequestAborted);
|
|
|
+ delay.FileJson = new List<Share.Dtos.File.FileJson>();
|
|
|
+ await _orderDelayRepository.UpdateAsync(delay, HttpContext.RequestAborted);
|
|
|
try
|
|
|
{
|
|
|
dto.NextWorkflow.WorkflowId = delay.WorkflowId;
|
|
@@ -1709,41 +1791,44 @@ public class OrderController : BaseController
|
|
|
.Includes(x => x.OrderVisit)
|
|
|
.Includes(x => x.OrderVisit, y => y.Order)
|
|
|
.Includes(x => x.OrderVisit, y => y.Employee)
|
|
|
- .LeftJoin<OrderScreen>((x, s) => x.Id == s.VisitDetailId && s.IsDeleted == false)
|
|
|
- //&& s.Status < EScreenStatus.End
|
|
|
- .Where((x, s) => s.Id == null)
|
|
|
- .WhereIF(dto.IsHomePage.HasValue && dto.IsHomePage == true,
|
|
|
- x => x.OrderVisit.VisitTime < dto.CreationTimeEnd && x.OrderVisit.VisitTime > dto.CreationTimeStart)
|
|
|
+ //.LeftJoin<OrderScreen>((x, s) => x.Id == s.VisitDetailId && s.IsDeleted == false)
|
|
|
+ .Includes(x => x.OrderScreens)
|
|
|
+ .Where(x => x.OrderScreens.Any(s => s.Status == EScreenStatus.SendBack && s.SendBackApply == true) || x.OrderScreens.Any(s => (s.Status != EScreenStatus.SendBack && s.SendBackApply != true)) == false)
|
|
|
+ .WhereIF(dto.ScreenSendBack is 1, x => x.OrderScreens.Any(s => s.Status == EScreenStatus.SendBack && s.SendBackApply == true))
|
|
|
+ .WhereIF(dto.ScreenSendBack is 2, x => x.OrderScreens.Any(s => (s.Status != EScreenStatus.SendBack && s.SendBackApply != true)) == false)
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.No), x => x.OrderVisit.Order!.No!.Contains(dto.No!))
|
|
|
- .WhereIF(dto.IsProvince.HasValue, x => x.OrderVisit.Order!.IsProvince == dto.IsProvince)
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.OrderVisit.Order!.Title!.Contains(dto.Title!))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.SourceChannel), x => x.OrderVisit.Order!.SourceChannelCode! == dto.SourceChannel!)
|
|
|
+ .WhereIF(dto.IsProvince.HasValue, x => x.OrderVisit.Order!.IsProvince == dto.IsProvince)
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.AcceptType), x => x.OrderVisit.Order!.AcceptTypeCode! == dto.AcceptType!)
|
|
|
- .WhereIF(dto.CounterSignType.HasValue, x => x.OrderVisit.Order!.CounterSignType == dto.CounterSignType)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.HotspotSpliceName), x => x.OrderVisit.Order!.Hotspot.HotSpotFullName!.StartsWith(dto.HotspotSpliceName!))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.SourceChannel), x => x.OrderVisit.Order!.SourceChannelCode! == dto.SourceChannel!)
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), x => x.OrderVisit.Order!.OrgLevelOneName!.Contains(dto.OrgLevelOneName!))
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.CurrentHandleOrgName), x => x.OrderVisit.Order!.CurrentHandleOrgName!.Contains(dto.CurrentHandleOrgName!))
|
|
|
- .WhereIF(dto.ActualHandleTime.HasValue && dto.EndActualHandleTime.HasValue,
|
|
|
- x => x.OrderVisit.Order!.ActualHandleTime >= dto.ActualHandleTime && x.OrderVisit.Order!.ActualHandleTime <= dto.EndActualHandleTime)
|
|
|
- .WhereIF(dto.FiledTime.HasValue && dto.EndFiledTime.HasValue,
|
|
|
- x => x.OrderVisit.Order!.FiledTime == dto.FiledTime && x.OrderVisit.Order!.FiledTime <= dto.EndFiledTime)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.VisitOrgName), x => x.VisitOrgName!.Contains(dto.VisitOrgName!))
|
|
|
.WhereIF(dto.CreationTime.HasValue && dto.EndCreationTime.HasValue,
|
|
|
- x => x.OrderVisit.Order!.CreationTime == dto.CreationTime && x.OrderVisit.Order!.CreationTime <= dto.EndCreationTime)
|
|
|
+ x => x.OrderVisit.Order!.CreationTime >= dto.CreationTime && x.OrderVisit.Order!.CreationTime <= dto.EndCreationTime)
|
|
|
+ .WhereIF(dto.CurrentHandleTime.HasValue && dto.EndCurrentHandleTime.HasValue,
|
|
|
+ x => x.OrderVisit.Order!.CurrentHandleTime >= dto.CurrentHandleTime && x.OrderVisit.Order!.ActualHandleTime <= dto.EndCurrentHandleTime)
|
|
|
+ .WhereIF(dto.FiledTime.HasValue && dto.EndFiledTime.HasValue,
|
|
|
+ x => x.OrderVisit.Order!.FiledTime >= dto.FiledTime && x.OrderVisit.Order!.FiledTime <= dto.EndFiledTime)
|
|
|
.WhereIF(dto.VisitTime.HasValue && dto.EndVisitTime.HasValue,
|
|
|
- x => x.OrderVisit.VisitTime == dto.VisitTime && x.OrderVisit.VisitTime <= dto.EndVisitTime)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.VisitOrgName), x => x.VisitOrgName!.Contains(dto.VisitOrgName!))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.OrgProcessingResults),
|
|
|
- x => SqlFunc.JsonField(x.OrgProcessingResults, "Key") == dto.OrgProcessingResults)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.OrgHandledAttitude),
|
|
|
- x => SqlFunc.JsonListObjectAny(x.OrgHandledAttitude, "Key", dto.OrgHandledAttitude))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.OrgNoSatisfiedReason),
|
|
|
- x => SqlFunc.JsonField(x.OrgNoSatisfiedReason, "Key") == dto.OrgNoSatisfiedReason)
|
|
|
- .Where((x, s) => x.OrderVisit.VisitState == EVisitState.Visited && x.OrderVisit.IsCanHandle);
|
|
|
+ x => x.OrderVisit.VisitTime >= dto.VisitTime && x.OrderVisit.VisitTime <= dto.EndVisitTime)
|
|
|
+ .WhereIF(dto.IsHomePage.HasValue && dto.IsHomePage == true,
|
|
|
+ x => x.OrderVisit.VisitTime < dto.CreationTimeEnd && x.OrderVisit.VisitTime > dto.CreationTimeStart)
|
|
|
+ //.WhereIF(dto.CounterSignType.HasValue, x => x.OrderVisit.Order!.CounterSignType == dto.CounterSignType)
|
|
|
+ //.WhereIF(!string.IsNullOrEmpty(dto.OrgProcessingResults),
|
|
|
+ // x => SqlFunc.JsonField(x.OrgProcessingResults, "Key") == dto.OrgProcessingResults)
|
|
|
+ //.WhereIF(!string.IsNullOrEmpty(dto.OrgHandledAttitude),
|
|
|
+ // x => SqlFunc.JsonListObjectAny(x.OrgHandledAttitude, "Key", dto.OrgHandledAttitude))
|
|
|
+ //.WhereIF(!string.IsNullOrEmpty(dto.OrgNoSatisfiedReason),
|
|
|
+ // x => SqlFunc.JsonField(x.OrgNoSatisfiedReason, "Key") == dto.OrgNoSatisfiedReason)
|
|
|
+ .Where(x => x.OrderVisit.VisitState == EVisitState.Visited && x.OrderVisit.IsCanHandle);
|
|
|
if (_sessionContext.OrgId != null && !_sessionContext.OrgIsCenter)
|
|
|
{
|
|
|
query.WhereIF(!string.IsNullOrEmpty(dto.Keyword),
|
|
|
- (x, s) => x.OrderVisit.Order.Title.Contains(dto.Keyword!) ||
|
|
|
+ x => x.OrderVisit.Order.Title.Contains(dto.Keyword!) ||
|
|
|
x.OrderVisit.Order.No.Contains(dto.Keyword!))
|
|
|
- .Where((x, s) => x.VisitTarget == EVisitTarget.Org && x.VisitOrgCode == _sessionContext.OrgId && (
|
|
|
+ .Where(x => x.VisitTarget == EVisitTarget.Org && x.VisitOrgCode == _sessionContext.OrgId && (
|
|
|
SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "1" ||
|
|
|
SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "2" ||
|
|
|
SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "1" ||
|
|
@@ -1753,9 +1838,9 @@ public class OrderController : BaseController
|
|
|
else
|
|
|
{
|
|
|
query.WhereIF(!string.IsNullOrEmpty(dto.Keyword),
|
|
|
- (x, s) => x.OrderVisit.Order.Title.Contains(dto.Keyword!) ||
|
|
|
+ x => x.OrderVisit.Order.Title.Contains(dto.Keyword!) ||
|
|
|
x.OrderVisit.Order.No.Contains(dto.Keyword!))
|
|
|
- .Where((x, s) => x.VisitTarget == EVisitTarget.Org && (
|
|
|
+ .Where(x => x.VisitTarget == EVisitTarget.Org && (
|
|
|
SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "1" ||
|
|
|
SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "2" ||
|
|
|
SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "1" ||
|
|
@@ -1764,7 +1849,15 @@ public class OrderController : BaseController
|
|
|
}
|
|
|
|
|
|
var (total, items) = await query
|
|
|
- .OrderByDescending((x, s) => x.CreationTime)
|
|
|
+ .OrderByIF(dto is { SortRule: 0, SortField: "order.startTime" }, x => x.OrderVisit.Order.StartTime, OrderByType.Asc)
|
|
|
+ .OrderByIF(dto is { SortRule: 1, SortField: "order.startTime" }, x => x.OrderVisit.Order.StartTime, OrderByType.Desc)
|
|
|
+ .OrderByIF(dto is { SortRule: 0, SortField: "order.actualHandleTime" }, x => x.OrderVisit.Order.ActualHandleTime, OrderByType.Asc)
|
|
|
+ .OrderByIF(dto is { SortRule: 1, SortField: "order.actualHandleTime" }, x => x.OrderVisit.Order.ActualHandleTime, OrderByType.Desc)
|
|
|
+ .OrderByIF(dto is { SortRule: 0, SortField: "order.filedTime" }, x => x.OrderVisit.Order.FiledTime, OrderByType.Asc)
|
|
|
+ .OrderByIF(dto is { SortRule: 1, SortField: "order.filedTime" }, x => x.OrderVisit.Order.FiledTime, OrderByType.Desc)
|
|
|
+ .OrderByIF(dto is { SortRule: 0, SortField: "orderVisit.visitTime" }, x => x.OrderVisit.VisitTime, OrderByType.Asc)
|
|
|
+ .OrderByIF(dto is { SortRule: 1, SortField: "orderVisit.visitTime" }, x => x.OrderVisit.VisitTime, OrderByType.Desc)
|
|
|
+ .OrderByIF(dto.SortRule is null, x => x.CreationTime, OrderByType.Desc)
|
|
|
.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
|
return new PagedDto<OrderVisitDetailDto>(total, _mapper.Map<IReadOnlyList<OrderVisitDetailDto>>(items));
|
|
|
}
|
|
@@ -1786,26 +1879,49 @@ public class OrderController : BaseController
|
|
|
.Includes(d => d.VisitDetail)
|
|
|
.Includes(d => d.Visit, v => v.Order)
|
|
|
.Includes(d => d.Workflow)
|
|
|
+ .Includes(d => d.ScreenDetails.Where(sd => sd.AuditUserId == _sessionContext.UserId).OrderByDescending(sd => sd.AuditTime).Take(1).ToList())
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.Title), d => d.Visit.Order.Title.Contains(dto.Title!))
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.No), d => d.Visit.Order.No.Contains(dto.No!));
|
|
|
- if (dto.Status is EScreenStatus.Apply)
|
|
|
+ if (dto.TabStatus is EScreenStatus.Apply)
|
|
|
{
|
|
|
- query.Where(d => (d.Status == EScreenStatus.Apply || d.Status == EScreenStatus.Approval));
|
|
|
+ query.Where(d => (d.Status == EScreenStatus.Apply || d.Status == EScreenStatus.Approval || (d.Status == EScreenStatus.SendBack || d.SendBackApply == false)));
|
|
|
}
|
|
|
|
|
|
- if (dto.Status.HasValue && dto.Status == EScreenStatus.MyHandle)
|
|
|
+ if (dto.TabStatus.HasValue && dto.Status == EScreenStatus.MyHandle)
|
|
|
{
|
|
|
query.Where(d => (d.Status != EScreenStatus.Apply));
|
|
|
}
|
|
|
|
|
|
var (total, items) = await query
|
|
|
- //.WhereIF(dto.Status.HasValue && dto.Status == EScreenStatus.MyHandle,
|
|
|
- // x => x.Status != EScreenStatus.Apply && x.CreatorId == _sessionContext.UserId)
|
|
|
+ .WhereIF(dto.DataScope is 1, x => x.CreatorId == _sessionContext.RequiredUserId)
|
|
|
+ .WhereIF(dto.Status.HasValue, x => x.Status == dto.Status)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), x => x.Order!.AcceptTypeCode! == dto.AcceptType!)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.HotspotSpliceName), x => x.Order!.Hotspot.HotSpotFullName!.StartsWith(dto.HotspotSpliceName!))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.SourceChannel), x => x.Order!.SourceChannelCode! == dto.SourceChannel!)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.VisitOrgName), x => x.VisitDetail.VisitOrgName!.Contains(dto.VisitOrgName!))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.CreatorOrgName), d => d.CreatorOrgName == dto.CreatorOrgName)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.CreatorName), d => d.CreatorName == dto.CreatorName)
|
|
|
+ .WhereIF(dto.IsProvince.HasValue, x => x.Order!.IsProvince == dto.IsProvince)
|
|
|
+ .WhereIF(dto.IsSendBackApplyNum is true, x => x.SendBackApplyNum > 0)
|
|
|
+ .WhereIF(dto.IsSendBackApplyNum is false, x => x.SendBackApplyNum == 0)
|
|
|
.WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart)
|
|
|
.WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd)
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.OrderId), d => d.OrderId == dto.OrderId)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.CreatorOrgName), d => d.CreatorOrgName == dto.CreatorOrgName)
|
|
|
- .OrderByDescending(d => d.CreationTime)
|
|
|
+ //甄别列表
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), x => x.Order!.OrgLevelOneName!.Contains(dto.OrgLevelOneName!))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.CurrentHandleOrgName), x => x.Order!.CurrentHandleOrgName!.Contains(dto.CurrentHandleOrgName!))
|
|
|
+ .WhereIF(dto.CreationTime.HasValue && dto.EndCreationTime.HasValue,
|
|
|
+ x => x.Order!.CreationTime >= dto.CreationTime && x.Order!.CreationTime <= dto.EndCreationTime)
|
|
|
+ .WhereIF(dto.CurrentHandleTime.HasValue && dto.EndCurrentHandleTime.HasValue,
|
|
|
+ x => x.Order!.CurrentHandleTime >= dto.CurrentHandleTime && x.Order!.ActualHandleTime <= dto.EndCurrentHandleTime)
|
|
|
+ .WhereIF(dto.FiledTime.HasValue && dto.EndFiledTime.HasValue,
|
|
|
+ x => x.Order!.FiledTime >= dto.FiledTime && x.Order!.FiledTime <= dto.EndFiledTime)
|
|
|
+ .WhereIF(dto.VisitTime.HasValue && dto.EndVisitTime.HasValue,
|
|
|
+ x => x.Visit.VisitTime >= dto.VisitTime && x.Visit.VisitTime <= dto.EndVisitTime)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Contact), x => x.Order!.Contact! == dto.Contact!)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.FromPhone), x => x.Order!.FromPhone! == dto.FromPhone!)
|
|
|
+ .OrderByIF(dto is { SortRule: 0, SortField: "creationTime" }, x => x.CreationTime, OrderByType.Asc)
|
|
|
+ .OrderByIF(dto is { SortRule: 1, SortField: "creationTime" } || dto.SortRule is null, x => x.CreationTime, OrderByType.Desc)
|
|
|
.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
|
return new PagedDto<OrderScreenListDto>(total, _mapper.Map<IReadOnlyList<OrderScreenListDto>>(items));
|
|
|
}
|
|
@@ -1854,8 +1970,8 @@ public class OrderController : BaseController
|
|
|
if (dto.Data.Files.Any())
|
|
|
model.FileJson = await _fileRepository.AddFileAsync(dto.Data.Files, model.Id, "", HttpContext.RequestAborted);
|
|
|
else
|
|
|
- model.FileJson = new List<Share.Dtos.File.FileJson>();
|
|
|
- await _orderScreenRepository.AddAsync(model, HttpContext.RequestAborted);
|
|
|
+ model.FileJson = new List<Share.Dtos.File.FileJson>();
|
|
|
+ await _orderScreenRepository.AddAsync(model, HttpContext.RequestAborted);
|
|
|
|
|
|
var workflowId = string.Empty;
|
|
|
try
|
|
@@ -1896,8 +2012,10 @@ public class OrderController : BaseController
|
|
|
if (dto.Data.Files.Any())
|
|
|
screen.FileJson = await _fileRepository.AddFileAsync(dto.Data.Files, screen.Id, "", HttpContext.RequestAborted);
|
|
|
else
|
|
|
- screen.FileJson = new List<Share.Dtos.File.FileJson>();
|
|
|
- await _orderScreenRepository.UpdateAsync(screen, HttpContext.RequestAborted);
|
|
|
+ screen.FileJson = new List<Share.Dtos.File.FileJson>();
|
|
|
+
|
|
|
+ screen.SendBackApplyNum++;
|
|
|
+ await _orderScreenRepository.UpdateAsync(screen, HttpContext.RequestAborted);
|
|
|
try
|
|
|
{
|
|
|
dto.NextWorkflow.WorkflowId = screen.WorkflowId;
|
|
@@ -1918,19 +2036,14 @@ public class OrderController : BaseController
|
|
|
{
|
|
|
var workflow = await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, withSteps: true,
|
|
|
cancellationToken: HttpContext.RequestAborted);
|
|
|
- if (workflow.Steps.Count > 2)
|
|
|
- {
|
|
|
- await _workflowApplication.PreviousAsync(dto, HttpContext.RequestAborted);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- TerminateDto terDto = new TerminateDto
|
|
|
- {
|
|
|
- WorkflowId = dto.WorkflowId,
|
|
|
- Opinion = "退回申请人"
|
|
|
- };
|
|
|
- await _workflowDomainService.TerminateAsync(terDto, HttpContext.RequestAborted);
|
|
|
- }
|
|
|
+ var screen = await _orderScreenRepository.Queryable().Where(x => x.WorkflowId == dto.WorkflowId).FirstAsync();
|
|
|
+ if (screen == null)
|
|
|
+ throw UserFriendlyException.SameMessage("甄别信息错误!");
|
|
|
+ screen.SendBackApply = workflow.Steps.Count <= 2;
|
|
|
+ await _workflowApplication.PreviousAsync(dto, HttpContext.RequestAborted);
|
|
|
+ screen.Status = EScreenStatus.SendBack;
|
|
|
+ screen.SendBackNum++;
|
|
|
+ await _orderScreenRepository.UpdateAsync(screen, HttpContext.RequestAborted);
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 查询工单甄别流程开启参数
|
|
@@ -2418,8 +2531,8 @@ public class OrderController : BaseController
|
|
|
if (dto.Files.Any())
|
|
|
urge.ReplyFileJson = await _fileRepository.AddFileAsync(dto.Files, urge.Id, "", HttpContext.RequestAborted);
|
|
|
else
|
|
|
- urge.ReplyFileJson = new List<Share.Dtos.File.FileJson>();
|
|
|
- await _orderUrgeRepository.UpdateAsync(urge, HttpContext.RequestAborted);
|
|
|
+ urge.ReplyFileJson = new List<Share.Dtos.File.FileJson>();
|
|
|
+ await _orderUrgeRepository.UpdateAsync(urge, HttpContext.RequestAborted);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -2759,8 +2872,8 @@ public class OrderController : BaseController
|
|
|
dto.RepeatableEventDetails = repeatables;
|
|
|
if (!string.IsNullOrEmpty(dto.WorkflowId))
|
|
|
{
|
|
|
- var workflow = await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, withSteps: true, withTraces:true,
|
|
|
- cancellationToken: HttpContext.RequestAborted);
|
|
|
+ var workflow = await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, withSteps: true, withTraces: true,
|
|
|
+ cancellationToken: HttpContext.RequestAborted);
|
|
|
var centerOpinion = workflow.Steps.Where(x => x.HandlerOrgId == OrgSeedData.CenterId && x.StepType != EStepType.End).MaxBy(d => d.CreationTime)?.Opinion ?? string.Empty;
|
|
|
dto.CenterOpinion = centerOpinion;
|
|
|
List<OrderRemarksDto> remarks = workflow.Steps.Where(x => !string.IsNullOrEmpty(x.Remark)).Select(x => new OrderRemarksDto { Remark = x.Remark, RemarkTime = x.CreationTime, RemarkUser = x.CreatorName }).ToList();
|
|
@@ -2768,10 +2881,15 @@ public class OrderController : BaseController
|
|
|
if (order.Status == EOrderStatus.SendBack || order.Status == EOrderStatus.SendBackAudit || order.Status == EOrderStatus.BackToUnAccept)
|
|
|
{
|
|
|
var backTrace = workflow.Traces.Where(x => x.Status == EWorkflowStepStatus.Handled).OrderByDescending(x => x.CreationTime).First();
|
|
|
- dto.SendBackOpinion = string.IsNullOrEmpty(backTrace.Opinion) ? string.Empty : backTrace.Opinion.Replace("流程归档","");
|
|
|
- //var sendBack = await _orderSendBackAuditRepository.Queryable().Where(x => x.OrderId == dto.Id).OrderByDescending(x => x.CreationTime).FirstAsync();
|
|
|
- //dto.SendBackOpinion = sendBack is { Id: not null } && !string.IsNullOrEmpty(sendBack.Content) ? sendBack.Content : string.Empty;
|
|
|
- }
|
|
|
+ dto.SendBackOpinion = string.IsNullOrEmpty(backTrace.Opinion) ? string.Empty : backTrace.Opinion.Replace("流程归档", "");
|
|
|
+ //var sendBack = await _orderSendBackAuditRepository.Queryable().Where(x => x.OrderId == dto.Id).OrderByDescending(x => x.CreationTime).FirstAsync();
|
|
|
+ //dto.SendBackOpinion = sendBack is { Id: not null } && !string.IsNullOrEmpty(sendBack.Content) ? sendBack.Content : string.Empty;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //工单是否在退回审批中
|
|
|
+ if (await _orderSendBackAuditRepository.AnyAsync(x => x.OrderId == order.Id && x.State == ESendBackAuditState.Apply, HttpContext.RequestAborted))
|
|
|
+ {
|
|
|
+ dto.IsReturnUnderApproval = true;
|
|
|
}
|
|
|
|
|
|
return dto;
|
|
@@ -2981,8 +3099,8 @@ public class OrderController : BaseController
|
|
|
if (dto.Files.Any())
|
|
|
order.FileJson = await _fileRepository.AddFileAsync(dto.Files, order.Id, "", HttpContext.RequestAborted);
|
|
|
else
|
|
|
- order.FileJson = new List<Share.Dtos.File.FileJson>();
|
|
|
- await _orderRepository.UpdateNav(order).Include(d => d.OrderExtension).ExecuteCommandAsync();
|
|
|
+ order.FileJson = new List<Share.Dtos.File.FileJson>();
|
|
|
+ await _orderRepository.UpdateNav(order).Include(d => d.OrderExtension).ExecuteCommandAsync();
|
|
|
//敏感分词
|
|
|
await _orderApplication.OrderSensitiveParticiple(dto.Content, order.Id, HttpContext.RequestAborted);
|
|
|
// 副本工单
|
|
@@ -3002,6 +3120,8 @@ public class OrderController : BaseController
|
|
|
[HttpPost("startflow")]
|
|
|
public async Task StartFlow([FromBody] OrderStartFlowDto dto)
|
|
|
{
|
|
|
+ var order = await _orderDomainService.GetOrderAsync(dto.Data, cancellationToken: HttpContext.RequestAborted);
|
|
|
+
|
|
|
ExpiredTimeWithConfig expiredTimeConfig;
|
|
|
if (dto.Workflow.NextHandlers.Any(d => d.Key == "001171" || d.Key == "001178"))
|
|
|
{
|
|
@@ -3031,21 +3151,10 @@ public class OrderController : BaseController
|
|
|
else
|
|
|
{
|
|
|
//期满时间
|
|
|
- expiredTimeConfig = _timeLimitDomainService.CalcExpiredTime(DateTime.Now, EFlowDirection.CenterToOrg, dto.Data.AcceptTypeCode);
|
|
|
+ expiredTimeConfig = _timeLimitDomainService.CalcExpiredTime(DateTime.Now, EFlowDirection.CenterToOrg, order.AcceptTypeCode);
|
|
|
}
|
|
|
|
|
|
- _mapper.Map(expiredTimeConfig, dto.Data);
|
|
|
-
|
|
|
- var id = dto.Data.Id;
|
|
|
- var isAdd = string.IsNullOrEmpty(dto.Data.Id);
|
|
|
- if (isAdd)
|
|
|
- {
|
|
|
- id = await Add(dto.Data);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- await Update(dto.Data);
|
|
|
- }
|
|
|
+ _mapper.Map(expiredTimeConfig, order);
|
|
|
|
|
|
try
|
|
|
{
|
|
@@ -3059,34 +3168,32 @@ public class OrderController : BaseController
|
|
|
|
|
|
var startDto = _mapper.Map<StartWorkflowDto>(dto.Workflow);
|
|
|
startDto.DefinitionModuleCode = WorkflowModuleConsts.OrderHandle;
|
|
|
- startDto.Title = dto.Data.Title;
|
|
|
- await _workflowApplication.StartWorkflowAsync(startDto, _sessionContext, id, dto.Data.ExpiredTime, HttpContext.RequestAborted);
|
|
|
+ startDto.Title = order.Title;
|
|
|
+ await _workflowApplication.StartWorkflowAsync(startDto, _sessionContext, order.Id, order.ExpiredTime, HttpContext.RequestAborted);
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
{
|
|
|
_logger.LogError($"工单开启流程失败!, {e.Message}, {e.StackTrace}");
|
|
|
- if (isAdd)
|
|
|
- await Remove(id);
|
|
|
throw new UserFriendlyException($"工单开启流程失败!, {e.Message}, {e.StackTrace}", "工单开启流程失败");
|
|
|
}
|
|
|
|
|
|
- //是否市州互转
|
|
|
- if (dto.Data.Transpond.HasValue && dto.Data.Transpond.Value)
|
|
|
- {
|
|
|
- var order = await _orderRepository.GetAsync(id, HttpContext.RequestAborted);
|
|
|
- var orderDto = _mapper.Map<OrderDto>(order);
|
|
|
- await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderTranspondCity, orderDto);
|
|
|
- //保存本地数据
|
|
|
- TranspondCityRawData cityRawData = new TranspondCityRawData
|
|
|
- {
|
|
|
- OrderCode = order.No,
|
|
|
- TransferOutTime = DateTime.Now,
|
|
|
- CityName = order.TranspondCityName,
|
|
|
- Direction = ETranspondDirection.Out
|
|
|
- };
|
|
|
-
|
|
|
- await _transpondCityRawDataRepository.AddAsync(cityRawData, HttpContext.RequestAborted);
|
|
|
- }
|
|
|
+ ////是否市州互转
|
|
|
+ //if (dto.Data.Transpond.HasValue && dto.Data.Transpond.Value)
|
|
|
+ //{
|
|
|
+ // var order = await _orderRepository.GetAsync(id, HttpContext.RequestAborted);
|
|
|
+ // var orderDto = _mapper.Map<OrderDto>(order);
|
|
|
+ // await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderTranspondCity, orderDto);
|
|
|
+ // //保存本地数据
|
|
|
+ // TranspondCityRawData cityRawData = new TranspondCityRawData
|
|
|
+ // {
|
|
|
+ // OrderCode = order.No,
|
|
|
+ // TransferOutTime = DateTime.Now,
|
|
|
+ // CityName = order.TranspondCityName,
|
|
|
+ // Direction = ETranspondDirection.Out
|
|
|
+ // };
|
|
|
+
|
|
|
+ // await _transpondCityRawDataRepository.AddAsync(cityRawData, HttpContext.RequestAborted);
|
|
|
+ //}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -3140,6 +3247,8 @@ public class OrderController : BaseController
|
|
|
expiredTimeConfig.NearlyExpiredTime, expiredTimeConfig.NearlyExpiredTimeOne, dto.Opinion,
|
|
|
_sessionContext.RequiredUserId, _sessionContext.UserName,
|
|
|
canUpdateOrderSender);
|
|
|
+ //TODO 发送短信超期和即将超期
|
|
|
+
|
|
|
}
|
|
|
else if (dto.FlowDirection is EFlowDirection.CenterToOrg)
|
|
|
{
|
|
@@ -3151,6 +3260,8 @@ public class OrderController : BaseController
|
|
|
expiredTimeConfig.NearlyExpiredTime, expiredTimeConfig.NearlyExpiredTimeOne, dto.Opinion,
|
|
|
_sessionContext.RequiredUserId, _sessionContext.UserName,
|
|
|
canUpdateOrderSender);
|
|
|
+ //TODO 发送短信超期和即将超期
|
|
|
+
|
|
|
//写入质检
|
|
|
await _qualityApplication.AddQualityAsync(EQualitySource.Send, order.Id, HttpContext.RequestAborted);
|
|
|
}
|
|
@@ -3296,27 +3407,40 @@ public class OrderController : BaseController
|
|
|
//是否行政执法类工单
|
|
|
var IsOpenJudicialManagement = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.IsOpenJudicialManagement).SettingValue[0]);
|
|
|
//重点关注事件
|
|
|
- List<Kv> FocusOnEvents = new()
|
|
|
+ var FocusOnEvents = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.FocusOnEvent).ToList();
|
|
|
+ if (!IsOpenJudicialManagement)
|
|
|
{
|
|
|
- new Kv { Key = "0", Value = "紧急工单" },
|
|
|
- new Kv { Key = "1", Value = "形式主义工单" },
|
|
|
- new Kv { Key = "3", Value = "敏感类工单" }
|
|
|
- };
|
|
|
- if (IsOpenJudicialManagement)
|
|
|
- FocusOnEvents.Add(new Kv { Key = "2", Value = "行政执法类工单" });
|
|
|
+ var xingzhengzhifa = FocusOnEvents.FirstOrDefault(d => d.DicDataValue == "2");
|
|
|
+ if (xingzhengzhifa is not null)
|
|
|
+ FocusOnEvents.Remove(xingzhengzhifa);
|
|
|
+ }
|
|
|
+
|
|
|
+ //List<Kv> FocusOnEvents = new()
|
|
|
+ //{
|
|
|
+ // new Kv { Key = "0", Value = "紧急工单" },
|
|
|
+ // new Kv { Key = "1", Value = "形式主义工单" },
|
|
|
+ // new Kv { Key = "3", Value = "敏感类工单" }
|
|
|
+ //};
|
|
|
+ //if (IsOpenJudicialManagement)
|
|
|
+ // FocusOnEvents.Add(new Kv { Key = "2", Value = "行政执法类工单" });
|
|
|
+
|
|
|
+ ////todo 宜宾add 1,3
|
|
|
+ ////todo 自贡add 4
|
|
|
+ //FocusOnEvents.Add(new Kv { Key = "4", Value = "24小时办结" });
|
|
|
|
|
|
var rsp = new
|
|
|
{
|
|
|
TranspondCity = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.TranspondCity),
|
|
|
ChannelOptions = _sysDicDataCacheManager.GetSysDicDataCache(TimeLimitBaseDataConsts.SourceChannel),
|
|
|
AcceptTypeOptions = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.AcceptType),
|
|
|
- EmergencyLevelOptions = EnumExts.GetDescriptions<EEmergencyLevel>(),
|
|
|
+ //EmergencyLevelOptions = EnumExts.GetDescriptions<EEmergencyLevel>(),
|
|
|
PushTypeOptions = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.PushType),
|
|
|
GenderOptions = EnumExts.GetDescriptions<EGender>(),
|
|
|
IdentityTypeOptions = EnumExts.GetDescriptions<EIdentityType>(),
|
|
|
LicenceTypeOptions = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.LicenceType),
|
|
|
AgeRangeOptions = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.AgeRange),
|
|
|
OrderTypeOptions = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.OrderType),
|
|
|
+ OrderTags = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.OrderTag),
|
|
|
FocusOnEvents
|
|
|
};
|
|
|
return rsp;
|
|
@@ -3404,6 +3528,7 @@ public class OrderController : BaseController
|
|
|
.WhereIF(dto.IsProvince.HasValue, d => d.IsProvince == dto.IsProvince)
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Title.StartsWith(dto.Keyword))
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No == dto.No)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.AreaCode), d => d.AreaCode == dto.AreaCode)
|
|
|
.WhereIF(dto.IsCounterSign.HasValue && dto.IsCounterSign == true, d => d.CounterSignType.HasValue)
|
|
|
.WhereIF(dto.IsCounterSign.HasValue && dto.IsCounterSign == false, d => !d.CounterSignType.HasValue)
|
|
|
.WhereIF(dto.ExpiredOrAlmostOverdue.HasValue && dto.ExpiredOrAlmostOverdue == true,
|
|
@@ -3516,6 +3641,7 @@ public class OrderController : BaseController
|
|
|
.WhereIF(dto.IsHandled.HasValue, d => handleStatuses.Contains(d.Status))
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Title.StartsWith(dto.Keyword!))
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No == dto.No)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.AreaCode), d => d.AreaCode == dto.AreaCode)
|
|
|
.WhereIF(dto.IsCounterSign.HasValue && dto.IsCounterSign == true, d => d.CounterSignType.HasValue)
|
|
|
.WhereIF(dto.IsCounterSign.HasValue && dto.IsCounterSign == false, d => !d.CounterSignType.HasValue)
|
|
|
.WhereIF(dto.ExpiredOrAlmostOverdue.HasValue && dto.ExpiredOrAlmostOverdue == true,
|
|
@@ -3755,23 +3881,23 @@ public class OrderController : BaseController
|
|
|
.Includes(d => d.Workflow)
|
|
|
.FirstAsync(d => d.Id == workflow.ExternalId);
|
|
|
var (currentStep, prevStep, isOrgToCenter, isSecondToFirstOrgLevel) = await _workflowApplication.GetPreviousInformationAsync(
|
|
|
- dto.WorkflowId, _sessionContext.RequiredUserId, _sessionContext.RequiredOrgId, _sessionContext.Roles, HttpContext.RequestAborted);
|
|
|
- var audit = new OrderSendBackAudit
|
|
|
- {
|
|
|
- OrderId = workflow.ExternalId,
|
|
|
- State = ESendBackAuditState.Apply,
|
|
|
- Content = dto.Opinion,
|
|
|
- SendBackData = dto,
|
|
|
- ApplyOrgId = currentStep.AcceptorOrgId,
|
|
|
- ApplyOrgName = currentStep!.AcceptorOrgName,
|
|
|
- SendBackOrgId = prevStep.HandlerOrgId, //prevStep.AcceptorOrgId,
|
|
|
- SendBackOrgName = prevStep.HandlerOrgName, //prevStep!.AcceptorOrgName,
|
|
|
- WorkflowOrgId = _sessionContext.RequiredOrgId,
|
|
|
- WorkflowUserId = _sessionContext.RequiredUserId,
|
|
|
- WorkflowRoleIds = _sessionContext.Roles.ToList(),
|
|
|
- TraceId = currentStep.Id
|
|
|
+ dto.WorkflowId, _sessionContext.RequiredUserId, _sessionContext.RequiredOrgId, _sessionContext.Roles, HttpContext.RequestAborted);
|
|
|
+ var audit = new OrderSendBackAudit
|
|
|
+ {
|
|
|
+ OrderId = workflow.ExternalId,
|
|
|
+ State = ESendBackAuditState.Apply,
|
|
|
+ Content = dto.Opinion,
|
|
|
+ SendBackData = dto,
|
|
|
+ ApplyOrgId = currentStep.AcceptorOrgId,
|
|
|
+ ApplyOrgName = currentStep!.AcceptorOrgName,
|
|
|
+ SendBackOrgId = prevStep.HandlerOrgId, //prevStep.AcceptorOrgId,
|
|
|
+ SendBackOrgName = prevStep.HandlerOrgName, //prevStep!.AcceptorOrgName,
|
|
|
+ WorkflowOrgId = _sessionContext.RequiredOrgId,
|
|
|
+ WorkflowUserId = _sessionContext.RequiredUserId,
|
|
|
+ WorkflowRoleIds = _sessionContext.Roles.ToList(),
|
|
|
+ TraceId = currentStep.Id
|
|
|
};
|
|
|
- if (oneSendBack || twoSendBack)
|
|
|
+ if (oneSendBack || twoSendBack)
|
|
|
{
|
|
|
var sendBack = await _orderSendBackAuditRepository.Queryable()
|
|
|
.Where(x => x.OrderId == workflow.ExternalId && x.State == ESendBackAuditState.Apply).AnyAsync();
|
|
@@ -3784,16 +3910,16 @@ public class OrderController : BaseController
|
|
|
if (order.Workflow.IsInCountersign) throw UserFriendlyException.SameMessage("工单会签中,无法进行退回!");
|
|
|
if ((oneSendBack && isOrgToCenter) || (twoSendBack && isSecondToFirstOrgLevel))
|
|
|
{
|
|
|
-
|
|
|
+
|
|
|
await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { Status = EOrderStatus.SendBackAudit })
|
|
|
.Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
audit.State = ESendBackAuditState.End;
|
|
|
- audit.AuditUser ="默认通过";
|
|
|
+ audit.AuditUser = "默认通过";
|
|
|
audit.AuditTime = DateTime.Now;
|
|
|
- var flowDirection = await _workflowApplication.PreviousAsync(dto, HttpContext.RequestAborted);
|
|
|
+ var flowDirection = await _workflowApplication.PreviousAsync(dto, HttpContext.RequestAborted);
|
|
|
var processType = flowDirection == EFlowDirection.OrgToCenter || flowDirection == EFlowDirection.CenterToCenter
|
|
|
? EProcessType.Zhiban
|
|
|
: EProcessType.Jiaoban;
|
|
@@ -3804,10 +3930,10 @@ public class OrderController : BaseController
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- audit.State = ESendBackAuditState.End;
|
|
|
- audit.AuditUser = "默认通过";
|
|
|
- audit.AuditTime = DateTime.Now;
|
|
|
- var flowDirection = await _workflowApplication.PreviousAsync(dto, HttpContext.RequestAborted);
|
|
|
+ audit.State = ESendBackAuditState.End;
|
|
|
+ audit.AuditUser = "默认通过";
|
|
|
+ audit.AuditTime = DateTime.Now;
|
|
|
+ var flowDirection = await _workflowApplication.PreviousAsync(dto, HttpContext.RequestAborted);
|
|
|
var processType = flowDirection == EFlowDirection.OrgToCenter || flowDirection == EFlowDirection.CenterToCenter
|
|
|
? EProcessType.Zhiban
|
|
|
: EProcessType.Jiaoban;
|
|
@@ -3815,8 +3941,8 @@ public class OrderController : BaseController
|
|
|
.Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
|
|
|
//发送短信TODO
|
|
|
}
|
|
|
- await _orderSendBackAuditRepository.AddAsync(audit, HttpContext.RequestAborted);
|
|
|
- }
|
|
|
+ await _orderSendBackAuditRepository.AddAsync(audit, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 工单业务退回审批
|
|
@@ -3859,7 +3985,7 @@ public class OrderController : BaseController
|
|
|
//发送短信TODO
|
|
|
}
|
|
|
await _orderSendBackAuditRepository.UpdateAsync(sendBack, HttpContext.RequestAborted);
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 工单业务批量退回审批
|
|
@@ -4248,7 +4374,7 @@ public class OrderController : BaseController
|
|
|
cancellationToken: HttpContext.RequestAborted);
|
|
|
//}
|
|
|
await _workflowApplication.RecallAsync(recall, expiredTime.ExpiredTime, order.Status >= EOrderStatus.Filed, HttpContext.RequestAborted);
|
|
|
-
|
|
|
+
|
|
|
|
|
|
if (order != null && ("001171".Equals(model.OrgId) ||
|
|
|
"001178".Equals(model.OrgId) ||
|
|
@@ -4388,7 +4514,7 @@ public class OrderController : BaseController
|
|
|
|
|
|
var reTransactNum = order.ReTransactNum.HasValue ? order.ReTransactNum.Value + 1 : 1;
|
|
|
var Status = model.StepType == EStepType.Start ? EOrderStatus.BackToUnAccept : EOrderStatus.SendBack;
|
|
|
- await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType, ReTransactNum = reTransactNum, Status = Status }).Where(o => o.Id == order.Id)
|
|
|
+ await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType, ReTransactNum = reTransactNum, Status = Status }).Where(o => o.Id == order.Id)
|
|
|
.ExecuteCommandAsync(HttpContext.RequestAborted);
|
|
|
|
|
|
//var visit = await _orderVisitRepository.GetAsync(x => x.OrderId == dto.OrderId && x.VisitState != EVisitState.None);
|
|
@@ -4421,8 +4547,8 @@ public class OrderController : BaseController
|
|
|
if (dto.Files.Any())
|
|
|
special.ReplyFileJson = await _fileRepository.AddFileAsync(dto.Files, special.Id, "", HttpContext.RequestAborted);
|
|
|
else
|
|
|
- special.ReplyFileJson = new List<Share.Dtos.File.FileJson>();
|
|
|
- await _orderSpecialRepository.UpdateAsync(special, HttpContext.RequestAborted);
|
|
|
+ special.ReplyFileJson = new List<Share.Dtos.File.FileJson>();
|
|
|
+ await _orderSpecialRepository.UpdateAsync(special, HttpContext.RequestAborted);
|
|
|
var order = await _orderRepository.GetAsync(x => x.Id == special.OrderId);
|
|
|
if (special.State == 1)
|
|
|
{
|
|
@@ -4525,8 +4651,8 @@ public class OrderController : BaseController
|
|
|
if (dto.Files.Any())
|
|
|
special.ReplyFileJson = await _fileRepository.AddFileAsync(dto.Files, special.Id, "", HttpContext.RequestAborted);
|
|
|
else
|
|
|
- special.ReplyFileJson = new List<Share.Dtos.File.FileJson>();
|
|
|
- await _orderSpecialRepository.UpdateAsync(special, HttpContext.RequestAborted);
|
|
|
+ special.ReplyFileJson = new List<Share.Dtos.File.FileJson>();
|
|
|
+ await _orderSpecialRepository.UpdateAsync(special, HttpContext.RequestAborted);
|
|
|
var order = await _orderRepository.GetAsync(x => x.Id == special.OrderId);
|
|
|
if (special.State == 1)
|
|
|
{
|
|
@@ -4695,11 +4821,12 @@ public class OrderController : BaseController
|
|
|
d => d.Title.Contains(dto.Keyword!) || d.No.Contains(dto.Keyword!))
|
|
|
//.WhereIF(!string.IsNullOrEmpty(dto.Content), d => d.Content.Contains(dto.Content!))
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.AcceptType), d => d.AcceptTypeCode == dto.AcceptType)//受理类型
|
|
|
- //.WhereIF(dto.AcceptTypes.Any(), d => dto.AcceptTypes.Contains(d.AcceptTypeCode)) //受理类型
|
|
|
+ //.WhereIF(dto.AcceptTypes.Any(), d => dto.AcceptTypes.Contains(d.AcceptTypeCode)) //受理类型
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.Channel), d => d.SourceChannelCode == dto.Channel)//来源渠道
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.Hotspot), d => d.HotspotSpliceName != null && d.HotspotSpliceName.Contains(dto.Hotspot))
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.TransferPhone), d => d.TransferPhone.Contains(dto.TransferPhone!))
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.OrgName), d => d.CurrentHandleOrgName == dto.OrgName)//接办部门
|
|
|
+ //.WhereIF(!string.IsNullOrEmpty(dto.OrgId), d => d.CurrentHandleOrgId == dto.OrgId)//接办部门
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.OrgId), d => d.CurrentHandleOrgId == dto.OrgId)//接办部门
|
|
|
.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)
|