|
@@ -44,6 +44,7 @@ using MapsterMapper;
|
|
|
using MediatR;
|
|
|
using Microsoft.AspNetCore.Authorization;
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
+using Microsoft.OpenApi.Writers;
|
|
|
using MiniExcelLibs;
|
|
|
using NPOI.SS.Formula.Functions;
|
|
|
using NPOI.SS.Util;
|
|
@@ -399,6 +400,7 @@ public class OrderController : BaseController
|
|
|
orderVisit.VisitState = EVisitState.WaitForVisit;
|
|
|
orderVisit.PublishTime = DateTime.Now;
|
|
|
orderVisit.IsCanHandle = true;
|
|
|
+ orderVisit.EmployeeId = _sessionContext.RequiredUserId;
|
|
|
|
|
|
if (order is { ProcessType: EProcessType.Zhiban, CounterSignType: null })
|
|
|
{
|
|
@@ -640,8 +642,6 @@ public class OrderController : BaseController
|
|
|
return rsp;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
/// <summary>
|
|
|
/// 回访详情
|
|
|
/// </summary>
|
|
@@ -720,7 +720,6 @@ public class OrderController : BaseController
|
|
|
return new PagedDto<OrderVisitDetailDto>(total, _mapper.Map<IReadOnlyList<OrderVisitDetailDto>>(items));
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/// <summary>
|
|
|
/// 回访保存
|
|
|
/// </summary>
|
|
@@ -769,7 +768,13 @@ public class OrderController : BaseController
|
|
|
{
|
|
|
visit.Order.Visited(first.OrgProcessingResults.Key, first.OrgProcessingResults.Value);
|
|
|
}
|
|
|
+ visit.OrgJudge = dto.OrgJudge;
|
|
|
+ visit.SeatJudge = dto.SeatJudge;
|
|
|
|
|
|
+ if (visit.OrgJudge==true || visit.SeatJudge==true)
|
|
|
+ {
|
|
|
+ visit.JudgeState = EJudgeState.Judging;
|
|
|
+ }
|
|
|
//_mapper.Map(dto.VisitDetails,visit.OrderVisitDetails);
|
|
|
for (int i = 0; i < visit.OrderVisitDetails.Count; i++)
|
|
|
{
|
|
@@ -834,6 +839,70 @@ public class OrderController : BaseController
|
|
|
//}
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 扭转列表
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("visit/judge-query")]
|
|
|
+ public async Task<PagedDto<OrderVisitDto>> VisitJudgeQuery([FromQuery] VisitJudgeQueryReq dto)
|
|
|
+ {
|
|
|
+ var (total,items) =await _orderVisitRepository.Queryable()
|
|
|
+ .Includes(x => x.Order)
|
|
|
+ .Includes(x => x.Employee)
|
|
|
+ .Where(x => x.VisitState == EVisitState.Visited)
|
|
|
+ .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.NameOrNo), d => d.Order.AcceptorName.Contains(dto.NameOrNo!) || d.Order.AcceptorStaffNo.Contains(dto.NameOrNo!)) //受理人/坐席
|
|
|
+ .WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart) //受理时间开始
|
|
|
+ .WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd) //受理时间结束
|
|
|
+ .WhereIF(dto.ActualHandleTimeStart.HasValue, d => d.Order.ActualHandleTime >= dto.ActualHandleTimeStart) //办结时间开始
|
|
|
+ .WhereIF(dto.ActualHandleTimeEnd.HasValue, d => d.Order.ActualHandleTime <= dto.ActualHandleTimeEnd) //办结时间结束
|
|
|
+ .WhereIF(dto.VisitTimeStart.HasValue, d => d.VisitTime >= dto.VisitTimeStart) //回访开始时间
|
|
|
+ .WhereIF(dto.VisitTimeEnd.HasValue, d => d.VisitTime <= dto.VisitTimeEnd)
|
|
|
+ .WhereIF(dto.JudgeState==null,d=>d.JudgeState!= EJudgeState.Judging)
|
|
|
+ .WhereIF(dto.JudgeState!=null,d=>d.JudgeState == dto.JudgeState)
|
|
|
+ .WhereIF(dto.OrgJudge!=null,d=>d.OrgJudge == dto.OrgJudge)
|
|
|
+ .WhereIF(dto.SeatJudge!=null,d=>d.SeatJudge == dto.SeatJudge)
|
|
|
+ .OrderByDescending(x => x.VisitTime)
|
|
|
+ .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
|
+ return new PagedDto<OrderVisitDto>(total, _mapper.Map<IReadOnlyList<OrderVisitDto>>(items));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 扭转满意度
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("visit/judge")]
|
|
|
+ public async Task<JudgeVisitRsp> JudgeVisit([FromBody] JudgeVisitReq dto)
|
|
|
+ {
|
|
|
+ int error = 0;
|
|
|
+ foreach (var id in dto.Ids)
|
|
|
+ {
|
|
|
+ var visit = await _orderVisitRepository.Queryable().FirstAsync(d => d.Id == id, HttpContext.RequestAborted);
|
|
|
+ if (visit!= null && visit.VisitState == EVisitState.WaitForVisit)
|
|
|
+ {
|
|
|
+ visit.JudgeState = dto.IsAgree ? EJudgeState.Agreed : EJudgeState.UnAgreed;
|
|
|
+ visit.JudgeUserId = _sessionContext.RequiredUserId;
|
|
|
+ visit.JudgeUserName = _sessionContext.UserName;
|
|
|
+ visit.JudgeTime = DateTime.Now;
|
|
|
+ await _orderVisitRepository.UpdateAsync(visit, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ error++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return new JudgeVisitRsp() { ErrorCount = error, SuccessCount = dto.Ids.Count - error };
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 批量分配回访人员
|
|
|
/// </summary>
|