SmartChargingJob.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. namespace EVCB_OCPP.WSServer.Jobs;
  16. [DisallowConcurrentExecution]
  17. public class SmartChargingJob : IJob
  18. {
  19. public SmartChargingJob(
  20. ProtalServer protalServer,
  21. SqlConnectionFactory<WebDBConetext> webDbConnectionFactory,
  22. //IConfiguration configuration,
  23. ILogger<SmartChargingJob> logger)
  24. {
  25. //this.webConnectionString = configuration.GetConnectionString("WebDBContext");
  26. this.protalServer = protalServer;
  27. this.webDbConnectionFactory = webDbConnectionFactory;
  28. this.logger = logger;
  29. }
  30. //private readonly string webConnectionString;
  31. private readonly ProtalServer protalServer;
  32. private readonly SqlConnectionFactory<WebDBConetext> webDbConnectionFactory;
  33. private readonly ILogger<SmartChargingJob> logger;
  34. private static List<StationInfoDto> _StationInfo = new List<StationInfoDto>();
  35. public async Task Execute(IJobExecutionContext context)
  36. {
  37. //logger.LogDebug("{0} Started", nameof(SmartChargingJob));
  38. List<StationInfoDto> stations = null;
  39. using (SqlConnection conn = await webDbConnectionFactory.CreateAsync())
  40. {
  41. string strSql = """
  42. SELECT [Id],[LBMode],[LBCurrent] as Availability FROM [dbo].[Station]
  43. WHERE LBMode = 1;
  44. """;
  45. var result = await conn.QueryAsync<StationInfoDto>(strSql);
  46. stations = result.ToList();
  47. }
  48. foreach (var station in stations)
  49. {
  50. var compareStation = _StationInfo.Where(x => x.Id == station.Id).FirstOrDefault();
  51. if (compareStation != null && (station.Id != compareStation.Id || station.Availability == compareStation.Availability))
  52. {
  53. continue;
  54. }
  55. var _powerDic = await protalServer.LoadingBalanceService.GetSettingPower(station.Id);
  56. if (_powerDic == null)
  57. {
  58. continue;
  59. }
  60. foreach (var kv in _powerDic)
  61. {
  62. try
  63. {
  64. if (kv.Value.HasValue)
  65. {
  66. protalServer.ProfileHandler.SetChargingProfile(kv.Key, kv.Value.Value, Packet.Messages.SubTypes.ChargingRateUnitType.W);
  67. }
  68. }
  69. catch (Exception ex)
  70. {
  71. logger.LogError("Set Profile Exception: {0}", ex.ToString());
  72. }
  73. }
  74. }
  75. _StationInfo = stations;
  76. }
  77. }