ShoppingCart.php 6.46 KB
<?php

use Action\AbstractAction;
use Index\CartModel;
use Index\UserModel;
use Plugin\Helpers;

/**
 * 购物车
 */
class ShoppingCartController extends AbstractAction
{
    /*
     * 购物车首页
     */

    public function indexAction()
    {
        $this->setTitle('购物车');
        $this->setNavHeader('购物车');

        $shoppingKey = Helpers::getShoppingKeyByCookie();
        $uid = $this->getUid(true);

        $data = array(
            'shoppingCartPage' => true,
            'shoppingCart' => CartModel::getCartData($uid, $shoppingKey)
        );

        // 渲染模板
        $this->_view->display('index', $data);
    }

	/**
	 * 移出购物车
	 */
	public function delAction()
	{
		$result = array();

		if ($this->isAjax()) {
			$productId = $this->post('id', 0);
			$uid = $this->getUid(true);
			$shoppingKey = $this->getSession('shoppingKey');
			$result = CartModel::removeFromCart($uid, $productId, $shoppingKey);
		}

		if (empty($result)) {
			echo ' ';
		} else {
			$this->echoJson($result);
		}
	}

	/**
	 * 移入收藏夹
	 */
	public function colAction()
	{
		$result = array();

		if ($this->isAjax()) {
			$productId = $this->post('id', 0);
			$uid = $this->getUid(true);
			$result = CartModel::addToFav($uid, $productId);
		}

		if (empty($result)) {
			echo ' ';
		} else {
			$this->echoJson($result);
		}
	}

	/*
	 * 获取购物车商品数据
	 */
	public function goodinfoAction()
	{
		$result = array();

		if ($this->isAjax()) {
			$num = $this->get('buy_num', 1);
			$skn = $this->get('id', 1);
			$uid = $this->getUid(true);
			$result = CartModel::cartProductData($uid, $skn, $num); // 测试skn的ID为51172055
			$result['num'] = $num;
		}

		if (empty($result)) {
			echo ' ';
		} else {
			$this->echoJson($result);
		}
	}

	/*
	 * 获取购物车加价购商品数据
	 */
	public function giftinfoAction()
	{
		$result = array();

		if ($this->isAjax()) {
			$skn = $this->get('skn', null);
			$promotionId = $this->get('promotionId', null);
			$result = CartModel::giftProductData($skn, $promotionId);
		}

		if (empty($result)) {
			echo ' ';
		} else {
			$this->echoJson($result);
		}
	}

	/**
	 * 修改购物车商品数据
	 */
	public function modifyAction()
	{
		$result = array();

		if ($this->isAjax()) {
			$shoppingKey = $this->getSession('shoppingKey');
			$uid = $this->getUid(true);

			$params = array();
			$params['old_product_sku']= $this->post('old_product_sku', 0);
			$params['new_product_sku']= $this->post('new_product_sku', 0);
			$params['buy_number']= $this->post('buy_number', 0);
			$params['selected']= $this->post('selected', null);
			$result = CartModel::modifyCartProduct($uid, $params, $shoppingKey);
		}

		if (empty($result)) {
			echo ' ';
		} else {
			$this->echoJson($result);
		}
	}

	/**
	 * 购物车结算请求
	 */
	public function orderEnsureAction()
	{
		$this->setTitle('购物车');
		$this->setNavHeader('购物车');

		$cartType = $this->post('cartType', 'ordinary');
		$cookieData = $this->getCookie('order-info', null);
		$uid = $this->getUid(true);
		$data = array(
			'orderEnsurePage' => true,
			'orderEnsure' => CartModel::cartPay($uid, $cartType, $cookieData)
		);


		$this->_view->display('order-ensure', $data);
	}

	/**
	 * 购物车选择改变字段,重新运算订单数据
	 */
	public function orderComputeAction()
	{
		$result = array();

		if ($this->isAjax()) {
			$cartType = $this->post('cartType', 'ordinary');
			$deliveryWay = $this->post('deliveryWay', 1);
			$paymentType = $this->post('paymentType', 1);
			$couponCode = $this->post('paymentType', null);
			$yohoCoin = $this->post('paymentType', null);
			$uid = $this->getUid(true);
			$result = CartModel::orderCompute($uid, $cartType, $deliveryWay, $paymentType, $couponCode, $yohoCoin);
		}

		if (empty($result)) {
			echo ' ';
		} else {
			$this->echoJson($result);
		}
	}

	/**
	 * 购物车输入优惠券码使用优惠券
	 */
	public function couponSearchAction()
	{
		$result = array();

		if ($this->isAjax()) {
			$couponCode = $this->get('couponCode', '');
			$uid = $this->getUid(true);
			$result = CartModel::searchCoupon($uid, $couponCode);
		}

		if (empty($result)) {
			echo ' ';
		} else {
			$this->echoJson($result);
		}
	}

	/**
	 * 购物车结算--获取优惠券列表
	 */
	public function couponListAction()
	{
		$result = array();

		if ($this->isAjax()) {
			$uid = $this->getUid(true);
			$page = $this->get('page', 1);
			$result = CartModel::getCouponList($uid);
		}

		if (empty($result)) {
			echo ' ';
		} else {
			$this->echoJson($result);
		}
	}

    /**
     * 下单流程 选择地址
     */
    public function selectAddressAction()
    {
        // 设置网站标题
        $this->setTitle('选择地址');
        $this->setNavHeader('选择地址', Helpers::url('/shoppingCart/orderEnsure'));

	    $uid = $this->getUid(true);
        $address = UserModel::getAddressData($uid);

        $this->_view->display('select-address', array(
            'selectAddressPage' => true,
            'pageFooter' => true,
            'address' => $address
        ));
    }

    /**
     * 下单流程 选择优惠券
     */
    public function selectCouponAction()
    {
        // 设置网站标题
        $this->setTitle('选择优惠券');
        $this->setNavHeader('选择优惠券', Helpers::url('/shoppingCart/orderEnsure'));
        $this->_view->display('select-coupon', array(
            'selectCouponPage' => true,
            'pageFooter' => true
        ));
    }

	/**
	 * 确认结算订单
	 */
	public function orderSubAction()
	{
		$result = array();

		if ($this->isAjax()) {
			$uid = $this->getUid(true);
			$addressId = $this->post('addressId', null);
			$cartType = $this->post('cartType', 'ordinary'); // 默认普通购物车
			$deliveryTime = $this->post('deliveryTime', 1); // 默认只工作日配送
			$deliveryWay = $this->post('deliveryWay', 1); // 默认普通快递
			$invoiceTitle = $this->post('invoiceTitle', null);
			$invoiceId = $this->post('invoiceId', null);
			$paymentId = $this->post('paymentId', 15);
			$paymentType = $this->post('paymentType', 1); // 默认在线支付
			$remark = $this->post('remark', null); // 默认在线支付
			$yohoCoin = $this->post('yohoCoin', 1);
			$result = CartModel::orderSub($uid, $addressId, $cartType, $deliveryTime, $deliveryWay, $invoiceTitle, $invoiceId, $paymentId, $paymentType, $remark, $yohoCoin);
		}

		if (empty($result)) {
			echo ' ';
		} else {
			// 提交成功清除Cookie
			$this->setCookie('orderInfo', null);

			$this->echoJson($result);
		}
	}
}