UrsPromotionApiController.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. <?php
  2. namespace App\Module\UrsPromotion\Controllers;
  3. use Illuminate\Http\Request;
  4. use Illuminate\Http\JsonResponse;
  5. use App\Module\UrsPromotion\Services\UrsProfitService;
  6. use App\Module\UrsPromotion\Services\UrsTalentService;
  7. use App\Module\UrsPromotion\Models\UrsUserReferral;
  8. use App\Module\UrsPromotion\Models\UrsUserTalent;
  9. use App\Module\UrsPromotion\Models\UrsTalentConfig;
  10. use Illuminate\Support\Facades\Validator;
  11. use Illuminate\Support\Facades\Log;
  12. /**
  13. * URS推广模块API控制器
  14. *
  15. * 提供URS推广系统的对外API接口
  16. */
  17. class UrsPromotionApiController
  18. {
  19. /**
  20. * 获取用户的达人信息
  21. *
  22. * @param Request $request
  23. * @return JsonResponse
  24. */
  25. public function getUserTalent(Request $request): JsonResponse
  26. {
  27. $validator = Validator::make($request->all(), [
  28. 'user_id' => 'required|integer|min:1',
  29. ]);
  30. if ($validator->fails()) {
  31. return response()->json([
  32. 'code' => 400,
  33. 'message' => '参数错误',
  34. 'errors' => $validator->errors(),
  35. ], 400);
  36. }
  37. try {
  38. $userId = $request->input('user_id');
  39. $stats = UrsTalentService::getUserTeamStats($userId);
  40. return response()->json([
  41. 'code' => 200,
  42. 'message' => '获取成功',
  43. 'data' => $stats,
  44. ]);
  45. } catch (\Exception $e) {
  46. Log::error('获取用户达人信息失败', [
  47. 'user_id' => $request->input('user_id'),
  48. 'error' => $e->getMessage(),
  49. ]);
  50. return response()->json([
  51. 'code' => 500,
  52. 'message' => '服务器内部错误',
  53. ], 500);
  54. }
  55. }
  56. /**
  57. * 获取用户的推荐关系树
  58. *
  59. * @param Request $request
  60. * @return JsonResponse
  61. */
  62. public function getUserReferralTree(Request $request): JsonResponse
  63. {
  64. $validator = Validator::make($request->all(), [
  65. 'user_id' => 'required|integer|min:1',
  66. ]);
  67. if ($validator->fails()) {
  68. return response()->json([
  69. 'code' => 400,
  70. 'message' => '参数错误',
  71. 'errors' => $validator->errors(),
  72. ], 400);
  73. }
  74. try {
  75. $userId = $request->input('user_id');
  76. $tree = UrsTalentService::getUserReferralTree($userId);
  77. return response()->json([
  78. 'code' => 200,
  79. 'message' => '获取成功',
  80. 'data' => $tree,
  81. ]);
  82. } catch (\Exception $e) {
  83. Log::error('获取用户推荐关系树失败', [
  84. 'user_id' => $request->input('user_id'),
  85. 'error' => $e->getMessage(),
  86. ]);
  87. return response()->json([
  88. 'code' => 500,
  89. 'message' => '服务器内部错误',
  90. ], 500);
  91. }
  92. }
  93. /**
  94. * 获取用户的收益统计
  95. *
  96. * @param Request $request
  97. * @return JsonResponse
  98. */
  99. public function getUserProfitStats(Request $request): JsonResponse
  100. {
  101. $validator = Validator::make($request->all(), [
  102. 'user_id' => 'required|integer|min:1',
  103. 'profit_type' => 'nullable|string|in:promotion_reward,planting_reward',
  104. 'start_date' => 'nullable|date',
  105. 'end_date' => 'nullable|date|after_or_equal:start_date',
  106. ]);
  107. if ($validator->fails()) {
  108. return response()->json([
  109. 'code' => 400,
  110. 'message' => '参数错误',
  111. 'errors' => $validator->errors(),
  112. ], 400);
  113. }
  114. try {
  115. $userId = $request->input('user_id');
  116. $profitType = $request->input('profit_type');
  117. $startDate = $request->input('start_date');
  118. $endDate = $request->input('end_date');
  119. $stats = UrsProfitService::getUserProfitStats($userId, $profitType, $startDate, $endDate);
  120. return response()->json([
  121. 'code' => 200,
  122. 'message' => '获取成功',
  123. 'data' => $stats,
  124. ]);
  125. } catch (\Exception $e) {
  126. Log::error('获取用户收益统计失败', [
  127. 'user_id' => $request->input('user_id'),
  128. 'error' => $e->getMessage(),
  129. ]);
  130. return response()->json([
  131. 'code' => 500,
  132. 'message' => '服务器内部错误',
  133. ], 500);
  134. }
  135. }
  136. /**
  137. * 分发推广收益
  138. *
  139. * @param Request $request
  140. * @return JsonResponse
  141. */
  142. public function distributePromotionReward(Request $request): JsonResponse
  143. {
  144. $validator = Validator::make($request->all(), [
  145. 'user_id' => 'required|integer|min:1',
  146. 'source_type' => 'required|string|max:32',
  147. 'source_id' => 'required|integer|min:1',
  148. 'original_amount' => 'required|numeric|min:0',
  149. ]);
  150. if ($validator->fails()) {
  151. return response()->json([
  152. 'code' => 400,
  153. 'message' => '参数错误',
  154. 'errors' => $validator->errors(),
  155. ], 400);
  156. }
  157. try {
  158. $userId = $request->input('user_id');
  159. $sourceType = $request->input('source_type');
  160. $sourceId = $request->input('source_id');
  161. $originalAmount = $request->input('original_amount');
  162. $profits = UrsProfitService::distributePromotionReward(
  163. $userId,
  164. $sourceType,
  165. $sourceId,
  166. (string)$originalAmount
  167. );
  168. return response()->json([
  169. 'code' => 200,
  170. 'message' => '分发成功',
  171. 'data' => [
  172. 'profit_count' => count($profits),
  173. 'profits' => $profits,
  174. ],
  175. ]);
  176. } catch (\Exception $e) {
  177. Log::error('分发推广收益失败', [
  178. 'user_id' => $request->input('user_id'),
  179. 'error' => $e->getMessage(),
  180. ]);
  181. return response()->json([
  182. 'code' => 500,
  183. 'message' => '服务器内部错误',
  184. ], 500);
  185. }
  186. }
  187. /**
  188. * 分发种植收益
  189. *
  190. * @param Request $request
  191. * @return JsonResponse
  192. */
  193. public function distributePlantingReward(Request $request): JsonResponse
  194. {
  195. $validator = Validator::make($request->all(), [
  196. 'user_id' => 'required|integer|min:1',
  197. 'source_type' => 'required|string|max:32',
  198. 'source_id' => 'required|integer|min:1',
  199. 'original_amount' => 'required|numeric|min:0',
  200. ]);
  201. if ($validator->fails()) {
  202. return response()->json([
  203. 'code' => 400,
  204. 'message' => '参数错误',
  205. 'errors' => $validator->errors(),
  206. ], 400);
  207. }
  208. try {
  209. $userId = $request->input('user_id');
  210. $sourceType = $request->input('source_type');
  211. $sourceId = $request->input('source_id');
  212. $originalAmount = $request->input('original_amount');
  213. $profits = UrsProfitService::distributePlantingReward(
  214. $userId,
  215. $sourceType,
  216. $sourceId,
  217. (string)$originalAmount
  218. );
  219. return response()->json([
  220. 'code' => 200,
  221. 'message' => '分发成功',
  222. 'data' => [
  223. 'profit_count' => count($profits),
  224. 'profits' => $profits,
  225. ],
  226. ]);
  227. } catch (\Exception $e) {
  228. Log::error('分发种植收益失败', [
  229. 'user_id' => $request->input('user_id'),
  230. 'error' => $e->getMessage(),
  231. ]);
  232. return response()->json([
  233. 'code' => 500,
  234. 'message' => '服务器内部错误',
  235. ], 500);
  236. }
  237. }
  238. /**
  239. * 更新用户达人等级
  240. *
  241. * @param Request $request
  242. * @return JsonResponse
  243. */
  244. public function updateUserTalent(Request $request): JsonResponse
  245. {
  246. $validator = Validator::make($request->all(), [
  247. 'user_id' => 'required|integer|min:1',
  248. ]);
  249. if ($validator->fails()) {
  250. return response()->json([
  251. 'code' => 400,
  252. 'message' => '参数错误',
  253. 'errors' => $validator->errors(),
  254. ], 400);
  255. }
  256. try {
  257. $userId = $request->input('user_id');
  258. $talent = UrsTalentService::updateUserTalent($userId);
  259. if ($talent) {
  260. return response()->json([
  261. 'code' => 200,
  262. 'message' => '更新成功',
  263. 'data' => [
  264. 'user_id' => $talent->user_id,
  265. 'talent_level' => $talent->talent_level,
  266. 'talent_level_name' => $talent->getTalentLevelName(),
  267. 'direct_count' => $talent->direct_count,
  268. 'indirect_count' => $talent->indirect_count,
  269. 'third_count' => $talent->third_count,
  270. 'promotion_count' => $talent->promotion_count,
  271. ],
  272. ]);
  273. } else {
  274. return response()->json([
  275. 'code' => 500,
  276. 'message' => '更新失败',
  277. ], 500);
  278. }
  279. } catch (\Exception $e) {
  280. Log::error('更新用户达人等级失败', [
  281. 'user_id' => $request->input('user_id'),
  282. 'error' => $e->getMessage(),
  283. ]);
  284. return response()->json([
  285. 'code' => 500,
  286. 'message' => '服务器内部错误',
  287. ], 500);
  288. }
  289. }
  290. /**
  291. * 获取达人等级配置列表
  292. *
  293. * @return JsonResponse
  294. */
  295. public function getTalentConfigs(): JsonResponse
  296. {
  297. try {
  298. $configs = UrsTalentService::getTalentConfigs();
  299. return response()->json([
  300. 'code' => 200,
  301. 'message' => '获取成功',
  302. 'data' => $configs,
  303. ]);
  304. } catch (\Exception $e) {
  305. Log::error('获取达人等级配置失败', [
  306. 'error' => $e->getMessage(),
  307. ]);
  308. return response()->json([
  309. 'code' => 500,
  310. 'message' => '服务器内部错误',
  311. ], 500);
  312. }
  313. }
  314. }