seven 4 dni temu
rodzic
commit
200a6b31f4

+ 4 - 0
README.md

@@ -146,6 +146,10 @@ MAIL_EXP=600  # 邮件验证码有效期(秒)
 - 修改.env配置 使用数据库做队列
     QUEUE_CONNECTION=database
 
+## 六、安装wkhtmltopdf网页图片
+- apt install wkhtmltopdf
+- yum install wkhtmltopdf
+
     
 
 

+ 41 - 6
app/Http/Controllers/admin/Lottery.php

@@ -5,17 +5,52 @@ namespace App\Http\Controllers\admin;
 use App\Services\LotteryImageService;
 use Illuminate\Http\Request;
 use App\Http\Controllers\Controller;
+use App\Services\IssueService;
 
 class Lottery extends Controller
 {
     public function generate(Request $request, LotteryImageService $service)
     {
-        // 这里可以从接口传入数据,也可以先写死测试
-        $records = $request->input('records', [
-            ['period' => '3350007', 'numbers' => [5, 2, 0], 'sum' => 7, 'combo' => '小 单', 'extreme' => '-', 'tail' => '尾7'],
-            ['period' => '3350006', 'numbers' => [8, 9, 3], 'sum' => 20, 'combo' => '大 双', 'extreme' => '-', 'tail' => '尾0'],
-            ['period' => '3350005', 'numbers' => [2, 6, 1], 'sum' => 9, 'combo' => '小 单', 'extreme' => '-', 'tail' => '尾9'],
-        ]);
+
+        $list = IssueService::model()::where(IssueService::getWhere(['status' => IssueService::model()::STATUS_DRAW]))->take(20)->orderBy('issue_no','desc')->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){
+                $tailStr = '-';
+            }else{
+                $tailStr = '尾' . $tail;
+            }
+            $v['tail'] = $tailStr;
+
+            $records[$k] = $v;
+        }
+        
+        // // 这里可以从接口传入数据,也可以先写死测试
+        // $records = $request->input('records', [
+        //     ['period' => '3350007', 'numbers' => [5, 2, 0], 'sum' => 7, 'combo' => '小 单', 'extreme' => '-', 'tail' => '尾7'],
+        //     ['period' => '3350006', 'numbers' => [8, 9, 3], 'sum' => 20, 'combo' => '大 双', 'extreme' => '-', 'tail' => '尾0'],
+        //     ['period' => '3350005', 'numbers' => [2, 6, 1], 'sum' => 9, 'combo' => '小 单', 'extreme' => '-', 'tail' => '尾9'],
+        // ]);
 
         try {
             $url = $service->generate($records);

+ 103 - 57
app/Services/IssueService.php

@@ -13,7 +13,9 @@ use Illuminate\Support\Facades\Log;
 
 use App\Services\GameplayRuleService;
 use App\Constants\GameplayRuleEnum;
+use App\Http\Controllers\admin\Lottery;
 use App\Services\KeyboardService;
+use App\Services\LotteryImageService;
 use Telegram\Bot\FileUpload\InputFile;
 
 /**
@@ -232,6 +234,7 @@ class IssueService extends BaseService
         $awards = self::award(explode(',',$winning_numbers));
         DB::beginTransaction();
         try {
+            self::lotteryImage($info->issue_no);
             $info->status = self::model()::STATUS_DRAW;
             $info->winning_numbers = $winning_numbers;
             $info->combo = $combo;
@@ -548,79 +551,79 @@ class IssueService extends BaseService
      */    
     public static function currentLotteryResults($memberId)
     {
-        $result = self::model()::where('status', self::model()::STATUS_DRAW)->orderBy('id','desc')->take(16)->get();
-        $text = "📅 近期开奖记录\n";
-        $text .= "====================\n";
-        if($result){
-            foreach($result as $k => $v){
+        // $result = self::model()::where('status', self::model()::STATUS_DRAW)->orderBy('id','desc')->take(16)->get();
+        // $text = "📅 近期开奖记录\n";
+        // $text .= "====================\n";
+        // if($result){
+        //     foreach($result as $k => $v){
 
 
-                $winArr = explode(',',$v->winning_numbers);
+        //         $winArr = explode(',',$v->winning_numbers);
 
-                // 组合
-                $sum = array_sum($winArr);
+        //         // 组合
+        //         $sum = array_sum($winArr);
 
-                $combo = [];
+        //         $combo = [];
 
-                $sumOddEven = self::calculateOddEven($sum); // 总和单双
+        //         $sumOddEven = self::calculateOddEven($sum); // 总和单双
 
-                $sumSize = self::calculateSumSize($sum);  // 总和大小
+        //         $sumSize = self::calculateSumSize($sum);  // 总和大小
 
-                $sumExtremeSize = self::calculateSumExtremeSize($sum);  // 总和极值
-                if(empty($sumExtremeSize)){
-                    $sumExtremeSize = "-";
-                }
+        //         $sumExtremeSize = self::calculateSumExtremeSize($sum);  // 总和极值
+        //         if(empty($sumExtremeSize)){
+        //             $sumExtremeSize = "-";
+        //         }
              
 
-                $tail = self::getLastDigit($sum); // 总和尾数
-                if($tail == 0){
-                    $tail = '-'; // 尾数
-                }else{
-                    $tail = '尾'.$tail; // 尾数
-                }
+        //         $tail = self::getLastDigit($sum); // 总和尾数
+        //         if($tail == 0){
+        //             $tail = '-'; // 尾数
+        //         }else{
+        //             $tail = '尾'.$tail; // 尾数
+        //         }
                 
 
 
-                $text .= "回合:{$v->issue_no}期 \n";
-                $text .= "结果:".implode('+',explode(',',$v->winning_numbers))."=".array_sum(explode(',',$v->winning_numbers))." \n";
-                $text .= "组合:{$sumSize} {$sumOddEven} \n";
-                $text .= "极值:{$sumExtremeSize} \n";
-                $text .= "尾数:{$tail} \n";
-                $text .= "---------------------------\n";
-            }
-            self::telegram()->sendMessage([
-                    'chat_id' => $memberId,
-                    'text' => $text,
-                ]);
-        }else{
-            self::telegram()->sendMessage([
-                    'chat_id' => $memberId,
-                    'text' => "暂无开奖记录",
-                ]);
-        }
-        // $result = self::model()::where('status', self::model()::STATUS_DRAW)->orderBy('id','desc')->first();
-        // if($result){
-        //     if($result->image){
-        //         self::telegram()->sendPhoto([
+        //         $text .= "回合:{$v->issue_no}期 \n";
+        //         $text .= "结果:".implode('+',explode(',',$v->winning_numbers))."=".array_sum(explode(',',$v->winning_numbers))." \n";
+        //         $text .= "组合:{$sumSize} {$sumOddEven} \n";
+        //         $text .= "极值:{$sumExtremeSize} \n";
+        //         $text .= "尾数:{$tail} \n";
+        //         $text .= "---------------------------\n";
+        //     }
+        //     self::telegram()->sendMessage([
         //             'chat_id' => $memberId,
-        //             'photo' => InputFile::create(url($result->image)),
+        //             'text' => $text,
         //         ]);
-        //     }else{
-        //         // if($result->combo){
-        //         //     self::telegram()->sendMessage([
-        //         //         'chat_id' => $memberId,
-        //         //         'text' => "",
-        //         //     ]);
-        //         // }else{
-        //             self::telegram()->sendMessage([
-        //                 'chat_id' => $memberId,
-        //                 'text' => "暂无开奖记录",
-        //             ]);
-        //         // }
+        // }else{
+        //     self::telegram()->sendMessage([
+        //             'chat_id' => $memberId,
+        //             'text' => "暂无开奖记录",
+        //         ]);
+        // }
+        $result = self::model()::where('status', self::model()::STATUS_DRAW)->orderBy('id','desc')->first();
+        if($result){
+            if($result->image){
+                self::telegram()->sendPhoto([
+                    'chat_id' => $memberId,
+                    'photo' => InputFile::create(url($result->image)),
+                ]);
+            }else{
+                // if($result->combo){
+                //     self::telegram()->sendMessage([
+                //         'chat_id' => $memberId,
+                //         'text' => "",
+                //     ]);
+                // }else{
+                    self::telegram()->sendMessage([
+                        'chat_id' => $memberId,
+                        'text' => "暂无开奖记录",
+                    ]);
+                // }
                 
-        //     }
+            }
             
-        // }
+        }
     }
 
     // 获取最新的开奖数据
@@ -739,4 +742,47 @@ class IssueService extends BaseService
             }
         }
     }
+
+    // 生成开奖图片
+    public static function lotteryImage($issue_no)
+    {
+        $list = self::model()::where('issue_no','<',$issue_no)->where(self::getWhere(['status' => self::model()::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 = self::calculateOddEven($sum); // 总和单双
+
+            $sumSize = self::calculateSumSize($sum);  // 总和大小
+            $v['combo'] = $sumSize . ' ' . $sumOddEven;
+
+            $sumExtremeSize = self::calculateSumExtremeSize($sum);  // 总和极值
+            if(!$sumExtremeSize){
+                $sumExtremeSize = '-';
+            }
+            $v['extreme'] = $sumExtremeSize;
+
+            $tail = self::getLastDigit($sum); // 总和尾数
+            if($tail === 0){
+                $tailStr = '-';
+            }else{
+                $tailStr = '尾' . $tail;
+            }
+            $v['tail'] = $tailStr;
+
+            $records[$k] = $v;
+        }
+        $service = new LotteryImageService();
+        $url = $service->generate($records);
+
+        self::model()::where('issue_no', $issue_no)->update(['image' => $url]);
+        return $url;
+
+    }
 }

+ 15 - 12
app/Services/LotteryImageService.php

@@ -49,27 +49,28 @@ class LotteryImageService
     /**
      * 生成HTML内容
      */
-    protected function buildHtml(array $records): string
+    protected function buildHtml($records): string
     {
+       
         $rows = '';
         foreach ($records as $row) {
             $rows .= '<tr>';
-            $rows .= '<td>' . htmlspecialchars($row['period']) . '</td>';
+            $rows .= '<td>' . htmlspecialchars($row['issue_no']) . '期</td>';
             $rows .= '<td>';
-            foreach ($row['numbers'] as $i => $num) {
+            foreach ($row['winning_numbers'] as $i => $num) {
                 $color = match ($i) {
                     0 => '#FF8A8A',
                     1 => '#8AB8FF',
-                    2 => '#FFE699',
+                    2 => '#FFDF80',
                     default => '#000',
                 };
                 $rows .= "<span style='color: {$color};'>{$num}</span>";
-                if ($i < count($row['numbers']) - 1) $rows .= ' + ';
+                if ($i < count($row['winning_numbers']) - 1) $rows .= ' + ';
             }
-            $rows .= ' = ' . $row['sum'] . '</td>';
+            $rows .= ' = ' . array_sum($row['winning_numbers']) . '</td>';
             $rows .= '<td>' . $row['combo'] . '</td>';
-            $rows .= '<td>' . $row['extreme'] . '</td>';
-            $rows .= '<td>' . $row['tail'] . '</td>';
+            $rows .= '<td>'.$row['extreme'].'</td>';
+            $rows .= '<td>'.$row['tail'].'</td>';
             $rows .= '</tr>';
         }
 
@@ -84,9 +85,10 @@ class LotteryImageService
 <style>
 body {
     font-family: "Microsoft YaHei", Arial, sans-serif;
-    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+    /* background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); */
+    /* background:  #667eea 0%; */
     margin: 0;
-    padding: 20px;
+    padding: 5px;
     min-height: 100vh;
 }
 .container {
@@ -98,7 +100,8 @@ body {
     overflow: hidden;
 }
 .header {
-    background: linear-gradient(45deg, #e74c3c, #c0392b);
+    /* background: linear-gradient(45deg, #e74c3c, #c0392b); */
+    background:  #e74c3c;
     color: white;
     padding: 20px;
     text-align: center;
@@ -136,7 +139,7 @@ body {
 <body>
 <div class="container">
     <div class="header">
-        <h1>🎯 加拿大28开奖记录</h1>
+        <h1>加拿大28开奖记录</h1>
         <div class="subtitle">最近开奖记录</div>
     </div>
     <table class="results-table">