Fueling.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Wayne.Lib;
  5. using Wayne.Lib.StateEngine;
  6. using Wayne.Lib.StateEngine.Generic;
  7. using WayneChina_IcCardReader_SinoChem.MessageEntity.Incoming;
  8. using WayneChina_IcCardReader_SinoChem.MessageEntity.Outgoing;
  9. namespace SinochemInternetPlusApp.States.Shared
  10. {
  11. class Fueling : State<FuelingPoint>
  12. {
  13. private byte sqNo;
  14. protected override void Enter(StateEntry stateEntry, ref Transition transition)
  15. {
  16. base.Enter(stateEntry, ref transition);
  17. MultiFusionsSupport.UpdateJyInfoToTargetFusionWhenFuelingStarted(Main.CurrentNozzleId, Main.DebugLogger); // should be busy
  18. }
  19. protected override void HandleEvent(StateEngineEvent stateEngineEvent, ref Transition transition)
  20. {
  21. base.HandleEvent(stateEngineEvent, ref transition);
  22. if (stateEngineEvent.Type is EventType)
  23. {
  24. switch ((EventType)stateEngineEvent.Type)
  25. {
  26. case EventType.NozzleReplaced:
  27. MultiFusionsSupport.CopyJyInfoToTargetFusion(Main.CurrentNozzleId, Main.DebugLogger); // should be free
  28. if (Main.CurrentEpsTrx != null )
  29. {
  30. var epsTrxModel = EpsTransactionQuery.RefreshEpsTrx(Main.CurrentEpsTrx.Model.id);
  31. Main.DebugLogger.Add($"NozzleReplaced, CurrentEpsTrx.jihao = {Main.CurrentEpsTrx.Model.jihao}, " +
  32. $"epsTrxModel.jihao = {epsTrxModel.jihao}, CurrentNozzleId: {Main.CurrentNozzleId}");
  33. var associateNozzles = Main.Eps.GetFp(Main.CurrentNozzleId)?.AssociatedNozzles.ToList();
  34. if (epsTrxModel.jihao != Main.CurrentNozzleId && !associateNozzles.Contains(epsTrxModel.jihao))
  35. {
  36. Main.DebugLogger.Add("nozzle Id not match, indoor pay");
  37. Main.CurrentEpsTrx.Model.car_number = null;
  38. Main.CurrentEpsTrx = null;
  39. }
  40. }
  41. transition = new Transition(this, TransitionType.NozzleReplaced);
  42. stateEngineEvent.Handled = true;
  43. break;
  44. case EventType.DisplayResponseReceived:
  45. stateEngineEvent.Handled = true;
  46. break;
  47. case EventType.ReaderStateChanged:
  48. Main.DebugLogger.Add("Unexpected reader state change in Fueling");
  49. var e = stateEngineEvent as GenericEvent<CardReaderStateEventArgs>;
  50. if (e != null && e.EventArgs != null)
  51. {
  52. if (e.EventArgs.CardReaderState.State == CardReaderState.CardInserted)
  53. {
  54. Main.DebugLogger.Add("Unexpected card inserted event in Fueling");
  55. e.Handled = true;
  56. transition = new Transition(this, TransitionType.CardInserted);
  57. }
  58. else if (e.EventArgs.CardReaderState.State == CardReaderState.Idle)
  59. {
  60. Main.DebugLogger.Add("Unexpected card removed event in Fueling");
  61. e.Handled = true;
  62. Main.RemovePendingBalanceResult();
  63. return;
  64. }
  65. }
  66. break;
  67. case EventType.OnlineVerification:
  68. Main.DebugLogger.Add("Unexpected online verification in Fueling");
  69. stateEngineEvent.Handled = true;
  70. var result = new CardOnlineVerificationResultRequest(VerificationResult.Failure, 0, "处理错误");
  71. Main.SendCommand(result, out sqNo);
  72. break;
  73. case EventType.CardReaderAck:
  74. GenericEvent<CardReaderAckEventArgs> ackEvent = stateEngineEvent as GenericEvent<CardReaderAckEventArgs>;
  75. if (ackEvent != null && ackEvent.EventArgs != null)
  76. {
  77. if (ackEvent.EventArgs.Ack.MessageSeqNumber == sqNo)
  78. {
  79. Main.DebugLogger.Add("Card reader ack received in Fueling");
  80. ackEvent.Handled = true;
  81. transition = new Transition(this, TransitionType.Done);
  82. }
  83. }
  84. break;
  85. }
  86. }
  87. }
  88. }
  89. }