You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

211 lines
9.0 KiB

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.IO;
using System.Data.SqlClient;
using System.Data;
using System.Security.Cryptography;
using Newtonsoft.Json;
using System.Net.Mail;
using System.Net.Http;
namespace OnDoc_Paketversand
{
internal class Program
{
private static string connectionstring { get; set; } = "";
private static DataSet dsdaten = new DataSet();
private static DataTable SP_Parameters = new DataTable();
static void Main(string[] args)
{
run();
}
public static void InitLogging()
{
Get_Tabledata("Select * from nlog_parameter WHERE ID=4", false, true);
Logging.VersandstrasseLog.IntLogLevel = dsdaten.Tables[0].Rows[0]["LogLevel"].ToString();
Logging.VersandstrasseLog.IntUserID = dsdaten.Tables[0].Rows[0]["LogUserID"].ToString();
Logging.VersandstrasseLog.connectionstring = Properties.Settings.Default.LogConnectionstring;
Logging.VersandstrasseLog.init_logger();
}
private static void run()
{
connectionstring = Properties.Settings.Default.Connectionstring;
InitLogging();
Logging.VersandstrasseLog.Info("Start OnDocPaketversand", "OnDoc-Paketversand", "", "", "");
string URLBase = Properties.Settings.Default.RESTURI + "api/Send_Versandstrasse?paketid=";
string sql = "SELECT dbo.Ondoc_Versandstrasse_Paket.id, dbo.Ondoc_Versandstrasse_Paket.paket, dbo.Ondoc_Versandstrasse_Paket.ersteller, dbo.mitarbeiter.email";
sql = sql + " FROM dbo.Ondoc_Versandstrasse_Paket INNER JOIN dbo.mitarbeiter ON dbo.Ondoc_Versandstrasse_Paket.ersteller = dbo.mitarbeiter.mitarbeiternr";
sql = sql + " where (dbo.Ondoc_Versandstrasse_Paket.versendet = 0) AND (dbo.Ondoc_Versandstrasse_Paket.geloescht = 0) AND (dbo.Ondoc_Versandstrasse_Paket.aktiv = 1)";
sql = sql + " ORDER BY dbo.Ondoc_Versandstrasse_Paket.Versandoption";
Get_Tabledata(sql, false, true);
int total = 0;
int ok = 0;
int error = 0;
foreach (System.Data.DataRow dr in dsdaten.Tables[0].Rows)
{
string paketid = "";
string ersteller = "";
ersteller = dr[3].ToString();
paketid = dr[0].ToString();
Model.Versandpaket vp = JsonConvert.DeserializeObject<Model.Versandpaket>(dr[1].ToString());
Logging.VersandstrasseLog.Info("Paket-Verarbeitung", "OnDoc-Paketversand", paketid, vp.partnernr.ToString(), "Start Versand");
string jsonstring = dr[1].ToString();
string URL = URLBase + dr[0].ToString();
WebRequest request;
var data = Encoding.UTF8.GetBytes(jsonstring);
request = WebRequest.Create(URL);
request.ContentLength = data.Length;
request.ContentType = "application/json";
request.Method = "POST";
request.Headers["Authorization"] = "Bearer " + Properties.Settings.Default.APIKey;
string response;
total = total + 1;
try
{
using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(data, 0, data.Length);
requestStream.Close();
using (Stream responseStream = request.GetResponse().GetResponseStream())
{
using (var reader = new StreamReader(responseStream))
{
response = reader.ReadToEnd();
}
if (response.ToString().Contains("archiviert"))
{
Logging.VersandstrasseLog.Info("Paket-Verarbeitung", "OnDoc-Paketversand", paketid, vp.partnernr.ToString(), "Ende Versand");
ok = ok + 1;
}
else
{
string message = "Das Versand-Couvert Nr. " + paketid + " / Partner-Nr " + vp.partnernr + " konnte nicht versendet werden.";
sendmail(Properties.Settings.Default.adminmail, "OnDoc-Paketversand Fehler", message);
sendmail(ersteller, "OnDoc-Paketversand: Dokument nicht Versandcouvert nicht versendet", message);
Logging.VersandstrasseLog.Error("Paket-Verarbeitung", "OnDoc-Paketversand", paketid, vp.partnernr.ToString(), "Ende Versand");
error = error + 1;
}
}
}
}
catch (Exception ex)
{
Logging.VersandstrasseLog.Error("Paket-Verarbeitung", "OnDoc-Paketversand", dr[0].ToString(), vp.partnernr.ToString(), "Ende Versand - " + ex.Message);
sendmail(Properties.Settings.Default.adminmail, "OnDoc-Paketversand Fehler", ex.Message);
error = error + 1;
}
}
Logging.VersandstrasseLog.Info("Ende OnDocPaketversand", "OnDoc-Paketversand", "", "", "");
string msg = "OnDok Paketversand durchgeführt" + Environment.NewLine + "Total Pakete:" + total.ToString() + Environment.NewLine + "OK: " + ok.ToString() + Environment.NewLine + "Fehler: " + error.ToString();
sendmail(Properties.Settings.Default.adminmail, "OnDoc-Paketversand abgeschlossen", msg);
}
private static DataTable Get_Tabledata(string Tablename, bool StoredProc = false, bool is_SQL_String = false, DataTable sp_params = null)
{
try
{
if (sp_params == null && SP_Parameters.Rows.Count > 0)
{
sp_params = SP_Parameters.Copy();
}
SqlConnection sqlconnect = new SqlConnection();
DataSet ds = new DataSet();
ds.Tables.Clear();
dsdaten.Tables.Clear();
sqlconnect.ConnectionString = connectionstring;
SqlDataAdapter da = new SqlDataAdapter("", sqlconnect);
SqlCommand sqlcmd = new SqlCommand();
sqlcmd.Connection = sqlconnect;
if (StoredProc == true)
{
sqlcmd.CommandType = CommandType.StoredProcedure;
if (Tablename.IndexOf("@@Mandantnr@@") > 0)
Tablename = Tablename.Replace("@@Mandantnr@@", "");
sqlcmd.CommandText = Tablename;
try
{
foreach (DataRow r in sp_params.Rows)
{
sqlcmd.Parameters.Add(r["Paramname"].ToString(), SqlDbType.VarChar);
sqlcmd.Parameters[sqlcmd.Parameters.Count - 1].Value = r["Paramvalue"].ToString();
}
}
catch { };
}
else
{
sqlcmd.CommandType = CommandType.Text;
sqlcmd.CommandText = "Select * from " + Tablename;
}
if (is_SQL_String == true)
sqlcmd.CommandText = Tablename;
da.SelectCommand = sqlcmd;
sqlconnect.Open();
da.Fill(dsdaten, "Daten1");
sqlconnect.Close();
return dsdaten.Tables[0];
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return null;
}
}
private static void sendmail(string empfaenger, string betreff, string message)
{
MailMessage mail = new MailMessage();
SmtpClient SmtpServer = new SmtpClient();
mail.To.Add(empfaenger);
mail.From = new MailAddress("OnDoc@tkb.ch");
mail.Subject = Properties.Settings.Default.prefix_betreff + betreff;
mail.IsBodyHtml = true;
mail.Body = message;
SmtpServer.Host = "smtp.tgcorp.ch";
SmtpServer.Port = 25;
SmtpServer.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
try
{
SmtpServer.Send(mail);
Logging.VersandstrasseLog.Info("Mailversand and " + empfaenger + " erfolgt", "OnDoc-Paketversand", "", "", "");
}
catch (Exception ex)
{
Logging.VersandstrasseLog.Error("Mailversand and " + empfaenger + " nicht erfolgt", "OnDoc-Paketversand", "", "", "");
}
mail = null;
SmtpServer = null;
}
}
}