|
|
@@ -0,0 +1,359 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace App\Module\UrsPromotion\Controllers;
|
|
|
+
|
|
|
+use Illuminate\Http\Request;
|
|
|
+use Illuminate\Http\JsonResponse;
|
|
|
+use App\Module\UrsPromotion\Services\UrsProfitService;
|
|
|
+use App\Module\UrsPromotion\Services\UrsTalentService;
|
|
|
+use App\Module\UrsPromotion\Models\UrsUserReferral;
|
|
|
+use App\Module\UrsPromotion\Models\UrsUserTalent;
|
|
|
+use App\Module\UrsPromotion\Models\UrsTalentConfig;
|
|
|
+use Illuminate\Support\Facades\Validator;
|
|
|
+use Illuminate\Support\Facades\Log;
|
|
|
+
|
|
|
+/**
|
|
|
+ * URS推广模块API控制器
|
|
|
+ *
|
|
|
+ * 提供URS推广系统的对外API接口
|
|
|
+ */
|
|
|
+class UrsPromotionApiController
|
|
|
+{
|
|
|
+ /**
|
|
|
+ * 获取用户的达人信息
|
|
|
+ *
|
|
|
+ * @param Request $request
|
|
|
+ * @return JsonResponse
|
|
|
+ */
|
|
|
+ public function getUserTalent(Request $request): JsonResponse
|
|
|
+ {
|
|
|
+ $validator = Validator::make($request->all(), [
|
|
|
+ 'user_id' => 'required|integer|min:1',
|
|
|
+ ]);
|
|
|
+
|
|
|
+ if ($validator->fails()) {
|
|
|
+ return response()->json([
|
|
|
+ 'code' => 400,
|
|
|
+ 'message' => '参数错误',
|
|
|
+ 'errors' => $validator->errors(),
|
|
|
+ ], 400);
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ $userId = $request->input('user_id');
|
|
|
+ $stats = UrsTalentService::getUserTeamStats($userId);
|
|
|
+
|
|
|
+ return response()->json([
|
|
|
+ 'code' => 200,
|
|
|
+ 'message' => '获取成功',
|
|
|
+ 'data' => $stats,
|
|
|
+ ]);
|
|
|
+
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ Log::error('获取用户达人信息失败', [
|
|
|
+ 'user_id' => $request->input('user_id'),
|
|
|
+ 'error' => $e->getMessage(),
|
|
|
+ ]);
|
|
|
+
|
|
|
+ return response()->json([
|
|
|
+ 'code' => 500,
|
|
|
+ 'message' => '服务器内部错误',
|
|
|
+ ], 500);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取用户的推荐关系树
|
|
|
+ *
|
|
|
+ * @param Request $request
|
|
|
+ * @return JsonResponse
|
|
|
+ */
|
|
|
+ public function getUserReferralTree(Request $request): JsonResponse
|
|
|
+ {
|
|
|
+ $validator = Validator::make($request->all(), [
|
|
|
+ 'user_id' => 'required|integer|min:1',
|
|
|
+ ]);
|
|
|
+
|
|
|
+ if ($validator->fails()) {
|
|
|
+ return response()->json([
|
|
|
+ 'code' => 400,
|
|
|
+ 'message' => '参数错误',
|
|
|
+ 'errors' => $validator->errors(),
|
|
|
+ ], 400);
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ $userId = $request->input('user_id');
|
|
|
+ $tree = UrsTalentService::getUserReferralTree($userId);
|
|
|
+
|
|
|
+ return response()->json([
|
|
|
+ 'code' => 200,
|
|
|
+ 'message' => '获取成功',
|
|
|
+ 'data' => $tree,
|
|
|
+ ]);
|
|
|
+
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ Log::error('获取用户推荐关系树失败', [
|
|
|
+ 'user_id' => $request->input('user_id'),
|
|
|
+ 'error' => $e->getMessage(),
|
|
|
+ ]);
|
|
|
+
|
|
|
+ return response()->json([
|
|
|
+ 'code' => 500,
|
|
|
+ 'message' => '服务器内部错误',
|
|
|
+ ], 500);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取用户的收益统计
|
|
|
+ *
|
|
|
+ * @param Request $request
|
|
|
+ * @return JsonResponse
|
|
|
+ */
|
|
|
+ public function getUserProfitStats(Request $request): JsonResponse
|
|
|
+ {
|
|
|
+ $validator = Validator::make($request->all(), [
|
|
|
+ 'user_id' => 'required|integer|min:1',
|
|
|
+ 'profit_type' => 'nullable|string|in:promotion_reward,planting_reward',
|
|
|
+ 'start_date' => 'nullable|date',
|
|
|
+ 'end_date' => 'nullable|date|after_or_equal:start_date',
|
|
|
+ ]);
|
|
|
+
|
|
|
+ if ($validator->fails()) {
|
|
|
+ return response()->json([
|
|
|
+ 'code' => 400,
|
|
|
+ 'message' => '参数错误',
|
|
|
+ 'errors' => $validator->errors(),
|
|
|
+ ], 400);
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ $userId = $request->input('user_id');
|
|
|
+ $profitType = $request->input('profit_type');
|
|
|
+ $startDate = $request->input('start_date');
|
|
|
+ $endDate = $request->input('end_date');
|
|
|
+
|
|
|
+ $stats = UrsProfitService::getUserProfitStats($userId, $profitType, $startDate, $endDate);
|
|
|
+
|
|
|
+ return response()->json([
|
|
|
+ 'code' => 200,
|
|
|
+ 'message' => '获取成功',
|
|
|
+ 'data' => $stats,
|
|
|
+ ]);
|
|
|
+
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ Log::error('获取用户收益统计失败', [
|
|
|
+ 'user_id' => $request->input('user_id'),
|
|
|
+ 'error' => $e->getMessage(),
|
|
|
+ ]);
|
|
|
+
|
|
|
+ return response()->json([
|
|
|
+ 'code' => 500,
|
|
|
+ 'message' => '服务器内部错误',
|
|
|
+ ], 500);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 分发推广收益
|
|
|
+ *
|
|
|
+ * @param Request $request
|
|
|
+ * @return JsonResponse
|
|
|
+ */
|
|
|
+ public function distributePromotionReward(Request $request): JsonResponse
|
|
|
+ {
|
|
|
+ $validator = Validator::make($request->all(), [
|
|
|
+ 'user_id' => 'required|integer|min:1',
|
|
|
+ 'source_type' => 'required|string|max:32',
|
|
|
+ 'source_id' => 'required|integer|min:1',
|
|
|
+ 'original_amount' => 'required|numeric|min:0',
|
|
|
+ ]);
|
|
|
+
|
|
|
+ if ($validator->fails()) {
|
|
|
+ return response()->json([
|
|
|
+ 'code' => 400,
|
|
|
+ 'message' => '参数错误',
|
|
|
+ 'errors' => $validator->errors(),
|
|
|
+ ], 400);
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ $userId = $request->input('user_id');
|
|
|
+ $sourceType = $request->input('source_type');
|
|
|
+ $sourceId = $request->input('source_id');
|
|
|
+ $originalAmount = $request->input('original_amount');
|
|
|
+
|
|
|
+ $profits = UrsProfitService::distributePromotionReward(
|
|
|
+ $userId,
|
|
|
+ $sourceType,
|
|
|
+ $sourceId,
|
|
|
+ (string)$originalAmount
|
|
|
+ );
|
|
|
+
|
|
|
+ return response()->json([
|
|
|
+ 'code' => 200,
|
|
|
+ 'message' => '分发成功',
|
|
|
+ 'data' => [
|
|
|
+ 'profit_count' => count($profits),
|
|
|
+ 'profits' => $profits,
|
|
|
+ ],
|
|
|
+ ]);
|
|
|
+
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ Log::error('分发推广收益失败', [
|
|
|
+ 'user_id' => $request->input('user_id'),
|
|
|
+ 'error' => $e->getMessage(),
|
|
|
+ ]);
|
|
|
+
|
|
|
+ return response()->json([
|
|
|
+ 'code' => 500,
|
|
|
+ 'message' => '服务器内部错误',
|
|
|
+ ], 500);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 分发种植收益
|
|
|
+ *
|
|
|
+ * @param Request $request
|
|
|
+ * @return JsonResponse
|
|
|
+ */
|
|
|
+ public function distributePlantingReward(Request $request): JsonResponse
|
|
|
+ {
|
|
|
+ $validator = Validator::make($request->all(), [
|
|
|
+ 'user_id' => 'required|integer|min:1',
|
|
|
+ 'source_type' => 'required|string|max:32',
|
|
|
+ 'source_id' => 'required|integer|min:1',
|
|
|
+ 'original_amount' => 'required|numeric|min:0',
|
|
|
+ ]);
|
|
|
+
|
|
|
+ if ($validator->fails()) {
|
|
|
+ return response()->json([
|
|
|
+ 'code' => 400,
|
|
|
+ 'message' => '参数错误',
|
|
|
+ 'errors' => $validator->errors(),
|
|
|
+ ], 400);
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ $userId = $request->input('user_id');
|
|
|
+ $sourceType = $request->input('source_type');
|
|
|
+ $sourceId = $request->input('source_id');
|
|
|
+ $originalAmount = $request->input('original_amount');
|
|
|
+
|
|
|
+ $profits = UrsProfitService::distributePlantingReward(
|
|
|
+ $userId,
|
|
|
+ $sourceType,
|
|
|
+ $sourceId,
|
|
|
+ (string)$originalAmount
|
|
|
+ );
|
|
|
+
|
|
|
+ return response()->json([
|
|
|
+ 'code' => 200,
|
|
|
+ 'message' => '分发成功',
|
|
|
+ 'data' => [
|
|
|
+ 'profit_count' => count($profits),
|
|
|
+ 'profits' => $profits,
|
|
|
+ ],
|
|
|
+ ]);
|
|
|
+
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ Log::error('分发种植收益失败', [
|
|
|
+ 'user_id' => $request->input('user_id'),
|
|
|
+ 'error' => $e->getMessage(),
|
|
|
+ ]);
|
|
|
+
|
|
|
+ return response()->json([
|
|
|
+ 'code' => 500,
|
|
|
+ 'message' => '服务器内部错误',
|
|
|
+ ], 500);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 更新用户达人等级
|
|
|
+ *
|
|
|
+ * @param Request $request
|
|
|
+ * @return JsonResponse
|
|
|
+ */
|
|
|
+ public function updateUserTalent(Request $request): JsonResponse
|
|
|
+ {
|
|
|
+ $validator = Validator::make($request->all(), [
|
|
|
+ 'user_id' => 'required|integer|min:1',
|
|
|
+ ]);
|
|
|
+
|
|
|
+ if ($validator->fails()) {
|
|
|
+ return response()->json([
|
|
|
+ 'code' => 400,
|
|
|
+ 'message' => '参数错误',
|
|
|
+ 'errors' => $validator->errors(),
|
|
|
+ ], 400);
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ $userId = $request->input('user_id');
|
|
|
+ $talent = UrsTalentService::updateUserTalent($userId);
|
|
|
+
|
|
|
+ if ($talent) {
|
|
|
+ return response()->json([
|
|
|
+ 'code' => 200,
|
|
|
+ 'message' => '更新成功',
|
|
|
+ 'data' => [
|
|
|
+ 'user_id' => $talent->user_id,
|
|
|
+ 'talent_level' => $talent->talent_level,
|
|
|
+ 'talent_level_name' => $talent->getTalentLevelName(),
|
|
|
+ 'direct_count' => $talent->direct_count,
|
|
|
+ 'indirect_count' => $talent->indirect_count,
|
|
|
+ 'third_count' => $talent->third_count,
|
|
|
+ 'promotion_count' => $talent->promotion_count,
|
|
|
+ ],
|
|
|
+ ]);
|
|
|
+ } else {
|
|
|
+ return response()->json([
|
|
|
+ 'code' => 500,
|
|
|
+ 'message' => '更新失败',
|
|
|
+ ], 500);
|
|
|
+ }
|
|
|
+
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ Log::error('更新用户达人等级失败', [
|
|
|
+ 'user_id' => $request->input('user_id'),
|
|
|
+ 'error' => $e->getMessage(),
|
|
|
+ ]);
|
|
|
+
|
|
|
+ return response()->json([
|
|
|
+ 'code' => 500,
|
|
|
+ 'message' => '服务器内部错误',
|
|
|
+ ], 500);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取达人等级配置列表
|
|
|
+ *
|
|
|
+ * @return JsonResponse
|
|
|
+ */
|
|
|
+ public function getTalentConfigs(): JsonResponse
|
|
|
+ {
|
|
|
+ try {
|
|
|
+ $configs = UrsTalentService::getTalentConfigs();
|
|
|
+
|
|
|
+ return response()->json([
|
|
|
+ 'code' => 200,
|
|
|
+ 'message' => '获取成功',
|
|
|
+ 'data' => $configs,
|
|
|
+ ]);
|
|
|
+
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ Log::error('获取达人等级配置失败', [
|
|
|
+ 'error' => $e->getMessage(),
|
|
|
+ ]);
|
|
|
+
|
|
|
+ return response()->json([
|
|
|
+ 'code' => 500,
|
|
|
+ 'message' => '服务器内部错误',
|
|
|
+ ], 500);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|