enhanced duplicate finder

This commit is contained in:
Luca Haid
2025-05-15 10:47:34 +02:00
parent 8399238c57
commit 4716c3156a
3 changed files with 86 additions and 10 deletions

View File

@@ -160,7 +160,8 @@ class ADBWohneinheitController extends mfBaseController {
}
protected function duplicateAction() {
$duplicateHomes = ADBWohneinheitModel::searchDuplicateExtref();
$duplicateHomes = array_merge(ADBWohneinheitModel::searchDuplicateExtref(),
ADBWohneinheitModel::searchDuplicateOAID());
$JSGlobals = ["BASE_URL" => self::getUrl(""),
"DASHBOARD_URL" => self::getUrl("Dashboard"),

View File

@@ -301,6 +301,7 @@ class ADBWohneinheitModel {
while($data = $res->fetch_assoc()) {
$duplicateExtrefs[] = $data['extref'];
$duplicates[$data['extref']] = [
"duplicateType" => "extref",
'extref' => $data['extref'],
'count' => $data['count'],
'homeData' => []
@@ -309,18 +310,83 @@ class ADBWohneinheitModel {
if (!empty($duplicateExtrefs)) {
$extrefList = "'" . implode("','", array_map([$db, 'real_escape_string'], $duplicateExtrefs)) . "'";
$detailSql = "SELECT Wohneinheit.*
FROM Wohneinheit
LEFT JOIN Hausnummer ON (Hausnummer.id = Wohneinheit.hausnummer_id)
WHERE $where AND Wohneinheit.extref IN ($extrefList)
ORDER BY Wohneinheit.extref";
$detailSql = "SELECT Wohneinheit.*, thetool.Address.company AS company, Hausnummer.rimo_id AS hausnummer_extref
FROM Wohneinheit
LEFT JOIN Hausnummer ON (Hausnummer.id = Wohneinheit.hausnummer_id)
LEFT JOIN Netzgebiet ON (Netzgebiet.id = Hausnummer.netzgebiet_id)
LEFT JOIN thetool.Network ON (Network.adb_netzgebiet_id = Netzgebiet.id)
LEFT JOIN thetool.Address ON (Network.owner_id = Address.id)
WHERE $where AND Wohneinheit.extref IN ($extrefList)
ORDER BY Wohneinheit.extref";
$detailRes = $db->query($detailSql);
while($homeData = $detailRes->fetch_assoc()) {
$duplicates[$homeData['extref']]['homeData'][] = [
"id" => $homeData['id'],
"oaid" => $homeData['oaid'],
"network_company" => $homeData['company'],
"hausnummer_id" => $homeData['hausnummer_id'],
"hausnummer_extref" => $homeData['hausnummer_extref'],
"num" => $homeData['num'],
"nutzung" => $homeData['nutzung'],
"rimo_ex_state" => $homeData['rimo_ex_state'],
"rimo_op_state" => $homeData['rimo_op_state'],
"create" => $homeData['create'],
"edit" => $homeData['edit'],
];
}
}
return array_values($duplicates);
}
public static function searchDuplicateOAID($filter = []) {
$duplicates = [];
$db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME)->link;
$where = self::getSqlFilter($filter);
$sql = "SELECT Wohneinheit.oaid, COUNT(*) as count
FROM Wohneinheit
LEFT JOIN Hausnummer ON (Hausnummer.id = Wohneinheit.hausnummer_id)
WHERE $where AND Wohneinheit.oaid IS NOT NULL
GROUP BY Wohneinheit.oaid
HAVING COUNT(*) > 1
ORDER BY COUNT(*) DESC";
$res = $db->query($sql);
$duplicateOaids = [];
while($data = $res->fetch_assoc()) {
$duplicateOaids[] = $data['oaid'];
$duplicates[$data['oaid']] = [
"duplicateType" => "oaid",
'oaid' => $data['oaid'],
'count' => $data['count'],
'homeData' => []
];
}
if (!empty($duplicateOaids)) {
$oaidList = "'" . implode("','", array_map([$db, 'real_escape_string'], $duplicateOaids)) . "'";
$detailSql = "SELECT Wohneinheit.*, thetool.Address.company AS company, Hausnummer.rimo_id AS hausnummer_extref
FROM Wohneinheit
LEFT JOIN Hausnummer ON (Hausnummer.id = Wohneinheit.hausnummer_id)
LEFT JOIN Netzgebiet ON (Netzgebiet.id = Hausnummer.netzgebiet_id)
LEFT JOIN thetool.Network ON (Network.adb_netzgebiet_id = Netzgebiet.id)
LEFT JOIN thetool.Address ON (Network.owner_id = Address.id)
WHERE $where AND Wohneinheit.oaid IN ($oaidList)
ORDER BY Wohneinheit.oaid";
$detailRes = $db->query($detailSql);
while($homeData = $detailRes->fetch_assoc()) {
$duplicates[$homeData['oaid']]['homeData'][] = [
"id" => $homeData['id'],
'oaid' => $homeData['oaid'],
"extref" => $homeData['extref'],
"network_company" => $homeData['company'],
"hausnummer_id" => $homeData['hausnummer_id'],
"hausnummer_extref" => $homeData['hausnummer_extref'],
"num" => $homeData['num'],
"nutzung" => $homeData['nutzung'],
"rimo_ex_state" => $homeData['rimo_ex_state'],
@@ -337,4 +403,5 @@ class ADBWohneinheitModel {
}

View File

@@ -5,7 +5,7 @@ Vue.component('a-d-b-wohneinheit-duplicate', {
<tt-table :data="window['TT_CONFIG']['DUPLICATE_HOMES']" :config="DuplicateHomesTableConfig" excel-export>
<template v-slot:extref="{ row }">
<span class="badge badge-warning">{{ row.extref }}</span>
<span class="badge badge-warning">{{ row.duplicateType === 'extref' ? row.extref : row.oaid }}</span>
</template>
<template v-slot:count="{ row }">
@@ -19,6 +19,8 @@ Vue.component('a-d-b-wohneinheit-duplicate', {
<tr>
<th>ID</th>
<th>OAID</th>
<th>SDIBuilding</th>
<th>Firma</th>
<th>Num</th>
<th>Nutzung</th>
<th>Rimo Ex State</th>
@@ -32,6 +34,8 @@ Vue.component('a-d-b-wohneinheit-duplicate', {
<tr v-for="home in row.homeData" :key="home.id" :class="{'bg-light': home.id % 2 === 0}">
<td>{{ home.id }}</td>
<td>{{ home.oaid || 'N/A' }}</td>
<td>{{ home.hausnummer_extref || 'N/A' }}</td>
<td>{{ home.network_company || 'N/A' }}</td>
<td>{{ home.num }}</td>
<td>{{ home.nutzung || 'N/A' }}</td>
<td>{{ home.rimo_ex_state || 'N/A' }}</td>
@@ -65,15 +69,19 @@ Vue.component('a-d-b-wohneinheit-duplicate', {
tableHeader: 'Doppelte HomeID Liste',
defaultPageSize: 10,
headers: [
{text: 'HomeID', key: 'extref', sortable: true, class: 'text-nowrap', priority: 10},
{text: 'Anzahl gleicher HomeIDs', key: 'count', sortable: true, class: 'text-center', priority: 9},
{text: 'HomeID | OAID', key: 'extref', sortable: true, class: 'text-nowrap', priority: 10},
{text: 'Duplicate Type', key: 'duplicateType', sortable: true, class: 'text-nowrap', priority: 9, filter: 'select', filterOptions: [
{text: 'HomeID', value: 'extref'},
{text: 'OAID', value: 'oaid'},
]},
{text: 'Anzahl gleicher HomeIDs', key: 'count', sortable: true, class: 'text-center', priority: 8},
{
text: 'Home Details',
key: 'homeDetails',
sortable: false,
class: 'w-75',
filter: false,
priority: 8
priority: 7
},
],
},