1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031 |
- using Hotline.Application.Orders;
- using Hotline.Application.StatisticalReport;
- using Hotline.Caching.Interfaces;
- using Hotline.CallCenter.Calls;
- using Hotline.FlowEngine.Workflows;
- using Hotline.Orders;
- using Hotline.Repository.SqlSugar.Extensions;
- using Hotline.Schedulings;
- using Hotline.Settings;
- using Hotline.Settings.Hotspots;
- using Hotline.Settings.TimeLimits;
- using Hotline.Share.Dtos;
- using Hotline.Share.Dtos.Ai;
- using Hotline.Share.Dtos.Bi;
- using Hotline.Share.Dtos.Bigscreen;
- using Hotline.Share.Dtos.CallCenter;
- using Hotline.Share.Dtos.Order;
- using Hotline.Share.Enums.CallCenter;
- using Hotline.Share.Enums.FlowEngine;
- using Hotline.Share.Enums.Order;
- using Hotline.Share.Requests;
- using Hotline.Tools;
- using MapsterMapper;
- using Microsoft.AspNetCore.Mvc;
- using MiniExcelLibs;
- using SqlSugar;
- using System.Data;
- using XF.Domain.Authentications;
- using XF.Domain.Exceptions;
- using XF.Domain.Repository;
- using XF.Utility.EnumExtensions;
- namespace Hotline.Api.Controllers.Bi
- {
- public class BiOrderController : BaseController
- {
- private readonly IOrderRepository _orderRepository;
- private readonly IRepository<Hotspot> _hotspotTypeRepository;
- private readonly ISystemDicDataCacheManager _sysDicDataCacheManager;
- private readonly IRepository<OrderVisitDetail> _orderVisitDetailRepository;
- private readonly IRepository<OrderDelay> _orderDelayRepository;
- private readonly IMapper _mapper;
- private readonly IRepository<WorkflowCountersign> _workflowCountersignRepository;
- private readonly IRepository<OrderSpecial> _orderSpecialRepository;
- private readonly IRepository<OrderVisit> _orderVisitRepository;
- private readonly IRepository<TrCallRecord> _trCallRecordRepository;
- private readonly IRepository<OrderPublish> _orderPublishRepository;
- private readonly IRepository<SystemOrganize> _systemOrganizeRepository;
- private readonly IRepository<AiOrderVisitDetail> _aiOrderVisitDetailRepository;
- private readonly ISessionContext _sessionContext;
- private readonly ISystemSettingCacheManager _systemSettingCacheManager;
- private readonly IRepository<OrderSpecialDetail> _orderSpecialDetailRepository;
- private readonly IRepository<WorkflowTrace> _workflowTraceRepository;
- private readonly IRepository<OrderScreen> _orderScreenRepository;
- private readonly IOrderSecondaryHandlingApplication _orderSecondaryHandlingApplication;
- private readonly IOrderApplication _orderApplication;
- private readonly ITimeLimitDomainService _timeLimitDomainService;
- private readonly IOrderReportApplication _orderReportApplication;
- private readonly IRepository<SystemArea> _systemAreaRepository;
- private readonly IRepository<Hotspot> _hotspotRepository;
- private readonly IRepository<SystemDicData> _systemDicDataRepository;
- public BiOrderController(
- IOrderRepository orderRepository,
- IRepository<Hotspot> hotspotTypeRepository,
- ISystemDicDataCacheManager sysDicDataCacheManager,
- IRepository<OrderVisitDetail> orderVisitDetailRepository,
- IRepository<OrderDelay> orderDelayRepository,
- IRepository<WorkflowCountersign> workflowCountersignRepository,
- IRepository<OrderSpecial> orderSpecialRepository,
- IMapper mapper,
- IRepository<OrderVisit> orderVisitRepository,
- IRepository<TrCallRecord> trCallRecordRepository,
- IRepository<OrderPublish> orderPublishRepository,
- IRepository<SystemOrganize> systemOrganizeRepository,
- IRepository<AiOrderVisitDetail> aiOrderVisitDetailRepository,
- ISessionContext sessionContext,
- ISystemSettingCacheManager systemSettingCacheManager,
- IRepository<OrderSpecialDetail> orderSpecialDetailRepository,
- IRepository<WorkflowTrace> workflowTraceRepository,
- IRepository<OrderScreen> orderScreenRepository,
- IOrderSecondaryHandlingApplication orderSecondaryHandlingApplication,
- IOrderApplication orderApplication,
- ITimeLimitDomainService timeLimitDomainService,
- IOrderReportApplication orderReportApplication,
- IRepository<SystemArea> systemAreaRepository,
- IRepository<Hotspot> hotspotRepository,
- IRepository<SystemDicData> systemDicDataRepository
- )
- {
- _orderRepository = orderRepository;
- _hotspotTypeRepository = hotspotTypeRepository;
- _sysDicDataCacheManager = sysDicDataCacheManager;
- _orderVisitDetailRepository = orderVisitDetailRepository;
- _orderDelayRepository = orderDelayRepository;
- _workflowCountersignRepository = workflowCountersignRepository;
- _orderSpecialRepository = orderSpecialRepository;
- _mapper = mapper;
- _orderVisitRepository = orderVisitRepository;
- _trCallRecordRepository = trCallRecordRepository;
- _orderPublishRepository = orderPublishRepository;
- _systemOrganizeRepository = systemOrganizeRepository;
- _aiOrderVisitDetailRepository = aiOrderVisitDetailRepository;
- _sessionContext = sessionContext;
- _systemSettingCacheManager = systemSettingCacheManager;
- _orderSpecialDetailRepository = orderSpecialDetailRepository;
- _workflowTraceRepository = workflowTraceRepository;
- _orderScreenRepository = orderScreenRepository;
- _orderSecondaryHandlingApplication = orderSecondaryHandlingApplication;
- _orderApplication = orderApplication;
- _timeLimitDomainService = timeLimitDomainService;
- _orderReportApplication = orderReportApplication;
- _systemAreaRepository = systemAreaRepository;
- _hotspotRepository = hotspotRepository;
- _systemDicDataRepository = systemDicDataRepository;
- }
- /// <summary>
- /// 部门超期统计明细
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("org_data_list_detail")]
- public async Task<PagedDto<OrderDto>> OrgDataListDetail([FromQuery] OrgDataListDetailRequest dto)
- {
- var quer = _orderApplication.QueryOrgDataListDetail(dto);
- var (total, items) = await quer.ToPagedListAsync(dto.PageIndex, dto.PageSize);
- return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
- }
- /// <summary>
- /// 部门超期统计明细导出
- /// </summary>
- /// <returns></returns>
- [HttpPost("org_data_list_detail/_export")]
- public async Task<FileStreamResult> OrgDataListDetailExport([FromBody] ExportExcelDto<OrgDataListDetailRequest> dto)
- {
- var query = _orderApplication.QueryOrgDataListDetail(dto.QueryDto);
- List<Order> data;
- if (dto.IsExportAll)
- {
- data = await query.ToListAsync(HttpContext.RequestAborted);
- }
- else
- {
- var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
- data = items;
- }
- var dataDtos = _mapper.Map<ICollection<OrderDto>>(data);
- dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
- var dtos = dataDtos
- .Select(stu => _mapper.Map(stu, typeof(OrderDto), dynamicClass))
- .Cast<object>()
- .ToList();
- var stream = ExcelHelper.CreateStream(dtos);
- return ExcelStreamResult(stream, "部门超期统计明细数据");
- }
- /// <summary>
- /// 全量部门超期统计明细
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("org_data_list_detail_all")]
- public async Task<PagedDto<OrderDto>> OrgDataListDetail([FromQuery] OrgDataListAllDetailRequest dto)
- {
- var quer = _orderApplication.QueryOrgDataListDetail(dto);
- var (total, items) = await quer.ToPagedListAsync(dto.PageIndex, dto.PageSize);
- return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
- }
- /// <summary>
- /// 部门超期统计明细导出
- /// </summary>
- /// <returns></returns>
- [HttpPost("org_data_list_detail_all/_export")]
- public async Task<FileStreamResult> OrgDataListDetailExport([FromBody] ExportExcelDto<OrgDataListAllDetailRequest> dto)
- {
- var query = _orderApplication.QueryOrgDataListDetail(dto.QueryDto);
- List<Order> data;
- if (dto.IsExportAll)
- {
- data = await query.ToListAsync(HttpContext.RequestAborted);
- }
- else
- {
- var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
- data = items;
- }
- var dataDtos = _mapper.Map<ICollection<OrderDto>>(data);
- dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
- var dtos = dataDtos
- .Select(stu => _mapper.Map(stu, typeof(OrderDto), dynamicClass))
- .Cast<object>()
- .ToList();
- var stream = ExcelHelper.CreateStream(dtos);
- return ExcelStreamResult(stream, "部门超期统计明细数据");
- }
- /// <summary>
- /// 列表页面基础数据
- /// </summary>
- /// <returns></returns>
- [HttpGet("org_data_list_detail_all/base-data")]
- public async Task<object> BaseData()
- {
- var rsp = new
- {
- OrderStatusOptions = EnumExts.GetDescriptions<EOrderStatus>()
- };
- return rsp;
- }
- /// <summary>
- /// 部门超期统计
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("org_data_list")]
- public async Task<PagedDto<OrderBiOrgDataListVo>> OrgDataList([FromQuery] ReportPagedRequest dto)
- {
- var query = _orderApplication.QueryOrgDataList(dto);
- var (total, items) = await query.ToPagedListAsync(dto, HttpContext.RequestAborted);
- items.Add(new OrderBiOrgDataListVo
- {
- OrgName = "合计",
- HandlerExtendedNum = items.Select(s => s.HandlerExtendedNum).Sum(),
- CounterHandlerExtendedNum = items.Select(s => s.CounterHandlerExtendedNum).Sum(),
- NoHandlerExtendedNum = items.Select(s => s.NoHandlerExtendedNum).Sum(),
- CounterNoHandlerExtendedNum = items.Select(s => s.CounterNoHandlerExtendedNum).Sum(),
- });
- return new PagedDto<OrderBiOrgDataListVo>(total, items);
- }
- /// <summary>
- /// 部门超期统计导出
- /// </summary>
- /// <returns></returns>
- [HttpPost("org_data_list/_export")]
- public async Task<FileStreamResult> OrgDataListExport([FromBody] ExportExcelDto<ReportPagedRequest> dto)
- {
- var query = _orderApplication.QueryOrgDataList(dto.QueryDto);
- List<OrderBiOrgDataListVo> data;
- data = await query.ToListAsync(HttpContext.RequestAborted);
- data.Add(new OrderBiOrgDataListVo
- {
- OrgName = "合计",
- HandlerExtendedNum = data.Select(s => s.HandlerExtendedNum).Sum(),
- CounterHandlerExtendedNum = data.Select(s => s.CounterHandlerExtendedNum).Sum(),
- NoHandlerExtendedNum = data.Select(s => s.NoHandlerExtendedNum).Sum(),
- CounterNoHandlerExtendedNum = data.Select(s => s.CounterNoHandlerExtendedNum).Sum(),
- });
- dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
- var dtos = data
- .Select(stu => _mapper.Map(stu, typeof(OrderBiOrgDataListVo), dynamicClass))
- .Cast<object>()
- .ToList();
- var stream = ExcelHelper.CreateStream(dtos);
- return ExcelStreamResult(stream, "部门超期统计数据");
- }
- /// <summary>
- /// 话务员办件统计
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("centre_data_list")]
- public async Task<List<OrderBiCentreDataListVo>> CentreDataList([FromQuery] ReportPagedRequest dto)
- {
- if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
- dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
- var query = _orderRepository.Queryable(false, false, false)
- .WhereIF(dto.StartTime.HasValue, it => it.CreationTime >= dto.StartTime)
- .WhereIF(dto.EndTime.HasValue, it => it.CreationTime <= dto.EndTime)
- .WhereIF(!string.IsNullOrEmpty(dto.Keyword), it => it.SignerName.Contains(dto.Keyword!))
- .GroupBy(it => new { it.SignerId, it.SignerName })
- .Select(it => new OrderBiCentreDataListVo
- {
- UserName = it.SignerName,
- UserId = it.SignerId,
- //Subtotal = SqlFunc.AggregateCount(x.AcceptorId),
- CentreArchive = SqlFunc.AggregateSum(SqlFunc.IIF(it.Status >= EOrderStatus.Filed && it.ProcessType == EProcessType.Zhiban && it.AcceptType != "无效", 1, 0)), //中心归档件
- //CentreCareOf = SqlFunc.AggregateSum(SqlFunc.IIF(it.Status >= EOrderStatus.Filed && (it.FileUserRole == EFileUserType.Org || it.FileUserRole == EFileUserType.Dispatch), 1, 0)), //转办信件
- CentreCareOf = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptType != "无效" && (it.ProcessType == EProcessType.Jiaoban || (it.ActualHandleStepName == "派单组" && it.Status < EOrderStatus.Filed) || (it.ActualHandleStepName == "班长审批" && it.Status < EOrderStatus.Filed)), 1, 0)),
- NoCentreCareOf = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptType != "无效" && (it.Status <= EOrderStatus.SpecialToUnAccept), 1, 0)), //坐席待办 //中心领导?市领导? 是否在统计条件中
- //CentreCareOf = SqlFunc.AggregateSum(SqlFunc.IIF(it.Status >= EOrderStatus.Filed && it.ProcessType == EProcessType.Jiaoban, 1, 0)),
- //NoCentreCareOf = SqlFunc.AggregateSum(SqlFunc.IIF((int)x.Status < 300 && x.ExpiredTime > x.FiledTime, 1, 0)),
- Invalid = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptType == "无效", 1, 0)),
- Repeat = SqlFunc.AggregateSum(SqlFunc.IIF(it.DuplicateIds != null && SqlFunc.JsonArrayLength(it.DuplicateIds) > 0, 1, 0)),
- Subtotal = SqlFunc.AggregateSum(SqlFunc.IIF((it.Status >= EOrderStatus.Filed && it.ProcessType == EProcessType.Zhiban && it.AcceptType != "无效") || (it.AcceptType != "无效" && (it.ProcessType == EProcessType.Jiaoban || (it.ActualHandleStepName == "派单组" && it.Status < EOrderStatus.Filed) || (it.ActualHandleStepName == "班长审批" && it.Status < EOrderStatus.Filed))) || (it.Status <= EOrderStatus.SpecialToUnAccept) || it.AcceptType == "无效" || (it.DuplicateIds != null && SqlFunc.JsonArrayLength(it.DuplicateIds) > 0), 1, 0))
- }).MergeTable();
- switch (dto.SortField)
- {
- case "centreArchive":
- query = dto.SortRule is 0 ? query.OrderBy(x => x.CentreArchive) : query.OrderByDescending(x => x.CentreArchive);
- break;
- case "centreCareOf":
- query = dto.SortRule is 0 ? query.OrderBy(x => x.CentreCareOf) : query.OrderByDescending(x => x.CentreCareOf);
- break;
- case "noCentreCareOf":
- query = dto.SortRule is 0 ? query.OrderBy(x => x.NoCentreCareOf) : query.OrderByDescending(x => x.NoCentreCareOf);
- break;
- case "invalid":
- query = dto.SortRule is 0 ? query.OrderBy(x => x.Invalid) : query.OrderByDescending(x => x.Invalid);
- break;
- case "repeat":
- query = dto.SortRule is 0 ? query.OrderBy(x => x.Repeat) : query.OrderByDescending(x => x.Repeat);
- break;
- case "subtotal":
- query = dto.SortRule is 0 ? query.OrderBy(x => x.Subtotal) : query.OrderByDescending(x => x.Subtotal);
- break;
- }
- if (string.IsNullOrEmpty(dto.SortField))
- {
- query = query.OrderByDescending(x => x.Subtotal);
- }
- var list = await query.Where(x => (x.CentreArchive + x.CentreCareOf + x.NoCentreCareOf + x.Invalid + x.Repeat) != 0).ToListAsync(HttpContext.RequestAborted);
- return list;
- }
- /// <summary>
- /// 热点数据小计统计
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("hotspot_subtotal_data_list")]
- public async Task<PagedDto<HotspotDataLsitVo>> HotspotSubtotalDataLsit([FromQuery] HotspotSubtotalReportPagedRequest dto)
- {
- if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
- dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
- var query = _hotspotTypeRepository.Queryable(false, true)
- .LeftJoin<Order>((x, o) => o.HotspotSpliceName != null && (x.HotSpotFullName == o.HotspotSpliceName || o.HotspotSpliceName.Contains(x.HotSpotFullName)) && o.IsDeleted == false)
- .WhereIF(dto.StartTime.HasValue, (x, o) => o.CreationTime >= dto.StartTime)
- .WhereIF(dto.EndTime.HasValue, (x, o) => o.CreationTime <= dto.EndTime)
- .WhereIF(!string.IsNullOrEmpty(dto.Keyword), (x, o) => x.HotSpotName.Contains(dto.Keyword!))
- .Where((x, o) => x.ParentId == dto.Id)
- .Where((x, o) => x.IsDeleted == false)
- .GroupBy((x, o) => new { x.Id, x.HotSpotName })
- .Select((x, o) => new HotspotDataLsitVo
- {
- Id = x.Id,
- Name = x.HotSpotName,
- Num = SqlFunc.AggregateSum(SqlFunc.IIF(o.Id != null, 1, 0)),
- }).MergeTable();
- var (total, items) = await query.ToPagedListAsync(dto, HttpContext.RequestAborted);
- return new PagedDto<HotspotDataLsitVo>(total, items);
- }
- /// <summary>
- /// 热点数据统计
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("hotspot_data_list")]
- public async Task<object> HotspotDataLsit([FromQuery] HotspotReportPagedRequest dto)
- {
- if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
- if (dto.Type == 0 && (!dto.ChainStartTime.HasValue || !dto.ChainEndTime.HasValue)) throw UserFriendlyException.SameMessage("请选择环比时间!");
- dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
- var IsCenter = _sessionContext.OrgIsCenter;
- if (dto.Type == 0)
- {
- dto.ChainEndTime = dto.ChainEndTime.Value.AddDays(1).AddSeconds(-1);
- }
- var items = await _hotspotTypeRepository.Queryable(false, true)
- .LeftJoin<Order>((x, o) => o.HotspotSpliceName != null && (x.HotSpotName == o.HotspotSpliceName || o.HotspotSpliceName.Contains(x.HotSpotName)) && o.IsDeleted == false)
- .WhereIF(dto.StartTime.HasValue, (x, o) => o.CreationTime >= dto.StartTime)
- .WhereIF(dto.EndTime.HasValue, (x, o) => o.CreationTime <= dto.EndTime)
- .WhereIF(!string.IsNullOrEmpty(dto.Keyword), (x, o) => x.HotSpotName.Contains(dto.Keyword!))
- .WhereIF(IsCenter == false, (x, o) => o.ActualHandleOrgCode == _sessionContext.RequiredOrgId)
- .Where((x, o) => x.ParentId == dto.Id)
- .Where((x, o) => x.IsDeleted == false)
- .GroupBy((x, o) => new { x.Id, x.HotSpotName })
- .Select((x, o) => new HotspotDataLsitVo
- {
- Id = x.Id,
- Name = x.HotSpotName,
- Num = SqlFunc.AggregateSum(SqlFunc.IIF(o.Id != null, 1, 0)),
- Sublevel = SqlFunc.AggregateSum(SqlFunc.IIF(x.HotSpotName != o.HotspotName, 1, 0)) > 0,
- }).MergeTable().ToListAsync();
- var chainStartTime = dto.StartTime;
- var chainEndTime = dto.EndTime;
- switch (dto.Type)
- {
- case 1://日
- chainStartTime = dto.StartTime.Value.AddDays(-1);
- chainEndTime = dto.EndTime.Value.AddDays(-1);
- break;
- case 2://月
- chainStartTime = dto.StartTime.Value.AddMonths(-1);
- chainEndTime = dto.EndTime.Value.AddMonths(-1);
- break;
- case 3://年
- chainStartTime = dto.StartTime.Value.AddYears(-1);
- chainEndTime = dto.EndTime.Value.AddYears(-1);
- break;
- case 0:
- chainStartTime = dto.ChainStartTime.Value;
- chainEndTime = dto.ChainEndTime.Value;
- break;
- }
- var chainItems = await _hotspotTypeRepository.Queryable(false, true)
- .LeftJoin<Order>((x, o) => o.HotspotSpliceName != null && (x.HotSpotName == o.HotspotSpliceName || o.HotspotSpliceName.Contains(x.HotSpotName)) && o.IsDeleted == false)
- .WhereIF(dto.StartTime.HasValue, (x, o) => o.CreationTime >= chainStartTime)
- .WhereIF(dto.EndTime.HasValue, (x, o) => o.CreationTime <= chainEndTime)
- .WhereIF(!string.IsNullOrEmpty(dto.Keyword), (x, o) => x.HotSpotName.Contains(dto.Keyword!))
- .WhereIF(IsCenter == false, (x, o) => o.ActualHandleOrgCode == _sessionContext.RequiredOrgId)
- .Where((x, o) => x.ParentId == dto.Id)
- .Where((x, o) => x.IsDeleted == false)
- .GroupBy((x, o) => new { x.Id, x.HotSpotName })
- .Select((x, o) => new
- {
- Id = x.Id,
- ChainNum = SqlFunc.AggregateSum(SqlFunc.IIF(o.Id != null, 1, 0)),
- }).MergeTable().ToListAsync();
- var res = (from t1 in items
- join t2 in chainItems on t1.Id equals t2.Id into t1_t2
- from item in t1_t2.DefaultIfEmpty()
- select new
- {
- Id = t1.Id,
- Name = t1.Name,
- Num = t1.Num,
- Sublevel = t1.Sublevel,
- Children = new List<HotspotDataLsitVo>(),
- ChainNum = t1_t2.Select(x => x.ChainNum).FirstOrDefault(),
- ChainRate = t1_t2.Select(x => x.ChainNum).FirstOrDefault() > 0 ?
- ((double.Parse(t1.Num.ToString()) - double.Parse(t1_t2.Select(x => x.ChainNum).FirstOrDefault().ToString())) / double.Parse(t1_t2.Select(x => x.ChainNum).FirstOrDefault().ToString()) * 100).ToString("F2") + "%" : "100.00%",
- }).ToList();
- var total = new
- {
- Id = "0",
- Name = "合计",
- Num = res.Sum(x => x.Num),
- Sublevel = false,
- Children = new List<HotspotDataLsitVo>(),
- ChainNum = res.Sum(x => x.ChainNum),
- ChainRate = res.Sum(x => x.ChainNum) > 0 ? ((double.Parse(res.Sum(x => x.Num).ToString()) - double.Parse(res.Sum(x => x.ChainNum).ToString())) / double.Parse(res.Sum(x => x.ChainNum).ToString()) * 100).ToString("F2") + "%" : "100.00%"
- };
- return new { List = res, Total = total };
- }
- /// <summary>
- /// 部门不满意统计
- /// 已加验证部门
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("visit-nosatisfied")]
- public async Task<object> QueryVisitNoSatisfied([FromQuery] QueryVisitNoSatiisfiedRequest dto)
- {
- if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
- dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
- var IsCenter = _sessionContext.OrgIsCenter;
- var dissatisfiedReason = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.DissatisfiedReason);
- List<dynamic>? list = new List<dynamic>();
- //DataTable dt = new DataTable();
- foreach (var item in dissatisfiedReason)
- {
- var table = _orderVisitDetailRepository.Queryable()
- .Includes(x => x.OrderVisit)
- .Where(x => x.VisitTarget == Share.Enums.Order.EVisitTarget.Org)
- .Where(x => x.OrgNoSatisfiedReason != null)
- .Where(x => x.OrderVisit.VisitState == EVisitState.Visited)
- .Where(x => !string.IsNullOrEmpty(x.VisitOrgName))
- .WhereIF(!string.IsNullOrEmpty(dto.OrgName), x => x.VisitOrgName.Contains(dto.OrgName))
- .WhereIF(dto.StartTime.HasValue, x => x.OrderVisit.VisitTime >= dto.StartTime.Value)
- .WhereIF(dto.EndTime.HasValue, x => x.OrderVisit.VisitTime <= dto.EndTime.Value)
- .WhereIF(IsCenter == false, x => x.VisitOrgCode.StartsWith(_sessionContext.RequiredOrgId))
- .GroupBy(x => new { x.VisitOrgName, x.VisitOrgCode })
- .Select(x => new BiVisitNoSatisfiedDto
- {
- Count = SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonListObjectAny(x.OrgNoSatisfiedReason, "Key", item.DicDataValue), 1, 0)),
- Key = item.DicDataValue,
- OrgName = x.VisitOrgName,
- OrgCode = x.VisitOrgCode
- })
- .OrderByDescending(x => x.Count)
- //.ToPivotTable(x => x.Key, x => x.OrgName, x => x.Sum(x => x.Count));
- .ToPivotList(x => x.Key, x => new { x.OrgCode, x.OrgName }, x => x.Sum(x => x.Count));
- list.AddRange(table);
- }
- return new { DicReason = dissatisfiedReason, Data = list };
- }
- /// <summary>
- /// 部门不满意统计明细
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("visit-nosatisfied-detail")]
- public async Task<PagedDto<OrderVisitDetailDto>> BiQueryVisitNoSatisfiedDetail([FromQuery] BiQueryVisitNoSatisfiedDetailDto dto)
- {
- if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
- dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
- var IsCenter = _sessionContext.OrgIsCenter;
- var (total, items) = await _orderVisitDetailRepository.Queryable()
- .Includes(x => x.OrderVisit, d => d.Order)
- .Includes(x => x.OrderVisit, d => d.Employee)
- .Where(x => x.VisitOrgCode == dto.OrgCode)
- .Where(x => x.OrderVisit.VisitState == EVisitState.Visited)
- .Where(x => x.OrderVisit.VisitTime >= dto.StartTime.Value)
- .Where(x => x.OrderVisit.VisitTime <= dto.EndTime.Value)
- .Where(x => SqlFunc.JsonListObjectAny(x.OrgNoSatisfiedReason, "Key", dto.DissatisfiedKey))
- .WhereIF(IsCenter == false, x => x.VisitOrgCode.StartsWith(_sessionContext.RequiredOrgId))
- .WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.OrderVisit.Order.No.Contains(dto.Keyword) || x.OrderVisit.Order.Title.Contains(dto.Keyword))
- .OrderBy(x => x.OrderVisit.VisitTime)
- .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
- return new PagedDto<OrderVisitDetailDto>(total, _mapper.Map<IReadOnlyList<OrderVisitDetailDto>>(items));
- }
- /// <summary>
- /// 部门延期统计
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("order-delay-data-list")]
- public async Task<IReadOnlyList<BiOrderDelayDataDto>> QueryOrderDelayDataList([FromQuery] QueryOrderDelayDataListRequest dto)
- {
- return await _orderReportApplication.QueryOrderDelayDataList(dto).ToListAsync();
- }
- /// <summary>
- /// 部门延期统计---导出
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpPost("order-delay-data-list-export")]
- public async Task<FileStreamResult> ExportQueryOrderDelayDataList([FromBody] ExportExcelDto<QueryOrderDelayDataListRequest> dto)
- {
- var query = _orderReportApplication.QueryOrderDelayDataList(dto.QueryDto);
- List<BiOrderDelayDataDto> list;
- if (dto.IsExportAll)
- {
- list = await query.ToListAsync(HttpContext.RequestAborted);
- }
- else
- {
- var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
- list = items;
- }
- list.Add(new BiOrderDelayDataDto()
- {
- OrgName = "合计",
- OrgCode = "",
- AllTotal = list.Sum(p => p.AllTotal),
- PassTotal = list.Sum(p => p.PassTotal),
- NoPassTotal = list.Sum(p => p.NoPassTotal),
- ExaminingTotal = list.Sum(p => p.ExaminingTotal)
- });
- var orderDtos = _mapper.Map<ICollection<BiOrderDelayDataDto>>(list);
- dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
- var dtos = orderDtos
- .Select(stu => _mapper.Map(stu, typeof(BiOrderDelayDataDto), dynamicClass))
- .Cast<object>()
- .ToList();
- var stream = ExcelHelper.CreateStream(dtos);
- return ExcelStreamResult(stream, "部门延期统计数据");
- }
- /// <summary>
- /// 部门延期统计明细
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("order-delay-data-detail")]
- public async Task<PagedDto<OrderDelayDto>> QueryOrderDelayDataDetail([FromQuery] QueryOrderDelayDataDetailRequest dto)
- {
- var (total, items) = await _orderReportApplication.QueryOrderDelayDataDetail(dto).ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
- return new PagedDto<OrderDelayDto>(total, _mapper.Map<IReadOnlyList<OrderDelayDto>>(items));
- }
- /// <summary>
- /// 部门延期统计明细--导出
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpPost("order-delay-data-detail-export")]
- public async Task<FileStreamResult> ExportQueryOrderDelayDataDetail([FromBody] ExportExcelDto<QueryOrderDelayDataDetailRequest> dto)
- {
- var query = _orderReportApplication.QueryOrderDelayDataDetail(dto.QueryDto);
- List<OrderDelay> list;
- if (dto.IsExportAll)
- {
- list = await query.ToListAsync(HttpContext.RequestAborted);
- }
- else
- {
- var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
- list = items;
- }
- var orderDtos = _mapper.Map<ICollection<OrderDelayDto>>(list);
- dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
- var dtos = orderDtos
- .Select(stu => _mapper.Map(stu, typeof(OrderDelayDto), dynamicClass))
- .Cast<object>()
- .ToList();
- var stream = ExcelHelper.CreateStream(dtos);
- return ExcelStreamResult(stream, "部门延期统计明细数据");
- }
- /// <summary>
- /// 特提统计
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("special_data_list")]
- public async Task<PagedDto<OrderBiSpecialListVo>> SpecialDataList([FromQuery] ReportPagedRequest dto)
- {
- if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
- dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
- var IsCenter = _sessionContext.OrgIsCenter;
- var query = _orderSpecialRepository.Queryable()
- .WhereIF(dto.StartTime.HasValue, x => x.CreationTime >= dto.StartTime)
- .WhereIF(dto.EndTime.HasValue, x => x.CreationTime <= dto.EndTime)
- .WhereIF(IsCenter == false, x => x.OrgId.StartsWith(_sessionContext.RequiredOrgId))
- .GroupBy(x => new { x.Cause })
- .Select(x => new OrderBiSpecialListVo
- {
- Cause = x.Cause,
- OrderNum = SqlFunc.AggregateSum(SqlFunc.IIF(true, 1, 0)),
- MaxSpecialTime = SqlFunc.AggregateMax(x.CreationTime),
- })
- .MergeTable();
- switch (dto.SortField)
- {
- case "cause":
- query = dto.SortRule is 0 ? query.OrderBy(x => x.Cause) : query.OrderByDescending(x => x.Cause);
- break;
- case "orderNum":
- query = dto.SortRule is 0 ? query.OrderBy(x => x.OrderNum) : query.OrderByDescending(x => x.OrderNum);
- break;
- case "maxSpecialTime":
- query = dto.SortRule is 0 ? query.OrderBy(x => x.MaxSpecialTime) : query.OrderByDescending(x => x.MaxSpecialTime);
- break;
- }
- var (total, items) = await query.ToPagedListAsync(dto, HttpContext.RequestAborted);
- return new PagedDto<OrderBiSpecialListVo>(total, items);
- }
- /// <summary>
- /// 获取工单特提信息列表
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("special_data_list/list")]
- public async Task<PagedDto<OrderSpecialDto>> List([FromQuery] OrderSpecialListDto dto)
- {
- if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
- dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
- var IsCenter = _sessionContext.OrgIsCenter;
- var (total, items) = await _orderSpecialRepository.Queryable()
- .Includes(x => x.Order)
- .WhereIF(!string.IsNullOrEmpty(dto.Keyword),
- x => x.Order.No.Contains(dto.Keyword!) || x.Order.Title.Contains(dto.Keyword!))
- .WhereIF(!string.IsNullOrEmpty(dto.Cause),
- x => x.Cause != null && x.Cause.Equals(dto.Cause))
- .WhereIF(dto.StartTime.HasValue, x => x.CreationTime >= dto.StartTime)
- .WhereIF(dto.EndTime.HasValue, x => x.CreationTime <= dto.EndTime)
- .WhereIF(dto.State.HasValue, x => x.State == dto.State)
- .WhereIF(IsCenter == false, x => x.OrgId.StartsWith(_sessionContext.OrgId))
- .OrderByDescending(x => x.CreationTime)
- .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
- return new PagedDto<OrderSpecialDto>(total, _mapper.Map<IReadOnlyList<OrderSpecialDto>>(items));
- }
- /// <summary>
- /// 受理类型前十
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("accept_type_top10_list")]
- public async Task<PagedDto<AcceptTypeTop10Vo>> AcceptTypeTop10List([FromQuery] ReportPagedRequest dto)
- {
- if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
- dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
- dto.PageIndex = 1;
- dto.PageSize = 10;
- var IsCenter = _sessionContext.OrgIsCenter;
- var query = _orderRepository.Queryable(false, false, false)
- .WhereIF(dto.StartTime.HasValue, x => x.CreationTime >= dto.StartTime)
- .WhereIF(dto.EndTime.HasValue, x => x.CreationTime <= dto.EndTime)
- .WhereIF(IsCenter == false, x => x.ActualHandleOrgCode.StartsWith(_sessionContext.RequiredOrgId))
- .Select(x => new
- {
- AcceptType = x.AcceptType,
- OneHotspot = SqlFunc.Substring(x.HotspotSpliceName, 0, SqlFunc.CharIndex("-", x.HotspotSpliceName + "-")),
- Id = x.Id
- }).MergeTable()
- .GroupBy(x => new { x.OneHotspot })
- .Select(x => new AcceptTypeTop10Vo
- {
- Name = x.OneHotspot,
- ValidAccept = SqlFunc.AggregateSum(SqlFunc.IIF(true, 1, 0)),
- Consult = SqlFunc.AggregateSum(SqlFunc.IIF("咨询".Equals(x.AcceptType), 1, 0)),
- Report = SqlFunc.AggregateSum(SqlFunc.IIF("举报".Equals(x.AcceptType), 1, 0)),
- Complaint = SqlFunc.AggregateSum(SqlFunc.IIF("投诉".Equals(x.AcceptType), 1, 0)),
- SeekHelp = SqlFunc.AggregateSum(SqlFunc.IIF("求助".Equals(x.AcceptType), 1, 0)),
- Suggest = SqlFunc.AggregateSum(SqlFunc.IIF("建议".Equals(x.AcceptType), 1, 0)),
- Opinion = SqlFunc.AggregateSum(SqlFunc.IIF("意见".Equals(x.AcceptType), 1, 0)),
- Rests = SqlFunc.AggregateSum(SqlFunc.IIF("其他".Equals(x.AcceptType), 1, 0)),
- BenefitThePeople = SqlFunc.AggregateSum(SqlFunc.IIF("惠民帮助".Equals(x.AcceptType), 1, 0)),
- Praise = SqlFunc.AggregateSum(SqlFunc.IIF("表扬".Equals(x.AcceptType), 1, 0)),
- }).MergeTable();
- switch (dto.SortField)
- {
- case "validAccept":
- query = dto.SortRule is 0 ? query.OrderBy(x => x.ValidAccept) : query.OrderByDescending(x => x.ValidAccept);
- break;
- case "consult":
- query = dto.SortRule is 0 ? query.OrderBy(x => x.Consult) : query.OrderByDescending(x => x.Consult);
- break;
- case "report":
- query = dto.SortRule is 0 ? query.OrderBy(x => x.Report) : query.OrderByDescending(x => x.Report);
- break;
- case "complaint":
- query = dto.SortRule is 0 ? query.OrderBy(x => x.Complaint) : query.OrderByDescending(x => x.Complaint);
- break;
- case "seekHelp":
- query = dto.SortRule is 0 ? query.OrderBy(x => x.SeekHelp) : query.OrderByDescending(x => x.SeekHelp);
- break;
- case "suggest":
- query = dto.SortRule is 0 ? query.OrderBy(x => x.Suggest) : query.OrderByDescending(x => x.Suggest);
- break;
- case "opinion":
- query = dto.SortRule is 0 ? query.OrderBy(x => x.Opinion) : query.OrderByDescending(x => x.Opinion);
- break;
- case "rests":
- query = dto.SortRule is 0 ? query.OrderBy(x => x.Rests) : query.OrderByDescending(x => x.Rests);
- break;
- case "benefitThePeople":
- query = dto.SortRule is 0 ? query.OrderBy(x => x.BenefitThePeople) : query.OrderByDescending(x => x.BenefitThePeople);
- break;
- case "praise":
- query = dto.SortRule is 0 ? query.OrderBy(x => x.Praise) : query.OrderByDescending(x => x.Praise);
- break;
- default:
- query = query.OrderByDescending(x => x.ValidAccept);
- break;
- }
- var (total, items) = await query.ToPagedListAsync(dto, HttpContext.RequestAborted);
- return new PagedDto<AcceptTypeTop10Vo>(total, items);
- }
- /// <summary>
- /// 热点类型部门统计
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("hotport-org-statistics")]
- public async Task<object> HotPortJoinOrgStatistics([FromQuery] HotPortJoinOrgStatisticsRequest dto)
- {
- dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
- var IsCenter = _sessionContext.OrgIsCenter;
- return await _orderRepository.HotPortJoinOrgStatistics(dto.StartTime, dto.EndTime, IsCenter, _sessionContext.OrgId);
- }
- /// <summary>
- /// 回访量统计
- /// </summary>
- /// <param name="StartTime"></param>
- /// <param name="EndTime"></param>
- /// <param name="VisitName"></param>
- /// <returns></returns>
- [HttpGet("visit-measure-statistics")]
- public async Task<VisitMeasureStatisticsDto> VisitMeasureStatistics(DateTime StartTime, DateTime EndTime, string? VisitName)
- {
- EndTime = EndTime.AddDays(1).AddSeconds(-1);
- var list = await _orderVisitRepository.Queryable()
- .Includes(x => x.Employee)
- .Where(x => x.VisitTime >= StartTime && x.VisitTime <= EndTime && x.VisitState == EVisitState.Visited)
- .WhereIF(!string.IsNullOrEmpty(VisitName), x => x.Employee.Name.Contains(VisitName))
- .GroupBy(x => new { x.EmployeeId, x.Employee.Name })
- .Select(x => new VisitMeasureStatisticsModelDto()
- {
- VisitName = x.Employee.Name,
- CallVisitCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.VisitType == EVisitType.CallVisit, 1, 0)),
- ArtificialVisitCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.VisitType != EVisitType.CallVisit, 1, 0)),
- SumCount = SqlFunc.AggregateCount(x.EmployeeId)
- })
- .ToListAsync();
- var returnModel = new VisitMeasureStatisticsDto();
- returnModel.VisitMeasureStatisticsModelList = list;
- //查询AIVisit
- returnModel.AiVisitCount = await _aiOrderVisitDetailRepository.Queryable()
- .Where(x => x.AiVisitTime >= StartTime && x.AiVisitTime <= EndTime && x.IsSuccess != null).CountAsync();
- returnModel.AiVisitSatisfiedCount = await _aiOrderVisitDetailRepository.Queryable()
- .Includes(x => x.OrderVisit)
- .Where(x => x.AiVisitTime >= StartTime && x.AiVisitTime <= EndTime && x.IsSuccess == true && SqlFunc.JsonField(x.OrderVisit.NowEvaluate, "Key") != "1" && SqlFunc.JsonField(x.OrderVisit.NowEvaluate, "Key") != "2").CountAsync();
- returnModel.AiVisitNoSatisfiedCount = await _aiOrderVisitDetailRepository.Queryable()
- .Includes(x => x.OrderVisit)
- .Where(x => x.AiVisitTime >= StartTime && x.AiVisitTime <= EndTime && x.IsSuccess == true && SqlFunc.JsonField(x.OrderVisit.NowEvaluate, "Key") == "1" && SqlFunc.JsonField(x.OrderVisit.NowEvaluate, "Key") == "2").CountAsync();
- returnModel.AIVisitFailCount = await _aiOrderVisitDetailRepository.Queryable()
- .Where(x => x.AiVisitTime >= StartTime && x.AiVisitTime <= EndTime && x.IsSuccess == false).CountAsync();
- return returnModel;
- }
- /// <summary>
- /// 热点类型小类统计
- /// </summary>
- /// <param name="StartTime"></param>
- /// <param name="EndTime"></param>
- /// <param name="TypeId">0:全部 ,1:市民,2:企业</param>
- /// <returns></returns>
- [HttpGet("hotspot-statistics")]
- public async Task<object> HotspotStatistics(DateTime StartTime, DateTime EndTime, int TypeId, string? HotspotCode)
- {
- EndTime = EndTime.AddDays(1).AddSeconds(-1);
- var IsCenter = _sessionContext.OrgIsCenter;
- if (string.IsNullOrEmpty(HotspotCode))
- {
- var list = await _hotspotTypeRepository.Queryable()
- .LeftJoin<Order>((it, o) => it.Id == o.HotspotId)
- .Where((it, o) => o.CreationTime >= StartTime && o.CreationTime <= EndTime && o.Id != null)
- .WhereIF(TypeId == 1, (it, o) => o.IdentityType == EIdentityType.Citizen)
- .WhereIF(TypeId == 2, (it, o) => o.IdentityType == EIdentityType.Enterprise)
- .WhereIF(IsCenter == false, (it, o) => o.ActualHandleOrgCode.StartsWith(_sessionContext.RequiredOrgId))
- .GroupBy((it, o) => new { Id = it.Id.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("2")) })
- .Select((it, o) => new
- {
- HotspotCode = it.Id.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("2")),
- SumCount = SqlFunc.AggregateCount(it.HotSpotName)
- })
- .MergeTable()
- .LeftJoin<Hotspot>((x, q) => x.HotspotCode == q.Id)
- .Select((x, q) => new
- {
- HotspotCode = x.HotspotCode,
- SumCount = x.SumCount,
- HotspotName = q.HotSpotName,
- HasChild = SqlFunc.Subqueryable<Hotspot>().Where(d => d.ParentId == x.HotspotCode).Any()
- })
- .ToListAsync();
- return list;
- }
- else
- {
- string count = (HotspotCode.Length + 2).ToString();
- string countx = HotspotCode.Length.ToString();
- var list = await _hotspotTypeRepository.Queryable()
- .LeftJoin<Order>((it, o) => it.Id == o.HotspotId)
- .Where((it, o) => o.CreationTime >= StartTime && o.CreationTime <= EndTime && it.ParentId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>(countx)) == HotspotCode)
- .WhereIF(TypeId == 1, (it, o) => o.IdentityType == EIdentityType.Citizen)
- .WhereIF(TypeId == 2, (it, o) => o.IdentityType == EIdentityType.Enterprise)
- .WhereIF(IsCenter == false, (it, o) => o.ActualHandleOrgCode.StartsWith(_sessionContext.RequiredOrgId))
- .GroupBy((it, o) => new { Id = it.Id.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>(count)) })
- .Select((it, o) => new
- {
- HotspotCode = it.Id.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>(count)),
- SumCount = SqlFunc.AggregateCount(it.HotSpotName)
- })
- .MergeTable()
- .LeftJoin<Hotspot>((x, q) => x.HotspotCode == q.Id)
- .Select((x, q) => new
- {
- HotspotCode = x.HotspotCode,
- SumCount = x.SumCount,
- HotspotName = q.HotSpotName,
- HasChild = SqlFunc.Subqueryable<Hotspot>().Where(d => d.ParentId == x.HotspotCode).Any()
- })
- .ToListAsync();
- return list;
- }
- }
- /// <summary>
- /// 部门满意度统计
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("visit-org-satisfaction-statistics")]
- public async Task<VisitAndOrgSatisfactionStatisticsResultDto> VisitAndOrgSatisfactionStatistics([FromQuery] PagedKeywordSonRequest dto)
- {
- var data = await _orderApplication.VisitAndOrgSatisfactionStatistics(dto);
- var countySumModel = new VisitAndOrgSatisfactionStatisticsDto()
- {
- OrgName = "区县合计",
- TotalSumCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.TotalSumCount),
- VerySatisfiedCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.VerySatisfiedCount),
- SatisfiedCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.SatisfiedCount),
- RegardedAsSatisfiedCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.RegardedAsSatisfiedCount),
- DefaultSatisfiedCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.DefaultSatisfiedCount),
- NoSatisfiedCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.NoSatisfiedCount),
- NoEvaluateCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.NoEvaluateCount),
- NoPutThroughCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.NoPutThroughCount),
- };
- var citySumModel = new VisitAndOrgSatisfactionStatisticsDto()
- {
- OrgName = "市直合计",
- TotalSumCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.TotalSumCount),
- VerySatisfiedCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.VerySatisfiedCount),
- SatisfiedCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.SatisfiedCount),
- RegardedAsSatisfiedCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.RegardedAsSatisfiedCount),
- DefaultSatisfiedCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.DefaultSatisfiedCount),
- NoSatisfiedCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.NoSatisfiedCount),
- NoEvaluateCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.NoEvaluateCount),
- NoPutThroughCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.NoPutThroughCount),
- };
- var sumModel = new VisitAndOrgSatisfactionStatisticsDto()
- {
- OrgName = "总计",
- TotalSumCount = data.Sum(x => x.TotalSumCount),
- VerySatisfiedCount = data.Sum(x => x.VerySatisfiedCount),
- SatisfiedCount = data.Sum(x => x.SatisfiedCount),
- RegardedAsSatisfiedCount = data.Sum(x => x.RegardedAsSatisfiedCount),
- DefaultSatisfiedCount = data.Sum(x => x.DefaultSatisfiedCount),
- NoSatisfiedCount = data.Sum(x => x.NoSatisfiedCount),
- NoEvaluateCount = data.Sum(x => x.NoEvaluateCount),
- NoPutThroughCount = data.Sum(x => x.NoPutThroughCount),
- };
- return new VisitAndOrgSatisfactionStatisticsResultDto { DataList = data, CountySumModel = countySumModel, CitySumModel = citySumModel, SumModel = sumModel };
- }
- /// <summary>
- /// 部门满意度统计导出
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpPost("visit-org-satisfaction-statistics/_export")]
- public async Task<FileStreamResult> VisitAndOrgSatisfactionStatisticsExport([FromBody] ExportExcelDto<PagedKeywordSonRequest> dto)
- {
- List<VisitAndOrgSatisfactionStatisticsDto> data = await _orderApplication.VisitAndOrgSatisfactionStatistics(dto.QueryDto);
- var countySumModel = new VisitAndOrgSatisfactionStatisticsDto()
- {
- OrgName = "区县合计",
- TotalSumCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.TotalSumCount),
- VerySatisfiedCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.VerySatisfiedCount),
- SatisfiedCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.SatisfiedCount),
- RegardedAsSatisfiedCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.RegardedAsSatisfiedCount),
- DefaultSatisfiedCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.DefaultSatisfiedCount),
- NoSatisfiedCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.NoSatisfiedCount),
- NoEvaluateCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.NoEvaluateCount),
- NoPutThroughCount = data.Where(x => x.OrgType == EOrgType.County).Sum(x => x.NoPutThroughCount),
- };
- var citySumModel = new VisitAndOrgSatisfactionStatisticsDto()
- {
- OrgName = "市直合计",
- TotalSumCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.TotalSumCount),
- VerySatisfiedCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.VerySatisfiedCount),
- SatisfiedCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.SatisfiedCount),
- RegardedAsSatisfiedCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.RegardedAsSatisfiedCount),
- DefaultSatisfiedCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.DefaultSatisfiedCount),
- NoSatisfiedCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.NoSatisfiedCount),
- NoEvaluateCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.NoEvaluateCount),
- NoPutThroughCount = data.Where(x => x.OrgType == EOrgType.City).Sum(x => x.NoPutThroughCount),
- };
- var sumModel = new VisitAndOrgSatisfactionStatisticsDto()
- {
- OrgName = "总计",
- TotalSumCount = data.Sum(x => x.TotalSumCount),
- VerySatisfiedCount = data.Sum(x => x.VerySatisfiedCount),
- SatisfiedCount = data.Sum(x => x.SatisfiedCount),
- RegardedAsSatisfiedCount = data.Sum(x => x.RegardedAsSatisfiedCount),
- DefaultSatisfiedCount = data.Sum(x => x.DefaultSatisfiedCount),
- NoSatisfiedCount = data.Sum(x => x.NoSatisfiedCount),
- NoEvaluateCount = data.Sum(x => x.NoEvaluateCount),
- NoPutThroughCount = data.Sum(x => x.NoPutThroughCount),
- };
- data.Add(countySumModel);
- data.Add(citySumModel);
- data.Add(sumModel);
- dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
- var dtos = data
- .Select(stu => _mapper.Map(stu, typeof(VisitAndOrgSatisfactionStatisticsDto), dynamicClass))
- .Cast<object>()
- .ToList();
- var stream = ExcelHelper.CreateStream(dtos);
- return ExcelStreamResult(stream, "部门满意度统计数据");
- }
- /// <summary>
- /// 子部门满意度明细
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("visit-org-statisfaction-org-detail")]
- public async Task<VisitAndOrgSatisfactionStatisticsResultDto> VisitAndOrgStatisfactionOrgDetail([FromQuery] PagedKeywordSonRequest dto)
- {
- var list = await _orderApplication.VisitAndOrgStatisfactionOrgDetail(dto);
- var countySumModel = new VisitAndOrgSatisfactionStatisticsDto()
- {
- OrgName = "区县合计",
- TotalSumCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.TotalSumCount),
- VerySatisfiedCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.VerySatisfiedCount),
- SatisfiedCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.SatisfiedCount),
- RegardedAsSatisfiedCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.RegardedAsSatisfiedCount),
- DefaultSatisfiedCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.DefaultSatisfiedCount),
- NoSatisfiedCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.NoSatisfiedCount),
- NoEvaluateCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.NoEvaluateCount),
- NoPutThroughCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.NoPutThroughCount),
- };
- var citySumModel = new VisitAndOrgSatisfactionStatisticsDto()
- {
- OrgName = "市直合计",
- TotalSumCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.TotalSumCount),
- VerySatisfiedCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.VerySatisfiedCount),
- SatisfiedCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.SatisfiedCount),
- RegardedAsSatisfiedCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.RegardedAsSatisfiedCount),
- DefaultSatisfiedCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.DefaultSatisfiedCount),
- NoSatisfiedCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.NoSatisfiedCount),
- NoEvaluateCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.NoEvaluateCount),
- NoPutThroughCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.NoPutThroughCount),
- };
- var sumModel = new VisitAndOrgSatisfactionStatisticsDto()
- {
- OrgName = "总计",
- TotalSumCount = list.Sum(x => x.TotalSumCount),
- VerySatisfiedCount = list.Sum(x => x.VerySatisfiedCount),
- SatisfiedCount = list.Sum(x => x.SatisfiedCount),
- RegardedAsSatisfiedCount = list.Sum(x => x.RegardedAsSatisfiedCount),
- DefaultSatisfiedCount = list.Sum(x => x.DefaultSatisfiedCount),
- NoSatisfiedCount = list.Sum(x => x.NoSatisfiedCount),
- NoEvaluateCount = list.Sum(x => x.NoEvaluateCount),
- NoPutThroughCount = list.Sum(x => x.NoPutThroughCount),
- };
- return new VisitAndOrgSatisfactionStatisticsResultDto { DataList = list, CountySumModel = countySumModel, CitySumModel = citySumModel, SumModel = sumModel };
- }
- /// <summary>
- /// 部门满意度统计导出
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpPost("visit-org-statisfaction-org-detail/_export")]
- public async Task<FileStreamResult> VisitAndOrgStatisfactionOrgDetailExport([FromBody] ExportExcelDto<PagedKeywordSonRequest> dto)
- {
- var list = await _orderApplication.VisitAndOrgStatisfactionOrgDetail(dto.QueryDto);
- var countySumModel = new VisitAndOrgSatisfactionStatisticsDto()
- {
- OrgName = "区县合计",
- TotalSumCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.TotalSumCount),
- VerySatisfiedCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.VerySatisfiedCount),
- SatisfiedCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.SatisfiedCount),
- RegardedAsSatisfiedCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.RegardedAsSatisfiedCount),
- DefaultSatisfiedCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.DefaultSatisfiedCount),
- NoSatisfiedCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.NoSatisfiedCount),
- NoEvaluateCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.NoEvaluateCount),
- NoPutThroughCount = list.Where(x => x.OrgType == EOrgType.County).Sum(x => x.NoPutThroughCount),
- };
- var citySumModel = new VisitAndOrgSatisfactionStatisticsDto()
- {
- OrgName = "市直合计",
- TotalSumCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.TotalSumCount),
- VerySatisfiedCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.VerySatisfiedCount),
- SatisfiedCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.SatisfiedCount),
- RegardedAsSatisfiedCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.RegardedAsSatisfiedCount),
- DefaultSatisfiedCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.DefaultSatisfiedCount),
- NoSatisfiedCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.NoSatisfiedCount),
- NoEvaluateCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.NoEvaluateCount),
- NoPutThroughCount = list.Where(x => x.OrgType == EOrgType.City).Sum(x => x.NoPutThroughCount),
- };
- var sumModel = new VisitAndOrgSatisfactionStatisticsDto()
- {
- OrgName = "总计",
- TotalSumCount = list.Sum(x => x.TotalSumCount),
- VerySatisfiedCount = list.Sum(x => x.VerySatisfiedCount),
- SatisfiedCount = list.Sum(x => x.SatisfiedCount),
- RegardedAsSatisfiedCount = list.Sum(x => x.RegardedAsSatisfiedCount),
- DefaultSatisfiedCount = list.Sum(x => x.DefaultSatisfiedCount),
- NoSatisfiedCount = list.Sum(x => x.NoSatisfiedCount),
- NoEvaluateCount = list.Sum(x => x.NoEvaluateCount),
- NoPutThroughCount = list.Sum(x => x.NoPutThroughCount),
- };
- list.Add(countySumModel);
- list.Add(citySumModel);
- list.Add(sumModel);
- dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
- var dtos = list
- .Select(stu => _mapper.Map(stu, typeof(VisitAndOrgSatisfactionStatisticsDto), dynamicClass))
- .Cast<object>()
- .ToList();
- var stream = ExcelHelper.CreateStream(dtos);
- return ExcelStreamResult(stream, "部门满意度统计数据");
- }
- /// <summary>
- /// 部门满意度明细
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("visit-org-satisfaction-detail")]
- public async Task<PagedDto<OrderVisitDetailDto>> VisitAndOrgSatisfactionDetail([FromQuery] VisitAndOrgSatisfactionDetailDto dto)
- {
- var (total, items) = await _orderApplication.VisitAndOrgSatisfactionDetail(dto)
- .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
- return new PagedDto<OrderVisitDetailDto>(total, _mapper.Map<IReadOnlyList<OrderVisitDetailDto>>(items));
- }
- /// <summary>
- /// 部门满意度明细导出
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpPost("visit-org-satisfaction-detail/_export")]
- public async Task<FileStreamResult> VisitAndOrgSatisfactionDetailExport([FromBody] ExportExcelDto<VisitAndOrgSatisfactionDetailDto> dto)
- {
- var query = _orderApplication.VisitAndOrgSatisfactionDetail(dto.QueryDto);
- List<OrderVisitDetail> data;
- if (dto.IsExportAll)
- {
- data = await query.ToListAsync(HttpContext.RequestAborted);
- }
- else
- {
- var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
- data = items;
- }
- var dataDtos = _mapper.Map<ICollection<OrderVisitDetailDto>>(data);
- dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
- var dtos = dataDtos
- .Select(stu => _mapper.Map(stu, typeof(OrderVisitDetailDto), dynamicClass))
- .Cast<object>()
- .ToList();
- var stream = ExcelHelper.CreateStream(dtos);
- return ExcelStreamResult(stream, "部门满意度明细数据");
- }
- /// <summary>
- /// 中心报表统计
- /// </summary>
- /// <param name="StartTime"></param>
- /// <param name="EndTime"></param>
- /// <returns></returns>
- [HttpGet("center_report_forms_statistics")]
- public async Task<CenterReportStatisticsDto> CenterReportFormsStatistics(DateTime StartTime, DateTime EndTime)
- {
- EndTime = EndTime.AddDays(1).AddSeconds(-1);
- CenterReportStatisticsDto centerReportStatisticsDto = new();
- //信件总量
- int sourceChannelCount = await _orderRepository.Queryable().Where(p => p.CreationTime >= StartTime && p.CreationTime <= EndTime).CountAsync();
- #region 通话记录
- //通话记录
- var callData = await _trCallRecordRepository.Queryable()
- .Where(p => p.CreatedTime >= StartTime && p.CreatedTime <= EndTime && p.Gateway != "82826886" && SqlFunc.Length(p.Gateway) != 4)
- .Select(o => new CenterReportCallDto
- {
- EffectiveCount = SqlFunc.AggregateSum(SqlFunc.IIF(o.OnState == EOnState.On, 1, 0)),//有效
- InvalidCount = SqlFunc.AggregateSum(SqlFunc.IIF(o.OnState == EOnState.NoOn /*&& o.BeginIvrTime.HasValue && o.BeginQueueTime.HasValue && o.BeginRingTime.HasValue*/, 1, 0)), //无效(排除队列挂断和IVR挂断)
- QueueByeCount = SqlFunc.AggregateSum(SqlFunc.IIF(o.CallDirection == ECallDirection.In && o.QueueTims > 0 && o.RingTimes == 0 && o.OnState == EOnState.NoOn, 1, 0)), //队列挂断
- IvrByeCount = SqlFunc.AggregateSum(SqlFunc.IIF(o.CallDirection == ECallDirection.In && o.BeginIvrTime.HasValue && !o.BeginQueueTime.HasValue && !o.BeginRingTime.HasValue && o.OnState == EOnState.NoOn, 1, 0)), //IVR挂断
- })
- .FirstAsync();
- if (callData != null)
- callData.InvalidCount = callData.InvalidCount - callData.QueueByeCount - callData.IvrByeCount;
- centerReportStatisticsDto.CenterReportCall = callData;
- #endregion
- #region 工单
- //工单
- var orderData = await _orderRepository.Queryable()
- .Where(p => p.CreationTime >= StartTime && p.CreationTime <= EndTime)
- .Select(x => new CenterReportOrderDto
- {
- EffectiveCount = SqlFunc.AggregateSum(SqlFunc.IIF(true, 1, 0)),
- InvalidCount = 0,
- CompletedCount = SqlFunc.AggregateSum(SqlFunc.IIF((int)x.Status >= 300, 1, 0)),
- InProgressCount = SqlFunc.AggregateSum(SqlFunc.IIF((int)x.Status < 300, 1, 0))
- })
- .ToListAsync();
- if (orderData != null && orderData.Count > 0)
- centerReportStatisticsDto.CenterReportOrder = orderData[0];
- #endregion
- #region 信件来源
- //信件来源
- var sourceChannelData = await _orderRepository.Queryable()
- .Where(p => p.CreationTime >= StartTime && p.CreationTime <= EndTime)
- .Select(it => new
- {
- SourceChannelCode = SqlFunc.IIF(SqlFunc.IsNullOrEmpty(it.SourceChannelCode), "QT", it.SourceChannelCode)
- })
- .MergeTable()//将查询出来的结果合并成一个新表
- .GroupBy(it => new { it.SourceChannelCode })//对新表进行分组
- .Select(it => new CenterReportOrderSourceChannelDto
- {
- Code = it.SourceChannelCode,
- CountNum = SqlFunc.AggregateCount(it.SourceChannelCode)
- })
- .ToListAsync();
- List<CenterReportOrderSourceChannelDto> sourceChannel = new()
- {
- new CenterReportOrderSourceChannelDto
- {
- Name = "来源总量",
- Code = "All",
- CountNum = sourceChannelCount
- }
- };
- var sourceChannelDic = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.SourceChannel);
- foreach (var item in sourceChannelDic)
- {
- sourceChannel.Add(new CenterReportOrderSourceChannelDto
- {
- Name = item.DicDataName,
- Code = item.DicTypeCode,
- CountNum = sourceChannelData.Find(p => p.Code == item.DicDataValue)?.CountNum ?? 0
- });
- }
- centerReportStatisticsDto.CenterReportOrderSourceChannels = sourceChannel;
- #endregion
- #region 信件分类
- //信件来源
- var acceptTypeData = await _orderRepository.Queryable(false, false, false)
- .Where(p => p.CreationTime >= StartTime && p.CreationTime <= EndTime)
- .Select(it => new
- {
- AcceptTypeCode = SqlFunc.IIF(SqlFunc.IsNullOrEmpty(it.AcceptTypeCode), "40", it.AcceptTypeCode)
- })
- .MergeTable()//将查询出来的结果合并成一个新表
- .GroupBy(it => new { it.AcceptTypeCode })//对新表进行分组
- .Select(it => new CenterReportOrderSourceChannelDto
- {
- Code = it.AcceptTypeCode,
- CountNum = SqlFunc.AggregateCount(it.AcceptTypeCode)
- })
- .ToListAsync();
- List<CenterReportOrderSourceChannelDto> acceptType = new();
- var acceptTypeDic = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.AcceptType);
- foreach (var item in acceptTypeDic)
- {
- acceptType.Add(new CenterReportOrderSourceChannelDto
- {
- AllCountNum = sourceChannelCount,
- Name = item.DicDataName,
- Code = item.DicTypeCode,
- CountNum = acceptTypeData.Find(p => p.Code == item.DicDataValue)?.CountNum ?? 0
- });
- }
- centerReportStatisticsDto.CenterReportOrderAcceptTypes = acceptType;
- #endregion
- #region 信件回访量
- //信件回访量
- CenterReportVisitdDto centerReportVisitd = new()
- {
- Visitd = await _orderVisitRepository.Queryable()
- .Where(x => x.VisitTime >= StartTime && x.VisitTime <= EndTime && x.VisitState == EVisitState.Visited).CountAsync(),
- WaitVisitd = await _orderVisitRepository.Queryable()
- .Where(x => x.VisitTime >= StartTime && x.VisitTime <= EndTime && x.VisitState != EVisitState.None && x.VisitState != EVisitState.Visited).CountAsync()
- };
- //部门
- var listOrg = await _orderVisitDetailRepository.Queryable()
- .LeftJoin<OrderVisit>((it, o) => it.VisitId == o.Id)
- .Where((it, o) => it.VisitTarget == EVisitTarget.Org && o.VisitTime >= StartTime && o.VisitTime <= EndTime && o.VisitState == EVisitState.Visited)
- .Select((it, o) => new Satisfaction
- {
- Dissatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "1") || SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "2"), 1, 0)),
- Satisfied = SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "1") || SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "2"), 0, 1)),
- })
- .ToListAsync();
- if (listOrg != null && listOrg.Count > 0)
- {
- var SatisfiedCount = listOrg[0].Satisfied + listOrg[0].Satisfied;
- if (SatisfiedCount > 0 && listOrg[0].Satisfied > 0)
- centerReportVisitd.OrgRate = Math.Round((listOrg[0].Satisfied / (double)SatisfiedCount) * 100, 2);
- }
- //if (centerReportVisitd.Visitd > 0 && listOrg != null && listOrg.Count > 0 && listOrg[0].Satisfied > 0)
- //centerReportVisitd.OrgRate = Math.Round((listOrg[0].Satisfied / (double)centerReportVisitd.Visitd) * 100, 2);
- //坐席
- var listSet = await _orderVisitDetailRepository.Queryable()
- .LeftJoin<OrderVisit>((it, o) => it.VisitId == o.Id)
- .Where((it, o) => it.VisitTarget == EVisitTarget.Seat && o.VisitTime >= StartTime && o.VisitTime <= EndTime && o.VisitState == EVisitState.Visited)
- .Select((it, o) => new Satisfaction
- {
- Dissatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(it.SeatEvaluate == ESeatEvaluate.NoSatisfied, 1, 0)),
- Satisfied = SqlFunc.AggregateSum(SqlFunc.IIF(it.SeatEvaluate != ESeatEvaluate.NoSatisfied, 1, 0)),
- }).ToListAsync();
- if (listSet != null && listSet.Count > 0)
- {
- var SatisfiedCount = listSet[0].Satisfied + listSet[0].Satisfied;
- if (SatisfiedCount > 0 && listSet[0].Satisfied > 0)
- centerReportVisitd.OrgRate = Math.Round((listSet[0].Satisfied / (double)SatisfiedCount) * 100, 2);
- }
- //if (centerReportVisitd.Visitd > 0 && listSet != null && listSet.Count > 0 && listSet[0].Satisfied > 0)
- // centerReportVisitd.SeatsRate = Math.Round((listSet[0].Satisfied / (double)centerReportVisitd.Visitd) * 100, 2);
- centerReportStatisticsDto.CenterReportVisitd = centerReportVisitd;
- #endregion
- #region 信件分布情况
- //市直部门
- var listOrgStatisticsCityAll = await _orderRepository.Queryable()
- .LeftJoin<SystemOrganize>((it, o) => it.OrgLevelOneCode == o.Id)
- .Where((it, o) => (o.OrgType == EOrgType.City || o.OrgType == EOrgType.Province) && it.CreationTime >= StartTime && it.CreationTime <= EndTime)
- .GroupBy((it, o) => new
- {
- it.OrgLevelOneCode,
- o.Name
- })
- .Select((it, o) => new OrgStatistics
- {
- CountNum = SqlFunc.AggregateCount(it.OrgLevelOneCode),
- OrgName = it.OrgLevelOneCode == "001" ? "市民热线服务中心" : o.Name
- }).ToListAsync();
- centerReportStatisticsDto.OrgStatisticsCityAll = new OrgStatisticsAll
- {
- OrgStatistics = listOrgStatisticsCityAll
- };
- //区县部门
- var listOrgStatisticsAreaAll = await _orderRepository.Queryable()
- .LeftJoin<SystemOrganize>((it, o) => it.OrgLevelOneCode == o.Id)
- .Where((it, o) => o.OrgType == EOrgType.County && it.CreationTime >= StartTime && it.CreationTime <= EndTime)
- .GroupBy((it, o) => new
- {
- it.OrgLevelOneCode,
- o.Name
- })
- .Select((it, o) => new OrgStatistics
- {
- CountNum = SqlFunc.AggregateCount(it.OrgLevelOneCode),
- OrgName = it.OrgLevelOneCode == "001" ? "市民热线服务中心" : o.Name
- }).ToListAsync();
- centerReportStatisticsDto.OrgStatisticsAreaAll = new OrgStatisticsAll
- {
- OrgStatistics = listOrgStatisticsAreaAll
- };
- #endregion
- return centerReportStatisticsDto;
- }
- /// <summary>
- /// 部门受理类型统计周期
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("department_acceptance_type_statistics")]
- public async Task<object> DepartmentAcceptanceTypeStatistics([FromQuery] DepartmentKeyWordRequest dto)
- {
- var items = await _orderReportApplication.DepartmentAcceptanceTypeStatistics(dto).ToListAsync();
- var total = new DepartmentAcceptanceTypeStatisticsDto
- {
- OrgName = "合计",
- OrgCode = "",
- OrgType = "",
- ZxAllCount = items.Sum(p => p.ZxAllCount),
- ZxAllTimes = items.Sum(p => p.ZxAllTimes),
- ZxAcceptanceTypeCode = "10",
- JyAllCount = items.Sum(p => p.JyAllCount),
- JyAllTimes = items.Sum(p => p.JyAllTimes),
- JyAcceptanceTypeCode = "15",
- QzAllCount = items.Sum(p => p.QzAllCount),
- QzAllTimes = items.Sum(p => p.QzAllTimes),
- QzAcceptanceTypeCode = "20",
- ByAllCount = items.Sum(p => p.ByAllCount),
- ByAllTimes = items.Sum(p => p.ByAllTimes),
- ByAcceptanceTypeCode = "25",
- JbAllCount = items.Sum(p => p.JbAllCount),
- JbAllTimes = items.Sum(p => p.JbAllTimes),
- JbAcceptanceTypeCode = "30",
- TsAllCount = items.Sum(p => p.TsAllCount),
- TsAllTimes = items.Sum(p => p.TsAllTimes),
- TsAcceptanceTypeCode = "35",
- QtAllCount = items.Sum(p => p.QtAllCount),
- QtAllTimes = items.Sum(p => p.QtAllTimes),
- QtAcceptanceTypeCode = "40",
- YjAllCount = items.Sum(p => p.YjAllCount),
- YjAllTimes = items.Sum(p => p.YjAllTimes),
- YjAcceptanceTypeCode = "1"
- };
- return new { List = items, Total = total };
- }
- /// <summary>
- /// 部门受理类型统计周期---导出
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpPost("department_acceptance_type_statistics_export")]
- public async Task<FileStreamResult> ExportDepartmentAcceptanceTypeStatistics([FromBody] ExportExcelDto<DepartmentKeyWordRequest> dto)
- {
- var query = _orderReportApplication.DepartmentAcceptanceTypeStatistics(dto.QueryDto);
- List<DepartmentAcceptanceTypeStatisticsDto> list;
- if (dto.IsExportAll)
- {
- list = await query.ToListAsync(HttpContext.RequestAborted);
- }
- else
- {
- var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
- list = items;
- }
- //增加合计
- list.Add(new DepartmentAcceptanceTypeStatisticsDto
- {
- OrgName = "合计",
- OrgCode = "",
- OrgType = "",
- ZxAllCount = list.Sum(p => p.ZxAllCount),
- ZxAllTimes = list.Sum(p => p.ZxAllTimes),
- ZxAcceptanceTypeCode = "10",
- JyAllCount = list.Sum(p => p.JyAllCount),
- JyAllTimes = list.Sum(p => p.JyAllTimes),
- JyAcceptanceTypeCode = "15",
- QzAllCount = list.Sum(p => p.QzAllCount),
- QzAllTimes = list.Sum(p => p.QzAllTimes),
- QzAcceptanceTypeCode = "20",
- ByAllCount = list.Sum(p => p.ByAllCount),
- ByAllTimes = list.Sum(p => p.ByAllTimes),
- ByAcceptanceTypeCode = "25",
- JbAllCount = list.Sum(p => p.JbAllCount),
- JbAllTimes = list.Sum(p => p.JbAllTimes),
- JbAcceptanceTypeCode = "30",
- TsAllCount = list.Sum(p => p.TsAllCount),
- TsAllTimes = list.Sum(p => p.TsAllTimes),
- TsAcceptanceTypeCode = "35",
- QtAllCount = list.Sum(p => p.QtAllCount),
- QtAllTimes = list.Sum(p => p.QtAllTimes),
- QtAcceptanceTypeCode = "40",
- YjAllCount = list.Sum(p => p.YjAllCount),
- YjAllTimes = list.Sum(p => p.YjAllTimes),
- YjAcceptanceTypeCode = "1"
- });
- var orderDtos = _mapper.Map<ICollection<DepartmentAcceptanceTypeStatisticsDto>>(list);
- dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
- var dtos = orderDtos
- .Select(stu => _mapper.Map(stu, typeof(DepartmentAcceptanceTypeStatisticsDto), dynamicClass))
- .Cast<object>()
- .ToList();
- var stream = ExcelHelper.CreateStream(dtos);
- return ExcelStreamResult(stream, "部门受理类型统计周期数据");
- }
- /// <summary>
- /// 部门受理类型统计周期--明细列表
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("department_acceptance_type_order_list")]
- public async Task<PagedDto<OrderDto>> DepartmentAcceptanceTypeOrderList([FromQuery] DepartmentKeyWordRequest dto)
- {
- var (total, items) = await _orderReportApplication.DepartmentAcceptanceTypeOrderList(dto)
- .ToPagedListAsync(dto, HttpContext.RequestAborted);
- return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
- }
- /// <summary>
- /// 部门受理类型统计周期--明细列表---导出
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpPost("department_acceptance_type_order_list_export")]
- public async Task<FileStreamResult> ExportDepartmentAcceptanceTypeOrderList([FromBody] ExportExcelDto<DepartmentKeyWordRequest> dto)
- {
- var query = _orderReportApplication.DepartmentAcceptanceTypeOrderList(dto.QueryDto);
- List<Order> list;
- if (dto.IsExportAll)
- {
- list = await query.ToListAsync(HttpContext.RequestAborted);
- }
- else
- {
- var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
- list = items;
- }
- var orderDtos = _mapper.Map<ICollection<OrderDto>>(list);
- dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
- var dtos = orderDtos
- .Select(stu => _mapper.Map(stu, typeof(OrderDto), dynamicClass))
- .Cast<object>()
- .ToList();
- var stream = ExcelHelper.CreateStream(dtos);
- return ExcelStreamResult(stream, "部门受理类型统计周期数据");
- }
- /// <summary>
- /// 部门办件统计表
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("departmental_processing_statistics")]
- public async Task<object> DepartmentalProcessingStatistics([FromQuery] DepartmentalProcessingStatisticsRequest dto)
- {
- //联合查询
- //var items = await _orderReportApplication.DepartmentalProcessingStatistics(dto)
- // .ToListAsync();
- var items = await _orderReportApplication.DepartmentalProcessingStatisticsNew(dto);
- var total = new DepartmentalProcessingStatisticsDataDto
- {
- OrgCode = "",
- OrgName = "合计",
- OrgType = EOrgType.City,
- // OrderCountNum = items.Sum(p => p.OrderCountNum),
- YbOrderCountNum = items.Sum(p => p.YbOrderCountNum),
- ZbOrderCountNum = items.Sum(p => p.ZbOrderCountNum),
- Archived = items.Sum(p => p.Archived),
- ToBeArchived = items.Sum(p => p.ToBeArchived),
- WaitPublished = items.Sum(p => p.WaitPublished),
- PublishedOpen = items.Sum(p => p.PublishedOpen),
- PublishedNoOpen = items.Sum(p => p.PublishedNoOpen),
- YbOverdue = items.Sum(p => p.YbOverdue),
- ZbOverdue = items.Sum(p => p.ZbOverdue),
- CompleteOnTime = items.Sum(p => p.CompleteOnTime),
- HqybOverdue = items.Sum(p => p.HqybOverdue),
- HqzbOverdue = items.Sum(p => p.HqzbOverdue),
- DelayEnd = items.Sum(p => p.DelayEnd),
- DelayWait = items.Sum(p => p.DelayWait),
- OrderDelayCount = items.Sum(p => p.OrderDelayCount),
- ScreenCount = items.Sum(p => p.ScreenCount),
- ScreenApproval = items.Sum(p => p.ScreenApproval),
- ScreenPass = items.Sum(p => p.ScreenPass),
- ScreenNotPass = items.Sum(p => p.ScreenNotPass),
- SatisfactionCount = items.Sum(p => p.SatisfactionCount),
- NotSatisfactionCount = items.Sum(p => p.NotSatisfactionCount)
- };
- return new { List = items, Total = total };
- }
- /// <summary>
- /// 部门办件统计表--导出
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpPost("departmental_processing_statistics_export")]
- public async Task<FileStreamResult> ExportDepartmentalProcessingStatistics([FromBody] ExportExcelDto<DepartmentalProcessingStatisticsRequest> dto)
- {
- var list = await _orderReportApplication.DepartmentalProcessingStatisticsNew(dto.QueryDto);
- //增加合计
- list.Add(new DepartmentalProcessingStatisticsDataDto
- {
- OrgCode = "",
- OrgName = "合计",
- OrgType = EOrgType.City,
- // OrderCountNum = items.Sum(p => p.OrderCountNum),
- YbOrderCountNum = list.Sum(p => p.YbOrderCountNum),
- ZbOrderCountNum = list.Sum(p => p.ZbOrderCountNum),
- Archived = list.Sum(p => p.Archived),
- ToBeArchived = list.Sum(p => p.ToBeArchived),
- WaitPublished = list.Sum(p => p.WaitPublished),
- PublishedOpen = list.Sum(p => p.PublishedOpen),
- PublishedNoOpen = list.Sum(p => p.PublishedNoOpen),
- YbOverdue = list.Sum(p => p.YbOverdue),
- ZbOverdue = list.Sum(p => p.ZbOverdue),
- CompleteOnTime = list.Sum(p => p.CompleteOnTime),
- HqybOverdue = list.Sum(p => p.HqybOverdue),
- HqzbOverdue = list.Sum(p => p.HqzbOverdue),
- DelayEnd = list.Sum(p => p.DelayEnd),
- DelayWait = list.Sum(p => p.DelayWait),
- OrderDelayCount = list.Sum(p => p.OrderDelayCount),
- ScreenCount = list.Sum(p => p.ScreenCount),
- ScreenApproval = list.Sum(p => p.ScreenApproval),
- ScreenPass = list.Sum(p => p.ScreenPass),
- ScreenNotPass = list.Sum(p => p.ScreenNotPass),
- SatisfactionCount = list.Sum(p => p.SatisfactionCount),
- NotSatisfactionCount = list.Sum(p => p.NotSatisfactionCount)
- });
- var orderDtos = _mapper.Map<ICollection<DepartmentalProcessingStatisticsDataDto>>(list);
- dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
- var dtos = orderDtos
- .Select(stu => _mapper.Map(stu, typeof(DepartmentalProcessingStatisticsDataDto), dynamicClass))
- .Cast<object>()
- .ToList();
- var stream = ExcelHelper.CreateStream(dtos);
- return ExcelStreamResult(stream, "部门办件统计表数据");
- }
- /// <summary>
- /// 部门办件统计表--子级
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("departmental_processing_child_statistics")]
- public async Task<object> DepartmentalProcessingChildStatistics([FromQuery] DepartmentalProcessingStatisticsRequest dto)
- {
- var items = await _orderReportApplication.DepartmentalProcessingChildStatisticsNew(dto);
- //计算合计
- var total = new DepartmentalProcessingStatisticsDataDto
- {
- OrgCode = "",
- OrgName = "合计",
- OrgType = EOrgType.City,
- // OrderCountNum = items.Sum(p => p.OrderCountNum),
- YbOrderCountNum = items.Sum(p => p.YbOrderCountNum),
- ZbOrderCountNum = items.Sum(p => p.ZbOrderCountNum),
- Archived = items.Sum(p => p.Archived),
- ToBeArchived = items.Sum(p => p.ToBeArchived),
- WaitPublished = items.Sum(p => p.WaitPublished),
- PublishedOpen = items.Sum(p => p.PublishedOpen),
- PublishedNoOpen = items.Sum(p => p.PublishedNoOpen),
- YbOverdue = items.Sum(p => p.YbOverdue),
- ZbOverdue = items.Sum(p => p.ZbOverdue),
- CompleteOnTime = items.Sum(p => p.CompleteOnTime),
- HqybOverdue = items.Sum(p => p.HqybOverdue),
- HqzbOverdue = items.Sum(p => p.HqzbOverdue),
- DelayEnd = items.Sum(p => p.DelayEnd),
- DelayWait = items.Sum(p => p.DelayWait),
- OrderDelayCount = items.Sum(p => p.OrderDelayCount),
- ScreenCount = items.Sum(p => p.ScreenCount),
- ScreenApproval = items.Sum(p => p.ScreenApproval),
- ScreenPass = items.Sum(p => p.ScreenPass),
- ScreenNotPass = items.Sum(p => p.ScreenNotPass),
- SatisfactionCount = items.Sum(p => p.SatisfactionCount),
- NotSatisfactionCount = items.Sum(p => p.NotSatisfactionCount)
- };
- return new { List = items, Total = total };
- }
- /// <summary>
- /// 部门办件统计表--子级--导出
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpPost("departmental_processing_child_statistics_export")]
- public async Task<FileStreamResult> ExportDepartmentalProcessingChildStatistics([FromBody] ExportExcelDto<DepartmentalProcessingStatisticsRequest> dto)
- {
- var list = await _orderReportApplication.DepartmentalProcessingChildStatisticsNew(dto.QueryDto);
- //增加合计
- list.Add(new DepartmentalProcessingStatisticsDataDto
- {
- OrgCode = "",
- OrgName = "合计",
- OrgType = EOrgType.City,
- // OrderCountNum = items.Sum(p => p.OrderCountNum),
- YbOrderCountNum = list.Sum(p => p.YbOrderCountNum),
- ZbOrderCountNum = list.Sum(p => p.ZbOrderCountNum),
- Archived = list.Sum(p => p.Archived),
- ToBeArchived = list.Sum(p => p.ToBeArchived),
- WaitPublished = list.Sum(p => p.WaitPublished),
- PublishedOpen = list.Sum(p => p.PublishedOpen),
- PublishedNoOpen = list.Sum(p => p.PublishedNoOpen),
- YbOverdue = list.Sum(p => p.YbOverdue),
- ZbOverdue = list.Sum(p => p.ZbOverdue),
- CompleteOnTime = list.Sum(p => p.CompleteOnTime),
- HqybOverdue = list.Sum(p => p.HqybOverdue),
- HqzbOverdue = list.Sum(p => p.HqzbOverdue),
- DelayEnd = list.Sum(p => p.DelayEnd),
- DelayWait = list.Sum(p => p.DelayWait),
- OrderDelayCount = list.Sum(p => p.OrderDelayCount),
- ScreenCount = list.Sum(p => p.ScreenCount),
- ScreenApproval = list.Sum(p => p.ScreenApproval),
- ScreenPass = list.Sum(p => p.ScreenPass),
- ScreenNotPass = list.Sum(p => p.ScreenNotPass),
- SatisfactionCount = list.Sum(p => p.SatisfactionCount),
- NotSatisfactionCount = list.Sum(p => p.NotSatisfactionCount)
- });
- var orderDtos = _mapper.Map<ICollection<DepartmentalProcessingStatisticsDataDto>>(list);
- dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
- var dtos = orderDtos
- .Select(stu => _mapper.Map(stu, typeof(DepartmentalProcessingStatisticsDataDto), dynamicClass))
- .Cast<object>()
- .ToList();
- var stream = ExcelHelper.CreateStream(dtos);
- return ExcelStreamResult(stream, "部门办件统计表数据");
- }
- /// <summary>
- /// 部门办件统计表--明细
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("departmental_processing_statistics_list")]
- public async Task<PagedDto<OrderDto>> GetDepartmentalProcessingStatisticsList([FromQuery] DepartmentalProcessingStatisticsRequest dto)
- {
- RefAsync<int> total = 0;
- var queryData = await _orderReportApplication.GetDepartmentalProcessingStatisticsListNew(dto, HttpContext.RequestAborted)
- .LeftJoin<Order>((x, o) => x.Id == o.Id)
- .OrderByDescending((x, o) => o.CreationTime)
- .Select((x, o) => new { o })
- .ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
- var dtos = queryData.Select(d =>
- {
- var dto = _mapper.Map<OrderDto>(d.o);
- return dto;
- }).ToList();
- return new PagedDto<OrderDto>(total, dtos);
- }
- /// <summary>
- /// 部门办件统计表--明细--导出
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpPost("departmental_processing_statistics_list_export")]
- public async Task<FileStreamResult> ExportGetDepartmentalProcessingStatisticsList([FromBody] ExportExcelDto<DepartmentalProcessingStatisticsRequest> dto)
- {
- var query = _orderReportApplication.GetDepartmentalProcessingStatisticsListNew(dto.QueryDto, HttpContext.RequestAborted)
- .LeftJoin<Order>((x, o) => x.Id == o.Id)
- .OrderByDescending((x, o) => o.CreationTime)
- .Select((x, o) => new { o });
- List<OrderDto> list = new List<OrderDto>();
- if (dto.IsExportAll)
- {
- var listData = await query.ToListAsync(HttpContext.RequestAborted);
- list = listData.Select(d =>
- {
- var dto = _mapper.Map<OrderDto>(d.o);
- return dto;
- }).ToList();
- }
- else
- {
- RefAsync<int> total = 0;
- var listData = await query.ToPageListAsync(dto.QueryDto.PageIndex, dto.QueryDto.PageSize, total, HttpContext.RequestAborted);
- list = listData.Select(d =>
- {
- var dto = _mapper.Map<OrderDto>(d.o);
- return dto;
- }).ToList();
- }
- dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
- var dtos = list
- .Select(stu => _mapper.Map(stu, typeof(OrderDto), dynamicClass))
- .Cast<object>()
- .ToList();
- var stream = ExcelHelper.CreateStream(dtos);
- return ExcelStreamResult(stream, "部门办件统计明细数据");
- }
- /// <summary>
- /// 部门办件统计明细表
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("departmental_processing_statistics_details_list")]
- public async Task<PagedDto<OrderDto>> DepartmentalProcessingStatisticsDetailsList([FromQuery] DepartmentalProcessingStatisticsRequest dto)
- {
- RefAsync<int> total = 0;
- var queryData = await _orderReportApplication.DepartmentalProcessingStatisticsDetailsList(dto)
- .LeftJoin<Order>((x, o) => x.Id == o.Id)
- .OrderByDescending((x, o) => o.CreationTime)
- .Select((x, o) => new { o })
- .ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
- var dtos = queryData.Select(d =>
- {
- var dto = _mapper.Map<OrderDto>(d.o);
- return dto;
- }).ToList();
- return new PagedDto<OrderDto>(total, dtos);
- }
- /// <summary>
- /// 部门办件统计明细表--导出
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("departmental_processing_statistics_details_list_export")]
- public async Task<FileStreamResult> ExportDepartmentalProcessingStatisticsDetailsList([FromBody] ExportExcelDto<DepartmentalProcessingStatisticsRequest> dto)
- {
- var query = _orderReportApplication.DepartmentalProcessingStatisticsDetailsList(dto.QueryDto)
- .LeftJoin<Order>((x, o) => x.Id == o.Id)
- .OrderByDescending((x, o) => o.CreationTime)
- .Select((x, o) => new { o });
- var list = new List<OrderDto>();
- if (dto.IsExportAll)
- {
- var listData = await query.ToListAsync(HttpContext.RequestAborted);
- list = listData.Select(d =>
- {
- var dto = _mapper.Map<OrderDto>(d.o);
- return dto;
- }).ToList();
- }
- else
- {
- RefAsync<int> total = 0;
- var listData = await query.ToPageListAsync(dto.QueryDto.PageIndex, dto.QueryDto.PageSize, total, HttpContext.RequestAborted);
- list = listData.Select(d =>
- {
- var dto = _mapper.Map<OrderDto>(d.o);
- return dto;
- }).ToList();
- }
- dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
- var dtos = list
- .Select(stu => _mapper.Map(stu, typeof(OrderDto), dynamicClass))
- .Cast<object>()
- .ToList();
- var stream = ExcelHelper.CreateStream(dtos);
- return ExcelStreamResult(stream, "部门办件统计明细表数据");
- }
- /// <summary>
- /// 高频来电统计
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("high_frequency_call_statistics")]
- public async Task<PagedDto<HighFrequencyCallStatisticsDto>> HighFrequencyCallStatistics([FromQuery] HighFrequencyCallStatisticsRequest dto)
- {
- if (!dto.StartTime.HasValue || !dto.EndTime.HasValue)
- throw UserFriendlyException.SameMessage("请选择时间!");
- dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
- int CallCount = 2;
- var HighFrequencyCallStatistics = _systemSettingCacheManager.GetSetting(SettingConstants.HighFrequencyCallStatistics)?.SettingValue[0];
- if (HighFrequencyCallStatistics != null)
- CallCount = int.Parse(HighFrequencyCallStatistics);
- var (total, items) = await _trCallRecordRepository.Queryable()
- .LeftJoin<Order>((p, o) => p.ExternalId == o.Id)
- .Where((p, o) => p.OverTime >= dto.StartTime && p.OverTime <= dto.EndTime)
- .Where((p, o) => p.CallOrderType == ECallOrderType.Order)
- .Where((p, o) => p.ExternalId != null && o.Id != null)
- .Where((p, o) => p.CallDirection == ECallDirection.In)
- .WhereIF(!string.IsNullOrEmpty(dto.PhoneNum), (p, o) => p.CPN == dto.PhoneNum)
- .Select((p, o) => new
- {
- p.CPN,
- p.ExternalId
- })
- .MergeTable()
- .GroupBy(p => p.CPN)
- .Select(p => new HighFrequencyCallStatisticsDto
- {
- Callnum = p.CPN,
- OrderCountNum = SqlFunc.AggregateCount(p.CPN),//总量
- })
- .MergeTable()
- .Where(p => p.OrderCountNum >= CallCount)
- .OrderByDescending(p => p.OrderCountNum)
- .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
- return new PagedDto<HighFrequencyCallStatisticsDto>(total, _mapper.Map<IReadOnlyList<HighFrequencyCallStatisticsDto>>(items));
- }
- /// <summary>
- /// 高频来电统计列表详情
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("high_frequency_call_statistics_order_list")]
- public async Task<PagedDto<OrderDto>> HighFrequencyCallStatisticsOrderList([FromQuery] HighFrequencyCallStatisticsListRequest dto)
- {
- if (!dto.StartTime.HasValue || !dto.EndTime.HasValue)
- throw UserFriendlyException.SameMessage("请选择时间!");
- if (string.IsNullOrEmpty(dto.FromPhone))
- throw UserFriendlyException.SameMessage("号码不能为空!");
- dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
- var data = await _trCallRecordRepository.Queryable()
- .LeftJoin<Order>((p, o) => p.ExternalId == o.Id)
- .Where((p, o) => p.OverTime >= dto.StartTime && p.OverTime <= dto.EndTime)
- .Where((p, o) => p.CallOrderType == ECallOrderType.Order)
- .Where((p, o) => p.ExternalId != null && o.Id != null)
- .Where((p, o) => p.CPN == dto.FromPhone)
- .Where((p, o) => p.CallDirection == ECallDirection.In)
- .Select((p, o) =>
- p.ExternalId
- )
- .ToListAsync();
- var (total, items) = await _orderRepository.Queryable()
- .Includes(x => x.OrderScreens)
- .Where(p => data.Contains(p.Id))
- .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Title.Contains(dto.Keyword!)) //标题
- .WhereIF(!string.IsNullOrEmpty(dto.ProvinceNo), d => d.ProvinceNo.Contains(dto.ProvinceNo)) //省本地编号
- .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No.Contains(dto.No)) //工单编码
- .WhereIF(dto.AcceptTypes.Any(), d => dto.AcceptTypes.Contains(d.AcceptTypeCode)) //受理类型
- .WhereIF(dto.Channels.Any(), d => dto.Channels.Contains(d.SourceChannelCode)) //来源渠道
- .WhereIF(dto.HotspotIds.Any(), d => dto.HotspotIds.Contains(d.HotspotId)) //热点类型
- .WhereIF(!string.IsNullOrEmpty(dto.TransferPhone), d => d.TransferPhone.Contains(dto.TransferPhone!)) //转接号码
- .WhereIF(dto.OrgCodes.Any(), d => dto.OrgCodes.Contains(d.ActualHandleOrgCode)) //接办部门
- .WhereIF(!string.IsNullOrEmpty(dto.NameOrNo), d => d.AcceptorName.Contains(dto.NameOrNo!) || d.AcceptorStaffNo.Contains(dto.NameOrNo!)) //受理人/坐席
- .WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart) //受理时间开始
- .WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd) //受理时间结束
- .WhereIF(dto.EmergencyLevels.Any(), d => dto.EmergencyLevels.Contains(d.EmergencyLevel)) //紧急程度
- // .WhereIF(!string.IsNullOrEmpty(dto.FromPhone), d => d.FromPhone.Contains(dto.FromPhone)) //来电号码
- .WhereIF(!string.IsNullOrEmpty(dto.PhoneNo), d => d.Contact.Contains(dto.PhoneNo!)) //联系电话
- .WhereIF(!string.IsNullOrEmpty(dto.PushTypeCode), d => d.PushTypeCode == dto.PushTypeCode) //推送分类
- .WhereIF(dto.ExpiredTimeStart.HasValue, d => d.ExpiredTime >= dto.ExpiredTimeStart) //超期时间开始
- .WhereIF(dto.ExpiredTimeEnd.HasValue, d => d.ExpiredTime <= dto.ExpiredTimeEnd) //超期时间结束
- .WhereIF(dto.Statuses.Any(), d => dto.Statuses.Contains(d.Status)) //工单状态
- .WhereIF(dto.Statuses.Any(d => d == EOrderStatus.SpecialToUnAccept), d => d.Status <= EOrderStatus.SpecialToUnAccept)
- .WhereIF(!string.IsNullOrEmpty(dto.ActualHandlerName), d => d.ActualHandlerName.Contains(dto.ActualHandlerName)) //接办人
- .WhereIF(dto.IsScreen == true, d => d.OrderScreens.Any(x => x.Status != EScreenStatus.Refuse)) //有甄别
- .WhereIF(dto.IsScreen == false, d => !d.OrderScreens.Any(x => x.Status != EScreenStatus.Refuse)) //无甄别
- .WhereIF(!string.IsNullOrEmpty(dto.CurrentStepCode), d => d.ActualHandleStepCode == dto.CurrentStepCode) //当前办理节点
- .WhereIF(dto.ActualHandleTimeStart.HasValue, d => d.ActualHandleTime >= dto.ActualHandleTimeStart) //办结时间开始
- .WhereIF(dto.ActualHandleTimeEnd.HasValue, d => d.ActualHandleTime <= dto.ActualHandleTimeEnd) //办结时间结束
- .WhereIF(dto.IsOverTime == true, d => (d.ExpiredTime < DateTime.Now && d.Status < EOrderStatus.Filed) || (d.ExpiredTime < d.ActualHandleTime && d.Status >= EOrderStatus.Filed)) //是 超期
- .WhereIF(dto.IsOverTime == false, d => (d.ExpiredTime > DateTime.Now && d.Status < EOrderStatus.Filed) || (d.ExpiredTime > d.ActualHandleTime && d.Status >= EOrderStatus.Filed)) //否 超期
- .WhereIF(dto.IdentityType != null, d => d.IdentityType == dto.IdentityType) //来电主体
- .WhereIF(!string.IsNullOrEmpty(dto.FromName), d => d.FromName.Contains(dto.FromName)) //来电人姓名
- .WhereIF(dto.AreaCodes.Any(), d => dto.AreaCodes.Contains(d.AreaCode)) //区域
- .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == true, x => x.IsProvince == true)
- .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == false, x => x.IsProvince == false)
- .OrderByDescending(d => d.CreationTime)
- .ToPagedListAsync(dto, HttpContext.RequestAborted);
- return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
- }
- /// <summary>
- /// 高频事项预警
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("highmatter-warning")]
- public async Task<PagedDto<HighMatterWarningDto>> HighMatterWarning([FromQuery] HighMatterWarningRequest dto)
- {
- dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
- List<string> filterTitle = new List<string>();
- filterTitle.Add("无声");
- filterTitle.Add("骚扰");
- filterTitle.Add("错拨");
- filterTitle.Add("测试");
- var (total, items) = await _orderRepository.Queryable()
- .Where(x => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
- .Where(x => filterTitle.Any(s => x.Title.Contains(s)) == false)
- .LeftJoin<SystemArea>((it, o) => it.AreaCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")) == o.Id)
- .WhereIF(dto.AreaCodes.Any(), (it, o) => dto.AreaCodes.Contains(it.AreaCode)) //区域
- .WhereIF(dto.HotspotIds.Any(), (it, o) => dto.HotspotIds.Contains(it.HotspotId)) //热点类型
- .WhereIF(dto.AcceptTypeCodes.Any(), (it, o) => dto.AcceptTypeCodes.Contains(it.AcceptTypeCode)) //受理类型
- .GroupBy((it, o) => new
- {
- it.AcceptTypeCode,
- it.AcceptType,
- it.HotspotId,
- it.HotspotName,
- AreaCode = it.AreaCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
- o.AreaName,
- })
- .Having((it, o) => SqlFunc.AggregateCount(it.HotspotName) >= 5)
- .Select((it, o) => new HighMatterWarningDto()
- {
- AcceptTypeCode = it.AcceptTypeCode,
- AcceptType = it.AcceptType,
- AreaName = o.AreaName,
- HotspotName = it.HotspotName,
- HotspotId = it.HotspotId,
- SumCount = SqlFunc.AggregateCount(it.HotspotName),
- Id = SqlFunc.AggregateMin(it.Id),
- AreaCode = it.AreaCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))
- })
- .MergeTable()
- .LeftJoin<Order>((x, d) => x.Id == d.Id)
- .Select((x, d) => new HighMatterWarningDto()
- {
- AreaName = x.AreaName,
- HotspotName = x.HotspotName,
- HotspotId = x.HotspotId,
- Title = d.Title,
- SumCount = x.SumCount,
- Id = d.Id,
- AcceptTypeCode = x.AcceptTypeCode,
- AcceptType = x.AcceptType,
- AreaCode = x.AreaCode
- })
- .MergeTable()
- .OrderByDescending(d => d.SumCount).ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
- return new PagedDto<HighMatterWarningDto>(total, _mapper.Map<IReadOnlyList<HighMatterWarningDto>>(items));
- }
- /// <summary>
- /// 高频事项预警明细
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("highmatter-warning-detail")]
- public async Task<PagedDto<OrderDto>> HighMatterWarningDetail([FromQuery] HighMatterWarningDetailRequest dto)
- {
- dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
- List<string> filterTitle = new List<string>();
- filterTitle.Add("无声");
- filterTitle.Add("骚扰");
- filterTitle.Add("错拨");
- filterTitle.Add("测试");
- var (total, items) = await _orderRepository.Queryable()
- .Includes(x => x.OrderScreens)
- .Where(d => d.AcceptTypeCode == dto.AcceptTypeCode) //受理类型
- .Where(d => d.HotspotId == dto.HotspotId) //热点类型
- .Where(d => d.CreationTime >= dto.StartTime) //受理时间开始
- .Where(d => d.CreationTime <= dto.EndTime) //受理时间结束
- .Where(d => d.AreaCode == dto.AreaCode) //区域
- .Where(x => filterTitle.Any(s => x.Title.Contains(s)) == false)
- .OrderByDescending(d => d.CreationTime)
- .ToPagedListAsync(dto, HttpContext.RequestAborted);
- return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
- }
- /// <summary>
- /// 回退错件
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("reTransact")]
- public async Task<PagedDto<OrderReTransactVo>> OrderReTransact([FromQuery] QueryOrderReTransactRequest dto)
- {
- if (!dto.StartTime.HasValue || !dto.EndTime.HasValue)
- throw UserFriendlyException.SameMessage("请选择时间!");
- dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
- var query = _orderApplication.OrderReTransact(dto);
- var (total, items) = await query
- .ToPagedListAsync(dto, HttpContext.RequestAborted);
- items.Add(new OrderReTransactVo
- {
- OrgName = "合计",
- Num = items.Select(s => s.Num).Sum(),
- });
- return new PagedDto<OrderReTransactVo>(total, _mapper.Map<IReadOnlyList<OrderReTransactVo>>(items));
- }
- /// <summary>
- /// 回退错件导出
- /// </summary>
- /// <returns></returns>
- [HttpPost("reTransact/_export")]
- public async Task<FileStreamResult> OrderReTransactExport([FromBody] ExportExcelDto<QueryOrderReTransactRequest> dto)
- {
- var query = _orderApplication.OrderReTransact(dto.QueryDto);
- List<OrderReTransactVo> data;
- data = await query.ToListAsync(HttpContext.RequestAborted);
- data.Add(new OrderReTransactVo
- {
- OrgName = "合计",
- Num = data.Select(s => s.Num).Sum(),
- });
- dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
- var dtos = data
- .Select(stu => _mapper.Map(stu, typeof(OrderReTransactVo), dynamicClass))
- .Cast<object>()
- .ToList();
- var stream = ExcelHelper.CreateStream(dtos);
- return ExcelStreamResult(stream, "回退错件统计数据");
- }
- /// <summary>
- /// 回退错件明细
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("reTransact_detail")]
- public async Task<PagedDto<OrderSpecialDetailDto>> OrderReTransactDetail([FromQuery] QueryOrderReTransactDetailRequest dto)
- {
- if (!dto.StartTime.HasValue || !dto.EndTime.HasValue)
- throw UserFriendlyException.SameMessage("请选择时间!");
- dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
- var query = _orderApplication.QueryOrderSourceDetail(dto);
- var (total, items) = await
- query.ToPagedListAsync(dto, HttpContext.RequestAborted);
- return new PagedDto<OrderSpecialDetailDto>(total, _mapper.Map<IReadOnlyList<OrderSpecialDetailDto>>(items));
- }
- /// <summary>
- /// 回退错件明细导出
- /// </summary>
- /// <returns></returns>
- [HttpPost("reTransact_detail/_export")]
- public async Task<FileStreamResult> OrderReTransactDetailExport([FromBody] ExportExcelDto<QueryOrderReTransactDetailRequest> dto)
- {
- var query = _orderApplication.QueryOrderSourceDetail(dto.QueryDto);
- List<OrderSpecialDetail> data;
- if (dto.IsExportAll)
- {
- data = await query.ToListAsync(HttpContext.RequestAborted);
- }
- else
- {
- var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
- data = items;
- }
- var dataDtos = _mapper.Map<ICollection<OrderSpecialDetailDto>>(data);
- dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
- var dtos = dataDtos
- .Select(stu => _mapper.Map(stu, typeof(OrderSpecialDetailDto), dynamicClass))
- .Cast<object>()
- .ToList();
- var stream = ExcelHelper.CreateStream(dtos);
- return ExcelStreamResult(stream, "回退错件明细列表数据");
- }
- /// <summary>
- /// 获取基本信息
- /// </summary>
- /// <param name="id"></param>
- /// <returns></returns>
- [HttpGet("reTransact_base")]
- public async Task<object> ReTransactBaseData()
- {
- var rsp = new
- {
- ReTransactErrorType = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.ReTransactErrorType),
- };
- return rsp;
- }
- /// <summary>
- /// 派单量统计
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("send_order_report")]
- public async Task<object> SendOrderReport([FromQuery] QuerySendOrderRequest dto)
- {
- if (!dto.StartTime.HasValue || !dto.EndTime.HasValue)
- throw UserFriendlyException.SameMessage("请选择时间!");
- dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
- var items = await _workflowTraceRepository.Queryable()
- .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
- //.LeftJoin<WorkflowStepHandler>((x, w, wsh) => x.StepId == wsh.WorkflowStepId && wsh.IsActualHandler == true)
- .InnerJoin<SchedulingUser>((x, w, su) => x.HandlerId == su.UserId)
- .Where((x, w, su) => w.ModuleCode == "OrderHandle" && x.BusinessType == EBusinessType.Send && x.Status == EWorkflowStepStatus.Handled)
- .Where((x, w, su) => x.CreationTime >= dto.StartTime.Value)
- .Where((x, w, su) => x.CreationTime <= dto.EndTime.Value)
- .WhereIF(!string.IsNullOrEmpty(dto.UserName), (x, w, su) => su.UserName == dto.UserName)
- .GroupBy((x, w, su) => new { su.UserId, su.UserName })
- //.Having((x, w, wsh, su) => SqlFunc.AggregateCount(x.WorkflowId) == 1)
- .Select((x, w, su) => new BiOrderSendVo
- {
- UserId = su.UserId,
- UserName = su.UserName,
- SendOrderNum = SqlFunc.AggregateDistinctCount(w.ExternalId),
- NoSendOrderNum = SqlFunc.AggregateSum(SqlFunc.IIF(x.HandlerId == null || x.HandlerId == "", 1, 0)),
- }).ToListAsync();
- var items2 = await _workflowTraceRepository.Queryable()
- .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
- //.LeftJoin<WorkflowStepHandler>((x, w, wfsh) => x.StepId == wfsh.WorkflowStepId && wfsh.IsActualHandler == true)
- .InnerJoin<SchedulingUser>((x, w, su) => x.HandlerId == su.UserId)
- .Where((x, w, su) => w.ModuleCode == "OrderHandle" && x.BusinessType == EBusinessType.Send && x.Status == EWorkflowStepStatus.Handled)
- .Where((x, w, su) => x.CreationTime >= dto.StartTime.Value)
- .Where((x, w, su) => x.CreationTime <= dto.EndTime.Value)
- .GroupBy((x, w, su) => x.WorkflowId)
- .Having((x, w, su) => SqlFunc.AggregateCount(x.WorkflowId) > 1)
- .Select((x, w, su) => new { Id = x.WorkflowId, CreationTime = SqlFunc.AggregateMin(x.CreationTime) })
- .MergeTable()
- .LeftJoin<WorkflowTrace>((a, wt) => a.Id == wt.WorkflowId)
- .LeftJoin<Workflow>((a, wt, wf) => wt.WorkflowId == wf.Id)
- //.LeftJoin<WorkflowStepHandler>((a, wt, wf, wsh) => wt.StepId == wsh.WorkflowStepId && wsh.CreationTime == a.CreationTime)
- .InnerJoin<SchedulingUser>((a, wt, wf, su) => wt.HandlerId == su.UserId)
- .WhereIF(!string.IsNullOrEmpty(dto.UserName), ((a, wt, wf, su) => su.UserName == dto.UserName))
- .GroupBy((a, wt, wf, su) => new { su.UserId, su.UserName })
- .Select((a, wt, wf, su) => new BiOrderSendVo
- {
- UserId = su.UserId,
- UserName = su.UserName,
- SendOrderNum = 0,
- NoSendOrderNum = 0,
- ReSendOrderNum = SqlFunc.AggregateDistinctCount(wf.ExternalId),
- }).ToListAsync();
- var res = (from t1 in items
- join t2 in items2 on t1.UserId equals t2.UserId into t1_t2
- from item in t1_t2.DefaultIfEmpty()
- select new
- {
- UserId = t1.UserId,
- UserName = t1.UserName,
- SendOrderNum = t1.SendOrderNum,
- NoSendOrderNum = t1.NoSendOrderNum,
- ReSendOrderNum = t1_t2.Select(x => x.ReSendOrderNum).FirstOrDefault(),
- ChainRate = t1_t2.Select(x => x.ReSendOrderNum).FirstOrDefault() > 0 ?
- ((double.Parse(t1.SendOrderNum.ToString()) - double.Parse(t1_t2.Select(x => x.ReSendOrderNum).FirstOrDefault().ToString())) / double.Parse(t1.SendOrderNum.ToString()) * 100).ToString("F2") + "%" : "100.00%",
- }).ToList();
- return res;
- }
- /// <summary>
- /// 派单量统计明细
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("send_order_detail_report")]
- public async Task<PagedDto<OrderDto>> QuerySendOrderDetail([FromQuery] QuerySendOrderDetailRequest dto)
- {
- if (!dto.StartTime.HasValue || !dto.EndTime.HasValue)
- throw UserFriendlyException.SameMessage("请选择时间!");
- dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
- var (total, items) = await _workflowTraceRepository.Queryable()
- .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
- //.LeftJoin<WorkflowStepHandler>((x, w, wsh) => x.StepId == wsh.WorkflowStepId && wsh.IsActualHandler == true)
- .InnerJoin<SchedulingUser>((x, w, su) => x.HandlerId == su.UserId)
- .Where((x, w, su) => w.ModuleCode == "OrderHandle" && x.BusinessType == EBusinessType.Send)
- .Where((x, w, su) => x.CreationTime >= dto.StartTime.Value)
- .Where((x, w, su) => x.CreationTime <= dto.EndTime.Value)
- .Where((x, w, su) => su.UserId == dto.UserId)
- .WhereIF(dto.TitleCode.ToUpper() == "NOSENDORDERNUM", (x, w, su) => x.HandlerId == null || x.HandlerId == "")
- .GroupBy((x, w, su) => w.ExternalId)
- .Select((x, w, su) => new { Id = w.ExternalId })
- .MergeTable()
- .LeftJoin<Order>((a, b) => a.Id == b.Id)
- .Select((a, b) => b)
- .ToPagedListAsync(dto, HttpContext.RequestAborted);
- if (dto.TitleCode.ToUpper() == "RESENDORDERNUM")
- {
- (total, items) = await _workflowTraceRepository.Queryable()
- .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)
- //.LeftJoin<WorkflowStepHandler>((x, w, wfsh) => x.StepId == wfsh.WorkflowStepId && wfsh.IsActualHandler == true)
- .InnerJoin<SchedulingUser>((x, w, su) => x.HandlerId == su.UserId)
- .Where((x, w, su) => w.ModuleCode == "OrderHandle" && x.BusinessType == EBusinessType.Send)
- .Where((x, w, su) => x.CreationTime >= dto.StartTime.Value)
- .Where((x, w, su) => x.CreationTime <= dto.EndTime.Value)
- .GroupBy((x, w, su) => x.WorkflowId)
- .Having((x, w, su) => SqlFunc.AggregateCount(x.WorkflowId) > 1)
- .Select((x, w, su) => new { Id = x.WorkflowId, CreationTime = SqlFunc.AggregateMin(x.CreationTime) })
- .MergeTable()
- .LeftJoin<WorkflowTrace>((a, wt) => a.Id == wt.WorkflowId)
- .LeftJoin<Workflow>((a, wt, wf) => wt.WorkflowId == wf.Id)
- //.LeftJoin<WorkflowStepHandler>((a, wt, wf, wsh) => wt.StepId == wsh.WorkflowStepId && wsh.CreationTime == a.CreationTime)
- .InnerJoin<SchedulingUser>((a, wt, wf, su) => wt.HandlerId == su.UserId)
- .Where((a, wt, wf, su) => su.UserId == dto.UserId)
- .GroupBy((a, wt, wf, su) => wf.ExternalId)
- .Select((a, wt, wf, su) => new { Id = wf.ExternalId })
- .MergeTable()
- .LeftJoin<Order>((a, b) => a.Id == b.Id)
- .Select((a, b) => b)
- .ToPagedListAsync(dto, HttpContext.RequestAborted);
- }
- return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
- }
- /// <summary>
- /// 二次办理统计
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("secondary_handling_report")]
- public async Task<List<SecondaryHandlingVo>> SecondaryHandlingReport([FromQuery] QuerySecondaryHandlingRequest dto)
- {
- var query = _orderSecondaryHandlingApplication.SecondaryHandlingReport(dto, HttpContext.RequestAborted);
- return await query.ToListAsync();
- }
- /// <summary>
- /// 二次办理统计导出
- /// </summary>
- /// <returns></returns>
- [HttpPost("secondary_handling_report/_export")]
- public async Task<FileStreamResult> SecondaryHandlingReportExport([FromBody] ExportExcelDto<QuerySecondaryHandlingRequest> dto)
- {
- var query = _orderSecondaryHandlingApplication.SecondaryHandlingReport(dto.QueryDto, HttpContext.RequestAborted);
- List<SecondaryHandlingVo> secondaryHandling;
- secondaryHandling = await query.ToListAsync(HttpContext.RequestAborted);
- dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
- var dtos = secondaryHandling
- .Select(stu => _mapper.Map(stu, typeof(SecondaryHandlingVo), dynamicClass))
- .Cast<object>()
- .ToList();
- var stream = ExcelHelper.CreateStream(dtos);
- return ExcelStreamResult(stream, "二次办理统计数据");
- }
- /// <summary>
- /// 二次办理明细
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("secondary_handling_detail_report")]
- public async Task<PagedDto<OrderSecondaryHandlingDto>> SecondaryHandlingDetailReport([FromQuery] QuerySecondaryHandlingRequest dto)
- {
- var query = _orderSecondaryHandlingApplication.SecondaryHandlingDetailReport(dto, HttpContext.RequestAborted);
- var (total, items) = await query.ToPagedListAsync(dto, HttpContext.RequestAborted);
- return new PagedDto<OrderSecondaryHandlingDto>(total, _mapper.Map<IReadOnlyList<OrderSecondaryHandlingDto>>(items));
- }
- /// <summary>
- /// 二次办理明细导出
- /// </summary>
- /// <returns></returns>
- [HttpPost("secondary_handling_detail_report/_export")]
- public async Task<FileStreamResult> SecondaryHandlingDetailReportExport([FromBody] ExportExcelDto<QuerySecondaryHandlingRequest> dto)
- {
- var query = _orderSecondaryHandlingApplication.SecondaryHandlingDetailReport(dto.QueryDto, HttpContext.RequestAborted);
- List<OrderSecondaryHandling> secondaryHandling;
- if (dto.IsExportAll)
- {
- secondaryHandling = await query.ToListAsync(HttpContext.RequestAborted);
- }
- else
- {
- var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
- secondaryHandling = items;
- }
- var secondaryHandlingDtos = _mapper.Map<ICollection<OrderSecondaryHandlingDto>>(secondaryHandling);
- dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
- var dtos = secondaryHandlingDtos
- .Select(stu => _mapper.Map(stu, typeof(OrderSecondaryHandlingDto), dynamicClass))
- .Cast<object>()
- .ToList();
- var stream = ExcelHelper.CreateStream(dtos);
- return ExcelStreamResult(stream, "二次办理列表数据");
- }
- /// <summary>
- /// 二次办理满意度统计
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("secondary_handling_satisfaction_report")]
- public async Task<List<SecondaryHandlingSatisfactionVo>> SecondaryHandlingSatisfactionReport([FromQuery] QuerySecondaryHandlingRequest dto)
- {
- var query = _orderSecondaryHandlingApplication.SecondaryHandlingSatisfactionReport(dto, HttpContext.RequestAborted);
- var list = await query.ToListAsync();
- //总计
- var total = new SecondaryHandlingSatisfactionVo
- {
- OrgId = "0",
- OrgName = "总计",
- TotalSumCount = list.Select(x => x.TotalSumCount).Sum(),
- VerySatisfiedCount = list.Select(x => x.VerySatisfiedCount).Sum(),
- SatisfiedCount = list.Select(x => x.SatisfiedCount).Sum(),
- RegardedAsSatisfiedCount = list.Select(x => x.RegardedAsSatisfiedCount).Sum(),
- DefaultSatisfiedCount = list.Select(x => x.DefaultSatisfiedCount).Sum(),
- NoSatisfiedCount = list.Select(x => x.NoSatisfiedCount).Sum(),
- NoEvaluateCount = list.Select(x => x.NoEvaluateCount).Sum(),
- NoPutThroughCount = list.Select(x => x.NoPutThroughCount).Sum()
- };
- list.Add(total);
- //区县合计
- var countyList = list.Where(x => x.OrgType == EOrgType.County).ToList();
- var countyTotal = new SecondaryHandlingSatisfactionVo
- {
- OrgId = "0",
- OrgName = "区县合计",
- TotalSumCount = countyList.Select(x => x.TotalSumCount).Sum(),
- VerySatisfiedCount = countyList.Select(x => x.VerySatisfiedCount).Sum(),
- SatisfiedCount = countyList.Select(x => x.SatisfiedCount).Sum(),
- RegardedAsSatisfiedCount = countyList.Select(x => x.RegardedAsSatisfiedCount).Sum(),
- DefaultSatisfiedCount = countyList.Select(x => x.DefaultSatisfiedCount).Sum(),
- NoSatisfiedCount = countyList.Select(x => x.NoSatisfiedCount).Sum(),
- NoEvaluateCount = countyList.Select(x => x.NoEvaluateCount).Sum(),
- NoPutThroughCount = countyList.Select(x => x.NoPutThroughCount).Sum()
- };
- list.Add(countyTotal);
- //市直合计
- var cityList = list.Where(x => x.OrgType == EOrgType.City).ToList();
- var cityTotal = new SecondaryHandlingSatisfactionVo
- {
- OrgId = "0",
- OrgName = "市直合计",
- TotalSumCount = cityList.Select(x => x.TotalSumCount).Sum(),
- VerySatisfiedCount = cityList.Select(x => x.VerySatisfiedCount).Sum(),
- SatisfiedCount = cityList.Select(x => x.SatisfiedCount).Sum(),
- RegardedAsSatisfiedCount = cityList.Select(x => x.RegardedAsSatisfiedCount).Sum(),
- DefaultSatisfiedCount = cityList.Select(x => x.DefaultSatisfiedCount).Sum(),
- NoSatisfiedCount = cityList.Select(x => x.NoSatisfiedCount).Sum(),
- NoEvaluateCount = cityList.Select(x => x.NoEvaluateCount).Sum(),
- NoPutThroughCount = cityList.Select(x => x.NoPutThroughCount).Sum()
- };
- list.Add(cityTotal);
- return list;
- }
- /// <summary>
- /// 二次办理满意度统计导出
- /// </summary>
- /// <returns></returns>
- [HttpPost("secondary_handling_satisfaction_report/_export")]
- public async Task<FileStreamResult> SecondaryHandlingSatisfactionReportExport([FromBody] ExportExcelDto<QuerySecondaryHandlingRequest> dto)
- {
- var query = _orderSecondaryHandlingApplication.SecondaryHandlingSatisfactionReport(dto.QueryDto, HttpContext.RequestAborted);
- List<SecondaryHandlingSatisfactionVo> secondaryHandling;
- secondaryHandling = await query.ToListAsync(HttpContext.RequestAborted);
- //总计
- var total = new SecondaryHandlingSatisfactionVo
- {
- OrgId = "0",
- OrgName = "总计",
- TotalSumCount = secondaryHandling.Select(x => x.TotalSumCount).Sum(),
- VerySatisfiedCount = secondaryHandling.Select(x => x.VerySatisfiedCount).Sum(),
- SatisfiedCount = secondaryHandling.Select(x => x.SatisfiedCount).Sum(),
- RegardedAsSatisfiedCount = secondaryHandling.Select(x => x.RegardedAsSatisfiedCount).Sum(),
- DefaultSatisfiedCount = secondaryHandling.Select(x => x.DefaultSatisfiedCount).Sum(),
- NoSatisfiedCount = secondaryHandling.Select(x => x.NoSatisfiedCount).Sum(),
- NoEvaluateCount = secondaryHandling.Select(x => x.NoEvaluateCount).Sum(),
- NoPutThroughCount = secondaryHandling.Select(x => x.NoPutThroughCount).Sum()
- };
- secondaryHandling.Add(total);
- //区县合计
- var countyList = secondaryHandling.Where(x => x.OrgType == EOrgType.County).ToList();
- var countyTotal = new SecondaryHandlingSatisfactionVo
- {
- OrgId = "0",
- OrgName = "区县合计",
- TotalSumCount = countyList.Select(x => x.TotalSumCount).Sum(),
- VerySatisfiedCount = countyList.Select(x => x.VerySatisfiedCount).Sum(),
- SatisfiedCount = countyList.Select(x => x.SatisfiedCount).Sum(),
- RegardedAsSatisfiedCount = countyList.Select(x => x.RegardedAsSatisfiedCount).Sum(),
- DefaultSatisfiedCount = countyList.Select(x => x.DefaultSatisfiedCount).Sum(),
- NoSatisfiedCount = countyList.Select(x => x.NoSatisfiedCount).Sum(),
- NoEvaluateCount = countyList.Select(x => x.NoEvaluateCount).Sum(),
- NoPutThroughCount = countyList.Select(x => x.NoPutThroughCount).Sum()
- };
- secondaryHandling.Add(countyTotal);
- //市直合计
- var cityList = secondaryHandling.Where(x => x.OrgType == EOrgType.City).ToList();
- var cityTotal = new SecondaryHandlingSatisfactionVo
- {
- OrgId = "0",
- OrgName = "市直合计",
- TotalSumCount = cityList.Select(x => x.TotalSumCount).Sum(),
- VerySatisfiedCount = cityList.Select(x => x.VerySatisfiedCount).Sum(),
- SatisfiedCount = cityList.Select(x => x.SatisfiedCount).Sum(),
- RegardedAsSatisfiedCount = cityList.Select(x => x.RegardedAsSatisfiedCount).Sum(),
- DefaultSatisfiedCount = cityList.Select(x => x.DefaultSatisfiedCount).Sum(),
- NoSatisfiedCount = cityList.Select(x => x.NoSatisfiedCount).Sum(),
- NoEvaluateCount = cityList.Select(x => x.NoEvaluateCount).Sum(),
- NoPutThroughCount = cityList.Select(x => x.NoPutThroughCount).Sum()
- };
- secondaryHandling.Add(cityTotal);
- dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
- var dtos = secondaryHandling
- .Select(stu => _mapper.Map(stu, typeof(SecondaryHandlingSatisfactionVo), dynamicClass))
- .Cast<object>()
- .ToList();
- var stream = ExcelHelper.CreateStream(dtos);
- return ExcelStreamResult(stream, "二次办理满意度统计数据");
- }
- /// <summary>
- /// 二次办理满意度明细
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("secondary_handling_satisfaction_detail_report")]
- public async Task<PagedDto<OrderSecondaryHandlingDto>> SecondaryHandlingSatisfactionDetailReport([FromQuery] QuerySecondaryHandlingRequest dto)
- {
- var query = _orderSecondaryHandlingApplication.SecondaryHandlingSatisfactionDetailReport(dto, HttpContext.RequestAborted);
- var (total, items) = await query.ToPagedListAsync(dto, HttpContext.RequestAborted);
- return new PagedDto<OrderSecondaryHandlingDto>(total, _mapper.Map<IReadOnlyList<OrderSecondaryHandlingDto>>(items));
- }
- /// <summary>
- /// 二次办理满意度明细导出
- /// </summary>
- /// <returns></returns>
- [HttpPost("secondary_handling_satisfaction_detail_report/_export")]
- public async Task<FileStreamResult> SecondaryHandlingSatisfactionDetailReport([FromBody] ExportExcelDto<QuerySecondaryHandlingRequest> dto)
- {
- var query = _orderSecondaryHandlingApplication.SecondaryHandlingSatisfactionDetailReport(dto.QueryDto, HttpContext.RequestAborted);
- List<OrderSecondaryHandling> secondaryHandling;
- if (dto.IsExportAll)
- {
- secondaryHandling = await query.ToListAsync(HttpContext.RequestAborted);
- }
- else
- {
- var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
- secondaryHandling = items;
- }
- var secondaryHandlingDtos = _mapper.Map<ICollection<OrderSecondaryHandlingDto>>(secondaryHandling);
- dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
- var dtos = secondaryHandlingDtos
- .Select(stu => _mapper.Map(stu, typeof(OrderSecondaryHandlingDto), dynamicClass))
- .Cast<object>()
- .ToList();
- var stream = ExcelHelper.CreateStream(dtos);
- return ExcelStreamResult(stream, "二次办理满意度列表数据");
- }
- /// <summary>
- /// 未签收统计
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("unsigned_order_report")]
- public async Task<PagedDto<UnsignedOrderDto>> UnsignedOrderReport([FromQuery] QueryUnsignedOrdersRequest dto)
- {
- var query = _orderApplication.QueryUnsignedOrders(dto);
- var (total, items) = await query.Select((x, ws) => new UnsignedOrder { Order = x, WorkflowStep = ws }).ToPagedListAsync(dto, HttpContext.RequestAborted);
- var itemsVo = _mapper.Map<IReadOnlyList<UnsignedOrderDto>>(items);
- foreach (var item in itemsVo)
- {
- item.UnsignedTime = _timeLimitDomainService.CalcWorkTimeToHour(item.WorkflowStep.CreationTime, item.WorkflowStep.Status == EWorkflowStepStatus.WaitForAccept ? DateTime.Now : item.WorkflowStep.AcceptTime!.Value, false);
- }
- return new PagedDto<UnsignedOrderDto>(total, itemsVo);
- }
- /// <summary>
- /// 未签收统计导出
- /// </summary>
- /// <returns></returns>
- [HttpPost("unsigned_order_report/_export")]
- public async Task<FileStreamResult> UnsignedOrdersReport([FromBody] ExportExcelDto<QueryUnsignedOrdersRequest> dto)
- {
- var query = _orderApplication.QueryUnsignedOrders(dto.QueryDto).Select((x, ws) => new UnsignedOrder { Order = x, WorkflowStep = ws });
- List<UnsignedOrder> unsignedOrders;
- if (dto.IsExportAll)
- {
- unsignedOrders = await query.ToListAsync(HttpContext.RequestAborted);
- }
- else
- {
- var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
- unsignedOrders = items;
- }
- var unsignedOrderDtos = _mapper.Map<ICollection<UnsignedOrderDto>>(unsignedOrders);
- foreach (var item in unsignedOrderDtos)
- {
- item.UnsignedTime = _timeLimitDomainService.CalcWorkTimeToHour(item.WorkflowStep.CreationTime, item.WorkflowStep.Status == EWorkflowStepStatus.WaitForAccept ? DateTime.Now : item.WorkflowStep.AcceptTime!.Value, false);
- }
- dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
- var dtos = unsignedOrderDtos
- .Select(stu => _mapper.Map(stu, typeof(UnsignedOrderDto), dynamicClass))
- .Cast<object>()
- .ToList();
- var stream = ExcelHelper.CreateStream(dtos);
- return ExcelStreamResult(stream, "未签收统计列表数据");
- }
- /// <summary>
- /// 信件来源统计
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("order_source_report")]
- public async Task<IReadOnlyList<OrderSourceVo>> QueryOrderSourceReport([FromQuery] QueryOrderSourceRequest dto)
- {
- var count = await _orderApplication.QueryOrderSource(dto).CountAsync();
- var query = _orderApplication.QueryOrderSource(dto);
- var items = await query.GroupBy(d => d.SourceChannel).Select(d => new OrderSourceVo { Source = d.SourceChannel, Num = SqlFunc.AggregateCount(d.Id), TotalSumCount = count }).ToListAsync(HttpContext.RequestAborted);
- items.Add(new OrderSourceVo { Source = "合计", Num = count, TotalSumCount = count });
- return items;
- }
- /// <summary>
- /// 信件来源统计导出
- /// </summary>
- /// <returns></returns>
- [HttpPost("order_source/_export")]
- public async Task<FileStreamResult> QueryOrderSourceReport([FromBody] ExportExcelDto<QueryOrderSourceRequest> dto)
- {
- var count = await _orderApplication.QueryOrderSource(dto.QueryDto).CountAsync();
- var query = _orderApplication.QueryOrderSource(dto.QueryDto).GroupBy(d => d.SourceChannel).Select(d => new OrderSourceVo { Source = d.SourceChannel, Num = SqlFunc.AggregateCount(d.Id), TotalSumCount = count });
- List<OrderSourceVo> orderSources;
- if (dto.IsExportAll)
- {
- orderSources = await query.ToListAsync(HttpContext.RequestAborted);
- }
- else
- {
- var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
- orderSources = items;
- }
- orderSources.Add(new OrderSourceVo { Source = "合计", Num = count, TotalSumCount = count });
- dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
- var dtos = orderSources
- .Select(stu => _mapper.Map(stu, typeof(OrderSourceVo), dynamicClass))
- .Cast<object>()
- .ToList();
- var stream = ExcelHelper.CreateStream(dtos);
- return ExcelStreamResult(stream, "信件来源统计数据");
- }
- /// <summary>
- /// 信件来源统计列表
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("order_source_report_list")]
- public async Task<Object> QueryOrderSourceReportList([FromQuery] QueryOrderSourceRequest dto)
- {
- var item = await _orderRepository.OrderSource(dto);
- var titleData = await _systemDicDataRepository.Queryable()
- .Where(p => p.DicTypeCode == "SourceChannel")
- .Select(p => new
- {
- Key = p.DicDataValue,
- Value = p.DicDataName
- }).ToListAsync();
- return new { Item = item, TitleData = titleData };
- }
- /// <summary>
- /// 信件来源统计导出
- /// </summary>
- /// <returns></returns>
- [HttpPost("order_source_list/_export")]
- public async Task<FileStreamResult> QueryOrderSourceListExport([FromBody] QueryOrderSourceRequest dto)
- {
- var dataTable = await _orderRepository.OrderSourceExport(dto);
- var stream = ExcelHelper.CreateStream(dataTable);
- return ExcelStreamResult(stream, "信件来源统计数据");
- }
- /// <summary>
- /// 信件来源统计明细
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("order_source_detail_report")]
- public async Task<PagedDto<OrderDto>> QueryOrderSourceDetailReport([FromQuery] QueryOrderSourceDetailRequest dto)
- {
- var (total, items) = await _orderApplication.QueryOrderSourceDetail(dto).ToPagedListAsync(dto, HttpContext.RequestAborted);
- return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
- }
- /// <summary>
- /// 信件来源统计明细导出
- /// </summary>
- /// <returns></returns>
- [HttpPost("order_source_detail/_export")]
- public async Task<FileStreamResult> QueryOrderSourceDetailReport([FromBody] ExportExcelDto<QueryOrderSourceDetailRequest> dto)
- {
- var query = _orderApplication.QueryOrderSourceDetail(dto.QueryDto);
- List<Order> orders;
- if (dto.IsExportAll)
- {
- orders = await query.ToListAsync(HttpContext.RequestAborted);
- }
- else
- {
- var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
- orders = items;
- }
- var ordersDtos = _mapper.Map<ICollection<OrderDto>>(orders);
- dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
- var dtos = ordersDtos
- .Select(stu => _mapper.Map(stu, typeof(OrderDto), dynamicClass))
- .Cast<object>()
- .ToList();
- var stream = ExcelHelper.CreateStream(dtos);
- return ExcelStreamResult(stream, "信件来源统计明细数据");
- }
- /// <summary>
- /// 区域分时统计
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("order_area_time")]
- public async Task<object> OrderAreaTime([FromQuery] TimeSharingPagedKeywordRequest dto)
- {
- var item = await _orderRepository.OrderAreaTime(dto);
- var titleData = await _systemAreaRepository.Queryable()
- .Where(p => p.Id.Length == 6 && p.Id != "510000")
- .Select(p => new
- {
- Key = p.Id,
- Value = p.AreaName
- }).ToListAsync();
- return new { Item = item, TitleData = titleData };
- }
- /// <summary>
- /// 区域分时统计-导出
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpPost("order_area_time_export")]
- public async Task<FileStreamResult> OrderAreaTimeExport([FromBody] TimeSharingPagedKeywordRequest dto)
- {
- var dataTable = await _orderRepository.OrderAreaTimeExport(dto);
- var stream = ExcelHelper.CreateStream(dataTable);
- return ExcelStreamResult(stream, "区域分时统计数据");
- }
- /// <summary>
- /// 热点类型分时统计
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("order_hotspot_time")]
- public async Task<object> OrderHotspotTime([FromQuery] TimeSharingPagedKeywordRequest dto)
- {
- var item = await _orderRepository.OrderHotspotTime(dto);
- var titleData = await _hotspotRepository.Queryable()
- .Where(p => p.Id.Length == 2 && (p.ParentId == null || p.ParentId == ""))
- .Select(p => new
- {
- Key = p.Id,
- Value = p.HotSpotName
- }).ToListAsync();
- return new { Item = item, TitleData = titleData };
- }
- /// <summary>
- /// 热点类型分时统计-导出
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpPost("order_hotspot_time_export")]
- public async Task<FileStreamResult> OrderHotspotTimeExport([FromBody] TimeSharingPagedKeywordRequest dto)
- {
- var dataTable = await _orderRepository.OrderHotspotTimeExport(dto);
- var stream = ExcelHelper.CreateStream(dataTable);
- return ExcelStreamResult(stream, "热点类型分时统计数据");
- }
- /// <summary>
- /// 受理类型分时统计
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("order_acceptance_time")]
- public async Task<object> OrderAcceptanceTime([FromQuery] TimeSharingPagedKeywordRequest dto)
- {
- var item = await _orderRepository.OrderAcceptanceTime(dto);
- var titleData = await _systemDicDataRepository.Queryable()
- .Where(p => p.DicTypeCode == "AcceptType")
- .Select(p => new
- {
- Key = p.DicDataValue,
- Value = p.DicDataName
- }).ToListAsync();
- return new { Item = item, TitleData = titleData };
- }
- /// <summary>
- /// 受理类型分时统计-导出
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpPost("order_acceptance_time_export")]
- public async Task<FileStreamResult> OrderAcceptanceTimeExport([FromBody] TimeSharingPagedKeywordRequest dto)
- {
- var dataTable = await _orderRepository.OrderAcceptanceTimeExport(dto);
- var stream = ExcelHelper.CreateStream(dataTable);
- return ExcelStreamResult(stream, "受理类型分时统计数据");
- }
- /// <summary>
- /// 信件来源分时统计
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("order_source_time")]
- public async Task<object> OrderSourceTime([FromQuery] TimeSharingPagedKeywordRequest dto)
- {
- var item = await _orderRepository.OrderSourceTime(dto);
- var titleData = await _systemDicDataRepository.Queryable()
- .Where(p => p.DicTypeCode == "SourceChannel")
- .Select(p => new
- {
- Key = p.DicDataValue,
- Value = p.DicDataName
- }).ToListAsync();
- return new { Item = item, TitleData = titleData };
- }
- /// <summary>
- /// 信件来源分时统计-导出
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpPost("order_source_time_export")]
- public async Task<FileStreamResult> OrderSourceTimeExport([FromBody] TimeSharingPagedKeywordRequest dto)
- {
- var dataTable = await _orderRepository.OrderSourceTimeExport(dto);
- var stream = ExcelHelper.CreateStream(dataTable);
- return ExcelStreamResult(stream, "信件来源分时统计数据");
- }
- /// <summary>
- /// 部门满意度明细
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("org-visitdetail-list")]
- public async Task<PagedDto<OrgVisitDetailListResp>> OrgVisitDetailList([FromQuery] OrgVisitDetailListReq dto)
- {
- var query = _orderRepository.OrgVisitDetailList(dto);
- var (total, items) = await query.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
- return new PagedDto<OrgVisitDetailListResp>(total, _mapper.Map<IReadOnlyList<OrgVisitDetailListResp>>(items));
- }
- /// <summary>
- /// 部门满意度明细导出
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpPost("org-visitdetail-list-export")]
- public async Task<FileStreamResult> OrgVisitDetailListExport([FromBody] ExportExcelDto<OrgVisitDetailListReq> dto)
- {
- var query = _orderRepository.OrgVisitDetailList(dto.QueryDto);
- List<OrderVisitDetail> orders;
- if (dto.IsExportAll)
- {
- orders = await query.ToListAsync(HttpContext.RequestAborted);
- }
- else
- {
- var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
- orders = items;
- }
- var ordersDtos = _mapper.Map<ICollection<OrgVisitDetailListResp>>(orders);
- dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
- var dtos = ordersDtos
- .Select(stu => _mapper.Map(stu, typeof(OrgVisitDetailListResp), dynamicClass))
- .Cast<object>()
- .ToList();
- var stream = ExcelHelper.CreateStream(dtos);
- return ExcelStreamResult(stream, "部门满意度明细");
- }
- /// <summary>
- /// 热点区域统计
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [HttpGet("hotspot-area-statistics")]
- public async Task<object> HotspotAndAreaStatistics([FromQuery] HotspotAndAreaStatisticsReq dto)
- {
- dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
- var areaList = await _systemOrganizeRepository.Queryable().Where(x => SqlFunc.Length(x.Id) == 6).ToListAsync();
- List<dynamic> list = new List<dynamic>();
- foreach (var item in areaList)
- {
- var table = await _orderRepository.Queryable()
- .Where(x => x.CreationTime >= dto.StartTime && x.CreationTime < dto.EndTime && x.AreaCode.StartsWith(item.Id))
- .GroupByIF(dto.HotspotLevel == 1, x => new
- {
- HotspotId = x.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("2"))
- })
- .GroupByIF(dto.HotspotLevel == 2, x => new
- {
- HotspotId = x.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("4"))
- })
- .GroupByIF(dto.HotspotLevel == 3, x => new
- {
- HotspotId = x.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))
- })
- .GroupByIF(dto.HotspotLevel == 4, x => new
- {
- HotspotId = x.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("8"))
- })
- .Select(x => new
- {
- HotspotId = SqlFunc.IIF(dto.HotspotLevel == 1, x.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("2")),
- SqlFunc.IIF(dto.HotspotLevel == 2, x.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("4")),
- SqlFunc.IIF(dto.HotspotLevel == 3, x.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
- SqlFunc.IIF(dto.HotspotLevel == 4, x.HotspotId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("8")), "")))),
- Key = item.Id,
- AreaName = item.AreaName,
- Count = 1//SqlFunc.AggregateSum(SqlFunc.IIF(x.Hotspot.))
- }).ToPivotListAsync(x => x.Key, x => new { x.HotspotId, x.AreaName }, x => x.Sum(x => x.Count));
- list.AddRange(table);
- }
- return new { AreaList = areaList, Data = list };
- }
- }
- }
|