|
@@ -2,6 +2,14 @@
|
|
|
using EVCB_OCPP.Domain;
|
|
|
using EVCB_OCPP.Domain.ConnectionFactory;
|
|
|
using EVCB_OCPP.Domain.Models.MainDb;
|
|
|
+using EVCB_OCPP.Packet.Features;
|
|
|
+using EVCB_OCPP.Packet.Messages.Core;
|
|
|
+using EVCB_OCPP.Packet.Messages.FirmwareManagement;
|
|
|
+using EVCB_OCPP.Packet.Messages.LocalAuthListManagement;
|
|
|
+using EVCB_OCPP.Packet.Messages.RemoteTrigger;
|
|
|
+using EVCB_OCPP.Packet.Messages.Reservation;
|
|
|
+using EVCB_OCPP.Packet.Messages.Security;
|
|
|
+using EVCB_OCPP.Packet.Messages.SmartCharging;
|
|
|
using EVCB_OCPP.WSServer.Helper;
|
|
|
using EVCB_OCPP.WSServer.Message;
|
|
|
using Microsoft.AspNetCore.Connections;
|
|
@@ -50,7 +58,7 @@ public interface IMainDbService
|
|
|
Task AddMachineConfiguration(string chargeBoxId, string key, string value, bool isReadOnly, bool isExist = true);
|
|
|
Task UpdateMachineConfiguration(string chargeBoxId, string item, string empty, bool v, bool isExists = true);
|
|
|
Task<List<MachineConfigurations>> GetMachineConfiguration(string chargeBoxId);
|
|
|
- Task<MessageResult> TryGetResponseFromDb(string msgId);
|
|
|
+ Task<object> TryGetResponseFromDb(string msgId, CancellationToken token = default);
|
|
|
}
|
|
|
|
|
|
public class MainDbService : IMainDbService
|
|
@@ -444,6 +452,75 @@ public class MainDbService : IMainDbService
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public async Task<object> TryGetResponseFromDb(string msgId, CancellationToken token = default)
|
|
|
+ {
|
|
|
+ var parameters = new DynamicParameters();
|
|
|
+ parameters.Add("@MID", msgId, DbType.String, size: 36);
|
|
|
+ parameters.Add("@MT", DateTime.UtcNow.AddSeconds(-5), DbType.DateTime);
|
|
|
+
|
|
|
+ var sql = """
|
|
|
+ SELECT [OutAction],[InMessage]
|
|
|
+ FROM [ServerMessage]
|
|
|
+ WHERE [SerialNo] = @MID AND CreatedOn > @MT
|
|
|
+ """;
|
|
|
+ using var conn = await sqlConnectionFactory.CreateAsync();
|
|
|
+ ServerMessage item = null;
|
|
|
+ item = await conn.QueryFirstOrDefaultAsync<ServerMessage>(new CommandDefinition(sql, parameters: parameters, cancellationToken: token));
|
|
|
+
|
|
|
+ Actions action = Actions.None;
|
|
|
+ if (item is null ||
|
|
|
+ !Enum.TryParse(item.OutAction, out action))
|
|
|
+ {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ switch (action)
|
|
|
+ {
|
|
|
+ case Actions.GetConfiguration:
|
|
|
+ return JsonConvert.DeserializeObject<GetConfigurationConfirmation>(item.InMessage);
|
|
|
+ case Actions.ChangeConfiguration:
|
|
|
+ return JsonConvert.DeserializeObject<ChangeConfigurationConfirmation>(item.InMessage);
|
|
|
+ case Actions.RemoteStartTransaction:
|
|
|
+ return JsonConvert.DeserializeObject<RemoteStartTransactionConfirmation>(item.InMessage);
|
|
|
+ case Actions.RemoteStopTransaction:
|
|
|
+ return JsonConvert.DeserializeObject<RemoteStopTransactionConfirmation>(item.InMessage);
|
|
|
+ case Actions.ChangeAvailability:
|
|
|
+ return JsonConvert.DeserializeObject<ChangeAvailabilityConfirmation>(item.InMessage);
|
|
|
+ case Actions.ClearCache:
|
|
|
+ return JsonConvert.DeserializeObject<ClearCacheConfirmation>(item.InMessage);
|
|
|
+ case Actions.DataTransfer:
|
|
|
+ return JsonConvert.DeserializeObject<DataTransferConfirmation>(item.InMessage);
|
|
|
+ case Actions.Reset:
|
|
|
+ return JsonConvert.DeserializeObject<ResetConfirmation>(item.InMessage);
|
|
|
+ case Actions.UnlockConnector:
|
|
|
+ return JsonConvert.DeserializeObject<UnlockConnectorConfirmation>(item.InMessage);
|
|
|
+ case Actions.TriggerMessage:
|
|
|
+ return JsonConvert.DeserializeObject<TriggerMessageConfirmation>(item.InMessage);
|
|
|
+ case Actions.GetDiagnostics:
|
|
|
+ return JsonConvert.DeserializeObject<GetDiagnosticsConfirmation>(item.InMessage);
|
|
|
+ case Actions.UpdateFirmware:
|
|
|
+ return JsonConvert.DeserializeObject<UpdateFirmwareConfirmation>(item.InMessage);
|
|
|
+ case Actions.GetLocalListVersion:
|
|
|
+ return JsonConvert.DeserializeObject<GetLocalListVersionConfirmation>(item.InMessage);
|
|
|
+ case Actions.SendLocalList:
|
|
|
+ return JsonConvert.DeserializeObject<SendLocalListConfirmation>(item.InMessage);
|
|
|
+ case Actions.SetChargingProfile:
|
|
|
+ return JsonConvert.DeserializeObject<SetChargingProfileConfirmation>(item.InMessage);
|
|
|
+ case Actions.ClearChargingProfile:
|
|
|
+ return JsonConvert.DeserializeObject<ClearChargingProfileConfirmation>(item.InMessage);
|
|
|
+ case Actions.GetCompositeSchedule:
|
|
|
+ return JsonConvert.DeserializeObject<GetCompositeScheduleConfirmation>(item.InMessage);
|
|
|
+ case Actions.ReserveNow:
|
|
|
+ return JsonConvert.DeserializeObject<ReserveNowConfirmation>(item.InMessage);
|
|
|
+ case Actions.CancelReservation:
|
|
|
+ return JsonConvert.DeserializeObject<CancelReservationConfirmation>(item.InMessage);
|
|
|
+ case Actions.ExtendedTriggerMessage:
|
|
|
+ return JsonConvert.DeserializeObject<ExtendedTriggerMessageConfirmation>(item.InMessage);
|
|
|
+ default:
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private void InitUpdateConnectorStatusHandler()
|
|
|
{
|
|
|
if (statusNotificationHandler is not null)
|
|
@@ -593,7 +670,12 @@ public class MainDbService : IMainDbService
|
|
|
var gReult = result.GroupBy(x => x.ChargeBoxId);
|
|
|
foreach (var g in gReult)
|
|
|
{
|
|
|
- bundleHandlerData.AddCompletedData(g.Key, g.ToList());
|
|
|
+ var originKey = chargeboxIds.FirstOrDefault(x=> x.ToLower() == g.Key.ToLower());
|
|
|
+ if (string.IsNullOrEmpty(originKey))
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ bundleHandlerData.AddCompletedData(originKey, g.ToList());
|
|
|
}
|
|
|
}
|
|
|
|