Требование: получить продукт, заданный по имени, и все материалы, необходимые для создания этого продукта.
Дано: таблица MYSQL с именем product_entries со столбцами, такими как id, product_name, количество продукта, имя_ материала, material_quantity.
Итак, для примера, скажем, чтобы построить 1 стол, мне понадобится 4 ножки, 1 нижнее основание, 1 верхнее основание. И в дальнейшем для построения 1 нижней базы мне понадобится несколько bb-part1, bb-part2 и bb-part3 и так далее для верхней базы. Записи выглядят следующим образом:
Итак, если пользователь вводит таблицу в качестве входных данных, он должен получить дерево с таблицей и всеу детей под ним, то есть у стола, будут ноги, нижняя часть основания и верхняя часть основания;нижняя база будет иметь bb-part1, bb-part2 и bb-part3 под ней, а верхняя база будет иметь ub-part1 под ней.
Чтобы добиться этого, я следовал этому post где было дано, как построить дерево с N числом детей. Но проблема, с которой я сталкиваюсь, заключается в том, что мой выход содержит только элементы на уровне 1.
Моя логика выглядит следующим образом:
public void getAllPartsForMaterial(final String partNumber) {
if (partNumber == null || partNumber.trim().isEmpty()) {
throw new IllegalArgumentException("Invalid part number received");
}
Node<ItemDTO> root = new Node<>(ItemDTO.builder().partNumber(partNumber).build());
getParts(root, partNumber);
System.out.println(root.getChildren());
}
private void getParts(Node<ItemDTO> root, final String partNumber) {
List<Material> materials = materialRepository
.findAllByProduct(partNumber);
if(!materials.isEmpty()) {
materials.forEach(material -> {
Node<ItemDTO> child = new Node<>(ItemDTO.builder()
.partNumber(material.getMaterial())
.quantity(material.getMaterialQuantity())
.build());
root.addChild(child);
getParts(child, material.getMaterial());
});
}
}
Таким образом, мой вывод выглядит так:
[Node{data=ItemDTO(partNumber=legs, quantity=4.0)}, Node{data=ItemDTO(partNumber=bottom-base, quantity=1.0)}]
Как добавить все элементы в это дерево, кто-нибудь может сказать, что мне не хватает?