177 lines
6.7 KiB
PowerShell
177 lines
6.7 KiB
PowerShell
$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
|
|
}
|
|
)
|
|
}
|
|
|
|
}
|
|
} |