From 33f004d1196d056b99a3886de070d429315bac39 Mon Sep 17 00:00:00 2001
From: quanwei <419654421@qq.com>
Date: Thu, 11 Dec 2025 18:12:38 +0800
Subject: [PATCH] 将分类改为多选 修复活动报名 实现成为vip会员时根据活动报名信息绑定下级

---
 admin/app/common/model/release/Cart.php |  231 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 231 insertions(+), 0 deletions(-)

diff --git a/admin/app/common/model/release/Cart.php b/admin/app/common/model/release/Cart.php
new file mode 100644
index 0000000..807c36d
--- /dev/null
+++ b/admin/app/common/model/release/Cart.php
@@ -0,0 +1,231 @@
+<?php
+
+namespace app\api\model\plus\repair;
+
+use app\api\model\order\Order as OrderModel;
+use think\facade\Cache;
+use app\api\model\plus\repair\Project as ProjectModel;
+use app\common\model\supplier\Supplier as SupplierModel;
+use app\common\library\helper;
+use app\common\model\plus\repair\Cart as CartModel;
+
+/**
+ * 购物车管理
+ */
+class Cart extends CartModel
+{
+    // 错误信息
+    public $error = '';
+
+    /**
+     * 购物车列表 (含商品信息)
+     */
+    public function getList($user, $cart_ids = [])
+    {
+        // 获取购物车商品列表
+        return $this->getOrderProjectList($user, $cart_ids);
+    }
+
+    /**
+     * 获取购物车列表
+     */
+    public function getCartList($cartIds = null)
+    {
+        if (empty($cartIds)) return static::$cart;
+        $cartList = [];
+        $indexArr = (strpos($cartIds, ',') !== false) ? explode(',', $cartIds) : [$cartIds];
+        foreach ($indexArr as $index) {
+            isset(static::$cart[$index]) && $cartList[$index] = static::$cart[$index];
+        }
+        return $cartList;
+    }
+
+    /**
+     * 获取购物车中的商品列表
+     */
+    public function getOrderProjectList($user, $cart_ids = [])
+    {
+        // 购物车列表
+        $projectList = [];
+        // 获取购物车列表
+        $model = $this;
+        if ($cart_ids) {
+            $model = $model->where('cart_id', 'in', explode(',', $cart_ids));
+        }
+        $cartList = $model->where('user_id', '=', $user['user_id'])->select();
+        if (empty($cartList)) {
+            $this->setError('当前购物车没有项目');
+            return $projectList;
+        }
+        // 购物车中所有商品id集
+        $projectIds = array_unique(helper::getArrayColumn($cartList, 'project_id'));
+        // 获取并格式化商品数据
+        $sourceData = (new ProjectModel)->getListByIds($projectIds);
+        $sourceData = helper::arrayColumn2Key($sourceData, 'project_id');
+        // 供应商信息
+        $supplierData = [];
+        // 格式化购物车数据列表
+        foreach ($cartList as $key => $item) {
+            // 判断商品不存在则自动删除
+            if (!isset($sourceData[$item['project_id']])) {
+                $this->delete($key);
+                continue;
+            }
+            // 项目信息
+            $project = clone $sourceData[$item['project_id']];
+            // 判断商品是否已删除
+            if (empty($project)) {
+                $this->delete($key);
+                continue;
+            }
+
+            // 购买数量
+            $project['total_num'] = $item['total_num'];
+            // 总价
+            $project['total_price'] = bcmul($project['price'], $item['total_num'], 2);
+            // 总佣金
+            $project['total_money'] = bcmul($project['money'], $item['total_num'], 2);
+            // 供应商
+            $project['shop_supplier_id'] = $item['shop_supplier_id'];
+            //购物车id
+            $project['cart_id'] = $item['cart_id'];
+            $projectList[] = $project;
+        }
+
+        $supplierIds = array_unique(helper::getArrayColumn($projectList, 'shop_supplier_id'));
+        foreach($supplierIds as $supplierId){
+            $supplierData[] = [
+                'shop_supplier_id' => $supplierId,
+                'supplier' => SupplierModel::detail($supplierId),
+                'projectList' => $this->getProjectBySupplier($supplierId, $projectList)
+            ];
+        }
+        return $supplierData;
+    }
+
+    private function getProjectBySupplier($supplierId, $projectList)
+    {
+        $result = [];
+        foreach ($projectList as $project){
+            if($project['shop_supplier_id'] == $supplierId){
+                array_push($result, $project);
+            }
+        }
+        return $result;
+    }
+
+    /**
+     * 加入购物车
+     */
+    public function add($user, $projectId, $projectNum)
+    {
+        $model = $this;
+        // 获取信息
+        $project = ProjectModel::detail($projectId);
+
+        // 获取商品购物车信息
+        $cartDetail = $model->where('user_id', '=', $user['user_id'])
+            ->where('project_id', '=', $projectId)
+            ->find();
+        // 验证能否加入
+        if (!$project_price = $this->checkProject($project)) {
+            return false;
+        }
+
+        // 记录到购物车列表
+        if ($cartDetail) {
+            return $cartDetail->save(['total_num' => $cartDetail['total_num'] + $projectNum]);
+        } else {
+            return $this->save([
+                'user_id' => $user['user_id'],
+                'project_id' => $projectId,
+                'total_num' => $projectNum,
+                'join_price' => $project_price,
+                'shop_supplier_id' => $project['shop_supplier_id'],
+                'app_id' => self::$app_id,
+            ]);
+        }
+    }
+
+    /**
+     * 验证是否可以下单
+     */
+    private function checkProject($project)
+    {
+        // 判断项目
+        if (!$project) {
+            $this->setError('很抱歉,信息不存在');
+            return false;
+        }
+
+        return $project['price'];
+    }
+
+    /**
+     * 减少购物车中某商品数量
+     */
+    public function sub($user, $projectId)
+    {
+        $cartDetail = $this->where('user_id', '=', $user['user_id'])
+            ->where('project_id', '=', $projectId)
+            ->find();
+        if ($cartDetail['total_num'] <= 1) {
+            return $cartDetail->delete();
+        } else {
+            $cartDetail->save(['total_num' => $cartDetail['total_num'] - 1]);
+        }
+    }
+
+    /**
+     * 删除购物车中指定商品
+     * @param string $cartIds (支持字符串ID集)
+     */
+    public function setDelete($user, $cart_id)
+    {
+        return $this->where('user_id', '=', $user['user_id'])->where('cart_id', 'in', explode(',', $cart_id))->delete();
+    }
+
+    /**
+     * 获取当前用户购物车商品总数量(含件数)
+     */
+    public function getTotalNum($user)
+    {
+        $num = $this->where('user_id', '=', $user['user_id'])->sum('total_num');
+        return $num ? $num : 0;
+    }
+
+    /**
+     * 获取当前用户购物车商品总数量(不含件数)
+     */
+    public function getProductNum($user)
+    {
+        return $this->where('user_id', '=', $user['user_id'])->count();
+    }
+
+    /**
+     * 清空当前用户购物车
+     */
+    public function clearAll($user, $cartIds)
+    {
+        return $this->where('user_id', '=', $user['user_id'])
+            ->where('cart_id', 'in', explode(',', $cartIds))
+            ->delete();
+    }
+
+    /**
+     * 设置错误信息
+     */
+    private function setError($error)
+    {
+        empty($this->error) && $this->error = $error;
+    }
+
+    /**
+     * 获取错误信息
+     */
+    public function getError()
+    {
+        return $this->error;
+    }
+
+}
\ No newline at end of file

--
Gitblit v1.9.2