1.提交缺失的东西
This commit is contained in:
98
app/api/controller/CartController.php
Normal file
98
app/api/controller/CartController.php
Normal file
@ -0,0 +1,98 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | likeshop开源商城系统
|
||||
// +----------------------------------------------------------------------
|
||||
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
|
||||
// | gitee下载:https://gitee.com/likeshop_gitee
|
||||
// | github下载:https://github.com/likeshop-github
|
||||
// | 访问官网:https://www.likeshop.cn
|
||||
// | 访问社区:https://home.likeshop.cn
|
||||
// | 访问手册:http://doc.likeshop.cn
|
||||
// | 微信公众号:likeshop技术社区
|
||||
// | likeshop系列产品在gitee、github等公开渠道开源版本可免费商用,未经许可不能去除前后端官方版权标识
|
||||
// | likeshop系列产品收费版本务必购买商业授权,购买去版权授权后,方可去除前后端官方版权标识
|
||||
// | 禁止对系统程序代码以任何目的,任何形式的再发布
|
||||
// | likeshop团队版权所有并拥有最终解释权
|
||||
// +----------------------------------------------------------------------
|
||||
// | author: likeshop.cn.team
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
namespace app\api\controller;
|
||||
|
||||
use app\api\logic\CartLogic;
|
||||
|
||||
/**
|
||||
* 购物车
|
||||
* Class Cart
|
||||
* @package app\api\controller
|
||||
*/
|
||||
class CartController extends BaseApiController
|
||||
{
|
||||
|
||||
public function lists()
|
||||
{
|
||||
$this->success('', CartLogic::lists($this->userId));
|
||||
}
|
||||
|
||||
|
||||
public function add()
|
||||
{
|
||||
$post = $this->request->post();
|
||||
$check = $this->validate($post, 'app\api\validate\Cart.add');
|
||||
if (true !== $check) {
|
||||
$this->fail($check);
|
||||
}
|
||||
$res = CartLogic::add($post['item_id'], $post['goods_num'], $this->userId);
|
||||
if ($res === true) {
|
||||
$this->success('加入成功');
|
||||
}
|
||||
$this->fail($res);
|
||||
}
|
||||
|
||||
|
||||
public function change()
|
||||
{
|
||||
$post = $this->request->post();
|
||||
$check = $this->validate($post, 'app\api\validate\Cart.change');
|
||||
if ($check !== true) {
|
||||
$this->_error($check);
|
||||
}
|
||||
$res = CartLogic::change($post['cart_id'], $post['goods_num']);
|
||||
if ($res === true) {
|
||||
$this->_success();
|
||||
}
|
||||
$this->_error($res);
|
||||
}
|
||||
|
||||
|
||||
public function del()
|
||||
{
|
||||
$post = $this->request->post();
|
||||
$check = $this->validate($post, 'app\api\validate\Cart.del');
|
||||
if (true !== $check) {
|
||||
$this->_error($check);
|
||||
}
|
||||
if (CartLogic::del($post['cart_id'], $this->user_id)) {
|
||||
$this->_success('删除成功');
|
||||
}
|
||||
$this->_error('删除失败');
|
||||
}
|
||||
|
||||
|
||||
public function selected()
|
||||
{
|
||||
$post = $this->request->post();
|
||||
$check = $this->validate($post, 'app\api\validate\Cart.selected');
|
||||
if (true !== $check) {
|
||||
$this->_error($check);
|
||||
}
|
||||
CartLogic::selected($post, $this->user_id);
|
||||
$this->_success();
|
||||
}
|
||||
|
||||
|
||||
public function num()
|
||||
{
|
||||
$this->_success('',CartLogic::cartNum($this->user_id));
|
||||
}
|
||||
}
|
||||
198
app/api/logic/CartLogic.php
Normal file
198
app/api/logic/CartLogic.php
Normal file
@ -0,0 +1,198 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | likeshop开源商城系统
|
||||
// +----------------------------------------------------------------------
|
||||
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
|
||||
// | gitee下载:https://gitee.com/likeshop_gitee
|
||||
// | github下载:https://github.com/likeshop-github
|
||||
// | 访问官网:https://www.likeshop.cn
|
||||
// | 访问社区:https://home.likeshop.cn
|
||||
// | 访问手册:http://doc.likeshop.cn
|
||||
// | 微信公众号:likeshop技术社区
|
||||
// | likeshop系列产品在gitee、github等公开渠道开源版本可免费商用,未经许可不能去除前后端官方版权标识
|
||||
// | likeshop系列产品收费版本务必购买商业授权,购买去版权授权后,方可去除前后端官方版权标识
|
||||
// | 禁止对系统程序代码以任何目的,任何形式的再发布
|
||||
// | likeshop团队版权所有并拥有最终解释权
|
||||
// +----------------------------------------------------------------------
|
||||
// | author: likeshop.cn.team
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
namespace app\api\logic;
|
||||
|
||||
use app\api\model\Cart;
|
||||
use app\common\model\Footprint;
|
||||
use app\common\server\UrlServer;
|
||||
use think\Db;
|
||||
use think\facade\Hook;
|
||||
|
||||
class CartLogic
|
||||
{
|
||||
//添加购物车
|
||||
public static function add($item_id, $goods_num, $user_id)
|
||||
{
|
||||
$goods = Db::name('goods g')
|
||||
->field('i.goods_id')
|
||||
->join('goods_item i', 'i.goods_id = g.id')
|
||||
->where('i.id', $item_id)
|
||||
->find();
|
||||
|
||||
$time = time();
|
||||
$where = [
|
||||
'user_id' => $user_id,
|
||||
'item_id' => $item_id,
|
||||
];
|
||||
$info = Cart::where($where)->find();
|
||||
|
||||
$cart_num = $goods_num + (isset($info) ? $info['goods_num'] : 0);
|
||||
|
||||
if (self::checkStock($item_id, $cart_num)) {
|
||||
return '很抱歉,商品库存不足';
|
||||
}
|
||||
|
||||
if ($info) {
|
||||
//购物车内已有该商品
|
||||
$update_data = [
|
||||
'goods_num' => $goods_num + $info['goods_num'],
|
||||
'update_time' => $time,
|
||||
];
|
||||
$res = Db::name('cart')
|
||||
->where('id', $info['id'])
|
||||
->update($update_data);
|
||||
} else {
|
||||
//新增购物车记录
|
||||
$data = [
|
||||
'user_id' => $user_id,
|
||||
'goods_id' => $goods['goods_id'],
|
||||
'goods_num' => $goods_num,
|
||||
'item_id' => $item_id,
|
||||
'create_time' => $time,
|
||||
];
|
||||
$res = Db::name('cart')->insert($data);
|
||||
}
|
||||
|
||||
if (!$res) {
|
||||
return '添加失败';
|
||||
}
|
||||
|
||||
// 钩子-记录足迹(添加购物车)
|
||||
Hook::listen('footprint', [
|
||||
'type' => Footprint::add_cart,
|
||||
'user_id' => $user_id,
|
||||
'foreign_id' => $goods['goods_id'] //商品ID
|
||||
]);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//删除购物车
|
||||
public static function del($cart_id, $user_id)
|
||||
{
|
||||
return Db::name('cart')->where(['id' => $cart_id, 'user_id' => $user_id])->delete();
|
||||
}
|
||||
|
||||
//变动购物车数量
|
||||
public static function change($cart_id, $goods_num)
|
||||
{
|
||||
$cart = Db::name('cart')->where(['id' => $cart_id])->find();
|
||||
|
||||
if (self::checkStock($cart['item_id'], $goods_num)) {
|
||||
return '很抱歉,库存不足';
|
||||
}
|
||||
|
||||
if ($goods_num <= 0) {
|
||||
$goods_num = 1;
|
||||
}
|
||||
|
||||
$update = [
|
||||
'update_time' => time(),
|
||||
'goods_num' => $goods_num,
|
||||
];
|
||||
|
||||
Db::name('cart')->where(['id' => $cart_id])->update($update);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//购物车选中状态
|
||||
public static function selected($post, $user_id)
|
||||
{
|
||||
return Db::name('cart')
|
||||
->where(['id' => $post['cart_id'], 'user_id' => $user_id])
|
||||
->update(['selected' => $post['selected'], 'update_time' => time()]);
|
||||
}
|
||||
|
||||
//检查库存
|
||||
public static function checkStock($item_id, $goods_num)
|
||||
{
|
||||
$item_info = Db::name('goods_item')
|
||||
->where('id', $item_id)->find();
|
||||
|
||||
if ($goods_num > $item_info['stock']) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
//列表
|
||||
public static function lists($user_id)
|
||||
{
|
||||
$field = 'g.name,g.image,g.id as goods_id,g.status as g_status,g.del as g_del,
|
||||
i.spec_value_str,i.price,i.image as item_image,c.goods_num,c.selected,c.id as cart_id,c.item_id,i.stock as item_stock';
|
||||
|
||||
$carts = Db::name('cart c')
|
||||
->field($field)
|
||||
->join('goods g', 'g.id = c.goods_id')
|
||||
->join('goods_item i', 'i.id = c.item_id')
|
||||
->where('c.user_id', $user_id)
|
||||
->order('c.create_time desc')
|
||||
->select();
|
||||
|
||||
$goods_num = 0;
|
||||
$total = 0;
|
||||
$lists = [];
|
||||
|
||||
foreach ($carts as $k1 => $cart) {
|
||||
|
||||
$cart_img = empty($cart['item_image']) ? $cart['image'] : $cart['item_image'];
|
||||
$cart['img'] = UrlServer::getFileUrl($cart_img);
|
||||
|
||||
$cart['cart_status'] = 0;
|
||||
if ($cart['g_status'] == 0) {
|
||||
$cart['cart_status'] = 1;
|
||||
}
|
||||
|
||||
if ($cart['g_del'] == 1) {
|
||||
$cart['cart_status'] = 2;
|
||||
}
|
||||
|
||||
$cart['sub_price'] = 0;
|
||||
if ($cart['selected'] == Cart::IS_SELECTED && $cart['cart_status'] == 0) {
|
||||
$goods_num += $cart['goods_num'];
|
||||
$total += $cart['price'] * $cart['goods_num'];
|
||||
$cart['sub_price'] = round($cart['price'] * $cart['goods_num'], 2);
|
||||
}
|
||||
|
||||
$cart['selected'] = intval($cart['selected']);
|
||||
unset($cart['image'], $cart['item_image']);
|
||||
$lists[] = $cart;
|
||||
}
|
||||
|
||||
return [
|
||||
'lists' => $lists,
|
||||
'total_amount' => round($total, 2),
|
||||
'total_num' => $goods_num,
|
||||
];
|
||||
}
|
||||
|
||||
//获取购物车数量
|
||||
public static function cartNum($user_id)
|
||||
{
|
||||
$num = Db::name('cart')->alias('c')
|
||||
->join('goods g', 'g.id = c.goods_id')
|
||||
->join('goods_item i', 'i.id = c.item_id')
|
||||
->where('c.user_id', $user_id)
|
||||
->sum('goods_num');
|
||||
return ['num' => $num ?? 0];
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user