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