ソースを参照

TG下注:下注项写入 lhc_order_item,修复 number 列不存在报错

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
doge 1 日 前
親
コミット
ab2a98deea
2 ファイル変更、38 行追加、22 行削除
  1. 1 1
      app/Models/LhcOrder.php
  2. 37 21
      app/Services/BetService.php

+ 1 - 1
app/Models/LhcOrder.php

@@ -5,7 +5,7 @@ use App\Models\LhcOrderItem;
 class LhcOrder extends BaseModel
 {
     protected $table = 'lhc_order';
-    protected $fillable = ['issue','ordernum','member_id','game','gameplay','number','odds','amount','lottery_status','win_amount','profit_and_loss','is_faker','remark','type'];
+    protected $fillable = ['issue','ordernum','member_id','game','gameplay','number','odds','amount','lottery_status','win_amount','profit_and_loss','is_faker','remark','type','total_amount'];
     protected $hidden = [];
     
     public $timestamps = true;

+ 37 - 21
app/Services/BetService.php

@@ -418,23 +418,38 @@ class BetService extends BaseService
         $userInfo = UserService::findOne(['member_id' => $memberId]);
 
         $type = $pc28Switch == 1 ? 6 : 5;
-        $betInfo = LhcOrder::where(['type' => $type, 'member_id' => $memberId, 'issue' => $issueInfo->issue_no, 'number' => $keywords])->first(); // 相同下注
+        // 下注项存于 lhc_order_item;相同下注只合并到本机器人建的单项、无优惠券、未开奖的订单
+        $betInfo = LhcOrder::where('type', $type)
+            ->where('member_id', $memberId)
+            ->where('issue', $issueInfo->issue_no)
+            ->where('lottery_status', LhcOrder::STATUS_STAY)
+            ->whereNull('coupon_id')
+            ->whereColumn('total_amount', 'amount')
+            ->whereIn('ordernum', LhcOrderItem::where('member_id', $memberId)->where('number', $keywords)->select('ordernum'))
+            ->lockForUpdate()
+            ->first(); // 相同下注
 
         if ($betInfo) {
-            $betInfo->amount = $betInfo->amount + $amount;
-            $bet_id = $betInfo->id;
+            $betInfo->amount = bcadd($betInfo->amount, $amount, 2);
+            $betInfo->total_amount = $betInfo->amount;
             $betInfo->save();
+            $bet_id = $betInfo->id;
         } else {
-            $data = [];
-            $data['amount'] = $amount; // 分数
-            $data['number'] = $keywords;  // 玩法
-            $data['member_id'] = $memberId;
-            $data['user_id'] = $userInfo->id;
-            $data['issue'] = $issueInfo->issue_no;
-            $data['lhc_number_id'] = $issueInfo->id;
-            $data['odds'] = $gameplayRuleInfo['odds'];
-            $data['type'] = $type;
-            $newBet = LhcOrder::create($data);
+            $ordernum = date('YmdHis') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);
+            LhcOrderItem::create([
+                'ordernum' => $ordernum,
+                'member_id' => $memberId,
+                'number' => $keywords, // 玩法
+            ]);
+            $newBet = LhcOrder::create([
+                'type' => $type,
+                'issue' => $issueInfo->issue_no,
+                'ordernum' => $ordernum,
+                'member_id' => $memberId,
+                'odds' => $gameplayRuleInfo['odds'],
+                'amount' => $amount, // 分数
+                'total_amount' => $amount,
+            ]);
 
             $bet_id = $newBet->id;
         }
@@ -625,8 +640,8 @@ class BetService extends BaseService
             $text = lang("期数") . " {$issue_no} \n";
             // $text .= "\n";
             // $text .= "----------\n";
-            $list = self::findAll(['member_id' => $memberId, 'issue' => $issue_no]);
-            $list = $list->toArray();
+            $list = self::model()::with('items')->whereIn('type', [5, 6])->where('member_id', $memberId)->where('issue', $issue_no)->get();
+            $list = $list->map(fn ($v) => ['number' => $v->items->pluck('number')->implode(','), 'amount' => $v->amount])->toArray();
             if (empty($list)) {
                 $text .= lang("本期暂未下注") . "! \n";
             } else {
@@ -660,12 +675,13 @@ class BetService extends BaseService
      */
     public static function recentlyRecord($memberId, $page = 1, $limit = 5)
     {
-        $list = self::model()::where('type', 'in', [5,6])->where('member_id', $memberId)->orderBy('id', 'desc')->forPage($page, $limit)->get();
+        $list = self::model()::with('items')->whereIn('type', [5, 6])->where('member_id', $memberId)->orderBy('id', 'desc')->forPage($page, $limit)->get();
 
         // $text = "```\n";
         $text = "";
         $text .= "期数--内容--盈亏 \n";
-        foreach ($list->toArray() as $k => $v) {
+        foreach ($list as $k => $v) {
+            $v = $v->toArray() + ['number' => $v->items->pluck('number')->implode(',')];
             $profit = $v['win_amount'] - $v['amount'];
             // $text .= $v['issue_no']." ".$v['keywords']." ".$v['amount']." ".$v['profit']."\n";
             $item = $v['issue'] . "==" . $v['number'] . rtrim(rtrim(number_format($v['amount'], 2, '.', ''), '0'), '.') . "==" . rtrim(rtrim(number_format($profit, 2, '.', ''), '0'), '.') . "\n";
@@ -692,8 +708,8 @@ class BetService extends BaseService
         }
 
         $msg['chat_id'] = $memberId;
-        $list = self::model()::where('type', 'in', [5,6])->where('member_id', $memberId)->orderBy('id', 'desc')->forPage($page, $limit)->get();
-        $count = self::model()::where('type', 'in', [5,6])->where('member_id', $memberId)->count();
+        $list = self::model()::with('items')->whereIn('type', [5, 6])->where('member_id', $memberId)->orderBy('id', 'desc')->forPage($page, $limit)->get();
+        $count = self::model()::whereIn('type', [5, 6])->where('member_id', $memberId)->count();
 
         $keyboard = [];
 
@@ -711,7 +727,7 @@ class BetService extends BaseService
 
             $text .= "-------------------------------------\n";
             $text .= lang("期数") . ":{$v->issue} \n";
-            $text .= lang("内容") . ":{$v->number} \n";
+            $text .= lang("内容") . ":" . $v->items->pluck('number')->implode(',') . " \n";
             $text .= lang("金额") . ":{$v->amount} \n";
             $text .= lang("盈亏") . ":{$phase} \n";
         }
@@ -772,7 +788,7 @@ class BetService extends BaseService
             BalanceLogService::addLog($v['member_id'], $profit, ($balance - $profit), $balance, '投注退分', $v['id'], '');
 
             $text = $issue_no . "期开奖失败 \n";
-            $text .= "投注类型:{$v['number']} \n";
+            $text .= "投注类型:" . LhcOrderItem::where('ordernum', $v['ordernum'])->pluck('number')->implode(',') . " \n";
             $text .= "投注金额:{$v['amount']} \n";
             $text .= "投注的资金已退回您的钱包 \n";