Ken vor 1 Woche
Ursprung
Commit
431bc0fc8f
2 geänderte Dateien mit 53 neuen und 2 gelöschten Zeilen
  1. 53 1
      app/Http/Controllers/admin/ActivityUser.php
  2. 0 1
      app/Http/Controllers/admin/Wallet.php

+ 53 - 1
app/Http/Controllers/admin/ActivityUser.php

@@ -4,18 +4,70 @@ namespace App\Http\Controllers\admin;
 
 
 use App\Constants\HttpStatus;
 use App\Constants\HttpStatus;
 use App\Http\Controllers\Controller;
 use App\Http\Controllers\Controller;
+use App\Models\Wallet as WalletModel;
 use App\Services\ActivityRewardService;
 use App\Services\ActivityRewardService;
 use App\Services\ActivityUserService;
 use App\Services\ActivityUserService;
+use App\Services\BalanceLogService;
+use App\Services\TopUpService;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\JsonResponse;
+use Illuminate\Support\Facades\Cache;
+use Illuminate\Support\Facades\DB;
 use Illuminate\Validation\ValidationException;
 use Illuminate\Validation\ValidationException;
 use Exception;
 use Exception;
 use App\Models\ActivityUser as ActivityUserModel;
 use App\Models\ActivityUser as ActivityUserModel;
 
 
 class ActivityUser extends Controller
 class ActivityUser extends Controller
 {
 {
-    public function index(): JsonResponse
+
+
+    public function finish(): JsonResponse
     {
     {
+        DB::beginTransaction();
+        try {
+            $params = request()->validate([
+                'amount' => ['required', 'numeric', 'min:0.01'],
+                'member_id' => ['required', 'string', 'min:1'],
+                'remark' => ['required', 'string', 'min:1'],
+                'change_type' => ['required', 'string', 'in:' . implode(',', BalanceLogService::$manualRecharge)],
+                'id' => ['required', 'integer', 'min:1'],
+            ]);
+            $id = request()->input('id');
+            $activityUser = ActivityUserService::findOne(['id' => $id, 'status' => 0]);
+            if (!$activityUser) throw new Exception("活动已完成或活动不存在", HttpStatus::CUSTOM_ERROR);
+            $activityUser->status = 1;
+            $activityUser->save();
+            $params['action'] = request()->action;
+            $memberId = request()->input('member_id');
+            $amount = request()->input('amount');
+            $remark = request()->input('remark');
+            $changeType = request()->input('change_type');
+            $key = 'api_request_' . md5($memberId . json_encode($params));
+            if (Cache::has($key)) throw new Exception("请求太频繁,请稍后再试。", HttpStatus::CUSTOM_ERROR);
+            Cache::put($key, true, 3);
+            $wallet = WalletModel::where('member_id', $memberId)->first();
+            if (!$wallet) throw new Exception('用户不存在', HttpStatus::CUSTOM_ERROR);
+            $availableBalance = bcadd($wallet->available_balance, $amount, 10);
+            BalanceLogService::addLog($memberId, $amount, $wallet->available_balance, $availableBalance, $changeType, null, $remark);
+            $wallet->available_balance = $availableBalance;
+            $wallet->save();
+            DB::commit();
+        } catch (ValidationException $e) {
+            DB::rollBack();
+            return $this->error(HttpStatus::CUSTOM_ERROR, $e->validator->errors()->first());
+        } catch (Exception $e) {
+            DB::rollBack();
+            return $this->error($e->getCode(), $e->getMessage());
+        }
+        $availableBalance = floatval($availableBalance);
+        // 去除多余0后,再用 sprintf 补足两位
+        $availableBalance = sprintf('%.2f', $availableBalance);
+        TopUpService::notifyTransferSuccess($memberId, "完成活动:" . ($amount > 0 ? '+' : '') . "{$amount} \n总余额为:{$availableBalance}");
+        return $this->success();
 
 
+    }
+
+    public function index(): JsonResponse
+    {
         try {
         try {
             $params = request()->validate([
             $params = request()->validate([
                 'page' => ['required', 'integer', 'min:1'],
                 'page' => ['required', 'integer', 'min:1'],

+ 0 - 1
app/Http/Controllers/admin/Wallet.php

@@ -128,7 +128,6 @@ class Wallet extends Controller
             $wallet = WalletModel::where('member_id', $memberId)->first();
             $wallet = WalletModel::where('member_id', $memberId)->first();
             if (!$wallet) throw new Exception('用户不存在', HttpStatus::CUSTOM_ERROR);
             if (!$wallet) throw new Exception('用户不存在', HttpStatus::CUSTOM_ERROR);
             $availableBalance = bcadd($wallet->available_balance, $amount, 10);
             $availableBalance = bcadd($wallet->available_balance, $amount, 10);
-            if ($availableBalance < 0) throw new Exception('可用余额不足', HttpStatus::CUSTOM_ERROR);
             BalanceLogService::addLog($memberId, $amount, $wallet->available_balance, $availableBalance, $changeType, null, $remark);
             BalanceLogService::addLog($memberId, $amount, $wallet->available_balance, $availableBalance, $changeType, null, $remark);
             $wallet->available_balance = $availableBalance;
             $wallet->available_balance = $availableBalance;
             $wallet->save();
             $wallet->save();