Browse Source

修改赠品中商品sku中逗号问题

llp 1 week ago
parent
commit
87ddf2ad56
1 changed files with 13 additions and 1 deletions
  1. 13 1
      packages/Longyi/FreeGift/src/Models/FreeGiftRule.php

+ 13 - 1
packages/Longyi/FreeGift/src/Models/FreeGiftRule.php

@@ -7,6 +7,7 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo;
 use Illuminate\Support\Facades\Storage;
 use Illuminate\Support\Facades\Storage;
 use Longyi\FreeGift\Config\Gift;
 use Longyi\FreeGift\Config\Gift;
 use Longyi\FreeGift\Contracts\FreeGiftRule as FreeGiftRuleContract;
 use Longyi\FreeGift\Contracts\FreeGiftRule as FreeGiftRuleContract;
+use Longyi\FreeGift\Services\GiftProductResolver;
 use Webkul\CartRule\Models\CartRule;
 use Webkul\CartRule\Models\CartRule;
 
 
 /**
 /**
@@ -78,6 +79,11 @@ class FreeGiftRule extends Model implements FreeGiftRuleContract
     /**
     /**
      * 赠品 SKU 列表。
      * 赠品 SKU 列表。
      *
      *
+     * `sku` 是「逗号分隔多个 SKU」,但**商品 SKU 自身也可能含逗号**:
+     * 多件套商品就是 `LD--13*4Wig--24,LB--5*7Wig--RTG--20` 这样的 SKU,
+     * 直接 explode 会被拆成两个不存在的 SKU,赠品永远解析不到商品。
+     * 所以先拿整串去匹配商品/变体,命中就当成一个 SKU;否则才按逗号拆。
+     *
      * @return string[]
      * @return string[]
      */
      */
     public function skuList(): array
     public function skuList(): array
@@ -86,7 +92,13 @@ class FreeGiftRule extends Model implements FreeGiftRuleContract
             return [];
             return [];
         }
         }
 
 
-        return array_values(array_filter(array_map('trim', explode(',', $this->sku))));
+        $whole = trim((string) $this->sku);
+
+        if (str_contains($whole, ',') && app(GiftProductResolver::class)->resolve($whole)) {
+            return [$whole];
+        }
+
+        return array_values(array_filter(array_map('trim', explode(',', $whole))));
     }
     }
 
 
     /**
     /**