|
|
@@ -1,134 +0,0 @@
|
|
|
-<?php
|
|
|
-
|
|
|
-namespace App\Http\Controllers\api;
|
|
|
-
|
|
|
-use App\Http\Controllers\Controller;
|
|
|
-use App\Models\LhcOrder;
|
|
|
-use App\Models\LhcOrderItem;
|
|
|
-use App\Models\PcIssue;
|
|
|
-use App\Services\BalanceLogService;
|
|
|
-use App\Services\GameplayRuleService;
|
|
|
-use App\Services\WalletService;
|
|
|
-use Illuminate\Http\Request;
|
|
|
-use Illuminate\Support\Facades\DB;
|
|
|
-use Illuminate\Support\Facades\Log;
|
|
|
-
|
|
|
-class Settle extends Controller
|
|
|
-{
|
|
|
- public function inject(Request $request)
|
|
|
- {
|
|
|
- $issue_no = $request->input('issue_no');
|
|
|
- $member_id = $request->input('member_id');
|
|
|
- $keywords = $request->input('keywords');
|
|
|
- $amount = floatval($request->input('amount', 0));
|
|
|
- $fake_time = $request->input('fake_time');
|
|
|
- $game = $request->input('game', 'pc28');
|
|
|
-
|
|
|
- $gameTypeMap = ['pc28' => 6, 'ca28' => 5];
|
|
|
- if (!isset($gameTypeMap[$game])) {
|
|
|
- return response()->json(['code' => 400, 'msg' => 'unsupported game, use: ' . implode(',', array_keys($gameTypeMap))]);
|
|
|
- }
|
|
|
- $type = $gameTypeMap[$game];
|
|
|
-
|
|
|
- if (!$issue_no || !$member_id || !$keywords || $amount <= 0) {
|
|
|
- return response()->json(['code' => 400, 'msg' => 'missing params']);
|
|
|
- }
|
|
|
-
|
|
|
- $issue = PcIssue::where('issue_no', $issue_no)->first();
|
|
|
- if (!$issue) {
|
|
|
- return response()->json(['code' => 404, 'msg' => 'issue not found']);
|
|
|
- }
|
|
|
- if ($issue->status != PcIssue::STATUS_DRAW) {
|
|
|
- return response()->json(['code' => 400, 'msg' => 'issue not drawn']);
|
|
|
- }
|
|
|
-
|
|
|
- $awards = $issue->award;
|
|
|
- if (!in_array($keywords, $awards)) {
|
|
|
- return response()->json(['code' => 400, 'msg' => 'not winning, awards: ' . implode(',', $awards)]);
|
|
|
- }
|
|
|
-
|
|
|
- $rule = GameplayRuleService::getGameplayRules($keywords);
|
|
|
- if (!$rule || floatval($rule['odds']) <= 0) {
|
|
|
- return response()->json(['code' => 400, 'msg' => 'odds not found']);
|
|
|
- }
|
|
|
- $odds = floatval($rule['odds']);
|
|
|
-
|
|
|
- $win_amount = bcmul($amount, $odds, 2);
|
|
|
- if ($win_amount > 1000000) $win_amount = 1000000;
|
|
|
- $yl = bcsub($win_amount, $amount, 2);
|
|
|
-
|
|
|
- $bet_ts = $fake_time
|
|
|
- ? strtotime($fake_time)
|
|
|
- : (strtotime($issue->end_time) - rand(60, 300));
|
|
|
-
|
|
|
- DB::beginTransaction();
|
|
|
- try {
|
|
|
- $order = LhcOrder::create([
|
|
|
- 'amount' => $amount,
|
|
|
- 'number' => $keywords,
|
|
|
- 'member_id' => $member_id,
|
|
|
- 'issue' => $issue_no,
|
|
|
- 'lhc_number_id' => $issue->id,
|
|
|
- 'odds' => $odds,
|
|
|
- 'type' => $type,
|
|
|
- 'lottery_status' => LhcOrder::STATUS_WIN,
|
|
|
- 'win_amount' => $win_amount,
|
|
|
- 'profit_and_loss' => $yl,
|
|
|
- 'total_amount' => $amount,
|
|
|
- 'created_at' => $bet_ts,
|
|
|
- 'updated_at' => $bet_ts,
|
|
|
- ]);
|
|
|
-
|
|
|
- LhcOrderItem::create([
|
|
|
- 'ordernum' => $order->ordernum,
|
|
|
- 'number' => $keywords,
|
|
|
- 'member_id' => $member_id,
|
|
|
- 'lottery_status' => LhcOrder::STATUS_WIN,
|
|
|
- 'win_amount' => $win_amount,
|
|
|
- 'profit_and_loss' => $yl,
|
|
|
- 'created_at' => $bet_ts,
|
|
|
- 'updated_at' => $bet_ts,
|
|
|
- ]);
|
|
|
-
|
|
|
- $walletInfo = WalletService::findOne(['member_id' => $member_id]);
|
|
|
- if (!$walletInfo) {
|
|
|
- DB::rollBack();
|
|
|
- return response()->json(['code' => 404, 'msg' => 'wallet not found']);
|
|
|
- }
|
|
|
- $balance = floatval($walletInfo['available_balance']);
|
|
|
- WalletService::updateBalance($member_id, $win_amount);
|
|
|
-
|
|
|
- BalanceLogService::addLog(
|
|
|
- $member_id,
|
|
|
- $win_amount,
|
|
|
- $balance,
|
|
|
- bcadd($balance, $win_amount, 2),
|
|
|
- '中奖',
|
|
|
- $order->id,
|
|
|
- "盈利:{$yl}"
|
|
|
- );
|
|
|
-
|
|
|
- DB::commit();
|
|
|
-
|
|
|
- return response()->json([
|
|
|
- 'code' => 200,
|
|
|
- 'issue_no' => $issue_no,
|
|
|
- 'keywords' => $keywords,
|
|
|
- 'awards' => $awards,
|
|
|
- 'amount' => $amount,
|
|
|
- 'odds' => $odds,
|
|
|
- 'win_amount' => $win_amount,
|
|
|
- 'profit' => $yl,
|
|
|
- 'balance_before' => $balance,
|
|
|
- 'balance_after' => bcadd($balance, $win_amount, 2),
|
|
|
- 'order_id' => $order->id,
|
|
|
- 'bet_time' => date('Y-m-d H:i:s', $bet_ts),
|
|
|
- ]);
|
|
|
-
|
|
|
- } catch (\Exception $e) {
|
|
|
- DB::rollBack();
|
|
|
- Log::error('settle_inject: ' . $e->getMessage());
|
|
|
- return response()->json(['code' => 500, 'msg' => $e->getMessage()]);
|
|
|
- }
|
|
|
- }
|
|
|
-}
|