Handler.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. using Edge.Core.Processor;using Edge.Core.IndustryStandardInterface.Pump;
  2. using Newtonsoft.Json;
  3. using Edge.Core.Parser.HttpMessageParser;
  4. using SinochemCarplateService.Models;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using Wayne.FDCPOSLibrary;
  11. using Microsoft.AspNetCore.Mvc;
  12. using Microsoft.AspNetCore.Http;
  13. using Edge.Core.Processor;
  14. namespace Sinochem_CarPlateRecognizeCamera_HuLianWangJia
  15. {
  16. public delegate void NewCarPlateHandler(CarPlateTrxRequest request);
  17. public delegate void QRCodePayResultHandler(QRCodePayResultRequest request);
  18. public delegate void IndoorPayResultHandler(IndoorPayResultRequest request);
  19. public class Handler : IDeviceHandler<string, BaseHttpMessage<string>>, IFdcCommunicableController
  20. {
  21. public Guid Id => Guid.NewGuid();
  22. public Func<string, bool> BroadcastMessageViaFdc { get; set; }
  23. public Func<string, Tuple<string, OverallResult>> OnMessageReceivedViaFdc { get; set; }
  24. public Func<string, string, string, bool> SendMessageViaFdc { get; set; }
  25. public event NewCarPlateHandler NewCarPlateScanned;
  26. public event QRCodePayResultHandler QRCodePaid;
  27. public event IndoorPayResultHandler IndoorPaid;
  28. private int bindingPumpId;
  29. static NLog.Logger logger = NLog.LogManager.LoadConfiguration("nlog.config").GetLogger("SinochemEpsApp");
  30. public Handler(int bindingPumpId)
  31. {
  32. this.bindingPumpId = bindingPumpId;
  33. }
  34. public void Init(IContext<string, BaseHttpMessage<string>> context)
  35. {
  36. }
  37. public Task Process(IContext<string, BaseHttpMessage<string>> context)
  38. {
  39. var httpRequest = context.Incoming.Message;
  40. logger.Info("Incoming HTTP request: " + httpRequest.Content);
  41. var urlStr = httpRequest.ApiController.Request.GetUri().OriginalString;
  42. logger.Info($"URL: {urlStr}");
  43. if (urlStr.Contains("qrCodePayment"))
  44. {
  45. QRCodePayResultRequest qrCodePayResultRequest = JsonConvert.DeserializeObject<QRCodePayResultRequest>(httpRequest.Content);
  46. if (qrCodePayResultRequest != null)
  47. {
  48. logger.Info("Receive Request: QRCode Paid");
  49. QRCodePayResultRequest qRCodePayResultRequest = JsonConvert.DeserializeObject<QRCodePayResultRequest>(httpRequest.Content);
  50. PayResultResponse payResultResponse = new PayResultResponse
  51. {
  52. code = "200",
  53. message = "QRCode Pay OK",
  54. };
  55. var httpResponse = SimpleHttpOutgoingMessage.CreatedFrom(httpRequest, new OkObjectResult(payResultResponse));
  56. //var httpResponse = SimpleHttpOutgoingMessage.CreatedFrom(httpRequest,
  57. // new OkNegotiatedContentResult<PayResultResponse>(payResultResponse, context.Incoming.Message.ApiController));
  58. context.Outgoing.Write(httpResponse);
  59. QRCodePaid?.Invoke(qRCodePayResultRequest);
  60. }
  61. }
  62. else if (urlStr.Contains("indoorPayment"))
  63. {
  64. IndoorPayResultRequest indoorPayResultRequest = JsonConvert.DeserializeObject<IndoorPayResultRequest>(httpRequest.Content);
  65. if (indoorPayResultRequest != null)
  66. {
  67. logger.Info("Receive Request: Indoor Paid");
  68. PayResultResponse payResultResponse = new PayResultResponse
  69. {
  70. code = "200",
  71. message = "Indoor Pay OK",
  72. };
  73. var httpResponse = SimpleHttpOutgoingMessage.CreatedFrom(httpRequest, new OkObjectResult(payResultResponse));
  74. //var httpResponse = SimpleHttpOutgoingMessage.CreatedFrom(httpRequest,
  75. // new OkNegotiatedContentResult<PayResultResponse>(payResultResponse, context.Incoming.Message.ApiController));
  76. context.Outgoing.Write(httpResponse);
  77. IndoorPaid?.Invoke(indoorPayResultRequest);
  78. }
  79. }
  80. else
  81. {
  82. CarPlateTrxRequest carPlateTrxRequest = JsonConvert.DeserializeObject<CarPlateTrxRequest>(httpRequest.Content);
  83. if (carPlateTrxRequest != null)
  84. {
  85. logger.Info("Receipt Request:" + carPlateTrxRequest.car_Number);
  86. CarPlateTrxResponse carPlateTrxResponse = new CarPlateTrxResponse
  87. {
  88. code = "200",
  89. message = "this is from Sinochem_CarPlateRecognizeCamera_HuLianWangJia"
  90. };
  91. var httpResponse = SimpleHttpOutgoingMessage.CreatedFrom(httpRequest, new OkObjectResult(carPlateTrxResponse));
  92. //var httpResponse = SimpleHttpOutgoingMessage.CreatedFrom(httpRequest,
  93. // new OkNegotiatedContentResult<CarPlateTrxResponse>(carPlateTrxResponse, context.Incoming.Message.ApiController));
  94. context.Outgoing.Write(httpResponse);
  95. // fire event
  96. NewCarPlateScanned?.Invoke(carPlateTrxRequest);
  97. }
  98. }
  99. return Task.CompletedTask;
  100. //logger.Info("Ending Process Request");
  101. }
  102. private void Handler_OnCurrentFuellingStatusChange(object sender, FdcTransactionDoneEventArg e)
  103. {
  104. // wait for fuelling done
  105. if (e.Transaction.Finished)
  106. {
  107. // send msg to 15` to show 'fuelling is done'
  108. var chargeAmount = e.Transaction.Amount;
  109. // send msg to cloud to charge.
  110. }
  111. else
  112. {
  113. var runningAmount = e.Transaction.Amount;
  114. // send msg to 15` to show 'fuelling is in progress'
  115. }
  116. }
  117. }
  118. public static class Extensions
  119. {
  120. public static Uri GetUri(this HttpRequest request)
  121. {
  122. var uriBuilder = new UriBuilder
  123. {
  124. Scheme = request.Scheme,
  125. Host = request.Host.Host,
  126. Port = request.Host.Port.GetValueOrDefault(80),
  127. Path = request.Path.ToString(),
  128. Query = request.QueryString.ToString()
  129. };
  130. return uriBuilder.Uri;
  131. }
  132. }
  133. }