CheckFileController.class.php 3.4 KB
<?php
/**
 * Created by PhpStorm.
 * User: liyifei2012it
 * Date: 17/5/22
 * Time: 18:07
 */
namespace Frontend\Controller\Callback;

use Think\Log;
use VcySDK\Service;
use VcySDK\FileConvert;
use Common\Common\Constant;
use Common\Service\TaskService;
use Common\Service\FileService;

class CheckFileController extends AbstractController
{
    /**
     * 检查文件转码计划任务回调接口
     * @author liyifei
     */
    public function Index()
    {
        Log::record(sprintf('---%s %s CheckFile START---', QY_DOMAIN, APP_IDENTIFIER), Log::INFO);

        $fileId = I('get.file_id', 0, 'intval');
        if (empty($fileId)) {
            $this->_exit();
        }

        // 未找到任务,退出
        $taskServ = new TaskService();
        $task = $taskServ->get_by_conds(['file_id' => $fileId]);
        if (empty($task)) {
            Log::record("not found task, file_id: {$fileId}", Log::INFO);
            $this->_exit();
        }

        // 未找到文件,删除计划任务
        $fileServ = new FileService();
        $file = $fileServ->get($fileId);
        if (empty($file)) {
            Log::record("not found file_id: {$fileId}", Log::INFO);
            $this->_delTask($fileId, $task['cron_id']);
        }

        // 查询转码结果
        $at_convert_url = '';
        $convert_status = Constant::FILE_STATUS_CONVERT;
        $convertServ = new FileConvert(Service::instance());
        $result = $convertServ->get($file['at_id']);
        if (is_array($result) && isset($result['caConvertStatus'])) {
            // 转码成功
            if (!empty($result['caAttachment']) && $result['caConvertStatus'] == FileConvert::CONVERT_STATUS_SUCCESS) {
                $convert_status = Constant::FILE_STATUS_NORMAL;
                $at_convert_url = $result['caAttachment'];
            }

            // 转码失败(状态不是:待处理、转码中、成功,即为失败)
            $normalStatus = [
                FileConvert::CONVERT_STATUS_WATTING,
                FileConvert::CONVERT_STATUS_ING,
                FileConvert::CONVERT_STATUS_SUCCESS,
            ];
            if (!in_array($result['caConvertStatus'], $normalStatus)) {
                $convert_status = Constant::FILE_STATUS_FAIL;
            }
        }

        // 更新转码状态,结束计划任务
        if ($convert_status != Constant::FILE_STATUS_CONVERT) {
            $fileServ->update($fileId, [
                'file_status' => $convert_status,
                'at_convert_url' => $at_convert_url,
            ]);
            Log::record("convert end, file_id: {$fileId}, at_convert_url: {$at_convert_url}", Log::INFO);

            // 结束计划任务
            $this->_delTask($fileId, $task['cron_id']);
        }

        $this->_exit();
    }

    /**
     * 退出
     * @author zhonglei
     * @return void
     */
    private function _exit()
    {
        // 日志结束
        Log::record(sprintf('---%s %s CheckFile END---', QY_DOMAIN, APP_IDENTIFIER), Log::INFO);
        exit('SUCCESS');
    }

    /**
     * 删除计划任务并退出
     * @author liyifei
     * @param int $file_id 文件ID
     * @param string $cron_id UC计划任务ID
     * @return void
     */
    private function _delTask($file_id, $cron_id)
    {
        $taskServ = new TaskService();
        $taskServ->delTask($file_id, $cron_id);

        Log::record("delete task: {$cron_id}", Log::INFO);
        $this->_exit();
    }
}