|
@@ -58,6 +58,12 @@ public interface IMainDbService
|
|
|
Task UpdateMachineConfiguration(string chargeBoxId, string item, string empty, bool isReadOnly, bool isExists = true);
|
|
|
Task<List<MachineConfigurations>> GetMachineConfiguration(string chargeBoxId);
|
|
|
Task<object> TryGetResponseFromDb(string msgId, CancellationToken token = default);
|
|
|
+
|
|
|
+ Task InsertOrUpdateTransactionPeriodEnergy(int txId, Dictionary<string, decimal> periodEnergy);
|
|
|
+
|
|
|
+ Task<Dictionary<string, decimal>> GetTransactionPeriodEnergy(int transactionId);
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
public class MainDbService : IMainDbService
|
|
@@ -240,13 +246,13 @@ public class MainDbService : IMainDbService
|
|
|
return AddMachineErrorDapper(ConnectorId, CreatedOn, Status, ChargeBoxId, ErrorCodeId, ErrorInfo, PreStatus, VendorErrorCode, VendorId);
|
|
|
}
|
|
|
|
|
|
- public ValueTask FillupFinishedTimetoMachineError(string ChargeBoxId,byte ConnectorId, DateTime FinishedOn)
|
|
|
- {
|
|
|
-
|
|
|
- return AddFinishedTimetoMachineErrorDapper(ChargeBoxId, ConnectorId, FinishedOn);
|
|
|
- }
|
|
|
+ public ValueTask FillupFinishedTimetoMachineError(string ChargeBoxId, byte ConnectorId, DateTime FinishedOn)
|
|
|
+ {
|
|
|
|
|
|
- public async Task<string> AddServerMessage(string ChargeBoxId, string OutAction, object OutRequest, string CreatedBy, DateTime? CreatedOn = null, string SerialNo = "", string InMessage = "")
|
|
|
+ return AddFinishedTimetoMachineErrorDapper(ChargeBoxId, ConnectorId, FinishedOn);
|
|
|
+ }
|
|
|
+
|
|
|
+ public async Task<string> AddServerMessage(string ChargeBoxId, string OutAction, object OutRequest, string CreatedBy, DateTime? CreatedOn = null, string SerialNo = "", string InMessage = "")
|
|
|
{
|
|
|
if (string.IsNullOrEmpty(CreatedBy))
|
|
|
{
|
|
@@ -691,7 +697,7 @@ public class MainDbService : IMainDbService
|
|
|
var gReult = result.GroupBy(x => x.ChargeBoxId);
|
|
|
foreach (var g in gReult)
|
|
|
{
|
|
|
- var originKey = chargeboxIds.FirstOrDefault(x=> x.ToLower() == g.Key.ToLower());
|
|
|
+ var originKey = chargeboxIds.FirstOrDefault(x => x.ToLower() == g.Key.ToLower());
|
|
|
if (string.IsNullOrEmpty(originKey))
|
|
|
{
|
|
|
continue;
|
|
@@ -852,8 +858,8 @@ public class MainDbService : IMainDbService
|
|
|
""", parameters);
|
|
|
}
|
|
|
|
|
|
- private async ValueTask AddFinishedTimetoMachineErrorDapper(string chargeBoxId, byte connectorId, DateTime finishedTime)
|
|
|
- {
|
|
|
+ private async ValueTask AddFinishedTimetoMachineErrorDapper(string chargeBoxId, byte connectorId, DateTime finishedTime)
|
|
|
+ {
|
|
|
var getCommand = """
|
|
|
SELECT TOP(1) Id
|
|
|
FROM [dbo].[MachineError]
|
|
@@ -862,8 +868,8 @@ public class MainDbService : IMainDbService
|
|
|
""";
|
|
|
|
|
|
var parameters = new DynamicParameters();
|
|
|
- parameters.Add("@ConnectorId", connectorId, DbType.Int16, ParameterDirection.Input);
|
|
|
- parameters.Add("@ChargeBoxId", chargeBoxId, DbType.String, ParameterDirection.Input, 50);
|
|
|
+ parameters.Add("@ConnectorId", connectorId, DbType.Int16, ParameterDirection.Input);
|
|
|
+ parameters.Add("@ChargeBoxId", chargeBoxId, DbType.String, ParameterDirection.Input, 50);
|
|
|
//parameters.Add("@CreatedOn", previousErrorOn, DbType.DateTime, ParameterDirection.Input, 50);
|
|
|
|
|
|
int? recordId = null;
|
|
@@ -1308,6 +1314,134 @@ public class MainDbService : IMainDbService
|
|
|
machine.ConnectionType = v;
|
|
|
return;
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ public async Task<Dictionary<string, decimal>> GetTransactionPeriodEnergy(int transactionId)
|
|
|
+ {
|
|
|
+ var parms = new DynamicParameters();
|
|
|
+ parms.Add("@TransactionId", transactionId);
|
|
|
+
|
|
|
+ var cmd = """
|
|
|
+ SELECT TOP(1)
|
|
|
+ [H00],[H01],[H02],[H03],[H04],[H05],[H06],[H07],[H08],[H09],[H10]
|
|
|
+ ,[H11],[H12],[H13],[H14],[H15],[H16],[H17],[H18],[H19],[H20]
|
|
|
+ ,[H21],[H22],[H23]
|
|
|
+ FROM [dbo].[TransactionPeriodEnergy]
|
|
|
+ WHERE TransactionId = @TransactionId
|
|
|
+ """;
|
|
|
+
|
|
|
+ using var dbConn = await sqlConnectionFactory.CreateAsync();
|
|
|
+ dynamic queryResult = await dbConn.QueryFirstOrDefaultAsync(cmd, parms);
|
|
|
+ if (queryResult is not IDictionary<string, object> queryResultPairs)
|
|
|
+ {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ var toReturn = new Dictionary<string, decimal>();
|
|
|
+ for (int hour = 0; hour < 24; hour++)
|
|
|
+ {
|
|
|
+ var key = GetColName(hour);
|
|
|
+ if (queryResultPairs[key] is decimal value)
|
|
|
+ {
|
|
|
+ toReturn.Add(hour.ToString(), value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return toReturn;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public async Task InsertOrUpdateTransactionPeriodEnergy(int txId, Dictionary<string, decimal> periodEnergy)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ var isExists = await GetTransactionPeriodEnergyExists(txId);
|
|
|
+ var param = CreateParameters(txId, periodEnergy);
|
|
|
+
|
|
|
+ if (isExists)
|
|
|
+ {
|
|
|
+ await UpdateTransactionPeriodEnergy(param);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ await InsertTransactionPeriodEnergy(param);
|
|
|
+ }
|
|
|
+ catch (Exception e)
|
|
|
+ {
|
|
|
+ logger.LogError(e.Message);
|
|
|
+ }
|
|
|
+ return;
|
|
|
+
|
|
|
+ async Task<bool> GetTransactionPeriodEnergyExists(int txId)
|
|
|
+ {
|
|
|
+ var param = new DynamicParameters();
|
|
|
+ param.Add("@TransactionId", txId, DbType.Int32, ParameterDirection.Input);
|
|
|
+
|
|
|
+ var cmd = """
|
|
|
+ SELECT TransactionId
|
|
|
+ FROM TransactionPeriodEnergy
|
|
|
+ WHERE TransactionId = @TransactionId
|
|
|
+ """;
|
|
|
+ using var conn = await sqlConnectionFactory.CreateAsync();
|
|
|
+ return await conn.QueryFirstOrDefaultAsync<int?>(cmd, param) != null;
|
|
|
+ }
|
|
|
+
|
|
|
+ async Task<int> UpdateTransactionPeriodEnergy(DynamicParameters param)
|
|
|
+ {
|
|
|
+ var cmd = """
|
|
|
+ UPDATE TransactionPeriodEnergy
|
|
|
+ SET H00 = @H00, H01 = @H01, H02 = @H02, H03 = @H03, H04 = @H04, H05 = @H05, H06 = @H06, H07 = @H07, H08 = @H08,
|
|
|
+ H09 = @H09, H10 = @H10, H11 = @H11, H12 = @H12, H13 = @H13, H14 = @H14, H15 = @H15, H16 = @H16, H17 = @H17,
|
|
|
+ H18 = @H18, H19 = @H19, H20 = @H20, H21 = @H21, H22 = @H22, H23 = @H23
|
|
|
+ WHERE TransactionId = @TransactionId
|
|
|
+ """;
|
|
|
+ using var conn = await sqlConnectionFactory.CreateAsync();
|
|
|
+ return await conn.ExecuteAsync(cmd, param);
|
|
|
+ }
|
|
|
+
|
|
|
+ async Task InsertTransactionPeriodEnergy(DynamicParameters param)
|
|
|
+ {
|
|
|
+ var cmd = """
|
|
|
+ INSERT INTO TransactionPeriodEnergy
|
|
|
+ (TransactionId, H00, H01, H02, H03, H04, H05, H06, H07, H08, H09, H10, H11, H12, H13, H14, H15, H16, H17, H18, H19, H20, H21, H22, H23)
|
|
|
+ VALUES (@TransactionId, @H00, @H01, @H02, @H03, @H04, @H05, @H06, @H07, @H08, @H09, @H10, @H11, @H12, @H13, @H14, @H15, @H16, @H17, @H18, @H19, @H20, @H21, @H22, @H23)
|
|
|
+ """;
|
|
|
+ using var conn = await sqlConnectionFactory.CreateAsync();
|
|
|
+ await conn.ExecuteAsync(cmd, param);
|
|
|
+ }
|
|
|
+
|
|
|
+ DynamicParameters CreateParameters(int txId, Dictionary<string, decimal> periodEnergy)
|
|
|
+ {
|
|
|
+ var parameters = new DynamicParameters();
|
|
|
+ parameters.Add("@TransactionId", txId, DbType.Int32, ParameterDirection.Input);
|
|
|
+
|
|
|
+ for (int hour = 0; hour < 24; hour++)
|
|
|
+ {
|
|
|
+ var key = hour.ToString();
|
|
|
+ if (!periodEnergy.ContainsKey(key))
|
|
|
+ {
|
|
|
+ parameters.Add(GetColName(hour), 0, DbType.Decimal, ParameterDirection.Input, precision: 18, scale: 4);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ parameters.Add(GetColName(hour), periodEnergy[key], DbType.Decimal, ParameterDirection.Input, precision: 18, scale: 4);
|
|
|
+ }
|
|
|
+ return parameters;
|
|
|
+ }
|
|
|
+
|
|
|
+ string GetColName(int hour)
|
|
|
+ {
|
|
|
+ return $"@H{hour.ToString("00")}";
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ string GetColName(int hour)
|
|
|
+ {
|
|
|
+ return $"H{hour.ToString("00")}";
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
public record MachineAndCustomerInfo(string MachineId, Guid CustomerId, string CustomerName);
|