Просмотр исходного кода

feat(limit-purchase): 新增商品限购规则更新功能

- 在 GoodsLimitPurchaseRuleEntity 中新增 updateRule 方法,用于更新商品限购规则
- 在 GoodsHook 中监听 GoodsUpdatedEvent 事件,自动同步商品限购规则
- 移除默认规则逻辑,确保规则更新准确性
runphp 3 месяцев назад
Родитель
Сommit
04b1cfe29d
2 измененных файлов с 19 добавлено и 5 удалено
  1. 7 5
      src/Entity/GoodsLimitPurchaseRuleEntity.php
  2. 12 0
      src/Hook/GoodsHook.php

+ 7 - 5
src/Entity/GoodsLimitPurchaseRuleEntity.php

@@ -20,11 +20,13 @@ class GoodsLimitPurchaseRuleEntity extends BaseEntity
         if (!$entity->isEmpty()) {
             return $entity->rule_id;
         }
-        // 默认规则
-        $defaultRule = LimitPurchaseRuleModel::where(['is_default' => true, 'status' => true])->findOrEmpty();
-        if (!$defaultRule->isEmpty()) {
-            return $defaultRule->id;
-        }
         return 0;
     }
+
+    public function updateRule(int $goodsID, int $ruleID): void
+    {
+        if( 0 < LimitPurchaseRuleModel::where('id', $ruleID)->count()) {
+            $this->replace()->save(['goods_id' => $goodsID, 'rule_id' => $ruleID]);
+        }
+    }
 }

+ 12 - 0
src/Hook/GoodsHook.php

@@ -3,6 +3,7 @@ declare(strict_types=1);
 namespace SixShop\LimitPurchase\Hook;
 
 use app\api\event\GoodsResponseEvent;
+use app\api\event\GoodsUpdatedEvent;
 use SixShop\Core\Attribute\Hook;
 use SixShop\LimitPurchase\Entity\GoodsLimitPurchaseRuleEntity;
 use SixShop\LimitPurchase\Entity\LimitPurchaseRuleEntity;
@@ -25,4 +26,15 @@ class GoodsHook
         $event->goods['limit_purchase_rule_options'] = $ruleList;
         $event->goods['limit_purchase_rule'] = $this->goodsLimitPurchaseRuleEntity->getRuleID($event->goods['id']);
     }
+
+    /**
+     * 商品更新
+     * @param GoodsUpdatedEvent $event
+     * @return void
+     */
+    #[Hook(GoodsUpdatedEvent::class)]
+    public function goodsUpdated(GoodsUpdatedEvent $event): void
+    {
+        $this->goodsLimitPurchaseRuleEntity->updateRule($event->data['id'], $event->data['goods']['limit_purchase_rule']);
+    }
 }