seven 2 өдөр өмнө
parent
commit
808aae8ff3

+ 26 - 1
app/Constants/GameplayRuleEnum.php

@@ -5,8 +5,33 @@ namespace App\Constants;
 // 玩法枚举
 class GameplayRuleEnum 
 {
+    const SINGLE = '单';
+    const DOUBLE = '双';
+    const BIG = '大';
+    const SMALL = '小';
+    const EXTREME_BIG = '极大';
+    const EXTREME_SMALL = '极小';
+    const BAO_ZI = '豹子';
+    const PAIRS = '对子';
+    const STRAIGHT = '顺子';
+    const ONE = '一段';
+    const TWO = '二段';
+    const THREE = '三段';
+    const FOUR = '四段';
+    // 包含本身体
+    const SUM_BIG = 14;   // 总和算大
+    const SUM_SMALL = 13; // 总和算小
+    const SUM_EXTREME_BIG = 22;   // 总和极大
+    const SUM_EXTREME_SMALL = 6; // 总和极小
+    const ONE_BIG = 5; // 尾数算大
+    const ONE_SMALL = 4; // 尾数算小
+    const SECTION_1 = [0,6];    // 一段范围
+    const SECTION_2 = [7,13];   // 二段范围
+    const SECTION_3 = [14,20];  // 三段范围
+    const SECTION_4 = [21,27];  // 四段范围
+
     public static $RULES = [
-        '组合' => [
+        '总和' => [
             '单',
             '双',
             '大',

+ 8 - 2
app/Http/Controllers/admin/Wallet.php

@@ -15,7 +15,7 @@ use Illuminate\Validation\ValidationException;
 use App\Models\Wallet as WalletModel;
 use App\Models\Withdraw;
 
-use App\Services\BetService;
+use App\Services\IssueService;
 
 class Wallet extends Controller
 {
@@ -248,7 +248,13 @@ class Wallet extends Controller
         // $result = TronHelper::getTransactionConfirmations('06407fa9a2ba51c88f1ed01c2296f0069bf305477d3847d41bc3f35cf9190f74');
         // var_dump($result);
         $memberId = '6325700519';
-        $result = BetService::bet($memberId,$input);
+        // $result = BetService::bet($memberId,$input);
+
+        $info = IssueService::findOne(['issue_no'=>'202508271120']);
+
+        $winning_numbers = explode(',',$info['winning_numbers']);
+
+        $result = IssueService::award($winning_numbers);
         var_dump($result);
         // RechargeService::handleRechargeConfirmation('45f313ccc3a2f4113f6cc9a7511e8b5096daa1de76cb57397e152a491c17249f');
         // WalletService::getUserWallet('1777');

+ 262 - 0
app/Services/IssueService.php

@@ -10,6 +10,10 @@ use Illuminate\Support\Collection;
 use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Facades\Log;
 
+use App\Services\GameplayRuleService;
+use App\Constants\GameplayRuleEnum;
+use App\Http\Controllers\admin\Game;
+
 /**
  * 投注
 */
@@ -85,5 +89,263 @@ class IssueService extends BaseService
         return ['total' => $paginator->total(), 'data' => $paginator->items()];
     }
 
+    /**
+     * @description: 获取中奖的奖项
+     * @param {*} $winning_numbers
+     * @return {*}
+     */    
+    public static function award($winning_numbers)
+    {
+        $result = [];
+       
+        // 组合
+        $sum = array_sum($winning_numbers);
+
+        $section = self::getSection($sum); // 总和段位
+        $result[] = $section;
+
+        $sumOddEven = self::calculateOddEven($sum); // 总和单双
+        $result[] = $sumOddEven;
+
+        $sumSize = self::calculateSumSize($sum);  // 总和大小
+        $result[] = $sumSize;
+        $sumExtremeSize = self::calculateSumExtremeSize($sum);  // 总和极值
+        if($sumExtremeSize){
+            $result[] = $sumExtremeSize;
+        }
+        $sumCao = $sum . '操';  // 总和数字
+        $result[] = $sumCao;
+        $sumCombo = $sumSize. $sumOddEven;  // 总和大小单双组合
+        $result[] = $sumCombo;
+
+        $sumBaoZi = self::isBaoZi($winning_numbers[0], $winning_numbers[1], $winning_numbers[2]); // 豹子
+        if($sumBaoZi){
+            $result[] = $sumBaoZi;
+        }
+        $sumPair = self::isPair($winning_numbers[0], $winning_numbers[1], $winning_numbers[2]); // 对子
+        if($sumPair){
+            $result[] = $sumPair;
+        }
+
+        $sumStraight = self::isStraight($winning_numbers[0], $winning_numbers[1], $winning_numbers[2]); // 顺子
+        if($sumStraight){
+            $result[] = $sumStraight;
+        }
+
+        $tail = self::getLastDigit($sum); // 总和尾数
+        $result[] = $tail . '尾'; // 尾数
+
+        $tailOddEven = self::calculateOddEven($tail); // 尾数单双
+        $result[] = '尾'.$tailOddEven;
+
+        $tailSize = self::calculateOneSize($tail); // 尾数大小
+        $result[] = '尾'.$tailSize;
+
+        $tailCombo = '尾'.$tailSize . $tailOddEven; // 尾数大小单双组合
+        $result[] = $tailCombo;
+
+        $numA = $winning_numbers[0];    // A球
+        $result[] = $numA.'A';
+
+        $numAOddEven = self::calculateOddEven($numA); // A球单双
+        $result[] = 'A'.$numAOddEven;
+
+        $numASize = self::calculateOneSize($numA); // A球大小
+        $result[] = 'A'.$numASize;
+
+
+        $numB = $winning_numbers[1];    // B球
+        $result[] = $numB.'B';
+
+        $numBOddEven = self::calculateOddEven($numB); // B球
+        $result[] = 'B'.$numBOddEven;
+        $numBSize = self::calculateOneSize($numB); // B球大小
+        $result[] = 'B'.$numBSize;
+        $numC = $winning_numbers[2];
+        $result[] = $numC.'C';
+        $numCOddEven = self::calculateOddEven($numC); // C球单双
+        $result[] = 'C'.$numCOddEven;
+        $numCSize = self::calculateOneSize($numC); // C球大小
+        $result[] = 'C'.$numCSize;
+
+
+        return $result;
+    }
+
+
+    /**
+     * @description: 算单双
+     * @param {*} $number
+     * @return {*}
+     */    
+    public static function calculateOddEven($number)
+    {
+        if ($number & 1) {
+            return GameplayRuleEnum::SINGLE;
+        } else {
+            return GameplayRuleEnum::DOUBLE;
+        }
+    }
+
+    /**
+     * @description: 总和大小
+     * @param {*} $number
+     * @return {*}
+     */    
+    public static function calculateSumSize($number)
+    {
+        if($number >= GameplayRuleEnum::SUM_BIG) {
+            return GameplayRuleEnum::BIG;
+        }
+
+        if($number <= GameplayRuleEnum::SUM_SMALL){
+            return GameplayRuleEnum::SMALL;
+        }
+    }
+
+    /**
+     * @description: 总和极值
+     * @param {*} $number
+     * @return {*}
+     */    
+    public static function calculateSumExtremeSize($number)
+    {
+        $result = '';
+        if($number >= GameplayRuleEnum::SUM_EXTREME_BIG) {
+            $result = GameplayRuleEnum::EXTREME_BIG;
+        }
+
+        if($number <= GameplayRuleEnum::SUM_EXTREME_SMALL){
+            $result = GameplayRuleEnum::EXTREME_SMALL;
+        }
+
+        return $result;
+    }
+
+    /**
+     * @description: 豹子
+     * @param {int} $a
+     * @param {int} $b
+     * @param {int} $c
+     * @return {*}
+     */    
+    public static function isBaoZi(int $a, int $b, int $c)
+    {
+        $result = '';
+        if($a === $b && $b === $c){
+            $result = GameplayRuleEnum::BAO_ZI;
+        }
+
+        return $result;
+    }
+
+    /**
+     * @description: 对子
+     * @param {int} $a
+     * @param {int} $b
+     * @param {int} $c
+     * @return {*}
+     */
+    public static function isPair($a, $b, $c) {
+        $result = '';
+        // 确保输入都是个位数
+        if (!is_numeric($a) || !is_numeric($b) || !is_numeric($c) ||
+            $a < 0 || $a > 9 || $b < 0 || $b > 9 || $c < 0 || $c > 9) {
+            return ''; // 或者抛出异常
+        }
+        
+        if(($a == $b && $a != $c) || 
+            ($a == $c && $a != $b) || 
+            ($b == $c && $b != $a)){
+            $result = GameplayRuleEnum::PAIRS;
+        }
+        // 判断是否为对子情况
+        return $result;
+    }
+
+    /**
+     * @description: 顺子
+     * @param {int} $a
+     * @param {int} $b
+     * @param {int} $c
+     * @return {*}
+     */
+    public static function isStraight($a, $b, $c) {
+        $result = '';
+        // 确保输入都是个位数(0-9)
+        if (!is_numeric($a) || !is_numeric($b) || !is_numeric($c) ||
+            $a < 0 || $a > 9 || $b < 0 || $b > 9 || $c < 0 || $c > 9) {
+            return '';
+        }
+    
+        // 去重(顺子必须三个不同数字)
+        if ($a == $b || $a == $c || $b == $c) {
+            return '';
+        }
+    
+        // 检查是否是完全升序或完全降序的连续数字
+        $numbers = [$a, $b, $c];
+        sort($numbers); // 排序后检查是否是 x, x+1, x+2
+        list($x, $y, $z) = $numbers;
     
+        // 情况1:升序连续(1,2,3)
+        $isAscending = ($x + 1 == $y) && ($y + 1 == $z);
+    
+        // 情况2:降序连续(3,2,1)
+        $isDescending = ($z + 1 == $y) && ($y + 1 == $x);
+        if($isAscending || $isDescending){
+            $result = GameplayRuleEnum::STRAIGHT;
+        }
+        return $result;
+    }
+    
+    /**
+     * 获取数字的尾数
+     * @param int $number 输入数字
+     * @return int 尾数
+     */
+    public static function getLastDigit($number) {
+        // 确保输入是整数
+        $number = (int)$number;
+        // 取绝对值,处理负数情况
+        $number = abs($number);
+        // 取模10得到尾数
+        return $number % 10;
+    }
+
+
+    /**
+     * @description: 尾大小
+     * @param {*} $number
+     * @return {*}
+     */    
+    public static function calculateOneSize($number)
+    {
+        if($number >= GameplayRuleEnum::ONE_BIG) {
+            return GameplayRuleEnum::BIG;
+        }
+
+        if($number <= GameplayRuleEnum::ONE_SMALL){
+            return GameplayRuleEnum::SMALL;
+        }
+    }
+
+    /**
+     * @description: 获取段位
+     * @param {*} $number
+     * @return {*}
+     */
+    public static function getSection($number) {
+        $result = '';
+        if ($number >= GameplayRuleEnum::SECTION_1[0] && $number <= GameplayRuleEnum::SECTION_1[1]) {
+            $result = GameplayRuleEnum::ONE;
+        } elseif ($number >= GameplayRuleEnum::SECTION_2[0] && $number <= GameplayRuleEnum::SECTION_2[1]) {
+            $result = GameplayRuleEnum::TWO;
+        } elseif ($number >= GameplayRuleEnum::SECTION_3[0] && $number <= GameplayRuleEnum::SECTION_3[1]) {
+            $result = GameplayRuleEnum::THREE;
+        } elseif ($number >= GameplayRuleEnum::SECTION_4[0] && $number <= GameplayRuleEnum::SECTION_4[1]) {
+            $result = GameplayRuleEnum::FOUR;
+        }
+        return $result; // 不在任何段中
+    }
 }