|
@@ -18,190 +18,196 @@ using OCPPPackage.Profiles;
|
|
|
using OCPPServer.Protocol;
|
|
|
using System.Configuration;
|
|
|
using System.Transactions;
|
|
|
+using System.Data.Entity.Core;
|
|
|
+using System.Data.Entity.Validation;
|
|
|
+using NLog;
|
|
|
|
|
|
namespace EVCB_OCPP.WSServer.Message
|
|
|
{
|
|
|
|
|
|
internal partial class ProfileHandler
|
|
|
{
|
|
|
+ static private ILogger logger = NLog.LogManager.GetCurrentClassLogger();
|
|
|
|
|
|
|
|
|
async internal Task<MessageResult> ExecuteCoreRequest(Actions action, ClientData session, IRequest request)
|
|
|
{
|
|
|
MessageResult result = new MessageResult() { Success = false };
|
|
|
|
|
|
- switch (action)
|
|
|
+ try
|
|
|
{
|
|
|
+ switch (action)
|
|
|
+ {
|
|
|
|
|
|
- case Actions.BootNotification:
|
|
|
- {
|
|
|
- BootNotificationRequest _request = request as BootNotificationRequest;
|
|
|
- int heartbeat_interval = GlobalConfig.GetHEARTBEAT_INTERVAL();
|
|
|
- using (var db = new MainDBContext())
|
|
|
+ case Actions.BootNotification:
|
|
|
{
|
|
|
- var _machine = db.Machine.Where(x => x.ChargeBoxId == session.ChargeBoxId).FirstOrDefault();
|
|
|
- _machine.ChargeBoxSerialNumber = string.IsNullOrEmpty(_request.chargeBoxSerialNumber) ? string.Empty : _request.chargeBoxSerialNumber;
|
|
|
- _machine.ChargePointModel = string.IsNullOrEmpty(_request.chargePointModel) ? string.Empty : _request.chargePointModel;
|
|
|
- _machine.ChargePointVendor = string.IsNullOrEmpty(_request.chargePointVendor) ? string.Empty : _request.chargePointVendor;
|
|
|
- _machine.FW_CurrentVersion = string.IsNullOrEmpty(_request.firmwareVersion) ? string.Empty : _request.firmwareVersion;
|
|
|
- _machine.Iccid = string.IsNullOrEmpty(_request.iccid) ? string.Empty : _request.iccid;
|
|
|
- _machine.Imsi = string.IsNullOrEmpty(_request.imsi) ? string.Empty : _request.imsi;
|
|
|
- _machine.MeterSerialNumber = string.IsNullOrEmpty(_request.meterSerialNumber) ? string.Empty : _request.meterSerialNumber;
|
|
|
- _machine.MeterType = string.IsNullOrEmpty(_request.meterType) ? string.Empty : _request.meterType;
|
|
|
+ BootNotificationRequest _request = request as BootNotificationRequest;
|
|
|
+ int heartbeat_interval = GlobalConfig.GetHEARTBEAT_INTERVAL();
|
|
|
+ using (var db = new MainDBContext())
|
|
|
+ {
|
|
|
+ var _machine = db.Machine.Where(x => x.ChargeBoxId == session.ChargeBoxId).FirstOrDefault();
|
|
|
+ _machine.ChargeBoxSerialNumber = string.IsNullOrEmpty(_request.chargeBoxSerialNumber) ? string.Empty : _request.chargeBoxSerialNumber;
|
|
|
+ _machine.ChargePointModel = string.IsNullOrEmpty(_request.chargePointModel) ? string.Empty : _request.chargePointModel;
|
|
|
+ _machine.ChargePointVendor = string.IsNullOrEmpty(_request.chargePointVendor) ? string.Empty : _request.chargePointVendor;
|
|
|
+ _machine.FW_CurrentVersion = string.IsNullOrEmpty(_request.firmwareVersion) ? string.Empty : _request.firmwareVersion;
|
|
|
+ _machine.Iccid = string.IsNullOrEmpty(_request.iccid) ? string.Empty : _request.iccid;
|
|
|
+ _machine.Imsi = string.IsNullOrEmpty(_request.imsi) ? string.Empty : _request.imsi;
|
|
|
+ _machine.MeterSerialNumber = string.IsNullOrEmpty(_request.meterSerialNumber) ? string.Empty : _request.meterSerialNumber;
|
|
|
+ _machine.MeterType = string.IsNullOrEmpty(_request.meterType) ? string.Empty : _request.meterType;
|
|
|
|
|
|
- db.SaveChanges();
|
|
|
+ db.SaveChanges();
|
|
|
|
|
|
- var configVaule = db.MachineConfiguration.Where(x => x.ChargeBoxId == session.ChargeBoxId && x.ConfigureName == StandardConfiguration.HeartbeatInterval)
|
|
|
- .Select(x => x.ConfigureSetting).FirstOrDefault();
|
|
|
+ var configVaule = db.MachineConfiguration.Where(x => x.ChargeBoxId == session.ChargeBoxId && x.ConfigureName == StandardConfiguration.HeartbeatInterval)
|
|
|
+ .Select(x => x.ConfigureSetting).FirstOrDefault();
|
|
|
|
|
|
- if (configVaule != null)
|
|
|
- {
|
|
|
- int.TryParse(configVaule, out heartbeat_interval);
|
|
|
+ if (configVaule != null)
|
|
|
+ {
|
|
|
+ int.TryParse(configVaule, out heartbeat_interval);
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- var confirm = new BootNotificationConfirmation() { currentTime = DateTime.Now, interval = heartbeat_interval, status = Packet.Messages.SubTypes.RegistrationStatus.Accepted };
|
|
|
+ var confirm = new BootNotificationConfirmation() { currentTime = DateTime.Now, interval = heartbeat_interval, status = Packet.Messages.SubTypes.RegistrationStatus.Accepted };
|
|
|
|
|
|
- result.Message = confirm;
|
|
|
- result.Success = true;
|
|
|
- }
|
|
|
- break;
|
|
|
- case Actions.StatusNotification:
|
|
|
- {
|
|
|
- //只保留最新上報狀況
|
|
|
- StatusNotificationRequest _request = request as StatusNotificationRequest;
|
|
|
- int preStatus = 0;
|
|
|
- using (var db = new MainDBContext())
|
|
|
+ result.Message = confirm;
|
|
|
+ result.Success = true;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case Actions.StatusNotification:
|
|
|
{
|
|
|
- var _oldStatus = db.ConnectorStatus.Where(x => x.ChargeBoxId == session.ChargeBoxId
|
|
|
- && x.ConnectorId == _request.connectorId).AsNoTracking().FirstOrDefault();
|
|
|
+ //只保留最新上報狀況
|
|
|
+ StatusNotificationRequest _request = request as StatusNotificationRequest;
|
|
|
+ int preStatus = 0;
|
|
|
+ using (var db = new MainDBContext())
|
|
|
+ {
|
|
|
+ var _oldStatus = db.ConnectorStatus.Where(x => x.ChargeBoxId == session.ChargeBoxId
|
|
|
+ && x.ConnectorId == _request.connectorId).AsNoTracking().FirstOrDefault();
|
|
|
|
|
|
|
|
|
- if (_oldStatus != null && (_request.status != (ChargePointStatus)_oldStatus.Status || _request.status == ChargePointStatus.Faulted))
|
|
|
- {
|
|
|
+ if (_oldStatus != null && (_request.status != (ChargePointStatus)_oldStatus.Status || _request.status == ChargePointStatus.Faulted))
|
|
|
+ {
|
|
|
|
|
|
- preStatus = _oldStatus.Status;
|
|
|
+ preStatus = _oldStatus.Status;
|
|
|
|
|
|
- db.Configuration.AutoDetectChangesEnabled = false;
|
|
|
- db.Configuration.ValidateOnSaveEnabled = false;
|
|
|
- db.ConnectorStatus.Attach(_oldStatus);
|
|
|
+ db.Configuration.AutoDetectChangesEnabled = false;
|
|
|
+ db.Configuration.ValidateOnSaveEnabled = false;
|
|
|
+ db.ConnectorStatus.Attach(_oldStatus);
|
|
|
|
|
|
|
|
|
- _oldStatus.CreatedOn = _request.timestamp.HasValue ? _request.timestamp.Value : DateTime.Now;
|
|
|
- _oldStatus.Status = (int)_request.status;
|
|
|
- _oldStatus.ChargePointErrorCodeId = (int)_request.errorCode;
|
|
|
- _oldStatus.ErrorInfo = string.IsNullOrEmpty(_request.info) ? string.Empty : _request.info;
|
|
|
- _oldStatus.VendorId = string.IsNullOrEmpty(_request.vendorId) ? string.Empty : _request.vendorId;
|
|
|
- _oldStatus.VendorErrorCode = string.IsNullOrEmpty(_request.vendorErrorCode) ? string.Empty : _request.vendorErrorCode;
|
|
|
+ _oldStatus.CreatedOn = _request.timestamp.HasValue ? _request.timestamp.Value : DateTime.Now;
|
|
|
+ _oldStatus.Status = (int)_request.status;
|
|
|
+ _oldStatus.ChargePointErrorCodeId = (int)_request.errorCode;
|
|
|
+ _oldStatus.ErrorInfo = string.IsNullOrEmpty(_request.info) ? string.Empty : _request.info;
|
|
|
+ _oldStatus.VendorId = string.IsNullOrEmpty(_request.vendorId) ? string.Empty : _request.vendorId;
|
|
|
+ _oldStatus.VendorErrorCode = string.IsNullOrEmpty(_request.vendorErrorCode) ? string.Empty : _request.vendorErrorCode;
|
|
|
|
|
|
|
|
|
- db.Entry(_oldStatus).Property(x => x.CreatedOn).IsModified = true;
|
|
|
- db.Entry(_oldStatus).Property(x => x.Status).IsModified = true;
|
|
|
- db.Entry(_oldStatus).Property(x => x.ChargePointErrorCodeId).IsModified = true;
|
|
|
- db.Entry(_oldStatus).Property(x => x.ErrorInfo).IsModified = true;
|
|
|
- db.Entry(_oldStatus).Property(x => x.VendorId).IsModified = true;
|
|
|
- db.Entry(_oldStatus).Property(x => x.VendorErrorCode).IsModified = true;
|
|
|
+ db.Entry(_oldStatus).Property(x => x.CreatedOn).IsModified = true;
|
|
|
+ db.Entry(_oldStatus).Property(x => x.Status).IsModified = true;
|
|
|
+ db.Entry(_oldStatus).Property(x => x.ChargePointErrorCodeId).IsModified = true;
|
|
|
+ db.Entry(_oldStatus).Property(x => x.ErrorInfo).IsModified = true;
|
|
|
+ db.Entry(_oldStatus).Property(x => x.VendorId).IsModified = true;
|
|
|
+ db.Entry(_oldStatus).Property(x => x.VendorErrorCode).IsModified = true;
|
|
|
|
|
|
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
- if (_oldStatus == null)
|
|
|
- {
|
|
|
- var _currentStatus = new Domain.Models.Database.ConnectorStatus()
|
|
|
+ if (_oldStatus == null)
|
|
|
{
|
|
|
- ChargeBoxId = session.ChargeBoxId,
|
|
|
- ConnectorId = (byte)_request.connectorId,
|
|
|
- CreatedOn = _request.timestamp.HasValue ? _request.timestamp.Value : DateTime.Now,
|
|
|
- Status = (int)_request.status,
|
|
|
- ChargePointErrorCodeId = (int)_request.errorCode,
|
|
|
- ErrorInfo = string.IsNullOrEmpty(_request.info) ? string.Empty : _request.info,
|
|
|
- VendorId = string.IsNullOrEmpty(_request.vendorId) ? string.Empty : _request.vendorId,
|
|
|
- VendorErrorCode = string.IsNullOrEmpty(_request.vendorErrorCode) ? string.Empty : _request.vendorErrorCode,
|
|
|
- Id = Guid.NewGuid().ToString()
|
|
|
- };
|
|
|
- db.ConnectorStatus.Add(_currentStatus);
|
|
|
+ var _currentStatus = new Domain.Models.Database.ConnectorStatus()
|
|
|
+ {
|
|
|
+ ChargeBoxId = session.ChargeBoxId,
|
|
|
+ ConnectorId = (byte)_request.connectorId,
|
|
|
+ CreatedOn = _request.timestamp.HasValue ? _request.timestamp.Value : DateTime.Now,
|
|
|
+ Status = (int)_request.status,
|
|
|
+ ChargePointErrorCodeId = (int)_request.errorCode,
|
|
|
+ ErrorInfo = string.IsNullOrEmpty(_request.info) ? string.Empty : _request.info,
|
|
|
+ VendorId = string.IsNullOrEmpty(_request.vendorId) ? string.Empty : _request.vendorId,
|
|
|
+ VendorErrorCode = string.IsNullOrEmpty(_request.vendorErrorCode) ? string.Empty : _request.vendorErrorCode,
|
|
|
+ Id = Guid.NewGuid().ToString()
|
|
|
+ };
|
|
|
+ db.ConnectorStatus.Add(_currentStatus);
|
|
|
|
|
|
+ }
|
|
|
+ if (_request.status == Packet.Messages.SubTypes.ChargePointStatus.Faulted)
|
|
|
+ {
|
|
|
+ db.MachineError.Add(new MachineError()
|
|
|
+ {
|
|
|
+ ConnectorId = (byte)_request.connectorId,
|
|
|
+ CreatedOn = _request.timestamp.HasValue ? _request.timestamp.Value : DateTime.Now,
|
|
|
+ Status = (int)_request.status,
|
|
|
+ ChargeBoxId = session.ChargeBoxId,
|
|
|
+ ErrorCodeId = (int)_request.errorCode,
|
|
|
+ ErrorInfo = string.IsNullOrEmpty(_request.info) ? string.Empty : _request.info,
|
|
|
+ PreStatus = _oldStatus == null ? -1 : preStatus,
|
|
|
+ VendorErrorCode = string.IsNullOrEmpty(_request.vendorErrorCode) ? string.Empty : _request.vendorErrorCode,
|
|
|
+ VendorId = string.IsNullOrEmpty(_request.vendorId) ? string.Empty : _request.vendorId
|
|
|
+ });
|
|
|
+ }
|
|
|
+ db.SaveChanges();
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
if (_request.status == Packet.Messages.SubTypes.ChargePointStatus.Faulted)
|
|
|
{
|
|
|
- db.MachineError.Add(new MachineError()
|
|
|
+ var businessService = BusinessServiceFactory.CreateBusinessService(session.CustomerId.ToString());
|
|
|
+ var notification = businessService.NotifyFaultStatus(new ErrorDetails()
|
|
|
{
|
|
|
- ConnectorId = (byte)_request.connectorId,
|
|
|
- CreatedOn = _request.timestamp.HasValue ? _request.timestamp.Value : DateTime.Now,
|
|
|
- Status = (int)_request.status,
|
|
|
ChargeBoxId = session.ChargeBoxId,
|
|
|
- ErrorCodeId = (int)_request.errorCode,
|
|
|
- ErrorInfo = string.IsNullOrEmpty(_request.info) ? string.Empty : _request.info,
|
|
|
- PreStatus = _oldStatus == null ? -1 : preStatus,
|
|
|
+ ConnectorId = _request.connectorId,
|
|
|
+ ErrorCode = _request.errorCode,
|
|
|
+ Info = string.IsNullOrEmpty(_request.info) ? string.Empty : _request.info,
|
|
|
+ OCcuredOn = _request.timestamp ?? DateTime.Now,
|
|
|
VendorErrorCode = string.IsNullOrEmpty(_request.vendorErrorCode) ? string.Empty : _request.vendorErrorCode,
|
|
|
- VendorId = string.IsNullOrEmpty(_request.vendorId) ? string.Empty : _request.vendorId
|
|
|
+
|
|
|
});
|
|
|
}
|
|
|
- db.SaveChanges();
|
|
|
- }
|
|
|
|
|
|
-
|
|
|
- if (_request.status == Packet.Messages.SubTypes.ChargePointStatus.Faulted)
|
|
|
- {
|
|
|
- var businessService = BusinessServiceFactory.CreateBusinessService(session.CustomerId.ToString());
|
|
|
- var notification = businessService.NotifyFaultStatus(new ErrorDetails()
|
|
|
- {
|
|
|
- ChargeBoxId = session.ChargeBoxId,
|
|
|
- ConnectorId = _request.connectorId,
|
|
|
- ErrorCode = _request.errorCode,
|
|
|
- Info = string.IsNullOrEmpty(_request.info) ? string.Empty : _request.info,
|
|
|
- OCcuredOn = _request.timestamp ?? DateTime.Now,
|
|
|
- VendorErrorCode = string.IsNullOrEmpty(_request.vendorErrorCode) ? string.Empty : _request.vendorErrorCode,
|
|
|
-
|
|
|
- });
|
|
|
+ var confirm = new StatusNotificationConfirmation() { };
|
|
|
+ result.Message = confirm;
|
|
|
+ result.Success = true;
|
|
|
}
|
|
|
-
|
|
|
- var confirm = new StatusNotificationConfirmation() { };
|
|
|
- result.Message = confirm;
|
|
|
- result.Success = true;
|
|
|
- }
|
|
|
- break;
|
|
|
- case Actions.Heartbeat:
|
|
|
- {
|
|
|
- using (var db = new MainDBContext())
|
|
|
+ break;
|
|
|
+ case Actions.Heartbeat:
|
|
|
{
|
|
|
- // var machine = db.Machine.Where(x => x.ChargeBoxId == session.ChargeBoxId).FirstOrDefault();
|
|
|
- var machine = new Machine() { Id = session.MachineId };
|
|
|
- if (machine != null)
|
|
|
+ using (var db = new MainDBContext())
|
|
|
{
|
|
|
- db.Configuration.AutoDetectChangesEnabled = false;
|
|
|
- db.Configuration.ValidateOnSaveEnabled = false;
|
|
|
- db.Machine.Attach(machine);
|
|
|
- machine.HeartbeatUpdatedOn = DateTime.Now;
|
|
|
- machine.ConnectionType = session.UriScheme.Equals("wss") ? 2 : 1;
|
|
|
- db.Entry(machine).Property(x => x.HeartbeatUpdatedOn).IsModified = true;
|
|
|
- db.Entry(machine).Property(x => x.ConnectionType).IsModified = true;
|
|
|
- await db.SaveChangesAsync();
|
|
|
+ // var machine = db.Machine.Where(x => x.ChargeBoxId == session.ChargeBoxId).FirstOrDefault();
|
|
|
+ var machine = new Machine() { Id = session.MachineId };
|
|
|
+ if (machine != null)
|
|
|
+ {
|
|
|
+ db.Configuration.AutoDetectChangesEnabled = false;
|
|
|
+ db.Configuration.ValidateOnSaveEnabled = false;
|
|
|
+ db.Machine.Attach(machine);
|
|
|
+ machine.HeartbeatUpdatedOn = DateTime.Now;
|
|
|
+ machine.ConnectionType = session.UriScheme.Equals("wss") ? 2 : 1;
|
|
|
+ db.Entry(machine).Property(x => x.HeartbeatUpdatedOn).IsModified = true;
|
|
|
+ db.Entry(machine).Property(x => x.ConnectionType).IsModified = true;
|
|
|
+ await db.SaveChangesAsync();
|
|
|
+ }
|
|
|
+ var confirm = new HeartbeatConfirmation() { currentTime = DateTime.Now };
|
|
|
+ result.Message = confirm;
|
|
|
+ result.Success = true;
|
|
|
}
|
|
|
- var confirm = new HeartbeatConfirmation() { currentTime = DateTime.Now };
|
|
|
- result.Message = confirm;
|
|
|
- result.Success = true;
|
|
|
}
|
|
|
- }
|
|
|
- break;
|
|
|
- case Actions.MeterValues:
|
|
|
- {
|
|
|
- MeterValuesRequest _request = request as MeterValuesRequest;
|
|
|
-
|
|
|
- if (_request.meterValue.Count > 0)
|
|
|
+ break;
|
|
|
+ case Actions.MeterValues:
|
|
|
{
|
|
|
- using (var db = new MeterValueDBContext())
|
|
|
+ MeterValuesRequest _request = request as MeterValuesRequest;
|
|
|
+
|
|
|
+ if (_request.meterValue.Count > 0)
|
|
|
{
|
|
|
- foreach (var item in _request.meterValue)
|
|
|
+ using (var db = new MeterValueDBContext())
|
|
|
{
|
|
|
- foreach (var sampleVaule in item.sampledValue)
|
|
|
+ foreach (var item in _request.meterValue)
|
|
|
{
|
|
|
+ foreach (var sampleVaule in item.sampledValue)
|
|
|
+ {
|
|
|
|
|
|
- decimal value = Convert.ToDecimal(sampleVaule.value);
|
|
|
+ decimal value = Convert.ToDecimal(sampleVaule.value);
|
|
|
|
|
|
- string sp = "[dbo].[uspInsertMeterValueRecord] @ChargeBoxId," +
|
|
|
- "@ConnectorId,@Value,@CreatedOn,@ContextId,@FormatId,@MeasurandId,@PhaseId,@LocationId,@UnitId,@TransactionId";
|
|
|
+ string sp = "[dbo].[uspInsertMeterValueRecord] @ChargeBoxId," +
|
|
|
+ "@ConnectorId,@Value,@CreatedOn,@ContextId,@FormatId,@MeasurandId,@PhaseId,@LocationId,@UnitId,@TransactionId";
|
|
|
|
|
|
- List<SqlParameter> parameter = new List<SqlParameter>
|
|
|
+ List<SqlParameter> parameter = new List<SqlParameter>
|
|
|
{
|
|
|
new SqlParameter("ChargeBoxId",session.ChargeBoxId),
|
|
|
new SqlParameter("ConnectorId", (byte)_request.connectorId),
|
|
@@ -217,162 +223,163 @@ namespace EVCB_OCPP.WSServer.Message
|
|
|
};
|
|
|
|
|
|
|
|
|
- db.Database.ExecuteSqlCommand(sp, parameter.ToArray());
|
|
|
+ db.Database.ExecuteSqlCommand(sp, parameter.ToArray());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- var confirm = new MeterValuesConfirmation() { };
|
|
|
- result.Message = confirm;
|
|
|
- result.Success = true;
|
|
|
- }
|
|
|
- break;
|
|
|
- case Actions.StartTransaction:
|
|
|
- {
|
|
|
- StartTransactionRequest _request = request as StartTransactionRequest;
|
|
|
- IdTagInfo _idTagInfo = new IdTagInfo()
|
|
|
+ var confirm = new MeterValuesConfirmation() { };
|
|
|
+ result.Message = confirm;
|
|
|
+ result.Success = true;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case Actions.StartTransaction:
|
|
|
{
|
|
|
- expiryDate = DateTime.UtcNow.AddDays(1),
|
|
|
- parentIdTag = "Supervisor",
|
|
|
- status = AuthorizationStatus.Accepted
|
|
|
+
|
|
|
+ StartTransactionRequest _request = request as StartTransactionRequest;
|
|
|
+ IdTagInfo _idTagInfo = new IdTagInfo()
|
|
|
+ {
|
|
|
+ expiryDate = DateTime.UtcNow.AddDays(1),
|
|
|
+ parentIdTag = "Supervisor",
|
|
|
+ status = AuthorizationStatus.Accepted
|
|
|
|
|
|
- };
|
|
|
+ };
|
|
|
|
|
|
- int _transactionId = -1;
|
|
|
- if (DateTime.Compare(DateTime.UtcNow.AddSeconds(-10), _request.timestamp.ToUniversalTime()) >= 0)
|
|
|
- {
|
|
|
- var businessService = BusinessServiceFactory.CreateBusinessService(session.CustomerId.ToString());
|
|
|
- _idTagInfo = await businessService.Authorize(session.ChargeBoxId, _request.idTag);
|
|
|
+ int _transactionId = -1;
|
|
|
+ if (DateTime.Compare(DateTime.UtcNow.AddSeconds(-10), _request.timestamp.ToUniversalTime()) >= 0)
|
|
|
+ {
|
|
|
+ var businessService = BusinessServiceFactory.CreateBusinessService(session.CustomerId.ToString());
|
|
|
+ _idTagInfo = await businessService.Authorize(session.ChargeBoxId, _request.idTag);
|
|
|
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
- using (var db = new MainDBContext())
|
|
|
- {
|
|
|
- var _CustomerId = db.Machine.Where(x => x.ChargeBoxId == session.ChargeBoxId).Include(x => x.Customer).
|
|
|
- Select(x => x.CustomerId).FirstOrDefault();
|
|
|
+ using (var db = new MainDBContext())
|
|
|
+ {
|
|
|
+ var _CustomerId = db.Machine.Where(x => x.ChargeBoxId == session.ChargeBoxId).Include(x => x.Customer).
|
|
|
+ Select(x => x.CustomerId).FirstOrDefault();
|
|
|
|
|
|
- var _existedTx = db.TransactionRecord.Where(x => x.CustomerId == _CustomerId && x.ChargeBoxId == session.ChargeBoxId
|
|
|
- && x.ConnectorId == _request.connectorId && x.StartTime == _request.timestamp).Select(C => new { C.Id }).AsNoTracking().FirstOrDefault();
|
|
|
- TransactionRecord _newTransaction = new TransactionRecord();
|
|
|
+ var _existedTx = db.TransactionRecord.Where(x => x.CustomerId == _CustomerId && x.ChargeBoxId == session.ChargeBoxId
|
|
|
+ && x.ConnectorId == _request.connectorId && x.StartTime == _request.timestamp).Select(C => new { C.Id }).AsNoTracking().FirstOrDefault();
|
|
|
+ TransactionRecord _newTransaction = new TransactionRecord();
|
|
|
|
|
|
|
|
|
- if (_existedTx == null)
|
|
|
- {
|
|
|
- _newTransaction = new TransactionRecord()
|
|
|
+ if (_existedTx == null)
|
|
|
{
|
|
|
- ChargeBoxId = session.ChargeBoxId,
|
|
|
- ConnectorId = (byte)_request.connectorId,
|
|
|
- CreatedOn = DateTime.Now,
|
|
|
- StartIdTag = _request.idTag,
|
|
|
- MeterStart = _request.meterStart,
|
|
|
- CustomerId = _CustomerId,
|
|
|
- StartTime = _request.timestamp,
|
|
|
- ReservationId = _request.reservationId.HasValue ? _request.reservationId.Value : 0,
|
|
|
+ _newTransaction = new TransactionRecord()
|
|
|
+ {
|
|
|
+ ChargeBoxId = session.ChargeBoxId,
|
|
|
+ ConnectorId = (byte)_request.connectorId,
|
|
|
+ CreatedOn = DateTime.Now,
|
|
|
+ StartIdTag = _request.idTag,
|
|
|
+ MeterStart = _request.meterStart,
|
|
|
+ CustomerId = _CustomerId,
|
|
|
+ StartTime = _request.timestamp,
|
|
|
+ ReservationId = _request.reservationId.HasValue ? _request.reservationId.Value : 0,
|
|
|
|
|
|
|
|
|
- };
|
|
|
+ };
|
|
|
|
|
|
- db.TransactionRecord.Add(_newTransaction);
|
|
|
+ db.TransactionRecord.Add(_newTransaction);
|
|
|
|
|
|
- db.SaveChanges();
|
|
|
+ db.SaveChanges();
|
|
|
|
|
|
- _transactionId = _newTransaction.Id;
|
|
|
- Console.WriteLine("***************************************************** ");
|
|
|
- Console.WriteLine(string.Format("{0} :TransactionId {1} ", session.ChargeBoxId, _newTransaction.Id));
|
|
|
- Console.WriteLine("***************************************************** ");
|
|
|
+ _transactionId = _newTransaction.Id;
|
|
|
+ Console.WriteLine("***************************************************** ");
|
|
|
+ Console.WriteLine(string.Format("{0} :TransactionId {1} ", session.ChargeBoxId, _newTransaction.Id));
|
|
|
+ Console.WriteLine("***************************************************** ");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ _transactionId = _existedTx.Id;
|
|
|
+ Console.WriteLine("Duplication ***************************************************** " + _existedTx.Id);
|
|
|
+ }
|
|
|
}
|
|
|
- else
|
|
|
+
|
|
|
+
|
|
|
+ var confirm = new StartTransactionConfirmation()
|
|
|
{
|
|
|
- _transactionId = _existedTx.Id;
|
|
|
- Console.WriteLine("Duplication ***************************************************** " + _existedTx.Id);
|
|
|
- }
|
|
|
- }
|
|
|
+ idTagInfo = _idTagInfo,
|
|
|
+ transactionId = _transactionId
|
|
|
+ };
|
|
|
|
|
|
|
|
|
- var confirm = new StartTransactionConfirmation()
|
|
|
+ result.Message = confirm;
|
|
|
+ result.Success = true;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case Actions.StopTransaction:
|
|
|
{
|
|
|
- idTagInfo = _idTagInfo,
|
|
|
- transactionId = _transactionId
|
|
|
- };
|
|
|
+ StopTransactionRequest _request = request as StopTransactionRequest;
|
|
|
+ List<TransactionDataRecord> _TransactionDatas = new List<TransactionDataRecord>();
|
|
|
+ int _ConnectorId = 0;
|
|
|
|
|
|
+ // var businessService = BusinessServiceFactory.CreateBusinessService(session.CustomerId.ToString());
|
|
|
+ // var _idTagInfo = businessService.Authorize(session.ChargeBoxId, _request.idTag);
|
|
|
|
|
|
- result.Message = confirm;
|
|
|
- result.Success = true;
|
|
|
- }
|
|
|
- break;
|
|
|
- case Actions.StopTransaction:
|
|
|
- {
|
|
|
- StopTransactionRequest _request = request as StopTransactionRequest;
|
|
|
- List<TransactionDataRecord> _TransactionDatas = new List<TransactionDataRecord>();
|
|
|
- int _ConnectorId = 0;
|
|
|
+ var _idTagInfo = new IdTagInfo()
|
|
|
+ {
|
|
|
+ expiryDate = DateTime.UtcNow.AddDays(1),
|
|
|
+ parentIdTag = "Supervisor",
|
|
|
+ status = AuthorizationStatus.Accepted
|
|
|
|
|
|
- // var businessService = BusinessServiceFactory.CreateBusinessService(session.CustomerId.ToString());
|
|
|
- // var _idTagInfo = businessService.Authorize(session.ChargeBoxId, _request.idTag);
|
|
|
+ };
|
|
|
|
|
|
- var _idTagInfo = new IdTagInfo()
|
|
|
- {
|
|
|
- expiryDate = DateTime.UtcNow.AddDays(1),
|
|
|
- parentIdTag = "Supervisor",
|
|
|
- status = AuthorizationStatus.Accepted
|
|
|
+ using (var db = new MainDBContext())
|
|
|
+ {
|
|
|
+ var transaction = db.TransactionRecord.Where(x => x.Id == _request.transactionId
|
|
|
+ && x.ChargeBoxId == session.ChargeBoxId).FirstOrDefault();
|
|
|
|
|
|
- };
|
|
|
+ if (transaction != null)
|
|
|
+ {
|
|
|
+ _ConnectorId = transaction.ConnectorId;
|
|
|
+ transaction.MeterStop = _request.meterStop;
|
|
|
+ transaction.StopTime = _request.timestamp;
|
|
|
+ transaction.StopReasonId = _request.reason.HasValue ? (int)_request.reason.Value : 0;
|
|
|
+ transaction.StopIdTag = _request.idTag;
|
|
|
|
|
|
- using (var db = new MainDBContext())
|
|
|
- {
|
|
|
- var transaction = db.TransactionRecord.Where(x => x.Id == _request.transactionId
|
|
|
- && x.ChargeBoxId == session.ChargeBoxId).FirstOrDefault();
|
|
|
+ if (_TransactionDatas.Count > 0)
|
|
|
+ {
|
|
|
+ _TransactionDatas.ForEach(x => x.ConnectorId = (byte)transaction.ConnectorId);
|
|
|
+ }
|
|
|
|
|
|
- if (transaction != null)
|
|
|
- {
|
|
|
- _ConnectorId = transaction.ConnectorId;
|
|
|
- transaction.MeterStop = _request.meterStop;
|
|
|
- transaction.StopTime = _request.timestamp;
|
|
|
- transaction.StopReasonId = _request.reason.HasValue ? (int)_request.reason.Value : 0;
|
|
|
- transaction.StopIdTag = _request.idTag;
|
|
|
+ await db.SaveChangesAsync();
|
|
|
+ var confirm = new StopTransactionConfirmation()
|
|
|
+ {
|
|
|
+ idTagInfo = _idTagInfo
|
|
|
|
|
|
- if (_TransactionDatas.Count > 0)
|
|
|
- {
|
|
|
- _TransactionDatas.ForEach(x => x.ConnectorId = (byte)transaction.ConnectorId);
|
|
|
+ };
|
|
|
+ result.Message = confirm;
|
|
|
+ result.Success = true;
|
|
|
}
|
|
|
-
|
|
|
- await db.SaveChangesAsync();
|
|
|
- var confirm = new StopTransactionConfirmation()
|
|
|
+ else
|
|
|
{
|
|
|
- idTagInfo = _idTagInfo
|
|
|
-
|
|
|
- };
|
|
|
- result.Message = confirm;
|
|
|
- result.Success = true;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- result.Exception = new Exception("Can't find transactionId " + _request.transactionId);
|
|
|
+ result.Exception = new Exception("Can't find transactionId " + _request.transactionId);
|
|
|
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- if (_request.transactionData != null)
|
|
|
- {
|
|
|
- if (_request.transactionData.Count > 0)
|
|
|
+ if (_request.transactionData != null)
|
|
|
{
|
|
|
- using (var _meterDb = new MeterValueDBContext())
|
|
|
+ if (_request.transactionData.Count > 0)
|
|
|
{
|
|
|
- foreach (var item in _request.transactionData)
|
|
|
+ using (var _meterDb = new MeterValueDBContext())
|
|
|
{
|
|
|
- foreach (var sampleVaule in item.sampledValue)
|
|
|
+ foreach (var item in _request.transactionData)
|
|
|
{
|
|
|
- decimal value = Convert.ToDecimal(sampleVaule.value);
|
|
|
+ foreach (var sampleVaule in item.sampledValue)
|
|
|
+ {
|
|
|
+ decimal value = Convert.ToDecimal(sampleVaule.value);
|
|
|
|
|
|
- string sp = "[dbo].[uspInsertMeterValueRecord] @ChargeBoxId," +
|
|
|
- "@ConnectorId,@Value,@CreatedOn,@ContextId,@FormatId,@MeasurandId,@PhaseId,@LocationId,@UnitId,@TransactionId";
|
|
|
+ string sp = "[dbo].[uspInsertMeterValueRecord] @ChargeBoxId," +
|
|
|
+ "@ConnectorId,@Value,@CreatedOn,@ContextId,@FormatId,@MeasurandId,@PhaseId,@LocationId,@UnitId,@TransactionId";
|
|
|
|
|
|
- List<SqlParameter> parameter = new List<SqlParameter>
|
|
|
+ List<SqlParameter> parameter = new List<SqlParameter>
|
|
|
{
|
|
|
new SqlParameter("ChargeBoxId",session.ChargeBoxId),
|
|
|
new SqlParameter("ConnectorId", (byte)_ConnectorId),
|
|
@@ -388,36 +395,45 @@ namespace EVCB_OCPP.WSServer.Message
|
|
|
};
|
|
|
|
|
|
|
|
|
- _meterDb.Database.ExecuteSqlCommand(sp, parameter.ToArray());
|
|
|
+ _meterDb.Database.ExecuteSqlCommand(sp, parameter.ToArray());
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
|
|
|
- }
|
|
|
- break;
|
|
|
- case Actions.Authorize:
|
|
|
- {
|
|
|
- AuthorizeRequest _request = request as AuthorizeRequest;
|
|
|
- var businessService = BusinessServiceFactory.CreateBusinessService(session.CustomerId.ToString());
|
|
|
- var confirm = new AuthorizeConfirmation()
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case Actions.Authorize:
|
|
|
{
|
|
|
- idTagInfo = await businessService.Authorize(session.ChargeBoxId, _request.idTag)
|
|
|
- };
|
|
|
- result.Message = confirm;
|
|
|
- result.Success = true;
|
|
|
- }
|
|
|
- break;
|
|
|
- default:
|
|
|
- {
|
|
|
- Console.WriteLine(string.Format("Not Implement {0} Logic", request.GetType().ToString().Replace("OCPPPackage.Messages.Core.", "")));
|
|
|
- }
|
|
|
- break;
|
|
|
+ AuthorizeRequest _request = request as AuthorizeRequest;
|
|
|
+ var businessService = BusinessServiceFactory.CreateBusinessService(session.CustomerId.ToString());
|
|
|
+ var confirm = new AuthorizeConfirmation()
|
|
|
+ {
|
|
|
+ idTagInfo = await businessService.Authorize(session.ChargeBoxId, _request.idTag)
|
|
|
+ };
|
|
|
+ result.Message = confirm;
|
|
|
+ result.Success = true;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ {
|
|
|
+ Console.WriteLine(string.Format("Not Implement {0} Logic", request.GetType().ToString().Replace("OCPPPackage.Messages.Core.", "")));
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ logger.Fatal(string.Format("chargeBoxId:{0} {1}", session.ChargeBoxId, action));
|
|
|
+ logger.Fatal(string.Format("Data {0}", request.ToString()));
|
|
|
+ logger.Fatal(string.Format("Error {0}", ex.ToString()));
|
|
|
+ result.Exception = ex;
|
|
|
+ }
|
|
|
+
|
|
|
return result;
|
|
|
}
|
|
|
|