OrderServiceMock.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  1. using Hotline.Api.Controllers;
  2. using Hotline.Application.Tests.Dto;
  3. using Hotline.Orders;
  4. using Hotline.Repository.SqlSugar.Orders;
  5. using Hotline.Share.Dtos.FlowEngine;
  6. using Hotline.Share.Dtos.Order;
  7. using Hotline.Share.Enums.FlowEngine;
  8. using Hotline.Share.Tools;
  9. using Microsoft.AspNetCore.Http;
  10. using Microsoft.AspNetCore.Mvc;
  11. using Microsoft.AspNetCore.Mvc.RazorPages;
  12. using System;
  13. using System.Collections.Generic;
  14. using System.Linq;
  15. using System.Text;
  16. using System.Threading.Tasks;
  17. using XF.Domain.Repository;
  18. namespace Hotline.Application.Tests.Mock;
  19. public class OrderServiceMock
  20. {
  21. private readonly OrderController _orderController;
  22. private CreateOrderOutDto CreateOrderOutDto;
  23. private AddOrderDto AddOrderDto;
  24. private readonly IRepository<Order> _orderRepository;
  25. private readonly IOrderVisitRepository _orderVisitRepository;
  26. public OrderServiceMock(OrderController orderController, IRepository<Order> orderRepository, IOrderVisitRepository orderVisitRepository)
  27. {
  28. _orderController = orderController;
  29. _orderController.ControllerContext = new ControllerContext
  30. {
  31. HttpContext = new DefaultHttpContext()
  32. };
  33. _orderRepository = orderRepository;
  34. _orderVisitRepository = orderVisitRepository;
  35. }
  36. public OrderServiceMock CreateOrder(string callId = "")
  37. {
  38. var json = "{\"sourceChannel\":\"因特网\",\"sourceChannelCode\":\"YTW\",\"transferPhone\":null,\"fromPhone\":null,\"acceptorName\":\"单元测试\",\"acceptorStaffNo\":\"\",\"fromName\":\"1233333333\",\"fromGender\":1,\"identityType\":1,\"licenceType\":null,\"licenceTypeCode\":null,\"licenceNo\":null,\"ageRange\":null,\"ageRangeCode\":null,\"contact\":\"12333333333\",\"isSecret\":false,\"acceptSms\":false,\"no\":null,\"title\":\"\",\"hotspotId\":\"1912\",\"eventCategoryId\":null,\"incidentTime\":null,\"incidentPurpose\":null,\"areaCode\":\"519800\",\"city\":\"省内\",\"street\":null,\"isRepeat\":\"false\",\"pushType\":null,\"pushTypeCode\":null,\"content\":\"单元测试内容\",\"duplicateIds\":[],\"duplicateTitle\":null,\"callAddress\":null,\"repeatableEventDetails\":[],\"orderExtension\":null,\"transpond\":false,\"isEnforcementOrder\":false,\"focusOnEventsArr\":[],\"focusOnEvents\":null,\"isFormalistWorkOrder\":false,\"isSensitiveWorkOrders\":false,\"isUrgent\":false,\"isThreePartyConference\":false,\"is24HoursComplete\":false,\"company\":null,\"orderPushTypes\":[],\"acceptType\":\"咨询\",\"acceptTypeCode\":\"10\",\"files\":[],\"hotspotSpliceName\":\"互联互通-转接乐山市12345\",\"hotspotName\":\"转接乐山市12345\",\"hotspotCode\":\"1912\",\"hotspotExternal\":\"19\",\"county\":\"\",\"town\":\"\"}";
  39. AddOrderDto = json.FromJson<AddOrderDto>();
  40. if (callId.NotNullOrEmpty())
  41. {
  42. AddOrderDto.CallId = callId;
  43. AddOrderDto.SourceChannel = "电话";
  44. AddOrderDto.SourceChannelCode = AppDefaults.SourceChannel.DianHua;
  45. }
  46. AddOrderDto.Title = "单元测试" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
  47. CreateOrderOutDto = _orderController.Add(AddOrderDto).GetAwaiter().GetResult().ToJson().FromJson<CreateOrderOutDto>();
  48. return this;
  49. }
  50. public CreateOrderOutDto GetCreateResult()
  51. {
  52. return CreateOrderOutDto;
  53. }
  54. public OrderServiceMock 办理到派单员()
  55. {
  56. var stepNextInfo = _orderController.GetFlowStartOptions(CreateOrderOutDto.Id).GetAwaiter().GetResult().ToJson().FromJson<NextStepsDto<NextStepOption>>();
  57. var stepInfo = stepNextInfo.Steps.FirstOrDefault(m => m.Value == "派单组");
  58. var stepOrg = stepInfo.Items.FirstOrDefault(m => m.Username == "单元测试派单员");
  59. var handleDto = new StartWorkflowDto<OrderHandleFlowDto>
  60. {
  61. Data = new OrderHandleFlowDto
  62. {
  63. OrderId = CreateOrderOutDto.Id,
  64. },
  65. Workflow = new BasicWorkflowDto
  66. {
  67. NextHandlers = [stepOrg],
  68. NextStepCode = stepInfo.Key,
  69. NextStepName = stepInfo.Value,
  70. Opinion = "办理到派单组意见",
  71. BackToCountersignEnd = false,
  72. IsSms = false,
  73. IsForwarded = false,
  74. HandlerType = EHandlerType.OrgLevel,
  75. BusinessType = EBusinessType.Send,
  76. FlowDirection = EFlowDirection.CenterToCenter,
  77. }
  78. };
  79. _orderController.StartFlow(handleDto).GetAwaiter().GetResult();
  80. return this;
  81. }
  82. public OrderServiceMock 办理到一级部门()
  83. {
  84. var stepNextInfo = _orderController.GetFlowStartOptions(CreateOrderOutDto.Id).GetAwaiter().GetResult().ToJson().FromJson<NextStepsDto<NextStepOption>>();
  85. var stepInfo = stepNextInfo.Steps.FirstOrDefault(m => m.Value == "一级部门");
  86. var stepOrg = stepInfo.Items.FirstOrDefault(m => m.OrgName == "测试部门");
  87. var handleDto = new StartWorkflowDto<OrderHandleFlowDto>
  88. {
  89. Data = new OrderHandleFlowDto
  90. {
  91. OrderId = CreateOrderOutDto.Id,
  92. },
  93. Workflow = new BasicWorkflowDto
  94. {
  95. NextHandlers = [stepOrg],
  96. NextStepCode = stepInfo.Key,
  97. NextStepName = stepInfo.Value,
  98. Opinion = "办理意见",
  99. BackToCountersignEnd = false,
  100. IsSms = false,
  101. IsForwarded = false,
  102. HandlerType = EHandlerType.OrgLevel,
  103. BusinessType = EBusinessType.Department,
  104. }
  105. };
  106. _orderController.StartFlow(handleDto).GetAwaiter().GetResult();
  107. return this;
  108. }
  109. public OrderServiceMock 办理到归档(Action action = null, Action<OrderHandleFlowDto> dataAction = null, Action<NextWorkflowDto> workflowAction = null)
  110. {
  111. action?.Invoke();
  112. var stepNextInfo = _orderController.GetNextStepsWithRecommend(CreateOrderOutDto.Id).GetAwaiter().GetResult().ToJson().FromJson<NextStepsDto<NextStepOption>>();
  113. var stepInfo = stepNextInfo.Steps.FirstOrDefault(m => m.Value == "归档");
  114. var stepOrg = stepInfo.Items.FirstOrDefault();
  115. var order = _orderRepository.Get(CreateOrderOutDto.Id);
  116. var handleDto = new NextWorkflowDto<OrderHandleFlowDto>
  117. {
  118. Data = new OrderHandleFlowDto
  119. {
  120. OrderId = CreateOrderOutDto.Id,
  121. RealHandlerName = "经办人",
  122. RealHandlerPhone = "13666666666",
  123. RealContactLocale = true,
  124. RealIsContacted = true,
  125. IsOther = true,
  126. OtherRemark = "其它原因",
  127. RealCommunicationAddress = "地点地点地点",
  128. RealCommunicationTime = DateTime.Now,
  129. },
  130. Workflow = new NextWorkflowDto
  131. {
  132. NextStepCode = "end",
  133. NextStepName = "归档",
  134. Opinion = "办理到归档",
  135. BackToCountersignEnd = false,
  136. IsSms = false,
  137. IsForwarded = false,
  138. HandlerType = EHandlerType.OrgLevel,
  139. BusinessType = EBusinessType.Department,
  140. FlowDirection = EFlowDirection.OrgToOrg,
  141. WorkflowId = order.WorkflowId,
  142. StepId = stepNextInfo.StepId,
  143. }
  144. };
  145. dataAction?.Invoke(handleDto.Data);
  146. workflowAction?.Invoke(handleDto.Workflow);
  147. try
  148. {
  149. _orderController.Handle(handleDto).GetAwaiter().GetResult();
  150. }
  151. catch (Exception e)
  152. {
  153. var msg = e.Message;
  154. if (msg.Contains("RealtimeService") == false)
  155. {
  156. throw;
  157. }
  158. // ignore
  159. }
  160. return this;
  161. }
  162. public OrderServiceMock 办理到二级部门(Action action = null)
  163. {
  164. action?.Invoke();
  165. var stepNextInfo = _orderController.GetNextStepsWithRecommend(CreateOrderOutDto.Id).GetAwaiter().GetResult().ToJson().FromJson<NextStepsDto<NextStepOption>>();
  166. var stepInfo = stepNextInfo.Steps.FirstOrDefault(m => m.Value == "二级部门");
  167. var stepOrg = stepInfo.Items.FirstOrDefault(m => m.OrgName == "测试二级部门");
  168. var order = _orderRepository.Get(CreateOrderOutDto.Id);
  169. var handleDto = new NextWorkflowDto<OrderHandleFlowDto>
  170. {
  171. Data = new OrderHandleFlowDto
  172. {
  173. OrderId = CreateOrderOutDto.Id,
  174. },
  175. Workflow = new NextWorkflowDto
  176. {
  177. NextHandlers = [stepOrg],
  178. NextStepCode = stepInfo.Key,
  179. NextStepName = stepInfo.Value,
  180. Opinion = "办理到二级部门",
  181. BackToCountersignEnd = false,
  182. IsSms = false,
  183. IsForwarded = false,
  184. HandlerType = EHandlerType.OrgLevel,
  185. BusinessType = EBusinessType.Department,
  186. FlowDirection = EFlowDirection.OrgToOrg,
  187. WorkflowId = order.WorkflowId,
  188. StepId = stepNextInfo.StepId,
  189. }
  190. };
  191. _orderController.Handle(handleDto).GetAwaiter().GetResult();
  192. return this;
  193. }
  194. public OrderServiceMock 办理一级部门汇总(Action aciton = null)
  195. {
  196. aciton?.Invoke();
  197. var stepNextInfo = _orderController.GetNextStepsWithRecommend(CreateOrderOutDto.Id).GetAwaiter().GetResult().ToJson().FromJson<NextStepsDto<NextStepOption>>();
  198. var stepInfo = stepNextInfo.Steps.FirstOrDefault(m => m.Value == "一级部门汇总");
  199. var stepOrg = stepInfo.Items.FirstOrDefault(m => m.OrgName == "测试部门");
  200. var order = _orderRepository.Get(CreateOrderOutDto.Id);
  201. var handleDto = new NextWorkflowDto<OrderHandleFlowDto>
  202. {
  203. Data = new OrderHandleFlowDto
  204. {
  205. OrderId = CreateOrderOutDto.Id,
  206. RealHandlerName = "经办人",
  207. RealHandlerPhone = "13666666666",
  208. RealContactLocale = true,
  209. RealIsContacted = true,
  210. IsOther = true,
  211. IsEvasive = true,
  212. OtherRemark = "其它原因",
  213. RealCommunicationAddress = "地点地点地点",
  214. RealCommunicationTime = DateTime.Now
  215. },
  216. Workflow = new NextWorkflowDto
  217. {
  218. NextHandlers = [stepOrg],
  219. NextStepCode = stepInfo.Key,
  220. NextStepName = stepInfo.Value,
  221. Opinion = "办理到一级部门汇总",
  222. BackToCountersignEnd = false,
  223. IsSms = false,
  224. IsForwarded = false,
  225. HandlerType = EHandlerType.AssignedUser,
  226. BusinessType = EBusinessType.Department,
  227. FlowDirection = EFlowDirection.OrgToOrg,
  228. StepType = EStepType.Summary,
  229. WorkflowId = order.WorkflowId,
  230. StepId = stepNextInfo.StepId,
  231. }
  232. };
  233. _orderController.Handle(handleDto).GetAwaiter().GetResult();
  234. return this;
  235. }
  236. public OrderServiceMock 发布工单(Action aciton = null)
  237. {
  238. aciton?.Invoke();
  239. var baseData = _orderController.PublishOrderPageBase(CreateOrderOutDto.Id).GetAwaiter().GetResult();
  240. var inDto = new PublishOrderDto
  241. {
  242. Id = CreateOrderOutDto.Id,
  243. PublishState = false,
  244. ArrangeTitle = baseData.OrderTitle,
  245. ArrangeContent = baseData.Content,
  246. ArrangeOpinion = baseData.ActualOpinion,
  247. IdNames = [baseData.ActualHandleOrgName],
  248. ProPublishState = false,
  249. Resolve = true
  250. };
  251. _orderController.PublishOrder(inDto).GetAwaiter().GetResult();
  252. return this;
  253. }
  254. public OrderServiceMock 发送回访短信(Action aciton = null)
  255. {
  256. aciton?.Invoke();
  257. var id = _orderVisitRepository.Queryable()
  258. .Where(m => m.No == CreateOrderOutDto.No)
  259. .Select(m => m.Id)
  260. .First();
  261. var inDto = new VisitSmsInDto
  262. {
  263. Ids = [id]
  264. };
  265. _orderController.VisitPushSMSAsync(inDto).GetAwaiter().GetResult();
  266. return this;
  267. }
  268. }