Compare commits
1 Commits
dev-mkoebi
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 9dd6ee8481 |
@@ -1,20 +1,44 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>netcoreapp3.1</TargetFramework>
|
||||
<DebugType>embedded</DebugType>
|
||||
<Platforms>AnyCPU;x86</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Remove="x64\**" />
|
||||
<EmbeddedResource Remove="x64\**" />
|
||||
<None Remove="x64\**" />
|
||||
<None Remove="NLog.config" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="NLog" Version="4.7.11" />
|
||||
<PackageReference Include="ODP.NetCore" Version="2.0.12" />
|
||||
<PackageReference Include="System.Data.SqlClient" Version="4.8.3" />
|
||||
<COMReference Include="Microsoft.Office.Interop.Excel">
|
||||
<WrapperTool>tlbimp</WrapperTool>
|
||||
<VersionMinor>8</VersionMinor>
|
||||
<VersionMajor>1</VersionMajor>
|
||||
<Guid>00020813-0000-0000-c000-000000000046</Guid>
|
||||
<Lcid>0</Lcid>
|
||||
<Isolated>false</Isolated>
|
||||
<EmbedInteropTypes>true</EmbedInteropTypes>
|
||||
</COMReference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Content Include="NLog.config">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="NLog" Version="6.0.3" />
|
||||
<PackageReference Include="Oracle.ManagedDataAccess.Core" Version="23.9.1" />
|
||||
<PackageReference Include="Sentry" Version="5.14.1" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Update="config.txt">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -1,25 +1,41 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.1.32319.34
|
||||
VisualStudioVersion = 17.0.32126.317
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MergeCMInpro", "MergeCMInpro.csproj", "{F50C40BA-1861-48DD-B5E7-9638439E15E1}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MergeCMInpro", "MergeCMInpro.csproj", "{0798D653-CA13-4E5D-8A9E-4D8A3ADA4D1A}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MergeCMInpro.Test", "..\TestProject1\MergeCMInpro.Test.csproj", "{E67A9AAD-585E-4F23-8A85-665A49285C61}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Debug|x86 = Debug|x86
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{F50C40BA-1861-48DD-B5E7-9638439E15E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F50C40BA-1861-48DD-B5E7-9638439E15E1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F50C40BA-1861-48DD-B5E7-9638439E15E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F50C40BA-1861-48DD-B5E7-9638439E15E1}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0798D653-CA13-4E5D-8A9E-4D8A3ADA4D1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0798D653-CA13-4E5D-8A9E-4D8A3ADA4D1A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0798D653-CA13-4E5D-8A9E-4D8A3ADA4D1A}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{0798D653-CA13-4E5D-8A9E-4D8A3ADA4D1A}.Debug|x86.Build.0 = Debug|x86
|
||||
{0798D653-CA13-4E5D-8A9E-4D8A3ADA4D1A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0798D653-CA13-4E5D-8A9E-4D8A3ADA4D1A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0798D653-CA13-4E5D-8A9E-4D8A3ADA4D1A}.Release|x86.ActiveCfg = Release|x86
|
||||
{0798D653-CA13-4E5D-8A9E-4D8A3ADA4D1A}.Release|x86.Build.0 = Release|x86
|
||||
{E67A9AAD-585E-4F23-8A85-665A49285C61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E67A9AAD-585E-4F23-8A85-665A49285C61}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E67A9AAD-585E-4F23-8A85-665A49285C61}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{E67A9AAD-585E-4F23-8A85-665A49285C61}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{E67A9AAD-585E-4F23-8A85-665A49285C61}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E67A9AAD-585E-4F23-8A85-665A49285C61}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{E67A9AAD-585E-4F23-8A85-665A49285C61}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{E67A9AAD-585E-4F23-8A85-665A49285C61}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {A8D0CA7E-16F2-47DA-92BA-34B69950C507}
|
||||
SolutionGuid = {512F540C-4375-4C7D-B8F4-9D45AE50AA94}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
||||
423
Program.cs
423
Program.cs
@@ -1,278 +1,209 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using Scan2Compress.Business;
|
||||
using System.Linq;
|
||||
using System.Data.SqlClient;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using MergeCMInpro.Business;
|
||||
using MergeCMInpro.Data;
|
||||
using NLog;
|
||||
using Sentry;
|
||||
using static System.Net.WebRequestMethods;
|
||||
|
||||
|
||||
namespace MergeCMInpro
|
||||
{
|
||||
class Program
|
||||
static class Program
|
||||
{
|
||||
static List<string> vorgängeCM = new List<string>();
|
||||
static List<string> vorgängeInpro = new List<string>();
|
||||
private static readonly Logger _logger = NLog.LogManager.GetCurrentClassLogger();
|
||||
|
||||
static string destinationFilePath = @"\\asbgvp02\Archivtransfer\";
|
||||
|
||||
static string constring = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dborap01.stadtdo.de)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=bgvp.stadtdo.de)));user id=leser;password=leser;";
|
||||
|
||||
static string csvPath = Path.Combine(Directory.GetFiles(Environment.CurrentDirectory, "*.csv").FirstOrDefault());
|
||||
|
||||
//static string csvPath = Path.Combine(Directory.GetFiles(@"S:\Bauvorhaben\0_SAGA\815.922 - 819.917 SAGA HD 21 2021_09_27", "*.csv").FirstOrDefault());
|
||||
|
||||
static string pathOutputFileCM = Path.Combine(Directory.GetParent(csvPath).FullName, "outputCM.csv");
|
||||
static string pathOutputFileInpro = Path.Combine(Directory.GetParent(csvPath).FullName, "outputInpro.csv");
|
||||
static string csvPath = String.Empty;
|
||||
|
||||
static void Main(string[] args)
|
||||
{
|
||||
Console.WriteLine("Working, please wait... or get yourself a tea.");
|
||||
SplitRow(csvPath);
|
||||
using (StreamWriter sw = new StreamWriter(pathOutputFileCM))
|
||||
{
|
||||
foreach (var item in vorgängeCM)
|
||||
{
|
||||
sw.WriteLine(item.ToString());
|
||||
}
|
||||
}
|
||||
using (StreamWriter sw = new StreamWriter(pathOutputFileInpro))
|
||||
{
|
||||
foreach (var item in vorgängeInpro)
|
||||
{
|
||||
sw.WriteLine(item.ToString());
|
||||
}
|
||||
}
|
||||
Console.WriteLine("{0} created.", pathOutputFileCM);
|
||||
Console.WriteLine("{0} created.", pathOutputFileInpro);
|
||||
Console.WriteLine("");
|
||||
Console.WriteLine("You may close this window now.");
|
||||
Console.ReadLine();
|
||||
}
|
||||
|
||||
public static void SplitRow(string path)
|
||||
{
|
||||
int count = 0;
|
||||
int countRows = File.ReadAllLines(path).Length;
|
||||
using (StreamReader sr = new StreamReader(path, System.Text.Encoding.GetEncoding("ISO-8859-1")))
|
||||
{
|
||||
string[] arr = new string[10];
|
||||
while (!sr.EndOfStream)
|
||||
{
|
||||
count++;
|
||||
if (count != countRows)
|
||||
{
|
||||
Console.Write("\r{0}/{1} ", count, countRows);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("\r{0}/{1} ", count, countRows);
|
||||
}
|
||||
arr = sr.ReadLine().Split(";");
|
||||
Vorgang v = new Vorgang(arr[0], arr[2], string.Concat(arr[5], " Teil ", arr[6]), arr[6], arr[8]);
|
||||
v.AbsoluteFilePath = GetFullFilePath(arr[8]); //arr[7]=jpm-Dateien
|
||||
if (v.AbsoluteFilePath == string.Empty)
|
||||
{
|
||||
Console.WriteLine("Datei {0} nicht gefunden", path);
|
||||
return;
|
||||
}
|
||||
v.CreationDate = GetCreationDate(v.AbsoluteFilePath);
|
||||
|
||||
ConnectAndExecute(v);
|
||||
|
||||
//Backup JPM-Files
|
||||
var z = ExtractFilePath(v.AbsoluteFilePath);
|
||||
var folder = string.Concat("Sicherungen jpm ", z.ElementAt(0), " bis ", z.ElementAt(2));
|
||||
CopySourceFileToDestination(GetFullFilePath(arr[7]), Path.Combine(destinationFilePath, "Archiv", folder), arr[7]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static string[] ExtractFilePath(string path)
|
||||
{
|
||||
var splittedAbsolutePath = path.Split("\\").SkipLast(2).LastOrDefault();
|
||||
return splittedAbsolutePath.Split(" ");
|
||||
}
|
||||
|
||||
|
||||
public static DateTime GetCreationDate(string file)
|
||||
{
|
||||
FileInfo fi = new FileInfo(file);
|
||||
return fi.CreationTime;
|
||||
}
|
||||
|
||||
public static string GetFullFilePath(string file)
|
||||
{
|
||||
string currentDirectory = Directory.GetParent(csvPath).FullName; //Directory.GetCurrentDirectory();
|
||||
string res = string.Empty;
|
||||
res = Directory.GetFiles(currentDirectory, file, SearchOption.AllDirectories).FirstOrDefault();
|
||||
if (res == null)
|
||||
return string.Empty;
|
||||
else
|
||||
{
|
||||
//res = Directory.GetParent(res).Parent.Name.Split('\\').LastOrDefault();
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
public static string GenerateQuery(string az)
|
||||
{
|
||||
string sqlQuery = "SELECT "
|
||||
+ "INPROP.PMGTVVORGANG.VORGANGID, "
|
||||
+ "INPROP.PMGTVVORGANG.VORGANGDEFID, "
|
||||
+ "INPROP.PMVBCHECKLIST.CHECKLISTID, "
|
||||
+ "INPROP.PMVBCHECKLIST.DESCRIPTION, "
|
||||
+ "INPROP.PMGTVVORGANG.STRASSE1ID, "
|
||||
+ "INPROP.PMGTVVORGANG.STRASSE1, "
|
||||
+ "INPROP.PMGTVVORGANG.HAUSNUMMER1, "
|
||||
+ "INPROP.PMGTVVORGANG.HSNRVON, "
|
||||
+ "INPROP.PMGTVVORGANG.HSNRVONZUSATZ, "
|
||||
+ "INPROP.PMGTVVORGANG.HSNRBIS, "
|
||||
+ "INPROP.PMGTVVORGANG.HSNRBISZUSATZ, "
|
||||
+ "INPROP.PMGTVVORGANG.STRASSE2, "
|
||||
+ "INPROP.PMGTVVORGANG.HAUSNUMMER2, "
|
||||
+ "INPROP.PMGTVVORGANG.DATUMEINGANG, "
|
||||
+ "INPROP.PMGTVVORGANG.DATUMABSCHLUSS "
|
||||
+ "FROM INPROP.PMGTVVORGANG "
|
||||
+ "INNER JOIN INPROP.PMVBCHECKLIST ON INPROP.PMGTVVORGANG.CHECKID = INPROP.PMVBCHECKLIST.CHECKLISTID "
|
||||
+ "WHERE INPROP.PMGTVVORGANG.VORGANGID='" + az + "'";
|
||||
return sqlQuery;
|
||||
}
|
||||
|
||||
public static void ConnectAndExecute(Vorgang v)
|
||||
{
|
||||
try
|
||||
{
|
||||
using (Oracle.ManagedDataAccess.Client.OracleConnection oracle = new Oracle.ManagedDataAccess.Client.OracleConnection())
|
||||
{
|
||||
oracle.ConnectionString = constring;
|
||||
CallSentry();
|
||||
Console.ForegroundColor = ConsoleColor.White;
|
||||
|
||||
string sqlQuery = GenerateQuery(v.Aktenzeichen);
|
||||
//productive
|
||||
//csvPath = Path.Combine(Directory.GetFiles(Environment.CurrentDirectory, "*.csv").FirstOrDefault());
|
||||
|
||||
using (Oracle.ManagedDataAccess.Client.OracleCommand com = new Oracle.ManagedDataAccess.Client.OracleCommand(sqlQuery, oracle))
|
||||
//testing
|
||||
//csvPath = Path.Combine(Directory.GetFiles(@"\\fsdeg002\DatenStA61_S\Bauvorhaben\0_SAGA\839.867 - 843.817 SAGA HD 27 2023_11_08", "*.csv").FirstOrDefault());
|
||||
//csvPath = Path.Combine(Directory.GetFiles(@"C:\Testing\MergeInpro", "*.csv").FirstOrDefault());
|
||||
//csvPath = Path.Combine(Directory.GetFiles(@"C:\TEMP\SAGA\839.867 - 843.817 SAGA HD 27 2023_11_08", "*.csv").FirstOrDefault());
|
||||
//csvPath = Path.Combine(Directory.GetFiles(@"C:\TEMP\SAGA\843.818 - 847.187 SAGA HD 28 2023_12_18", "*.csv").FirstOrDefault());
|
||||
csvPath = Path.Combine(Directory.GetFiles(@"E:\TestData\MergeCMInpro", "*.csv").FirstOrDefault());
|
||||
|
||||
|
||||
string pathOutputFileCM = Path.Combine(Directory.GetParent(csvPath).FullName, "outputCM.csv");
|
||||
string pathOutputFileInpro = Path.Combine(Directory.GetParent(csvPath).FullName, "outputInpro.csv");
|
||||
string pathOutputFileStandort = Path.Combine(Directory.GetParent(csvPath).FullName, "outputStandort.csv");
|
||||
|
||||
if (CheckFileExist())
|
||||
{
|
||||
oracle.Open();
|
||||
using (Oracle.ManagedDataAccess.Client.OracleDataReader reader = com.ExecuteReader())
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
v.Checkliste = reader.GetString(2);
|
||||
v.VorgangsDefinition = reader.GetString(1);
|
||||
v.BeschreibungVorgang = reader.GetString(3);
|
||||
v.Eingangsdatum = Convert.ToDateTime(reader.GetValue(13).ToString());
|
||||
v.Enddatum = Convert.ToDateTime(reader.GetValue(14).ToString());
|
||||
//var date = reader.GetValue(12);
|
||||
//if (date.ToString() == string.Empty)
|
||||
// v.Enddatum = DateTime.Now;
|
||||
//else
|
||||
// v.Enddatum = Convert.ToDateTime(reader.GetValue(12).ToString());
|
||||
var strasseId = reader.GetValue(4);
|
||||
if (strasseId.ToString() == "")
|
||||
v.IdStrasse = "null";
|
||||
else
|
||||
v.IdStrasse = strasseId.ToString();
|
||||
v.Strasse1 = reader.GetValue(5).ToString().Trim();
|
||||
v.Hausnummer1Von = reader.GetValue(6).ToString();
|
||||
v.HsNrVonZusatz = reader.GetValue(8).ToString();
|
||||
v.Hausnummer1Bis = reader.GetValue(9).ToString();
|
||||
v.HsNrBisZusatz = reader.GetValue(10).ToString();
|
||||
v.Strasse2 = reader.GetValue(11).ToString();
|
||||
v.Hausnummer2 = reader.GetValue(12).ToString();
|
||||
Console.ForegroundColor = ConsoleColor.Yellow;
|
||||
Console.WriteLine("WARNING: import files already exist.");
|
||||
Console.ResetColor();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if(!CheckFolderStructure(csvPath))
|
||||
{
|
||||
Console.ForegroundColor = ConsoleColor.Yellow;
|
||||
Console.WriteLine("WARNING: folder structure wrong. Please note folder with name '{0}' has to contain all pdf files.", Path.GetFileNameWithoutExtension(csvPath));
|
||||
Console.ResetColor();
|
||||
return;
|
||||
}
|
||||
|
||||
var config = System.IO.File.ReadLines(@".\config.txt").ToArray();
|
||||
DataOperations.conString = config[0];
|
||||
DataOperations.kanalAktePath = config[2];
|
||||
DataOperations.csvPath = csvPath;
|
||||
|
||||
if (!System.IO.File.Exists(DataOperations.kanalAktePath))
|
||||
throw new FileNotFoundException("Kanalaktendatei nicht gefunden.");
|
||||
|
||||
//Testing
|
||||
string archivNetPath = Path.Combine(@"E:\TestData\ArchivPath");
|
||||
|
||||
//productive
|
||||
//string archivNetPath = Path.Combine(config[1]);
|
||||
|
||||
Console.WriteLine("Working, please wait... or get yourself a tea.");
|
||||
|
||||
FileOperations.SplitRow(csvPath, archivNetPath);
|
||||
|
||||
//CM
|
||||
StringBuilder sbCM = new StringBuilder();
|
||||
sbCM.Append(string.Concat(v.Id, ";"));
|
||||
sbCM.Append(string.Concat(v.Aktenzeichen, ";"));
|
||||
sbCM.Append(string.Concat(v.VorgangsDefinition.Trim(), ';'));
|
||||
sbCM.Append(string.Concat(v.BeschreibungVorgang, ";"));
|
||||
sbCM.Append(string.Concat(v.Strasse1, ";"));
|
||||
sbCM.Append(string.Concat(string.Concat(v.Hausnummer1Von, " ", v.HsNrVonZusatz).Trim(), ';'));
|
||||
sbCM.Append(string.Concat(v.Strasse2.Trim(), ";"));
|
||||
sbCM.Append(string.Concat(string.Concat(v.Hausnummer1Bis, " ", v.HsNrBisZusatz).Trim(), ';'));
|
||||
sbCM.Append(string.Concat(v.Enddatum.ToShortDateString(), ";"));
|
||||
sbCM.Append(string.Concat(v.FameId, ";"));
|
||||
sbCM.Append(string.Concat(v.CreationDate.ToShortDateString(), ";"));
|
||||
|
||||
//Langbezeichnung
|
||||
string documentType = CheckedForDocumentType(v.DocType.Split(" ").FirstOrDefault());
|
||||
sbCM.Append(string.Concat(documentType, " ", string.Concat(v.DocType.Split(" ").FirstOrDefault().Substring(0, 1), v.DocType.Split(" ").FirstOrDefault().Substring(1).ToLower()), " ", v.DocType.Split(" ", 2).Skip(1).FirstOrDefault(), ";"));
|
||||
|
||||
sbCM.Append(string.Concat(v.AbsoluteFilePath.Split('\\').SkipLast(2).LastOrDefault(), " ", v.Id, ";"));
|
||||
|
||||
sbCM.Append(string.Concat(v.FameId, ".pdf", ";"));
|
||||
vorgängeCM.Add(sbCM.ToString());
|
||||
|
||||
StringBuilder sbInpro = new StringBuilder();
|
||||
sbInpro.Append(string.Concat(string.Empty, ";"));//Barcode
|
||||
sbInpro.Append(string.Concat(v.Aktenzeichen, ";"));//Vorgangsnummer
|
||||
sbInpro.Append(string.Concat(string.Empty, ";"));//Abteilung
|
||||
sbInpro.Append(string.Concat(v.IdStrasse, ";"));//Strasse1ID
|
||||
sbInpro.Append(string.Concat(v.Strasse1, ";").Trim());//Strasse1
|
||||
sbInpro.Append(string.Concat(v.Hausnummer1Von, ";").Trim());//Hausnummer1
|
||||
sbInpro.Append(string.Concat(v.Hausnummer1Von, ";").Trim());//Hausnummer1Von
|
||||
sbInpro.Append(string.Concat(v.HsNrVonZusatz, ";").Trim());//Hausnummer1VonZusatz
|
||||
sbInpro.Append(string.Concat(v.Hausnummer1Bis, ";").Trim());//Hausnummer1Bis
|
||||
sbInpro.Append(string.Concat(v.HsNrBisZusatz, ";").Trim());//Hausnummer1BisZusatz
|
||||
sbInpro.Append(string.Concat(v.Strasse2, ";").Trim());//Strasse2
|
||||
sbInpro.Append(string.Concat(v.Hausnummer2, ";").Trim());//Hausnummer2
|
||||
sbInpro.Append(string.Concat(v.DocType, ";"));//Bezeichnung1
|
||||
sbInpro.Append(string.Concat(v.Eingangsdatum.ToShortDateString(), ";"));//Eingangsdatum
|
||||
sbInpro.Append(string.Concat(string.Empty, ";"));//Beschreibung1
|
||||
sbInpro.Append(string.Concat(string.Empty, ";")); //Beschreibung2
|
||||
sbInpro.Append(string.Concat(string.Empty, ";"));//Bezeichnung2
|
||||
sbInpro.Append(string.Concat(v.DocsSZ, ";"));//Bezeichnung3
|
||||
sbInpro.Append(string.Concat(v.FameId, ".pdf", ";"));//Dateiname
|
||||
sbInpro.Append(string.Concat(v.FameId, ";"));//FameId
|
||||
sbInpro.Append(string.Concat(v.VorgangsDefinition, ";").Trim());//Vorgangsart
|
||||
sbInpro.Append(string.Concat(v.Checkliste, ";").Trim());//Checkliste
|
||||
sbInpro.Append(string.Concat(v.Enddatum.ToShortDateString(), ";"));//Abschlussdatum
|
||||
sbInpro.Append(string.Concat(string.Concat(documentType, " ", string.Concat(v.DocType.Split(" ").FirstOrDefault().Substring(0, 1), v.DocType.Split(" ").FirstOrDefault().Substring(1).ToLower()), " ", v.DocType.Split(" ", 2).Skip(1).FirstOrDefault(), ";")));//Langbezeichnung
|
||||
vorgängeInpro.Add(sbInpro.ToString());
|
||||
|
||||
var tmp = ExtractFilePath(v.AbsoluteFilePath);
|
||||
var destFolder = string.Concat("pdf", tmp.ElementAt(5), " ", tmp.ElementAt(0), " bis ", tmp.ElementAt(1), " ", tmp.ElementAt(2));
|
||||
CopySourceFileToDestination(v.AbsoluteFilePath, destFolder, string.Concat(v.FameId, ".pdf"));
|
||||
using (StreamWriter sw = new StreamWriter(pathOutputFileCM))
|
||||
{
|
||||
foreach (var item in DataOperations.vorgängeCM)
|
||||
{
|
||||
sw.WriteLine(item.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
//Inpro
|
||||
using (StreamWriter sw = new StreamWriter(pathOutputFileInpro))
|
||||
{
|
||||
foreach (var item in DataOperations.vorgängeInpro)
|
||||
{
|
||||
sw.WriteLine(item.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
//Standort
|
||||
using (StreamWriter sw = new StreamWriter(pathOutputFileStandort))
|
||||
{
|
||||
foreach (var item in DataOperations.vorgängeStandort.Distinct())
|
||||
{
|
||||
sw.WriteLine(item.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Console.ForegroundColor = ConsoleColor.Green;
|
||||
Console.WriteLine("{0} created.", pathOutputFileCM);
|
||||
|
||||
FileInfo fi = new FileInfo(pathOutputFileInpro);
|
||||
if(fi.Length!=0)
|
||||
{
|
||||
Console.WriteLine("{0} created.", pathOutputFileInpro);
|
||||
Console.WriteLine("{0} created.", pathOutputFileStandort);
|
||||
}
|
||||
|
||||
Console.ResetColor();
|
||||
|
||||
//#region Backup JPM-Files
|
||||
//Console.WriteLine("Start copying jpm-files, please wait...");
|
||||
//FileInfo fi = new FileInfo(csvPath);
|
||||
//FileOperations.CopyJPMFilesToDestination(fi.Directory.FullName, archivNetPath);
|
||||
//Console.WriteLine("");
|
||||
//Console.ForegroundColor = ConsoleColor.Green;
|
||||
//Console.WriteLine("Done. You may close this window now.");
|
||||
//#endregion
|
||||
|
||||
Console.ReadLine();
|
||||
|
||||
}
|
||||
catch (DirectoryNotFoundException)
|
||||
{
|
||||
Console.ForegroundColor = ConsoleColor.Red;
|
||||
Console.WriteLine("ERROR: source directory not found.");
|
||||
Console.ReadLine();
|
||||
}
|
||||
catch (FileNotFoundException ex)
|
||||
{
|
||||
Console.ForegroundColor = ConsoleColor.Red;
|
||||
Console.WriteLine("ERROR: " + ex.Message);
|
||||
Console.ReadLine();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine("ERROR fetching data for {0}:{1}", v.Aktenzeichen, ex.Message);
|
||||
Console.ForegroundColor = ConsoleColor.Red;
|
||||
Console.WriteLine("ERROR: unknown error occured. Maybe no csv-File? Please check!\r\n{0}", ex.InnerException);
|
||||
Console.ReadLine();
|
||||
}
|
||||
}
|
||||
static string CheckedForDocumentType(string value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case "SCHRIFTVERKEHR":
|
||||
value = "01";
|
||||
break;
|
||||
case "ZEICHNUNGEN":
|
||||
value = "02";
|
||||
break;
|
||||
case "STATIK":
|
||||
value = "03";
|
||||
break;
|
||||
case "SONSTIGES":
|
||||
value = "04";
|
||||
break;
|
||||
case "GENEHMIGUNG":
|
||||
value = "05";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
static void CopySourceFileToDestination(string sourceFilePath, string destFolderName, string destFileName)
|
||||
static string CallSentry()
|
||||
{
|
||||
string destPath = Path.Combine(destinationFilePath, destFolderName);
|
||||
if (!Directory.Exists(destPath))
|
||||
Directory.CreateDirectory(destPath);
|
||||
File.Copy(sourceFilePath, Path.Combine(destPath, destFileName),true);
|
||||
try
|
||||
{
|
||||
var res = SentrySdk.Init(options =>
|
||||
{
|
||||
// A Sentry Data Source Name (DSN) is required.
|
||||
// See https://docs.sentry.io/product/sentry-basics/dsn-explainer/
|
||||
// You can set it in the SENTRY_DSN environment variable, or you can set it in code here.
|
||||
options.Dsn = "https://73fd45bffc79360f9de9b7a7a622d96f@sentry.katyes.dynv6.net/3";
|
||||
|
||||
// When debug is enabled, the Sentry client will emit detailed debugging information to the console.
|
||||
// This might be helpful, or might interfere with the normal operation of your application.
|
||||
// We enable it here for demonstration purposes when first trying Sentry.
|
||||
// You shouldn't do this in your applications unless you're troubleshooting issues with Sentry.
|
||||
options.Debug = true;
|
||||
|
||||
// This option is recommended. It enables Sentry's "Release Health" feature.
|
||||
options.AutoSessionTracking = true;
|
||||
});
|
||||
return res.ToString();
|
||||
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureMessage("Something went wrong");
|
||||
return ex.Message;
|
||||
}
|
||||
}
|
||||
|
||||
private static bool CheckFolderStructure(string csvName)
|
||||
{
|
||||
string fileName = Path.GetFileNameWithoutExtension(csvName);
|
||||
bool result = false;
|
||||
string dir = Path.GetDirectoryName(csvName);
|
||||
DirectoryInfo di = new DirectoryInfo(dir);
|
||||
if(di.GetFiles("*.pdf").Length > 0)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
if (Directory.Exists(Path.Combine(dir, fileName)))
|
||||
{
|
||||
result = true;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static bool CheckFileExist()
|
||||
{
|
||||
FileInfo fi = new FileInfo(Path.Combine(Directory.GetParent(csvPath).FullName, "outputInpro.csv"));
|
||||
|
||||
if ((System.IO.File.Exists(Path.Combine(Directory.GetParent(csvPath).FullName, "outputInpro.csv")) && fi.Length!=0) || System.IO.File.Exists(Path.Combine(Directory.GetParent(csvPath).FullName, "outputCM.csv")))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
# MergeCMInpro
|
||||
|
||||
Zusammenführen von Informationen/Dateien aus dem Content Manager und Inpro
|
||||
Ergänzt Informationen aus der Inpro-DB zu den gegebenen Informationen des Scandienstleisters und schreibt Import-Datei für CM und Inpro
|
||||
278
Vorgang.cs
278
Vorgang.cs
@@ -1,278 +0,0 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user