AiVideoLogic.php 4.1 KB
<?php

namespace App\Http\Logic\Bside\Ai;

use App\Helper\Translate;
use App\Http\Logic\Bside\BaseLogic;
use App\Models\Ai\AiBlogAuthor;
use App\Models\Ai\AiVideo;
use App\Models\Project\AiBlogTask;
use App\Models\Project\AiVideoTask;
use App\Models\Project\ProjectAiSetting;
use App\Models\RouteMap\RouteMap;
use App\Services\AiBlogService;
use App\Services\AiVideoService;

/**
 * @remark :视频模块
 * @name   :AiVideoLogic
 * @author :lyh
 * @method :post
 * @time   :2025/3/5 14:11
 */
class AiVideoLogic extends BaseLogic
{
    public function __construct()
    {
        parent::__construct();
        $this->param = $this->requestAll;
        $this->model = new AiVideo();
    }

    /**
     * @remark :获取配置信息
     * @name   :getProjectAiSetting
     * @author :lyh
     * @method :post
     * @time   :2025/2/21 14:51
     */
    public function getProjectAiSetting(){
        $projectAiSettingModel = new ProjectAiSetting();
        $aiSettingInfo = $projectAiSettingModel->read(['project_id'=>$this->user['project_id']]);
        if($aiSettingInfo === false){
            $this->fail('请先联系管理员开启Ai配置');
        }
        return $aiSettingInfo;
    }

    /**
     * @remark :ai发布博客
     * @name   :blogSave
     * @author :lyh
     * @method :post
     * @time   :2023/7/5 14:46
     */
    public function videoSave(){
        try {
            $this->param['route'] = RouteMap::setRoute($this->param['tit'], RouteMap::SOURCE_AI_VIDEO, $this->param['id'], $this->user['project_id']);
            $this->model->edit($this->param,['id'=>$this->param['id']]);
            $aiSettingInfo = $this->getProjectAiSetting();
            $aiBlogService = new AiBlogService();
            $aiBlogService->mch_id = $aiSettingInfo['mch_id'];
            $aiBlogService->key = $aiSettingInfo['key'];
            $aiBlogService->updateDetail(['task_id'=>$this->param['task_id'],'title'=>$this->param['new_title'],'thumb'=>$this->param['image'],'route'=>$this->param['route'],'author_id'=>$this->param['author_id']]);
        }catch (\Exception $e){
            $this->fail('保存失败,请联系管理员');
        }
        return $this->success();
    }

    /**
     * @remark :发布任务
     * @name   :sendTask
     * @author :lyh
     * @method :post
     * @time   :2025/2/14 10:28
     * @detail :createTask =>type=2/生成文章
     * @detail :status=1/待执行
     */
    public function sendTask(){
        $aiVideoService = new AiVideoService($this->user['project_id']);
        $result = $aiVideoService->createTask($this->param['title'],$this->param['description'],$this->param['images'],$this->param['anchor'] ?? []);
        if($result['status'] == 200){
            $aiVideoTaskModel = new AiVideoTask();
            $aiVideoTaskModel->addReturnId(['task_id'=>$result['data']['task_id'],'project_id'=>$this->user['project_id']]);
            $id = $this->model->addReturnId(['task_id'=>$result['data']['task_id'],'description'=>$this->param['description'],'project_id'=>$this->user['project_id'],'images'=>json_encode($this->param['images'],true),'anchor'=>json_encode($this->param['anchor'] ?? [],true)]);
            return $this->success(['id'=>$id]);
        }
        return $this->success();
    }

    /**
     * @remark :删除aiVideo
     * @name   :videoDelete
     * @author :lyh
     * @method :post
     * @time   :2025/3/6 10:00
     */
    public function videoDelete(){
        try {
            $aiSettingInfo = $this->getProjectAiSetting();
            $aiBlogService = new AiBlogService();
            foreach ($this->param['ids'] as $id) {
                $info = $this->model->read(['id'=>$id],['task_id']);
                $aiBlogService->mch_id = $aiSettingInfo['mch_id'];
                $aiBlogService->key = $aiSettingInfo['key'];
                $aiBlogService->delDetail($info['task_id']);
                //删除路由映射
                RouteMap::delRoute(RouteMap::SOURCE_AI_VIDEO, $id, $this->user['project_id']);
                $this->model->del(['id'=>$id]);
            }
        }catch (\Exception $e){
            $this->fail('删除失败,请联系管理员');
        }
        return $this->success();
    }


}