OrderReportApplication.cs 119 KB

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