198 lines
6.1 KiB
PHP
198 lines
6.1 KiB
PHP
<?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';
|
||
|
||
$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];
|
||
}
|
||
|
||
} |