www.lightcourse.com/app/common/model/Cart.php

262 lines
8.0 KiB
PHP
Raw Normal View History

2022-10-24 02:38:36 +00:00
<?php
namespace app\common\model;
use think\facade\Db;
/**
* ============================================================================
* 联课教育商城系统
* ============================================================================
* 版权所有 2022 刻羽互动科技有限公司,并保留所有权利。
* 网站地址: http://www.o1h.cn
* ----------------------------------------------------------------------------
* 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用 .
* 不允许对程序代码以任何形式任何目的的再发布。
* ============================================================================
* 数据层模型
*/
class Cart extends BaseModel {
/**
* 购物车商品总金额
*/
private $cart_all_price = 0;
/**
* 购物车商品总数
*/
private $cart_goods_num = 0;
/**
* 取属性值魔术方法
* @access public
* @author o1h.cn
* @param type $name 名称
* @return type
*/
public function __get($name) {
return $this->$name;
}
/**
* 检查购物车内商品是否存在
* @access public
* @author o1h.cn
* @param array $condition 检索条件
* @return bool
*/
public function checkCart($condition = array()) {
return Db::name('cart')->where($condition)->find();
}
/**
* 会员购物车内商品数
* @access public
* @author o1h.cn
* @param int $memberId 会员ID
* @return int
*/
public function getCartCountByMemberId($memberId) {
$memberId = intval($memberId);
return Db::name('cart')->where(array('buyer_id' => $memberId,))->count();
}
/**
* 取得 单条购物车信息
* @access public
* @author o1h.cn
* @param array $condition 检索条件
* @param string $field 字段
* @return array
*/
public function getCartInfo($condition = array(), $field = '*') {
return Db::name('cart')->field($field)->where($condition)->find();
}
public function getCartAll($condition = array(), $field = '*') {
return Db::name('cart')->field($field)->where($condition)->select()->toArray();
}
public function updateCart($id, $newId)
{
return Db::name('cart')->where(['cart_id' => $id])->update(['buyer_id' => $newId]);
}
/**
* 将商品添加到购物车中
* @access public
* @author o1h.cn
* @param array $data 商品数据信息
* @param string $save_type 保存类型,可选值 db,cookie
* @param int $quantity 购物数量
* @return type
*/
public function addCart($data = array(), $save_type = '', $quantity = null) {
$method = '_addCartdb';
$result = $this->$method($data, $quantity);
if(!$result){
return false;
}
//更改购物车总商品数和总金额传递数组参数只是给DB使用
$this->getCartNum('db', array('buyer_id' => isset($data['buyer_id'])?$data['buyer_id']:0));
return $result;
}
/**
* 添加数据库购物车
* @access public
* @author o1h.cn
* @param array $goods_info 商品信息
* @param int $quantity 购物数量
* @return type
*/
private function _addCartDb($goods_info = array(), $quantity) {
//验证购物车商品是否已经存在
$condition = array();
$condition[] = array('goods_id','=',$goods_info['goods_id']);
$condition[] = array('buyer_id','=',$goods_info['buyer_id']);
if (isset($goods_info['bl_id'])) {
$condition[] = array('bl_id','=',$goods_info['bl_id']);
} else {
$condition[] = array('bl_id','=',0);
}
//如果购物车
$check_cart = $this->checkCart($condition);
if (!empty($check_cart)) {
if($quantity != $check_cart['goods_num']){
if($quantity>$goods_info['goods_storage']){
$this->error_code = 10001;
$this->error_message = '库存不足';
return false;
}
//如果商品存在则更新数量
return Db::name('cart')->where($condition)->update(array('goods_num'=>$quantity));
}else{
return 1;
}
} else {
//如果商品存在则插入
$array = array();
$array['buyer_id'] = $goods_info['buyer_id'];
$array['goods_id'] = $goods_info['goods_id'];
$array['goods_name'] = $goods_info['goods_name'];
$array['goods_price'] = $goods_info['goods_price'];
$array['goods_num'] = $quantity;
$array['goods_image'] = $goods_info['goods_image'];
$array['bl_id'] = isset($goods_info['bl_id']) ? $goods_info['bl_id'] : 0;
return Db::name('cart')->insertGetId($array);
}
}
/**
* 更新购物车
* @access public
* @author o1h.cn
* @param array $data 商品信息
* @param array $condition 检索条件
* @return bool
*/
public function editCart($data, $condition,$buyer_id) {
$result = Db::name('cart')->where($condition)->update($data);
if ($result) {
$this->getCartNum('db', array('buyer_id' => $buyer_id));
}
return $result;
}
/**
* 购物车列表
* @access public
* @author o1h.cn
* @param string $type 存储类型 db,cookie
* @param array $condition 检索条件
* @param int $limit 限制
* @return array
*/
public function getCartList($type, $condition = array(), $limit = 0) {
$cart_list = Db::name('cart')->where($condition)->limit($limit)->select()->toArray();
$cart_list = is_array($cart_list) ? $cart_list : array();
//顺便设置购物车商品数和总金额
$this->cart_goods_num = count($cart_list);
$cart_all_price = 0;
if (is_array($cart_list)) {
foreach ($cart_list as $val) {
$cart_all_price += $val['goods_price'] * $val['goods_num'];
}
}
$this->cart_all_price = ds_price_format($cart_all_price);
return !is_array($cart_list) ? array() : $cart_list;
}
/**
* 删除购物车商品
* @access public
* @author o1h.cn
* @param string $type 存储类型 db,cookie
* @param array $condition 检索条件
* @return bool
*/
public function delCart($type, $condition = array(),$buyer_id) {
$result = Db::name('cart')->where($condition)->delete();
//重新计算购物车商品数和总金额
if ($result) {
$this->getCartNum('db', array('buyer_id' => $buyer_id));
}
return $result;
}
/**
* 清空购物车
* @access public
* @author o1h.cn
* @param string $type 存储类型 db,cookie
* @param array $condition 检索条件
* @return bool
*/
public function clearCart($type, $condition = array()) {
//数据库暂无浅清空操作
}
/**
* 计算购物车总商品数和总金额
* @access public
* @author o1h.cn
* @param string $type 购物车信息保存类型 db,cookie
* @param array $condition 只有登录后操作购物车表时才会用到该参数
* @return type
*/
public function getCartNum($type, $condition = array()) {
$cart_all_price = 0;
$cart_goods = $this->getCartList('db', $condition);
$this->cart_goods_num = count($cart_goods);
if (!empty($cart_goods) && is_array($cart_goods)) {
foreach ($cart_goods as $val) {
$cart_all_price += $val['goods_price'] * $val['goods_num'];
}
}
$this->cart_all_price = ds_price_format($cart_all_price);
@cookie('cart_goods_num', $this->cart_goods_num, 2 * 3600);
return $this->cart_goods_num;
}
}
?>