瀏覽代碼

首页查询

田爽 8 月之前
父節點
當前提交
f91a699304
共有 2 個文件被更改,包括 342 次插入1 次删除
  1. 330 1
      src/Hotline.Api/Controllers/CommonPController.cs
  2. 12 0
      src/Hotline.Share/Dtos/Order/HomeOrderDto.cs

+ 330 - 1
src/Hotline.Api/Controllers/CommonPController.cs

@@ -198,5 +198,334 @@ namespace Hotline.Api.Controllers
                 ScreenHandle = screenHandle
             };
         }
-    }
+
+		/// <summary>
+		/// 首页基础数据
+		/// </summary>
+		/// <returns></returns>
+		[HttpGet("home_data_new")]
+		public async Task<Object> GetHomeDataNew()
+		{
+			var allList = new List<HomeOrderDto>();
+			var allNum = 0;
+			var isAdmin = _orderDomainService.IsCheckAdmin();
+			var IsCenter = _sessionContext.OrgIsCenter;
+			if (_sessionContext.OrgIsCenter)
+			{
+				//待办
+				var waitedList = await _orderRepository
+					.Queryable(hasHandled: false, 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.Source < ESource.MLSQ || d.Source > ESource.WZSC)
+					.Where(d => d.Status != EOrderStatus.BackToProvince && d.Status < EOrderStatus.Filed)
+					.Where(d => d.OrderSpecials.Any() == false || d.OrderSpecials.Any(s => s.State > 0))
+					.OrderByDescending(d => new { d.IsUrgent, d.StartTime })
+					.Select(d => new HomeOrderDto
+					{
+						No = d.No,
+						OrderId = d.Id,
+						Title = d.Title,
+						AcceptType = d.AcceptType,
+						HotspotName = d.HotspotName,
+						Type = "Waited",
+						Time = d.ExpiredTime,
+						Status = d.Status,
+						ActualHandleTime = d.ActualHandleTime,
+						CounterSignType = d.CounterSignType
+					})
+					.ToListAsync();
+				allNum += waitedList.Count > 40 ? 40 : waitedList.Count;
+				allList.AddRange(waitedList);
+				// 已超期
+				var waitedExpiredDataList = waitedList.Where(x => (x.Time < DateTime.Now && x.Status < EOrderStatus.Filed) ||
+																  (x.Time < x.ActualHandleTime && x.Status >= EOrderStatus.Filed)).ToList();
+				var waitedExpiredList = waitedExpiredDataList.Take(40).ToList();
+				waitedExpiredList.ForEach(x => x.Type = "WaitedExpired");
+				allNum += waitedExpiredDataList.Count;
+				allList.AddRange(waitedExpiredList);
+				//回访待办
+				var visitDataList = await _orderVisitRepository.Queryable()
+					.Includes(d => d.Order)
+					.Where(d => d.VisitState == EVisitState.WaitForVisit || d.VisitState == EVisitState.NoSatisfiedWaitForVisit)
+					.Where(d => d.EmployeeId == _sessionContext.RequiredUserId)
+					.OrderByDescending(x => x.PublishTime)
+					.Select(d => new HomeOrderDto
+					{
+						No = d.Order.No,
+						OrderId = d.Order.Id,
+						Title = d.Order.Title,
+						AcceptType = d.Order.AcceptType,
+						HotspotName = d.Order.HotspotName,
+						Type = "Visit",
+						Time = d.Order.ExpiredTime,
+						Status = d.Order.Status,
+						CounterSignType = d.Order.CounterSignType
+					})
+					.Take(40)
+					.ToListAsync();
+				allNum += visitDataList.Count;
+				allList.AddRange(visitDataList);
+				//会签待办
+				var signDataList = waitedList.Where(x => x.CounterSignType == ECounterSignType.Center || x.CounterSignType == ECounterSignType.Department).ToList();
+				var signList = signDataList.Take(40).ToList();
+				signList.ForEach(x => x.Type = "Sign");
+				allNum += signDataList.Count;
+				allList.AddRange(signList);
+				//延期待审批
+				var delayDataList = await _orderDelayRepository.Queryable(canView: true, isAdmin: isAdmin)
+					.Includes(d => d.Order)
+					.Where(d => d.DelayState == EDelayState.Examining)
+					.OrderByDescending(d => d.ApplyDelayTime)
+					.Select(d => new HomeOrderDto
+					{
+						No = d.Order.No,
+						OrderId = d.Order.Id,
+						Title = d.Order.Title,
+						AcceptType = d.Order.AcceptType,
+						HotspotName = d.Order.HotspotName,
+						Type = "Delay",
+						Time = d.Order.ExpiredTime,
+						Status = d.Order.Status,
+						CounterSignType = d.Order.CounterSignType
+					}).Take(40)
+					.ToListAsync();
+				allNum += delayDataList.Count;
+				allList.AddRange(delayDataList);
+				//部门即将超期
+				var nearlyExpiredDataList = await _orderRepository.Queryable(canView: !IsCenter)
+					.Includes(d => d.OrderDelays)
+					.Where(d => d.Status < EOrderStatus.Filed && DateTime.Now > d.NearlyExpiredTime && DateTime.Now < d.ExpiredTime)
+					.OrderByDescending(d => d.CreationTime)
+					.Select(d => new HomeOrderDto
+					{
+						No = d.No,
+						OrderId = d.Id,
+						Title = d.Title,
+						AcceptType = d.AcceptType,
+						HotspotName = d.HotspotName,
+						Type = "NearlyExpired",
+						Time = d.ExpiredTime,
+						Status = d.Status,
+						CounterSignType = d.CounterSignType
+					}).Take(40)
+					.ToListAsync();
+				allNum += nearlyExpiredDataList.Count;
+				allList.AddRange(nearlyExpiredDataList);
+				//甄别待审批
+				var screenDataList = await _orderScreenRepository.Queryable(hasHandled: !true, isAdmin: isAdmin)
+					.Includes(d => d.Order)
+					.Includes(d => d.ScreenDetails.Where(sd => sd.AuditUserId == _sessionContext.UserId).OrderByDescending(sd => sd.AuditTime).Take(1).ToList())
+					.Where(d => (d.Status == EScreenStatus.Apply || d.Status == EScreenStatus.Approval || (d.Status == EScreenStatus.SendBack && d.SendBackApply == false)))
+					.Select(d => new HomeOrderDto
+					{
+						No = d.Order.No,
+						OrderId = d.Order.Id,
+						Title = d.Order.Title,
+						AcceptType = d.Order.AcceptType,
+						HotspotName = d.Order.HotspotName,
+						Type = "Screen",
+						Time = d.Order.ExpiredTime,
+						Status = d.Order.Status,
+						CounterSignType = d.Order.CounterSignType
+					}).Take(40)
+					.ToListAsync();
+				allNum += screenDataList.Count;
+				allList.AddRange(screenDataList);
+				//退回待审批
+				var sendBackAuditDataList = await _orderSendBackAuditRepository.Queryable()
+					.Includes(d => d.Order)
+					.Where(d => d.State == ESendBackAuditState.Apply)
+					.WhereIF(_sessionContext.Roles.Contains("role_sysadmin") == false, x => x.SendBackOrgId == _sessionContext.OrgId) // 123 系统管理员;
+					.OrderByDescending(d => d.CreationTime)
+					.Select(d => new HomeOrderDto
+					{
+						No = d.Order.No,
+						OrderId = d.Order.Id,
+						Title = d.Order.Title,
+						AcceptType = d.Order.AcceptType,
+						HotspotName = d.Order.HotspotName,
+						Type = "SendBackAudit",
+						Time = d.Order.ExpiredTime,
+						Status = d.Order.Status,
+						CounterSignType = d.Order.CounterSignType
+					}).Take(40)
+					.ToListAsync();
+				allNum += sendBackAuditDataList.Count;
+				allList.AddRange(sendBackAuditDataList);
+				return new
+				{
+					AllNum = allNum,
+					AllList = allList,
+					WaitedNum = waitedList.Count > 40 ? 40 : waitedList.Count,
+					WaitedList = waitedList.Take(40).ToList(),
+					WaitedExpiredNum = waitedExpiredDataList.Count,
+					WaitedExpiredList = waitedExpiredList,
+					VisitListNum = visitDataList.Count,
+					VisitList = visitDataList,
+					SignDataNum = signDataList.Count,
+					SignDataList = signDataList,
+					DelayNum = delayDataList.Count,
+					DelayDataList = delayDataList,
+					NearlyExpiredNum = nearlyExpiredDataList.Count,
+					NearlyExpiredList = nearlyExpiredDataList,
+					ScreenNum = screenDataList.Count,
+					ScreenList = screenDataList,
+					SendBackAuditNum = sendBackAuditDataList.Count,
+					SendBackAuditList = sendBackAuditDataList
+				};
+			}
+			else
+			{
+				//待办
+				var waitedList = await _orderRepository
+					.Queryable(hasHandled: false, 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.Source < ESource.MLSQ || d.Source > ESource.WZSC)
+					.Where(d => d.Status != EOrderStatus.BackToProvince && d.Status < EOrderStatus.Filed)
+					.Where(d => d.OrderSpecials.Any() == false || d.OrderSpecials.Any(s => s.State > 0))
+					.OrderByDescending(d => new { d.IsUrgent, d.StartTime })
+					.Select(d => new HomeOrderDto
+					{
+						No = d.No,
+						OrderId = d.Id,
+						Title = d.Title,
+						AcceptType = d.AcceptType,
+						HotspotName = d.HotspotName,
+						Type = "Waited",
+						Time = d.ExpiredTime,
+						Status = d.Status,
+						ActualHandleTime = d.ActualHandleTime,
+						CounterSignType = d.CounterSignType
+					})
+					.ToListAsync();
+				allNum += waitedList.Count > 40 ? 40 : waitedList.Count;
+				allList.AddRange(waitedList);
+				//已超期
+				var waitedExpiredDataList = waitedList.Where(x => (x.Time < DateTime.Now && x.Status < EOrderStatus.Filed) ||
+																  (x.Time < x.ActualHandleTime && x.Status >= EOrderStatus.Filed)).ToList();
+				var waitedExpiredList = waitedExpiredDataList.Take(40).ToList();
+				waitedExpiredList.ForEach(x => x.Type = "WaitedExpired");
+				allNum += waitedExpiredDataList.Count;
+				allList.AddRange(waitedExpiredList);
+				//会签待办
+				var signDataList = waitedList.Where(x => x.CounterSignType == ECounterSignType.Center || x.CounterSignType == ECounterSignType.Department).ToList();
+				var signList = signDataList.Take(40).ToList();
+				signList.ForEach(x => x.Type = "Sign");
+				allNum += signDataList.Count;
+				allList.AddRange(signList);
+				//甄别待审批
+				var screenDataList = await _orderScreenRepository.Queryable(hasHandled: !true, isAdmin: isAdmin)
+					.Includes(d => d.Order)
+					.Includes(d => d.ScreenDetails.Where(sd => sd.AuditUserId == _sessionContext.UserId).OrderByDescending(sd => sd.AuditTime).Take(1).ToList())
+					.Where(d => (d.Status == EScreenStatus.Apply || d.Status == EScreenStatus.Approval || (d.Status == EScreenStatus.SendBack && d.SendBackApply == false)))
+					.Select(d => new HomeOrderDto
+					{
+						No = d.Order.No,
+						OrderId = d.Order.Id,
+						Title = d.Order.Title,
+						AcceptType = d.Order.AcceptType,
+						HotspotName = d.Order.HotspotName,
+						Type = "Screen",
+						Time = d.Order.ExpiredTime,
+						Status = d.Order.Status,
+						CounterSignType = d.Order.CounterSignType
+					}).Take(40)
+					.ToListAsync();
+				allNum += screenDataList.Count;
+				allList.AddRange(screenDataList);
+				//延期待审批
+				var delayDataList = await _orderDelayRepository.Queryable(canView: true, isAdmin: isAdmin)
+					.Includes(d => d.Order)
+					.Where(d => d.DelayState == EDelayState.Examining)
+					.OrderByDescending(d => d.ApplyDelayTime)
+					.Select(d => new HomeOrderDto
+					{
+						No = d.Order.No,
+						OrderId = d.Order.Id,
+						Title = d.Order.Title,
+						AcceptType = d.Order.AcceptType,
+						HotspotName = d.Order.HotspotName,
+						Type = "Delay",
+						Time = d.Order.ExpiredTime,
+						Status = d.Order.Status,
+						CounterSignType = d.Order.CounterSignType
+					}).Take(40)
+					.ToListAsync();
+				allNum += delayDataList.Count;
+				allList.AddRange(delayDataList);
+				//甄别待申请
+				var screenApplyDataList = await _orderVisitedDetailRepository.Queryable(false, true)
+				.Includes(x => x.OrderVisit)
+				.Includes(x => x.OrderVisit, y => y.Order)
+				.Includes(x => x.OrderVisit, y => y.Employee)
+				.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)
+				.Where(x => x.OrderVisit.VisitState == EVisitState.Visited && x.OrderVisit.IsCanHandle)
+				.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" ||
+					SqlFunc.JsonField(x.OrgHandledAttitude, "Key") == "2"
+				))
+				.OrderByDescending(x => x.CreationTime)
+				.Select(x => new HomeOrderDto
+				{
+					No = x.OrderVisit.Order.No,
+					OrderId = x.OrderVisit.Order.Id,
+					Title = x.OrderVisit.Order.Title,
+					AcceptType = x.OrderVisit.Order.AcceptType,
+					HotspotName = x.OrderVisit.Order.HotspotName,
+					Type = "ScreenApply",
+					Time = x.OrderVisit.Order.ExpiredTime,
+					Status = x.OrderVisit.Order.Status,
+					CounterSignType = x.OrderVisit.Order.CounterSignType
+				}).Take(40).ToListAsync();
+				allNum += screenApplyDataList.Count;
+				allList.AddRange(screenApplyDataList);
+				//退回待审批
+				var sendBackAuditDataList = await _orderSendBackAuditRepository.Queryable()
+					.Includes(d => d.Order)
+					.Where(d => d.State == ESendBackAuditState.Apply)
+					.WhereIF(_sessionContext.Roles.Contains("role_sysadmin") == false, x => x.SendBackOrgId == _sessionContext.OrgId) // 123 系统管理员;
+					.OrderByDescending(d => d.CreationTime)
+					.Select(d => new HomeOrderDto
+					{
+						No = d.Order.No,
+						OrderId = d.Order.Id,
+						Title = d.Order.Title,
+						AcceptType = d.Order.AcceptType,
+						HotspotName = d.Order.HotspotName,
+						Type = "SendBackAudit",
+						Time = d.Order.ExpiredTime,
+						Status = d.Order.Status,
+						CounterSignType = d.Order.CounterSignType
+					}).Take(40)
+					.ToListAsync();
+				allNum += sendBackAuditDataList.Count;
+				allList.AddRange(sendBackAuditDataList);
+				return new
+				{
+					AllNum = allNum,
+					AllList = allList,
+					WaitedNum = waitedList.Count > 40 ? 40 : waitedList.Count,
+					WaitedList = waitedList.Take(40).ToList(),
+					WaitedExpiredNum = waitedExpiredDataList.Count,
+					WaitedExpiredList = waitedExpiredList,
+					SignDataNum = signDataList.Count,
+					SignDataList = signDataList,
+					ScreenNum = screenDataList.Count,
+					ScreenList = screenDataList,
+					DelayNum = delayDataList.Count,
+					DelayDataList = delayDataList,
+					ScreenApplyNum = screenApplyDataList.Count,
+					ScreenApplyList = screenApplyDataList,
+					SendBackAuditNum = sendBackAuditDataList.Count,
+					SendBackAuditList = sendBackAuditDataList
+				};
+			}
+		}
+
+	}
 }

+ 12 - 0
src/Hotline.Share/Dtos/Order/HomeOrderDto.cs

@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hotline.Share.Dtos.Order
+{
+	internal class HomeOrderDto
+	{
+	}
+}