OrderVisitDto.cs 32 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273
  1. using Hotline.Share.Dtos.CallCenter;
  2. using Hotline.Share.Dtos.Settings;
  3. using Hotline.Share.Dtos.Users;
  4. using Hotline.Share.Enums.Order;
  5. using Hotline.Share.Requests;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.ComponentModel;
  9. using System.ComponentModel.DataAnnotations;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. using XF.Utility.EnumExtensions;
  14. namespace Hotline.Share.Dtos.Order
  15. {
  16. public record CanLinkCallRecordOrderVisitDto : PagedKeywordRequest
  17. {
  18. }
  19. public record QueryOrderVisitDto : PagedKeywordRequest
  20. {
  21. public EVisitStateQuery VisitStateQuery { get; set; }
  22. /// <summary>
  23. /// 归档方式
  24. /// </summary>
  25. public FiledType? FiledType { get; set; }
  26. /// <summary>
  27. /// 是否会签
  28. /// </summary>
  29. public bool? IsCountersign { get; set; }
  30. /// <summary>
  31. /// 回访方式
  32. /// </summary>
  33. public EVisitType? VisitType { get; set; }
  34. /// <summary>
  35. /// 工单编号
  36. /// </summary>
  37. public string? No { get; set; }
  38. /// <summary>
  39. /// 是否只查询自己的待回访工单
  40. /// </summary>
  41. public bool? QuerySelf { get; set; }
  42. /// <summary>
  43. /// 回访人
  44. /// </summary>
  45. public string? EmployeeName { get; set; }
  46. /// <summary>
  47. /// 是否省工单
  48. /// </summary>
  49. public bool? IsProvince { get; set; }
  50. /// <summary>
  51. /// 是否有效智能回访
  52. /// </summary>
  53. public bool? IsEffectiveAiVisit { get; set; }
  54. /// <summary>
  55. /// 来电号码
  56. /// </summary>
  57. public string? FromPhone { get; set; }
  58. /// <summary>
  59. /// 联系电话
  60. /// </summary>
  61. public string? Contact { get; set; }
  62. /// <summary>
  63. /// 语音评价(话务评价)
  64. /// </summary>
  65. public List<EVoiceEvaluate> VoiceEvaluate { get; set; } = new();
  66. /// <summary>
  67. /// 话务员评价(话务评价)
  68. /// </summary>
  69. public List<ESeatEvaluate> SeatEvaluate { get; set; } = new();
  70. /// <summary>
  71. /// 部门办件结果
  72. /// </summary>
  73. public List<string> OrgProcessingResults { get; set; } = new();
  74. /// <summary>
  75. /// 部门办件态度
  76. /// </summary>
  77. public List<string> OrgHandledAttitude { get; set; } = new();
  78. /// <summary>
  79. /// 来源渠道
  80. /// </summary>
  81. public string Channel { get; set; }
  82. /// <summary>
  83. /// 是否超期
  84. /// </summary>
  85. public bool? IsOverTime { get; set; }
  86. /// <summary>
  87. /// 发布时间
  88. /// </summary>
  89. public DateTime? StartPublishTime { get; set; }
  90. /// <summary>
  91. /// 发布时间
  92. /// </summary>
  93. public DateTime? EndPublishTime { get; set; }
  94. /// <summary>
  95. /// 接办部门
  96. /// </summary>
  97. public string? ActualHandleOrgName { get; set; }
  98. /// <summary>
  99. /// 一级部门
  100. /// </summary>
  101. public string? OrgLevelOneName { get; set; }
  102. /// <summary>
  103. /// 来电主体
  104. /// </summary>
  105. public EIdentityType? IdentityType { get; set; }
  106. /// <summary>
  107. /// 受理时间(工单创建时间)
  108. /// </summary>
  109. public DateTime? CreationTimeStart { get; set; }
  110. public DateTime? CreationTimeEnd { get; set; }
  111. /// <summary>
  112. /// 智能回访结果
  113. /// </summary>
  114. public EAiVisitResult? AiVisitResult { get; set; }
  115. /// <summary>
  116. /// 是否创建立智能回访任务
  117. /// </summary>
  118. public bool? IsAiVisit { get; set; }
  119. /// <summary>
  120. /// 工单标签Code
  121. /// </summary>
  122. public string? OrderTagCode { get; set; }
  123. /// <summary>
  124. /// 是否回访结果修改
  125. /// </summary>
  126. public bool? IsUpdate { get; set; }
  127. }
  128. public record QueryOrderPublishStatisticsAllDto : PagedRequest
  129. {
  130. /// <summary>
  131. /// 开始时间
  132. /// </summary>
  133. [Required]
  134. public DateTime StartTime { get; set; }
  135. /// <summary>
  136. /// 结束时间
  137. /// </summary>
  138. [Required]
  139. public DateTime EndTime { get; set; }
  140. }
  141. public record QueryOrderPublishStatisticsDto : PagedRequest
  142. {
  143. /// <summary>
  144. /// 开始时间
  145. /// </summary>
  146. [Required]
  147. public DateTime StartTime { get; set; }
  148. /// <summary>
  149. /// 结束时间
  150. /// </summary>
  151. [Required]
  152. public DateTime EndTime { get; set; }
  153. /// <summary>
  154. /// 归档方式; 10 = 中心归档, 20 = 部门归档;
  155. /// 不传查询全部
  156. /// </summary>
  157. public EProcessType? ProcessType { get; set; }
  158. }
  159. public class QueryOrderVisitQuantity : StartEndTimeDto
  160. {
  161. /// <summary>
  162. /// 访问员
  163. /// </summary>
  164. public string? EmployeeName { get; set; }
  165. }
  166. public record QueryOrderVisitSourceChannelDto
  167. {
  168. /// <summary>
  169. /// 开始时间
  170. /// </summary>
  171. [Required]
  172. public DateTime StartTime { get; set; }
  173. /// <summary>
  174. /// 结束时间
  175. /// </summary>
  176. [Required]
  177. public DateTime EndTime { get; set; }
  178. }
  179. public record VisitJudgeQueryReq : PagedKeywordRequest
  180. {
  181. /// <summary>
  182. /// 转接号码
  183. /// </summary>
  184. public string? TransferPhone { get; set; }
  185. /// <summary>
  186. /// 归档类型
  187. /// </summary>
  188. public FiledType? FiledType { get; set; }
  189. /// <summary>
  190. /// 工单编号
  191. /// </summary>
  192. public string? No { get; set; }
  193. /// <summary>
  194. /// 工单标题
  195. /// </summary>
  196. public string? Title { get; set; }
  197. /// <summary>
  198. /// 回访人
  199. /// </summary>
  200. public string? VisitUserName { get; set; }
  201. /// <summary>
  202. /// 来电号码
  203. /// </summary>
  204. public string? FromPhone { get; set; }
  205. /// <summary>
  206. /// 受理类型
  207. /// </summary>
  208. public string AcceptType { get; set; }
  209. /// <summary>
  210. /// 热点分类
  211. /// </summary>
  212. public string Hotspot { get; set; }
  213. /// <summary>
  214. /// 接办部门
  215. /// </summary>
  216. public string OrgId { get; set; }
  217. /// <summary>
  218. /// 受理坐席名字或工号
  219. /// </summary>
  220. public string? NameOrNo { get; set; }
  221. /// <summary>
  222. /// 受理时间(工单创建时间)
  223. /// </summary>
  224. public DateTime? CreationTimeStart { get; set; }
  225. public DateTime? CreationTimeEnd { get; set; }
  226. /// <summary>
  227. /// 办结时间
  228. /// </summary>
  229. public DateTime? ActualHandleTimeStart { get; set; }
  230. public DateTime? ActualHandleTimeEnd { get; set; }
  231. /// <summary>
  232. /// 回访时间
  233. /// </summary>
  234. public DateTime? VisitTimeStart { get; set; }
  235. public DateTime? VisitTimeEnd { get; set; }
  236. /// <summary>
  237. /// 评判状态
  238. /// </summary>
  239. public EJudgeState? JudgeState { get; set; }
  240. /// <summary>
  241. /// 部门扭转
  242. /// </summary>
  243. public bool? OrgJudge { get; set; }
  244. /// <summary>
  245. /// 坐席扭转
  246. /// </summary>
  247. public bool? SeatJudge { get; set; }
  248. /// <summary>
  249. /// 是否待扭转
  250. /// </summary>
  251. public bool IsIng { get; set; }
  252. }
  253. public class JudgeVisitReq
  254. {
  255. public List<string> Ids { get; set; }
  256. /// <summary>
  257. /// 是否同意
  258. /// </summary>
  259. public bool IsAgree { get; set; }
  260. /// <summary>
  261. /// 是否
  262. /// </summary>
  263. public string? JudgeContent { get; set; }
  264. }
  265. public class JudgeVisitRsp
  266. {
  267. public int ErrorCount { get; set; }
  268. public int SuccessCount { get; set; }
  269. }
  270. public record VisitDetailListDto : PagedKeywordRequest
  271. {
  272. public EVisitStateQuery VisitState { get; set; }
  273. }
  274. public record DistributionVisitDto
  275. {
  276. public List<string> Ids { get; set; }
  277. public string UserId { get; set; }
  278. }
  279. public record VisitPutThroughDto
  280. {
  281. public string id { get; set; }
  282. }
  283. public class VisitSmsInDto
  284. {
  285. [Required]
  286. public List<string> Ids { get; set; }
  287. }
  288. /// <summary>
  289. /// 批量保存回访入参
  290. /// </summary>
  291. public class VisitBatchInDto
  292. {
  293. /// <summary>
  294. /// 批量保存回访入参
  295. /// </summary>
  296. public class VisitIdsBatchInDto
  297. {
  298. /// <summary>
  299. /// 工单Id
  300. /// </summary>
  301. [Required(ErrorMessage = "工单Id不能为空")]
  302. public string OrderId { get; set; }
  303. /// <summary>
  304. /// 回访Id
  305. /// </summary>
  306. [Required(ErrorMessage = "回访Id不能为空")]
  307. public string VisitId { get; set; }
  308. /// <summary>
  309. /// 工单标题
  310. /// </summary>
  311. [Required(ErrorMessage = "工单标题不能为空")]
  312. public string No { get; set; }
  313. }
  314. /// <summary>
  315. /// 回访Id集合
  316. /// </summary>
  317. [Required]
  318. public List<VisitIdsBatchInDto> Visit { get; set; }
  319. /// <summary>
  320. /// 话务员评价(话务评价)
  321. /// </summary>
  322. public ESeatEvaluate? SeatEvaluate { get; set; }
  323. /// <summary>
  324. /// 部门办件结果
  325. /// </summary>
  326. [Required(ErrorMessage = "部门办结结果不能为空")]
  327. public Kv OrgProcessingResults { get; set; }
  328. /// <summary>
  329. /// 部门办件态度
  330. /// </summary>
  331. [Required(ErrorMessage = "部门办件态度不能为空")]
  332. public Kv OrgHandledAttitude { get; set; }
  333. /// <summary>
  334. /// 不满意原因
  335. /// </summary>
  336. public List<Kv>? OrgNoSatisfiedReason { get; set; }
  337. /// <summary>
  338. /// 话务员回访内容
  339. /// </summary>
  340. [Required(ErrorMessage = "话务员回访内容不能为空")]
  341. public string SeatVisitContent { get; set; }
  342. /// <summary>
  343. /// 部门回访内容
  344. /// </summary>
  345. [Required(ErrorMessage = "部门回访内容不能为空")]
  346. public string OrgVisitContent { get; set; }
  347. }
  348. public class VisitBatchOutDto
  349. {
  350. /// <summary>
  351. /// 总个数
  352. /// </summary>
  353. public int TotalCount { get; set; }
  354. /// <summary>
  355. /// 成功个数
  356. /// </summary>
  357. public int CompleteCount { get; set; }
  358. /// <summary>
  359. /// 异常个数
  360. /// </summary>
  361. public int ErrorCount { get; set; }
  362. /// <summary>
  363. /// 异常信息
  364. /// </summary>
  365. public string ErrorMessage { get; set; }
  366. }
  367. public record VisitDto
  368. {
  369. /// <summary>
  370. /// 回访主表主键
  371. /// </summary>
  372. public string Id { get; set; }
  373. /// <summary>
  374. /// 是否接通
  375. /// </summary>
  376. public bool IsPutThrough { get; set; }
  377. /// <summary>
  378. /// 通话记录ID
  379. /// </summary>
  380. public string? CallId { get; set; }
  381. /// <summary>
  382. /// 是否重办
  383. /// </summary>
  384. public bool IsAgain { get; set; }
  385. /// <summary>
  386. /// 部门扭转
  387. /// </summary>
  388. public bool? OrgJudge { get; set; }
  389. /// <summary>
  390. /// 坐席扭转
  391. /// </summary>
  392. public bool? SeatJudge { get; set; }
  393. /// <summary>
  394. /// 是否回访结果修改
  395. /// </summary>
  396. public bool? IsUpdate { get; set; }
  397. public List<VisitDetailDto> VisitDetails { get; set; }
  398. }
  399. public record VisitDetailDto
  400. {
  401. /// <summary>
  402. /// Id
  403. /// </summary>
  404. public string Id { get; set; }
  405. /// <summary>
  406. /// 回访主表ID
  407. /// </summary>
  408. public string VisitId { get; set; }
  409. /// <summary>
  410. /// 语音评价(话务评价)
  411. /// </summary>
  412. public EVoiceEvaluate? VoiceEvaluate { get; set; }
  413. /// <summary>
  414. /// 话务员评价(话务评价)
  415. /// </summary>
  416. public ESeatEvaluate? SeatEvaluate { get; set; }
  417. /// <summary>
  418. /// 部门办件结果
  419. /// </summary>
  420. public Kv? OrgProcessingResults { get; set; }
  421. /// <summary>
  422. /// 不满意原因
  423. /// </summary>
  424. public List<Kv>? OrgNoSatisfiedReason { get; set; }
  425. /// <summary>
  426. /// 部门办件态度
  427. /// </summary>
  428. public Kv? OrgHandledAttitude { get; set; }
  429. /// <summary>
  430. /// 是否联系
  431. /// </summary>
  432. public bool? IsContact { get; set; }
  433. /// <summary>
  434. /// 处理结果
  435. /// </summary>
  436. public bool? Volved { get; set; }
  437. /// <summary>
  438. /// 未解决备注
  439. /// </summary>
  440. public string? VolveConent { get; set; }
  441. /// <summary>
  442. /// 回访内容
  443. /// </summary>
  444. public string? VisitContent { get; set; }
  445. /// <summary>
  446. /// 回访部门名称
  447. /// </summary>
  448. public string? VisitOrgName { get; set; }
  449. /// <summary>
  450. /// 回访部门Code
  451. /// </summary>
  452. public string? VisitOrgCode { get; set; }
  453. /// <summary>
  454. /// 回访对象类型 10:话务员 20:部门
  455. /// </summary>
  456. public EVisitTarget? VisitTarget { get; set; }
  457. }
  458. public record OrderVisitAgainListDto : PagedKeywordRequest
  459. {
  460. }
  461. public class AiVisitQueryData
  462. {
  463. public string Uid { get; set; }
  464. public int Status { get; set; }
  465. }
  466. public class AddVisitApplyDto
  467. {
  468. public string OrderNo { get; set; }
  469. public string OrderId { get; set; }
  470. public string VisitReason { get; set; }
  471. public string OrderVisitId { get; set; }
  472. public List<string> FileIds { get; set; }
  473. }
  474. public class ExaminOrderVisitDto
  475. {
  476. public string Id { get; set; }
  477. public string? ExaminOpinion { get; set; }
  478. public bool IsPass { get; set; }
  479. }
  480. public class OrderCanVisitAgainDto
  481. {
  482. public OrderVisitDto OrderVisit { get; set; }
  483. /// <summary>
  484. /// 部门办件结果
  485. /// </summary>
  486. public Kv? OrgProcessingResults { get; set; }
  487. /// <summary>
  488. /// 不满意原因
  489. /// </summary>
  490. public List<Kv>? OrgNoSatisfiedReason { get; set; }
  491. /// <summary>
  492. /// 部门办件态度
  493. /// </summary>
  494. public Kv? OrgHandledAttitude { get; set; }
  495. /// <summary>
  496. /// 回访部门名称
  497. /// </summary>
  498. public string VisitOrgName { get; set; }
  499. }
  500. public class VisitApplyDto
  501. {
  502. public string? ExaminOpinion { get; set; }
  503. public DateTime CreationTime { get; set; }
  504. public string OrderNo { get; set; }
  505. public string OrderId { get; set; }
  506. public OrderDto Order { get; set; }
  507. public string EmployeeId { get; set; }
  508. public UserDto Employee { get; set; }
  509. public string VisitReason { get; set; }
  510. /// <summary>
  511. /// 源单号
  512. /// </summary>
  513. public string OrderVisitId { get; set; }
  514. public OrderVisitDto OrderVisit { get; set; }
  515. /// <summary>
  516. /// 流程ID
  517. /// </summary>
  518. public string? WorkflowId { get; set; }
  519. public EVisitApplyState VisitApplyState { get; set; }
  520. public string VisitApplyStateText => VisitApplyState.GetDescription();
  521. public string Id { get; set; }
  522. public string? CreatorId { get; set; }
  523. public string? CreatorName { get; set; }
  524. public string? CreatorOrgId { get; set; }
  525. public string? CreatorOrgName { get; set; }
  526. public int CreatorOrgLevel { get; set; }
  527. /// <summary>
  528. /// 一级部门Id
  529. /// </summary>
  530. public string? AreaId { get; set; }
  531. }
  532. public record VisitApplyListDto : PagedKeywordRequest
  533. {
  534. public EVisitApplyState? VisitApplyState { get; set; }
  535. }
  536. public enum EVisitStateQuery
  537. {
  538. /// <summary>
  539. /// 全部
  540. /// </summary>
  541. [Description("全部")]
  542. All = 0,
  543. /// <summary>
  544. /// 已回访
  545. /// </summary>
  546. [Description("已回访")]
  547. Visited = 1,
  548. /// <summary>
  549. /// 未回访
  550. /// </summary>
  551. [Description("未回访")]
  552. NoVisit = 2,
  553. /// <summary>
  554. /// 短信回访中
  555. /// 逻辑需求(Task_317) : 操作了短信回访的工单,在没有短信结果回复前,回访状态需从“待回访”更新为“短信回访中”
  556. /// </summary>
  557. [Description("短信回访中")]
  558. SMSVisiting = 21,
  559. /// <summary>
  560. /// 短信不满意待回访
  561. /// 逻辑需求(Task_317) : 若短信回访结果为不满意,回访状态需从“短信回访中”更新为“短信不满意待回访”
  562. /// </summary>
  563. [Description("短信不满意待回访")]
  564. SMSUnsatisfied = 41,
  565. [Description("未接通")]
  566. NoPutThrough = 51,
  567. /// <summary>
  568. /// 智能回访中
  569. /// </summary>
  570. [Description("智能回访中")]
  571. ChipVoiceVisiting = 61,
  572. }
  573. public class OrderVisitQuantityOutDto
  574. {
  575. /// <summary>
  576. /// 回访员
  577. /// </summary>
  578. public string EmployeeName { get; set; }
  579. /// <summary>
  580. /// 回访员
  581. /// </summary>
  582. public string EmployeeId { get; set; }
  583. /// <summary>
  584. /// 电话回访量
  585. /// </summary>
  586. public int CallVisitCount { get; set; }
  587. /// <summary>
  588. /// 默认回访量
  589. /// </summary>
  590. public int DefaultVisitCount { get; set; }
  591. /// <summary>
  592. /// 短信回访量
  593. /// </summary>
  594. public int SmsVisitCount { get; set; }
  595. /// <summary>
  596. /// 总回访量
  597. /// </summary>
  598. public int TotalVisitCount => SmsVisitCount + DefaultVisitCount + CallVisitCount;
  599. }
  600. public class OrderVisitSourceChannelDto
  601. {
  602. public int Count { get; set; }
  603. public string SourceChannel { get; set; }
  604. }
  605. public class OrderVisitDto
  606. {
  607. public string Id { get; set; }
  608. public OrderDto Order { get; set; }
  609. /// <summary>
  610. /// 回访状态
  611. /// </summary>
  612. public EVisitState VisitState { get; set; }
  613. public string VisitStateText => VisitState.GetDescription();
  614. /// <summary>
  615. /// 回访方式
  616. /// </summary>
  617. public EVisitType? VisitType { get; set; }
  618. public string VisitTypeText => VisitType?.GetDescription() ?? string.Empty;
  619. /// <summary>
  620. /// 发布时间
  621. /// </summary>
  622. public DateTime PublishTime { get; set; }
  623. /// <summary>
  624. /// 回访人
  625. /// </summary>
  626. public string? EmployeeId { get; set; }
  627. public string? EmployeeName { get; set; }
  628. public DateTime CreationTime { get; set; }
  629. /// <summary>
  630. /// 是否接通
  631. /// </summary>
  632. public bool? IsPutThrough { get; set; }
  633. /// <summary>
  634. /// 重办状态
  635. /// </summary>
  636. public EAgainState? AgainState { get; set; }
  637. public string AgainStateText => AgainState?.GetDescription() ?? string.Empty;
  638. /// <summary>
  639. /// 回访时间
  640. /// </summary>
  641. public DateTime? VisitTime { get; set; }
  642. /// <summary>
  643. /// 回访明细
  644. /// </summary>
  645. public List<OrderVisitDetailDto> OrderVisitDetails { get; set; }
  646. /// <summary>
  647. /// 可直接访问的通话录音地址
  648. /// </summary>
  649. public string? RecordingFileUrl { get; set; }
  650. public string? RecordingBaseAddress { get; set; }
  651. public string? RecordingAbsolutePath { get; set; }
  652. /// <summary>
  653. /// 渠道为电话时,此字段存在
  654. /// </summary>
  655. public string? CallId { get; set; }
  656. public Kv? NowEvaluate { get; set; }
  657. /// <summary>
  658. /// 智能回访录音地址
  659. /// </summary>
  660. public string? RecordUrl { get; set; }
  661. /// <summary>
  662. /// 部门扭转
  663. /// </summary>
  664. public bool? OrgJudge { get; set; }
  665. /// <summary>
  666. /// 坐席扭转
  667. /// </summary>
  668. public bool? SeatJudge { get; set; }
  669. /// <summary>
  670. /// 评判状态
  671. /// </summary>
  672. public EJudgeState? JudgeState { get; set; }
  673. public string? JudgeStateText => JudgeState?.GetDescription() ?? string.Empty;
  674. /// <summary>
  675. /// 评判意见
  676. /// </summary>
  677. public string? JudgeContent { get; set; }
  678. /// <summary>
  679. /// 是否有效智能回访
  680. /// </summary>
  681. public bool? IsEffectiveAiVisit { get; set; }
  682. /// <summary>
  683. /// 是否有效智能回访
  684. /// </summary>
  685. public string IsEffectiveAiVisitText => IsEffectiveAiVisit == true ? "是" : IsEffectiveAiVisit == false ? "否" : "";
  686. /// <summary>
  687. /// 工单标签(自贡)
  688. /// </summary>
  689. public string? OrderTag => OrderTags != null && OrderTags.Any() ? string.Join(",", OrderTags.Select(x => x.DicDataName)) : string.Empty;
  690. public string? OrderTagCode { get; set; }
  691. public List<SystemDicDataOutDto>? OrderTags { get; set; }
  692. /// <summary>
  693. /// 是否回访结果修改
  694. /// </summary>
  695. public bool? IsUpdate { get; set; }
  696. /// <summary>
  697. /// 不满意原因
  698. /// </summary>
  699. public List<Kv>? OrgNoSatisfiedReason { get; set; }
  700. /// <summary>
  701. /// 回访对象类型 10:话务员 20:部门
  702. /// </summary>
  703. public EVisitTarget VisitTarget { get; set; }
  704. }
  705. public class OrderVisitDetailDto
  706. {
  707. /// <summary>
  708. /// 回访主表明细ID
  709. /// </summary>
  710. public string Id { get; set; }
  711. /// <summary>
  712. /// 回访主表ID
  713. /// </summary>
  714. public string VisitId { get; set; }
  715. public OrderVisitDto OrderVisit { get; set; }
  716. public OrderSecondaryHandlingDto SecondaryHandling { get; set; }
  717. /// <summary>
  718. /// 甄别记录
  719. /// </summary>
  720. public List<OrderScreenDto> OrderScreens { get; set; }
  721. public OrderDto Order => OrderVisit != null ? OrderVisit.Order : null;
  722. /// <summary>
  723. /// 语音评价(话务评价)
  724. /// </summary>
  725. public EVoiceEvaluate? VoiceEvaluate { get; set; }
  726. public string? VoiceEvaluateText => VoiceEvaluate?.GetDescription();
  727. /// <summary>
  728. /// 话务员评价(话务评价)
  729. /// </summary>
  730. public ESeatEvaluate? SeatEvaluate { get; set; }
  731. public string? SeatEvaluateText => SeatEvaluate?.GetDescription();
  732. /// <summary>
  733. /// 是否联系
  734. /// </summary>
  735. public bool? IsContact { get; set; }
  736. /// <summary>
  737. /// 处理结果
  738. /// </summary>
  739. public bool? Volved { get; set; }
  740. /// <summary>
  741. /// 部门办件结果
  742. /// </summary>
  743. public Kv? OrgProcessingResults { get; set; }
  744. public string OrgProcessingResultsText => !(OrgProcessingResults is null) ? OrgProcessingResults.Value : "";
  745. /// <summary>
  746. /// 不满意原因
  747. /// </summary>
  748. public List<Kv>? OrgNoSatisfiedReason { get; set; }
  749. /// <summary>
  750. /// 不满意原因字符串
  751. /// </summary>
  752. public string OrgNoSatisfiedReasonText => OrgNoSatisfiedReason != null ? string.Join(',', OrgNoSatisfiedReason.Select(d => d.Value)) : "";
  753. /// <summary>
  754. /// 部门办件态度
  755. /// </summary>
  756. public Kv? OrgHandledAttitude { get; set; }
  757. /// <summary>
  758. /// 回访内容
  759. /// </summary>
  760. public string? VisitContent { get; set; }
  761. /// <summary>
  762. /// 回访部门Code
  763. /// </summary>
  764. public string VisitOrgCode { get; set; }
  765. /// <summary>
  766. /// 回访部门名称
  767. /// </summary>
  768. public string VisitOrgName { get; set; }
  769. /// <summary>
  770. /// 回访对象类型 10:话务员 20:部门
  771. /// </summary>
  772. public EVisitTarget VisitTarget { get; set; }
  773. /// <summary>
  774. /// 未解决备注
  775. /// </summary>
  776. public string? VolveConent { get; set; }
  777. /// <summary>
  778. /// 是否退回
  779. /// </summary>
  780. public string ScreenSendBackText => GetScreenSendBack() ? "是" : "否";
  781. public bool GetScreenSendBack()
  782. {
  783. if (OrderScreens != null && OrderScreens.Any())
  784. {
  785. if (OrderScreens.First().Status == EScreenStatus.SendBack && OrderScreens.First().SendBackApply)
  786. {
  787. return true;
  788. }
  789. }
  790. return false;
  791. }
  792. public bool ScreenSendBack => GetScreenSendBack();
  793. /// <summary>
  794. /// 截至甄别时间
  795. /// </summary>
  796. public DateTime? ScreenByEndTime { get; set; }
  797. public bool? IsShowOperate { get; set; }
  798. }
  799. /// <summary>
  800. /// 回访详情的历史记录
  801. /// </summary>
  802. public class OrderVisitDetailHistoryDto
  803. {
  804. public EVoiceEvaluate? VoiceEvaluate { get; set; }
  805. public string? VoiceEvaluateTxt => this.VoiceEvaluate?.GetDescription();
  806. public ESeatEvaluate? SeatEvaluate { get; set; }
  807. public string? SeatEvaluateTxt => this.SeatEvaluate?.GetDescription();
  808. public string VisitOrgName { get; set; }
  809. public Kv? OrgProcessingResults { get; set; }
  810. public string? orgProcessingResultsValue => this.OrgProcessingResults?.Value;
  811. public Kv? OrgHandledAttitude { get; set; }
  812. public string? OrgHandledAttitudeValue => this.OrgHandledAttitude?.Value;
  813. public string? VisitContent { get; set; }
  814. public DateTime? VisitTime { get; set; }
  815. /// <summary>
  816. /// 通话Id
  817. /// </summary>
  818. public string? CallId { get; set; }
  819. }
  820. public class DistributionVisitRspDto
  821. {
  822. public int SuccessCount { get; set; }
  823. public int ErrorCount { get; set; }
  824. }
  825. public class PublishVisitAllDto
  826. {
  827. public OrderDto? Order { get; set; }
  828. public string Id { get; set; }
  829. /// <summary>
  830. /// 回访状态
  831. /// </summary>
  832. public EVisitState VisitState { get; set; }
  833. /// <summary>
  834. /// 回访方式
  835. /// </summary>
  836. public EVisitType? VisitType { get; set; }
  837. public string? VisitName { get; set; }
  838. /// <summary>
  839. /// 回访时间
  840. /// </summary>
  841. public DateTime? VisitTime { get; set; }
  842. /// <summary>
  843. /// 回访明细
  844. /// </summary>
  845. public List<VisitDetailDto> OrderVisitDetails { get; set; }
  846. /// <summary>
  847. /// 发布时间
  848. /// </summary>
  849. public DateTime PublishTime { get; set; }
  850. }
  851. public class PublishVisitDto
  852. {
  853. /// <summary>
  854. /// 工单对象
  855. /// </summary>
  856. public OrderDto Order { get; set; }
  857. /// <summary>
  858. /// 服务工单编号
  859. /// </summary>
  860. public string No { get; set; }
  861. /// <summary>
  862. /// 回访评价方式
  863. /// </summary>
  864. public EVisitType? VisitType { get; set; }
  865. /// <summary>
  866. /// 回访人
  867. /// </summary>
  868. public string VisitName { get; set; }
  869. /// <summary>
  870. /// 回访时间
  871. /// </summary>
  872. public DateTime? VisitTime { get; set; }
  873. /// <summary>
  874. /// 回访评价情况
  875. /// </summary>
  876. public string VisitRemark { get; set; }
  877. /// <summary>
  878. /// 回访结果满意度
  879. /// </summary>
  880. public string SubjectResultSatifyCode { get; set; }
  881. /// <summary>
  882. /// 行政区划代码
  883. /// </summary>
  884. public string AreaCode { get; set; }
  885. /// <summary>
  886. /// 工单回访首次结果满意度
  887. /// </summary>
  888. public string FirstSatisfactionCode { get; set; }
  889. /// <summary>
  890. /// 附件
  891. /// </summary>
  892. public string ClientGuid { get; set; }
  893. }
  894. public class OrderVisitDetailWebDto
  895. {
  896. /// <summary>
  897. /// 回访明细ID
  898. /// </summary>
  899. public string Id { get; set; }
  900. /// <summary>
  901. /// 回访对象类型 10:话务员 20:部门
  902. /// </summary>
  903. public EVisitTarget VisitTarget { get; set; }
  904. /// <summary>
  905. /// 语音评价(话务评价)
  906. /// </summary>
  907. public EVoiceEvaluate? VoiceEvaluate { get; set; }
  908. /// <summary>
  909. /// 话务员评价(话务评价)
  910. /// </summary>
  911. public ESeatEvaluate? SeatEvaluate { get; set; }
  912. /// <summary>
  913. /// 部门办件结果
  914. /// </summary>
  915. public Kv? OrgProcessingResults { get; set; }
  916. /// <summary>
  917. /// 不满意原因
  918. /// </summary>
  919. public List<Kv>? OrgNoSatisfiedReason { get; set; }
  920. /// <summary>
  921. /// 部门办件态度
  922. /// </summary>
  923. public Kv? OrgHandledAttitude { get; set; }
  924. /// <summary>
  925. /// 回访内容
  926. /// </summary>
  927. public string? VisitContent { get; set; }
  928. /// <summary>
  929. /// 部门是否联系
  930. /// </summary>
  931. public bool? IsContact { get; set; }
  932. /// <summary>
  933. /// 是否解决问题
  934. /// </summary>
  935. public bool? Volved { get; set; }
  936. }
  937. public class OrderVisitProvinceDto
  938. {
  939. public string ProvinceNo { get; set; }
  940. public EVisitType VisitType { get; set; }
  941. public DateTime VisitTime { get; set; }
  942. public string VisitRemark { get; set; }
  943. public Kv VisitResult { get; set; }
  944. }
  945. /// <summary>
  946. /// 回访更新事件载荷
  947. /// </summary>
  948. public class OrderVisitNotifyDto
  949. {
  950. /// <summary>
  951. /// Id
  952. /// </summary>
  953. public string Id { get; set; }
  954. /// <summary>
  955. /// 工单ID
  956. /// </summary>
  957. public string OrderId { get; set; }
  958. /// <summary>
  959. /// 回访详情
  960. /// </summary>
  961. public List<OrderVisitDetailDto> OrderVisitDetails { get; set; }
  962. /// <summary>
  963. /// 回访状态
  964. /// </summary>
  965. public EVisitState VisitState { get; set; }
  966. /// <summary>
  967. /// 回访方式
  968. /// </summary>
  969. public EVisitType? VisitType { get; set; }
  970. /// <summary>
  971. /// 回访人
  972. /// </summary>
  973. public string? EmployeeId { get; set; }
  974. /// <summary>
  975. /// 回访时间
  976. /// </summary>
  977. public DateTime? VisitTime { get; set; }
  978. public string CreatorName { get; set; }
  979. /// <summary>
  980. /// 发布时间
  981. /// </summary>
  982. public DateTime PublishTime { get; set; }
  983. }
  984. /// <summary>
  985. /// 修改记录
  986. /// </summary>
  987. public class OrderVisitDetailCopyDto
  988. {
  989. /// <summary>
  990. /// 回访信息
  991. /// </summary>
  992. public List<OrderVisitDetailDto> OrderVisitDetailDtos { get; set; }
  993. /// <summary>
  994. /// 修改记录
  995. /// </summary>
  996. public List<OrderVisitDetailDto> OrderVisitDetailCopyDtos { get; set; }
  997. /// <summary>
  998. /// 创建时间
  999. /// </summary>
  1000. public DateTime CreationTime { get; set; }
  1001. /// <summary>
  1002. /// 创建人
  1003. /// </summary>
  1004. public string? CreatorName { get; set; }
  1005. }
  1006. }