Files
ADMIN/initATLASAufschubkonten/AtlasAufschubDatenEinlesen.vb
2021-11-18 14:59:04 +01:00

195 lines
8.5 KiB
VB.net

Imports System.Data.SqlClient
Imports System.IO
Module AtlasAufschubDatenEinlesen
Public Sub initAllFiles(path As String, HISTORY As Boolean) 'Alle Files im Ordner durchlaufen
For Each file As String In IO.Directory.GetFiles(path)
If HISTORY Then
initFile(file)
Else
Dim FI As New IO.FileInfo(file)
Dim LastWriteDate As Date = FI.LastWriteTime
If LastWriteDate > Now.AddDays(-6) Then
initFile(file)
End If
End If
Next
insertSQL()
End Sub
Sub writeLineToSqlInsert(brgak_datum, brgak_betrag, brgak_brgaktoId, brgak_filename, brgak_atc, brgak_fileline)
Try
Using sr As New StreamWriter(AppDomain.CurrentDomain.BaseDirectory & "sql.txt", True)
sr.WriteLine(brgak_datum & ";" & brgak_betrag & ";" & brgak_brgaktoId & ";" & brgak_filename & ";" & brgak_atc & ";" & brgak_fileline)
End Using
Catch ex As Exception
writeLog("ERROR", "Fehler beim Schreiben der SQL Datei: " & ex.Message)
End Try
End Sub
Public Sub insertSQL()
If System.IO.File.Exists(AppDomain.CurrentDomain.BaseDirectory & "sql.txt") Then
Try
Using sr As New StreamReader(AppDomain.CurrentDomain.BaseDirectory & "sql.txt")
Dim line As String = ""
Do While sr.Peek() >= 0
line = sr.ReadLine
If line.Contains(";") Then
Dim split = line.Split(";")
If tryToInsertProgramm(split(0), CDbl(split(1)), split(2), split(3), split(4), split(5)) Then
'Try
'Catch ex As Exception
' End Try
End If
End If
Loop
End Using
My.Computer.FileSystem.WriteAllText(AppDomain.CurrentDomain.BaseDirectory & "sql.txt", "", False)
Catch ex As Exception
writeLog("ERROR", "Fehler beim Lesen der SQL Datei: " & ex.Message)
End Try
End If
End Sub
Dim POS_head = 0
Dim POS_AbgKto = 6
Dim POS_AbgBetr = 11
Dim POS_ATC = 1
Public Sub initFile(file As String)
Dim checkfile As Boolean = False
Try
Using sr As New StreamReader(file)
If Not file.ToLower.EndsWith("tmp") Then
Dim t As DateTime = Now
Do
checkfile = FileInUse(file)
Loop Until checkfile = True Or t.AddSeconds(3) < Now
Dim line As String = ""
Dim rowcnt = 1
Do While sr.Peek() >= 0
line = CStr(sr.ReadLine())
Dim s = line.Split(Chr(29)) 'nach GroupSeperator splitten
If s(POS_head) = "ASK" AndAlso s(POS_AbgKto) = "006128" Then
Dim filename = cut_file(file)
Dim betrag As Double = CDbl(s(POS_AbgBetr).Substring(0, 9) & "," & s(POS_AbgBetr).Substring(9, 2))
' MsgBox(betrag)
Dim fi As New System.IO.FileInfo(file)
writeLineToSqlInsert(fi.CreationTime.ToString("dd.MM.yyyy hh:mm:ss"), betrag, "1", filename, s(POS_ATC), rowcnt)
'If rowcnt > 1 Then MsgBox(filename)
End If
rowcnt += 1
Loop
' writeLogVerarbeitet(cut_file(file))
End If
End Using
Catch ex As Exception
writeLog("ERROR", "Fehler beim Initialisieren der ATLAS-Datei: " & ex.Message)
End Try
insertSQL()
End Sub
Private Function cut_file(ByVal file As String) As String ' Funktion zum Entfernen der Backslashs / Ordner While file.Contains("\") file = file.Remove(0, 1) End While Return file End Function
While file.Contains("\")
file = file.Remove(0, 1)
End While
Return file
End Function
Public Function FileInUse(ByVal sFile As String) As Boolean
If System.IO.File.Exists(sFile) Then
Try
Dim F As Short = FreeFile()
FileOpen(F, sFile, IO.FileMode.Open, OpenAccess.Read, OpenShare.LockRead)
FileClose(F)
Catch
Return True
End Try
End If
Return False
End Function
Public Function tryToInsertProgramm(brgak_datum, brgak_betrag, brgak_brgaktoId, brgak_filename, brgak_atc, brgak_fileline) As Boolean
Dim sql As String = " begin tran" &
" if Not exists (select * from tblBrgAufschub with (updlock,serializable) where brgak_filename = @brgak_filename AND brgak_fileline=@brgak_fileline) " &
" begin " &
" INSERT INTO tblBrgAufschub " &
" (brgak_datum, brgak_betrag, brgak_brgaktoId, brgak_filename, brgak_atc,brgak_fileline) VALUES " &
" (@brgak_datum, @brgak_betrag, @brgak_brgaktoId, @brgak_filename, @brgak_atc,@brgak_fileline) " &
" End " &
" commit tran "
'(brgak_fileline='' OR ... )
' " ELSE " &
' " begin " &
' " UPDATE tblBrgAufschub " &
' " SET brgak_datum=@brgak_datum, brgak_betrag=@brgak_betrag, brgak_brgaktoId=@brgak_brgaktoId, brgak_filename=@brgak_filename, brgak_atc=@brgak_atc,brgak_fileline=@brgak_fileline " &
' " WHERE brgak_filename = @brgak_filename AND (brgak_fileline='' OR brgak_fileline=@brgak_fileline)" &
' " End " &
Dim cn As SqlConnection = VERAG_PROG_ALLGEMEIN.SQL.GetNewOpenConnectionADMIN
'cn.ConnectionString = "Data Source=SQLGUIDE01.verag.ost.dmn;Initial Catalog=ADMIN;Integrated Security=false;User ID=AppUser;Password=yp/THDd?xM+pZ$;"
'cn.Open()
Using cn
Using cmd As New SqlCommand(sql, cn)
cmd.Parameters.AddWithValue("@brgak_datum", brgak_datum)
cmd.Parameters.AddWithValue("@brgak_betrag", brgak_betrag)
cmd.Parameters.AddWithValue("@brgak_brgaktoId", brgak_brgaktoId)
cmd.Parameters.AddWithValue("@brgak_filename", brgak_filename)
cmd.Parameters.AddWithValue("@brgak_atc", brgak_atc)
cmd.Parameters.AddWithValue("@brgak_fileline", brgak_fileline)
Try
cmd.ExecuteNonQuery()
''Lösche File: --> vom ALTEN ATLAS
'Try
' If brgak_filename <> "DY" Then System.IO.File.Delete(frmRoutineManager.PathATLAS & "\" & brgak_filename)
'Catch ex As Exception
' writeLog("ERROR", "Fehler beim Löschen der Aufschub-Datei: " & ex.Message)
'End Try
Return True
Catch ex As SqlException
writeLog("ERROR", "Fehler beim Schreiben in die Datenbank: " & ex.Message)
End Try
End Using
End Using
cn.Close()
Return False
End Function
Public Sub writeLog(typ, msg)
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(typ, msg, System.Reflection.MethodBase.GetCurrentMethod.Name)
Exit Sub
'PROBE
If Not System.IO.Directory.Exists(AppDomain.CurrentDomain.BaseDirectory & "log\") Then
System.IO.Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory & "log\")
End If
Try
Using sr As New StreamWriter(AppDomain.CurrentDomain.BaseDirectory & "log\err.log", True)
sr.WriteLine(Now.ToString("dd.MM.yyyy HH:mm:ss") & ";" & typ & ";" & msg)
End Using
Catch ex As Exception
End Try
End Sub
Sub writeLogVerarbeitet(datei)
If Not System.IO.Directory.Exists(AppDomain.CurrentDomain.BaseDirectory & "log\") Then
System.IO.Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory & "log\")
End If
Try
Using sr As New StreamWriter(AppDomain.CurrentDomain.BaseDirectory & "log\worker.log", True)
sr.WriteLine(Now.ToString("dd.MM.yyyy HH:mm:ss") & ";" & datei & " wurde verarbeitet.")
End Using
Catch ex As Exception
End Try
End Sub
End Module