码迷,mamicode.com
首页 > 其他好文 > 详细

记录baigeli项目

时间:2018-10-22 20:37:38      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:时间间隔   插入   oom   lse   函数   visible   plain   end   sele   

 

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;
            }
 

 

 
 
 

 




 

 
 

记录baigeli项目

标签:时间间隔   插入   oom   lse   函数   visible   plain   end   sele   

原文地址:https://www.cnblogs.com/juanzhi/p/9822015.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!