123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- <?php
- namespace App\Services\OverseasStar;
- use App\Imports\OverseasStarInfoImport;
- use App\Models\Overseas\OverseasStar;
- use App\Models\Overseas\StarTag;
- use App\Models\Overseas\StarUploadLog;
- use App\Models\Sys\SysUsers;
- use App\Services\Sys\StarLibraryService;
- use App\Support\EmailQueue;
- use App\Support\Log;
- use Illuminate\Support\Facades\Auth;
- use Maatwebsite\Excel\Facades\Excel;
- class StarService
- {
- const OVERSEAS_PLATFORM = ['tiktok' => 1, 'tk' => 1, 'tik tok' => 1, 'youtube' => 2, 'instagram' => 3, 'ins' => 3, 'facebook' => 4, 'fb' => 4];
- const OVERSEAS_PLATFORM_DATA = [1 => 'TikTok', 2 => 'Youtube', 3 => 'Ins', 4 => 'Facebook'];
- const OVERSEAS_GENDER = ['男' => 1, '女' => 2, '家庭' => 3, '情侣/夫妻' => 5];
- /**
- * 获取海外达人库信息列表
- * */
- public static function getStarList($params, $sortField, $sortOrder, $page, $pageSize)
- {
- // 查询海外达人信息列表
- list($list, $count) = OverseasStar::getStarList($params, $sortField, $sortOrder, $page, $pageSize);
- if(!$count) return [[], 0];
- foreach ($list as $datum) {
- # 处理平台信息
- $datum->platform = self::OVERSEAS_PLATFORM_DATA[$datum->platform] ?? '未知';
- # 处理粉丝数
- $datum->fans_total = number_format($datum->fans_total / 1000);
- # 平均观看量
- $datum->view_avg = number_format($datum->view_avg);
- # 去除标签中的aaaaaa
- $tagList = explode(',', $datum->tag_list);
- unset($tagList[array_search('aaaaaa', $tagList)]);
- $datum->tag_list = implode(',', $tagList);
- }
- return [$list, $count];
- }
- /**
- * 导入达人数据到系统
- * */
- public static function importStarInfo($file)
- {
- if (!$file->isValid()) return 1010;
- $fileExt = $file->getClientOriginalExtension();
- if ($fileExt != 'xlsx') return 1011;
- $fileName = $file->getClientOriginalName();
- try {
- $sysUserId = Auth::id();
- // 获取 groupId
- $groupId = StarLibraryService::getGroupId($sysUserId);
- if (empty($groupId) || empty($sysUserId)) return 1012;
- // 插入上传记录
- $uploadInfo = StarUploadLog::create(['file'=> $fileName, 'sys_user_id' => $sysUserId]);
- // 导入数据
- $import = new OverseasStarInfoImport($groupId, $sysUserId);
- Excel::import($import, $file);
- $uploadInfo->update(['row_num' => $import->getRowCount(), 'status' => 1]);
- } catch (\Throwable $e) {
- EmailQueue::rPush('海外达人信息导入失败', $e->getMessage(), ['xiaohua.hou@kuxuan-inc.com'], '聚星');
- Log::error('海外达人信息导入失败', [
- 'msg' => $e->getMessage(),
- 'trace' => $e->getTraceAsString()
- ], 'ImportStarInfo');
- return 1013;
- }
- return 0;
- }
- public static function tagList($platform, &$errno)
- {
- try {
- $category = StarTag::where('enable', 1)->where('platform', $platform)->pluck('tag');
- } catch (\Throwable $e) {
- Log::error('获取海外达人标签失败', [
- 'msg' => $e->getMessage(),
- 'trace' => $e->getTraceAsString()
- ], 'OverseasStarTag');
- $errno = 1014;
- return [];
- }
- return $category;
- }
- /**
- * 获取用户上传记录
- * */
- public static function getImportLog($page, $pageSize)
- {
- try {
- $query = StarUploadLog::where('enable', 1);
- $total = $query->count();
- if ($total == 0) return [[], 0];
- $list = $query->orderByDesc('created_at')
- ->offset(($page - 1) * $pageSize)
- ->limit($pageSize)
- ->get();
- $sysUserListMap = SysUsers::whereIn('id', $list->pluck('sys_user_id'))->pluck('name', 'id');
- foreach ($list as $item) {
- $item->sys_user_name = $sysUserListMap->get($item->sys_user_id) ?? null;
- }
- } catch (\Throwable $e) {
- Log::error('获取上传列表失败', [
- 'msg' => $e->getMessage(),
- 'trace' => $e->getTraceAsString()
- ], 'StarLibraryService');
- return [[], 0];
- }
- return [$list, $total];
- }
- /**
- * 获取平台对应的枚举值
- * */
- public static function getEnumForPlatform($platform)
- {
- $platformId = isset(self::OVERSEAS_PLATFORM[strtolower($platform)]) ? self::OVERSEAS_PLATFORM[strtolower($platform)] : 5;
- if($platformId == 5) {
- EmailQueue::rPush('海外达人导入时未识别出正确的platformId', $platform, ['xiaohua.hou@kuxuan-inc.com'], '聚星');
- }
- return $platformId;
- }
- /**
- * 获取性别枚举值
- * */
- public static function getEnumForGender($gender)
- {
- return isset(self::OVERSEAS_GENDER[$gender]) ? self::OVERSEAS_GENDER[$gender] : 4;
- }
- /**
- * 处理达人标签信息
- * */
- public static function starTagDeal($platform, $tagList)
- {
- if(empty($tagList)) return '';
- # 将中文逗号、顿号和空格替换成半角状态逗号
- $tagList = str_replace(",", ",", $tagList);
- $tagList = str_replace("、", ",", $tagList);
- $tagList = str_replace(" ", ",", $tagList);
- $tagListData = explode(',', $tagList);
- foreach ($tagListData as $tag) {
- $tag = trim($tag);
- if(!$tag) continue;
- # 判断该标签是否存在,不存在插入
- $isExist = StarTag::where('tag', $tag)->where('platform', $platform)->exists();
- if(!$isExist)
- StarTag::insert(['tag' => $tag, 'platform' => $platform]);
- }
- return $tagList.',aaaaaa';
- }
- }
|