Ken 2 napja
szülő
commit
73d1d0d6da
1 módosított fájl, 140 hozzáadás és 1 törlés
  1. 140 1
      app/Services/PcIssueService.php

+ 140 - 1
app/Services/PcIssueService.php

@@ -2,10 +2,13 @@
 
 namespace App\Services;
 
+use App\Jobs\SendTelegramGroupMessageJob;
+use App\Models\Config;
 use App\Models\PcCao;
 use App\Models\PcCaoHistory;
 use App\Models\PcIssue;
 use App\Models\PcPrediction;
+use Illuminate\Support\Facades\Cache;
 
 class PcIssueService extends BaseService
 {
@@ -49,8 +52,47 @@ class PcIssueService extends BaseService
                 $item->winning_numbers = implode(',', $winningNumbers);
                 $item->status = PcIssue::STATUS_DRAW;
                 $item->save();
-                $awards = IssueService::award(explode(',', $item->winning_numbers));
 
+                $winArr = array_map('intval', $winningNumbers);
+                // 组合
+                $sum = array_sum($winArr);
+                $combo = [];
+                $sumOddEven = IssueService::calculateOddEven($sum); // 总和单双
+                $combo[] = $sumOddEven;
+                $sumSize = IssueService::calculateSumSize($sum);  // 总和大小
+                $combo[] = $sumSize;
+                $sumExtremeSize = IssueService::calculateSumExtremeSize($sum);  // 总和极值
+                if ($sumExtremeSize) {
+                    $combo[] = $sumExtremeSize;
+                }
+                $sumBaoZi = IssueService::isBaoZi($winArr[0], $winArr[1], $winArr[2]); // 豹子
+                if ($sumBaoZi) {
+                    $combo[] = $sumBaoZi;
+                }
+                $sumPair = IssueService::isPair($winArr[0], $winArr[1], $winArr[2]); // 对子
+                if ($sumPair) {
+                    $combo[] = $sumPair;
+                }
+                $sumStraight = IssueService::isStraight($winArr[0], $winArr[1], $winArr[2]); // 顺子
+                if ($sumStraight) {
+                    $combo[] = $sumStraight;
+                }
+                $tail = IssueService::getLastDigit($sum); // 总和尾数
+                if ($tail != 0 && $tail != 9) {
+                    $combo[] = '尾' . $tail; // 尾数
+                }
+
+
+                $key = 'lottery_numbers_' . $item->issue_no;
+                $combo = implode(' ', $combo);
+
+                if (Cache::add($key, $item->winning_numbers, 100)) {
+                    self::lotteryDraw($item->issue_no, $item->winning_numbers, $combo, '');
+
+                }
+
+
+                $awards = IssueService::award(explode(',', $item->winning_numbers));
                 //预测结果
                 PcPrediction::result($item->issue_no, $item->winning_numbers, $awards);
                 //自开奖以来的结果统计
@@ -63,6 +105,103 @@ class PcIssueService extends BaseService
         }
     }
 
+
+    private static function lotteryDraw($issue_no, $winning_numbers, $combo, $recordImage)
+    {
+        $info = PcIssue::where('issue_no', $issue_no)->first();
+        if (!$info) {
+            return ['code' => self::NOT, 'msg' => '期号不存在'];
+        }
+        if ($info->status == PcIssue::STATUS_DRAW) {
+            return ['code' => self::NOT, 'msg' => '期号状态不正确'];
+        }
+
+        $winArr = array_map('intval', explode(',', $winning_numbers));
+        // 计算中奖
+        $awards = IssueService::award(explode(',', $winning_numbers));
+
+        $info->status = self::model()::STATUS_DRAW;
+        $info->winning_numbers = $winning_numbers;
+        $info->combo = $combo;
+        $info->image = $recordImage;
+        $info->save();
+
+
+        $replyInfo = KeyboardService::findOne(['button' => '本期开奖']);
+
+        if ($replyInfo) {
+            $text = $replyInfo->reply;
+            $text .= "\n";
+            $text .= $info->issue_no . "期 " . implode('+', explode(',', $winning_numbers)) . "=" . array_sum($winArr) . " " . $combo;
+
+            $buttons = json_decode($replyInfo->buttons, true);
+            $image = $replyInfo->image;
+            if ($image) {
+                $image = url($image);
+            }
+            if (empty($buttons)) {
+                $serviceAccount = Config::where('field', 'service_account')->first()->val;
+                $buttons[] = [['text' => '✅唯一财务', 'callback_data' => "", 'url' => "https://t.me/{$serviceAccount}"]];
+
+            }
+            // self::bettingGroupNotice($text, $buttons, $image, true);
+            SendTelegramGroupMessageJob::dispatch($text, $buttons, $image, true);
+        }
+
+        if (config('app.url') != 'https://bot28dev.testx2.cc') {
+            $recordImage = self::lotteryImage($info->issue_no);
+        }
+        if ($recordImage) {
+            // self::bettingGroupNotice('', [], url($recordImage));
+            SendTelegramGroupMessageJob::dispatch('', [], url($recordImage), false);
+        }
+        BetService::betSettled($info->issue_no, $awards);
+        return ['code' => self::YES, 'msg' => '开奖成功'];
+    }
+
+    // 生成开奖图片
+    private static function lotteryImage($issue_no)
+    {
+        $list = PcIssue::where('issue_no', '<=', $issue_no)->where('status' , PcIssue::STATUS_DRAW)->orderBy('issue_no', 'desc')->take(20)->get();
+        $records = $list->toArray();
+
+        foreach ($records as $k => $v) {
+            $winning_numbers = explode(',', $v['winning_numbers']);
+            $v['winning_numbers'] = $winning_numbers;
+
+            // 组合
+            $sum = array_sum($winning_numbers);
+
+            $v['sum'] = $sum;
+            $sumOddEven = IssueService::calculateOddEven($sum); // 总和单双
+
+            $sumSize = IssueService::calculateSumSize($sum);  // 总和大小
+            $v['combo'] = $sumSize . ' ' . $sumOddEven;
+
+            $sumExtremeSize = IssueService::calculateSumExtremeSize($sum);  // 总和极值
+            if (!$sumExtremeSize) {
+                $sumExtremeSize = '-';
+            }
+            $v['extreme'] = $sumExtremeSize;
+
+            $tail = IssueService::getLastDigit($sum); // 总和尾数
+            if ($tail === 0 || $tail === 9) {
+                $tailStr = '-';
+            } else {
+                $tailStr = '尾' . $tail;
+            }
+            $v['tail'] = $tailStr;
+
+            $records[$k] = $v;
+        }
+        $service = new LotteryImageService();
+        $url = $service->generate($records);
+
+        PcIssue::where('issue_no', $issue_no)->update(['image' => $url]);
+        return $url;
+
+    }
+
     private static function createIssueNo()
     {
         $issue = PcIssue::orderByDesc('id')->first();