|
@@ -289,107 +289,112 @@ internal partial class ProfileHandler
|
|
|
}
|
|
|
break;
|
|
|
case Actions.StatusNotification:
|
|
|
- {
|
|
|
- var statusNotificationTimer = Stopwatch.StartNew();
|
|
|
- long s1 = 0, s2 = 0, s3 = 0, s4 = 0, s5 = 0;
|
|
|
- //只保留最新上報狀況
|
|
|
- StatusNotificationRequest _request = request as StatusNotificationRequest;
|
|
|
- int preStatus = 0;
|
|
|
- ConnectorStatus _oldStatus;
|
|
|
-
|
|
|
- _oldStatus = await mainDbService.GetConnectorStatus(session.ChargeBoxId, _request.connectorId);
|
|
|
+ {
|
|
|
+ var statusNotificationTimer = Stopwatch.StartNew();
|
|
|
+ long s1 = 0, s2 = 0, s3 = 0, s4 = 0, s5 = 0;
|
|
|
+ //只保留最新上報狀況
|
|
|
+ StatusNotificationRequest _request = request as StatusNotificationRequest;
|
|
|
+ int preStatus = 0;
|
|
|
+ ConnectorStatus _oldStatus;
|
|
|
|
|
|
- s1 = statusNotificationTimer.ElapsedMilliseconds;
|
|
|
+ _oldStatus = await mainDbService.GetConnectorStatus(session.ChargeBoxId, _request.connectorId);
|
|
|
|
|
|
- if (_oldStatus != null && (_request.status != (ChargePointStatus)_oldStatus.Status || _request.status == ChargePointStatus.Faulted))
|
|
|
- {
|
|
|
- preStatus = _oldStatus.Status;
|
|
|
+ s1 = statusNotificationTimer.ElapsedMilliseconds;
|
|
|
|
|
|
- await mainDbService.UpdateConnectorStatus(_oldStatus.Id, new ConnectorStatus()
|
|
|
- {
|
|
|
- CreatedOn = _request.timestamp.HasValue ? _request.timestamp.Value : DateTime.UtcNow,
|
|
|
- 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
|
|
|
- });
|
|
|
+ if (_oldStatus != null && (_request.status != (ChargePointStatus)_oldStatus.Status || _request.status == ChargePointStatus.Faulted))
|
|
|
+ {
|
|
|
+ preStatus = _oldStatus.Status;
|
|
|
|
|
|
- if (preStatus == (int)ChargePointStatus.Faulted)
|
|
|
- {
|
|
|
- if (_request.status != ChargePointStatus.Faulted ||
|
|
|
- (_oldStatus.ChargePointErrorCodeId != (int)_request.errorCode && _oldStatus.VendorErrorCode != _request.vendorErrorCode))
|
|
|
- {
|
|
|
- await mainDbService.FillupFinishedTimetoMachineError(
|
|
|
- ConnectorId: (byte)_request.connectorId,
|
|
|
- FinishedOn: _request.timestamp.HasValue ? _request.timestamp.Value : DateTime.UtcNow,
|
|
|
- ChargeBoxId: session.ChargeBoxId,
|
|
|
- PreviousErrorOn: _oldStatus.CreatedOn
|
|
|
- );
|
|
|
- }
|
|
|
+ await mainDbService.UpdateConnectorStatus(_oldStatus.Id, new ConnectorStatus()
|
|
|
+ {
|
|
|
+ CreatedOn = _request.timestamp.HasValue ? _request.timestamp.Value : DateTime.UtcNow,
|
|
|
+ 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
|
|
|
+ });
|
|
|
+
|
|
|
+ if (preStatus == (int)ChargePointStatus.Faulted)
|
|
|
+ {
|
|
|
+ if (_request.status != ChargePointStatus.Faulted ||
|
|
|
+ (_oldStatus.ChargePointErrorCodeId != (int)_request.errorCode && _oldStatus.VendorErrorCode != _request.vendorErrorCode))
|
|
|
+ {
|
|
|
+ await mainDbService.FillupFinishedTimetoMachineError(
|
|
|
+ ConnectorId: (byte)_request.connectorId,
|
|
|
+ FinishedOn: _request.timestamp.HasValue ? _request.timestamp.Value : DateTime.UtcNow,
|
|
|
+ ChargeBoxId: session.ChargeBoxId,
|
|
|
+ PreviousErrorOn: _oldStatus.CreatedOn
|
|
|
+ );
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
- }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- s2 = statusNotificationTimer.ElapsedMilliseconds;
|
|
|
+ s2 = statusNotificationTimer.ElapsedMilliseconds;
|
|
|
|
|
|
- if (_oldStatus == null)
|
|
|
- {
|
|
|
- await mainDbService.AddConnectorStatus(
|
|
|
- ChargeBoxId: session.ChargeBoxId,
|
|
|
- ConnectorId: (byte)_request.connectorId,
|
|
|
- CreatedOn: _request.timestamp.HasValue ? _request.timestamp.Value : DateTime.UtcNow,
|
|
|
- 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);
|
|
|
- }
|
|
|
- s3 = statusNotificationTimer.ElapsedMilliseconds;
|
|
|
+ if (_oldStatus == null)
|
|
|
+ {
|
|
|
+ await mainDbService.AddConnectorStatus(
|
|
|
+ ChargeBoxId: session.ChargeBoxId,
|
|
|
+ ConnectorId: (byte)_request.connectorId,
|
|
|
+ CreatedOn: _request.timestamp.HasValue ? _request.timestamp.Value : DateTime.UtcNow,
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ s3 = statusNotificationTimer.ElapsedMilliseconds;
|
|
|
|
|
|
- if (_request.status == Packet.Messages.SubTypes.ChargePointStatus.Faulted)
|
|
|
- {
|
|
|
- await mainDbService.AddMachineError(ConnectorId: (byte)_request.connectorId,
|
|
|
- CreatedOn: _request.timestamp.HasValue ? _request.timestamp.Value : DateTime.UtcNow,
|
|
|
- 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);
|
|
|
- }
|
|
|
+ bool isNeedAddMachineError = CheckNeedAddMachineError(_request, _oldStatus);
|
|
|
|
|
|
- s4 = statusNotificationTimer.ElapsedMilliseconds;
|
|
|
- if (_request.status == Packet.Messages.SubTypes.ChargePointStatus.Faulted)
|
|
|
- {
|
|
|
- //var businessService = BusinessServiceFactory.CreateBusinessService(session.CustomerId.ToString());
|
|
|
- //var businessService = await serviceProvider.GetService<BusinessServiceFactory>().CreateBusinessService(session.CustomerId.ToString());
|
|
|
- var businessService = await 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.UtcNow,
|
|
|
- VendorErrorCode = string.IsNullOrEmpty(_request.vendorErrorCode) ? string.Empty : _request.vendorErrorCode,
|
|
|
+ //if (_request.status == Packet.Messages.SubTypes.ChargePointStatus.Faulted &&
|
|
|
+ //(_oldStatus != null &&
|
|
|
+ //(_oldStatus.ChargePointErrorCodeId != (int)_request.errorCode && _oldStatus.VendorErrorCode != _request.vendorErrorCode)))
|
|
|
+ if (isNeedAddMachineError)
|
|
|
+ {
|
|
|
+ await mainDbService.AddMachineError(ConnectorId: (byte)_request.connectorId,
|
|
|
+ CreatedOn: _request.timestamp.HasValue ? _request.timestamp.Value : DateTime.UtcNow,
|
|
|
+ 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);
|
|
|
+ }
|
|
|
|
|
|
- });
|
|
|
- }
|
|
|
- s5 = statusNotificationTimer.ElapsedMilliseconds;
|
|
|
+ s4 = statusNotificationTimer.ElapsedMilliseconds;
|
|
|
+ if (_request.status == Packet.Messages.SubTypes.ChargePointStatus.Faulted)
|
|
|
+ {
|
|
|
+ //var businessService = BusinessServiceFactory.CreateBusinessService(session.CustomerId.ToString());
|
|
|
+ //var businessService = await serviceProvider.GetService<BusinessServiceFactory>().CreateBusinessService(session.CustomerId.ToString());
|
|
|
+ var businessService = await 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.UtcNow,
|
|
|
+ VendorErrorCode = string.IsNullOrEmpty(_request.vendorErrorCode) ? string.Empty : _request.vendorErrorCode,
|
|
|
+
|
|
|
+ });
|
|
|
+ }
|
|
|
+ s5 = statusNotificationTimer.ElapsedMilliseconds;
|
|
|
|
|
|
- var confirm = new StatusNotificationConfirmation() { };
|
|
|
- result.Message = confirm;
|
|
|
- result.Success = true;
|
|
|
+ var confirm = new StatusNotificationConfirmation() { };
|
|
|
+ result.Message = confirm;
|
|
|
+ result.Success = true;
|
|
|
|
|
|
- statusNotificationTimer.Stop();
|
|
|
- if (statusNotificationTimer.ElapsedMilliseconds / 1000 > 1)
|
|
|
- {
|
|
|
- logger.LogCritical(string.Format("StatusNotification took {0}/{1}/{2}/{3}/{4}", s1, s2, s3, s4, s5));
|
|
|
- }
|
|
|
- }
|
|
|
- break;
|
|
|
+ statusNotificationTimer.Stop();
|
|
|
+ if (statusNotificationTimer.ElapsedMilliseconds / 1000 > 1)
|
|
|
+ {
|
|
|
+ logger.LogCritical(string.Format("StatusNotification took {0}/{1}/{2}/{3}/{4}", s1, s2, s3, s4, s5));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
case Actions.Heartbeat:
|
|
|
{
|
|
|
|
|
@@ -956,7 +961,7 @@ internal partial class ProfileHandler
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
- async internal Task<MessageResult> ExecuteCoreConfirm(Actions action, WsClientData session, IConfirmation confirm, string requestId)
|
|
|
+ async internal Task<MessageResult> ExecuteCoreConfirm(Actions action, WsClientData session, IConfirmation confirm, string requestId)
|
|
|
{
|
|
|
MessageResult result = new MessageResult() { Success = true };
|
|
|
|
|
@@ -1782,5 +1787,24 @@ internal partial class ProfileHandler
|
|
|
return energy;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ private static bool CheckNeedAddMachineError(StatusNotificationRequest _request, ConnectorStatus _oldStatus)
|
|
|
+ {
|
|
|
+ bool isNeedAddMachineError = false;
|
|
|
+ if (_oldStatus == null && _request.status == ChargePointStatus.Faulted)
|
|
|
+ isNeedAddMachineError = true;
|
|
|
+
|
|
|
+ if (_oldStatus != null)
|
|
|
+ {
|
|
|
+ if (_oldStatus.Status != (int)ChargePointStatus.Faulted)
|
|
|
+ {
|
|
|
+ isNeedAddMachineError = true;
|
|
|
+ }
|
|
|
+ else if (_oldStatus.ChargePointErrorCodeId != (int)_request.errorCode && _oldStatus.VendorErrorCode != _request.vendorErrorCode)
|
|
|
+ {
|
|
|
+ isNeedAddMachineError = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return isNeedAddMachineError;
|
|
|
+ }
|
|
|
}
|