MeterValueDbService.cs 4.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. using EVCB_OCPP.Domain;
  2. using EVCB_OCPP.Packet.Messages.SubTypes;
  3. using EVCB_OCPP.WSServer.Helper;
  4. using Microsoft.Data.SqlClient;
  5. using Microsoft.EntityFrameworkCore;
  6. using Microsoft.Extensions.Logging;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. namespace EVCB_OCPP.WSServer.Service;
  13. public class MeterValueDbService
  14. {
  15. private readonly IDbContextFactory<MeterValueDBContext> meterValueDbContextFactory;
  16. private readonly ILoggerFactory loggerFactory;
  17. //private GroupSingleHandler<InsertMeterValueParam> insertMeterValueHandler;
  18. public MeterValueDbService(IDbContextFactory<MeterValueDBContext> meterValueDbContextFactory, ILoggerFactory loggerFactory)
  19. {
  20. this.meterValueDbContextFactory = meterValueDbContextFactory;
  21. this.loggerFactory = loggerFactory;
  22. //InitInsertMeterValueHandler();
  23. }
  24. public async Task InsertAsync(string chargeBoxId, byte connectorId, decimal value, DateTime createdOn
  25. , int contextId, int formatId, int measurandId, int phaseId
  26. , int locationId, int unitId, int transactionId)
  27. {
  28. using var db = await meterValueDbContextFactory.CreateDbContextAsync();
  29. string sp = "[dbo].[uspInsertMeterValueRecord] @ChargeBoxId, @ConnectorId,@Value,@CreatedOn,@ContextId,@FormatId,@MeasurandId,@PhaseId,@LocationId,@UnitId,@TransactionId";
  30. var param = new InsertMeterValueParam(chargeBoxId, connectorId, value, createdOn, contextId, formatId, measurandId, phaseId, locationId, unitId, transactionId);
  31. List<SqlParameter> parameter = new List<SqlParameter>();
  32. parameter.AddInsertMeterValueRecordSqlParameters(
  33. chargeBoxId: param.chargeBoxId
  34. , connectorId: (byte)param.connectorId
  35. , value: param.value
  36. , createdOn: param.createdOn
  37. , contextId: param.contextId
  38. , formatId: param.formatId
  39. , measurandId: param.measurandId
  40. , phaseId: param.phaseId
  41. , locationId: param.locationId
  42. , unitId: param.unitId
  43. , transactionId: param.transactionId);
  44. await db.Database.ExecuteSqlRawAsync(sp, parameter.ToArray());
  45. //return insertMeterValueHandler.HandleAsync(new InsertMeterValueParam(chargeBoxId, connectorId, value, createdOn, contextId, formatId, measurandId, phaseId, locationId, unitId, transactionId));
  46. }
  47. // private void InitInsertMeterValueHandler()
  48. // {
  49. // if (insertMeterValueHandler is not null)
  50. // {
  51. // throw new Exception($"{nameof(InitInsertMeterValueHandler)} should only called once");
  52. // }
  53. // insertMeterValueHandler = new GroupSingleHandler<InsertMeterValueParam>(async (parms) => {
  54. // using var db = await meterValueDbContextFactory.CreateDbContextAsync();
  55. // using var trans = await db.Database.BeginTransactionAsync();
  56. // string sp = "[dbo].[uspInsertMeterValueRecord] @ChargeBoxId," +
  57. //"@ConnectorId,@Value,@CreatedOn,@ContextId,@FormatId,@MeasurandId,@PhaseId,@LocationId,@UnitId,@TransactionId";
  58. // foreach (var param in parms)
  59. // {
  60. // List<SqlParameter> parameter = new List<SqlParameter>();
  61. // parameter.AddInsertMeterValueRecordSqlParameters(
  62. // chargeBoxId: param.chargeBoxId
  63. // , connectorId: (byte)param.connectorId
  64. // , value: param.value
  65. // , createdOn: param.createdOn
  66. // , contextId: param.contextId
  67. // , formatId: param.formatId
  68. // , measurandId: param.measurandId
  69. // , phaseId: param.phaseId
  70. // , locationId: param.locationId
  71. // , unitId: param.unitId
  72. // , transactionId: param.transactionId);
  73. // await db.Database.ExecuteSqlRawAsync(sp, parameter.ToArray());
  74. // }
  75. // await trans.CommitAsync();
  76. // }
  77. // , loggerFactory.CreateLogger("InsertMeterValueHandler"));
  78. // }
  79. }
  80. public record InsertMeterValueParam(string chargeBoxId, byte connectorId, decimal value, DateTime createdOn
  81. , int contextId, int formatId, int measurandId, int phaseId
  82. , int locationId, int unitId, int transactionId);