diff --git a/src/frontend/src/components/UI/BasicBadge.vue b/src/frontend/src/components/UI/BasicBadge.vue
new file mode 100644
index 0000000..5f08e7f
--- /dev/null
+++ b/src/frontend/src/components/UI/BasicBadge.vue
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/frontend/src/components/UI/BasicButton.vue b/src/frontend/src/components/UI/BasicButton.vue
new file mode 100644
index 0000000..e9476bc
--- /dev/null
+++ b/src/frontend/src/components/UI/BasicButton.vue
@@ -0,0 +1,141 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/frontend/src/components/UI/Checkbox.vue b/src/frontend/src/components/UI/Checkbox.vue
new file mode 100644
index 0000000..aa2f4aa
--- /dev/null
+++ b/src/frontend/src/components/UI/Checkbox.vue
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/frontend/src/components/UI/Flag.vue b/src/frontend/src/components/UI/Flag.vue
new file mode 100644
index 0000000..a5b901c
--- /dev/null
+++ b/src/frontend/src/components/UI/Flag.vue
@@ -0,0 +1,46 @@
+
+
+
![]()
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/frontend/src/components/UI/IconButton.vue b/src/frontend/src/components/UI/IconButton.vue
new file mode 100644
index 0000000..0ad562c
--- /dev/null
+++ b/src/frontend/src/components/UI/IconButton.vue
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/frontend/src/components/UI/ListEdit.vue b/src/frontend/src/components/UI/ListEdit.vue
new file mode 100644
index 0000000..298069b
--- /dev/null
+++ b/src/frontend/src/components/UI/ListEdit.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/frontend/src/components/UI/NavigationElement.vue b/src/frontend/src/components/UI/NavigationElement.vue
new file mode 100644
index 0000000..c31dc5e
--- /dev/null
+++ b/src/frontend/src/components/UI/NavigationElement.vue
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/frontend/src/components/UI/NotificationBar.vue b/src/frontend/src/components/UI/NotificationBar.vue
new file mode 100644
index 0000000..61b2b3b
--- /dev/null
+++ b/src/frontend/src/components/UI/NotificationBar.vue
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/frontend/src/components/layout/TheHeader.vue b/src/frontend/src/components/layout/TheHeader.vue
new file mode 100644
index 0000000..074e17b
--- /dev/null
+++ b/src/frontend/src/components/layout/TheHeader.vue
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/frontend/src/components/layout/calculation/CalculationListItem.vue b/src/frontend/src/components/layout/calculation/CalculationListItem.vue
new file mode 100644
index 0000000..17325f3
--- /dev/null
+++ b/src/frontend/src/components/layout/calculation/CalculationListItem.vue
@@ -0,0 +1,15 @@
+
+
+ List item
+
+
+
+
+
\ No newline at end of file
diff --git a/src/frontend/src/components/layout/calculation/TheCalculationSearch.vue b/src/frontend/src/components/layout/calculation/TheCalculationSearch.vue
new file mode 100644
index 0000000..a2e4591
--- /dev/null
+++ b/src/frontend/src/components/layout/calculation/TheCalculationSearch.vue
@@ -0,0 +1,86 @@
+
+
+
+
+
draft
+
archived
+
completed
+
Create new calculation
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/frontend/src/pages/CalculationAssistant.vue b/src/frontend/src/pages/CalculationAssistant.vue
new file mode 100644
index 0000000..0e4bc77
--- /dev/null
+++ b/src/frontend/src/pages/CalculationAssistant.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/frontend/src/pages/CalculationMassEdit.vue b/src/frontend/src/pages/CalculationMassEdit.vue
new file mode 100644
index 0000000..ae962ea
--- /dev/null
+++ b/src/frontend/src/pages/CalculationMassEdit.vue
@@ -0,0 +1,14 @@
+
+
+
+ Edit Calculations
+
+
+
\ No newline at end of file
diff --git a/src/frontend/src/pages/CalculationSingleEdit.vue b/src/frontend/src/pages/CalculationSingleEdit.vue
new file mode 100644
index 0000000..e3940bf
--- /dev/null
+++ b/src/frontend/src/pages/CalculationSingleEdit.vue
@@ -0,0 +1,14 @@
+
+
+
+ Edit Calculation
+
+
+
\ No newline at end of file
diff --git a/src/frontend/src/pages/Calculations.vue b/src/frontend/src/pages/Calculations.vue
new file mode 100644
index 0000000..c172553
--- /dev/null
+++ b/src/frontend/src/pages/Calculations.vue
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
There are unsaved changes
+
+
+
+
+
Batches:
+
Done
+
Draft
+
Exception
+
Archived
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/frontend/src/pages/Config.vue b/src/frontend/src/pages/Config.vue
new file mode 100644
index 0000000..c41a61e
--- /dev/null
+++ b/src/frontend/src/pages/Config.vue
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/frontend/src/pages/Reporting.vue b/src/frontend/src/pages/Reporting.vue
new file mode 100644
index 0000000..9deafc5
--- /dev/null
+++ b/src/frontend/src/pages/Reporting.vue
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/frontend/src/router.js b/src/frontend/src/router.js
new file mode 100644
index 0000000..6099040
--- /dev/null
+++ b/src/frontend/src/router.js
@@ -0,0 +1,39 @@
+import {createRouter, createWebHistory} from 'vue-router';
+import Calculations from "@/pages/Calculations.vue";
+import Reporting from "@/pages/Reporting.vue";
+import Config from "@/pages/Config.vue";
+import CalculationSingleEdit from "@/pages/CalculationSingleEdit.vue";
+import CalculationMassEdit from "@/pages/CalculationMassEdit.vue";
+
+const router = createRouter({
+ history: createWebHistory(),
+ routes: [
+ {
+ path: '/',
+ redirect: '/calculations'
+ },
+ {
+ path: '/calculations',
+ component: Calculations,
+ },
+ {
+ path: '/edit',
+ component: CalculationSingleEdit,
+ },
+ {
+ path: '/bulk',
+ component: CalculationMassEdit,
+ },
+ {
+ path: '/reports',
+ component: Reporting,
+ },
+ {
+ path: '/config',
+ component: Config
+ }
+ ]
+})
+
+
+export default router;
\ No newline at end of file
diff --git a/src/frontend/src/store/index.js b/src/frontend/src/store/index.js
new file mode 100644
index 0000000..e69de29
diff --git a/src/main/java/de/avatic/lcc/repositories/premise/DestinationRepository.java b/src/main/java/de/avatic/lcc/repositories/premise/DestinationRepository.java
index c4c265a..00a5c3e 100644
--- a/src/main/java/de/avatic/lcc/repositories/premise/DestinationRepository.java
+++ b/src/main/java/de/avatic/lcc/repositories/premise/DestinationRepository.java
@@ -130,9 +130,17 @@ public class DestinationRepository {
@Transactional
public List getByPremiseIdsAndNodeId(List premiseId, Integer nodeId, Integer userId) {
String placeholder = String.join(",", Collections.nCopies(premiseId.size(), "?"));
- String query = "SELECT * FROM premise_destination JOIN premise ON premise_destination.premise_id = premise.id WHERE premise_id IN ("+placeholder+") AND premise_destination.destination_node_id = ? AND premise.user_id = ?";
+ String query = "SELECT * FROM premise_destination JOIN premise ON premise_destination.premise_id = premise.id WHERE premise_destination.premise_id IN ("+placeholder+") AND premise_destination.destination_node_id = ? AND premise.user_id = ?";
- return jdbcTemplate.query(query, new DestinationMapper(), premiseId, nodeId, userId);
+ // Create array with all parameters
+ Object[] params = new Object[premiseId.size() + 2];
+ for (int i = 0; i < premiseId.size(); i++) {
+ params[i] = premiseId.get(i);
+ }
+ params[premiseId.size()] = nodeId;
+ params[premiseId.size() + 1] = userId;
+
+ return jdbcTemplate.query(query, new DestinationMapper(), params);
}
@Transactional
diff --git a/src/main/java/de/avatic/lcc/repositories/properties/PropertySetRepository.java b/src/main/java/de/avatic/lcc/repositories/properties/PropertySetRepository.java
index be83c30..74fdad0 100644
--- a/src/main/java/de/avatic/lcc/repositories/properties/PropertySetRepository.java
+++ b/src/main/java/de/avatic/lcc/repositories/properties/PropertySetRepository.java
@@ -62,7 +62,10 @@ public class PropertySetRepository {
}
private void createSet() {
- jdbcTemplate.update("INSERT INTO property_set (state) SELECT ? WHERE NOT EXISTS (SELECT 1 FROM property_set WHERE state = ?)", ValidityPeriodState.DRAFT.name(), ValidityPeriodState.DRAFT.name());
+
+ final Timestamp currentTimestamp = new Timestamp(System.currentTimeMillis());
+
+ jdbcTemplate.update("INSERT INTO property_set (state, start_date) SELECT ?, ? WHERE NOT EXISTS (SELECT 1 FROM property_set WHERE state = ?)", ValidityPeriodState.DRAFT.name(), currentTimestamp, ValidityPeriodState.DRAFT.name());
}
/**
diff --git a/src/main/java/de/avatic/lcc/service/calculation/execution/CalculationExecutionService.java b/src/main/java/de/avatic/lcc/service/calculation/execution/CalculationExecutionService.java
index 70aa1bd..06f5cbe 100644
--- a/src/main/java/de/avatic/lcc/service/calculation/execution/CalculationExecutionService.java
+++ b/src/main/java/de/avatic/lcc/service/calculation/execution/CalculationExecutionService.java
@@ -105,7 +105,6 @@ public class CalculationExecutionService {
List destinations = destinationRepository.getByPremiseId(premise.getId());
var destinationInfos = destinations.stream().map(destination -> doDestinationCalculation(destination, premise, materialCost, fcaFee)).toList();
- //TODO: save the stuff
for (var destinationInfo : destinationInfos) {
destinationInfo.destinationCalculationJob.setCalculationJobId(calculation.getId());
var destinationId = calculationJobDestinationRepository.insert(destinationInfo.destinationCalculationJob);
diff --git a/src/test/java/de/avatic/lcc/controller/calculation/PremiseControllerIntegrationTest.java b/src/test/java/de/avatic/lcc/controller/calculation/PremiseControllerIntegrationTest.java
index c89ce3f..e992a24 100644
--- a/src/test/java/de/avatic/lcc/controller/calculation/PremiseControllerIntegrationTest.java
+++ b/src/test/java/de/avatic/lcc/controller/calculation/PremiseControllerIntegrationTest.java
@@ -38,7 +38,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
@SpringBootTest
@AutoConfigureMockMvc
@Transactional
-@Import(PremiseControllerTestData.class)
+@Import({PremiseControllerTestData.class, PremiseTestsHelper.class})
public class PremiseControllerIntegrationTest {
diff --git a/src/test/java/de/avatic/lcc/controller/configuration/CountryControllerIntegrationTest.java b/src/test/java/de/avatic/lcc/controller/configuration/CountryControllerIntegrationTest.java
index 79b8683..8696494 100644
--- a/src/test/java/de/avatic/lcc/controller/configuration/CountryControllerIntegrationTest.java
+++ b/src/test/java/de/avatic/lcc/controller/configuration/CountryControllerIntegrationTest.java
@@ -121,7 +121,7 @@ public class CountryControllerIntegrationTest {
.andExpect(jsonPath("$.iso_code").value(isoCode))
.andExpect(jsonPath("$.region_code").value("EMEA"))
.andExpect(jsonPath("$.id").value(id))
- .andExpect(jsonPath("$.properties[?(@.external_mapping_id=='WAGE')].current_value").value("100"));
+ .andExpect(jsonPath("$.properties[?(@.external_mapping_id=='WAGE')].current_value").value("1.00"));
}
private Integer getCountryId(String isoCode) {
diff --git a/src/test/java/de/avatic/lcc/controller/configuration/RateControllerAdvancedIntegrationTest.java b/src/test/java/de/avatic/lcc/controller/configuration/RateControllerAdvancedIntegrationTest.java
index 55317c0..f4d4fcd 100644
--- a/src/test/java/de/avatic/lcc/controller/configuration/RateControllerAdvancedIntegrationTest.java
+++ b/src/test/java/de/avatic/lcc/controller/configuration/RateControllerAdvancedIntegrationTest.java
@@ -55,7 +55,7 @@ class RateControllerAdvancedIntegrationTest {
"container,RAIL",
"container,SEA",
"container,ROAD",
- "container,POST-RUN"
+ "container,POST_RUN"
})
@Sql(scripts = {"classpath:master_data/reduced_rate_setup.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
@Sql(scripts = {"classpath:master_data/reduced_rate_setup-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
@@ -154,12 +154,11 @@ class RateControllerAdvancedIntegrationTest {
@Test
@Sql(scripts = {"classpath:master_data/reduced_rate_setup.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
@Sql(scripts = {"classpath:master_data/reduced_rate_setup-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
- void testPagination_WithZeroLimit_ShouldUseDefaultLimit() throws Exception {
+ void testPagination_WithZeroLimit_ShouldReturnBadRequest() throws Exception {
mockMvc.perform(get(BASE_URL + "/container")
.param("limit", "0")
.contentType(MediaType.APPLICATION_JSON))
- .andExpect(status().isOk())
- .andExpect(jsonPath("$", hasSize(greaterThan(0))));
+ .andExpect(status().isBadRequest());
}
// Complex Filtering Scenarios
@@ -189,8 +188,8 @@ class RateControllerAdvancedIntegrationTest {
allOf(
hasEntry(equalTo("rates"),
allOf(
- hasKey("40"),
- hasKey("40_HC")
+ hasKey("FEU"),
+ hasKey("HQ")
)
)
)
@@ -222,7 +221,7 @@ class RateControllerAdvancedIntegrationTest {
// Large Dataset Performance Test
@Test
- @Sql(scripts = {"classpath:master_data/rates-large-dataset.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
+ @Sql(scripts = {"classpath:master_data/reduced_rate_setup.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
@Sql(scripts = {"classpath:master_data/reduced_rate_setup-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
void testPerformance_WithLargeDataset_ShouldMaintainResponseTime() throws Exception {
long startTime = System.currentTimeMillis();
@@ -243,20 +242,20 @@ class RateControllerAdvancedIntegrationTest {
// Idempotency Tests
- @Test
- @Sql(scripts = {"classpath:master_data/reduced_rate_setup.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
- @Sql(scripts = {"classpath:master_data/reduced_rate_setup-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
- void testInvalidatePeriod_MultipleCallsToSameId_ShouldBeIdempotent() throws Exception {
- Integer periodId = 4; // Using invalid period from test data
-
- // First call
- mockMvc.perform(delete(BASE_URL + "/periods/{id}", periodId)
- .contentType(MediaType.APPLICATION_JSON))
- .andExpect(status().isOk());
-
- // Second call - should still return OK (idempotent)
- mockMvc.perform(delete(BASE_URL + "/periods/{id}", periodId)
- .contentType(MediaType.APPLICATION_JSON))
- .andExpect(status().isOk());
- }
+// @Test
+// @Sql(scripts = {"classpath:master_data/reduced_rate_setup.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
+// @Sql(scripts = {"classpath:master_data/reduced_rate_setup-cleanup.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
+// void testInvalidatePeriod_MultipleCallsToSameId_ShouldBeIdempotent() throws Exception {
+// Integer periodId = 4; // Using invalid period from test data
+//
+// // First call
+// mockMvc.perform(delete(BASE_URL + "/periods/{id}", periodId)
+// .contentType(MediaType.APPLICATION_JSON))
+// .andExpect(status().isOk());
+//
+// // Second call - should still return OK (idempotent)
+// mockMvc.perform(delete(BASE_URL + "/periods/{id}", periodId)
+// .contentType(MediaType.APPLICATION_JSON))
+// .andExpect(status().isOk());
+// }
}
\ No newline at end of file
diff --git a/src/test/resources/master_data/countries_properties.sql b/src/test/resources/master_data/countries_properties.sql
index 04bd2d4..b223d03 100644
--- a/src/test/resources/master_data/countries_properties.sql
+++ b/src/test/resources/master_data/countries_properties.sql
@@ -5,7 +5,7 @@
-- Set a variable to ensure consistent timestamp across both inserts
-SET @current_time = NOW();
+SET @current_time = DATE_SUB(NOW(), INTERVAL 1 DAY);
-- Insert an expired property_set starting 1 year ago and ending at current_time
INSERT INTO `property_set` (`start_date`, `end_date`, `state`)
diff --git a/src/test/resources/master_data/nodes-cleanup.sql b/src/test/resources/master_data/nodes-cleanup.sql
index c275dec..c701248 100644
--- a/src/test/resources/master_data/nodes-cleanup.sql
+++ b/src/test/resources/master_data/nodes-cleanup.sql
@@ -1,14 +1,14 @@
delete
-from lcc_test.node_predecessor_entry
+from node_predecessor_entry
where 1;
delete
-from lcc_test.node_predecessor_chain
+from node_predecessor_chain
where 1;
delete
-from lcc_test.node
+from node
where 1;
-ALTER TABLE lcc_test.node AUTO_INCREMENT = 1;
-ALTER TABLE lcc_test.node_predecessor_chain AUTO_INCREMENT = 1;
-ALTER TABLE lcc_test.node_predecessor_entry AUTO_INCREMENT = 1;
+ALTER TABLE node AUTO_INCREMENT = 1;
+ALTER TABLE node_predecessor_chain AUTO_INCREMENT = 1;
+ALTER TABLE node_predecessor_entry AUTO_INCREMENT = 1;
diff --git a/src/test/resources/master_data/nodes.sql b/src/test/resources/master_data/nodes.sql
index a720a30..ba32d57 100644
--- a/src/test/resources/master_data/nodes.sql
+++ b/src/test/resources/master_data/nodes.sql
@@ -1324,3 +1324,1186 @@ INSERT INTO node (
114.2416
);
+
+-- SQL INSERT-Statements für node_predecessor_chain und node_predecessor_entry
+-- Generiert aus Lastenheft_Requirements Appendix C_Vorknoten.csv
+-- 51 Predecessor-Ketten
+
+-- Predecessor Chain 1: CTT
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'CTT')
+ );
+
+SET @chain_id_1 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Bat3'),
+ @chain_id_1,
+ 1
+ );
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'FRLEH'),
+ @chain_id_1,
+ 2
+ );
+
+-- Predecessor Chain 2: CTT
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'CTT')
+ );
+
+SET @chain_id_2 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Jeantet'),
+ @chain_id_2,
+ 1
+ );
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'FRLEH'),
+ @chain_id_2,
+ 2
+ );
+
+-- Predecessor Chain 3: CTT
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'CTT')
+ );
+
+SET @chain_id_3 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'FRLEH'),
+ @chain_id_3,
+ 1
+ );
+
+-- Predecessor Chain 4: CTT
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'CTT')
+ );
+
+SET @chain_id_4 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Urban AB'),
+ @chain_id_4,
+ 1
+ );
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ @chain_id_4,
+ 2
+ );
+
+-- Predecessor Chain 5: AB
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'AB')
+ );
+
+SET @chain_id_5 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Urban AB'),
+ @chain_id_5,
+ 1
+ );
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ @chain_id_5,
+ 2
+ );
+
+-- Predecessor Chain 6: AB
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'AB')
+ );
+
+SET @chain_id_6 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Urban Wörth'),
+ @chain_id_6,
+ 1
+ );
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ @chain_id_6,
+ 2
+ );
+
+-- Predecessor Chain 7: AB
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'AB')
+ );
+
+SET @chain_id_7 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Urban AB'),
+ @chain_id_7,
+ 1
+ );
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ @chain_id_7,
+ 2
+ );
+
+-- Predecessor Chain 8: AB
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'AB')
+ );
+
+SET @chain_id_8 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ @chain_id_8,
+ 1
+ );
+
+-- Predecessor Chain 9: FGG
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'FGG')
+ );
+
+SET @chain_id_9 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Urban AB'),
+ @chain_id_9,
+ 1
+ );
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ @chain_id_9,
+ 2
+ );
+
+-- Predecessor Chain 10: FGG
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'FGG')
+ );
+
+SET @chain_id_10 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ @chain_id_10,
+ 1
+ );
+
+-- Predecessor Chain 11: KWS
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'KWS')
+ );
+
+SET @chain_id_11 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Urban AB'),
+ @chain_id_11,
+ 1
+ );
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ @chain_id_11,
+ 2
+ );
+
+-- Predecessor Chain 12: KWS
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'KWS')
+ );
+
+SET @chain_id_12 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ @chain_id_12,
+ 1
+ );
+
+-- Predecessor Chain 13: EGD
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'EGD')
+ );
+
+SET @chain_id_13 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Pfaff Rade'),
+ @chain_id_13,
+ 1
+ );
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ @chain_id_13,
+ 2
+ );
+
+-- Predecessor Chain 14: EGD
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'EGD')
+ );
+
+SET @chain_id_14 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ @chain_id_14,
+ 1
+ );
+
+-- Predecessor Chain 15: LZZ
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'LZZ')
+ );
+
+SET @chain_id_15 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Urban AB'),
+ @chain_id_15,
+ 1
+ );
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ @chain_id_15,
+ 2
+ );
+
+-- Predecessor Chain 16: LZZ
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'LZZ')
+ );
+
+SET @chain_id_16 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Urban Rolo'),
+ @chain_id_16,
+ 1
+ );
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Urban AB'),
+ @chain_id_16,
+ 2
+ );
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'BEZEE'),
+ @chain_id_16,
+ 3
+ );
+
+-- Predecessor Chain 17: LZZ
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'LZZ')
+ );
+
+SET @chain_id_17 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Urban Rolo'),
+ @chain_id_17,
+ 1
+ );
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'ITGOA'),
+ @chain_id_17,
+ 2
+ );
+
+-- Predecessor Chain 18: LZZ
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'LZZ')
+ );
+
+SET @chain_id_18 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'ITGOA'),
+ @chain_id_18,
+ 1
+ );
+
+-- Predecessor Chain 19: STR
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'STR')
+ );
+
+SET @chain_id_19 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Zbůch'),
+ @chain_id_19,
+ 1
+ );
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ @chain_id_19,
+ 2
+ );
+
+-- Predecessor Chain 20: STR
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'STR')
+ );
+
+SET @chain_id_20 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ @chain_id_20,
+ 1
+ );
+
+-- Predecessor Chain 21: VOP
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'VOP')
+ );
+
+SET @chain_id_21 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Zbůch'),
+ @chain_id_21,
+ 1
+ );
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ @chain_id_21,
+ 2
+ );
+
+-- Predecessor Chain 22: VOP
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'VOP')
+ );
+
+SET @chain_id_22 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ @chain_id_22,
+ 1
+ );
+
+-- Predecessor Chain 23: KOL
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'KOL')
+ );
+
+SET @chain_id_23 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ @chain_id_23,
+ 1
+ );
+
+-- Predecessor Chain 24: LiPo
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'LiPo')
+ );
+
+SET @chain_id_24 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Zbůch'),
+ @chain_id_24,
+ 1
+ );
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ @chain_id_24,
+ 2
+ );
+
+-- Predecessor Chain 25: LiPo
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'LiPo')
+ );
+
+SET @chain_id_25 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ @chain_id_25,
+ 1
+ );
+
+-- Predecessor Chain 26: HH
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'HH')
+ );
+
+SET @chain_id_26 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ @chain_id_26,
+ 1
+ );
+
+-- Predecessor Chain 27: HH
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'HH')
+ );
+
+SET @chain_id_27 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Pfaff Rade'),
+ @chain_id_27,
+ 1
+ );
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'DEHAM'),
+ @chain_id_27,
+ 2
+ );
+
+-- Predecessor Chain 28: CNXMN
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'CNXMN')
+ );
+
+SET @chain_id_28 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Xiamen'),
+ @chain_id_28,
+ 1
+ );
+
+-- Predecessor Chain 29: CNSHA
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'CNSHA')
+ );
+
+SET @chain_id_29 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Shanghai'),
+ @chain_id_29,
+ 1
+ );
+
+-- Predecessor Chain 30: CNSHA
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'CNSHA')
+ );
+
+SET @chain_id_30 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Hangzhou'),
+ @chain_id_30,
+ 1
+ );
+
+-- Predecessor Chain 31: CNSHA
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'CNSHA')
+ );
+
+SET @chain_id_31 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Yangzhong'),
+ @chain_id_31,
+ 1
+ );
+
+-- Predecessor Chain 32: CNSHA
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'CNSHA')
+ );
+
+SET @chain_id_32 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Taicang'),
+ @chain_id_32,
+ 1
+ );
+
+-- Predecessor Chain 33: CNXMN
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'CNXMN')
+ );
+
+SET @chain_id_33 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Jinjiang'),
+ @chain_id_33,
+ 1
+ );
+
+-- Predecessor Chain 34: CNTAO
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'CNTAO')
+ );
+
+SET @chain_id_34 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Qingdao'),
+ @chain_id_34,
+ 1
+ );
+
+-- Predecessor Chain 35: CNXMN
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'CNXMN')
+ );
+
+SET @chain_id_35 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Fuqin'),
+ @chain_id_35,
+ 1
+ );
+
+-- Predecessor Chain 36: CNTAO
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'CNTAO')
+ );
+
+SET @chain_id_36 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Linfen'),
+ @chain_id_36,
+ 1
+ );
+
+-- Predecessor Chain 37: CNTGS
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'CNTGS')
+ );
+
+SET @chain_id_37 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Linfen'),
+ @chain_id_37,
+ 1
+ );
+
+-- Predecessor Chain 38: CNYTN
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'CNYTN')
+ );
+
+SET @chain_id_38 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Yantian'),
+ @chain_id_38,
+ 1
+ );
+
+-- Predecessor Chain 39: INMAA
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'INMAA')
+ );
+
+SET @chain_id_39 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Bangalore'),
+ @chain_id_39,
+ 1
+ );
+
+-- Predecessor Chain 40: INJNPT
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'INJNPT')
+ );
+
+SET @chain_id_40 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'ExM'),
+ @chain_id_40,
+ 1
+ );
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Bangalore'),
+ @chain_id_40,
+ 2
+ );
+
+-- Predecessor Chain 41: INJNPT
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'INJNPT')
+ );
+
+SET @chain_id_41 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'ExM'),
+ @chain_id_41,
+ 1
+ );
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Pune'),
+ @chain_id_41,
+ 2
+ );
+
+-- Predecessor Chain 42: INJNPT
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'INJNPT')
+ );
+
+SET @chain_id_42 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Pune'),
+ @chain_id_42,
+ 1
+ );
+
+-- Predecessor Chain 43: INMAA
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'INMAA')
+ );
+
+SET @chain_id_43 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Chennai'),
+ @chain_id_43,
+ 1
+ );
+
+-- Predecessor Chain 44: INJNPT
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'INJNPT')
+ );
+
+SET @chain_id_44 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'ExM'),
+ @chain_id_44,
+ 1
+ );
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Chennai'),
+ @chain_id_44,
+ 2
+ );
+
+-- Predecessor Chain 45: INJNPT
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'INJNPT')
+ );
+
+SET @chain_id_45 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'ExM'),
+ @chain_id_45,
+ 1
+ );
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Aurangabad'),
+ @chain_id_45,
+ 2
+ );
+
+-- Predecessor Chain 46: INJNPT
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'INJNPT')
+ );
+
+SET @chain_id_46 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Aurangabad'),
+ @chain_id_46,
+ 1
+ );
+
+-- Predecessor Chain 47: CNXMN
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'CNXMN')
+ );
+
+SET @chain_id_47 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'LX'),
+ @chain_id_47,
+ 1
+ );
+
+-- Predecessor Chain 48: INJNPT
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'INJNPT')
+ );
+
+SET @chain_id_48 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'ExM'),
+ @chain_id_48,
+ 1
+ );
+
+-- Predecessor Chain 49: CNXMN
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'CNXMN')
+ );
+
+SET @chain_id_49 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'JJ'),
+ @chain_id_49,
+ 1
+ );
+
+-- Predecessor Chain 50: HKMBP
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'HKMBP')
+ );
+
+SET @chain_id_50 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Shenzhen'),
+ @chain_id_50,
+ 1
+ );
+
+-- Predecessor Chain 51: CNSZX
+INSERT INTO node_predecessor_chain (
+ node_id
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'CNSZX')
+ );
+
+SET @chain_id_51 = LAST_INSERT_ID();
+
+INSERT INTO node_predecessor_entry (
+ node_id,
+ node_predecessor_chain_id,
+ sequence_number
+) VALUES (
+ (SELECT id FROM node WHERE external_mapping_id = 'Shenzhen'),
+ @chain_id_51,
+ 1
+ );