2025-08-01 11:39:06 +08:00

332 lines
14 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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('',[]);
}
}