WebDbService.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  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. string strSql = """
  129. SELECT [ConfigureName], [ConfigureSetting]
  130. FROM [dbo].[StationMachineConfig]
  131. WHERE [StationId] = @StationId
  132. """;
  133. using SqlConnection conn = await webDbConnectionFactory.CreateAsync();
  134. DynamicParameters parameters = new DynamicParameters();
  135. parameters.Add("@StationId", stationId, DbType.Int32, ParameterDirection.Input);
  136. var configs = await conn.QueryAsync<StationMachineConfig>(new CommandDefinition(strSql, parameters: parameters, cancellationToken: token));
  137. return configs.ToDictionary(x => x.ConfigureName, x => x.ConfigureSetting);
  138. }
  139. internal async Task<int?> GetEvseStation(string chargeboxId, CancellationToken token = default)
  140. {
  141. string getStationStrSql = """
  142. SELECT [StationId]
  143. FROM [dbo].[StationMachine]
  144. WHERE [ChargeBoxId] = @ChargeBoxIds;
  145. """;
  146. var parameters = new DynamicParameters();
  147. parameters.Add("@ChargeBoxIds", chargeboxId, direction: ParameterDirection.Input, size: 25);
  148. using SqlConnection conn = await webDbConnectionFactory.CreateAsync();
  149. var stationId = await conn.QuerySingleAsync<int?>(new CommandDefinition(getStationStrSql, parameters, cancellationToken: token));
  150. return stationId;
  151. }
  152. internal async Task<Dictionary<string, int>> GetEvseStationPair(List<string> chargeboxIds)
  153. {
  154. string getStationStrSql = """
  155. SELECT [StationId],[ChargeBoxId]
  156. FROM [dbo].[StationMachine]
  157. WHERE [ChargeBoxId] IN @ChargeBoxIds;
  158. """;
  159. var parameters = new DynamicParameters();
  160. parameters.Add("@ChargeBoxIds", chargeboxIds, direction: ParameterDirection.Input, size: 25);
  161. using SqlConnection conn = await webDbConnectionFactory.CreateAsync();
  162. var configs = await conn.QueryAsync<StationMachine>(getStationStrSql, parameters);
  163. return configs.ToDictionary(x => x.ChargeBoxId, x => x.StationId);
  164. }
  165. internal async Task<Dictionary<int, Dictionary<string, string>>> GetStationEvseConfigs(List<int> stationIds, CancellationToken token = default)
  166. {
  167. string getSql = """
  168. SELECT [StationId],[ConfigureName],[ConfigureSetting]
  169. FROM [dbo].[StationMachine]
  170. WHERE [StationId] in @StationIds
  171. """;
  172. using SqlConnection conn = await webDbConnectionFactory.CreateAsync();
  173. var parameters = new DynamicParameters();
  174. parameters.Add("@StationIds", stationIds, direction: ParameterDirection.Input);
  175. var configs = await conn.QueryAsync<StationMachineConfig>(new CommandDefinition(getSql, parameters, cancellationToken: token));
  176. return configs
  177. .GroupBy(x => x.StationId)
  178. .ToDictionary(
  179. x => x.Key,
  180. x => x.ToDictionary(
  181. x => x.ConfigureName,
  182. x => x.ConfigureSetting
  183. ));
  184. }
  185. internal async Task<Dictionary<int, Dictionary<string, string>>> GetStationEvseConfigs(CancellationToken token = default)
  186. {
  187. string getSql = """
  188. SELECT [StationId],[ConfigureName],[ConfigureSetting]
  189. FROM [dbo].[StationMachineConfig]
  190. """;
  191. using SqlConnection conn = await webDbConnectionFactory.CreateAsync();
  192. try
  193. {
  194. var configs = await conn.QueryAsync<StationMachineConfig>(new CommandDefinition(getSql, cancellationToken: token));
  195. return configs
  196. .GroupBy(x => x.StationId)
  197. .ToDictionary(
  198. x => x.Key,
  199. x => x.ToDictionary(
  200. x => x.ConfigureName,
  201. x => x.ConfigureSetting
  202. ));
  203. }
  204. catch
  205. {
  206. logger.LogWarning("StationMachineConfig get failed");
  207. return new Dictionary<int, Dictionary<string, string>>();
  208. }
  209. }
  210. }