OrderMapperConfigs.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. using Hotline.Ai.Visit;
  2. using Hotline.FlowEngine.Workflows;
  3. using Hotline.Orders;
  4. using Hotline.Share.Dtos.Ai;
  5. using Hotline.Share.Dtos.Order;
  6. using Hotline.Share.Dtos.Order.Detail;
  7. using Hotline.Share.Dtos.Settings;
  8. using Hotline.Share.Enums.FlowEngine;
  9. using Hotline.Share.Enums.Order;
  10. using Hotline.Share.Tools;
  11. using Mapster;
  12. namespace Hotline.Application.Mappers;
  13. public class OrderMapperConfigs : IRegister
  14. {
  15. public void Register(TypeAdapterConfig config)
  16. {
  17. config.ForType<Order, OrderDto>()
  18. .IgnoreIf((s, d) => s.OrderExtension == null, d => d.OrderExtension)
  19. .IgnoreIf((s, d) => s.Hotspot == null, d => d.Hotspot)
  20. .IgnoreIf((s, d) => s.FwCallRecord == null, d => d.FwCallRecord)
  21. //.Map(d => d.IsRed, s => string.IsNullOrEmpty(s.SignerId) || !s.ActualHandleStepAcceptTime.HasValue)
  22. .Map(d => d.IsRed, s => s.WorkflowSteps != null
  23. && s.WorkflowSteps.Any()
  24. && s.WorkflowSteps.First().Status == EWorkflowStepStatus.WaitForAccept)
  25. ;
  26. config.ForType<Order, OrderListOutDto>()
  27. .Map(d => d.IsRed, s => s.WorkflowSteps != null
  28. && s.WorkflowSteps.Any()
  29. && s.WorkflowSteps.First().Status == EWorkflowStepStatus.WaitForAccept)
  30. ;
  31. config.ForType<OrderCopy, OrderDto>()
  32. .Map(d => d.Id, s => s.OrderId)
  33. .Map(d => d.CopyId, s => s.Id)
  34. ;
  35. config.ForType<AiOrderVisitDetail, AiOrderVisitDetailDto>()
  36. .IgnoreIf((s, d) => s.Order == null, d => d.No)
  37. .IgnoreIf((s, d) => s.Order == null, d => d.Title)
  38. .IgnoreIf((s, d) => s.Order == null, d => d.FromName)
  39. .IgnoreIf((s, d) => s.Order == null, d => d.FromGender)
  40. .IgnoreIf((s, d) => s.Order == null, d => d.StartTime)
  41. .IgnoreIf((s, d) => s.Order == null, d => d.FiledTime)
  42. .Map(d => d.No, s => s.Order.No)
  43. .Map(d => d.Title, s => s.Order.Title)
  44. .Map(d => d.FromName, s => s.Order.FromName)
  45. .Map(d => d.FromGender, s => s.Order.FromGender)
  46. .Map(d => d.StartTime, s => s.Order.StartTime)
  47. .Map(d => d.FiledTime, s => s.Order.FiledTime)
  48. .Map(d => d.RecordUrl, s => s.OrderVisit.RecordUrl)
  49. .Map(d => d.SeatEvaluate, s => s.AiSeatEvaluate)
  50. .AfterMapping((s, d) =>
  51. {
  52. //d.SeatEvaluate = s.OrderVisit.OrderVisitDetails.FirstOrDefault(x => x.VisitTarget == EVisitTarget.Seat)?.SeatEvaluate;
  53. //d.OrgProcessingResults = s.OrderVisit.OrderVisitDetails.FirstOrDefault(x => x.VisitTarget == EVisitTarget.Org)?.OrgProcessingResults?.Value;
  54. //d.IsContact = s.OrderVisit.OrderVisitDetails.FirstOrDefault(x => x.VisitTarget == EVisitTarget.Org)?.IsContact == true ? "是" : s.OrderVisit.OrderVisitDetails.FirstOrDefault(x => x.VisitTarget == EVisitTarget.Org)?.IsContact == false ? "否" : "";
  55. //d.Volved = s.OrderVisit.OrderVisitDetails.FirstOrDefault(x => x.VisitTarget == EVisitTarget.Org)?.Volved == true ? "是" : s.OrderVisit.OrderVisitDetails.FirstOrDefault(x => x.VisitTarget == EVisitTarget.Org)?.Volved == false ? "否" :"";
  56. //d.IsSuccessText = s.IsSuccess == true ? "是" : s.IsSuccess == false ? "否" : "";
  57. d.OrgProcessingResults = s.AiOrgProcessingResults?.Value;
  58. d.IsContact = s.AiIsContact == true ? "是" : s.AiIsContact == false ? "否" : "";
  59. d.Volved = s.AiVolved == true ? "是" : s.AiVolved == false ? "否" : "";
  60. d.IsSuccessText = s.IsSuccess == true ? "是" : s.IsSuccess == false ? "否" : "";
  61. });
  62. config.ForType<OrderVisitDetail, OrgVisitDetailListResp>()
  63. //.IgnoreIf((s, d) => s.OrderVisit == null, d => d.VisitId)
  64. .IgnoreIf((s, d) => s.OrderVisit.Order == null, d => d.Id)
  65. .IgnoreIf((s, d) => s.OrderVisit.Order == null, d => d.No)
  66. .IgnoreIf((s, d) => s.OrderVisit.Order == null, d => d.ReTransactNum)
  67. .IgnoreIf((s, d) => s.OrderVisit.Order == null, d => d.HotspotSpliceName)
  68. .IgnoreIf((s, d) => s.OrderVisit.Order == null, d => d.OrgLevelOneName)
  69. .IgnoreIf((s, d) => s.OrderVisit.Order == null, d => d.CurrentHandleOrgName)
  70. .IgnoreIf((s, d) => s.OrderVisit.Order == null, d => d.Title)
  71. .IgnoreIf((s, d) => s.OrderVisit.Employee == null, d => d.VisitUser)
  72. .IgnoreIf((s, d) => s.OrderVisit.Order == null, d => d.Content)
  73. .IgnoreIf((s, d) => s.OrderVisit.Order == null, d => d.FileOpinion)
  74. .IgnoreIf((s, d) => s.OrderVisit.Order == null, d => d.FiledTime)
  75. .Map(d => d.VisitId, s => s.OrderVisit.Id)
  76. .Map(d => d.Id, s => s.OrderVisit.Order.Id)
  77. .Map(d => d.No, s => s.OrderVisit.Order.No)
  78. .Map(d => d.ReTransactNum, s => s.OrderVisit.Order.ReTransactNum)
  79. .Map(d => d.HotspotSpliceName, s => s.OrderVisit.Order.HotspotSpliceName)
  80. .Map(d => d.OrgLevelOneName, s => s.OrderVisit.Order.OrgLevelOneName)
  81. .Map(d => d.CurrentHandleOrgName, s => s.OrderVisit.Order.CurrentHandleOrgName)
  82. .Map(d => d.Title, s => s.OrderVisit.Order.Title)
  83. .Map(d => d.VisitUser, s => s.OrderVisit.Employee.Name)
  84. .Map(d => d.VisitType, s => s.OrderVisit.VisitType)
  85. .Map(d => d.VisitTime, s => s.OrderVisit.VisitTime)
  86. .Map(d => d.Content, s => s.OrderVisit.Order.Content)
  87. .Map(d => d.FileOpinion, s => s.OrderVisit.Order.FileOpinion)
  88. .Map(d => d.FiledTime, s => s.OrderVisit.Order.FiledTime)
  89. .AfterMapping((s, d) =>
  90. {
  91. d.OrderScreenStatus = s.OrderVisit.Order.OrderScreens.OrderByDescending(q => q.CreationTime).FirstOrDefault()?.Status;
  92. d.OrgProcessingResults = s.OrgProcessingResults.Value;
  93. });
  94. config.ForType<AddOrderDto, Order>()
  95. .IgnoreIf((s, d) => s.OrderExtension == null, d => d.OrderExtension)
  96. .Map(d => d.Additions, s => s.Files)
  97. .IgnoreIf((s, d) => !s.ExpiredTime.HasValue, d => d.ExpiredTime)
  98. .IgnoreIf((s, d) => !s.NearlyExpiredTime.HasValue, d => d.NearlyExpiredTime)
  99. .IgnoreIf((s, d) => !s.NearlyExpiredTimeOne.HasValue, d => d.NearlyExpiredTimeOne)
  100. .IgnoreIf((s, d) => string.IsNullOrEmpty(s.TimeLimit), d => d.TimeLimit)
  101. .IgnoreIf((s, d) => !s.TimeLimitCount.HasValue, d => d.TimeLimitCount)
  102. .IgnoreIf((s, d) => !s.TimeLimitUnit.HasValue, d => d.TimeLimitUnit)
  103. ;
  104. config.ForType<UpdateOrderDto, Order>()
  105. .Inherits<AddOrderDto, Order>()
  106. .Map(d => d.OrderExtension.Id, x => x.Id)
  107. //.IgnoreIf((s, d) => !string.IsNullOrEmpty(s.FileOpinion), d => d.FileOpinion)
  108. //.IgnoreIf((s, d) => !string.IsNullOrEmpty(s.CenterOpinion), d => d.CenterToOrgOpinion)
  109. .Ignore(d => d.ProvinceNo)
  110. .Ignore(d => d.SmsSended);
  111. config.ForType<Workflow, Order>()
  112. .Map(d => d.WorkflowId, s => s.Id)
  113. .Map(d => d.StartTime, s => s.CreationTime)
  114. .Ignore(d => d.Status)
  115. .Ignore(d => d.Title)
  116. .Ignore(d => d.AcceptorId)
  117. .Ignore(d => d.AcceptorName)
  118. .Ignore(d => d.AcceptorStaffNo)
  119. .Ignore(d => d.ExternalId)
  120. .Ignore(d => d.CreationTime)
  121. //.AfterMapping((s, d) =>
  122. //{
  123. // //d.UpdateHandlingStatus(s.IsInCountersign);
  124. // d.CurrentStepAcceptTime = s.CurrentStepAcceptTime;
  125. //})
  126. ;
  127. config.ForType<Order, PublishDto>()
  128. .Inherits<Order, OrderDto>()
  129. .IgnoreIf((s, d) => s.OrderPublish == null, d => d.PublishState)
  130. .IgnoreIf((s, d) => s.OrderPublish == null, d => d.ArrangeContent)
  131. .IgnoreIf((s, d) => s.OrderPublish == null, d => d.PublishTime)
  132. .IgnoreIf((s, d) => s.OrderPublish == null, d => d.PublishMan)
  133. .Map(d => d.PublishState, s => s.OrderPublish.PublishState)
  134. .Map(d => d.ArrangeContent, s => s.OrderPublish.ArrangeContent)
  135. .Map(d => d.PublishTime, s => s.OrderPublish.CreationTime)
  136. .Map(d => d.PublishMan, s => s.OrderPublish.CreatorName);
  137. config.ForType<OrderPublish, PublishedDto>()
  138. .Map(d => d.PublishState, s => s.PublishState)
  139. .Map(d => d.ArrangeContent, s => s.ArrangeContent)
  140. .Map(d => d.PublishTime, s => s.CreationTime)
  141. .Map(d => d.PublishMan, s => s.CreatorName);
  142. config.ForType<Order, OrderWaitedDto>()
  143. .Inherits<Order, OrderDto>();
  144. config.ForType<OrderVisit, OrderVisitDto>()
  145. .IgnoreIf((s, d) => s.Employee == null, d => d.EmployeeName)
  146. .Map(d => d.EmployeeName, s => s.Employee.Name);
  147. config.ForType<VisitDetailDto, OrderVisitDetail>()
  148. .Map(d => d.VoiceEvaluate, s => s.VoiceEvaluate)
  149. .Map(d => d.SeatEvaluate, s => s.SeatEvaluate);
  150. config.ForType<OrderDelay, OrderDelayDto>()
  151. //.Inherits<Order, OrderDto>()
  152. .Map(d => d.CurrentStepName, s => s.Workflow.ActualHandleStepName)
  153. .Map(d => d.ActualHandlerName, s => s.Workflow.ActualHandlerName)
  154. .IgnoreIf((s, d) => s.Workflow == null, d => d.CurrentStepName)
  155. .IgnoreIf((s, d) => s.Workflow == null, d => d.ActualHandlerName);
  156. config.ForType<ExpiredTimeWithConfig, UpdateOrderDto>()
  157. .Map(d => d.TimeLimit, s => s.TimeText)
  158. .Map(d => d.TimeLimitCount, s => s.Count)
  159. .Map(d => d.TimeLimitUnit, s => s.TimeType);
  160. config.ForType<ExpiredTimeWithConfig, Order>()
  161. .Map(d => d.TimeLimit, s => s.TimeText)
  162. .Map(d => d.TimeLimitCount, s => s.Count)
  163. .Map(d => d.TimeLimitUnit, s => s.TimeType);
  164. config.ForType<OrderScreen, OrderScreenListDto>()
  165. .IgnoreIf((s, d) => s.VisitDetail == null, d => d.VisitDetail)
  166. ;
  167. //config.ForType<OrderHandleFlowDto, Workflow>()
  168. // .Map(d => d.RealHandlerPhone, s => s.RealHandlerPhone)
  169. // .Map(d => d.RealHandlerName, s => s.RealHandlerName)
  170. // .Map(d => d.RealCommunicationMode, s => s.RealCommunicationMode)
  171. // .Map(d => d.RealCommunicationTime, s => s.RealCommunicationTime)
  172. // .Map(d => d.RealCommunicationAddress, s => s.RealCommunicationAddress)
  173. // .Map(d => d.RealIsContacted, s => s.RealIsContacted)
  174. // .Map(d => d.RealContactLocale, s => s.RealContactLocale)
  175. // .IgnoreNonMapped(true);
  176. config.ForType<OrderHandleFlowDto, Order>()
  177. .Map(src => src.RealCommunicationAddress, dest => dest.RealCommunicationAddress)
  178. .IgnoreIf((src, dest) => string.IsNullOrEmpty(src.RealCommunicationAddress), dest => dest.RealCommunicationAddress)
  179. .Map(src => src.RealHandlerPhone, dest => dest.RealHandlerPhone)
  180. .IgnoreIf((src, dest) => string.IsNullOrEmpty(src.RealHandlerPhone), dest => dest.RealHandlerPhone)
  181. .Map(src => src.RealHandlerName, dest => dest.RealHandlerName)
  182. .IgnoreIf((src, dest) => string.IsNullOrEmpty(src.RealHandlerName), dest => dest.RealHandlerName)
  183. .Map(src => src.RealCommunicationMode, dest => dest.RealCommunicationMode)
  184. .IgnoreIf((src, dest) => src.RealCommunicationMode == null, dest => dest.RealCommunicationMode)
  185. .Map(src => src.RealCommunicationTime, dest => dest.RealCommunicationTime)
  186. .IgnoreIf((src, dest) => src.RealCommunicationTime == null, dest => dest.RealCommunicationTime)
  187. .Map(src => src.RealIsContacted, dest => dest.RealIsContacted)
  188. .IgnoreIf((src, dest) => src.RealIsContacted == null, dest => dest.RealIsContacted)
  189. .Map(src => src.RealContactLocale, dest => dest.RealContactLocale)
  190. .IgnoreIf((src, dest) => src.RealContactLocale == null, dest => dest.RealContactLocale)
  191. .Map(src => src.IsOther, dest => dest.IsOther)
  192. .IgnoreIf((src, dest) => src.IsOther == null, dest => dest.IsOther)
  193. .Map(src => src.OtherRemark, dest => dest.OtherRemark)
  194. .IgnoreIf((src, dest) => string.IsNullOrEmpty(src.OtherRemark), dest => dest.OtherRemark)
  195. .Map(src => src.Transpond, dest => dest.Transpond)
  196. .IgnoreIf((src, dest) => src.Transpond.HasValue == false, dest => dest.Transpond)
  197. .Map(src => src.TranspondCityId, dest => dest.TranspondCityId)
  198. .IgnoreIf((src, dest) => string.IsNullOrEmpty(src.TranspondCityId), dest => dest.TranspondCityId)
  199. .Map(src => src.TranspondCityName, dest => dest.TranspondCityName)
  200. .IgnoreIf((src, dest) => string.IsNullOrEmpty(src.TranspondCityName), dest => dest.TranspondCityName)
  201. .Map(src => src.TranspondCityValue, dest => dest.TranspondCityValue)
  202. .IgnoreIf((src, dest) => string.IsNullOrEmpty(src.TranspondCityValue), dest => dest.TranspondCityValue)
  203. .Map(src => src.IsStepUrgent, dest => dest.IsStepUrgent)
  204. .IgnoreIf((src, dest) => src.IsStepUrgent == null, dest => dest.IsStepUrgent)
  205. .Map(src => src.IsEvasive, dest => dest.IsEvasive)
  206. .IgnoreIf((src, dest) => src.IsEvasive == null, dest => dest.IsEvasive)
  207. .Map(src => src.IsInactively, dest => dest.IsInactively)
  208. .IgnoreIf((src, dest) => src.IsInactively == null, dest => dest.IsInactively)
  209. .IgnoreNonMapped(true);
  210. config.ForType<AddOrderComplementDto, OrderComplement>()
  211. .Map(d => d.No, s => s.CaseSerial);
  212. config.ForType<WorkflowTrace, OrderFlowTraceDto>()
  213. //.IgnoreIf((s, d) => s.Status < EWorkflowStepStatus.Handled, d => d.HandlerName)
  214. //.IgnoreIf((s, d) => s.Status < EWorkflowStepStatus.Handled, d => d.HandlerOrgName)
  215. //.IgnoreIf((s, d) => s.Status < EWorkflowStepStatus.Handled, d => d.HandleTime)
  216. .IgnoreIf((s, d) => s.TraceStyle != ETraceStyle.Publish || s.OrderPublish == null, d => d.PublishState)
  217. .Map(d => d.PublishState, s => s.OrderPublish.PublishState)
  218. .IgnoreIf((s, d) => s.TraceStyle != ETraceStyle.Publish || s.OrderPublish == null, d => d.ArrangeOpinion)
  219. .Map(d => d.ArrangeOpinion, s => s.OrderPublish.ArrangeOpinion)
  220. .AfterMapping((s, d) =>
  221. {
  222. if (s.TraceStyle == ETraceStyle.Visit
  223. && s.OrderVisit != null
  224. && s.OrderVisit.OrderVisitDetails.Any(x => x.VisitTarget == EVisitTarget.Seat))
  225. {
  226. d.VoiceEvaluate = s.OrderVisit.OrderVisitDetails.First(x => x.VisitTarget == EVisitTarget.Seat).VoiceEvaluate;
  227. d.SeatEvaluate = s.OrderVisit.OrderVisitDetails.First(x => x.VisitTarget == EVisitTarget.Seat).SeatEvaluate;
  228. d.VisitContent = s.OrderVisit.OrderVisitDetails.First(x => x.VisitTarget == EVisitTarget.Seat).VisitContent;
  229. }
  230. if (s.TraceStyle == ETraceStyle.Visit
  231. && s.OrderVisit != null
  232. && s.OrderVisit.OrderVisitDetails.Any(x => x.VisitTarget == EVisitTarget.Org))
  233. {
  234. d.OrderFlowVisitDetails = s.OrderVisit.OrderVisitDetails
  235. .Where(x => x.VisitTarget == EVisitTarget.Org)
  236. .ToList()
  237. .Adapt<IReadOnlyList<OrderFlowVisitDetail>>();
  238. }
  239. })
  240. ;
  241. config.ForType<OrderVisitDetail, OrderFlowVisitDetail>()
  242. .IgnoreIf((s, d) => s.OrgProcessingResults == null, d => d.OrgProcessingResults)
  243. .Map(d => d.OrgProcessingResults, s => s.OrgProcessingResults.Value)
  244. .IgnoreIf((s, d) => s.OrgNoSatisfiedReason == null, d => d.OrgNoSatisfiedReason)
  245. .Map(d => d.OrgNoSatisfiedReason, s => s.OrgNoSatisfiedReason.Select(d => d.Value))
  246. .IgnoreIf((s, d) => s.OrgHandledAttitude == null, d => d.OrgHandledAttitude)
  247. .Map(d => d.OrgHandledAttitude, s => s.OrgHandledAttitude.Value)
  248. ;
  249. config.ForType<OrderVisitDetail, OrderVisitDetailCopy>()
  250. .Ignore(d => d.CreationTime)
  251. .Ignore(d => d.CreatorId)
  252. .Ignore(d => d.CreatorName)
  253. .Ignore(d => d.CreatorOrgId)
  254. .Ignore(d => d.CreatorOrgLevel)
  255. .Ignore(d => d.CreatorOrgName)
  256. .Ignore(d => d.AreaId)
  257. ;
  258. }
  259. }