CheckCardBalance.cs 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using SinochemCloudClient.Models;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using Wayne.Lib.StateEngine;
  8. using Wayne.Lib.StateEngine.Generic;
  9. namespace SinochemInternetPlusApp.States.ICCardMode
  10. {
  11. public class CheckCardBalance : TimeoutState<FuelingPoint>
  12. {
  13. protected override void Enter(StateEntry stateEntry, ref Transition transition)
  14. {
  15. base.Enter(stateEntry, ref transition);
  16. var tid = Main.OnlineVerificationRequest.TID;
  17. var encryptedPin = Main.OnlineVerificationRequest.EncryptedPIN;
  18. var cardNo = Main.OnlineVerificationRequest.CardNo.TrimStart('0');
  19. Main.SendBalanceQueryToCloudAsync(cardNo, encryptedPin, tid, Main.AssociatedNozzles.First());
  20. //transition = new Transition(this, TransitionType.Done);
  21. }
  22. protected override void HandleNonTimeoutEvent(StateEngineEvent stateEngineEvent, ref Transition transition)
  23. {
  24. if (stateEngineEvent.Type is EventType)
  25. {
  26. switch ((EventType)stateEngineEvent.Type)
  27. {
  28. case EventType.CloudBalanceOk:
  29. var genericEvent = stateEngineEvent as GenericEvent<BalanceInquiryResponse>;
  30. if (genericEvent != null)
  31. {
  32. var tid = Main.OnlineVerificationRequest.TID;
  33. var cardNo = Main.OnlineVerificationRequest.CardNo;
  34. Main.CreateEpsTransaction(TransactionMode.ICCardMode);
  35. Main.CurrentEpsTrx.Model.car_number = genericEvent.EventArgs.result.car_Number;
  36. Main.CurrentEpsTrx.Model.card_no = cardNo;
  37. //Not in db
  38. Main.CurrentEpsTrx.Model.EnryptedPIN = Main.OnlineVerificationRequest.EncryptedPIN;
  39. Main.CurrentEpsTrx.Model.ttc = genericEvent.EventArgs.result.ttc;
  40. Main.CurrentEpsTrx.Model.balance_before_trx = genericEvent.EventArgs.result.amount;
  41. Main.CurrentEpsTrx.Model.token = genericEvent.EventArgs.result.token;
  42. Main.CurrentEpsTrx.Model.tid = tid;
  43. Main.CurrentEpsTrx.Model.xf_date = DateTime.Parse(DateTime.Now.Date.ToString("yyyy-MM-dd"));
  44. Main.CurrentEpsTrx.SaveToDb();
  45. transition = new Transition(this, TransitionType.CloudBalanceOk);
  46. }
  47. else
  48. {
  49. transition = HandleCloudBalanceFailed();
  50. }
  51. stateEngineEvent.Handled = true;
  52. break;
  53. case EventType.CloudBalanceFailed:
  54. transition = HandleCloudBalanceFailed();
  55. stateEngineEvent.Handled = true;
  56. break;
  57. }
  58. }
  59. }
  60. protected override void Timeout(ref Transition transition)
  61. {
  62. transition = HandleCloudBalanceFailed();
  63. }
  64. private Transition HandleCloudBalanceFailed()
  65. {
  66. return new Transition(this, TransitionType.CloudBalanceFailed);
  67. }
  68. protected override int TimeoutInterval =>
  69. TimeoutValues.GetValueInMilliSec(TimeoutValues.FuelingPoint.ICCardMode_CheckCardBalance, 10);
  70. }
  71. }