ZqRule.php 38 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066
  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. use Illuminate\Support\Facades\DB;
  10. class ZqRule
  11. {
  12. /**
  13. * 全场|主队|让球
  14. * @param mixed $model 注单表数据
  15. * @param mixed $resultModel 结果表数据
  16. * @param mixed $resultRecords 结果记录表数据
  17. * @return string 1:赢 -1:输 2:平 3:赢半平半 4:输半平半
  18. */
  19. public function concede_home($model, $resultModel, $resultRecords)
  20. {
  21. return $this->concedeFull($model, $resultModel, $resultRecords, 1);
  22. }
  23. /**
  24. * 全场|客队|让球
  25. * @param mixed $model 注单表数据
  26. * @param mixed $resultModel 结果表数据
  27. * @param mixed $resultRecords 结果记录表数据
  28. * @return string 1:赢 -1:输 2:平 3:赢半平半 4:输半平半
  29. */
  30. public function concede_guest($model, $resultModel, $resultRecords)
  31. {
  32. return $this->concedeFull($model, $resultModel, $resultRecords, 2);
  33. }
  34. /**
  35. * 全场|[主、客]|让球
  36. * @param mixed $model 注单表数据
  37. * @param mixed $resultModel 结果表数据
  38. * @param mixed $resultRecords 结果记录表数据
  39. * @param mixed $type 1:代表主队让球 2:代表客队让球
  40. * @param mixed $size 1:大 -1:小(如果是让球大小玩法才传入该字段)
  41. * @return string 1:赢 -1:输 2:平 3:赢半平半 4:输半平半
  42. */
  43. public function concedeFull($model, $resultModel, $resultRecords, $type, $size = '')
  44. {
  45. $resultModel = $resultModel['0'];
  46. // 主队得分
  47. $homeScore = intval($resultModel->home_score);
  48. // 客队得分
  49. $guestScore = intval($resultModel->guest_score);
  50. $difference = 0;
  51. // 分差 - 主 :客
  52. if ($type == 1) {
  53. $difference = $homeScore - $guestScore;
  54. } else {
  55. // 分差 - 客 :主
  56. $difference = $guestScore - $homeScore;
  57. }
  58. // 让球个数
  59. $condition = explode("/", $model->condition);
  60. $resultArr = [];
  61. // 循环对比让球后输赢
  62. foreach ($condition as $value) {
  63. $absValue = abs($value);
  64. if (substr($model->condition, 0, 1) == '-') {
  65. $resultScore = $difference - $absValue;
  66. } else {
  67. $resultScore = $difference + $absValue;
  68. }
  69. if ($resultScore > 0) {
  70. $resultArr[] = 1;
  71. } elseif ($resultScore < 0) {
  72. $resultArr[] = -1;
  73. } else {
  74. $resultArr[] = 2;
  75. }
  76. }
  77. // 去重
  78. $resultUniqueArr = array_unique($resultArr);
  79. // 循环对比让球后输赢
  80. $count = count($resultUniqueArr);
  81. if ($size == -1) {
  82. if ($count == 1) {
  83. if ($resultUniqueArr[0] == 1) {
  84. $data['result'] = -1;
  85. } elseif ($resultUniqueArr[0] == 2) {
  86. $data['result'] = 2;
  87. } else {
  88. $data['result'] = 1;
  89. }
  90. } elseif (in_array(1, $resultUniqueArr)) {
  91. $data['result'] = 4;
  92. } else {
  93. $data['result'] = 3;
  94. }
  95. } else {
  96. if ($count == 1) {
  97. $data['result'] = $resultUniqueArr[0];
  98. } elseif (in_array(1, $resultUniqueArr)) {
  99. $data['result'] = 3;
  100. } else {
  101. $data['result'] = 4;
  102. }
  103. }
  104. $data['matchResult'] = "$homeScore-$guestScore(全场)";
  105. return $data;
  106. }
  107. /**
  108. * 上半场|主队|让球
  109. * @param mixed $model 注单表数据
  110. * @param mixed $resultModel 结果表数据
  111. * @param mixed $resultRecords 结果记录表数据
  112. * @return string 1:赢 -1:输 2:平 3:赢半平半 4:输半平半
  113. */
  114. public function half_concede_home($model, $resultModel, $resultRecords)
  115. {
  116. return $this->concedeHalf($model, $resultModel, $resultRecords, 1, 1);
  117. }
  118. /**
  119. * 上半场|客队|让球
  120. * @param mixed $model 注单表数据
  121. * @param mixed $resultModel 结果表数据
  122. * @param mixed $resultRecords 结果记录表数据
  123. * @return string 1:赢 -1:输 2:平 3:赢半平半 4:输半平半
  124. */
  125. public function half_concede_guest($model, $resultModel, $resultRecords)
  126. {
  127. return $this->concedeHalf($model, $resultModel, $resultRecords, 2, 1);
  128. }
  129. /**
  130. * 半场|[主、客]|让球
  131. * @param mixed $model 注单表数据
  132. * @param mixed $resultModel 结果表数据
  133. * @param mixed $resultRecords 结果记录表数据
  134. * @param mixed $whoType 1:代表主队让球 2:代表客队让球
  135. * @param mixed $halfType 1:上半场 2:下半场
  136. * @param mixed $size 1:大 -1:小(如果是让球大小玩法才传入该字段)
  137. * @return string 1:赢 -1:输 2:平 3:赢半平半 4:输半平半
  138. */
  139. public function concedeHalf($model, $resultModel, $resultRecords, $whoType, $halfType)
  140. {
  141. $resultModel = $resultModel['0'];
  142. $returnDatas = ['result' => -1, 'matchResult' => ''];
  143. if ($halfType == 1) {
  144. $scoreArr = ['home' => $resultModel->u_home_score, 'guest' => $resultModel->u_guest_score];
  145. $returnDatas['matchResult'] = $scoreArr['home'] . '-' . $scoreArr['guest'] . "(上半场)";
  146. } else {
  147. $scoreArr = ['home' => $resultModel->home_score - $resultModel->u_home_score, 'guest' => $resultModel->guest_score - $resultModel->u_guest_score];
  148. $returnDatas['matchResult'] = $scoreArr['home'] . '-' . $scoreArr['guest'] . "(下半场)";
  149. }
  150. $hasFH = in_array(substr($model->condition, 0, 1), ['+', '-']);
  151. if ($hasFH) {
  152. $condArr = explode("/", substr($model->condition, 1));
  153. $FH = substr($model->condition, 0, 1);
  154. } else {
  155. $condArr = explode("/", $model->condition);
  156. $FH = '+';
  157. }
  158. $smin = $smax = 0;
  159. if (count($condArr) == 1) {
  160. if ($whoType == 1) {
  161. $smin = $scoreArr['home'] - $scoreArr['guest'] + (($FH == "+") ? -1 : 1) * $condArr[0];
  162. } else {
  163. $smin = $scoreArr['guest'] - $scoreArr['home'] + (($FH == "+") ? -1 : 1) * $condArr[0];
  164. }
  165. if ($smin > 0) {
  166. $returnDatas['result'] = 1;
  167. } elseif ($smin == 0) {
  168. $returnDatas['result'] = 2;
  169. } else {
  170. $returnDatas['result'] = -1;
  171. }
  172. return $returnDatas;
  173. }
  174. if ($whoType == 1) {
  175. $smin = $scoreArr['home'] - $scoreArr['guest'] + (($FH == "+") ? -1 : 1) * $condArr[0];
  176. $smax = $scoreArr['home'] - $scoreArr['guest'] + (($FH == "+") ? -1 : 1) * $condArr[1];
  177. } else {
  178. $smin = $scoreArr['guest'] - $scoreArr['home'] + (($FH == "+") ? -1 : 1) * $condArr[0];
  179. $smax = $scoreArr['guest'] - $scoreArr['home'] + (($FH == "+") ? -1 : 1) * $condArr[1];
  180. }
  181. ($smin > $smax) ? $this->exchage($smin, $smax) : '';
  182. if ($smin > 0) {
  183. $returnDatas['result'] = 1;
  184. } elseif ($smin == 0) {
  185. if ($smax > 0) {
  186. $returnDatas['result'] = 3;
  187. } else {
  188. $returnDatas['result'] = 4;
  189. }
  190. } else {
  191. if ($smax == 0) {
  192. $returnDatas['result'] = 4;
  193. }
  194. }
  195. return $returnDatas;
  196. }
  197. private function exchage(&$num1, &$num2)
  198. {
  199. $tmp = $num2;
  200. $num2 = $num1;
  201. $num1 = $tmp;
  202. }
  203. /**
  204. * 进球|全场|大
  205. * @param mixed $model 注单表数据
  206. * @param mixed $resultModel 结果表数据
  207. * @param mixed $resultRecords 结果记录表数据
  208. * @return string 1:赢 -1:输 2:平 3:赢半平半 4:输半平半
  209. */
  210. public function goal_size_home($model, $resultModel, $resultRecords)
  211. {
  212. return $this->sizeFull($model, $resultModel, $resultRecords, 0, 1);
  213. }
  214. /**
  215. * 进球|全场|小
  216. * @param mixed $model 注单表数据
  217. * @param mixed $resultModel 结果表数据
  218. * @param mixed $resultRecords 结果记录表数据
  219. * @return string 1:赢 -1:输 2:平 3:赢半平半 4:输半平半
  220. */
  221. public function goal_size_guest($model, $resultModel, $resultRecords)
  222. {
  223. return $this->sizeFull($model, $resultModel, $resultRecords, 0, -1);
  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. * @return string 1:赢 -1:输 2:平 3:赢半平半 4:输半平半
  233. */
  234. public function sizeFull($model, $resultModels, $resultRecords, $type, $size)
  235. {
  236. $resultModel = $resultModels['0'];
  237. // 总进球数
  238. $allGoal = intval($resultModel->home_score) + intval($resultModel->guest_score);
  239. // 主队进球数
  240. $homeGoal = intval($resultModel->home_score);
  241. // 客队进球数
  242. $guestGoal = intval($resultModel->guest_score);
  243. // 条件
  244. $condition = explode("/", $model->condition);
  245. $resultArr = [];
  246. // 循环对比输赢
  247. foreach ($condition as $value) {
  248. $absValue = abs($value);
  249. if ($type == 1) {
  250. $resultScore = $homeGoal - $absValue;
  251. } elseif ($type == 2) {
  252. $resultScore = $guestGoal - $absValue;
  253. } else {
  254. $resultScore = $allGoal - $absValue;
  255. }
  256. if ($resultScore > 0) {
  257. $resultArr[] = 1;
  258. } elseif ($resultScore < 0) {
  259. $resultArr[] = -1;
  260. } else {
  261. $resultArr[] = 0;
  262. }
  263. }
  264. // 去重
  265. $resultUniqueArr = array_unique($resultArr);
  266. // 循环对比让球后输赢
  267. $count = count($resultUniqueArr);
  268. if ($count == 1) {
  269. // 如果猜中
  270. if ($resultUniqueArr[0] == $size) {
  271. $data['result'] = 1;
  272. } elseif ($resultUniqueArr[0] == 0) {
  273. // 如果平
  274. $data['result'] = 2;
  275. } else {
  276. // 如果猜错
  277. $data['result'] = -1;
  278. }
  279. } elseif (in_array($size, $resultUniqueArr)) {
  280. $data['result'] = 3;
  281. } else {
  282. $data['result'] = 4;
  283. }
  284. $data['matchResult'] = "$homeGoal-$guestGoal(全场)";
  285. return $data;
  286. }
  287. /**
  288. * 进球|上半场|大
  289. * @param mixed $model 注单表数据
  290. * @param mixed $resultModel 结果表数据
  291. * @param mixed $resultRecords 结果记录表数据
  292. * @return string 1:赢 -1:输 2:平 3:赢半平半 4:输半平半
  293. */
  294. public function half_goal_size_home($model, $resultModel, $resultRecords)
  295. {
  296. return $this->sizeHalf($model, $resultModel, $resultRecords, 0, 1, 1);
  297. }
  298. /**
  299. * 进球|上半场|小
  300. * @param mixed $model 注单表数据
  301. * @param mixed $resultModel 结果表数据
  302. * @param mixed $resultRecords 结果记录表数据
  303. * @return string 1:赢 -1:输 2:平 3:赢半平半 4:输半平半
  304. */
  305. public function half_goal_size_guest($model, $resultModel, $resultRecords)
  306. {
  307. return $this->sizeHalf($model, $resultModel, $resultRecords, 0, -1, 1);
  308. }
  309. /**
  310. * 半场|[主、客、全]|大小
  311. * @param mixed $model 注单表数据
  312. * @param mixed $resultModel 结果表数据
  313. * @param mixed $resultRecords 结果记录表数据
  314. * @param mixed $type 1:主队 2:客队 0:全部进球 (目前只传 0)
  315. * @param mixed $size 1:大 -1:小
  316. * @param mixed $halfType 1:上半场 2:下半场
  317. * @return string 1:赢 -1:输 2:平 3:赢半平半 4:输半平半
  318. */
  319. public function sizeHalf($model, $resultModel, $resultRecords, $type, $size, $halfType)
  320. {
  321. $half = [1 => '上半场', 2 => '下半场'];
  322. // 倒叙
  323. $newResultRecords = array_reverse($resultRecords);
  324. // 查询最后的上半场的key值
  325. $upResultKey = array_search($half[1], array_column($newResultRecords, 'match_process'));
  326. if ($halfType == 1) {
  327. // 上半场总进球数
  328. $allGoal = intval($newResultRecords[$upResultKey]->home_score) + intval($newResultRecords[$upResultKey]->guest_score);
  329. // 上半场主队进球数
  330. $homeGoal = intval($newResultRecords[$upResultKey]->home_score);
  331. // 上半场客队进球数
  332. $guestGoal = intval($newResultRecords[$upResultKey]->guest_score);
  333. } else {
  334. // 查询最后的下半场的key值
  335. $downResultKey = array_search($half[2], array_column($newResultRecords, 'match_process'));
  336. // 下半场总进球数
  337. $allGoal = intval($newResultRecords[$downResultKey]->home_score) + intval($newResultRecords[$downResultKey]->guest_score) -
  338. intval($newResultRecords[$upResultKey]->home_score) + intval($newResultRecords[$upResultKey]->guest_score);
  339. // 下半场主队进球数
  340. $homeGoal = intval($newResultRecords[$downResultKey]->home_score) - intval($newResultRecords[$upResultKey]->home_score);
  341. // 下半场客队进球数
  342. $guestGoal = intval($newResultRecords[$downResultKey]->guest_score) - intval($newResultRecords[$upResultKey]->guest_score);
  343. }
  344. // 条件
  345. $condition = explode("/", $model->condition);
  346. $resultArr = [];
  347. // 循环对比输赢
  348. foreach ($condition as $value) {
  349. $absValue = abs($value);
  350. if ($type == 1) {
  351. $resultScore = $homeGoal - $absValue;
  352. } elseif ($type == 2) {
  353. $resultScore = $guestGoal - $absValue;
  354. } else {
  355. $resultScore = $allGoal - $absValue;
  356. }
  357. if ($resultScore > 0) {
  358. $resultArr[] = 1;
  359. } elseif ($resultScore < 0) {
  360. $resultArr[] = -1;
  361. } else {
  362. $resultArr[] = 0;
  363. }
  364. }
  365. // 去重
  366. $resultUniqueArr = array_unique($resultArr);
  367. // 循环对比让球后输赢
  368. $count = count($resultUniqueArr);
  369. if ($count == 1) {
  370. // 如果猜中
  371. if ($resultUniqueArr[0] == $size) {
  372. $data['result'] = 1;
  373. } elseif ($resultUniqueArr[0] == 0) {
  374. // 如果平
  375. $data['result'] = 2;
  376. } else {
  377. // 如果猜错
  378. $data['result'] = -1;
  379. }
  380. } elseif (in_array($size, $resultUniqueArr)) {
  381. $data['result'] = 3;
  382. } else {
  383. $data['result'] = 4;
  384. }
  385. $data['matchResult'] = "$homeGoal-$guestGoal(上半场)";
  386. return $data;
  387. }
  388. /**
  389. * 全场|主队|独赢
  390. * @param mixed $model 注单表数据
  391. * @param mixed $resultModel 结果表数据
  392. * @param mixed $resultRecords 结果记录表数据
  393. * @return string 1:赢 -1:输
  394. */
  395. public function capot_home($model, $resultModel, $resultRecords)
  396. {
  397. return $this->winFull($model, $resultModel, $resultRecords, 1);
  398. }
  399. /**
  400. * 全场|客队|独赢
  401. * @param mixed $model 注单表数据
  402. * @param mixed $resultModel 结果表数据
  403. * @param mixed $resultRecords 结果记录表数据
  404. * @return string 1:赢 -1:输
  405. */
  406. public function capot_guest($model, $resultModel, $resultRecords)
  407. {
  408. return $this->winFull($model, $resultModel, $resultRecords, 2);
  409. }
  410. /**
  411. * 全场|主客平|独赢
  412. * @param mixed $model 注单表数据
  413. * @param mixed $resultModel 结果表数据
  414. * @param mixed $resultRecords 结果记录表数据
  415. * @return string 1:赢 -1:输
  416. */
  417. public function capot_dogfall($model, $resultModel, $resultRecords)
  418. {
  419. return $this->winFull($model, $resultModel, $resultRecords, 0);
  420. }
  421. /**
  422. * 上半场|主队|独赢
  423. * @param mixed $model 注单表数据
  424. * @param mixed $resultModel 结果表数据
  425. * @param mixed $resultRecords 结果记录表数据
  426. * @return string 1:赢 -1:输
  427. */
  428. public function half_capot_home($model, $resultModel, $resultRecords)
  429. {
  430. return $this->winHalf($model, $resultModel, $resultRecords, 1, 1);
  431. }
  432. /**
  433. * 上半场|客队|独赢
  434. * @param mixed $model 注单表数据
  435. * @param mixed $resultModel 结果表数据
  436. * @param mixed $resultRecords 结果记录表数据
  437. * @return string 1:赢 -1:输
  438. */
  439. public function half_capot_guest($model, $resultModel, $resultRecords)
  440. {
  441. return $this->winHalf($model, $resultModel, $resultRecords, 2, 1);
  442. }
  443. /**
  444. * 上半场|主客平|独赢
  445. * @param mixed $model 注单表数据
  446. * @param mixed $resultModel 结果表数据
  447. * @param mixed $resultRecords 结果记录表数据
  448. * @return string 1:赢 -1:输
  449. */
  450. public function half_capot_dogfall($model, $resultModel, $resultRecords)
  451. {
  452. return $this->winHalf($model, $resultModel, $resultRecords, 0, 1);
  453. }
  454. /**
  455. * 全场|[主、客、平]|独赢
  456. * @param mixed $model 注单表数据
  457. * @param mixed $resultModel 结果表数据
  458. * @param mixed $resultRecords 结果记录表数据
  459. * @param mixed $type 1:主队 2:客队 0:平
  460. * @return string 1:赢 -1:输
  461. */
  462. public function winFull($model, $resultModel, $resultRecords, $type)
  463. {
  464. // 主队得分
  465. $homeScore = intval($resultModel->home_score);
  466. // 客队得分
  467. $guestScore = intval($resultModel->guest_score);
  468. $difference = $homeScore - $guestScore;
  469. if ($difference > 0 && $type == 1) {
  470. $data['result'] = 1;
  471. } elseif ($difference < 0 && $type == 2) {
  472. $data['result'] = 1;
  473. } elseif ($difference == 0 && $type == 0) {
  474. $data['result'] = 1;
  475. } else {
  476. $data['result'] = -1;
  477. }
  478. $data['matchResult'] = "$homeScore-$guestScore(全场)";
  479. return $data;
  480. }
  481. /**
  482. * 半场|[主、客、平]|独赢
  483. * @param mixed $model 注单表数据
  484. * @param mixed $resultModel 结果表数据
  485. * @param mixed $resultRecords 结果记录表数据
  486. * @param mixed $type 1:主队 2:客队 0:平
  487. * @param mixed $halfType 1:上半场 2:下半场
  488. * @return string 1:赢 -1:输
  489. */
  490. public function winHalf($model, $resultModel, $resultRecords, $type, $halfType)
  491. {
  492. $half = [1 => '上半场', 2 => '下半场'];
  493. // 倒叙
  494. $newResultRecords = array_reverse($resultRecords);
  495. // 查询最后的上半场的key值
  496. $upResultKey = array_search($half[1], array_column($newResultRecords, 'match_process'));
  497. $homeScore = 0;
  498. $guestScore = 0;
  499. if ($halfType == 1) {
  500. // 主队得分
  501. $homeScore = intval($newResultRecords[$upResultKey]->home_score);
  502. // 客队得分
  503. $guestScore = intval($newResultRecords[$upResultKey]->guest_score);
  504. } else {
  505. // 查询最后的下半场的key值
  506. $downResultKey = array_search($half[2], array_column($newResultRecords, 'match_process'));
  507. // 下半场主队得分
  508. $homeScore = intval($newResultRecords[$downResultKey]->home_score) - intval($newResultRecords[$upResultKey]->home_score);
  509. // 下半场客队得分
  510. $guestScore = intval($newResultRecords[$downResultKey]->guest_score) - intval($newResultRecords[$upResultKey]->guest_score);
  511. }
  512. $difference = $homeScore - $guestScore;
  513. if ($difference > 0 && $type == 1) {
  514. $data['result'] = 1;
  515. } elseif ($difference < 0 && $type == 2) {
  516. $data['result'] = 1;
  517. } elseif ($difference == 0 && $type == 0) {
  518. $data['result'] = 1;
  519. } else {
  520. $data['result'] = -1;
  521. }
  522. $data['matchResult'] = "$homeScore-$guestScore(上半场)";
  523. return $data;
  524. }
  525. // first_last_ball最先/最后进球 开始-----------------------
  526. //主队|最先进球
  527. public function first_ball_home($model, $resultModel, $resultRecords)
  528. {
  529. $resultModel = $resultModel['0'];
  530. if ($resultModel->all_goal > 0) {
  531. if ($resultModel->first_score === $resultModel->home_team) {
  532. return ['result' => 1, 'matchResult' => ''];
  533. } else {
  534. return ['result' => -1, 'matchResult' => ''];
  535. }
  536. }
  537. return ['result' => 2, 'matchResult' => ''];
  538. }
  539. //客队|最先进球
  540. public function first_ball_guest($model, $resultModel, $resultRecords)
  541. {
  542. $resultModel = $resultModel['0'];
  543. if ($resultModel->all_goal > 0) {
  544. if ($resultModel->first_score === $resultModel->guest_team) {
  545. return ['result' => 1, 'matchResult' => ''];
  546. } else {
  547. return ['result' => -1, 'matchResult' => ''];
  548. }
  549. }
  550. return ['result' => 2, 'matchResult' => ''];
  551. }
  552. //主队|最后进球
  553. public function last_ball_home($model, $resultModel, $resultRecords)
  554. {
  555. $resultModel = $resultModel['0'];
  556. if ($resultModel->all_goal > 0) {
  557. if ($resultModel->last_score === $resultModel->home_team) {
  558. return ['result' => 1, 'matchResult' => ''];
  559. } else {
  560. return ['result' => -1, 'matchResult' => ''];
  561. }
  562. }
  563. return ['result' => 2, 'matchResult' => ''];
  564. }
  565. //客队|最后进球
  566. public function last_ball_guest($model, $resultModel, $resultRecords)
  567. {
  568. $pos = count($resultModel) - 1;
  569. $resultModel = $resultModel[$pos];
  570. if ($resultModel->all_goal > 0) {
  571. if ($resultModel->last_score === $resultModel->guest_team) {
  572. return ['result' => 1, 'matchResult' => ''];
  573. } else {
  574. return ['result' => -1, 'matchResult' => ''];
  575. }
  576. }
  577. return ['result' => 2, 'matchResult' => ''];
  578. }
  579. //没有进球
  580. public function not_ball($model, $resultModel, $resultRecords)
  581. {
  582. $pos = count($resultModel) - 1;
  583. $resultModel = $resultModel[$pos];
  584. if ($resultModel->all_goal <= 0) {
  585. return ['result' => 1, 'matchResult' => ''];
  586. } else {
  587. return ['result' => -1, 'matchResult' => ''];
  588. }
  589. }
  590. ////////// first_last_ball最先/最后进球 结束-----------------------
  591. /**
  592. * 足球波胆 规则
  593. * @param $bet_match 投注赛事数据
  594. * @param $result_match 最终结果
  595. * @param $result_match_r 结果记录
  596. */
  597. public function bodan($bet_match, $result_match, $result_match_r)
  598. {
  599. // $bet_match = DB::table('money_buy_match')->where('match_id', 3150765)->first();
  600. // $result_match = DB::table('st_zq_result')->where('match_id', 3150765)->first();
  601. // $result_match_r = DB::table('st_zq_result_record')->where('match_id', 3150765)->get()->toArray();
  602. //获取父/子级赔率代码
  603. $p_code = $bet_match->p_code;
  604. $odds_code = $bet_match->odds_code;
  605. //获取主客队投注比分
  606. $bet_score = explode('-', $bet_match->condition);
  607. $bet_home_score = (int)$bet_score[0];
  608. $bet_guest_score = (int)$bet_score[1];
  609. if ($p_code != 'bodan') return false;
  610. if (strstr($odds_code, "half")) {//上半场
  611. //获取上半场最终数据
  612. $last_half_data = $this->getHalfData($result_match_r);
  613. //获取主客队上半场得分
  614. $home_score = $last_half_data->home_score;
  615. $guest_score = $last_half_data->guest_score;
  616. //返回结果
  617. $data = [
  618. 'result' => 1,
  619. 'matchResult' => "$home_score-$guest_score(上半场)"
  620. ];
  621. if (strstr($bet_match->condition, "其他")) {
  622. if (($home_score > 3) || ($guest_score > 3)) {
  623. return $data;
  624. }
  625. }
  626. //判断结果
  627. if ($bet_home_score == $home_score and $bet_guest_score == $guest_score) {
  628. return $data;
  629. }
  630. $data['result'] = -1;
  631. return $data;
  632. } else {//全场
  633. //获取主客队全场得分
  634. $home_score = $result_match->home_score;
  635. $guest_score = $result_match->guest_score;
  636. //返回结果
  637. $data = [
  638. 'result' => 1,
  639. 'matchResult' => "$home_score-$guest_score(全场)"
  640. ];
  641. if (strstr($bet_match->condition, "其他")) {
  642. if (($home_score > 4) || ($guest_score > 4)) {
  643. return $data;
  644. }
  645. }
  646. //判断结果
  647. if ($bet_home_score == $home_score and $bet_guest_score == $guest_score) {
  648. return $data;
  649. }
  650. $data['result'] = -1;
  651. return $data;
  652. }
  653. }
  654. //结果单/双 home_score 主队进球数 guest_score 客队进球数 home_rate 主队让球 guest_rate 客队让球 u_home_score 上半场主队进球 u_guest_score 上半场-客队进球数 two_sides_single 全场单 two_sides_double 全场双 half_two_sides_single 上半场单 half_two_sides_double 上半场双
  655. public function two_sides($model, $resultModel, $resultRecords)
  656. {
  657. $resulttod = intval($resultModel->home_score) + intval($resultModel->guest_score);//全场
  658. if ($resulttod % 2 == 0) {
  659. $text = '双';
  660. } else {
  661. $text = '单';
  662. }
  663. if ($model->odds_code == "two_sides_single") {
  664. if ($text == $model->condition) {
  665. $dsresult = 1;
  666. } else {
  667. $dsresult = -1;
  668. }
  669. } elseif ($model->odds_code == 'two_sides_double') {
  670. if ($text == $model->condition) {
  671. $dsresult = 1;
  672. } else {
  673. $dsresult = -1;
  674. }
  675. } else {
  676. $data = [
  677. 'result' => 100,
  678. 'matchResult' => "参数不存在",
  679. ];
  680. }
  681. if ($dsresult == 1) {
  682. $data = [
  683. 'result' => 1,
  684. 'matchResult' => "$resulttod(全场)",
  685. ];
  686. } else {
  687. $data = [
  688. 'result' => -1,
  689. 'matchResult' => "$resulttod(全场)",
  690. ];
  691. }
  692. return $data;
  693. }
  694. //结果总数 home_score 主队进球数 guest_score 客队进球数 home_rate 主队让球 guest_rate 客队让球 u_home_score 上半场-主队进球数 u_guest_score 上半场-客队进球数
  695. public function total_goal($model, $resultModel, $resultRecords)
  696. {
  697. //全场总进球数
  698. $resulttod = intval($resultModel->home_score) + intval($resultModel->guest_score);
  699. //上半场总进球数
  700. $Firsthalftod = intval($resultModel->u_home_score) + intval($resultModel->u_guest_score);
  701. $qjnum = explode('-', $model->condition);
  702. if ($model->odds_code = "total_goal_four") {
  703. if ($qjnum[0] <= $resulttod and $qjnum[1] >= $resulttod) {
  704. $results = 1;
  705. } else {
  706. $results = -1;
  707. }
  708. } elseif ($model->odds_code = "total_goal_zero") {
  709. if ($qjnum[0] <= $resulttod and $qjnum[1] >= $resulttod) {
  710. $results = 1;
  711. } else {
  712. $results = -1;
  713. }
  714. } elseif ($model->odds_code = "total_goal_two") {
  715. if ($qjnum[0] <= $resulttod and $qjnum[1] >= $resulttod) {
  716. $results = 1;
  717. } else {
  718. $results = -1;
  719. }
  720. } elseif ($model->odds_code = "total_goal_seven") {
  721. if ($qjnum[0] <= $resulttod and $qjnum[1] >= $resulttod) {
  722. $results = 1;
  723. } else {
  724. $results = -1;
  725. }
  726. } elseif ($model->odds_code = "half_total_goal_zero") {
  727. if ($qjnum[0] <= $Firsthalftod and $qjnum[1] >= $Firsthalftod) {
  728. $resultb = 1;
  729. } else {
  730. $resultb = -1;
  731. }
  732. } elseif ($model->odds_code = "half_total_goal_one") {
  733. if ($qjnum[0] <= $Firsthalftod and $qjnum[1] >= $Firsthalftod) {
  734. $resultb = 1;
  735. } else {
  736. $resultb = -1;
  737. }
  738. } elseif ($model->odds_code = "half_total_goal_two") {
  739. if ($qjnum[0] <= $Firsthalftod and $qjnum[1] >= $Firsthalftod) {
  740. $resultb = 1;
  741. } else {
  742. $resultb = -1;
  743. }
  744. } elseif ($model->odds_code = "half_total_goal_three") {
  745. if ($qjnum[0] <= $Firsthalftod and $qjnum[1] >= $Firsthalftod) {
  746. $resultb = 1;
  747. } else {
  748. $resultb = -1;
  749. }
  750. } else {
  751. $data = [
  752. 'result' => 100,
  753. 'matchResult' => "参数不存在",
  754. ];
  755. }
  756. if ($results == 1) {
  757. $data = [
  758. 'result' => 1,
  759. 'matchResult' => "$resulttod(全场)",
  760. ];
  761. } elseif ($results == -1) {
  762. $data = [
  763. 'result' => -1,
  764. 'matchResult' => "$resulttod(全场)",
  765. ];
  766. } elseif ($resultb == 1) {
  767. $data = [
  768. 'result' => 1,
  769. 'matchResult' => "$resulttod(半场)",
  770. ];
  771. } elseif ($resultb == -1) {
  772. $data = [
  773. 'result' => -1,
  774. 'matchResult' => "$resulttod(半场)",
  775. ];
  776. }
  777. return $data;
  778. }
  779. /**
  780. * 半场/全场 投注规则
  781. */
  782. public function half_full($bet_match, $result_match, $result_match_r)
  783. {
  784. // $bet_match = DB::table('money_buy_match')->where('match_id', 3210851)->first();
  785. // $result_match = DB::table('st_zq_result')->where('match_id', 3210851)->first();
  786. // $result_match_r = DB::table('st_zq_result_record')->where('match_id', 3210851)->get()->toArray();
  787. if (empty($bet_match) || empty($result_match) || empty($result_match_r)) return false;
  788. //获取父/子级赔率代码
  789. $p_code = $bet_match->p_code;
  790. $odds_code = $bet_match->odds_code;
  791. //获取上半场最终数据
  792. $last_half_data = $this->getHalfData($result_match_r);
  793. //获取主客队上半场得分
  794. $half_home_score = $last_half_data->home_score;
  795. $half_guest_score = $last_half_data->guest_score;
  796. //获取主客队全场得分
  797. $full_home_score = $result_match->home_score;
  798. $full_guest_score = $result_match->guest_score;
  799. //半场/全场盘口
  800. if ($p_code != 'half_full') return false;
  801. //返回结果
  802. $data = [
  803. 'result' => 1,
  804. 'matchResult' => "$half_home_score-$half_home_score(上半场);$full_home_score-$full_guest_score(全场)"
  805. ];
  806. switch ($odds_code) {
  807. case 'half_full_home_home':// 主-主
  808. if ($half_home_score > $half_home_score and $full_home_score > $full_guest_score) return $data;
  809. break;
  810. case 'half_full_home_dogfall':// 主-和
  811. if ($half_home_score > $half_guest_score and $full_home_score == $full_guest_score) return $data;
  812. break;
  813. case 'half_full_home_guest':// 主-客
  814. if ($half_home_score > $half_guest_score and $full_home_score < $full_guest_score) return $data;
  815. break;
  816. case 'half_full_dogfall_home':// 和-主
  817. if ($half_home_score == $half_guest_score and $full_home_score > $full_guest_score) return $data;
  818. break;
  819. case 'half_full_dogfall_dogfall':// 和-和
  820. if ($half_home_score == $half_guest_score and $full_home_score == $full_guest_score) return $data;
  821. break;
  822. case 'half_full_dogfall_guest':// 和-客
  823. if ($half_home_score == $half_guest_score and $full_home_score < $full_guest_score) return $data;
  824. break;
  825. case 'half_full_guest_home':// 客-主
  826. if ($half_home_score < $half_guest_score and $full_home_score > $full_guest_score) return $data;
  827. break;
  828. case 'half_full_guest_dogfall':// 客-和
  829. if ($half_home_score < $half_guest_score and $full_home_score == $full_guest_score) return $data;
  830. break;
  831. case 'half_full_guest_guest':// 客-客
  832. if ($half_home_score < $half_guest_score and $full_home_score < $full_guest_score) return $data;
  833. break;
  834. default:
  835. return false;
  836. }
  837. $data['result'] = -1;
  838. return $data;
  839. }
  840. /**
  841. * @param $result_match_r 赛事结果记录
  842. * @return mixed 返回最新一条上半场结果数据
  843. */
  844. public function getHalfData($result_match_r = [])
  845. {
  846. if (empty($result_match_r)) return false;
  847. $half_data = [];
  848. foreach ($result_match_r as $k => $v) {
  849. //取出上半场数据
  850. if ($v->match_process == '上半场') {
  851. $half_data[] = $v;
  852. }
  853. }
  854. //根据id倒序排列
  855. $half_data_sorc = array_column($half_data, 'id');
  856. array_multisort($half_data_sorc, SORT_DESC, $half_data);
  857. //获取id最大的一条数据
  858. foreach ($half_data as $k => $v) {
  859. if ($v->id == $half_data_sorc[0]) {
  860. $last_half_data = $v;
  861. }
  862. }
  863. return $last_half_data;
  864. }
  865. /**
  866. * 冠军盘口投注
  867. * $bet_match 投注赛事数据
  868. * $result_match 联赛结果 数据 根据玩法代码查询一条
  869. * $result_match_r 无用参数
  870. */
  871. public function gj($bet_match, $result_match, $result_match_r)
  872. {
  873. // $bet_match = DB::table('money_buy_match')->where('match_id', 127317)->first();
  874. // $bet_match->odds_code = '巴西小组赛积分成绩';
  875. // $result_match = DB::table('st_zq_league_result')->where(['lg_id'=>27317,'game_name'=>$bet_match->odds_code])->first();
  876. if (empty($bet_match) || empty($result_match)) return false;
  877. if ($bet_match->p_code != 'gj') return false;//冠军玩法
  878. if ($bet_match->odds_code == $result_match->game_name) {
  879. $condition = $bet_match->condition;
  880. //进球数判断
  881. if (strpos($bet_match->odds_code, '进球数') !== false) {
  882. //返回结果
  883. $data = [
  884. 'result' => 1,
  885. 'matchResult' => "$result_match->result(球队进球数)"
  886. ];
  887. //获取数值
  888. $bet = $this->findNum($condition);
  889. //以上/以下判断
  890. if (strpos($condition, '上') !== false) {
  891. if ($bet < $result_match->result) {
  892. return $data;
  893. }
  894. $data['result'] = -1;
  895. return $data;
  896. }
  897. if (strpos($condition, '下') !== false) {
  898. if ($bet > $result_match->result) {
  899. return $data;
  900. }
  901. $data['result'] = -1;
  902. return $data;
  903. }
  904. //大/小判断
  905. if (strpos($condition, '大') !== false) {
  906. if ($bet < $result_match->result) {
  907. return $data;
  908. }
  909. $data['result'] = -1;
  910. return $data;
  911. }
  912. if (strpos($condition, '小') !== false) {
  913. if ($bet > $result_match->result) {
  914. return $data;
  915. }
  916. $data['result'] = -1;
  917. return $data;
  918. }
  919. }
  920. //积分成绩判断
  921. if (strpos($bet_match->odds_code, '积分') !== false) {
  922. //返回结果
  923. $data = [
  924. 'result' => 1,
  925. 'matchResult' => "$result_match->result(球队积分)"
  926. ];
  927. $condition = $bet_match->condition;
  928. //获取数值
  929. $bet = $this->findNum($condition);
  930. if ($bet == $result_match->result) {
  931. return $data;
  932. }
  933. $data['result'] = -1;
  934. return $data;
  935. }
  936. //如果条件中没有数字,则获取球队/球员结果
  937. if ((preg_match('/\d+/', $condition)) == 0) {
  938. //返回结果
  939. $data = [
  940. 'result' => 1,
  941. 'matchResult' => "$result_match->result(晋级球队)"
  942. ];
  943. $result = $this->teamJudge($condition, $result_match->result);
  944. if ($result) {
  945. return $data;
  946. }
  947. $data['result'] = -1;
  948. return $data;
  949. };
  950. return false;
  951. }
  952. return false;
  953. }
  954. /**
  955. * 冠军盘口 球队/球员结果判断
  956. */
  957. public function teamJudge($condition, $result)
  958. {
  959. //返回结果数组中是否包含该球队
  960. $result = in_array($condition, json_decode($result, true));
  961. return $result;
  962. }
  963. /**
  964. * @param string $str
  965. * @return string
  966. * 处理字符串中的数字
  967. */
  968. public function findNum($str = '')
  969. {
  970. $str = trim($str);
  971. if (empty($str)) {
  972. return '';
  973. }
  974. $result = '';
  975. for ($i = 0; $i < strlen($str); $i++) {
  976. if (is_numeric($str[$i]) || $str[$i] == '.') {
  977. $result .= $str[$i];
  978. }
  979. }
  980. //如果有小数点,返回浮点数
  981. if (strpos($result, '.')) return floatval($result);
  982. //返回整数
  983. return (int)$result;
  984. }
  985. }