Add project files.

This commit is contained in:
2025-04-14 14:21:48 +04:00
parent cfd0c9d83c
commit 90819d9241
5 changed files with 237 additions and 0 deletions

174
Program.cs Normal file
View File

@@ -0,0 +1,174 @@
using System.Data.SqlClient;
using System.Net;
using System.Text;
internal class Program
{
private static void Main(string[] args)
{
while (true)
{
string? gotifyUrl = null;
string? appToken_furnace250_l2 = null;
string? proxyUrl = null;
string? proxyUsername = null;
string? proxyPassword = null;
var config = File.ReadAllLines("config.txt");
foreach (var line in config)
{
if (line.StartsWith("gotify_url="))
gotifyUrl = line.Substring("gotify_url=".Length);
else if (line.StartsWith("app_token_furnace250_l2="))
appToken_furnace250_l2 = line.Substring("app_token_furnace250_l2=".Length);
else if (line.StartsWith("proxy_url="))
proxyUrl = line.Substring("proxy_url=".Length);
else if (line.StartsWith("proxy_username="))
proxyUsername = line.Substring("proxy_username=".Length);
else if (line.StartsWith("proxy_password="))
proxyPassword = line.Substring("proxy_password=".Length);
}
if (gotifyUrl == null || appToken_furnace250_l2 == null || proxyUrl == null || proxyUsername == null || proxyPassword == null)
{
Console.WriteLine("Ошибка: не все параметры указаны в config.txt");
Log("Ошибка: не все параметры указаны в config.txt");
}
else
CheckStatusAsync(gotifyUrl, appToken_furnace250_l2, proxyUrl, proxyUsername, proxyPassword);
Thread.Sleep(10000);
}
}
private static async void CheckStatusAsync(string url, string token, string proxyUrl, string proxyUsername, string proxyPassword)
{
var result = CheckFurnace250Async().Result;
if (!result.status)
{
var notification = new
{
title = "Статус ПШП ст.250",
message = result.msg,
priority = 5
};
await SendNotify(url, token, notification, proxyUrl, proxyUsername, proxyPassword);
}
Thread.Sleep(10000);
}
private static async Task<(bool status, string msg)> CheckFurnace250Async()
{
int cntEmptyPOID = 0;
DateTime lastDT = DateTime.Now;
try
{
string sqlConn = @"Password=WonderUser;User ID=WonderUser;Initial Catalog=Furnace_l2;Data Source=10.14.18.38\IZHSTALSQLSRVER;TrustServerCertificate=true;Encrypt=true;";
using (var conn = new SqlConnection(sqlConn))
{
await conn.OpenAsync();
string sqlQuery = @"SELECT COUNT(PO_ID) cnt_empty_poid, (SELECT top(1)
CHARGING_TIME
FROM [Furnace_l2].[dbo].[HIST_PIECES]
where [IS_DISCHARGED] ='N' and
datediff(day,CHARGING_TIME, Getdate()) < 1 AND
RTRIM(LTRIM(PO_ID)) != ''
order by CHARGING_TIME desc) last_dt
FROM [Furnace_l2].[dbo].[HIST_PIECES]
where [IS_DISCHARGED] ='N' and
datediff(day,CHARGING_TIME, Getdate()) < 1 AND
RTRIM(LTRIM(PO_ID)) = '';";
using (var command = new SqlCommand(sqlQuery, conn))
using (var dbReader = await command.ExecuteReaderAsync())
{
while (await dbReader.ReadAsync())
{
cntEmptyPOID = Convert.ToInt32(dbReader.GetValue(0));
lastDT = Convert.ToDateTime(dbReader.GetValue(1));
}
}
}
}
catch
{
return (false, "Ошибка подключения к БД!");
}
if (cntEmptyPOID > 15 && DateTime.Now - lastDT > new TimeSpan(0, 5, 0))
{
return (false, "Проблема с привязкой заготовок в ПШП.");
}
return (true, "OK");
}
private static async Task SendNotify(string url, string token, object notification, string proxyUrl, string proxyUsername, string proxyPassword)
{
var proxy = new WebProxy(new Uri(proxyUrl))
{
Credentials = new NetworkCredential(proxyUsername, proxyPassword, "MECHEL")
};
var handler = new HttpClientHandler()
{
Proxy = proxy,
UseProxy = true,
PreAuthenticate = true,
UseDefaultCredentials = false
};
using (var client = new HttpClient(handler))
{
client.DefaultRequestHeaders.Add("X-Gotify-Key", token);
string json = Newtonsoft.Json.JsonConvert.SerializeObject(notification);
var content = new StringContent(json, Encoding.UTF8, "application/json");
try
{
HttpResponseMessage response = await client.PostAsync(url, content);
if (response.IsSuccessStatusCode)
{
Console.WriteLine($"{DateTime.Now} - Отправлено сообщение.");
Log($"{DateTime.Now} - Отправлено сообщение.");
}
else
{
Console.WriteLine($"Ошибка: {response.StatusCode} - {await response.Content.ReadAsStringAsync()}");
Log($"Ошибка: {response.StatusCode} - {await response.Content.ReadAsStringAsync()}");
}
}
catch (HttpRequestException ex)
{
Console.WriteLine($"Ошибка подключения: {ex.Message}");
Log($"Ошибка подключения: {ex.Message}");
if (ex.InnerException != null)
{
Console.WriteLine($"Детали: {ex.InnerException.Message}");
Log($"Детали: {ex.InnerException.Message}");
}
}
}
}
private static void Log(string str)
{
string outdir = Environment.CurrentDirectory + @"\logs\";
if (!Directory.Exists(outdir)) Directory.CreateDirectory(outdir);
string filename = $"{DateTime.Now.Day}_{DateTime.Now.Month}_{DateTime.Now.Year}_SendNotify";
foreach (FileInfo file in new DirectoryInfo(outdir).GetFiles())
{
if (Convert.ToDateTime(file.LastWriteTime) < DateTime.Now.AddDays(-30))
file.Delete();
}
using (FileStream aFile = new FileStream($@"{outdir}\{filename}.log", FileMode.Append, FileAccess.Write))
using (StreamWriter sw = new StreamWriter(aFile))
{
sw.WriteLine(DateTime.Now + " - " + str);
}
}
}