|
@@ -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; // 不在任何段中
|
|
|
+ }
|
|
|
}
|