You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

270 line
11 KiB

  1. using JT808.DotNetty.Dtos;
  2. using JT808.DotNetty.Interfaces;
  3. using JT808.DotNetty.Metadata;
  4. using Newtonsoft.Json;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Text;
  8. namespace JT808.DotNetty.Internal
  9. {
  10. /// <summary>
  11. /// JT808 WebApi 业务服务
  12. /// </summary>
  13. internal class JT808WebAPIService
  14. {
  15. public Dictionary<string, Func<JT808HttpRequest, JT808HttpResponse>> HandlerDict { get; protected set; }
  16. private const string RouteTablePrefix = "/jt808api";
  17. private const string sessionRoutePrefix = "Session";
  18. private const string sourcePackagePrefix = "SourcePackage";
  19. private const string transmitPrefix = "Transmit";
  20. private readonly IJT808SessionService jT808SessionService;
  21. private readonly IJT808UnificationSendService jT808UnificationSendService;
  22. private readonly JT808AtomicCounterService jT808AtomicCounterService;
  23. private readonly JT808SourcePackageChannelService jT808SourcePackageChannelService;
  24. private readonly JT808TransmitAddressFilterService jT808TransmitAddressFilterService;
  25. /// <summary>
  26. /// 初始化消息处理业务
  27. /// </summary>
  28. public JT808WebAPIService(
  29. JT808AtomicCounterService jT808AtomicCounterService,
  30. JT808SourcePackageChannelService jT808SourcePackageChannelService,
  31. JT808TransmitAddressFilterService jT808TransmitAddressFilterService,
  32. IJT808SessionService jT808SessionService,
  33. IJT808UnificationSendService jT808UnificationSendService)
  34. {
  35. this.jT808AtomicCounterService = jT808AtomicCounterService;
  36. this.jT808SourcePackageChannelService = jT808SourcePackageChannelService;
  37. this.jT808TransmitAddressFilterService = jT808TransmitAddressFilterService;
  38. this.jT808SessionService = jT808SessionService;
  39. this.jT808UnificationSendService = jT808UnificationSendService;
  40. HandlerDict = new Dictionary<string, Func<JT808HttpRequest, JT808HttpResponse>>
  41. {
  42. {$"{RouteTablePrefix}/UnificationSend", UnificationSend},
  43. {$"{RouteTablePrefix}/{sessionRoutePrefix}/GetAll", GetSessionAll},
  44. {$"{RouteTablePrefix}/{sessionRoutePrefix}/RemoveByChannelId", RemoveByChannelId},
  45. {$"{RouteTablePrefix}/{sessionRoutePrefix}/RemoveByTerminalPhoneNo", RemoveByTerminalPhoneNo},
  46. {$"{RouteTablePrefix}/GetAtomicCounter", GetAtomicCounter},
  47. {$"{RouteTablePrefix}/{sourcePackagePrefix}/Add", AddSourcePackageAddress},
  48. {$"{RouteTablePrefix}/{sourcePackagePrefix}/Remove", RemoveSourcePackageAddress},
  49. {$"{RouteTablePrefix}/{sourcePackagePrefix}/GetAll", GetSourcePackageAll},
  50. {$"{RouteTablePrefix}/{transmitPrefix}/Add", AddTransmitAddress},
  51. {$"{RouteTablePrefix}/{transmitPrefix}/Remove", RemoveTransmitAddress},
  52. {$"{RouteTablePrefix}/{transmitPrefix}/GetAll", GetTransmitAll},
  53. };
  54. }
  55. /// <summary>
  56. /// 统一下发信息
  57. /// </summary>
  58. /// <param name="request"></param>
  59. /// <returns></returns>
  60. public JT808HttpResponse UnificationSend(JT808HttpRequest request)
  61. {
  62. if (string.IsNullOrEmpty(request.Json))
  63. {
  64. return EmptyHttpResponse();
  65. }
  66. JT808UnificationSendRequestDto jT808UnificationSendRequestDto = JsonConvert.DeserializeObject<JT808UnificationSendRequestDto>(request.Json);
  67. var result = jT808UnificationSendService.Send(jT808UnificationSendRequestDto.TerminalPhoneNo, jT808UnificationSendRequestDto.Data);
  68. return CreateJT808HttpResponse(result);
  69. }
  70. /// <summary>
  71. /// 会话服务集合
  72. /// </summary>
  73. /// <param name="request"></param>
  74. /// <returns></returns>
  75. public JT808HttpResponse GetSessionAll(JT808HttpRequest request)
  76. {
  77. var result = jT808SessionService.GetAll();
  78. return CreateJT808HttpResponse(result);
  79. }
  80. /// <summary>
  81. /// 会话服务-通过通道Id移除对应会话
  82. /// </summary>
  83. /// <param name="request"></param>
  84. /// <returns></returns>
  85. public JT808HttpResponse RemoveByChannelId(JT808HttpRequest request)
  86. {
  87. if (string.IsNullOrEmpty(request.Json))
  88. {
  89. return EmptyHttpResponse();
  90. }
  91. var result = jT808SessionService.RemoveByChannelId(request.Json);
  92. return CreateJT808HttpResponse(result);
  93. }
  94. /// <summary>
  95. /// 会话服务-通过设备终端号移除对应会话
  96. /// </summary>
  97. /// <param name="request"></param>
  98. /// <returns></returns>
  99. public JT808HttpResponse RemoveByTerminalPhoneNo(JT808HttpRequest request)
  100. {
  101. if (string.IsNullOrEmpty(request.Json))
  102. {
  103. return EmptyHttpResponse();
  104. }
  105. var result = jT808SessionService.RemoveByTerminalPhoneNo(request.Json);
  106. return CreateJT808HttpResponse(result);
  107. }
  108. /// <summary>
  109. /// 获取包计数器
  110. /// </summary>
  111. /// <param name="request"></param>
  112. /// <returns></returns>
  113. public JT808HttpResponse GetAtomicCounter(JT808HttpRequest request)
  114. {
  115. JT808AtomicCounterDto jT808AtomicCounterDto = new JT808AtomicCounterDto();
  116. jT808AtomicCounterDto.MsgFailCount = jT808AtomicCounterService.MsgFailCount;
  117. jT808AtomicCounterDto.MsgSuccessCount = jT808AtomicCounterService.MsgSuccessCount;
  118. return CreateJT808HttpResponse(new JT808ResultDto<JT808AtomicCounterDto>
  119. {
  120. Code=JT808ResultCode.Ok,
  121. Data= jT808AtomicCounterDto
  122. });
  123. }
  124. /// <summary>
  125. /// 添加原包转发地址
  126. /// </summary>
  127. /// <param name="request"></param>
  128. /// <returns></returns>
  129. public JT808HttpResponse AddSourcePackageAddress(JT808HttpRequest request)
  130. {
  131. if (string.IsNullOrEmpty(request.Json))
  132. {
  133. return EmptyHttpResponse();
  134. }
  135. JT808IPAddressDto jT808IPAddressDto = JsonConvert.DeserializeObject<JT808IPAddressDto>(request.Json);
  136. return CreateJT808HttpResponse(jT808SourcePackageChannelService.Add(jT808IPAddressDto).Result);
  137. }
  138. /// <summary>
  139. /// 删除原包转发地址(不能删除在网关服务器配置文件配的地址)
  140. /// </summary>
  141. /// <param name="request"></param>
  142. /// <returns></returns>
  143. public JT808HttpResponse RemoveSourcePackageAddress(JT808HttpRequest request)
  144. {
  145. if (string.IsNullOrEmpty(request.Json))
  146. {
  147. return EmptyHttpResponse();
  148. }
  149. JT808IPAddressDto jT808IPAddressDto = JsonConvert.DeserializeObject<JT808IPAddressDto>(request.Json);
  150. return CreateJT808HttpResponse(jT808SourcePackageChannelService.Remove(jT808IPAddressDto).Result);
  151. }
  152. /// <summary>
  153. /// 获取原包信息集合
  154. /// </summary>
  155. /// <param name="request"></param>
  156. /// <returns></returns>
  157. public JT808HttpResponse GetSourcePackageAll(JT808HttpRequest request)
  158. {
  159. return CreateJT808HttpResponse(jT808SourcePackageChannelService.GetAll());
  160. }
  161. /// <summary>
  162. /// 添加转发过滤地址
  163. /// </summary>
  164. /// <param name="request"></param>
  165. /// <returns></returns>
  166. public JT808HttpResponse AddTransmitAddress(JT808HttpRequest request)
  167. {
  168. if (string.IsNullOrEmpty(request.Json))
  169. {
  170. return EmptyHttpResponse();
  171. }
  172. JT808IPAddressDto jT808IPAddressDto = JsonConvert.DeserializeObject<JT808IPAddressDto>(request.Json);
  173. return CreateJT808HttpResponse(jT808TransmitAddressFilterService.Add(jT808IPAddressDto));
  174. }
  175. /// <summary>
  176. /// 删除转发过滤地址(不能删除在网关服务器配置文件配的地址)
  177. /// </summary>
  178. /// <param name="request"></param>
  179. /// <returns></returns>
  180. public JT808HttpResponse RemoveTransmitAddress(JT808HttpRequest request)
  181. {
  182. if (string.IsNullOrEmpty(request.Json))
  183. {
  184. return EmptyHttpResponse();
  185. }
  186. JT808IPAddressDto jT808IPAddressDto = JsonConvert.DeserializeObject<JT808IPAddressDto>(request.Json);
  187. return CreateJT808HttpResponse(jT808TransmitAddressFilterService.Remove(jT808IPAddressDto));
  188. }
  189. /// <summary>
  190. /// 获取转发过滤地址信息集合
  191. /// </summary>
  192. /// <param name="request"></param>
  193. /// <returns></returns>
  194. public JT808HttpResponse GetTransmitAll(JT808HttpRequest request)
  195. {
  196. return CreateJT808HttpResponse(jT808TransmitAddressFilterService.GetAll());
  197. }
  198. private JT808HttpResponse CreateJT808HttpResponse(dynamic dynamicObject)
  199. {
  200. byte[] data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(dynamicObject));
  201. return new JT808HttpResponse()
  202. {
  203. Data = data
  204. };
  205. }
  206. public JT808HttpResponse DefaultHttpResponse()
  207. {
  208. byte[] json = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new JT808DefaultResultDto()));
  209. return new JT808HttpResponse(json);
  210. }
  211. public JT808HttpResponse EmptyHttpResponse()
  212. {
  213. byte[] json = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new JT808ResultDto<string>()
  214. {
  215. Code = JT808ResultCode.Empty,
  216. Message ="内容为空",
  217. Data="Content Empty"
  218. }));
  219. return new JT808HttpResponse(json);
  220. }
  221. public JT808HttpResponse NotFoundHttpResponse()
  222. {
  223. byte[] json = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new JT808ResultDto<string>()
  224. {
  225. Code= JT808ResultCode.NotFound,
  226. Message="没有该服务",
  227. Data= "没有该服务"
  228. }));
  229. return new JT808HttpResponse(json);
  230. }
  231. public JT808HttpResponse ErrorHttpResponse(Exception ex)
  232. {
  233. byte[] json = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new JT808ResultDto<string>()
  234. {
  235. Code = JT808ResultCode.Error,
  236. Message = JsonConvert.SerializeObject(ex),
  237. Data= ex.Message
  238. }));
  239. return new JT808HttpResponse(json);
  240. }
  241. }
  242. }