StatisticsDto.cs 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629
  1. using Hotline.Share.Enums.Order;
  2. using Hotline.Share.Requests;
  3. using Hotline.Share.Tools;
  4. using Newtonsoft.Json;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.ComponentModel.DataAnnotations;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Text.Json.Serialization;
  11. using System.Threading.Tasks;
  12. using XF.Utility.EnumExtensions;
  13. using JsonIgnoreAttribute = System.Text.Json.Serialization.JsonIgnoreAttribute;
  14. namespace Hotline.Share.Dtos.Snapshot;
  15. public record RedPackStatisticsDetailsInDto : PagedRequest
  16. {
  17. [Required]
  18. public DateTime StartTime { get; set; }
  19. [Required]
  20. public DateTime EndTime { get; set; }
  21. /// <summary>
  22. /// 字段名称
  23. /// </summary>
  24. [Required]
  25. public string FieldName { get; set; }
  26. /// <summary>
  27. /// 行业Id
  28. /// </summary>
  29. [Required]
  30. public string? IndustryId { get; set; }
  31. /// <summary>
  32. /// 行业类型
  33. /// </summary>
  34. [Required]
  35. public int IndustryType { get; set; }
  36. }
  37. public class RedPackStatisticsDetailsOutDto
  38. {
  39. /// <summary>
  40. /// Id
  41. /// </summary>
  42. public string Id { get; set; }
  43. /// <summary>
  44. /// 过期状态
  45. /// </summary>
  46. public EExpiredStatus? ExpiredStatus => FiledTime.CalculateExpiredState(Status, this.ExpiredTime, this.NearlyExpiredTime, this.NearlyExpiredTimeOne);
  47. /// <summary>
  48. /// 过期状态
  49. /// </summary>
  50. public string ExpiredStatusText => ExpiredStatus.GetDescription();
  51. /// <summary>
  52. /// 受理编号
  53. /// </summary>
  54. public string No { get; set; }
  55. /// <summary>
  56. /// 信件状态
  57. /// </summary>
  58. public EOrderStatus Status { get; set; }
  59. /// <summary>
  60. /// 信件状态
  61. /// </summary>
  62. public string StatusTxt => Status.GetDescription();
  63. /// <summary>
  64. /// 来源
  65. /// </summary>
  66. public string SourceChannel { get; set; }
  67. /// <summary>
  68. /// 当前节点
  69. /// </summary>
  70. public string CurrentStepName { get; set; }
  71. /// <summary>
  72. /// 重办次数
  73. /// </summary>
  74. public int ReTransactNum { get; set; }
  75. /// <summary>
  76. /// 是否紧急
  77. /// </summary>
  78. public bool IsUrgent { get; set; }
  79. /// <summary>
  80. /// 是否紧急
  81. /// </summary>
  82. public string IsUrgentText => IsUrgent ? "紧急" : "-";
  83. /// <summary>
  84. /// 期满时间
  85. /// </summary>
  86. public DateTime? ExpiredTime { get; set; }
  87. /// <summary>
  88. /// 即将超期时间
  89. /// </summary>
  90. public DateTime? NearlyExpiredTime { get; set; }
  91. /// <summary>
  92. /// 即将超期时间第一级
  93. /// </summary>
  94. public DateTime? NearlyExpiredTimeOne { get; set; }
  95. /// <summary>
  96. /// 是否超期
  97. /// </summary>
  98. public bool IsExpired
  99. {
  100. get
  101. {
  102. if (ExpiredTime.HasValue)
  103. return DateTime.Now > ExpiredTime.Value;
  104. return false;
  105. }
  106. }
  107. /// <summary>
  108. /// 受理时间
  109. /// </summary>
  110. public DateTime CreationTime { get; set; }
  111. /// <summary>
  112. /// 标题
  113. /// </summary>
  114. public string Title { get; set; }
  115. /// <summary>
  116. /// 行业
  117. /// </summary>
  118. public string IndustryName { get; set; }
  119. /// <summary>
  120. /// 办理时长
  121. /// </summary>
  122. public double CreationTimeHandleDuration { get; set; }
  123. /// <summary>
  124. /// 区域
  125. /// </summary>
  126. public string County { get; set; }
  127. /// <summary>
  128. /// 电话
  129. /// </summary>
  130. public string Contact { get; set; }
  131. /// <summary>
  132. /// 受理期满时间
  133. /// </summary>
  134. public DateTime? AcceptExpiredTime { get; set; }
  135. /// <summary>
  136. /// 接办部门
  137. /// </summary>
  138. public string ActualHandleOrgName { get; set; }
  139. /// <summary>
  140. /// 接办时间
  141. /// </summary>
  142. public DateTime? StartTime { get; set; }
  143. /// <summary>
  144. /// 办结时间
  145. /// </summary>
  146. public DateTime? FiledTime { get; set; }
  147. /// <summary>
  148. /// 受理类型
  149. /// </summary>
  150. public string AcceptType { get; set; }
  151. /// <summary>
  152. /// 热点类型
  153. /// </summary>
  154. public string HotspotName { get; set; }
  155. /// <summary>
  156. /// 受理人
  157. /// </summary>
  158. public string AcceptorName { get; set; }
  159. /// <summary>
  160. /// 受理内容
  161. /// </summary>
  162. public string Content { get; set; }
  163. /// <summary>
  164. /// 办理结果
  165. /// </summary>
  166. public string FileOpinion { get; set; }
  167. }
  168. public class RedPackStatisticsInDto
  169. {
  170. public DateTime StartTime { get; set; }
  171. public DateTime EndTime { get; set; }
  172. }
  173. public class RedPackStatisticsOutDto
  174. {
  175. /// <summary>
  176. /// 行业类型
  177. /// </summary>
  178. [JsonIgnore]
  179. [Newtonsoft.Json.JsonIgnore]
  180. public string CaseName { get; set; }
  181. /// <summary>
  182. /// 行业类型Id
  183. /// </summary>
  184. [JsonIgnore]
  185. [Newtonsoft.Json.JsonIgnore]
  186. public string CaseId { get; set; }
  187. /// <summary>
  188. /// 行业Id
  189. /// </summary>
  190. [JsonIgnore]
  191. [Newtonsoft.Json.JsonIgnore]
  192. public string? Id { get; set; }
  193. /// <summary>
  194. /// 行业名字
  195. /// </summary>
  196. [JsonIgnore]
  197. [Newtonsoft.Json.JsonIgnore]
  198. public string Name { get; set; }
  199. /// <summary>
  200. /// 配置金额(后端逻辑用, 前端不显示)
  201. /// </summary>
  202. [JsonIgnore]
  203. [Newtonsoft.Json.JsonIgnore]
  204. public double? ShouldAmount { get; set; } = 0;
  205. /// <summary>
  206. /// 审批同意总金额
  207. /// </summary>
  208. public double? ApprovalAmount { get; set; } = 0;
  209. /// <summary>
  210. /// 审批同意总金额
  211. /// </summary>
  212. public string? ApprovalAmountTxt => ApprovalAmount?.ToString("f2");
  213. /// <summary>
  214. /// 审批同意总个数
  215. /// </summary>
  216. public int ApprovalCount { get; set; }
  217. /// <summary>
  218. /// 发送成功金额
  219. /// </summary>
  220. public double? SentAmount { get; set; } = 0;
  221. /// <summary>
  222. /// 发送成功金额
  223. /// </summary>
  224. public string? SentAmountTxt => SentAmount?.ToString("f2");
  225. /// <summary>
  226. /// 发送成功个数
  227. /// </summary>
  228. public int SentCount { get; set; }
  229. /// <summary>
  230. /// 发送失败金额
  231. /// </summary>
  232. public double SendFailAmount { get; set; } = 0;
  233. /// <summary>
  234. /// 发送失败金额
  235. /// </summary>
  236. public string? SendFailAmountTxt => SendFailAmount.ToString("f2");
  237. /// <summary>
  238. /// 发送失败个数
  239. /// </summary>
  240. public int SendFailCount { get; set; }
  241. /// <summary>
  242. /// 待发金额
  243. /// </summary>
  244. public double? PendingAmount { get; set; } = 0;
  245. /// <summary>
  246. /// 待发金额
  247. /// </summary>
  248. public string? PendingAmountTxt => PendingAmount?.ToString("f2");
  249. /// <summary>
  250. /// 待发个数
  251. /// </summary>
  252. public int PendingCount { get; set; }
  253. /// <summary>
  254. /// 补充红包金额
  255. /// </summary>
  256. public double? SupplementAmount { get; set; } = 0;
  257. /// <summary>
  258. /// 补充红包金额
  259. /// </summary>
  260. public string? SupplementAmountTxt => SupplementAmount?.ToString("f2");
  261. /// <summary>
  262. /// 补充红包数
  263. /// </summary>
  264. public int SupplementCount { get; set; }
  265. /// <summary>
  266. /// 行业类型名称
  267. /// </summary>
  268. public string? IndustryName { get; set; }
  269. /// <summary>
  270. /// 行业Id
  271. /// </summary>
  272. public string? IndustryId { get; set; }
  273. /// <summary>
  274. /// 行业类型
  275. /// </summary>
  276. public int IndustryType { get; set; }
  277. }
  278. /// <summary>
  279. /// 随手拍统计输出Dto
  280. /// </summary>
  281. public class SnapshotStatisticsOutDto
  282. {
  283. /// <summary>
  284. /// 随手拍来件数
  285. /// </summary>
  286. public int SSPLJS => WZSLFWNJS + SSPZ12345JS + SLFWNZJS;
  287. /// <summary>
  288. /// 未在受理范围内件数
  289. /// </summary>
  290. public int WZSLFWNJS { get; set; }
  291. /// <summary>
  292. /// 随手拍转12345件数
  293. /// </summary>
  294. public int SSPZ12345JS { get; set; }
  295. /// <summary>
  296. /// 受理范围内总件数
  297. /// </summary>
  298. public int SLFWNZJS { get; set; }
  299. /// <summary>
  300. /// 受理范围内派给各网格员件数
  301. /// </summary>
  302. public int SLFWNPGGWGYJS => SLFWNPGWGYSXSNHFJS + SLFWNPGWGYCGSXSHFJS + SLFWNPGWGYWHFJS;
  303. /// <summary>
  304. /// 受理范围内派给网格员四小时内回复件数
  305. /// </summary>
  306. public int SLFWNPGWGYSXSNHFJS { get; set; }
  307. /// <summary>
  308. /// 受理范围内派给网格员超过四小时回复件数
  309. /// </summary>
  310. public int SLFWNPGWGYCGSXSHFJS { get; set; }
  311. /// <summary>
  312. /// 受理范围内派给网格员未回复件数
  313. /// </summary>
  314. public int SLFWNPGWGYWHFJS { get; set; }
  315. /// <summary>
  316. /// 受理范围内按12345直派给各区县或部门件数
  317. /// </summary>
  318. public int SLFWNA12345ZPGGQXHBMJS => SLFWNA12345ZPGGBMJS + SLFWNA12345ZPGGQXJS;
  319. /// <summary>
  320. /// 受理范围内按12345直派给各部门件数
  321. /// </summary>
  322. public int SLFWNA12345ZPGGBMJS { get; set; }
  323. /// <summary>
  324. /// 受理范围内按12345直派给各区县件数
  325. /// </summary>
  326. public int SLFWNA12345ZPGGQXJS { get; set; }
  327. /// <summary>
  328. /// 受理范围内已办信件
  329. /// </summary>
  330. public int SLFWNYBXJ => ZXYB + BMYB;
  331. /// <summary>
  332. /// 中心已办
  333. /// </summary>
  334. public int ZXYB { get; set; }
  335. /// <summary>
  336. /// 部门已办
  337. /// </summary>
  338. public int BMYB { get; set; }
  339. /// <summary>
  340. /// 受理范围满意度
  341. /// </summary>
  342. public double SLFWMYD { get; set; }
  343. /// <summary>
  344. /// 受理范围满意度
  345. /// </summary>
  346. public string SLFWMYDTxt => SLFWMYD.ToString("f4") + "%";
  347. /// <summary>
  348. /// 满意量
  349. /// </summary>
  350. public int MYL { get; set; }
  351. /// <summary>
  352. /// 不满意量
  353. /// </summary>
  354. public int BMYL { get; set; }
  355. /// <summary>
  356. /// 审核发放奖励个数
  357. /// </summary>
  358. public int SHFFJLGS => SPBTYHBGS + SPTYHBGS;
  359. /// <summary>
  360. /// 审批不同意红包个数
  361. /// </summary>
  362. public int SPBTYHBGS { get; set; }
  363. /// <summary>
  364. /// 审批同意红包个数
  365. /// </summary>
  366. public int SPTYHBGS { get; set; }
  367. /// <summary>
  368. /// 特殊红包审批统计
  369. /// </summary>
  370. public int TSHBSP { get; set; }
  371. /// <summary>
  372. /// 审批同意个数
  373. /// </summary>
  374. public int SPTYGS { get; set; }
  375. /// <summary>
  376. /// 已发金额
  377. /// </summary>
  378. public double? YFJE { get; set; }
  379. /// <summary>
  380. /// 局审核发放网格员奖励个数
  381. /// </summary>
  382. public int JSHFFWGJLGS { get; set; }
  383. /// <summary>
  384. /// 审批同意(网格员)红包个数
  385. /// </summary>
  386. public int SPTYWGYHBGS { get; set; }
  387. /// <summary>
  388. /// 审批不同意(网格员)红包个数
  389. /// </summary>
  390. public int SPBTYWGYHBGS { get; set; }
  391. /// <summary>
  392. /// 市民奖励总额
  393. /// </summary>
  394. public double? SMJLZE { get; set; }
  395. /// <summary>
  396. /// 市民已发放奖励总额
  397. /// </summary>
  398. public double? SMYFFJLZE { get; set; }
  399. /// <summary>
  400. /// 市民待发奖励总额
  401. /// </summary>
  402. public double? SMDFFJLZE { get; set; }
  403. /// <summary>
  404. /// 已发(个)
  405. /// </summary>
  406. public int YFG { get; set; }
  407. /// <summary>
  408. /// 无法联系(个)
  409. /// </summary>
  410. public int WFLXG { get; set; }
  411. /// <summary>
  412. /// 婉拒红包(个)
  413. /// </summary>
  414. public int WJHBG { get; set; }
  415. /// <summary>
  416. /// 网格员应发奖励金额
  417. /// </summary>
  418. public double? WGYYFJLJE { get; set; }
  419. /// <summary>
  420. /// 网格员已发放奖励总额
  421. /// </summary>
  422. public double? WGYYFFJLZE { get; set; }
  423. /// <summary>
  424. /// 网格员待发放奖励总额
  425. /// </summary>
  426. public double? WGYDFFJLZE { get; set; }
  427. /// <summary>
  428. /// 网格员扣款总额(已发)
  429. /// </summary>
  430. public float WGYKKZEYF { get; set; }
  431. /// <summary>
  432. /// 网格员扣款总额(待发)
  433. /// </summary>
  434. public float WGYKKZEDF { get; set; }
  435. /// <summary>
  436. /// 受理范围内多部门会签件件数
  437. /// </summary>
  438. public int SLFWNDBMHQJJS { get; set; }
  439. /// <summary>
  440. /// 受理范围内热线中心归档件数
  441. /// </summary>
  442. public int SLFWNRXZXGDJS { get; set; }
  443. /// <summary>
  444. /// 热线中心发起会签件件数
  445. /// </summary>
  446. public int RXZXFQHQJJS { get; set; }
  447. /// <summary>
  448. /// 安全隐患
  449. /// </summary>
  450. public int AQYH { get; set; }
  451. /// <summary>
  452. /// 已完成安全隐患整改
  453. /// </summary>
  454. public int YWCAQYHZG { get; set; }
  455. /// <summary>
  456. /// 申请延期工单件数
  457. /// </summary>
  458. public int SQYQGDJS { get; set; }
  459. /// <summary>
  460. /// 申请延期工单次数
  461. /// </summary>
  462. public int SQYQGDCS { get; set; }
  463. /// <summary>
  464. /// 超期件
  465. /// </summary>
  466. public int CQJ { get; set; }
  467. /// <summary>
  468. /// 二次办理件数
  469. /// </summary>
  470. public int ECBLJS => ECBLJSTHBM + ECBLJSHFBMYCB + ECBLJSTTDYYJBM;
  471. /// <summary>
  472. /// 二次办理件数-退回部门
  473. /// </summary>
  474. public int ECBLJSTHBM { get; set; }
  475. /// <summary>
  476. /// 二次办理件数-回访不满意重办
  477. /// </summary>
  478. public int ECBLJSHFBMYCB { get; set; }
  479. /// <summary>
  480. /// 二次办理件数-回访满意
  481. /// </summary>
  482. public int ECBLJSHFMY { get; set; }
  483. /// <summary>
  484. /// 二次办理件数-特提到原一级部门
  485. /// </summary>
  486. public int ECBLJSTTDYYJBM { get; set; }
  487. /// <summary>
  488. /// 二次办理工单满意率
  489. /// </summary>
  490. public double ECBLGDMYL => ECBLJS == 0 ? 0 : (ECBLJSHFMY / ECBLJS) * 100;
  491. /// <summary>
  492. /// 二次办理工单满意率
  493. /// </summary>
  494. public string ECBLGDMYLTxt => ECBLGDMYL.ToString("f4") + "%";
  495. /// <summary>
  496. /// 二次办理工单件数-退回部门回访满意
  497. /// </summary>
  498. public int ECBLGDJSTMBMHFMYD { get; set; }
  499. /// <summary>
  500. /// 二次办理工单满意率-退回部门
  501. /// </summary>
  502. public double ECBLGDMYLTHBM => ECBLJSTHBM == 0 ? 0 : (ECBLGDJSTMBMHFMYD / ECBLJSTHBM) * 100;
  503. /// <summary>
  504. /// 二次办理工单满意率-退回部门
  505. /// </summary>
  506. public string ECBLGDMYLTHBMTxt => ECBLGDMYLTHBM.ToString("f4") + "%";
  507. /// <summary>
  508. /// 二次办理工单满意率-回访不满意重办
  509. /// </summary>
  510. public double ECBLGDMYLHFBMYCB => ECBLJS == 0 ? 0 : (ECBLJSHFBMYCB / ECBLJS) * 100;
  511. /// <summary>
  512. /// 二次办理工单满意率-回访不满意重办
  513. /// </summary>
  514. public string ECBLGDMYLHFBMYCBTxt => ECBLGDMYLHFBMYCB.ToString("f4") + "%";
  515. /// <summary>
  516. /// 特提件数
  517. /// </summary>
  518. public int TTJS => TTDYYJBMJS + TTDPDZJS + QTTTJS;
  519. /// <summary>
  520. /// 特提到原一级部门件数
  521. /// </summary>
  522. public int TTDYYJBMJS { get; set; }
  523. /// <summary>
  524. /// 特提到派单组件数
  525. /// </summary>
  526. public int TTDPDZJS { get; set; }
  527. /// <summary>
  528. /// 其他特提件数
  529. /// </summary>
  530. public int QTTTJS { get; set; }
  531. }
  532. /// <summary>
  533. /// 随手拍统计输入Dto
  534. /// </summary>
  535. public class SnapshotStatisticsInDto
  536. {
  537. /// <summary>
  538. /// 开始时间
  539. /// </summary>
  540. [Required]
  541. public DateTime StartTime { get; set; }
  542. /// <summary>
  543. /// 结束时间
  544. /// </summary>
  545. [Required]
  546. public DateTime EndTime { get; set; }
  547. /// <summary>
  548. /// 行业Id
  549. /// </summary>
  550. public string? IndustryId { get; set; }
  551. }
  552. public record SnapshotStatisticsDetailInDto : PagedRequest
  553. {
  554. /// <summary>
  555. /// 开始时间
  556. /// </summary>
  557. [Required]
  558. public DateTime StartTime { get; set; }
  559. /// <summary>
  560. /// 结束时间
  561. /// </summary>
  562. [Required]
  563. public DateTime EndTime { get; set; }
  564. /// <summary>
  565. /// 字段名称
  566. /// </summary>
  567. [Required]
  568. public string FieldName { get; set; }
  569. }
  570. public class SnapshotStatisticsDetailOutDto
  571. {
  572. /// <summary>
  573. /// Id
  574. /// </summary>
  575. public string Id { get; set; }
  576. /// <summary>
  577. /// 过期状态
  578. /// </summary>
  579. public EExpiredStatus? ExpiredStatus => FiledTime.CalculateExpiredState(Status, this.ExpiredTime, this.NearlyExpiredTime, this.NearlyExpiredTimeOne);
  580. /// <summary>
  581. /// 过期状态
  582. /// </summary>
  583. public string ExpiredStatusText => ExpiredStatus.GetDescription();
  584. /// <summary>
  585. /// 受理编号
  586. /// </summary>
  587. public string No { get; set; }
  588. /// <summary>
  589. /// 信件状态
  590. /// </summary>
  591. public EOrderStatus Status { get; set; }
  592. /// <summary>
  593. /// 信件状态
  594. /// </summary>
  595. public string StatusTxt => Status.GetDescription();
  596. /// <summary>
  597. /// 来源
  598. /// </summary>
  599. public string SourceChannel { get; set; }
  600. /// <summary>
  601. /// 当前节点
  602. /// </summary>
  603. public string CurrentStepName { get; set; }
  604. /// <summary>
  605. /// 重办次数
  606. /// </summary>
  607. public int ReTransactNum { get; set; }
  608. /// <summary>
  609. /// 是否紧急
  610. /// </summary>
  611. public bool IsUrgent { get; set; }
  612. /// <summary>
  613. /// 是否紧急
  614. /// </summary>
  615. public string IsUrgentText => IsUrgent ? "紧急" : "-";
  616. /// <summary>
  617. /// 期满时间
  618. /// </summary>
  619. public DateTime? ExpiredTime { get; set; }
  620. /// <summary>
  621. /// 即将超期时间
  622. /// </summary>
  623. public DateTime? NearlyExpiredTime { get; set; }
  624. /// <summary>
  625. /// 即将超期时间第一级
  626. /// </summary>
  627. public DateTime? NearlyExpiredTimeOne { get; set; }
  628. /// <summary>
  629. /// 是否超期
  630. /// </summary>
  631. public bool IsExpired
  632. {
  633. get
  634. {
  635. if (ExpiredTime.HasValue)
  636. return DateTime.Now > ExpiredTime.Value;
  637. return false;
  638. }
  639. }
  640. /// <summary>
  641. /// 受理时间
  642. /// </summary>
  643. public DateTime CreationTime { get; set; }
  644. /// <summary>
  645. /// 标题
  646. /// </summary>
  647. public string Title { get; set; }
  648. /// <summary>
  649. /// 行业
  650. /// </summary>
  651. public string IndustryName { get; set; }
  652. /// <summary>
  653. /// 办理时长
  654. /// </summary>
  655. public double CreationTimeHandleDuration { get; set; }
  656. /// <summary>
  657. /// 区域
  658. /// </summary>
  659. public string County { get; set; }
  660. /// <summary>
  661. /// 电话
  662. /// </summary>
  663. public string Contact { get; set; }
  664. /// <summary>
  665. /// 网格员名称
  666. /// </summary>
  667. public string MemberName { get; set; }
  668. /// <summary>
  669. /// 网格员电话
  670. /// </summary>
  671. public string MemberMobile { get; set; }
  672. /// <summary>
  673. /// 网格员回复
  674. /// </summary>
  675. public string NetworkRemark { get; set; }
  676. /// <summary>
  677. /// 网格E通编号
  678. /// </summary>
  679. public string? NetworkENumber { get; set; }
  680. /// <summary>
  681. /// 受理期满时间
  682. /// </summary>
  683. public DateTime? AcceptExpiredTime { get; set; }
  684. /// <summary>
  685. /// 一级部门
  686. /// </summary>
  687. public string OrgLevelOneCode { get; set; }
  688. /// <summary>
  689. /// 接办部门
  690. /// </summary>
  691. public string ActualHandleOrgName { get; set; }
  692. /// <summary>
  693. /// 接办时间
  694. /// </summary>
  695. public DateTime? StartTime { get; set; }
  696. /// <summary>
  697. /// 办结时间
  698. /// </summary>
  699. public DateTime? FiledTime { get; set; }
  700. /// <summary>
  701. /// 受理类型
  702. /// </summary>
  703. public string AcceptType { get; set; }
  704. /// <summary>
  705. /// 热点类型
  706. /// </summary>
  707. public string HotspotName { get; set; }
  708. /// <summary>
  709. /// 受理人
  710. /// </summary>
  711. public string AcceptorName { get; set; }
  712. /// <summary>
  713. /// 受理内容
  714. /// </summary>
  715. public string Content { get; set; }
  716. /// <summary>
  717. /// 办理结果
  718. /// </summary>
  719. public string FileOpinion { get; set; }
  720. }
  721. public class StatisticsDto
  722. {
  723. }
  724. public class HotspotStatisticsInDto
  725. {
  726. [Required]
  727. public DateTime StartTime { get; set; }
  728. [Required]
  729. public DateTime EndTime { get; set; }
  730. /// <summary>
  731. /// 分类Code
  732. /// </summary>
  733. public string? HotspotCode { get; set; }
  734. }
  735. public class HotspotStatisticsOutDto
  736. {
  737. public string HotspotCode { get; set; }
  738. public int SumCount { get; set; }
  739. public string HotspotName { get; set; }
  740. public bool HasChild { get; set; }
  741. }
  742. public record HotspotStatisticsDetailsInDto : PagedRequest
  743. {
  744. [Required]
  745. public DateTime StartTime { get; set; }
  746. [Required]
  747. public DateTime EndTime { get; set; }
  748. public string? HotspotCode { get; set; }
  749. }
  750. public class HotspotStatisticsDetailsOutDto
  751. {
  752. /// <summary>
  753. /// Id
  754. /// </summary>
  755. public string Id { get; set; }
  756. /// <summary>
  757. /// 过期状态
  758. /// </summary>
  759. public EExpiredStatus? ExpiredStatus => FiledTime.CalculateExpiredState(Status, this.ExpiredTime, this.NearlyExpiredTime, this.NearlyExpiredTimeOne);
  760. /// <summary>
  761. /// 过期状态
  762. /// </summary>
  763. public string ExpiredStatusText => ExpiredStatus.GetDescription();
  764. /// <summary>
  765. /// 受理编号
  766. /// </summary>
  767. public string No { get; set; }
  768. /// <summary>
  769. /// 信件状态
  770. /// </summary>
  771. public EOrderStatus Status { get; set; }
  772. /// <summary>
  773. /// 信件状态
  774. /// </summary>
  775. public string StatusTxt => Status.GetDescription();
  776. /// <summary>
  777. /// 来源
  778. /// </summary>
  779. public string SourceChannel { get; set; }
  780. /// <summary>
  781. /// 当前节点
  782. /// </summary>
  783. public string CurrentStepName { get; set; }
  784. /// <summary>
  785. /// 重办次数
  786. /// </summary>
  787. public int ReTransactNum { get; set; }
  788. /// <summary>
  789. /// 甄别状态
  790. /// </summary>
  791. public EScreenStatus? OrderScreenStatus { get; set; }
  792. /// <summary>
  793. /// 甄别状态
  794. /// </summary>
  795. public string? OrderScreenStatusText => OrderScreenStatus.HasValue && OrderScreenStatus != null ? OrderScreenStatus?.GetDescription() : "未甄别";
  796. /// <summary>
  797. /// 是否紧急
  798. /// </summary>
  799. public bool IsUrgent { get; set; }
  800. /// <summary>
  801. /// 是否紧急
  802. /// </summary>
  803. public string IsUrgentText => IsUrgent ? "紧急" : "-";
  804. /// <summary>
  805. /// 期满时间
  806. /// </summary>
  807. public DateTime? ExpiredTime { get; set; }
  808. /// <summary>
  809. /// 即将超期时间
  810. /// </summary>
  811. public DateTime? NearlyExpiredTime { get; set; }
  812. /// <summary>
  813. /// 即将超期时间第一级
  814. /// </summary>
  815. public DateTime? NearlyExpiredTimeOne { get; set; }
  816. /// <summary>
  817. /// 是否超期
  818. /// </summary>
  819. public bool IsExpired
  820. {
  821. get
  822. {
  823. if (ExpiredTime.HasValue)
  824. return DateTime.Now > ExpiredTime.Value;
  825. return false;
  826. }
  827. }
  828. /// <summary>
  829. /// 受理时间
  830. /// </summary>
  831. public DateTime CreationTime { get; set; }
  832. /// <summary>
  833. /// 标题
  834. /// </summary>
  835. public string Title { get; set; }
  836. /// <summary>
  837. /// 行业
  838. /// </summary>
  839. public string IndustryName { get; set; }
  840. /// <summary>
  841. /// 办理时长
  842. /// </summary>
  843. public double CreationTimeHandleDuration { get; set; }
  844. /// <summary>
  845. /// 区域
  846. /// </summary>
  847. public string County { get; set; }
  848. /// <summary>
  849. /// 电话
  850. /// </summary>
  851. public string Contact { get; set; }
  852. /// <summary>
  853. /// 受理期满时间
  854. /// </summary>
  855. public DateTime? AcceptExpiredTime { get; set; }
  856. /// <summary>
  857. /// 接办部门
  858. /// </summary>
  859. public string ActualHandleOrgName { get; set; }
  860. /// <summary>
  861. /// 接办时间
  862. /// </summary>
  863. public DateTime? StartTime { get; set; }
  864. /// <summary>
  865. /// 办结时间
  866. /// </summary>
  867. public DateTime? FiledTime { get; set; }
  868. /// <summary>
  869. /// 满意度
  870. /// </summary>
  871. public Kv? OrgProcessingResults { get; set; }
  872. /// <summary>
  873. /// 满意度
  874. /// </summary>
  875. public string? OrgProcessingResultsTxt => OrgProcessingResults != null ? OrgProcessingResults.Value : "";
  876. /// <summary>
  877. /// 受理类型
  878. /// </summary>
  879. public string AcceptType { get; set; }
  880. /// <summary>
  881. /// 热点类型
  882. /// </summary>
  883. public string HotspotName { get; set; }
  884. /// <summary>
  885. /// 受理人
  886. /// </summary>
  887. public string AcceptorName { get; set; }
  888. /// <summary>
  889. /// 受理内容
  890. /// </summary>
  891. public string Content { get; set; }
  892. /// <summary>
  893. /// 办理结果
  894. /// </summary>
  895. public string FileOpinion { get; set; }
  896. }
  897. public class SnapshotProcessingStatisticsInDto
  898. {
  899. [Required]
  900. public DateTime StartTime { get; set; }
  901. [Required]
  902. public DateTime EndTime { get; set; }
  903. /// <summary>
  904. /// 行业Id
  905. /// </summary>
  906. public string? IndustryId { get; set; }
  907. }
  908. public class SnapshotProcessingStatisticsOutDto
  909. {
  910. /// <summary>
  911. /// 部门Code
  912. /// </summary>
  913. public string OrgCode { get; set; }
  914. /// <summary>
  915. /// 部门名称
  916. /// </summary>
  917. public string OrgName { get; set; }
  918. /// <summary>
  919. /// 信件总量
  920. /// </summary>
  921. public int OrderCountNum => YbOrderCountNum + ZbOrderCountNum;
  922. /// <summary>
  923. /// 信件已办总量
  924. /// </summary>
  925. public int YbOrderCountNum { get; set; }
  926. /// <summary>
  927. /// 信件未办总量
  928. /// </summary>
  929. public int ZbOrderCountNum { get; set; }
  930. /// <summary>
  931. /// 按时办结
  932. /// </summary>
  933. public int CompleteOnTime { get; set; }
  934. /// <summary>
  935. /// 按时办结率
  936. /// </summary>
  937. public string CompleteOnTimeRate => CalcRate(YbOrderCountNum, CompleteOnTime);
  938. /// <summary>
  939. /// 办结率
  940. /// </summary>
  941. public string OrderCompletionRate => CalcRate(YbOrderCountNum, OrderCountNum);
  942. /// <summary>
  943. /// 20分钟内接件
  944. /// </summary>
  945. public int ReceiveIn20Minutes { get; set; }
  946. /// <summary>
  947. /// 20分钟后接件
  948. /// </summary>
  949. public int ReceiveOut20Minutes { get; set; }
  950. /// <summary>
  951. /// 工单及时响应率
  952. /// </summary>
  953. public string PromptResponse => CalcRate(ReceiveIn20Minutes, ReceiveIn20Minutes + ReceiveOut20Minutes);
  954. /// <summary>
  955. /// 退回件
  956. /// </summary>
  957. public int BackNum { get; set; }
  958. /// <summary>
  959. /// 办件总时长
  960. /// </summary>
  961. public double? TotalHandleDuration { get; set; }
  962. /// <summary>
  963. /// 3日内办结
  964. /// </summary>
  965. public int End3Day { get; set; }
  966. /// <summary>
  967. /// 3至5日办结
  968. /// </summary>
  969. public int End3To5Day { get; set; }
  970. /// <summary>
  971. /// 5至7日办结
  972. /// </summary>
  973. public int End5To7Day { get; set; }
  974. /// <summary>
  975. /// 7日外办结
  976. /// </summary>
  977. public int End7Day { get; set; }
  978. /// <summary>
  979. /// 按时办结个数
  980. /// </summary>
  981. public int OnTimeCount { get; set; }
  982. /// <summary>
  983. /// 按时办结率
  984. /// </summary>
  985. public string CloseOnTimeRate => CalcRate(OnTimeCount, OrderCountNum);
  986. /// <summary>
  987. /// 满意量
  988. /// </summary>
  989. public int SatisfiedCount { get; set; }
  990. /// <summary>
  991. /// 不满意量
  992. /// </summary>
  993. public int NoSatisfiedCount { get; set; }
  994. /// <summary>
  995. /// 满意率
  996. /// </summary>
  997. public string SatisfiedRate => CalcRate(SatisfiedCount, SatisfiedCount + NoSatisfiedCount);
  998. /// <summary>
  999. /// 二次办理个数
  1000. /// </summary>
  1001. public int SecondNum { get; set; }
  1002. /// <summary>
  1003. /// 计算率
  1004. /// </summary>
  1005. /// <returns></returns>
  1006. public string CalcRate(int Quantity, int Count)
  1007. {
  1008. if (Count != 0 && Quantity != 0)
  1009. {
  1010. return Math.Round((Quantity / (double)Count) * 100, 2) + "%";
  1011. }
  1012. return "0%";
  1013. }
  1014. }
  1015. public record SnapshotProcessingStatisticsDetailsInDto : PagedRequest
  1016. {
  1017. /// <summary>
  1018. /// 开始时间
  1019. /// </summary>
  1020. [Required]
  1021. public DateTime StartTime { get; set; }
  1022. /// <summary>
  1023. /// 结束时间
  1024. /// </summary>
  1025. [Required]
  1026. public DateTime EndTime { get; set; }
  1027. /// <summary>
  1028. /// 字段名称
  1029. /// </summary>
  1030. [Required]
  1031. public string FieldName { get; set; }
  1032. /// <summary>
  1033. /// 部门Id
  1034. /// </summary>
  1035. [Required]
  1036. public string OrgId { get; set; }
  1037. /// <summary>
  1038. /// 行业Id
  1039. /// </summary>
  1040. public string? IndustryId { get; set; }
  1041. }
  1042. public class SnapshotProcessingStatisticsDetailsOutDto
  1043. {
  1044. /// <summary>
  1045. /// Id
  1046. /// </summary>
  1047. public string Id { get; set; }
  1048. /// <summary>
  1049. /// 过期状态
  1050. /// </summary>
  1051. public EExpiredStatus? ExpiredStatus => FiledTime.CalculateExpiredState(Status, this.ExpiredTime, this.NearlyExpiredTime, this.NearlyExpiredTimeOne);
  1052. /// <summary>
  1053. /// 过期状态
  1054. /// </summary>
  1055. public string ExpiredStatusText => ExpiredStatus.GetDescription();
  1056. /// <summary>
  1057. /// 受理编号
  1058. /// </summary>
  1059. public string No { get; set; }
  1060. /// <summary>
  1061. /// 信件状态
  1062. /// </summary>
  1063. public EOrderStatus Status { get; set; }
  1064. /// <summary>
  1065. /// 信件状态
  1066. /// </summary>
  1067. public string StatusTxt => Status.GetDescription();
  1068. /// <summary>
  1069. /// 来源
  1070. /// </summary>
  1071. public string SourceChannel { get; set; }
  1072. /// <summary>
  1073. /// 当前节点
  1074. /// </summary>
  1075. public string CurrentStepName { get; set; }
  1076. /// <summary>
  1077. /// 重办次数
  1078. /// </summary>
  1079. public int ReTransactNum { get; set; }
  1080. /// <summary>
  1081. /// 甄别状态
  1082. /// </summary>
  1083. public EScreenStatus? OrderScreenStatus { get; set; }
  1084. /// <summary>
  1085. /// 甄别状态
  1086. /// </summary>
  1087. public string? OrderScreenStatusText => OrderScreenStatus.HasValue && OrderScreenStatus != null ? OrderScreenStatus?.GetDescription() : "未甄别";
  1088. /// <summary>
  1089. /// 受理时间
  1090. /// </summary>
  1091. public DateTime CreationTime { get; set; }
  1092. /// <summary>
  1093. /// 期满时间
  1094. /// </summary>
  1095. public DateTime? ExpiredTime { get; set; }
  1096. /// <summary>
  1097. /// 即将超期时间
  1098. /// </summary>
  1099. public DateTime? NearlyExpiredTime { get; set; }
  1100. /// <summary>
  1101. /// 即将超期时间第一级
  1102. /// </summary>
  1103. public DateTime? NearlyExpiredTimeOne { get; set; }
  1104. /// <summary>
  1105. /// 接办部门
  1106. /// </summary>
  1107. public string ActualHandleOrgName { get; set; }
  1108. /// <summary>
  1109. /// 接办时间
  1110. /// </summary>
  1111. public DateTime? StartTime { get; set; }
  1112. /// <summary>
  1113. /// 办结时间
  1114. /// </summary>
  1115. public DateTime? FiledTime { get; set; }
  1116. /// <summary>
  1117. /// 受理类型
  1118. /// </summary>
  1119. public string AcceptType { get; set; }
  1120. /// <summary>
  1121. /// 热点类型
  1122. /// </summary>
  1123. public string HotspotName { get; set; }
  1124. }
  1125. public class GuiderWorkStatisticsOutDto
  1126. {
  1127. /// <summary>
  1128. /// 网格员姓名
  1129. /// </summary>
  1130. public string MemberName { get; set; }
  1131. /// <summary>
  1132. /// 网格员手机号
  1133. /// </summary>
  1134. public string MemberMobile { get; set; }
  1135. /// <summary>
  1136. /// 未回复
  1137. /// </summary>
  1138. public int UnReplyCount { get; set; }
  1139. /// <summary>
  1140. /// 4小时内回复
  1141. /// </summary>
  1142. public int ReplyIn4HourCount { get; set; }
  1143. /// <summary>
  1144. /// 4小时外回复
  1145. /// </summary>
  1146. public int ReplyOut4HourCount { get; set; }
  1147. }
  1148. public class GuiderWorkStatisticsInDto
  1149. {
  1150. [Required]
  1151. public DateTime StartTime { get; set; }
  1152. [Required]
  1153. public DateTime EndTime { get; set; }
  1154. }
  1155. public record GuiderWorkStatisticsDetailsInDto : PagedRequest
  1156. {
  1157. [Required]
  1158. public DateTime StartTime { get; set; }
  1159. [Required]
  1160. public DateTime EndTime { get; set; }
  1161. [Required]
  1162. public string MemberMobile { get; set; }
  1163. /// <summary>
  1164. /// 字段名称
  1165. /// </summary>
  1166. [Required]
  1167. public string FieldName { get; set; }
  1168. }
  1169. public class GuiderWorkStatisticsDetailsOutDto
  1170. {
  1171. /// <summary>
  1172. /// Id
  1173. /// </summary>
  1174. public string Id { get; set; }
  1175. /// <summary>
  1176. /// 过期状态
  1177. /// </summary>
  1178. public EExpiredStatus? ExpiredStatus => FiledTime.CalculateExpiredState(Status, this.ExpiredTime, this.NearlyExpiredTime, this.NearlyExpiredTimeOne);
  1179. /// <summary>
  1180. /// 过期状态
  1181. /// </summary>
  1182. public string ExpiredStatusText => ExpiredStatus.GetDescription();
  1183. /// <summary>
  1184. /// 受理编号
  1185. /// </summary>
  1186. public string No { get; set; }
  1187. /// <summary>
  1188. /// 信件状态
  1189. /// </summary>
  1190. public EOrderStatus Status { get; set; }
  1191. /// <summary>
  1192. /// 信件状态
  1193. /// </summary>
  1194. public string StatusTxt => Status.GetDescription();
  1195. /// <summary>
  1196. /// 来源
  1197. /// </summary>
  1198. public string SourceChannel { get; set; }
  1199. /// <summary>
  1200. /// 当前节点
  1201. /// </summary>
  1202. public string CurrentStepName { get; set; }
  1203. /// <summary>
  1204. /// 重办次数
  1205. /// </summary>
  1206. public int ReTransactNum { get; set; }
  1207. /// <summary>
  1208. /// 是否紧急
  1209. /// </summary>
  1210. public bool IsUrgent { get; set; }
  1211. /// <summary>
  1212. /// 是否紧急
  1213. /// </summary>
  1214. public string IsUrgentText => IsUrgent ? "紧急" : "-";
  1215. /// <summary>
  1216. /// 期满时间
  1217. /// </summary>
  1218. public DateTime? ExpiredTime { get; set; }
  1219. /// <summary>
  1220. /// 即将超期时间
  1221. /// </summary>
  1222. public DateTime? NearlyExpiredTime { get; set; }
  1223. /// <summary>
  1224. /// 即将超期时间第一级
  1225. /// </summary>
  1226. public DateTime? NearlyExpiredTimeOne { get; set; }
  1227. /// <summary>
  1228. /// 是否超期
  1229. /// </summary>
  1230. public bool IsExpired
  1231. {
  1232. get
  1233. {
  1234. if (ExpiredTime.HasValue)
  1235. return DateTime.Now > ExpiredTime.Value;
  1236. return false;
  1237. }
  1238. }
  1239. /// <summary>
  1240. /// 受理时间
  1241. /// </summary>
  1242. public DateTime CreationTime { get; set; }
  1243. /// <summary>
  1244. /// 标题
  1245. /// </summary>
  1246. public string Title { get; set; }
  1247. /// <summary>
  1248. /// 行业
  1249. /// </summary>
  1250. public string IndustryName { get; set; }
  1251. /// <summary>
  1252. /// 办理时长
  1253. /// </summary>
  1254. public double CreationTimeHandleDuration { get; set; }
  1255. /// <summary>
  1256. /// 区域
  1257. /// </summary>
  1258. public string County { get; set; }
  1259. /// <summary>
  1260. /// 电话
  1261. /// </summary>
  1262. public string Contact { get; set; }
  1263. /// <summary>
  1264. /// 网格员姓名
  1265. /// </summary>
  1266. public string MemberName { get; set; }
  1267. /// <summary>
  1268. /// 网格员手机号
  1269. /// </summary>
  1270. public string MemberMobile { get; set; }
  1271. /// <summary>
  1272. /// 网格员回复内容
  1273. /// </summary>
  1274. public string? NetworkRemark { get; set; }
  1275. /// <summary>
  1276. /// 受理期满时间
  1277. /// </summary>
  1278. public DateTime? AcceptExpiredTime { get; set; }
  1279. /// <summary>
  1280. /// 接办部门
  1281. /// </summary>
  1282. public string ActualHandleOrgName { get; set; }
  1283. /// <summary>
  1284. /// 接办时间
  1285. /// </summary>
  1286. public DateTime? StartTime { get; set; }
  1287. /// <summary>
  1288. /// 办结时间
  1289. /// </summary>
  1290. public DateTime? FiledTime { get; set; }
  1291. /// <summary>
  1292. /// 受理类型
  1293. /// </summary>
  1294. public string AcceptType { get; set; }
  1295. /// <summary>
  1296. /// 热点类型
  1297. /// </summary>
  1298. public string HotspotName { get; set; }
  1299. /// <summary>
  1300. /// 受理人
  1301. /// </summary>
  1302. public string AcceptorName { get; set; }
  1303. }
  1304. public class HotspotDataStatisticsOutDto
  1305. {
  1306. /// <summary>
  1307. /// 热点名字
  1308. /// </summary>
  1309. public string Name { get; set; }
  1310. /// <summary>
  1311. /// 热点工单数量
  1312. /// </summary>
  1313. public int OrderCount { get; set; }
  1314. }
  1315. public class HotspotDataStatisticsInDto
  1316. {
  1317. /// <summary>
  1318. /// 类型:
  1319. /// 0: 全部;
  1320. /// 1: 市民;
  1321. /// 2: 企业;
  1322. /// </summary>
  1323. [Required]
  1324. public int TypeId { get; set; }
  1325. [Required]
  1326. public DateTime StartTime { get; set; }
  1327. [Required]
  1328. public DateTime EndTime { get; set; }
  1329. }