فهرست منبع

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

Robert 1 سال پیش
والد
کامیت
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.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.Message = confirm;
                         result.Success = true;
                         result.Success = true;
@@ -679,6 +681,28 @@ internal partial class ProfileHandler
                             }
                             }
                             else
                             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;
                                 _ConnectorId = transaction.ConnectorId;
 
 
                                 var confirm = new StopTransactionConfirmation()
                                 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.EntityFrameworkCore;
 using Microsoft.Extensions.Caching.Memory;
 using Microsoft.Extensions.Caching.Memory;
 using Microsoft.Extensions.Configuration;
 using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Hosting;
 using Microsoft.Extensions.Logging;
 using Microsoft.Extensions.Logging;
 using Newtonsoft.Json;
 using Newtonsoft.Json;
 using OCPPPackage.Profiles;
 using OCPPPackage.Profiles;
@@ -37,6 +38,7 @@ public interface IMainDbService
     Task<TransactionRecord> GetTransactionForStopTransaction(int transactionId, string chargeBoxId);
     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 UpdateTransaction(int transactionId, int meterStop, DateTime stopTime, int stopReasonId, string stopReason, string stopIdTag, string receipt, int cost);
     Task<bool> UpdateHeartBeats(IEnumerable<Machine> heartBeatsData);
     Task<bool> UpdateHeartBeats(IEnumerable<Machine> heartBeatsData);
+    Task UpdateTransactionSOC(int id, string v1, string v2);
 }
 }
 
 
 public class MainDbService : IMainDbService
 public class MainDbService : IMainDbService
@@ -297,6 +299,26 @@ public class MainDbService : IMainDbService
         return UpdateTransactionDapper(transactionId, meterStop, stopTime, stopReasonId, stopReason, stopIdTag, receipt, cost);
         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)
     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();
         using var db = await contextFactory.CreateDbContextAsync();
@@ -758,7 +780,7 @@ public class MainDbService : IMainDbService
 
 
         using var conn = await sqlConnectionFactory.CreateAsync();
         using var conn = await sqlConnectionFactory.CreateAsync();
         var record = await conn.QuerySingleAsync<TransactionRecord>("""
         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 
             WHERE Id = @TransactionId and ChargeBoxId = @ChargeBoxId 
             """, parameters);
             """, parameters);
         return record;
         return record;

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

@@ -1,5 +1,6 @@
 using Dapper;
 using Dapper;
 using EVCB_OCPP.Domain;
 using EVCB_OCPP.Domain;
+using EVCB_OCPP.WSServer.Dto;
 using EVCB_OCPP.WSServer.Helper;
 using EVCB_OCPP.WSServer.Helper;
 using Microsoft.Data.SqlClient;
 using Microsoft.Data.SqlClient;
 using Microsoft.EntityFrameworkCore;
 using Microsoft.EntityFrameworkCore;
@@ -68,6 +69,38 @@ public class MeterValueDbService
         return BundleInsertWithDapper(param);
         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()
     private void InitInsertMeterValueHandler()
     {
     {
         if (insertMeterValueHandler is not null)
         if (insertMeterValueHandler is not null)