| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- <?php
- namespace App\Module\UrsPromotion\AdminControllers\Actions;
- use App\Module\UrsPromotion\Models\UrsUserTalent;
- use App\Module\UrsPromotion\Services\UrsTalentService;
- use App\Module\UrsPromotion\Enums\UrsTalentLevel;
- use UCore\DcatAdmin\Grid\BatchAction;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Log;
- use Dcat\Admin\Admin;
- /**
- * 批量更新达人等级操作
- *
- * 提供批量更新选中用户达人等级的功能
- */
- class BatchUpdateTalentAction extends BatchAction
- {
- /**
- * 操作按钮标题
- *
- * @var string
- */
- protected $title = '批量更新达人等级';
- /**
- * 确认弹窗信息
- *
- * @return string
- */
- public function confirm()
- {
- return '确定要批量更新选中用户的达人等级吗?系统将重新计算每个用户的团队数据并更新达人等级。';
- }
- /**
- * 处理批量更新请求
- *
- * @param Request $request
- * @return mixed
- */
- public function handle(Request $request)
- {
- $keys = $this->getKey();
- if (empty($keys)) {
- return $this->response()->error('请选择要更新的用户');
- }
- try {
- // 获取选中的达人记录
- $talents = UrsUserTalent::whereIn('id', $keys)->get();
- if ($talents->isEmpty()) {
- return $this->response()->error('未找到要更新的用户达人记录');
- }
- // 提取用户ID数组
- $ursUserIds = $talents->pluck('user_id')->toArray();
- // 批量更新达人等级
- $results = UrsTalentService::batchUpdateTalentLevels($ursUserIds);
- // 统计更新结果
- $successCount = 0;
- $failureCount = 0;
- $upgradedUsers = [];
- $errorMessages = [];
- foreach ($results as $ursUserId => $result) {
- if ($result['success']) {
- $successCount++;
- // 检查是否有等级变化
- $originalTalent = $talents->where('user_id', $ursUserId)->first();
- if ($originalTalent && $originalTalent->talent_level !== $result['talent_level']) {
- $oldLevelName = UrsTalentLevel::getLevelName($originalTalent->talent_level);
- $newLevelName = UrsTalentLevel::getLevelName($result['talent_level']);
- $upgradedUsers[] = "URS用户{$ursUserId}: {$oldLevelName} → {$newLevelName}";
- }
- } else {
- $failureCount++;
- $errorMessages[] = "URS用户{$ursUserId}: {$result['error']}";
- }
- }
- // 构建响应消息
- $message = "批量更新完成!成功更新 {$successCount} 个用户";
- if ($failureCount > 0) {
- $message .= ",失败 {$failureCount} 个用户";
- }
- if (!empty($upgradedUsers)) {
- $message .= "\n\n等级变化:\n" . implode("\n", $upgradedUsers);
- }
- if (!empty($errorMessages)) {
- $message .= "\n\n失败详情:\n" . implode("\n", array_slice($errorMessages, 0, 5));
- if (count($errorMessages) > 5) {
- $message .= "\n...还有 " . (count($errorMessages) - 5) . " 个错误";
- }
- }
- // 记录操作日志
- Log::info('批量更新URS达人等级', [
- 'operator' => Admin::user()->username ?? 'system',
- 'selected_count' => count($keys),
- 'success_count' => $successCount,
- 'failure_count' => $failureCount,
- 'urs_user_ids' => $ursUserIds,
- 'upgraded_users' => $upgradedUsers,
- ]);
- if ($failureCount === 0) {
- return $this->response()
- ->success($message)
- ->refresh();
- } else {
- return $this->response()
- ->warning($message)
- ->refresh();
- }
- } catch (\Exception $e) {
- Log::error('批量更新URS达人等级失败', [
- 'operator' => Admin::user()->username ?? 'system',
- 'selected_keys' => $keys,
- 'error' => $e->getMessage(),
- 'trace' => $e->getTraceAsString()
- ]);
- return $this->response()->error('批量更新失败:' . $e->getMessage());
- }
- }
- }
|