TriggerBillJob.cs 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. using Dapper;
  2. using Quartz;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Configuration;
  6. using System.Data.SqlClient;
  7. using System.Linq;
  8. using System.Runtime.InteropServices;
  9. using System.Runtime.Remoting.Metadata.W3cXsd2001;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. namespace EVCB_OCPP.TaskScheduler.Jobs
  13. {
  14. [DisallowConcurrentExecution]
  15. internal class TriggerBillJob : IJob
  16. {
  17. private NLog.ILogger _logger = NLog.LogManager.GetCurrentClassLogger();
  18. private string mainDBConnectString = ConfigurationManager.ConnectionStrings["MainDBContext"].ToString();
  19. public async Task Execute(IJobExecutionContext context)
  20. {
  21. _logger.Debug(this.ToString() + " :Starting........");
  22. List<TriggerTransaction> transactions = await GetTriggerTransaction();
  23. foreach (TriggerTransaction transaction in transactions)
  24. {
  25. string sqlString = string.Format("INSERT INTO [dbo].[ServerMessage]([SerialNo],[OutAction],[OutRequest],[InMessage],[CreatedOn],[CreatedBy],[ReceivedOn],[ChargeBoxId],[UpdatedOn]) " +
  26. "VALUES(@SerialNo,@OutAction,@OutRequest,@InMessage,@CreatedOn,@CreatedBy,@ReceivedOn,@ChargeBoxId,@UpdatedOn);");
  27. string content = @"{""vendorId"":""Phihong Technology"",""messageId"":""ID_TxEnergy"",""data"":""{\""txId\"":"+ transaction.Id + @",\""ConnectorId\"":" + transaction.ConnectorId + @"}""}";
  28. using (var dbConn = new SqlConnection(mainDBConnectString))
  29. {
  30. dbConn.Open();
  31. var parameters = new DynamicParameters();
  32. parameters.Add("@SerialNo", Guid.NewGuid().ToString(), System.Data.DbType.String);
  33. parameters.Add("@OutAction", "DataTransfer", System.Data.DbType.String);
  34. parameters.Add("@OutRequest", content, System.Data.DbType.String);
  35. parameters.Add("@InMessage", string.Empty, System.Data.DbType.String);
  36. parameters.Add("@CreatedOn", DateTime.UtcNow, System.Data.DbType.DateTime);
  37. parameters.Add("@CreatedBy", "Task", System.Data.DbType.String);
  38. parameters.Add("@ReceivedOn", DefaultSetting.DefaultNullTime, System.Data.DbType.DateTime);
  39. parameters.Add("@ChargeBoxId", transaction.ChargeBoxId, System.Data.DbType.String);
  40. parameters.Add("@UpdatedOn", DefaultSetting.DefaultNullTime, System.Data.DbType.DateTime);
  41. await dbConn.ExecuteAsync(sqlString, parameters);
  42. }
  43. }
  44. _logger.Debug(this.ToString() + " :End........");
  45. }
  46. private async Task<List<TriggerTransaction>> GetTriggerTransaction()
  47. {
  48. List<TriggerTransaction> result = new List<TriggerTransaction>();
  49. //從10/12開始
  50. string sqlString = string.Format("SELECT TOP(100) Id, ChargeBoxId,ConnectorId, StopTime FROM [StandardOCPP_Main].[dbo].[TransactionRecord] " +
  51. "where ChargeBoxId != 'EA702C1TF8P3D214600098A0' and StopTime != '1991-01-01 00:00:00.000' and len(Fee) > 0 and len(Receipt) = 0 and CreatedOn > '2023-10-12' and UploadedtoTTIA=0");
  52. using (var dbConn = new SqlConnection(mainDBConnectString))
  53. {
  54. dbConn.Open();
  55. var dbresult = await dbConn.QueryAsync<TriggerTransaction>(sqlString);
  56. result = dbresult.ToList();
  57. }
  58. return result.Where(x=>x.StopTime.AddMinutes(5) < DateTime.UtcNow).ToList();
  59. }
  60. public class TriggerTransaction
  61. {
  62. public string ChargeBoxId { set; get; }
  63. public int Id { set; get; }
  64. public DateTime StopTime { set; get; }
  65. public int ConnectorId { set; get; }
  66. }
  67. }
  68. }