jingcai-php/app/Http/Controllers/Api/Customer/IndexController.php

1192 lines
39 KiB
PHP
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
namespace App\Http\Controllers\Api\Customer;
use App\Enums\BoolEnum;
use App\Enums\LottState;
use App\Enums\LottType;
use App\Http\RequestValidators\AuthValidator;
use App\Model\Customer\Customer;
use App\Model\CustomerShop;
use App\Model\Dlt;
use App\Model\Lq\JclqResult;
use App\Model\Order;
use App\Model\Pls;
use App\Model\Plw;
use App\Model\Qxc;
use App\Model\Report\ReportDayWin;
use App\Model\Seller\Shop;
use App\Model\Zq\CtzqBqc;
use App\Model\Zq\CtzqJqc;
use App\Model\Zq\JczqResult;
use App\Model\Zq\ZqMatch;
use App\Utils\Helps;
use App\Utils\Result;
use App\Utils\ThrowException;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
use SimpleSoftwareIO\QrCode\Facades\QrCode;
class IndexController extends BaseController
{
/**
* @api {POST} /api/customer/register auth-注册
* @apiVersion 0.1.0
* @apiGroup 客户端
*
* @apiParam {String} phone 手机号码
* @apiParam {String} password 密码
* @apiParam {String} password_confirmation 密码确认
* @apiParam {String} [shopsn] 店铺编号
* @apiParam {Int} [agtcid] 代理id
*
* @apiSuccessExample {json} 返回结果
* {
* "code": 200,
* "message": "注册成功,请登录...",
* "data": []
* }
*/
public function register(Request $request)
{
$error = AuthValidator::registerErrors($request);
ThrowException::isTrue($error, $error);
$phone = $request->input('phone');
$password = $request->input('password');
$shopsn = $request->input('shopsn');
$agentId = $request->input('agtcid');
if (!Helps::validPhone($phone)) {
ThrowException::run('手机号码格式错误');
}
ThrowException::isTrue(!$shopsn, '404-1', Result::NOT_FOUND);
$shop = Shop::where('shop_sn', $shopsn)->first();
ThrowException::isTrue(!$shop, '404-2', Result::NOT_FOUND);
$customer = Customer::where('phone', $phone)
->where('shop_id', $shop->id)
->first();
if ($customer) {
return $this->jsonSuccess([], '已注册,请登录...');
}
$agent = null;
if ($agentId) {
$agent = Customer::find($agentId);
}
$customer = new Customer();
$customer->phone = $phone;
$customer->password = Customer::encryPassword($password);
$customer->shop_id = $shop->id;
if ($agent) {
$customer->agent_id = $agent->id;
$customer->regist_agent_at = date('Y-m-d H:i:s');
$customer->regist_agent_date = date('Ymd');
}
$customer->name = substr($phone, -5);
$customer->nickname = substr($phone, -5);
$customer->useragent = strval($request->userAgent());
$customer->client_type = Helps::getClientType($customer->useragent);
$customer->save();
CustomerShop::where('phone', $phone)->update([
'logined' => BoolEnum::NO
]);
$customerShop = new CustomerShop();
$customerShop->customer_id = $customer->id;
$customerShop->phone = $phone;
$customerShop->shop_id = $shop->id;
$customerShop->logined = BoolEnum::YES;
$customerShop->save();
return $this->jsonSuccess([
'redirect' => Helps::appBuyerDownloadUrl()
], '注册成功,请登录...');
}
/**
* @api {POST} /api/customer/login auth-登录
* @apiVersion 0.1.0
* @apiGroup 客户端
*
* @apiParam {String} phone 手机号码
* @apiParam {String} password 密码
*
* @apiSuccessExample {json} 返回结果
* {
* "code": 200,
* "message": "",
* "data": {
* "access_token": "eyJ0eXA5z7uNNgL76GgVGFFMOuINwHJnG73s", // token
* "token_type": "bearer",
* "expires_in": 36000 // 有效时长(秒)
* }
* }
*/
public function login(Request $request)
{
$error = AuthValidator::loginErrors($request);
ThrowException::isTrue($error, $error);
$phone = $request->input('phone');
$password = $request->input('password');
if (!preg_match('/^1[3-9]\d{9}$/i', $phone)) {
ThrowException::run('手机号码格式错误');
}
$customers = Customer::where('phone', $phone)->get();
ThrowException::isTrue(count($customers) <= 0, '手机号或密码错误');
$loginCustomer = null;
foreach ($customers as $customer) {
if (Customer::checkPassword($password, $customer->password)) {
$loginCustomer = $customer;
$exist = CustomerShop::where('customer_id', $customer->id)
->where('shop_id', $customer->shop_id)
->where('logined', BoolEnum::YES)
->first();
if ($exist) {
break;
}
}
}
ThrowException::isTrue(!$loginCustomer, '手机号或密码错误');
$customerShop = CustomerShop::where('phone', $phone)
->where('shop_id', $loginCustomer->shop_id)
->first();
if (!$customerShop) {
ThrowException::run('登录失败,请联系网站管理员');
}
$token = auth('customer')->login($loginCustomer);
ThrowException::isTrue(!$token, '登录失败!');
CustomerShop::where('phone', $phone)->update([
'logined' => BoolEnum::NO
]);
CustomerShop::where('id', $customerShop->id)->update([
'logined' => BoolEnum::YES
]);
return $this->respondWithToken($token);
}
protected function respondWithToken($token)
{
return $this->jsonSuccess([
'access_token' => $token,
'token_type' => 'bearer',
'expires_in' => auth('customer')->factory()->getTTL() * 60
]);
}
/**
* @api {POST} /api/customer/refresh_token auth-刷新token
* @apiVersion 0.1.0
* @apiGroup 客户端
*
* @apiSuccessExample {json} 返回结果
* {
* "code": 200,
* "message": "",
* "data": {
* "access_token": "eyJ0eXA5z7uNNgL76GgVGFFMOuINwHJnG73s", // token
* "token_type": "bearer",
* "expires_in": 36000 // 有效时长(秒)
* }
* }
*/
public function refreshToken()
{
return $this->respondWithToken(auth('customer')->refresh());
}
/**
* @api {POST} /api/customer/switch_account auth-切换账号(更换店铺)
* @apiVersion 0.1.0
* @apiGroup 客户端
*
* @apiParam {Int} shop_id 店铺id
* @apiParam {Int} customer_id 用户id
*
* @apiSuccessExample {json} 返回结果
* {
* "code": 200,
* "message": "",
* "data": {
* "access_token": "eyJ0eXA5z7uNNgL76GgVGFFMOuINwHJnG73s", // token
* "token_type": "bearer",
* "expires_in": 36000 // 有效时长(秒)
* }
* }
*/
public function switchAccount(Request $request)
{
$targetShopId = $request->input('shop_id');
$password = $request->input('password');
$target = Customer::where('phone', $this->customer()->phone)
->where('shop_id', $targetShopId)->first();
ThrowException::isTrue(!$target, '店铺不存在');
ThrowException::isTrue(!Customer::checkPassword($password, $target->password), '密码错误');
$customerShop = CustomerShop::where('phone', $target->phone)
->where('shop_id', $targetShopId)
->first();
ThrowException::isTrue(!$customerShop, '店铺不存在!');
if ($target->phone != $this->customer()->phone) {
ThrowException::run('无法更换店铺');
}
$token = auth('customer')->login($target);
ThrowException::isTrue(!$token, '更换店铺失败');
CustomerShop::where('phone', $target->phone)->update([
'logined' => BoolEnum::NO
]);
CustomerShop::where('id', $customerShop->id)->update([
'logined' => BoolEnum::YES
]);
return $this->respondWithToken($token);
}
/**
* @api {GET|POST} /api/customer/logout auth-退出
* @apiVersion 0.1.0
* @apiGroup 客户端
*
* @apiSuccessExample {json} 返回结果
* {
* "code":200,
* "message":"",
* "data":[]
* }
*/
public function logout()
{
auth('customer')->logout();
return $this->jsonSuccess();
}
/**
* @api {GET} /api/customer/winning_info 首页-播报和海报
* @apiVersion 0.1.0
* @apiGroup 客户端
*
* @apiSuccessExample {json} 返回结果
* {
* "broadcast": [ // 播报
* "xxxxxxxxxxxxxxx",
* "bbbbbbbbbbbbbbbbb"
* ],
* "poster": [ // 海报
* {
* "id": 1, // 数据id
* "customer": { //
* "id": 1, // 用户id
* "avatar": "xxxx", // 用户头像
* "level_name": "xxxx", // 级别名称
* "name": "xxxx" // 用户名称
* },
* "lottery_name": 'xxxx', // 彩种名称
* "money": 2222.22, // 方案金额
* "prize": 2222.22, // 奖金
* "cdate": "2022-01-01" // 日期
* },
* ...
* ]
* }
*
*/
public function winningInfo(Request $request)
{
$broadcasts = ReportDayWin::with([
'customer:id,name,nickname,avatar,level_score,phone',
'lottery:id,name'
])
->where('shop_id', $this->customerShopId())
->orderBy('cdate', 'desc')
->orderBy('order_prize', 'desc')
->limit(50)
->get();
$broadcast = [];
$poster = [];
foreach ($broadcasts as $item) {
$itemPrize = $item->order_send_prize > 0 ? $item->order_send_prize : $item->order_tax_prize;
$broadcast[] = sprintf('恭喜%s%s收米%d元', $item->customer->hide_name, $item->lottery->name, $itemPrize);
}
$poster = ReportDayWin::with([
'customer:id,name,nickname,avatar,level_score,phone',
'lottery:id,name'
])
->where('shop_id', $this->customerShopId())
->where('cdate', date('Ymd', strtotime('-1 day')))
->orderBy('order_prize', 'desc')
->limit(2)
->get();
$data = [
'broadcast' => $broadcast,
'poster' => $poster
];
return $this->jsonSuccess($data);
}
/**
* @api {GET} /api/customer/win_poster 首页-中奖海报
* @apiVersion 0.1.0
* @apiGroup 客户端
*
* @apiParam {String} type all全部my我的
* @apiParam {Int} [page] 页数
* @apiParam {Int} [size] 每页条数,默认20
*
* @apiSuccessExample {json} 返回结果
* {
* "code":200,
* "message":"",
* "data":[
* {
* "cdate":"昨日", // 日期
* "poster":[{
* "id":1,
* "order_sn":"xxx",
* "customer":{
* "id":1,
* "name":"aaa", // 用户名
* "level_name":"", // 级别名称
* "avatar":"" // 用户头像
* },
* "prize":1000, // 奖金
* "money":1000, // 方案金额
* "lottery_name":"x", // 彩种名称
* "cdate":"2023-04-06"
* }
* }]
* ]
* }
*/
public function winPoster(Request $request)
{
$allowDates = [];
for ($date = date('Ymd'); $date >= date('Ymd', strtotime('-7 day')); $date = date('Ymd', strtotime('-1 day', strtotime($date)))) {
$allowDates[] = $date;
}
// my|all,我的和全部
$type = $request->input('type');
$query = ReportDayWin::select([
DB::raw('count(*) as c'),
'cdate'
])
->whereIn('cdate', $allowDates)
->where('shop_id', $this->customerShopId());
if ($type == 'my') {
$query->where('customer_id', $this->customerId());
}
$query->groupBy('cdate');
$total = $query->count();
$size = $request->input('size');
$page = $request->input('page');
if ($page < 1) {
$page = 1;
}
if ($size < 1) {
$size = 5;
}
if ($size > 30) {
$size = 30;
}
$offset = ($page - 1) * $size;
$winDays = $query->orderBy('cdate', 'desc')
->offset($offset)
->limit( $size)
->get();
if (count($winDays) < 1) {
$result = [
'data' => [],
'total' => 0,
'per_page' => $size,
'current_page' => $page,
];
return $this->jsonSuccess($result);
}
$cdates = $winDays->pluck('cdate')->toArray();
$reports = [];
foreach ($cdates as $cdate) {
$reportDay = ReportDayWin::with([
'customer:id,name,nickname,avatar,level_score',
'lottery:id,name'
])
->where('shop_id', $this->customerShopId())
->where('cdate', $cdate)
->orderBy('order_prize', 'desc')
->limit(4)
->get();
$reports[date('Y-m-d', strtotime($cdate))] = $reportDay;
}
$result = [
'data' => $reports,
'total' => $total,
'per_page' => $size,
'current_page' => $page,
];
return $this->jsonSuccess($result);
}
/**
* @api {GET} /api/customer/shop 首页-店铺信息
* @apiVersion 0.1.0
* @apiGroup 客户端
*
* @apiSuccessExample {json} 返回结果
* {
* "id": 1,
* "seller_id": 1,
* "name": "shop1", // 名称
* "seller_name": "******", // 店主名
* "seller_phone": "******", // 店主电话
* "seller_wechat": "qerewrwq", // 微信
* "addr": "******", // 地址
* "announcement": "fdsafdsafdsa", // 公告
* }
*
*/
public function shop(Request $request)
{
$shop = $this->customer()->shopWithHideContacts();
return $this->jsonSuccess($shop);
}
/**
* @api {GET} /api/customer/win_jclq_result 开奖公告-竞彩篮球
* @apiVersion 0.1.0
* @apiGroup 客户端
*
* @apiParam {String} [issue_num] 期号
*
* @apiSuccessExample {json} 返回结果
* {
* "code":200,
* "message":"",
* "data":{
* "issue_nums":[
* "2023-05-04/周四"
* ],
* "result":[
* {
* "id":1,
* "jclq_odds_id":1,
* "odds_id":5131,
* "match_id":97866,
* "issue_num":"2023-05-04/周四",
* "issue_date":"2023-05-04", // 日期
* "issue_week":"2023-05-04", // 周
* "play_num":"301",
* "is_reverse":0,
* "home_score":104, // 主队比分
* "away_score":69, // 客队比分
* "q1home_score":17,
* "q1away_score":24,
* "q2home_score":30,
* "q2away_score":12,
* "q3home_score":32,
* "q3away_score":17,
* "q4home_score":25,
* "q4away_score":16,
* "othome_score":0,
* "otaway_score":0,
* "lottery_state":"hasLottery",
* "lottery_time":"2023-05-05 08:59:00",
* "sf_field":"win", // 胜负
* "sf_name":"主胜",
* "sf_odds":"1.76", // 让分
* "rf_handicap":"-4.50",
* "rf_field":"win",
* "rf_name":"让分主胜",
* "rf_odds":"1.70",
* "sfc_field":"w6", // 胜分差
* "sfc_name":"主胜26+",
* "sfc_odds":"17.00",
* "dxf_total_score":"162.50", // 大小分
* "dxf_field":"big",
* "dxf_name":"大",
* "dxf_odds":"1.70",
* "created_at":"2023-05-05 20:37:15",
* "updated_at":"2023-05-05 20:37:15",
* "deleted_at":null,
* "match":{ // 比赛信息
* "id":84864,
* "match_id":97866,
* "competition_name":"欧篮联", // 赛事名
* "home_team_name":"特拉维夫马卡比", // 主队
* "away_team_name":"摩纳哥", // 客队
* "start_week":"",
* "start_time_str":""
* }
* },
* ]
* }
* }
*/
public function winJclqResult(Request $request) {
$issueNum = $request->input('issue_num');
$monthStartDate = date('Y-m-d', strtotime('-30 day'));
$query = JclqResult::with('match:id,match_id,competition_name,home_team_name,away_team_name')
->where('lottery_state', 'hasLottery');
$issueNums = $query->where('issue_date', '>', $monthStartDate)
->orderBy('issue_date', 'desc')
->pluck('issue_num')
->toArray();
if (!$issueNums) {
return $this->jsonSuccess([
'issue_nums' => [],
'result' => []
]);
}
if (!$issueNum) {
$issueNums = array_values(array_unique($issueNums));
$issueNum = $issueNums[0];
}
$result = $query->where('issue_num', $issueNum)
->get();
return $this->jsonSuccess([
'issue_nums' => $issueNums,
'result' => $result
]);
}
/**
* @api {GET} /api/customer/win_jczq_result 开奖公告-竞彩足球
* @apiVersion 0.1.0
* @apiGroup 客户端
*
* @apiParam {String} [issue_num] 期号
*
* @apiSuccessExample {json} 返回结果
* {
* "code":200,
* "message":"",
* "data":{
* "issue_nums":[
* "2023-05-03/周三"
* ],
* "result":[
* {
* "id":1,
* "jczq_odds_id":0,
* "odds_id":0,
* "match_id":392837,
* "issue_num":"2023-05-03/周三",
* "issue_date":"2023-05-03", // 日期
* "issue_week":"2023-05-04", // 周
* "play_num":3, // 场次
* "half_time_score":"2 : 1", // 半场比分
* "full_time_score":"2 : 1", // 全场比分
* "is_reverse":0,
* "lottery_state":"hasLottery",
* "lottery_time":"2023-05-04 09:18:00", // 开奖时间
* "spf_odds":"1.37", // 胜平负赔率
* "spf_field":"win", // 胜
* "spf_name":"胜", // 名称
* "rq_odds":"3.10", // 让球
* "rq_handicap":"-1.00", // 让几个
* "rq_field":"draw", // 字段
* "rq_name":"平", // 名称
* "bf_odds":"7.50", // 比分
* "bf_field":"wh2a1", // 字段
* "bf_name":"2:1", // 名称
* "jq_odds":"4.00", // 总进球
* "jq_field":"g3",
* "jq_name":"3",
* "bqc_odds":"2.15",
* "bqc_field":"ww", // 半全场
* "bqc_name":"胜胜",
* "created_at":"2023-05-04 21:42:56",
* "updated_at":"2023-05-04 21:42:56",
* "match":{
* "competition_name":xx, //赛事名
* "home_team_name":xx, //主队名
* "away_team_name":xx, //客队
* }
* },
* ]
* }
* }
*
*/
public function winJczqResult(Request $request) {
$issueNum = $request->input('issue_num');
$monthStartDate = date('Y-m-d', strtotime('-30 day'));
$query = JczqResult::with('match:id,match_id,competition_name,home_team_name,away_team_name')
->where('lottery_state', 'hasLottery');
$issueNums = $query->where('issue_date', '>', $monthStartDate)
->orderBy('issue_date', 'desc')
->pluck('issue_num')
->toArray();
if (!$issueNums) {
return $this->jsonSuccess([
'issue_nums' => [],
'result' => []
]);
}
if (!$issueNum) {
$issueNums = array_values(array_unique($issueNums));
$issueNum = $issueNums[0];
}
$result = $query->where('issue_num', $issueNum)
->get();
return $this->jsonSuccess([
'issue_nums' => $issueNums,
'result' => $result
]);
}
/**
* @api {GET} /api/customer/win_ctzq_jqc_result 开奖公告-传统足球-4场进球彩
* @apiVersion 0.1.0
* @apiGroup 客户端
*
* @apiSuccessExample {json} 返回结果
* {
* "code":200,
* "message":"",
* "data":{
* "current_page":1,
* "data":[
* {
* "id":1,
* "ret_id":473,
* "type":"ctzq_jqc",
* "issue_num":"23070", // 期号
* "state":"hasLottery",
* "start_time":"2023-04-30 20:00:00",
* "end_time":"2023-05-03 22:00:00",
* "prize_time":"2023-05-04 10:02:04", // 开奖时间
* "result_info":"3+010213+1", // 开奖结果
* "result_array":"3+010213+1", // 开奖结果
* "sales":"2765664.00",
* "jackpot":"0.00",
* "first_prize_num":255,
* "first_prize_value":6941,
* "created_at":"2023-05-04 21:32:16",
* "updated_at":"2023-05-04 21:32:16",
* "deleted_at":null,
* },
* ],
* "per_page":20,
* "total":2
* }
* }
*/
public function winCtzqJqcResult(Request $request) {
$size = $request->input('size');
$list = CtzqJqc::where('state', 'hasLottery')
->orderBy('issue_num', 'desc')
->paging($size);
return $this->jsonSuccess($list);
}
/**
* @api {GET} /api/customer/win_ctzq_jqc_detail_result 开奖公告-传统足球-4场进球彩详情
* @apiVersion 0.1.0
* @apiGroup 客户端
*
* @apiSuccessExample {json} 返回结果
* {
* "code":200,
* "message":"",
* "data":{
* "current_page":1,
* "data":[
* {
* "id":1,
* "ret_id":473,
* "type":"ctzq_jqc",
* "issue_num":"23070", // 期号
* "state":"hasLottery",
* "start_time":"2023-04-30 20:00:00",
* "end_time":"2023-05-03 22:00:00",
* "prize_time":"2023-05-04 10:02:04", // 开奖时间
* "result_info":"3+010213+1", // 开奖结果
* "result_array":"3+010213+1", // 开奖结果
* "sales":"2765664.00",
* "jackpot":"0.00",
* "first_prize_num":255,
* "first_prize_value":6941,
* "created_at":"2023-05-04 21:32:16",
* "updated_at":"2023-05-04 21:32:16",
* "deleted_at":null,
* "matchs": [
* {
* "no":0, // 编号
* "result":0, // 结果
* "jcAwayTeamName":0, // 客队
* "jcHomeTeamName":0, // 主队
* "half_time_score":0, // 半场比分
* "full_time_score":0, // 整场比分
* }
* ],
* },
* ],
* "per_page":20,
* "total":2
* }
* }
*/
public function winCtzqJqcDetailResult(Request $request) {
$id = $request->input('ctzq_jqc_id');
$ctzq = CtzqJqc::find($id);
if ($ctzq->matchs) {
$matchIds = array_column($ctzq->matchs, 'matchId');
$matchs = ZqMatch::whereIn('match_id', $matchIds)->get()->keyBy('match_id');
foreach ($ctzq->matchs as &$item) {
$item['half_time_score'] = Arr::get($matchs, $item['matchId'] . '.half_time_score', '');
$item['full_time_score'] = Arr::get($matchs, $item['matchId'] . '.half_time_score', '');
}
}
return $this->jsonSuccess($ctzq);
}
/**
* @api {GET} /api/customer/win_ctzq_bqc_result 开奖公告-传统足球-6场半全场
* @apiVersion 0.1.0
* @apiGroup 客户端
*
* @apiSuccessExample {json} 返回结果
* {
* "code":200,
* "message":"",
* "data":{
* "current_page":1,
* "data":[
* {
* "id":1,
* "ret_id":473,
* "type":"ctzq_jqc",
* "issue_num":"23070", // 期号
* "state":"hasLottery",
* "start_time":"2023-04-30 20:00:00",
* "end_time":"2023-05-03 22:00:00",
* "prize_time":"2023-05-04 10:02:04", // 开奖时间
* "result_info":"3+010213+1", // 开奖结果
* "result_array":"3+010213+1", // 开奖结果
* "sales":"2765664.00",
* "jackpot":"0.00",
* "first_prize_num":255,
* "first_prize_value":6941,
* "created_at":"2023-05-04 21:32:16",
* "updated_at":"2023-05-04 21:32:16",
* "deleted_at":null,
* },
* ],
* "per_page":20,
* "total":2
* }
* }
*/
public function winCtzqBqcResult(Request $request) {
$size = $request->input('size');
$list = CtzqBqc::where('state', 'hasLottery')
->orderBy('issue_num', 'desc')
->paging($size);
return $this->jsonSuccess($list);
}
/**
* @api {GET} /api/customer/win_ctzq_bqc_detail_result 开奖公告-传统足球-6场半全场详情
* @apiVersion 0.1.0
* @apiGroup 客户端
*
* @apiSuccessExample {json} 返回结果
* {
* "code":200,
* "message":"",
* "data":{
* "current_page":1,
* "data":[
* {
* "id":1,
* "ret_id":473,
* "type":"ctzq_jqc",
* "issue_num":"23070", // 期号
* "state":"hasLottery",
* "start_time":"2023-04-30 20:00:00",
* "end_time":"2023-05-03 22:00:00",
* "prize_time":"2023-05-04 10:02:04", // 开奖时间
* "result_info":"3+010213+1", // 开奖结果
* "result_array":"3+010213+1", // 开奖结果
* "sales":"2765664.00",
* "jackpot":"0.00",
* "first_prize_num":255,
* "first_prize_value":6941,
* "created_at":"2023-05-04 21:32:16",
* "updated_at":"2023-05-04 21:32:16",
* "deleted_at":null,
* "matchs": [
* {
* "no":0, // 编号
* "result":0, // 结果
* "jcAwayTeamName":0, // 客队
* "jcHomeTeamName":0, // 主队
* "half_time_score":0, // 半场比分
* "full_time_score":0, // 整场比分
* }
* ],
* },
* ],
* "per_page":20,
* "total":2
* }
* }
*/
public function winCtzqBqcDetailResult(Request $request) {
$id = $request->input('ctzq_bqc_id');
$ctzq = CtzqBqc::find($id);
if ($ctzq->matchs) {
$matchIds = array_column($ctzq->matchs, 'matchId');
$matchs = ZqMatch::whereIn('match_id', $matchIds)->get()->keyBy('match_id');
foreach ($ctzq->matchs as &$item) {
$item['half_time_score'] = Arr::get($matchs, $item['matchId'] . '.half_time_score', '');
$item['full_time_score'] = Arr::get($matchs, $item['matchId'] . '.half_time_score', '');
}
}
return $this->jsonSuccess($ctzq);
}
/**
* @api {GET} /api/customer/win_shuzi_result 开奖公告-数字彩
* @apiVersion 0.1.0
* @apiGroup 客户端
*
* @apiSuccessExample {json} 返回结果
* {
* "code":200,
* "message":"",
* "data":[
* {
* "lottery_type":"dlt", // 彩种
* "dlt":{ // 大乐透的数据格式
* "id":11,
* "issue_num":"23063", // 期号
* "state":1,
* "enable":0,
* "close_time":null,
* "prize_time":null, // 开奖时间
* "qian":[ // 红球
* "04",
* "18",
* "29",
* "31",
* "34"
* ],
* "hou":[ // 篮球
* "06",
* "09"
* ],
* "result_time":"2023-06-06T14:00:09.000000Z" // 抓取开奖时间
* }
* }
* ]
* }
*/
public function winShuziResult(Request $request) {
$dlt = Dlt::where('state', BoolEnum::YES)
->orderBy('issue_num', 'desc')
->first();
$qxc = Qxc::where('state', BoolEnum::YES)
->orderBy('issue_num', 'desc')
->first();
$pls = Pls::where('state', BoolEnum::YES)
->orderBy('issue_num', 'desc')
->first();
$plw = Plw::where('state', BoolEnum::YES)
->orderBy('issue_num', 'desc')
->first();
$list = [
[
'lottery_type' => LottType::DLT,
'result' => $dlt
],
[
'lottery_type' => LottType::QXC,
'result' => $qxc
],
[
'lottery_type' => LottType::PLS,
'result' => $pls
],
[
'lottery_type' => LottType::PLW,
'result' => $plw
]
];
return $this->jsonSuccess($list);
}
/**
* @api {GET} /api/customer/win_shuzi_detail_result 开奖公告-数字彩详情
* @apiVersion 0.1.0
* @apiGroup 客户端
*
* @apiParam {String} lottery_type 彩种类型
*
* @apiSuccessExample {json} 返回结果
* {
* "code":200,
* "message":"",
* "data":{
* "current_page":1,
* "data":[ // 大乐透的数据格式
* {
* "id":11,
* "issue_num":"23063",
* "state":1,
* "enable":0,
* "close_time":null,
* "prize_time":null,
* "qian":[
* "04",
* "18",
* "29",
* "31",
* "34"
* ],
* "hou":[
* "06",
* "09"
* ],
* "prize":"0.0000", // 奖池
* "base1_num":6, // 一等奖注数
* "base2_num":91, // 二等奖注数
* "base3_num":186, // 三等奖注数
* "base1_prize":"6757853.0000", // 一等奖金
* "add1_num":2, // 二等奖追加注数
* "base2_prize":"129591.0000", // 二等奖金
* "add2_num":28, // 二等奖追加注数
* "base3_prize":"10000.0000", // 三等奖金
* "add3_num":0, // 三等奖追加注数
* "add1_prize":"5406282.0000", // 一等奖追加奖金
* "add2_prize":"103672.0000", // 二等奖追加奖金
* "add3_prize":"0.0000", // 三等奖追加奖金
* "created_at":"2023-06-06 22:00:09",
* "updated_at":"2023-06-06 22:00:09",
* "deleted_at":null,
* "result_time":"2023-06-06T14:00:09.000000Z"
* },
* ],
* "from":1,
* "per_page":20,
* "to":20,
* "total":20
* }
* }
*/
public function winShuziDetailResult(Request $request) {
switch ($request->input('lottery_type')) {
case LottType::DLT:
return $this->winDltResult($request);
case LottType::QXC:
return $this->winQxcResult($request);
case LottType::PLS:
return $this->winPlsResult($request);
case LottType::PLW:
return $this->winPlwResult($request);
}
return $this->jsonSuccess();
}
private function winDltResult(Request $request) {
$size = $request->input('size');
$list = Dlt::where('state', BoolEnum::YES)
->orderBy('issue_num', 'desc')
->paging($size);
return $this->jsonSuccess($list);
}
private function winQxcResult(Request $request) {
$size = $request->input('size');
$list = Qxc::where('state', BoolEnum::YES)
->orderBy('issue_num', 'desc')
->paging($size);
return $this->jsonSuccess($list);
}
private function winPlsResult(Request $request) {
$size = $request->input('size');
$list = Pls::where('state', BoolEnum::YES)
->orderBy('issue_num', 'desc')
->paging($size);
return $this->jsonSuccess($list);
}
private function winPlwResult(Request $request) {
$size = $request->input('size');
$list = Plw::where('state', BoolEnum::YES)
->orderBy('issue_num', 'desc')
->paging($size);
return $this->jsonSuccess($list);
}
/**
* @api {GET} /api/customer/qrcode 二维码-生成
* @apiVersion 0.1.0
* @apiGroup 客户端
*
* @apiParam {String} content 二维码内容
* @apiParam {Int} [size] 大小默认80
* @apiParam {String} [format] 格式png,svg,eps默认png
*
*/
public function qrcode(Request $request) {
// if (!$this->customer()) {
// return response('', 404);
// }
$content = strval($request->input('content'));
$size = $request->input('size');
$format = $request->input('format'); // png,svg,eps
$formats = [
'png',
'svg',
'eps',
];
if (!$format) {
$format = 'png';
}
ThrowException::isTrue(!$content, '404', Result::NOT_FOUND);
ThrowException::isTrue(!in_array($format, $formats), '格式有误');
if (!$size) {
$size = 80;
}
$resp = QrCode::format($format)
->size($size)
->generate($content);
return response($resp)->header('Content-Type', ['octet-stream']);
}
/**
* @api {GET} /api/customer/current_win 特效-展示
* @apiVersion 0.1.0
* @apiGroup 客户端
*
* @apiSuccessExample {json} 返回结果,参考订单列表
* {}
*/
public function currentWin()
{
$orders = Order::with([
'lotteryType',
'customer:id,name,nickname,avatar,level_score'
])
->where('customer_id', $this->customerId())
->where('win_date', date('Ymd'))
->whereIn('lottery_state', Order::zhongJiangStates())
->where('win_viewed', BoolEnum::NO)
->get();
$result = [];
foreach ($orders as $order) {
$result[] = [
'id' => $order->id,
'order_sn' => $order->order_sn,
'order_prize' => $order->lottery_should_send_prize,
'order_money' => $order->money,
'lottery_name' => $order->lotteryType->name,
'cdate' => date('Y-m-d', strtotime($order->win_date)),
'customer' => $order->customer,
];
}
return $this->jsonSuccess($result);
}
/**
* @api {POST} /api/customer/current_win_viewed 特效-查看
* @apiVersion 0.1.0
* @apiGroup 客户端
*
* @apiParam {String} order_sn 订单编号
*
*/
public function currentWinViewed(Request $request)
{
$orderSn = $request->input('order_sn');
ThrowException::isTrue(!$orderSn, '无订单编号');
$order = Order::sn($orderSn)
->where('customer_id', $this->customerId())
->where('win_viewed', BoolEnum::NO)
->whereIn('lottery_state', Order::zhongJiangStates())
->first();
if ($order) {
$order->win_viewed = BoolEnum::YES;
$order->save();
}
return $this->jsonSuccess();
}
}