|
|
@@ -4,18 +4,70 @@ namespace App\Http\Controllers\admin;
|
|
|
|
|
|
use App\Constants\HttpStatus;
|
|
|
use App\Http\Controllers\Controller;
|
|
|
+use App\Models\Wallet as WalletModel;
|
|
|
use App\Services\ActivityRewardService;
|
|
|
use App\Services\ActivityUserService;
|
|
|
+use App\Services\BalanceLogService;
|
|
|
+use App\Services\TopUpService;
|
|
|
use Illuminate\Http\JsonResponse;
|
|
|
+use Illuminate\Support\Facades\Cache;
|
|
|
+use Illuminate\Support\Facades\DB;
|
|
|
use Illuminate\Validation\ValidationException;
|
|
|
use Exception;
|
|
|
use App\Models\ActivityUser as ActivityUserModel;
|
|
|
|
|
|
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 {
|
|
|
$params = request()->validate([
|
|
|
'page' => ['required', 'integer', 'min:1'],
|