278 lines
9.2 KiB
C#
278 lines
9.2 KiB
C#
using NLog;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Security.Cryptography;
|
|
using System.Text;
|
|
using System.Text.RegularExpressions;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Scan2Compress.Business
|
|
{
|
|
public sealed class Vorgang
|
|
{
|
|
#region Fields
|
|
private static readonly Logger _logger = NLog.LogManager.GetCurrentClassLogger();
|
|
|
|
private string aktenzeichen;
|
|
#endregion
|
|
//TODO: fehlende Felder aus den CM und Inpro hinzufügen
|
|
#region Properties
|
|
public DateTime Enddatum { get; set; }
|
|
public DateTime Eingangsdatum { get; set; }
|
|
public string BeschreibungVorgang { get; set; }
|
|
public string Checkliste { get; set; }
|
|
public string VorgangsDefinition { get; set; }
|
|
public int Id { get; set; }
|
|
|
|
public string Aktenzeichen
|
|
{
|
|
get
|
|
{
|
|
return aktenzeichen;
|
|
}
|
|
set
|
|
{
|
|
aktenzeichen = value;
|
|
if (!aktenzeichen.Contains("/"))
|
|
{
|
|
aktenzeichen = ReplaceHiphenWithSlash(value);
|
|
}
|
|
}
|
|
}
|
|
|
|
public string FameId { get; set; }
|
|
|
|
public string DocsSZ { get; set; }
|
|
|
|
public string DocType { get; set; }
|
|
|
|
public static Dictionary<int, string> Strassen { get; set; }
|
|
|
|
public string IdStrasse { get; set; }
|
|
|
|
public string Strasse1 { get; set; }
|
|
|
|
public string Hausnummer1Von { get; set; }
|
|
|
|
public string Hausnummer1Bis { get; set; }
|
|
|
|
public string HsNrVonZusatz { get; set; }
|
|
|
|
public string HsNrBisZusatz { get; set; }
|
|
|
|
public string Strasse2 { get; set; } = string.Empty;
|
|
|
|
public string Hausnummer2 { get; set; } = string.Empty;
|
|
|
|
public string Teil { get; set; }
|
|
|
|
public string NamePDF { get; set; }
|
|
|
|
public string AbsoluteFilePath { get; set; }
|
|
|
|
public DateTime CreationDate { get; set; }
|
|
|
|
public DateTime ScanDatum { get; set; } = DateTime.Now; //Erstelldatum
|
|
|
|
#endregion Properties
|
|
|
|
#region Contructor
|
|
|
|
public Vorgang(string id, string aktenzeichen, string docType, string teil, string namePDF)
|
|
{
|
|
this.DocType = docType;
|
|
this.Teil = teil;
|
|
this.Aktenzeichen = aktenzeichen;
|
|
this.NamePDF = namePDF;
|
|
this.Id = Convert.ToInt32(id);
|
|
this.FameId = GenerateFameId();
|
|
}
|
|
|
|
public Vorgang(string id, string aktenzeichen, string docType, string teil, string namePDF, string strasse1, string hausnummer1)
|
|
{
|
|
this.DocType = docType;
|
|
this.Teil = teil;
|
|
this.Aktenzeichen = aktenzeichen;
|
|
this.NamePDF = namePDF;
|
|
this.Id = Convert.ToInt32(id);
|
|
this.FameId = GenerateFameId();
|
|
this.Strasse1 = strasse1.Trim();
|
|
this.Hausnummer1Von = hausnummer1;
|
|
}
|
|
|
|
|
|
public Vorgang()
|
|
{
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Methods
|
|
private int GenerateVorgangId(int oldValue)
|
|
{
|
|
int newValue = oldValue + 1;
|
|
return newValue;
|
|
}
|
|
|
|
//Erstelle Originalaktenzeichen
|
|
private string ReplaceHiphenWithSlash(string aktenzeichen)
|
|
{
|
|
var regex = new Regex(Regex.Escape("-"));
|
|
string res = regex.Replace(aktenzeichen, "/", 1);
|
|
return res;
|
|
}
|
|
|
|
#region Extract Strassen
|
|
private void ExtractStrasseHausnummer(string strasse)
|
|
{
|
|
string[] res = strasse.Split(' ');
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
try
|
|
{
|
|
//Abtrennen von Hausnummerzusätzen wie z.B. "4A" in "4" und "A" sowie Aufspaltung von Bereichen z.B. "4-8" in "4" und "8"
|
|
for (int i = 0; i < res.Length; i++)
|
|
{
|
|
if (!char.IsDigit(res[i].ElementAt(0)) && char.IsDigit(res[i].ElementAt(1)))
|
|
{
|
|
DocsSZ = res[i];
|
|
}
|
|
else if (char.IsDigit(res[i].ElementAt(0)))
|
|
{
|
|
SplittedHausnummerZusatz(res[i]);
|
|
}
|
|
else
|
|
{
|
|
//z.B. Auf der Mühle, Herbert-Scholtissek-Str, Westholz etc.
|
|
sb.Append(res[i]);
|
|
sb.Append(" ");
|
|
}
|
|
}
|
|
Strasse1 = sb.ToString().Trim();
|
|
|
|
}
|
|
catch (System.ArgumentOutOfRangeException ex)
|
|
{
|
|
_logger.Error(string.Concat(ex.Message, " Beim Extrahieren der Strasse/Hausnummer ist ein Fehler aufgetreten."));
|
|
throw new ArgumentOutOfRangeException("Beim Extrahieren der Strasse1 ist ein Fehler aufgetreten.\n\nBitte Eingaben überprüfen.", ex);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.Error(ex.Message);
|
|
throw;
|
|
}
|
|
}
|
|
|
|
private void SplittedStrasse2(string input)
|
|
{
|
|
string[] strasseHnr = input.Split(' ');
|
|
|
|
StringBuilder builder = new StringBuilder();
|
|
Hausnummer2 = strasseHnr.LastOrDefault();
|
|
|
|
strasseHnr = strasseHnr.Take(strasseHnr.Length - 1).ToArray();
|
|
for (int i = 0; i < strasseHnr.Length; i++)
|
|
{
|
|
if (i == strasseHnr.Length - 1)
|
|
builder.Append(strasseHnr[i]);
|
|
else
|
|
builder.Append(string.Concat(strasseHnr[i], " "));
|
|
}
|
|
Strasse2 = builder.ToString();
|
|
}
|
|
|
|
private void SplittedHausnummerZusatz(string input)
|
|
{
|
|
string hausnummerZusatzVon = string.Empty;
|
|
string hausnummerZusatzBis = string.Empty;
|
|
|
|
Tuple<string, string> result;
|
|
|
|
if (input.Contains('-')) //13-15, 13a-15
|
|
{
|
|
hausnummerZusatzVon = input.Split('-').FirstOrDefault();
|
|
hausnummerZusatzBis = input.Split('-').LastOrDefault();
|
|
result = ExtractingZusatzFromHausnummer(hausnummerZusatzVon);
|
|
Hausnummer1Von = result.Item1;
|
|
HsNrVonZusatz = result.Item2;
|
|
result = ExtractingZusatzFromHausnummer(hausnummerZusatzBis);
|
|
Hausnummer1Bis = result.Item1;
|
|
HsNrBisZusatz = result.Item2;
|
|
|
|
if (HsNrBisZusatz.Length >= 2 || HsNrVonZusatz.Length >= 2)
|
|
{
|
|
HsNrVonZusatz = HsNrVonZusatz != string.Empty ? HsNrVonZusatz.FirstOrDefault().ToString() : string.Empty;
|
|
HsNrBisZusatz = HsNrBisZusatz != string.Empty ? HsNrBisZusatz.LastOrDefault().ToString() : string.Empty;
|
|
}
|
|
}
|
|
else //13
|
|
{
|
|
result = ExtractingZusatzFromHausnummer(input);
|
|
Hausnummer1Von = result.Item1;
|
|
HsNrBisZusatz = result.Item2;
|
|
}
|
|
}
|
|
|
|
private Tuple<string, string> ExtractingZusatzFromHausnummer(string input)
|
|
{
|
|
StringBuilder sbHausnummer = new StringBuilder();
|
|
StringBuilder sbZusatz = new StringBuilder();
|
|
|
|
for (int i = 0; i < input.Length; i++)
|
|
{
|
|
if (char.IsDigit(input[i]))
|
|
{
|
|
sbHausnummer.Append(input[i]);
|
|
}
|
|
else
|
|
{
|
|
sbZusatz.Append(input[i]);
|
|
}
|
|
}
|
|
return new Tuple<string, string>(sbHausnummer.ToString(), sbZusatz.ToString());
|
|
}
|
|
#endregion
|
|
|
|
|
|
private string GenerateFameId()
|
|
{
|
|
string dt = DateTime.Now.ToString("ddMMyyhhmmssfff");
|
|
byte[] tmpDt;
|
|
byte[] tmpHash;
|
|
|
|
tmpDt = ASCIIEncoding.ASCII.GetBytes(dt);
|
|
tmpHash = new MD5CryptoServiceProvider().ComputeHash(tmpDt);
|
|
|
|
StringBuilder res = new StringBuilder(tmpHash.Length);
|
|
for (int i = 0; i < tmpHash.Length; i++)
|
|
{
|
|
res.Append(tmpHash[i].ToString("X2"));
|
|
}
|
|
string tmp = res.ToString().ToLower().Substring(res.Length - 12);
|
|
_logger.Info("FameId " + tmp + " für " + dt + " und " + Aktenzeichen + " erzeugt.");
|
|
return tmp;
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
return Id.ToString() + ";" + Aktenzeichen + ";" + Checkliste + ";" + VorgangsDefinition + ";" + BeschreibungVorgang + ";" + Strasse1 + ";" + Hausnummer1Von + ";" + HsNrVonZusatz + ";" + Hausnummer1Bis + ";" + HsNrBisZusatz + ";" + Strasse2.Trim() + ";" + Hausnummer2 + ";" + Eingangsdatum.ToShortDateString() + ";" + FameId + ";" + Enddatum.ToShortDateString() + ";" + DocType + ";" + NamePDF;
|
|
}
|
|
//CM:
|
|
//aktenzeichen
|
|
//vorgangdefid VV
|
|
//Vorgangsart Kanalakte
|
|
//strasse 1
|
|
//strasse 1 hausnummer
|
|
//strasse 2
|
|
//strasse 2 hausnummer
|
|
//datumabschluss
|
|
//fameid
|
|
//dokumentdatum
|
|
//langebzeichnung/dokumentbezeichnung in inpro
|
|
//dokumentname mit Endung
|
|
#endregion
|
|
}
|
|
} |