WebDbService.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. using Dapper;
  2. using DnsClient.Internal;
  3. using EVCB_OCPP.Domain.ConnectionFactory;
  4. using EVCB_OCPP.WSServer.Dto;
  5. using EVCB_OCPP.WSServer.Helper;
  6. using log4net;
  7. using Microsoft.Data.SqlClient;
  8. using Microsoft.Extensions.Configuration;
  9. using Microsoft.Extensions.Logging;
  10. using OCPPServer.Protocol;
  11. using System;
  12. using System.Collections.Generic;
  13. using System.Data;
  14. using System.Linq;
  15. using System.Text;
  16. using System.Threading.Tasks;
  17. namespace EVCB_OCPP.WSServer.Service;
  18. public class WebDbService
  19. {
  20. private readonly ISqlConnectionFactory<WebDBConetext> webDbConnectionFactory;
  21. private readonly ILogger<WebDbService> logger;
  22. public WebDbService(
  23. ISqlConnectionFactory<WebDBConetext> webDbConnectionFactory
  24. , ILogger<WebDbService> logger)
  25. {
  26. this.webDbConnectionFactory = webDbConnectionFactory;
  27. this.logger = logger;
  28. //this.webConnectionString = configuration.GetConnectionString("WebDBContext");
  29. }
  30. //private readonly string webConnectionString;
  31. public async Task<List<string>> GetDenyModelNames(CancellationToken token = default)
  32. {
  33. using SqlConnection conn = await webDbConnectionFactory.CreateAsync();
  34. string strSql = """
  35. SELECT [Value]
  36. FROM [dbo].[KernelConfig]
  37. where SystemKey = 'DenyModelNames';
  38. """;
  39. var result = await conn.QueryFirstOrDefaultAsync<string>(
  40. new CommandDefinition(strSql, cancellationToken: token)
  41. );
  42. return result.Split(',').ToList();
  43. }
  44. internal async Task<string> SetDefaultFee(WsClientData client)
  45. {
  46. string displayPriceText = string.Empty;
  47. string charingPriceText = string.Empty;
  48. if (string.IsNullOrEmpty(client.ChargeBoxId)) return displayPriceText;
  49. try
  50. {
  51. StationFee stationPrice = await GetStationFee(isAC: client.IsAC, client.MachineId);
  52. if (stationPrice == default)
  53. {
  54. return string.Empty;
  55. }
  56. if (stationPrice.BillingMethod == 1)
  57. {
  58. client.ChargingPrices = await GetChargingPrice(client.IsAC, client.MachineId);
  59. if (string.IsNullOrEmpty(client.ChargingPrices[0].StartTime))
  60. {
  61. client.ChargingPrices = new List<ChargingPrice>();
  62. }
  63. }
  64. displayPriceText = stationPrice.FeeName;
  65. client.BillingMethod = stationPrice.BillingMethod;
  66. client.Currency = stationPrice.Currency;
  67. client.ChargingFeebyHour = stationPrice.ChargingFeebyHour;
  68. client.ParkingFee = stationPrice.ParkingFee;
  69. client.IsBilling = true;
  70. }
  71. catch (Exception ex)
  72. {
  73. logger.LogError("SetDefaultFee", ex.ToString());
  74. }
  75. return displayPriceText;
  76. }
  77. internal Task<StationFee> GetStationFee(bool isAC, string machineId)
  78. {
  79. return isAC ? GetAcStationFee(machineId) : GetDcStationFee(machineId);
  80. }
  81. internal async Task<List<ChargingPrice>> GetChargingPrice(bool isAC, string machineId)
  82. {
  83. var strSql = """
  84. SELECT CAST( [StartTime] as varchar(5)) StartTime,CAST( [EndTime] as varchar(5)) EndTime,[Fee]
  85. FROM [StationMachine]
  86. left join [dbo].[StationFee] on [StationMachine].StationId = StationFee.StationId
  87. WHERE StationMachine.MachineId =@MachineId and StationFee.IsAC=@IsAC;
  88. """;
  89. var parameters = new DynamicParameters();
  90. parameters.Add("@MachineId", machineId, DbType.String, ParameterDirection.Input, 36);
  91. parameters.Add("@IsAC", isAC);
  92. using SqlConnection conn = await webDbConnectionFactory.CreateAsync();
  93. var chargingPriceResult = await conn.QueryAsync<ChargingPrice>(strSql, parameters);
  94. return chargingPriceResult.ToList();
  95. }
  96. private async Task<StationFee> GetAcStationFee(string machineId)
  97. {
  98. var displayPricestrSql = """
  99. SELECT [AC_BillingMethod] as BillingMethod,[AC_FeeName] as FeeName,[AC_Fee] as ChargingFeebyHour, [AC_ParkingFee] as ParkingFee, [Currency]
  100. FROM [StationMachine]
  101. left join[dbo].[Station] on [StationMachine].StationId = Station.[Id]
  102. WHERE StationMachine.MachineId=@MachineId and Station.IsBilling=1;
  103. """;
  104. var parameters = new DynamicParameters();
  105. parameters.Add("@MachineId", machineId, DbType.String, ParameterDirection.Input, 36);
  106. using SqlConnection conn = await webDbConnectionFactory.CreateAsync();
  107. var result = await conn.QueryFirstOrDefaultAsync<StationFee>(displayPricestrSql, parameters);
  108. return result;
  109. }
  110. private async Task<StationFee> GetDcStationFee(string machineId)
  111. {
  112. using SqlConnection conn = await webDbConnectionFactory.CreateAsync();
  113. var displayPricestrSql = """
  114. SELECT [DC_BillingMethod] as BillingMethod,[DC_FeeName] as FeeName,[DC_Fee] as ChargingFeebyHour, [DC_ParkingFee] as ParkingFee, [Currency]
  115. FROM [StationMachine]
  116. left join[dbo].[Station] on [StationMachine].StationId = Station.[Id]
  117. WHERE StationMachine.MachineId=@MachineId and Station.IsBilling=1;
  118. """;
  119. var parameters = new DynamicParameters();
  120. parameters.Add("@MachineId", machineId, DbType.String, ParameterDirection.Input, 36);
  121. var result = await conn.QueryFirstOrDefaultAsync<StationFee>(displayPricestrSql, parameters);
  122. return result;
  123. }
  124. }