Dun.Jason před 8 měsíci
rodič
revize
f910765365

+ 2 - 2
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -4046,10 +4046,10 @@ namespace Hotline.Api.Controllers.Bi
             var query = _orderApplication.OrderVisitJudeStatistics(dto.QueryDto);
             List<OrderVisitJudeStatisticsRep> exportList;
             exportList = await query.ToListAsync(HttpContext.RequestAborted);
-            var ordersDtos = _mapper.Map<ICollection<OrderDataInventoryRep>>(exportList);
+            var ordersDtos = _mapper.Map<ICollection<OrderVisitJudeStatisticsRep>>(exportList);
             dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
             var dtos = ordersDtos
-                .Select(stu => _mapper.Map(stu, typeof(OrderDataInventoryRep), dynamicClass))
+                .Select(stu => _mapper.Map(stu, typeof(OrderVisitJudeStatisticsRep), dynamicClass))
                 .Cast<object>()
                 .ToList();
 

+ 31 - 24
src/Hotline.Api/Controllers/OrderController.cs

@@ -1193,33 +1193,40 @@ public class OrderController : BaseController
     [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(!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) //受理时间开始
-            .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.IsIng == true, d => d.JudgeState == EJudgeState.Judging)
-            .WhereIF(dto.IsIng == false, 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)
+        var (total, items) = await _orderRepository.VisitJudgeQuery(dto)
             .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-query-export")]
+    public async Task<FileStreamResult> VisitJudgeQueryExport([FromBody]ExportExcelDto<VisitJudgeQueryReq> dto)
+    {
+        var query = _orderRepository.VisitJudgeQuery(dto.QueryDto);
+
+        List<OrderVisit> datas;
+        if (dto.IsExportAll)
+        {
+            datas = await query.ToListAsync(HttpContext.RequestAborted);
+        }
+        else
+        {
+            var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
+            datas = items;
+        }
+        dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
+        var dtos = datas
+            .Select(stu => _mapper.Map(stu, typeof(OrderVisitDto), dynamicClass))
+            .Cast<object>()
+            .ToList();
+
+        var stream = ExcelHelper.CreateStream(dtos);
+        return ExcelStreamResult(stream, "扭转明细");
+    }
 
     /// <summary>
     /// 扭转满意度

+ 40 - 2
src/Hotline.Repository.SqlSugar/Orders/OrderRepository.cs

@@ -27,15 +27,17 @@ namespace Hotline.Repository.SqlSugar.Orders
     {
         private readonly IDataPermissionFilterBuilder _dataPermissionFilterBuilder;
         private readonly IRepository<OrderSendBackAudit> _orderSendBackAuditRepository;
+        private readonly IRepository<OrderVisit> _orderVisitRepository;
 
 		public OrderRepository(ISugarUnitOfWork<HotlineDbContext> uow,
             IDataPermissionFilterBuilder dataPermissionFilterBuilder,
-            IRepository<OrderSendBackAudit> orderSendBackAuditRepository
+            IRepository<OrderSendBackAudit> orderSendBackAuditRepository,
+            IRepository<OrderVisit> orderVisitRepository
 			) : base(uow, dataPermissionFilterBuilder)
         {
             _dataPermissionFilterBuilder = dataPermissionFilterBuilder;
             _orderSendBackAuditRepository = orderSendBackAuditRepository;
-
+            _orderVisitRepository = orderVisitRepository;
 		}
 
         public async Task<string> AddOrderNavAsync(Order order, CancellationToken cancellationToken)
@@ -1200,6 +1202,42 @@ namespace Hotline.Repository.SqlSugar.Orders
                 }).OrderByDescending(x => x.CreationTime);
             return result;
         }
+
+        /// <summary>
+        /// 扭转列表
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public ISugarQueryable<OrderVisit> VisitJudgeQuery(VisitJudgeQueryReq dto)
+        {
+            return _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(!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) //受理时间开始
+            .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.IsIng == true, d => d.JudgeState == EJudgeState.Judging)
+            .WhereIF(dto.IsIng == false, 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)
+            .WhereIF(dto.FiledType != null && dto.FiledType == FiledType.CenterFiled, d => d.Order.ProcessType == EProcessType.Zhiban)
+            .WhereIF(dto.FiledType != null && dto.FiledType == FiledType.OrgFiled, d => d.Order.ProcessType == EProcessType.Jiaoban)
+            .WhereIF(!string.IsNullOrEmpty(dto.TransferPhone), x => x.Order.TransferPhone == dto.TransferPhone)
+            .OrderByDescending(x => x.VisitTime);
+        }
     }
 
     public class OrderScreenRepository : BaseRepositoryWorkflow<OrderScreen>, IOrderScreenRepository, IScopeDependency

+ 8 - 0
src/Hotline.Share/Dtos/Order/OrderVisitDto.cs

@@ -115,6 +115,14 @@ namespace Hotline.Share.Dtos.Order
 
     public record VisitJudgeQueryReq : PagedKeywordRequest
     {
+        /// <summary>
+        /// 转接号码
+        /// </summary>
+        public string? TransferPhone { get; set; }
+        /// <summary>
+        /// 归档类型
+        /// </summary>
+        public FiledType? FiledType { get; set; }
         /// <summary>
         /// 工单编号
         /// </summary>

+ 9 - 1
src/Hotline/Orders/IOrderRepository.cs

@@ -156,7 +156,15 @@ namespace Hotline.Orders
         /// <param name="dto"></param>
         /// <returns></returns>
         ISugarQueryable<OrderDataInventoryRep> OrderDataInventory(OrderDataInventoryReq dto);
-               
+
+        /// <summary>
+        /// 扭转列表
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        ISugarQueryable<OrderVisit> VisitJudgeQuery(VisitJudgeQueryReq dto);
+
+
     }
 
     public interface IOrderScreenRepository : IRepositoryWorkflow<OrderScreen>