Эх сурвалжийг харах

1.調整 檢查Online寫法
2. 回報遠端下發指令 group by customerid

Jessica Tseng 2 жил өмнө
parent
commit
9b99c2f0e1

+ 25 - 22
EVCB_OCPP.TaskScheduler/Jobs/CheckEVSEOnlineJob.cs

@@ -37,9 +37,9 @@ namespace EVCB_OCPP.TaskScheduler.Jobs
 
         public async Task Execute(IJobExecutionContext context)
         {
-            await Console.Out.WriteLineAsync(this.ToString() + " :Starting........");
-        
-        
+            logger.Debug(this.ToString() + " :Starting........");
+
+
             List<EVSECurrentStatus> _EVSEs = GetEVSEs();
 
             foreach (var evse in _EVSEs)
@@ -69,11 +69,12 @@ namespace EVCB_OCPP.TaskScheduler.Jobs
 
                             }
 
-                            var _picks = GetOnlineRecords(_pickDate, evse.CustomerId.ToString(), evse.ChargeBoxId, isCrossDay ? 0 : _startHour, _pickDate.Hour);
+                            var _picks =await GetOnlineRecords(_pickDate, evse.CustomerId.ToString(), evse.ChargeBoxId, isCrossDay ? 0 : _startHour, _pickDate.Hour);
 
                             if (isCrossDay)
                             {
-                                _picks.AddRange(GetOnlineRecords(_pickDate.AddHours(-6), evse.CustomerId.ToString(), evse.ChargeBoxId, _startHour, 23));
+                               var _picksCrossData = await GetOnlineRecords(_pickDate.AddHours(-6), evse.CustomerId.ToString(), evse.ChargeBoxId, _startHour, 23);
+                                _picks.AddRange(_picksCrossData);
                             }
 
                             _picks = _picks.OrderBy(x => x.OnlineTime).ToList();
@@ -112,7 +113,7 @@ namespace EVCB_OCPP.TaskScheduler.Jobs
                                         }
                                     }
                                 }
-                               
+
                             }
 
                             _isIgnore = _picks.Where(x => x.HourIndex == latestHeartbeatTime.Hour).ToList().Count == 0 ? false : true;
@@ -137,7 +138,7 @@ namespace EVCB_OCPP.TaskScheduler.Jobs
                     else
                     {
                         //off - on 
-
+                       // logger.Debug(string.Format("Chargeboxid:{0} HeartbeatUpdatedOn:{1} Online:{2}", evse.ChargeBoxId, evse.HeartbeatUpdatedOn,true));
                         UpdateEVSECurrentStatus(evse.CustomerId.ToString(), evse.ChargeBoxId, true, DefaultSetting.DefaultNullTime);
 
                         insertData.Add(new EVSEOnlineRecord()
@@ -158,12 +159,13 @@ namespace EVCB_OCPP.TaskScheduler.Jobs
 
                     if (evse.Online)
                     {
-                       
+                        Console.WriteLine(string.Format("***** Chargeboxid:{0} HeartbeatUpdatedOn:{1} Online:{2}", evse.ChargeBoxId, evse.HeartbeatUpdatedOn, false));
                         //on -off  
                         UpdateEVSECurrentStatus(evse.CustomerId.ToString(), evse.ChargeBoxId, false, evse.HeartbeatUpdatedOn);
 
                         var _pickDate = evse.HeartbeatUpdatedOn.Date;
-                        var _picks = GetOnlineRecords(_pickDate, evse.CustomerId.ToString(), evse.ChargeBoxId, _pickDate.Hour, evse.HeartbeatUpdatedOn.Hour).Where(x => x.OfflineTime == DefaultSetting.DefaultNullTime);
+                        var _picks = await GetOnlineRecords(_pickDate, evse.CustomerId.ToString(), evse.ChargeBoxId, _pickDate.Hour, evse.HeartbeatUpdatedOn.Hour);
+                         _picks = (List<EVSEOnlineRecord>)_picks.Where(x => x.OfflineTime == DefaultSetting.DefaultNullTime);
 
                         foreach (var item in _picks)
                         {
@@ -186,7 +188,7 @@ namespace EVCB_OCPP.TaskScheduler.Jobs
                                         OfflineTime = evse.HeartbeatUpdatedOn.Hour == checkTime.Hour ? evse.HeartbeatUpdatedOn : new DateTime(checkTime.AddHours(1).Year, checkTime.AddHours(1).Month, checkTime.AddHours(1).Day, checkTime.AddHours(1).Hour, 0, 0)
 
                                     });
-                                    checkTime = evse.HeartbeatUpdatedOn.Hour == checkTime.Hour ? insertData.LastOrDefault().OfflineTime.AddHours(1): insertData.LastOrDefault().OfflineTime ;
+                                    checkTime = evse.HeartbeatUpdatedOn.Hour == checkTime.Hour ? insertData.LastOrDefault().OfflineTime.AddHours(1) : insertData.LastOrDefault().OfflineTime;
                                 }
 
                             }
@@ -209,19 +211,19 @@ namespace EVCB_OCPP.TaskScheduler.Jobs
 
                 if ((insertData.Count + updateData.Count) % 100 == 0)
                 {
-                    UpdateOnlineRecords(updateData, insertData);
+                   await UpdateOnlineRecords(updateData, insertData);
                     ClearCache();
                 }
 
 
             }
 
-           
-            UpdateOnlineRecords(updateData, insertData);
 
+            await UpdateOnlineRecords(updateData, insertData);
+
+
+            logger.Debug(this.ToString() + " :Finished........");
 
-            await Console.Out.WriteLineAsync(this.ToString() + " :Finished........");
-           
         }
 
 
@@ -250,7 +252,7 @@ namespace EVCB_OCPP.TaskScheduler.Jobs
         {
             try
             {
-                string sqlString = string.Format("UPDATE[dbo].[Machine] SET Online=@Online {0} WHERE chargeBoxId=@chargeBoxId and customerId=@customerId", turnOn ? "" : " ,OfflineOn=@OfflineOn");
+                string sqlString = string.Format("UPDATE [dbo].[Machine] SET Online=@Online {0} WHERE chargeBoxId=@chargeBoxId and customerId=@customerId", turnOn ? "" : " ,OfflineOn=@OfflineOn");
                 using (var dbConn = new SqlConnection(mainDBConnectString))
                 {
                     dbConn.Open();
@@ -276,7 +278,7 @@ namespace EVCB_OCPP.TaskScheduler.Jobs
         }
 
 
-        private void UpdateOnlineRecords(List<EVSEOnlineRecord> updateItems, List<EVSEOnlineRecord> insertItems)
+        async private Task UpdateOnlineRecords(List<EVSEOnlineRecord> updateItems, List<EVSEOnlineRecord> insertItems)
         {
             List<EVSEOnlineRecord> records = new List<EVSEOnlineRecord>();
             try
@@ -288,7 +290,7 @@ namespace EVCB_OCPP.TaskScheduler.Jobs
                     using (var dbConn = new SqlConnection(onlineDBConnectString))
                     {
                         dbConn.Open();
-                        dbConn.Execute(sqlString, updateItems[i]);
+                        await dbConn.ExecuteAsync(sqlString, updateItems[i]);
                     }
 
                 }
@@ -300,7 +302,7 @@ namespace EVCB_OCPP.TaskScheduler.Jobs
                     using (var dbConn = new SqlConnection(onlineDBConnectString))
                     {
                         dbConn.Open();
-                        dbConn.Execute(sqlString, insertItems[i]);
+                        await dbConn.ExecuteAsync(sqlString, insertItems[i]);
                     }
 
                 }
@@ -313,7 +315,7 @@ namespace EVCB_OCPP.TaskScheduler.Jobs
 
 
 
-        private List<EVSEOnlineRecord> GetOnlineRecords(DateTime pickDate, string customerId, string chargeBoxId, int startHourCondition, int stopHourCondition)
+        async private Task<List<EVSEOnlineRecord>> GetOnlineRecords(DateTime pickDate, string customerId, string chargeBoxId, int startHourCondition, int stopHourCondition)
         {
             List<EVSEOnlineRecord> records = new List<EVSEOnlineRecord>();
             try
@@ -330,7 +332,8 @@ namespace EVCB_OCPP.TaskScheduler.Jobs
                     parameters.Add("@stopHourCondition", stopHourCondition, System.Data.DbType.Int32);
                     parameters.Add("@OfflineTime", DefaultSetting.DefaultNullTime, System.Data.DbType.Date);
 
-                    records = dbConn.Query<EVSEOnlineRecord>(sqlString, parameters).ToList();
+                    var result = await dbConn.QueryAsync<EVSEOnlineRecord>(sqlString, parameters);
+                    records = result.ToList();
                 }
 
             }
@@ -391,7 +394,7 @@ namespace EVCB_OCPP.TaskScheduler.Jobs
         private bool IsOnlineNow(EVSECurrentStatus currentEVSE)
         {
             bool isOnline = false;
-            var checkTime = DateTime.Now.AddSeconds(-120);
+            var checkTime = DateTime.UtcNow.AddSeconds(-120);
 
             if (currentEVSE.HeartbeatUpdatedOn > checkTime)
             {

+ 1 - 1
EVCB_OCPP.TaskScheduler/NLog.config

@@ -44,7 +44,7 @@
     <logger name="Quartz.*" minlevel="Warn" writeTo="f" />
     <logger name="EVCB_OCPP.TaskScheduler.*" minlevel="Debug" writeTo="f" />
     <logger name="EVCB_OCPP.TaskScheduler.*" minlevel="Debug" writeTo="Console" />
-      <logger name="EVCB_OCPP.TaskScheduler.*" minlevel="Debug" writeTo="Console" />
+
   
   </rules>
 </nlog>

+ 11 - 1
EVCB_OCPP.TaskScheduler/OuterHttpClient.cs

@@ -14,16 +14,26 @@ namespace EVCB_OCPP.TaskScheduler
     public class OuterHttpClient
     {
         private HttpClientService httpClient = new HttpClientService();
-
+        private NLog.ILogger logger = NLog.LogManager.GetCurrentClassLogger();
         async public Task<HttpResult> Post(string url, Dictionary<string, string> headers, string requestBody, string saltkey)
         {
             HttpResult result = new HttpResult() { Success = false };
 
             try
             {
+                if(url.Contains("commands/results"))
+                {
+                    logger.Debug(url);
+                }
                 string body = PreAction(url, ref headers, requestBody, saltkey);
                 var _response = await httpClient.PostJsonAsync(url, body, headers);
 
+
+                if (url.Contains("commands/results"))
+                {
+                    logger.Debug(body);
+                    logger.Debug(JsonConvert.SerializeObject(_response));
+                }
                 result.Response = _response.Response;
                 result.Status = _response.StatusCode;
                 result.Success = _response.IsSuccessStatusCode;

+ 13 - 12
EVCB_OCPP.TaskScheduler/Services/DatabaseService.cs

@@ -177,12 +177,13 @@ namespace EVCB_OCPP.TaskScheduler.Services
                 using (var dbConn = new SqlConnection(mainDBConnectString))
                 {
                     dbConn.Open();
-                    var parameters = new DynamicParameters();
-                    parameters.Add("@Id", customerId.ToString(), System.Data.DbType.String);
+                    var parameters = new DynamicParameters();                  
+                    parameters.Add("@CustomerId", customerId.ToString(), System.Data.DbType.String);
                     string sqlString = string.Empty;
 
-                    sqlString = "SELECT Top(" + size + ") Id, ChargeBoxId,Action,SerialNo,Status,EVSE_Value,EVSE_Status FROM [dbo].[MachineOperateRecord] where Status!=0 and RequestType=1 and ReportedOn='1991/01/01' ";
-
+                    sqlString = "SELECT Top(" + size + ") Machine.CustomerId, record.Id, record.ChargeBoxId,record.Action,record.SerialNo,record.Status,record.EVSE_Value,record.EVSE_Status FROM[dbo].[MachineOperateRecord] record" +
+                        " left join[dbo].[Machine]   on record.ChargeBoxId = Machine.ChargeBoxId " +
+                        "  where Machine.CustomerId =@CustomerId and Status!= 0 and RequestType = 1 and ReportedOn = '1991/01/01'";
                     result = dbConn.Query<MachineOperateRecord>(sqlString, parameters).ToList();
                 }
 
@@ -216,7 +217,7 @@ namespace EVCB_OCPP.TaskScheduler.Services
                             parameters.Add("@Id", kv.Key, DbType.Int32, ParameterDirection.Input);
                             parameters.Add("@StartTransactionReportedOn", kv.Value.StartTransactionReportedOn, DbType.DateTime, ParameterDirection.Input);
                             parameters.Add("@ErrorMsg", kv.Value.ErrorMsg, DbType.String, ParameterDirection.Input);
-                            dbConn.Execute("UPDATE [dbo].[TransactionRecord] set StartTransactionReportedOn=@StartTransactionReportedOn, ErrorMsg=@ErrorMsg  where Id=@Id",parameters);
+                            dbConn.Execute("UPDATE [dbo].[TransactionRecord] set StartTransactionReportedOn=@StartTransactionReportedOn, ErrorMsg=@ErrorMsg  where Id=@Id", parameters);
                         }
 
                         tranScope.Complete();
@@ -249,7 +250,7 @@ namespace EVCB_OCPP.TaskScheduler.Services
                             parameters.Add("@Id", kv.Key, DbType.Int32, ParameterDirection.Input);
                             parameters.Add("@StopTransactionReportedOn", kv.Value.StopTransactionReportedOn, DbType.DateTime, ParameterDirection.Input);
                             parameters.Add("@ErrorMsg", kv.Value.ErrorMsg, DbType.String, ParameterDirection.Input);
-                            dbConn.Execute("UPDATE [dbo].[TransactionRecord] set StopTransactionReportedOn=@StopTransactionReportedOn, ErrorMsg=@ErrorMsg  where Id=@Id",parameters);
+                            dbConn.Execute("UPDATE [dbo].[TransactionRecord] set StopTransactionReportedOn=@StopTransactionReportedOn, ErrorMsg=@ErrorMsg  where Id=@Id", parameters);
                         }
 
                         tranScope.Complete();
@@ -268,7 +269,7 @@ namespace EVCB_OCPP.TaskScheduler.Services
 
         internal void TurntoTimeoutMachineOperateCommands(int intervalSeconds)
         {
-           
+
             try
             {
                 using (var dbConn = new SqlConnection(mainDBConnectString))
@@ -283,14 +284,14 @@ namespace EVCB_OCPP.TaskScheduler.Services
                 logger.Error("TurntoTimeoutMachineOperateCommands Error " + ex.ToString());
             }
 
-           
+
         }
 
         internal void ReportExecution(Dictionary<int, BasicResponse> reportResults)
         {
             try
             {
-               using (var tranScope = new TransactionScope())
+                using (var tranScope = new TransactionScope())
                 {
                     using (var dbConn = new SqlConnection(mainDBConnectString))
                     {
@@ -301,11 +302,11 @@ namespace EVCB_OCPP.TaskScheduler.Services
                             var parameters = new DynamicParameters();
                             parameters.Add("@Id", kv.Key, DbType.Int32, ParameterDirection.Input);
                             parameters.Add("@ReportedOn", kv.Value.ReportedOn, DbType.DateTime, ParameterDirection.Input);
-                          
-                            dbConn.Execute("UPDATE [dbo].[MachineOperateRecord] set ReportedOn=@ReportedOn where Id=@Id",parameters);
+
+                            dbConn.Execute("UPDATE [dbo].[MachineOperateRecord] set ReportedOn=@ReportedOn where Id=@Id", parameters);
                         }
 
-                       tranScope.Complete();
+                        tranScope.Complete();
                     }
                 }