using EVCB_OCPP.Domain; using EVCB_OCPP.Packet.Features; using EVCB_OCPP.Packet.Messages; using EVCB_OCPP.Packet.Messages.SmartCharging; using Newtonsoft.Json; using OCPPServer.Protocol; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace EVCB_OCPP.WSServer.Message { internal partial class ProfileHandler { internal MessageResult ExecuteSmartChargingConfirm(Actions action, ClientData session, IConfirmation confirm, string requestId) { MessageResult result = new MessageResult() { Success = true }; switch (action) { case Actions.ClearChargingProfile: { ClearChargingProfileConfirmation _confirm = confirm as ClearChargingProfileConfirmation; ClearChargingProfileRequest _request = _confirm.GetRequest() as ClearChargingProfileRequest; 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.Now; operation.Status = 1;//電樁有回覆 operation.EVSE_Status = (int)_confirm.status;//OK db.SaveChanges(); } } } break; case Actions.SetChargingProfile: { SetChargingProfileConfirmation _confirm = confirm as SetChargingProfileConfirmation; SetChargingProfileRequest _request = _confirm.GetRequest() as SetChargingProfileRequest; 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.Now; operation.Status = 1;//電樁有回覆 operation.EVSE_Status = (int)_confirm.status;//OK db.SaveChanges(); } } } break; case Actions.GetCompositeSchedule: { GetCompositeScheduleConfirmation _confirm = confirm as GetCompositeScheduleConfirmation; GetCompositeScheduleRequest _request = _confirm.GetRequest() as GetCompositeScheduleRequest; 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.Now; operation.Status = 1;//電樁有回覆 operation.EVSE_Status = (int)_confirm.status;//OK operation.EVSE_Value= JsonConvert.SerializeObject(_confirm.chargingSchedule, Formatting.None); db.SaveChanges(); } } } break; default: { Console.WriteLine(string.Format("Not Implement {0} Logic", confirm.GetType().ToString().Replace("OCPPPackage.Messages.RemoteTrigger.", ""))); } break; } return result; } internal MessageResult ReceivedSmartChargingError(Actions action, string errorMsg, ClientData session, string requestId) { MessageResult result = new MessageResult() { Success = true }; switch (action) { case Actions.ClearChargingProfile: case Actions.SetChargingProfile: case Actions.GetCompositeSchedule: { 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.Now; 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; } } }