SmartChargingJob.cs 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using EVCB_OCPP.WSServer.Message;
  2. using EVCB_OCPP.WSServer.Service;
  3. using Microsoft.Data.SqlClient;
  4. using Quartz;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using EVCB_OCPP.WSServer.Dto;
  11. using Microsoft.Extensions.Configuration;
  12. using Dapper;
  13. using Microsoft.Extensions.Logging;
  14. using EVCB_OCPP.WSServer.Helper;
  15. using EVCB_OCPP.Domain.ConnectionFactory;
  16. using System.Data;
  17. namespace EVCB_OCPP.WSServer.Jobs;
  18. [DisallowConcurrentExecution]
  19. public class SmartChargingJob : IJob
  20. {
  21. public SmartChargingJob(
  22. ProtalServer protalServer,
  23. ISqlConnectionFactory<WebDBConetext> webDbConnectionFactory,
  24. //IConfiguration configuration,
  25. ILogger<SmartChargingJob> logger)
  26. {
  27. //this.webConnectionString = configuration.GetConnectionString("WebDBContext");
  28. this.protalServer = protalServer;
  29. this.webDbConnectionFactory = webDbConnectionFactory;
  30. this.logger = logger;
  31. }
  32. //private readonly string webConnectionString;
  33. private readonly ProtalServer protalServer;
  34. private readonly ISqlConnectionFactory<WebDBConetext> webDbConnectionFactory;
  35. private readonly ILogger<SmartChargingJob> logger;
  36. private static List<StationInfoDto> _StationInfo = new List<StationInfoDto>();
  37. public async Task Execute(IJobExecutionContext context)
  38. {
  39. //logger.LogDebug("{0} Started", nameof(SmartChargingJob));
  40. List<StationInfoDto> stations = null;
  41. using (SqlConnection conn = await webDbConnectionFactory.CreateAsync())
  42. {
  43. string strSql = """
  44. SELECT [Id],[LBMode],[LBCurrent] as Availability FROM [dbo].[Station]
  45. WHERE LBMode = 1;
  46. """;
  47. var result = await conn.QueryAsync<StationInfoDto>(strSql);
  48. stations = result.ToList();
  49. }
  50. foreach (var station in stations)
  51. {
  52. var compareStation = _StationInfo.Where(x => x.Id == station.Id).FirstOrDefault();
  53. if (compareStation != null && (station.Id != compareStation.Id || station.Availability == compareStation.Availability))
  54. {
  55. continue;
  56. }
  57. var _powerDic = await protalServer.LoadingBalanceService.GetSettingPower(station.Id);
  58. if (_powerDic == null)
  59. {
  60. continue;
  61. }
  62. foreach (var kv in _powerDic)
  63. {
  64. try
  65. {
  66. if (kv.Value.HasValue)
  67. {
  68. protalServer.ProfileHandler.SetChargingProfile(kv.Key, kv.Value.Value, Packet.Messages.SubTypes.ChargingRateUnitType.W);
  69. }
  70. }
  71. catch (Exception ex)
  72. {
  73. logger.LogError("Set Profile Exception: {0}", ex.ToString());
  74. }
  75. }
  76. }
  77. _StationInfo = stations;
  78. }
  79. }