ZqRule.php 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841
  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. return $this -> concedeFull($model, $resultModel, $resultRecords, 1);
  21. }
  22. /**
  23. * 全场|客队|让球
  24. * @param mixed $model 注单表数据
  25. * @param mixed $resultModel 结果表数据
  26. * @param mixed $resultRecords 结果记录表数据
  27. * @return string 1:赢 -1:输 2:平 3:赢半平半 4:输半平半
  28. */
  29. public function concede_guest($model, $resultModel, $resultRecords) {
  30. return $this -> concedeFull($model, $resultModel, $resultRecords, 2);
  31. }
  32. /**
  33. * 上半场|主队|让球
  34. * @param mixed $model 注单表数据
  35. * @param mixed $resultModel 结果表数据
  36. * @param mixed $resultRecords 结果记录表数据
  37. * @return string 1:赢 -1:输 2:平 3:赢半平半 4:输半平半
  38. */
  39. public function half_concede_home($model, $resultModel, $resultRecords) {
  40. return $this -> concedeHalf($model, $resultModel, $resultRecords, 1, 1);
  41. }
  42. /**
  43. * 上半场|客队|让球
  44. * @param mixed $model 注单表数据
  45. * @param mixed $resultModel 结果表数据
  46. * @param mixed $resultRecords 结果记录表数据
  47. * @return string 1:赢 -1:输 2:平 3:赢半平半 4:输半平半
  48. */
  49. public function half_concede_guest($model, $resultModel, $resultRecords) {
  50. return $this -> concedeHalf($model, $resultModel, $resultRecords, 2, 1);
  51. }
  52. /**
  53. * 进球|全场|大
  54. * @param mixed $model 注单表数据
  55. * @param mixed $resultModel 结果表数据
  56. * @param mixed $resultRecords 结果记录表数据
  57. * @return string 1:赢 -1:输 2:平 3:赢半平半 4:输半平半
  58. */
  59. public function size_home($model, $resultModel, $resultRecords) {
  60. return $this -> sizeFull($model, $resultModel, $resultRecords, 0, 1);
  61. }
  62. /**
  63. * 进球|全场|小
  64. * @param mixed $model 注单表数据
  65. * @param mixed $resultModel 结果表数据
  66. * @param mixed $resultRecords 结果记录表数据
  67. * @return string 1:赢 -1:输 2:平 3:赢半平半 4:输半平半
  68. */
  69. public function size_guest($model, $resultModel, $resultRecords) {
  70. return $this -> sizeFull($model, $resultModel, $resultRecords, 0, -1);
  71. }
  72. /**
  73. * 进球|上半场|大
  74. * @param mixed $model 注单表数据
  75. * @param mixed $resultModel 结果表数据
  76. * @param mixed $resultRecords 结果记录表数据
  77. * @return string 1:赢 -1:输 2:平 3:赢半平半 4:输半平半
  78. */
  79. public function half_size_home($model, $resultModel, $resultRecords) {
  80. return $this -> sizeHalf($model, $resultModel, $resultRecords, 0, 1, 1);
  81. }
  82. /**
  83. * 进球|上半场|小
  84. * @param mixed $model 注单表数据
  85. * @param mixed $resultModel 结果表数据
  86. * @param mixed $resultRecords 结果记录表数据
  87. * @return string 1:赢 -1:输 2:平 3:赢半平半 4:输半平半
  88. */
  89. public function half_size_guest($model, $resultModel, $resultRecords) {
  90. return $this -> sizeHalf($model, $resultModel, $resultRecords, 0, -1, 1);
  91. }
  92. /**
  93. * 全场|主队|独赢
  94. * @param mixed $model 注单表数据
  95. * @param mixed $resultModel 结果表数据
  96. * @param mixed $resultRecords 结果记录表数据
  97. * @return string 1:赢 -1:输
  98. */
  99. public function capot_home($model, $resultModel, $resultRecords) {
  100. return $this -> winFull($model, $resultModel, $resultRecords, 1);
  101. }
  102. /**
  103. * 全场|客队|独赢
  104. * @param mixed $model 注单表数据
  105. * @param mixed $resultModel 结果表数据
  106. * @param mixed $resultRecords 结果记录表数据
  107. * @return string 1:赢 -1:输
  108. */
  109. public function capot_guest($model, $resultModel, $resultRecords) {
  110. return $this -> winFull($model, $resultModel, $resultRecords, 2);
  111. }
  112. /**
  113. * 全场|主客平|独赢
  114. * @param mixed $model 注单表数据
  115. * @param mixed $resultModel 结果表数据
  116. * @param mixed $resultRecords 结果记录表数据
  117. * @return string 1:赢 -1:输
  118. */
  119. public function capot_dogfall($model, $resultModel, $resultRecords) {
  120. return $this -> winFull($model, $resultModel, $resultRecords, 0);
  121. }
  122. /**
  123. * 上半场|主队|独赢
  124. * @param mixed $model 注单表数据
  125. * @param mixed $resultModel 结果表数据
  126. * @param mixed $resultRecords 结果记录表数据
  127. * @return string 1:赢 -1:输
  128. */
  129. public function half_capot_home($model, $resultModel, $resultRecords) {
  130. return $this -> winHalf($model, $resultModel, $resultRecords, 1, 1);
  131. }
  132. /**
  133. * 上半场|客队|独赢
  134. * @param mixed $model 注单表数据
  135. * @param mixed $resultModel 结果表数据
  136. * @param mixed $resultRecords 结果记录表数据
  137. * @return string 1:赢 -1:输
  138. */
  139. public function half_capot_guest($model, $resultModel, $resultRecords) {
  140. return $this -> winHalf($model, $resultModel, $resultRecords, 2, 1);
  141. }
  142. /**
  143. * 上半场|主客平|独赢
  144. * @param mixed $model 注单表数据
  145. * @param mixed $resultModel 结果表数据
  146. * @param mixed $resultRecords 结果记录表数据
  147. * @return string 1:赢 -1:输
  148. */
  149. public function half_capot_dogfall($model, $resultModel, $resultRecords) {
  150. return $this -> winHalf($model, $resultModel, $resultRecords, 0, 1);
  151. }
  152. /**
  153. * 全场|[主、客]|让球
  154. * @param mixed $model 注单表数据
  155. * @param mixed $resultModel 结果表数据
  156. * @param mixed $resultRecords 结果记录表数据
  157. * @param mixed $type 1:代表主队让球 2:代表客队让球
  158. * @param mixed $size 1:大 -1:小(如果是让球大小玩法才传入该字段)
  159. * @return string 1:赢 -1:输 2:平 3:赢半平半 4:输半平半
  160. */
  161. public function concedeFull($model, $resultModel, $resultRecords, $type, $size = ''){
  162. // 主队得分
  163. $homeScore = intval($resultModel -> home_score);
  164. // 客队得分
  165. $guestScore = intval($resultModel -> guest_score);
  166. $difference = 0;
  167. // 分差 - 主 :客
  168. if ($type == 1) {
  169. $difference = $homeScore - $guestScore;
  170. } else {
  171. // 分差 - 客 :主
  172. $difference = $guestScore - $homeScore;
  173. }
  174. // 让球个数
  175. $condition = explode("/", $model -> condition);
  176. $resultArr = [];
  177. // 循环对比让球后输赢
  178. foreach ($condition as $value) {
  179. $absValue = abs($value);
  180. if (substr($model -> condition, 0, 1) == '-') {
  181. $resultScore = $difference - $absValue;
  182. } else {
  183. $resultScore = $difference + $absValue;
  184. }
  185. if ($resultScore > 0) {
  186. $resultArr[] = 1;
  187. } elseif ($resultScore < 0) {
  188. $resultArr[] = -1;
  189. } else {
  190. $resultArr[] = 2;
  191. }
  192. }
  193. // 去重
  194. $resultUniqueArr = array_unique($resultArr);
  195. // 循环对比让球后输赢
  196. $count = count($resultUniqueArr);
  197. if ($size == -1) {
  198. if ($count == 1) {
  199. if ($resultUniqueArr[0] == 1) {
  200. return -1;
  201. } elseif ($resultUniqueArr[0] == 2) {
  202. return 2;
  203. } else {
  204. return 1;
  205. }
  206. } elseif (in_array(1, $resultUniqueArr)) {
  207. return 4;
  208. } else {
  209. return 3;
  210. }
  211. } else {
  212. if ($count == 1) {
  213. return $resultUniqueArr[0];
  214. } elseif (in_array(1, $resultUniqueArr)) {
  215. return 3;
  216. } else {
  217. return 4;
  218. }
  219. }
  220. }
  221. /**
  222. * 半场|[主、客]|让球
  223. * @param mixed $model 注单表数据
  224. * @param mixed $resultModel 结果表数据
  225. * @param mixed $resultRecords 结果记录表数据
  226. * @param mixed $whoType 1:代表主队让球 2:代表客队让球
  227. * @param mixed $halfType 1:上半场 2:下半场
  228. * @param mixed $size 1:大 -1:小(如果是让球大小玩法才传入该字段)
  229. * @return string 1:赢 -1:输 2:平 3:赢半平半 4:输半平半
  230. */
  231. public function concedeHalf($model, $resultModel, $resultRecords, $whoType, $halfType, $size = ''){
  232. $half = [1 => '上半场', 2 => '下半场'];
  233. // 倒叙
  234. $newResultRecords = array_reverse($resultRecords);
  235. // 查询最后的上半场的key值
  236. $upResultKey = array_search($half[1], array_column($newResultRecords, 'match_process'));
  237. $homeScore = 0;
  238. $guestScore = 0;
  239. if ($halfType == 1) {
  240. // 主队得分
  241. $homeScore = intval($newResultRecords[$upResultKey] -> home_score);
  242. // 客队得分
  243. $guestScore = intval($newResultRecords[$upResultKey] -> guest_score);
  244. } else {
  245. // 查询最后的下半场的key值
  246. $downResultKey = array_search($half[2], array_column($newResultRecords, 'match_process'));
  247. // 下半场主队得分
  248. $homeScore = intval($newResultRecords[$downResultKey] -> home_score) - intval($newResultRecords[$upResultKey] -> home_score);
  249. // 下半场客队得分
  250. $guestScore = intval($newResultRecords[$downResultKey] -> guest_score) - intval($newResultRecords[$upResultKey] -> guest_score);
  251. }
  252. $difference = 0;
  253. // 分差 - 主 :客
  254. if ($whoType == 1) {
  255. $difference = $homeScore - $guestScore;
  256. } else {
  257. // 分差 - 客 :主
  258. $difference = $guestScore - $homeScore;
  259. }
  260. // 让球个数
  261. $condition = explode("/", $model -> condition);
  262. $resultArr = [];
  263. // 循环对比让球后输赢
  264. foreach ($condition as $value) {
  265. $absValue = abs($value);
  266. if (substr($model -> condition, 0, 1) == '-') {
  267. $resultScore = $difference - $absValue;
  268. } else {
  269. $resultScore = $difference + $absValue;
  270. }
  271. if ($resultScore > 0) {
  272. $resultArr[] = 1;
  273. } elseif ($resultScore < 0) {
  274. $resultArr[] = -1;
  275. } else {
  276. $resultArr[] = 2;
  277. }
  278. }
  279. // 去重
  280. $resultUniqueArr = array_unique($resultArr);
  281. // 循环对比让球后输赢
  282. $count = count($resultUniqueArr);
  283. // 如果猜的是让球大小且猜的是小则运行
  284. if ($size == -1) {
  285. if ($count == 1) {
  286. if ($resultUniqueArr[0] == 1) {
  287. return -1;
  288. } elseif ($resultUniqueArr[0] == 2) {
  289. return 2;
  290. } else {
  291. return 1;
  292. }
  293. } elseif (in_array(1, $resultUniqueArr)) {
  294. return 4;
  295. } else {
  296. return 3;
  297. }
  298. } else {
  299. if ($count == 1) {
  300. return $resultUniqueArr[0];
  301. } elseif (in_array(1, $resultUniqueArr)) {
  302. return 3;
  303. } else {
  304. return 4;
  305. }
  306. }
  307. }
  308. /**
  309. * 总进球全场|[主、客、全]|大小
  310. * @param mixed $model 注单表数据
  311. * @param mixed $resultModel 结果表数据
  312. * @param mixed $resultRecords 结果记录表数据
  313. * @param mixed $type 1:主队 2:客队 0:全部进球 (目前只传 0)
  314. * @param mixed $size 1:大 -1:小
  315. * @return string 1:赢 -1:输 2:平 3:赢半平半 4:输半平半
  316. */
  317. public function sizeFull($model, $resultModel, $resultRecords, $type, $size){
  318. // 总进球数
  319. $allGoal = intval($resultModel -> home_score) + intval($resultModel -> guest_score);
  320. // 主队进球数
  321. $homeGoal = intval($resultModel -> home_score);
  322. // 客队进球数
  323. $guestGoal = intval($resultModel -> guest_score);
  324. // 条件
  325. $condition = explode("/", $model -> condition);
  326. $resultArr = [];
  327. // 循环对比输赢
  328. foreach ($condition as $value) {
  329. $absValue = abs($value);
  330. if ($type == 1) {
  331. $resultScore = $homeGoal - $absValue;
  332. } elseif ($type == 2) {
  333. $resultScore = $guestGoal - $absValue;
  334. } else {
  335. $resultScore = $allGoal - $absValue;
  336. }
  337. if ($resultScore > 0) {
  338. $resultArr[] = 1;
  339. } elseif ($resultScore < 0) {
  340. $resultArr[] = -1;
  341. } else {
  342. $resultArr[] = 0;
  343. }
  344. }
  345. // 去重
  346. $resultUniqueArr = array_unique($resultArr);
  347. // 循环对比让球后输赢
  348. $count = count($resultUniqueArr);
  349. if ($count == 1) {
  350. // 如果猜中
  351. if ($resultUniqueArr[0] == $size) {
  352. return 1;
  353. } elseif ($resultUniqueArr[0] == 0) {
  354. // 如果平
  355. return 2;
  356. } else {
  357. // 如果猜错
  358. return -1;
  359. }
  360. } elseif (in_array($size, $resultUniqueArr)) {
  361. return 3;
  362. } else {
  363. return 4;
  364. }
  365. }
  366. /**
  367. * 半场|[主、客、全]|大小
  368. * @param mixed $model 注单表数据
  369. * @param mixed $resultModel 结果表数据
  370. * @param mixed $resultRecords 结果记录表数据
  371. * @param mixed $type 1:主队 2:客队 0:全部进球 (目前只传 0)
  372. * @param mixed $size 1:大 -1:小
  373. * @param mixed $halfType 1:上半场 2:下半场
  374. * @return string 1:赢 -1:输 2:平 3:赢半平半 4:输半平半
  375. */
  376. public function sizeHalf($model, $resultModel, $resultRecords, $type, $size, $halfType){
  377. $half = [1 => '上半场', 2 => '下半场'];
  378. // 倒叙
  379. $newResultRecords = array_reverse($resultRecords);
  380. // 查询最后的上半场的key值
  381. $upResultKey = array_search($half[1], array_column($newResultRecords, 'match_process'));
  382. if ($halfType == 1) {
  383. // 上半场总进球数
  384. $allGoal = intval($newResultRecords[$upResultKey] -> home_score) + intval($newResultRecords[$upResultKey] -> guest_score);
  385. // 上半场主队进球数
  386. $homeGoal = intval($newResultRecords[$upResultKey] -> home_score);
  387. // 上半场客队进球数
  388. $guestGoal = intval($newResultRecords[$upResultKey] -> guest_score);
  389. } else {
  390. // 查询最后的下半场的key值
  391. $downResultKey = array_search($half[2], array_column($newResultRecords, 'match_process'));
  392. // 下半场总进球数
  393. $allGoal = intval($newResultRecords[$downResultKey] -> home_score) + intval($newResultRecords[$downResultKey] -> guest_score) -
  394. intval($newResultRecords[$upResultKey] -> home_score) + intval($newResultRecords[$upResultKey] -> guest_score);
  395. // 下半场主队进球数
  396. $homeGoal = intval($newResultRecords[$downResultKey] -> home_score) - intval($newResultRecords[$upResultKey] -> home_score);
  397. // 下半场客队进球数
  398. $guestGoal = intval($newResultRecords[$downResultKey] -> guest_score) - intval($newResultRecords[$upResultKey] -> guest_score);
  399. }
  400. // 条件
  401. $condition = explode("/", $model -> condition);
  402. $resultArr = [];
  403. // 循环对比输赢
  404. foreach ($condition as $value) {
  405. $absValue = abs($value);
  406. if ($type == 1) {
  407. $resultScore = $homeGoal - $absValue;
  408. } elseif ($type == 2) {
  409. $resultScore = $guestGoal - $absValue;
  410. } else {
  411. $resultScore = $allGoal - $absValue;
  412. }
  413. if ($resultScore > 0) {
  414. $resultArr[] = 1;
  415. } elseif ($resultScore < 0) {
  416. $resultArr[] = -1;
  417. } else {
  418. $resultArr[] = 0;
  419. }
  420. }
  421. // 去重
  422. $resultUniqueArr = array_unique($resultArr);
  423. // 循环对比让球后输赢
  424. $count = count($resultUniqueArr);
  425. if ($count == 1) {
  426. // 如果猜中
  427. if ($resultUniqueArr[0] == $size) {
  428. return 1;
  429. } elseif ($resultUniqueArr[0] == 0) {
  430. // 如果平
  431. return 2;
  432. } else {
  433. // 如果猜错
  434. return -1;
  435. }
  436. } elseif (in_array($size, $resultUniqueArr)) {
  437. return 3;
  438. } else {
  439. return 4;
  440. }
  441. }
  442. /**
  443. * 全场|[主、客、平]|独赢
  444. * @param mixed $model 注单表数据
  445. * @param mixed $resultModel 结果表数据
  446. * @param mixed $resultRecords 结果记录表数据
  447. * @param mixed $type 1:主队 2:客队 0:平
  448. * @return string 1:赢 -1:输
  449. */
  450. public function winFull($model, $resultModel, $resultRecords, $type){
  451. // 主队得分
  452. $homeScore = intval($resultModel -> home_score);
  453. // 客队得分
  454. $guestScore = intval($resultModel -> guest_score);
  455. $difference = $homeScore - $guestScore;
  456. if ($difference > 0 && $type == 1) {
  457. return 1;
  458. } elseif ($difference < 0 && $type == 2) {
  459. return 1;
  460. } elseif ($difference == 0 && $type == 0) {
  461. return 1;
  462. } else {
  463. return -1;
  464. }
  465. }
  466. /**
  467. * 半场|[主、客、平]|独赢
  468. * @param mixed $model 注单表数据
  469. * @param mixed $resultModel 结果表数据
  470. * @param mixed $resultRecords 结果记录表数据
  471. * @param mixed $type 1:主队 2:客队 0:平
  472. * @param mixed $halfType 1:上半场 2:下半场
  473. * @return string 1:赢 -1:输
  474. */
  475. public function winHalf($model, $resultModel, $resultRecords, $type, $halfType){
  476. $half = [1 => '上半场', 2 => '下半场'];
  477. // 倒叙
  478. $newResultRecords = array_reverse($resultRecords);
  479. // 查询最后的上半场的key值
  480. $upResultKey = array_search($half[1], array_column($newResultRecords, 'match_process'));
  481. $homeScore = 0;
  482. $guestScore = 0;
  483. if ($halfType == 1) {
  484. // 主队得分
  485. $homeScore = intval($newResultRecords[$upResultKey] -> home_score);
  486. // 客队得分
  487. $guestScore = intval($newResultRecords[$upResultKey] -> guest_score);
  488. } else {
  489. // 查询最后的下半场的key值
  490. $downResultKey = array_search($half[2], array_column($newResultRecords, 'match_process'));
  491. // 下半场主队得分
  492. $homeScore = intval($newResultRecords[$downResultKey] -> home_score) - intval($newResultRecords[$upResultKey] -> home_score);
  493. // 下半场客队得分
  494. $guestScore = intval($newResultRecords[$downResultKey] -> guest_score) - intval($newResultRecords[$upResultKey] -> guest_score);
  495. }
  496. $difference = $homeScore - $guestScore;
  497. if ($difference > 0 && $type == 1) {
  498. return 1;
  499. } elseif ($difference < 0 && $type == 2) {
  500. return 1;
  501. } elseif ($difference == 0 && $type == 0) {
  502. return 1;
  503. } else {
  504. return -1;
  505. }
  506. }
  507. // first_last_ball最先/最后进球 开始-----------------------
  508. //主队|最先进球
  509. public function first_ball_home($model,$resultModel,$resultRecords){
  510. if ($resultModel->all_goal >0){
  511. if ($resultModel->first_score === $resultModel->home_team){
  512. return 1;
  513. }else{
  514. return -1 ;
  515. }
  516. }
  517. return 2 ;
  518. }
  519. //客队|最先进球
  520. public function first_ball_guest($model,$resultModel,$resultRecords){
  521. if ($resultModel->all_goal >0){
  522. if ($resultModel->first_score === $resultModel->guest_team){
  523. return 1;
  524. }else{
  525. return -1 ;
  526. }
  527. }
  528. return 2 ;
  529. }
  530. //主队|最后进球
  531. public function last_ball_home($model,$resultModel,$resultRecords){
  532. if ($resultModel->all_goal >0){
  533. if ($resultModel->last_score === $resultModel->home_team){
  534. return 1;
  535. }else{
  536. return -1 ;
  537. }
  538. }
  539. return 2 ;
  540. }
  541. //客队|最后进球
  542. public function last_ball_guest($model,$resultModel,$resultRecords){
  543. if ($resultModel->all_goal >0){
  544. if ($resultModel->last_score === $resultModel->guest_team){
  545. return 1;
  546. }else{
  547. return -1 ;
  548. }
  549. }
  550. return 2 ;
  551. }
  552. //没有进球
  553. public function not_ball($model,$resultModel,$resultRecords){
  554. if ($resultModel->all_goal <=0){
  555. return 1 ;
  556. }else{
  557. return -1 ;
  558. }
  559. }
  560. ////////// first_last_ball最先/最后进球 结束-----------------------
  561. /**
  562. * 足球波胆 规则
  563. * @param $bet_match 投注赛事数据
  564. * @param $result_match 最终结果
  565. * @param $result_match_r 结果记录
  566. */
  567. public function bodan($bet_match,$result_match,$result_match_r){
  568. // $bet_match = DB::table('money_buy_match')->where('match_id', 3150765)->first();
  569. // $result_match = DB::table('st_zq_result')->where('match_id', 3150765)->first();
  570. // $result_match_r = DB::table('st_zq_result_record')->where('match_id', 3150765)->get()->toArray();
  571. //获取父/子级赔率代码
  572. $p_code = $bet_match->p_code;
  573. $odds_code = $bet_match->odds_code;
  574. //获取主客队投注比分
  575. $bet_score = explode('-', $bet_match->condition);
  576. $bet_home_score = (int)$bet_score[0];
  577. $bet_guest_score = (int)$bet_score[1];
  578. if($p_code != 'bodan') return false;
  579. if(strstr($odds_code,"half")){//上半场
  580. //获取上半场最终数据
  581. $last_half_data = $this->getHalfData($result_match_r);
  582. //获取主客队上半场得分
  583. $home_score = $last_half_data->home_score;
  584. $guest_score = $last_half_data->guest_score;
  585. if(strstr($bet_match->condition,"其他") ){
  586. if(($home_score > 3) || ($guest_score > 3)) return 1;
  587. }
  588. }else{//全场
  589. //获取主客队全场得分
  590. $home_score = $result_match->home_score;
  591. $guest_score = $result_match->guest_score;
  592. if(strstr($bet_match->condition,"其他") ){
  593. if(($home_score > 4) || ($guest_score > 4)) return 1;
  594. }
  595. }
  596. //判断结果
  597. if($bet_home_score == $home_score and $bet_guest_score == $guest_score) return 1;
  598. return -1;
  599. }
  600. //结果单/双 home_score 主队进球数 guest_score 客队进球数 home_rate 主队让球 guest_rate 客队让球
  601. public function two_sides($model,$resultModel,$resultRecords){
  602. $resulttod = intval($resultModel->home_score) + intval($resultModel->guest_score) + intval($resultModel->guest_rate) + intval($resultModel->home_rate);
  603. if($resulttod%2==0){
  604. $data = '双';
  605. }else{
  606. $data = '单';
  607. }
  608. if($data = $model->condition){
  609. return 1;
  610. }else{
  611. return -1;
  612. }
  613. }
  614. //结果总数 home_score 主队进球数 guest_score 客队进球数 home_rate 主队让球 guest_rate 客队让球 u_home_score 上半场-主队进球数 u_guest_score 上半场-客队进球数
  615. public function total_goal($model,$resultModel,$resultRecords){
  616. //全场总进球数
  617. $resulttod = intval($resultModel->home_score) + intval($resultModel->guest_score) + intval($resultModel->guest_rate) + intval($resultModel->home_rate);
  618. //上半场总进球数
  619. $Firsthalftod = intval($resultModel->home_score) + intval($resultModel->guest_score) + intval($resultModel->u_home_score) + intval($resultModel->u_guest_score);
  620. $qjnum = explode(',', $model->condition);
  621. if($qjnum[0]<$resulttod and $qjnum[1]>$resulttod){
  622. return 1;
  623. }else{
  624. return -1;
  625. }
  626. }
  627. /**
  628. * 半场/全场 投注规则
  629. */
  630. public function half_full($bet_match,$result_match,$result_match_r){
  631. // $bet_match = DB::table('money_buy_match')->where('match_id', 3144414)->first();
  632. // $result_match = DB::table('st_zq_result')->where('match_id', 3144414)->first();
  633. // $result_match_r = DB::table('st_zq_result_record')->where('match_id', 3144414)->get()->toArray();
  634. if(empty($bet_match) || empty($result_match) || empty($result_match_r)) return false;
  635. //获取父/子级赔率代码
  636. $p_code = $bet_match->p_code;
  637. $odds_code = $bet_match->odds_code;
  638. //获取上半场最终数据
  639. $last_half_data = $this->getHalfData($result_match_r);
  640. //获取主客队上半场得分
  641. $half_home_score = $last_half_data->home_score;
  642. $half_guest_score = $last_half_data->guest_score;
  643. //获取主客队全场得分
  644. $full_home_score = $result_match->home_score;
  645. $full_guest_score = $result_match->guest_score;
  646. //半场/全场盘口
  647. if($p_code != 'half_full') return false;
  648. switch ($odds_code ) {
  649. case 'half_full_home_home':// 主-主
  650. if($half_home_score > $half_guest_score and $full_home_score > $full_guest_score) return 1;
  651. break;
  652. case 'half_full_home_dogfall':// 主-和
  653. if($half_home_score > $half_guest_score and $full_home_score == $full_guest_score) return 1;
  654. break;
  655. case 'half_full_home_guest':// 主-客
  656. if($half_home_score > $half_guest_score and $full_home_score < $full_guest_score) return 1;
  657. break;
  658. case 'half_full_dogfall_home':// 和-主
  659. if($half_home_score == $half_guest_score and $full_home_score > $full_guest_score) return 1;
  660. break;
  661. case 'half_full_dogfall_dogfall':// 和-和
  662. if($half_home_score == $half_guest_score and $full_home_score == $full_guest_score) return 1;
  663. break;
  664. case 'half_full_dogfall_guest':// 和-客
  665. if($half_home_score == $half_guest_score and $full_home_score < $full_guest_score) return 1;
  666. break;
  667. case 'half_full_guest_home':// 客-主
  668. if($half_home_score < $half_guest_score and $full_home_score > $full_guest_score) return 1;
  669. break;
  670. case 'half_full_guest_dogfall':// 客-和
  671. if($half_home_score < $half_guest_score and $full_home_score == $full_guest_score) return 1;
  672. break;
  673. case 'half_full_guest_guest':// 客-客
  674. if($half_home_score < $half_guest_score and $full_home_score < $full_guest_score) return 1;
  675. break;
  676. default:
  677. return false;
  678. }
  679. return -1;
  680. }
  681. /**
  682. * @param $result_match_r 赛事结果记录
  683. * @return mixed 返回最新一条上半场结果数据
  684. */
  685. public function getHalfData($result_match_r=[]){
  686. if(empty($result_match_r)) return false;
  687. $half_data = [];
  688. foreach ($result_match_r as $k=>$v){
  689. //取出上半场数据
  690. if($v->match_process == '上半场'){
  691. $half_data[] = $v;
  692. }
  693. }
  694. //根据id倒序排列
  695. $half_data_sorc = array_column($half_data,'id');
  696. array_multisort($half_data_sorc,SORT_DESC,$half_data);
  697. //获取id最大的一条数据
  698. foreach ($half_data as $k=>$v){
  699. if($v->id == $half_data_sorc[0]){
  700. $last_half_data = $v;
  701. }
  702. }
  703. return $last_half_data;
  704. }
  705. /**
  706. * 冠军盘口投注
  707. * $bet_match 投注赛事数据
  708. * $result_match 联赛结果 数据 根据玩法代码查询一条
  709. * $result_match_r 无用参数
  710. */
  711. public function gj($bet_match,$result_match,$result_match_r){
  712. // $bet_match = DB::table('money_buy_match')->where('match_id', 127317)->first();
  713. // $bet_match->odds_code = '巴西小组赛积分成绩';
  714. // $result_match = DB::table('st_zq_league_result')->where(['lg_id'=>27317,'game_name'=>$bet_match->odds_code])->first();
  715. if(empty($bet_match) || empty($result_match) ) return false;
  716. if($bet_match->p_code != 'gj') return false;//冠军玩法
  717. if($bet_match->odds_code == $result_match->game_name){
  718. $condition = $bet_match->condition;
  719. //进球数判断
  720. if(strpos($bet_match->odds_code,'进球数') !== false){
  721. //获取数值
  722. $bet = $this->findNum($condition);
  723. //以上/以下判断
  724. if(strpos($condition,'上') !== false){
  725. if($bet < $result_match->result) return 1;
  726. }
  727. if(strpos($condition,'下') !== false){
  728. if($bet > $result_match->result) return 1;
  729. }
  730. //大/小判断
  731. if(strpos($condition,'大') !== false){
  732. if($bet < $result_match->result) return 1;
  733. }
  734. if(strpos($condition,'小') !== false){
  735. if($bet > $result_match->result) return 1;
  736. }
  737. }
  738. //积分成绩判断
  739. if(strpos($bet_match->odds_code,'积分') !== false){
  740. $condition = $bet_match->condition;
  741. //获取数值
  742. $bet = $this->findNum($condition);
  743. if($bet == $result_match->result) return 1;
  744. }
  745. //如果条件中没有数字,则获取球队/球员结果
  746. if((preg_match('/\d+/',$condition)) == 0){
  747. $result = $this->teamJudge($condition,$result_match->result);
  748. if($result) return 1;
  749. };
  750. return false;
  751. }
  752. return -1;
  753. }
  754. /**
  755. * 冠军盘口 球队/球员结果判断
  756. */
  757. public function teamJudge($condition,$result){
  758. //返回结果数组中是否包含该球队
  759. $result = in_array($condition,json_decode($result,true));
  760. return $result;
  761. }
  762. /**
  763. * @param string $str
  764. * @return string
  765. * 处理字符串中的数字
  766. */
  767. public function findNum($str=''){
  768. $str=trim($str);
  769. if(empty($str)){return '';}
  770. $result='';
  771. for($i=0;$i<strlen($str);$i++){
  772. if(is_numeric($str[$i]) || $str[$i] == '.' ){
  773. $result.=$str[$i];
  774. }
  775. }
  776. //如果有小数点,返回浮点数
  777. if(strpos($result,'.')) return floatval($result);
  778. //返回整数
  779. return (int)$result;
  780. }
  781. }