123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- using Edge.Core.Processor;using Edge.Core.IndustryStandardInterface.Pump;
- using Newtonsoft.Json;
- using Edge.Core.Parser.HttpMessageParser;
- using SinochemCarplateService.Models;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using Wayne.FDCPOSLibrary;
- using Microsoft.AspNetCore.Mvc;
- using Microsoft.AspNetCore.Http;
- using Edge.Core.Processor;
- namespace Sinochem_CarPlateRecognizeCamera_HuLianWangJia
- {
- public delegate void NewCarPlateHandler(CarPlateTrxRequest request);
- public delegate void QRCodePayResultHandler(QRCodePayResultRequest request);
- public delegate void IndoorPayResultHandler(IndoorPayResultRequest request);
- public class Handler : IDeviceHandler<string, BaseHttpMessage<string>>, IFdcCommunicableController
- {
- public Guid Id => Guid.NewGuid();
- public Func<string, bool> BroadcastMessageViaFdc { get; set; }
- public Func<string, Tuple<string, OverallResult>> OnMessageReceivedViaFdc { get; set; }
- public Func<string, string, string, bool> SendMessageViaFdc { get; set; }
- public event NewCarPlateHandler NewCarPlateScanned;
- public event QRCodePayResultHandler QRCodePaid;
- public event IndoorPayResultHandler IndoorPaid;
- private int bindingPumpId;
- static NLog.Logger logger = NLog.LogManager.LoadConfiguration("nlog.config").GetLogger("SinochemEpsApp");
- public Handler(int bindingPumpId)
- {
- this.bindingPumpId = bindingPumpId;
- }
- public void Init(IContext<string, BaseHttpMessage<string>> context)
- {
- }
- public Task Process(IContext<string, BaseHttpMessage<string>> context)
- {
- var httpRequest = context.Incoming.Message;
- logger.Info("Incoming HTTP request: " + httpRequest.Content);
- var urlStr = httpRequest.ApiController.Request.GetUri().OriginalString;
- logger.Info($"URL: {urlStr}");
- if (urlStr.Contains("qrCodePayment"))
- {
- QRCodePayResultRequest qrCodePayResultRequest = JsonConvert.DeserializeObject<QRCodePayResultRequest>(httpRequest.Content);
- if (qrCodePayResultRequest != null)
- {
- logger.Info("Receive Request: QRCode Paid");
- QRCodePayResultRequest qRCodePayResultRequest = JsonConvert.DeserializeObject<QRCodePayResultRequest>(httpRequest.Content);
- PayResultResponse payResultResponse = new PayResultResponse
- {
- code = "200",
- message = "QRCode Pay OK",
- };
- var httpResponse = SimpleHttpOutgoingMessage.CreatedFrom(httpRequest, new OkObjectResult(payResultResponse));
- //var httpResponse = SimpleHttpOutgoingMessage.CreatedFrom(httpRequest,
- // new OkNegotiatedContentResult<PayResultResponse>(payResultResponse, context.Incoming.Message.ApiController));
- context.Outgoing.Write(httpResponse);
- QRCodePaid?.Invoke(qRCodePayResultRequest);
- }
- }
- else if (urlStr.Contains("indoorPayment"))
- {
- IndoorPayResultRequest indoorPayResultRequest = JsonConvert.DeserializeObject<IndoorPayResultRequest>(httpRequest.Content);
- if (indoorPayResultRequest != null)
- {
- logger.Info("Receive Request: Indoor Paid");
- PayResultResponse payResultResponse = new PayResultResponse
- {
- code = "200",
- message = "Indoor Pay OK",
- };
- var httpResponse = SimpleHttpOutgoingMessage.CreatedFrom(httpRequest, new OkObjectResult(payResultResponse));
- //var httpResponse = SimpleHttpOutgoingMessage.CreatedFrom(httpRequest,
- // new OkNegotiatedContentResult<PayResultResponse>(payResultResponse, context.Incoming.Message.ApiController));
- context.Outgoing.Write(httpResponse);
- IndoorPaid?.Invoke(indoorPayResultRequest);
- }
- }
- else
- {
- CarPlateTrxRequest carPlateTrxRequest = JsonConvert.DeserializeObject<CarPlateTrxRequest>(httpRequest.Content);
- if (carPlateTrxRequest != null)
- {
- logger.Info("Receipt Request:" + carPlateTrxRequest.car_Number);
- CarPlateTrxResponse carPlateTrxResponse = new CarPlateTrxResponse
- {
- code = "200",
- message = "this is from Sinochem_CarPlateRecognizeCamera_HuLianWangJia"
- };
- var httpResponse = SimpleHttpOutgoingMessage.CreatedFrom(httpRequest, new OkObjectResult(carPlateTrxResponse));
- //var httpResponse = SimpleHttpOutgoingMessage.CreatedFrom(httpRequest,
- // new OkNegotiatedContentResult<CarPlateTrxResponse>(carPlateTrxResponse, context.Incoming.Message.ApiController));
- context.Outgoing.Write(httpResponse);
- // fire event
- NewCarPlateScanned?.Invoke(carPlateTrxRequest);
- }
- }
- return Task.CompletedTask;
- //logger.Info("Ending Process Request");
- }
- private void Handler_OnCurrentFuellingStatusChange(object sender, FdcTransactionDoneEventArg e)
- {
- // wait for fuelling done
- if (e.Transaction.Finished)
- {
- // send msg to 15` to show 'fuelling is done'
- var chargeAmount = e.Transaction.Amount;
- // send msg to cloud to charge.
- }
- else
- {
- var runningAmount = e.Transaction.Amount;
- // send msg to 15` to show 'fuelling is in progress'
- }
- }
- }
- public static class Extensions
- {
- public static Uri GetUri(this HttpRequest request)
- {
- var uriBuilder = new UriBuilder
- {
- Scheme = request.Scheme,
- Host = request.Host.Host,
- Port = request.Host.Port.GetValueOrDefault(80),
- Path = request.Path.ToString(),
- Query = request.QueryString.ToString()
- };
- return uriBuilder.Uri;
- }
- }
- }
|