277 lines
11 KiB
PHP
277 lines
11 KiB
PHP
<?php
|
|
|
|
|
|
namespace app\services\scan;
|
|
|
|
use app\models\process\NumberTab;
|
|
use freedom\utils\CardPosition;
|
|
use freedom\utils\CardPositionNn;
|
|
use freedom\utils\RedisUtil;
|
|
|
|
/**
|
|
* TODO NN扫描
|
|
* Class ScanNnService
|
|
* @package app\services\scan
|
|
*/
|
|
class ChangeNnService
|
|
{
|
|
/**
|
|
* TODO NN扫描处理
|
|
* @param array $event
|
|
* @param array $tableInfo
|
|
* @return array
|
|
*/
|
|
public static function doScanNnChange(array $event, array $tableInfo): array
|
|
{
|
|
$checkScanRes = ScanCommonService::checkScan($event,$tableInfo);
|
|
if ($checkScanRes['status'] == false){
|
|
return $checkScanRes;
|
|
}else{
|
|
$numberTabInfo = $checkScanRes['numberTabInfo'];
|
|
$cardInfo = $checkScanRes['cardInfo'];
|
|
}
|
|
// 判断牌是否符合规格
|
|
if (!isset($event['card']) || empty(intval($event['card']))) return ['status' => false, 'msg' => 'CardPosition Unable Distinguish'];
|
|
$card = intval($event['card']);
|
|
$round = [
|
|
'card' => $card,
|
|
'number' => CardPosition::interchangeCard($card),
|
|
'boot_id' => intval($numberTabInfo['boot_id']),
|
|
'boot_num' => intval($numberTabInfo['boot_num']),
|
|
'number_tab_id' => intval($numberTabInfo['id']),
|
|
'number_tab_number' => intval($numberTabInfo['number'])
|
|
];
|
|
if (!$cardInfo){
|
|
// 没有牌数据,创建并保存
|
|
$cardInfo = ['card_first' => $card];
|
|
$cardInfo['player_1_card_1'] = 0;
|
|
$cardInfo['player_1_card_2'] = 0;
|
|
$cardInfo['player_1_card_3'] = 0;
|
|
$cardInfo['player_1_card_4'] = 0;
|
|
$cardInfo['player_1_card_5'] = 0;
|
|
$cardInfo['player_2_card_1'] = 0;
|
|
$cardInfo['player_2_card_2'] = 0;
|
|
$cardInfo['player_2_card_3'] = 0;
|
|
$cardInfo['player_2_card_4'] = 0;
|
|
$cardInfo['player_2_card_5'] = 0;
|
|
$cardInfo['player_3_card_1'] = 0;
|
|
$cardInfo['player_3_card_2'] = 0;
|
|
$cardInfo['player_3_card_3'] = 0;
|
|
$cardInfo['player_3_card_4'] = 0;
|
|
$cardInfo['player_3_card_5'] = 0;
|
|
$cardInfo['banker_card_1'] = 0;
|
|
$cardInfo['banker_card_2'] = 0;
|
|
$cardInfo['banker_card_3'] = 0;
|
|
$cardInfo['banker_card_4'] = 0;
|
|
$cardInfo['banker_card_5'] = 0;
|
|
$positionFirst = CardPositionNn::nnPosition($card);
|
|
$cardInfo['position_first'] = $positionFirst;
|
|
NumberTab::where(['id' => $numberTabInfo['id']])->update(['position_first' => $positionFirst]);
|
|
RedisUtil::saveCard($numberTabInfo['id'],$cardInfo);
|
|
$round['tid'] = $tableInfo['id'];
|
|
$round['number_tab_id'] = $numberTabInfo['id'];
|
|
$round['position'] = 0;
|
|
$round['order_num'] = 0;
|
|
$round['result'] = '';
|
|
$round['card_info'] = $cardInfo;
|
|
if ($numberTabInfo['bet_status'] == 2) {
|
|
$round['is_scan'] = true;
|
|
} else {
|
|
$round['is_scan'] = false;
|
|
}
|
|
return ['status' => true, 'msg' => 'Scan Success', 'data' => $round];
|
|
}
|
|
// 判断是否已经存在过相同牌
|
|
$beforeCard = $cardInfo;
|
|
//unset($beforeCard['card_first']);
|
|
unset($beforeCard['position_first']);
|
|
if(in_array($card,$beforeCard)) return ['status' => false, 'msg' => 'Card Exists'];
|
|
$cardCountValues = array_count_values($beforeCard);
|
|
// 获取当前定位
|
|
if (isset($cardCountValues[0])){
|
|
$positionNum = 20 - intval($cardCountValues[0]) + 1;
|
|
} else {
|
|
$positionNum = 20;
|
|
}
|
|
$player1Card[0] = $cardInfo['player_1_card_1'];
|
|
$player1Card[1] = $cardInfo['player_1_card_2'];
|
|
$player1Card[2] = $cardInfo['player_1_card_3'];
|
|
$player1Card[3] = $cardInfo['player_1_card_4'];
|
|
$player2Card[0] = $cardInfo['player_2_card_1'];
|
|
$player2Card[1] = $cardInfo['player_2_card_2'];
|
|
$player2Card[2] = $cardInfo['player_2_card_3'];
|
|
$player2Card[3] = $cardInfo['player_2_card_4'];
|
|
$player3Card[0] = $cardInfo['player_3_card_1'];
|
|
$player3Card[1] = $cardInfo['player_3_card_2'];
|
|
$player3Card[2] = $cardInfo['player_3_card_3'];
|
|
$player3Card[3] = $cardInfo['player_3_card_4'];
|
|
$bankerCard[0] = $cardInfo['banker_card_1'];
|
|
$bankerCard[1] = $cardInfo['banker_card_2'];
|
|
$bankerCard[2] = $cardInfo['banker_card_3'];
|
|
$bankerCard[3] = $cardInfo['banker_card_4'];
|
|
$resultWord = '';
|
|
|
|
$order = CardPositionNn::nnOrder($cardInfo['position_first']);
|
|
$orderPosition = $positionNum - 1;
|
|
$position = $order[$orderPosition];
|
|
$orderNumArr = CardPositionNn::nnOrderNum($cardInfo['position_first']);
|
|
$orderNum = $orderNumArr[$orderPosition];
|
|
$cardInfo[$position] = $card;
|
|
if($positionNum >= 17 && $positionNum <= 20){
|
|
if($orderNum > 10 && $orderNum < 20){
|
|
$player1Card[4] = $card;
|
|
$player1Result = CardPositionNn::JudgeCowCow($player1Card);
|
|
$resultWord = $player1Result['word'];
|
|
}
|
|
if($orderNum > 20 && $orderNum < 30){
|
|
$player2Card[4] = $card;
|
|
$player2Result = CardPositionNn::JudgeCowCow($player2Card);
|
|
$resultWord = $player2Result['word'];
|
|
}
|
|
if($orderNum > 30 && $orderNum < 40){
|
|
$player3Card[4] = $card;
|
|
$player3Result = CardPositionNn::JudgeCowCow($player3Card);
|
|
$resultWord = $player3Result['word'];
|
|
}
|
|
if($orderNum > 40){
|
|
$bankerCard[4] = $card;
|
|
$bankerResult = CardPositionNn::JudgeCowCow($bankerCard);
|
|
$resultWord = $bankerResult['word'];
|
|
}
|
|
}
|
|
RedisUtil::saveCard($numberTabInfo['id'],$cardInfo);
|
|
$round['tid'] = $tableInfo['id'];
|
|
$round['number_tab_id'] = $numberTabInfo['id'];
|
|
$round['position'] = $positionNum;
|
|
$round['order_num'] = $orderNum;
|
|
$round['result'] = $resultWord;
|
|
$round['card_info'] = $cardInfo;
|
|
if ($numberTabInfo['bet_status'] == 2) {
|
|
$round['is_scan'] = true;
|
|
} else {
|
|
$round['is_scan'] = false;
|
|
}
|
|
return ['status' => true, 'msg' => 'Scan Success', 'data' => $round];
|
|
}
|
|
|
|
/**
|
|
* TODO NN识别处理
|
|
* @param array $event
|
|
* @param array $tableInfo
|
|
* @return array
|
|
*/
|
|
public static function doScanNnSbChange(array $event, array $tableInfo): array
|
|
{
|
|
$checkScanRes = ScanCommonService::checkScan($event,$tableInfo);
|
|
if ($checkScanRes['status'] == false){
|
|
return $checkScanRes;
|
|
}else{
|
|
$numberTabInfo = $checkScanRes['numberTabInfo'];
|
|
$cardInfo = $checkScanRes['cardInfo'];
|
|
}
|
|
// 判断牌是否符合规格
|
|
if (!isset($event['card']) || empty(intval($event['card']))) return ['status' => false, 'msg' => 'CardPosition Unable Distinguish'];
|
|
$card = intval($event['card']);
|
|
$round = [
|
|
'card' => $card,
|
|
'number' => CardPosition::interchangeCard($card),
|
|
'boot_id' => intval($numberTabInfo['boot_id']),
|
|
'boot_num' => intval($numberTabInfo['boot_num']),
|
|
'number_tab_id' => intval($numberTabInfo['id']),
|
|
'number_tab_number' => intval($numberTabInfo['number'])
|
|
];
|
|
|
|
// 判断是否已经存在过相同牌
|
|
$beforeCard = $cardInfo;
|
|
//unset($beforeCard['card_first']);
|
|
unset($beforeCard['position_first']);
|
|
if(in_array($card,$beforeCard)) return ['status' => false, 'msg' => 'Card Exists'];
|
|
$cardCountValues = array_count_values($beforeCard);
|
|
// 获取当前定位
|
|
|
|
$positionNum = $event['position_num'];
|
|
$orderNum = 0;
|
|
$resultWord = '';
|
|
/*
|
|
if (isset($cardCountValues[0])){
|
|
$positionNum = 20 - intval($cardCountValues[0]) + 1;
|
|
} else {
|
|
$positionNum = 20;
|
|
}
|
|
*/
|
|
if ($positionNum > 0) {
|
|
|
|
$player1Card[0] = $cardInfo['player_1_card_1'];
|
|
$player1Card[1] = $cardInfo['player_1_card_2'];
|
|
$player1Card[2] = $cardInfo['player_1_card_3'];
|
|
$player1Card[3] = $cardInfo['player_1_card_4'];
|
|
$player1Card[4] = $cardInfo['player_1_card_5'];
|
|
$player2Card[0] = $cardInfo['player_2_card_1'];
|
|
$player2Card[1] = $cardInfo['player_2_card_2'];
|
|
$player2Card[2] = $cardInfo['player_2_card_3'];
|
|
$player2Card[3] = $cardInfo['player_2_card_4'];
|
|
$player2Card[4] = $cardInfo['player_2_card_5'];
|
|
$player3Card[0] = $cardInfo['player_3_card_1'];
|
|
$player3Card[1] = $cardInfo['player_3_card_2'];
|
|
$player3Card[2] = $cardInfo['player_3_card_3'];
|
|
$player3Card[3] = $cardInfo['player_3_card_4'];
|
|
$player3Card[4] = $cardInfo['player_3_card_5'];
|
|
$bankerCard[0] = $cardInfo['banker_card_1'];
|
|
$bankerCard[1] = $cardInfo['banker_card_2'];
|
|
$bankerCard[2] = $cardInfo['banker_card_3'];
|
|
$bankerCard[3] = $cardInfo['banker_card_4'];
|
|
$bankerCard[4] = $cardInfo['banker_card_5'];
|
|
|
|
$order = CardPositionNn::nnOrderSb($cardInfo['position_first']);
|
|
$orderPosition = $positionNum - 1;
|
|
$position = $order[$orderPosition];
|
|
$orderNumArr = CardPositionNn::nnOrderNumSb($cardInfo['position_first']);
|
|
$orderNum = $orderNumArr[$orderPosition];
|
|
$cardInfo[$position] = $card;
|
|
|
|
$indexOfCardToBeChanged = $positionNum % 5 - 1;
|
|
if ($indexOfCardToBeChanged == -1) $indexOfCardToBeChanged = 4;
|
|
|
|
if($orderNum > 10 && $orderNum < 20){
|
|
$player1Card[$indexOfCardToBeChanged] = $card;
|
|
$player1Result = CardPositionNn::JudgeCowCow($player1Card);
|
|
$resultWord = $player1Result['word'];
|
|
}
|
|
if($orderNum > 20 && $orderNum < 30){
|
|
$player2Card[$indexOfCardToBeChanged] = $card;
|
|
$player2Result = CardPositionNn::JudgeCowCow($player2Card);
|
|
$resultWord = $player2Result['word'];
|
|
}
|
|
if($orderNum > 30 && $orderNum < 40){
|
|
$player3Card[$indexOfCardToBeChanged] = $card;
|
|
$player3Result = CardPositionNn::JudgeCowCow($player3Card);
|
|
$resultWord = $player3Result['word'];
|
|
}
|
|
if($orderNum > 40){
|
|
$bankerCard[$indexOfCardToBeChanged] = $card;
|
|
$bankerResult = CardPositionNn::JudgeCowCow($bankerCard);
|
|
$resultWord = $bankerResult['word'];
|
|
}
|
|
|
|
} else {
|
|
$positionFirst = CardPositionNn::nnPosition($card);
|
|
$cardInfo['card_first'] = $card;
|
|
$cardInfo['position_first'] = $positionFirst;
|
|
}
|
|
|
|
|
|
RedisUtil::saveCard($numberTabInfo['id'],$cardInfo);
|
|
$round['tid'] = $tableInfo['id'];
|
|
$round['number_tab_id'] = $numberTabInfo['id'];
|
|
$round['position'] = $positionNum;
|
|
$round['order_num'] = $orderNum;
|
|
$round['result'] = $resultWord;
|
|
$round['card_info'] = $cardInfo;
|
|
if ($numberTabInfo['bet_status'] == 2) {
|
|
$round['is_scan'] = true;
|
|
} else {
|
|
$round['is_scan'] = false;
|
|
}
|
|
return ['status' => true, 'msg' => 'Scan Success', 'data' => $round];
|
|
}
|
|
} |