all scripts
This commit is contained in:
177
Dennis_Scripts/FindMissingTransactionsInSQL.ps1
Normal file
177
Dennis_Scripts/FindMissingTransactionsInSQL.ps1
Normal file
@@ -0,0 +1,177 @@
|
||||
$csv = Import-Csv -Delimiter ';' -Path "\\client\c$\Users\m.nielsen\Documents\Thales\SV1612090061\data.csv"
|
||||
|
||||
$group = $csv | group CardEngravedID
|
||||
|
||||
$sqlConnection = new-object System.Data.SqlClient.SqlConnection
|
||||
$sqlConnection.ConnectionString = 'Server=rejk-p-sql003\sql01;Database=AfcCookedIFSv2;Trusted_Connection=True;'
|
||||
$sqlConnection.Open()
|
||||
$sqlCommand = $sqlConnection.CreateCommand()
|
||||
|
||||
$missingATSN = New-Object System.Collections.Generic.List`[int`]
|
||||
$foundATSN = New-Object System.Collections.Generic.List`[int`]
|
||||
$missingTransactions = New-Object System.Collections.Generic.List`[object`]
|
||||
$foundTransactions = New-Object System.Collections.Generic.List`[object`]
|
||||
|
||||
$i = 0
|
||||
foreach($entry in $group) {
|
||||
$i++
|
||||
|
||||
Write-Progress -Activity 'Looking' -Status "$i / $($group.Count)" -PercentComplete ($i * 100 / $group.Count)
|
||||
|
||||
if($entry.Group[0].KnownTransactionID -lt 0) { continue }
|
||||
|
||||
Write-Verbose "New entry:$($entry.Name)"
|
||||
|
||||
[int]$maxATSN = 0
|
||||
[int]$minATSN = [int32]::MaxValue
|
||||
|
||||
$missingATSN.Clear()
|
||||
$foundATSN.Clear()
|
||||
|
||||
foreach($item in $entry.Group) {
|
||||
Write-Verbose ". New item - MissingATSN:$($item.MissingATSN) KnownTransactionID:$($item.KnownTransactionID)"
|
||||
|
||||
if([int]$item.MissingATSN -gt $maxATSN) {
|
||||
$maxATSN = [int]$item.MissingATSN
|
||||
}
|
||||
|
||||
if([int]$item.MissingATSN -lt $minATSN) {
|
||||
$minATSN = [int]$item.MissingATSN
|
||||
}
|
||||
|
||||
$missingATSN.Add([int]$item.MissingATSN)
|
||||
}
|
||||
|
||||
|
||||
##
|
||||
Write-verbose "Missing ATSN:$(($missingATSN | sort) -join ', ')"
|
||||
Write-Verbose "Finding CardEngravedID:$($entry.Name) ATSN BETWEEN $minATSN AND $maxATSN in ObjTransaction"
|
||||
|
||||
$sqlCommand.CommandText = @"
|
||||
select t.TransactionID, t.ApplicationTransactionSequenceNumber as ATSN, t.TransactionMediaLastDeviceID as LastDeviceID, t.DeviceID, t.MsgReportDate from trk.objtransaction t with(readuncommitted)
|
||||
where t.CardEngravedID = $($entry.Name)
|
||||
and t.ApplicationTransactionSequenceNumber between $minATSN and $maxATSN
|
||||
order by t.ApplicationTransactionSequenceNumber
|
||||
"@
|
||||
|
||||
$foundCount = 0
|
||||
|
||||
try {
|
||||
$reader = $sqlCommand.ExecuteReader()
|
||||
|
||||
if($reader.HasRows) {
|
||||
while($reader.Read()) {
|
||||
|
||||
$msgReportDate = $reader['MsgReportDate']
|
||||
$transactionID = $reader['TransactionID']
|
||||
$ATSN = $reader['ATSN']
|
||||
$lastDeviceID = $reader['LastDeviceID']
|
||||
$deviceID = $reader['DeviceID']
|
||||
|
||||
if($missingATSN -contains $ATSN) {
|
||||
Write-Verbose ". Found transaction - T.ID:$transactionID MRD:$msgReportDate ATSN:$ATSN DeviceID:$deviceID LastDeviceID:$lastDeviceID - Unexpected, supposed to be missing?"
|
||||
$foundCount++
|
||||
if(-not ($missingATSN.Remove([int]$ATSN))) {
|
||||
Write-Warning "Couldn't remove ATSN:$ATSN from MissingATSN:$($missingATSN -join ', ')"
|
||||
}
|
||||
|
||||
$foundATSN.Add([int]$ATSN)
|
||||
$foundTransactions.Add(
|
||||
[pscustomobject]@{
|
||||
TransactionID = $transactionID
|
||||
CardEngravedID = $entry.Name
|
||||
ATSN = $ATSN
|
||||
MsgReportDate = $msgReportDate
|
||||
DeviceID = $deviceID
|
||||
LastDeviceID = $lastDeviceID
|
||||
|
||||
Exception = $false
|
||||
ExceptionText = $null
|
||||
TransactionExceptionID = $null
|
||||
}
|
||||
)
|
||||
}
|
||||
else {
|
||||
Write-Verbose ". Ignoring $ATSN"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
finally {
|
||||
$reader.Close()
|
||||
}
|
||||
|
||||
|
||||
Write-Verbose "Finding CardEngravedID:$($entry.Name) ATSN BETWEEN $minATSN AND $maxATSN in ObjTransactionException"
|
||||
|
||||
$sqlCommand.CommandText = @"
|
||||
select te.TransactionID, te.TransactionExceptionID, te.ApplicationTransactionSequenceNumber as ATSN, te.TransactionMediaLastDeviceID as LastDeviceID, te.DeviceID, te.MsgReportDate, te.ExceptionText
|
||||
from dcp.ObjTransactionException te with(readuncommitted)
|
||||
where te.CardEngravedID = $($entry.Name)
|
||||
and te.ApplicationTransactionSequenceNumber between $minATSN and $maxATSN
|
||||
order by te.ApplicationTransactionSequenceNumber
|
||||
"@
|
||||
|
||||
$exceptionCount = 0
|
||||
|
||||
try {
|
||||
$reader = $sqlCommand.ExecuteReader()
|
||||
|
||||
if($reader.HasRows) {
|
||||
while($reader.Read()) {
|
||||
|
||||
$transactionID = $reader['TransactionID']
|
||||
$transactionExceptionID = $reader['TransactionExceptionID']
|
||||
$ATSN = $reader['ATSN']
|
||||
$lastDeviceID = $reader['LastDeviceID']
|
||||
$deviceID = $reader['DeviceID']
|
||||
$msgReportDate = $reader['MsgReportDate']
|
||||
$exceptionText = $reader['ExceptionText']
|
||||
|
||||
if($missingATSN -contains $ATSN) {
|
||||
Write-Verbose "Found exception - T.ID:$transactionID TEID:$transactionExceptionID MRD:$msgReportDate ATSN:$ATSN DeviceID:$deviceID LastDeviceID:$lastDeviceID - ExceptionText:$exceptionText"
|
||||
$exceptionCount++
|
||||
if(-not ($missingATSN.Remove([int]$ATSN))) {
|
||||
Write-Warning "Couldn't remove ATNS:$ATSN from List:$($missingATSN -join ', ')"
|
||||
}
|
||||
|
||||
$foundATSN.Add([int]$ATSN)
|
||||
$foundTransactions.Add(
|
||||
[pscustomobject]@{
|
||||
TransactionID = $transactionID
|
||||
CardEngravedID = $entry.Name
|
||||
ATSN = $ATSN
|
||||
MsgReportDate = $msgReportDate
|
||||
DeviceID = $deviceID
|
||||
LastDeviceID = $lastDeviceID
|
||||
|
||||
Exception = $true
|
||||
ExceptionText = $exceptionText
|
||||
TransactionExceptionID = $transactionExceptionID
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
finally {
|
||||
$reader.Close()
|
||||
}
|
||||
|
||||
|
||||
Write-Verbose "Found $($foundCount + $exceptionCount) transactions for CardEngravedID:$($entry.Name) ATSN BETWEEN $minATSN AND $maxATSN` - FoundATSN:$($foundATSN -join ', ')"
|
||||
|
||||
if($missingATSN.Count -gt 0) {
|
||||
Write-Warning "CardEngravedID:$($entry.Name) StartATSN:$minATSN EndATSN:$maxATSN Missing ATSN:$($missingATSN -join ', ')"
|
||||
|
||||
foreach($ATSN in $missingATSN) {
|
||||
$missingTransactions.Add(
|
||||
[pscustomobject]@{
|
||||
CardEngravedID = $entry.Name
|
||||
ATSN = $ATSN
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user