| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688 |
- <?php
- namespace Modules\Api\Controllers;
- use App\Constants\CreatorConstant;
- use App\Model\TypeModel;
- use App\Model\TypeVideoModel;
- use App\Model\VideoModel;
- use App\Repositories\ConfigRepoistory;
- use App\Repositories\CreatorRepository;
- use App\Repositories\CreatorRuleRepository;
- use App\Repositories\UserRepository;
- use App\Repositories\Utils\M3u8CacheRepository;
- use App\Repositories\Utils\MediaCenterRepository;
- use App\Repositories\VideoRepository;
- use \Hyperf\Validation\Contract\ValidatorFactoryInterface;
- class CreatorController extends BaseController
- {
- // 创作者中心
- public function center()
- {
- $result = [
- 'level' => 0,
- 'count_up' => 0, // 上架作品数.
- 'count_down' => 0, // 下架作品数
- 'count_reject' => 0, // 拒绝作品数
- 'count_checking' => 0, // 审核中作品数
- 'total_creator' => 0, // 多少创作者
- 'tutorial' => [],
- 'course' => [],
- 'top_week' => [], // 收益月榜单
- 'top_all' => [], // 收益总计榜单
- 'upload_is_maintenance' => false, // 上传是否维护中
- 'upload_maintenance_desc' => '', // 上传维护描述信息
- ];
- $userCode = $this->getUserId();
- $userRepo = make(UserRepository::class);
- $userInfo = $userRepo->getUserInfoFromCache($userCode);
- $creatorRepo = make(CreatorRepository::class);
- $configRepo = make(ConfigRepoistory::class);
- $detail = $creatorRepo->detail($userCode);
- $level = 0;
- if (!empty($detail)) {
- $level = intval($detail->level);
- }
- $countUp = $creatorRepo->countVideoByStatusType($userCode, 'up');
- $countDown = $creatorRepo->countVideoByStatusType($userCode, 'down');
- $countReject = $creatorRepo->countVideoByStatusType($userCode, 'reject');
- $countChecking = $creatorRepo->countVideoByStatusType($userCode, 'checking');
- $totalCreator = $creatorRepo->countCreator();
- // 攻略
- $tutorial = [
- [
- 'cover' => '',
- 'title' => '剪辑创作技巧',
- 'scheme' => 'url://',
- 'link' => 'http://h5.py163.xyz/'. env('STATIC_DIR_NAME') .'/creator/jiqiao.html',
- ],
- [
- 'cover' => '',
- 'title' => '剪辑工具推荐',
- 'scheme' => 'url://',
- 'link' => 'http://h5.py163xyz/'. env('STATIC_DIR_NAME') .'/creator/gongju.html',
- ],
- ];
- // 教程出品
- $course = [
- [
- 'cover' => '',
- 'title' => '如何利用视频盈利',
- 'scheme' => 'url://',
- 'link' => 'http://h5.py163xyz/'. env('STATIC_DIR_NAME') .'/creator/zhuanqian.html',
- ],
- [
- 'cover' => '',
- 'title' => '如何直走高质量视频',
- 'scheme' => 'url://',
- 'link' => 'http://h5.py163xyz/'. env('STATIC_DIR_NAME') .'/creator/tigao.html',
- ],
- ];
- $result['level'] = $level;
- $result['count_up'] = $countUp;
- $result['count_down'] = $countDown;
- $result['count_reject'] = $countReject;
- $result['count_checking'] = $countChecking;
- $result['total_creator'] = $totalCreator;
- $result['tutorial'] = $tutorial;
- $result['course'] = $course;
- $topWeekItems = $creatorRepo->getTopIncome('week', 5, false);
- $topAllItems = $creatorRepo->getTopIncome('all', 5, false);
- // TODO 过段时间,换成上面真实的数据.
- // $topWeekItems = $creatorRepo->fakeTopIncome('week', true);
- // $topAllItems = $creatorRepo->fakeTopIncome('all', true);
- if (!empty($topWeekItems)) {
- foreach ($topWeekItems as &$v) {
- $v['avatar'] = M3u8CacheRepository::getImageUrl($v['avatar']);
- }
- }
- if (!empty($topAllItems)) {
- foreach ($topAllItems as &$v) {
- $v['avatar'] = M3u8CacheRepository::getImageUrl($v['avatar']);
- }
- }
- $result['top_week'] = !empty($topWeekItems) ? $topWeekItems : [];
- $result['top_all'] = !empty($topAllItems) ? $topAllItems : [];
- if (isset($userInfo['is_vip']) && $userInfo['is_vip'] != 'y') {
- $result['upload_is_maintenance'] = true;
- $result['upload_maintenance_desc'] = '会员VIP才可以上传视频赚钱哦!';
- }
- $arrConfig = $configRepo->gets(['upload_maintenance_status', 'upload_maintenance_desc'], 'sys', []);
- if (isset($arrConfig['upload_maintenance_status']) && intval($arrConfig['upload_maintenance_status']) == 1) {
- $result['upload_is_maintenance'] = true;
- $result['upload_maintenance_desc'] = $arrConfig['upload_maintenance_desc'] ?? '上传维护中,请稍后恢复再试';
- }
- return json_success($result);
- }
- //等级中心
- public function levelCenter()
- {
- $validatorFactory = make(ValidatorFactoryInterface::class);
- $userCode = $this->getUserId();
- $userRepo = make(UserRepository::class);
- $arrUserInfo = $userRepo->getUserInfoData($userCode);
- $ruleRepo = make(CreatorRuleRepository::class);
- $creatorRepo = make(CreatorRepository::class);
- $detail = $creatorRepo->detail($userCode);
- $income = 0; // 当前收入, 提现会从累计里扣除算出来的.
- $totalIncome = 0; // 累计收入
- $level = 0;
- $dayAddonNum = 0;
- if (!empty($detail)) {
- $income = floatval($detail->income);
- $totalIncome = floatval($detail->total_income);
- $level = intval($detail->level);
- $dayAddonNum = intval($detail->day_addon_num);
- }
- $ruleTable = $ruleRepo->getRules();
- $level0Rule = $ruleTable[0];
- if (!empty($ruleTable)) {
- foreach ($ruleTable as &$v) {
- $v['day_addon_num'] = $dayAddonNum;
- unset($v['deduction_scale']);
- }
- }
- $ruleText = <<<EOT
- 1.申请创作者需上传并审核通过上架%s部短视频;
- 2.视频总收益满足条件即可升级;
- 3.未认证用户分成比例为%s%%;
- 4.一旦发现上传的视频不符合规则或滥竽充数,则取消创作者资格;
- 5.上传视频依据创作者等级有不同数量限制,每日上传限制于每日零点清除重计。
- 6.视频出售获得的金币会自动转化成现金收益(可在我的钱包-账单-现金明细里查看),10金币=1元。
- 7.邀请可以永久增加每日上传次数限制,邀请3人--增加1次,10人--2次,30人--3次,80人--5次,120人--6次,200人--9次
- EOT;
- $ruleText = sprintf($ruleText, CreatorConstant::LEVEL0_1_VIDEO_NUM, $level0Rule['commission_ratio']);
- $ruleText = trim($ruleText);
- $result = [
- 'user_code' => $userCode,
- 'nick' => !empty($detail->user->nick) ? $detail->user->nick : '',
- 'total_income' => $totalIncome,
- 'level' => $level,
- 'published_video' => $creatorRepo->countPublishedVideo($userCode),
- 'require_video' => CreatorConstant::APPLY_REQUIRE_VIDEO,
- 'total_like' => $creatorRepo->sumLikedVideo($userCode),
- 'require_like' => CreatorConstant::APPLY_REQUIRE_LIKE,
- 'rule_text' => $ruleText,
- 'rule_table' => $ruleTable,
- ];
- return json_success($result);
- }
- // 申请创作者
- public function apply()
- {
- $userCode = $this->getUserId();
- $userRepo = make(UserRepository::class);
- $arrUserInfo = $userRepo->getUserInfoData($userCode);
- $ruleRepo = make(CreatorRuleRepository::class);
- $creatorRepo = make(CreatorRepository::class);
- $detail = $creatorRepo->detail($userCode);
- $level = 0;
- if (!empty($detail)) {
- $level = intval($detail->level);
- }
- if ($level != 0) {
- return json_fail('您已经是创作者了,无需再申请');
- } else {
- if (!empty($detail)) {
- if ($detail->status == 3) {
- return json_fail('请耐心等待,正在审核中,如需加急请联系客服');
- } elseif ($detail->status == 2) {
- return json_fail('申请已被拒绝');
- }
- }
- }
- $publishedVideo = $creatorRepo->countPublishedVideo($userCode);
- if ($publishedVideo < CreatorConstant::APPLY_REQUIRE_VIDEO) {
- return json_fail('作品数不足', 6001);
- }
- $creatorRepo->applyToUncheck($userCode);
- return json_success(['result' => 'success', 'msg' => '申请成功,等待审核']);
- }
- // 我的审核视频列表
- public function videoPages()
- {
- $validatorFactory = make(ValidatorFactoryInterface::class);
- $userCode = $this->getUserId();
- $userRepo = make(UserRepository::class);
- $inputData = $this->getJsonData();
- $rules = [
- 'status_type' => 'required|in:up,down,check',
- 'page' => 'nullable|int',
- 'page_size' => 'nullable|int',
- ];
- $validator = $validatorFactory->make($inputData, $rules);
- if ($validator->fails()) {
- // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
- return json_fail($validator->errors()->first());
- }
- $statusType = data_get($inputData, 'status_type', '');
- $page = format_page(data_get($inputData, 'page', 1));
- $pageSize = intval(data_get($inputData, 'page_size', 10));
- if ($pageSize > 20) {
- $pageSize = 20;
- }
- $creatorRepo = make(CreatorRepository::class);
- $lists = $creatorRepo->videoPages($userCode, $statusType, $page, $pageSize);
- $arrLists = $lists->toArray();
- if (!empty($arrLists['data'])) {
- foreach ($arrLists['data'] as &$v) {
- $oldMu = $v['mu'];
- $v['mu'] = '';
- $v['cover'] = M3u8CacheRepository::getImageUrl($v['cover']);
- $videoStatus = intval($v['status']);
- $videoCheck = intval($v['check']);
- $income = 0.00;
- $totalBuy = 0;
- $v['status_text'] = '未知状态';
- if ($videoStatus == 1 && $videoCheck == 1) {
- $v['status_text'] = '上架';
- $v['mu'] = M3u8CacheRepository::getVideoInnerUrl($oldMu, $userCode, $v['id'], 'video');
- $incomeData = $creatorRepo->oneVideoIncome($userCode, $v['id']);
- $income = isset($incomeData['sum']) ? $incomeData['sum'] : 0;
- $totalBuy = $creatorRepo->countVideoBuyer($v['id']);
- } elseif ($videoStatus == 2 && $videoCheck == 1) {
- $v['status_text'] = '下架';
- $incomeData = $creatorRepo->oneVideoIncome($userCode, $v['id']);
- $income = isset($incomeData['sum']) ? $incomeData['sum'] : 0;
- $totalBuy = $creatorRepo->countVideoBuyer($v['id']);
- } elseif ($videoCheck == 0) {
- $v['status_text'] = '审核中';
- $v['cover'] = '';
- if ($videoStatus == 3) {
- $v['status_text'] = '转码中';
- } elseif ($videoStatus == 4) {
- $v['status_text'] = '转码失败';
- }
- } elseif ($videoCheck == 2) {
- $v['status_text'] = '拒绝';
- } else {
- $v['cover'] = '';
- }
- $v['income'] = $income; // 收益.
- $v['total_buy'] = $totalBuy; // 购买人次
- }
- }
- return json_success($arrLists);
- }
- public function todayVideo()
- {
- $userCode = $this->getUserId();
- $userRepo = make(UserRepository::class);
- $arrUserInfo = $userRepo->getUserInfoData($userCode);
- $ruleRepo = make(CreatorRuleRepository::class);
- $creatorRepo = make(CreatorRepository::class);
- $detail = $creatorRepo->detail($userCode);
- $income = 0;
- $level = 0;
- $dayAddonNum = 0;
- $dayVideo = 0;
- if (!empty($detail)) {
- $income = floatval($detail->income);
- $level = intval($detail->level);
- $dayAddonNum = intval($detail->day_addon_num);
- $dayVideo = intval($detail->day_video);
- }
- $ruleLevel = $ruleRepo->getRuleByLevel($level);
- $dayMaxVideo = intval($ruleLevel->day_max_video) + $dayAddonNum;
- $todayVideo = $dayVideo;
- $isCanUpload = true;
- if ($todayVideo >= $dayMaxVideo) {
- $isCanUpload = false;
- }
- $isCanUploadCoin = isset($detail->coin_uper) ? boolval($detail->coin_uper) : false; // 是否能传收费视频
- $needUploadFreeNum = 0; // 还需要上传免费视频个数.
- $countFreeVideos = $creatorRepo->countPublishedCoinVideo($userCode, true); // 统计免费视频个数
- $countNotFreeVideos = $creatorRepo->countPublishedCoinVideo($userCode, false); //统计收费视频个数
- if ($level <= 0) {
- if (CreatorConstant::LEVEL_0_FREE_VIDEO_NUM > 0) {
- // 金币视频 x 免费要求 = 最低历史上传免费个数
- $leastFreeNum = $countNotFreeVideos > 0 ? $countNotFreeVideos * CreatorConstant::LEVEL_0_FREE_VIDEO_NUM : CreatorConstant::LEVEL_0_FREE_VIDEO_NUM;
- if ($countFreeVideos >= $leastFreeNum) {
- $isCanUploadCoin = true;
- } else {
- $needUploadFreeNum = $leastFreeNum - $countFreeVideos;
- }
- } else {
- $isCanUploadCoin = true;
- }
- } else {
- if (CreatorConstant::FREE_VIDEO_NUM > 0) {
- // 金币视频 x 免费要求 = 最低限制上传免费个数
- $leastFreeNum = $countNotFreeVideos > 0 ? $countNotFreeVideos * CreatorConstant::FREE_VIDEO_NUM : CreatorConstant::FREE_VIDEO_NUM;
- if ($countFreeVideos >= $leastFreeNum) {
- $isCanUploadCoin = true;
- } else {
- $needUploadFreeNum = $leastFreeNum - $countFreeVideos;
- }
- } else {
- $isCanUploadCoin = true;
- }
- }
- // $todayideo = $creatorRepo->countTodayPublishedVideo($userCode);
- $result = [
- 'level' => $level,
- 'day_max_video' => $dayMaxVideo,
- 'commission_ratio' => $ruleLevel->commission_ratio,
- 'today_video' => $todayVideo, // 计划任务每日凌晨3点清零一次.
- 'is_can_upload' => $isCanUpload, // 今天是否能上传.
- 'is_can_upload_coin' => $isCanUploadCoin,
- 'need_upload_free_num' => $needUploadFreeNum,
- 'count_free_videos' => $countFreeVideos,
- 'count_not_free_videos' => $countNotFreeVideos,
- ];
- // TODO
- // $result['is_can_upload'] = false;
- // $result['is_can_upload_coin'] = false;
- return json_success($result);
- }
- public function createVideo()
- {
- // TODO
- // return json_fail('视频服务器正在扩容,预计2022-04-25日晚间恢复');
- $validatorFactory = make(ValidatorFactoryInterface::class);
- $userCode = $this->getUserId();
- $userRepo = make(UserRepository::class);
- $userInfo = $userRepo->getUserInfoFromCache($userCode);
- if (isset($userInfo['is_vip']) && $userInfo['is_vip'] != 'y') {
- return json_fail('会员VIP才可以上传视频赚钱哦!');
- }
- $inputData = $this->getJsonData();
- $rules = [
- 'title' => 'required',
- 'cover' => 'nullable|max:700',
- 'coins' => 'required|int',
- 'tags' => 'required', // 这个是ID
- 'file_hash' => 'required'
- ];
- $validator = $validatorFactory->make($inputData, $rules);
- if ($validator->fails()) {
- // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
- return json_fail($validator->errors()->first());
- }
- $videoRepo = make(VideoRepository::class);
- if ($videoRepo->checkExist($inputData['file_hash'])) {
- return json_fail('此视频已被其他人上传过,请重新更换');
- }
- $mediaCenterRepo = make(MediaCenterRepository::class);
- $hashVideoInfo = $mediaCenterRepo->getHashInfo($inputData['file_hash']);
- if (!empty($hashVideoInfo)) {
- return json_fail('此视频有人上传过了,请重新更换');
- }
- $ruleRepo = make(CreatorRuleRepository::class);
- $creatorRepo = make(CreatorRepository::class);
- $detail = $creatorRepo->detail($userCode);
- $level = 0;
- $dayAddonNum = 0;
- $dayVideo = 0;
- if (!empty($detail)) {
- $level = intval($detail->level);
- $dayAddonNum = intval($detail->day_addon_num);
- $dayVideo = intval($detail->day_video);
- } else {
- // 自动申请为原创者.
- $detail = $creatorRepo->applyToUncheck($userCode);
- $level = intval($detail->level);
- }
- $ruleLevel = $ruleRepo->getRuleByLevel($level);
- $dayMaxVideo = intval($ruleLevel->day_max_video) + $dayAddonNum;
- $todayVideo = !empty($detail) ? $dayVideo : 0;
- if ($todayVideo >= $dayMaxVideo) {
- return json_fail('今日已经超出上传数量限制');
- }
- $cover = data_get($inputData, 'cover', '');
- $coins = intval(data_get($inputData, 'coins', 0)); // 金币,单位数量个,10金币=1元人民币
- $uploadingUrl = ''; // TODO,这里可以做一个固定视频,等待用户上传转码中.
- if ($coins < 0) {
- $coins = 0;
- }
- if ($coins > CreatorConstant::VIDEO_SELL_MAX_COIN) {
- return json_fail('售卖金币价格太大,可以提前联系客服');
- }
- $arrTagIds = [];
- $tmpTagIds = data_get($inputData, 'tags', '');
- if (is_string($tmpTagIds)) {
- $arrTagIds = explode(',', $tmpTagIds);
- } else {
- $arrTagIds = $tmpTagIds;
- }
- if (!empty($arrTagIds)) {
- $arrTagIds = array_filter($arrTagIds);
- $arrTagIds = array_unique($arrTagIds);
- }
- if (empty($arrTagIds)) {
- return json_fail('请选择至少1个口味');
- }
- if (count($arrTagIds) > CreatorConstant::VIDEO_TAG_MAX_NUM) {
- return json_fail('最多选择'. strval(CreatorConstant::VIDEO_TAG_MAX_NUM) .'个口味');
- }
- // 处理关联标签.
- $tagIdsRaltion = [];
- $tagNames = [];
- if (!empty($arrTagIds)) {
- foreach ($arrTagIds as $v) {
- $tagObj = TypeModel::query()->where('id', $v)->first();
- if (!empty($tagObj->id)) {
- $tagIdsRaltion[] = $tagObj->id;
- $tagNames[] = $tagObj->title;
- }
- }
- }
- $isCanUploadCoin = isset($detail->coin_uper) ? boolval($detail->coin_uper) : false; // 是否能传收费视频
- $needUploadFreeNum = 0; // 还需要上传免费视频个数.
- $countFreeVideos = $creatorRepo->countPublishedCoinVideo($userCode, true); // 统计免费视频个数
- $countNotFreeVideos = $creatorRepo->countPublishedCoinVideo($userCode, false); //统计收费视频个数
- if ($level <= 0) {
- if (CreatorConstant::LEVEL_0_FREE_VIDEO_NUM > 0) {
- // 金币视频 x 免费要求 = 最低历史上传免费个数
- $leastFreeNum = $countNotFreeVideos > 0 ? $countNotFreeVideos * CreatorConstant::LEVEL_0_FREE_VIDEO_NUM : CreatorConstant::LEVEL_0_FREE_VIDEO_NUM;
- if ($countFreeVideos >= $leastFreeNum) {
- $isCanUploadCoin = true;
- } else {
- $needUploadFreeNum = $leastFreeNum - $countFreeVideos;
- }
- } else {
- $isCanUploadCoin = true;
- }
- } else {
- if (CreatorConstant::FREE_VIDEO_NUM > 0) {
- // 金币视频 x 免费要求 = 最低限制上传免费个数
- $leastFreeNum = $countNotFreeVideos > 0 ? $countNotFreeVideos * CreatorConstant::FREE_VIDEO_NUM : CreatorConstant::FREE_VIDEO_NUM;
- if ($countFreeVideos >= $leastFreeNum) {
- $isCanUploadCoin = true;
- } else {
- $needUploadFreeNum = $leastFreeNum - $countFreeVideos;
- }
- } else {
- $isCanUploadCoin = true;
- }
- }
- if ($coins > 0 && !$isCanUploadCoin) {
- return json_fail('还不能上传收费视频,请先再传'. strval($needUploadFreeNum) . '个免费视频');
- }
- $payType = 2; // 默认金币
- if ($coins == 0) {
- $payType = 1; // vip
- }
- $newStrTagNames = !empty($tagNames) ? implode(',', $tagNames) : '';
- $newStrTagIds = !empty($arrTagIds) ? implode(',', $arrTagIds) : '';
- $setarr = [
- 'uid' => $userCode,
- 'status' => 3,
- 'check' => 0,
- 'pay_type' => $payType,
- 'type' => 1,
- 'mu' => $uploadingUrl,
- 'title' => trim(data_get($inputData, 'title', '')),
- 'cover' => $cover,
- 'coins' => $coins,
- 'tags' => $newStrTagNames,
- 'file_hash' => data_get($inputData, 'file_hash', ''),
- 'custom_cover' => $cover, // 用户自定义封面.
- ];
- $videoObj = VideoModel::query()->create($setarr);
- if ($videoObj) {
- $videoId = $videoObj->id;
- if (!empty($tagIdsRaltion)) {
- foreach ($tagIdsRaltion as $tagId) {
- $setarr2 = [
- 'type_id' => $tagId,
- 'video_id' => $videoId,
- 'status' => 1,
- ];
- TypeVideoModel::query()->create($setarr2);
- }
- }
- // 累加今日上传视频数量.
- $detail->day_video++;
- $detail->save();
- } else {
- return json_fail('创建视频失败');
- }
- $result = [
- 'video' => [
- 'id' => $videoObj->id, // 给前端的。前端拿到这个, 拼接 app应用全称(媒资库里定义的)| 模块名 | 视频ID ,doukui|video|video_id
- 'title' => $setarr['title'],
- 'coins' => $setarr['coins'],
- 'cover' => '', // 这里ppvod的是暴露的jpg路径,不能用,直接访问空字符串
- 'tag_names' => $newStrTagNames,
- 'tag_ids' => $newStrTagIds,
- ],
- ];
- return json_success($result);
- }
- /**
- * 上传设置描述
- * @return array
- */
- public function uploadSetting()
- {
- $configRepo = make(ConfigRepoistory::class);
- $creatorRepo = make(CreatorRepository::class);
- $userCode = $this->getUserId();
- $detail = $creatorRepo->detail($userCode);
- $level = 0;
- if (!empty($detail)) {
- $level = intval($detail->level);
- }
- $fileMaxSizeMb = CreatorConstant::VIDEO_MAX_SIZE_MB; // 文件最大多少MB
- $maxCoin = CreatorConstant::VIDEO_SELL_MAX_COIN; // 最多设置金币个数
- $creatorMinVideoNum = CreatorConstant::FREE_VIDEO_NUM; // 创作者,level>0
- $normalMinVideoNum = CreatorConstant::LEVEL_0_FREE_VIDEO_NUM; // 普通人, level=0
- $maxTagNum = CreatorConstant::VIDEO_TAG_MAX_NUM; // 最多选择标签个数.
- $agreementLink = 'http://h5.py163xyz/'. env('STATIC_DIR_NAME') .'/creator/upload_agreement.html';
- $tags = $creatorRepo->canUseTags();
- $ppvodParams = $configRepo->gets(['ppvod_upload_category', 'ppvod_upload_tpl_id', 'ppvod_upload_tpl_name'], 'sys', []);
- $isCanUploadCoin = isset($detail->coin_uper) ? boolval($detail->coin_uper) : false; // 是否能传收费视频
- $needUploadFreeNum = 0; // 还需要上传免费视频个数.
- $countFreeVideos = $creatorRepo->countPublishedCoinVideo($userCode, true); // 统计免费视频个数
- $countNotFreeVideos = $creatorRepo->countPublishedCoinVideo($userCode, false); //统计收费视频个数
- if ($level <= 0) {
- if (CreatorConstant::LEVEL_0_FREE_VIDEO_NUM > 0) {
- // 金币视频 x 免费要求 = 最低历史上传免费个数
- $leastFreeNum = $countNotFreeVideos > 0 ? $countNotFreeVideos * CreatorConstant::LEVEL_0_FREE_VIDEO_NUM : CreatorConstant::LEVEL_0_FREE_VIDEO_NUM;
- if ($countFreeVideos >= $leastFreeNum) {
- $isCanUploadCoin = true;
- } else {
- $needUploadFreeNum = $leastFreeNum - $countFreeVideos;
- }
- } else {
- $isCanUploadCoin = true;
- }
- } else {
- if (CreatorConstant::FREE_VIDEO_NUM > 0) {
- // 金币视频 x 免费要求 = 最低限制上传免费个数
- $leastFreeNum = $countNotFreeVideos > 0 ? $countNotFreeVideos * CreatorConstant::FREE_VIDEO_NUM : CreatorConstant::FREE_VIDEO_NUM;
- if ($countFreeVideos >= $leastFreeNum) {
- $isCanUploadCoin = true;
- } else {
- $needUploadFreeNum = $leastFreeNum - $countFreeVideos;
- }
- } else {
- $isCanUploadCoin = true;
- }
- }
- $coverDesc = <<<EOT
- 1. 封面可以选,若不上传则以第一帧为封面。推荐你自己上传封面,更吸引用户.
- 2. 视频小于%sM
- 3. 视频暂不限制时长.
- 4. 视频不可带有广告性质水印!
- EOT;
- $coverDesc = sprintf($coverDesc, $fileMaxSizeMb);
- $coverDesc = trim($coverDesc);
- $priceDesc = <<<EOT
- 1. 为维护观看体验,视频金币价格不得超过%s个金币.
- 2. 创作者每上传%s个免费视频(审核通过并上架才算),即可上传一个收费视频.
- 3. 普通用户上传%s个免费视频,可上传一个收费视频.
- EOT;
- $priceDesc = sprintf($priceDesc, $maxCoin, $creatorMinVideoNum, $normalMinVideoNum);
- $priceDesc = trim($priceDesc);
- $result = [
- 'cover_desc' => $coverDesc,
- 'price_desc' => $priceDesc,
- 'file_max_size_mb' => $fileMaxSizeMb,
- 'max_coin' => $maxCoin,
- 'creator_min_video_num' => $creatorMinVideoNum,
- 'normal_min_video_num' => $normalMinVideoNum,
- 'max_tag_num' => $maxTagNum,
- 'tags' => $tags,
- 'agreement_link' => $agreementLink,
- 'is_can_upload_coin' => $isCanUploadCoin,
- 'need_upload_free_num' => $needUploadFreeNum,
- 'count_free_videos' => $countFreeVideos,
- 'count_not_free_videos' => $countNotFreeVideos,
- 'ppvod_upload_category' => !empty($ppvodParams['ppvod_upload_category']) ? $ppvodParams['ppvod_upload_category'] : '用户上传',
- 'ppvod_upload_tpl_id' => !empty($ppvodParams['ppvod_upload_tpl_id']) ? $ppvodParams['ppvod_upload_tpl_id'] : '',
- 'ppvod_upload_tpl_name' => !empty($ppvodParams['ppvod_upload_tpl_name']) ? $ppvodParams['ppvod_upload_tpl_name'] : '默认',
- ];
- // TODO
- // $result['file_max_size_mb'] = 1;
- return json_success($result);
- }
- /**
- * 删除视频.
- * @return mixed
- * @throws \Exception
- */
- public function deleteVideo()
- {
- $creatorRepo = make(CreatorRepository::class);
- $validatorFactory = make(ValidatorFactoryInterface::class);
- $userCode = $this->getUserId();
- $inputData = $this->getJsonData();
- $rules = [
- 'video_id' => 'required',
- 'force_state' => 'nullable|in:yes,no'
- ];
- $validator = $validatorFactory->make($inputData, $rules);
- if ($validator->fails()) {
- // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
- return json_fail($validator->errors()->first());
- }
- $isForce = false;
- $videoId = data_get($inputData, 'video_id', '');
- $forceState = data_get($inputData, 'force_state', 'no');
- if ($forceState == 'yes') {
- $isForce = true;
- }
- $deleteStatus = $creatorRepo->deleteVideo($userCode, $videoId, $isForce);
- if (!$deleteStatus) {
- return json_fail('删除失败,请联系管理员');
- }
- return json_success(['result' => 'success']);
- }
- }
|