From 2ae5cbead490c322ec74cfbd3a433c511d54a9a4 Mon Sep 17 00:00:00 2001 From: wangxiaowei Date: Wed, 30 Oct 2024 16:35:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9C=AC=E5=9C=B0=E7=94=9F?= =?UTF-8?q?=E6=B4=BB=E8=B4=AD=E7=89=A9=E8=BD=A6=E5=95=86=E5=93=81=E6=95=B0?= =?UTF-8?q?=E9=87=8F=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/controller/LocalStoreGoods.php | 18 +++++++- app/api/logic/LocalStoreGoodsCartLogic.php | 45 +++++++++++++++++++ .../validate/LocalStoreGoodsCartValidate.php | 3 +- .../model/localstore/LocalStoreGoodsCart.php | 9 ++++ 4 files changed, 72 insertions(+), 3 deletions(-) diff --git a/app/api/controller/LocalStoreGoods.php b/app/api/controller/LocalStoreGoods.php index a9274236..52f135ed 100755 --- a/app/api/controller/LocalStoreGoods.php +++ b/app/api/controller/LocalStoreGoods.php @@ -4,6 +4,7 @@ namespace app\api\controller; use app\api\logic\LocalStoreGoodsCartLogic; use app\api\logic\LocalStoreGoodsLogic; +use app\api\validate\CartValidate; use app\api\validate\LocalStoreGoodsCartValidate; use app\api\validate\LocalStoreGoodsValidate; use app\common\basics\Api; @@ -12,7 +13,7 @@ use app\common\server\JsonServer; class LocalStoreGoods extends Api { - public $like_not_need_login = ['lists', 'addCart', 'getCartGoods', 'num']; + public $like_not_need_login = ['lists', 'addCart', 'getCartGoods', 'num', 'modifyCart']; // 商品列表 public function lists() @@ -128,4 +129,19 @@ class LocalStoreGoods extends Api $form = $this->request->post(); return JsonServer::success('', LocalStoreGoodsCartLogic::cartNum($form, $this->user_id)); } + + public function modifyCart() + { + $form = $this->request->post(); + (new LocalStoreGoodsCartValidate())->goCheck('change', ['user_id' => $this->user_id]); + + try { + $result = LocalStoreGoodsCartLogic::modifyCart($form, $this->user_id);; + if ($result) { + return JsonServer::success('操作成功'); + } + } catch (\Exception $e) { + return JsonServer::error($e->getMessage()); + } + } } \ No newline at end of file diff --git a/app/api/logic/LocalStoreGoodsCartLogic.php b/app/api/logic/LocalStoreGoodsCartLogic.php index 15d3425a..a9075abc 100644 --- a/app/api/logic/LocalStoreGoodsCartLogic.php +++ b/app/api/logic/LocalStoreGoodsCartLogic.php @@ -91,4 +91,49 @@ class LocalStoreGoodsCartLogic extends Logic ->sum('c.goods_num'); return ['num' => $num ?? 0]; } + + public static function modifyCart($post, $user_id) + { + Db::startTrans(); + try { + if ($post['cart_id']) { + $cart = LocalStoreGoodsCart::getSelfCart($user_id, $post['cart_id']); + if (!empty($cart)) { + if ($cart['item_id'] == 0) { + // 单规格商品 + $item = LocalStoreGoods::where('id', $cart['lsg_id'])->field('price')->find(); + if ($cart['goods_num'] + $post['goods_num'] > 999) { + throw new \Exception('商品数量超出限制'); + } + } else { + // 多规格商品 + $item = LocalStoreGoodsItem::where('id', $cart['item_id'])->field('price, stock')->find(); + if ($cart['goods_num'] + $post['goods_num'] > $item['stock']) { + throw new \Exception('商品数量超出限制'); + } + } + + $price = number_format($post['num'] * $item['price'], 2, '.', ''); + $goods_num = $cart['goods_num'] + $post['goods_num']; + + LocalStoreGoodsCart::where('id', $post['cart_id'])->update([ + 'goods_num' => $goods_num + ]); + + } else { + throw new \Exception('商品信息不存在'); + } + } else { + throw new \Exception('ID不存在'); + } + Db::commit(); + return [ + 'total_amount' => $price + ]; + } catch (Exception $e) { + Db::rollback(); + self::$error = $e->getMessage(); + return false; + } + } } \ No newline at end of file diff --git a/app/api/validate/LocalStoreGoodsCartValidate.php b/app/api/validate/LocalStoreGoodsCartValidate.php index befa9858..7b34eb86 100755 --- a/app/api/validate/LocalStoreGoodsCartValidate.php +++ b/app/api/validate/LocalStoreGoodsCartValidate.php @@ -3,8 +3,7 @@ namespace app\api\validate; use app\common\basics\Validate; -use app\common\model\LocalStore\LocalStoreGoodsCart; - +use app\common\model\localstore\LocalStoreGoodsCart; class LocalStoreGoodsCartValidate extends Validate { diff --git a/app/common/model/localstore/LocalStoreGoodsCart.php b/app/common/model/localstore/LocalStoreGoodsCart.php index 73021466..85f7933f 100644 --- a/app/common/model/localstore/LocalStoreGoodsCart.php +++ b/app/common/model/localstore/LocalStoreGoodsCart.php @@ -29,4 +29,13 @@ class LocalStoreGoodsCart extends Models return LocalStoreGoodsItem::where('id', $data['item_id'])->field('image, spec_value_str, price')->find()->toArray(); } } + + public static function getSelfCart($user_id, $cart_id = 0) + { + if ($cart_id > 0) { + return self::where(['id' => $cart_id, 'user_id' => $user_id, 'is_delete' => 0])->find(); + } else { + return self::where(['user_id' => $user_id, 'is_delete' => 0])->select(); + } + } } \ No newline at end of file