ZqRule.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2019/4/25
  6. * Time: 14:10
  7. */
  8. namespace App\Lib\Settlement\Adapter;
  9. class ZqRule
  10. {
  11. /**
  12. * 全场|[主、客]|让球
  13. * @param mixed $model 注单表数据
  14. * @param mixed $resultModel 结果表数据
  15. * @param mixed $resultRecords 结果记录表数据
  16. * @param mixed $type 1:代表主队让球 2:代表客队让球
  17. * @param mixed $size 1:大 -1:小(如果是让球大小玩法才传入该字段)
  18. * @return string 1:赢 -1:输 2:平 3:赢半平半 4:输半平半
  19. */
  20. public function concedeFull($model, $resultModel, $resultRecords, $type, $size = ''){
  21. // 主队得分
  22. $homeScore = intval($resultModel -> home_score);
  23. // 客队得分
  24. $guestScore = intval($resultModel -> guest_score);
  25. $difference = 0;
  26. // 分差 - 主 :客
  27. if ($type == 1) {
  28. $difference = $homeScore - $guestScore;
  29. } else {
  30. // 分差 - 客 :主
  31. $difference = $guestScore - $homeScore;
  32. }
  33. // 让球个数
  34. $condition = explode("/", $model -> condition);
  35. $resultArr = [];
  36. // 循环对比让球后输赢
  37. foreach ($condition as $value) {
  38. $absValue = abs($value);
  39. if (substr($model -> condition, 0, 1) == '-') {
  40. $resultScore = $difference - $absValue;
  41. } else {
  42. $resultScore = $difference + $absValue;
  43. }
  44. if ($resultScore > 0) {
  45. $resultArr[] = 1;
  46. } elseif ($resultScore < 0) {
  47. $resultArr[] = -1;
  48. } else {
  49. $resultArr[] = 2;
  50. }
  51. }
  52. // 去重
  53. $resultUniqueArr = array_unique($resultArr);
  54. // 循环对比让球后输赢
  55. $count = count($resultUniqueArr);
  56. if ($size == -1) {
  57. if ($count == 1) {
  58. if ($resultUniqueArr[0] == 1) {
  59. return -1;
  60. } elseif ($resultUniqueArr[0] == 2) {
  61. return 2;
  62. } else {
  63. return 1;
  64. }
  65. } elseif (in_array(1, $resultUniqueArr)) {
  66. return 4;
  67. } else {
  68. return 3;
  69. }
  70. } else {
  71. if ($count == 1) {
  72. return $resultUniqueArr[0];
  73. } elseif (in_array(1, $resultUniqueArr)) {
  74. return 3;
  75. } else {
  76. return 4;
  77. }
  78. }
  79. }
  80. /**
  81. * 半场|[主、客]|让球
  82. * @param mixed $model 注单表数据
  83. * @param mixed $resultModel 结果表数据
  84. * @param mixed $resultRecords 结果记录表数据
  85. * @param mixed $whoType 1:代表主队让球 2:代表客队让球
  86. * @param mixed $halfType 1:上半场 2:下半场
  87. * @param mixed $size 1:大 -1:小(如果是让球大小玩法才传入该字段)
  88. * @return string 1:赢 -1:输 2:平 3:赢半平半 4:输半平半
  89. */
  90. public function concedeHalf($model, $resultModel, $resultRecords, $whoType, $halfType, $size = ''){
  91. $half = [1 => '上半场', 2 => '下半场'];
  92. // 倒叙
  93. $newResultRecords = array_reverse($resultRecords);
  94. // 查询最后的上半场的key值
  95. $upResultKey = array_search($half[1], array_column($newResultRecords, 'match_process'));
  96. $homeScore = 0;
  97. $guestScore = 0;
  98. if ($halfType == 1) {
  99. // 主队得分
  100. $homeScore = intval($newResultRecords[$upResultKey] -> home_score);
  101. // 客队得分
  102. $guestScore = intval($newResultRecords[$upResultKey] -> guest_score);
  103. } else {
  104. // 查询最后的下半场的key值
  105. $downResultKey = array_search($half[2], array_column($newResultRecords, 'match_process'));
  106. // 下半场主队得分
  107. $homeScore = intval($newResultRecords[$downResultKey] -> home_score) - intval($newResultRecords[$upResultKey] -> home_score);
  108. // 下半场客队得分
  109. $guestScore = intval($newResultRecords[$downResultKey] -> guest_score) - intval($newResultRecords[$upResultKey] -> guest_score);
  110. }
  111. $difference = 0;
  112. // 分差 - 主 :客
  113. if ($whoType == 1) {
  114. $difference = $homeScore - $guestScore;
  115. } else {
  116. // 分差 - 客 :主
  117. $difference = $guestScore - $homeScore;
  118. }
  119. // 让球个数
  120. $condition = explode("/", $model -> condition);
  121. $resultArr = [];
  122. // 循环对比让球后输赢
  123. foreach ($condition as $value) {
  124. $absValue = abs($value);
  125. if (substr($model -> condition, 0, 1) == '-') {
  126. $resultScore = $difference - $absValue;
  127. } else {
  128. $resultScore = $difference + $absValue;
  129. }
  130. if ($resultScore > 0) {
  131. $resultArr[] = 1;
  132. } elseif ($resultScore < 0) {
  133. $resultArr[] = -1;
  134. } else {
  135. $resultArr[] = 2;
  136. }
  137. }
  138. // 去重
  139. $resultUniqueArr = array_unique($resultArr);
  140. // 循环对比让球后输赢
  141. $count = count($resultUniqueArr);
  142. // 如果猜的是让球大小且猜的是小则运行
  143. if ($size == -1) {
  144. if ($count == 1) {
  145. if ($resultUniqueArr[0] == 1) {
  146. return -1;
  147. } elseif ($resultUniqueArr[0] == 2) {
  148. return 2;
  149. } else {
  150. return 1;
  151. }
  152. } elseif (in_array(1, $resultUniqueArr)) {
  153. return 4;
  154. } else {
  155. return 3;
  156. }
  157. } else {
  158. if ($count == 1) {
  159. return $resultUniqueArr[0];
  160. } elseif (in_array(1, $resultUniqueArr)) {
  161. return 3;
  162. } else {
  163. return 4;
  164. }
  165. }
  166. }
  167. /**
  168. * 总进球全场|[主、客、全]|大小
  169. * @param mixed $model 注单表数据
  170. * @param mixed $resultModel 结果表数据
  171. * @param mixed $resultRecords 结果记录表数据
  172. * @param mixed $type 1:主队 2:客队 0:全部进球 (目前只传 0)
  173. * @param mixed $size 1:大 -1:小
  174. * @return string 1:赢 -1:输 2:平 3:赢半平半 4:输半平半
  175. */
  176. public function sizeFull($model, $resultModel, $resultRecords, $type, $size){
  177. // 总进球数
  178. $allGoal = intval($resultModel -> home_score) + intval($resultModel -> guest_score);
  179. // 主队进球数
  180. $homeGoal = intval($resultModel -> home_score);
  181. // 客队进球数
  182. $guestGoal = intval($resultModel -> guest_score);
  183. // 条件
  184. $condition = explode("/", $model -> condition);
  185. $resultArr = [];
  186. // 循环对比输赢
  187. foreach ($condition as $value) {
  188. $absValue = abs($value);
  189. if ($type == 1) {
  190. $resultScore = $homeGoal - $absValue;
  191. } elseif ($type == 2) {
  192. $resultScore = $guestGoal - $absValue;
  193. } else {
  194. $resultScore = $allGoal - $absValue;
  195. }
  196. if ($resultScore > 0) {
  197. $resultArr[] = 1;
  198. } elseif ($resultScore < 0) {
  199. $resultArr[] = -1;
  200. } else {
  201. $resultArr[] = 0;
  202. }
  203. }
  204. // 去重
  205. $resultUniqueArr = array_unique($resultArr);
  206. // 循环对比让球后输赢
  207. $count = count($resultUniqueArr);
  208. if ($count == 1) {
  209. // 如果猜中
  210. if ($resultUniqueArr[0] == $size) {
  211. return 1;
  212. } elseif ($resultUniqueArr[0] == 0) {
  213. // 如果平
  214. return 2;
  215. } else {
  216. // 如果猜错
  217. return -1;
  218. }
  219. } elseif (in_array($size, $resultUniqueArr)) {
  220. return 3;
  221. } else {
  222. return 4;
  223. }
  224. }
  225. /**
  226. * 半场|[主、客、全]|大小
  227. * @param mixed $model 注单表数据
  228. * @param mixed $resultModel 结果表数据
  229. * @param mixed $resultRecords 结果记录表数据
  230. * @param mixed $type 1:主队 2:客队 0:全部进球 (目前只传 0)
  231. * @param mixed $size 1:大 -1:小
  232. * @param mixed $halfType 1:上半场 2:下半场
  233. * @return string 1:赢 -1:输 2:平 3:赢半平半 4:输半平半
  234. */
  235. public function sizeHalf($model, $resultModel, $resultRecords, $type, $size, $halfType){
  236. $half = [1 => '上半场', 2 => '下半场'];
  237. // 倒叙
  238. $newResultRecords = array_reverse($resultRecords);
  239. // 查询最后的上半场的key值
  240. $upResultKey = array_search($half[1], array_column($newResultRecords, 'match_process'));
  241. if ($halfType == 1) {
  242. // 上半场总进球数
  243. $allGoal = intval($newResultRecords[$upResultKey] -> home_score) + intval($newResultRecords[$upResultKey] -> guest_score);
  244. // 上半场主队进球数
  245. $homeGoal = intval($newResultRecords[$upResultKey] -> home_score);
  246. // 上半场客队进球数
  247. $guestGoal = intval($newResultRecords[$upResultKey] -> guest_score);
  248. } else {
  249. // 查询最后的下半场的key值
  250. $downResultKey = array_search($half[2], array_column($newResultRecords, 'match_process'));
  251. // 下半场总进球数
  252. $allGoal = intval($newResultRecords[$downResultKey] -> home_score) + intval($newResultRecords[$downResultKey] -> guest_score) -
  253. intval($newResultRecords[$upResultKey] -> home_score) + intval($newResultRecords[$upResultKey] -> guest_score);
  254. // 下半场主队进球数
  255. $homeGoal = intval($newResultRecords[$downResultKey] -> home_score) - intval($newResultRecords[$upResultKey] -> home_score);
  256. // 下半场客队进球数
  257. $guestGoal = intval($newResultRecords[$downResultKey] -> guest_score) - intval($newResultRecords[$upResultKey] -> guest_score);
  258. }
  259. // 条件
  260. $condition = explode("/", $model -> condition);
  261. $resultArr = [];
  262. // 循环对比输赢
  263. foreach ($condition as $value) {
  264. $absValue = abs($value);
  265. if ($type == 1) {
  266. $resultScore = $homeGoal - $absValue;
  267. } elseif ($type == 2) {
  268. $resultScore = $guestGoal - $absValue;
  269. } else {
  270. $resultScore = $allGoal - $absValue;
  271. }
  272. if ($resultScore > 0) {
  273. $resultArr[] = 1;
  274. } elseif ($resultScore < 0) {
  275. $resultArr[] = -1;
  276. } else {
  277. $resultArr[] = 0;
  278. }
  279. }
  280. // 去重
  281. $resultUniqueArr = array_unique($resultArr);
  282. // 循环对比让球后输赢
  283. $count = count($resultUniqueArr);
  284. if ($count == 1) {
  285. // 如果猜中
  286. if ($resultUniqueArr[0] == $size) {
  287. return 1;
  288. } elseif ($resultUniqueArr[0] == 0) {
  289. // 如果平
  290. return 2;
  291. } else {
  292. // 如果猜错
  293. return -1;
  294. }
  295. } elseif (in_array($size, $resultUniqueArr)) {
  296. return 3;
  297. } else {
  298. return 4;
  299. }
  300. }
  301. /**
  302. * 全场|[主、客、平]|独赢
  303. * @param mixed $model 注单表数据
  304. * @param mixed $resultModel 结果表数据
  305. * @param mixed $resultRecords 结果记录表数据
  306. * @param mixed $type 1:主队 2:客队 0:平
  307. * @return string 1:赢 -1:输
  308. */
  309. public function winFull($model, $resultModel, $resultRecords, $type){
  310. // 主队得分
  311. $homeScore = intval($resultModel -> home_score);
  312. // 客队得分
  313. $guestScore = intval($resultModel -> guest_score);
  314. $difference = $homeScore - $guestScore;
  315. if ($difference > 0 && $type == 1) {
  316. return 1;
  317. } elseif ($difference < 0 && $type == 2) {
  318. return 1;
  319. } elseif ($difference == 0 && $type == 0) {
  320. return 1;
  321. } else {
  322. return -1;
  323. }
  324. }
  325. /**
  326. * 半场|[主、客、平]|独赢
  327. * @param mixed $model 注单表数据
  328. * @param mixed $resultModel 结果表数据
  329. * @param mixed $resultRecords 结果记录表数据
  330. * @param mixed $type 1:主队 2:客队 0:平
  331. * @param mixed $halfType 1:上半场 2:下半场
  332. * @return string 1:赢 -1:输
  333. */
  334. public function winHalf($model, $resultModel, $resultRecords, $type, $halfType){
  335. $half = [1 => '上半场', 2 => '下半场'];
  336. // 倒叙
  337. $newResultRecords = array_reverse($resultRecords);
  338. // 查询最后的上半场的key值
  339. $upResultKey = array_search($half[1], array_column($newResultRecords, 'match_process'));
  340. $homeScore = 0;
  341. $guestScore = 0;
  342. if ($halfType == 1) {
  343. // 主队得分
  344. $homeScore = intval($newResultRecords[$upResultKey] -> home_score);
  345. // 客队得分
  346. $guestScore = intval($newResultRecords[$upResultKey] -> guest_score);
  347. } else {
  348. // 查询最后的下半场的key值
  349. $downResultKey = array_search($half[2], array_column($newResultRecords, 'match_process'));
  350. // 下半场主队得分
  351. $homeScore = intval($newResultRecords[$downResultKey] -> home_score) - intval($newResultRecords[$upResultKey] -> home_score);
  352. // 下半场客队得分
  353. $guestScore = intval($newResultRecords[$downResultKey] -> guest_score) - intval($newResultRecords[$upResultKey] -> guest_score);
  354. }
  355. $difference = $homeScore - $guestScore;
  356. if ($difference > 0 && $type == 1) {
  357. return 1;
  358. } elseif ($difference < 0 && $type == 2) {
  359. return 1;
  360. } elseif ($difference == 0 && $type == 0) {
  361. return 1;
  362. } else {
  363. return -1;
  364. }
  365. }
  366. // first_last_ball最先/最后进球 开始-----------------------
  367. //主队|最先进球
  368. public function first_ball_home($model,$resultModel,$resultRecords){
  369. if ($resultModel->all_goal >0){
  370. if ($resultModel->first_score === $resultModel->home_team){
  371. return 1;
  372. }else{
  373. return -1 ;
  374. }
  375. }
  376. return 2 ;
  377. }
  378. //客队|最先进球
  379. public function first_ball_guest($model,$resultModel,$resultRecords){
  380. if ($resultModel->all_goal >0){
  381. if ($resultModel->first_score === $resultModel->guest_team){
  382. return 1;
  383. }else{
  384. return -1 ;
  385. }
  386. }
  387. return 2 ;
  388. }
  389. //主队|最后进球
  390. public function last_ball_home($model,$resultModel,$resultRecords){
  391. if ($resultModel->all_goal >0){
  392. if ($resultModel->last_score === $resultModel->home_team){
  393. return 1;
  394. }else{
  395. return -1 ;
  396. }
  397. }
  398. return 2 ;
  399. }
  400. //客队|最后进球
  401. public function last_ball_guest($model,$resultModel,$resultRecords){
  402. if ($resultModel->all_goal >0){
  403. if ($resultModel->last_score === $resultModel->guest_team){
  404. return 1;
  405. }else{
  406. return -1 ;
  407. }
  408. }
  409. return 2 ;
  410. }
  411. //没有进球
  412. public function not_ball($model,$resultModel,$resultRecords){
  413. if ($resultModel->all_goal <=0){
  414. return 1 ;
  415. }else{
  416. return -1 ;
  417. }
  418. }
  419. ////////// first_last_ball最先/最后进球 结束-----------------------
  420. /**
  421. * 足球波胆 规则
  422. * @param $bet_match 投注赛事数据
  423. * @param $result_match 最终结果
  424. * @param $result_match_r 结果记录
  425. */
  426. public function bodanRule($bet_match,$result_match,$result_match_r){
  427. // $bet_match = DB::table('money_buy_match')->where('match_id', 3144414)->first();
  428. // $result_match = DB::table('st_zq_result')->where('match_id', 3144414)->first();
  429. // $result_match_r = DB::table('st_zq_result_record')->where('match_id', 3144414)->get()->toArray();
  430. //获取父/子级赔率代码
  431. $p_code = $bet_match->p_code;
  432. $odds_code = $bet_match->odds_code;
  433. //获取主客队投注比分
  434. $bet_score = explode('-', $bet_match->condition);
  435. $bet_home_score = (int)$bet_score[0];
  436. $bet_guest_score = (int)$bet_score[1];
  437. if($p_code == 'bodan'){
  438. if(strstr($odds_code,"half")){//上半场
  439. $half_data = [];
  440. foreach ($result_match_r as $k=>$v){
  441. //取出上半场数据
  442. if($v->match_process == '上半场'){
  443. $half_data[] = $v;
  444. }
  445. }
  446. //根据id倒序排列
  447. $half_data_sorc = array_column($half_data,'id');
  448. array_multisort($half_data_sorc,SORT_DESC,$half_data);
  449. //获取id最大的一条数据
  450. foreach ($half_data as $k=>$v){
  451. if($v->id == $half_data_sorc[0]){
  452. $last_half_data = $v;
  453. }
  454. }
  455. //获取主客队上半场得分
  456. $home_score = $last_half_data->home_score;
  457. $guest_score = $last_half_data->guest_score;
  458. }else{//全场
  459. //获取主客队全场得分
  460. $home_score = $result_match->home_score;
  461. $guest_score = $result_match->guest_score;
  462. }
  463. //判断结果
  464. if($bet_home_score == $home_score and $bet_guest_score == $guest_score)
  465. {
  466. $result = 1;//赢
  467. }else{
  468. $result = -1;//输
  469. }
  470. }
  471. return $result;
  472. }
  473. //结果单/双 home_score 主队进球数 guest_score 客队进球数 home_rate 主队让球 guest_rate 客队让球
  474. public function Singledouble($model,$resultModel,$resultRecords){
  475. $resulttod = intval($resultModel->home_score) + intval($resultModel->guest_score) + intval($resultModel->guest_rate) + intval($resultModel->home_rate);
  476. if($resulttod%2==0){
  477. $data = 2;
  478. }else{
  479. $data = 2;
  480. }
  481. if($data = intval($model->condition)){
  482. return 1;
  483. }else{
  484. return -1;
  485. }
  486. }
  487. //结果总数 home_score 主队进球数 guest_score 客队进球数 home_rate 主队让球 guest_rate 客队让球 u_home_score 上半场-主队进球数 u_guest_score 上半场-客队进球数
  488. public function Totalnum($model,$resultModel,$resultRecords){
  489. //全场总进球数
  490. $resulttod = intval($resultModel->home_score) + intval($resultModel->guest_score) + intval($resultModel->guest_rate) + intval($resultModel->home_rate);
  491. //上半场总进球数
  492. $Firsthalftod = intval($resultModel->home_score) + intval($resultModel->guest_score) + intval($resultModel->u_home_score) + intval($resultModel->u_guest_score);
  493. $qjnum = explode(',', $model->condition);
  494. if($qjnum[0]<$resulttod and $qjnum[1]>$resulttod){
  495. return 1;
  496. }else{
  497. return -1;
  498. }
  499. }
  500. }