记录baigeli项目

 

1.live.php

事务操作的写法告

批量插入,不应该是遍历插入。

    public function setLive($data) {
        if (!$this->load($data,'') && !$this->validate()) {
            return false;
        }
        if (empty($data['uid'])) {
            $this->addError('errmsg','用户不存在');
            return false;
        }
        if (!is_array($this->spuarr) || empty($this->spuarr)) {
            $this->addError('errmsg','数据格式错误');
            return false;
        }
        if (strtotime($data['start_time'])-time() < 600) {
            $this->addError('errmsg','开始直播时间与当前时间间隔需大于十分钟');
            return false;
        }
        if (strtotime($data['start_time']) > strtotime($data['end_time'])) {
            $this->addError('errmsg','时间设置有误');
            return false;
        }
        if (strtotime($data['end_time']) - strtotime($data['start_time']) > 43200) {
            $this->addError('errmsg','直播时间不得大于12小时');
            return false;
        }
        $t = Yii::$app->db->beginTransaction();
        //创建直播间
        $model = new LiveRoom();
        $addmsg = [
            'uid'=>$data['uid'],
            'name'=>$data['name'],
            'img_url'=>$data['img_url'],
            'start_time'=>$data['start_time'],
            'end_time'=>$data['end_time'],
            'status'=>0,
            'sw'=>1,
            'coderate'=>isset($data['coderate'])?$data['coderate']:1800,
            'resolution'=>isset($data['resolution'])?$data['resolution']:'1280*720',
            'framerate'=>isset($data['framerate'])?$data['framerate']:24
        ];
        $model->setAttributes($addmsg);
        if (!$model->save()) {
            $errmsg = ['配置失败'];
            $err = $model->getErrors();
            if (!empty($err)) {
                $errmsg = current($err);
            }
            //记录日志
            CodeLog::createlog('配置直播间',$errmsg[0],'/live/live-api/setlive');
            $t->rollBack();
            $this->addError('errmsg',$errmsg[0]);
            return false;
        }

        $num = 1;   //添加直播商品
        foreach ($this->spuarr as $value) {
            $spu = new LiveSpu();
            $spu->type = 1;
            $spu->spu_id = $value;
            $spu->live_id = $model->id;
            $spu->del_flag = 0;
            $spu->sort = $num;
            if (!$spu->save()) {
                $errmsg = ['配置失败'];
                $err = $spu->getErrors();
                if (!empty($err)) {
                    $errmsg = current($err);
                }
                //记录日志
                CodeLog::createlog('配置直播间1',$errmsg[0],'/live/live-api/setlive');
                $t->rollBack();
                $this->addError('errmsg',$errmsg[0]);
                return false;
            }
            $num++;
        }
        $t->commit();
        return true;
    }

 2.live 和 item 里:

(1)每次都核对token,现在是可以统一配置,无需核对token

  (2)  查数据没有用searchApi,应该分为三个过程:判断传过来的参数,查数据,处理成返回的数据格式

4.获取id,name组成的键值对,可以用ArrayHelper::map($array'id''name');
     $model = self::find()->where(['type'=>$level,'del_flag'=>0])->orderBy(['sort'=>SORT_ASC]);
        $data = $model->select(['id','title'])->asArray()->all();
        $menus = [];
        foreach ($data as $key=>$item) {
            $menus[$item['id']] = $item['title'];
        }

     
 

改为:

 $arr = self::find()->select(['id','title'])->where(['type'=>$level,'del_flag'=>0])->orderBy(['sort'=>SORT_ASC])->asArray()->all();
 $menu = ArrayHelper::map($arr,'id','title');

5.获取无限极分类代码可以优化

位置:/shop/category-api/index                allCategory方法

优化后的代码更简洁,而且获取的是无线级别:

    public static function allCategory($path=0){
       
        $data = MeCategory::find()->select(['id','title','type'])->where(['pid'=>$path])->asArray()->all();
        foreach($data as $key=>$val)
        {
            $son = MeCategory::allCategory($val['id']);
            if(!empty($son))
            {
                $data[$key]['son'] = $son;
            }
        }
        return $data;

    }

 6.商品列表获取,写的有点乱

位置:/shop/item-api/index    getList

(1)看不懂:

 
 $vip = !isset($data['uid'])? 1:UserData::find()->where(['uid'=>$data['uid']])->asArray()->one();
 

(2)把一些复杂的数据库处理过程封装成函数,让逻辑清楚起来

(3)不理解keyword模糊搜索功能:

        不应该用中文分词吗?

       为什么要用到uid?

7.getdetail 这个模块代码必须处理一下,封装成多个函数!!!

位置:/shop/item-api/detail   getdetail

(1)性能优化:一条条查不如一起查;

     if (isset($data['order_id'])) {
            $collage_group = MeSpuGroup::find()->joinWith(['group','u'])->where(['me_spu_group.id'=>$order['collage_id']])->asArray()->one();
            $model['collage_head_url'][] = $collage_group['u']['head_url'];
            if (!empty($collage_group['group'])) {
                foreach ($collage_group['group'] as $v) {
                    $arr[] = $v['puid'];
//                    $userData = UserData::find()->where(['uid'=>$v['puid']])->asArray()->one();
//                    $model['collage_head_url'][] = $userData['head_url'];
                }
                $res = UserData::find()->select(['head_url'])->where(['in','uid',$arr])->asArray()->all();
             
            }
        }

8./shop/cart-api/index  getList 也是可读性很差,需要整理

9./shop/cart-api/add       addcart  

感觉少了个else,和continue

foreach ($data['sku_num'] as $value) {
            //如果有同样规格商品,直接增加数量
            $cart = MeCart::find()->where(['uid'=>$data['uid'],'sku_id'=>$value['sku_id'],'del_flag'=>0])->one();
            if (!empty($cart)) {
                $cart->num += $value['num'];
                if (!$cart->save()) {
                    $errmsg = ['添加数量失败'];
                    $msg = $cart->getErrors();
                    if (!empty($msg)) {
                        $errmsg = current($msg);
                    }
                    $this->addError('errmsg',$errmsg[0]);
                    return false;
                }
                continue;
            }
            //无同规格商品,新增
            $model = new MeCart();
            $model->sku_id = $value['sku_id'];
            $model->uid = $data['uid'];
            $model->num = $value['num'];
            $model->live_id = $live_id;     //设置对应直播间编号
            $model->del_flag = 0;
            if (!$model->save()) {
                $errmsg = ['添加购物车失败'];
                $msg = $model->getErrors();
                if (!empty($msg)) {
                    $errmsg = current($msg);
                }
                $this->addError('errmsg',$errmsg[0]);
                return false;
            }
        }

改为:

 foreach ($data['sku_num'] as $value) {
            //如果有同样规格商品,直接增加数量
            $cart = MeCart::find()->where(['uid'=>$data['uid'],'sku_id'=>$value['sku_id'],'del_flag'=>0])->one();
            if (!empty($cart)) {
                $cart->num += $value['num'];
                if (!$cart->save()) {
                    $errmsg = ['添加数量失败'];
                    $msg = $cart->getErrors();
                    if (!empty($msg)) {
                        $errmsg = current($msg);
                    }
                    $this->addError('errmsg',$errmsg[0]);
                    return false;
                }
               
            }else{
                //无同规格商品,新增
                $model = new MeCart();
                $model->sku_id = $value['sku_id'];
                $model->uid = $data['uid'];
                $model->num = $value['num'];
                $model->live_id = $live_id;     //设置对应直播间编号
                $model->del_flag = 0;
                if (!$model->save()) {
                    $errmsg = ['添加购物车失败'];
                    $msg = $model->getErrors();
                    if (!empty($msg)) {
                        $errmsg = current($msg);
                    }
                    $this->addError('errmsg',$errmsg[0]);
                    return false;
                }
              
            }
            continue;      //!!!!!!!!!!111保证继续下次循环
        }

 10./floor/floor-block-api/index     getList   可读性差,需整理

(1)两层遍历里sql查询,需要优化

  foreach($room_data as $k =>$v){
//            var_dump($v['floorItems']);die();
            foreach($v['floorItems'] as $i =>$j){
//                var_dump($j);die();
                if($j['type']== 1){
                    $room_data[$k]['floorItems'][$i]['titlename'] = MeCategory::find()->where(['id'=>$j['param']])->one()->title;
                }elseif($j['type'] == 2){
                    $room_data[$k]['floorItems'][$i]['item_id'] = MeSpu::find()->where(['spu_id'=>$j['param']])->one()->spu_id;
                }

            }
        }

可以先遍历,得到两个数组,然后再用in做sql查询

11./shop/item-api/second-kill  getList   45行  简化重复代码

  if ($value['sec_time'] < date('Y-m-d H:i:s') && $value['end_sec_time'] > date('Y-m-d H:i:s')) {
                $value['status'] = 2;  //1:已结束2:抢购中3:即将开始
                if ($num == 0) {
                    $num++;
                    $value['check'] = $num;
                }
            }
            if ($value['sec_time'] > date('Y-m-d H:i:s')) {
                $value['status'] = 3;
                if ($num == 0) {
                    $num++;
                    $value['check'] = $num;
                }
            }
            if ($value['end_sec_time'] < date('Y-m-d H:i:s')) {
                $value['status'] = 1;
                if ($num == 0) {
                    $num++;
                    $value['check'] = $num;
                }
            }

改为:

      if ($value['sec_time'] < date('Y-m-d H:i:s') && $value['end_sec_time'] > date('Y-m-d H:i:s')) {
                $value['status'] = 2;  //1:已结束2:抢购中3:即将开始
               
            }
            if ($value['sec_time'] > date('Y-m-d H:i:s')) {
                $value['status'] = 3;
               
            }
            if ($value['end_sec_time'] < date('Y-m-d H:i:s')) {
                $value['status'] = 1;
            }
            if ($num == 0) {
                $num++;
                $value['check'] = $num;
            }
 
 
 
 



 
 

猜你喜欢

转载自www.cnblogs.com/juanzhi/p/9822015.html
今日推荐