CommonFunction.php 48 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396
  1. <?php
  2. namespace Biz\Common;
  3. class CommonFunction {
  4. function checkDebug()
  5. {
  6. return (isset($_GET['debug']) && intval($_GET['debug'])==-99999) || APP_DEBUG==1?1:0;
  7. }
  8. function View($Path = "") {
  9. if (!$Path) {
  10. global $ViewPath;
  11. $ViewPath = explode("\\", $ViewPath);
  12. $ViewPath[3] = explode("Controller", $ViewPath[3]);
  13. $ViewPath[3] = $ViewPath[3][0];
  14. return APP_PATH . "/" . $ViewPath[1] . "/View/" . $ViewPath[3] . "/" . $ViewPath[4] . ".blade.php";
  15. } else {
  16. return APP_PATH . "/" . $Path . ".blade.php";
  17. }
  18. }
  19. function arrayToOptions($data, $key, $val)
  20. {
  21. $options = array();
  22. if (is_array($data) && count($data)) {
  23. foreach ($data as $k => $value) {
  24. $options[$value[$key]] = $value[$val];
  25. }
  26. }
  27. return $options;
  28. }
  29. function M($TABLE_NAME = "") {
  30. return new DB($TABLE_NAME);
  31. }
  32. function checkClose() {
  33. if (file_exists(ROOT_PATH . '/Cache/system.lock')) {
  34. if (is_mobile()) {
  35. return appExec("Mobile", "Weihu", "index");
  36. } else {
  37. return appExec("home", "weihu", "index");
  38. }
  39. }
  40. }
  41. /**
  42. * 发布消息
  43. *
  44. * @param integer $status
  45. * @param string $msg
  46. * @param string $data
  47. * @return void
  48. */
  49. function publishNotify($channel, $status = 1, $data = '') {
  50. // toLog('publishNotify-'.$channel.'+++'.$data);
  51. C()->get('msg')->publish($channel, $data);
  52. }
  53. /**
  54. * 数组分类排序
  55. * @param [array] $columnsArr [需要进行排序的数组]
  56. * @param [int] $plmid [所属分类ID]
  57. */
  58. function getColumns($columnsArr, $plmid) {
  59. $menu = array();
  60. foreach ($columnsArr as $v) {
  61. if ($v['plmid'] == $plmid) {
  62. $menu[] = $v;
  63. $a = getColumns($columnsArr, $v['lmid']);
  64. foreach ($a as $vv) {
  65. $menu[] = $vv;
  66. }
  67. }
  68. }
  69. return $menu;
  70. }
  71. /**
  72. * 获取客户端真实IP
  73. */
  74. function GETIP() {
  75. global $ip;
  76. if (getenv("HTTP_CLIENT_IP")) {
  77. $ip = getenv("HTTP_CLIENT_IP");
  78. } else if (getenv("HTTP_X_FORWARDED_FOR")) {
  79. $ip = getenv("HTTP_X_FORWARDED_FOR");
  80. } else if (getenv("REMOTE_ADDR")) {
  81. $ip = getenv("REMOTE_ADDR");
  82. } else {
  83. $ip = "Unknow";
  84. }
  85. return $ip;
  86. }
  87. function dump($data, $exit = 1) {
  88. echo "<pre>";
  89. print_r($data);
  90. echo "</pre>";
  91. if ($exit) {
  92. exit;
  93. }
  94. }
  95. function OrderID($prefix = '') {
  96. $num = mt_rand(100, 999);
  97. list($s, $m) = explode(' ', microtime());
  98. $order = date("YmdHis") . ($s * 1000000) . $num;
  99. return $prefix . $order;
  100. }
  101. /**
  102. * 容器
  103. */
  104. function C() {
  105. static $c = array();
  106. if (!isset($c['container'])) {
  107. $c['container'] = new \System\Di();
  108. }
  109. return $c['container'];
  110. }
  111. /**
  112. * 全局变量快捷操作
  113. * @param [type] $key [description]
  114. * @param [type] $value [description]
  115. */
  116. function S($key, $value = null) {
  117. if ($value != null) {
  118. $GLOBALS[$key] = $value;
  119. }
  120. if (isset($GLOBALS[$key])) {
  121. return $GLOBALS[$key];
  122. }
  123. }
  124. /**
  125. * 载入模型
  126. * @param [type] $name [description]
  127. * @param string $proj [description]
  128. * @return [type] [description]
  129. */
  130. function lm($name, $proj = '') {
  131. $proj = empty($proj) ? S('CUR_PROJECT') : $proj;
  132. if (empty($proj)) {
  133. throw new \Exception("项目{$proj}不存在", 1);
  134. }
  135. $cls = "\\App\\" . ucfirst($proj) . "\\Model\\" . ucfirst($name);
  136. if(!class_exists($cls)){
  137. return;
  138. }
  139. $key = 'model_' . $name . $proj;
  140. C()->shared($key, $cls);
  141. return C()->get($key);
  142. }
  143. /**
  144. * 载入语言包
  145. * @param string $key 语言项
  146. * @param string $file 语言文件名
  147. * @param string $proj 项目名称
  148. * @return [type] [description]
  149. */
  150. function lang($file = '', $proj = '') {
  151. $proj = empty($proj) ? S('CUR_PROJECT') : $proj;
  152. $file = empty($file) ? S('CUR_CONTROLLER') : $file;
  153. $ckey = "Lang_{$proj}_{$file}";
  154. if (C()->has($ckey)) {
  155. return C()->get($ckey);
  156. } else {
  157. C()->shared($ckey, function () use ($proj, $file) {
  158. $file = ucfirst($file);
  159. $proj = ucfirst($proj);
  160. $lang = new \System\Lang();
  161. $lang_files = array();
  162. if (S('CUR_PROJECT') == $proj && S('CUR_CONTROLLER') == $file) {
  163. $lang_files[] = ROOT_PATH . "/Application/Commons/Lang/Common.php";
  164. $lang_files[] = ROOT_PATH . "/Application/{$proj}/Lang/Common.php";
  165. }
  166. $lang_files[] = ROOT_PATH . "/Application/{$proj}/Lang/{$file}.php";
  167. $data = array();
  168. foreach ($lang_files as $v) {
  169. if (file_exists($v)) {
  170. $data2 = include $v;
  171. if (is_array($data2)) {
  172. $data = array_merge($data, $data2);
  173. }
  174. }
  175. }
  176. $lang->load($data);
  177. return $lang;
  178. });
  179. return C()->get($ckey);
  180. }
  181. }
  182. /**
  183. * 标签替换
  184. *
  185. * @param [type] $message
  186. * @param array $data
  187. * @param string $tag
  188. * @return void
  189. */
  190. function parseTag($message,$data=array(),$tag='#'){
  191. if(is_array($data) && count($data)>0){
  192. foreach ($data as $k => $v) {
  193. $message = str_replace($tag . $k . $tag, $v, $message);
  194. }
  195. }
  196. return $message;
  197. }
  198. function appExec($proj, $ctrl, $method, $exec = 0) {
  199. $proj = ucfirst($proj);
  200. $ctrl = ucfirst($ctrl);
  201. $method = ucfirst($method);
  202. S('CUR_PROJECT', $proj);
  203. S('CUR_CONTROLLER', $ctrl);
  204. S('CUR_METHOD', $method);
  205. checkPlatform();
  206. toDomain();
  207. //设置REMOTE_KEY
  208. lm('setinfo','commons')->setKey();
  209. $cls = "\\App\\{$proj}\\Controller\\{$ctrl}";
  210. C()->set($ctrl, $cls);
  211. $cls = C()->get($ctrl);
  212. if (!$cls) {
  213. exit("404 NOT FOUND");
  214. }
  215. if ($exec) {
  216. $result = $cls->$method();
  217. if (!empty($result)) {
  218. Render($result);
  219. }
  220. }
  221. if (method_exists($cls, $method)) {
  222. $result = $cls->$method();
  223. if (!empty($result)) {
  224. Render($result);
  225. }
  226. } else {
  227. exit("404 METHOD NOT FOUND");
  228. }
  229. }
  230. /**
  231. * UUID 生成
  232. */
  233. function UUID() {
  234. $prefix = '';
  235. $uuid = '';
  236. $str = md5(uniqid(mt_rand(), true));
  237. $uuid = substr($str, 0, 8) . '-';
  238. $uuid .= substr($str, 8, 4) . '-';
  239. $uuid .= substr($str, 12, 4) . '-';
  240. $uuid .= substr($str, 16, 4) . '-';
  241. $uuid .= substr($str, 20, 12);
  242. return $prefix . $uuid;
  243. }
  244. /**
  245. *密码加密码
  246. */
  247. function GenEncryption() {
  248. srand((double) microtime() * 1000000); //create a random number feed.
  249. $ychar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
  250. $list = explode(",", $ychar);
  251. $authnum = "";
  252. for ($i = 0; $i < 6; $i++) {
  253. $randnum = rand(0, 61); // 10+26;
  254. $authnum .= $list[$randnum];
  255. }
  256. return $authnum;
  257. }
  258. //密码加密
  259. function GenPassword($password) {
  260. $Enc = GenEncryption();
  261. $Pwd = md5(md5($Enc . $password));
  262. return array("encryption" => $Enc, "password" => $Pwd);
  263. }
  264. //密码验证
  265. function VerPassword($identity, $password) {
  266. $account = M("account_password")->where("account_identity = '$identity' and", "status = ", '1')->select("encryption,account_password")->find();
  267. $VerPwd = md5(md5($account["encryption"] . $password));
  268. if ($VerPwd == $account["account_password"]) {
  269. unset($account);
  270. unset($VerPwd);
  271. return true;
  272. } else {
  273. unset($account);
  274. unset($VerPwd);
  275. return false;
  276. }
  277. }
  278. /**
  279. * Json return
  280. * @param string $data [description]
  281. * @param string $status [description]
  282. * @param string $msg [description]
  283. * @param string $method [description]
  284. */
  285. function JsonReturn($data = "", $status = "200", $msg = "", $method = "") {
  286. // header("Content-type:application/json;charset:utf-8");
  287. // header('content-type:text/html; charset=utf-8');
  288. if(isset($_REQUEST['crossdomain']) && !empty($_REQUEST['crossdomain'])){
  289. header("Access-Control-Allow-Origin:{$_REQUEST['crossdomain']}");
  290. }else{
  291. header("Access-Control-Allow-Origin:*");
  292. }
  293. header('Access-Control-Allow-Methods:POST,GET,PUT,DELETE,OPTIONS');
  294. header('Access-Control-Allow-Credentials:true');
  295. $retdata=array("status" => $status, "msg" => $msg, "data" =>$data);
  296. $devicetype=isset($_REQUEST['devicetype'])?trim($_REQUEST['devicetype']):'';
  297. if(!empty($devicetype) && in_array($devicetype,array('ios','android'))){
  298. $path=S('CUR_PROJECT').'/'.S('CUR_CONTROLLER').'/'. S('CUR_METHOD');
  299. $retdata=C()->get($devicetype."Result")->update($path,$retdata);
  300. }
  301. if ($method == '') {
  302. //dump($devicetype);
  303. echo (json_encode($retdata,JSON_UNESCAPED_UNICODE));
  304. } else {
  305. echo ($method . "(" . json_encode($retdata,JSON_UNESCAPED_UNICODE) . ")");
  306. }
  307. }
  308. function XmlReturn($data = "", $status = 200, $msg = '') {
  309. // header("Content-type:text/xml;charset:utf-8");
  310. $xml = '<?xml version="1.0" encoding="utf-8"?>';
  311. $xml .= "<root>";
  312. $xml .= '<status>' . $status . '</status>';
  313. $xml .= '<msg>' . $msg . '</msg>';
  314. $xml .= "<rows>";
  315. $xml .= toXml($data);
  316. $xml .= "</rows>";
  317. $xml .= "</root>";
  318. echo($xml);
  319. }
  320. function toXml($data) {
  321. // print_r($data);
  322. $xml = '';
  323. if (is_array($data) && count($data) > 0) {
  324. foreach ($data as $k => $v) {
  325. $key = $k;
  326. if (is_numeric($k)) {
  327. $key = 'data';
  328. }
  329. if (is_array($v)) {
  330. $xml .= "<{$key}>" . toXml($v) . "</{$key}>";
  331. continue;
  332. }
  333. if (is_string($v)) {
  334. $xml .= "<{$key}>{$v}</{$key}>";
  335. }
  336. }
  337. }
  338. return $xml;
  339. }
  340. function WriteLog($Log) {
  341. $logger = new Logger('LOGGS');
  342. $logURI = "Cache/log/" . date("Y-m-d-H-i") . ".log";
  343. $logger->pushHandler(new StreamHandler($logURI, Logger::DEBUG));
  344. $logger->pushHandler(new FirePHPHandler());
  345. $logger->addInfo(var_export($Log,1));
  346. }
  347. /**
  348. * 计算当前用时
  349. *
  350. * @param string $runName
  351. * @param integer $return
  352. * @return void
  353. */
  354. function computeTime($runName='',$return=0,$start=1){
  355. $curTime= get_millisecond();
  356. $numTime=$curTime-(intval($GLOBALS['startTime'])*1000);
  357. if($return){
  358. return array('curTime'=>$curTime,'numTime'=>$numTime,'runName'=>$runName);
  359. }else{
  360. echo "<pre>执行{$runName} 功能,当前时间为:{$curTime},累积用时: {$numTime}</pre>";
  361. return;
  362. }
  363. }
  364. function get_millisecond()
  365. {
  366. list($usec, $sec) = explode(" ", microtime());
  367. $msec = round($usec * 1000);
  368. return $sec . $msec;
  369. }
  370. function toLog($text, $rewrite = 0) {
  371. $data = "=============" . date("Y-m-d H:i", time()) . "==========================================" . chr(13);
  372. $data .= var_export($text, 1) . chr(13);
  373. $data .= "======================================================================================" . chr(13);
  374. $data = iconv('utf-8', 'gb2312', $data);
  375. if ($rewrite) {
  376. file_put_contents(ROOT_PATH . '/logs.txt', $data);
  377. } else {
  378. file_put_contents(ROOT_PATH . '/logs.txt', $data, FILE_APPEND);
  379. }
  380. }
  381. /**
  382. * 发送数据到前台,根据请求的数据格式返回相应的数据
  383. * @param [type] $data [description]
  384. * @param string $status [description]
  385. * @param string $msg [description]
  386. */
  387. function Render($data, $status = "1", $msg = "", $method = '') {
  388. $format = S('CUR_RETURN_FORMAT');
  389. $msg = empty($msg) ? lang('errors', 'api')->get('error' . $status) : $msg;
  390. if (empty($format) || $format == 'json') {
  391. JsonReturn($data, $status, $msg);
  392. }
  393. if ($format == 'xml') {
  394. XmlReturn($data, $status, $msg);
  395. }
  396. exit;
  397. }
  398. function _beginTransaction() {
  399. S('DB')->beginTransaction();
  400. }
  401. function _rollBack() {
  402. S('DB')->rollBack();
  403. }
  404. function _commit() {
  405. S('DB')->commit();
  406. }
  407. /**
  408. * 服务
  409. *
  410. * @param string 服务名称
  411. * @param array $params
  412. * @return void
  413. */
  414. function SRV($name, $params = array()) {
  415. return C()->get($name)->update($params);
  416. }
  417. /**
  418. * 是否验证token过期
  419. *
  420. * @return bool
  421. */
  422. function isCheckToken() {
  423. $result = true;
  424. $allowMethod = include ROOT_PATH . "/Config/AllowMethod.php";
  425. $key = S('CUR_PROJECT') . '/' . S('CUR_CONTROLLER') . '/' . S('CUR_METHOD');
  426. if ($allowMethod[$key] == 1) {
  427. $result = false;
  428. }
  429. return $result;
  430. }
  431. function checkPlatform(){
  432. if(isset($_GET['platform'])){
  433. $_SESSION['platform']=$_GET['platform']=='wap'?1:0;
  434. }
  435. if(isset($_GET['clearPlatform']) && intval($_GET['clearPlatform'])==1){
  436. $_SESSION['platform']=null;
  437. }
  438. }
  439. function is_mobile() {
  440. if(isset($_SESSION['platform']) && $mobile=intval($_SESSION['platform'])>0 ){
  441. return $mobile==1?true:false;
  442. }
  443. $user_agent = $_SERVER['HTTP_USER_AGENT'];
  444. $mobile_agents = Array("240x320", "acer", "acoon", "acs-", "abacho", "ahong", "airness", "alcatel", "amoi", "android", "anywhereyougo.com", "applewebkit/525", "applewebkit/532", "asus", "audio", "au-mic", "avantogo", "becker", "benq", "bilbo", "bird", "blackberry", "blazer", "bleu", "cdm-", "compal", "coolpad", "danger", "dbtel", "dopod", "elaine", "eric", "etouch", "fly ", "fly_", "fly-", "go.web", "goodaccess", "gradiente", "grundig", "haier", "hedy", "hitachi", "htc", "huawei", "hutchison", "inno", "ipad", "ipaq", "ipod", "jbrowser", "kddi", "kgt", "kwc", "lenovo", "lg ", "lg2", "lg3", "lg4", "lg5", "lg7", "lg8", "lg9", "lg-", "lge-", "lge9", "longcos", "maemo", "mercator", "meridian", "micromax", "midp", "mini", "mitsu", "mmm", "mmp", "mobi", "mot-", "moto", "nec-", "netfront", "newgen", "nexian", "nf-browser", "nintendo", "nitro", "nokia", "nook", "novarra", "obigo", "palm", "panasonic", "pantech", "philips", "phone", "pg-", "playstation", "pocket", "pt-", "qc-", "qtek", "rover", "sagem", "sama", "samu", "sanyo", "samsung", "sch-", "scooter", "sec-", "sendo", "sgh-", "sharp", "siemens", "sie-", "softbank", "sony", "spice", "sprint", "spv", "symbian", "tablet", "talkabout", "tcl-", "teleca", "telit", "tianyu", "tim-", "toshiba", "tsm", "up.browser", "utec", "utstar", "verykool", "virgin", "vk-", "voda", "voxtel", "vx", "wap", "wellco", "wig browser", "wii", "windows ce", "wireless", "xda", "xde", "zte");
  445. $is_mobile = false;
  446. foreach ($mobile_agents as $device) {
  447. if (stristr($user_agent, $device)) {
  448. $is_mobile = true;
  449. break;
  450. }
  451. }
  452. return $is_mobile;
  453. }
  454. function toDomain() {
  455. $domain = $_SERVER['HTTP_HOST'];
  456. $config = include ROOT_PATH . '/Config/Domain.php';
  457. $is_mobile = is_mobile();
  458. $curDomain = $old_domain = $domain;
  459. if (is_array($config) && count($config) > 0) {
  460. $domains = array();
  461. $domains[] = $domain;
  462. if ($is_mobile) {
  463. $domains[] = str_replace('www.', 'm.', $domain);
  464. $domains[] = 'm.' . $domain;
  465. } else {
  466. $domains[] = str_replace('m.', '', $domain);
  467. $domains[] = str_replace('m.', 'www.', $domain);
  468. }
  469. foreach ($domains as $key => $value) {
  470. if (isset($config[$value])) {
  471. $v = $config[$value];
  472. if ($v == 'pay') {
  473. return;
  474. }
  475. if ($is_mobile) {
  476. if ($v == 'pc') {
  477. continue;
  478. }
  479. } else {
  480. if ($v != 'pc') {
  481. continue;
  482. }
  483. }
  484. $curDomain = $value;
  485. // $_SESSION['domain']=$value;
  486. }
  487. }
  488. }
  489. // echo $curDomain;
  490. if ($is_mobile) {
  491. if (S('CUR_PROJECT') == 'Home') {
  492. header("Location:http://" . $curDomain . "/m");
  493. //header("Location:http://" . $curDomain . "/mobile-index/index");
  494. }
  495. } else {
  496. if (S('CUR_PROJECT') == 'Mobile') {
  497. header("Location:http://" . $curDomain . "/home-index/index");
  498. }
  499. }
  500. /**
  501. * 数据签名认证
  502. * @param array $data 被认证的数据
  503. * @return string 签名
  504. */
  505. function data_auth_sign($data) {
  506. //数据类型检测
  507. if (!is_array($data)) {
  508. $data = (array) $data;
  509. }
  510. ksort($data); //排序
  511. $code = http_build_query($data); //url编码并生成query字符串
  512. $sign = sha1($code); //生成签名
  513. return $sign;
  514. }
  515. /*
  516. * 判断用户是否登录
  517. * */
  518. function isLogin($str = '',$type='agent') {
  519. $session = $_SESSION[$type.'Info'];
  520. if(empty($session)){
  521. return null;
  522. }
  523. if($type=='agent'){
  524. if($str=='name'){
  525. return $session['agent_user'];
  526. }
  527. if($str=='uid'){
  528. return $session['user_identity'];
  529. }
  530. }
  531. }
  532. }
  533. function jump($url){
  534. header('Location:'.$url);
  535. }
  536. //手机中间星号
  537. function phoneHide($phone)
  538. {
  539. if (!empty($phone)) {
  540. $phone = substr_replace($phone, '****', 3, 4);
  541. }
  542. return $phone;
  543. }
  544. /**
  545. * @param $game_code 球类代码
  546. * @param int $isJoin 是否用于join
  547. * @return array
  548. * @throws Exception
  549. * 根据球类代码 定义相关model
  550. */
  551. function getModels($game_code,$isJoin=1){
  552. $game_type = lm('GameType', 'Sports')->where('game_code',$game_code)->select('game_code')->first();
  553. // 获取不同球类model
  554. if($isJoin == 1){
  555. switch ($game_type->game_code){
  556. case 'zq':
  557. $model_league = 'st_zq_league';
  558. $model_match = 'st_zq_competition';
  559. $model_odds = 'st_zq_odds';
  560. $model_odds_record = 'st_zq_odds_record';
  561. $model_result = 'st_zq_result';
  562. $model_result_record = 'st_zq_result_record';
  563. $model_league_result = 'st_zq_league_result';
  564. $model_local_league = 'st_zq_local_league';
  565. $model_local_match = 'st_zq_local_match';
  566. $model_result_express = 'st_zq_result_express';
  567. break;
  568. case 'lq':
  569. $model_league = 'st_lq_league';
  570. $model_match = 'st_lq_competition';
  571. $model_odds = 'st_lq_odds';
  572. $model_odds_record = 'st_lq_odds_record';
  573. $model_result = 'st_lq_result';
  574. $model_result_record = 'st_lq_result_record';
  575. $model_league_result = 'st_lq_league_result';
  576. $model_local_league = 'st_lq_local_league';
  577. $model_local_match = 'st_lq_local_match';
  578. $model_result_express = 'st_lq_result_express';
  579. break;
  580. case 'wq':
  581. $model_league = 'st_wq_league';
  582. $model_match = 'st_wq_competition';
  583. $model_odds = 'st_wq_odds';
  584. $model_odds_record = 'st_wq_odds_record';
  585. $model_result = 'st_wq_result';
  586. $model_result_record = 'st_wq_result_record';
  587. $model_league_result = 'st_wq_league_result';
  588. $model_local_league = 'st_wq_local_league';
  589. $model_local_match = 'st_wq_local_match';
  590. $model_result_express = 'st_wq_result_express';
  591. break;
  592. case 'bq':
  593. $model_league = 'st_bq_league';
  594. $model_match = 'st_bq_competition';
  595. $model_odds = 'st_bq_odds';
  596. $model_odds_record = 'st_bq_odds_record';
  597. $model_result = 'st_bq_result';
  598. $model_result_record = 'st_bq_result_record';
  599. $model_league_result = 'st_bq_league_result';
  600. $model_local_league = 'st_bq_local_league';
  601. $model_local_match = 'st_bq_local_match';
  602. $model_result_express = 'st_bq_result_express';
  603. break;
  604. case 'gj':
  605. $model_league = 'st_zq_league';
  606. $model_match = 'st_zq_competition';
  607. $model_odds = 'st_zq_odds';
  608. $model_result = 'st_zq_result';
  609. break;
  610. default:
  611. throw new \Exception(Render([], '10002', lang('Tips','Sports')->get('PARAM_ERROR')));
  612. }
  613. }else{
  614. switch ($game_type->game_code){
  615. case 'zq':
  616. $model_league = 'st_zq_league';
  617. $model_match = 'st_zq_competition';
  618. $model_odds = 'st_zq_odds';
  619. $model_result = 'SoccerResult';
  620. break;
  621. case 'lq':
  622. $model_league = 'st_lq_league';
  623. $model_match = 'st_lq_competition';
  624. $model_odds = 'st_lq_odds';
  625. $model_result = 'BasketballResult';
  626. break;
  627. case 'wq':
  628. $model_league = 'st_wq_league';
  629. $model_match = 'st_wq_competition';
  630. $model_odds = 'st_wq_odds';
  631. $model_result = 'TennisResult';
  632. break;
  633. case 'bq':
  634. $model_league = 'st_bq_league';
  635. $model_match = 'st_bq_competition';
  636. $model_odds = 'st_bq_odds';
  637. $model_result = 'BaseballResult';
  638. break;
  639. case 'gj':
  640. $model_league = 'st_zq_league';
  641. $model_match = 'st_zq_competition';
  642. $model_odds = 'st_zq_odds';
  643. $model_result = 'SoccerResult';
  644. break;
  645. default:
  646. throw new \Exception(Render([], '10002', lang('Tips','Sports')->get('PARAM_ERROR')));
  647. }
  648. }
  649. $data = [
  650. 'model_league'=>$model_league,//联赛
  651. 'model_match'=>$model_match,//赛事
  652. 'model_odds'=>$model_odds,//赔率
  653. 'model_result' =>$model_result,//赛事结果
  654. 'model_odds_record' => $model_odds_record,//赔率记录
  655. 'model_result_record' =>$model_result_record,//赛事结果记录
  656. 'model_league_result'=>$model_league_result,//联赛结果
  657. 'model_local_league'=>$model_local_league,//本地关联联赛
  658. 'model_local_match'=>$model_local_match,//本地关联赛事
  659. 'model_result_express' =>$model_result_express,//赛果
  660. ];
  661. return $data;
  662. }
  663. /**
  664. * @param $type_code 状态码
  665. * @param $model_match 赛事表名
  666. * @param $game_code 球类代码
  667. * @return array
  668. * @throws \Exception
  669. * 获取不同状态下的 查询条件
  670. */
  671. function getState($type_code,$model_match = '',$game_code, $p_code){
  672. if($model_match == ''){
  673. switch ($type_code){
  674. case 'StRollBall'://滚球 正在进行
  675. //追加不同球类的滚球时间
  676. if($game_code == 'zq' || $game_code == 'gj'){
  677. $where = [
  678. // ['is_rollball','=',1],
  679. // ['status','<','2'],
  680. // ['match_date','=',date("Y-m-d")],
  681. // ['match_time','>',date("H:i:s", time()-(120*60))],
  682. // ['match_time','<',date("H:i:s", time())]
  683. ['status','=','1']
  684. ];
  685. }
  686. if($game_code == 'lq'){
  687. $where = [
  688. // ['is_rollball','=',1],
  689. // ['status','<','2'],
  690. // ['match_date','=',date("Y-m-d")],
  691. // ['match_time','>',date("H:i:s", time()-(90*60))],
  692. // ['match_time','<',date("H:i:s", time())]
  693. ['status','=','1']
  694. ];
  695. }
  696. if($game_code == 'wq'){
  697. $where = [
  698. // ['is_rollball','=',1],
  699. // ['status','<','2'],
  700. // ['match_date','=',date("Y-m-d")],
  701. // ['match_time','>',date("H:i:s", time()-(300*60))],
  702. // ['match_time','<',date("H:i:s", time())]
  703. ['status','=','1']
  704. ];
  705. }
  706. if($game_code == 'bq'){
  707. $where = [
  708. // ['is_rollball','=',1],
  709. // ['status','<','2'],
  710. // ['match_date','=',date("Y-m-d")],
  711. // ['match_time','>',date("H:i:s", time()-(300*60))],
  712. // ['match_time','<',date("H:i:s", time())]
  713. ['status','=','1']
  714. ];
  715. }
  716. break;
  717. case 'StSoon'://即将 今日两小时内开始
  718. $where = [
  719. ['status','=','0'],
  720. ['match_date','=',date("Y-m-d")],
  721. ['match_time','<',date("H:i:s", strtotime("+2 hour"))],
  722. ['match_time','>',date("H:i:s", time())]
  723. /*
  724. ['utime','>',date("Y-m-d").' 00:00:00']
  725. */
  726. ];
  727. break;
  728. case 'StToday'://今日 今日未开始未结束
  729. $where = [
  730. ['status', '<', '2'],
  731. ['match_date','=',date("Y-m-d")],
  732. ['match_time','>',date("H:i:s", time())],
  733. /*
  734. ['is_today', '=', 1],
  735. ['type', '=', '1'],
  736. ['utime','>',date("Y-m-d").' 00:00:00']
  737. */
  738. ];
  739. break;
  740. case 'StMorningPlate'://早盘
  741. //获取当天结束时间戳
  742. $endTime = mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1;
  743. $where = [
  744. ['status', '<', '2'],
  745. // ['is_morningplate', '=', 1],
  746. ['us_time','>',$this->qgmdate('Y-m-d H:i:s', $endTime, -4)],
  747. /*
  748. ['match_date','>',date("Y-m-d",time())],
  749. ['match_time','>',date("H:i:s", time())],
  750. ['type', '=', '2'],
  751. ['utime','>',date("Y-m-d").' 00:00:00']
  752. */
  753. ];
  754. break;
  755. case 'StStringScene'://串场
  756. $where = [
  757. ['status', '<', '2'],
  758. ['is_stringscene', '=', 1],
  759. ['us_time','>',$this->qgmdate('Y-m-d H:i:s', '', -4)],
  760. /*
  761. ['match_date','>',date("Y-m-d",time())],
  762. ['match_time','>',date("H:i:s", time())],
  763. ['type', '=', '3'],
  764. ['utime','>',date("Y-m-d").' 00:00:00']
  765. */
  766. ];
  767. break;
  768. case 'StChampion'://冠军
  769. $where = [
  770. 'type'=>1
  771. ];
  772. break;
  773. default:
  774. throw new \Exception(Render([], '10002', lang('Tips','Sports')->get('PARAM_ERROR')));
  775. }
  776. }else{
  777. switch ($type_code){
  778. case 'StRollBall'://滚球 正在进行
  779. //追加不同球类的滚球时间
  780. if($game_code == 'zq' || $game_code == 'gj'){
  781. $where = [
  782. // [$model_match.'.is_rollball','=',1],
  783. // [$model_match.'.status','<','2'],
  784. // [$model_match.'.match_date','=',date("Y-m-d")],
  785. // [$model_match.'.match_time','>',date("H:i:s", time()-(120*60))],
  786. // [$model_match.'.match_time','<',date("H:i:s", time())]
  787. [$model_match.'.status','=','1']
  788. ];
  789. }
  790. if($game_code == 'lq'){
  791. $where = [
  792. // [$model_match.'.is_rollball','=',1],
  793. // [$model_match.'.status','<','2'],
  794. // [$model_match.'.match_date','=',date("Y-m-d")],
  795. // [$model_match.'.match_time','>',date("H:i:s", time()-(90*60))],
  796. // [$model_match.'.match_time','<',date("H:i:s", time())]
  797. [$model_match.'.status','=','1']
  798. ];
  799. }
  800. if($game_code == 'wq'){
  801. $where = [
  802. // [$model_match.'.is_rollball','=',1],
  803. // [$model_match.'.status','<','2'],
  804. // [$model_match.'.match_date','=',date("Y-m-d")],
  805. // [$model_match.'.match_time','>',date("H:i:s", time()-(300*60))],
  806. // [$model_match.'.match_time','<',date("H:i:s", time())]
  807. [$model_match.'.status','=','1']
  808. ];
  809. }
  810. if($game_code == 'bq'){
  811. $where = [
  812. // [$model_match.'.is_rollball','=',1],
  813. // [$model_match.'.status','<','2'],
  814. // [$model_match.'.match_date','=',date("Y-m-d")],
  815. // [$model_match.'.match_time','>',date("H:i:s", time()-(300*60))],
  816. // [$model_match.'.match_time','<',date("H:i:s", time())]
  817. [$model_match.'.status','=','1']
  818. ];
  819. }
  820. break;
  821. case 'StSoon'://即将 今日两小时内开始
  822. if($p_code == 'kemp'){
  823. $where = [
  824. [$model_match.'.status','<','2']
  825. ];
  826. }else{
  827. $where = [
  828. [$model_match.'.status','=','0'],
  829. [$model_match.'.match_date','=',date("Y-m-d")],
  830. [$model_match.'.match_time','<',date("H:i:s", strtotime("+2 hour"))],
  831. [$model_match.'.match_time','>',date("H:i:s", time())]
  832. /*
  833. [$model_match.'.utime','>',date("Y-m-d").' 00:00:00']
  834. */
  835. ];
  836. }
  837. break;
  838. case 'StToday'://今日 今日未开始未结束
  839. if($p_code == 'kemp'){
  840. $where = [
  841. [$model_match.'.status', '<', '2'],
  842. ];
  843. }else{
  844. $where = [
  845. [$model_match.'.status', '<', '2'],
  846. [$model_match.'.match_date','=',date("Y-m-d")],
  847. [$model_match.'.match_time','>',date("H:i:s", time())],
  848. /*
  849. [$model_match.'.utime','>',date("Y-m-d").' 00:00:00'],
  850. [$model_match.'.is_today','=',1],
  851. [$model_match.'.type', '=', '1'],
  852. */
  853. ];
  854. }
  855. break;
  856. case 'all'://所有赛事
  857. $where = [
  858. [$model_match.'.status', '<', '2'],
  859. ];
  860. break;
  861. case 'StMorningPlate'://早盘
  862. if($p_code == 'kemp'){
  863. $where = [
  864. [$model_match.'.status', '<', '2']
  865. ];
  866. }else{
  867. //获取当天结束的时间戳
  868. $endTime = mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1;
  869. $where = [
  870. [$model_match.'.status', '<', '2'],
  871. // [$model_match.'.is_morningplate','=',1],
  872. [$model_match.'.us_time','>',$this->qgmdate('Y-m-d H:i:s',$endTime , -4)],
  873. /*
  874. [$model_match.'.match_date','>',date("Y-m-d",time())],
  875. [$model_match.'.match_time','>',date("H:i:s", time())],
  876. [$model_match.'.type', '=', '2'],
  877. [$model_match.'.utime','>',date("Y-m-d").' 00:00:00']
  878. */
  879. ];
  880. }
  881. break;
  882. case 'StStringScene'://串场 查询串场状态为1 开赛时间大于当前时间
  883. $where = [
  884. [$model_match.'.is_stringscene','=',1],
  885. [$model_match.'.us_time','>',$this->qgmdate('Y-m-d H:i:s', '', -4)],
  886. [$model_match.'.status', '<', '2'],
  887. /*
  888. [$model_match.'.match_date','>',date("Y-m-d",time())],
  889. [$model_match.'.match_time','>',date("H:i:s", time())],
  890. [$model_match.'.type', '=', '3'],
  891. [$model_match.'.utime','>',date("Y-m-d").' 00:00:00']
  892. */
  893. ];
  894. break;
  895. case 'StChampion'://冠军
  896. $where = [
  897. 'type'=>1
  898. ];
  899. break;
  900. default:
  901. throw new \Exception(Render([], '10002', lang('Tips','Sports')->get('PARAM_ERROR')));
  902. }
  903. }
  904. return $where;
  905. }
  906. /**
  907. * @param $data
  908. * @return array
  909. * 处理当国家下无联赛数据 删除该数组
  910. */
  911. function handleArr($data){
  912. $hData = [];
  913. foreach ($data as $key =>$v){
  914. if(empty($v['league_count'])){
  915. $v = [];
  916. }
  917. $hData[]=$v;
  918. }
  919. foreach($hData as $k=>$v){
  920. if(empty($v)){
  921. unset($hData[$k]);
  922. }
  923. }
  924. foreach ($hData as $k=>$v){
  925. $v['league_count'] = array_values($v['league_count']);
  926. $hData[$k]=$v;
  927. }
  928. return array_values($hData);
  929. }
  930. /**
  931. * @param $arr
  932. * @param $key
  933. * @return array
  934. * 去除二维数组重复项
  935. */
  936. function array_unset_tt($arr,$key){
  937. //建立一个目标数组
  938. $res = array();
  939. foreach ($arr as $value) {
  940. //查看有没有重复项
  941. if(isset($res[$value[$key]])){
  942. unset($value[$key]); //有:销毁
  943. }else{
  944. $res[$value[$key]] = $value;
  945. }
  946. }
  947. return $res;
  948. }
  949. /**
  950. * 处理冠军盘口 数组结构
  951. */
  952. function array_gj_tt($data,$oddsData){
  953. foreach ($data as $k=>&$v){
  954. foreach ($v['league_count'] as $kk=>&$vv){
  955. foreach ($oddsData as $kkk=>$vvv){
  956. if($vv['lg_id'] == $vvv['lg_id']){
  957. $vv['oddsData'][]=$vvv;
  958. }
  959. }
  960. if($vv['oddsData']){
  961. $vv['oddsData'] = $this->array_unset_tt($vv['oddsData'],'p_code');
  962. $vv['count'] = count($vv['oddsData']);
  963. unset($vv['oddsData']);
  964. }
  965. if(count($vv) != 5){
  966. unset($v['league_count'][$kk]);
  967. }
  968. }
  969. $v['league_count'] = array_values($v['league_count']);
  970. if(empty($v['league_count'])){
  971. unset($data[$k]);
  972. }
  973. }
  974. return array_values($data);
  975. }
  976. /**
  977. * 处理冠军以外 数组结构
  978. */
  979. function array_other_tt($data,$matchData){
  980. foreach ($data as $k=>&$v){
  981. foreach ($v['league_count'] as $kk=>&$vv){
  982. foreach ($matchData as $kkk=>$vvv){
  983. if($vv['lg_id'] == $vvv['lg_id']){
  984. $vv['matchData'][]=$vvv;
  985. }
  986. }
  987. if($vv['matchData']){
  988. $vv['matchData'] = $this->array_unset_tt($vv['matchData'],'match_id');
  989. $vv['count'] = count($vv['matchData']);
  990. unset($vv['matchData']);
  991. }
  992. if(empty($vv['count'])){
  993. unset($v['league_count'][$kk]);
  994. }
  995. }
  996. $v['league_count'] = array_values($v['league_count']);
  997. if(empty($v['league_count'])){
  998. unset($data[$k]);
  999. }
  1000. }
  1001. return array_values($data);
  1002. }
  1003. /**
  1004. * 时间格式化
  1005. * @param string $dateformat 时间格式
  1006. * @param int $timestamp 时间戳
  1007. * @param int $timeoffset 时区偏差 默认8 北京时间 -4美东时间
  1008. * @return string
  1009. */
  1010. function qgmdate($dateformat = 'Y-m-d H:i:s', $timestamp = '', $timeoffset = 8,$type = '') {
  1011. if(empty($timestamp)) {
  1012. $timestamp = time();
  1013. }
  1014. $result = gmdate($dateformat, $timestamp + $timeoffset * 3600);
  1015. return $result;
  1016. }
  1017. /**
  1018. * 判断二维数组是否包含一维数组
  1019. * @param mixed $arr 查询条件
  1020. * @param mixed $arrs 运动类型
  1021. * @return string
  1022. */
  1023. function judgeEqual($arr, $arrs){
  1024. foreach ($arrs as $value) {
  1025. if (count($value) === count($arr)) {
  1026. $a = 0;
  1027. foreach ($value as $key => $v) {
  1028. $a++;
  1029. if ($v != $arr[$key]) {
  1030. break;
  1031. }
  1032. if ($a == count($key)) { // 到最后一个元素都没有出现不相等,就说明这两个数组相等。
  1033. return true;
  1034. }
  1035. }
  1036. }
  1037. }
  1038. return false;
  1039. }
  1040. // 排列
  1041. function arrangement($a, $m) {
  1042. $r = array();
  1043. $n = count($a);
  1044. if ($m <= 0 || $m > $n) {
  1045. return $r;
  1046. }
  1047. for ($i=0; $i<$n; $i++) {
  1048. $b = $a;
  1049. $t = array_splice($b, $i, 1);
  1050. if ($m == 1) {
  1051. $r[] = $t;
  1052. } else {
  1053. $c = $this->arrangement($b, $m-1);
  1054. foreach ($c as $v) {
  1055. $r[] = array_merge($t, $v);
  1056. }
  1057. }
  1058. }
  1059. return $r;
  1060. }
  1061. // 组合
  1062. function combination($a, $m) {
  1063. $r = array();
  1064. $n = count($a);
  1065. if ($m <= 0 || $m > $n) {
  1066. return $r;
  1067. }
  1068. for ($i=0; $i<$n; $i++) {
  1069. $t = array($a[$i]);
  1070. if ($m == 1) {
  1071. $r[] = $t;
  1072. } else {
  1073. $b = array_slice($a, $i+1);
  1074. $c = $this->combination($b, $m-1);
  1075. foreach ($c as $v) {
  1076. $r[] = array_merge($t, $v);
  1077. }
  1078. }
  1079. }
  1080. return $r;
  1081. }
  1082. // 阶乘
  1083. function factorial($n) {
  1084. return array_product(range(1, $n));
  1085. }
  1086. // 排列数
  1087. function A1($n, $m) {
  1088. return factorial($n)/factorial($n-$m);
  1089. }
  1090. // 组合数
  1091. function C1($n, $m) {
  1092. return A1($n, $m)/factorial($m);
  1093. }
  1094. //处理空赔率赛事
  1095. function Handle_Odds_Null($matchData=[],$models=[],$oddsTypeWhere=[]){
  1096. //===获取当前赛事是否有赔率,如果没有则去除===
  1097. //获取当前match_id
  1098. $match_ids = [];
  1099. foreach($matchData as $k=>$v){
  1100. $match_ids[] = $v['match_id'];
  1101. }
  1102. //获取下赛事赔率
  1103. $oddsData = lm($models['model_odds'],'Sports')
  1104. ->select('match_id')
  1105. ->whereIn('match_id',$match_ids)
  1106. ->where($oddsTypeWhere)
  1107. ->distinct('match_id')
  1108. ->get()
  1109. ->toArray();
  1110. //如果赔率为空,则返回空
  1111. if(empty($oddsData)) return $oddsData;
  1112. $matchData_new = [];
  1113. foreach($matchData as $k=>$v){
  1114. foreach($oddsData as $kk=>$vv){
  1115. if($v['match_id'] == $vv['match_id']){
  1116. $matchData_new[] = $matchData[$k];
  1117. }
  1118. }
  1119. }
  1120. return $matchData_new;
  1121. //===赛事空赔率 处理end ===
  1122. }
  1123. //处理空赔率联赛
  1124. function Handle_Odds_Null_lg($matchData=[],$models=[]){
  1125. //===获取当前联赛是否有赔率,如果没有则去除===
  1126. //获取当前lg_id
  1127. $lg_ids = [];
  1128. foreach($matchData as $k=>$v){
  1129. $lg_ids[] = $v['lg_id'];
  1130. }
  1131. //获取下赛事赔率
  1132. $oddsData = lm($models['model_odds'],'Sports')
  1133. ->select('lg_id')
  1134. ->whereIn('lg_id',$lg_ids)
  1135. ->where('type',1)
  1136. ->distinct('lg_id')
  1137. ->get()
  1138. ->toArray();
  1139. //如果赔率为空,则返回空
  1140. if(empty($oddsData)) return $oddsData;
  1141. $matchData_new = [];
  1142. foreach($matchData as $k=>$v){
  1143. foreach($oddsData as $kk=>$vv){
  1144. if($v['lg_id'] == $vv['lg_id']){
  1145. $matchData_new[] = $matchData[$k];
  1146. }
  1147. }
  1148. }
  1149. return $matchData_new;
  1150. //===联赛空赔率 处理end ===
  1151. }
  1152. /**
  1153. * 处理各球类投注: 可赢金额计算
  1154. * $game_code 球类代码
  1155. * $p_code 父级玩法代码
  1156. * $odds 赔率
  1157. * $bet_amount 投注金额
  1158. * $type 投注类型 1单式
  1159. */
  1160. function getEarnMoney($game_code='',$p_code='',$odds=0,$bet_amount=0,$type=0){
  1161. /*
  1162. 可赢额直接乘以赔率的父级玩法有
  1163. 足球:球队进球数:大/小 进球:大/小 让球
  1164. 篮球:让球 总分:大/小 球队得分大小
  1165. 网球:让盘 让局 总局数:大/小
  1166. 棒球:让球 总得分:大/小
  1167. */
  1168. //单式投注
  1169. if($type == 1){
  1170. //足球 可赢金额 计算规则
  1171. if($game_code == 'zq'){
  1172. //球队进球数:大/小;进球:大/小;让球;
  1173. if($p_code == 'TB' || $p_code == 'GS' || $p_code == 'CO'){
  1174. //可赢金额 = 赔率*投注金额
  1175. $prize_money = $odds*$bet_amount;
  1176. }else{
  1177. //可赢金额 = (赔率-1)*投注金额
  1178. $prize_money = ($odds-1)*$bet_amount;
  1179. }
  1180. }
  1181. //篮球 可赢金额 计算规则
  1182. if($game_code == 'lq'){
  1183. //让球 总分:大/小 球队得分大小
  1184. if($p_code == 'TN' || $p_code == 'TB' || $p_code == 'CO'){
  1185. //可赢金额 = 赔率*投注金额
  1186. $prize_money = $odds*$bet_amount;
  1187. }else{
  1188. //可赢金额 = (赔率-1)*投注金额
  1189. $prize_money = ($odds-1)*$bet_amount;
  1190. }
  1191. }
  1192. //网球 可赢金额 计算规则
  1193. if($game_code == 'wq'){
  1194. //让盘 让局 总局数:大/小
  1195. if($p_code == 'LD' || $p_code == 'LB' || $p_code == 'TN'){
  1196. //可赢金额 = 赔率*投注金额
  1197. $prize_money = $odds*$bet_amount;
  1198. }else{
  1199. //可赢金额 = (赔率-1)*投注金额
  1200. $prize_money = ($odds-1)*$bet_amount;
  1201. }
  1202. }
  1203. //棒球
  1204. if($game_code == 'bq'){
  1205. //让球 总得分:大/小
  1206. if($p_code == 'CO' || $p_code == 'TN'){
  1207. //可赢金额 = 赔率*投注金额
  1208. $prize_money = $odds*$bet_amount;
  1209. }else{
  1210. //可赢金额 = (赔率-1)*投注金额
  1211. $prize_money = ($odds-1)*$bet_amount;
  1212. }
  1213. }
  1214. }
  1215. return $prize_money;
  1216. }
  1217. //计算赛事当前进行时间
  1218. function getMatchTime($match_date,$match_time){
  1219. $time = time() - strtotime($match_date.' '.$match_time);
  1220. //如果需要时刻格式
  1221. // $time = $this->dataformat($time);
  1222. return floor($time/60);
  1223. }
  1224. //将秒 转换为 时 分 秒
  1225. function dataformat($num=0) {
  1226. $hour = floor($num/3600);
  1227. $minute = floor(($num-3600*$hour)/60);
  1228. $second = floor((($num-3600*$hour)-60*$minute)%60);
  1229. return $hour.':'.$minute.':'.$second;
  1230. }
  1231. //根据赛事进行 时间 获取进程
  1232. function getMatchProcess($time=0,$game_code){
  1233. if($game_code == 'zq'){
  1234. if($time < 45) return '上半场';
  1235. return '下半场';
  1236. }
  1237. if($game_code == 'lq'){
  1238. if($time < 10) return '第一节';
  1239. if(($time > 10) and ($time < 20)) return '第二节';
  1240. if(($time > 20) and ($time < 30)) return '第三节';
  1241. if(($time > 30) and ($time < 40)) return '第四节';
  1242. }
  1243. if($game_code == 'wq'){
  1244. return '';
  1245. }
  1246. if($game_code == 'bq'){
  1247. return '';
  1248. }
  1249. }
  1250. //返回数据源对应ID
  1251. function getSourceID($source){
  1252. $data = [
  1253. 'hg3535'=>1,
  1254. 'hg0088'=>2,
  1255. '188'=>3,
  1256. ];
  1257. if(!empty($data[$source])) {
  1258. $sourceID = $data[$source];
  1259. }else{
  1260. $sourceID = 0;
  1261. }
  1262. return $sourceID;
  1263. }
  1264. //生成订单/批次号
  1265. function orderSn() {
  1266. $year_code = array('A','B','C','D','E','F','G','H','I','J');//年份
  1267. $order_sn = $year_code[intval(date('Y'))-2019].
  1268. strtoupper(dechex(date('m'))).date('d').
  1269. substr(time(),-5).substr(microtime(),2,5).sprintf('d',rand(0,99));
  1270. return $order_sn;
  1271. }
  1272. //根据球类追加限定玩法
  1273. function getOddsPcode($game_code = 'zq'){
  1274. $p_code = [];
  1275. if($game_code == 'zq'){
  1276. $p_code = ['C','B','TG','CB','TB','GS','CO','TS'];
  1277. }
  1278. if($game_code == 'lq'){
  1279. $p_code = ['LN','C','TN','TS','TB','CO'];
  1280. }
  1281. if($game_code == 'wq'){
  1282. $p_code = ['LB','TN','TS','B','LD','C'];
  1283. }
  1284. if($game_code == 'bq'){
  1285. $p_code = ['CO','C','TN','TS'];
  1286. }
  1287. return $p_code;
  1288. }
  1289. }
  1290. ?>