Răsfoiți Sursa

simple imporve

Robert 2 ani în urmă
părinte
comite
37b586eaa6

+ 28 - 5
EVCB_OCPP.WSServer/Jobs/HeartBeatCheckJob.cs

@@ -42,8 +42,12 @@ namespace EVCB_OCPP.WSServer.Jobs
                 var clients = _copyClientDic.Where(x => x.Value.LastActiveTime > cdt.AddSeconds(-120)).Select(x => x.Value).ToList();
 
                 watch.Start();
-                await Parallel.ForEachAsync(clients, async (session, token ) => {
-                    using (var db = await maindbContextFactory.CreateDbContextAsync())
+
+                var wssClients = clients.Where(x => x.UriScheme.Equals("wss")).ToList();
+                var wsClients = clients.Except(wssClients).ToList();
+                using (var db = await maindbContextFactory.CreateDbContextAsync())
+                {
+                    foreach (var session in wssClients)
                     {
                         var machine = new Machine() { Id = session.MachineId };
                         if (machine != null)
@@ -52,14 +56,33 @@ namespace EVCB_OCPP.WSServer.Jobs
                             //db.Configuration.ValidateOnSaveEnabled = false;
                             db.Machine.Attach(machine);
                             machine.HeartbeatUpdatedOn = DateTime.UtcNow;
-                            machine.ConnectionType = session.UriScheme.Equals("wss") ? 2 : 1;
+                            machine.ConnectionType = 2;
                             db.Entry(machine).Property(x => x.HeartbeatUpdatedOn).IsModified = true;
                             db.Entry(machine).Property(x => x.ConnectionType).IsModified = true;
-                            await db.SaveChangesAsync(token);
                         }
+                    }
+                    await db.SaveChangesAsync();
+                }
 
+                using (var db = await maindbContextFactory.CreateDbContextAsync())
+                {
+                    foreach (var session in wsClients)
+                    {
+                        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.UtcNow;
+                            machine.ConnectionType = 1;
+                            db.Entry(machine).Property(x => x.HeartbeatUpdatedOn).IsModified = true;
+                            db.Entry(machine).Property(x => x.ConnectionType).IsModified = true;
+                        }
                     }
-                });
+                    await db.SaveChangesAsync();
+                }
+
                 //foreach (var session in clients)
                 //{
                 //    using (var db = await maindbContextFactory.CreateDbContextAsync())

+ 23 - 13
EVCB_OCPP.WSServer/Message/CoreProfileHandler.cs

@@ -211,9 +211,11 @@ namespace EVCB_OCPP.WSServer.Message
                                 _machine.MeterType = string.IsNullOrEmpty(_request.meterType) ? string.Empty : _request.meterType;
 
                                 db.SaveChanges();
+                            }
 
 
-
+                            using (var db = await maindbContextFactory.CreateDbContextAsync())
+                            {
                                 var configVaule = db.MachineConfigurations.Where(x => x.ChargeBoxId == session.ChargeBoxId && x.ConfigureName == StandardConfiguration.HeartbeatInterval)
                                     .Select(x => x.ConfigureSetting).FirstOrDefault();
 
@@ -234,15 +236,18 @@ namespace EVCB_OCPP.WSServer.Message
                             //只保留最新上報狀況
                             StatusNotificationRequest _request = request as StatusNotificationRequest;
                             int preStatus = 0;
+                            ConnectorStatus _oldStatus;
                             using (var db = await maindbContextFactory.CreateDbContextAsync())
                             {
-                                var _oldStatus = db.ConnectorStatus.Where(x => x.ChargeBoxId == session.ChargeBoxId
-                              && x.ConnectorId == _request.connectorId).AsNoTracking().FirstOrDefault();
+                                _oldStatus = await db.ConnectorStatus.Where(x => x.ChargeBoxId == session.ChargeBoxId
+                                && x.ConnectorId == _request.connectorId).AsNoTracking().FirstOrDefaultAsync();
+                            }
 
 
-                                if (_oldStatus != null && (_request.status != (ChargePointStatus)_oldStatus.Status || _request.status == ChargePointStatus.Faulted))
+                            if (_oldStatus != null && (_request.status != (ChargePointStatus)_oldStatus.Status || _request.status == ChargePointStatus.Faulted))
+                            {
+                                using (var db = await maindbContextFactory.CreateDbContextAsync())
                                 {
-
                                     preStatus = _oldStatus.Status;
 
                                     db.ChangeTracker.AutoDetectChangesEnabled = false;
@@ -264,10 +269,13 @@ namespace EVCB_OCPP.WSServer.Message
                                     db.Entry(_oldStatus).Property(x => x.VendorId).IsModified = true;
                                     db.Entry(_oldStatus).Property(x => x.VendorErrorCode).IsModified = true;
 
-
+                                    db.SaveChanges();
                                 }
+                            }
 
-                                if (_oldStatus == null)
+                            if (_oldStatus == null)
+                            {
+                                using (var db = await maindbContextFactory.CreateDbContextAsync())
                                 {
                                     var _currentStatus = new Domain.Models.Database.ConnectorStatus()
                                     {
@@ -281,12 +289,15 @@ namespace EVCB_OCPP.WSServer.Message
                                         VendorErrorCode = string.IsNullOrEmpty(_request.vendorErrorCode) ? string.Empty : _request.vendorErrorCode,
                                         Id = Guid.NewGuid().ToString()
                                     };
-                                    db.ConnectorStatus.Add(_currentStatus);
-
+                                    await db.ConnectorStatus.AddAsync(_currentStatus);
                                 }
-                                if (_request.status == Packet.Messages.SubTypes.ChargePointStatus.Faulted)
+                            }
+
+                            if (_request.status == Packet.Messages.SubTypes.ChargePointStatus.Faulted)
+                            {
+                                using (var db = await maindbContextFactory.CreateDbContextAsync())
                                 {
-                                    db.MachineError.Add(new MachineError()
+                                    await db.MachineError.AddAsync(new MachineError()
                                     {
                                         ConnectorId = (byte)_request.connectorId,
                                         CreatedOn = _request.timestamp.HasValue ? _request.timestamp.Value : DateTime.UtcNow,
@@ -298,11 +309,10 @@ namespace EVCB_OCPP.WSServer.Message
                                         VendorErrorCode = string.IsNullOrEmpty(_request.vendorErrorCode) ? string.Empty : _request.vendorErrorCode,
                                         VendorId = string.IsNullOrEmpty(_request.vendorId) ? string.Empty : _request.vendorId
                                     });
+                                    await db.SaveChangesAsync();
                                 }
-                                db.SaveChanges();
                             }
 
-
                             if (_request.status == Packet.Messages.SubTypes.ChargePointStatus.Faulted)
                             {
                                 //var businessService = BusinessServiceFactory.CreateBusinessService(session.CustomerId.ToString());

+ 1 - 0
EVCB_OCPP.WSServer/appsettings.json

@@ -33,6 +33,7 @@
   },
   "NLog": {
     "targets": {
+      "async": true,
       "f": {
         "type": "File",
         "fileName": "${basedir}/logs/${shortdate}.log",