Procházet zdrojové kódy

utlize BillingDone to mark transaction can be reported

shayne_lo před 7 měsíci
rodič
revize
0ddd9b6162

+ 5 - 0
EVCB_OCPP.WSServer/Message/CoreProfileHandler.cs

@@ -815,6 +815,10 @@ internal partial class ProfileHandler
 										data: JsonConvert.SerializeObject(new { txId = _request.transactionId, ConnectorId = transaction.ConnectorId })
 										);
 								}
+								else
+								{
+									await mainDbService.SetTransactionBillingDone(_request.transactionId, 0, string.Empty);
+								}
 
 								result.Message = confirm;
 								result.Success = true;
@@ -1022,6 +1026,7 @@ internal partial class ProfileHandler
 										if (feedto.StopTime != GlobalConfig.DefaultNullTime)
 										{
                                             await mainDbService.InsertOrUpdateTransactionPeriodEnergy(txEnergy.TxId, txEnergy.PeriodEnergy);
+											await mainDbService.SetTransactionBillingDone(txEnergy.TxId, 0, string.Empty);
                                         }
 										return result;
 									}

+ 24 - 1
EVCB_OCPP.WSServer/Service/DbService/MainDbService.cs

@@ -64,7 +64,7 @@ public interface IMainDbService
     Task<Dictionary<string, decimal>> GetTransactionPeriodEnergy(int transactionId);
 
     Task<bool> UpdateCustomId(string customId, string chargeboxId);
-
+    Task SetTransactionBillingDone(int txId, decimal cost, string receipt);
 }
 
 public class MainDbService : IMainDbService
@@ -560,6 +560,29 @@ public class MainDbService : IMainDbService
         }
     }
 
+    public async Task SetTransactionBillingDone(int txId, decimal cost, string receipt)
+    {
+        using var db = await contextFactory.CreateDbContextAsync();
+        TransactionRecord transaction = await db.TransactionRecord.Where(x => x.Id == txId).FirstOrDefaultAsync();
+        if (transaction is null)
+        {
+            logger.LogTrace("Tx is empty");
+            return;
+        }
+
+        transaction.Cost = cost;
+        transaction.Receipt = receipt;
+        transaction.BillingDone = true;
+
+        db.ChangeTracker.AutoDetectChangesEnabled = false;
+        //db.Configuration.ValidateOnSaveEnabled = false;
+        db.TransactionRecord.Attach(transaction);
+        db.Entry(transaction).Property(x => x.Cost).IsModified = true;
+        db.Entry(transaction).Property(x => x.Receipt).IsModified = true;
+        db.Entry(transaction).Property(x => x.BillingDone).IsModified = true;
+        await db.SaveChangesAsync();
+    }
+
     private void InitUpdateConnectorStatusHandler()
     {
         if (statusNotificationHandler is not null)