332 lines
14 KiB
PHP
Raw Normal View History

2025-08-01 11:39:06 +08:00
<?php
namespace addons\xilufitness\controller;
use addons\xilufitness\model\TimesCardShare;
use addons\xilufitness\model\UserCard;
use addons\xilufitness\services\CardService;
use think\exception\DbException;
use think\Log;
/**
* @ApiSector(会员卡控制器)
* @ApiRoute(addons/xilufitness/card)
* @ApiWeigh(1)
* @package addons\xilufitness\controller
*/
class Card extends Base
{
protected $noNeedRight = '*';
protected $noNeedLogin = 'getCardTypeList';
/**
* @ApiTitle(获取用户会员卡)
* @ApiSummary(获取用户会员卡)
* @ApiRoute(/index)
* @ApiMethod(GET)
* @ApiParams(name="card_type",type="string", require=false,description="会员卡类别 1:次卡 2:时长卡 3:单次卡")
* @ApiParams(name="user_card_id",type="string", require=false,description="会员卡ID")
* @ApiHeaders(name = "brand-key", type = "string",require = true, description = "应用key")
* @ApiHeaders(name = "token", type = "string", require = true, description = "Token")
* @ApiReturnParams(name="code",type="integer",required=true, sample="0")
* @ApiReturnParams(name="msg",type="string",required=true, sample="获取成功")
* @ApiReturnParams(name="data",type="bject",required=true, description= "扩展数据")
* @ApiReturn({
"code" => 1,
"msg" => "获取成功",
"data" => {}
*})
*/
public function index(){
$card_type = $this->request->param('card_type/s');
$result = CardService::getInstance()->getUserCardList($card_type);
$this->success('',$result);
}
/**
* @ApiTitle(购买会员卡)
* @ApiSummary(购买会员卡)
* @ApiRoute(/buyUserCard)
* @ApiMethod(POST)
* @ApiParams(name="card_category_id",type="integer", require=true,description="会员卡类别ID")
* @ApiHeaders(name = "brand-key", type = "string",require = true, description = "应用key")
* @ApiHeaders(name = "token", type = "string", require = true, description = "Token")
* @ApiReturnParams(name="code",type="integer",required=true, sample="0")
* @ApiReturnParams(name="msg",type="string",required=true, sample="获取成功")
* @ApiReturnParams(name="data",type="bject",required=true, description= "扩展数据")
* @ApiReturn({
"code" => 1,
"msg" => "获取成功",
"data" => {}
*})
*/
public function buyUserCard()
{
$card_category_id = $this->request->param('card_category_id/d');
$result = CardService::getInstance()->buyUserCard($card_category_id);
return $result;
}
/**
* @ApiTitle(获取会员卡核销码)
* @ApiSummary(获取会员卡核销码)
* @ApiRoute(/getUserCardCodeInfo)
* @ApiMethod(GET)
* @ApiParams(name="user_card_id",type="string",required=true,description="会员卡ID")
* @ApiParams(name="share_id",type="integer", require=false,description="分享ID")
* @ApiParams(name="check_type",type="integer", require=true,description="核销码类型 1会员卡 2单次卡")
* @ApiHeaders(name = "brand-key", type = "string",require = true, description = "应用key")
* @ApiHeaders(name = "token", type = "string", require = true, description = "Token")
* @ApiReturnParams(name="code",type="integer",required=true, sample="0")
* @ApiReturnParams(name="msg",type="string",required=true, sample="获取成功")
* @ApiReturnParams(name="data",type="bject",required=true, description= "扩展数据")
* @ApiReturn({
"code" => 1,
"msg" => "获取成功",
"data" => {}
*})
* @throws DbException
*/
public function getUserCardCodeInfo(){
$user_card_id = $this->request->param('user_card_id/s');
$share_id = $this->request->param('share_id/s');
$check_type = $this->request->param('check_type/s') ?? 1;
if ($check_type==1) {
Log::log($user_card_id);
$user_card = new UserCard();
$result = $user_card->get($user_card_id);
$info['user_card_id'] = $result->id;
$info['brand_id'] = $result->brand_id;
$info['user_id'] = $result->user_id;
$info['card_type'] = $result->card_type;
//失效时间当前时间加30s
$info['expire_time'] = time() + 30;
}
if ($check_type==2) {
Log::log($share_id);
$share_card = new TimesCardShare();
$result = $share_card->get($share_id);
$info['share_id'] = $result->id;
$info['brand_id'] = $this->brand_id;
$info['user_id'] = $result->to_user_id;
$info['user_card_id'] = $result->user_card_id;
$info['card_type'] = 3;
$info['expire_time'] = time() + 30;
}
$qrCode = new \QRcode();
ob_start(); // 开启输出缓冲
$errorLevel = "L";
$size = 10;
$qrCode::png(json_encode($info), false, $errorLevel, $size);
$imageString = ob_get_contents(); // 获取缓冲区内容
ob_end_clean(); // 清空并关闭输出缓冲
$base64Image = 'data:image/png;base64,' . base64_encode($imageString); // 转换为Base64编码
return json(['qrcode' => $base64Image]); // 返回Base64编码的图片
}
/**
* @ApiTitle(获取会员卡类别列表)
* @ApiSummary(获取会员卡类别列表)
* @ApiRoute(/getCardTypeList)
* @ApiMethod(GET)
* @ApiHeaders(name = "brand-key", type = "string",require = true, description = "应用key")
* @ApiHeaders(name = "token", type = "string", require = true, description = "Token")
* @ApiParams(name="card_type",type="string", require=false,description="会员卡类别 1:次卡 2:时长卡")
* @ApiReturnParams(name="code",type="integer",required=true, sample="0")
* @ApiReturnParams(name="msg",type="string",required=true, sample="获取成功")
* @ApiReturnParams(name="data",type="bject",required=true, description= "扩展数据")
* @ApiReturn({
"code" => 1,
"msg" => "获取成功",
"data" => {}
*})
*/
public function getCardTypeList(){
$card_type = $this->request->param('card_type/s');
$result = CardService::getInstance()->getCardTypeList($card_type);
$this->success('',$result);
}
/**
* @ApiTitle(获取会员卡详细信息)
* @ApiSummary(获取会员卡详细信息)
* @ApiRoute(/getCardTypeInfo)
* @ApiMethod(GET)
* @ApiHeaders(name = "brand-key", type = "string",require = true, description = "应用key")
* @ApiHeaders(name = "token", type = "string", require = true, description = "Token")
* @ApiParams(name="card_category_id",type="integer", require=true,description="会员卡类别ID")
* @ApiReturnParams(name="code",type="integer",required=true, sample="0")
* @ApiReturnParams(name="msg",type="string",required=true, sample="获取成功")
* @ApiReturnParams(name="data",type="bject",required=true, description= "扩展数据")
* @ApiReturn({
"code" => 1,
"msg" => "获取成功",
"data" => {}
*})
*/
public function getCardTypeInfo(){
$card_category_id = $this->request->param('card_category_id/s');
$result = CardService::getInstance()->getCardTypeInfo($card_category_id);
$this->success('',$result);
}
/**
* @ApiTitle(次卡分享)
* @ApiSummary(次卡分享)
* @ApiRoute(/timesCardShare)
* @ApiMethod(POST)
* @ApiParams(name="user_card_id",type="integer", require=true,description="次卡ID")
* @ApiHeaders(name = "brand-key", type = "string",require = true, description = "应用key")
* @ApiHeaders(name = "token", type = "string", require = true, description = "Token")
* @ApiReturnParams(name="code",type="integer",required=true, sample="0")
* @ApiReturnParams(name="msg",type="string",required=true, sample="获取成功")
* @ApiReturnParams(name="data",type="bject",required=true, description= "扩展数据")
* @ApiReturn({
"code" => 1,
"msg" => "获取成功",
"data" => {}
*})
*/
public function timesCardShare()
{
$user_card_id = $this->request->param('user_card_id/s');
$result = CardService::getInstance()->timesCardShare($user_card_id);
$this->success('次卡分享成功',$result);
}
/**
* @ApiTitle(核销会员卡)
* @ApiSummary(核销会员卡)
* @ApiRoute(/userCardVerification)
* @ApiMethod(POST)
* @ApiParams(name="brand_id",type="integer", require=true,description="商户ID")
* @ApiParams(name="user_card_id",type="String", require=false,description="会员卡ID")
* @ApiParams(name="share_id",type="integer", require=false,description="分享ID")
* @ApiParams(name="user_id",type="integer", require=true,description="用户iD")
* @ApiParams(name="card_type",type="integer", require=true,description="核销类型 1次卡 2时长卡 3单次卡")
* @ApiParams(name="expire_time",type="integer", require=true,description="失效时间")
* @ApiHeaders(name = "brand-key", type = "string",require = true, description = "应用key")
* @ApiHeaders(name = "token", type = "string", require = true, description = "Token")
* @ApiReturnParams(name="code",type="integer",required=true, sample="0")
* @ApiReturnParams(name="msg",type="string",required=true, sample="获取成功")
* @ApiReturnParams(name="data",type="bject",required=true, description= "扩展数据")
* @ApiReturn({
"code" => 1,
"msg" => "获取成功",
"data" => {}
*})
*/
public function userCardVerification()
{
$user_card_id = $this->request->param('user_card_id/s',0,'xilufitness_get_id_value');
$share_id = $this->request->param('share_id/s');
$user_id = $this->request->param('user_id/s');
$card_type = $this->request->param('card_type/s');
$brand_id = $this->request->param('brand_id/s');
$expire_time = $this->request->param('expire_time/s');
if (empty($expire_time) || $expire_time < time()) {
$this->error('核销失败-二维码已失效');
}
if ($brand_id != $this->brand_id) {
$this->error('二维码无效-商家信息不匹配');
}
if (in_array($card_type,[1,2])) {
CardService::getInstance()->userCardVerification($user_card_id,$user_id);
}else if ($card_type == 3) {
CardService::getInstance()->onceCardVerification($share_id,$user_id);
} else {
$this->error('核销失败');
}
}
/**
* @ApiTitle(获取核销记录)
* @ApiSummary(获取核销记录)
* @ApiRoute(/getCardVerificationRecords)
* @ApiMethod(GET)
* @ApiHeaders(name = "brand-key", type = "string",require = true, description = "应用key")
* @ApiHeaders(name = "token", type = "string", require = true, description = "Token")
* @ApiParams(name="user_card_id",type="integer", require=false,description="会员卡ID(用户端)")
* @ApiParams (name="page_index", type="integer", required=false, description="分页页码")
* @ApiParams (name="page_size", type="integer", required=false, description="每页条数")
* @ApiReturnParams(name="code",type="integer",required=true, sample="0")
* @ApiReturnParams(name="msg",type="string",required=true, sample="获取成功")
* @ApiReturnParams(name="data",type="bject",required=true, description= "扩展数据")
* @ApiReturn({
"code" => 1,
"msg" => "获取成功",
"data" => {}
*})
*/
public function getCardVerificationRecords()
{
$user_card_id = $this->request->param('user_card_id/s',0,'xilufitness_get_id_value');
$params['page_index'] = $this->request->post("page_index");
$params['page_size'] = $this->request->post("page_size");
$page_index = empty($params['page_index']) ? 1 : $params['page_index'];
$page_size = empty($params['page_size']) ? 10 : $params['page_size'];
$result = CardService::getInstance()->getCardVerificationRecords($user_card_id,$page_index,$page_size);
$this->success('',$result);
}
/**
* @ApiTitle(获取次卡分享记录)
* @ApiSummary(获取次卡分享记录)
* @ApiRoute(/getTimesCardShare)
* @ApiMethod(GET)
* @ApiHeaders(name = "brand-key", type = "string",require = true, description = "应用key")
* @ApiHeaders(name = "token", type = "string", require = true, description = "Token")
* @ApiParams(name="user_card_id",type="string", require=false,description="会员卡ID")
* @ApiReturnParams(name="code",type="integer",required=true, sample="0")
* @ApiReturnParams(name="msg",type="string",required=true, sample="获取成功")
* @ApiReturnParams(name="data",type="bject",required=true, description= "扩展数据")
* @ApiReturn({
"code" => 1,
"msg" => "获取成功",
"data" => {}
*})
*/
public function getTimesCardShare()
{
$user_card_id = $this->request->param('user_card_id/s',0,'xilufitness_get_id_value');
$result = CardService::getInstance()->getTimesCardShare($user_card_id);
$this->success('',$result);
}
/**
* @ApiTitle(领取次卡分享)
* @ApiSummary(领取次卡分享)
* @ApiRoute(/receiveTimesCardShare)
* @ApiMethod(POST)
* @ApiHeaders(name = "brand-key", type = "string",require = true, description = "应用key")
* @ApiHeaders(name = "token", type = "string", require = true, description = "Token")
* @ApiParams(name="share_id",type="integer", require=true,description="分享ID")
* @ApiReturnParams(name="code",type="integer",required=true, sample="0")
* @ApiReturnParams(name="msg",type="string",required=true, sample="获取成功")
* @ApiReturnParams(name="data",type="bject",required=true, description= "扩展数据")
* @ApiReturn({
"code" => 1,
"msg" => "获取成功",
"data" => {}
*})
*/
public function receiveTimesCardShare()
{
$share_id = $this->request->param('share_id/s');
CardService::getInstance()->receiveTimesCardShare($share_id);
$this->success('',[]);
}
}