using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace EVCB_OCPP.TaskScheduler.Models { public class MachineOperateRecord { public MachineOperateRecord() { EVSE_Value = string.Empty; FinishedOn = new DateTime(1991, 1, 1); ReportedOn = new DateTime(1991, 1, 1); } public int Id { get; set; } /// ///Action /// public string Action { get; set; } /// /// 機器的客戶自訂ID /// public string ChargeBoxId { get; set; } /// /// 隨機序號 和ServerCommand是同一個組序號 /// public string SerialNo { get; set; } /// /// 請求類型 /// public int RequestType { get; set; } /// /// 請求內容 /// public string RequestContent { get; set; } /// /// 狀態 /// public int Status { get; set; } /// /// EVSE回覆值 /// public string EVSE_Value { get; set; } /// /// EVSE狀態 /// public int EVSE_Status { get; set; } /// /// 建立時間 /// public DateTime CreatedOn { set; get; } /// /// 結束時間 /// public DateTime FinishedOn { set; get; } /// /// 回報時間 /// public DateTime ReportedOn { set; get; } public string ActionConverttoCommandType() { string cmdTypeName = "Unknown"; if (string.IsNullOrEmpty(Action)) return cmdTypeName; switch (Action) { case "RemoteStartTransaction": { cmdTypeName = "Start_Session"; } break; case "RemoteStopTransaction": { cmdTypeName = "Stop_Session"; } break; case "ReserveNow": { cmdTypeName = "Reserve_Now"; } break; case "CancelReservation": { cmdTypeName = "CancelReservation"; } break; case "SetChargingProfile": { cmdTypeName = "SetChargingProfile"; } break; case "ClearChargingProfile": { cmdTypeName = "ClearChargingProfile"; } break; case "SendLocalList": { cmdTypeName = "SetLocalList"; } break; case "GetLocalListVersion": { cmdTypeName = "GetLocalListVersion"; } break; case "GetCompositeSchedule": { cmdTypeName = "GetAcitveChargingProfile"; } break; default: break; } return cmdTypeName; } public ComandExecution GetExecution() { ComandExecution execution = new ComandExecution(); if (EVSE_Status > 0) { execution.IsRepliedbyEVSE = true; if (Action == "GetLocalListVersion") { execution.Code = 1; execution.Detail = EVSE_Value; } else { execution.Code = ConverttoCode(EVSE_Value); execution.Code = execution.Code == -1 ? (EVSE_Status == 1 ? 1 : (EVSE_Status == 255 ? 254 : execution.Code)) : execution.Code; execution.Detail = EVSE_Value; } } else { execution.IsRepliedbyEVSE = false; if (Status == 0) { execution.Code = 0; execution.IsWaited = true; } if (Status == -1) { execution.IsTimeout = true; execution.Code = 0; execution.Detail = "Timeout"; } } switch (execution.Code) { case 1: { execution.Result = CommandResultType.Accepted.ToString(); } break; case 9: { execution.Result = CommandResultType.Notsupported.ToString(); } break; case 10: { execution.Result = CommandResultType.Unknown.ToString(); } break; case 26: { execution.Result = CommandResultType.Occupied.ToString(); } break; case 31: { execution.Result = CommandResultType.Rejected.ToString(); } break; case 32: { execution.Result = CommandResultType.Failed.ToString(); } break; case 254: { execution.Result = CommandResultType.EVSE_ERROR.ToString(); } break; default: { if (execution.IsTimeout.HasValue && execution.IsTimeout.Value) execution.Result = CommandResultType.Timeout.ToString(); ; if (execution.IsWaited.HasValue && execution.IsWaited.Value) execution.Result = CommandResultType.Waited.ToString(); ; } break; } return execution; } private int ConverttoCode(string statusName) { int code = -1; if (string.IsNullOrEmpty(statusName)) return code; Internal_ExecutionCode result = Internal_ExecutionCode.Accepted; if (Enum.TryParse(statusName, out result)) { code = (int)result; } return code; } } }