暫無描述

StarService.php 5.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <?php
  2. namespace App\Services\OverseasStar;
  3. use App\Imports\OverseasStarInfoImport;
  4. use App\Models\Overseas\OverseasStar;
  5. use App\Models\Overseas\StarTag;
  6. use App\Models\Overseas\StarUploadLog;
  7. use App\Models\Sys\SysUsers;
  8. use App\Services\Sys\StarLibraryService;
  9. use App\Support\EmailQueue;
  10. use App\Support\Log;
  11. use Illuminate\Support\Facades\Auth;
  12. use Maatwebsite\Excel\Facades\Excel;
  13. class StarService
  14. {
  15. const OVERSEAS_PLATFORM = ['tiktok' => 1, 'tk' => 1, 'tik tok' => 1, 'youtube' => 2, 'instagram' => 3, 'ins' => 3, 'facebook' => 4, 'fb' => 4];
  16. const OVERSEAS_PLATFORM_DATA = [1 => 'TikTok', 2 => 'Youtube', 3 => 'Ins', 4 => 'Facebook'];
  17. const OVERSEAS_GENDER = ['男' => 1, '女' => 2, '家庭' => 3, '情侣/夫妻' => 5];
  18. /**
  19. * 获取海外达人库信息列表
  20. * */
  21. public static function getStarList($params, $sortField, $sortOrder, $page, $pageSize)
  22. {
  23. // 查询海外达人信息列表
  24. list($list, $count) = OverseasStar::getStarList($params, $sortField, $sortOrder, $page, $pageSize);
  25. if(!$count) return [[], 0];
  26. foreach ($list as $datum) {
  27. # 处理平台信息
  28. $datum->platform = self::OVERSEAS_PLATFORM_DATA[$datum->platform] ?? '未知';
  29. # 处理粉丝数
  30. $datum->fans_total = number_format($datum->fans_total / 1000);
  31. # 平均观看量
  32. $datum->view_avg = number_format($datum->view_avg);
  33. # 去除标签中的aaaaaa
  34. $tagList = explode(',', $datum->tag_list);
  35. unset($tagList[array_search('aaaaaa', $tagList)]);
  36. $datum->tag_list = implode(',', $tagList);
  37. }
  38. return [$list, $count];
  39. }
  40. /**
  41. * 导入达人数据到系统
  42. * */
  43. public static function importStarInfo($file)
  44. {
  45. if (!$file->isValid()) return 1010;
  46. $fileExt = $file->getClientOriginalExtension();
  47. if ($fileExt != 'xlsx') return 1011;
  48. $fileName = $file->getClientOriginalName();
  49. try {
  50. $sysUserId = Auth::id();
  51. // 获取 groupId
  52. $groupId = StarLibraryService::getGroupId($sysUserId);
  53. if (empty($groupId) || empty($sysUserId)) return 1012;
  54. // 插入上传记录
  55. $uploadInfo = StarUploadLog::create(['file'=> $fileName, 'sys_user_id' => $sysUserId]);
  56. // 导入数据
  57. $import = new OverseasStarInfoImport($groupId, $sysUserId);
  58. Excel::import($import, $file);
  59. $uploadInfo->update(['row_num' => $import->getRowCount(), 'status' => 1]);
  60. } catch (\Throwable $e) {
  61. EmailQueue::rPush('海外达人信息导入失败', $e->getMessage(), ['xiaohua.hou@kuxuan-inc.com'], '聚星');
  62. Log::error('海外达人信息导入失败', [
  63. 'msg' => $e->getMessage(),
  64. 'trace' => $e->getTraceAsString()
  65. ], 'ImportStarInfo');
  66. return 1013;
  67. }
  68. return 0;
  69. }
  70. public static function tagList($platform, &$errno)
  71. {
  72. try {
  73. $category = StarTag::where('enable', 1)->where('platform', $platform)->pluck('tag');
  74. } catch (\Throwable $e) {
  75. Log::error('获取海外达人标签失败', [
  76. 'msg' => $e->getMessage(),
  77. 'trace' => $e->getTraceAsString()
  78. ], 'OverseasStarTag');
  79. $errno = 1014;
  80. return [];
  81. }
  82. return $category;
  83. }
  84. /**
  85. * 获取用户上传记录
  86. * */
  87. public static function getImportLog($page, $pageSize)
  88. {
  89. try {
  90. $query = StarUploadLog::where('enable', 1);
  91. $total = $query->count();
  92. if ($total == 0) return [[], 0];
  93. $list = $query->orderByDesc('created_at')
  94. ->offset(($page - 1) * $pageSize)
  95. ->limit($pageSize)
  96. ->get();
  97. $sysUserListMap = SysUsers::whereIn('id', $list->pluck('sys_user_id'))->pluck('name', 'id');
  98. foreach ($list as $item) {
  99. $item->sys_user_name = $sysUserListMap->get($item->sys_user_id) ?? null;
  100. }
  101. } catch (\Throwable $e) {
  102. Log::error('获取上传列表失败', [
  103. 'msg' => $e->getMessage(),
  104. 'trace' => $e->getTraceAsString()
  105. ], 'StarLibraryService');
  106. return [[], 0];
  107. }
  108. return [$list, $total];
  109. }
  110. /**
  111. * 获取平台对应的枚举值
  112. * */
  113. public static function getEnumForPlatform($platform)
  114. {
  115. $platformId = isset(self::OVERSEAS_PLATFORM[strtolower($platform)]) ? self::OVERSEAS_PLATFORM[strtolower($platform)] : 5;
  116. if($platformId == 5) {
  117. EmailQueue::rPush('海外达人导入时未识别出正确的platformId', $platform, ['xiaohua.hou@kuxuan-inc.com'], '聚星');
  118. }
  119. return $platformId;
  120. }
  121. /**
  122. * 获取性别枚举值
  123. * */
  124. public static function getEnumForGender($gender)
  125. {
  126. return isset(self::OVERSEAS_GENDER[$gender]) ? self::OVERSEAS_GENDER[$gender] : 4;
  127. }
  128. /**
  129. * 处理达人标签信息
  130. * */
  131. public static function starTagDeal($platform, $tagList)
  132. {
  133. if(empty($tagList)) return '';
  134. # 将中文逗号、顿号和空格替换成半角状态逗号
  135. $tagList = str_replace(",", ",", $tagList);
  136. $tagList = str_replace("、", ",", $tagList);
  137. $tagList = str_replace(" ", ",", $tagList);
  138. $tagListData = explode(',', $tagList);
  139. foreach ($tagListData as $tag) {
  140. $tag = trim($tag);
  141. if(!$tag) continue;
  142. # 判断该标签是否存在,不存在插入
  143. $isExist = StarTag::where('tag', $tag)->where('platform', $platform)->exists();
  144. if(!$isExist)
  145. StarTag::insert(['tag' => $tag, 'platform' => $platform]);
  146. }
  147. return $tagList.',aaaaaa';
  148. }
  149. }