|
@@ -65,17 +65,9 @@ using XF.Domain.Repository;
|
|
|
using XF.Utility.EnumExtensions;
|
|
|
using Hotline.Application.Contracts.Validators.FlowEngine;
|
|
|
using Hotline.Authentications;
|
|
|
-using Microsoft.AspNetCore.Components;
|
|
|
-using Quartz.Simpl;
|
|
|
-using static Lucene.Net.Util.Fst.Util;
|
|
|
-using DocumentFormat.OpenXml.Spreadsheet;
|
|
|
-using System.Threading;
|
|
|
-using Hotline.Caching.Services;
|
|
|
-using Hotline.CallCenter.Calls;
|
|
|
-using Hotline.CallCenter.BlackLists;
|
|
|
-using Hotline.Share.Mq;
|
|
|
using Hotline.Share.Dtos.CallCenter;
|
|
|
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
|
|
+using Hotline.Share.Dtos.File;
|
|
|
+using NPOI.SS.Formula.Functions;
|
|
|
|
|
|
namespace Hotline.Api.Controllers;
|
|
|
|
|
@@ -288,12 +280,37 @@ public class OrderController : BaseController
|
|
|
|
|
|
#region 工单发布
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 发布代办(集合)
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("publish/items")]
|
|
|
+ public async Task<IList<PublishDto>> GetPublishOrderListAsync([FromQuery] QueryOrderPublishDto dto)
|
|
|
+ {
|
|
|
+ var query = _orderApplication.GetPublishOrderList(dto);
|
|
|
+ return (await query.ToFixedListAsync(dto.QueryIndex, 200, HttpContext.RequestAborted))
|
|
|
+ .Adapt<List<PublishDto>>();
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 发布代办
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("publish/count")]
|
|
|
+ public async Task<int> GetPublishOrderCount([FromQuery] QueryOrderPublishDto dto)
|
|
|
+ {
|
|
|
+ return await _orderApplication.GetPublishOrderList(dto).CountAsync(HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 查询(工单发布)
|
|
|
/// </summary>
|
|
|
/// <param name="dto"></param>
|
|
|
/// <returns></returns>
|
|
|
[HttpGet("publish")]
|
|
|
+ [Obsolete("前端不再调用,择机删除")]
|
|
|
public async Task<PagedDto<PublishDto>> PublishOrderList([FromQuery] QueryOrderPublishDto dto)
|
|
|
{
|
|
|
var (total, items) = await _orderRepository.Queryable()
|
|
@@ -314,8 +331,8 @@ public class OrderController : BaseController
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.FromPhone), d => d.FromPhone == dto.FromPhone) //来电号码
|
|
|
//.WhereIF(!string.IsNullOrEmpty(dto.PubMan),
|
|
|
// d => d.AcceptorName.Contains(dto.PubMan!) || d.AcceptorStaffNo.Contains(dto.PubMan!))
|
|
|
- //.WhereIF(dto.PubRange == EPublicState.Pub, d => d.OrderPublish.PublishState)
|
|
|
- //.WhereIF(dto.PubRange == EPublicState.NoPub, d => !d.OrderPublish.PublishState)
|
|
|
+ //.WhereIF(dto.PubRange == EPublicState.Pub, d => d.OrderPublish.PublishState)
|
|
|
+ //.WhereIF(dto.PubRange == EPublicState.NoPub, d => !d.OrderPublish.PublishState)
|
|
|
.WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == true, d => d.Source == ESource.ProvinceStraight)
|
|
|
.WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == false, d => d.Source != ESource.ProvinceStraight)
|
|
|
.WhereIF(dto.FiledType != null && dto.FiledType == FiledType.CenterFiled, d => d.ProcessType == EProcessType.Zhiban)
|
|
@@ -399,7 +416,7 @@ public class OrderController : BaseController
|
|
|
.OrderByDescending(m => m.CreationTime).FirstAsync(HttpContext.RequestAborted);
|
|
|
if (publishedDeleted != null && _sessionContext.RequiredUserId != publishedDeleted.CreatorId)
|
|
|
{
|
|
|
- throw UserFriendlyException.SameMessage($"改工单被取消发布过, 之前的发布人是 [{publishedDeleted.CreatorName}], 您不能发布;");
|
|
|
+ throw UserFriendlyException.SameMessage($"该工单被取消发布过, 之前的发布人是 [{publishedDeleted.CreatorName}], 您不能发布;");
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -593,7 +610,7 @@ public class OrderController : BaseController
|
|
|
.Select(x => new Kv { Key = x.DicDataValue, Value = x.DicDataName }).ToList()
|
|
|
};
|
|
|
var (idName, idNames) = await _workflowDomainService.GetHandleOrgsAsync(order.WorkflowId, HttpContext.RequestAborted);
|
|
|
- res.ActualHandleOrgName = new Kv() { Key=order.ActualHandleOrgCode, Value= order.ActualHandleOrgName };
|
|
|
+ res.ActualHandleOrgName = new Kv() { Key = order.ActualHandleOrgCode, Value = order.ActualHandleOrgName };
|
|
|
res.idNames = order.CounterSignType == null
|
|
|
? null
|
|
|
: idNames.Where(d => d.Key != idName.Key).ToList();
|
|
@@ -606,6 +623,7 @@ public class OrderController : BaseController
|
|
|
/// <param name="dto"></param>
|
|
|
/// <returns></returns>
|
|
|
[HttpGet("published")]
|
|
|
+ [Obsolete("前端不再调用,择机删除")]
|
|
|
public async Task<PagedDto<PublishedDto>> PublishedOrderList([FromQuery] PublishedPagedRequest dto)
|
|
|
{
|
|
|
var (total, items) = await _orderPublishRepository.Queryable()
|
|
@@ -638,6 +656,30 @@ public class OrderController : BaseController
|
|
|
return new PagedDto<PublishedDto>(total, _mapper.Map<IReadOnlyList<PublishedDto>>(items));
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 发布列表(集合)
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("published/items")]
|
|
|
+ public async Task<IList<PublishedDto>> GetPublishedOrderListAsync([FromQuery] PublishedPagedRequest dto)
|
|
|
+ {
|
|
|
+ var query = _orderApplication.GetPublishedOrder(dto);
|
|
|
+ return (await query.ToFixedListAsync(dto.QueryIndex, 200, HttpContext.RequestAborted))
|
|
|
+ .Adapt<List<PublishedDto>>();
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 发布列表(总条数)
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("published/count")]
|
|
|
+ public async Task<int> GetPublishedOrderCountAsync([FromQuery] PublishedPagedRequest dto)
|
|
|
+ {
|
|
|
+ return await _orderApplication.GetPublishedOrder(dto).CountAsync();
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 发布详情
|
|
|
/// </summary>
|
|
@@ -741,7 +783,8 @@ public class OrderController : BaseController
|
|
|
var users = await _userRepository.Queryable()
|
|
|
.Includes(d => d.Organization)
|
|
|
.Includes(d => d.Roles)
|
|
|
- .Where(d => d.Roles.Any(x => roles.Contains(x.Name)))
|
|
|
+ .WhereIF(!_appOptions.Value.IsZiGong, d => d.Roles.Any(x => roles.Contains(x.Name)))
|
|
|
+ .WhereIF(_appOptions.Value.IsZiGong, d => d.OrgId == OrgSeedData.CenterId)
|
|
|
.ToListAsync(HttpContext.RequestAborted);
|
|
|
return users.Select(d => new OrderMigrationHandler
|
|
|
{
|
|
@@ -865,9 +908,10 @@ public class OrderController : BaseController
|
|
|
(d.Order.ExpiredTime > d.Order.ActualHandleTime && d.Order.Status >= EOrderStatus.Filed)) //否 超期
|
|
|
.WhereIF(dto.StartTime.HasValue, d => d.VisitTime >= dto.StartTime)
|
|
|
.WhereIF(dto.EndTime.HasValue, d => d.VisitTime <= dto.EndTime)
|
|
|
- .WhereIF(dto.StartPublishTime.HasValue && dto.EndPublishTime.HasValue,d=> d.PublishTime>= dto.StartPublishTime && d.PublishTime <= dto.EndPublishTime) // 发布时间
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName),d=>d.Order.ActualHandleOrgName == dto.ActualHandleOrgName) //接办部门
|
|
|
- .OrderByDescending(x => x.PublishTime)
|
|
|
+ .WhereIF(dto.StartPublishTime.HasValue && dto.EndPublishTime.HasValue, d => d.PublishTime >= dto.StartPublishTime && d.PublishTime <= dto.EndPublishTime) // 发布时间
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName), d => d.Order.ActualHandleOrgName == dto.ActualHandleOrgName) //接办部门
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), d => d.Order.OrgLevelOneName.Contains(dto.OrgLevelOneName)) //一级部门
|
|
|
+ .OrderByDescending(x => x.PublishTime)
|
|
|
.WhereIF(dto.Channel.NotNullOrEmpty(), d => d.Order.SourceChannelCode == dto.Channel)
|
|
|
.OrderByDescending(d => d.PublishTime)
|
|
|
.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
@@ -887,16 +931,16 @@ public class OrderController : BaseController
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
[HttpGet("visit/basedata")]
|
|
|
- public Dictionary<string, dynamic> VisitBaseData()
|
|
|
- => _baseDataApplication
|
|
|
- .VisitType()
|
|
|
- .VoiceEvaluate()
|
|
|
- .SeatEvaluate()
|
|
|
- .VisitSatisfaction()
|
|
|
- .VisitManner()
|
|
|
- .VisitStateQuery()
|
|
|
- .SourceChannel()
|
|
|
- .Build();
|
|
|
+ public Dictionary<string, dynamic> VisitBaseData() => new Dictionary<string, dynamic>
|
|
|
+ {
|
|
|
+ { "seatEvaluate", EnumExts.GetDescriptions<ESeatEvaluate>() },
|
|
|
+ { "visitType", EnumExts.GetDescriptions<EVisitType>() },
|
|
|
+ { "voiceEvaluate", EnumExts.GetDescriptions<EVoiceEvaluate>() },
|
|
|
+ { "visitSatisfaction", _sysDicDataCacheManager.GetVisitSatisfaction().Where(m => m.DicDataValue != "-1").ToList() },
|
|
|
+ { "visitMananer", _sysDicDataCacheManager.VisitMananer.Where(x => x.DicDataValue != "-1").ToList() },
|
|
|
+ { "visitStateQuery", EnumExts.GetDescriptions<EVisitStateQuery>() },
|
|
|
+ { "sourceChannel", _sysDicDataCacheManager.SourceChannel }
|
|
|
+ };
|
|
|
|
|
|
/// <summary>
|
|
|
/// 回访详情
|
|
@@ -1162,12 +1206,21 @@ public class OrderController : BaseController
|
|
|
/// <returns></returns>
|
|
|
[HttpGet("visit/batch-basedata")]
|
|
|
public Dictionary<string, dynamic> VisitBatchBaseDat()
|
|
|
- => _baseDataApplication
|
|
|
- .SeatEvaluate()
|
|
|
- .DissatisfiedReason()
|
|
|
- .VisitSatisfaction()
|
|
|
- .VisitManner()
|
|
|
- .Build();
|
|
|
+ {
|
|
|
+ //return _baseDataApplication
|
|
|
+ // .SeatEvaluate()
|
|
|
+ // .DissatisfiedReason()
|
|
|
+ // .VisitSatisfaction()
|
|
|
+ // .VisitManner()
|
|
|
+ // .Build();
|
|
|
+ return new Dictionary<string, dynamic>
|
|
|
+ {
|
|
|
+ { "seatEvaluate", EnumExts.GetDescriptions<ESeatEvaluate>() },
|
|
|
+ { "dissatisfiedReason", _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.DissatisfiedReason) },
|
|
|
+ { "visitSatisfaction", _sysDicDataCacheManager.GetVisitSatisfaction() },
|
|
|
+ { "visitManner", _sysDicDataCacheManager.VisitMananer }
|
|
|
+ };
|
|
|
+ }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 扭转列表
|
|
@@ -1286,7 +1339,8 @@ public class OrderController : BaseController
|
|
|
var users = await _userRepository.Queryable()
|
|
|
.Includes(d => d.Organization)
|
|
|
.Includes(d => d.Roles)
|
|
|
- .Where(d => d.Roles.Any(x => roles.Contains(x.Name)))
|
|
|
+ .WhereIF(!_appOptions.Value.IsZiGong, d => d.Roles.Any(x => roles.Contains(x.Name)))
|
|
|
+ .WhereIF(_appOptions.Value.IsZiGong, d => d.OrgId == OrgSeedData.CenterId)
|
|
|
.ToListAsync(HttpContext.RequestAborted);
|
|
|
return users.Select(d => new OrderMigrationHandler
|
|
|
{
|
|
@@ -1311,60 +1365,66 @@ public class OrderController : BaseController
|
|
|
.ExecuteCommandAsync(HttpContext.RequestAborted);
|
|
|
}
|
|
|
|
|
|
- /// <summary>
|
|
|
- /// 部门满意度明细
|
|
|
- /// </summary>
|
|
|
- /// <param name="dto"></param>
|
|
|
- /// <returns></returns>
|
|
|
- [HttpGet("org-visitdetail-list")]
|
|
|
- public async Task<PagedDto<OrgVisitDetailListResp>> OrgVisitDetailList([FromQuery] OrgVisitDetailListReq dto)
|
|
|
- {
|
|
|
- var query = _orderRepository.OrgVisitDetailFiltrationList(dto);
|
|
|
- var (total, items) = await query.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
|
+ /// <summary>
|
|
|
+ /// 部门满意度明细
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("org-visitdetail-list")]
|
|
|
+ public async Task<PagedDto<OrgVisitDetailListResp>> OrgVisitDetailList([FromQuery] OrgVisitDetailListReq dto)
|
|
|
+ {
|
|
|
+ //特殊需求:管理员账号使用该查询条件查询的数据,与富顺的账号查询的数据一致;
|
|
|
+ var isAdmin = _orderDomainService.IsCheckAdmin();
|
|
|
+ var orgId = isAdmin ? "001059" : _sessionContext.RequiredOrgId;
|
|
|
+ var query = _orderRepository.OrgVisitDetailFiltrationList(dto, orgId);
|
|
|
+ var (total, items) = await query.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
|
|
|
|
- return new PagedDto<OrgVisitDetailListResp>(total, _mapper.Map<IReadOnlyList<OrgVisitDetailListResp>>(items));
|
|
|
- }
|
|
|
+ return new PagedDto<OrgVisitDetailListResp>(total, _mapper.Map<IReadOnlyList<OrgVisitDetailListResp>>(items));
|
|
|
+ }
|
|
|
|
|
|
- /// <summary>
|
|
|
- /// 部门满意度明细导出
|
|
|
- /// </summary>
|
|
|
- /// <param name="dto"></param>
|
|
|
- /// <returns></returns>
|
|
|
- [HttpPost("org-visitdetail-list-export")]
|
|
|
- public async Task<FileStreamResult> OrgVisitDetailListExport([FromBody] ExportExcelDto<OrgVisitDetailListReq> dto)
|
|
|
- {
|
|
|
- var query = _orderRepository.OrgVisitDetailFiltrationList(dto.QueryDto);
|
|
|
+ /// <summary>
|
|
|
+ /// 部门满意度明细导出
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("org-visitdetail-list-export")]
|
|
|
+ public async Task<FileStreamResult> OrgVisitDetailListExport([FromBody] ExportExcelDto<OrgVisitDetailListReq> dto)
|
|
|
+ {
|
|
|
+ //特殊需求:管理员账号使用该查询条件查询的数据,与富顺的账号查询的数据一致;
|
|
|
+ var isAdmin = _orderDomainService.IsCheckAdmin();
|
|
|
+ var orgId = isAdmin ? "001059" : _sessionContext.RequiredOrgId;
|
|
|
+ var query = _orderRepository.OrgVisitDetailFiltrationList(dto.QueryDto, orgId);
|
|
|
|
|
|
- List<OrgVisitDetailListResp> orders;
|
|
|
- if (dto.IsExportAll)
|
|
|
- {
|
|
|
- orders = await query.ToListAsync(HttpContext.RequestAborted);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
|
|
|
- orders = items;
|
|
|
- }
|
|
|
- dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
|
|
|
- var dtos = orders
|
|
|
- .Select(stu => _mapper.Map(stu, typeof(OrgVisitDetailListResp), dynamicClass))
|
|
|
- .Cast<object>()
|
|
|
- .ToList();
|
|
|
-
|
|
|
- var stream = ExcelHelper.CreateStream(dtos);
|
|
|
- return ExcelStreamResult(stream, "部门满意度明细");
|
|
|
- }
|
|
|
+ List<OrgVisitDetailListResp> orders;
|
|
|
+ if (dto.IsExportAll)
|
|
|
+ {
|
|
|
+ orders = await query.ToListAsync(HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
|
|
|
+ orders = items;
|
|
|
+ }
|
|
|
+ dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
|
|
|
+ var dtos = orders
|
|
|
+ .Select(stu => _mapper.Map(stu, typeof(OrgVisitDetailListResp), dynamicClass))
|
|
|
+ .Cast<object>()
|
|
|
+ .ToList();
|
|
|
|
|
|
- #endregion
|
|
|
+ var stream = ExcelHelper.CreateStream(dtos);
|
|
|
+ return ExcelStreamResult(stream, "部门满意度明细");
|
|
|
+ }
|
|
|
|
|
|
- #region 二次回访申请
|
|
|
+ #endregion
|
|
|
|
|
|
- /// <summary>
|
|
|
- /// 可二次回访申请列表
|
|
|
- /// </summary>
|
|
|
- /// <param name="dto"></param>
|
|
|
- /// <returns></returns>
|
|
|
- [HttpGet("visitapply/visitagainlist")]
|
|
|
+ #region 二次回访申请
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 可二次回访申请列表
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("visitapply/visitagainlist")]
|
|
|
public async Task<PagedDto<OrderCanVisitAgainDto>> OrderVisitAgainList([FromQuery] OrderVisitAgainListDto dto)
|
|
|
{
|
|
|
var (total, items) = await _orderVisitedDetailRepository.Queryable()
|
|
@@ -1782,7 +1842,7 @@ public class OrderController : BaseController
|
|
|
try
|
|
|
{
|
|
|
dto.NextWorkflow.WorkflowId = delay.WorkflowId;
|
|
|
- await _workflowApplication.NextAsync(dto.NextWorkflow, cancellationToken: HttpContext.RequestAborted);
|
|
|
+ await _workflowDomainService.NextAsync(_sessionContext, dto.NextWorkflow, cancellationToken: HttpContext.RequestAborted);
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
{
|
|
@@ -1903,14 +1963,14 @@ public class OrderController : BaseController
|
|
|
.WhereIF(dto.IsApply == true, d => d.DelayState != EDelayState.Examining)
|
|
|
.WhereIF(dto.IsApply == false, d => d.DelayState == EDelayState.Examining)
|
|
|
.WhereIF(dto.DelayState != null, d => d.DelayState == dto.DelayState)
|
|
|
- .WhereIF(dto.DataScope is 1, x => x.CreatorId == _sessionContext.RequiredUserId)
|
|
|
+ .WhereIF(dto.DataScope is 1, d => d.CreatorId == _sessionContext.RequiredUserId)
|
|
|
.WhereIF(dto.QueryDelayState is EQueryDelayState.Examining, d => d.DelayState == EDelayState.Examining)
|
|
|
.WhereIF(dto.QueryDelayState is EQueryDelayState.Pass, d => d.DelayState == EDelayState.Pass)
|
|
|
.WhereIF(dto.QueryDelayState is EQueryDelayState.NoPass, d => d.DelayState == EDelayState.NoPass)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.CurrentStepName),d=>d.Workflow != null && d.Workflow.ActualHandleStepName == dto.CurrentStepName) //当前节点
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.ActualHandlerName),d=>d.Workflow != null && d.Workflow.ActualHandlerName == dto.ActualHandlerName) // 审批人
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName),d=>d.Order.OrgLevelOneName == dto.OrgLevelOneName) //一级部门
|
|
|
- .WhereIF(dto.StartCreationTime.HasValue && dto.EndCreationTime.HasValue, d=>d.CreationTime >= dto.StartCreationTime && d.CreationTime <= dto.EndCreationTime) // 申请时间
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.CurrentStepName), d => !SqlFunc.IsNullOrEmpty(d.WorkflowId) && d.Workflow.ActualHandleStepName == dto.CurrentStepName) //当前节点
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.ActualHandlerName), d => !SqlFunc.IsNullOrEmpty(d.WorkflowId) && d.Workflow.ActualHandlerName == dto.ActualHandlerName) // 审批人
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), d => d.Order.OrgLevelOneName == dto.OrgLevelOneName) //一级部门
|
|
|
+ .WhereIF(dto.StartCreationTime.HasValue && dto.EndCreationTime.HasValue, d => d.CreationTime >= dto.StartCreationTime && d.CreationTime <= dto.EndCreationTime) // 申请时间
|
|
|
.OrderByDescending(d => d.ApplyDelayTime)
|
|
|
.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
|
|
|
@@ -2285,7 +2345,9 @@ public class OrderController : BaseController
|
|
|
try
|
|
|
{
|
|
|
dto.NextWorkflow.WorkflowId = screen.WorkflowId;
|
|
|
- await _workflowApplication.NextAsync(dto.NextWorkflow, cancellationToken: HttpContext.RequestAborted);
|
|
|
+ //await _workflowApplication.NextAsync(dto.NextWorkflow, cancellationToken: HttpContext.RequestAborted);
|
|
|
+ await _workflowDomainService.NextAsync(_sessionContext, dto.NextWorkflow,
|
|
|
+ cancellationToken: HttpContext.RequestAborted);
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
{
|
|
@@ -3763,9 +3825,23 @@ public class OrderController : BaseController
|
|
|
{
|
|
|
await AverageSendOrderAsync(nextDto, HttpContext.RequestAborted);
|
|
|
}
|
|
|
+ var flowStepHandler = nextDto.NextHandlers.FirstOrDefault();
|
|
|
+ await _orderRepository.Updateable().SetColumns(o => new Order()
|
|
|
+ {
|
|
|
+ CenterToOrgHandlerId = flowStepHandler.UserId,
|
|
|
+ CenterToOrgHandlerName = flowStepHandler.Username
|
|
|
+ }).Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
|
|
|
}
|
|
|
|
|
|
- await _workflowDomainService.NextAsync(_sessionContext, nextDto, order.ExpiredTime, isAutoFillSummaryOpinion, cancellationToken);
|
|
|
+ //if (workflowDto.BusinessType == EBusinessType.Seat)
|
|
|
+ //{
|
|
|
+ // await _orderRepository.Updateable().SetColumns(o => new Order()
|
|
|
+ // {
|
|
|
+ // Status = EOrderStatus.WaitForAccept
|
|
|
+ // }).Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
|
|
|
+ //}
|
|
|
+
|
|
|
+ await _workflowDomainService.NextAsync(_sessionContext, nextDto, order.ExpiredTime, isAutoFillSummaryOpinion, cancellationToken);
|
|
|
break;
|
|
|
case EOrderAssignMode.CrossLevel:
|
|
|
if (!orderHandleFlowDto.CrossSteps.Any())
|
|
@@ -3774,7 +3850,7 @@ public class OrderController : BaseController
|
|
|
orderHandleFlowDto.CrossSteps = orderHandleFlowDto.CrossSteps.OrderBy(d => d.Sort).ToList();
|
|
|
var stepCount = orderHandleFlowDto.CrossSteps.Count;
|
|
|
var unhandleSteps = new List<WorkflowStep> { startStep };
|
|
|
- for (int i = 0;i < stepCount;i++)
|
|
|
+ for (int i = 0; i < stepCount; i++)
|
|
|
{
|
|
|
var crossStep = orderHandleFlowDto.CrossSteps[i];
|
|
|
var tempSteps = new List<WorkflowStep>();
|
|
@@ -3922,13 +3998,6 @@ public class OrderController : BaseController
|
|
|
[HttpPost("endcs")]
|
|
|
public async Task EndCountersign([FromBody] EndCountersignDto dto)
|
|
|
{
|
|
|
- //var workflow = await _workflowDomainService.TerminalCountersignAsync(dto.CountersignId, HttpContext.RequestAborted);
|
|
|
- //var order = await _orderRepository.GetAsync(d => d.WorkflowId == workflow.Id, HttpContext.RequestAborted);
|
|
|
- //if (order is null)
|
|
|
- // throw new UserFriendlyException($"工单未开启流程, workflowId: {workflow.Id}");
|
|
|
- //order.UpdateHandlingStatus(workflow.IsInCountersign);
|
|
|
- //_mapper.Map(workflow, order);
|
|
|
- //await _orderRepository.UpdateAsync(order, HttpContext.RequestAborted);
|
|
|
await _orderApplication.EndCountersign(dto, HttpContext.RequestAborted);
|
|
|
}
|
|
|
|
|
@@ -4147,7 +4216,8 @@ public class OrderController : BaseController
|
|
|
query.WhereIF(dto.QueryType is 1, d => d.IsForwarded == false)
|
|
|
.WhereIF(dto.QueryType is 2, d => d.IsForwarded == true)
|
|
|
.Where(d => SqlFunc.Subqueryable<OrderSpecial>().Where(os => os.OrderId == d.Id && os.IsDeleted == false && os.SpecialType == ESpecialType.ReTransact)
|
|
|
- .NotAny());
|
|
|
+ .NotAny())
|
|
|
+ ;
|
|
|
}
|
|
|
|
|
|
var (total, items) = await query
|
|
@@ -4160,7 +4230,7 @@ public class OrderController : BaseController
|
|
|
.Where(d => SqlFunc.Subqueryable<OrderDelay>().Where(od => od.OrderId == d.Id && od.IsDeleted == false && od.DelayState == EDelayState.Examining).NotAny())
|
|
|
.Where(d => SqlFunc.Subqueryable<OrderSendBackAudit>().Where(osba => osba.OrderId == d.Id && osba.IsDeleted == false && osba.State == ESendBackAuditState.Apply)
|
|
|
.NotAny())
|
|
|
- .Where(d=> SqlFunc.Subqueryable<OrderSpecial>().Where(s=>s.OrderId == d.Id).NotAny() || SqlFunc.Subqueryable<OrderSpecial>().Where(s=> s.OrderId == d.Id && s.State > 0).Any())
|
|
|
+ .Where(d => SqlFunc.Subqueryable<OrderSpecial>().Where(s => s.OrderId == d.Id && s.State == 0 && s.IsDeleted == false ).NotAny())
|
|
|
.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)
|
|
@@ -4173,7 +4243,8 @@ public class OrderController : BaseController
|
|
|
.WhereIF(dto.ExpiredOrAlmostOverdue.HasValue && dto.ExpiredOrAlmostOverdue == false,
|
|
|
d => d.NearlyExpiredTime < DateTime.Now && d.ExpiredTime > DateTime.Now) //即将超期 未办
|
|
|
.Where(d => d.Source < ESource.MLSQ || d.Source > ESource.WZSC)
|
|
|
- .Where(d => d.Status != EOrderStatus.BackToProvince && d.Status < EOrderStatus.Filed)
|
|
|
+ .Where(d => d.Status != EOrderStatus.BackToProvince)
|
|
|
+ .WhereIF(!isHandledStep || _appOptions.Value.IsYiBin,d=>d.Status < EOrderStatus.Filed)
|
|
|
//.Where(d => SqlFunc.Subqueryable<OrderSpecial>().Where(os => os.OrderId == d.Id).NotAny())
|
|
|
//.Where(d => d.OrderSpecials.Any() == false || d.OrderSpecials.Any(s => s.State > 0))
|
|
|
.WhereIF(dto.StartTime.HasValue, d => d.StartTime >= dto.StartTime)
|
|
@@ -4217,48 +4288,14 @@ public class OrderController : BaseController
|
|
|
[HttpGet("waited/center")]
|
|
|
public async Task<PagedDto<OrderDto>> QueryWaitedForCenter([FromQuery] QueryOrderWaitedCenterDto dto)
|
|
|
{
|
|
|
- //if (dto.EndCreationTime.HasValue)
|
|
|
- // dto.EndCreationTime = dto.EndCreationTime.Value.AddDays(1).AddSeconds(-1);
|
|
|
- //if (dto.StartTimeEnd.HasValue)
|
|
|
- // dto.StartTimeEnd = dto.StartTimeEnd.Value.AddDays(1).AddSeconds(-1);
|
|
|
-
|
|
|
- //var (total, items) = await _orderRepository.Queryable()
|
|
|
- // //.LeftJoin<WorkflowStep>((d, step) => d.Id == step.ExternalId)
|
|
|
- // //.Where((d, step) =>
|
|
|
- // // ((string.IsNullOrEmpty(d.WorkflowId) && (string.IsNullOrEmpty(d.SignerId) || d.SignerId == _sessionContext.RequiredUserId)) ||
|
|
|
- // // (!string.IsNullOrEmpty(d.WorkflowId) &&
|
|
|
- // // ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) && step.HandlerId == _sessionContext.RequiredUserId) ||
|
|
|
- // // (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) && step.HandlerOrgId == _sessionContext.RequiredOrgId) ||
|
|
|
- // // (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) && _sessionContext.Roles.Contains(step.RoleId))) &&
|
|
|
- // // ( step.Status != EWorkflowStepStatus.Handled )
|
|
|
- // // )))
|
|
|
- // //.Where(d => d.Workflow.Steps.Any(s => s.Status < EWorkflowStepStatus.Handled && s.HandlerOrgId == OrgSeedData.CenterId))
|
|
|
- // .LeftJoin<WorkflowStep>((d, step) => d.Id == step.ExternalId)
|
|
|
- // .Where((d, step) => (step.Id == null || (step.HandlerOrgId == OrgSeedData.CenterId && step.Status < EWorkflowStepStatus.Handled)))
|
|
|
- // .Where(d => d.Source < ESource.MLSQ || d.Source > ESource.WZSC)
|
|
|
- // .Where(d => d.Status != EOrderStatus.BackToProvince && d.Status < EOrderStatus.Filed)
|
|
|
- // .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No!.Contains(dto.No!))
|
|
|
- // .WhereIF(!string.IsNullOrEmpty(dto.Title), d => d.Title!.Contains(dto.Title!))
|
|
|
- // .WhereIF(dto is { StCreationTime: not null, EndCreationTime: not null }, d => d.CreationTime >= dto.StCreationTime && d.CreationTime <= dto.EndCreationTime)
|
|
|
- // .WhereIF(dto is { StartTimeSt: not null, StartTimeEnd: not null }, d => d.StartTime >= dto.StartTimeSt && d.StartTime <= dto.StartTimeEnd)
|
|
|
- // .WhereIF(!string.IsNullOrEmpty(dto.StepName), d => d.ActualHandleStepName == dto.StepName)
|
|
|
- // .WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName), d => d.ActualHandleOrgName!.Contains(dto.ActualHandleOrgName!))
|
|
|
- // .WhereIF(dto.Status.HasValue, d => d.Status == dto.Status)
|
|
|
- // .WhereIF(!string.IsNullOrEmpty(dto.AcceptorName), d => d.AcceptorName!.Contains(dto.AcceptorName!))
|
|
|
- // .WhereIF(dto.ExpiredStatus is EExpiredStatus.Normal, d => DateTime.Now < d.NearlyExpiredTime)
|
|
|
- // .WhereIF(dto.ExpiredStatus is EExpiredStatus.GoingToExpired, d => DateTime.Now > d.NearlyExpiredTime && DateTime.Now < d.ExpiredTime)
|
|
|
- // .WhereIF(dto.ExpiredStatus is EExpiredStatus.Expired, d => DateTime.Now >= d.ExpiredTime)
|
|
|
- // .WhereIF(dto.IsUrgent.HasValue, d => d.IsUrgent == dto.IsUrgent.Value)
|
|
|
- // .OrderBy(d => d.Status)
|
|
|
- // .OrderBy(d => d.CreationTime, OrderByType.Desc)
|
|
|
- // .ToPagedListAsync(dto, HttpContext.RequestAborted);
|
|
|
-
|
|
|
var (total, items) = await _orderRepository.Queryable()
|
|
|
+ .Includes(d => d.Workflow.Steps)
|
|
|
.Where(d => SqlFunc.Subqueryable<WorkflowTrace>()
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.CenterToOrgHandlerName), step => step.BusinessType == EBusinessType.Send && step.HandlerName.Contains(dto.CenterToOrgHandlerName))
|
|
|
.Where(step => step.ExternalId == d.Id &&
|
|
|
step.HandlerOrgId == OrgSeedData.CenterId &&
|
|
|
- step.Status < EWorkflowStepStatus.Handled).Any() ||
|
|
|
- string.IsNullOrEmpty(d.WorkflowId)
|
|
|
+ step.Status < EWorkflowStepStatus.Handled).Any()
|
|
|
+ || (string.IsNullOrEmpty(d.WorkflowId) && string.IsNullOrEmpty(dto.CenterToOrgHandlerName))
|
|
|
)
|
|
|
.Where(d => d.Source < ESource.MLSQ || d.Source > ESource.WZSC)
|
|
|
.Where(d => d.Status != EOrderStatus.BackToProvince && d.Status < EOrderStatus.Filed)
|
|
@@ -4274,9 +4311,8 @@ public class OrderController : BaseController
|
|
|
.WhereIF(dto.ExpiredStatus is EExpiredStatus.Normal, d => DateTime.Now < d.NearlyExpiredTime)
|
|
|
.WhereIF(dto.ExpiredStatus is EExpiredStatus.GoingToExpired, d => DateTime.Now > d.NearlyExpiredTime && DateTime.Now < d.ExpiredTime)
|
|
|
.WhereIF(dto.ExpiredStatus is EExpiredStatus.Expired, d => DateTime.Now >= d.ExpiredTime)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.CenterToOrgHandlerName), d => d.CenterToOrgHandlerName == dto.CenterToOrgHandlerName)
|
|
|
+ //.WhereIF(!string.IsNullOrEmpty(dto.CenterToOrgHandlerName), d => d.CenterToOrgHandlerName.Contains(dto.CenterToOrgHandlerName))
|
|
|
.WhereIF(dto.IsUrgent.HasValue, d => d.IsUrgent == dto.IsUrgent!.Value)
|
|
|
- .OrderBy(d => d.Status)
|
|
|
.OrderByIF(string.IsNullOrEmpty(dto.SortField), d => d.CreationTime, OrderByType.Desc)
|
|
|
.OrderByIF(dto is { SortField: "startTime", SortRule: 0 }, d => d.StartTime, OrderByType.Asc) //受理时间升序
|
|
|
.OrderByIF(dto is { SortField: "startTime", SortRule: 1 }, d => d.StartTime, OrderByType.Desc) //受理时间降序
|
|
@@ -4446,7 +4482,7 @@ public class OrderController : BaseController
|
|
|
if (sendBack)
|
|
|
throw UserFriendlyException.SameMessage("当前工单已经生成退回记录");
|
|
|
|
|
|
- var specialAny = await _orderSpecialRepository.Queryable().Where(x => x.OrderId == dto.OrderId && x.State == 0)
|
|
|
+ var specialAny = await _orderSpecialRepository.Queryable().Where(x => x.OrderId == order.Id && x.State == 0)
|
|
|
.AnyAsync();
|
|
|
if (specialAny) throw UserFriendlyException.SameMessage("工单已存在待审批特提信息!");
|
|
|
if (order.Workflow.IsInCountersign) throw UserFriendlyException.SameMessage("工单会签中,无法进行退回!");
|
|
@@ -4471,6 +4507,11 @@ public class OrderController : BaseController
|
|
|
audit.State = ESendBackAuditState.End;
|
|
|
audit.AuditUser = "默认通过";
|
|
|
audit.AuditTime = DateTime.Now;
|
|
|
+ if (prevStep.BusinessType == EBusinessType.Send && dto.Handler != null)
|
|
|
+ {
|
|
|
+ await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { CenterToOrgHandlerId = dto.Handler.UserId, CenterToOrgHandlerName = dto.Handler.Username })
|
|
|
+ .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
var flowDirection = await _workflowApplication.PreviousAsync(dto, HttpContext.RequestAborted);
|
|
|
var processType = flowDirection == EFlowDirection.OrgToCenter || flowDirection == EFlowDirection.CenterToCenter
|
|
|
? EProcessType.Zhiban
|
|
@@ -4487,6 +4528,11 @@ public class OrderController : BaseController
|
|
|
audit.State = ESendBackAuditState.End;
|
|
|
audit.AuditUser = "默认通过";
|
|
|
audit.AuditTime = DateTime.Now;
|
|
|
+ if (prevStep.BusinessType == EBusinessType.Send && dto.Handler != null)
|
|
|
+ {
|
|
|
+ await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { CenterToOrgHandlerId = dto.Handler.UserId, CenterToOrgHandlerName = dto.Handler.Username })
|
|
|
+ .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
var flowDirection = await _workflowApplication.PreviousAsync(dto, HttpContext.RequestAborted);
|
|
|
var processType = flowDirection == EFlowDirection.OrgToCenter || flowDirection == EFlowDirection.CenterToCenter
|
|
|
? EProcessType.Zhiban
|
|
@@ -4495,6 +4541,7 @@ public class OrderController : BaseController
|
|
|
order.SendBackNum = order.SendBackNum.HasValue ? order.SendBackNum.Value + 1 : 1;
|
|
|
await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType, SendBackNum = order.SendBackNum })
|
|
|
.Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
|
|
|
+
|
|
|
//发送短信TODO
|
|
|
}
|
|
|
|
|
@@ -4542,6 +4589,8 @@ public class OrderController : BaseController
|
|
|
var handler = await _orderDomainService.AverageOrder(HttpContext.RequestAborted);
|
|
|
sendBack.SendBackData.Handler = handler;
|
|
|
}
|
|
|
+ await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { CenterToOrgHandlerId = sendBack.SendBackData.Handler.UserId, CenterToOrgHandlerName = sendBack.SendBackData.Handler.Username })
|
|
|
+ .Where(o => o.Id == sendBack.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -4612,6 +4661,8 @@ public class OrderController : BaseController
|
|
|
var handler = await _orderDomainService.AverageOrder(HttpContext.RequestAborted);
|
|
|
sendBack.SendBackData.Handler = handler;
|
|
|
}
|
|
|
+ await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { CenterToOrgHandlerId = sendBack.SendBackData.Handler.UserId, CenterToOrgHandlerName = sendBack.SendBackData.Handler.Username })
|
|
|
+ .Where(o => o.Id == sendBack.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -4644,7 +4695,7 @@ public class OrderController : BaseController
|
|
|
/// </summary>
|
|
|
/// <param name="dto"></param>
|
|
|
/// <returns></returns>
|
|
|
- [Permission(EPermission.OrderPreviousList)]
|
|
|
+ //[Permission(EPermission.OrderPreviousList)]
|
|
|
[HttpGet("order_previous_list")]
|
|
|
public async Task<PagedDto<SendBackDto>> AuditList([FromQuery] SendBackListDto dto)
|
|
|
{
|
|
@@ -5077,6 +5128,12 @@ public class OrderController : BaseController
|
|
|
var orderDto = _mapper.Map<OrderDto>(order);
|
|
|
await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderExpiredTimeUpdate, orderDto,
|
|
|
cancellationToken: HttpContext.RequestAborted);
|
|
|
+ if (dto.BusinessType == EBusinessType.Send && recall.NextHandlers.Any())
|
|
|
+ {
|
|
|
+ var flowStepHandler = recall.NextHandlers.FirstOrDefault();
|
|
|
+ await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { CenterToOrgHandlerId = flowStepHandler.UserId, CenterToOrgHandlerName = flowStepHandler.Username })
|
|
|
+ .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
//}
|
|
|
await _workflowApplication.RecallAsync(recall, expiredTime.ExpiredTime, order.Status >= EOrderStatus.Filed, EWorkflowTraceType.Recall,
|
|
|
HttpContext.RequestAborted);
|
|
@@ -5146,25 +5203,23 @@ public class OrderController : BaseController
|
|
|
[LogFilter("工单重办")]
|
|
|
public async Task Add([FromBody] OrderReTransactDto dto)
|
|
|
{
|
|
|
- var specialAny = await _orderSpecialRepository.Queryable().Where(x => x.OrderId == dto.OrderId && x.State == 0)
|
|
|
+ var order = await _orderRepository
|
|
|
+ .Queryable()
|
|
|
+ .Includes(d => d.Workflow)
|
|
|
+ .FirstAsync(d => d.Id == dto.OrderId);
|
|
|
+ if (order.Workflow.IsInCountersign) throw UserFriendlyException.SameMessage("工单会签中,无法进行重办!");
|
|
|
+ var specialAny = await _orderSpecialRepository.Queryable().Where(x => x.OrderId == dto.OrderId && x.State == 0)
|
|
|
.AnyAsync();
|
|
|
- if (specialAny) throw UserFriendlyException.SameMessage("工单已存在待审批特提信息!");
|
|
|
+ if (specialAny) throw UserFriendlyException.SameMessage(order.No + " 工单已存在待审批特提信息!");
|
|
|
|
|
|
var screen = await _orderScreenRepository.Queryable().Where(x => x.OrderId == dto.OrderId && (int)x.Status < 2).AnyAsync();
|
|
|
- if (screen) throw UserFriendlyException.SameMessage("工单存在甄别中的信息!");
|
|
|
+ if (screen) throw UserFriendlyException.SameMessage(order.No + " 工单存在甄别中的信息!");
|
|
|
|
|
|
if (await _orderSendBackAuditRepository.AnyAsync(x => x.OrderId == dto.OrderId && x.State == ESendBackAuditState.Apply,
|
|
|
HttpContext.RequestAborted))
|
|
|
{
|
|
|
- throw UserFriendlyException.SameMessage("该工单存在正在审核中的退回,不能办理");
|
|
|
+ throw UserFriendlyException.SameMessage(order.No + " 工单存在正在审核中的退回,不能办理");
|
|
|
}
|
|
|
-
|
|
|
- var order = await _orderRepository
|
|
|
- .Queryable()
|
|
|
- .Includes(d => d.Workflow)
|
|
|
- .FirstAsync(d => d.Id == dto.OrderId);
|
|
|
- if (order.Workflow.IsInCountersign) throw UserFriendlyException.SameMessage("工单会签中,无法进行重办!");
|
|
|
-
|
|
|
var model = _mapper.Map<OrderSpecial>(dto);
|
|
|
|
|
|
var workflow = await _workflowDomainService.GetWorkflowAsync(order.WorkflowId, withSteps: true,
|
|
@@ -5264,6 +5319,14 @@ public class OrderController : BaseController
|
|
|
var processType = dto.FlowDirection is EFlowDirection.OrgToCenter or EFlowDirection.CenterToCenter or EFlowDirection.FiledToCenter
|
|
|
? EProcessType.Zhiban
|
|
|
: EProcessType.Jiaoban;
|
|
|
+
|
|
|
+ if (dto.BusinessType == EBusinessType.Send && recall.NextHandlers.Any())
|
|
|
+ {
|
|
|
+ var flowStepHandler = recall.NextHandlers.FirstOrDefault();
|
|
|
+ await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { CenterToOrgHandlerId = flowStepHandler.UserId, CenterToOrgHandlerName = flowStepHandler.Username })
|
|
|
+ .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+
|
|
|
await _workflowApplication.RecallAsync(recall, endTime, order.Status >= EOrderStatus.Filed, EWorkflowTraceType.Redo,
|
|
|
HttpContext.RequestAborted);
|
|
|
//var publish = await _orderPublishRepository.GetAsync(x => x.OrderId == dto.OrderId);
|
|
@@ -5407,7 +5470,13 @@ public class OrderController : BaseController
|
|
|
await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderExpiredTimeUpdate, orderDto,
|
|
|
cancellationToken: HttpContext.RequestAborted);
|
|
|
//}
|
|
|
-
|
|
|
+ if (special.BusinessType == EBusinessType.Send && recall.NextHandlers.Any())
|
|
|
+ {
|
|
|
+ var flowStepHandler = recall.NextHandlers.FirstOrDefault();
|
|
|
+ await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { CenterToOrgHandlerId = flowStepHandler.UserId, CenterToOrgHandlerName = flowStepHandler.Username })
|
|
|
+ .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+
|
|
|
//todo 特提重办,按审批通过时间依据中心派至部门的规则计算期满时间,更新order
|
|
|
|
|
|
await _workflowApplication.RecallAsync(recall, expiredTime.ExpiredTime, order.Status >= EOrderStatus.Filed, EWorkflowTraceType.Recall,
|
|
@@ -5554,8 +5623,13 @@ public class OrderController : BaseController
|
|
|
var orderDto = _mapper.Map<OrderDto>(order);
|
|
|
await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderExpiredTimeUpdate, orderDto,
|
|
|
cancellationToken: HttpContext.RequestAborted);
|
|
|
- //}
|
|
|
-
|
|
|
+ //}
|
|
|
+ if (special.BusinessType == EBusinessType.Send && recall.NextHandlers.Any())
|
|
|
+ {
|
|
|
+ var flowStepHandler = recall.NextHandlers.FirstOrDefault();
|
|
|
+ await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { CenterToOrgHandlerId = flowStepHandler.UserId, CenterToOrgHandlerName = flowStepHandler.Username })
|
|
|
+ .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
//todo 特提重办,按审批通过时间依据中心派至部门的规则计算期满时间,更新order
|
|
|
|
|
|
await _workflowApplication.RecallAsync(recall, expiredTime.ExpiredTime, order.Status >= EOrderStatus.Filed, EWorkflowTraceType.Recall,
|
|
@@ -5803,7 +5877,7 @@ public class OrderController : BaseController
|
|
|
var order = await _orderRepository.GetAsync(id, HttpContext.RequestAborted);
|
|
|
var isInstaShot = order.SourceChannel.Contains("随手拍");
|
|
|
var defaultStepKey = string.Empty;
|
|
|
- List<Kv> orgs = new();
|
|
|
+ List<Kv> orgs = new();
|
|
|
if (order == null) throw UserFriendlyException.SameMessage("无效工单信息!");
|
|
|
//中心会签调取方法
|
|
|
var org = await _workflowDomainService.GetLevelOneOrgsAsync(order.WorkflowId, HttpContext.RequestAborted);
|
|
@@ -5811,14 +5885,14 @@ public class OrderController : BaseController
|
|
|
var step = await _workflowApplication.GetRecallStepsAsync(order.WorkflowId, HttpContext.RequestAborted);
|
|
|
if (_appOptions.Value.IsZiGong)
|
|
|
{
|
|
|
- step.Steps = step.Steps.Where(x => x.Key.ToLower() != "start").ToList();
|
|
|
- if (step.Steps.Where(x => x.BusinessType == EBusinessType.Department && x.OrgLevel == 1 ).Any())
|
|
|
- {
|
|
|
- var stepdDefault = step.Steps.Where(x => x.BusinessType == EBusinessType.Department && x.OrgLevel == 1)
|
|
|
- .FirstOrDefault();
|
|
|
- defaultStepKey = stepdDefault.Key;
|
|
|
- }
|
|
|
- }
|
|
|
+ step.Steps = step.Steps.Where(x => x.Key.ToLower() != "start").ToList();
|
|
|
+ if (step.Steps.Where(x => x.BusinessType == EBusinessType.Department && x.OrgLevel == 1).Any())
|
|
|
+ {
|
|
|
+ var stepdDefault = step.Steps.Where(x => x.BusinessType == EBusinessType.Department && x.OrgLevel == 1)
|
|
|
+ .FirstOrDefault();
|
|
|
+ defaultStepKey = stepdDefault.Key;
|
|
|
+ }
|
|
|
+ }
|
|
|
//获取部门信息
|
|
|
var rsp = new
|
|
|
{
|
|
@@ -5832,20 +5906,87 @@ public class OrderController : BaseController
|
|
|
Step = step,
|
|
|
Orgs = orgs,
|
|
|
DefaultStepKey = defaultStepKey
|
|
|
- };
|
|
|
+ };
|
|
|
return rsp;
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 部门批量重提 该部门及下级部门回访结果 不满意 未评价 视为满意
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("org_batch_special")]
|
|
|
+ [AllowAnonymous]
|
|
|
+ public async Task OrgBatchSpecial([FromBody] OrgBatchSpecialDto model)
|
|
|
+ {
|
|
|
+ //部门信息
|
|
|
+ var org = await _organizeRepository.Queryable().Where(o => o.Id == model.OrgId).FirstAsync(HttpContext.RequestAborted);
|
|
|
+ if (org is null)
|
|
|
+ throw UserFriendlyException.SameMessage("部门信息不存在 请检查部门信息是否正确!");
|
|
|
+ //用户信息 && !u.Name.Contains("测试")
|
|
|
+ var user = await _userRepository.Queryable().Where(u => u.OrgId == model.OrgId).FirstAsync(HttpContext.RequestAborted);
|
|
|
+ if (user is null)
|
|
|
+ throw UserFriendlyException.SameMessage("用户信息不存在 请检查部门下用户信息是否正确!");
|
|
|
+ //工单信息 中心会签件不处理
|
|
|
+ var orders = await _orderRepository.Queryable(isAdmin: true)
|
|
|
+ .Includes(o=>o.Workflow)
|
|
|
+ .Includes(o=>o.OrderVisits)
|
|
|
+ .Where(o=> (o.CounterSignType == null || o.CounterSignType == ECounterSignType.Department) && o.OrderVisits.Any(ov=> ov.VisitState == EVisitState.Visited &&
|
|
|
+ ov.VisitTime >= model.StartTime && ov.VisitTime <= model.EndTime &&
|
|
|
+ ov.OrderVisitDetails.Any(ord=> ord.VisitOrgCode.StartsWith(model.OrgId) &&
|
|
|
+ (SqlFunc.JsonField(ord.OrgProcessingResults, "Key") == "2" ||
|
|
|
+ SqlFunc.JsonField(ord.OrgProcessingResults, "Key") == "7" ||
|
|
|
+ SqlFunc.JsonField(ord.OrgProcessingResults, "Key") == "-1" )
|
|
|
+ ))).ToListAsync();
|
|
|
+ if (!orders.Any())
|
|
|
+ throw UserFriendlyException.SameMessage(org.Name + " 部门及下级部门不存在回访结果为不满意、未评价、视为满意的工单!");
|
|
|
+ foreach (var order in orders)
|
|
|
+ {
|
|
|
+ var nextStep = await _workflowStepRepository.Queryable().Where(step =>
|
|
|
+ step.WorkflowId == order.WorkflowId && step.HandlerOrgId == model.OrgId &&
|
|
|
+ step.StepType == EStepType.Normal).OrderByDescending(step => step.CreationTime)
|
|
|
+ .FirstAsync(HttpContext.RequestAborted);
|
|
|
+ if (nextStep is null)
|
|
|
+ continue;
|
|
|
+ var dto = new OrderReTransactDto
|
|
|
+ {
|
|
|
+ AlterTime = true,
|
|
|
+ BusinessType = EBusinessType.Department,
|
|
|
+ FlowDirection = EFlowDirection.FiledToOrg,
|
|
|
+ HandlerType = EHandlerType.OrgLevel,
|
|
|
+ NextHandlers = new List<FlowStepHandler>()
|
|
|
+ {
|
|
|
+ new FlowStepHandler
|
|
|
+ {
|
|
|
+ UserId = user.Id, Username = user.Name, Key = org.Id, Value = org.Name, OrgId = org.Id,
|
|
|
+ OrgName = org.Name
|
|
|
+ }
|
|
|
+ },
|
|
|
+ NextStepCode = nextStep.Code,
|
|
|
+ NextStepName = nextStep.Name,
|
|
|
+ OrderId = order.Id,
|
|
|
+ Cause = "不满意二次办理",
|
|
|
+ Reason = "部门回访不满意 批量特提",
|
|
|
+ SpecialType = ESpecialType.SendBack,
|
|
|
+ StepType = EStepType.Normal,
|
|
|
+ TimeLimit = 5,
|
|
|
+ TimeLimitUnit = ETimeType.WorkDay,
|
|
|
+ WorkflowId = order.WorkflowId
|
|
|
+ };
|
|
|
+ await Add(dto);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
#endregion
|
|
|
|
|
|
- #region 市民信息
|
|
|
+ #region 市民信息
|
|
|
|
|
|
- /// <summary>
|
|
|
- /// 新增市民信息
|
|
|
- /// </summary>
|
|
|
- /// <param name="dtos"></param>
|
|
|
- /// <returns></returns>
|
|
|
- [HttpPost("citizen")]
|
|
|
+ /// <summary>
|
|
|
+ /// 新增市民信息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dtos"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("citizen")]
|
|
|
[LogFilter("新增市民信息")]
|
|
|
public async Task Add([FromBody] CitizenAddDto dto)
|
|
|
{
|
|
@@ -6535,7 +6676,7 @@ public class OrderController : BaseController
|
|
|
/// </summary>
|
|
|
/// <param name="dto"></param>
|
|
|
/// <returns></returns>
|
|
|
- [HttpGet("order/about_expire/list_count")]
|
|
|
+ [HttpGet("order/about_expire/list_count")]
|
|
|
public async Task<int> AboutListCountAsnc([FromQuery] AboutToExpireListDto dto)
|
|
|
{
|
|
|
var version = _systemSettingCacheManager.GetAboutToExpireVersion;
|
|
@@ -7524,6 +7665,12 @@ public class OrderController : BaseController
|
|
|
.SetColumns(o => new Orders.Order() { Status = status, SignerId = dto.Handler.UserId })
|
|
|
.Where(o => o.Id == dto.OrderId).ExecuteCommandAsync(HttpContext.RequestAborted);
|
|
|
}
|
|
|
+ else if (step.BusinessType == EBusinessType.Send)
|
|
|
+ {
|
|
|
+ await _orderRepository.Updateable()
|
|
|
+ .SetColumns(o => new Orders.Order() { Status = status, CenterToOrgHandlerId = dto.Handler.UserId, CenterToOrgHandlerName = dto.Handler.Username })
|
|
|
+ .Where(o => o.Id == dto.OrderId).ExecuteCommandAsync(HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
else
|
|
|
{
|
|
|
await _orderRepository.Updateable()
|