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