Ver Fonte

加入觸發結算功能

Jessica Tseng há 1 ano atrás
pai
commit
9c4aa30148

+ 1 - 1
EVCB_OCPP.TaskScheduler/App.config

@@ -15,7 +15,7 @@
     <add name="WebDBContext" connectionString="data source=172.1.2.199;initial catalog=StandardOCPP_Web;;persist security info=True;user id=Phihong;password=GOGOGO;MultipleActiveResultSets=True;App=EntityFramework; Max Pool Size=500" providerName="System.Data.SqlClient" />
   </connectionStrings>
   <appSettings>
-    <add key="OnlineChanged_Receivers" value="0987865916" />  
+    <add key="OnlineChanged_Receivers" value="" />  
   </appSettings>
   
   <runtime>

+ 1 - 0
EVCB_OCPP.TaskScheduler/EVCB_OCPP.TaskScheduler.csproj

@@ -120,6 +120,7 @@
     <Compile Include="Jobs\ExecutionCmdReportJob.cs" />
     <Compile Include="Jobs\StartTransacionReportJob.cs" />
     <Compile Include="Jobs\StopTransacionReportJob.cs" />
+    <Compile Include="Jobs\TriggerBillJob.cs" />
     <Compile Include="Models\ComandExecution.cs" />
     <Compile Include="Models\CustomerConnectionDto.cs" />
     <Compile Include="Models\EVSECurrentStatus.cs" />

+ 92 - 0
EVCB_OCPP.TaskScheduler/Jobs/TriggerBillJob.cs

@@ -0,0 +1,92 @@
+using Dapper;
+using Quartz;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Data.SqlClient;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Runtime.Remoting.Metadata.W3cXsd2001;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace EVCB_OCPP.TaskScheduler.Jobs
+{
+    [DisallowConcurrentExecution]
+    internal class TriggerBillJob : IJob
+    {
+        private NLog.ILogger _logger = NLog.LogManager.GetCurrentClassLogger();
+        private string mainDBConnectString = ConfigurationManager.ConnectionStrings["MainDBContext"].ToString();
+        public async Task Execute(IJobExecutionContext context)
+        {
+
+            _logger.Debug(this.ToString() + " :Starting........");
+            List<TriggerTransaction> transactions = await GetTriggerTransaction();
+
+
+            foreach (TriggerTransaction transaction in transactions)
+            {
+                string sqlString = string.Format("INSERT INTO [dbo].[ServerMessage]([SerialNo],[OutAction],[OutRequest],[InMessage],[CreatedOn],[CreatedBy],[ReceivedOn],[ChargeBoxId],[UpdatedOn]) " +
+           "VALUES(@SerialNo,@OutAction,@OutRequest,@InMessage,@CreatedOn,@CreatedBy,@ReceivedOn,@ChargeBoxId,@UpdatedOn);");
+
+                string content = @"{""vendorId"":""Phihong Technology"",""messageId"":""ID_TxEnergy"",""data"":""{\""txId\"":"+ transaction.Id + @",\""ConnectorId\"":" + transaction.ConnectorId + @"}""}";
+
+                using (var dbConn = new SqlConnection(mainDBConnectString))
+                {
+                    dbConn.Open();
+                    var parameters = new DynamicParameters();
+                    parameters.Add("@SerialNo", Guid.NewGuid().ToString(), System.Data.DbType.String);
+                    parameters.Add("@OutAction", "DataTransfer", System.Data.DbType.String);
+                    parameters.Add("@OutRequest", content, System.Data.DbType.String);
+                    parameters.Add("@InMessage", string.Empty, System.Data.DbType.String);
+                    parameters.Add("@CreatedOn", DateTime.UtcNow, System.Data.DbType.DateTime);
+                    parameters.Add("@CreatedBy", "Task", System.Data.DbType.String);
+                    parameters.Add("@ReceivedOn", DefaultSetting.DefaultNullTime, System.Data.DbType.DateTime);
+                    parameters.Add("@ChargeBoxId", transaction.ChargeBoxId, System.Data.DbType.String);
+                    parameters.Add("@UpdatedOn", DefaultSetting.DefaultNullTime, System.Data.DbType.DateTime);
+
+                    await dbConn.ExecuteAsync(sqlString, parameters);
+
+                }
+
+            }
+            _logger.Debug(this.ToString() + " :End........");
+        }
+
+
+
+
+        private async Task<List<TriggerTransaction>> GetTriggerTransaction()
+        {
+            List<TriggerTransaction> result = new List<TriggerTransaction>();
+            //從10/12開始
+
+            string sqlString = string.Format("SELECT TOP(100) Id, ChargeBoxId,ConnectorId, StopTime  FROM [StandardOCPP_Main].[dbo].[TransactionRecord] " +
+            "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");
+
+            using (var dbConn = new SqlConnection(mainDBConnectString))
+            {
+                dbConn.Open();
+                var dbresult = await dbConn.QueryAsync<TriggerTransaction>(sqlString);
+                result = dbresult.ToList();
+            }
+            return result.Where(x=>x.StopTime.AddMinutes(5) < DateTime.UtcNow).ToList();
+
+        }
+
+
+        public class TriggerTransaction
+        {
+            public string ChargeBoxId { set; get; }
+            public int Id { set; get; }
+
+            public DateTime StopTime { set; get; }
+
+            public int ConnectorId { set; get; }
+
+
+        }
+
+    }
+
+}

+ 0 - 1
EVCB_OCPP.TaskScheduler/NLog.config

@@ -43,7 +43,6 @@
     -->
     <logger name="Quartz.*" minlevel="Warn" writeTo="f" />
     <logger name="EVCB_OCPP.TaskScheduler.*" minlevel="Debug" writeTo="f" />
-    <logger name="EVCB_OCPP.TaskScheduler.*" minlevel="Debug" writeTo="Console" />
       <logger name="EVCB_OCPP.TaskScheduler.*" minlevel="Debug" writeTo="Console" />
   
   </rules>

+ 14 - 0
EVCB_OCPP.TaskScheduler/Program.cs

@@ -71,6 +71,11 @@ namespace EVCB_OCPP.TaskScheduler
                  .WithIdentity("job5", "group1")
                  .Build();
 
+
+                IJobDetail _TriggerBillJob = JobBuilder.Create<TriggerBillJob>()
+                 .WithIdentity("job6", "group1")
+                 .Build();
+
                 // Trigger the job to run now, and then repeat every 10 seconds
                 ITrigger _CheckEVSEOnlineTrigger = TriggerBuilder.Create()
                     .WithIdentity("trigger1", "group1")
@@ -113,12 +118,21 @@ namespace EVCB_OCPP.TaskScheduler
                  .RepeatForever())
              .Build();
 
+                ITrigger _TriggerBillTrigger = TriggerBuilder.Create()
+            .WithIdentity("trigger6", "group1")
+            .StartNow()
+            .WithSimpleSchedule(x => x
+                .WithIntervalInMinutes(10)
+                .RepeatForever())
+            .Build();
+
                 // Tell quartz to schedule the job using our trigger
                 await scheduler.ScheduleJob(_CheckEVSEOnlineJob, _CheckEVSEOnlineTrigger);
                // await scheduler.ScheduleJob(_StartTransacionReportJob, _StartTransacionReportTrigger);
                // await scheduler.ScheduleJob(_StopTransacionReportJob, _StopTransacionReportTrigger);
                 await scheduler.ScheduleJob(_CheckExecutionCmdJob, _CheckExecutionCmdTrigger);
                 await scheduler.ScheduleJob(_ExecutionCmdReportJob, _ExecutionCmdReportTrigger);
+                await scheduler.ScheduleJob(_TriggerBillJob, _TriggerBillTrigger);
 
 
             }