Przeglądaj źródła

add main commit abfcf96e
Commit abfcf96e: 1.Transaction 加入SOC & 拿掉

Robert 1 rok temu
rodzic
commit
131750b37c

+ 15 - 0
EVCB_OCPP.WSServer/Dto/TransactionSoCDto.cs

@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace EVCB_OCPP.WSServer.Dto
+{
+    internal class TransactionSoCDto
+    {
+        public int TransactionId { set; get; }
+        public int MinSoC { set; get; }
+        public int MaxSoC { set; get; }
+    }
+}

+ 27 - 3
EVCB_OCPP.WSServer/Message/CoreProfileHandler.cs

@@ -208,9 +208,11 @@ internal partial class ProfileHandler
                             }
 
                             confirm.status = DataTransferStatus.Accepted;
-                            confirm.data = JsonConvert.SerializeObject(new { certificateStatus = iso15118_token == "12345678901234" ? "Accepted" : "CertificateExpired", idTokenInfo = new { status = iso15118_token == "12345678901234" ? "Accepted" : "Invalid" } });
-
-
+                            confirm.data = JsonConvert.SerializeObject(
+                                new { 
+                                    certificateStatus = iso15118_token == "12345678901234" ? "Accepted" : "CertificateExpired",
+                                    idTokenInfo = new { status = iso15118_token == "12345678901234" ? "Accepted" : "Invalid" 
+                                    } });
                         }
                         result.Message = confirm;
                         result.Success = true;
@@ -679,6 +681,28 @@ internal partial class ProfileHandler
                             }
                             else
                             {
+                                #region 加入Transaction Start/StopSOC
+                                if (!session.IsAC && _request.transactionId > 0)
+                                {
+                                    var SearchTime = transaction.StartTime;
+                                    var txStopTime = _request.timestamp;
+                                    List<int> SOCCollection = new List<int>();
+
+                                    while (SearchTime.Date <= txStopTime.Date)
+                                    {
+
+                                        var searchResults = await meterValueDbService.GetTransactionSOC(transaction.Id, SearchTime.Date);
+                                        SOCCollection.AddRange(searchResults);
+                                        SearchTime = SearchTime.AddDays(1);
+                                    }
+
+                                    SOCCollection.Sort();
+                                    logger.LogDebug(string.Format("SOCCollection:" + String.Join(",", SOCCollection.Select(x => x.ToString()).ToArray())));
+
+                                    await mainDbService.UpdateTransactionSOC(transaction.Id, SOCCollection.First().ToString("0"), SOCCollection.Last().ToString("0"));
+                                }
+                                #endregion
+
                                 _ConnectorId = transaction.ConnectorId;
 
                                 var confirm = new StopTransactionConfirmation()

+ 23 - 1
EVCB_OCPP.WSServer/Service/MainDbService.cs

@@ -6,6 +6,7 @@ using Microsoft.Data.SqlClient;
 using Microsoft.EntityFrameworkCore;
 using Microsoft.Extensions.Caching.Memory;
 using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Hosting;
 using Microsoft.Extensions.Logging;
 using Newtonsoft.Json;
 using OCPPPackage.Profiles;
@@ -37,6 +38,7 @@ public interface IMainDbService
     Task<TransactionRecord> GetTransactionForStopTransaction(int transactionId, string chargeBoxId);
     Task UpdateTransaction(int transactionId, int meterStop, DateTime stopTime, int stopReasonId, string stopReason, string stopIdTag, string receipt, int cost);
     Task<bool> UpdateHeartBeats(IEnumerable<Machine> heartBeatsData);
+    Task UpdateTransactionSOC(int id, string v1, string v2);
 }
 
 public class MainDbService : IMainDbService
@@ -297,6 +299,26 @@ public class MainDbService : IMainDbService
         return UpdateTransactionDapper(transactionId, meterStop, stopTime, stopReasonId, stopReason, stopIdTag, receipt, cost);
     }
 
+    public async Task UpdateTransactionSOC(int id, string startSOC, string stopSOC)
+    {
+        var parameters = new DynamicParameters();
+        parameters.Add("@TransactionId", id, DbType.Int32, ParameterDirection.Input);
+        parameters.Add("@StartSOC", startSOC, DbType.String, ParameterDirection.Input, 3);
+        parameters.Add("@StopSOC", stopSOC, DbType.String, ParameterDirection.Input, 3);
+
+        using var conn = await sqlConnectionFactory.CreateAsync();
+        var resultCnt = await conn.ExecuteAsync("""
+            UPDATE TransactionRecord
+            SET StartSOC = @StartSOC, StopSOC = @StopSOC
+            WHERE Id = @TransactionId
+            """, parameters);
+        if (resultCnt != 1)
+        {
+            throw new Exception("Update over one columes");
+        }
+        return;
+    }
+
     private async Task UpdateTransactionEF(int transactionId, int meterStop, DateTime stopTime, int stopReasonId, string stopReason, string stopIdTag, string receipt, int cost)
     {
         using var db = await contextFactory.CreateDbContextAsync();
@@ -758,7 +780,7 @@ public class MainDbService : IMainDbService
 
         using var conn = await sqlConnectionFactory.CreateAsync();
         var record = await conn.QuerySingleAsync<TransactionRecord>("""
-            SELECT ConnectorId, MeterStop, MeterStart, StopTime FROM TransactionRecord
+            SELECT Id, ConnectorId, MeterStop, MeterStart, StartTime, StopTime FROM TransactionRecord
             WHERE Id = @TransactionId and ChargeBoxId = @ChargeBoxId 
             """, parameters);
         return record;

+ 33 - 0
EVCB_OCPP.WSServer/Service/MeterValueDbService.cs

@@ -1,5 +1,6 @@
 using Dapper;
 using EVCB_OCPP.Domain;
+using EVCB_OCPP.WSServer.Dto;
 using EVCB_OCPP.WSServer.Helper;
 using Microsoft.Data.SqlClient;
 using Microsoft.EntityFrameworkCore;
@@ -68,6 +69,38 @@ public class MeterValueDbService
         return BundleInsertWithDapper(param);
     }
 
+    public async Task<List<int>> GetTransactionSOC(int TxId, DateTime queryDate)
+    {
+        List<int> SOCCollection = new List<int>();
+        try
+        {
+            using var conn = await sqlConnectionFactory.CreateAsync();
+            var parameters = new DynamicParameters();
+            parameters.Add("@TransactionId", TxId, DbType.Int32, ParameterDirection.Input);
+
+            string strSql = $"""
+                SELECT [TransactionId],Min(Value) as MinSoC,Max(Value) as MaxSoC
+                FROM [dbo].ConnectorMeterValueRecord{queryDate.Date.ToString("yyMMdd")}
+                WHERE TransactionId=@TransactionId and MeasurandId=20 group by [TransactionId]
+                """;
+
+            var result = await conn.QueryFirstOrDefaultAsync<TransactionSoCDto>(strSql, parameters);
+            //  SOCCollection = results.Select(decimal.Parse).ToList();
+
+            if (result != null)
+            {
+                SOCCollection.Add(result.MaxSoC);
+                SOCCollection.Add(result.MinSoC);
+            }
+        }
+        catch (Exception ex)
+        {
+
+        }
+
+        return SOCCollection;
+    }
+
     private void InitInsertMeterValueHandler()
     {
         if (insertMeterValueHandler is not null)