From 93c59e1e165cf2b07daac5db5e206a964cb2f42b Mon Sep 17 00:00:00 2001
From: hf <fei.hong@yoho.cn>
Date: Tue, 15 Mar 2016 00:32:38 +0800
Subject: [PATCH] code review by fei.hong: do modify cache config to aliyun vpc

---
 yohobuy/www.yohobuy.com/application/modules/Cart/controllers/Index.php | 587 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 587 insertions(+), 0 deletions(-)
 create mode 100644 yohobuy/www.yohobuy.com/application/modules/Cart/controllers/Index.php

diff --git a/yohobuy/www.yohobuy.com/application/modules/Cart/controllers/Index.php b/yohobuy/www.yohobuy.com/application/modules/Cart/controllers/Index.php
new file mode 100644
index 0000000..a3d34c4
--- /dev/null
+++ b/yohobuy/www.yohobuy.com/application/modules/Cart/controllers/Index.php
@@ -0,0 +1,587 @@
+<?php
+
+use Action\WebAction;
+use WebPlugin\Helpers;
+use Shopping\CartModel;
+use Product\ItemModel;
+
+/**
+ * 购物车相关的控制器
+ * 
+ * @name IndexController
+ * @package Cart
+ * @copyright yoho.inc
+ * @version 1.0 (2016-2-17 15:43:19)
+ * @author fei.hong <fei.hong@yoho.cn>
+ */
+class IndexController extends WebAction
+{
+
+    /**
+     * 通过当前用户审判是否跳到登录
+     *
+     * @param boolean $useSession (true:从服务端session中检查, false:从客户端cookie中检查)
+     * @pram string $refer 指定的来源地址
+     * @return void
+     */
+    protected function auditJumpLogin($useSession = true, $refer = '')
+    {
+        $uid = $this->getUid($useSession);
+        if (!$uid) {
+            if (empty($refer)) {
+                $refer = $this->server('HTTP_REFERER', SITE_MAIN);
+            }
+            $this->go(Helpers::url('/signin.html', array('refer' => $refer)));
+        }
+    }
+
+    /**
+     * 我的购物车
+     */
+    public function indexAction()
+    {
+        $uid = $this->getUid(true);
+        $shoppingKey = Helpers::getShoppingKeyByCookie();
+        
+        // 显示一次并清除已删除的COOKIE记录
+        $cartDelList = $this->getCookie('cart-del-list');
+        if (!empty($cartDelList)) {
+            $this->setCookie('cart-del-list', '');
+        }
+        
+        $this->setTitle('购物车', true, ' | ');
+        $this->setSimpleHeader();
+        $this->_view->display('cart', array(
+            'cartEnsurePage' => true,
+            'cartEnsure' => CartModel::myCartData($uid, $shoppingKey, $cartDelList),
+        ));
+    }
+    
+    /**
+     * 购物车商品选择与取消
+     * 
+     * @param string skuList 商品sku列表,json格式,如{"744403":1,"777777":3}
+     * @return json
+     */
+    public function selectAction()
+    {
+        $result = array();
+
+        if ($this->isAjax()) {
+            $productId = $this->post('skuList', 0);
+            $uid = $this->getUid(true);
+            $shoppingKey = Helpers::getShoppingKeyByCookie();
+            $result = CartModel::selectGoods($uid, $productId, $shoppingKey);
+        }
+
+        $this->echoJson($result);
+    }
+    
+    /**
+     * 修改购物车商品数量
+     * 
+     * @param int sku 
+     * @param int increaseNum
+     * @param int decreaseNum
+     * @return json
+     */
+    public function modifyAction()
+    {
+        $result = array();
+
+        if ($this->isAjax()) {
+            $shoppingKey = Helpers::getShoppingKeyByCookie();
+            
+            $uid = $this->getUid(true);
+            $sku = $this->post('sku', 0);
+            $increaseNum = $this->post('increaseNum', null);
+            $decreaseNum = $this->post('decreaseNum', null);
+            
+            $result = CartModel::modifyProductNum($uid, $sku, $increaseNum, $decreaseNum, $shoppingKey);
+            if (!empty($result['code']) && $result['code'] == 200) {
+                $this->setShoppingCookie($uid);
+            }
+        }
+
+        $this->echoJson($result);
+    }
+    
+    /**
+     * 移出购物车
+     * 
+     * @param string skuList 商品sku列表,json格式,如{"744403":1,"777777":3}
+     * @return json
+     */
+    public function removeAction()
+    {
+        $result = array();
+
+        if ($this->isAjax()) {
+            $skuList = $this->post('skuList', 0);
+            $uid = $this->getUid(true);
+            $shoppingKey = Helpers::getShoppingKeyByCookie();
+            $result = CartModel::removeFromCart($uid, $skuList, $shoppingKey);
+            if (!empty($result['code']) && $result['code'] == 200) {
+                $this->setShoppingCookie($uid);
+            }
+        }
+        
+        $this->echoJson($result);
+    }
+
+    /**
+     * 移入收藏夹
+     * 
+     * 支持批量移入收藏夹
+     * 
+     * @param string 商品sku列表,json格式,如{"744403":1,"777777":3}
+     * @return json
+     */
+    public function favAction()
+    {
+        $result = array();
+
+        if ($this->isAjax()) {
+            $skuList = $this->post('skuList');
+            $uid = $this->getUid(true);
+            $result = CartModel::addToFav($uid, $skuList);
+            if (!empty($result['code']) && $result['code'] == 200) {
+                $this->setShoppingCookie($uid);
+            }
+        }
+
+        $this->echoJson($result);
+    }
+    
+    /**
+     * 检查是否收藏
+     * 
+     * @param string sknList 商品productId列表,如["123123","123412"]
+     */
+    public function checkFavAction()
+    {
+        $result = array('code' => 200, 'message' => '是否收藏', 'data' => array());
+        
+        if ($this->isAjax()) {
+            $uid = $this->getUid(false);
+            $pidList = $this->post('pidList', '');
+            $result['data'] = CartModel::checkUserIsFav($uid, $pidList);
+        }
+ 
+        $this->echoJson($result);
+    }
+    
+    /**
+     * 凑单商品异步请求
+     */
+    public function getTogetherProductAction()
+    {
+        $result = array('code' => 200, 'data' => array(), 'message' => '凑单商品');   
+        
+        if ($this->isAjax()) {
+            $page = $this->get('page', 1);
+            $result = CartModel::getTogetherProduct($page);
+        }
+
+        $this->echoJson($result);
+    }
+
+    /**
+     * 最近浏览的商品异步请求
+     */
+    public function getHistroyProductAction()
+    {
+        $result = array('code' => 200, 'data' => array(), 'message' => '浏览记录');
+        
+        do {
+            if (!$this->isAjax()) {
+                break;
+            }
+            
+            $page = $this->get('page', 1);
+//            $uid = $this->getUid(false);
+//            if ($uid) {
+//                $udid = $this->getUdid();
+//                $result = CartModel::getBrowseProduct($uid, $udid, $page);
+//                break;
+//            }
+            
+            $sknList = $this->getCookie('_browseskn');
+            if (empty($sknList)) {
+                break;
+            }
+            $sknList = explode(',', rawurldecode($sknList));
+            $result = CartModel::getNamedBrowseProduct($page, 6, $sknList);
+        }
+        while (false);
+
+        $this->echoJson($result);
+    }
+    
+    /**
+     * 确认订单
+     */
+    public function orderEnsureAction()
+    {
+        $type = $this->get('type', 1);
+        $refer = Helpers::url('/cart/index/orderEnsure', array('type' => $type));
+                
+        // 审判用户是否已登录
+        $this->auditJumpLogin(true, $refer);
+        
+        $this->setTitle('填写订单', true, ' | ');
+        $this->setSimpleHeader();
+        
+        $cartType = ($type == 2) ? 'advance' : 'ordinary';
+        $isAdvanceCart = ($type == 2) ? true : false;
+        $uid = $this->getUid(true);
+        
+        $orderEnsure = CartModel::cartPay($uid, $cartType, $isAdvanceCart);
+        if (empty($orderEnsure)) {
+            $this->go(Helpers::url('/shopping/cart'));
+        }
+        
+        $this->_view->display('order-ensure', array(
+            'orderEnsurePage' => true, 
+            'orderEnsure' => $orderEnsure,
+        ));
+    }
+    
+    /**
+     * 异步获取地址信息
+     * 
+     * @return json
+     */
+    public function getAddressAction()
+    {
+        $result = array('code' => 200, 'data' => array(), 'message' => '地址信息');
+        
+        if ($this->isAjax()) {
+            $uid = $this->getUid(true);
+            $result['data'] = CartModel::userAddressList($uid);
+        }
+        
+        $this->echoJson($result);
+    }
+    
+    /**
+     * 设置为默认的地址
+     * 
+     * @param int id 地址ID
+     * @return json
+     */
+    public function setDefaultAddressAction()
+    {
+        $result = array();
+        
+        if ($this->isAjax()) {
+            $uid = $this->getUid(true);
+            $addressId = $this->post('id');
+            $result = CartModel::setDefaultAddress($uid, $addressId);
+        }
+        
+        $this->echoJson($result);
+    }
+    
+    /**
+     * 保存地址信息
+     * 
+     * @param int $id 地址ID ,当修改操作的时候需要传,添加时候不需要传
+     * @param string $address 地址信息
+     * @param int $areaCode 城市码
+     * @param string $consignee 收货人
+     * @param string $email 邮箱地址
+     * @param string $mobile 手机号码
+     * @param string $zipCode 邮编
+     * @return json
+     */
+    public function saveAddressAction()
+    {
+        $result = array();
+        
+        if ($this->isAjax()) {
+            $uid = $this->getUid(true);
+            $id = $this->post('id', null);
+            $address = $this->post('address', '');
+            $areaCode = $this->post('areaCode', '');
+            $consignee = $this->post('consignee', '');
+            $email = $this->post('email', '');
+            $mobile = $this->post('mobile', '');
+            $zipCode = $this->post('zipCode', '');
+            $result = CartModel::saveAddressData($uid, $address, $areaCode, $consignee, $email, $id, $mobile, $zipCode);
+        }
+        
+        $this->echoJson($result);
+    }
+    
+    /**
+     * 删除地址
+     * 
+     * @param int id 地址ID
+     */
+    public function delAddressAction()
+    {
+        $result = array();
+        
+        if ($this->isAjax()) {
+            $uid = $this->getUid(true);
+            $addressId = $this->post('id');
+            $result = CartModel::delAddress($uid, $addressId);
+        }
+        
+        $this->echoJson($result);
+    }
+    
+    /**
+     * 获取省市区县信息列表
+     * 
+     * @param int id
+     * @return json
+     */
+    public function getAreaListAction()
+    {
+        $result = array('code' => 200, 'message' => '地区信息', 'data' => array());
+        
+        if ($this->isAjax()) {
+            $id = $this->get('id', 0);
+            $result['data'] = CartModel::getAreaList($id);
+        }
+
+        $this->echoJson($result);
+    }
+    
+    /**
+     * 获取优惠券列表
+     * 
+     * @return json
+     */
+    public function getCouponListAction()
+    {
+        $result = array('code' => 200, 'message' => '优惠券信息', 'data' => array());
+        
+        if ($this->isAjax()) {
+            $uid = $this->getUid(true);
+            $result['data'] = CartModel::getCouponList($uid);
+        }
+
+        $this->echoJson($result);
+    }
+    
+    /**
+     * 购物车选择改变字段,重新运算订单数据
+     * 
+     * @param string $cartType 购物车类型,ordinary表示普通, advance表示预售
+     * @param int $deliveryWay 配送方式,1表示普通快递,2表示顺丰速运
+     * @param int $paymentType 支付方式,1表示在线支付,2表示货到付款
+     * @param string $couponCode 优惠券码
+     * @param mixed $yohoCoin 使用的YOHO币数量
+     * @param int $redEnvelopes 红包
+     * @return json
+     */
+    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('couponCode', null);
+            $yohoCoin = $this->post('yohoCoin', null);
+            $redEnvelopes = $this->post('redEnvelopes', null);
+            $uid = $this->getUid(true);
+            $result = CartModel::orderCompute($uid, $cartType, $deliveryWay, $paymentType, $couponCode, $yohoCoin, $redEnvelopes);
+        }
+
+        $this->echoJson($result);
+    }
+    
+    /**
+     * 确认结算订单
+     * 
+     * @param int $addressId 地址ID
+     * @param int $cartType 购物车类型ID
+     * @param int $deliveryTimeId 寄送时间ID
+     * @param int $deliveryWayId 寄送方式ID
+     * @param string $invoiceTitle 发票抬头
+     * @param int $invoiceId 发票类型ID
+     * @param int $paymentId 支付方式ID
+     * @param int $paymentType 支付类型ID
+     * @param string $remark 留言
+     * @param string $couponCode 优惠券码
+     * @param mixed $yohoCoin 使用的YOHO币数量或为空
+     * @param int $isPreContact 送货前是否联系 true:是, false:否
+     * @param int $isPrintPrice 是否打印价格 true:是, false:否
+     * @param int $redEnvelopes 红包
+     * @return json
+     */
+    public function orderSubAction()
+    {
+        $result = array('code' => 400, 'data' => array(), 'message' => CartModel::ERROR_400_MESSAGE);
+
+        do {
+            // 判断是否是AJAX请求
+            if (!$this->isAjax()) {
+                break;
+            }
+            
+            // 判断用户是否登录
+            $uid = $this->getUid(true);
+            if (!$uid) {
+                $result['message'] = '请先登录';
+                break;
+            }
+            
+            $addressId = $this->post('addressId', null);
+            $cartType = $this->post('cartType', 'ordinary'); // 默认普通购物车
+            $deliveryTimeId = $this->post('deliveryTimeId', 1); // 默认只工作日配送
+            $deliveryWayId = $this->post('deliveryWayId', 1); // 默认普通快递
+            $invoiceTitle = $this->post('invoiceTitle', null); // 发票抬头
+            $invoiceId = $this->post('invoiceId', null); // 发票类型 
+            $paymentId = $this->post('paymentId', 15); // 支付ID
+            $paymentType = $this->post('paymentType', 1); // 默认在线支付
+            $remark = $this->post('remark', ''); // 备注信息
+            $couponCode = $this->post('couponCode', null); // 优惠码
+            $yohoCoin = $this->post('yohoCoin', 1); // YOHO币
+            $isPreContact = $this->post('isPreContact', false); // 送货前是否联系
+            $isPrintPrice = $this->post('isPrintPrice', true); // 是否打印价格
+            $redEnvelopes = $this->post('redEnvelopes', null);
+            
+            // 调用下单接口
+            $result = CartModel::orderSub($uid, $addressId, $cartType, $deliveryTimeId, $deliveryWayId, $invoiceTitle, $invoiceId, 
+                                          $paymentId, $paymentType, $remark, $couponCode, $yohoCoin, $isPreContact, $isPrintPrice, $redEnvelopes);
+            
+            // 判断是否下单成功
+            if (empty($result['data']['order_code'])) {
+                break;
+            }
+            
+            // 跳转到支付的URL链接
+            $result['data']['payUrl'] = Helpers::url('/shopping/pay', array('ordercode' => $result['data']['order_code']));
+        }
+        while (false);
+        
+//            $result = CartModel::orderSub($uid, $addressId, $cartType, $deliveryTime, $deliveryWay, $invoiceTitle, $invoiceId, $paymentId, $paymentType, $remark, $couponCode, $yohoCoin);
+//
+//            // 记录下单异常的数据
+//            if (empty($result)) {
+//                $message = 'uid:' . $uid . ',addressId:' . $addressId . ',cartType:' . $cartType . ',deliveryTime:' . $deliveryTime
+//                              . ',deliveryWay:' . $deliveryWay . 'invoiceTitle:' . $invoiceTitle . ',invoiceId:' . $invoiceId  . ',yohoCoin:' . $yohoCoin
+//                              . ',paymentId:' . $paymentId . ',paymentType:' . $paymentType . ',remark:' . $remark . ',couponCode:' . $couponCode . "\n";
+//                error_log($message, 3, '/Data/logs/php/pc_error/order.' . date('Ym') . '.log');
+//            }
+//            // 返回数据
+//            else {
+//                // 提交成功清除Cookie
+//                $this->setCookie('order-info', null);
+//
+//                $this->echoJson($result);
+//            }
+//
+//            if ($uid && !empty($result['data'])) {
+//                try {
+//                    UnionTrans::set($uid, $result['data']['order_code'], $result['data']['order_amount']);
+//                } catch (Exception $e) {
+//                    // do nothing
+//                }
+//            }
+        
+        $this->echoJson($result);
+    }
+    
+    /**
+     * 加入购物车
+     *
+     * @param string productSku 商品的SKU
+     * @param int buyNumber 购买数量
+     * @param int promotionId 促销ID, 加价购有关
+     * @param int goodsType 商品类型,0表示普通商品,1表示加价购商品
+     * @param int isEdit 是否是编辑商品SKU,0表示不是编辑
+     * @return json
+     */
+    public function addAction()
+    {
+        $result = array();
+
+        if ($this->isAjax()) {
+            $shoppingKey = Helpers::getShoppingKeyByCookie();
+            $productSku = $this->post('productSku');
+            $buyNumber = $this->post('buyNumber', 1);
+            $goodsType = $this->post('goodsType', 0);
+            $promotionId = $this->post('promotionId', 0);
+            $isEdit = $this->post('isEdit', 0);
+            $uid = $this->getUid(true);
+
+            // 执行加入购物车操作
+            $result = CartModel::addToCart($productSku, $buyNumber, $goodsType, $isEdit, $promotionId, $uid, $shoppingKey);
+
+            // 设置加入购物车凭证到客户端浏览器
+            if (empty($shoppingKey) && isset($result['data']['shopping_key'])) {
+                $this->setCookie('_SPK', $result['data']['shopping_key'], time() + 86400 * 360);
+            }
+            // 老站购物车需要的COOKIE
+            if (isset($result['data']['shopping_key'])) {
+                $this->setCookie('_g', json_encode(array(
+                    '_k' => $result['data']['shopping_key'],
+                    '_nac' => $result['data']['goods_count'],
+                    '_ac' => 0,
+                    '_r' => 1
+                )));
+            }
+        }
+
+        $this->echoJson($result);
+    }
+    
+    /**
+     * 获取商品信息
+     */
+    public function getProductInfoAction()
+    {   
+        $productId = $this->get('productId');
+        $uid = $this->getUid();
+        $vipLevel = -1;
+        $data = array();
+        if(!empty($this->_vip)) {
+            $vipLevel = Helpers::getVipLevel($this->_vip);
+        }
+        if(!empty($productId)) {
+            $data = ItemModel::getCartProductInfo($productId, $uid, $vipLevel);
+        }
+        $this->_view->display('goods-detail', $data);
+    }
+    
+    /**
+     * 获取购物车商品总数
+     * 
+     * @return jsonp
+     */
+    public function countAction()
+    {
+        $callback = $this->get('callback', 'callback');
+        $uid = $this->getUid(false);
+        $shoppingKey = Helpers::getShoppingKeyByCookie();
+        $result = CartModel::getCartCount($uid, $shoppingKey);
+        
+        $this->helpJsonCallbackResult($callback, 200, '总数', $result);
+    }
+    
+    /**
+     * 设置购物车COOKIE信息
+     */
+    private function setShoppingCookie($uid = null)
+    {
+        ($uid === null) ? $uid = $this->getUid(false) : true;
+        $shoppingKey = Helpers::getShoppingKeyByCookie();
+        $cartCount = CartModel::getCartCount($uid, $shoppingKey);
+        if (!empty($cartCount['data']['cart_goods_count'])) {
+            $this->setCookie('_g', json_encode(array(
+                '_k' => $shoppingKey,
+                '_nac' => $cartCount['data']['cart_goods_count'],
+                '_ac' => 0,
+                '_r' => 1
+            )));
+        }
+    }
+    
+}
\ No newline at end of file
--
libgit2 0.24.0