Ken 17 hours ago
parent
commit
e16623bc5e

+ 23 - 27
app/Http/Controllers/admin/ActivityUser.php

@@ -22,31 +22,8 @@ class ActivityUser extends Controller
         DB::beginTransaction();
         try {
             $params = request()->validate([
-                'amount' => ['required', 'numeric', 'min:0.01'],
-                'remark' => ['required', 'string', 'min:1'],
-                'change_type' => ['required', 'string', 'in:' . implode(',', BalanceLogService::$manualRecharge)],
                 'id' => ['required', 'integer', 'min:1'],
             ]);
-            $id = request()->input('id');
-            $params['action'] = request()->route()->getActionName();
-            $amount = request()->input('amount');
-            $remark = request()->input('remark');
-            $changeType = request()->input('change_type');
-            $key = 'api_request_' . md5(json_encode($params));
-            if (Cache::has($key)) throw new Exception("请求太频繁,请稍后再试。", HttpStatus::CUSTOM_ERROR);
-            Cache::put($key, true, 3);
-            $activityUser = ActivityUserService::findOne(['id' => $id, 'status' => 0]);
-            if (!$activityUser) throw new Exception("活动不存在或已完成", HttpStatus::CUSTOM_ERROR);
-            $memberId = $activityUser->member_id;
-            $activityUser->status = 1;
-            $activityUser->finish_time = time();
-            $activityUser->save();
-            $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();
@@ -55,10 +32,29 @@ class ActivityUser extends Controller
             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 gift()
+    {
+        DB::beginTransaction();
+        try {
+            $params = request()->validate([
+                'id' => ['required', 'integer', 'min:1'],
+                'amount' => ['required', 'numeric', 'min:0.01'],
+                'effective_betting_amount' => ['required', 'integer', 'min:0', 'max:9999999'],
+            ]);
+            ActivityUserService::gift($params['id'], $params['amount'], $params['effective_betting_amount']);
+            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());
+        }
         return $this->success();
     }
 

+ 13 - 2
app/Models/ActivityUser.php

@@ -15,13 +15,24 @@ use App\Constants\Util;
  * @property string start_time
  * @property string end_time
  * @property string part_in_time
+ * @property $effective_betting_amount
+ * @property $gift_amount
  *
  */
 class ActivityUser extends BaseModel
 {
     protected $table = 'activity_user';
-    protected $fillable = ['activity_id', 'finish_time', 'member_id', 'title', 'status', 'sub_title', 'detail_image',
-        'start_time', 'end_time', 'part_in_time'];
+    protected $fillable = ['activity_id',
+        'finish_time', 'member_id', 'title', 'status', 'sub_title', 'detail_image',
+        'start_time', 'end_time', 'part_in_time',
+        'effective_betting_amount', 'gift_amount',
+
+    ];
+
+
+    const STATUS_APPLY = 0;
+    const STATUS_IN_PROGRESS = 1;
+    const STATUS_COMPLETE = 2;
 
     protected function getDetailImageAttribute($value)
     {

+ 23 - 0
app/Services/ActivityUserService.php

@@ -6,6 +6,7 @@ use App\Constants\HttpStatus;
 use App\Constants\Util;
 use App\Models\ActivityReward;
 use App\Models\ActivityUser;
+use App\Models\Wallet as WalletModel;
 use Exception;
 use Illuminate\Database\Eloquent\Builder;
 
@@ -67,4 +68,26 @@ class ActivityUserService extends BaseService
         }
         return true;
     }
+
+
+    public static function gift($id, $amount, $effectiveBettingAmount)
+    {
+        $activityUser = static::findOne(['id' => $id]);
+        if (!$activityUser) throw new Exception('活动不存在', HttpStatus::CUSTOM_ERROR);
+        if ($activityUser->status == static::$MODEL::STATUS_IN_PROGRESS) throw new Exception('充值失败:活动进行中', HttpStatus::CUSTOM_ERROR);
+        if ($activityUser->status == static::$MODEL::STATUS_COMPLETE) throw new Exception("充值失败:活动已完成", HttpStatus::CUSTOM_ERROR);
+        if ($activityUser->status != static::$MODEL::STATUS_APPLY) throw new Exception('充值失败:状态异常', HttpStatus::CUSTOM_ERROR);
+        $activityUser->status = static::$MODEL::STATUS_IN_PROGRESS;
+        $activityUser->effective_betting_amount = $effectiveBettingAmount;
+        $activityUser->gift_amount = $amount;
+        $activityUser->save();
+        $memberId = $activityUser->member_id;
+        $res = WalletService::updateBalance($memberId,$amount);
+        BalanceLogService::addLog($memberId, $amount, $res['before_balance'], $res['after_balance'], "优惠活动", $activityUser->id, "$activityUser->title; 赠送:$activityUser->gift_amount;  打码量:$activityUser->effective_betting_amount");
+
+        $availableBalance = floatval($res['after_balance']);
+        // 去除多余0后,再用 sprintf 补足两位
+        $availableBalance = sprintf('%.2f', $availableBalance);
+        TopUpService::notifyTransferSuccess($memberId, "余额变动:" . ($amount > 0 ? '+' : '') . "{$amount} \n总余额为:{$availableBalance}");
+    }
 }

+ 3 - 8
app/Services/QianBaoWithdrawService.php

@@ -4,6 +4,7 @@ namespace App\Services;
 
 use App\Constants\HttpStatus;
 use App\Constants\StepStatus;
+use App\Models\ActivityUser;
 use App\Models\Bank;
 use App\Models\Config;
 use App\Models\PaymentOrder;
@@ -149,10 +150,7 @@ class QianBaoWithdrawService
             ];
         }
 
-        $activityUser = ActivityUserService::findOne([
-            'member_id' => $chatId,
-            'status' => 0
-        ]);
+        $activityUser = ActivityUserService::findOne(['member_id' => $chatId, 'status' => ActivityUser::STATUS_IN_PROGRESS]);
         if ($activityUser) {
             $text = lang("您有未完成的活动") . "\n";
             $text .= lang("任何疑问都可以联系唯一客服") . ":@{$serviceAccount}";
@@ -409,10 +407,7 @@ class QianBaoWithdrawService
     private static function confirm($chatId, $messageId)
     {
         $serviceAccount = Config::where('field', 'service_customer')->first()->val;
-        $activityUser = ActivityUserService::findOne([
-            'member_id' => $chatId,
-            'status' => 0
-        ]);
+        $activityUser = ActivityUserService::findOne(['member_id' => $chatId, 'status' => ActivityUser::STATUS_IN_PROGRESS]);
         if ($activityUser) {
             $text = lang("您有未完成的活动") . "\n";
             $text .= lang("任何疑问都可以联系唯一客服") . ":@{$serviceAccount}";

+ 2 - 4
app/Services/WithdrawService.php

@@ -6,6 +6,7 @@ namespace App\Services;
 
 use App\Constants\HttpStatus;
 use App\Constants\StepStatus;
+use App\Models\ActivityUser;
 use App\Models\Address;
 use App\Models\BalanceLog;
 use App\Models\Bank;
@@ -355,10 +356,7 @@ class WithdrawService
     public static function done($chatId, $messageId, $firstName)
     {
         $serviceAccount = Config::where('field', 'service_customer')->first()->val;
-        $activityUser = ActivityUserService::findOne([
-            'member_id' => $chatId,
-            'status' => 0
-        ]);
+        $activityUser = ActivityUserService::findOne(['member_id' => $chatId, 'status' => ActivityUser::STATUS_IN_PROGRESS]);
         if ($activityUser) {
             $text = lang("您有未完成的活动") . "\n";
             $text .= lang("任何疑问都可以联系唯一客服") . ":@{$serviceAccount}";

+ 30 - 0
database/migrations/2026_02_02_134352_update_activity_user.php

@@ -0,0 +1,30 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Support\Facades\DB;
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('activity_user', function (Blueprint $table) {
+            DB::statement('ALTER TABLE bot_activity_user MODIFY COLUMN status TINYINT NOT NULL DEFAULT 0 COMMENT "0申请中 1进行中 2已完成"');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        //
+    }
+};

+ 30 - 0
database/migrations/2026_02_02_134741_update_activity_user.php

@@ -0,0 +1,30 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration {
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('activity_user', function (Blueprint $table) {
+            $table->decimal('effective_betting_amount', 10)->default(0)->comment('打码量');
+            $table->decimal('gift_amount', 10)->default(0)->comment('赠送金额');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        //
+    }
+};

+ 4 - 1
routes/admin.php

@@ -63,7 +63,10 @@ Route::middleware(['admin.jwt'])->group(function () {
 
         Route::prefix('/ActivityUser')->group(function () {
             Route::get('/', [ActivityUser::class, 'index']);
-            Route::post("/finish", [ActivityUser::class, 'finish']);
+            Route::post("/gift", [ActivityUser::class, 'gift']);
+
+
+//            Route::post("/finish", [ActivityUser::class, 'finish']);
         });
 
         Route::prefix('/ActivityReward')->group(function () {