123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- <?php
- namespace App\Service;
- use App\Log;
- use App\Models\Album;
- use App\Models\Episode;
- use App\Models\Material;
- use App\Support\DouYinApi;
- class AlbumManageService
- {
- CONST BIND_PAGE = 'pages/subPackages/videoPlayer/index';
- public static function createAlbum($appId, $title, $seqNum, $coverList, $year, $albumStatus, $recommendation, $desp
- , $tagList, $qualification, $recordInfo, $recordAuditInfo, $episodeInfoList, &$errno) {
- try {
- $tagList = json_decode($tagList, 1);
- $coverList = json_decode($coverList, 1);
- # 短剧参数验证
- $albumParamsValidStatus = AlbumManageService::albumParamsValid($appId, $title, $seqNum, $coverList, $year, $albumStatus
- , $recommendation, $desp, $tagList, $qualification, $errno);
- if (!$albumParamsValidStatus) return false;
- # 如果备案审核信息不为空,校验备案信息
- if (!empty($recordAuditInfo)) {
- $recordAuditInfo = json_decode($recordAuditInfo, 1);
- $recordAuditInfoParamsValidStatus = AlbumManageService::recordAuditInfoParamsValid($recordAuditInfo, $errno);
- if (!$recordAuditInfoParamsValidStatus) return false;
- }
- # 如何剧集信息不为空,校验剧集信息
- if (!empty($episodeInfoList)) {
- $episodeInfoList = json_decode($episodeInfoList, 1);
- $episodeParamValidStatus = AlbumManageService::episodeParamsValid($episodeInfoList, $errno);
- if (!$episodeParamValidStatus) return false;
- }
- # 调用抖音接口
- $responseData = DouYinApi::createAlbum($appId, $title, $seqNum, $coverList, $year, $albumStatus, $recommendation
- , $desp, $tagList, $qualification, $recordInfo, $recordAuditInfo);
- $albumId = $responseData['album_id'] ?? '';
- if (empty($albumId)) {
- $errno = 2400; # 调用抖音创建短剧失败
- return false;
- }
- # 调用成功后将数据保存到系统
- $res = Album::saveData($appId, $title, $seqNum, $coverList, $year, $albumStatus, $recommendation, $desp, $tagList
- , $qualification, $albumId);
- if(!$res){
- $errno = 500;
- return false;
- }
- # 如果同时设置了剧集列表,则一并提交到抖音
- if (!empty($episodeInfoList)) {
- $responseData = DouYinApi::editAlbum($appId, $albumId, $title, $seqNum, $coverList, $year, $albumStatus, $recommendation
- , $desp, $tagList, $qualification, $recordInfo, $recordAuditInfo, $episodeInfoList);
- $episodeIdMap = $responseData['episode_id_map'] ?? [];
- if(empty($episodeIdMap)) {
- $errno = 2401;
- return false;
- }
- // 更新剧集信息
- $episodeSaveStatus = Episode::saveData($appId, $albumId, $episodeInfoList, $episodeIdMap);
- if(!$episodeSaveStatus) {
- $errno = 500;
- return false;
- }
- }
- return true;
- } catch (\Exception $exception) {
- Log::logError('创建短剧异常', [
- 'params' => [
- 'app_id' => $appId, 'title' => $title, 'seq_num' => $seqNum, 'cover_list' => $coverList, 'year' => $year,
- 'album_status' => $albumStatus, 'recommendation' => $recommendation, 'desp' => $desp, 'tag_list' => $tagList,
- 'qualification' => $qualification, 'record_info' => $recordInfo, 'record_audit_info' => $recordAuditInfo,
- 'episode_info_list' => $episodeInfoList
- ],
- 'exception' => [
- 'file' => $exception->getFile(), 'line' => $exception->getLine(), 'message' => $exception->getMessage(),
- 'trace' => $exception->getTraceAsString()
- ]
- ]);
- $errno = 400;
- return false;
- }
- }
- public static function albumParamsValid($appId, $title, $seqNum, $coverList, $year, $albumStatus, $recommendation
- , $desp, $tagList, $qualification, &$errcode) {
- # 验证必要参数是否为空
- if(empty($appId) || empty($title) || empty($seqNum) || empty($coverList) || empty($year) || empty($albumStatus)||
- empty($recommendation) || empty($desp) || empty($tagList) || empty($qualification)) {
- $errcode = 1102; return false;
- }
- # 验证参数内容
- return true;
- }
- public static function recordAuditInfoParamsValid($recordAuditInfo, &$error) {
- if(!isset($recordAuditInfo['record_material'])) {
- $error = 1102;
- return false;
- }
- if(isset($recordAuditInfo['broadcast_record_info']) && (!isset($recordAuditInfo['broadcast_record_info']['record_type']) ||
- !isset($recordAuditInfo['broadcast_record_info']['broadcast_record_number']))) {
- $error = 1102;
- return false;
- }
- if(empty($recordAuditInfo['record_material']['name']) ||
- empty($recordAuditInfo['record_material']['duration']) ||
- empty($recordAuditInfo['record_material']['seqs_count']) ||
- empty($recordAuditInfo['record_material']['production_organisation']) ||
- empty($recordAuditInfo['record_material']['director']) ||
- empty($recordAuditInfo['record_material']['producer']) ||
- empty($recordAuditInfo['record_material']['actor']) ||
- empty($recordAuditInfo['record_material']['summary']) ||
- empty($recordAuditInfo['record_material']['cost_distribution_uri']) ||
- empty($recordAuditInfo['record_material']['assurance_uri']) ||
- empty($recordAuditInfo['record_material']['playlet_production_cost'])
- ){
- $error = 1102;
- return false;
- }
- return true;
- }
- public static function episodeParamsValid($episodeInfoList, &$errcode) {
- foreach($episodeInfoList as $episodeInfo) {
- if(empty($episodeInfo['title']) || empty($episodeInfo['seq']) || empty($episodeInfo['cover_list'])
- || empty($episodeInfo['open_video_id']) || !is_array($episodeInfo['cover_list'])) {
- $errcode = 1102;
- return false;
- }
- }
- return true;
- }
- public static function editAlbum($appId, $albumId, $title, $seqNum, $coverList, $year, $albumStatus, $recommendation, $desp
- , $tagList, $qualification, $recordInfo, $recordAuditInfo, $episodeInfoList, &$errno) {
- $tagList = json_decode($tagList, 1);
- $coverList = json_decode($coverList, 1);
- # 短剧参数验证
- $albumParamsValidStatus = AlbumManageService::albumParamsValid($appId, $title, $seqNum, $coverList, $year, $albumStatus, $recommendation
- , $desp, $tagList, $qualification, $errno);
- if(!$albumParamsValidStatus) return false;
- # 剧集参数验证
- $episodeInfoList = json_decode($episodeInfoList, 1);
- $episodeParamsValidStatus = AlbumManageService::episodeParamsValid($episodeInfoList, $errno);
- if(!$episodeParamsValidStatus) return false;
- # 如果备案审核信息不为空,校验备案信息
- if (!empty($recordAuditInfo)) {
- $recordAuditInfo = json_decode($recordAuditInfo, 1);
- $recordAuditInfoParamsValidStatus = AlbumManageService::recordAuditInfoParamsValid($recordAuditInfo, $errno);
- if (!$recordAuditInfoParamsValidStatus) return false;
- }
- # 调用抖音接口
- $responseData = DouYinApi::editAlbum($appId, $albumId, $title, $seqNum, $coverList, $year, $albumStatus, $recommendation
- , $desp, $tagList, $qualification, $recordInfo, $recordAuditInfo, $episodeInfoList);
- $albumId = $responseData['album_id'] ?? '';
- $version = $responseData['version'] ?? 0;
- $episodeIdMap = $responseData['episode_id_map'] ?? [];
- if(empty($episodeIdMap)) {
- $errno = 2401;
- return false;
- }
- # 调用成功后将数据保存到系统
- // 更新短剧信息
- $albumSaveRes = Album::saveData($appId, $title, $seqNum, $coverList, $year, $albumStatus, $recommendation, $desp
- , $tagList, $qualification, $albumId);
- // 更新剧集信息
- $episodeSaveStatus = Episode::saveData($appId, $albumId, $episodeInfoList, $episodeIdMap);
- if(!$albumStatus || !$episodeSaveStatus){
- $errno = 400;
- return false;
- }
- return true;
- }
- public static function bindPage($appId, $albumId, $episodeIdList, &$errno) {
- # 查询剧集基础信息
- $episodeInfoList = Episode::getInfoList($appId, $albumId, $episodeIdList);
- $path = self::BIND_PAGE;
- # 如果要绑定多个剧集
- foreach($episodeIdList as $episodeId) {
- $episodeInfo = $episodeInfoList->where('episode_id', $episodeId)->first();
- $seq = $episodeInfo->seq ?? null;
- if(empty($seq)) {
- continue;
- }
- $params = [
- ['key' => 'album_id', 'value' => strval($albumId)],
- ['key' => 'episode_id', 'value' => strval($episodeId)],
- ['key' => 'seq', 'value' => strval($seq)]
- ];
- $singleSchemaBind = [
- 'album_id' => $albumId, 'episode_id' => $episodeId, 'path' => $path, 'params' => $params
- ];
- $responseData = DouYinApi::bindPage($appId, $singleSchemaBind, 1);
- print_r($responseData);
- }
- }
- public static function albumAuth($maAppId, $appIdList, $albumId, $increment, &$error) {
- $responseData = DouYinApi::albumAuth($maAppId, $appIdList, $albumId, $increment);
- print_r($responseData);
- }
- public static function albumToExamine($appId, $albumId, &$error) {
- $responseData = DouYinApi::albumToExamine($appId, $albumId);
- print_r($responseData);
- }
- public static function albumOnline($appId, $albumId, $operate, $version, $errcode) {
- $responseData = DouYinApi::albumOnline($appId, $albumId, $operate, $version);
- print_r($responseData);
- }
- public static function albumFetch($appId, $queryType, $batchQuery, $singleQuery, $detailQuery) {
- $responseData = DouYinApi::albumFetch($appId, $queryType, $batchQuery, $singleQuery, $detailQuery);
- print_r($responseData);
- }
- public static function albumList($appId, $keyword, $page, $pageSize) {
- list($list, $count) = Album::getList([
- 'app_id' => $appId, 'keyword' => $keyword
- ], $page, $pageSize);
- # 数据格式化
- foreach($list as $info) {
- # 封面图处理
- $coverList = explode(',', $info->cover_list);
- # 根据封面id获取封面url
- $picInfo = Material::getPicList($appId, $coverList);
- $coverInfo = $picInfo->first();
- $info->cover_url = $coverInfo->oss_url ?? '';
- }
- return [$list, $count];
- }
- public static function albumDetail($albumId) {
- }
- }
|