OrderReportApplication.cs 113 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786
  1. using Hotline.Application.Orders;
  2. using Hotline.Caching.Interfaces;
  3. using Hotline.CallCenter.Calls;
  4. using Hotline.FlowEngine.WorkflowModules;
  5. using Hotline.FlowEngine.Workflows;
  6. using Hotline.Orders;
  7. using Hotline.Settings;
  8. using Hotline.Settings.Hotspots;
  9. using Hotline.Settings.TimeLimits;
  10. using Hotline.Share.Dtos.Order;
  11. using Hotline.Share.Enums.FlowEngine;
  12. using Hotline.Share.Enums.Order;
  13. using Hotline.Share.Requests;
  14. using MapsterMapper;
  15. using SqlSugar;
  16. using XF.Domain.Authentications;
  17. using XF.Domain.Dependency;
  18. using XF.Domain.Exceptions;
  19. using XF.Domain.Repository;
  20. namespace Hotline.Application.StatisticalReport
  21. {
  22. public class OrderReportApplication : IOrderReportApplication, IScopeDependency
  23. {
  24. private readonly IOrderRepository _orderRepository;
  25. private readonly IRepository<Hotspot> _hotspotTypeRepository;
  26. private readonly ISystemDicDataCacheManager _sysDicDataCacheManager;
  27. private readonly IRepository<OrderVisitDetail> _orderVisitDetailRepository;
  28. private readonly IRepository<OrderDelay> _orderDelayRepository;
  29. private readonly IMapper _mapper;
  30. private readonly IRepository<WorkflowCountersign> _workflowCountersignRepository;
  31. private readonly IRepository<OrderSpecial> _orderSpecialRepository;
  32. private readonly IRepository<OrderVisit> _orderVisitRepository;
  33. private readonly IRepository<TrCallRecord> _trCallRecordRepository;
  34. private readonly IRepository<OrderPublish> _orderPublishRepository;
  35. private readonly IRepository<SystemOrganize> _systemOrganizeRepository;
  36. private readonly IRepository<AiOrderVisitDetail> _aiOrderVisitDetailRepository;
  37. private readonly ISessionContext _sessionContext;
  38. private readonly ISystemSettingCacheManager _systemSettingCacheManager;
  39. private readonly IRepository<OrderSpecialDetail> _orderSpecialDetailRepository;
  40. private readonly IRepository<WorkflowTrace> _workflowTraceRepository;
  41. private readonly IRepository<OrderScreen> _orderScreenRepository;
  42. private readonly IOrderSecondaryHandlingApplication _orderSecondaryHandlingApplication;
  43. private readonly ITimeLimitDomainService _timeLimitDomainService;
  44. public OrderReportApplication(
  45. IOrderRepository orderRepository,
  46. IRepository<Hotspot> hotspotTypeRepository,
  47. ISystemDicDataCacheManager sysDicDataCacheManager,
  48. IRepository<OrderVisitDetail> orderVisitDetailRepository,
  49. IRepository<OrderDelay> orderDelayRepository,
  50. IRepository<WorkflowCountersign> workflowCountersignRepository,
  51. IRepository<OrderSpecial> orderSpecialRepository,
  52. IMapper mapper,
  53. IRepository<OrderVisit> orderVisitRepository,
  54. IRepository<TrCallRecord> trCallRecordRepository,
  55. IRepository<OrderPublish> orderPublishRepository,
  56. IRepository<SystemOrganize> systemOrganizeRepository,
  57. IRepository<AiOrderVisitDetail> aiOrderVisitDetailRepository,
  58. ISessionContext sessionContext,
  59. ISystemSettingCacheManager systemSettingCacheManager,
  60. IRepository<OrderSpecialDetail> orderSpecialDetailRepository,
  61. IRepository<WorkflowTrace> workflowTraceRepository,
  62. IRepository<OrderScreen> orderScreenRepository,
  63. IOrderSecondaryHandlingApplication orderSecondaryHandlingApplication,
  64. ITimeLimitDomainService timeLimitDomainService
  65. )
  66. {
  67. _orderRepository = orderRepository;
  68. _hotspotTypeRepository = hotspotTypeRepository;
  69. _sysDicDataCacheManager = sysDicDataCacheManager;
  70. _orderVisitDetailRepository = orderVisitDetailRepository;
  71. _orderDelayRepository = orderDelayRepository;
  72. _workflowCountersignRepository = workflowCountersignRepository;
  73. _orderSpecialRepository = orderSpecialRepository;
  74. _mapper = mapper;
  75. _orderVisitRepository = orderVisitRepository;
  76. _trCallRecordRepository = trCallRecordRepository;
  77. _orderPublishRepository = orderPublishRepository;
  78. _systemOrganizeRepository = systemOrganizeRepository;
  79. _aiOrderVisitDetailRepository = aiOrderVisitDetailRepository;
  80. _sessionContext = sessionContext;
  81. _systemSettingCacheManager = systemSettingCacheManager;
  82. _orderSpecialDetailRepository = orderSpecialDetailRepository;
  83. _workflowTraceRepository = workflowTraceRepository;
  84. _orderScreenRepository = orderScreenRepository;
  85. _orderSecondaryHandlingApplication = orderSecondaryHandlingApplication;
  86. _timeLimitDomainService = timeLimitDomainService;
  87. }
  88. /// <summary>
  89. /// 部门办件统计表---新
  90. /// </summary>
  91. /// <param name="dto"></param>
  92. /// <returns></returns>
  93. public async Task<List<DepartmentalProcessingStatisticsDataDto>> DepartmentalProcessingStatisticsNew(DepartmentalProcessingStatisticsRequest dto)
  94. {
  95. dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
  96. var IsCenter = _sessionContext.OrgIsCenter;
  97. //信件总量:信件总量=已办件数+在办件数,工单需去重
  98. //已办件数:该部门已办理完成的工单总数(含参与会签的工单),若工单被部门多次办理,只统计一次
  99. //在办件数:该部门还未办理的工单数(若是一级部门,需包含中心向该部门发起回签的工单)。(特殊说明:部门或者中心发起了会签,会签中还未汇总,应算发起会签部门的在办里面)
  100. string strSql = @"select
  101. ""OrgCode""
  102. ,""Name"" ""OrgName""
  103. ,""OrgType""
  104. , ""YbOrderCountNum""
  105. , ""ZbOrderCountNum""
  106. ,""Archived""
  107. , ""ToBeArchived""
  108. , ""WaitPublished""
  109. ,""PublishedOpen""
  110. , ""PublishedNoOpen""
  111. ,""YbOverdue""
  112. , ""ZbOverdue""
  113. , ""HqzbOverdue""
  114. , ""HqybOverdue""
  115. , ""DelayEnd""
  116. , ""DelayWait""
  117. , ""OrderDelayCount""
  118. , ""ScreenCount""
  119. , ""ScreenApproval""
  120. , ""ScreenPass""
  121. ,""ScreenNotPass""
  122. ,""SatisfactionCount""
  123. ,""NotSatisfactionCount""
  124. , (""YbOrderCountNum""-""YbOverdue"" -""HqybOverdue"" ) ""CompleteOnTime""
  125. from (
  126. SELECT ""HandlerOrgId"" ""OrgCode""
  127. ,SUM(""YbOrderCountNum"") ""YbOrderCountNum""
  128. ,SUM(""ZbOrderCountNum"") ""ZbOrderCountNum""
  129. ,SUM(""Archived"") ""Archived""
  130. ,SUM(""ToBeArchived"") ""ToBeArchived""
  131. ,SUM(""WaitPublished"") ""WaitPublished""
  132. ,SUM(""PublishedOpen"") ""PublishedOpen""
  133. ,SUM(""PublishedNoOpen"") ""PublishedNoOpen""
  134. ,SUM(""YbOverdue"") ""YbOverdue""
  135. ,SUM(""ZbOverdue"") ""ZbOverdue""
  136. ,SUM(""HqzbOverdue"") ""HqzbOverdue""
  137. ,SUM(""HqybOverdue"") ""HqybOverdue""
  138. ,SUM(""DelayEnd"") ""DelayEnd""
  139. ,SUM(""DelayWait"") ""DelayWait""
  140. ,SUM(""OrderDelayCount"") ""OrderDelayCount""
  141. ,SUM(""ScreenCount"") ""ScreenCount""
  142. ,SUM(""ScreenApproval"") ""ScreenApproval""
  143. ,SUM(""ScreenPass"") ""ScreenPass""
  144. ,SUM(""ScreenNotPass"") ""ScreenNotPass""
  145. ,SUM(""SatisfactionCount"") ""SatisfactionCount""
  146. ,SUM(""NotSatisfactionCount"") ""NotSatisfactionCount""
  147. FROM (
  148. /*查询已办*/
  149. select ""HandlerOrgId"",SUM(( CASE WHEN ( ""HandlerOrgId"" IS NOT NULL ) THEN 1 ELSE 0 END )) AS ""YbOrderCountNum"",0 ""ZbOrderCountNum"",0 ""YbOverdue"",0 ""ZbOverdue"",0 ""HqybOverdue"",0 ""HqzbOverdue"",0 ""DelayEnd"",0 ""DelayWait"",0""Archived"" ,0 ""ToBeArchived"",0 ""WaitPublished"",0 ""PublishedOpen"",0 ""PublishedNoOpen"" ,0 ""OrderDelayCount"",0 ""ScreenCount"",0 ""ScreenApproval"", 0 ""ScreenPass"" , 0 ""ScreenNotPass"",0 ""SatisfactionCount"", 0 ""NotSatisfactionCount"" from(
  150. select ""o"".""Id"",SUBSTRING(""t"".""HandlerOrgId"",1,{3}) ""HandlerOrgId"" from ""workflow_trace"" ""t""
  151. left join ""order"" ""o"" on ""o"".""Id""=""t"".""ExternalId""
  152. where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}' and ""t"".""ModuleCode""='OrderHandle' and ""t"".""TraceState"" !=10 and ""t"".""Status"">=2 {2} --and ""t"".""CountersignPosition""<=1
  153. GROUP BY SUBSTRING(""t"".""HandlerOrgId"",1,{3}),""o"".""Id""
  154. )""s"" where ""HandlerOrgId"" IS not NULL {4}
  155. GROUP BY ""HandlerOrgId""
  156. union ALL
  157. /*查询待办*/
  158. select ""HandlerOrgId"",0 ""YbOrderCountNum"",SUM(( CASE WHEN ( ""HandlerOrgId"" IS NOT NULL ) THEN 1 ELSE 0 END )) AS ""ZbOrderCountNum"",0 ""YbOverdue"",0 ""ZbOverdue"",0 ""HqybOverdue"",0 ""HqzbOverdue"",0 ""DelayEnd"",0 ""DelayWait"",0""Archived"",0 ""ToBeArchived"",0 ""WaitPublished"",0 ""PublishedOpen"",0 ""PublishedNoOpen"",0 ""OrderDelayCount"",0 ""ScreenCount"",0 ""ScreenApproval"", 0 ""ScreenPass"" , 0 ""ScreenNotPass"" ,0 ""SatisfactionCount"", 0 ""NotSatisfactionCount"" from(
  159. select ""o"".""Id"",SUBSTRING(""t"".""HandlerOrgId"",1,{3}) ""HandlerOrgId"" from ""workflow_trace"" ""t""
  160. left join ""order"" ""o"" on ""o"".""Id""=""t"".""ExternalId""
  161. where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}' and ""t"".""ModuleCode""='OrderHandle' and ""t"".""Status""<2 {2} --and ""t"".""CountersignPosition""<=1
  162. GROUP BY SUBSTRING(""t"".""HandlerOrgId"",1,{3}),""o"".""Id""
  163. )""s"" where ""HandlerOrgId"" IS not NULL {4}
  164. GROUP BY ""HandlerOrgId""
  165. union ALL
  166. /*查询已办超期*/
  167. select ""HandlerOrgId"",0 ""YbOrderCountNum"",0 ""ZbOrderCountNum"",SUM(( CASE WHEN ( ""HandlerOrgId"" IS NOT NULL ) THEN 1 ELSE 0 END )) AS ""YbOverdue"" ,0 ""ZbOverdue"",0 ""HqybOverdue"",0 ""HqzbOverdue"",0 ""DelayEnd"",0 ""DelayWait"",0""Archived"",0 ""ToBeArchived"",0 ""WaitPublished"",0 ""PublishedOpen"",0 ""PublishedNoOpen"",0 ""OrderDelayCount"",0 ""ScreenCount"",0 ""ScreenApproval"", 0 ""ScreenPass"" , 0 ""ScreenNotPass"" ,0 ""SatisfactionCount"", 0 ""NotSatisfactionCount"" from(
  168. select ""o"".""Id"",SUBSTRING(""t"".""HandlerOrgId"",1,{3}) ""HandlerOrgId"" from ""workflow_trace"" ""t""
  169. left join ""order"" ""o"" on ""o"".""Id""=""t"".""ExternalId""
  170. where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}' and ""t"".""ModuleCode""='OrderHandle' and ""t"".""TraceState"" !=10 and ""t"".""Status"">=2 and ""HandleTime"">""StepExpiredTime"" and ""t"".""CountersignPosition""=0 {2}
  171. GROUP BY SUBSTRING(""t"".""HandlerOrgId"",1,{3}),""o"".""Id""
  172. )""s"" where ""HandlerOrgId"" IS not NULL {4}
  173. GROUP BY ""HandlerOrgId""
  174. union ALL
  175. /*查询待办超期*/
  176. select ""HandlerOrgId"",0 ""YbOrderCountNum"",0 ""ZbOrderCountNum"",0 ""YbOverdue"",SUM(( CASE WHEN ( ""HandlerOrgId"" IS NOT NULL ) THEN 1 ELSE 0 END )) AS ""ZbOverdue"",0 ""HqybOverdue"",0 ""HqzbOverdue"",0 ""DelayEnd"",0 ""DelayWait"" ,0""Archived"",0 ""ToBeArchived"",0 ""WaitPublished"",0 ""PublishedOpen"",0 ""PublishedNoOpen"",0 ""OrderDelayCount"",0 ""ScreenCount"",0 ""ScreenApproval"", 0 ""ScreenPass"" , 0 ""ScreenNotPass"",0 ""SatisfactionCount"", 0 ""NotSatisfactionCount"" from(
  177. select ""o"".""Id"",SUBSTRING(""t"".""HandlerOrgId"",1,{3}) ""HandlerOrgId"" from ""workflow_trace"" ""t""
  178. left join ""order"" ""o"" on ""o"".""Id""=""t"".""ExternalId""
  179. where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}' and ""t"".""ModuleCode""='OrderHandle' and ""t"".""Status""<2 and (SELECT NOW())>""StepExpiredTime"" and ""t"".""CountersignPosition""=0 {2}
  180. GROUP BY SUBSTRING(""t"".""HandlerOrgId"",1,{3}),""o"".""Id""
  181. )""s"" where ""HandlerOrgId"" IS not NULL {4}
  182. GROUP BY ""HandlerOrgId""
  183. union ALL
  184. /*查询会签已办超期*/
  185. select ""HandlerOrgId"",0 ""YbOrderCountNum"",0 ""ZbOrderCountNum"",0 ""YbOverdue"" ,0 ""ZbOverdue"",SUM(( CASE WHEN ( ""HandlerOrgId"" IS NOT NULL ) THEN 1 ELSE 0 END )) AS ""HqybOverdue"",0 ""HqzbOverdue"",0 ""DelayEnd"",0 ""DelayWait"",0""Archived"",0 ""ToBeArchived"",0 ""WaitPublished"",0 ""PublishedOpen"",0 ""PublishedNoOpen"",0 ""OrderDelayCount"",0 ""ScreenCount"",0 ""ScreenApproval"", 0 ""ScreenPass"" , 0 ""ScreenNotPass"" ,0 ""SatisfactionCount"", 0 ""NotSatisfactionCount"" from(
  186. select ""o"".""Id"",SUBSTRING(""t"".""HandlerOrgId"",1,{3}) ""HandlerOrgId"" from ""workflow_trace"" ""t""
  187. left join ""order"" ""o"" on ""o"".""Id""=""t"".""ExternalId""
  188. where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}' and ""t"".""ModuleCode""='OrderHandle' and ""t"".""TraceState"" !=10 and ""t"".""Status"">=2 and ""HandleTime"">""StepExpiredTime"" and ""CountersignPosition"">0 {2}
  189. GROUP BY SUBSTRING(""t"".""HandlerOrgId"",1,{3}),""o"".""Id""
  190. )""s"" where ""HandlerOrgId"" IS not NULL {4}
  191. GROUP BY ""HandlerOrgId""
  192. union ALL
  193. /*查询会签待办超期*/
  194. select ""HandlerOrgId"",0 ""YbOrderCountNum"",0 ""ZbOrderCountNum"",0 ""YbOverdue"" ,0 ""ZbOverdue"",0 ""HqybOverdue"",SUM(( CASE WHEN ( ""HandlerOrgId"" IS NOT NULL ) THEN 1 ELSE 0 END )) AS ""HqzbOverdue"" ,0 ""DelayEnd"",0 ""DelayWait"" ,0""Archived"",0 ""ToBeArchived"",0 ""WaitPublished"",0 ""PublishedOpen"",0 ""PublishedNoOpen"",0 ""OrderDelayCount"",0 ""ScreenCount"",0 ""ScreenApproval"", 0 ""ScreenPass"" , 0 ""ScreenNotPass"",0 ""SatisfactionCount"", 0 ""NotSatisfactionCount"" from(
  195. select ""o"".""Id"",SUBSTRING(""t"".""HandlerOrgId"",1,{3}) ""HandlerOrgId"" from ""workflow_trace"" ""t""
  196. left join ""order"" ""o"" on ""o"".""Id""=""t"".""ExternalId""
  197. where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}' and ""t"".""ModuleCode""='OrderHandle' and ""t"".""Status""<2 and (SELECT NOW())>""StepExpiredTime""
  198. and ""CountersignPosition"">0 {2}
  199. GROUP BY SUBSTRING(""t"".""HandlerOrgId"",1,{3}),""o"".""Id""
  200. )""s"" where ""HandlerOrgId"" IS not NULL {4}
  201. GROUP BY ""HandlerOrgId""
  202. union ALL
  203. /*查询会签已办*/
  204. select ""HandlerOrgId"",0 ""YbOrderCountNum"",0 ""ZbOrderCountNum"",0 ""YbOverdue"" ,0 ""ZbOverdue"",0 ""HqybOverdue"",0 ""HqzbOverdue"",SUM(( CASE WHEN ( ""HandlerOrgId"" IS NOT NULL ) THEN 1 ELSE 0 END )) AS ""DelayEnd"",0 ""DelayWait"" ,0""Archived"",0 ""ToBeArchived"",0 ""WaitPublished"",0 ""PublishedOpen"",0 ""PublishedNoOpen"",0 ""OrderDelayCount"",0 ""ScreenCount"",0 ""ScreenApproval"", 0 ""ScreenPass"" , 0 ""ScreenNotPass"" ,0 ""SatisfactionCount"", 0 ""NotSatisfactionCount"" from(
  205. select ""o"".""Id"",SUBSTRING(""t"".""HandlerOrgId"",1,{3}) ""HandlerOrgId"" from ""workflow_trace"" ""t""
  206. left join ""order"" ""o"" on ""o"".""Id""=""t"".""ExternalId""
  207. where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}' and ""t"".""ModuleCode""='OrderHandle' and ""t"".""TraceState"" !=10 and ""t"".""Status"">=2 and ""CountersignPosition"">0 {2}
  208. GROUP BY SUBSTRING(""t"".""HandlerOrgId"",1,{3}),""o"".""Id""
  209. )""s"" where ""HandlerOrgId"" IS not NULL {4}
  210. GROUP BY ""HandlerOrgId""
  211. union ALL
  212. /*查询会签待办*/
  213. select ""HandlerOrgId"",0 ""YbOrderCountNum"",0 ""ZbOrderCountNum"",0 ""YbOverdue"" ,0 ""ZbOverdue"",0 ""HqybOverdue"",0 ""HqzbOverdue"",0 ""DelayEnd"",SUM(( CASE WHEN ( ""HandlerOrgId"" IS NOT NULL ) THEN 1 ELSE 0 END )) AS ""DelayWait"" ,0""Archived"",0 ""ToBeArchived"",0 ""WaitPublished"",0 ""PublishedOpen"",0 ""PublishedNoOpen"",0 ""OrderDelayCount"",0 ""ScreenCount"",0 ""ScreenApproval"", 0 ""ScreenPass"" , 0 ""ScreenNotPass"",0 ""SatisfactionCount"", 0 ""NotSatisfactionCount"" from(
  214. select ""o"".""Id"",SUBSTRING(""t"".""HandlerOrgId"",1,{3}) ""HandlerOrgId"" from ""workflow_trace"" ""t""
  215. left join ""order"" ""o"" on ""o"".""Id""=""t"".""ExternalId""
  216. where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}' and ""t"".""ModuleCode""='OrderHandle' and ""t"".""Status""<2 and ""CountersignPosition"">0 {2}
  217. GROUP BY SUBSTRING(""t"".""HandlerOrgId"",1,{3}),""o"".""Id""
  218. )""s"" where ""HandlerOrgId"" IS not NULL {4}
  219. GROUP BY ""HandlerOrgId""
  220. UNION ALL
  221. /*已归档、 待发布、已发布公开、已发布不公开*/
  222. select ""HandlerOrgId"",0 ""YbOrderCountNum"",0 ""ZbOrderCountNum"",0 ""YbOverdue"" ,0 ""ZbOverdue"",0 ""HqybOverdue"",0 ""HqzbOverdue"",0 ""DelayEnd"",0 ""DelayWait""
  223. ,SUM(( CASE WHEN ( ""Status"">=300 ) THEN 1 ELSE 0 END )) AS ""Archived""
  224. ,0 ""ToBeArchived""
  225. ,SUM(( CASE WHEN ( ""Status""=300 ) THEN 1 ELSE 0 END )) AS ""WaitPublished""
  226. ,SUM(( CASE WHEN ( ""Status"">=400 and ""IsPublicity""=TRUE ) THEN 1 ELSE 0 END )) AS ""PublishedOpen""
  227. ,SUM(( CASE WHEN ( ""Status"">=400 and ""IsPublicity""=FALSE ) THEN 1 ELSE 0 END )) AS ""PublishedNoOpen""
  228. ,0 ""OrderDelayCount"",0 ""ScreenCount"",0 ""ScreenApproval"", 0 ""ScreenPass"" , 0 ""ScreenNotPass"" ,0 ""SatisfactionCount"", 0 ""NotSatisfactionCount"" from(
  229. select SUBSTRING(""o"".""ActualHandleOrgCode"",1,{3}) ""HandlerOrgId"", ""o"".""Status"", ""o"".""IsPublicity"" from ""order"" ""o""
  230. where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}' and ""o"".""Status"">=300 {2}
  231. )""s"" where ""HandlerOrgId"" IS not NULL {4}
  232. GROUP BY ""HandlerOrgId""
  233. union ALL
  234. /*查询延期通过数量*/
  235. select ""HandlerOrgId"",0 ""YbOrderCountNum"",0 ""ZbOrderCountNum"",0 ""YbOverdue"" ,0 ""ZbOverdue"",0 ""HqybOverdue"",0 ""HqzbOverdue"",0 ""DelayEnd"",0 ""DelayWait"" ,0""Archived"",0 ""ToBeArchived"",0 ""WaitPublished"",0 ""PublishedOpen"",0 ""PublishedNoOpen"",SUM(( CASE WHEN ( ""HandlerOrgId"" IS NOT NULL ) THEN 1 ELSE 0 END )) AS ""OrderDelayCount"",0 ""ScreenCount"",0 ""ScreenApproval"", 0 ""ScreenPass"" , 0 ""ScreenNotPass"" ,0 ""SatisfactionCount"", 0 ""NotSatisfactionCount"" from(
  236. select SUBSTRING(""ApplyOrgCode"",1,{3}) ""HandlerOrgId"" from ""order_delay"" ""d""
  237. left join ""order"" ""o"" on ""d"".""OrderId""=""o"".""Id""
  238. where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}' and ""d"".""DelayState""=1 {2}
  239. )""s"" where ""HandlerOrgId"" IS not NULL {4}
  240. GROUP BY ""HandlerOrgId""
  241. union all
  242. /*查询甄别*/
  243. select ""HandlerOrgId"",0 ""YbOrderCountNum"",0 ""ZbOrderCountNum"",0 ""YbOverdue"" ,0 ""ZbOverdue"",0 ""HqybOverdue"",0 ""HqzbOverdue"",0 ""DelayEnd"",0 ""DelayWait"" ,0""Archived"",0 ""ToBeArchived"",0 ""WaitPublished"",0 ""PublishedOpen"",0 ""PublishedNoOpen"",0 ""OrderDelayCount""
  244. ,SUM(( CASE WHEN ( ""HandlerOrgId"" IS NOT NULL ) THEN 1 ELSE 0 END )) AS ""ScreenCount""
  245. ,SUM(( CASE WHEN ( ""Status""<=1 ) THEN 1 ELSE 0 END )) AS ""ScreenApproval""
  246. ,SUM(( CASE WHEN ( ""Status""=2 ) THEN 1 ELSE 0 END )) AS ""ScreenPass""
  247. ,SUM(( CASE WHEN ( ""Status""=3 ) THEN 1 ELSE 0 END )) AS ""ScreenNotPass"",0 ""SatisfactionCount"", 0 ""NotSatisfactionCount""
  248. from(
  249. select SUBSTRING(""d"".""CreatorOrgId"",1,{3}) ""HandlerOrgId"",""d"".""Status"" from ""order_screen"" ""d""
  250. left join ""order"" ""o"" on ""d"".""OrderId""=""o"".""Id""
  251. where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}' {2}
  252. )""s"" where ""HandlerOrgId"" IS not NULL {4}
  253. GROUP BY ""HandlerOrgId""
  254. union ALL
  255. /*查询满意度*/
  256. select ""HandlerOrgId"",0 ""YbOrderCountNum"",0 ""ZbOrderCountNum"",0 ""YbOverdue"" ,0 ""ZbOverdue"",0 ""HqybOverdue"",0 ""HqzbOverdue"",0 ""DelayEnd"",0 ""DelayWait"" ,0""Archived"",0 ""ToBeArchived"",0 ""WaitPublished"",0 ""PublishedOpen"",0 ""PublishedNoOpen"",0 ""OrderDelayCount"",0 ""ScreenCount"",0 ""ScreenApproval"", 0 ""ScreenPass"" , 0 ""ScreenNotPass""
  257. ,SUM(( CASE WHEN ( (""OrgProcessingResults""->>'Key')::VARCHAR != '2' ) THEN 1 ELSE 0 END )) AS ""SatisfactionCount""
  258. ,SUM(( CASE WHEN ( (""OrgProcessingResults""->>'Key')::VARCHAR = '2' ) THEN 1 ELSE 0 END )) AS ""NotSatisfactionCount""
  259. FROM(
  260. SELECT SUBSTRING(""VisitOrgCode"",1,{3}) ""HandlerOrgId"" ,""OrgProcessingResults"" from ""order_visit_detail"" ""d""
  261. left join ""order_visit"" ""v"" on ""v"".""Id""=""d"".""VisitId""
  262. left join ""order"" ""o"" on ""o"".""Id""=""v"".""OrderId""
  263. where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}' and ""d"".""VisitTarget""=20 and ""v"".""VisitState""=30 and ""d"".""VisitOrgCode"" is not NULL {2}
  264. )""s"" where ""HandlerOrgId"" IS not NULL {4}
  265. GROUP BY ""HandlerOrgId""
  266. )""te""
  267. GROUP BY ""HandlerOrgId""
  268. ) ""su""
  269. left join ""system_organize"" ""so"" on ""so"".""Id""=""su"".""OrgCode""
  270. where 1=1 {5}
  271. order by ""su"".""OrgCode""";
  272. var orgLength = IsCenter == true ? 6 : _sessionContext.RequiredOrgId.Length + 3;
  273. var isOrg = IsCenter == false ? " and \"HandlerOrgId\" like concat('" + _sessionContext.RequiredOrgId + "','%') " : " ";
  274. var IsProvince = dto.IsProvince.HasValue && dto.IsProvince == true ? " and \"o\".\"Source\"=100 " : " ";
  275. var orgName = string.IsNullOrEmpty(dto.OrgName) == false ? " and \"OrgName\" like concat('%'," + dto.OrgName + ",'%')" : "";
  276. strSql = string.Format(strSql, dto.StartTime, dto.EndTime, IsProvince, orgLength, isOrg, orgName);
  277. return _orderRepository.DepartmentalProcessingStatisticsNew(strSql);
  278. }
  279. /// <summary>
  280. /// 部门办件统计表--子级---新
  281. /// </summary>
  282. /// <param name="dto"></param>
  283. /// <returns></returns>
  284. public async Task<List<DepartmentalProcessingStatisticsDataDto>> DepartmentalProcessingChildStatisticsNew(DepartmentalProcessingStatisticsRequest dto)
  285. {
  286. dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
  287. //信件总量:信件总量=已办件数+在办件数,工单需去重
  288. //已办件数:该部门已办理完成的工单总数(含参与会签的工单),若工单被部门多次办理,只统计一次
  289. //在办件数:该部门还未办理的工单数(若是一级部门,需包含中心向该部门发起回签的工单)。(特殊说明:部门或者中心发起了会签,会签中还未汇总,应算发起会签部门的在办里面)
  290. string strSql = @"select
  291. ""OrgCode""
  292. ,""Name"" ""OrgName""
  293. ,""OrgType""
  294. , ""YbOrderCountNum""
  295. , ""ZbOrderCountNum""
  296. ,""Archived""
  297. , ""ToBeArchived""
  298. , ""WaitPublished""
  299. ,""PublishedOpen""
  300. , ""PublishedNoOpen""
  301. ,""YbOverdue""
  302. , ""ZbOverdue""
  303. , ""HqzbOverdue""
  304. , ""HqybOverdue""
  305. , ""DelayEnd""
  306. , ""DelayWait""
  307. , ""OrderDelayCount""
  308. , ""ScreenCount""
  309. , ""ScreenApproval""
  310. , ""ScreenPass""
  311. ,""ScreenNotPass""
  312. ,""SatisfactionCount""
  313. ,""NotSatisfactionCount""
  314. , (""YbOrderCountNum""-""YbOverdue"" -""HqybOverdue"" ) ""CompleteOnTime""
  315. from (
  316. SELECT ""HandlerOrgId"" ""OrgCode""
  317. ,SUM(""YbOrderCountNum"") ""YbOrderCountNum""
  318. ,SUM(""ZbOrderCountNum"") ""ZbOrderCountNum""
  319. ,SUM(""Archived"") ""Archived""
  320. ,SUM(""ToBeArchived"") ""ToBeArchived""
  321. ,SUM(""WaitPublished"") ""WaitPublished""
  322. ,SUM(""PublishedOpen"") ""PublishedOpen""
  323. ,SUM(""PublishedNoOpen"") ""PublishedNoOpen""
  324. ,SUM(""YbOverdue"") ""YbOverdue""
  325. ,SUM(""ZbOverdue"") ""ZbOverdue""
  326. ,SUM(""HqzbOverdue"") ""HqzbOverdue""
  327. ,SUM(""HqybOverdue"") ""HqybOverdue""
  328. ,SUM(""DelayEnd"") ""DelayEnd""
  329. ,SUM(""DelayWait"") ""DelayWait""
  330. ,SUM(""OrderDelayCount"") ""OrderDelayCount""
  331. ,SUM(""ScreenCount"") ""ScreenCount""
  332. ,SUM(""ScreenApproval"") ""ScreenApproval""
  333. ,SUM(""ScreenPass"") ""ScreenPass""
  334. ,SUM(""ScreenNotPass"") ""ScreenNotPass""
  335. ,SUM(""SatisfactionCount"") ""SatisfactionCount""
  336. ,SUM(""NotSatisfactionCount"") ""NotSatisfactionCount""
  337. FROM (
  338. /*查询已办*/
  339. select ""HandlerOrgId"",SUM(( CASE WHEN ( ""HandlerOrgId"" IS NOT NULL ) THEN 1 ELSE 0 END )) AS ""YbOrderCountNum"",0 ""ZbOrderCountNum"",0 ""YbOverdue"",0 ""ZbOverdue"",0 ""HqybOverdue"",0 ""HqzbOverdue"",0 ""DelayEnd"",0 ""DelayWait"",0""Archived"" ,0 ""ToBeArchived"",0 ""WaitPublished"",0 ""PublishedOpen"",0 ""PublishedNoOpen"" ,0 ""OrderDelayCount"",0 ""ScreenCount"",0 ""ScreenApproval"", 0 ""ScreenPass"" , 0 ""ScreenNotPass"",0 ""SatisfactionCount"", 0 ""NotSatisfactionCount"" from(
  340. select ""o"".""Id"",SUBSTRING(""t"".""HandlerOrgId"",1,{3}) ""HandlerOrgId"" from ""workflow_trace"" ""t""
  341. left join ""order"" ""o"" on ""o"".""Id""=""t"".""ExternalId""
  342. where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}' and ""t"".""ModuleCode""='OrderHandle' and ""t"".""TraceState"" !=10 and ""t"".""Status"">=2 {2} --and ""t"".""CountersignPosition""<=1
  343. GROUP BY SUBSTRING(""t"".""HandlerOrgId"",1,{3}),""o"".""Id""
  344. )""s"" where ""HandlerOrgId"" IS not NULL {4}
  345. GROUP BY ""HandlerOrgId""
  346. union ALL
  347. /*查询待办*/
  348. select ""HandlerOrgId"",0 ""YbOrderCountNum"",SUM(( CASE WHEN ( ""HandlerOrgId"" IS NOT NULL ) THEN 1 ELSE 0 END )) AS ""ZbOrderCountNum"",0 ""YbOverdue"",0 ""ZbOverdue"",0 ""HqybOverdue"",0 ""HqzbOverdue"",0 ""DelayEnd"",0 ""DelayWait"",0""Archived"",0 ""ToBeArchived"",0 ""WaitPublished"",0 ""PublishedOpen"",0 ""PublishedNoOpen"",0 ""OrderDelayCount"",0 ""ScreenCount"",0 ""ScreenApproval"", 0 ""ScreenPass"" , 0 ""ScreenNotPass"" ,0 ""SatisfactionCount"", 0 ""NotSatisfactionCount"" from(
  349. select ""o"".""Id"",SUBSTRING(""t"".""HandlerOrgId"",1,{3}) ""HandlerOrgId"" from ""workflow_trace"" ""t""
  350. left join ""order"" ""o"" on ""o"".""Id""=""t"".""ExternalId""
  351. where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}' and ""t"".""ModuleCode""='OrderHandle' and ""t"".""Status""<2 {2} --and ""t"".""CountersignPosition""<=1
  352. GROUP BY SUBSTRING(""t"".""HandlerOrgId"",1,{3}),""o"".""Id""
  353. )""s"" where ""HandlerOrgId"" IS not NULL {4}
  354. GROUP BY ""HandlerOrgId""
  355. union ALL
  356. /*查询已办超期*/
  357. select ""HandlerOrgId"",0 ""YbOrderCountNum"",0 ""ZbOrderCountNum"",SUM(( CASE WHEN ( ""HandlerOrgId"" IS NOT NULL ) THEN 1 ELSE 0 END )) AS ""YbOverdue"" ,0 ""ZbOverdue"",0 ""HqybOverdue"",0 ""HqzbOverdue"",0 ""DelayEnd"",0 ""DelayWait"",0""Archived"",0 ""ToBeArchived"",0 ""WaitPublished"",0 ""PublishedOpen"",0 ""PublishedNoOpen"",0 ""OrderDelayCount"",0 ""ScreenCount"",0 ""ScreenApproval"", 0 ""ScreenPass"" , 0 ""ScreenNotPass"" ,0 ""SatisfactionCount"", 0 ""NotSatisfactionCount"" from(
  358. select ""o"".""Id"",SUBSTRING(""t"".""HandlerOrgId"",1,{3}) ""HandlerOrgId"" from ""workflow_trace"" ""t""
  359. left join ""order"" ""o"" on ""o"".""Id""=""t"".""ExternalId""
  360. where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}' and ""t"".""ModuleCode""='OrderHandle' and ""t"".""TraceState"" !=10 and ""t"".""Status"">=2 and ""HandleTime"">""StepExpiredTime"" and ""t"".""CountersignPosition""=0 {2}
  361. GROUP BY SUBSTRING(""t"".""HandlerOrgId"",1,{3}),""o"".""Id""
  362. )""s"" where ""HandlerOrgId"" IS not NULL {4}
  363. GROUP BY ""HandlerOrgId""
  364. union ALL
  365. /*查询待办超期*/
  366. select ""HandlerOrgId"",0 ""YbOrderCountNum"",0 ""ZbOrderCountNum"",0 ""YbOverdue"",SUM(( CASE WHEN ( ""HandlerOrgId"" IS NOT NULL ) THEN 1 ELSE 0 END )) AS ""ZbOverdue"",0 ""HqybOverdue"",0 ""HqzbOverdue"",0 ""DelayEnd"",0 ""DelayWait"" ,0""Archived"",0 ""ToBeArchived"",0 ""WaitPublished"",0 ""PublishedOpen"",0 ""PublishedNoOpen"",0 ""OrderDelayCount"",0 ""ScreenCount"",0 ""ScreenApproval"", 0 ""ScreenPass"" , 0 ""ScreenNotPass"",0 ""SatisfactionCount"", 0 ""NotSatisfactionCount"" from(
  367. select ""o"".""Id"",SUBSTRING(""t"".""HandlerOrgId"",1,{3}) ""HandlerOrgId"" from ""workflow_trace"" ""t""
  368. left join ""order"" ""o"" on ""o"".""Id""=""t"".""ExternalId""
  369. where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}' and ""t"".""ModuleCode""='OrderHandle' and ""t"".""Status""<2 and (SELECT NOW())>""StepExpiredTime"" and ""t"".""CountersignPosition""=0 {2}
  370. GROUP BY SUBSTRING(""t"".""HandlerOrgId"",1,{3}),""o"".""Id""
  371. )""s"" where ""HandlerOrgId"" IS not NULL {4}
  372. GROUP BY ""HandlerOrgId""
  373. union ALL
  374. /*查询会签已办超期*/
  375. select ""HandlerOrgId"",0 ""YbOrderCountNum"",0 ""ZbOrderCountNum"",0 ""YbOverdue"" ,0 ""ZbOverdue"",SUM(( CASE WHEN ( ""HandlerOrgId"" IS NOT NULL ) THEN 1 ELSE 0 END )) AS ""HqybOverdue"",0 ""HqzbOverdue"",0 ""DelayEnd"",0 ""DelayWait"",0""Archived"",0 ""ToBeArchived"",0 ""WaitPublished"",0 ""PublishedOpen"",0 ""PublishedNoOpen"",0 ""OrderDelayCount"",0 ""ScreenCount"",0 ""ScreenApproval"", 0 ""ScreenPass"" , 0 ""ScreenNotPass"" ,0 ""SatisfactionCount"", 0 ""NotSatisfactionCount"" from(
  376. select ""o"".""Id"",SUBSTRING(""t"".""HandlerOrgId"",1,{3}) ""HandlerOrgId"" from ""workflow_trace"" ""t""
  377. left join ""order"" ""o"" on ""o"".""Id""=""t"".""ExternalId""
  378. where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}' and ""t"".""ModuleCode""='OrderHandle' and ""t"".""TraceState"" !=10 and ""t"".""Status"">=2 and ""HandleTime"">""StepExpiredTime"" and ""CountersignPosition"">0 {2}
  379. GROUP BY SUBSTRING(""t"".""HandlerOrgId"",1,{3}),""o"".""Id""
  380. )""s"" where ""HandlerOrgId"" IS not NULL {4}
  381. GROUP BY ""HandlerOrgId""
  382. union ALL
  383. /*查询会签待办超期*/
  384. select ""HandlerOrgId"",0 ""YbOrderCountNum"",0 ""ZbOrderCountNum"",0 ""YbOverdue"" ,0 ""ZbOverdue"",0 ""HqybOverdue"",SUM(( CASE WHEN ( ""HandlerOrgId"" IS NOT NULL ) THEN 1 ELSE 0 END )) AS ""HqzbOverdue"" ,0 ""DelayEnd"",0 ""DelayWait"" ,0""Archived"",0 ""ToBeArchived"",0 ""WaitPublished"",0 ""PublishedOpen"",0 ""PublishedNoOpen"",0 ""OrderDelayCount"",0 ""ScreenCount"",0 ""ScreenApproval"", 0 ""ScreenPass"" , 0 ""ScreenNotPass"",0 ""SatisfactionCount"", 0 ""NotSatisfactionCount"" from(
  385. select ""o"".""Id"",SUBSTRING(""t"".""HandlerOrgId"",1,{3}) ""HandlerOrgId"" from ""workflow_trace"" ""t""
  386. left join ""order"" ""o"" on ""o"".""Id""=""t"".""ExternalId""
  387. where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}' and ""t"".""ModuleCode""='OrderHandle' and ""t"".""Status""<2 and (SELECT NOW())>""StepExpiredTime""
  388. and ""CountersignPosition"">0 {2}
  389. GROUP BY SUBSTRING(""t"".""HandlerOrgId"",1,{3}),""o"".""Id""
  390. )""s"" where ""HandlerOrgId"" IS not NULL {4}
  391. GROUP BY ""HandlerOrgId""
  392. union ALL
  393. /*查询会签已办*/
  394. select ""HandlerOrgId"",0 ""YbOrderCountNum"",0 ""ZbOrderCountNum"",0 ""YbOverdue"" ,0 ""ZbOverdue"",0 ""HqybOverdue"",0 ""HqzbOverdue"",SUM(( CASE WHEN ( ""HandlerOrgId"" IS NOT NULL ) THEN 1 ELSE 0 END )) AS ""DelayEnd"",0 ""DelayWait"" ,0""Archived"",0 ""ToBeArchived"",0 ""WaitPublished"",0 ""PublishedOpen"",0 ""PublishedNoOpen"",0 ""OrderDelayCount"",0 ""ScreenCount"",0 ""ScreenApproval"", 0 ""ScreenPass"" , 0 ""ScreenNotPass"" ,0 ""SatisfactionCount"", 0 ""NotSatisfactionCount"" from(
  395. select ""o"".""Id"",SUBSTRING(""t"".""HandlerOrgId"",1,{3}) ""HandlerOrgId"" from ""workflow_trace"" ""t""
  396. left join ""order"" ""o"" on ""o"".""Id""=""t"".""ExternalId""
  397. where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}' and ""t"".""ModuleCode""='OrderHandle' and ""t"".""TraceState"" !=10 and ""t"".""Status"">=2 and ""CountersignPosition"">0 {2}
  398. GROUP BY SUBSTRING(""t"".""HandlerOrgId"",1,{3}),""o"".""Id""
  399. )""s"" where ""HandlerOrgId"" IS not NULL {4}
  400. GROUP BY ""HandlerOrgId""
  401. union ALL
  402. /*查询会签待办*/
  403. select ""HandlerOrgId"",0 ""YbOrderCountNum"",0 ""ZbOrderCountNum"",0 ""YbOverdue"" ,0 ""ZbOverdue"",0 ""HqybOverdue"",0 ""HqzbOverdue"",0 ""DelayEnd"",SUM(( CASE WHEN ( ""HandlerOrgId"" IS NOT NULL ) THEN 1 ELSE 0 END )) AS ""DelayWait"" ,0""Archived"",0 ""ToBeArchived"",0 ""WaitPublished"",0 ""PublishedOpen"",0 ""PublishedNoOpen"",0 ""OrderDelayCount"",0 ""ScreenCount"",0 ""ScreenApproval"", 0 ""ScreenPass"" , 0 ""ScreenNotPass"",0 ""SatisfactionCount"", 0 ""NotSatisfactionCount"" from(
  404. select ""o"".""Id"",SUBSTRING(""t"".""HandlerOrgId"",1,{3}) ""HandlerOrgId"" from ""workflow_trace"" ""t""
  405. left join ""order"" ""o"" on ""o"".""Id""=""t"".""ExternalId""
  406. where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}' and ""t"".""ModuleCode""='OrderHandle' and ""t"".""Status""<2 and ""CountersignPosition"">0 {2}
  407. GROUP BY SUBSTRING(""t"".""HandlerOrgId"",1,{3}),""o"".""Id""
  408. )""s"" where ""HandlerOrgId"" IS not NULL {4}
  409. GROUP BY ""HandlerOrgId""
  410. UNION ALL
  411. /*已归档、 待发布、已发布公开、已发布不公开*/
  412. select ""HandlerOrgId"",0 ""YbOrderCountNum"",0 ""ZbOrderCountNum"",0 ""YbOverdue"" ,0 ""ZbOverdue"",0 ""HqybOverdue"",0 ""HqzbOverdue"",0 ""DelayEnd"",0 ""DelayWait""
  413. ,SUM(( CASE WHEN ( ""Status"">=300 ) THEN 1 ELSE 0 END )) AS ""Archived""
  414. ,0 ""ToBeArchived""
  415. ,SUM(( CASE WHEN ( ""Status""=300 ) THEN 1 ELSE 0 END )) AS ""WaitPublished""
  416. ,SUM(( CASE WHEN ( ""Status"">=400 and ""IsPublicity""=TRUE ) THEN 1 ELSE 0 END )) AS ""PublishedOpen""
  417. ,SUM(( CASE WHEN ( ""Status"">=400 and ""IsPublicity""=FALSE ) THEN 1 ELSE 0 END )) AS ""PublishedNoOpen""
  418. ,0 ""OrderDelayCount"",0 ""ScreenCount"",0 ""ScreenApproval"", 0 ""ScreenPass"" , 0 ""ScreenNotPass"" ,0 ""SatisfactionCount"", 0 ""NotSatisfactionCount"" from(
  419. select SUBSTRING(""o"".""ActualHandleOrgCode"",1,{3}) ""HandlerOrgId"", ""o"".""Status"", ""o"".""IsPublicity"" from ""order"" ""o""
  420. where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}' and ""o"".""Status"">=300 {2}
  421. )""s"" where ""HandlerOrgId"" IS not NULL {4}
  422. GROUP BY ""HandlerOrgId""
  423. union ALL
  424. /*查询延期通过数量*/
  425. select ""HandlerOrgId"",0 ""YbOrderCountNum"",0 ""ZbOrderCountNum"",0 ""YbOverdue"" ,0 ""ZbOverdue"",0 ""HqybOverdue"",0 ""HqzbOverdue"",0 ""DelayEnd"",0 ""DelayWait"" ,0""Archived"",0 ""ToBeArchived"",0 ""WaitPublished"",0 ""PublishedOpen"",0 ""PublishedNoOpen"",SUM(( CASE WHEN ( ""HandlerOrgId"" IS NOT NULL ) THEN 1 ELSE 0 END )) AS ""OrderDelayCount"",0 ""ScreenCount"",0 ""ScreenApproval"", 0 ""ScreenPass"" , 0 ""ScreenNotPass"" ,0 ""SatisfactionCount"", 0 ""NotSatisfactionCount"" from(
  426. select SUBSTRING(""ApplyOrgCode"",1,{3}) ""HandlerOrgId"" from ""order_delay"" ""d""
  427. left join ""order"" ""o"" on ""d"".""OrderId""=""o"".""Id""
  428. where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}' and ""d"".""DelayState""=1 {2}
  429. )""s"" where ""HandlerOrgId"" IS not NULL {4}
  430. GROUP BY ""HandlerOrgId""
  431. union all
  432. /*查询甄别*/
  433. select ""HandlerOrgId"",0 ""YbOrderCountNum"",0 ""ZbOrderCountNum"",0 ""YbOverdue"" ,0 ""ZbOverdue"",0 ""HqybOverdue"",0 ""HqzbOverdue"",0 ""DelayEnd"",0 ""DelayWait"" ,0""Archived"",0 ""ToBeArchived"",0 ""WaitPublished"",0 ""PublishedOpen"",0 ""PublishedNoOpen"",0 ""OrderDelayCount""
  434. ,SUM(( CASE WHEN ( ""HandlerOrgId"" IS NOT NULL ) THEN 1 ELSE 0 END )) AS ""ScreenCount""
  435. ,SUM(( CASE WHEN ( ""Status""<=1 ) THEN 1 ELSE 0 END )) AS ""ScreenApproval""
  436. ,SUM(( CASE WHEN ( ""Status""=2 ) THEN 1 ELSE 0 END )) AS ""ScreenPass""
  437. ,SUM(( CASE WHEN ( ""Status""=3 ) THEN 1 ELSE 0 END )) AS ""ScreenNotPass"",0 ""SatisfactionCount"", 0 ""NotSatisfactionCount""
  438. from(
  439. select SUBSTRING(""d"".""CreatorOrgId"",1,{3}) ""HandlerOrgId"",""d"".""Status"" from ""order_screen"" ""d""
  440. left join ""order"" ""o"" on ""d"".""OrderId""=""o"".""Id""
  441. where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}' {2}
  442. )""s"" where ""HandlerOrgId"" IS not NULL {4}
  443. GROUP BY ""HandlerOrgId""
  444. union ALL
  445. /*查询满意度*/
  446. select ""HandlerOrgId"",0 ""YbOrderCountNum"",0 ""ZbOrderCountNum"",0 ""YbOverdue"" ,0 ""ZbOverdue"",0 ""HqybOverdue"",0 ""HqzbOverdue"",0 ""DelayEnd"",0 ""DelayWait"" ,0""Archived"",0 ""ToBeArchived"",0 ""WaitPublished"",0 ""PublishedOpen"",0 ""PublishedNoOpen"",0 ""OrderDelayCount"",0 ""ScreenCount"",0 ""ScreenApproval"", 0 ""ScreenPass"" , 0 ""ScreenNotPass""
  447. ,SUM(( CASE WHEN ( (""OrgProcessingResults""->>'Key')::VARCHAR != '2' ) THEN 1 ELSE 0 END )) AS ""SatisfactionCount""
  448. ,SUM(( CASE WHEN ( (""OrgProcessingResults""->>'Key')::VARCHAR = '2' ) THEN 1 ELSE 0 END )) AS ""NotSatisfactionCount""
  449. FROM(
  450. SELECT SUBSTRING(""VisitOrgCode"",1,{3}) ""HandlerOrgId"" ,""OrgProcessingResults"" from ""order_visit_detail"" ""d""
  451. left join ""order_visit"" ""v"" on ""v"".""Id""=""d"".""VisitId""
  452. left join ""order"" ""o"" on ""o"".""Id""=""v"".""OrderId""
  453. where ""o"".""CreationTime"">='{0}' and ""o"".""CreationTime""<='{1}' and ""d"".""VisitTarget""=20 and ""v"".""VisitState""=30 and ""d"".""VisitOrgCode"" is not NULL {2}
  454. )""s"" where ""HandlerOrgId"" IS not NULL {4}
  455. GROUP BY ""HandlerOrgId""
  456. )""te""
  457. GROUP BY ""HandlerOrgId""
  458. ) ""su""
  459. left join ""system_organize"" ""so"" on ""so"".""Id""=""su"".""OrgCode""
  460. where 1=1 {5}
  461. order by ""su"".""OrgCode""";
  462. var IsProvince = dto.IsProvince.HasValue && dto.IsProvince == true ? " and \"o\".\"Source\"=100 " : " ";
  463. var orgLength = dto.OrgCode.Length + 3;
  464. var isOrg = dto.OrgCode == "001" ? " and \"HandlerOrgId\" ='001'" : " and \"HandlerOrgId\" like concat('" + dto.OrgCode + "','%') ";
  465. var orgName = string.IsNullOrEmpty(dto.OrgName) == false ? " and \"OrgName\" like concat('%'," + dto.OrgName + ",'%')" : "";
  466. strSql = string.Format(strSql, dto.StartTime, dto.EndTime, IsProvince, orgLength, isOrg, orgName);
  467. return _orderRepository.DepartmentalProcessingStatisticsNew(strSql);
  468. }
  469. /// <summary>
  470. /// 部门办件统计表--明细---新
  471. /// </summary>
  472. /// <param name="dto"></param>
  473. /// <returns></returns>
  474. public ISugarQueryable<SelectOrderId> GetDepartmentalProcessingStatisticsListNew(DepartmentalProcessingStatisticsRequest dto, CancellationToken cancellationToken)
  475. {
  476. dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
  477. RefAsync<int> total = 0;
  478. ISugarQueryable<SelectOrderId> query = null;
  479. switch (dto.StatisticsType)
  480. {
  481. case EStatisticsType.YBOrderCountNum://工单已办
  482. query = _workflowTraceRepository.Queryable()
  483. .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
  484. .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime
  485. && t.Status >= EWorkflowStepStatus.Handled &&t.TraceState!= EWorkflowTraceState.StepRemoveByPrevious)
  486. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
  487. .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
  488. .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
  489. .GroupBy((t, o) => o.Id)
  490. .Select((t, o) => new SelectOrderId { Id = o.Id })
  491. .MergeTable();
  492. break;
  493. case EStatisticsType.ZBOrderCountNum://工单在办
  494. query = _workflowTraceRepository.Queryable()
  495. .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
  496. .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime
  497. && t.Status < EWorkflowStepStatus.Handled)
  498. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
  499. .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
  500. .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
  501. .GroupBy((t, o) => o.Id)
  502. .Select((t, o) => new SelectOrderId { Id = o.Id })
  503. .MergeTable();
  504. break;
  505. case EStatisticsType.OrderDelayCount://延期次数
  506. query = _orderDelayRepository.Queryable()
  507. .Includes(x => x.Order)
  508. .Where(x => x.Order.CreationTime >= dto.StartTime && x.Order.CreationTime <= dto.EndTime && x.DelayState == EDelayState.Pass)
  509. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, x => x.Order.Source == ESource.ProvinceStraight)
  510. .WhereIF(dto.OrgCode == "001", x => x.ApplyOrgCode == dto.OrgCode)
  511. .WhereIF(dto.OrgCode != "001", x => x.ApplyOrgCode.StartsWith(dto.OrgCode))
  512. .OrderByDescending(x => x.Order.CreationTime)
  513. .Select(x => new SelectOrderId { Id = x.Order.Id })
  514. .MergeTable();
  515. break;
  516. case EStatisticsType.YBOverdue://已办超期
  517. query = _workflowTraceRepository.Queryable()
  518. .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
  519. .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime
  520. && t.Status >= EWorkflowStepStatus.Handled && t.HandleTime > t.StepExpiredTime && t.CountersignPosition == ECountersignPosition.None && t.TraceState != EWorkflowTraceState.StepRemoveByPrevious)
  521. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
  522. .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
  523. .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
  524. .GroupBy((t, o) => o.Id)
  525. .Select((t, o) => new SelectOrderId { Id = o.Id })
  526. .MergeTable();
  527. break;
  528. case EStatisticsType.ZBOverdue://待办超期
  529. query = _workflowTraceRepository.Queryable()
  530. .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
  531. .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime
  532. && t.Status < EWorkflowStepStatus.Handled && DateTime.Now > t.StepExpiredTime && t.CountersignPosition == ECountersignPosition.None)
  533. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
  534. .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
  535. .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
  536. .GroupBy((t, o) => o.Id)
  537. .Select((t, o) => new SelectOrderId { Id = o.Id })
  538. .MergeTable();
  539. break;
  540. case EStatisticsType.HQYBOverdue://会签已办超期
  541. query = _workflowTraceRepository.Queryable()
  542. .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
  543. .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime
  544. && t.Status >= EWorkflowStepStatus.Handled && t.HandleTime > t.StepExpiredTime && t.CountersignPosition > ECountersignPosition.None && t.TraceState != EWorkflowTraceState.StepRemoveByPrevious)
  545. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
  546. .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
  547. .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
  548. .GroupBy((t, o) => o.Id)
  549. .Select((t, o) => new SelectOrderId { Id = o.Id })
  550. .MergeTable();
  551. break;
  552. case EStatisticsType.HQZBOverdue://会签待办超期
  553. query = _workflowTraceRepository.Queryable()
  554. .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
  555. .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime
  556. && t.Status < EWorkflowStepStatus.Handled && DateTime.Now > t.StepExpiredTime && t.CountersignPosition > ECountersignPosition.None)
  557. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
  558. .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
  559. .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
  560. .GroupBy((t, o) => o.Id)
  561. .Select((t, o) => new SelectOrderId { Id = o.Id })
  562. .MergeTable();
  563. break;
  564. case EStatisticsType.SubtotalOverdue://超期件数
  565. var cqybquery = _workflowTraceRepository.Queryable()
  566. .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
  567. .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime
  568. && t.Status >= EWorkflowStepStatus.Handled && t.HandleTime > t.StepExpiredTime && t.CountersignPosition >= ECountersignPosition.None && t.TraceState != EWorkflowTraceState.StepRemoveByPrevious)
  569. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
  570. .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
  571. .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
  572. .GroupBy((t, o) => o.Id)
  573. .Select((t, o) => new SelectOrderId { Id = o.Id })
  574. .MergeTable();
  575. var cqdbquery = _workflowTraceRepository.Queryable()
  576. .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
  577. .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime
  578. && t.Status < EWorkflowStepStatus.Handled && DateTime.Now > t.StepExpiredTime && t.CountersignPosition >= ECountersignPosition.None)
  579. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
  580. .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
  581. .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
  582. .GroupBy((t, o) => o.Id)
  583. .Select((t, o) => new SelectOrderId { Id = o.Id })
  584. .MergeTable();
  585. query = _orderRepository.UnionAll(cqybquery, cqdbquery).GroupBy(p => p.Id).MergeTable();
  586. break;
  587. case EStatisticsType.DelayEnd://会签已办
  588. query = _workflowTraceRepository.Queryable()
  589. .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
  590. .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime
  591. && t.Status >= EWorkflowStepStatus.Handled && t.CountersignPosition > ECountersignPosition.None && t.TraceState != EWorkflowTraceState.StepRemoveByPrevious)
  592. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
  593. .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
  594. .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
  595. .GroupBy((t, o) => o.Id)
  596. .Select((t, o) => new SelectOrderId { Id = o.Id })
  597. .MergeTable();
  598. break;
  599. case EStatisticsType.DelayWait://会签待办
  600. query = _workflowTraceRepository.Queryable()
  601. .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
  602. .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime
  603. && t.Status < EWorkflowStepStatus.Handled && t.CountersignPosition > ECountersignPosition.None)
  604. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
  605. .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
  606. .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
  607. .GroupBy((t, o) => o.Id)
  608. .Select((t, o) => new SelectOrderId { Id = o.Id })
  609. .MergeTable();
  610. break;
  611. case EStatisticsType.ToBeArchived://待归档没得数据
  612. query = _orderRepository.Queryable()
  613. .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status < EOrderStatus.WaitForAccept)
  614. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
  615. .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
  616. .WhereIF(dto.OrgCode != "001", o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
  617. .Select(o => new SelectOrderId { Id = o.Id })
  618. .MergeTable();
  619. break;
  620. case EStatisticsType.Archived://已归档
  621. query = _orderRepository.Queryable()
  622. .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status >= EOrderStatus.Filed)
  623. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
  624. .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
  625. .WhereIF(dto.OrgCode != "001", o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
  626. .Select(o => new SelectOrderId { Id = o.Id })
  627. .MergeTable();
  628. break;
  629. case EStatisticsType.WaitPublished://待发布
  630. query = _orderRepository.Queryable()
  631. .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status == EOrderStatus.Filed)
  632. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
  633. .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
  634. .WhereIF(dto.OrgCode != "001", o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
  635. .Select(o => new SelectOrderId { Id = o.Id })
  636. .MergeTable();
  637. break;
  638. case EStatisticsType.PublishedOpen://发布公开
  639. query = _orderRepository.Queryable()
  640. .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status >= EOrderStatus.Published && o.IsPublicity == true)
  641. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
  642. .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
  643. .WhereIF(dto.OrgCode != "001", o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
  644. .Select(o => new SelectOrderId { Id = o.Id })
  645. .MergeTable();
  646. break;
  647. case EStatisticsType.PublishedNoOpen://发布不公开
  648. query = _orderRepository.Queryable()
  649. .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status >= EOrderStatus.Published && o.IsPublicity == false)
  650. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
  651. .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
  652. .WhereIF(dto.OrgCode != "001", o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
  653. .Select(o => new SelectOrderId { Id = o.Id })
  654. .MergeTable();
  655. break;
  656. case EStatisticsType.ScreenCount://甄别总量
  657. query = _orderScreenRepository.Queryable()
  658. .Includes(x => x.Order)
  659. .Where(x => x.Order.CreationTime >= dto.StartTime && x.Order.CreationTime <= dto.EndTime && x.Order.Id != null)
  660. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, x => x.Order.Source == ESource.ProvinceStraight)
  661. .WhereIF(dto.OrgCode == "001", x => x.CreatorOrgId == dto.OrgCode)
  662. .WhereIF(dto.OrgCode != "001", x => x.CreatorOrgId.StartsWith(dto.OrgCode))
  663. .Select(x => new SelectOrderId { Id = x.Order.Id })
  664. .MergeTable();
  665. break;
  666. case EStatisticsType.ScreenApproval://带甄别
  667. query = _orderScreenRepository.Queryable()
  668. .Includes(x => x.Order)
  669. .Where(x => x.Order.CreationTime >= dto.StartTime && x.Order.CreationTime <= dto.EndTime && x.Order.Id != null
  670. && (x.Status == EScreenStatus.Approval || x.Status == EScreenStatus.Apply))
  671. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, x => x.Order.Source == ESource.ProvinceStraight)
  672. .WhereIF(dto.OrgCode == "001", x => x.CreatorOrgId == dto.OrgCode)
  673. .WhereIF(dto.OrgCode != "001", x => x.CreatorOrgId.StartsWith(dto.OrgCode))
  674. .Select(x => new SelectOrderId { Id = x.Order.Id })
  675. .MergeTable();
  676. break;
  677. case EStatisticsType.ScreenPass://甄别通过
  678. query = _orderScreenRepository.Queryable()
  679. .Includes(x => x.Order)
  680. .Where(x => x.Order.CreationTime >= dto.StartTime && x.Order.CreationTime <= dto.EndTime && x.Order.Id != null && x.Status == EScreenStatus.End)
  681. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, x => x.Order.Source == ESource.ProvinceStraight)
  682. .WhereIF(dto.OrgCode == "001", x => x.CreatorOrgId == dto.OrgCode)
  683. .WhereIF(dto.OrgCode != "001", x => x.CreatorOrgId.StartsWith(dto.OrgCode))
  684. .Select(x => new SelectOrderId { Id = x.Order.Id })
  685. .MergeTable();
  686. break;
  687. case EStatisticsType.ScreenNotPass://甄别不通过
  688. query = _orderScreenRepository.Queryable()
  689. .Includes(x => x.Order)
  690. .Where(x => x.Order.CreationTime >= dto.StartTime && x.Order.CreationTime <= dto.EndTime && x.Order.Id != null && x.Status == EScreenStatus.Refuse)
  691. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, x => x.Order.Source == ESource.ProvinceStraight)
  692. .WhereIF(dto.OrgCode == "001", x => x.CreatorOrgId == dto.OrgCode)
  693. .WhereIF(dto.OrgCode != "001", x => x.CreatorOrgId.StartsWith(dto.OrgCode))
  694. .Select(x => new SelectOrderId { Id = x.Order.Id })
  695. .MergeTable();
  696. break;
  697. default:
  698. break;
  699. }
  700. return query;
  701. }
  702. /// <summary>
  703. /// 部门办件统计明细表
  704. /// </summary>
  705. /// <param name="dto"></param>
  706. /// <returns></returns>
  707. public ISugarQueryable<SelectOrderId> DepartmentalProcessingStatisticsDetailsList(DepartmentalProcessingStatisticsRequest dto)
  708. {
  709. var query = _workflowTraceRepository.Queryable()
  710. .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
  711. .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime)
  712. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
  713. // .WhereIF(IsCenter, (t, o) => t.HandlerOrgId == dto.OrgCode)
  714. .WhereIF(!_sessionContext.OrgIsCenter, (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
  715. .GroupBy((t, o) => o.Id)
  716. .Select((t, o) => new SelectOrderId { Id = o.Id })
  717. .MergeTable();
  718. return query;
  719. }
  720. /// <summary>
  721. /// 部门办件统计表
  722. /// </summary>
  723. /// <param name="dto"></param>
  724. /// <returns></returns>
  725. public ISugarQueryable<DepartmentalProcessingStatisticsDataDto> DepartmentalProcessingStatistics(DepartmentalProcessingStatisticsRequest dto)
  726. {
  727. dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
  728. var IsCenter = _sessionContext.OrgIsCenter;
  729. //工单 已办=归完档的工单数+会签已办数量
  730. #region 工单
  731. var queryOrder = _orderRepository.Queryable()
  732. .Where(it => it.CreationTime >= dto.StartTime && it.CreationTime <= dto.EndTime && it.Status > EOrderStatus.WaitForAccept)
  733. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, it => it.Source == ESource.ProvinceStraight)
  734. .Select(it => new
  735. {
  736. it.Id,
  737. OrgCode = IsCenter == true ? it.ActualHandleOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")) : it.ActualHandleOrgCode.Substring(0, _sessionContext.RequiredOrgId.Length + 3),
  738. it.ActualHandleOrgCode,
  739. it.Status,//工单状态
  740. it.ExpiredTime,//期满时间
  741. it.ActualHandleTime,//办理时间
  742. it.CounterSignType,//会签
  743. })
  744. .MergeTable()
  745. .WhereIF(IsCenter == false, it => it.OrgCode.StartsWith(_sessionContext.RequiredOrgId))
  746. .GroupBy(it => new
  747. {
  748. it.OrgCode
  749. })
  750. .Select(it => new DepartmentalProcessingStatisticsDataDto
  751. {
  752. OrgCode = it.OrgCode,
  753. // OrderCountNum = SqlFunc.AggregateCount(it.OrgCode),//总量
  754. YbOrderCountNum = SqlFunc.AggregateSum(SqlFunc.IIF(it.Status >= EOrderStatus.Filed, 1, 0)),//已办// SqlFunc.AggregateSum(SqlFunc.IIF(it.Status >= EOrderStatus.Filed, 1, 0)),//已办
  755. ZbOrderCountNum = 0, //ZbOrderCountNum = SqlFunc.AggregateSum(SqlFunc.IIF(it.Status < EOrderStatus.Filed, 1, 0)),//在办
  756. Archived = SqlFunc.AggregateSum(SqlFunc.IIF(it.Status >= EOrderStatus.Filed, 1, 0)),//已归档
  757. ToBeArchived = 0,
  758. WaitPublished = 0,
  759. PublishedOpen = 0,
  760. PublishedNoOpen = 0,
  761. YbOverdue = SqlFunc.AggregateSum(SqlFunc.IIF(it.Status >= EOrderStatus.Filed && it.ActualHandleTime > it.ExpiredTime, 1, 0)),//已办超期
  762. ZbOverdue = 0,// SqlFunc.AggregateSum(SqlFunc.IIF(it.Status < EOrderStatus.Filed && it.ExpiredTime < SqlFunc.GetDate(), 1, 0)),//待办超期
  763. CompleteOnTime = SqlFunc.AggregateSum(SqlFunc.IIF(it.Status >= EOrderStatus.Filed && it.ActualHandleTime <= it.ExpiredTime, 1, 0)),//按时办结
  764. HqybOverdue = 0,
  765. HqzbOverdue = 0,
  766. DelayEnd = 0,
  767. DelayWait = 0,
  768. OrderDelayCount = 0,
  769. ScreenCount = 0,
  770. ScreenApproval = 0,
  771. ScreenPass = 0,
  772. ScreenNotPass = 0,
  773. SatisfactionCount = 0,
  774. NotSatisfactionCount = 0
  775. })
  776. .MergeTable();
  777. #endregion
  778. #region 发布
  779. //发布
  780. var queryPublish = _orderPublishRepository.Queryable()
  781. .LeftJoin<Order>((x, o) => x.OrderId == o.Id)
  782. .Where((x, o) => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
  783. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (x, o) => o.Source == ESource.ProvinceStraight)
  784. .Select((x, o) => new
  785. {
  786. o.Id,
  787. OrgCode = IsCenter == true ? o.ActualHandleOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")) : o.ActualHandleOrgCode.Substring(0, _sessionContext.RequiredOrgId.Length + 3),
  788. x.PublishState,
  789. o.Status
  790. })
  791. .MergeTable()
  792. .WhereIF(IsCenter == false, it => it.OrgCode.StartsWith(_sessionContext.RequiredOrgId))
  793. .GroupBy(it => new { it.OrgCode })
  794. .Select(it => new DepartmentalProcessingStatisticsDataDto
  795. {
  796. OrgCode = it.OrgCode,
  797. // OrderCountNum = 0,//总量
  798. YbOrderCountNum = 0,//已办
  799. ZbOrderCountNum = 0,//在办
  800. Archived = 0,
  801. ToBeArchived = 0,
  802. WaitPublished = SqlFunc.AggregateSum(SqlFunc.IIF(it.Status == EOrderStatus.Filed, 1, 0)),//待发布 --已归档的就是待发布
  803. PublishedOpen = SqlFunc.AggregateSum(SqlFunc.IIF(it.Status >= EOrderStatus.Published && it.PublishState, 1, 0)),//已发布公开
  804. PublishedNoOpen = SqlFunc.AggregateSum(SqlFunc.IIF(it.Status >= EOrderStatus.Published && !it.PublishState, 1, 0)),//已发布不公开
  805. YbOverdue = 0,
  806. ZbOverdue = 0,
  807. CompleteOnTime = 0,
  808. HqybOverdue = 0,
  809. HqzbOverdue = 0,
  810. DelayEnd = 0,
  811. DelayWait = 0,
  812. OrderDelayCount = 0,
  813. ScreenCount = 0,
  814. ScreenApproval = 0,
  815. ScreenPass = 0,
  816. ScreenNotPass = 0,
  817. SatisfactionCount = 0,
  818. NotSatisfactionCount = 0,
  819. })
  820. .MergeTable();
  821. #endregion
  822. #region 会签(已办超期、待办超期)
  823. //会签(已办超期、待办超期)
  824. //var queryCountersign = _workflowStepHandleRepository.Queryable()
  825. // .LeftJoin<WorkflowTrace>((x, o) => x.WorkflowStepId == o.StepId)
  826. var queryCountersign = _workflowTraceRepository.Queryable()
  827. .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
  828. .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && t.CreationTime >= dto.StartTime && t.CreationTime <= dto.EndTime)
  829. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
  830. .Select((t, o) => new
  831. {
  832. OrgCode = IsCenter == true ? t.HandlerOrgId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")) : t.HandlerOrgId.Substring(0, _sessionContext.RequiredOrgId.Length + 3),// d.OrgId,
  833. t.HandleTime,
  834. t.StepExpiredTime,
  835. t.Status,
  836. t.CountersignPosition,
  837. o.Id
  838. })
  839. .MergeTable()
  840. .WhereIF(IsCenter == false, it => it.OrgCode.StartsWith(_sessionContext.RequiredOrgId))
  841. .GroupBy(d => new { d.OrgCode })
  842. .Select(d => new DepartmentalProcessingStatisticsDataDto
  843. {
  844. OrgCode = d.OrgCode,
  845. //OrderCountNum = 0,//总量
  846. YbOrderCountNum = SqlFunc.AggregateSum(SqlFunc.IIF(d.CountersignPosition > ECountersignPosition.None && d.Status >= EWorkflowStepStatus.Handled, 1, 0)),// 0,//已办
  847. ZbOrderCountNum = SqlFunc.AggregateSum(SqlFunc.IIF(d.Status < EWorkflowStepStatus.Handled, 1, 0)),// 0,//在办
  848. Archived = 0,
  849. ToBeArchived = 0,
  850. WaitPublished = 0,
  851. PublishedOpen = 0,
  852. PublishedNoOpen = 0,
  853. YbOverdue = 0,
  854. ZbOverdue = SqlFunc.AggregateSum(SqlFunc.IIF(d.CountersignPosition == ECountersignPosition.None && d.Status < EWorkflowStepStatus.Handled && DateTime.Now >= d.StepExpiredTime, 1, 0)),// 0,
  855. CompleteOnTime = 0,
  856. HqybOverdue = SqlFunc.AggregateSum(SqlFunc.IIF(d.CountersignPosition > ECountersignPosition.None && d.Status >= EWorkflowStepStatus.Handled && d.HandleTime > d.StepExpiredTime, 1, 0)),
  857. HqzbOverdue = SqlFunc.AggregateSum(SqlFunc.IIF(d.CountersignPosition > ECountersignPosition.None && d.Status < EWorkflowStepStatus.Handled && DateTime.Now >= d.StepExpiredTime, 1, 0)),
  858. DelayEnd = SqlFunc.AggregateSum(SqlFunc.IIF(d.CountersignPosition > ECountersignPosition.None && d.Status >= EWorkflowStepStatus.Handled, 1, 0)),
  859. DelayWait = SqlFunc.AggregateSum(SqlFunc.IIF(d.CountersignPosition > ECountersignPosition.None && d.Status < EWorkflowStepStatus.Handled, 1, 0)),
  860. OrderDelayCount = 0,
  861. ScreenCount = 0,
  862. ScreenApproval = 0,
  863. ScreenPass = 0,
  864. ScreenNotPass = 0,
  865. SatisfactionCount = 0,
  866. NotSatisfactionCount = 0,
  867. })
  868. .MergeTable();
  869. #endregion
  870. #region 延期
  871. //延期
  872. var orderDelay = _orderDelayRepository.Queryable()
  873. .LeftJoin<Order>((x, o) => x.OrderId == o.Id)
  874. .Where((x, o) => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
  875. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (x, o) => o.Source == ESource.ProvinceStraight)
  876. .Select((x, o) => new
  877. {
  878. OrgCode = IsCenter == true ? x.ApplyOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")) : x.ApplyOrgCode.Substring(0, _sessionContext.RequiredOrgId.Length + 3),
  879. x.DelayState
  880. })
  881. .MergeTable()
  882. .WhereIF(IsCenter == false, it => it.OrgCode.StartsWith(_sessionContext.RequiredOrgId))
  883. .GroupBy(x => new { x.OrgCode })
  884. .Select(x => new DepartmentalProcessingStatisticsDataDto
  885. {
  886. OrgCode = x.OrgCode,
  887. // OrderCountNum = 0,//总量
  888. YbOrderCountNum = 0,//已办
  889. ZbOrderCountNum = 0,//在办
  890. Archived = 0,
  891. ToBeArchived = 0,
  892. WaitPublished = 0,
  893. PublishedOpen = 0,
  894. PublishedNoOpen = 0,
  895. YbOverdue = 0,
  896. ZbOverdue = 0,
  897. CompleteOnTime = 0,
  898. HqybOverdue = 0,
  899. HqzbOverdue = 0,
  900. DelayEnd = 0,
  901. DelayWait = 0,
  902. OrderDelayCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.DelayState == EDelayState.Pass, 1, 0)),
  903. ScreenCount = 0,
  904. ScreenApproval = 0,
  905. ScreenPass = 0,
  906. ScreenNotPass = 0,
  907. SatisfactionCount = 0,
  908. NotSatisfactionCount = 0,
  909. })
  910. .MergeTable();
  911. #endregion
  912. #region 甄别
  913. //甄别
  914. var orderScreen = _orderScreenRepository.Queryable()
  915. .LeftJoin<Order>((x, o) => x.OrderId == o.Id)
  916. .Where((x, o) => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
  917. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (x, o) => o.Source == ESource.ProvinceStraight)
  918. .WhereIF(!string.IsNullOrEmpty(dto.OrgName), (x, o) => x.CreatorOrgId.Contains(dto.OrgName))
  919. .Select((x, o) => new
  920. {
  921. x.Id,
  922. OrgCode = IsCenter == true ? x.CreatorOrgId.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")) : x.CreatorOrgId.Substring(0, _sessionContext.RequiredOrgId.Length + 3),
  923. x.Status
  924. })
  925. .MergeTable()
  926. .WhereIF(IsCenter == false, it => it.OrgCode.StartsWith(_sessionContext.RequiredOrgId))
  927. .GroupBy(x => new { x.OrgCode })
  928. .Select(x => new DepartmentalProcessingStatisticsDataDto
  929. {
  930. OrgCode = x.OrgCode,
  931. // OrderCountNum = 0,//总量
  932. YbOrderCountNum = 0,//已办
  933. ZbOrderCountNum = 0,//在办
  934. Archived = 0,
  935. ToBeArchived = 0,
  936. WaitPublished = 0,
  937. PublishedOpen = 0,
  938. PublishedNoOpen = 0,
  939. YbOverdue = 0,
  940. ZbOverdue = 0,
  941. CompleteOnTime = 0,
  942. HqybOverdue = 0,
  943. HqzbOverdue = 0,
  944. DelayEnd = 0,
  945. DelayWait = 0,
  946. OrderDelayCount = 0,
  947. ScreenCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.Id != null, 1, 0)),
  948. ScreenApproval = SqlFunc.AggregateSum(SqlFunc.IIF(x.Status == EScreenStatus.Approval || x.Status == EScreenStatus.Apply, 1, 0)),
  949. ScreenPass = SqlFunc.AggregateSum(SqlFunc.IIF(x.Status == EScreenStatus.End, 1, 0)),
  950. ScreenNotPass = SqlFunc.AggregateSum(SqlFunc.IIF(x.Status == EScreenStatus.Refuse, 1, 0)),
  951. SatisfactionCount = 0,
  952. NotSatisfactionCount = 0,
  953. })
  954. .MergeTable();
  955. #endregion
  956. #region 满意度
  957. //满意度
  958. var orderVisit = _orderVisitDetailRepository.Queryable()
  959. .LeftJoin<OrderVisit>((x, o) => x.VisitId == o.Id)
  960. .LeftJoin<Order>((x, o, p) => o.OrderId == p.Id)
  961. .Where((x, o, p) => x.OrderVisit.VisitTime >= dto.StartTime && x.OrderVisit.VisitTime <= dto.EndTime && x.VisitTarget == EVisitTarget.Org && x.OrderVisit.VisitState == EVisitState.Visited && !string.IsNullOrEmpty(x.VisitOrgCode))
  962. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (x, o, p) => p.Source == ESource.ProvinceStraight)
  963. .Select((x, o, p) => new
  964. {
  965. OrgCode = IsCenter == true ? x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")) : x.VisitOrgCode.Substring(0, _sessionContext.RequiredOrgId.Length + 3),
  966. x.OrgProcessingResults
  967. })
  968. .MergeTable()
  969. .WhereIF(IsCenter == false, it => it.OrgCode.StartsWith(_sessionContext.RequiredOrgId))
  970. .GroupBy(x => new { x.OrgCode })
  971. .Select(x => new DepartmentalProcessingStatisticsDataDto
  972. {
  973. OrgCode = x.OrgCode,
  974. // OrderCountNum = 0,//总量
  975. YbOrderCountNum = 0,//已办
  976. ZbOrderCountNum = 0,//在办
  977. Archived = 0,
  978. ToBeArchived = 0,
  979. WaitPublished = 0,
  980. PublishedOpen = 0,
  981. PublishedNoOpen = 0,
  982. YbOverdue = 0,
  983. ZbOverdue = 0,
  984. CompleteOnTime = 0,
  985. HqybOverdue = 0,
  986. HqzbOverdue = 0,
  987. DelayEnd = 0,
  988. DelayWait = 0,
  989. OrderDelayCount = 0,
  990. ScreenCount = 0,
  991. ScreenApproval = 0,
  992. ScreenPass = 0,
  993. ScreenNotPass = 0,
  994. SatisfactionCount = SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") != "2", 1, 0)),
  995. NotSatisfactionCount = SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "2", 1, 0))
  996. })
  997. .MergeTable();
  998. #endregion
  999. //联合查询
  1000. return _orderRepository.OrderUnionAll(queryOrder, queryPublish, queryCountersign, orderDelay, orderScreen, orderVisit)
  1001. .LeftJoin<SystemOrganize>((p, o) => p.OrgCode == o.Id)
  1002. .Select((p, o) => new DepartmentalProcessingStatisticsDataDto
  1003. {
  1004. OrgCode = p.OrgCode,
  1005. OrgName = o.Name,
  1006. OrgType = o.OrgType,
  1007. //OrderCountNum = p.OrderCountNum,
  1008. YbOrderCountNum = p.YbOrderCountNum,
  1009. ZbOrderCountNum = p.ZbOrderCountNum,
  1010. Archived = p.Archived,
  1011. ToBeArchived = p.ToBeArchived,
  1012. WaitPublished = p.WaitPublished,
  1013. PublishedOpen = p.PublishedOpen,
  1014. PublishedNoOpen = p.PublishedNoOpen,
  1015. YbOverdue = p.YbOverdue,
  1016. ZbOverdue = p.ZbOverdue,
  1017. CompleteOnTime = p.CompleteOnTime,
  1018. HqybOverdue = p.HqybOverdue,
  1019. HqzbOverdue = p.HqzbOverdue,
  1020. DelayEnd = p.DelayEnd,
  1021. DelayWait = p.DelayWait,
  1022. OrderDelayCount = p.OrderDelayCount,
  1023. ScreenCount = p.ScreenCount,
  1024. ScreenApproval = p.ScreenApproval,
  1025. ScreenPass = p.ScreenPass,
  1026. ScreenNotPass = p.ScreenNotPass,
  1027. SatisfactionCount = p.SatisfactionCount,
  1028. NotSatisfactionCount = p.NotSatisfactionCount
  1029. })
  1030. .MergeTable()
  1031. .WhereIF(string.IsNullOrEmpty(dto.OrgName) == false, x => x.OrgName.Contains(dto.OrgName));
  1032. }
  1033. /// <summary>
  1034. /// 部门办件统计表--子级
  1035. /// </summary>
  1036. /// <param name="dto"></param>
  1037. /// <returns></returns>
  1038. public ISugarQueryable<DepartmentalProcessingStatisticsDataDto> DepartmentalProcessingChildStatistics(DepartmentalProcessingStatisticsRequest dto)
  1039. {
  1040. dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
  1041. #region 工单
  1042. //工单
  1043. var queryOrder = _orderRepository.Queryable()
  1044. .Where(it => it.CreationTime >= dto.StartTime && it.CreationTime <= dto.EndTime && it.Status > EOrderStatus.WaitForAccept)
  1045. .WhereIF(dto.OrgCode == "001", it => it.ActualHandleOrgCode == dto.OrgCode)
  1046. .WhereIF(dto.OrgCode != "001", it => it.ActualHandleOrgCode.StartsWith(dto.OrgCode))
  1047. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, it => it.Source == ESource.ProvinceStraight)
  1048. .Select(it => new
  1049. {
  1050. it.Id,
  1051. OrgCode = it.ActualHandleOrgCode.Substring(0, dto.OrgCode.Length + 3),
  1052. it.ActualHandleOrgCode,
  1053. it.Status,//工单状态
  1054. it.ExpiredTime,//期满时间
  1055. it.ActualHandleTime,//办理时间
  1056. it.CounterSignType,//会签
  1057. })
  1058. .MergeTable()
  1059. .GroupBy(it => new
  1060. {
  1061. it.OrgCode
  1062. })
  1063. .Select(it => new DepartmentalProcessingStatisticsDataDto
  1064. {
  1065. OrgCode = it.OrgCode,
  1066. // OrderCountNum = SqlFunc.AggregateCount(it.OrgCode),//总量
  1067. YbOrderCountNum = 0,//SqlFunc.AggregateSum(SqlFunc.IIF(it.Status >= EOrderStatus.Filed, 1, 0)),//已办
  1068. ZbOrderCountNum = 0,// ZbOrderCountNum = SqlFunc.AggregateSum(SqlFunc.IIF(it.Status < EOrderStatus.Filed, 1, 0)),//在办
  1069. Archived = SqlFunc.AggregateSum(SqlFunc.IIF(it.Status >= EOrderStatus.Filed, 1, 0)),//已归档
  1070. ToBeArchived = 0,
  1071. WaitPublished = 0,
  1072. PublishedOpen = 0,
  1073. PublishedNoOpen = 0,
  1074. YbOverdue = SqlFunc.AggregateSum(SqlFunc.IIF(it.Status >= EOrderStatus.Filed && it.ActualHandleTime > it.ExpiredTime, 1, 0)),//已办超期
  1075. ZbOverdue = 0,// SqlFunc.AggregateSum(SqlFunc.IIF(it.Status < EOrderStatus.Filed && it.ExpiredTime < SqlFunc.GetDate(), 1, 0)),//待办超期
  1076. CompleteOnTime = SqlFunc.AggregateSum(SqlFunc.IIF(it.Status >= EOrderStatus.Filed && it.ActualHandleTime <= it.ExpiredTime, 1, 0)),//按时办结
  1077. HqybOverdue = 0,
  1078. HqzbOverdue = 0,
  1079. DelayEnd = 0,
  1080. DelayWait = 0,
  1081. OrderDelayCount = 0,
  1082. ScreenCount = 0,
  1083. ScreenApproval = 0,
  1084. ScreenPass = 0,
  1085. ScreenNotPass = 0,
  1086. SatisfactionCount = 0,
  1087. NotSatisfactionCount = 0
  1088. })
  1089. .MergeTable();
  1090. #endregion
  1091. #region 发布
  1092. //发布
  1093. var queryPublish = _orderPublishRepository.Queryable()
  1094. .LeftJoin<Order>((x, o) => x.OrderId == o.Id)
  1095. .Where((x, o) => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
  1096. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (x, o) => o.Source == ESource.ProvinceStraight)
  1097. .WhereIF(dto.OrgCode == "001", (x, o) => o.ActualHandleOrgCode == dto.OrgCode)
  1098. .WhereIF(dto.OrgCode != "001", (x, o) => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
  1099. .Select((x, o) => new
  1100. {
  1101. o.Id,
  1102. OrgCode = o.ActualHandleOrgCode.Substring(0, dto.OrgCode.Length + 3),
  1103. PublishState = x.PublishState,
  1104. Status = o.Status
  1105. })
  1106. .MergeTable()
  1107. .GroupBy(it => new { it.OrgCode })
  1108. .Select(it => new DepartmentalProcessingStatisticsDataDto
  1109. {
  1110. OrgCode = it.OrgCode,
  1111. // OrderCountNum = 0,//总量
  1112. YbOrderCountNum = 0,//已办
  1113. ZbOrderCountNum = 0,//在办
  1114. Archived = 0,
  1115. ToBeArchived = 0,
  1116. WaitPublished = SqlFunc.AggregateSum(SqlFunc.IIF(it.Status == EOrderStatus.Filed, 1, 0)),//待发布 --已归档的就是待发布
  1117. PublishedOpen = SqlFunc.AggregateSum(SqlFunc.IIF(it.Status >= EOrderStatus.Published && it.PublishState, 1, 0)),//已发布公开
  1118. PublishedNoOpen = SqlFunc.AggregateSum(SqlFunc.IIF(it.Status >= EOrderStatus.Published && !it.PublishState, 1, 0)),//已发布不公开
  1119. YbOverdue = 0,
  1120. ZbOverdue = 0,
  1121. CompleteOnTime = 0,
  1122. HqybOverdue = 0,
  1123. HqzbOverdue = 0,
  1124. DelayEnd = 0,
  1125. DelayWait = 0,
  1126. OrderDelayCount = 0,
  1127. ScreenCount = 0,
  1128. ScreenApproval = 0,
  1129. ScreenPass = 0,
  1130. ScreenNotPass = 0,
  1131. SatisfactionCount = 0,
  1132. NotSatisfactionCount = 0,
  1133. })
  1134. .MergeTable();
  1135. #endregion
  1136. #region 会签(已办超期、待办超期)
  1137. //会签(已办超期、待办超期)
  1138. //var queryCountersign = _workflowStepHandleRepository.Queryable()
  1139. // .LeftJoin<WorkflowTrace>((x, o) => x.WorkflowStepId == o.StepId)
  1140. var queryCountersign = _workflowTraceRepository.Queryable()
  1141. .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
  1142. .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && t.CreationTime >= dto.StartTime && t.CreationTime <= dto.EndTime)
  1143. .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
  1144. .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
  1145. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
  1146. .Select((t, o) => new
  1147. {
  1148. OrgCode = t.HandlerOrgId.Substring(0, dto.OrgCode.Length + 3),
  1149. t.HandleTime,
  1150. t.StepExpiredTime,
  1151. t.Status,
  1152. t.CountersignPosition,
  1153. o.Id
  1154. })
  1155. .MergeTable()
  1156. .GroupBy(d => new { d.OrgCode })
  1157. .Select(d => new DepartmentalProcessingStatisticsDataDto
  1158. {
  1159. OrgCode = d.OrgCode,
  1160. // OrderCountNum = 0,//总量
  1161. YbOrderCountNum = SqlFunc.AggregateSum(SqlFunc.IIF(d.CountersignPosition > ECountersignPosition.None && d.Status >= EWorkflowStepStatus.Handled, 1, 0)),//已办
  1162. ZbOrderCountNum = SqlFunc.AggregateSum(SqlFunc.IIF(d.Status < EWorkflowStepStatus.Handled, 1, 0)),// 0,//在办
  1163. Archived = 0,
  1164. ToBeArchived = 0,
  1165. WaitPublished = 0,
  1166. PublishedOpen = 0,
  1167. PublishedNoOpen = 0,
  1168. YbOverdue = 0,
  1169. ZbOverdue = SqlFunc.AggregateSum(SqlFunc.IIF(d.Status < EWorkflowStepStatus.Handled && DateTime.Now >= d.StepExpiredTime, 1, 0)),// 0,
  1170. CompleteOnTime = 0,
  1171. HqybOverdue = SqlFunc.AggregateSum(SqlFunc.IIF(d.CountersignPosition > ECountersignPosition.None && d.Status >= EWorkflowStepStatus.Handled && d.HandleTime > d.StepExpiredTime, 1, 0)),
  1172. HqzbOverdue = SqlFunc.AggregateSum(SqlFunc.IIF(d.CountersignPosition > ECountersignPosition.None && d.Status < EWorkflowStepStatus.Handled && DateTime.Now >= d.StepExpiredTime, 1, 0)),
  1173. DelayEnd = SqlFunc.AggregateSum(SqlFunc.IIF(d.CountersignPosition > ECountersignPosition.None && d.Status >= EWorkflowStepStatus.Handled, 1, 0)),
  1174. DelayWait = SqlFunc.AggregateSum(SqlFunc.IIF(d.CountersignPosition > ECountersignPosition.None && d.Status < EWorkflowStepStatus.Handled, 1, 0)),
  1175. OrderDelayCount = 0,
  1176. ScreenCount = 0,
  1177. ScreenApproval = 0,
  1178. ScreenPass = 0,
  1179. ScreenNotPass = 0,
  1180. SatisfactionCount = 0,
  1181. NotSatisfactionCount = 0,
  1182. })
  1183. .MergeTable();
  1184. #endregion
  1185. #region 延期
  1186. //延期
  1187. var orderDelay = _orderDelayRepository.Queryable()
  1188. .LeftJoin<Order>((x, o) => x.OrderId == o.Id)
  1189. .Where((x, o) => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
  1190. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (x, o) => o.Source == ESource.ProvinceStraight)
  1191. .WhereIF(dto.OrgCode == "001", (x, o) => x.ApplyOrgCode == dto.OrgCode)
  1192. .WhereIF(dto.OrgCode != "001", (x, o) => x.ApplyOrgCode.StartsWith(dto.OrgCode))
  1193. .Select((x, o) => new
  1194. {
  1195. OrgCode = x.ApplyOrgCode.Substring(0, dto.OrgCode.Length + 3),
  1196. x.DelayState
  1197. })
  1198. .MergeTable()
  1199. .GroupBy(x => new { x.OrgCode })
  1200. .Select(x => new DepartmentalProcessingStatisticsDataDto
  1201. {
  1202. OrgCode = x.OrgCode,
  1203. // OrderCountNum = 0,//总量
  1204. YbOrderCountNum = 0,//已办
  1205. ZbOrderCountNum = 0,//在办
  1206. Archived = 0,
  1207. ToBeArchived = 0,
  1208. WaitPublished = 0,
  1209. PublishedOpen = 0,
  1210. PublishedNoOpen = 0,
  1211. YbOverdue = 0,
  1212. ZbOverdue = 0,
  1213. CompleteOnTime = 0,
  1214. HqybOverdue = 0,
  1215. HqzbOverdue = 0,
  1216. DelayEnd = 0,
  1217. DelayWait = 0,
  1218. OrderDelayCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.DelayState == EDelayState.Pass, 1, 0)),
  1219. ScreenCount = 0,
  1220. ScreenApproval = 0,
  1221. ScreenPass = 0,
  1222. ScreenNotPass = 0,
  1223. SatisfactionCount = 0,
  1224. NotSatisfactionCount = 0,
  1225. })
  1226. .MergeTable();
  1227. #endregion
  1228. #region 甄别
  1229. //甄别
  1230. var orderScreen = _orderScreenRepository.Queryable()
  1231. .LeftJoin<Order>((x, o) => x.OrderId == o.Id)
  1232. .Where((x, o) => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
  1233. .WhereIF(!string.IsNullOrEmpty(dto.OrgName), (x, o) => x.CreatorOrgId.Contains(dto.OrgName))
  1234. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (x, o) => o.Source == ESource.ProvinceStraight)
  1235. .WhereIF(dto.OrgCode == "001", (x, o) => x.CreatorOrgId == dto.OrgCode)
  1236. .WhereIF(dto.OrgCode != "001", (x, o) => x.CreatorOrgId.StartsWith(dto.OrgCode))
  1237. .Select((x, o) => new
  1238. {
  1239. x.Id,
  1240. OrgCode = x.CreatorOrgId.Substring(0, dto.OrgCode.Length + 3),
  1241. x.Status
  1242. })
  1243. .MergeTable()
  1244. .GroupBy(x => new { x.OrgCode })
  1245. .Select(x => new DepartmentalProcessingStatisticsDataDto
  1246. {
  1247. OrgCode = x.OrgCode,
  1248. // OrderCountNum = 0,//总量
  1249. YbOrderCountNum = 0,//已办
  1250. ZbOrderCountNum = 0,//在办
  1251. Archived = 0,
  1252. ToBeArchived = 0,
  1253. WaitPublished = 0,
  1254. PublishedOpen = 0,
  1255. PublishedNoOpen = 0,
  1256. YbOverdue = 0,
  1257. ZbOverdue = 0,
  1258. CompleteOnTime = 0,
  1259. HqybOverdue = 0,
  1260. HqzbOverdue = 0,
  1261. DelayEnd = 0,
  1262. DelayWait = 0,
  1263. OrderDelayCount = 0,
  1264. ScreenCount = SqlFunc.AggregateSum(SqlFunc.IIF(x.Id != null, 1, 0)),
  1265. ScreenApproval = SqlFunc.AggregateSum(SqlFunc.IIF(x.Status == EScreenStatus.Approval || x.Status == EScreenStatus.Apply, 1, 0)),
  1266. ScreenPass = SqlFunc.AggregateSum(SqlFunc.IIF(x.Status == EScreenStatus.End, 1, 0)),
  1267. ScreenNotPass = SqlFunc.AggregateSum(SqlFunc.IIF(x.Status == EScreenStatus.Refuse, 1, 0)),
  1268. SatisfactionCount = 0,
  1269. NotSatisfactionCount = 0,
  1270. })
  1271. .MergeTable();
  1272. #endregion
  1273. #region 满意度
  1274. //满意度
  1275. var orderVisit = _orderVisitDetailRepository.Queryable()
  1276. .LeftJoin<OrderVisit>((x, o) => x.VisitId == o.Id)
  1277. .LeftJoin<Order>((x, o, p) => o.OrderId == p.Id)
  1278. .Where((x, o) => x.OrderVisit.VisitTime >= dto.StartTime && x.OrderVisit.VisitTime <= dto.EndTime && x.VisitTarget == EVisitTarget.Org && x.OrderVisit.VisitState == EVisitState.Visited && !string.IsNullOrEmpty(x.VisitOrgCode))
  1279. .WhereIF(dto.OrgCode == "001", (x, o) => x.VisitOrgCode == dto.OrgCode)
  1280. .WhereIF(dto.OrgCode != "001", (x, o) => x.VisitOrgCode.StartsWith(dto.OrgCode))
  1281. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (x, o, p) => p.Source == ESource.ProvinceStraight)
  1282. .Select((x, o) => new
  1283. {
  1284. OrgCode = x.VisitOrgCode.Substring(0, dto.OrgCode.Length + 3),
  1285. x.OrgProcessingResults
  1286. })
  1287. .MergeTable()
  1288. .GroupBy(x => new { x.OrgCode })
  1289. .Select(x => new DepartmentalProcessingStatisticsDataDto
  1290. {
  1291. OrgCode = x.OrgCode,
  1292. // OrderCountNum = 0,//总量
  1293. YbOrderCountNum = 0,//已办
  1294. ZbOrderCountNum = 0,//在办
  1295. Archived = 0,
  1296. ToBeArchived = 0,
  1297. WaitPublished = 0,
  1298. PublishedOpen = 0,
  1299. PublishedNoOpen = 0,
  1300. YbOverdue = 0,
  1301. ZbOverdue = 0,
  1302. CompleteOnTime = 0,
  1303. HqybOverdue = 0,
  1304. HqzbOverdue = 0,
  1305. DelayEnd = 0,
  1306. DelayWait = 0,
  1307. OrderDelayCount = 0,
  1308. ScreenCount = 0,
  1309. ScreenApproval = 0,
  1310. ScreenPass = 0,
  1311. ScreenNotPass = 0,
  1312. SatisfactionCount = SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") != "2", 1, 0)),
  1313. NotSatisfactionCount = SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonField(x.OrgProcessingResults, "Key") == "2", 1, 0))
  1314. })
  1315. .MergeTable();
  1316. #endregion
  1317. //联合查询
  1318. return _orderRepository.OrderUnionAll(queryOrder, queryPublish, queryCountersign, orderDelay, orderScreen, orderVisit)
  1319. .LeftJoin<SystemOrganize>((p, o) => p.OrgCode == o.Id)
  1320. .Select((p, o) => new DepartmentalProcessingStatisticsDataDto
  1321. {
  1322. OrgCode = p.OrgCode,
  1323. OrgName = o.Name,
  1324. OrgType = o.OrgType,
  1325. //OrderCountNum = p.OrderCountNum,
  1326. YbOrderCountNum = p.YbOrderCountNum,
  1327. ZbOrderCountNum = p.ZbOrderCountNum,
  1328. Archived = p.Archived,
  1329. ToBeArchived = p.ToBeArchived,
  1330. WaitPublished = p.WaitPublished,
  1331. PublishedOpen = p.PublishedOpen,
  1332. PublishedNoOpen = p.PublishedNoOpen,
  1333. YbOverdue = p.YbOverdue,
  1334. ZbOverdue = p.ZbOverdue,
  1335. CompleteOnTime = p.CompleteOnTime,
  1336. HqybOverdue = p.HqybOverdue,
  1337. HqzbOverdue = p.HqzbOverdue,
  1338. DelayEnd = p.DelayEnd,
  1339. DelayWait = p.DelayWait,
  1340. OrderDelayCount = p.OrderDelayCount,
  1341. ScreenCount = p.ScreenCount,
  1342. ScreenApproval = p.ScreenApproval,
  1343. ScreenPass = p.ScreenPass,
  1344. ScreenNotPass = p.ScreenNotPass,
  1345. SatisfactionCount = p.SatisfactionCount,
  1346. NotSatisfactionCount = p.NotSatisfactionCount
  1347. })
  1348. .MergeTable()
  1349. .WhereIF(string.IsNullOrEmpty(dto.OrgName) == false, x => x.OrgName.Contains(dto.OrgName));
  1350. }
  1351. /// <summary>
  1352. /// 部门办件统计表--明细
  1353. /// </summary>
  1354. /// <param name="dto"></param>
  1355. /// <returns></returns>
  1356. public ISugarQueryable<SelectOrderId> GetDepartmentalProcessingStatisticsList(DepartmentalProcessingStatisticsRequest dto, CancellationToken cancellationToken)
  1357. {
  1358. dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
  1359. RefAsync<int> total = 0;
  1360. string stye = "";
  1361. switch (dto.StatisticsType)
  1362. {
  1363. case EStatisticsType.YBOrderCountNum:
  1364. //工单
  1365. stye = "0";
  1366. break;
  1367. case EStatisticsType.ToBeArchived:
  1368. case EStatisticsType.Archived:
  1369. case EStatisticsType.YBOverdue:
  1370. //工单
  1371. stye = "1";
  1372. break;
  1373. case EStatisticsType.WaitPublished:
  1374. case EStatisticsType.PublishedOpen:
  1375. case EStatisticsType.PublishedNoOpen:
  1376. //发布
  1377. stye = "2";
  1378. break;
  1379. case EStatisticsType.OrderDelayCount:
  1380. //延期
  1381. stye = "3";
  1382. break;
  1383. case EStatisticsType.ScreenCount:
  1384. case EStatisticsType.ScreenApproval:
  1385. case EStatisticsType.ScreenPass:
  1386. case EStatisticsType.ScreenNotPass:
  1387. //甄别
  1388. stye = "4";
  1389. break;
  1390. case EStatisticsType.HQYBOverdue:
  1391. case EStatisticsType.HQZBOverdue:
  1392. case EStatisticsType.DelayEnd:
  1393. case EStatisticsType.DelayWait:
  1394. case EStatisticsType.ZBOrderCountNum:
  1395. case EStatisticsType.ZBOverdue:
  1396. //会签
  1397. stye = "5";
  1398. break;
  1399. case EStatisticsType.SubtotalOverdue:
  1400. //超期总数
  1401. stye = "6";
  1402. break;
  1403. default:
  1404. break;
  1405. }
  1406. #region 工单已办
  1407. if (stye == "0")
  1408. {
  1409. var ybQuery = _orderRepository.Queryable()
  1410. .Where(it => it.CreationTime >= dto.StartTime && it.CreationTime <= dto.EndTime && it.Status > EOrderStatus.WaitForAccept)
  1411. .WhereIF(dto.OrgCode == "001", it => it.ActualHandleOrgCode == dto.OrgCode)
  1412. .WhereIF(dto.OrgCode != "001", it => it.ActualHandleOrgCode.StartsWith(dto.OrgCode))
  1413. .WhereIF(dto.StatisticsType == EStatisticsType.YBOrderCountNum, it => it.Status >= EOrderStatus.Filed)//已办
  1414. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, it => it.Source == ESource.ProvinceStraight)
  1415. .Select(it => new SelectOrderId { Id = it.Id })
  1416. .MergeTable();
  1417. //var hqybquery = _workflowStepHandleRepository.Queryable()
  1418. // .LeftJoin<WorkflowTrace>((x, o) => x.WorkflowStepId == o.StepId)
  1419. var hqybquery = _workflowTraceRepository.Queryable()
  1420. .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
  1421. .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && t.CreationTime >= dto.StartTime && t.CreationTime <= dto.EndTime)
  1422. .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
  1423. .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
  1424. .WhereIF(dto.StatisticsType == EStatisticsType.YBOrderCountNum, (t, o) => t.Status >= EWorkflowStepStatus.Handled && t.CountersignPosition > ECountersignPosition.None)//会签已办
  1425. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
  1426. .Select((t, o) => new SelectOrderId { Id = o.Id })
  1427. .MergeTable();
  1428. var queryData = _orderRepository.OrderListUnionAll(ybQuery, hqybquery).GroupBy(p => p.Id).MergeTable();
  1429. return queryData;
  1430. }
  1431. #endregion
  1432. #region 工单
  1433. if (stye == "1")
  1434. {
  1435. //工单
  1436. var queryData = _orderRepository.Queryable()
  1437. .Where(o => o.CreationTime >= dto.StartTime && o.CreationTime <= dto.EndTime && o.Status > EOrderStatus.WaitForAccept)
  1438. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, o => o.Source == ESource.ProvinceStraight)
  1439. .WhereIF(dto.OrgCode == "001", o => o.ActualHandleOrgCode == dto.OrgCode)
  1440. .WhereIF(dto.OrgCode != "001", o => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
  1441. .WhereIF(dto.StatisticsType == EStatisticsType.Archived, o => o.Status >= EOrderStatus.Filed)//已归档
  1442. .WhereIF(dto.StatisticsType == EStatisticsType.ToBeArchived, o => o.Status < EOrderStatus.WaitForAccept)//待归档--没得待归档数据
  1443. .WhereIF(dto.StatisticsType == EStatisticsType.YBOverdue, o => o.Status >= EOrderStatus.Filed && o.ActualHandleTime > o.ExpiredTime)//已办超期
  1444. .OrderByDescending(o => o.CreationTime)
  1445. .Select(o => new SelectOrderId { Id = o.Id })
  1446. .MergeTable();
  1447. return queryData;
  1448. }
  1449. #endregion
  1450. #region 发布
  1451. if (stye == "2")
  1452. {
  1453. //发布
  1454. var queryPublish = _orderPublishRepository.Queryable()
  1455. .LeftJoin<Order>((x, o) => x.OrderId == o.Id)
  1456. .Where((x, o) => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
  1457. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (x, o) => o.Source == ESource.ProvinceStraight)
  1458. .WhereIF(dto.OrgCode == "001", (x, o) => o.ActualHandleOrgCode == dto.OrgCode)
  1459. .WhereIF(dto.OrgCode != "001", (x, o) => o.ActualHandleOrgCode.StartsWith(dto.OrgCode))
  1460. .WhereIF(dto.StatisticsType == EStatisticsType.WaitPublished, (x, o) => o.Status == EOrderStatus.Filed)//待发布 --已归档的就是待发布
  1461. .WhereIF(dto.StatisticsType == EStatisticsType.PublishedOpen, (x, o) => o.Status >= EOrderStatus.Published && x.PublishState)//已发布公开
  1462. .WhereIF(dto.StatisticsType == EStatisticsType.PublishedNoOpen, (x, o) => o.Status == EOrderStatus.Published && !x.PublishState)//已发布不公开
  1463. .OrderByDescending((x, o) => o.CreationTime)
  1464. .Select((x, o) => new SelectOrderId { Id = o.Id })
  1465. .MergeTable();
  1466. return queryPublish;
  1467. }
  1468. #endregion
  1469. #region 延期
  1470. if (stye == "3")
  1471. {
  1472. //延期
  1473. var orderDelay = _orderDelayRepository.Queryable()
  1474. .LeftJoin<Order>((x, o) => x.OrderId == o.Id)
  1475. .Where((x, o) => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
  1476. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (x, o) => o.Source == ESource.ProvinceStraight)
  1477. .WhereIF(dto.OrgCode == "001", (x, o) => x.ApplyOrgCode == dto.OrgCode)
  1478. .WhereIF(dto.OrgCode != "001", (x, o) => x.ApplyOrgCode.StartsWith(dto.OrgCode))
  1479. .WhereIF(dto.StatisticsType == EStatisticsType.OrderDelayCount, (x, o) => x.DelayState == EDelayState.Pass)//延期次数
  1480. .OrderByDescending((x, o) => o.CreationTime)
  1481. .Select((x, o) => new SelectOrderId { Id = o.Id })
  1482. .MergeTable();
  1483. return orderDelay;
  1484. }
  1485. #endregion
  1486. #region 甄别
  1487. if (stye == "4")
  1488. {
  1489. //甄别
  1490. var orderScreen = _orderScreenRepository.Queryable()
  1491. .LeftJoin<Order>((x, o) => x.OrderId == o.Id)
  1492. .Where((x, o) => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
  1493. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (x, o) => o.Source == ESource.ProvinceStraight)
  1494. .WhereIF(dto.OrgCode == "001", (x, o) => x.CreatorOrgId == dto.OrgCode)
  1495. .WhereIF(dto.OrgCode != "001", (x, o) => x.CreatorOrgId.StartsWith(dto.OrgCode))
  1496. .WhereIF(dto.StatisticsType == EStatisticsType.ScreenCount, (x, o) => x.Id != null)//申请总量
  1497. .WhereIF(dto.StatisticsType == EStatisticsType.ScreenApproval, (x, o) => x.Status == EScreenStatus.Approval || x.Status == EScreenStatus.Apply)//待甄别
  1498. .WhereIF(dto.StatisticsType == EStatisticsType.ScreenPass, (x, o) => x.Status == EScreenStatus.End)//甄别通过
  1499. .WhereIF(dto.StatisticsType == EStatisticsType.ScreenNotPass, (x, o) => x.Status == EScreenStatus.Refuse)//甄别不通过
  1500. .OrderByDescending((x, o) => o.CreationTime)
  1501. .Select((x, o) => new SelectOrderId { Id = o.Id })
  1502. .MergeTable();
  1503. return orderScreen;
  1504. }
  1505. #endregion
  1506. #region 会签(已办超期、待办超期)
  1507. if (stye == "5")
  1508. {
  1509. //会签(已办超期、待办超期)
  1510. var queryCountersign = _workflowTraceRepository.Queryable()
  1511. .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
  1512. .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && t.CreationTime >= dto.StartTime && t.CreationTime <= dto.EndTime)
  1513. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
  1514. .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
  1515. .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
  1516. .WhereIF(dto.StatisticsType == EStatisticsType.HQYBOverdue, (t, o) => t.Status >= EWorkflowStepStatus.Handled && t.HandleTime > t.StepExpiredTime && t.CountersignPosition > ECountersignPosition.None)//会签已办超期
  1517. .WhereIF(dto.StatisticsType == EStatisticsType.HQZBOverdue, (t, o) => t.Status < EWorkflowStepStatus.Handled && DateTime.Now >= t.StepExpiredTime && t.CountersignPosition > ECountersignPosition.None)//会签待办超期
  1518. .WhereIF(dto.StatisticsType == EStatisticsType.DelayEnd, (t, o) => t.Status >= EWorkflowStepStatus.Handled && t.CountersignPosition > ECountersignPosition.None)//会签已办
  1519. .WhereIF(dto.StatisticsType == EStatisticsType.DelayWait, (t, o) => t.Status < EWorkflowStepStatus.Handled && t.CountersignPosition > ECountersignPosition.None)//会签待办
  1520. .WhereIF(dto.StatisticsType == EStatisticsType.ZBOrderCountNum, (t, o) => t.Status < EWorkflowStepStatus.Handled)//在办总量
  1521. .WhereIF(dto.StatisticsType == EStatisticsType.ZBOverdue, (t, o) => t.Status < EWorkflowStepStatus.Handled && DateTime.Now >= t.StepExpiredTime)//在办超期
  1522. .OrderByDescending((t, o) => o.CreationTime)
  1523. .Select((t, o) => new SelectOrderId { Id = o.Id })
  1524. .MergeTable()
  1525. .GroupBy(p => p.Id)
  1526. .MergeTable();
  1527. return queryCountersign;
  1528. }
  1529. #endregion
  1530. #region 超期件数
  1531. //超期件数
  1532. if (stye == "6")
  1533. {
  1534. var queryOrder = _orderRepository.Queryable()
  1535. .Where(it => it.CreationTime >= dto.StartTime && it.CreationTime <= dto.EndTime && it.Status > EOrderStatus.WaitForAccept)
  1536. .WhereIF(dto.OrgCode == "001", it => it.ActualHandleOrgCode == dto.OrgCode)
  1537. .WhereIF(dto.OrgCode != "001", it => it.ActualHandleOrgCode.StartsWith(dto.OrgCode))
  1538. .WhereIF(dto.StatisticsType == EStatisticsType.SubtotalOverdue, it => (it.Status >= EOrderStatus.Filed && it.ActualHandleTime > it.ExpiredTime))//已办超期
  1539. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, it => it.Source == ESource.ProvinceStraight)
  1540. .Select(it => new SelectOrderId { Id = it.Id })
  1541. .MergeTable();
  1542. //会签(已办超期、待办超期)
  1543. //var queryCountersign = _workflowStepHandleRepository.Queryable()
  1544. //.LeftJoin<WorkflowTrace>((x, o) => x.WorkflowStepId == o.StepId)
  1545. var queryCountersign = _workflowTraceRepository.Queryable()
  1546. .LeftJoin<Order>((t, o) => t.ExternalId == o.Id)
  1547. .Where((t, o) => t.ModuleCode == WorkflowModuleConsts.OrderHandle && t.CreationTime >= dto.StartTime && t.CreationTime <= dto.EndTime)
  1548. .WhereIF(dto.IsProvince.HasValue && dto.IsProvince == true, (t, o) => o.Source == ESource.ProvinceStraight)
  1549. .WhereIF(dto.OrgCode == "001", (t, o) => t.HandlerOrgId == dto.OrgCode)
  1550. .WhereIF(dto.OrgCode != "001", (t, o) => t.HandlerOrgId.StartsWith(dto.OrgCode))
  1551. .WhereIF(dto.StatisticsType == EStatisticsType.SubtotalOverdue, (t, o) => (t.Status >= EWorkflowStepStatus.Handled && t.CountersignPosition > ECountersignPosition.None && t.HandleTime > t.StepExpiredTime)
  1552. || (t.Status < EWorkflowStepStatus.Handled && t.CountersignPosition > ECountersignPosition.None && DateTime.Now >= t.StepExpiredTime)
  1553. || (t.Status < EWorkflowStepStatus.Handled && DateTime.Now >= t.StepExpiredTime))//会签已办超期/会签待办超期/待办超期
  1554. .Select((t, o) => new SelectOrderId { Id = o.Id })
  1555. .MergeTable();
  1556. var queryData = _orderRepository.OrderListUnionAll(queryOrder, queryCountersign).GroupBy(x => x.Id).MergeTable();
  1557. return queryData;
  1558. }
  1559. #endregion
  1560. return null;
  1561. }
  1562. /// <summary>
  1563. /// 部门延期统计
  1564. /// </summary>
  1565. /// <param name="dto"></param>
  1566. /// <returns></returns>
  1567. public ISugarQueryable<BiOrderDelayDataDto> QueryOrderDelayDataList(QueryOrderDelayDataListRequest dto)
  1568. {
  1569. if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
  1570. dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
  1571. var IsCenter = _sessionContext.OrgIsCenter;
  1572. return _orderDelayRepository.Queryable()
  1573. .LeftJoin<SystemOrganize>((x, o) => x.ApplyOrgCode == o.Id)
  1574. .WhereIF(dto.StartTime.HasValue, (x, o) => x.CreationTime >= dto.StartTime)
  1575. .WhereIF(dto.EndTime.HasValue, (x, o) => x.CreationTime <= dto.EndTime)
  1576. .WhereIF(!string.IsNullOrEmpty(dto.OrgName), x => x.ApplyOrgName.Contains(dto.OrgName))
  1577. .WhereIF(IsCenter == false, x => x.ApplyOrgCode.StartsWith(_sessionContext.RequiredOrgId))
  1578. .GroupBy(x => new { x.ApplyOrgCode, x.ApplyOrgName })
  1579. .Select(x => new BiOrderDelayDataDto
  1580. {
  1581. OrgName = x.ApplyOrgName,
  1582. OrgCode = x.ApplyOrgCode,
  1583. PassTotal = SqlFunc.AggregateSum(SqlFunc.IIF(x.DelayState == EDelayState.Pass, 1, 0)),
  1584. NoPassTotal = SqlFunc.AggregateSum(SqlFunc.IIF(x.DelayState == EDelayState.NoPass, 1, 0)),
  1585. ExaminingTotal = SqlFunc.AggregateSum(SqlFunc.IIF(x.DelayState == EDelayState.Examining, 1, 0)),
  1586. AllTotal = SqlFunc.AggregateSum(SqlFunc.IIF(x.DelayState == EDelayState.Pass, 1, 0)) + SqlFunc.AggregateSum(SqlFunc.IIF(x.DelayState == EDelayState.NoPass, 1, 0)) + SqlFunc.AggregateSum(SqlFunc.IIF(x.DelayState == EDelayState.Examining, 1, 0))
  1587. }).MergeTable();
  1588. }
  1589. /// <summary>
  1590. /// 部门延期统计明细
  1591. /// </summary>
  1592. /// <param name="dto"></param>
  1593. /// <returns></returns>
  1594. public ISugarQueryable<OrderDelay> QueryOrderDelayDataDetail(QueryOrderDelayDataDetailRequest dto)
  1595. {
  1596. if (!dto.StartTime.HasValue || !dto.EndTime.HasValue) throw UserFriendlyException.SameMessage("请选择时间!");
  1597. dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
  1598. return _orderDelayRepository.Queryable()
  1599. .Includes(x => x.Order)
  1600. .WhereIF(dto.StartTime.HasValue, x => x.CreationTime >= dto.StartTime)
  1601. .WhereIF(dto.EndTime.HasValue, x => x.CreationTime <= dto.EndTime)
  1602. .WhereIF(!string.IsNullOrEmpty(dto.OrgCode), x => x.ApplyOrgCode == dto.OrgCode)
  1603. .WhereIF(dto.Type is 1, x => x.DelayState == EDelayState.Pass)
  1604. .WhereIF(dto.Type is 2, x => x.DelayState == EDelayState.NoPass)
  1605. .WhereIF(dto.Type is 3, x => x.DelayState == EDelayState.Examining)
  1606. .WhereIF(dto.Type is 4, x => x.DelayState < EDelayState.Withdraw)
  1607. .MergeTable();
  1608. }
  1609. /// <summary>
  1610. /// 部门受理类型统计周期
  1611. /// </summary>
  1612. /// <param name="dto"></param>
  1613. /// <returns></returns>
  1614. public ISugarQueryable<DepartmentAcceptanceTypeStatisticsDto> DepartmentAcceptanceTypeStatistics(DepartmentKeyWordRequest dto)
  1615. {
  1616. dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
  1617. var IsCenter = _sessionContext.OrgIsCenter;
  1618. var orderData = _orderRepository.Queryable()
  1619. .Where(it => it.CreationTime >= dto.StartTime && it.CreationTime <= dto.EndTime && it.Status >= EOrderStatus.Filed)
  1620. .Select(it => new
  1621. {
  1622. OrgCode = IsCenter == true ? it.ActualHandleOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")) : it.ActualHandleOrgCode.Substring(0, _sessionContext.RequiredOrgId.Length + 3),
  1623. AcceptTypeCode = it.AcceptTypeCode,
  1624. ProcessType = it.ProcessType,
  1625. AllTime = it.ProcessType == EProcessType.Zhiban ? it.CreationTimeHandleDurationWorkday : it.CenterToOrgHandleDurationWorkday
  1626. })
  1627. .MergeTable()
  1628. .LeftJoin<SystemOrganize>((it, o) => it.OrgCode == o.Id)
  1629. //.WhereIF(TypeCode == 1, (it, o) => it.OrgCode == "001")
  1630. //.WhereIF(TypeCode == 2, (it, o) => it.OrgCode != "001")
  1631. .WhereIF(dto.TypeCode == 1, (it, o) => it.ProcessType == EProcessType.Zhiban)
  1632. .WhereIF(dto.TypeCode == 2, (it, o) => it.ProcessType == EProcessType.Jiaoban)
  1633. .WhereIF(IsCenter == false, (it, o) => it.OrgCode.StartsWith(_sessionContext.RequiredOrgId))
  1634. .GroupBy((it, o) => new
  1635. {
  1636. it.OrgCode,
  1637. o.Name,
  1638. o.OrgType
  1639. })
  1640. .Select((it, o) => new DepartmentAcceptanceTypeStatisticsDto
  1641. {
  1642. OrgName = it.OrgCode == "001" ? "市民热线服务中心" : o.Name,
  1643. OrgCode = it.OrgCode,
  1644. OrgType = o.OrgType == EOrgType.County ? "区县部门" : "市直部门",
  1645. ZxAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "10", 1, 0)),
  1646. ZxAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "10" && it.AllTime != null, it.AllTime, 0)),
  1647. ZxAcceptanceTypeCode = "10",
  1648. JyAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "15", 1, 0)),
  1649. JyAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "15" && it.AllTime != null, it.AllTime, 0)),
  1650. JyAcceptanceTypeCode = "15",
  1651. QzAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "20", 1, 0)),
  1652. QzAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "20" && it.AllTime != null, it.AllTime, 0)),
  1653. QzAcceptanceTypeCode = "20",
  1654. ByAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "25", 1, 0)),
  1655. ByAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "25" && it.AllTime != null, it.AllTime, 0)),
  1656. ByAcceptanceTypeCode = "25",
  1657. JbAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "30", 1, 0)),
  1658. JbAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "30" && it.AllTime != null, it.AllTime, 0)),
  1659. JbAcceptanceTypeCode = "30",
  1660. TsAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "35", 1, 0)),
  1661. TsAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "35" && it.AllTime != null, it.AllTime, 0)),
  1662. TsAcceptanceTypeCode = "35",
  1663. QtAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "40", 1, 0)),
  1664. QtAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "40" && it.AllTime != null, it.AllTime, 0)),
  1665. QtAcceptanceTypeCode = "40",
  1666. YjAllCount = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "1", 1, 0)),
  1667. YjAllTimes = SqlFunc.AggregateSum(SqlFunc.IIF(it.AcceptTypeCode == "1" && it.AllTime != null, it.AllTime, 0)),
  1668. YjAcceptanceTypeCode = "1"
  1669. }).MergeTable();
  1670. return orderData;
  1671. }
  1672. /// <summary>
  1673. /// 部门受理类型统计周期--明细列表
  1674. /// </summary>
  1675. /// <param name="dto"></param>
  1676. /// <returns></returns>
  1677. public ISugarQueryable<Order> DepartmentAcceptanceTypeOrderList(DepartmentKeyWordRequest dto)
  1678. {
  1679. dto.EndTime = dto.EndTime.AddDays(1).AddSeconds(-1);
  1680. return _orderRepository.Queryable()
  1681. .Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime && p.Status >= EOrderStatus.Filed)
  1682. .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode == "001", p => p.ActualHandleOrgCode == dto.OrgCode)
  1683. .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != "001" && _sessionContext.RequiredOrgId != dto.OrgCode, p => p.ActualHandleOrgCode.StartsWith(dto.OrgCode))
  1684. .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && dto.OrgCode != "001" && _sessionContext.RequiredOrgId == dto.OrgCode, p => p.ActualHandleOrgCode == dto.OrgCode)
  1685. .WhereIF(!string.IsNullOrEmpty(dto.AcceptTypeCode), p => p.AcceptTypeCode == dto.AcceptTypeCode)
  1686. .WhereIF(dto.TypeCode == 1, p => p.ProcessType == EProcessType.Zhiban)
  1687. .WhereIF(dto.TypeCode == 2, p => p.ProcessType == EProcessType.Jiaoban)
  1688. .OrderByDescending(d => d.CreationTime)
  1689. .MergeTable();
  1690. }
  1691. }
  1692. }