where('cdate', $cdate) ->where('rank_fame', 1) ->orderBy('last_prize', 'desc') ->limit(4) ->get(); $hitRate = CustomerRanking::with('customer:id,name,nickname,avatar,remark') ->where('cdate', $cdate) ->where('rank_hit_rate', 1) ->orderBy('wined_max7', 'desc') ->limit(4) ->get(); $prifit = CustomerRanking::with('customer:id,name,nickname,avatar,remark') ->where('cdate', $cdate) ->where('rank_profit', 1) ->orderBy('last_prize', 'desc') ->limit(4) ->get(); $data = [ 'lian_hong' => $hitRate, 'cheng_ming' => $fames, 'sheng_lv' => $prifit, ]; $this->setGendanNum($data); return $this->jsonSuccess($data); } protected function setGendanNum(&$data) { $values = array_values($data); $customerRankings = collect(); foreach ($values as $item) { $customerRankings = $customerRankings->merge($item); } $customerIds = $customerRankings->pluck('customer_id')->toArray(); $allowGendanNum = []; if ($customerIds) { $allowGendanNum = Order::select([ 'customer_id', DB::raw('count(*) as c') ]) ->where('lottery_state', LottState::WAIT) ->where('type', OrderType::FADAN) ->whereIn('customer_id', $customerIds) ->where('pay_state', PayState::SUCCESS) ->where('odds_early_close_time', '>', date('Y-m-d H:i:s')) ->groupBy('customer_id') ->pluck('c', 'customer_id') ->toArray(); } foreach ($data as $k => &$items) { foreach ($items as &$item) { $item->gendan_num = Arr::get($allowGendanNum, $item->customer_id, 0); } } } /** * @api {GET} /api/customer/order/ranking_list 排名详情 */ public function rankingList(Request $request) { $rankTypes = [ 'rank_fame' => 'last_prize', 'rank_hit_rate' => 'wined_max7', 'rank_profit' => 'profit_lv7' ]; // rank_type: rank_fame, rank_hit_rate,rank_profit $rankType = $request->input('rank_type'); $sortField = Arr::get($rankTypes, $rankType); if (!$rankType || !$sortField) { return $this->jsonSuccess([]); } $list = CustomerRanking::with('customer:id,name,nickname,avatar,remark') ->where('cdate', date('Ymd')) ->where($rankType, 1) ->orderBy($sortField, 'desc') ->orderBy('wined_last7', 'desc') ->limit(10) ->get(); $customerIdList = []; foreach ($list as $item) { $customerIdList[] = $item->customer_id; } $followed = CustomerFollow::whereIn('customer_id', $customerIdList) ->where('follower_id', $this->customerId()) ->pluck('follower_id', 'customer_id') ->toArray(); foreach ($list as $item) { $item->followed = Arr::get($followed, $item->customer_id) ? true : false; } return $this->jsonSuccess([ 'data' => $list, 'total' => 0 ]); } // {GET} /api/customer/order/fadan_customers 跟单-大厅列表 public function fadanCustomers(Request $request) { $nickname = $request->input('nickname'); if (!$nickname) { return $this->jsonSuccess(); } $customers = Order::leftJoin('customer', 'order.customer_id', 'customer.id') ->select([ 'customer.id', 'customer.name', 'customer.nickname', 'customer.avatar', 'customer.fans_num', 'customer.fadan_num', 'customer.follower_num', DB::raw('count(*) as c') ]) ->where('order.type', OrderType::FADAN) // ->where('customer.follower_num', '>', 0) ->whereLike('customer.nickname', $nickname) ->groupBy('customer.id') ->paging(); $customerIdList = []; foreach ($customers as $item) { $customerIdList[] = $item->id; } $rankings = CustomerRanking::where('customer_id', $customerIdList) ->where('cdate', date('Ymd')) ->get() ->keyBy('customer_id'); foreach ($customers as $item) { $item->ranking = Arr::get($rankings, $item->id); } return $this->jsonSuccess($customers); } /** * @api {POST} /api/customer/order/copies 跟单-大厅列表 * @apiVersion 0.1.0 * @apiGroup 客户端 * * @apiParam {String} filter hit_rate:命中率;hot: 跟单人气;money: 自购金额;follow: 我的关注 * @apiParam {String} [nickname] 彩民昵称 * * @apiSuccessExample {json} 返回结果 * { * "code": 200, * "message": "", * "data": { * "current_page": 1, * "data": [ * { * "nickname": "", // 用户昵称 * "name": "发达", // 用户名称 * "win_alway_num": 0, // 连胜次数 * "avatar": "", // 用户头像 * "id": 1, * "customer_id": 1, * "lottery_id": 1, * "money": 24, // 自购金额 * "pid": 0, * "odds_early_close_time": "2023-04-05 15:48:38", // 结束时间 * "play_type": "mixed", * "pass_mode": [ // 玩法 * "2.1" * ], * "copy_num": 0, * "play_type_name": "混合投注", // 玩法名称 * "buy_type_name": "自购", // 购买类型 * "pass_mode_name": [ * "2串1" * ], * "lottery": { * "id": 1, * "name": "竞彩足球", // 彩种名称 * "description": "出票,最低投注0元,停售前0分钟截止投注" * } * }, * ], * "from": 1, * "per_page": 20, * "to": 2, * "total": 2 * } * } */ public function copies(Request $request) { ThrowException::isTrue(!Helps::genDanEnable(), '系统维护中...'); $size = $request->input('size'); $filter = $request->input('filter'); $nickname = $request->input('nickname'); $customerIds = []; if ($nickname) { $customerIds = Customer::whereLike('nickname', $nickname)->pluck('id')->toArray(); if (!$customerIds) { return $this->jsonSuccess(); } } $query = Order::with([ 'lottery:id,name', ]) ->leftJoin('customer', 'order.customer_id', '=', 'customer.id') ->select([ 'customer.nickname', 'customer.name', 'customer.win_alway_num', 'customer.avatar', 'order.id', 'order.order_sn', 'order.customer_id', 'order.lottery_id', 'order.money', 'order.pid', 'order.odds_early_close_time', 'order.play_type', 'order.pass_mode', 'order.gendan_num', 'order.type' ]) ->where('type', OrderType::FADAN) ->where('order.pay_state', PayState::SUCCESS) ->where('odds_early_close_time', '>', date('Y-m-d H:i:s')) // ->whereIn('order.lottery_state', [LottState::PENDING, LottState::WAIT, LottState::DRAFT]); ->where('order.lottery_state', LottState::WAIT); if ($nickname && $customerIds) { $query->whereIn('customer_id', $customerIds); } // TODO:: 我的关注 if ($filter == self::FILTER_FOLLOW) { $follows = CustomerFollow::where('follower_id', $this->customerId())->get()->toArray(); if (!$follows) { return $this->jsonSuccess([ 'data' => [], 'total' => 0, 'per_page' => 20 ]); } $query->whereIn('customer_id', array_column($follows, 'customer_id')); } if ($filter == self::FILTER_HIT_RATE) { $query->orderBy('customer.win_alway_num', 'desc') ->orderBy('customer.win_hit_rate', 'desc'); } else if ($filter == self::FILTER_HOT) { $query->orderBy('order.gendan_num', 'desc'); } else if ($filter == self::FILTER_MONEY) { $query->orderBy('order.money', 'desc'); } $orders = $query->paging($size); foreach ($orders as $item) { $item->avatar = Helps::resizeImage($item->avatar); } return $this->jsonSuccess($orders); } /** * @api {POST} /api/customer/order/copy 跟单创建 * @apiVersion 0.1.0 * @apiGroup 客户端 * * @apiParam {String} order_sn 订单编号 * @apiParam {Float} money 金额 * @apiParam {Int} bets_num 倍数 * @apiParamExample {json} 请求示例 * { * "id":1, // 订单id * "money":2, // 金额 * "bets_num":2, * } * * @apiSuccessExample {json} 返回结果 * { * "code":200, * "message":"", * "data":{ * "order_sn":"P2023033000000010", // 订单号 * "balance":"0.00", // 余额 * "money":0, // 订单金额 * "username":"发达", // 用户名 * "lottery":"jc足球混合投注", // 投注彩票信息 * "pay_types":[ // 支付方式 * { * "pay_type":"alipay", * "name":"支付宝" * } * ] * } * } */ public function copy(Request $request) { $orderSn = $request->input('order_sn'); throw_if(!$orderSn, JingCaiException::create('id不能为空!')); $betsNum = $request->input('bets_num'); throw_if($betsNum < 1 || !is_integer($betsNum), JingCaiException::create('投注倍数有误')); /** @var Order $od */ $od = Order::sn($orderSn)->first(); ThrowException::isTrue(!$od, '所跟订单不存在'); ThrowException::isTrue($od->type != OrderType::FADAN, '请在跟单大厅中跟单'); // ThrowException::isTrue(!$od->canCopy(), '已无法跟单,请选择大厅中的其他跟单'); ThrowException::isTrue($od->customer_id == $this->customerId(), '无法跟单自己的发单'); ThrowException::isTrue($od->lottery_state != LottState::WAIT, '订单状态有误'); ThrowException::isTrue(date('Y-m-d H:i:s') > $od->odds_early_close_time, '所跟订单已结束投注'); /** @var Order $gendan */ $gendan = Order::where('pid', $od->id)->where('customer_id', $this->customerId())->first(); if ($gendan) { // if ($gendan->pay_state == PayState::SUCCESS) { // if (in_array($gendan->lottery_state, $gendan->gendanLotteryState())) { // ThrowException::run('无法重复跟单'); // } // } if ($gendan->pay_state == PayState::UNPAID) { $gendan->where('id', $gendan->id)->where('pay_state', PayState::SUCCESS)->delete(); } } $service = LotteryService::getJingcaiServiceByOrder($od); $order = $service->copyOrder($this->customer(), $od, $request->all()); ThrowException::isTrue(!$order, '不支持跟单'); $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 {GET} /api/customer/order/show 订单详情(普通投注和发单) * @apiVersion 0.1.0 * @apiGroup 客户端 * * @apiParam {String} order_sn 订单编号 * * @apiSuccessExample {json} 返回结果 * { * "code": 200, * "message": "", * "data": { * "lottery_type": { * "id": 1, * "type": "jczq", //jczq:竞彩足球,jclq:竞彩篮球,ctzq_jqc4:场进球彩,ctzq_bqc6:场半全场(根据此字段判断订单详情中的投注信息) * "name": "jc足球" * } * "customer":{ // 投注人 * "id":2, * "name":"", * "nickname":"", // 投注人名 * "level_name":"储备组长", * "level_score_group":"5000", * "lottery_state_name":"", * "client_type_name":"未知" * }, * "id": 2, * "pid": 0, * "lottery_is_wined": true, // true中奖;false未中奖 * "order_sn": "P2023040900000002", * "customer_id": 1, * "lottery_id": 1, * "shop_id": 0, * "lottery_type_id": 0, * "type": 1, * "copy_num": 0, // 跟单数 * "bets_num": 2, // 倍数 * "piao_num": 0, // * "money": 24, // 购买金额 * "prize_min": "11.04", // 最低奖金 * "prize_max": "142.56", // 最高奖金 * "pass_mode": [ * "2.1" * ], * "play_type": "mixed", * "pay_type": "", * "pay_state": "success", * "pay_at": "2023-04-09 03:41:06", * "odds_early_close_time": "2023-04-05 15:38:38", * "odds_late_close_time": "2023-04-06 15:38:38", * "lottery_state": 5, * "lottery_prize": "0.00", // 中奖金额 * "lottery_tax_prize": "0.00", // 中奖金额 * "type_mode": 1, 1截止后公开,2公开;3认购可见 * "type_desc": "浪费大家发的啦", * "created_at": "2023-04-09T03:32:51.000000Z", * "updated_at": "2023-04-09T03:41:06.000000Z", * "deleted_at": null, * "sellings": [ // 4场进球彩/6场半全场 * { * "no": "01", // 序号 * "team_name": "jc_home_team_name+1", // 球队名 * "odds": [ // 购买的比分 * 1, * 2 * ] * }, * ], * "sellings": [ // 竞彩篮球,竞彩足球 * { * "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", * "id": 3, * "order_id": 2, * "jczq_odds_id": 3, * "odds_id": 1, * "match_id": 1, * "odds_result": 0, * "issue_num_week": "周一", * "issue_num_day": "2022-01-01", * "vs_b": "发顺丰", * "vs_m": "vs", * "vs_a": "fda", * "half_time_score": "fda", // 足球:半场比分 * "full_time_score": "fda", // 足球:全场比分 * "home_score": "fda", // 篮球: 主队得分 * "away_score": "fda", // 篮球: 客队得分 * "play_items": [ // 每种玩法和对应的投注项 * { * "win_result": "", * "play_name": "胜平负", // 玩法 * "play_items": [ * { * name: "胜", // 投注项 * wined: true, // 是否中 * } * ] * } * ] * }, * * ], * "chang_num": 2, * "pass_mode_names": [ // 串关 * "2x1" * ], * "play_name": "竞彩足球", // 彩种 * "play_type_name": "混合投注", // 玩法 * "buy_type_name": "自购", * "pass_mode_name": [ * "2串1" * ], * "materials": [], * "gendan_info": { // 跟单信息 * "brokerage":1, // 跟单佣金 * "count_gendan":1, // 跟单人数 * "count_default_show":10, // 默认人数 * "list":[ * { * "id":16, * "pid":13, * "customer_id":2, * "money":20, // 跟单金额 * "lottery_state":5, * "lottery_tax_prize":"0.00", // 税后奖金 * "play_type_name":"", * "buy_type_name":"", * "pass_mode_name":[ * * ], * "lottery_estimate_send_prize":"0.00", * "gendan_brokerage":"0.00", * "customer":{ // 投注人 * "id":2, * "name":"", * "nickname":"", // 投注人名 * "level_name":"储备组长", * "level_score_group":"5000", * "lottery_state_name":"", * "client_type_name":"未知" * }, * "p_order":{ // 发单 * "id":13, * "order_sn":"P2023050500000004", * "customer_id":1, * "play_type_name":"", * "buy_type_name":"", * "pass_mode_name":[ * * ], * "lottery_estimate_send_prize":null, * "gendan_brokerage":null, * "customer":{ // 发单人 * "id":1, * "nickname":"", * "name":"发达", * "level_name":"储备组长", * "level_score_group":"5000", * "lottery_state_name":"", * "client_type_name":"未知" * } * } * } * ] * } * } * } * */ public function show(Request $request) { $orderSn = $request->input('order_sn'); /** @var Order $order */ $order = Order::with([ 'materials:id,order_id,path', 'receiver:id,name', 'lotteryType:id,type,name', 'customer:id,nickname,name,avatar' ])->sn($orderSn)->first(); ThrowException::isTrue(!$order, '订单不存在'); $order->withShuziCai(); if ($order->type == OrderType::UNION) { if ($order->id != $order->pid) { $order = Order::with([ 'materials:id,path,order_id', 'receiver:id,name', 'lotteryType:id,type,name', 'customer:id,nickname,name,avatar' ])->where('id', $order->pid)->first(); } } $order->p_order = null; if ($order->pid > 0) { $pOrder = Order::with('customer:id,nickname,name') ->select('id', 'customer_id') ->find($order->pid); $order->p_order = $pOrder; $order->p_order->fadan_lv = Config::fadanAllFeeLv() * 100 . '%'; } $jingcaiService = LotteryService::getJingcaiServiceByOrder($order); $order->gendan_info = $order->getGendanInfo(); $order->union_info = $order->getUnionInfo(); $orderData = $jingcaiService->showOrder($this->customer(), $order); $closeTime = $order->getMatchStartTime(); $orderData->all_closed = true; if (($orderData->type == OrderType::FADAN && $this->customerId()!= $orderData->customer_id) || $orderData->type == OrderType::GENDAN || ($orderData->type == OrderType::UNION && $this->customerId() != $orderData->customer_id)) { if ($closeTime >= time()) { unset($orderData->materials); $orderData->materials = []; $orderData->all_closed = false; } if ($orderData->type_mode != 1) { $orderData->all_closed = true; } } return $this->jsonSuccess($orderData); } /** * @api {GET} /api/customer/order/gendan_list 订单详情-跟列列表分页 * @apiVersion 0.1.0 * @apiGroup 客户端 * * @apiParam {String} order_sn 订单编号 * * @apiSuccessExample {json} 返回结果,参考订单详情中的gendan列表数据 * {} */ public function gendanList(Request $request) { $customerId = $this->customerId(); $orderSn = $request->input('order_sn'); $size = $request->input('size'); ThrowException::isTrue(!$orderSn, '缺少参数'); $order = Order::where('order_sn', $orderSn)->first(); ThrowException::isTrue(!$order, '参数无效'); $query = Order::with([ 'customer:id,name,nickname', 'pOrder:id,order_sn,customer_id', 'pOrder.customer:id,nickname,name' ]) ->select(['id', 'pid', 'customer_id', 'money', 'lottery_state', 'lottery_tax_prize', 'lottery_gendan_brokerage', 'lottery_gendan_brokerage_all']) ->where('pid', $order->id) ->where('pay_state', PayState::SUCCESS) ->where('created_date', '>', Config::faDanVisibleDate()) ->whereIn('lottery_state', [LottState::WAIT, LottState::WIN, LottState::LOSS, LottState::DRAFT, LottState::SEND]); if ($customerId == $order->customer_id) { $result = $query->orderBy('money', 'desc') ->paging($size); } else { $page = $request->input('page'); $gendanList = $query->orderBy('money', 'desc') ->limit(10) ->get(); $gt1Page = $page > 1; $result['data'] = $gt1Page ? [] : $gendanList; $result['per_page'] = $gt1Page ? 0 : 10; $result['current_page'] = $gt1Page ? 0 : $page; $result['total'] = $gt1Page ? 0 : 10; } return $this->jsonSuccess($result); } /** * @api {POST} /api/customer/order/unions 合买-列表 * @apiVersion 0.1.0 * @apiGroup 客户端 * * @apiParam {Int} [lottery_type_id] 彩种类型id * @apiParam {String} sort_filter schedule进度,new最新,seven七日命中,follow我的关注 * * @apiSuccessExample {json} 返回结果 * { * "code":200, * "message":"", * "data":{ * "current_page":1, * "data":[ * { * "customer":{ * "id":1, * "nickname":"大象", // 合买发起人 * "avatar":"/avatar/TM1f852RwuK2Dh6b5xcfT8q3xPOdY2I3nKMl1G5P.png", // 头像 * "name":"发达", * "level_score":0, * "level_name":"储备组长", * "level_score_group":"5000", * "lottery_state_name":"", * "client_type_name":"未知" * }, * "lottery":{ * "id":1, * "name":"竞彩足球", // 彩种 * }, * "id":2, * "order_sn":"P2023041800000002", * "money":24, // 方案金额 * "odds_early_close_time":"2023-04-05 15:38:38", // 截止时间 * "odds_late_close_time":"2023-04-06 15:38:38", * "type_mode":3, * "type_desc":"这是个合买", // 合买宣言 * "union_pay_success":0, * "union_brokerage":1, // 佣金比例 * "union_keep":1, // 全额保底:1是;0否 * "union_piece_keep":6, // 保底份数 * "union_piece_self":0, // 发起人购买份数 * "union_piece_buy":6, // 已购买份数 * "union_piece_total":12, // 总份数 * * } * ], * "from":1, * "per_page":20, * "to":4, * "total":4 // 总条数 * } * } * */ public function unions(Request $request) { $size = $request->input('size'); $lottery_type_id = $request->input('lottery_type_id'); // schedule进度,new最新,seven七日命中,follow我的关注 $sort_filter = $request->input('sort_filter'); $query = Order::with([ 'customer:id,nickname,avatar,name,level_score', 'lottery:id,name' ]) ->where('shop_id', $this->customerShopId()) ->whereRaw('id=pid') ->where('type', OrderType::UNION) ->where('pay_state', PayState::SUCCESS) ->where('odds_early_close_time', '>', date('Y-m-d H:i:s')) ->where('lottery_state', LottState::PENDING); if ($lottery_type_id) { $query->where('lottery_type_id', $lottery_type_id); } if ($sort_filter == 'schedule') { $query->orderBy('union_schedule', 'desc'); } if ($sort_filter == 'new') { $query->orderBy('id', 'desc'); } $orders = $query->paging($size); return $this->jsonSuccess($orders); } /** * @api {POST} /api/customer/order/union_show 合买-详情 * @apiVersion 0.1.0 * @apiGroup 客户端 * * @apiParam {String} order_sn 订单编号 * * @apiSuccessExample {json} 返回结果 * { * "code":200, * "message":"", * "data":{ * "customer":{ * "id":1, * "name":"发达", // 真是姓名 * "nickname":"大象", // 用户昵称 * "email":"fdsa", * "email_verified_at":null, * "remark":"", * "win_alway_num":0, * "win_lead_num":0, * "star":0, * "agent":1, * "avatar":"/avatar/TM1f852RwuK2Dh6b5xcfT8q3xPOdY2I3nKMl1G5P.png", // 头像 * "seven_hit":"", * "profit_rate":"", * "fans_num":0, // 粉丝数 * "follower_num":0, * "pay_time":0, * "pay_money":"0.00", * "client_type":0, * "level_name":"储备组长", * }, * "order":{ * "id":6, * "pid":0, * "order_sn":"P2023041900000001", // 订单编号 * "customer_id":1, * "lottery_id":1, * "shop_id":1, * "lottery_type_id":1, * "type":3, * "copy_num":0, * "bets_num":2, * "piao_num":2, // 票数 * "money":24, * "prize_min":"11.04", * "prize_max":"142.56", * "pass_mode":[ * "2.1" * ], * "play_type":"mixed", * "pay_type":"", * "pay_state":"success", * "pay_at":"2023-04-19 12:53:15", * "odds_early_close_time":"2023-04-05 15:38:38", // 截止时间 * "created_at":"2023-04-06 15:38:38", // 发单时间 * "lottery_qupiao":0, * "lottery_state":5, * "lottery_prize":"0.00", * "lottery_send_prize":0, * "lottery_tax_prize":"0.00", * "type_mode":3, // 1截止后公开;2公开;3认购可见 * "type_desc":"这是个合买", // 合买宣言 * "union_pay_success":0, * "union_brokerage":1, // * "union_keep":1, // 是否全额保底 * "union_piece_keep":2, // 保底份数 * "union_piece_self":6, // 自购份数 * "union_piece_buy":6, // 已购份数 * "union_piece_total":12, // 总份数 * "union_schedule":50, // 合买进度1-100 * * "sellings":[ // 参考订单详情 * * ], * "chang_num":2, * "pass_mode_names":[ * "2串1" * ], * "play_name":"竞彩足球", * "play_type_name":"混合投注", * "buy_type_name":"自购", * "pass_mode_name":[ * "2串1" * ], * }, * "users":[ * { * "id":1, * "order_id":6, * "customer_id":1, * "union_piece_total":12, // 总份额 * "union_piece_buy":6, // 购买份额 * "money":"16.00", // 出资 * "created_at":"2023-04-19T12:53:15.000000Z", * "updated_at":"2023-04-19T12:53:15.000000Z", * "deleted_at":null, * "customer":{ // 彩友信息 * "id":1, * "avatar":"/avatar/TM1f852RwuK2Dh6b5xcfT8q3xPOdY2I3nKMl1G5P.png", * "nickname":"大象", * "name":"发达", * "level_score":0, * "level_name":"储备组长", * "level_score_group":"5000", * "lottery_state_name":"", * "client_type_name":"未知" * } * } * ] * } * } * */ public function unionShow(Request $request) { $orderSn = $request->input('order_sn'); /** @var Order $order */ $order = Order::with('materials:id,path')->sn($orderSn)->first(); $jingcaiService = LotteryService::getJingcaiServiceByOrder($order); /** @var Customer $unionUser */ $unionUser = Customer::find($order->customer_id); $orderData = $jingcaiService->showOrder($this->customer(), $order); $unionUses = Order::with('customer:id,avatar,nickname,name,level_score') ->select(['id', 'pid', 'customer_id', 'union_piece_total', 'union_piece_buy']) ->where('pid', $order->id) ->where('type', OrderType::UNION) ->where('pay_state', PayState::SUCCESS) ->orderBy('union_piece_buy', 'desc') ->get(); return $this->jsonSuccess([ 'customer' => $unionUser, 'order' => $orderData, 'users' => $unionUses, ]); } /** * @api {POST} /api/customer/order/union_show 合买-剩余份数 * @apiVersion 0.1.0 * @apiGroup 客户端 * * @apiParam {String} order_sn 订单编号 * * @apiSuccessExample {json} 返回结果 * { * "code":200, * "message":"", * "data":{ * "order_sn":"P2023041900000001", // 订单号 * "remain_piece":6, // 剩余份数 * "union_piece_money":2 // 每份金额 * } * } */ public function unionPieces(Request $request) { $orderSn = $request->input('order_sn'); /** @var Order $order */ $order = Order::sn($orderSn)->where('type', OrderType::UNION)->first(); ThrowException::isTrue(!$order, '无效数据'); return $this->jsonSuccess([ 'order_sn' => $order->order_sn, 'remain_piece' => $order->union_piece_total - $order->union_piece_buy, 'union_price_money' => $order->union_piece_money, ]); } /** * @api {POST} /api/customer/order/create_union 合买-创建合买订单 * @apiVersion 0.1.0 * @apiGroup 客户端 * * @apiParam {String} order_sn 订单编号 * @apiParam {Int} buy_piece 购买份数 * * @apiSuccessExample {json} 返回结果 * { * "code":200, * "message":"", * "data":{ * "order_sn":"P2023041900000001", * "balance":"9840.00", // 余额 * "money":10, // 投注金额 * "username":"发达", // 昵称 * "lottery":"jc足球混合投注", * "pay_types":[ * { * "pay_type":"alipay", * "name":"支付宝" * } * ] * } * } */ public function createUnion(Request $request) { $orderSn = $request->input('order_sn'); $buyPiece = $request->input('buy_piece'); /** @var Order $unionOrder */ $unionOrder = Order::sn($orderSn)->where('type', OrderType::UNION)->first(); ThrowException::isTrue(!$unionOrder, '无效数据'); $earlyTime = date('Y-m-d H:i:s', strtotime($unionOrder->odds_early_close_time)); ThrowException::isTrue(date('Y-m-d H:i:s') >= $earlyTime, '投注已截止'); ThrowException::isTrue($unionOrder->pay_state != PayState::SUCCESS, '合买不存在'); ThrowException::isTrue($buyPiece < 1, '购买份数不小于1'); // ThrowException::isTrue($this->customerId() == $unionOrder->customer_id, '发起者不能参与合买'); /** @var Lottery $lott */ $lott = Lottery::find($unionOrder->lottery_id); $lott->validEnableHemai(); $remain = $unionOrder->union_piece_total - $unionOrder->union_piece_buy; ThrowException::isTrue($buyPiece > $remain, "剩余{$remain}份,份数不足,请重新下单"); $exist = Order::where('customer_id', $this->customerId()) ->where('pay_state', PayState::UNPAID) ->where('pid', $unionOrder->id)->first(); if ($exist) { $exist->where('id', $exist->id)->where('pay_state', PayState::SUCCESS)->delete(); } /** @var Customer $customer */ $customer = Customer::find($this->customerId()); if (!$this->getPayTypes()) { ThrowException::isTrue($customer->balanceActive() <= 0, '该店铺暂未开启支付'); } DB::beginTransaction(); try { $order = new Order(); $order->pid = $unionOrder->id; $order->customer_id = $this->customerId(); $order->lottery_id = $unionOrder->lottery_id; $order->shop_id = $this->customerShopId(); $order->lottery_type_id = $unionOrder->lottery_type_id; $order->order_sn = Order::makeOrderSn(); $order->play_type = ''; $order->bets_num = 0; $order->piao_num = 0; $order->money = $unionOrder->money; $order->prize_min = 0; $order->prize_max = 0; $order->pay_state = PayState::UNPAID; $order->pass_mode = $unionOrder->pass_mode; $order->odds_close_time = $unionOrder->odds_close_time; $order->odds_early_close_time = $unionOrder->odds_early_close_time; $order->odds_late_close_time = $unionOrder->odds_late_close_time; $order->type = $unionOrder->type; $order->type_mode = $unionOrder->type_mode; $order->type_desc = ''; $order->odds = []; $order->union_piece_total = $unionOrder->union_piece_total; $order->union_piece_money = $unionOrder->union_piece_money; $order->union_money = $unionOrder->union_piece_money * $buyPiece; $order->union_piece_buy = $buyPiece; $order->union_piece_self = $buyPiece; $order->union_piece_keep = 0; $order->union_keep = 0; $order->union_brokerage = 0; $order->created_date = date('Ymd'); $order->save(); DB::commit(); $balance = $customer->balanceActive(); $payMoney = $order->getPayMoney(); 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() ]); } catch (JingCaiException $exception) { DB::rollBack(); throw $exception; } catch (\Exception $exception) { DB::rollBack(); throw $exception; } } }