Nologin.php 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982
  1. <?php
  2. /**
  3. *------Create thems Controller------
  4. *------SCWPHP Version 1.0.0------
  5. *------Dev Model Jions------
  6. *------Create Time 2017-06-23 15:06:45------
  7. */
  8. namespace App\Api\Controller;
  9. use Biz\Account\AccountManager;
  10. use Biz\Game\GameList;
  11. use Illuminate\Support\Facades\DB;
  12. use App\Api\Model\SystemRed;
  13. use App\Api\Model\LuckyMoney;
  14. /*ini_set('display_errors', 1);
  15. error_reporting(E_ALL);*/
  16. class Nologin extends BaseController {
  17. private $red;
  18. private $LuckyMoney;
  19. function init()
  20. {
  21. $this->red = new SystemRed();
  22. $this->LuckyMoney = new LuckyMoney();
  23. }
  24. //线路gen
  25. function routes() {
  26. // $res = lm('system_routes','api')->get();
  27. // if (!$res) {
  28. // return -6030001222;
  29. // }
  30. $type = $_REQUEST['type'] ?? '';
  31. if (!$type) Render('', -60004);
  32. $ret = lm('system_routes_category', 'api')->where('remark', $type)->first(['id']);
  33. if (!$ret) Render('', -60005);
  34. $res = lm('system_routes', 'api')->where('cate_id', $ret['id'])->get(['name', 'rdesc', 'ip', 'url']);
  35. if (!$res) Render('', -60005);
  36. Render($res, '1', lang()->get('success'));
  37. }
  38. /**
  39. * 试玩用户名获取
  40. * @auther: ikeke
  41. * @time: 2018-10-30
  42. */
  43. function getTestUsername() {
  44. $accountManager = new AccountManager();
  45. $num = $accountManager->getAccountId();
  46. $name = 'gust' . ($num + 1);
  47. return $name;
  48. }
  49. /**
  50. * 启动页
  51. */
  52. public function startup() {
  53. $res = lm('setinfo', 'Commons')->where('id', '1111')->first();
  54. if (isset($res->infocontent)) {
  55. $res->infocontent = str_replace('white-space:normal;', 'white-space:nowrap;', $res->infocontent);
  56. $res->infocontent = str_replace('white-space: normal;', 'white-space: nowrap;', $res->infocontent);
  57. }
  58. Render($res, '1', lang()->get('success'));
  59. }
  60. /**
  61. * jnd
  62. */
  63. public function jndset() {
  64. $res = lm('setinfo', 'Commons')->where('id', '1113')->first();
  65. $res = $res->toArray();
  66. $res['extinfo'] = explode('~', $res['extinfo']);
  67. if (isset($res->infocontent)) {
  68. $res->infocontent = str_replace('white-space:normal;', 'white-space:nowrap;', $res->infocontent);
  69. $res->infocontent = str_replace('white-space: normal;', 'white-space: nowrap;', $res->infocontent);
  70. }
  71. Render($res, '1', lang()->get('success'));
  72. }
  73. /**
  74. * 连号、遗漏接口
  75. */
  76. public function getHotList() {
  77. $limit = $_REQUEST['limit'] ?? 50;//二维数组长度
  78. $gameName = isset($_REQUEST['gameName']) && trim($_REQUEST['gameName']) ? trim($_REQUEST['gameName']) : '';
  79. $gameList = new GameList();
  80. $lm = lm($gameName, 'commons');
  81. if (!$lm) {
  82. Render('', -3201);//游戏不存在
  83. }
  84. $gameArray = $lm->where('status', 2)->orderBy('info_no', 'desc')->select('info_no', 'prizes')->limit($limit)->get();
  85. if ($gameArray)
  86. $result = $gameList->getPrizes($gameArray);
  87. //$limit = count ($result);//二维数组长度
  88. $width = count($result[0]);//二维数组宽度
  89. $arr = [];
  90. $arr=self::calcHotOrCold($result);
  91. // for ($i = 0; $i < $width; $i++) { //遍历列
  92. // //遍历二维数组中的每一列,移动数组指针,如果当前数据与下条数据相同,same++;继续
  93. // //否则,从下一个位置的数据起,返回其和一次出现的index与第一条的index的差作为其遗漏值,
  94. // $same = 1;//换列时默认求同
  95. // for ($j = 0; $j < $limit; $j++) { //遍历行,$j=当前行
  96. // if ($j === 0)
  97. // $same = 1;//如果第一行默认求同
  98. // //如果行当前值==第一行值且求同
  99. // if ($result[$j][$i] === $result[0][$i] && $same) {
  100. // //if (!isset($arr['same'][$result[$i]])) $arr['same'][$result[$i]] = 1;
  101. // $arr['same'][$result[0][$i]] = $j + 1;//统计相同
  102. // } else {
  103. // $same = 0;
  104. // if ($j + 1 <= $limit) { //如果下一行数据存在
  105. // //如果当$arr['dif'][当前行值]不存在且当前行值不等于第一行值 则设置它的值为当前index+1:
  106. // if (!isset($arr['dif'][$result[$j][$i]]) && $result[$j][$i] != $result[0][$i]) {
  107. // if ($result[$j][$i])//过虑当前期值为空的情况
  108. // $arr['dif'][$result[$j][$i]] = $j;
  109. // }
  110. // }
  111. // }
  112. //
  113. // }
  114. //
  115. // }
  116. //Render ([$result, $arr], 1);
  117. Render($arr, 1);
  118. }
  119. /* function getBetTypes($gameName)
  120. {
  121. return (new GameList())->getBetTypes ($gameName);
  122. }*/
  123. /*
  124. * 路珠统计
  125. */
  126. public function getRoadBead() {
  127. //--2019-01-16 ---blues
  128. $time = $_REQUEST['time'] ? $_REQUEST['time'] : date('Y-m-d');
  129. $game_name = trim($_REQUEST['game_name']) ? trim($_REQUEST['game_name']) : '';
  130. $rule = lang('Long', 'Api')->get('games')[$game_name]['rule'] ?? '5';
  131. // $rule = ($_REQUEST['rule'])??'5';
  132. // $rule = trim ($_REQUEST['rule']) ? trim ($_REQUEST['rule']) : '';
  133. if (empty($game_name)) {
  134. Render('', -3201);//游戏为空
  135. }
  136. if (empty($rule)) {
  137. Render('', -3204);//现在规则
  138. }
  139. $lm = lm($game_name, 'commons');
  140. if (empty($lm)) {
  141. Render('', -3202);//游戏不存在
  142. }
  143. $nexttime = date("Y-m-d", strtotime("$time +1 day"));
  144. $where[] = array('status', '=', '2');
  145. $where[] = array('time', '>=', $time . ' 05:00:00');
  146. $where[] = array('time', '<=', $nexttime . ' 05:00:00');
  147. $data = $lm->where($where)->select('info_no', 'prizes', 'codes', 'open_time', 'extra', 'time')->orderby('id', 'asc')->get();
  148. if (empty($data)) {
  149. Render('', -3203);//暂无数据
  150. }
  151. $data = $data->toArray();
  152. if (strpos($game_name, '28') !== false) {
  153. foreach ($data as $key => $value) {
  154. $extra = json_decode($value['extra'], true);
  155. //$data[$key]['codes'] = $extra['one'].','.$extra['two'].','.$extra['three'];
  156. $data[$key]['codes'] = intval($extra['one']) + intval($extra['two']) + intval($extra['three']); //qtx 2018-12-12
  157. }
  158. }
  159. if (strpos($game_name, 'kuai3') !== false) {
  160. foreach ($data as $key => $value) {
  161. $extra =explode(',',trim($value['codes']));
  162. //$data[$key]['codes'] = $extra['one'].','.$extra['two'].','.$extra['three'];
  163. $data[$key]['codes'] = array_sum($extra); //---- blues
  164. }
  165. }
  166. $arr = array();
  167. foreach ($data as $key => $value) {
  168. $codes = explode(',', trim($value['codes']));
  169. foreach ($codes as $ke => $val) {
  170. $num = count($arr[$ke]['size']);
  171. $numtwo = count($arr[$ke]['singlepair']);
  172. if ($key > 0) {
  173. $prevcodes = explode(',', $data[$key - 1]['codes']);
  174. if ($val >= $rule) {
  175. if ($prevcodes[$ke] >= $rule) {
  176. $arr[$ke]['size'][$num][] = 1;
  177. } else {
  178. $arr[$ke]['size'][$num + 1][] = 1;
  179. }
  180. } else {
  181. if ($prevcodes[$ke] >= $rule) {
  182. $arr[$ke]['size'][$num + 1][] = 0;
  183. } else {
  184. $arr[$ke]['size'][$num][] = 0;
  185. }
  186. }
  187. if ($val % 2 == 0) {
  188. if ($prevcodes[$ke] % 2 == 0) {
  189. $arr[$ke]['singlepair'][$numtwo][] = 1;
  190. } else {
  191. $arr[$ke]['singlepair'][$numtwo + 1][] = 1;
  192. }
  193. } else {
  194. if ($prevcodes[$ke] % 2 == 0) {
  195. $arr[$ke]['singlepair'][$numtwo + 1][] = 0;
  196. } else {
  197. $arr[$ke]['singlepair'][$numtwo][] = 0;
  198. }
  199. }
  200. } else {
  201. if ($val >= $rule) {
  202. $arr[$ke]['size'][1][] = 1;
  203. } else {
  204. $arr[$ke]['size'][1][] = 0;
  205. }
  206. if ($val % 2 == 0) {
  207. $arr[$ke]['singlepair'][1][] = 1;
  208. } else {
  209. $arr[$ke]['singlepair'][1][] = 0;
  210. }
  211. }
  212. }
  213. }
  214. Render($arr, 1);
  215. }
  216. public function resultAnalysis() {
  217. $limit = $_REQUEST['limit'] ?? 100;//二维数组长度
  218. $gameName = isset($_REQUEST['gameName']) && trim($_REQUEST['gameName']) ? trim($_REQUEST['gameName']) : '';
  219. return ($return = $this->calc($gameName, $limit));
  220. }
  221. /**
  222. * 冷热遗漏数据计算函数
  223. * @param $gameName
  224. * @param int $limit
  225. * @return mixed
  226. */
  227. private function calc($gameName, $limit = 100) {
  228. $gameList = new GameList();
  229. $lm = lm($gameName, 'commons');
  230. if (!$lm) {
  231. Render('', -3201);//游戏不存在
  232. }
  233. $gameArray = $lm->where('status', 2)->orderBy('info_no', 'desc')->select('info_no', 'prizes')->limit($limit)->get();
  234. if ($gameArray)
  235. $result = $gameList->getPrizes($gameArray);
  236. $count = count($result);//数组长度
  237. $width = count($result[0]);//数组宽度
  238. $hots = [];
  239. $colds = [];
  240. for ($i = 0; $i < $width; $i++) { //$i=>列ID
  241. $ret = [];//当前列的所有元素
  242. for ($j = 0; $j < $count; $j++) { //$j=>行ID
  243. //取回各列元素数组
  244. array_push($ret, $result[$j][$i]);
  245. }
  246. //热号统计:
  247. //遍历结果集每一列的每一个元素,统计其出现的频次(取回每列的值ARR,通过array_count_values函数统计)
  248. $hots = array_merge($hots, array_count_values($ret));
  249. //
  250. $colds = array_merge($colds, $this->getCold($ret));
  251. }
  252. $return['hots'] = $hots;
  253. $return['colds'] = $colds;
  254. return $return;
  255. }
  256. /**
  257. * 遗漏计算子函数
  258. * @param $arr
  259. * @return array
  260. */
  261. private function getCold($arr) {
  262. $ret = [];
  263. foreach ($arr as $k => $v) {
  264. //遍历每一个元素
  265. if (!isset($ret[$v]))
  266. $ret[$v] = (function ($k) use ($arr) {
  267. $num = 0;
  268. //reset ($arr);
  269. if ($arr[0] === $arr[$k]) return 0;
  270. while ($arr[$num] !== $arr[$k]) {
  271. $num++;
  272. }
  273. return $num;
  274. })($k);
  275. }
  276. //dd($ret);
  277. return $ret;
  278. }
  279. /**
  280. *统计游戏冷热遗漏接口
  281. *
  282. */
  283. public function getGameAnalysis() {
  284. $game_code = $_REQUEST['gameName'];
  285. if (!$game_code) {
  286. Render('', -3264);//游戏名不能为空
  287. }
  288. $limit = $_REQUEST['limit'] ?? 100;
  289. $currentGame = lm($game_code, 'commons')->whereNotNull('prizes')->orderBy('info_no', 'desc')->select('info_no')->first();
  290. //currentGame=>游戏当前开奖数据
  291. if (!$currentGame) {
  292. //无当前游戏开奖数据
  293. Render('', -3266);
  294. }
  295. $current_issue = $currentGame->info_no;
  296. $lm = lm('GameAnalysis', 'commons');
  297. $currentData = $lm->where('game_code', $game_code)->first();//分析数据
  298. if ($currentData && $current_issue == $currentData->current_issue) {
  299. $ret = [
  300. 'hots' => json_decode($currentData->hot_list),
  301. 'colds' => json_decode($currentData->cold_list),
  302. 'issue' => $current_issue
  303. ];
  304. } else {
  305. //重新请求计算
  306. $calc = $this->calc($game_code, $limit);
  307. if (!$calc) {
  308. Render('', -51028);//统计数据不存在
  309. }
  310. $hots = json_encode($calc['hots']);
  311. $colds = json_encode($calc['colds']);
  312. if (!$currentData) {
  313. $lm->insert(['game_code' => $game_code, 'hot_list' => $hots, 'cold_list' => $colds, 'current_issue' => $current_issue]);
  314. } else {
  315. $lm->where('game_code', $game_code)
  316. ->update(['game_code' => $game_code, 'hot_list' => $hots, 'cold_list' => $colds, 'current_issue' => $current_issue]);
  317. }
  318. $ret = ['hots' => $calc['hots'], 'colds' => $calc['colds'], 'issue' => $current_issue];
  319. }
  320. Render($ret, 1);
  321. }
  322. // todo 这个为临时工具代码 不上线 可删
  323. public function toJson() {
  324. $game_code = $_REQUEST['gameName'];
  325. $ret = $this->calc($game_code, 200);
  326. $hots = $ret['hots'];
  327. $arr = [];
  328. $group = [];
  329. $childs = [];
  330. foreach ($hots as $v => $k) {
  331. //$v=>玩法名称
  332. //$vv[0]=>分类
  333. //$name=>分类下分组名称
  334. $vv = explode('-', $v);
  335. $vvv = explode('_', $vv[1] ?? $vv[0]);
  336. $name = count($vvv) === 2 ? $vv[0] . '-' . $vvv[0] : $vv[0];
  337. $group[$vv[0]][$name] = [
  338. 'name' => $name,//当前组的名称
  339. 'title' => $this->getTitle($game_code, $name),//当前组的中文名称
  340. 'desc' => ''
  341. ];
  342. $childs[$vv[0]][$name][$v] = $this->getChild($game_code, $v);
  343. ksort($childs[$vv[0]][$name]);
  344. $group[$vv[0]][$name]['childs'] = array_values($childs[$vv[0]][$name]);
  345. $arr['root'][$vv[0]] = [
  346. 'name' => $vv[0],
  347. 'title' => $this->getTitle($game_code, $vv[0]),
  348. 'extra' => null,
  349. 'group' => array_values($group[$vv[0]])
  350. ];
  351. }
  352. foreach ($arr['root'] as $k => $v) {
  353. ksort($arr['root'][$k]['group']);
  354. }
  355. $arr['root'] = array_values($arr['root']);
  356. return ([$arr]);
  357. }
  358. // todo 这个为临时工具代码 不上线 可删
  359. public function gameExplain() {
  360. $game_code = $_REQUEST['gameName'];
  361. $ret = $this->calc($game_code, 200);
  362. $hots = $ret['hots'];
  363. $arr = [];
  364. $group = [];
  365. $childs = [];
  366. foreach ($hots as $v => $k) {
  367. //$v=>玩法名称
  368. //$vv[0]=>分类
  369. //$name=>分类下分组名称
  370. $vv = explode('-', $v);
  371. $vvv = explode('_', $vv[1] ?? $vv[0]);
  372. $name = count($vvv) === 2 ? $vv[0] . '-' . $vvv[0] : $vv[0];
  373. $group[$vv[0]][$name] = [
  374. 'name' => $name,//当前组的名称
  375. 'title' => $this->getTitle($game_code, $name),//当前组的中文名称
  376. 'desc' => ''
  377. ];
  378. $childs[$vv[0]][$name][$v] = $this->getChild($game_code, $v);
  379. ksort($childs[$vv[0]][$name]);
  380. $group[$vv[0]][$name]['childs'] = array_values($childs[$vv[0]][$name]);
  381. $arr['root'][$vv[0]] = [
  382. 'name' => $vv[0],
  383. 'title' => $this->getTitle($game_code, $vv[0]),
  384. 'extra' => null,
  385. 'group' => array_values($group[$vv[0]])
  386. ];
  387. }
  388. foreach ($arr['root'] as $k => $v) {
  389. ksort($arr['root'][$k]['group']);
  390. }
  391. echo $str = $game_code . PHP_EOL . PHP_EOL;
  392. file_put_contents("./gameExplain.cvs", $str);
  393. foreach ($arr["root"] as $a => $x) {
  394. if (count($x["group"]) == 1) {
  395. echo $str = $x["title"] . "," . $x["name"] . PHP_EOL;
  396. file_put_contents("./gameExplain.cvs", $str, FILE_APPEND);
  397. } else {
  398. foreach ($x["group"] as $b) {
  399. $b["title"] = !empty($b["title"]) ? $b["title"] : $x["title"];
  400. echo $str = $b["title"] . "," . $b["name"] . PHP_EOL;
  401. file_put_contents("./gameExplain.cvs", $str, FILE_APPEND);
  402. }
  403. }
  404. }
  405. // $arr['root'] = array_values ($arr['root']);
  406. // return (1);
  407. }
  408. private function getTitle($game_name, $name) {
  409. $name = lang($game_name)->get($name);
  410. return $name;
  411. }
  412. private function getChild($game_name, $name) {
  413. return $data = [
  414. 'name' => $name,
  415. // 'title' => $this->getTitle ($game_name, $name),
  416. 'title' => '',
  417. 'align' => 1
  418. ];
  419. }
  420. //注册设置
  421. public function getSettings() {
  422. $settings = lm('settings', 'commons')->where('id', 1)->first();
  423. if (!empty($settings)) {
  424. $settings = $settings->toArray();
  425. }
  426. return $settings;
  427. }
  428. /**
  429. * 头像列表
  430. * @return mixed
  431. */
  432. public function getFaces() {
  433. $list = file_get_contents(ROOT_PATH . '/Config/faces.json');
  434. Render(json_decode($list), 1);
  435. }
  436. //根据域名获取代理用户邀请码
  437. public function getInviteByDom() {
  438. $dom = isset($_REQUEST['dom']) ? $_REQUEST['dom'] : '';
  439. if (!$dom) {
  440. Render('', -41101, '参数错误');
  441. }
  442. $res = lm('nagent_detailed', 'commons')->select('invite')->where('domain_name','like','%'.$dom.'%')->first();
  443. if (!$res) {
  444. Render('', -41101, '代理不存在');
  445. }
  446. $data = $res->toArray();
  447. Render($data, 1, '成功');
  448. }
  449. public function room_conf() {
  450. $sStr = lm('Setinfo', 'commons')->getSensitive()->infocontent ?? '';
  451. $wlStr = lm('Setinfo', 'commons')->getWhiteList()->infocontent ?? '';
  452. $data = [
  453. "info_t" => $wlStr,
  454. "in_status" => "1",
  455. 'word_info' => $sStr,
  456. "word_status" => "1"
  457. ];
  458. return ($data);
  459. }
  460. /**自动拉取流水记录**/
  461. public function automaticPullData()
  462. {
  463. $gametype = $_GET['gametype'];
  464. if($gametype === 'oggame')
  465. {
  466. $og = new \App\Egame\Controller\OgGame();
  467. $lastdata = lm('oggame_betting_ogrbv','commons')->orderBy('id','desc')->first();
  468. $data = $og->getBettingRecordByVendorNew($lastdata->VendorId);
  469. $userobj = new \App\Commons\Model\Oggame_user();
  470. foreach($data['data'] as $key => $val)
  471. {
  472. $iscf = lm('oggame_betting_ogrbv','commons')->where('VendorId', $val['VendorId'])->first();
  473. if(empty($iscf->VendorId))
  474. {
  475. $user = $userobj->getRpUser($val['UserName'], 'oggame');
  476. $data['data'][$key]['AddTime'] = strtotime(str_replace('/','-',$val['AddTime']));
  477. if(!empty($user->lo_name))
  478. {
  479. $uid = lm('account','commons')->where('', $user->lo_name)->first();
  480. $data['data'][$key]['account_name'] = $uid->account;
  481. $data['data'][$key]['account_identity'] = $uid->identity;
  482. }
  483. else
  484. {
  485. $data['data'][$key]['account_name'] = '';
  486. $data['data'][$key]['account_identity'] = '';
  487. }
  488. }
  489. lm('oggame_betting_ogrbv','commons')->insert($data['data'][$key]);
  490. }
  491. render('',1,'数据拉取成功');
  492. }
  493. else if($gametype === 'kygame')
  494. {
  495. $ky = new \App\Egame\Controller\KyGame();
  496. $data = $ky->getBettingRecordByVendorNew();
  497. if($data['status'] == -1)
  498. {
  499. render('',-1,'暂无可拉取的数据');
  500. }
  501. else if($data['status'] == -2)
  502. {
  503. render('',-1,'接口异常,请稍后再试');
  504. }
  505. else if($data['status'] == 1)
  506. {
  507. $userobj = new \App\Commons\Model\Oggame_user();
  508. $arr = array();
  509. foreach($data['data']['d']['list'] as $key => $val)
  510. {
  511. for($i = 0; $i < $data['data']['d']['count']; $i++)
  512. {
  513. $arr[$i][$key] = $val[$i];
  514. }
  515. }
  516. foreach($arr as $ak => $al)
  517. {
  518. $is = lm('kygame_betting_ogrbv','commons')->where('GameID', $al['GameID'])->first();
  519. if(empty($is->GameID))
  520. {
  521. $user = $userobj->getRpUser($al['Accounts'], 'kygame');
  522. if(!empty($user->lo_name))
  523. {
  524. $uid = lm('account','commons')->where('', $user->lo_name)->first();
  525. $al['account_name'] = $uid->account;
  526. $al['account_identity'] = $uid->identity;
  527. }
  528. else
  529. {
  530. $al['account_name'] = '';
  531. $al['account_identity'] = '';
  532. }
  533. }
  534. lm('kygame_betting_ogrbv','commons')->insert($al);
  535. }
  536. render('',1,'数据拉取成功');
  537. }
  538. else
  539. {
  540. render('',-1,'接口异常,请稍后再试');
  541. }
  542. }
  543. else
  544. {
  545. render('',-1,'游戏类型错误');
  546. }
  547. }
  548. /**
  549. * 用户所有游戏或单个游戏有效投注总额
  550. * @param $account_identity
  551. * @param string $starttime
  552. * @param string $endtime
  553. * @param string $gametype
  554. * @return int 返回真人流水
  555. */
  556. public function totalUserStatistics($account_identity, $starttime = '', $endtime = '', $gametype = 'all'): int
  557. {
  558. $starttime = $starttime ? $starttime : '' . date('Y-m-d 00:00:00', time()) . '';
  559. $endtime = $endtime ? $endtime : '' . date('Y-m-d 23:59:59', time()) . '';
  560. if(empty($account_identity))
  561. {
  562. return -1;
  563. }
  564. else
  565. {
  566. $rgame_setting = new \App\Commons\Model\Rgame_setting();
  567. $whererg['isopen'] = 1;
  568. $rgamelist = $rgame_setting->getGameList($whererg);
  569. // var_dump($rgamelist);exit;
  570. $ogobj = new \App\Commons\Model\Oggame_betting_ogrbv();
  571. $kyobj = new \App\Commons\Model\Kygame_betting_ogrbv();
  572. $agobj = new \App\Commons\Model\Aggame_betting_ogrbv();
  573. $hjobj = new \App\Commons\Model\Hjgame_betting_ogrbv();
  574. $lcqpobj = new \App\Commons\Model\Lcqpgame_betting_ogrbv();
  575. $lyobj = new \App\Commons\Model\Lygame_betting_ogrbv();
  576. $om = $km= 0;
  577. if($gametype == 'all')
  578. {
  579. $where = array();
  580. $where[] = array('account_identity','=', $account_identity);
  581. $ogwhere[] = array('AddTime','>=', strtotime($starttime));
  582. $ogwhere[] = array('AddTime','<=', strtotime($endtime));
  583. $om = $ogobj->getUserMoney($where,$ogwhere);
  584. $kywhere[] = array('GameEndTime','>=', strtotime($starttime));
  585. $kywhere[] = array('GameEndTime','<=', strtotime($endtime));
  586. $km = $kyobj->getUserMoney($where, $kywhere);
  587. $agwhere[] = array('betTime','>=', strtotime($starttime));
  588. $agwhere[] = array('betTime','<=', strtotime($endtime));
  589. $ag = $agobj->getUserMoney($where, $agwhere);
  590. $hjwhere[] = array('bet_time','>=', strtotime($starttime));
  591. $hjwhere[] = array('bet_time','<=', strtotime($endtime));
  592. $hj = $hjobj->getUserMoney($where, $hjwhere);
  593. $lcqpwhere[] = array('GameEndTime','>=', strtotime($starttime));
  594. $lcqpwhere[] = array('GameEndTime','<=', strtotime($endtime));
  595. $lcqp = $lcqpobj->getUserMoney($where, $lcqpwhere);
  596. $lywhere[] = array('GameEndTime','>=', strtotime($starttime));
  597. $lywhere[] = array('GameEndTime','<=', strtotime($endtime));
  598. $ly = $lyobj->getUserMoney($where, $lywhere);
  599. }
  600. return $om + $km + $ag + $hj + $lcqp + $ly;
  601. }
  602. }
  603. //系统红包生成,用于服务器定时请求,不对前台开放 2019-01-22 anton
  604. public function createSystemRed()
  605. {
  606. $user = $_REQUEST['user'];
  607. $time = $_REQUEST['time'];
  608. $sign = $_REQUEST['sign'];
  609. if(empty($user))
  610. {
  611. echo lang('SystemRed')->get('admin_error');
  612. exit;
  613. }
  614. if(empty($sign))
  615. {
  616. echo lang('SystemRed')->get('sign_error');
  617. exit;
  618. }
  619. $token = lm('Setinfo', 'commons')->where('id',1007)->first();
  620. if(empty($token->infocontent))
  621. {
  622. echo lang('SystemRed')->get('token_error');
  623. exit;
  624. }
  625. if($this->sign($user,$time,$token->infocontent,$sign))
  626. {
  627. $time = ['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','00'];
  628. $curt = date('H',time());
  629. $start = date('Y-m-d H',time()).':00:00';
  630. $end = date('Y-m-d H',time()).':59:59';
  631. foreach ($time as $t)
  632. {
  633. if($curt == $t)
  634. {
  635. $where['start'] = $start;
  636. $where['end'] = $end;
  637. $res = $this->LuckyMoney->checkRed($where);
  638. if(!count($res))
  639. {
  640. _beginTransaction();
  641. $redinfo = $this->red->getRedInfo();
  642. if (count($redinfo) == 0) {
  643. echo lang('SystemRed')->get('red_error');
  644. exit;
  645. }
  646. $redinfo = $redinfo->toArray();
  647. foreach ($redinfo as $k => $v)
  648. {
  649. //获取用户金额
  650. $uinfo = lm('account', 'Commons')
  651. ->leftjoin('account_detailed', 'account_detailed.account_identity', '=', 'account.identity')
  652. ->select('account.identity', 'account_detailed.cash','account.account')
  653. ->where('account.account', '=', $v['username'])
  654. ->first();
  655. if (count($uinfo) == 0) {
  656. echo $v['username'] . lang('SystemRed')->get('account_error');
  657. exit;
  658. }
  659. $uinfo = $uinfo->toArray();
  660. if (floatval($v['red_money']) > floatval($uinfo['cash'])) {
  661. echo $v['username'] . lang('SystemRed')->get('money_error');
  662. exit;
  663. }
  664. try {
  665. $roomid = intval($v['room_id']);
  666. $money = floatval($v['red_money']);
  667. $nos = intval($v['red_num']);
  668. $message = trim($v['red_mark']);
  669. $type = 3;
  670. $luck = $this->LuckyMoney->handleLuckyMoney($uinfo['identity'], $money, $nos, $roomid, $type, $message, function ($redid, float $money, int $nos, int $type) {
  671. $redList = $this->redBag($money, $nos); //生成红包数据
  672. $in_data = [];
  673. foreach ($redList as $d) {
  674. $in_data[] = ['redid' => $redid, 'money' => $d, 'created_at' => date('Y-m-d H:i:s')];
  675. }
  676. lm('Chat_redbag', 'Api')->insert($in_data);
  677. return 1;
  678. });
  679. if(intval($luck) < 0){
  680. Render('', $luck);
  681. }else{
  682. $redData[$k]['data']['data']['lm_id'] = $luck;
  683. $redData[$k]['data']['type'] = 203;
  684. $redData[$k]['data']['time'] = (int)time();
  685. $redData[$k]['data']['data']['room_id'] = $roomid;
  686. $redData[$k]['data']['data']['money'] = $money;
  687. $redData[$k]['data']['data']['type'] = 3;
  688. $redData[$k]['data']['data']['data'] = $message;
  689. $redData[$k]['type'] = 203;
  690. $redData[$k]['has_take'] = 0;
  691. $redData[$k]['time'] = (int)time();
  692. }
  693. _commit();
  694. } catch (\Exception $e) {
  695. _rollback();
  696. Render('', -7045);
  697. }
  698. }
  699. $this->SendMesage($redData);
  700. }else{
  701. echo lang('SystemRed')->get('send_red');
  702. break;
  703. }
  704. }else{
  705. continue;
  706. }
  707. }
  708. }else{
  709. echo lang('SystemRed')->get('sign_error');
  710. exit;
  711. }
  712. }
  713. //红包数据生成
  714. function redBag($money, int $piece, $min = 1)
  715. {
  716. srand(time());
  717. $list = [];
  718. $count = 0;
  719. while ($piece > 1) {
  720. $curr = rand($min, $money * 100 / $piece * 1.5);
  721. $money -= $curr / 100;
  722. $list[] = (float)number_format($curr / 100, 2, '.', '');
  723. $count += $curr / 100;
  724. $piece--;
  725. }
  726. $list[] = (float)number_format($money, 2, '.', '');
  727. $count += $money;
  728. return $list;
  729. }
  730. //推送红包数据
  731. public function SendMesage($redData)
  732. {
  733. $wsport = lm('Setinfo', 'commons')->getInfo(9501);
  734. $server = $wsport[0]['infocontent'];
  735. $server = !empty($server) ? explode('||', $server) : '';
  736. $server = !empty($server[0]) ? explode(':', $server[0]) : '';
  737. if (empty($server[1])) {
  738. echo lang('SystemRed')->get('server_error');
  739. return false;
  740. }
  741. $server = count($server) > 2 ? $server[1] . ':' . $server[2] : $server[1];
  742. $postUrls = $server . '/' . 'srpkg';
  743. $sendData = [
  744. 'sign' => md5(time() . $wsport[0]['extinfo']),
  745. 'time' => (int)time(),
  746. 'redData' => json_encode($redData)
  747. ];
  748. $chs = curl_init();//初始化curl
  749. curl_setopt($chs, CURLOPT_URL, $postUrls);//抓取指定网页
  750. curl_setopt($chs, CURLOPT_HEADER, 0);//设置header
  751. curl_setopt($chs, CURLOPT_TIMEOUT, 15);
  752. curl_setopt($chs, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
  753. curl_setopt($chs, CURLOPT_POST, 1);//post提交方式
  754. curl_setopt($chs, CURLOPT_POSTFIELDS, $sendData);
  755. curl_exec($chs);//运行curl
  756. if (curl_errno($chs) != 0) {
  757. $status = curl_errno($chs);
  758. $msg = lang('SystemRed')->get('server_error');
  759. } else {
  760. $status = 1;
  761. $msg = lang('SystemRed')->get('success');
  762. }
  763. curl_close($chs);
  764. echo lang('SystemRed')->get('sendtime'). date('Y-m-d H:i:s', time()) . ','.lang('SystemRed')->get('status') . $status . ','.lang('SystemRed')->get('msg') . $msg;
  765. }
  766. protected function calcHotOrCold($data) {
  767. $xy28=['specialthree'];
  768. $ssc=['fronttwostar','frontthreestar','behindthreestar','fourstar','fivestar'];
  769. $lhc=['series','selfselect','general_pass','join_born'];
  770. $pk10=['head_two','head_three'];
  771. $k3=['thdiffnum','trnumro','tsnum','tsnumro','twodiffnum'];
  772. $arr=array_merge($xy28,$ssc,$pk10,$k3,$lhc);
  773. $pattern='/'.implode('|',$arr).'/';
  774. $hot=[];
  775. $cold=[];
  776. $count=count($data);
  777. foreach($data as $k=>$v){
  778. foreach($v as $kk=>$vv){
  779. $skip=preg_match($pattern,$vv);
  780. if($skip)continue;
  781. if($k===0)$hot[$vv]=1;
  782. $hot[$vv]++;
  783. }
  784. }
  785. foreach ($hot as $k=>$v){
  786. $cold[$k]=$count-$v;
  787. }
  788. return['same'=>$hot,'dif'=>$cold];
  789. }
  790. //签名验证
  791. protected function sign($user,$time,$token,$sign)
  792. {
  793. if(isset($time) && $time !=0) //时间存在
  794. {
  795. if(time()-intval($time) < 60) //小于一分钟
  796. {
  797. $str = 'user='.$user.'&time='.$time.'&token='.$token;
  798. $md5 = md5($str);
  799. if($md5 == $sign)
  800. {
  801. return true;
  802. }else{
  803. return false;
  804. }
  805. }else{
  806. return false;
  807. }
  808. }else{
  809. $str = 'user='.$user.'&token='.$token;
  810. $md5 = md5($str);
  811. if($md5 == $sign)
  812. {
  813. return true;
  814. }else{
  815. return false;
  816. }
  817. }
  818. }
  819. /**
  820. * 子游戏列表
  821. */
  822. public function getSubGameLists()
  823. {
  824. $child_type = isset($_REQUEST['child_type']) ? $_REQUEST['child_type'] : '';
  825. $is_page = isset($_REQUEST['is_page']) ? $_REQUEST['is_page'] : 0;
  826. $page = isset($_REQUEST['page']) ? $_REQUEST['page'] : 1;
  827. $limit = isset($_REQUEST['limit']) ? $_REQUEST['limit'] : 10;
  828. if(empty($child_type))
  829. {
  830. render('', -1, '请传入子游戏类型');
  831. }
  832. else
  833. {
  834. $subgame = array();
  835. $where[] = array('parent_id','>', 0);
  836. //不需要分页
  837. if($is_page == 0)
  838. {
  839. $subgame = lm('rgame_subclass','commons')
  840. ->where('sub_type', $child_type)
  841. ->where('status', 1)
  842. ->where($where)
  843. ->select('id','sname_en','icon','sname_zh','game_type','recommend','sub_type','child_name','order','parent_id','cate_id','status','extend','corner')
  844. ->orderBy('order','desc')
  845. ->get();
  846. }
  847. //需要分页
  848. else if($is_page == 1)
  849. {
  850. $count = lm('rgame_subclass','commons')
  851. ->where('sub_type', $child_type)
  852. ->where('status', 1)
  853. ->where($where)
  854. ->count();
  855. $count_page = ceil($count / $limit);
  856. if($page > $count_page)
  857. {
  858. render('', -1, '没有更多数据了');
  859. }
  860. $first = ($page - 1) * $limit;
  861. $subgame = lm('rgame_subclass','commons')
  862. ->where('sub_type', $child_type)
  863. ->where('status', 1)
  864. ->where($where)
  865. ->select('id','sname_en','icon','sname_zh','game_type','recommend','sub_type','child_name','order','parent_id','cate_id','status','extend','corner')
  866. ->offset($first)->limit($limit)->orderBy('order','desc')->get();
  867. }
  868. else
  869. {
  870. render('', -1, '分页开关值错误');
  871. }
  872. if(count($subgame) > 0)
  873. {
  874. $arr = $subgame->toArray();
  875. foreach($arr as $key => $val)
  876. {
  877. $arr[$key]['icon'] = '/Public/themes/default/static/gamesimg/'.$val['game_type'].'/'.$val['icon'];
  878. }
  879. render($arr, 1, '子游戏列表获取成功');
  880. }
  881. else
  882. {
  883. render('', -1, '子游戏类型错误');
  884. }
  885. }
  886. }
  887. }