|
@@ -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;
|
|
|
}
|
|
|
|
|
|
|