123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351 |
- <?php
- namespace App\Services;
- use App\Services\BaseService;
- use App\Models\Issue;
- use Illuminate\Support\Facades\DB;
- 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;
- /**
- * 投注
- */
- class IssueService extends BaseService
- {
- /**
- * @description: 模型
- * @return {string}
- */
- public static function model() :string
- {
- return Issue::class;
- }
- /**
- * @description: 枚举
- * @return {*}
- */
- public static function enum() :string
- {
- return '';
- }
- /**
- * @description: 获取查询条件
- * @param {array} $search 查询内容
- * @return {array}
- */
- public static function getWhere(array $search = []) :array
- {
- $where = [];
- if(isset($search['issue_no']) && !empty($search['issue_no'])){
- $where[] = ['issue_no', '=', $search['issue_no']];
- }
- if(isset($search['id']) && !empty($search['id'])){
- $where[] = ['id', '=', $search['id']];
- }
- if(isset($search['status']) && !empty($search['status'])){
- $where[] = ['status', '=', $search['status']];
- }
- return $where;
- }
- /**
- * @description: 查询单条数据
- * @param array $search
- * @return \App\Models\Coin|null
- */
- public static function findOne(array $search): ?Issue
- {
- return self::model()::where(self::getWhere($search))->first();
- }
- /**
- * @description: 查询所有数据
- * @param array $search
- * @return \Illuminate\Database\Eloquent\Collection
- */
- public static function findAll(array $search = [])
- {
- return self::model()::where(self::getWhere($search))->get();
- }
- /**
- * @description: 分页查询
- * @param array $search
- * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator
- */
- public static function paginate(array $search = [])
- {
- $limit = isset($search['limit'])?$search['limit']:15;
- $paginator = self::model()::where(self::getWhere($search))->paginate($limit);
- 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; // 不在任何段中
- }
- }
|