Abstract.php 7.8 KB
<?php

/**
 * Created by PhpStorm.
 * User: ziy
 * Date: 14-7-22
 * Time: 下午5:05
 */
abstract class YHMCart_Cart_Abstract extends YHMCart_Cart_Dispatch
{
    protected $_dispatchConfigs = array();

    protected $_shoppingGoods = array();

    /**
     * Class 执行前处理
     */
    public function __construct($shoppingKey = '')
    {

    }

    /**
     * class 执行后处理
     */
    public function __destruct()
    {

    }

    /**
     * 设置UID
     * @param $uid
     * @return $this
     */
    function setUid($uid)
    {
        $this->_uid = $uid;
        return $this;
    }

    /**
     * 添加购物车
     * @param YHMCart_Hook_Orders $package
     * @return boolean
     */
    function add(YHMCart_Hook_Orders $cart)
    {
       if(empty($cart)) return 0;
       $params=array();
       $uid=$cart->getUid();
       $tmpGoods=$cart->getTmpGoods();
       $goods=YHMProduct_Models_Goods_Client::getOneByProductSkc($tmpGoods['product_skc']);
       $params['uid']=$uid;
       $params['product_sku']=$tmpGoods['product_sku'];
       $params['product_skc']=$tmpGoods['product_skc'];
       $params['last_price']=$tmpGoods['last_price'];
       $params['buy_number']=$tmpGoods['buy_number'];
       $params['goods_type']=$tmpGoods['goods_type'];
       $params['is_change']='N';
       $params['salse_price']=$goods['salse_price'];//TODO 写错了,插入数据库有问题
       $params['store_id']=$goods['store_id'];
       $cart=YHMOrders_Models_Cart_Client::getDetailByUid($uid, $params['product_sku'], $params['last_price']);
       if(empty($cart))
       {
       	 $res=YHMOrders_Models_Cart_Client::updateGoodsByNum($uid, $params['product_sku'], $params['last_price'],$params['buy_number']);
       }
       else {
       	 $res=YHMOrders_Models_Cart_Client::setGoodsByUid($params);
       }
       if($res==0){
       	 throw new Exception('加入购物车失败');
       }
    }

    /**
     * @param $productSku
     * @return bool
     */
    function del($productSku)
    {
        return true;
    }

    /**
     * @param array $productSku
     * @return bool
     */
    function update(array $productSku)
    {
        return true;
    }

    function count()
    {

    }

    /**
     * @return array
     */
    function shoppingList()
    {
        return $this->makeGoodsData($this->_shoppingGoods);
    }

    /**
     * 组合购买商品的数据
     * @param array $buyData
     * @return array
     */
    private function  makeGoodsData(array $buyData)
    {
        $_productData = array(
            'order_total_amount' => 0,
            'order_goods_list' => array()
        );
        $productSkus = array();
        foreach ($buyData as $productKey => $product) {
            if (empty($product['product_sku']) || empty($product['buy_number'])) {
                continue;
            }
            $storage = QINProduct_Models_Storage_Client::getBySku($product['product_sku']);
            if (empty($storage)) {
                continue;
            }
            $productInfo = QINProduct_Models_Product_Client::getByProductId($storage['product_id']);
            $productInfo = array(
                'id' => $productInfo['id'],
                'erp_product_id' => $productInfo['erp_product_id'],
                'product_name' => $productInfo['product_name'],
                'cn_alphabet' => $productInfo['cn_alphabet'],
                'brand_id' => $productInfo['brand_id'],
                'max_sort_id' => $productInfo['max_sort_id'],
                'middle_sort_id' => $productInfo['middle_sort_id'],
                'small_sort_id' => $productInfo['small_sort_id'],
                'gender' => $productInfo['gender'],
                'attribute' => $productInfo['attribute'],
                'is_down' => $productInfo['is_down'],
                'status' => $productInfo['status'],
                'vip_discount_type' => $productInfo['vip_discount_type'],
                'folder_id' => $productInfo['folder_id'],
                'is_outlets' => $productInfo['is_outlets'],
                'sell_channels' => $productInfo['sell_channels']
            );

            $goodsInfo = QINProduct_Models_Goods_Client::getByGoodsId($storage['goods_id']); //TODO 有问题

            $priceInfo = QINProduct_Models_Price_Client::getProductPrice($storage['product_id']);//TODO

            $sizeName = QINProduct_Models_Size_Client::getSizeName($storage['goods_dimension_id']);
            $totalAmount = $priceInfo['sales_price'] * $product['buy_number'];
            $totalAmountFormat = YHMCart_Library_Utils::formatCurrency($totalAmount);

            $_productData['order_goods_list'][] = array(
                'product_skn' => $productInfo['erp_product_id'],
                'product_skc' => $goodsInfo['product_skc'],
                'product_sku' => $storage['erp_sku_id'],
                'product_id' => $productInfo['id'],
                'erp_product_id' => $productInfo['erp_product_id'],
                'product_name' => $productInfo['product_name'],
                'cn_alphabet' => $productInfo['cn_alphabet'],
                'brand_id' => $productInfo['brand_id'],
                'max_sort_id' => $productInfo['max_sort_id'],
                'middle_sort_id' => $productInfo['middle_sort_id'],
                'small_sort_id' => $productInfo['small_sort_id'],
                'gender' => $productInfo['gender'],
                'attribute' => $productInfo['attribute'],
                'is_down' => $productInfo['is_down'],
                'product_status' => $productInfo['status'],
                'vip_discount_type' => $productInfo['vip_discount_type'],
                'folder_id' => $productInfo['folder_id'],
                'is_outlets' => $productInfo['is_outlets'],
                'sell_channels' => $productInfo['sell_channels'],
                'goods_id' => $goodsInfo['id'],
                'goods_name' => $goodsInfo['goods_name'],
                'color_id' => $goodsInfo['color_id'],
                'color_name' => $goodsInfo['color_name'],
                'color_image' => $goodsInfo['color_image'],
                'is_down' => $goodsInfo['is_down'],
                'goods_status' => $goodsInfo['status'],
                'goods_dimension_id' => $storage['goods_dimension_id'],
                'storage_num' => $storage['storage_num'],
                'size_name' => $sizeName,
                'storage_status' => $storage['status'],

                'market_price' => $priceInfo['market_price'],
                'sales_price' => $priceInfo['sales_price'],

                'special_price' => $priceInfo['special_price'],
                'yoho_coin_num' => $priceInfo['yoho_coin_num'],
                'purchase_num' => $priceInfo['purchase_num'],
                'vip_discount_type' => $priceInfo['vip_discount_type'],
                'vip_discount' => $priceInfo['vip_discount'],
                'vip_price' => $priceInfo['vip_price'],
                'vip1_price' => $priceInfo['vip1_price'],
                'vip2_price' => $priceInfo['vip2_price'],
                'vip3_price' => $priceInfo['vip3_price'],

                'purchase_num' => $priceInfo['purchase_num'],
                'subtotal_amount' => $totalAmountFormat,
                'total_amount' => $totalAmountFormat,
                'buy_number' => $product['buy_number'],
                'product_url' => 'http://www.yohobuy.com/product/pro_' . $productInfo['id'] . '_' . $goodsInfo['id'] . '/' . $productInfo['cn_alphabet'] . '.html'
            );
            $orderTotalAmount = ($_productData['order_total_amount'] + $totalAmount);
            $_productData['order_total_amount'] = $orderTotalAmount;
            $_productData['order_total_amount_format'] = YHMCart_Library_Utils::formatCurrency($orderTotalAmount);
            $productSkus[] = $storage['erp_sku_id'];
        }
        $_productData['product_skus'] = implode(',', $productSkus);
        return $_productData;
    }
}