|
|
@@ -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();
|