KB: ThysToys Bol.com Levertijden Aanpassen via Rules¶
Procedure overzicht
Deze procedure beschrijft hoe je massaal levertijden aanpast voor Bol.com aanbod door een Bol Rule te wijzigen en alle getroffen offers te updaten.
Situatiebeschrijving¶
Use case: Wijziging van levertijd voor alle producten in een Bol.com account vanwege externe omstandigheden (zoals PostNL stakingen).
Voorbeeld scenario: Alle producten met "MijnLeverbelofte" omzetten naar "1-2d" levertijd.
Stap 1: Analyseer Huidige Situatie¶
1.1 Identificeer de Bol Rule¶
Gebruik een SQL query om te bepalen welke Rule de levertijd instelt:
SELECT *
FROM `thystoys_bol_2021_prod`.`rules`
WHERE (`consequences` LIKE '%MijnLeverbelofte%')
AND (`bol_account_id` = 4)
ORDER BY `id`
LIMIT 300 OFFSET 0;
Account ID mapping
- Account ID 4 = Trampolinewinkel BE → Bol NL aanbod
- Pas
bol_account_idaan naar het juiste account
Noteer:
- Rule ID (bijv.
#133) - Huidig aantal getroffen offers
1.2 Tel Getroffen Offers¶
Query om te tellen hoeveel offers aangepast moeten worden:
SELECT COUNT(*) as `total_offers`
FROM products
JOIN bol_offers ON bol_offers.`reference` = products.`reference`
AND bol_offers.`bol_account_id` = 4
WHERE products.`active_bol_tw_be` = 1
AND bol_offers.`fulfilment_delivery_code` = 'MijnLeverbelofte'
AND bol_offers.`bol_uuid` IS NOT NULL;
Documentatie voorbeeld
Situatie voor aanpassing op zo 7 dec:
- Bol account: "Trampolinewinkel BE" → Bol NL aanbod
- Aantal offers met "MijnLeverbelofte": 3081
- Rule ID: #133
Stap 2: Wijzig de Bol Rule¶
2.1 Bepaal Nieuwe Rule Configuratie¶
Van:
[{
"type": "stringReplace",
"value": "MijnLeverbelofte",
"attribute": "bol_offer_fulfilment_delivery_code",
"forceValue": false
}]
Naar:
[{
"type": "stringReplace",
"value": "1-2d",
"attribute": "bol_offer_fulfilment_delivery_code",
"forceValue": false
}]
2.2 Voer Rule Update Uit¶
UPDATE `thystoys_bol_2021_prod`.`rules`
SET `consequences` = '[{\"type\": \"stringReplace\", \"value\": \"1-2d\", \"attribute\": \"bol_offer_fulfilment_delivery_code\", \"forceValue\": false}]'
WHERE `id` = 133;
Verifieer Rule ID
Controleer altijd of je het juiste Rule ID gebruikt voordat je de update uitvoert!
2.3 Test met Enkel Product¶
Selecteer een testproduct:
SELECT
products.reference,
products.title,
bol_offers.`fulfilment_delivery_code`
FROM products
JOIN bol_offers ON bol_offers.`reference` = products.`reference`
AND bol_offers.`bol_account_id` = 4
WHERE products.`active_bol_tw_be` = 1
AND bol_offers.`fulfilment_delivery_code` = 'MijnLeverbelofte'
AND bol_offers.`bol_uuid` IS NOT NULL
LIMIT 1;
Test het offer update commando:
php8.1 artisan bol:offers-force-update --bol_account=4 --product_reference=<REFERENCE>
Verifieer in de database of de levertijd correct is aangepast.
Stap 3: Genereer Batch Update Scripts¶
3.1 Exporteer Alle Te Updaten Producten¶
SELECT
CONCAT('php8.1 artisan bol:offers-force-update --bol_account=4 --product_reference=', products.reference) AS `command`,
products.reference,
products.title,
bol_offers.`fulfilment_delivery_code`
FROM products
JOIN bol_offers ON bol_offers.`reference` = products.`reference`
AND bol_offers.`bol_account_id` = 4
WHERE products.`active_bol_tw_be` = 1
AND bol_offers.`fulfilment_delivery_code` = 'MijnLeverbelofte'
AND bol_offers.`bol_uuid` IS NOT NULL;
Exporteer resultaat naar CSV: TT-XXXX-Bol-NL-offers-to-update.csv
3.2 Splits in Batch Scripts¶
Performance optimalisatie
Bij grote aantallen (3000+ offers) verdeel je de update in meerdere batch scripts voor parallelle uitvoering.
Splits de commando's in 3 delen:
TT-XXXX-Bol-NL-offers-update-part1.sh(offers 1-1000)TT-XXXX-Bol-NL-offers-update-part2.sh(offers 1001-2000)TT-XXXX-Bol-NL-offers-update-part3.sh(offers 2001-3000+)
Bash script structuur:
#!/bin/bash
# TT-XXXX-Bol-NL-offers-update-part1.sh
cd ~/bol.thystoys.nl
php8.1 artisan bol:offers-force-update --bol_account=4 --product_reference=REF001
php8.1 artisan bol:offers-force-update --bol_account=4 --product_reference=REF002
# ... etc
Stap 4: Voer Batch Updates Uit op Server¶
4.1 Upload Scripts naar Server¶
Upload de 3 bash scripts naar de server directory:
# forge@FL09FOR-TYS05 ~/bol.thystoys.nl $
~/bol.thystoys.nl/
4.2 Start Parallel Screen Sessions¶
Voer elk script uit in een aparte screen sessie voor parallelle verwerking:
cd ~/bol.thystoys.nl
# Start part 1
screen -S TT-XXXX-part1
bash TT-XXXX-Bol-NL-offers-update-part1.sh > TT-XXXX-Bol-NL-offers-update-part1.log
# Ctrl+A+D om te detachen
# Start part 2
screen -S TT-XXXX-part2
bash TT-XXXX-Bol-NL-offers-update-part2.sh > TT-XXXX-Bol-NL-offers-update-part2.log
# Ctrl+A+D om te detachen
# Start part 3
screen -S TT-XXXX-part3
bash TT-XXXX-Bol-NL-offers-update-part3.sh > TT-XXXX-Bol-NL-offers-update-part3.log
# Ctrl+A+D om te detachen
4.3 Monitor Voortgang¶
Screen sessies bekijken:
# Lijst met actieve screens
screen -ls
# Herverbinden met een screen
screen -r TT-XXXX-part1
Log monitoring:
# Real-time log volgen
tail -f TT-XXXX-Bol-NL-offers-update-part1.log
# Aantal verwerkte regels tellen
wc -l TT-XXXX-Bol-NL-offers-update-part1.log
Verwerkingstijd
Indicatieve doorlooptijd: ~1-2 minuten per 100 offers
- 1000 offers: ~10-20 minuten
- 3000 offers (3 parallel): ~10-20 minuten totaal
Stap 5: Verificatie¶
5.1 Controleer Database Status¶
SELECT
COUNT(*) as `remaining_old_delivery`,
bol_offers.`fulfilment_delivery_code`
FROM products
JOIN bol_offers ON bol_offers.`reference` = products.`reference`
AND bol_offers.`bol_account_id` = 4
WHERE products.`active_bol_tw_be` = 1
AND bol_offers.`fulfilment_delivery_code` = 'MijnLeverbelofte'
AND bol_offers.`bol_uuid` IS NOT NULL
GROUP BY bol_offers.`fulfilment_delivery_code`;
Verwacht resultaat: 0 offers met oude levertijd
5.2 Controleer Bol.com Seller Dashboard¶
- Log in op Bol.com Seller account
- Navigeer naar Aanbod → Overzicht
- Filter op leverbelofte
- Verifieer dat alle offers de nieuwe levertijd tonen
Succesvolle uitvoering
Alle 3081 offers succesvol geüpdatet van "MijnLeverbelofte" naar "1-2d"
Referenties¶
Veelvoorkomende Scenario's¶
Van: 1-2d Naar: MijnLeverbelofte
{"type": "stringReplace", "value": "MijnLeverbelofte", "attribute": "bol_offer_fulfilment_delivery_code"}
Van: 1-2d Naar: 2-3d
{"type": "stringReplace", "value": "2-3d", "attribute": "bol_offer_fulfilment_delivery_code"}
Van: 2-3d Naar: 24h
{"type": "stringReplace", "value": "24h", "attribute": "bol_offer_fulfilment_delivery_code"}
Troubleshooting¶
Problem: Screen sessie crashed¶
Oplossing:
# Check of screen nog draait
screen -ls
# Herstart script als nodig
screen -S TT-XXXX-part1-retry
bash TT-XXXX-Bol-NL-offers-update-part1.sh > TT-XXXX-part1-retry.log
Problem: API rate limiting errors¶
Oplossing: Voeg sleeps toe tussen batch commando's:
php8.1 artisan bol:offers-force-update --bol_account=4 --product_reference=REF001
sleep 0.5
php8.1 artisan bol:offers-force-update --bol_account=4 --product_reference=REF002
Problem: Offers worden niet geüpdatet¶
Checks:
- Verifieer dat de Bol Rule correct is aangepast
- Check of
bol_uuidniet NULL is voor het offer - Controleer Bol.com API connectivity
- Review Laravel logs:
storage/logs/laravel.logtail -f storage/logs/laravel.log