Kaynağa Gözat

fix too much disconnection cause db timeout

Robert 1 yıl önce
ebeveyn
işleme
2e34407063

+ 38 - 3
EVCB_OCPP.TaskScheduler/Jobs/CheckEVSEOnlineJob.cs

@@ -11,6 +11,7 @@ using Microsoft.Extensions.Configuration;
 using EVCB_OCPP.TaskScheduler.Helper;
 using EVCB_OCPP.Domain;
 using EVCB_OCPP.TaskScheduler.Services;
+using Azure.Core;
 
 namespace EVCB_OCPP.TaskScheduler.Jobs
 {
@@ -62,7 +63,7 @@ namespace EVCB_OCPP.TaskScheduler.Jobs
                 {
                     if (g.Key)
                     {
-                        _EVSEs = g.Where(x => !x.Online).ToList();
+                        _EVSEs = g.Where(x => !x.Online).Take(20).ToList();
 
                         for (int evseIndex = 0; evseIndex < _EVSEs.Count; evseIndex++)
                         {
@@ -74,12 +75,17 @@ namespace EVCB_OCPP.TaskScheduler.Jobs
                     }
                     else
                     {
-                        _EVSEs = g.Where(x => x.Online).ToList();
+                        _EVSEs = g.Where(x => x.Online).Take(20).ToList();
                         var ChargeBoxIdOnlineRecordIdPairs = await GetOnlineRecordId(_EVSEs.Select(x=>x.ChargeBoxId).ToList());
 
                         for (int evseIndex = 0; evseIndex < _EVSEs.Count; evseIndex++)
                         {
                             var evse = _EVSEs[evseIndex];
+                            if (!ChargeBoxIdOnlineRecordIdPairs.ContainsKey(evse.ChargeBoxId))
+                            {
+                                continue;
+                            }
+
                             saveTasks.Add(UpdateEVSECurrentStatus(evse.CustomerId.ToString(), evse.ChargeBoxId, false, evse.HeartbeatUpdatedOn));
                             var online_rowId = ChargeBoxIdOnlineRecordIdPairs[evse.ChargeBoxId];
                             if (online_rowId is not null)
@@ -255,7 +261,7 @@ namespace EVCB_OCPP.TaskScheduler.Jobs
                     //lastrow = result.FirstOrDefault();
                 }
 
-                toReturn = chargeBoxIds.ToDictionary<string,string,long?>(keySelector: x => x, elementSelector: x => queryResult.ContainsKey(x) ? queryResult[x] : null);
+                toReturn = chargeBoxIds.ToDictionary<string, string, long?>(keySelector: x => x, elementSelector: x => queryResult.ContainsKey(x) ? queryResult[x] : null);
             }
             catch (Exception ex)
             {
@@ -265,6 +271,35 @@ namespace EVCB_OCPP.TaskScheduler.Jobs
             return toReturn;
         }
 
+        //private async Task<Dictionary<string, long?>> GetOnlineRecordId(List<string> chargeBoxIds)
+        //{
+        //    Dictionary<string, long?> toReturn = new();
+        //    string sqlString = """
+        //        SELECT Id
+        //        FROM [dbo].[EVSEOnlineRecord] s
+        //        WHERE ChargeBoxId = @ChargeBoxId
+        //        ORDER BY s.OnlineTime DESC
+        //        """;
+
+        //    try
+        //    {
+        //        using var dbConn = await onlineLogDbConnectionFactory.CreateAsync();
+
+        //        foreach(var chargeBoxId in chargeBoxIds)
+        //        {
+        //            var parms = new DynamicParameters();
+        //            parms.Add("@ChargeBoxId", chargeBoxId, size: 36);
+        //            var queryResult = await dbConn.QueryFirstOrDefaultAsync<long?>( sqlString, parms );
+        //            toReturn.Add(chargeBoxId, queryResult);
+        //        }
+        //    }
+        //    catch ( Exception e )
+        //    {
+        //        logger.LogError(e.ToString());
+        //    }
+        //    return toReturn;
+        //}
+
 
         private bool IsOnlineNow(EVSECurrentStatus currentEVSE)
         {