BaseAdapter.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380
  1. <?php
  2. namespace Biz\SetAdapter\Result;
  3. abstract class BaseAdapter {
  4. //$params=array('status'=>0,'data'=>'','msg'=>'');
  5. /**
  6. * 统一接口输出风格
  7. * @param string $path
  8. * @param array $params
  9. * @return array
  10. */
  11. public function update(string $path, array $params) {
  12. if ((int)$params['status'] > 0) {
  13. $params['status'] = 1;
  14. }
  15. $data = $params['data'];
  16. if ($data === null) {
  17. $data = new \stdClass();
  18. } else {
  19. $json = json_encode($data);
  20. $json = str_replace('\":null', '\\"\\"', $json);
  21. $json = str_replace('null', '""', $json);
  22. $data = json_decode($json, 1);
  23. }
  24. $params['data'] = $data;
  25. self::fix($path, $params);
  26. return $params;
  27. }
  28. /**
  29. * 特殊接口转换调用方法注册
  30. * @param $path
  31. * @param $data
  32. */
  33. protected function fix($path, &$data) {
  34. $path = strtolower($path);
  35. self::betDetailFix($path, $data);
  36. self::filterNoneSetting($path, $data);
  37. self::fixOddsArray($path, $data);
  38. if ($_GET['devicetype'] === 'ios') self::fixAccountSum($path, $data);
  39. else
  40. self:: zbAccountSumFix($path, $data);
  41. self::filterPrize($path, $data);
  42. self::fixLongPrizeCode($path, $data);
  43. self::filterDefInfo($path, $data);
  44. self:: filterNoneDataInHis($path, $data);
  45. self:: zbListFix($path, $data);
  46. }
  47. /**
  48. * 将玩法详情改为数组
  49. * @param $path
  50. * @param $data
  51. * @return mixed
  52. */
  53. protected function betDetailFix($path, &$data) {
  54. $tpath = strtolower('Api/BetRecord/GetDetails');
  55. if ($data['status'] != 1) return $data;
  56. if ($path === $tpath) {
  57. $open_codes = is_array($data['data']['opencodes']) ? array_values($data['data']['opencodes']) : [];
  58. $back_water = 0;
  59. $details = $data['data']['details'];
  60. $details = str_replace('<br/>', '$', $details);
  61. $details = str_replace(['(¥', ')'], [',', ''], $details);
  62. $details = preg_replace('/\s+/u', ',', $details);
  63. $details = substr($details, 0, -1);
  64. $arr = explode('$', $details);
  65. // dd($arr, $details);
  66. $arr2 = [];//分组所选的玩法详情
  67. foreach ($arr as $k => $v) {
  68. $tmp = explode(',', $v);
  69. array_unshift($tmp, $data['data']['ptypename']);
  70. if (isset($arr2[$tmp[0]])) {
  71. $arr2[$tmp[0]]['play_code'] .= ',' . $tmp[1];
  72. $arr2[$tmp[0]]['money'] += $tmp[2];
  73. $arr2[$tmp[0]]['prize_status'] = $arr2[$tmp[0]]['prize_status'] === '中奖' ? '中奖' : $tmp[3];
  74. } else {
  75. $arr2[$tmp[0]]['cat'] = $tmp[0];
  76. $arr2[$tmp[0]]['play_code'] = $tmp[1];
  77. $arr2[$tmp[0]]['money'] = $tmp[2];
  78. $arr2[$tmp[0]]['prize_status'] = $tmp[3];
  79. }
  80. }
  81. //投注玩法列表
  82. // dd($open_codes);
  83. $arr2 = array_values($arr2);
  84. foreach ($open_codes as $k => $v) {
  85. //$v=>当前玩法分组数组
  86. foreach ($v as $kk => $vv) {
  87. $m = $vv['settings']['multiple'];
  88. if (!isset($arr2[$k]['multiple'])) {
  89. $arr2[$k]['multiple'] = $m;
  90. } else {
  91. if ($arr2[$k]['multiple'] !== $m) {
  92. $arr2[$k]['multiple'] = '混合';
  93. }
  94. }
  95. $f_rate = (float)$vv['settings']['back'] ?? 0;
  96. $back_water += $arr2[$k]['money'] * $f_rate;
  97. }
  98. }
  99. $data['data']['details'] = $arr2;
  100. $data['data']['back_water'] = number_format($back_water, 2, '.', '');
  101. }
  102. return $data;
  103. }
  104. /**
  105. * 过滤空值属性
  106. * @param $path
  107. * @param $data
  108. * @return mixed
  109. */
  110. protected function filterNoneSetting($path, &$data) {
  111. $t = strtolower('Api/Settings/Query');
  112. if ($path !== $t) return $data;
  113. foreach ($data['data']['data'] as $k => $v) {
  114. if (!$v['settings']) {
  115. unset($data['data']['data'][$k]);
  116. }
  117. }
  118. if (strpos($_GET['game'], 'sixlottery') !== false) {
  119. $data['data']['data']['twoface']=[
  120. 'name'=>'twoface',
  121. 'parent'=>'',
  122. 'isback'=>0,
  123. ];
  124. $data['data']['data']['specialnum']=[
  125. 'name'=>'specialnum',
  126. 'parent'=>'',
  127. 'isback'=>0,
  128. ];
  129. $data['data']['data']['generalnum']=[
  130. 'name'=>'generalnum',
  131. 'parent'=>'',
  132. 'isback'=>0,
  133. ];
  134. $data['data']['data']['selfselect']=[
  135. 'name'=>'selfselect',
  136. 'parent'=>'',
  137. 'isback'=>0,
  138. ];
  139. $data['data']['data']['series_bornend']=[
  140. 'name'=>'series_bornend',
  141. 'parent'=>'',
  142. 'isback'=>0,
  143. ];
  144. $data['data']['data']['series']=[
  145. 'name'=>'series',
  146. 'parent'=>'',
  147. 'isback'=>0,
  148. ];
  149. }
  150. return $data;
  151. }
  152. /**
  153. * 将odds属性列表转换为odds对象数组;back统一格式化为string
  154. * @param $path
  155. * @param $data
  156. * @return mixed
  157. */
  158. protected function fixOddsArray($path, &$data) {
  159. $t = strtolower("Api/Long/getGameList");
  160. if ($path !== $t) {
  161. return $data;
  162. }
  163. foreach ($data['data'] as $k => $v) {
  164. $oddsArr = json_decode($v['odds'], 1);
  165. foreach ($oddsArr as $kkk => $vvv) {
  166. $vvv['settings']['back'] = (string)$vvv['settings']['back'];
  167. $hasBackWater = 0;
  168. if (gettype($vvv['settings']['multiple']) === 'string') {
  169. $max = (string)$vvv['settings']['multiple'];
  170. $min = '0';
  171. $vvv['settings']['multiple'] = ['max' => $max, 'min' => $min];
  172. $vvv['settings']['back'] = $vvv['settings']['back'] ?: '0';
  173. }
  174. if ($vvv['settings']['back'])
  175. $hasBackWater = 1;
  176. $vvv['settings']['hasBackWater'] = $hasBackWater;
  177. $vvv['cn_name'] = $this->getChName($vvv['name']);
  178. ksort($vvv);
  179. $oddsArr[$kkk] = $vvv;
  180. }
  181. $oddsArr = array_values($oddsArr);
  182. $v['odds'] = $oddsArr;
  183. $data['data'][$k] = $v;
  184. }
  185. return array_values($data['data']);
  186. }
  187. /**
  188. * 将账户统计中的资金类型转换为对象数组
  189. * @param $path
  190. * @param $data
  191. * @return mixed
  192. */
  193. protected function fixAccountSum($path, &$data) {
  194. $t = strtolower('Api/UserDetails/AccountSum');
  195. if ($path !== $t) return $data;
  196. $tmp = [];
  197. foreach ($data['data'] as $k => $v) {
  198. $tmp[] = ['key' => $k, 'value' => $v];
  199. }
  200. return $data['data'] = $tmp;
  201. }
  202. /**
  203. * 过滤历史开奖数据中无用数据和未开奖数据
  204. * @param $path
  205. * @param $data
  206. * @return mixed
  207. */
  208. protected function filterPrize($path, &$data) {
  209. $t = strtolower('Api/UserDetails/TrendChart');
  210. if ($path !== $t) return $data;
  211. if ($data['data'] === null)
  212. return $data['data'] = [];
  213. $newData = [];
  214. $newData['status'] = $data['status'];
  215. $newData['msg'] = $data['msg'];
  216. $newData['data']['icon'] = $data['data']['icon'];
  217. $newData['data']['name'] = $data['data']['name'];
  218. $newData['data']['data'] = [];
  219. if (isset($data['data']['page']))
  220. $newData['data']['page'] = $data['data']['page'];
  221. foreach ($data['data']['data'] as $k => $v) {
  222. $v['codes'] = str_replace(' ', '', $v['codes']);
  223. if (!$v['codes'] || $v['codes'] === '-1') {
  224. unset($data['data'][$k]);
  225. continue;
  226. }
  227. $item = [
  228. 'codes' => $v['codes'],
  229. 'info_no' => $v['info_no']
  230. ];
  231. $cond = mb_strpos($_GET['name'], 'sixlottery');
  232. if ($cond >= 0) {
  233. $item['specialcodea'] = $v['specialcodea'];
  234. $item['specialborn'] = $v['specialborn'];
  235. $item['specialcolorwave'] = $v['specialcolorwave'];
  236. $item['specialendcode'] = $v['specialendcode'];
  237. $item['specialheadcode'] = $v['specialheadcode'];
  238. }
  239. if (strpos($data['data']['name'], '28')) {
  240. $item['other'] = json_decode($v['extra']);
  241. }
  242. $newData['data']['data'][] = $item;
  243. }
  244. return $data = $newData;
  245. }
  246. /**
  247. * 修改未开奖长龙玩法名称丢失数据
  248. * @param $path
  249. * @param $data
  250. * @return mixed
  251. */
  252. protected function fixLongPrizeCode($path, &$data) {
  253. $t = strtolower('Api/long/getprizelist');
  254. if ($path !== $t) return $data;
  255. foreach ($data['data'] as $k => $v) {
  256. if (!isset($v['prize_code']))
  257. $v['prize_code'] = '';
  258. $data['data'][$k] = $v;
  259. }
  260. return $data;
  261. }
  262. /**
  263. * 过滤试玩接口多余数据
  264. * @param $path
  265. * @param $data
  266. * @return mixed
  267. */
  268. protected function filterDefInfo($path, &$data) {
  269. $t = strtolower('Api/SystemInfo/DefaultInfo');
  270. if ($path !== $t) return $data;
  271. unset($data['data']['newdevice']);
  272. return $data;
  273. }
  274. /**
  275. * 过滤开奖历史中的号码空格、未开奖记录
  276. * @param $path
  277. * @param $data
  278. * @return mixed
  279. */
  280. protected function filterNoneDataInHis($path, &$data) {
  281. $t = strtolower('Api/GameCenter/Lotterytwo');
  282. if ($path !== $t)
  283. return $data;
  284. if (!isset($data['data']['tolist']))
  285. $data['data']['tolist'] = [];
  286. foreach ($data['data']['tolist'] as $k => $v) {
  287. $codes = $v['codes'] = str_replace(' ', '', $v['codes']);
  288. if (!$codes || $codes === '-1') {
  289. unset($data['data']['tolist'][$k]);
  290. continue;
  291. }
  292. unset($v['prizes']);
  293. $pos = strpos($_GET['game_name'], '28');
  294. if (!$pos) unset($v['other']);
  295. $data['data']['tolist'][$k] = $v;
  296. $data['data']['tolist'] = array_values($data['data']['tolist']);
  297. }
  298. return $data;
  299. }
  300. /**
  301. * 账变列表接口适配
  302. * @param $path
  303. * @param $data
  304. */
  305. protected function zbListFix($path, &$data) {
  306. $t = strtolower('Api/userDetails/Querry');
  307. if ($path !== $t)
  308. return;
  309. $data['status'] = 1;
  310. if (!$data['data']) $data['data'] = [];
  311. }
  312. /**
  313. * 账变详情适配
  314. * @param $path
  315. * @param $data
  316. */
  317. protected function zbAccountSumFix($path, &$data) {
  318. $dic = include(ROOT_PATH . '/Application/Api/Lang/TradeType.php');
  319. $t = strtolower('Api/userDetails/AccountSum');
  320. if ($path !== $t)
  321. return;
  322. $conv = [];
  323. foreach ($data['data'] as $k => $v) {
  324. $type = $dic[$k];
  325. $key = $type['key'];
  326. $title = $type['title'];
  327. if (!$title) continue;
  328. $conv[$key] = ['id' => $k, 'value' => $v, 'title' => $title];
  329. }
  330. $data['data'] = $conv;
  331. }
  332. /**
  333. *转换玩法为中文名
  334. * @param $name
  335. * @return string
  336. */
  337. private function getChName($name): string {
  338. $way = [
  339. 'single' => '单',
  340. 'double' => '双',
  341. 'dobule' => '双',
  342. 'lastsingle' => '尾单',
  343. 'lastdouble' => '尾双',
  344. 'lastbig' => '尾大',
  345. 'lastsmall' => '尾小',
  346. 'big' => '大',
  347. 'small' => '小',
  348. ];
  349. $arr = explode('_', $name);
  350. if (count($arr) === 1) {
  351. $arr = explode('-', $name);
  352. }
  353. if (count($arr) === 1) {
  354. return '未知';
  355. }
  356. $count = count($arr);
  357. return $way[$arr[$count - 1]];
  358. }
  359. }