SmartChargingProfileHandler.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. using EVCB_OCPP.Domain;
  2. using EVCB_OCPP.Packet.Features;
  3. using EVCB_OCPP.Packet.Messages;
  4. using EVCB_OCPP.Packet.Messages.SmartCharging;
  5. using Newtonsoft.Json;
  6. using OCPPServer.Protocol;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. namespace EVCB_OCPP.WSServer.Message
  13. {
  14. internal partial class ProfileHandler
  15. {
  16. internal MessageResult ExecuteSmartChargingConfirm(Actions action, ClientData session, IConfirmation confirm, string requestId)
  17. {
  18. MessageResult result = new MessageResult() { Success = true };
  19. switch (action)
  20. {
  21. case Actions.ClearChargingProfile:
  22. {
  23. ClearChargingProfileConfirmation _confirm = confirm as ClearChargingProfileConfirmation;
  24. ClearChargingProfileRequest _request = _confirm.GetRequest() as ClearChargingProfileRequest;
  25. using (var db = new MainDBContext())
  26. {
  27. var operation = db.MachineOperateRecord.Where(x => x.SerialNo == requestId &&
  28. x.ChargeBoxId == session.ChargeBoxId && x.Status == 0).FirstOrDefault();
  29. if (operation != null)
  30. {
  31. operation.FinishedOn = DateTime.Now;
  32. operation.Status = 1;//電樁有回覆
  33. operation.EVSE_Status = (int)_confirm.status;//OK
  34. operation.EVSE_Value = _confirm.status.ToString();
  35. db.SaveChanges();
  36. }
  37. }
  38. }
  39. break;
  40. case Actions.SetChargingProfile:
  41. {
  42. SetChargingProfileConfirmation _confirm = confirm as SetChargingProfileConfirmation;
  43. SetChargingProfileRequest _request = _confirm.GetRequest() as SetChargingProfileRequest;
  44. using (var db = new MainDBContext())
  45. {
  46. var operation = db.MachineOperateRecord.Where(x => x.SerialNo == requestId &&
  47. x.ChargeBoxId == session.ChargeBoxId && x.Status == 0).FirstOrDefault();
  48. if (operation != null)
  49. {
  50. operation.FinishedOn = DateTime.Now;
  51. operation.Status = 1;//電樁有回覆
  52. operation.EVSE_Status = (int)_confirm.status;//OK
  53. operation.EVSE_Value = _confirm.status.ToString();
  54. db.SaveChanges();
  55. }
  56. }
  57. }
  58. break;
  59. case Actions.GetCompositeSchedule:
  60. {
  61. GetCompositeScheduleConfirmation _confirm = confirm as GetCompositeScheduleConfirmation;
  62. GetCompositeScheduleRequest _request = _confirm.GetRequest() as GetCompositeScheduleRequest;
  63. using (var db = new MainDBContext())
  64. {
  65. var operation = db.MachineOperateRecord.Where(x => x.SerialNo == requestId &&
  66. x.ChargeBoxId == session.ChargeBoxId && x.Status == 0).FirstOrDefault();
  67. if (operation != null)
  68. {
  69. operation.FinishedOn = DateTime.Now;
  70. operation.Status = 1;//電樁有回覆
  71. operation.EVSE_Status = (int)_confirm.status;//OK
  72. operation.EVSE_Value= JsonConvert.SerializeObject(_confirm.chargingSchedule, Formatting.None);
  73. db.SaveChanges();
  74. }
  75. }
  76. }
  77. break;
  78. default:
  79. {
  80. Console.WriteLine(string.Format("Not Implement {0} Logic", confirm.GetType().ToString().Replace("OCPPPackage.Messages.RemoteTrigger.", "")));
  81. }
  82. break;
  83. }
  84. return result;
  85. }
  86. internal MessageResult ReceivedSmartChargingError(Actions action, string errorMsg, ClientData session, string requestId)
  87. {
  88. MessageResult result = new MessageResult() { Success = true };
  89. switch (action)
  90. {
  91. case Actions.ClearChargingProfile:
  92. case Actions.SetChargingProfile:
  93. case Actions.GetCompositeSchedule:
  94. {
  95. using (var db = new MainDBContext())
  96. {
  97. var operation = db.MachineOperateRecord.Where(x => x.SerialNo == requestId &&
  98. x.ChargeBoxId == session.ChargeBoxId && x.Status == 0).FirstOrDefault();
  99. if (operation != null)
  100. {
  101. operation.FinishedOn = DateTime.Now;
  102. operation.Status = 1;//電樁有回覆
  103. operation.EVSE_Status = (int)255;//錯誤
  104. operation.EVSE_Value = errorMsg;
  105. db.SaveChanges();
  106. }
  107. }
  108. }
  109. break;
  110. default:
  111. {
  112. Console.WriteLine(string.Format("Not Implement {0} Logic", action));
  113. }
  114. break;
  115. }
  116. return result;
  117. }
  118. }
  119. }