input('lottery_type_id'); $odds = $jczqService->saleLotteries($this->customer(), $lotteryTypeId); return $this->jsonSuccess($odds); } /** * @api {POST} /api/customer/jczq/valid 竞彩足球-验证组合方案是否可用 * @apiVersion 0.1.0 * @apiGroup 客户端 * * @apiParam {Int} lottery_type_id 彩种类型id * @apiParam {String} play_type 玩法 * @apiParam {Object} odds 组合投注信息 * @apiParamExample {json} 请求示例 * { * "lottery_type_id": 1, // 彩种类型id * "play_type": "bf_odds", // 玩法 * "odds": { * 1: { // 彩票赔率数据id * "spf_odds": { // 玩法,如:spf,bf,bqc(胜平负,比分,半全场)等 * "win": 2.3 // 投注的值 * }, * "bf_odds": { * "win": 2.3 * }, * ... * }, * ... * } * } * * @apiSuccessExample {json} 返回结果 * { * "code": 410, * "message": "不允许组合方案", // 验证结果信息(只要code不是200,就是未通过验证) * "data": null * } */ public function valid(Request $request, JczqService $jczqService) { $lotteryTypeId = $request->input('lottery_type_id'); $playType = $request->input('play_type'); $data = $request->input('odds'); $lotteryType = LotteryType::find($lotteryTypeId); if (!$lotteryType) { return $this->jsonFailed('非法数据'); } $lottery = Lottery::active()->where('shop_id', $this->customerShopId()) ->where('lottery_type_id', $lotteryTypeId) ->first(); throw_if(!$lottery, JingCaiException::create('无允许的组合方案', Result::FAILED)); $jczqService->valid($lottery, $playType, $data); return $this->jsonSuccess([]); } /** * @api {POST} /api/customer/jczq/compute 竞彩足球-计算奖金和投注金额 * @apiVersion 0.1.0 * @apiGroup 客户端 * * @apiParam {Int} lottery_type_id 彩种类型id * @apiParam {Int} bets_num 倍数 * @apiParam {Array} pass_mode_keys m串n的key * @apiParam {Object} odds 组合投注信息 * @apiParam {String} play_type 玩法 * @apiParamExample {json} 请求示例 * { * "lottery_type_id": 1, // 彩种类型id * "playgames": { * 1: { // 彩票赔率数据id * "spf_odds": { // 玩法,如:spf,bf,bqc(胜平负,比分,半全场)等 * "win": 2.3 // 投注的值 * }, * "bf_odds": { * "win": 2.3 * }, * ... * }, * ... * } * } * * @apiSuccessExample {json} 返回结果 * { * "code": 200, * "message": "", * "data": { * "money": 24, // 投注金额 * "prize_min": 200, // 最低中奖金额 * "prize_max": 400 // 最高中奖金额 * } * } */ public function compute(Request $request, JczqService $jczqService) { $odds = $request->input('odds'); $betsNum = $request->input('bets_num'); $passModeKeys = $request->input('pass_mode_keys'); // 例如['2.1'] $playType = $request->input('play_type'); if (!$odds) { return $this->jsonFailed('请选择比赛'); } $odds = $jczqService->refreshOdds($odds); $moneyInfo = $jczqService->computePrizeInfo($odds, $betsNum, $passModeKeys); return $this->jsonSuccess($moneyInfo); } /** * @api {POST} /api/customer/jczq/cart 竞彩足球-购入车信息 * @apiVersion 0.1.0 * @apiGroup 客户端 * * @apiParam {Int} lottery_type_id 彩种类型id * @apiParam {Int} bets_num 倍数 * @apiParam {String} play_type 玩法 * @apiParam {Object} odds 组合投注信息 * @apiParamExample {json} 请求示例 * { * "lottery_type_id": 1, // 彩种类型id * "playgames": { * 1: { // 彩票赔率数据id * "spf_odds": { // 玩法,如:spf,bf,bqc(胜平负,比分,半全场)等 * "win": 2.3 // 投注的值 * }, * "bf_odds": { * "win": 2.3 * }, * ... * }, * ... * } * } * * @apiSuccessExample {json} 返回结果 * { * "code": 200, * "message": "", * "data": { * "has_fadan": true,// 是否支持发单 * "has_union": false, // 是否支持合买 * "money": 12, // 投注金额 * "prize_min": 100, // 最低奖金 * "prize_max": 200, // 最高奖金 * "close_time_str": "3214:323 32:32:32截止,请尽快提交投注", // 提示信息 * "pass_mode": * { * "multi": [], // 多选 * "single": [ // 单选 * { * "key": "2.1", * "title": "2串1" * } * ] * } * , * "odds": [ // 购买界面所需信息,字段参考【竞彩足球-投注列表】 * { * "id": 3, * "lottery_type_id": 1, * "odds_id": 1, * "match_id": 1, * "issue_num": "2022-01-01/周一", * "play_num": 21, * "jc_competition_name": "adsf离开家", * "jc_competition_name_full": "发三分大赛", * "jc_home_team_name": "发顺丰", * "jc_home_team_name_full": "发送", * "jc_away_team_name": "fda", * "jc_away_team_name_full": "fda", * "sale_state": "selling", * "is_reverse": 0, * "real_close_time": "1969-12-31 23:50:00", * "order_state": "selling", * "spf_odds": { * "win": 2.85, * "loss": 2.25 * }, * "rq_odds": { * "win": 2.85 * }, * "created_at": null, * "updated_at": null, * "deleted_at": null, * "real_close_str": "23:50截止", * "issue_num_week": "周一", * "issue_num_day": "2022-01-01" * }, * ... * ] * } * } */ public function cart(Request $request, JczqService $jczqService) { $typeId = $request->input('lottery_type_id'); $oddsData = $request->input('odds'); $betsNum = $request->input('bets_num'); $playType = $request->input('play_type'); if (!$oddsData) { return $this->jsonFailed('请选择比赛'); } $lott = Lottery::active()->shopAndType($this->customerShopId(), $typeId)->first(); ThrowException::isTrue(!$lott, '暂不支持该彩种'); $jczqService->valid($lott, $playType, $oddsData); $oddsNum = count($oddsData); $passMode = JczqService::generateZqPassModeInfo($oddsData, $playType); if ($lott->mn == BoolEnum::NO) { $passMode['single'] = []; } $oddsData = $jczqService->refreshOdds($oddsData); $moneyInfo = $jczqService->computePrizeInfo($oddsData, $betsNum, [$oddsNum . '.1']); $resultMatch = $jczqService->getJczqOddsFromData($lott, $oddsData); $earlyCloseTime = null; foreach ($resultMatch as $match) { if (!isset($earlyCloseTime)) { $earlyCloseTime = $match->real_close_time; } if ($earlyCloseTime > $match->real_close_time) { $earlyCloseTime = $match->real_close_time; } } $data = [ 'title' => '竞彩足球', 'money' => $moneyInfo['money'], 'prize_min' => $moneyInfo['prize_min'], 'prize_max' => $moneyInfo['prize_max'], 'close_time_str' => sprintf('%s截止,请尽快提交投注', $earlyCloseTime), 'pass_mode' => $passMode, 'odds' => $resultMatch, 'has_fadan' => true, 'has_union' => $lott->enableHemai(), 'prize_optimize' => $lott->enableOptimizePrize(), ]; return $this->jsonSuccess($data); } /** * @api {POST} /api/customer/jczq/order/create 竞彩足球-创建订单/发单/合买 * @apiVersion 0.1.0 * @apiGroup 客户端 * * @apiParam {Int} lottery_type_id 彩种类型id * @apiParam {Int} bets_num 倍数 * @apiParam {String} play_type 玩法 * @apiParam {String} pass_mode_keys 过关方式 * @apiParam {Int} type 1普通投注;2发单;3合买;4跟单 * @apiParam {String} [fadan_order_no] 跟单的订单no(只有在type=4的时候生效) * @apiParam {Int} [type_mode] 1截止后公开,2公开;3认购可见 * @apiParam {String} [type_desc] 发单/合买描述,发单/合买时必填 * @apiParam {Int} [union_piece_total] 总份数,合买时必填 * @apiParam {Int} [union_piece_buy] 购买份数,合买时必填 * @apiParam {Int} [union_piece_keep] 保底份数,合买时必填 * @apiParam {Int} [union_keep] 是否全额保底:1是,0否,合买时必填 * @apiParam {Int} [union_brokerage] 佣金,合买时必填 * @apiParam {Object} odds 组合投注信息 * @apiParamExample {json} 请求示例 * { * "lottery_type_id":1, // 彩种 * "bets_num":2, // 倍数 * "play_type":"all", // 玩法 * "pass_mode_keys":["2.1"], // 过关方式 * "odds":{ // 赔率/组合投注信息 * "1":{ // 彩票赔率数据id * "spf_odds":{ * "win":2.3, * "loss":3.1 * }, * "rq_odds":{ * "win":1.2 * } * }, * ... * } * } * * @apiSuccessExample {json} 返回结果 * { * "code":200, * "message":"", * "data":{ * "order_sn":"P2023033000000010", // 订单号 * "balance":"0.00", // 余额 * "money":0, // 订单总金额 * "need_pay_money":0, // 需要支付的金额 * "username":"发达", // 用户名 * "lottery":"jc足球混合投注", // 投注彩票信息 * "pay_types":[ // 支付方式 * { * "pay_type":"alipay", * "name":"支付宝" * } * ] * } * } */ public function orderCreate(Request $request, JczqService $service) { $data = $request->all(); $lotteryTypeId = Arr::get($data, 'lottery_type_id'); $lotteryType = LotteryType::find($lotteryTypeId); ThrowException::isTrue(!$lotteryType, '暂不支持该彩种'); /** @var Customer $customer */ $customer = Customer::find($this->customerId()); if (!$this->getPayTypes()) { ThrowException::isTrue($customer->balanceActive()<=0, '该店铺暂未开启支付'); } $order = $service->createOrder($this->customer(), $data); $payMoney = $order->getPayMoney(); /** @var Customer $customer */ $customer = Customer::find($this->customerId()); $balance = $customer->balanceActive(); return $this->jsonSuccess([ 'order_sn' => $order->order_sn, 'balance' => $balance, 'money' => $payMoney, 'need_pay_money' => Helps::floatFormat($balance >= $payMoney ? 0 : $payMoney - $balance), 'username' => $this->customer()->name, 'lottery' => $order->lotteryName(), 'pay_types' => $this->getPayTypes() ]); } /** * @api {POST} /api/customer/jczq/order/optimize_prize 竞彩足球-奖金优化 * @apiVersion 0.1.0 * @apiGroup 客户端 * * @apiParam {Int} optimize_type 1平均优化;2搏热;3搏冷 * @apiParam {Int} money 购买钱数 * @apiParam {Array} pass_mode_keys 过关方式 * @apiParam {Object} odds 组合投注信息 * @apiParamExample {json} 请求示例 * { * "bets_num":2, // 倍数 * "pass_mode_keys":["2.1"], // 过关方式 * "odds":{ // 赔率/组合投注信息 * "1":{ // 彩票赔率数据id * "spf_odds":{ * "win":2.3, * "loss":3.1 * }, * "rq_odds":{ * "win":1.2 * } * }, * ... * } * } * * @apiSuccessExample {json} 返回结果 * { * } */ public function optimizePrize(Request $request, JczqService $service) { $optimizeType = $request->input('optimize_type'); $oddsData = $request->input('odds'); $money = $request->input('money'); $passModeKeys = $request->input('pass_mode_keys'); if (!$oddsData) { return $this->jsonFailed('请选择比赛'); } $lottType = LotteryType::where('type', LottType::JCZQ)->first(); $lott = Lottery::where('shop_id', $this->customerShopId()) ->where('lottery_type_id', $lottType->id) ->first(); $lott->validEnableOptimizePrize(); ThrowException::isTrue(!$passModeKeys, '请选择串关方式'); $oddsData = $service->refreshOdds($oddsData); $ids = array_keys($oddsData); $odds = JczqOdds::whereIn('id', $ids)->get(); $zuhe = $service->generateBetsInfo($oddsData, $passModeKeys, 1); $optimizeZuhe = $service->optimizePrize($zuhe, $money, $optimizeType); return $this->jsonSuccess([ 'zuhe' => $optimizeZuhe, 'odds_data' => $odds, ]); } }