Order.cs 46 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413
  1. using Hotline.CallCenter.Calls;
  2. using Hotline.FlowEngine.Workflows;
  3. using Hotline.Settings;
  4. using Hotline.Settings.Hotspots;
  5. using Hotline.Share.Dtos;
  6. using Hotline.Share.Dtos.File;
  7. using Hotline.Share.Enums.FlowEngine;
  8. using Hotline.Share.Enums.Order;
  9. using Hotline.Share.Enums.Settings;
  10. using Hotline.Users;
  11. using SqlSugar;
  12. using System.ComponentModel;
  13. using XF.Domain.Exceptions;
  14. using XF.Domain.Extensions;
  15. using XF.Domain.Repository;
  16. using XF.Utility.EnumExtensions;
  17. namespace Hotline.Orders
  18. {
  19. /// <summary>
  20. /// 工单
  21. /// </summary>
  22. [Description("工单")]
  23. [SugarIndex("unique_order_no", nameof(Order.No), OrderByType.Desc, true)]
  24. [SugarIndex("index_order_creationtime", nameof(Order.CreationTime), OrderByType.Desc)]
  25. [SugarIndex("index_order_startTime", nameof(Order.StartTime), OrderByType.Desc)]
  26. [SugarIndex("index_order_expiredTime", nameof(Order.ExpiredTime), OrderByType.Desc)]
  27. public partial class Order : PositionWorkflowEntity
  28. {
  29. public Order()
  30. {
  31. //HotspotCodeLv1 ??= HotspotCode?[..2];
  32. }
  33. /// <summary>
  34. /// 第一次评价结果
  35. /// </summary>
  36. [SugarColumn(ColumnDescription = "第一次评价结果")]
  37. public string? FirstVisitResult { get; set; }
  38. [SugarColumn(ColumnDescription = "第一次评价结果代码")]
  39. public string? FirstVisitResultCode { get; set; }
  40. #region 来电信息
  41. /// <summary>
  42. /// 来源渠道(电话、网站、APP等)
  43. /// </summary>
  44. [SugarColumn(ColumnDescription = "来源渠道")]
  45. public string? SourceChannel { get; set; }
  46. [SugarColumn(ColumnDescription = "来源渠道代码")]
  47. public string? SourceChannelCode { get; set; }
  48. /// <summary>
  49. /// 渠道为电话时,此字段存在(Call.Id)
  50. /// </summary>
  51. [SugarColumn(ColumnDescription = "来电ID")]
  52. public string? CallId { get; set; }
  53. /// <summary>
  54. /// 来电归属地
  55. /// </summary>
  56. [SugarColumn(ColumnDescription = "来电地址")]
  57. public string? CallAddress { get; set; }
  58. /// <summary>
  59. /// 来电号码
  60. /// </summary>
  61. [SugarColumn(ColumnDescription = "来电号码")]
  62. public string? FromPhone { get; set; }
  63. /// <summary>
  64. /// 转接号码(转接来源)
  65. /// </summary>
  66. [SugarColumn(ColumnDescription = "转接号码")]
  67. public string? TransferPhone { get; set; }
  68. /// <summary>
  69. /// 来电/信人姓名
  70. /// </summary>
  71. [SugarColumn(ColumnDescription = "来电姓名")]
  72. public string? FromName { get; set; }
  73. /// <summary>
  74. /// 来电/信人性别
  75. /// </summary>
  76. [SugarColumn(ColumnDescription = "来电性别")]
  77. public EGender FromGender { get; set; }
  78. /// <summary>
  79. /// 来电/信人身份
  80. /// </summary>
  81. [SugarColumn(ColumnDescription = "来电身份")]
  82. public EIdentityType? IdentityType { get; set; }
  83. /// <summary>
  84. /// 证件类型
  85. /// </summary>
  86. [SugarColumn(ColumnDescription = "证件类型")]
  87. public string? LicenceTypeCode { get; set; }
  88. [SugarColumn(ColumnDescription = "证件类型名称")]
  89. public string? LicenceType { get; set; }
  90. /// <summary>
  91. /// 证件号码
  92. /// </summary>
  93. [SugarColumn(ColumnDescription = "证件号码")]
  94. public string? LicenceNo { get; set; }
  95. /// <summary>
  96. /// 年龄段
  97. /// </summary>
  98. [SugarColumn(ColumnDescription = "年龄段代码")]
  99. public string? AgeRangeCode { get; set; }
  100. [SugarColumn(ColumnDescription = "年龄段")]
  101. public string? AgeRange { get; set; }
  102. /// <summary>
  103. /// 联系电话
  104. /// </summary>
  105. [SugarColumn(ColumnDescription = "联系电话")]
  106. public string? Contact { get; set; }
  107. [SugarColumn(ColumnDescription = "联系电话脱敏", IsNullable = true)]
  108. public string? ContactMask { get; set; }
  109. /// <summary>
  110. /// 是否接受短信,勾选校验手机号
  111. /// </summary>
  112. [SugarColumn(ColumnDescription = "是否接受短信")]
  113. public bool AcceptSms { get; set; }
  114. /// <summary>
  115. /// 是否已发送短信
  116. /// </summary>
  117. [SugarColumn(ColumnDescription = "是否已发送短信")]
  118. public bool SmsSended { get; set; }
  119. /// <summary>
  120. /// 是否保密
  121. /// </summary>
  122. [SugarColumn(ColumnDescription = "是否保密")]
  123. public bool IsSecret { get; set; }
  124. /// <summary>
  125. /// 工作单位(当“来电/信人身份”为“企业”时必填,其他情况非必填)
  126. /// </summary>
  127. [SugarColumn(ColumnDescription = "工作单位", IsNullable = true)]
  128. public string? Company { get; set; }
  129. #endregion
  130. #region 诉求信息
  131. /// <summary>
  132. /// 受理类型
  133. /// </summary>
  134. [SugarColumn(ColumnDescription = "受理类型")]
  135. public string? AcceptType { get; set; }
  136. /// <summary>
  137. /// 受理类型代码
  138. /// </summary>
  139. [SugarColumn(ColumnDescription = "受理类型代码")]
  140. public string? AcceptTypeCode { get; set; }
  141. [SugarColumn(ColumnDescription = "标题")]
  142. public string Title { get; set; }
  143. /// <summary>
  144. /// 工单标签(自贡)
  145. /// </summary>
  146. [SugarColumn(ColumnDescription = "工单标签")]
  147. public string? OrderTag { get; set; }
  148. [SugarColumn(ColumnDescription = "工单标签代码")]
  149. public string? OrderTagCode { get; set; }
  150. #region 热点
  151. /// <summary>
  152. /// 热点
  153. /// </summary>
  154. [SugarColumn(ColumnDescription = "热点ID")]
  155. public string? HotspotId { get; set; }
  156. //public string? HotspotCode { get; set; }
  157. //public string? HotspotCodeLv1 { get; set; }
  158. [SugarColumn(ColumnDescription = "热点名称")]
  159. public string? HotspotName { get; set; }
  160. /// <summary>
  161. /// 热点分类类目名称
  162. /// </summary>
  163. [SugarColumn(ColumnDescription = "热点分类名称")]
  164. public string? HotspotSpliceName { get; set; }
  165. /// <summary>
  166. /// 外部数据(为前端提供级联功能)
  167. /// </summary>
  168. [SugarColumn(ColumnDescription = "外部数据")]
  169. public string? HotspotExternal { get; set; }
  170. #endregion
  171. #region 事件分类
  172. [SugarColumn(ColumnDescription = "事件分类ID")]
  173. public string? EventCategoryId { get; set; }
  174. [SugarColumn(ColumnDescription = "事件分类名称")]
  175. public string? EventCategoryName { get; set; }
  176. [SugarColumn(ColumnDescription = "事件分类拼接名称")]
  177. public string? EventCategorySpliceName { get; set; }
  178. [SugarColumn(ColumnDescription = "事件分类外部数据")]
  179. public string? EventCategoryExternal { get; set; }
  180. #endregion
  181. /// <summary>
  182. /// 事发时间
  183. /// </summary>
  184. [SugarColumn(ColumnDescription = "事发时间")]
  185. public DateTime? IncidentTime { get; set; }
  186. /// <summary>
  187. /// 事件目的
  188. /// </summary>
  189. [SugarColumn(ColumnDescription = "事件目的")]
  190. public string? IncidentPurpose { get; set; }
  191. /// <summary>
  192. /// 重复工单Id
  193. /// </summary>
  194. [SugarColumn(ColumnDescription = "重复工单Id", ColumnDataType = "json", IsJson = true)]
  195. public List<string>? DuplicateIds { get; set; }
  196. /// <summary>
  197. /// 推送分类 -- 弃用 转为表存储
  198. /// </summary>
  199. [SugarColumn(ColumnDescription = "推送分类代码")]
  200. public string? PushTypeCode { get; set; }
  201. /// <summary>
  202. /// 推送分类 -- 冗余 多选存储 ,分割
  203. /// </summary>
  204. [SugarColumn(ColumnDescription = "推送分类")]
  205. public string? PushType { get; set; }
  206. /// <summary>
  207. /// 附件
  208. /// </summary>
  209. [SugarColumn(ColumnDataType = "json", IsJson = true)]
  210. public List<FileDto>? Additions { get; set; } = new();
  211. /// <summary>
  212. /// 诉求内容
  213. /// </summary>
  214. [SugarColumn(ColumnDataType = "varchar(8000)", ColumnDescription = "诉求内容")]
  215. public string Content { get; set; }
  216. #endregion
  217. #region 工单属性
  218. /// <summary>
  219. /// 工单状态
  220. /// </summary>
  221. [SugarColumn(ColumnDescription = "工单状态")]
  222. public EOrderStatus Status { get; set; }
  223. /// <summary>
  224. /// 过期状态 //todo 延迟消息更新此字段
  225. /// </summary>
  226. [SugarColumn(ColumnDescription = "过期状态")]
  227. public EExpiredStatus ExpiredStatus { get; set; }
  228. /// <summary>
  229. /// 来源,区分省平台或110等其他平台同步过来的工单
  230. /// </summary>
  231. [SugarColumn(ColumnDescription = "来源")]
  232. public ESource Source { get; set; }
  233. /// <summary>
  234. /// 处理方式(直办、交办)
  235. /// </summary>
  236. [SugarColumn(ColumnDescription = "处理方式")]
  237. public EProcessType ProcessType { get; set; } = EProcessType.Zhiban;
  238. /// <summary>
  239. /// 是否公开
  240. /// </summary>
  241. [SugarColumn(ColumnDescription = "是否公开")]
  242. public bool IsPublicity { get; set; }
  243. /// <summary>
  244. /// 是否为省工单(省派发工单非政民互动直派的为省工单)
  245. /// </summary>
  246. [SugarColumn(ColumnDescription = "是否省工单")]
  247. public bool IsProvince { get; set; }
  248. /// <summary>
  249. /// 工单编码(20220101000001)
  250. /// </summary>
  251. [SugarColumn(ColumnDescription = "工单编码")]
  252. public string? No { get; set; }
  253. /// <summary>
  254. /// 是否已撤销
  255. /// </summary>
  256. [SugarColumn(ColumnDescription = "是否已撤销")]
  257. public bool IsCancel { get; set; }
  258. /// <summary>
  259. /// 市民查询密码
  260. /// </summary>
  261. [SugarColumn(ColumnDescription = "查询密码")]
  262. public string? Password { get; set; }
  263. /// <summary>
  264. /// 企业名称
  265. /// </summary>
  266. [SugarColumn(ColumnDescription = "企业名称")]
  267. public string? EnterpriseName { get; set; }
  268. /// <summary>
  269. /// 企业Code
  270. /// </summary>
  271. [SugarColumn(ColumnDescription = "企业编码")]
  272. public string? EnterpriseCode { get; set; }
  273. /// <summary>
  274. /// 专班名称
  275. /// </summary>
  276. [SugarColumn(ColumnDescription = "专班名称")]
  277. public string? ZhuanBanMingCheng { get; set; }
  278. /// <summary>
  279. /// 专班Code
  280. /// </summary>
  281. [SugarColumn(ColumnDescription = "专班编码")]
  282. public string? ZhuanBanCode { get; set; }
  283. #endregion
  284. #region 流程信息
  285. /// <summary>
  286. /// 工单开始时间(受理/接办时间=流程开启时间)
  287. /// </summary>
  288. [SugarColumn(ColumnDescription = "工单开始时间")]
  289. public DateTime? StartTime { get; set; }
  290. /// <summary>
  291. /// 超期时间(期满时间)
  292. /// </summary>
  293. [SugarColumn(ColumnDescription = "超期时间")]
  294. public DateTime? ExpiredTime { get; set; }
  295. /// <summary>
  296. /// 即将超期时间
  297. /// </summary>
  298. [SugarColumn(ColumnDescription = "即将超期时间")]
  299. public DateTime? NearlyExpiredTime { get; set; }
  300. /// <summary>
  301. /// 即将超期时间第一级
  302. /// </summary>
  303. [SugarColumn(ColumnDescription = "即将超期时间第一级")]
  304. public DateTime? NearlyExpiredTimeOne { get; set; }
  305. /// <summary>
  306. /// 交办时间(中心交部门办理时间)
  307. /// </summary>
  308. [SugarColumn(ColumnDescription = "交办时间")]
  309. public DateTime? CenterToOrgTime { get; set; }
  310. /// <summary>
  311. /// 交办意见
  312. /// </summary>
  313. [SugarColumn(Length = 8000, ColumnDescription = "交办意见")]
  314. public string? CenterToOrgOpinion { get; set; }
  315. /// <summary>
  316. /// 交办人
  317. /// </summary>
  318. [SugarColumn(ColumnDescription = "交办人ID")]
  319. public string? CenterToOrgHandlerId { get; set; }
  320. [SugarColumn(ColumnDescription = "交办人姓名")]
  321. public string? CenterToOrgHandlerName { get; set; }
  322. /// <summary>
  323. /// 归档时间(暂为流程结束时间,因流程结束自动归档)
  324. /// </summary>
  325. [SugarColumn(ColumnDescription = "归档时间")]
  326. public DateTime? FiledTime { get; set; }
  327. /// <summary>
  328. /// 办结时长(秒) 办结时间-交办时间
  329. /// </summary>
  330. [SugarColumn(ColumnDescription = "办结时长")]
  331. public double? HandleDuration { get; set; }
  332. /// <summary>
  333. /// 办结工作日时长(秒)
  334. /// </summary>
  335. [SugarColumn(ColumnDescription = "办结工作日时长")]
  336. public double? HandleDurationWorkday { get; set; }
  337. /// <summary>
  338. /// 办结时长(秒)归档时间-受理时间(工单创建时间)
  339. /// </summary>
  340. [SugarColumn(ColumnDescription = "工单创建到办结时长")]
  341. public double? CreationTimeHandleDuration { get; set; }
  342. /// <summary>
  343. /// 办结工作日时长(秒)归档时间-受理时间(工单创建时间)
  344. /// </summary>
  345. [SugarColumn(ColumnDescription = "工作日办结时长")]
  346. public double? CreationTimeHandleDurationWorkday { get; set; }
  347. /// <summary>
  348. /// 办结时长(秒) 归档时间-派单时间(中心到部门时间)
  349. /// </summary>
  350. [SugarColumn(ColumnDescription = "中心到部门办结时长")]
  351. public double? CenterToOrgHandleDuration { get; set; }
  352. /// <summary>
  353. /// 办结工作日时长(秒)归档时间-派单时间(中心到部门时间)
  354. /// </summary>
  355. [SugarColumn(ColumnDescription = "中心到部门工作日办结时长")]
  356. public double? CenterToOrgHandleDurationWorkday { get; set; }
  357. /// <summary>
  358. /// 归档时长(秒)
  359. /// </summary>
  360. [SugarColumn(ColumnDescription = "归档时长")]
  361. public double? FileDuration { get; set; }
  362. /// <summary>
  363. /// 归档工作时长(秒)
  364. /// </summary>
  365. [SugarColumn(ColumnDescription = "归档工作时长")]
  366. public double? FileDurationWorkday { get; set; }
  367. /// <summary>
  368. /// 全流程时长(秒)
  369. /// </summary>
  370. [SugarColumn(ColumnDescription = "全流程时长")]
  371. public double? AllDuration { get; set; }
  372. [SugarColumn(ColumnDescription = "全流程工作日时长")]
  373. public double? AllDurationWorkday { get; set; }
  374. public string? AllDurationHour { get; set; }
  375. /// <summary>
  376. /// 办理时间限制(如:24小时、7个工作日)
  377. /// </summary>
  378. [SugarColumn(ColumnDescription = "办理时间限制")]
  379. public string? TimeLimit { get; set; }
  380. [SugarColumn(ColumnDescription = "时间限制计数")]
  381. public int? TimeLimitCount { get; set; }
  382. [SugarColumn(ColumnDescription = "时间限制单位")]
  383. public ETimeType? TimeLimitUnit { get; set; }
  384. #region 会签实际办理对象
  385. [SugarColumn(ColumnDataType = "json", IsJson = true, ColumnDescription = "会签实际办理对象")]
  386. public List<string>? CsActualHandleOrgIds { get; set; }
  387. [SugarColumn(ColumnDataType = "json", IsJson = true, ColumnDescription = "会签实际办理用户ID")]
  388. public List<string>? CsActualHandleUserIds { get; set; }
  389. #endregion
  390. #region 实际办理信息(节点,部门,意见)
  391. [SugarColumn(ColumnDescription = "实际办理步骤ID")]
  392. public string? ActualHandleStepId { get; set; }
  393. /// <summary>
  394. /// 实际办理节点code(会签状态此字段保存最外层会签发起节点code)
  395. /// </summary>
  396. [SugarColumn(ColumnDescription = "实际办理步骤code")]
  397. public string? ActualHandleStepCode { get; set; }
  398. /// <summary>
  399. /// 实际办理节点名称(会签状态此字段保存最外层会签发起节点名称)
  400. /// </summary>
  401. [SugarColumn(ColumnDescription = "实际办理步骤名称")]
  402. public string? ActualHandleStepName { get; set; }
  403. /// <summary>
  404. /// 到达实际办理节点时间(stepBox创建时间)
  405. /// </summary>
  406. [SugarColumn(ColumnDescription = "到达实际办理节点时间")]
  407. public DateTime? ActualHandleStepCreateTime { get; set; }
  408. /// <summary>
  409. /// 实际办理节点签收时间
  410. /// </summary>
  411. [SugarColumn(ColumnDescription = "实际办理节点签收时间")]
  412. public DateTime? ActualHandleStepAcceptTime { get; set; }
  413. /// <summary>
  414. /// 实际办理时间
  415. /// </summary>
  416. [SugarColumn(ColumnDescription = "实际办理时间")]
  417. public DateTime? ActualHandleTime { get; set; }
  418. /// <summary>
  419. /// 实际办理人id
  420. /// </summary>
  421. [SugarColumn(ColumnDescription = "实际办理人ID")]
  422. public string? ActualHandlerId { get; set; }
  423. /// <summary>
  424. /// 实际办理人名称
  425. /// </summary>
  426. [SugarColumn(ColumnDescription = "实际办理人姓名")]
  427. public string? ActualHandlerName { get; set; }
  428. /// <summary>
  429. /// 实际办理部门名称
  430. /// </summary>
  431. [SugarColumn(ColumnDescription = "实际办理部门名称")]
  432. public string? ActualHandleOrgName { get; set; }
  433. /// <summary>
  434. /// 实际办理部门编码
  435. /// </summary>
  436. [SugarColumn(ColumnDescription = "实际办理部门编码")]
  437. public string? ActualHandleOrgCode { get; set; }
  438. /// <summary>
  439. /// 实际办理部门行政区划编码
  440. /// </summary>
  441. [SugarColumn(ColumnDescription = "实际办理部门行政区划编码")]
  442. public string? ActualHandleOrgAreaCode { get; set; }
  443. /// <summary>
  444. /// 实际办理部门行政区划名称
  445. /// </summary>
  446. [SugarColumn(ColumnDescription = "实际办理部门行政区划名称")]
  447. public string? ActualHandleOrgAreaName { get; set; }
  448. /// <summary>
  449. /// 实际办理意见(办理中...or 最终办理意见)
  450. /// </summary>
  451. [SugarColumn(ColumnDataType = "text", ColumnDescription = "实际办理意见")]
  452. public string ActualOpinion { get; set; } = "办理中...";
  453. /// <summary>
  454. /// 真实办理人姓名(手动填写)
  455. /// </summary>
  456. [SugarColumn(ColumnDescription = "真实办理人姓名")]
  457. public string? RealHandlerName { get; set; }
  458. /// <summary>
  459. /// 真实办理人电话(手动填写)
  460. /// </summary>
  461. [SugarColumn(ColumnDescription = "真实办理人电话")]
  462. public string? RealHandlerPhone { get; set; }
  463. /// <summary>
  464. /// 沟通方式(手动填写)
  465. /// </summary>
  466. [SugarColumn(ColumnDescription = "沟通方式")]
  467. public ERealCommunicationMode? RealCommunicationMode { get; set; }
  468. /// <summary>
  469. /// 沟通时间(手动填写)
  470. /// </summary>
  471. [SugarColumn(ColumnDescription = "沟通时间")]
  472. public DateTime? RealCommunicationTime { get; set; }
  473. /// <summary>
  474. /// 沟通地点(手动填写)
  475. /// </summary>
  476. [SugarColumn(ColumnDescription = "沟通地点")]
  477. public string? RealCommunicationAddress { get; set; }
  478. /// <summary>
  479. /// 已与市民沟通
  480. /// </summary>
  481. [SugarColumn(ColumnDescription = "已与市民沟通")]
  482. public bool? RealIsContacted { get; set; }
  483. /// <summary>
  484. /// 已与市民现场沟通
  485. /// </summary>
  486. [SugarColumn(ColumnDescription = "已与市民现场沟通")]
  487. public bool? RealContactLocale { get; set; }
  488. /// <summary>
  489. /// 其它
  490. /// </summary>
  491. [SugarColumn(ColumnDescription = "其它")]
  492. public bool? IsOther { get; set; }
  493. /// <summary>
  494. /// 其它的备注
  495. /// </summary>
  496. [SugarColumn(ColumnDescription = "其它的备注")]
  497. public string? OtherRemark { get; set; }
  498. #endregion
  499. #region 当前办理节点信息(指派时赋值)
  500. [SugarColumn(ColumnDescription = "当前办理节点ID")]
  501. public string? CurrentStepId { get; set; }
  502. /// <summary>
  503. /// 当前办理节点code(非会签:当前被指派节点,会签:会签发起节点)
  504. /// </summary>
  505. [SugarColumn(ColumnDescription = "当前办理节点code")]
  506. public string? CurrentStepCode { get; set; }
  507. /// <summary>
  508. /// 当前节点名称
  509. /// </summary>
  510. [SugarColumn(ColumnDescription = "当前节点名称")]
  511. public string? CurrentStepName { get; set; }
  512. /// <summary>
  513. /// 到达当前节点时间
  514. /// </summary>
  515. [SugarColumn(ColumnDescription = "到达当前节点时间")]
  516. public DateTime? CurrentStepCreateTime { get; set; }
  517. /// <summary>
  518. /// 当前办理节点签收时间
  519. /// </summary>
  520. [SugarColumn(ColumnDescription = "当前办理节点签收时间")]
  521. public DateTime? CurrentStepAcceptTime { get; set; }
  522. /// <summary>
  523. /// 当前办理时间
  524. /// </summary>
  525. [SugarColumn(ColumnDescription = "当前办理时间")]
  526. public DateTime? CurrentHandleTime { get; set; }
  527. /// <summary>
  528. /// 当前办理人id
  529. /// </summary>
  530. [SugarColumn(ColumnDescription = "当前办理人ID")]
  531. public string? CurrentHandlerId { get; set; }
  532. /// <summary>
  533. /// 当前办理人名称
  534. /// </summary>
  535. [SugarColumn(ColumnDescription = "当前办理人姓名")]
  536. public string? CurrentHandlerName { get; set; }
  537. /// <summary>
  538. /// 当前办理部门名称
  539. /// </summary>
  540. [SugarColumn(ColumnDescription = "当前办理部门名称")]
  541. public string? CurrentHandleOrgName { get; set; }
  542. /// <summary>
  543. /// 当前办理部门编码
  544. /// </summary>
  545. [SugarColumn(ColumnDescription = "当前办理部门编码")]
  546. public string? CurrentHandleOrgId { get; set; }
  547. /// <summary>
  548. /// 当前办理部门等级
  549. /// </summary>
  550. [SugarColumn(ColumnDescription = "当前办理部门等级")]
  551. public int? CurrentHandleOrgLevel { get; set; }
  552. /// <summary>
  553. /// 当前办理部门行政区划编码
  554. /// </summary>
  555. [SugarColumn(ColumnDescription = "当前办理部门行政区划编码")]
  556. public string? CurrentHandleOrgAreaCode { get; set; }
  557. /// <summary>
  558. /// 当前办理部门行政区划名称
  559. /// </summary>
  560. [SugarColumn(ColumnDescription = "当前办理部门行政区划名称")]
  561. public string? CurrentHandleOrgAreaName { get; set; }
  562. #endregion
  563. #region 一级部门
  564. /// <summary>
  565. /// 一级部门code
  566. /// </summary>
  567. [SugarColumn(IsNullable = true, ColumnDescription = "一级部门编码")]
  568. public string? OrgLevelOneCode { get; set; }
  569. /// <summary>
  570. /// 一级部门名称
  571. /// </summary>
  572. [SugarColumn(IsNullable = true, ColumnDescription = "一级部门名称")]
  573. public string? OrgLevelOneName { get; set; }
  574. #endregion
  575. #region 二级部门
  576. /// <summary>
  577. /// 二级部门code
  578. /// </summary>
  579. [SugarColumn(IsNullable = true, ColumnDescription = "二级部门编码")]
  580. public string? OrgLevelTwoCode { get; set; }
  581. /// <summary>
  582. /// 二级部门名称
  583. /// </summary>
  584. [SugarColumn(IsNullable = true, ColumnDescription = "二级部门名称")]
  585. public string? OrgLevelTwoName { get; set; }
  586. #endregion
  587. #region 受理人(开启流程的话务员)
  588. /// <summary>
  589. /// 受理人id
  590. /// </summary>
  591. [SugarColumn(ColumnDescription = "受理人ID")]
  592. public string? AcceptorId { get; set; }
  593. /// <summary>
  594. /// 受理人名称
  595. /// </summary>
  596. [SugarColumn(ColumnDescription = "受理人姓名")]
  597. public string? AcceptorName { get; set; }
  598. /// <summary>
  599. /// 受理人工号
  600. /// </summary>
  601. [SugarColumn(ColumnDescription = "受理人工号")]
  602. public string? AcceptorStaffNo { get; set; }
  603. /// <summary>
  604. /// 受理人部门编码
  605. /// </summary>
  606. [SugarColumn(ColumnDescription = "受理人部门编码")]
  607. public string? AcceptorOrgCode { get; set; }
  608. /// <summary>
  609. /// 受理人部门名称
  610. /// </summary>
  611. [SugarColumn(ColumnDescription = "受理人部门名称")]
  612. public string? AcceptorOrgName { get; set; }
  613. #endregion
  614. #region 派单人
  615. /// <summary>
  616. /// 派单次数
  617. /// </summary>
  618. [SugarColumn(ColumnDescription = "派单次数")]
  619. public int? SendOrderNumber { get; set; } = 0;
  620. #endregion
  621. /// <summary>
  622. /// 会签类型
  623. /// </summary>
  624. [SugarColumn(ColumnDescription = "会签类型")]
  625. public ECounterSignType? CounterSignType { get; set; }
  626. #region 签收
  627. /// <summary>
  628. /// 签收人id
  629. /// </summary>
  630. [SugarColumn(ColumnDescription = "签收人ID")]
  631. public string? SignerId { get; set; }
  632. /// <summary>
  633. /// 签收人名称
  634. /// </summary>
  635. [SugarColumn(ColumnDescription = "签收人姓名")]
  636. public string? SignerName { get; set; }
  637. #endregion
  638. #region 归档冗余字段
  639. /// <summary>
  640. /// 归档人名称
  641. /// </summary>
  642. [SugarColumn(ColumnDescription = "归档人姓名")]
  643. public string? FileUserName { get; set; }
  644. /// <summary>
  645. /// 归档人ID
  646. /// </summary>
  647. [SugarColumn(ColumnDescription = "归档人ID")]
  648. public string? FileUserId { get; set; }
  649. /// <summary>
  650. /// 归档人部门Id
  651. /// </summary>
  652. [SugarColumn(ColumnDescription = "归档人部门ID")]
  653. public string? FileUserOrgId { get; set; }
  654. /// <summary>
  655. /// 归档人部门名称
  656. /// </summary>
  657. [SugarColumn(ColumnDescription = "归档人部门名称")]
  658. public string? FileUserOrgName { get; set; }
  659. /// <summary>
  660. /// 归档人部门是否属于中心
  661. /// </summary>
  662. [SugarColumn(ColumnDescription = "归档人部门是否为中心")]
  663. public bool? FileOrgIsCenter { get; set; }
  664. /// <summary>
  665. /// 归档人类型
  666. /// </summary>
  667. [SugarColumn(ColumnDescription = "归档人类型")]
  668. public EFileUserType? FileUserRole { get; set; }
  669. /// <summary>
  670. /// 归档意见
  671. /// </summary>
  672. [SugarColumn(ColumnDataType = "text", ColumnDescription = "归档意见")]
  673. public string? FileOpinion { get; set; }
  674. #endregion
  675. #endregion
  676. #region 省工单字段
  677. /// <summary>
  678. /// 省期满时间(省工单才有)
  679. /// </summary>
  680. [SugarColumn(ColumnDescription = "省期满时间")]
  681. public DateTime? ExpiredTimeProvince { get; set; }
  682. /// <summary>
  683. /// 省本地编号
  684. /// </summary>
  685. [SugarColumn(ColumnDescription = "省本地编号")]
  686. public string? ProvinceNo { get; set; }
  687. /// <summary>
  688. /// 省交办编号
  689. /// </summary>
  690. [SugarColumn(ColumnDescription = "省交办编号")]
  691. public string? ReceiveProvinceNo { get; set; }
  692. /// <summary>
  693. /// 外部工单唯一标识
  694. /// </summary>
  695. [SugarColumn(ColumnDescription = "外部工单唯一标识")]
  696. public string? ExternalId { get; set; }
  697. /// <summary>
  698. /// 工单标签
  699. /// </summary>
  700. [SugarColumn(ColumnDescription = "工单标签")]
  701. public string? TagNames { get; set; }
  702. /// <summary>
  703. /// 省退回结果
  704. /// </summary>
  705. [SugarColumn(ColumnDescription ="省退回结果")]
  706. public bool? ProvinceSendBack { get; set; }
  707. #endregion
  708. #region 附件冗余
  709. [SugarColumn(ColumnDataType = "json", IsJson = true, IsNullable = true, ColumnDescription = "附件JSON")]
  710. public List<FileJson>? FileJson { get; set; }
  711. #endregion
  712. #region 市州工单互转
  713. /// <summary>
  714. /// 是否转发
  715. /// </summary>
  716. [SugarColumn(ColumnDescription = "是否转发")]
  717. public bool? Transpond { get; set; }
  718. /// <summary>
  719. /// 转发市州Id
  720. /// </summary>
  721. [SugarColumn(ColumnDescription = "转发市州ID")]
  722. public string? TranspondCityId { get; set; }
  723. /// <summary>
  724. /// 转发市州名称
  725. /// </summary>
  726. [SugarColumn(ColumnDescription = "转发市州名称")]
  727. public string? TranspondCityName { get; set; }
  728. /// <summary>
  729. /// 转发市州Value
  730. /// </summary>
  731. [SugarColumn(ColumnDescription = "转发市州Value")]
  732. public string? TranspondCityValue { get; set; }
  733. #endregion
  734. #region 重办
  735. /// <summary>
  736. /// 重办次数
  737. /// </summary>
  738. [SugarColumn(ColumnDescription = "重办次数")]
  739. public int? ReTransactNum { get; set; }
  740. /// <summary>
  741. /// 派单退回次数
  742. /// </summary>
  743. [SugarColumn(ColumnDescription = "派单退回次数")]
  744. public int? SendBackNum { get; set; }
  745. #endregion
  746. /// <summary>
  747. /// 敏感标签
  748. /// </summary>
  749. [SugarColumn(ColumnDataType = "json", IsJson = true, IsNullable = true, ColumnDescription = "敏感标签")]
  750. public List<string>? Sensitive { get; set; }
  751. /// <summary>
  752. /// 是否行政执法类
  753. /// </summary>
  754. [SugarColumn(ColumnDescription = "是否行政执法类")]
  755. public bool? IsEnforcementOrder { get; set; }
  756. /// <summary>
  757. /// 形式主义工单
  758. /// </summary>
  759. [SugarColumn(DefaultValue = "f", ColumnDescription = "是否形式主义工单")]
  760. public bool IsFormalistWorkOrder { get; set; }
  761. /// <summary>
  762. /// 敏感类工单
  763. /// </summary>
  764. [SugarColumn(DefaultValue = "f", ColumnDescription = "是否敏感类工单")]
  765. public bool IsSensitiveWorkOrders { get; set; }
  766. /// <summary>
  767. /// 24小时办结
  768. /// </summary>
  769. [SugarColumn(DefaultValue = "f", ColumnDescription = "是否24小时办结")]
  770. public bool Is24HoursComplete { get; set; }
  771. /// <summary>
  772. /// 部门是否解决
  773. /// </summary>
  774. [SugarColumn(DefaultValue = "f", ColumnDescription = "部门是否解决")]
  775. public bool IsResolved { get; set; }
  776. /// <summary>
  777. /// 是否紧急
  778. /// 在创单的时候勾选的是否紧急
  779. /// </summary>
  780. [SugarColumn(DefaultValue = "f", ColumnDescription = "是否紧急")]
  781. public bool IsUrgent { get; set; }
  782. /// <summary>
  783. /// 是否紧急
  784. /// 在办理的时候勾选的是否紧急
  785. /// </summary>
  786. [SugarColumn(DefaultValue = "f", ColumnDescription = "办理勾选是否紧急")]
  787. public bool IsStepUrgent { get; set; }
  788. /// <summary>
  789. /// 是否推诿
  790. /// </summary>
  791. [SugarColumn(DefaultValue = "f", ColumnDescription = "是否推诿")]
  792. public bool IsEvasive { get; set; }
  793. /// <summary>
  794. /// 是否不积极
  795. /// </summary>
  796. [SugarColumn(DefaultValue = "f", ColumnDescription = "是否不积极")]
  797. public bool IsInactively { get; set; }
  798. /// <summary>
  799. /// 是否三方通话
  800. /// </summary>
  801. [SugarColumn(DefaultValue = "f", ColumnDescription = "是否三方通话")]
  802. public bool IsThreePartyConference { get; set; }
  803. /// <summary>
  804. /// 重点关注事件,保存前端选择,用于返回前端数据
  805. /// </summary>
  806. [SugarColumn(ColumnDescription = "重点关注事件")]
  807. public string? FocusOnEvents { get; set; }
  808. /// <summary>
  809. /// 重点关注事件名称,保存前端选择,用于返回前端数据
  810. /// </summary>
  811. [SugarColumn(ColumnDescription ="重点关注事件名称")]
  812. public string? FocusOnEventsName { get; set; }
  813. /// <summary>
  814. /// 待发布人Id
  815. /// </summary>
  816. [SugarColumn(ColumnDescription = "待发布人ID")]
  817. public string? WaitForPublisherId { get; set; }
  818. /// <summary>
  819. /// 是否政民互动公开
  820. /// </summary>
  821. [SugarColumn(DefaultValue = "f", ColumnDescription = "是否政民互动公开")]
  822. public bool IsProvinceZmhd { get; set; }
  823. /// <summary>
  824. /// 初审人姓名
  825. /// </summary>
  826. [SugarColumn(ColumnDescription = "初审人姓名")]
  827. public string? AuditFirstName { get; set; }
  828. /// <summary>
  829. /// 初审时间
  830. /// </summary>
  831. [SugarColumn(ColumnDescription = "初审时间")]
  832. public DateTime? AuditFirstTime { get; set; }
  833. /// <summary>
  834. /// 政民互动公开ID
  835. /// </summary>
  836. [SugarColumn(ColumnDescription = "政民互动公开ID")]
  837. public string? OrderProvinceZmhdId { get; set; }
  838. /// <summary>
  839. /// 超期部门
  840. /// </summary>
  841. [SugarColumn(IsIgnore = true, ColumnDescription = "超期部门名称")]
  842. public string? DaysOverdueOrgName { get; set; }
  843. /// <summary>
  844. /// 退回截至时间
  845. /// </summary>
  846. [SugarColumn(ColumnDescription = "退回截至时间")]
  847. public DateTime? SendBackAuditEndTime { get; set; }
  848. /// <summary>
  849. /// 话务提醒是否转办
  850. /// </summary>
  851. [SugarColumn(ColumnDescription = "话务提醒是否转办")]
  852. public bool? IsForwarded { get; set; }
  853. #region 回访信息
  854. /// <summary>
  855. /// 话务员评价(话务评价)
  856. /// </summary>
  857. [SugarColumn(ColumnDescription = "话务员评价")]
  858. public ESeatEvaluate? SeatEvaluate { get; set; }
  859. /// <summary>
  860. /// 部门办件结果
  861. /// </summary>
  862. [SugarColumn(ColumnDataType = "json", ColumnDescription = "部门办件结果", IsJson = true, IsNullable = true)]
  863. public Kv? OrgProcessingResults { get; set; }
  864. #endregion
  865. }
  866. public partial class Order
  867. {
  868. /// <summary>
  869. /// 受理人
  870. /// </summary>
  871. [Navigate(NavigateType.OneToOne, nameof(AcceptorId))]
  872. public User Acceptor { get; set; }
  873. /// <summary>
  874. /// 热点
  875. /// </summary>
  876. [Navigate(NavigateType.OneToOne, nameof(HotspotId))]
  877. public Hotspot Hotspot { get; set; }
  878. /// <summary>
  879. /// 办理流程
  880. /// </summary>
  881. [Navigate(NavigateType.OneToOne, nameof(WorkflowId))]
  882. public Workflow Workflow { get; set; }
  883. /// <summary>
  884. /// 工单扩展信息
  885. /// </summary>
  886. [Navigate(NavigateType.OneToOne, nameof(Id))]
  887. public OrderExtension OrderExtension { get; set; }
  888. /// <summary>
  889. /// 已发布工单
  890. /// </summary>
  891. [Navigate(NavigateType.OneToOne, nameof(Id), nameof(Orders.OrderPublish.OrderId))]
  892. public OrderPublish OrderPublish { get; set; }
  893. /// <summary>
  894. /// 已回访工单
  895. /// </summary>
  896. [Navigate(NavigateType.OneToMany, nameof(OrderVisit.OrderId))]
  897. public List<OrderVisit> OrderVisits { get; set; }
  898. /// <summary>
  899. /// 甄别
  900. /// </summary>
  901. [Navigate(NavigateType.OneToMany, nameof(OrderScreen.OrderId))]
  902. public List<OrderScreen> OrderScreens { get; set; }
  903. /// <summary>
  904. /// 终止
  905. /// </summary>
  906. [Navigate(NavigateType.OneToMany, nameof(OrderTerminate.OrderId))]
  907. public List<OrderTerminate> OrderTerminates { get; set; }
  908. /// <summary>
  909. ///
  910. /// </summary>
  911. [Navigate(NavigateType.OneToMany, nameof(OrderSpecial.OrderId))]
  912. public List<OrderSpecial> OrderSpecials { get; set; }
  913. /// <summary>
  914. /// 延期
  915. /// </summary>
  916. [Navigate(NavigateType.OneToMany, nameof(OrderDelay.OrderId))]
  917. public List<OrderDelay> OrderDelays { get; set; }
  918. /// <summary>
  919. /// 工单补充
  920. /// </summary>
  921. [Navigate(NavigateType.OneToMany, nameof(OrderComplement.OrderId))]
  922. public List<OrderComplement> OrderComplements { get; set; }
  923. /// <summary>
  924. /// 工单推送分类
  925. /// </summary>
  926. [Navigate(NavigateType.OneToMany, nameof(OrderPushType.OrderId))]
  927. public List<OrderPushType> OrderPushTypes { get; set; }
  928. /// <summary>
  929. /// 通话记录
  930. /// </summary>
  931. //[Navigate(NavigateType.OneToOne, nameof(CallId), nameof(TrCallRecord.CallAccept))] //由CallAccept改成OtherAccept
  932. [Navigate(NavigateType.OneToOne, nameof(CallId), nameof(TrCallRecord.OtherAccept))]
  933. public TrCallRecord CallRecord { get; set; }
  934. #region Method
  935. public void Cancel()
  936. {
  937. IsCancel = true;
  938. }
  939. public void Redo()
  940. {
  941. Status = EOrderStatus.Handling;
  942. ExpiredStatus = EExpiredStatus.Normal;
  943. }
  944. public void CheckIfFiled()
  945. {
  946. if (Status is EOrderStatus.Filed)
  947. throw UserFriendlyException.SameMessage("工单已归档");
  948. }
  949. public void Init()
  950. {
  951. if (!string.IsNullOrEmpty(Contact))
  952. ContactMask = Contact.MaskPhoneNumber();
  953. Status = EOrderStatus.WaitForAccept;
  954. ExpiredStatus = EExpiredStatus.Normal;
  955. }
  956. public void AutoAccept(string userId, string? userName, string? staffNo)
  957. {
  958. AcceptorId = userId;
  959. AcceptorName = userName;
  960. AcceptorStaffNo = staffNo;
  961. }
  962. /// <summary>
  963. /// 开始工单办理流程
  964. /// </summary>
  965. public void StartManageFlow() => Status = EOrderStatus.Handling;
  966. /// <summary>
  967. /// 更新工单办理中状态
  968. /// </summary>
  969. public void UpdateHandlingStatus(bool isInCountersign) =>
  970. Status = isInCountersign && Status < EOrderStatus.Filed ? EOrderStatus.Countersigning : EOrderStatus.Handling;
  971. /// <summary>
  972. /// 归档
  973. /// </summary>
  974. public void File(DateTime filedTime, double handleDurationWorkday, double fileDurationWorkday, double allDurationWorkday
  975. , double creationTimeHandleDurationWorkday, double centerToOrgHandleDurationWorkday)
  976. {
  977. if (Status is EOrderStatus.Filed) return;
  978. Status = EOrderStatus.Filed;
  979. FiledTime = filedTime;
  980. HandleDurationWorkday = handleDurationWorkday;
  981. FileDurationWorkday = fileDurationWorkday;
  982. AllDurationWorkday = allDurationWorkday;
  983. CreationTimeHandleDurationWorkday = creationTimeHandleDurationWorkday;
  984. CenterToOrgHandleDurationWorkday = centerToOrgHandleDurationWorkday;
  985. //计算实际办结时长
  986. SetHandleDuration();
  987. SetFileDuration();
  988. SetAllDuration();
  989. SetCreationTimeHandleDurationWorkday();
  990. SetCenterToOrgHandleDurationWorkday();
  991. }
  992. /// <summary>
  993. /// 特提之后 归档信息清空
  994. /// </summary>
  995. public void FileEmpty()
  996. {
  997. FiledTime = null;
  998. HandleDurationWorkday = 0;
  999. HandleDuration = 0;
  1000. FileDurationWorkday = 0;
  1001. FileDuration = 0;
  1002. AllDurationWorkday = 0;
  1003. AllDuration = 0;
  1004. CreationTimeHandleDurationWorkday = 0;
  1005. CreationTimeHandleDuration = 0;
  1006. CenterToOrgHandleDurationWorkday = 0;
  1007. CenterToOrgHandleDuration = 0;
  1008. }
  1009. /// <summary>
  1010. /// 发布
  1011. /// </summary>
  1012. /// <param name="isPublicity"></param>
  1013. public void Publish(bool isPublicity)
  1014. {
  1015. //Progress = EProgress.Published;
  1016. Status = EOrderStatus.Published;
  1017. IsPublicity = isPublicity;
  1018. }
  1019. /// <summary>
  1020. /// 已回访
  1021. /// </summary>
  1022. public void Visited(string resultCode, string result)
  1023. {
  1024. if (string.IsNullOrEmpty(resultCode) || string.IsNullOrEmpty(result))
  1025. return;
  1026. if (!string.IsNullOrEmpty(FirstVisitResultCode)) return;
  1027. FirstVisitResultCode = resultCode;
  1028. FirstVisitResult = result;
  1029. //Progress = EProgress.Visited;
  1030. Status = EOrderStatus.Visited;
  1031. }
  1032. public void CenterToOrg(string timelimit, int timelimitCount, ETimeType timilimitUnit,
  1033. DateTime expiredTime, DateTime nearlyExpiredTime, DateTime nearlyExpiredTimeOne,
  1034. string opinion, string handlerId, string handlerName,
  1035. bool canUpdateOrderSender)
  1036. {
  1037. ProcessType = EProcessType.Jiaoban;
  1038. TimeLimit = timelimit;
  1039. TimeLimitCount = timelimitCount;
  1040. TimeLimitUnit = timilimitUnit;
  1041. ExpiredTime = expiredTime;
  1042. if (CenterToOrgTime is null || canUpdateOrderSender)
  1043. {
  1044. CenterToOrgTime = DateTime.Now;
  1045. CenterToOrgOpinion = opinion;
  1046. CenterToOrgHandlerId = handlerId;
  1047. CenterToOrgHandlerName = handlerName;
  1048. }
  1049. NearlyExpiredTime = nearlyExpiredTime;
  1050. NearlyExpiredTimeOne = nearlyExpiredTimeOne;
  1051. SendOrderNumber += 1;
  1052. if (string.IsNullOrEmpty(WaitForPublisherId))
  1053. WaitForPublisherId = handlerId;
  1054. }
  1055. public void OrgToCenter(string timelimit, int timelimitCount, ETimeType timilimitUnit, DateTime expiredTime, DateTime nearlyExpiredTime, DateTime nearlyExpiredTimeOne)
  1056. {
  1057. ProcessType = EProcessType.Zhiban;
  1058. TimeLimit = timelimit;
  1059. TimeLimitCount = timelimitCount;
  1060. TimeLimitUnit = timilimitUnit;
  1061. ExpiredTime = expiredTime;
  1062. NearlyExpiredTime = nearlyExpiredTime;
  1063. NearlyExpiredTimeOne = nearlyExpiredTimeOne;
  1064. CenterToOrgTime = null;
  1065. CenterToOrgOpinion = null;
  1066. CenterToOrgHandlerId = null;
  1067. CenterToOrgHandlerName = null;
  1068. }
  1069. public void CenterToCenter(string timelimit, int timelimitCount, ETimeType timilimitUnit, DateTime expiredTime, DateTime nearlyExpiredTime, DateTime nearlyExpiredTimeOne)
  1070. {
  1071. TimeLimit = timelimit;
  1072. TimeLimitCount = timelimitCount;
  1073. TimeLimitUnit = timilimitUnit;
  1074. ExpiredTime = expiredTime;
  1075. NearlyExpiredTime = nearlyExpiredTime;
  1076. NearlyExpiredTimeOne = nearlyExpiredTimeOne;
  1077. }
  1078. public void SetHandleDuration()
  1079. {
  1080. if (!ActualHandleTime.HasValue) return;
  1081. if (!CenterToOrgTime.HasValue) return;
  1082. HandleDuration = Math.Round((ActualHandleTime - CenterToOrgTime).Value.TotalSeconds);
  1083. }
  1084. public void SetAllDuration()
  1085. {
  1086. if (!FiledTime.HasValue) return;
  1087. if (!StartTime.HasValue) return;
  1088. AllDuration = Math.Round((FiledTime - StartTime).Value.TotalSeconds);
  1089. }
  1090. public void SetFileDuration()
  1091. {
  1092. if (!FiledTime.HasValue) return;
  1093. if (!CenterToOrgTime.HasValue) return;
  1094. FileDuration = Math.Round((FiledTime - CenterToOrgTime).Value.TotalSeconds);
  1095. }
  1096. /// <summary>
  1097. /// 办结时长(秒) 归档时间-受理时间(工单创建时间)
  1098. /// </summary>
  1099. public void SetCreationTimeHandleDurationWorkday()
  1100. {
  1101. if (!FiledTime.HasValue)
  1102. CreationTimeHandleDuration = 0;
  1103. else
  1104. {
  1105. var count = Math.Round((FiledTime - CreationTime).Value.TotalSeconds);
  1106. CreationTimeHandleDuration = count <= 0 ? 1 : count;
  1107. }
  1108. }
  1109. /// <summary>
  1110. /// 办结时长(秒) 归档时间-派单时间(中心到部门时间)
  1111. /// </summary>
  1112. public void SetCenterToOrgHandleDurationWorkday()
  1113. {
  1114. if (FiledTime.HasValue && CenterToOrgTime.HasValue)
  1115. {
  1116. var count = Math.Round((FiledTime - CenterToOrgTime).Value.TotalSeconds);
  1117. CenterToOrgHandleDuration = count <= 0 ? 1 : count;
  1118. }
  1119. else
  1120. CenterToOrgHandleDuration = 0;
  1121. }
  1122. /// <summary>
  1123. /// 是否已签收
  1124. /// </summary>
  1125. public bool IsSigned() => !string.IsNullOrEmpty(SignerId);
  1126. /// <summary>
  1127. /// 签收
  1128. /// </summary>
  1129. public void Sign(string userId, string userName)
  1130. {
  1131. if (string.IsNullOrEmpty(SignerId))
  1132. {
  1133. SignerId = userId;
  1134. SignerName = userName;
  1135. }
  1136. }
  1137. /// <summary>
  1138. /// 自动发布条件检测
  1139. /// </summary>
  1140. /// <returns></returns>
  1141. /// <exception cref="NotImplementedException"></exception>
  1142. public string AutoPublishCheck()
  1143. {
  1144. if (CounterSignType != null)
  1145. return "会签工单自动发布失败;";
  1146. if (IsProvince)
  1147. return "省工单自动发布失败;";
  1148. if (Status != EOrderStatus.Filed)
  1149. return "工单状态非 已归档, " + Status.GetDescription();
  1150. return "";
  1151. }
  1152. #endregion
  1153. }
  1154. public class UnsignedOrder
  1155. {
  1156. public Order Order { get; set; }
  1157. public WorkflowStep WorkflowStep { get; set; }
  1158. }
  1159. }