Kaynağa Gözat

feat(limit-purchase): 添加商品限购规则获取功能

- 在 GoodsLimitPurchaseRuleEntity 中新增 getRuleID 方法,用于获取商品关联的限购规则 ID
- 新增 GoodsHook 钩子类,在商品响应事件中注入限购规则选项和当前规则
- 注册 GoodsHook 到扩展的钩子列表中
- 移除 Extension 类中的空定时任务方法
- 引入必要的模型和实体类依赖
runphp 3 ay önce
ebeveyn
işleme
b14a3bb8c9

+ 14 - 1
src/Entity/GoodsLimitPurchaseRuleEntity.php

@@ -5,6 +5,7 @@ namespace SixShop\LimitPurchase\Entity;
 
 use SixShop\Core\Entity\BaseEntity;
 use SixShop\LimitPurchase\Model\GoodsLimitPurchaseRuleModel;
+use SixShop\LimitPurchase\Model\LimitPurchaseRuleModel;
 
 /**
  * 商品限购规则关联实体类
@@ -13,5 +14,17 @@ use SixShop\LimitPurchase\Model\GoodsLimitPurchaseRuleModel;
  */
 class GoodsLimitPurchaseRuleEntity extends BaseEntity
 {
-    //
+    public function getRuleID(int $goodsID): int
+    {
+        $entity = $this->where('goods_id', $goodsID)->findOrEmpty();
+        if (!$entity->isEmpty()) {
+            return $entity->rule_id;
+        }
+        // 默认规则
+        $defaultRule = LimitPurchaseRuleModel::where(['is_default' => true, 'status' => true])->findOrEmpty();
+        if (!$defaultRule->isEmpty()) {
+            return $defaultRule->id;
+        }
+        return 0;
+    }
 }

+ 2 - 9
src/Extension.php

@@ -4,6 +4,7 @@ declare(strict_types=1);
 namespace SixShop\LimitPurchase;
 
 use SixShop\Core\ExtensionAbstract;
+use SixShop\LimitPurchase\Hook\GoodsHook;
 
 class Extension extends ExtensionAbstract
 {
@@ -13,7 +14,7 @@ class Extension extends ExtensionAbstract
     public function getHooks(): array
     {
         return [
-            // 添加限购相关的钩子类
+            GoodsHook::class,
         ];
     }
 
@@ -23,14 +24,6 @@ class Extension extends ExtensionAbstract
         return dirname(__DIR__);
     }
 
-    #[\Override]
-    public function getCronJobs(): array
-    {
-        return [
-            // 添加限购相关的定时任务
-        ];
-    }
-
     public function getCity(int $province): array
     {
         $province = substr((string)$province, 0, 2);

+ 28 - 0
src/Hook/GoodsHook.php

@@ -0,0 +1,28 @@
+<?php
+declare(strict_types=1);
+namespace SixShop\LimitPurchase\Hook;
+
+use app\api\event\GoodsResponseEvent;
+use SixShop\Core\Attribute\Hook;
+use SixShop\LimitPurchase\Entity\GoodsLimitPurchaseRuleEntity;
+use SixShop\LimitPurchase\Entity\LimitPurchaseRuleEntity;
+
+class GoodsHook
+{
+    public function __construct(
+        private LimitPurchaseRuleEntity $limitPurchaseRuleEntity,
+        private GoodsLimitPurchaseRuleEntity $goodsLimitPurchaseRuleEntity,
+    )
+    {
+    }
+
+    #[Hook(GoodsResponseEvent::class)]
+    public function goodsResponse(GoodsResponseEvent $event): void
+    {
+        $ruleList = $this->limitPurchaseRuleEntity->where('status', true)
+            ->field(['id', 'name'])
+            ->select();
+        $event->goods['limit_purchase_rule_options'] = $ruleList;
+        $event->goods['limit_purchase_rule'] = $this->goodsLimitPurchaseRuleEntity->getRuleID($event->goods['id']);
+    }
+}