WebDbService.cs 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. using Dapper;
  2. using EVCB_OCPP.Domain.ConnectionFactory;
  3. using EVCB_OCPP.WSServer.Dto;
  4. using EVCB_OCPP.WSServer.Helper;
  5. using EVCB_OCPP.WSServer.Service.WsService;
  6. using Microsoft.Data.SqlClient;
  7. using Microsoft.Extensions.Configuration;
  8. using Microsoft.Extensions.Logging;
  9. using System;
  10. using System.Collections.Generic;
  11. using System.Data;
  12. using System.Linq;
  13. using System.Text;
  14. using System.Threading.Tasks;
  15. namespace EVCB_OCPP.WSServer.Service.DbService;
  16. public class WebDbService
  17. {
  18. private readonly ISqlConnectionFactory<WebDBConetext> webDbConnectionFactory;
  19. private readonly ILogger<WebDbService> logger;
  20. public WebDbService(ISqlConnectionFactory<WebDBConetext> webDbConnectionFactory, ILogger<WebDbService> logger)
  21. {
  22. this.webDbConnectionFactory = webDbConnectionFactory;
  23. this.logger = logger;
  24. //this.webConnectionString = configuration.GetConnectionString("WebDBContext");
  25. }
  26. //private readonly string webConnectionString;
  27. public async Task<List<string>> GetDenyModelNames(CancellationToken token = default)
  28. {
  29. using SqlConnection conn = await webDbConnectionFactory.CreateAsync();
  30. string strSql = """
  31. SELECT [Value]
  32. FROM [dbo].[KernelConfig]
  33. where SystemKey = 'DenyModelNames';
  34. """;
  35. var result = await conn.QueryFirstOrDefaultAsync<string>(
  36. new CommandDefinition(strSql, cancellationToken: token)
  37. );
  38. return result.Split(',').ToList();
  39. }
  40. async public Task<string> SetDefaultFee(WsClientData client)
  41. {
  42. string displayPriceText = string.Empty;
  43. string charingPriceText = string.Empty;
  44. if (string.IsNullOrEmpty(client.ChargeBoxId)) return displayPriceText;
  45. try
  46. {
  47. using (SqlConnection conn = await webDbConnectionFactory.CreateAsync())
  48. {
  49. var parameters = new DynamicParameters();
  50. parameters.Add("@MachineId", client.MachineId, DbType.String, ParameterDirection.Input, 36);
  51. string displayPricestrSql = "";
  52. string strSql = "";
  53. if (client.IsAC)
  54. {
  55. displayPricestrSql = """
  56. SELECT [AC_BillingMethod] as BillingMethod,[AC_FeeName] as FeeName,[AC_Fee] as ChargingFeebyHour ,[AC_ParkingFee] as ParkingFee, [Currency]
  57. FROM[StationMachine] left join[dbo].[Station]
  58. on[StationMachine].StationId = Station.[Id]
  59. where StationMachine.MachineId=@MachineId and Station.IsBilling=1;
  60. """;
  61. strSql = """
  62. SELECT CAST( [StartTime] as varchar(5)) StartTime,CAST( [EndTime] as varchar(5)) EndTime,[Fee]
  63. FROM[StationMachine] left join [dbo].[StationFee]
  64. on[StationMachine].StationId = StationFee.StationId
  65. where StationMachine.MachineId =@MachineId and StationFee.IsAC=1;
  66. """;
  67. }
  68. else
  69. {
  70. displayPricestrSql = """
  71. SELECT [DC_BillingMethod] as BillingMethod,[DC_FeeName] as FeeName,[DC_Fee] as ChargingFeebyHour ,[DC_ParkingFee] as ParkingFee, [Currency]
  72. FROM[StationMachine] left join[dbo].[Station]
  73. on[StationMachine].StationId = Station.[Id]
  74. where StationMachine.MachineId=@MachineId and Station.IsBilling=1;
  75. """;
  76. strSql = """
  77. SELECT CAST( [StartTime] as varchar(5)) StartTime,CAST( [EndTime] as varchar(5)) EndTime,[Fee]
  78. FROM[StationMachine] left join [dbo].[StationFee]
  79. on[StationMachine].StationId = StationFee.StationId
  80. where StationMachine.MachineId =@MachineId and StationFee.IsAC=0;
  81. """;
  82. }
  83. var result = await conn.QueryAsync<StationFee>(displayPricestrSql, parameters);
  84. if (result.Count() == 0)
  85. {
  86. return string.Empty;
  87. }
  88. var stationPrice = result.First();
  89. if (stationPrice.BillingMethod == 1)
  90. {
  91. var chargingPriceResult = await conn.QueryAsync<ChargingPrice>(strSql, parameters);
  92. client.ChargingPrices = chargingPriceResult.ToList();
  93. if (string.IsNullOrEmpty(client.ChargingPrices[0].StartTime))
  94. {
  95. client.ChargingPrices = new List<ChargingPrice>();
  96. }
  97. }
  98. displayPriceText = stationPrice.FeeName;
  99. client.BillingMethod = stationPrice.BillingMethod;
  100. client.Currency = stationPrice.Currency;
  101. client.ChargingFeebyHour = stationPrice.ChargingFeebyHour;
  102. client.ParkingFee = stationPrice.ParkingFee;
  103. client.IsBilling = true;
  104. }
  105. }
  106. catch (Exception ex)
  107. {
  108. logger.LogError("SetDefaultFee", ex.ToString());
  109. }
  110. return displayPriceText;
  111. }
  112. internal async Task<Dictionary<string, string>> GetCustomerStationEvseConfig(string chargeBoxId, CancellationToken token = default)
  113. {
  114. string strSql = """
  115. SELECT [ConfigureName], [ConfigureSetting]
  116. FROM [dbo].[StationMachine]
  117. INNER Join [dbo].[StationMachineConfig] on [dbo].[StationMachine].StationId = [dbo].[StationMachineConfig].StationId
  118. WHERE [ChargeBoxId] = @ChargeBoxId
  119. """;
  120. using SqlConnection conn = await webDbConnectionFactory.CreateAsync();
  121. DynamicParameters parameters = new DynamicParameters();
  122. parameters.Add("@ChargeBoxId", chargeBoxId, DbType.String, ParameterDirection.Input, 25);
  123. var configs = await conn.QueryAsync<StationMachineConfig>(new CommandDefinition(strSql, parameters: parameters, cancellationToken: token));
  124. return configs.ToDictionary(x=>x.ConfigureName, x=>x.ConfigureSetting);
  125. }
  126. internal async Task<Dictionary<string, string>> GetEvseStationConfig(int stationId, CancellationToken token = default)
  127. {
  128. }
  129. internal async Task<int?> GetEvseStation(string chargeboxIds, CancellationToken token = default)
  130. {
  131. string getStationStrSql = """
  132. SELECT [StationId]
  133. FROM [dbo].[StationMachine]
  134. WHERE [ChargeBoxId] = @ChargeBoxIds;
  135. """;
  136. var parameters = new DynamicParameters();
  137. parameters.Add("@ChargeBoxIds", chargeboxIds, direction: ParameterDirection.Input, size: 25);
  138. using SqlConnection conn = await webDbConnectionFactory.CreateAsync();
  139. var stationId = await conn.QuerySingleAsync<int?>(new CommandDefinition(getStationStrSql, parameters, token));
  140. return stationId;
  141. }
  142. internal async Task<Dictionary<string, int>> GetEvseStationPair(List<string> chargeboxIds)
  143. {
  144. string getStationStrSql = """
  145. SELECT [StationId],[ChargeBoxId]
  146. FROM [dbo].[StationMachine]
  147. WHERE [ChargeBoxId] IN @ChargeBoxIds;
  148. """;
  149. var parameters = new DynamicParameters();
  150. parameters.Add("@ChargeBoxIds", chargeboxIds, direction: ParameterDirection.Input, size: 25);
  151. using SqlConnection conn = await webDbConnectionFactory.CreateAsync();
  152. var configs = await conn.QueryAsync<StationMachine>(getStationStrSql, parameters);
  153. return configs.ToDictionary(x => x.ChargeBoxId, x => x.StationId);
  154. }
  155. internal async Task<Dictionary<int, Dictionary<string, string>>> GetStationEvseConfigs()
  156. {
  157. string getSql = """
  158. SELECT [StationId],[ConfigureName],[ConfigureSetting]
  159. FROM [dbo].[StationMachine]
  160. """;
  161. using SqlConnection conn = await webDbConnectionFactory.CreateAsync();
  162. var configs = await conn.QueryAsync<StationMachineConfig>(getSql);
  163. return configs
  164. .GroupBy(x => x.StationId)
  165. .ToDictionary(
  166. x => x.Key,
  167. x => x.ToDictionary(
  168. x => x.ConfigureName,
  169. x => x.ConfigureSetting
  170. ));
  171. }
  172. }