|
@@ -7,8 +7,6 @@ using Hotline.Application.Orders;
|
|
|
using Hotline.Application.Quality;
|
|
|
using Hotline.Application.Systems;
|
|
|
using Hotline.Caching.Interfaces;
|
|
|
-using Hotline.Caching.Services;
|
|
|
-using Hotline.CallCenter.Calls;
|
|
|
using Hotline.Configurations;
|
|
|
using Hotline.ContingencyManagement.Notifies;
|
|
|
using Hotline.EventBus;
|
|
@@ -32,7 +30,6 @@ using Hotline.Settings.Hotspots;
|
|
|
using Hotline.Settings.TimeLimitDomain;
|
|
|
using Hotline.Settings.TimeLimits;
|
|
|
using Hotline.Share.Dtos;
|
|
|
-using Hotline.Share.Dtos.CallCenter;
|
|
|
using Hotline.Share.Dtos.FlowEngine;
|
|
|
using Hotline.Share.Dtos.FlowEngine.Workflow;
|
|
|
using Hotline.Share.Dtos.Order;
|
|
@@ -44,7 +41,6 @@ using Hotline.Share.Enums.CallCenter;
|
|
|
using Hotline.Share.Enums.FlowEngine;
|
|
|
using Hotline.Share.Enums.Order;
|
|
|
using Hotline.Share.Enums.Push;
|
|
|
-using Hotline.Share.Enums.Quality;
|
|
|
using Hotline.Share.Enums.Settings;
|
|
|
using Hotline.Share.Mq;
|
|
|
using Hotline.Share.Requests;
|
|
@@ -59,18 +55,14 @@ using Microsoft.AspNetCore.Authorization;
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
using Microsoft.Extensions.Options;
|
|
|
using MiniExcelLibs;
|
|
|
-using MongoDB.Driver;
|
|
|
using SqlSugar;
|
|
|
-using StackExchange.Redis;
|
|
|
using System.Text;
|
|
|
-using System.Threading.Tasks;
|
|
|
using XF.Domain.Authentications;
|
|
|
using XF.Domain.Cache;
|
|
|
using XF.Domain.Entities;
|
|
|
using XF.Domain.Exceptions;
|
|
|
using XF.Domain.Repository;
|
|
|
using XF.Utility.EnumExtensions;
|
|
|
-using static NPOI.SS.Format.CellNumberFormatter;
|
|
|
|
|
|
namespace Hotline.Api.Controllers;
|
|
|
|
|
@@ -143,6 +135,7 @@ public class OrderController : BaseController
|
|
|
private readonly ICalcExpireTime _expireTime;
|
|
|
private readonly IRepository<OrderPushType> _orderPushTypeRepository;
|
|
|
private readonly IOptions<CityBaseConfiguration> _cityBaseConfiguration;
|
|
|
+ private readonly IRepository<OrderRevoke> _orderRevokeRepository;
|
|
|
|
|
|
public OrderController(
|
|
|
IOrderDomainService orderDomainService,
|
|
@@ -207,7 +200,7 @@ public class OrderController : BaseController
|
|
|
IRepository<OrderPushType> orderPushTypeRepository,
|
|
|
ICallNativeRepository callNativeRepository,
|
|
|
ICallNativeApplication callNativeApplication,
|
|
|
- BaseDataApplication baseDataApplication)
|
|
|
+ IRepository<OrderRevoke> orderRevokeRepository)
|
|
|
{
|
|
|
_orderDomainService = orderDomainService;
|
|
|
_orderRepository = orderRepository;
|
|
@@ -270,7 +263,7 @@ public class OrderController : BaseController
|
|
|
_orderPushTypeRepository = orderPushTypeRepository;
|
|
|
_callNativeRepository = callNativeRepository;
|
|
|
_callNativeApplication = callNativeApplication;
|
|
|
- _baseDataApplication = baseDataApplication;
|
|
|
+ _orderRevokeRepository = orderRevokeRepository;
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
@@ -2848,6 +2841,8 @@ public class OrderController : BaseController
|
|
|
if (order == null) return new();
|
|
|
|
|
|
var dto = _mapper.Map<OrderDto>(order);
|
|
|
+ //处理中心意见
|
|
|
+ dto.CenterOpinion = order.CenterToOrgOpinion;
|
|
|
//班长代办-- 判断不是会签件 流程判断业务类型
|
|
|
//var setting = _systemSettingCacheManager.GetSetting(SettingConstants.SeatsMonitor);
|
|
|
//var settingStr = setting?.SettingValue;
|
|
@@ -3024,8 +3019,7 @@ public class OrderController : BaseController
|
|
|
{
|
|
|
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();
|
|
|
dto.OrderRemarks = remarks;
|
|
|
if (order.Status == EOrderStatus.SendBack || order.Status == EOrderStatus.SendBackAudit || order.Status == EOrderStatus.BackToUnAccept)
|
|
@@ -3041,7 +3035,35 @@ public class OrderController : BaseController
|
|
|
{
|
|
|
dto.IsReturnUnderApproval = true;
|
|
|
}
|
|
|
+ //省退回
|
|
|
+ var orderSendback = await _orderSendBackRepository.Queryable().Where(x => x.OrderId == order.Id).OrderByDescending(x => x.AuditTime).FirstAsync();
|
|
|
+ if (orderSendback is not null)
|
|
|
+ {
|
|
|
+ string stateStr = "";
|
|
|
+ // 0 待审核 1 审核通过 2 审核不通过
|
|
|
+ switch (orderSendback.State)
|
|
|
+ {
|
|
|
+ case 0:
|
|
|
+ stateStr = "待审核";
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ stateStr = "审核通过";
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ stateStr = "审核不通过";
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ stateStr = "未知";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ dto.ProvinceSendBackString = "该工单已向省平台发送退回申请!退回状态:" + stateStr;
|
|
|
+ }
|
|
|
|
|
|
+ var isProvinceorderRevoke = await _orderRevokeRepository.Queryable().AnyAsync(x => x.OrderId == order.Id && x.IsProRevoke == true);
|
|
|
+ if (isProvinceorderRevoke)
|
|
|
+ {
|
|
|
+ dto.ProvinceRevokeString = "该工单已由省平台发送撤单!请直接归档办理!";
|
|
|
+ }
|
|
|
|
|
|
return _sessionContext.OrgIsCenter ? dto : dto.DataMask();
|
|
|
}
|
|
@@ -3161,15 +3183,16 @@ public class OrderController : BaseController
|
|
|
// _logger.LogError("新增工单发送短信失败,Error:{err}", e.Message);
|
|
|
//}
|
|
|
|
|
|
- // 副本工单
|
|
|
- var copy = new OrderCopy();
|
|
|
- _mapper.Map(order, copy);
|
|
|
- copy.OrderId = order.Id;
|
|
|
- copy.AuditTime = DateTime.Now;
|
|
|
- copy.AuditUserId = _sessionContext.UserId;
|
|
|
- copy.AuditUserName = _sessionContext.UserName;
|
|
|
- copy.InitId();
|
|
|
- await _orderCopyRepository.AddAsync(copy, HttpContext.RequestAborted);
|
|
|
+ //2024-10-09 取消新增保存副本工单业务
|
|
|
+ //// 副本工单
|
|
|
+ //var copy = new OrderCopy();
|
|
|
+ //_mapper.Map(order, copy);
|
|
|
+ //copy.OrderId = order.Id;
|
|
|
+ //copy.AuditTime = DateTime.Now;
|
|
|
+ //copy.AuditUserId = _sessionContext.UserId;
|
|
|
+ //copy.AuditUserName = _sessionContext.UserName;
|
|
|
+ //copy.InitId();
|
|
|
+ //await _orderCopyRepository.AddAsync(copy, HttpContext.RequestAborted);
|
|
|
return new { Id = order.Id, No = order.No, Password = order.Password };
|
|
|
}
|
|
|
|
|
@@ -3245,9 +3268,19 @@ public class OrderController : BaseController
|
|
|
.FirstAsync(d => d.Id == dto.Id);
|
|
|
if (order == null)
|
|
|
throw UserFriendlyException.SameMessage("无效工单编号");
|
|
|
- if (order.Status > EOrderStatus.HandOverToUnAccept)
|
|
|
+ if (dto.IsEdit == false && order.Status > EOrderStatus.HandOverToUnAccept)
|
|
|
throw UserFriendlyException.SameMessage("工单已发起流程,不可编辑");
|
|
|
|
|
|
+ // 副本工单
|
|
|
+ var copy = new OrderCopy();
|
|
|
+ _mapper.Map(order, copy);
|
|
|
+ copy.OrderId = order.Id;
|
|
|
+ copy.AuditTime = DateTime.Now;
|
|
|
+ copy.AuditUserId = _sessionContext.UserId;
|
|
|
+ copy.AuditUserName = _sessionContext.UserName;
|
|
|
+ copy.InitId();
|
|
|
+ await _orderCopyRepository.AddAsync(copy, HttpContext.RequestAborted);
|
|
|
+
|
|
|
if (order.Content != dto.Content)
|
|
|
await _orderApplication.OrderParticiple(dto.Content, dto.Id, order.CreationTime, HttpContext.RequestAborted);
|
|
|
if (dto.RepeatableEventDetails?.Any() ?? false)
|
|
@@ -3269,6 +3302,11 @@ public class OrderController : BaseController
|
|
|
if (order.SourceChannelCode != AppDefaults.SourceChannel.DianHua)
|
|
|
order.CallId = null;
|
|
|
|
|
|
+ if (dto.IsEdit && !string.IsNullOrEmpty(dto.CenterOpinion) && order.CenterToOrgOpinion != dto.CenterOpinion)
|
|
|
+ order.CenterToOrgOpinion = dto.CenterOpinion;
|
|
|
+ if (dto.IsEdit && !string.IsNullOrEmpty(dto.FileOpinion) && order.FileOpinion != dto.FileOpinion)
|
|
|
+ order.FileOpinion = dto.FileOpinion;
|
|
|
+
|
|
|
if (dto.Files.Any())
|
|
|
order.FileJson = await _fileRepository.AddFileAsync(dto.Files, order.Id, "", HttpContext.RequestAborted);
|
|
|
else
|
|
@@ -3286,6 +3324,32 @@ public class OrderController : BaseController
|
|
|
var pushTypes = dto.OrderPushTypes.Select(x => x.PushType);
|
|
|
order.PushType = string.Join(",", pushTypes);
|
|
|
}
|
|
|
+
|
|
|
+ //处理工单的期满时间
|
|
|
+ //首先是工单编辑页面提交的、流程已经开启、工单未归档的工单才能修改期满时间
|
|
|
+ if (dto.IsEdit && !string.IsNullOrEmpty(order.WorkflowId) && order.Status < EOrderStatus.Filed && dto.AcceptTypeCode != order.AcceptTypeCode)
|
|
|
+ {
|
|
|
+ //自贡业务
|
|
|
+ if (_appOptions.Value.IsZiGong)
|
|
|
+ {
|
|
|
+ //查询当前工单的实际办理节点,如果在热线中心不处理,如果在部门需要更新期满时间
|
|
|
+ var workflow = await _workflowDomainService.GetWorkflowAsync(order.WorkflowId, withSteps: true, withTraces: true, cancellationToken: HttpContext.RequestAborted);
|
|
|
+ var nowWorkflow = workflow.Steps.Where(p => p.Id == order.ActualHandleStepId && p.BusinessType >= EBusinessType.Department && p.BusinessType <= EBusinessType.DepartmentLeader).FirstOrDefault();
|
|
|
+ //在部门、中心到部门的交办时间不为空
|
|
|
+ if (nowWorkflow != null && order.CenterToOrgTime.HasValue)
|
|
|
+ {
|
|
|
+ //自贡计算期满时间
|
|
|
+ ExpiredTimeWithConfig expiredTimeConfig = await _expireTime.CalcExpiredTime(order.CenterToOrgTime.Value, EFlowDirection.CenterToOrg, order.Adapt<OrderTimeClacInfo>());
|
|
|
+ if (expiredTimeConfig is not null && expiredTimeConfig.ExpiredTime > order.ExpiredTime)
|
|
|
+ {
|
|
|
+ order.ExpiredTime = expiredTimeConfig.ExpiredTime;
|
|
|
+ order.NearlyExpiredTime = expiredTimeConfig.NearlyExpiredTime;
|
|
|
+ order.NearlyExpiredTimeOne = expiredTimeConfig.NearlyExpiredTimeOne;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
await _orderRepository.UpdateNav(order).Include(d => d.OrderExtension).ExecuteCommandAsync();
|
|
|
|
|
|
//订阅此事件的内部处理工单数据只能更新各自业务的字段,不能全部更新
|
|
@@ -3295,15 +3359,7 @@ public class OrderController : BaseController
|
|
|
|
|
|
//敏感分词
|
|
|
await _orderApplication.OrderSensitiveParticiple(dto.Content, order.Id, HttpContext.RequestAborted);
|
|
|
- // 副本工单
|
|
|
- var copy = new OrderCopy();
|
|
|
- _mapper.Map(order, copy);
|
|
|
- copy.OrderId = order.Id;
|
|
|
- copy.AuditTime = DateTime.Now;
|
|
|
- copy.AuditUserId = _sessionContext.UserId;
|
|
|
- copy.AuditUserName = _sessionContext.UserName;
|
|
|
- copy.InitId();
|
|
|
- await _orderCopyRepository.AddAsync(copy, HttpContext.RequestAborted);
|
|
|
+
|
|
|
return new { Id = order.Id, No = order.No, Password = order.Password };
|
|
|
}
|
|
|
|
|
@@ -3685,7 +3741,10 @@ public class OrderController : BaseController
|
|
|
var (total, items) = await _orderRepository
|
|
|
.Queryable(hasHandled: isHandled, isAdmin: isAdmin)
|
|
|
.Includes(d => d.OrderSpecials)
|
|
|
- .Where(d => d.Status != EOrderStatus.WaitForAccept && d.Status != EOrderStatus.BackToUnAccept && d.Status != EOrderStatus.SpecialToUnAccept && d.Status != EOrderStatus.HandOverToUnAccept)
|
|
|
+ .Where(d => d.Status != EOrderStatus.WaitForAccept &&
|
|
|
+ d.Status != EOrderStatus.BackToUnAccept &&
|
|
|
+ d.Status != EOrderStatus.SpecialToUnAccept &&
|
|
|
+ d.Status != EOrderStatus.HandOverToUnAccept)
|
|
|
.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)
|
|
@@ -3707,58 +3766,6 @@ public class OrderController : BaseController
|
|
|
.OrderByDescending(d => new { d.IsUrgent, d.StartTime })
|
|
|
.ToPagedListAsync(dto, HttpContext.RequestAborted);
|
|
|
|
|
|
- //if (isHandled)
|
|
|
- //{
|
|
|
- // var (total, items) = await _orderRepository
|
|
|
- // .Queryable(hasHandled: isHandled)
|
|
|
- // .Includes(d => d.OrderSpecials)
|
|
|
- // .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(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, d => (d.ExpiredTime < DateTime.Now && d.Status < EOrderStatus.Filed) || (d.ExpiredTime < d.ActualHandleTime && d.Status >= EOrderStatus.Filed)) //超期 未办
|
|
|
- // .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 => 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)
|
|
|
- // .WhereIF(dto.EndTime.HasValue, d => d.StartTime <= dto.EndTime)
|
|
|
- // .WhereIF(dto.IsUrgent.HasValue, d => d.IsUrgent == dto.IsUrgent.Value)
|
|
|
- // .OrderByDescending(d => d.StartTime)
|
|
|
- // .ToPagedListAsync(dto, HttpContext.RequestAborted);
|
|
|
- // return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
|
|
|
- //}
|
|
|
- //else
|
|
|
- //{
|
|
|
- // var (total, items) = await _orderRepository.Queryable()
|
|
|
- // .Where(d => SqlFunc.Subqueryable<WorkflowTrace>()
|
|
|
- // .Where(step => step.ExternalId == d.Id && step.TraceState != EWorkflowTraceState.StepRemoveByPrevious &&
|
|
|
- // ((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).Any())
|
|
|
- // .Includes(d => d.OrderSpecials)
|
|
|
- // .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(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, d => (d.ExpiredTime < DateTime.Now && d.Status < EOrderStatus.Filed) || (d.ExpiredTime < d.ActualHandleTime && d.Status >= EOrderStatus.Filed)) //超期 未办
|
|
|
- // .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 => 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)
|
|
|
- // .WhereIF(dto.EndTime.HasValue, d => d.StartTime <= dto.EndTime)
|
|
|
- // .WhereIF(dto.IsUrgent.HasValue, d => d.IsUrgent == dto.IsUrgent.Value)
|
|
|
- // .OrderByDescending(d => d.StartTime)
|
|
|
-
|
|
|
- // .ToPagedListAsync(dto, HttpContext.RequestAborted);
|
|
|
- // return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
|
|
|
- //}
|
|
|
return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
|
|
|
}
|
|
|
|
|
@@ -3820,35 +3827,6 @@ public class OrderController : BaseController
|
|
|
.OrderByIF(dto.IsHandled == false, d => new { IsUrgent = d.IsUrgent, CreationTime = d.CreationTime }, OrderByType.Desc)
|
|
|
.ToPagedListAsync(dto, HttpContext.RequestAborted);
|
|
|
|
|
|
- //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))) &&
|
|
|
- // (((dto.IsHandled.HasValue && dto.IsHandled == false) && step.Status != EWorkflowStepStatus.Handled) ||
|
|
|
- // ((dto.IsHandled.HasValue && dto.IsHandled == true) && step.Status == EWorkflowStepStatus.Handled)))))
|
|
|
- // .WhereIF(dto.IsProvince.HasValue, d => d.IsProvince == dto.IsProvince)
|
|
|
- // .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(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, d => (d.ExpiredTime < DateTime.Now && d.Status < EOrderStatus.Filed) || (d.ExpiredTime < d.ActualHandleTime && d.Status >= EOrderStatus.Filed)) //超期 未办
|
|
|
- // .WhereIF(dto.ExpiredOrAlmostOverdue.HasValue && dto.ExpiredOrAlmostOverdue == false, d => d.NearlyExpiredTime < DateTime.Now && d.ExpiredTime > DateTime.Now)//即将超期 未办
|
|
|
- // .WhereIF(dto.StartTime.HasValue, d => d.CreationTime >= dto.StartTime)
|
|
|
- // .WhereIF(dto.EndTime.HasValue, d => d.CreationTime <= dto.EndTime)
|
|
|
- // .WhereIF(dto.IsUrgent.HasValue, d => d.IsUrgent == dto.IsUrgent.Value)
|
|
|
- // .Where(d => d.Source < ESource.MLSQ || d.Source > ESource.WZSC)
|
|
|
- // .Where(d => d.Status != EOrderStatus.BackToProvince && d.Status < EOrderStatus.Filed)
|
|
|
- // .OrderBy(d => d.Status)
|
|
|
- // .OrderByIF(dto.IsHandled == true, d => d.StartTime, OrderByType.Desc)
|
|
|
- // .OrderByIF(dto.IsHandled == false, d => d.CreationTime, OrderByType.Desc)
|
|
|
- // .Select((d, step) => d)
|
|
|
- // .ToPagedListAsync(dto, HttpContext.RequestAborted);
|
|
|
-
|
|
|
return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
|
|
|
}
|
|
|
|
|
@@ -4060,16 +4038,16 @@ public class OrderController : BaseController
|
|
|
TraceId = currentStep.Id
|
|
|
};
|
|
|
audit.InitId();
|
|
|
- if (dto.Files.Any())
|
|
|
- audit.FileJson = await _fileRepository.AddFileAsync(dto.Files, audit.Id, "", HttpContext.RequestAborted);
|
|
|
- if (_appOptions.Value.IsZiGong && prevStep.BusinessType == EBusinessType.Send)
|
|
|
+ if (dto.Files.Any())
|
|
|
+ audit.FileJson = await _fileRepository.AddFileAsync(dto.Files, audit.Id, "", HttpContext.RequestAborted);
|
|
|
+ if (_appOptions.Value.IsZiGong && prevStep.BusinessType == EBusinessType.Send)
|
|
|
{
|
|
|
// 平均派单
|
|
|
var averageSendOrder = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.AverageSendOrder).SettingValue[0]);
|
|
|
if (averageSendOrder)
|
|
|
{
|
|
|
var handler = await _orderDomainService.AverageOrder(HttpContext.RequestAborted);
|
|
|
- dto.NextHandlers = new List<FlowStepHandler> { handler };
|
|
|
+ dto.Handler = handler;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -4292,18 +4270,18 @@ public class OrderController : BaseController
|
|
|
[HttpGet("order_previous/{id}")]
|
|
|
public async Task<SendBackDto> OrderSendBackEntity(string id)
|
|
|
{
|
|
|
- var res = await _orderSendBackAuditRepository.Queryable()
|
|
|
+ var res = await _orderSendBackAuditRepository.Queryable()
|
|
|
.Includes(x => x.Order)
|
|
|
.FirstAsync(x => x.Id == id);
|
|
|
var resDto = _mapper.Map<SendBackDto>(res);
|
|
|
if (res.FileJson != null && res.FileJson.Any())
|
|
|
{
|
|
|
- var ids = res.FileJson.Select(x => x.Id).ToList();
|
|
|
- var files = await _fileRepository.GetFilesAsync(ids, HttpContext.RequestAborted);
|
|
|
- resDto.Files = files.Where(x => x.Classify == "退回附件" && string.IsNullOrEmpty(x.FlowKey)).ToList();
|
|
|
+ var ids = res.FileJson.Select(x => x.Id).ToList();
|
|
|
+ var files = await _fileRepository.GetFilesAsync(ids, HttpContext.RequestAborted);
|
|
|
+ resDto.Files = files.Where(x => x.Classify == "退回附件" && string.IsNullOrEmpty(x.FlowKey)).ToList();
|
|
|
}
|
|
|
return resDto;
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 列表页面基础数据
|
|
@@ -4369,7 +4347,7 @@ public class OrderController : BaseController
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- if (order.Status >= EOrderStatus.HandOverToUnAccept)
|
|
|
+ if (order.Status >= EOrderStatus.Filed || order.Status == EOrderStatus.BackToProvince || !order.IsProvince || (!string.IsNullOrEmpty(order.ActualHandleOrgCode) && order.ActualHandleOrgCode != "001"))
|
|
|
{
|
|
|
errorCount++;
|
|
|
continue;
|
|
@@ -4420,7 +4398,7 @@ public class OrderController : BaseController
|
|
|
var order = await _orderRepository.GetAsync(dto.OrderId, HttpContext.RequestAborted);
|
|
|
if (order is null)
|
|
|
throw UserFriendlyException.SameMessage("无效工单");
|
|
|
- if (order.Status >= EOrderStatus.HandOverToUnAccept)
|
|
|
+ if (order.Status >= EOrderStatus.Filed || order.Status == EOrderStatus.BackToProvince || !order.IsProvince || (!string.IsNullOrEmpty(order.ActualHandleOrgCode) && order.ActualHandleOrgCode != "001"))
|
|
|
throw UserFriendlyException.SameMessage("工单状态无效,请确认当前工单状态");
|
|
|
if (order.Source <= ESource.HotlineImport)
|
|
|
throw UserFriendlyException.SameMessage("工单来源无效,请确认当前工单来源");
|
|
@@ -6177,7 +6155,7 @@ public class OrderController : BaseController
|
|
|
|
|
|
order.FirstVisitResultCode = _sysDicDataCacheManager
|
|
|
.GetSysDicDataCache(SysDicTypeConsts.VisitSatisfaction)
|
|
|
- .FirstOrDefault(m => m.DicDataName == item.VisitResult)?.DicDataValue
|
|
|
+ .FirstOrDefault(m => m.DicDataName == item.VisitResult)?.DicDataValue
|
|
|
?? order.FirstVisitResultCode;
|
|
|
|
|
|
#endregion
|
|
@@ -6185,7 +6163,7 @@ public class OrderController : BaseController
|
|
|
if (order.Id.IsNullOrEmpty())
|
|
|
{
|
|
|
//order.Source = item;
|
|
|
- var id = await _orderDomainService.AddAsync(order,false, HttpContext.RequestAborted);
|
|
|
+ var id = await _orderDomainService.AddAsync(order, false, HttpContext.RequestAborted);
|
|
|
if (!string.IsNullOrEmpty(id))
|
|
|
{
|
|
|
addCount++;
|
|
@@ -6440,6 +6418,52 @@ public class OrderController : BaseController
|
|
|
return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 查询工单修改记录
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("order_modify_records/list")]
|
|
|
+ public async Task<PagedDto<OrderDto>> OrderModifyRecordsList([FromQuery] PagedKeywordRequest dto)
|
|
|
+ {
|
|
|
+ var (total, items) = await _orderCopyRepository.Queryable()
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.No.Contains(dto.Keyword!))
|
|
|
+ .OrderByDescending(x => x.CreationTime)
|
|
|
+ .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
|
+ return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 修改明细
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="id"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("order_modify_records/getinfo/{id}")]
|
|
|
+ public async Task<object> GetModifyRecordsInfo(string id)
|
|
|
+ {
|
|
|
+ //修改前数据
|
|
|
+ var modifyRecordsInfo = await _orderCopyRepository.GetAsync(p => p.Id == id, HttpContext.RequestAborted);
|
|
|
+ if (modifyRecordsInfo is null)
|
|
|
+ throw UserFriendlyException.SameMessage("修改明细查询失败!");
|
|
|
+
|
|
|
+ //如何取修改后的数据
|
|
|
+ var copyNew = await _orderCopyRepository.Queryable().OrderBy(x => x.CreationTime)
|
|
|
+ .FirstAsync(p => p.OrderId == modifyRecordsInfo.OrderId && p.CreationTime > modifyRecordsInfo.CreationTime);
|
|
|
+ OrderDto newInfo = null;
|
|
|
+ if (copyNew != null)
|
|
|
+ {
|
|
|
+ newInfo = _mapper.Map<OrderDto>(copyNew);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var order = await _orderRepository.Queryable().FirstAsync(d => d.Id == modifyRecordsInfo.OrderId);
|
|
|
+ if (order is not null)
|
|
|
+ newInfo = _mapper.Map<OrderDto>(order);
|
|
|
+ }
|
|
|
+
|
|
|
+ return new { OldInfo = _mapper.Map<OrderDto>(modifyRecordsInfo), NewInfo = newInfo };
|
|
|
+ }
|
|
|
+
|
|
|
#endregion
|
|
|
|
|
|
#region 外部市民管理
|
|
@@ -6532,6 +6556,40 @@ public class OrderController : BaseController
|
|
|
return new PagedDto<ExternalcitizensRep>(total, _mapper.Map<IReadOnlyList<ExternalcitizensRep>>(items));
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 删除外部市民
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="ids"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpDelete("del-externalcitizens")]
|
|
|
+ public async Task DelExternalcitizens(string[] ids)
|
|
|
+ {
|
|
|
+ var list = await _externalCitizensRepository.Queryable().In(ids).ToListAsync(HttpContext.RequestAborted);
|
|
|
+ await _externalCitizensRepository.RemoveRangeAsync(list, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 修改外部市民
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("modify-externalcitizens")]
|
|
|
+ public async Task ModifyExternalcitizens([FromBody] ModifyExternalcitizensDto dto)
|
|
|
+ {
|
|
|
+ if (dto.PhoneNum.Length != 11)
|
|
|
+ throw UserFriendlyException.SameMessage("手机号不合法");
|
|
|
+ bool isHas = await _externalCitizensRepository.Queryable().AnyAsync(x => x.Id != dto.Id && x.PhoneNum == dto.PhoneNum);
|
|
|
+ if (isHas)
|
|
|
+ throw UserFriendlyException.SameMessage("已存在当前电话,请核对后再修改");
|
|
|
+ var model = await _externalCitizensRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
|
|
|
+ if (model == null)
|
|
|
+ throw UserFriendlyException.SameMessage("无效数据");
|
|
|
+ model.PhoneNum = dto.PhoneNum;
|
|
|
+ model.Name = dto.Name;
|
|
|
+ await _externalCitizensRepository.UpdateAsync(model, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
#endregion
|
|
|
|
|
|
#region 工单期满时间、来源方式修改
|