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

262 lines
8.0 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?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;
}
}
?>