OrderVisitDto.cs 30 KB

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