easyswoole静态化api

  • crontab定时任务
    • vendor\dragonmantank\cron-expression\src\Cron\CronExpression.php
      在factory函数里面增加以下代码:
      ‘@minute’ => ‘*/1 * * * *’
    • EasySwooleEvent.php
    • 在mainServerCreate函数里面增加如下代码:
    use App\Crontab\TaskApi;
    Crontab::getInstance()->addTask(TaskApi::class);
    
    • App/Crontab/TaskApi.php
    <?php
       	namespace App\Crontab;
       	use EasySwoole\EasySwoole\Crontab\AbstractCronTask;
       	class TaskApi extends AbstractCronTask
       	{
       	    public static function getRule(): string
       	    {
       	        // TODO: Implement getRule() method.
       	        // 定时周期 (每分钟)
       	        return '@minute';
       	    }
       	    public static function getTaskName(): string
       	    {
       	        // TODO: Implement getTaskName() method.
       	        // 定时任务名称
       	        return 'taskApi';
       	    }
       	    static function run(\swoole_server $server, int $taskId, int $fromWorkerId,$flags=null)
       	    {
       	        // TODO: Implement run() method.
       	        // 定时任务处理逻辑
       	        var_dump('run once per minute');
       	    }
       	}
    
    代码如下:
    • EasySwooleEvent.php
    • 在mainServerCreate函数里面增加如下代码:
    use App\Crontab\TaskApi;
    Crontab::getInstance()->addTask(TaskApi::class);
    
    • App/Lib/Cache/Video.php
    <?php
       /**
        * Created by PhpStorm.
        * User: niuyueyang
        * Date: 2019/7/24
        * Time: 22:07
        */
       namespace App\Lib\Cache;
       use App\Model\Video as VideoModel;
       class Video{
           public function setIndexVideo() {
               $catIds=array_keys(\Yaconf::get('category.cats'));
               array_unshift($catIds,0);
               $modelObj=new VideoModel();
               // 写 video json 缓存数据
               foreach($catIds as $catId) {
                   $catId=intval($catId);
                   $condition=[];
                   $condition['cat_id'] = $catId;
                   try{
                       $data=$modelObj->getVideoCacheData($condition);
                   }catch(\Exception $e){
                       $data=[];
                   }
                   if(empty($data)){
                       continue;
                   }
                   foreach ($data as &$list){
                       $list['create_time'] = date("Ymd H:i:s", $list['create_time']);
                       $list['video_duration'] = gmstrftime("%H:%M:%S", $list['video_duration']);
                   }
                   $flag = file_put_contents(EASYSWOOLE_ROOT."/webroot/json/".$catId.".json", json_encode($data));
                   if(empty($flag)){
                       echo $catId.'error'.PHP_EOL;
                   }
                   else{
                       echo $catId.'success'.PHP_EOL;
                   }
               }
           }
       }
    
    • App/Model/Video.php(添加如下方法)
        public function getVideoCacheData($condition=[],$size=1000){
           $this->db->where('status',0);
           $res = $this->db->where('cat_id',$condition['cat_id'])->get($this->tableName,[0,$size],'*');
           return $res;
       }
    
    • 上述文件整体代码如下:
    <?php
       /**
        * Created by PhpStorm.
        * User: niuyueyang
        * Date: 2019/7/17
        * Time: 18:45
        */
       namespace App\Model;
       class Video extends Base{
           public $tableName='video';
           public $db='';
           public function __construct()
           {
               $conf = new \EasySwoole\Mysqli\Config(\EasySwoole\EasySwoole\Config::getInstance()->getConf('MYSQL'));
               $this->db = new \EasySwoole\Mysqli\Mysqli($conf);
           }
           public function getVideoData($condition=[],$page=1,$size=10){
               $this->db->orderBy('id','desc');
               $res = $this->db->where('cat_id',1)->get($this->tableName,[($page-1)*$size,$size],'*');
               $count=$this->db->where('cat_id',1)->count($this->tableName);
               $data=[
                   'list'=>$res,
                   'count'=>$count,
                   'page'=>$page,
                   'size'=>$size
               ];
       //        $sql = $this->db->getLastQuery();
               return $data;
           }
           public function getVideoCacheData($condition=[],$size=1000){
               $this->db->where('status',0);
               $res = $this->db->where('cat_id',$condition['cat_id'])->get($this->tableName,[0,$size],'*');
               return $res;
           }
       }
    
    • App/Crontab/TaskApi.php
    <?php
       /**
        * Created by PhpStorm.
        * User: niuyueyang
        * Date: 2019/7/24
        * Time: 21:55
        */
       namespace App\Crontab;
       use EasySwoole\EasySwoole\Crontab\AbstractCronTask;
       use App\Lib\Cache\Video;
       
       class TaskApi extends AbstractCronTask
       {
           public $model='';
           public function __construct()
           {
               $this->model=new Video();
           }
       
           public static function getRule(): string
           {
               // TODO: Implement getRule() method.
               // 定时周期 (每分钟)
               return '@minute';
           }
           public static function getTaskName(): string
           {
               // TODO: Implement getTaskName() method.
               // 定时任务名称
               return 'taskApi';
           }
           static function run(\swoole_server $server, int $taskId, int $fromWorkerId,$flags=null)
           {
               // TODO: Implement run() method.
               // 定时任务处理逻辑
               $model=new Video();
               $model->setIndexVideo();
               var_dump('run once per minute');
           }
       }
    
    • App/HttpController/Api/Index.php
      增加如下方法(对外提供api)
        public function lists(){
           $params=$this->request()->getRequestParam();
           $catId=!empty($params['cat_id'])?intval($params['cat_id']):1;
           $videoFile=EASYSWOOLE_ROOT."/webroot/json/".$catId.".json";
           $videoData=is_file($videoFile)?file_get_contents($videoFile):[];
           $videoData=!empty($videoData)?json_decode($videoData,true):[];
           //分页计算
           $count=count($videoData);
           $totalPage=ceil($count/$params['size']);
           $from=($params['page']-1)*$params['size'];
           $videoData=array_splice($videoData,$from,$params['size']);
           $result=[
               'totalPage'=>$totalPage,
               'currentPage'=>$params['page'],
               'count'=>intval($count),
               'lists'=>$videoData
           ];
    
           return $this->writeJson(200,  $result,'ok');
       }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值