Skip to content

KB: ThysToys Bol.com Levertijden Aanpassen via Rules

Terug naar klant: ThysToys

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_id aan 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

  1. Log in op Bol.com Seller account
  2. Navigeer naar AanbodOverzicht
  3. Filter op leverbelofte
  4. 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:

  1. Verifieer dat de Bol Rule correct is aangepast
  2. Check of bol_uuid niet NULL is voor het offer
  3. Controleer Bol.com API connectivity
  4. Review Laravel logs: storage/logs/laravel.log
    tail -f storage/logs/laravel.log