Selaa lähdekoodia

新增 簡訊上線斷線通知服務

Jessica Tseng 2 vuotta sitten
vanhempi
commit
611f42c145

+ 4 - 10
EVCB_OCPP.TaskScheduler/App.config

@@ -12,17 +12,11 @@
   <connectionStrings>
     <add name="OnlineLogDBContext" connectionString="data source=172.1.2.187\SQLEXPRESS2017;initial catalog=StandardOCPP_OnlineRecord;;persist security info=True;user id=sa;password=Ph0930118811;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
     <add name="MainDBContext" connectionString="data source=172.1.2.187\SQLEXPRESS2017;initial catalog=StandardOCPP_Main;;persist security info=True;user id=sa;password=Ph0930118811;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
+    <add name="WebDBContext" connectionString="data source=172.1.2.216\SQLEXPRESS;initial catalog=StandardOCPP_Web;;persist security info=True;user id=tccdev;password=tccdevtest;MultipleActiveResultSets=True;App=EntityFramework; Max Pool Size=500" providerName="System.Data.SqlClient" />
   </connectionStrings>
-
-<!--<common>
-    <logging>
-      <factoryAdapter type="Common.Logging.NLog.NLogLoggerFactoryAdapter, Common.Logging.NLog4000">
-        <arg key="level" value="INFO" />
-        <arg key="configType" value="FILE" />
-        <arg key="configFile" value="~/Config/NLog.config" />
-      </factoryAdapter>
-    </logging>
-  </common>-->
+  <appSettings>
+    <add key="OnlineChanged_Receivers" value="0987865916,0987865916" />  
+  </appSettings>
   
   <runtime>
   

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

@@ -106,6 +106,7 @@
       <HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.2\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll</HintPath>
     </Reference>
     <Reference Include="System.Transactions" />
+    <Reference Include="System.Web" />
     <Reference Include="System.Xml.Linq" />
     <Reference Include="System.Data.DataSetExtensions" />
     <Reference Include="Microsoft.CSharp" />

+ 104 - 9
EVCB_OCPP.TaskScheduler/Jobs/CheckEVSEOnlineJob.cs

@@ -4,11 +4,14 @@ using Quartz;
 using System;
 using System.Collections.Generic;
 using System.Configuration;
+using System.Data;
 using System.Data.SqlClient;
 using System.Diagnostics;
 using System.Linq;
+using System.Net.Http;
 using System.Text;
 using System.Threading.Tasks;
+using System.Web;
 
 namespace EVCB_OCPP.TaskScheduler.Jobs
 {
@@ -24,7 +27,7 @@ namespace EVCB_OCPP.TaskScheduler.Jobs
         private List<EVSEOnlineRecord> insertData = new List<EVSEOnlineRecord>();
         private string mainDBConnectString = ConfigurationManager.ConnectionStrings["MainDBContext"].ToString();
         private string onlineDBConnectString = ConfigurationManager.ConnectionStrings["OnlineLogDBContext"].ToString();
-
+        private string webConnectionString = ConfigurationManager.ConnectionStrings["WebDBContext"].ToString();
         public CheckEVSEOnlineJob()
         {
             CreateEVSEOnlineRecordTable();
@@ -38,8 +41,8 @@ namespace EVCB_OCPP.TaskScheduler.Jobs
         public async Task Execute(IJobExecutionContext context)
         {
             await Console.Out.WriteLineAsync(this.ToString() + " :Starting........");
-        
-        
+
+
             List<EVSECurrentStatus> _EVSEs = GetEVSEs();
 
             foreach (var evse in _EVSEs)
@@ -112,7 +115,7 @@ namespace EVCB_OCPP.TaskScheduler.Jobs
                                         }
                                     }
                                 }
-                               
+
                             }
 
                             _isIgnore = _picks.Where(x => x.HourIndex == latestHeartbeatTime.Hour).ToList().Count == 0 ? false : true;
@@ -150,7 +153,7 @@ namespace EVCB_OCPP.TaskScheduler.Jobs
 
                         });
 
-
+                        await NotifyOnlineChanged(evse.CustomerId.ToString(), evse.Id.ToString(), evse.ChargeBoxId, true);
                     }
                 }
                 else
@@ -158,7 +161,7 @@ namespace EVCB_OCPP.TaskScheduler.Jobs
 
                     if (evse.Online)
                     {
-                       
+
                         //on -off  
                         UpdateEVSECurrentStatus(evse.CustomerId.ToString(), evse.ChargeBoxId, false, evse.HeartbeatUpdatedOn);
 
@@ -186,7 +189,7 @@ namespace EVCB_OCPP.TaskScheduler.Jobs
                                         OfflineTime = evse.HeartbeatUpdatedOn.Hour == checkTime.Hour ? evse.HeartbeatUpdatedOn : new DateTime(checkTime.AddHours(1).Year, checkTime.AddHours(1).Month, checkTime.AddHours(1).Day, checkTime.AddHours(1).Hour, 0, 0)
 
                                     });
-                                    checkTime = evse.HeartbeatUpdatedOn.Hour == checkTime.Hour ? insertData.LastOrDefault().OfflineTime.AddHours(1): insertData.LastOrDefault().OfflineTime ;
+                                    checkTime = evse.HeartbeatUpdatedOn.Hour == checkTime.Hour ? insertData.LastOrDefault().OfflineTime.AddHours(1) : insertData.LastOrDefault().OfflineTime;
                                 }
 
                             }
@@ -200,6 +203,7 @@ namespace EVCB_OCPP.TaskScheduler.Jobs
 
                         }
 
+                        await NotifyOnlineChanged(evse.CustomerId.ToString(), evse.Id.ToString(), evse.ChargeBoxId, false);
                     }
                     else
                     {
@@ -216,12 +220,103 @@ namespace EVCB_OCPP.TaskScheduler.Jobs
 
             }
 
-           
+
             UpdateOnlineRecords(updateData, insertData);
 
 
             await Console.Out.WriteLineAsync(this.ToString() + " :Finished........");
-           
+
+        }
+
+        async private Task NotifyOnlineChanged(string customerId, string machineId, string chargeBoxId, bool turnOn)
+        {
+            string stationName = await GetStationName(machineId, chargeBoxId);
+            string errorMsg = string.Empty;
+          
+            List<string> sendlist = ConfigurationManager.AppSettings["OnlineChanged_Receivers"].Split(',').ToList();
+            foreach (var item in sendlist)
+            {
+                string message = string.Format("[{0}{1}]\r\n{2} \r\n時間:{3}\r\n ", stationName, turnOn ? "電樁上線通知" : "電樁斷線通知",chargeBoxId,
+                    DateTime.UtcNow.AddHours(8).ToString("yyyy/MM/dd HH:mm:ss") );
+
+                SendMessage(item, message, out errorMsg);
+            }
+
+
+        }
+
+        private int SendMessage(string phoneNumber, string message, out string errorMsg)
+        {
+            int result = 0;
+            try
+            {
+                errorMsg = string.Empty;
+                HttpClient client = new HttpClient();
+                StringBuilder url = new StringBuilder("http://smexpress.mitake.com.tw:7002/SpSendUtf?");
+                url.Append("username=").Append(HttpUtility.UrlEncode("30435973",
+                    Encoding.UTF8));
+                url.Append("&password=").Append(HttpUtility.UrlEncode("PH3275300",
+                    Encoding.UTF8));
+                url.Append("&encoding=UTF8");
+                url.Append("&dstaddr=").Append(phoneNumber);
+                url.Append("&smbody=").Append(HttpUtility.UrlEncode(message,
+                    Encoding.UTF8).Replace("+", "%20"));
+                url.Append("&CharsetURL=").Append("utf-8");
+
+                Console.WriteLine(url.ToString());
+                var id = client.GetStringAsync(url.ToString()).Result;
+
+                if (!SendResult(id))
+                {
+                    result = -1;
+                    errorMsg = id;
+                }
+            }
+            catch (Exception ex)
+            {
+                result = -1;
+                errorMsg = ex.Message;
+            }
+
+            return result;
+        }
+
+        private bool SendResult(string response)
+        {
+            bool result = false;
+
+            if (response.Contains("msgid="))
+            {
+                result = true;
+
+            }
+
+            return result;
+        }
+
+        async private Task<string> GetStationName(string machineId, string chargeBoxId)
+        {
+            string stationName = string.Empty;
+            try
+            {
+                var parameters = new DynamicParameters();
+                parameters.Add("@MachineId", machineId, DbType.String, ParameterDirection.Input);
+
+                string strSql = "SELECT  [Name] as StationName FROM[StationMachine]  left join[dbo].[Station]" +
+                    "  on[StationMachine].StationId = Station.[Id]  where StationMachine.MachineId=@MachineId ; ";
+                using (SqlConnection conn = new SqlConnection(webConnectionString))
+                {
+                    var result = await conn.QueryAsync<string>(strSql, parameters);
+                    stationName = result.FirstOrDefault();
+                }
+
+            }
+            catch (Exception ex)
+            {
+
+            }
+
+            return stationName;
         }