123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589 |
- using Hotline.CallCenter.Calls;
- using Hotline.Orders;
- using Hotline.Permissions;
- using Hotline.Settings;
- using Hotline.Settings.CommonOpinions;
- using Hotline.Share.Dtos.Settings;
- using Hotline.Share.Enums.FlowEngine;
- using MapsterMapper;
- using Microsoft.AspNetCore.Mvc;
- using MongoDB.Driver;
- using SqlSugar;
- using System.Reflection.Metadata;
- using Hotline.Application.CallCenter;
- using Hotline.CallCenter.Configs;
- using Hotline.FlowEngine.Workflows;
- using Hotline.Settings.TimeLimits;
- using Hotline.Share.Enums.CallCenter;
- using Hotline.Share.Enums.Order;
- using Microsoft.Extensions.Options;
- using XF.Domain.Authentications;
- using XF.Domain.Exceptions;
- using XF.Domain.Repository;
- using Hotline.Configurations;
- using Hotline.Share.Dtos.Order;
- using System.Runtime.InteropServices;
- using Lucene.Net.Util;
- using NPOI.Util;
- using XF.Domain.Entities;
- namespace Hotline.Api.Controllers
- {
- /// <summary>
- /// 常用意见接口
- /// </summary>
- public class CommonPController : BaseController
- {
- private readonly ISystemCommonOpinionDomainService _commonOpinionDomainService;
- private readonly ISystemAreaDomainService _systemAreaDomainService;
- private readonly IMapper _mapper;
- private readonly ISessionContext _sessionContext;
- // private readonly IRepository<TrCallRecord> _trCallRecordRepository;
- private readonly IOrderRepository _orderRepository;
- private readonly IOrderDelayRepository _orderDelayRepository;
- private readonly ITimeLimitDomainService _timeLimitDomainService;
- private readonly IOrderScreenRepository _orderScreenRepository;
- private readonly IRepository<OrderVisitDetail> _orderVisitedDetailRepository;
- private readonly ICallApplication _callApplication;
- private readonly IOptionsSnapshot<AppConfiguration> _appOptions;
- private readonly IOrderDomainService _orderDomainService;
- private readonly IRepository<OrderVisit> _orderVisitRepository;
- private readonly IRepository<OrderSendBackAudit> _orderSendBackAuditRepository;
- public CommonPController(
- ISystemCommonOpinionDomainService commonOpinionDomainService,
- ISystemAreaDomainService systemAreaDomainService,
- ISessionContext sessionContext,
- // IRepository<TrCallRecord> trCallRecordRepository,
- IOrderRepository orderRepository,
- IMapper mapper,
- IOrderDelayRepository orderDelayRepository,
- ITimeLimitDomainService timeLimitDomainService,
- IOrderScreenRepository orderScreenRepository,
- IRepository<OrderVisitDetail> orderVisitedDetailRepository,
- ICallApplication callApplication,
- IOptionsSnapshot<AppConfiguration> appOptions,
- IOrderDomainService orderDomainService,
- IRepository<OrderVisit> orderVisitRepository,
- IRepository<OrderSendBackAudit> orderSendBackAuditRepository)
- {
- _commonOpinionDomainService = commonOpinionDomainService;
- _systemAreaDomainService = systemAreaDomainService;
- _mapper = mapper;
- _sessionContext = sessionContext;
- // _trCallRecordRepository = trCallRecordRepository;
- _orderRepository = orderRepository;
- _orderDelayRepository = orderDelayRepository;
- _timeLimitDomainService = timeLimitDomainService;
- _orderScreenRepository = orderScreenRepository;
- _orderVisitedDetailRepository = orderVisitedDetailRepository;
- _callApplication = callApplication;
- _appOptions = appOptions;
- _orderDomainService = orderDomainService;
- _orderVisitRepository = orderVisitRepository;
- _orderSendBackAuditRepository = orderSendBackAuditRepository;
- }
- #region 省市区
- /// <summary>
- /// 获取省市区树形
- /// </summary>
- /// <returns></returns>
- [HttpGet("tree-area")]
- [Obsolete("请调用sys/area/tree")]
- public async Task<List<SystemArea>> GetAearTree()
- {
- return await _systemAreaDomainService.GetAreaTree();
- }
- #endregion
- /// <summary>
- /// 首页基础数据
- /// </summary>
- /// <returns></returns>
- [HttpGet("home_data")]
- public async Task<Object> GetHomeData()
- {
- var tadayTime = DateTime.Now.ToString("yyyy-MM-dd");
- //中心
- if (_sessionContext.OrgIsCenter)
- {
- var orderQuery = _orderRepository.Queryable(false, false, false)
- .Includes(o => o.Workflow, w => w.Steps);
- //今日来电
- // var tadayCalls = await _trCallRecordRepository.Queryable()
- // .Where(x => x.CallDirection == Share.Enums.CallCenter.ECallDirection.In && tadayTime.Equals(x.CreatedTime.ToString("yyyy-MM-dd"))).ToListAsync();
- // var callNum = tadayCalls.Count();
- // var validCallNum = tadayCalls.Where(x => x.Duration > 0 || x.QueueTims > 0 || x.RingTimes > 0).Count();
- // //今日接通率
- // var answeredNum = tadayCalls.Where(x => x.Duration > 0).Count();
- // var answeredRate = validCallNum > 0 ? Math.Round((double.Parse(answeredNum.ToString()) / double.Parse(validCallNum.ToString())) * 100, 2) + "%" : "-";
- int callNum = 0, validCallNum = 0, answeredNum = 0;
- var answeredRate = string.Empty;
- var today = DateTime.Today.Date;
- if (_appOptions.Value.GetDefaultAppScopeConfiguration().CallCenterType == AppDefaults.CallCenterType.TianRun)
- {
- var calls = await _callApplication.QueryTianrunCallsAsync(
- direction: ECallDirection.In,
- callStartTimeStart: today,
- callStartTimeEnd: today.AddDays(1).AddSeconds(-1),
- cancellationToken: HttpContext.RequestAborted);
- callNum = calls.Count();
- validCallNum = calls.Where(x => x.Duration > 0 || x.QueueTims > 0 || x.RingTimes > 0).Count();
- //今日接通率
- answeredNum = calls.Where(x => x.Duration > 0).Count();
- answeredRate = validCallNum > 0
- ? Math.Round((double.Parse(answeredNum.ToString()) / double.Parse(validCallNum.ToString())) * 100, 2) + "%"
- : "-";
- }
- else if (_appOptions.Value.GetDefaultAppScopeConfiguration().CallCenterType == AppDefaults.CallCenterType.XingTang)
- {
- var calls = await _callApplication.QueryCallsAsync(
- callStartTimeStart: today,
- callStartTimeEnd: today.AddDays(1).AddSeconds(-1),
- cancellationToken: HttpContext.RequestAborted);
- callNum = calls.Count();
- validCallNum = calls.Where(x => x.Duration > 0 || x.WaitDuration > 0 || x.RingDuration > 0).Count();
- //今日接通率
- answeredNum = calls.Where(x => x.Duration > 0).Count();
- answeredRate = validCallNum > 0
- ? Math.Round((double.Parse(answeredNum.ToString()) / double.Parse(validCallNum.ToString())) * 100, 2) + "%"
- : "-";
- }
- //今日受理工单
- var tadayOrders = await orderQuery
- .Where(o => tadayTime.Equals(o.CreationTime.ToString("yyyy-MM-dd"))).ToListAsync();
- var orderNum = tadayOrders.Count();
- var directlyNum = tadayOrders.Where(o => o.ProcessType == Share.Enums.Order.EProcessType.Zhiban).Count();
- return new
- {
- CallNum = callNum, ValidCallNum = validCallNum, AnsweredNum = answeredNum, AnsweredRate = answeredRate, OrderNum = orderNum,
- DirectlyNum = directlyNum
- };
- }
- //部门
- //今日待办 tasksOkNum
- //var time = DateTime.Parse(tadayTime);
- //工单
- var order = await _orderRepository.Queryable(hasHandled: false)
- .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))
- .GroupBy(o => new { o.Id,o.Status })
- .Select(o => new
- {
- aboutExpire = SqlFunc.AggregateSum(SqlFunc.IIF(DateTime.Now > o.NearlyExpiredTime!.Value && DateTime.Now < o.ExpiredTime!.Value,
- 1, 0)),
- havExpired = SqlFunc.AggregateSum(SqlFunc.IIF(DateTime.Now > o.ExpiredTime!.Value , 1, 0)),
- countersignHandle = SqlFunc.AggregateSum(SqlFunc.IIF(o.Status == EOrderStatus.Countersigning, 1, 0)),
- }).ToListAsync();
- var aboutExpire = order?.Sum(x=>x.aboutExpire) ?? 0;
- var havExpired = order?.Sum(x=>x.havExpired) ?? 0;
- var countersignHandle = order?.Sum(x=> x.countersignHandle) ?? 0;
- //延期
- var delay = await _orderDelayRepository.Queryable(hasHandled: false)
- .Where(d => d.DelayState == EDelayState.Examining).CountAsync();
- //甄别
- var screenAudit = await _orderScreenRepository.Queryable(hasHandled: false)
- .Where(x=>x.CreationTime < DateTime.Now && x.CreationTime > DateTime.Now.AddMonths(-2))
- .Where(x => (x.Status == EScreenStatus.Apply || x.Status == EScreenStatus.Approval || (x.Status == EScreenStatus.SendBack && x.SendBackApply == false)))
- //.Where(d => d.Status == EScreenStatus.Apply)
- .CountAsync();
- //var workTime = _timeLimitDomainService.CalcWorkTimeReduce(DateTime.Now, 5);
- var screenHandle = await _orderVisitedDetailRepository.Queryable(false, true)
- .Includes(x => x.OrderVisit)
- .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")).CountAsync();
- return new
- {
- AboutExpire = aboutExpire, HavExpired = havExpired, CountersignHandle = countersignHandle, ScreenAudit = screenAudit, Delay = delay,
- 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 waitedDataList = await _orderRepository
- .Queryable(hasHandledStep: 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,
- NearlyExpiredTime = d.NearlyExpiredTime,
- CounterSignType = d.CounterSignType
- })
- .ToListAsync();
- var waitedList = waitedDataList.Where(x => x.Status != EOrderStatus.Countersigning &&
- x.Time > DateTime.Now && x.Status < EOrderStatus.Filed && DateTime.Now < x.NearlyExpiredTime
- ).OrderBy(x=> x.Time).Take(40).ToList();
- waitedList = waitedList.Count > 0 ? waitedList.Copy() : waitedList;
- //allNum += waitedList.Count > 40 ? 40 : waitedList.Count;
- //allList.AddRange(waitedList);
- // 已超期
- var waitedExpiredDataList = waitedDataList.Where(x => (x.Time < DateTime.Now && x.Status < EOrderStatus.Filed) ||
- (x.Time < x.ActualHandleTime && x.Status >= EOrderStatus.Filed)).OrderBy(x=>x.Time).Take(40).ToList();
- waitedExpiredDataList = waitedExpiredDataList.Count > 0 ? waitedExpiredDataList.Copy() : waitedExpiredDataList;
- waitedExpiredDataList.ForEach(x => x.Type = "WaitedExpired");
- //allNum += waitedExpiredDataList.Count;
- //allList.AddRange(waitedExpiredDataList);
- //回访待办
- 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 = waitedDataList.Where(x => x.Status == EOrderStatus.Countersigning).OrderBy(x => x.Time).Take(40).ToList();
- signDataList = signDataList.Count > 0 ? signDataList.Copy() : signDataList;
- signDataList.ForEach(x => x.Type = "Sign");
- //allNum += signDataList.Count;
- //allList.AddRange(signDataList);
- //延期待审批
- var delayDataList = await _orderDelayRepository.Queryable(hasHandledStep: false, 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 => SqlFunc.Subqueryable<WorkflowStep>()
- .Where(step => step.ExternalId == d.Id && step.Status != EWorkflowStepStatus.Handled &&
- ((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))))
- .Any())
- .Where(d => d.Status < EOrderStatus.Filed && DateTime.Now > d.NearlyExpiredTime && DateTime.Now < d.ExpiredTime)
- .OrderBy(d => d.NearlyExpiredTime)
- .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(hasHandledStep: false, 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 = waitedExpiredDataList,
- 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 waitedDataList = await _orderRepository
- .Queryable(hasHandledStep: 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,
- NearlyExpiredTime = d.NearlyExpiredTime,
- CounterSignType = d.CounterSignType
- })
- .ToListAsync();
- var waitedList = waitedDataList.Where(x => x.Status != EOrderStatus.Countersigning &&
- x.Time > DateTime.Now && x.Status < EOrderStatus.Filed && DateTime.Now < x.NearlyExpiredTime
- ).OrderBy(x=>x.Time).Take(40).ToList();
- waitedList = waitedList.Count > 0 ? waitedList.Copy() : waitedList;
- //allNum += waitedList.Count > 40 ? 40 : waitedList.Count;
- //allList.AddRange(waitedList);
- //已超期
- var waitedExpiredDataList = waitedDataList.Where(x => (x.Time < DateTime.Now && x.Status < EOrderStatus.Filed) ||
- (x.Time < x.ActualHandleTime && x.Status >= EOrderStatus.Filed))
- .OrderBy(x=> x.Time).Take(40).ToList();
- waitedExpiredDataList = waitedExpiredDataList.Count > 0 ? waitedExpiredDataList.Copy() : waitedExpiredDataList;
- waitedExpiredDataList.ForEach(x => x.Type = "WaitedExpired");
- //allNum += waitedExpiredDataList.Count;
- //allList.AddRange(waitedExpiredDataList);
- //会签待办
- var signDataList = waitedDataList.Where(x => x.Status == EOrderStatus.Countersigning).OrderBy(x => x.Time).Take(40).ToList();
- signDataList = signDataList.Count > 0 ? signDataList.Copy() : signDataList;
- signDataList.ForEach(x => x.Type = "Sign");
-
- //allNum += signDataList.Count;
- //allList.AddRange(signDataList);
- //甄别待审批
- var screenDataList = await _orderScreenRepository.Queryable(hasHandledStep: false, 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(hasHandledStep: false, 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);
- //部门即将超期
- var nearlyExpiredDataList = await _orderRepository.Queryable(canView: !IsCenter)
- .Includes(d => d.OrderDelays)
- .Where(d => SqlFunc.Subqueryable<WorkflowStep>()
- .Where(step => step.ExternalId == d.Id && step.Status != EWorkflowStepStatus.Handled &&
- ((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))))
- .Any())
- .Where(d => d.Status < EOrderStatus.Filed && DateTime.Now > d.NearlyExpiredTime && DateTime.Now < d.ExpiredTime)
- .OrderBy(d => d.NearlyExpiredTime)
- .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();
- return new
- {
- //AllNum = allNum,
- //AllList = allList,
- WaitedNum = waitedList.Count > 40 ? 40 : waitedList.Count,
- WaitedList = waitedList.Take(40).ToList(),
- WaitedExpiredNum = waitedExpiredDataList.Count,
- WaitedExpiredList = waitedExpiredDataList,
- 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,
- NearlyExpiredNum = nearlyExpiredDataList.Count,
- NearlyExpiredList = nearlyExpiredDataList,
- };
- }
- }
- }
- }
|