Charlie 9 ani în urmă
părinte
comite
598abbe204

+ 499 - 0
www/protected/modules/api/controllers/ShopController.php

@@ -0,0 +1,499 @@
+<?php
+/**
+ * ShopController 商城相关api接口
+ */
+class ShopController extends ApiBaseController{
+    public function beforeAction($action){
+        $weixin_use = array('addAddress','addressList','delAddress','editAddress');
+        if(Yii::app()->getRequest()->getParam("request_from") == 'weixin' && in_array($action->id,$weixin_use)){
+            return true;
+        }
+        return $this->verify();
+    }
+    /**
+     * 商城首页
+     */
+    public function actionIndex(){
+        $user_id = Yii::app()->getRequest()->getParam("user_id");
+        $page = intval(Yii::app()->getRequest()->getParam("page",1));
+        $user = CommonFn::getObJ($user_id,"ZUser");
+        //获取所有商品
+        $current_time = time();
+        $pagesize = Yii::app()->params['shopIndexPageSize'];
+        $conditions = array(
+                                'status'=>array('==',1),
+                                'start_time'=>array('<=',$current_time),
+                                'end_time'=>array('>=',$current_time),
+                                'count'=>array('>=',1),
+                            );
+        $order = array(
+                        'order'=>'desc',
+                        );
+        $model = new Goods();
+        $pagedata = CommonFn::getPagedata($model,$page,$pagesize,$conditions,$order);
+        $goods_list = array();
+        foreach ($pagedata['res'] as $key => $value) {
+            if(isset($value['city_info']['province']) && $value['city_info']['province']){
+                if($user && $user->city_info['province'] == $value['city_info']['province']){
+                    if($value['city_info']['city'] && $value['city_info']['city']!=$user->city_info['city']){
+                        continue;
+                    }else{
+                        $goods_list[] = $value;
+                    }
+                }else{
+                    continue;
+                }
+            }else{
+                $goods_list[] = $value;
+            }
+        }
+        $data['goods'] = $goods_list;
+        $Key = HelperKey::generateRedisKey(date('YmdHi'),'luck_users');
+        $luckey_list = UserActionRedis::get($Key);
+        if($luckey_list){
+            $data['luckey_list'] = json_decode($luckey_list);
+        }else{
+            $criteria = new EMongoCriteria();
+            $criteria->type('==','lottery');
+            $lottery_goods = $model->findAll($criteria);
+            $criteria = new EMongoCriteria();
+            $model = new Order();
+            $criteria->sort('time',EMongoCriteria::SORT_DESC);
+            $criteria->limit(10);
+            $goods_ids = array();
+            if($lottery_goods){
+                foreach ($lottery_goods as $key => $value) {
+                    $goods_ids[] = $value->_id;
+                    // $criteria->addCond('goods','or',array(array('goods_id' => $value->_id,'count' => 1)));
+                }
+            }
+            $criteria->addCond('goods.goods_id','in',$goods_ids);
+            $lottery_list = $model->findAll($criteria);
+            $lucke_list =array();
+            foreach ($lottery_list as $key => $value) {
+                $order = $model->parseRow($value);
+                $temp['user_name'] = $order['user']['user_name'];
+                $temp['goods'] = $order['goods'][0];
+                unset($temp['goods']['score']);
+                unset($temp['goods']['type']);
+                unset($temp['goods']['avatar']);
+                unset($temp['goods']['buy_count']);
+                unset($temp['goods']['market_price']);
+                $luckey_list[] = $temp;
+            }
+            UserActionRedis::set($Key,json_encode($luckey_list));
+            $data['luckey_list'] = $luckey_list;
+        }
+        CommonFn::requestAjax(true,CommonFn::getMessage('message','operation_success'),$data,200,array('sum_count' => $pagedata['sum_count'],'sum_page'=>$pagedata['sum_page'],'page_size'=>$pagedata['page_size'],'current_page'=>$pagedata['current_page']));
+    }
+
+    /**
+     * 商品详情
+     */
+    public function actiongoodsDetail(){
+        $goods_id = Yii::app()->getRequest()->getParam("goods_id");
+        $user_id = Yii::app()->getRequest()->getParam("user_id");
+        if(!$goods_id){
+            CommonFn::requestAjax(false,CommonFn::getMessage('message','params_illegal'));
+        }
+        $goods = CommonFn::apigetObJ($goods_id,"ZGoods",CommonFn::getMessage('shop','goods_not_exist'));
+        $data = Goods::model()->parseRow($goods);
+        $user_obj = RUser::get(new MongoId($user_id));
+        $score_enough = false;
+        if($user_obj){
+            $user = RUser::model()->parseRow($user_obj);
+            if($user['score'] >= $goods->score){
+                $score_enough = true;
+            }
+        }
+        $data['score_enough'] = $score_enough;
+        CommonFn::requestAjax(true,CommonFn::getMessage('message','operation_success'),$data);
+    }
+
+    /**
+     * 新增收货地址
+     */
+    public function actionAddAddress(){
+        $user_id = Yii::app()->getRequest()->getParam("user_id");
+        $name = trim(Yii::app()->request->getParam('name',''));
+        $mobile = Yii::app()->request->getParam('mobile');
+        $position = json_decode(Yii::app()->request->getParam('address_position'),true);
+        $address_position[0] = isset($position['lng'])?floatval($position['lng']):floatval(0);
+        $address_position[1] = isset($position['lat'])?floatval($position['lat']):floatval(0);
+        $phoneReg = Yii::app()->params['phoneReg'];
+        if(!preg_match($phoneReg,$mobile)){
+            CommonFn::requestAjax(false,CommonFn::getMessage('message','phone_illegal'));
+        }
+        $address =  json_decode(Yii::app()->request->getParam('address'),true);
+        if(!isset($address['province']) || empty($address['province'])){
+            CommonFn::requestAjax(false,CommonFn::getMessage('message','params_illegal'));
+        }
+        $is_default = intval(Yii::app()->request->getParam('is_default'),0);
+        if(!$name||!$mobile||!$address||!$user_id){
+            CommonFn::requestAjax(false,CommonFn::getMessage('message','params_illegal'));
+        }
+        $user = CommonFn::apigetObJ($user_id,"ZUser",CommonFn::getMessage('user','id_not_exist'),201);
+        $new_address = array('name'=>$name,'mobile'=>$mobile,'address'=>$address,'position' => $address_position,'is_default'=>$is_default,'address_id'=>time()); 
+        if($is_default==1){
+            foreach ($user->shop_address as $key => $value) {
+                if(isset($value['is_default']) && $value['is_default'] == 1){
+                    $value['is_default'] = 0;
+                }
+                $user->shop_address[$key] = $value;
+                $user->update(array('shop_address'),true);
+            }
+        }
+        $user->shop_address = $user->shop_address?array_merge($user->shop_address,array($new_address)):array($new_address);
+        $result = $user->update(array('shop_address'),true);
+        if($result){
+            CommonFn::requestAjax(true,CommonFn::getMessage('message','operation_success'),$new_address);
+        }else{
+            CommonFn::requestAjax(false,'操作失败,请稍后再试',array());
+        }
+    }
+
+    /**
+     * 收货地址列表
+     */
+    public function actionAddressList(){
+        $user_id = Yii::app()->getRequest()->getParam("user_id");
+        $user = CommonFn::apigetObJ($user_id,"ZUser",CommonFn::getMessage('user','id_not_exist'),201);
+        $data = $user->shop_address?$user->shop_address:array();
+        $data = array_values($data);
+        CommonFn::requestAjax(true,CommonFn::getMessage('message','operation_success'),$data);
+    }
+
+    /**
+     * 修改收货地址
+     */
+    public function actionEditAddress(){
+        $user_id = Yii::app()->getRequest()->getParam("user_id");
+        $name = trim(Yii::app()->request->getParam('name',''));
+        $mobile = Yii::app()->request->getParam('mobile');
+        $position = json_decode(Yii::app()->request->getParam('address_position'),true);
+        $address_position[0] = isset($position['lng'])?floatval($position['lng']):floatval(0);
+        $address_position[1] = isset($position['lat'])?floatval($position['lat']):floatval(0);
+        $phoneReg = Yii::app()->params['phoneReg'];
+        if(!preg_match($phoneReg,$mobile)){
+            CommonFn::requestAjax(false,CommonFn::getMessage('message','phone_illegal'));
+        }
+        $address =  json_decode(Yii::app()->request->getParam('address'),true);
+        if(!isset($address['province']) || empty($address['province'])){
+            CommonFn::requestAjax(false,CommonFn::getMessage('message','params_illegal'));
+        }
+        $address_id =  Yii::app()->request->getParam('address_id');
+        $is_default = intval(Yii::app()->request->getParam('is_default'),0);
+        if(!$name||!$mobile||!$address||!$user_id||!$address_id){
+            CommonFn::requestAjax(false,CommonFn::getMessage('message','params_illegal'));
+        }
+        $user = CommonFn::apigetObJ($user_id,"ZUser",CommonFn::getMessage('user','id_not_exist'),201);
+        if($is_default==1){
+            $old_address_list = $user->shop_address?$user->shop_address:array();
+            foreach ($old_address_list as $key => $value) {
+                if(isset($value['is_default']) && $value['is_default'] == 1){
+                    $value['is_default'] = 0;
+                }
+                $old_address_list[$key] = $value;
+            }
+            $user->shop_address = $old_address_list;
+            $user->update(array('shop_address'),true);
+        }
+        $address_list = $user->shop_address?$user->shop_address:array();
+        foreach ($address_list as $key => $value) {
+            if($value['address_id'] == $address_id){
+                $value['name'] = $name;
+                $value['mobile'] = $mobile;
+                $value['address'] = $address;
+                $value['is_default'] = $is_default;
+                $value['position'] = $address_position;
+                $new_address = $value;
+                $address_list[$key] = $new_address;
+            }
+        }
+        if(!isset($new_address)){
+            CommonFn::requestAjax(false,CommonFn::getMessage('shop','address_not_exist'));
+        }
+        $user->shop_address = $address_list;
+        $result = $user->update(array('shop_address'),true);
+        if($result){
+            CommonFn::requestAjax(true,'地址修改成功',$new_address);
+        }else{
+            CommonFn::requestAjax(false,'地址修改失败',array());
+        }
+    }
+
+    /**
+     * 删除收货地址
+     */
+    public function actionDelAddress(){
+        $user_id = Yii::app()->getRequest()->getParam("user_id");
+        $address_id =  Yii::app()->request->getParam('address_id');
+        if(!$user_id||!$address_id){
+            CommonFn::requestAjax(false,CommonFn::getMessage('message','params_illegal'));
+        }
+        $user = CommonFn::apigetObJ($user_id,"ZUser",CommonFn::getMessage('user','id_not_exist'),201);
+        $address_list = $user->shop_address?$user->shop_address:array();
+        foreach ($address_list as $key => $value) {
+            if($value['address_id'] == $address_id){
+                $old_address = $value;
+                unset($address_list[$key]);
+            }
+        }
+        if(!isset($old_address)){
+            CommonFn::requestAjax(false,CommonFn::getMessage('shop','address_not_exist'));
+        }
+        if(empty($address_list)){
+            CommonFn::requestAjax(false,CommonFn::getMessage('shop','address_less_one'));
+        }
+        $user->shop_address = $address_list;
+        $result = $user->update(array('shop_address'),true);
+        if($result){
+            CommonFn::requestAjax(true,'地址删除成功');
+        }else{
+            CommonFn::requestAjax(false,'地址删除失败');
+        }
+    }
+
+    public function actionCheckPermission(){
+        $user_id = Yii::app()->getRequest()->getParam("user_id");
+        $goods_id = Yii::app()->getRequest()->getParam("goods_id");
+        $user_obj = CommonFn::apigetObJ($user_id,"ZUser",CommonFn::getMessage('user','id_not_exist'),201);
+        if($user_obj->status == 0){
+            CommonFn::requestAjax(false,CommonFn::getMessage('user','user_shop_forbidden'));
+        }
+        $user = RUser::model()->parseRow($user_obj);
+        $goods = CommonFn::apigetObJ($goods_id,"ZGoods",CommonFn::getMessage('shop','goods_not_exist'));
+        $level_limit = $goods->min_level;
+        if($user['level']<$level_limit){
+            CommonFn::requestAjax(false,CommonFn::getMessage('shop','level_too_low'));
+        }
+        if($goods->count<=0){
+            CommonFn::requestAjax(false,CommonFn::getMessage('shop','goods_count_empty'),array('refresh'=>true));
+        }
+        if($user['score'] < $goods->score){
+            CommonFn::requestAjax(false,CommonFn::getMessage('shop','score_too_low'));
+        }
+        $criteria = new EMongoCriteria();
+        $criteria->user('==',$user_obj->_id);
+        $criteria->goods('==',array(array('goods_id' => $goods->_id,'count' => 1)));
+        $criteria->status('!=',-2);
+        $have_exchange = Order::model()->count($criteria);
+        if($have_exchange>=$goods->max_exchange){
+            CommonFn::requestAjax(false,CommonFn::getMessage('shop','have_too_much'));
+        }
+        CommonFn::requestAjax(true,'success',(object)array());
+    }
+
+    /**
+     * 商品兑换
+     */
+    public function actionExchange(){
+        $user_id = Yii::app()->getRequest()->getParam("user_id");
+        $goods_id = Yii::app()->getRequest()->getParam("goods_id");
+        $memo = Yii::app()->getRequest()->getParam("memo","");
+        $address_id = Yii::app()->getRequest()->getParam("address_id");
+        if(!$user_id||!$goods_id||!$address_id){
+            CommonFn::requestAjax(false,CommonFn::getMessage('message','params_illegal'));
+        }
+        $user_obj = CommonFn::apigetObJ($user_id,"ZUser",CommonFn::getMessage('user','id_not_exist'),201);
+        $user = RUser::model()->parseRow($user_obj);
+        if($user_obj->status == 0){
+            CommonFn::requestAjax(false,CommonFn::getMessage('user','user_shop_forbidden'));
+        }
+        $goods = CommonFn::apigetObJ($goods_id,"ZGoods",CommonFn::getMessage('shop','goods_not_exist'));
+        $address_list = $user_obj->shop_address?$user_obj->shop_address:array();
+        $address = array();
+        foreach ($address_list as $value) {
+            if($address_id == $value['address_id']){
+                $address = $value;
+            }
+        }
+        if(!$address){
+            CommonFn::requestAjax(false,CommonFn::getMessage('shop','address_false'));
+        }
+        if ($goods->type == 'exchange' && $goods->status == 1) {
+            $criteria = new EMongoCriteria();
+            $criteria->user('==',$user_obj->_id);
+            $criteria->goods('==',array(array('goods_id' => $goods->_id,'count' => 1)));
+            $criteria->status('!=',-2);
+            $have_exchange = Order::model()->count($criteria);
+            if($have_exchange>=$goods->max_exchange){
+                CommonFn::requestAjax(false,CommonFn::getMessage('shop','have_too_much'));
+            }
+            $level_limit = $goods->min_level;
+            if($user['level']<$level_limit){
+                CommonFn::requestAjax(false,CommonFn::getMessage('shop','level_too_low'));
+            }
+            if($goods->count<=0){
+                CommonFn::requestAjax(false,CommonFn::getMessage('shop','goods_count_empty'));
+            }
+            if($user['score'] < $goods->score){
+                CommonFn::requestAjax(false,CommonFn::getMessage('shop','score_too_low'));
+            }
+             
+            $order = new Order();
+            $order->price = $goods->score;
+            $order->time = time();
+            $order->goods = array(array('goods_id' => $goods->_id,'count' => 1));
+            $order->user = $user_obj->_id;
+            $order->status = 0;
+            $order->memo = $memo;
+            $order->address = $address;
+            $result = Service::factory('ScoreService')->cutDownScore($user_id,'exchange_goods',$goods->score);
+            if($result && $order->save()){
+                $goods->count = $goods->count>=1?$goods->count-1:0;
+                $goods->update(array('count',true));
+                $data['order_info'] = Order::model()->parseRow($order);
+                CommonFn::requestAjax(true,CommonFn::getMessage('message','operation_success'),$data);
+            }else{
+                CommonFn::requestAjax(false,'order_false',array());
+            }
+        }elseif($goods->type == 'lottery'){
+            $order_id = Yii::app()->getRequest()->getParam("order_id");
+            $order = CommonFn::apigetObJ($order_id,"ZOrder",CommonFn::getMessage('message','params_illegal'));
+            $order->address = $address;
+            $order->memo = $memo;
+            $order->status = 0;
+            if($order->update(array('address','memo','status'),true)){
+                $data['order_info'] = Order::model()->parseRow($order);
+                CommonFn::requestAjax(true,CommonFn::getMessage('message','operation_success'),$data);
+            }else{
+                CommonFn::requestAjax(false,'order_false',array());
+            }
+        }else{
+            CommonFn::requestAjax(false,CommonFn::getMessage('shop','goods_no_exchange'));
+        }
+    }
+
+    /**
+     * 商品抽奖
+     */
+    public function actionLottery(){
+        $user_id = Yii::app()->getRequest()->getParam("user_id");
+        $goods_id = Yii::app()->getRequest()->getParam("goods_id");
+        $address_id = Yii::app()->getRequest()->getParam("address_id");
+        $user_obj = CommonFn::apigetObJ($user_id,"ZUser",CommonFn::getMessage('user','id_not_exist'),201);
+        $user = RUser::model()->parseRow($user_obj);
+        if($user_obj->status == 0){
+            CommonFn::requestAjax(false,CommonFn::getMessage('user','user_shop_forbidden'));
+        }
+        $goods = CommonFn::apigetObJ($goods_id,"ZGoods",CommonFn::getMessage('shop','goods_not_exist'));
+        $level_limit = $goods->min_level;
+        if($user['level']<$level_limit){
+            CommonFn::requestAjax(false,CommonFn::getMessage('shop','level_too_low'));
+        }
+        if($goods->count<=0){
+            CommonFn::requestAjax(false,CommonFn::getMessage('shop','goods_count_empty'));
+        }
+        if($goods->end_time <= time() || $goods->status == -2){
+            CommonFn::requestAjax(false,CommonFn::getMessage('shop','goods_not_exist'));
+        }
+        if($user['score'] < $goods->score){
+            CommonFn::requestAjax(false,CommonFn::getMessage('shop','score_too_low')); 
+        }
+        $address_list = $user_obj->shop_address?$user_obj->shop_address:array();
+        $address = array();
+        foreach ($address_list as $value) {
+            if($address_id == $value['address_id']){
+                $address = $value;
+            }
+        }
+        if(!$address){
+            CommonFn::requestAjax(false,CommonFn::getMessage('shop','address_false'));
+        }
+        if ($goods->type == 'lottery') {
+            $criteria = new EMongoCriteria();
+            $criteria->user('==',$user_obj->_id);
+            $criteria->goods('==',array(array('goods_id' => $goods->_id,'count' => 1)));
+            $criteria->status('!=',-2);
+            $have_exchange = Order::model()->count($criteria);
+            if($have_exchange>=$goods->max_exchange){
+                CommonFn::requestAjax(false,CommonFn::getMessage('shop','have_too_much'));
+            }
+            $date = date('Ymd');
+            $Key = HelperKey::generateUserActionKey($user_id,$date,'lottery',$goods_id);
+            $times = UserActionRedis::get($Key);
+            $limit = $goods->max_times_per_day;
+            if($times>=$limit){
+                CommonFn::requestAjax(false,CommonFn::getMessage('shop','lottery_too_much'));
+            }else{
+                UserActionRedis::set($Key,$times+1);
+            }
+            $result = Service::factory('ScoreService')->cutDownScore($user_id,'lottery_goods',$goods->score);
+            $probability = $goods->probability;
+            $goods->lottertimes += 1; 
+            $goods->update(array('lottertimes'),true);
+
+            // 用户中奖历史检查
+            // 若用户已累计中奖十次以上则无法中奖
+            $criteria_order = new EMongoCriteria();
+            $criteria_order->user('==', new MongoId($user_id));
+            $all_orders = Order::model()->findAll($criteria_order);
+            if ($all_orders->count() >= 10) {
+                $data['user'] = RUser::model()->parseRow($user_obj,array('id','score'));
+                CommonFn::requestAjax(true,CommonFn::getMessage('shop','bad_luckey'),$data);
+            }
+
+            $result = Service::factory('LotteryService')->checkLucky($probability);
+            if($result==1){
+                $order = new Order();
+                $order->time = time();
+                $order->goods = array(array('goods_id' => $goods->_id,'count' => 1));
+                $order->user = $user_obj->_id;
+                $order->status = 3;
+                $order->address = $address;
+                $data['user'] = RUser::model()->parseRow($user_obj,array('id','score'));
+                if($result && $order->save()){
+                    $goods->count = $goods->count>=1?$goods->count-1:0;
+                    $goods->update(array('count',true));
+                    $data['order_id'] = (string)$order->_id;
+                    CommonFn::requestAjax(true,CommonFn::getMessage('shop','good_luckey'),$data);
+                }else{
+                    CommonFn::requestAjax(true,CommonFn::getMessage('shop','bad_luckey'),$data);
+                }
+            }else{
+                $data['user'] = RUser::model()->parseRow($user_obj,array('id','score'));
+                CommonFn::requestAjax(true,CommonFn::getMessage('shop','bad_luckey'),$data);
+            }
+        }else{
+            CommonFn::requestAjax(false,CommonFn::getMessage('shop','goods_no_lottery'));
+        }
+    }
+
+    /**
+     * 订单列表
+     */
+    public function actionOrderList(){
+        $user_id = Yii::app()->getRequest()->getParam("user_id");
+        $user_obj = CommonFn::apigetObJ($user_id,"ZUser",CommonFn::getMessage('user','id_not_exist'),201);
+        $page = intval(Yii::app()->getRequest()->getParam("page",1));
+        $pagesize = Yii::app()->params['OrderListPageSize'];
+        $conditions = array(
+                                'user'=>array('==',$user_obj->_id)
+                            );
+        $order = array(
+                        'time'=>'desc',
+                        );
+        $model = new Order();
+        $pagedata = CommonFn::getPagedata($model,$page,$pagesize,$conditions,$order);
+        $order_list = $pagedata['res'];
+        foreach ($order_list as $key => $value) {
+            $order_list[$key] = $model->output($value,array('id','price','order_num','time','time_str','status','status_str','status_str_color','goods'));
+        }
+        $data = array_values($order_list);
+        CommonFn::requestAjax(true,CommonFn::getMessage('message','operation_success'),$data,200,array('sum_count' => $pagedata['sum_count'],'sum_page'=>$pagedata['sum_page'],'page_size'=>$pagedata['page_size'],'current_page'=>$pagedata['current_page']));
+    }
+
+    /**
+     * 订单详情
+     */
+    public function actionOrderDetail(){
+        $order_id = Yii::app()->getRequest()->getParam("order_id");
+        $order = CommonFn::apigetObJ($order_id,"ZOrder",CommonFn::getMessage('message','params_illegal'));
+        $data = Order::model()->parseRow($order,array('id','price','express_info','time','memo','order_num','time_str','status','status_str','status_str_color','goods','address'));
+        CommonFn::requestAjax(true,CommonFn::getMessage('message','operation_success'),$data);
+    }
+
+
+
+} 

Fișier diff suprimat deoarece este prea mare
+ 0 - 0
www/webapp/o2o/dist/js/main.js


Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff