using EVCB_OCPP.Domain; using EVCB_OCPP.Packet.Features; using EVCB_OCPP.Packet.Messages; using EVCB_OCPP.Packet.Messages.Reservation; using OCPPServer.Protocol; using System; using System.Linq; namespace EVCB_OCPP.WSServer.Message { internal partial class ProfileHandler { internal MessageResult ExecuteReservationConfirm(Actions action, ClientData session, IConfirmation confirm, string requestId) { MessageResult result = new MessageResult() { Success = true }; switch (action) { case Actions.ReserveNow: { ReserveNowConfirmation _confirm = confirm as ReserveNowConfirmation; ReserveNowRequest _request = _confirm.GetRequest() as ReserveNowRequest; using (var db = new MainDBContext()) { var operation = db.MachineOperateRecord.Where(x => x.SerialNo == requestId && x.ChargeBoxId == session.ChargeBoxId && x.Status == 0).FirstOrDefault(); if (operation != null) { operation.FinishedOn = DateTime.UtcNow; operation.Status = 1;//電樁有回覆 operation.EVSE_Status = (int)_confirm.status;//OK operation.EVSE_Value = _confirm.status.ToString(); db.SaveChanges(); } } } break; case Actions.CancelReservation: { CancelReservationConfirmation _confirm = confirm as CancelReservationConfirmation; CancelReservationRequest _request = _confirm.GetRequest() as CancelReservationRequest; using (var db = new MainDBContext()) { var operation = db.MachineOperateRecord.Where(x => x.SerialNo == requestId && x.ChargeBoxId == session.ChargeBoxId && x.Status == 0).FirstOrDefault(); if (operation != null) { operation.FinishedOn = DateTime.UtcNow; operation.Status = 1;//電樁有回覆 operation.EVSE_Status = (int)_confirm.status;//OK operation.EVSE_Value = _confirm.status.ToString(); db.SaveChanges(); } } } break; default: { Console.WriteLine(string.Format("Not Implement {0} Logic", confirm.GetType().ToString().Replace("OCPPPackage.Messages.RemoteTrigger.", ""))); } break; } return result; } internal MessageResult ExecuteReservationError(Actions action, string errorMsg, ClientData session, string requestId) { MessageResult result = new MessageResult() { Success = true }; switch (action) { case Actions.ReserveNow: { using (var db = new MainDBContext()) { var operation = db.MachineOperateRecord.Where(x => x.SerialNo == requestId && x.ChargeBoxId == session.ChargeBoxId && x.Status == 0).FirstOrDefault(); if (operation != null) { operation.FinishedOn = DateTime.UtcNow; operation.Status = 1;//電樁有回覆 operation.EVSE_Status = (int)255;//錯誤 operation.EVSE_Value = errorMsg; db.SaveChanges(); } } } break; case Actions.CancelReservation: { using (var db = new MainDBContext()) { var operation = db.MachineOperateRecord.Where(x => x.SerialNo == requestId && x.ChargeBoxId == session.ChargeBoxId && x.Status == 0).FirstOrDefault(); if (operation != null) { operation.FinishedOn = DateTime.UtcNow; operation.Status = 1;//電樁有回覆 operation.EVSE_Status = (int)255;//錯誤 operation.EVSE_Value = errorMsg; db.SaveChanges(); } } } break; default: { Console.WriteLine(string.Format("Not Implement {0} Logic", action)); } break; } return result; } } }