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;
}
}
}