193 lines
5.2 KiB
PHP
193 lines
5.2 KiB
PHP
<?php
|
|
|
|
namespace app\api\model\app\activity;
|
|
|
|
use think\Model;
|
|
use think\Db;
|
|
use app\api\model\app\activity\Ticket;
|
|
use app\common\exception\Exception;
|
|
use app\api\model\app\activity\UserTicket;
|
|
use fast\Random;
|
|
class Activity extends Model
|
|
{
|
|
|
|
|
|
// 表名
|
|
protected $name = 'app_activity';
|
|
|
|
|
|
// 自动写入时间戳字段
|
|
protected $autoWriteTimestamp = 'integer';
|
|
|
|
// 定义时间戳字段名
|
|
protected $createTime = 'createtime';
|
|
protected $updateTime = false;
|
|
protected $deleteTime = false;
|
|
|
|
|
|
/**
|
|
* 获取支付信息
|
|
* @param $ticket
|
|
* @return mixed
|
|
*/
|
|
public function getPayDetail($ticketId,$count,$formId){
|
|
//计算商品总价
|
|
|
|
//这里保证每张卡券都来自同一个活动
|
|
|
|
$ticketInfo = Ticket::where(['id'=>$ticketId])->find();
|
|
if(!$ticketInfo){
|
|
throw new \think\Exception("未获取到票券信息");
|
|
}
|
|
|
|
|
|
if($ticketInfo['inventory'] && ($ticketInfo['sales'] + $count) > $ticketInfo['inventory']){
|
|
throw new \think\Exception("票券'{$ticketInfo['name']}'库存不足");
|
|
}
|
|
|
|
|
|
|
|
|
|
$activityInfo = self::getActivityDetail($ticketInfo['activity_id']);
|
|
|
|
if(!$activityInfo || (!$activityInfo['status'] && !$activityInfo['apply_status'])){
|
|
throw new \think\Exception("当前活动暂不可用,请刷新后重试");
|
|
}
|
|
|
|
|
|
|
|
$activityInfo['price_marking'] = $activityInfo['price'] = $ticketInfo['price'];
|
|
|
|
$activityInfo['name'] .= "【{$ticketInfo['name']}】";
|
|
$activityInfo['ticket_id'] = $ticketInfo['id'];
|
|
|
|
$activityInfo['form_user_id'] = \app\api\model\app\activity\Form::getFormUser($formId);
|
|
if(!$activityInfo['form_user_id']){
|
|
throw new \think\Exception("报名信息错误,请返回重试");
|
|
}
|
|
|
|
if(!\app\api\model\app\activity\BindCourse::checkJoinAuth($activityInfo['form_user_id'],$ticketInfo['activity_id'])){
|
|
throw new \think\Exception("请先订阅关联课程");
|
|
}
|
|
|
|
if($ticketInfo['limit_buy']){
|
|
if($count > $ticketInfo['limit_buy']){
|
|
throw new \think\Exception("票券'{$ticketInfo['name']}'超出限购数量");
|
|
}
|
|
|
|
//判断限购
|
|
$userBuyCount = \app\api\model\app\activity\UserTicket::getUserBuyCount($activityInfo['form_user_id'],$ticketInfo['id']);
|
|
if(($userBuyCount + $count) > $ticketInfo['limit_buy']){
|
|
throw new \think\Exception("票券'{$ticketInfo['name']}'超出限购数量");
|
|
}
|
|
}
|
|
|
|
$activityInfo['apply_info_id'] = $formId;
|
|
$activityInfo['status'] = 1;
|
|
$activityInfo['is_virtual_pay'] = \app\common\library\pay\VirtualPayService::isUseVirtualPay('activity');
|
|
return $activityInfo;
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* 向用户发放票券
|
|
* @param $userId
|
|
* @param $activityId
|
|
* @param $ticketId
|
|
* @param $formId
|
|
* @param $count
|
|
* @param $price
|
|
* @param $orderNo
|
|
* @return void
|
|
*/
|
|
public static function setUserTicket($userId,$activityId,$ticketId,$formId,$count,$price,$orderNo,$ticket_no = ''){
|
|
if(!$ticket_no){
|
|
$ticket_no = Random::numeric(14);
|
|
}
|
|
for($i=0;$i<$count;$i++){
|
|
UserTicket::insert([
|
|
'uniacid'=>UNIACID,
|
|
'user_id'=>$userId,
|
|
'apply_info_id'=>$formId,
|
|
'activity_id'=>$activityId,
|
|
'ticket_id'=>$ticketId,
|
|
'order_no'=>$orderNo,
|
|
'price'=>$price,
|
|
'ticket_no'=>$ticket_no,
|
|
'status'=>1,
|
|
'createtime'=>time()
|
|
]);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* 获取活动详情
|
|
* @param $id
|
|
* @return false
|
|
*/
|
|
public static function getActivityDetail($id){
|
|
$data = self::where([
|
|
'id'=>$id
|
|
])->find();
|
|
|
|
if(!$data){
|
|
return false;
|
|
}
|
|
|
|
// $data['apply_info_form'] = $this->formModel->getFromField($id);
|
|
|
|
//报名时间
|
|
|
|
if($data['apply_time_type'] == 1){
|
|
$data['apply_start_time'] = $data['activity_start_time'];
|
|
$data['apply_end_time'] = $data['activity_end_time'];
|
|
}
|
|
|
|
$data['detail'] = \addons\alivod\library\Alivod::parseContentAliovdTag($data['detail']);
|
|
|
|
$data['type'] = 'activity';
|
|
//判断活动状态
|
|
|
|
//判断活动是否进行中
|
|
$data['status'] = (time() > $data['activity_start_time'] && time() < $data['activity_end_time']) ? 1 : 0;
|
|
|
|
//判断报名时间
|
|
$data['apply_status'] = (time() > $data['apply_start_time'] && time() < $data['apply_end_time'] ) ? 1 : 0;
|
|
|
|
|
|
//获取报名人数
|
|
|
|
if($data['apply_member_show']){
|
|
$data['apply_user_count'] = \app\api\model\app\activity\UserTicket::getApplyUserCount($id);
|
|
}else{
|
|
$data['apply_user_count'] = 0;
|
|
}
|
|
|
|
|
|
return $data;
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* 增加浏览量
|
|
* @param $activityId
|
|
* @return void
|
|
*/
|
|
public static function incViews($activityId){
|
|
self::where([
|
|
'id'=>$activityId
|
|
])->setInc('views');
|
|
}
|
|
|
|
|
|
/**
|
|
* 检查绑定课程权限
|
|
* @return void
|
|
*/
|
|
public function checkBindCourse(){
|
|
|
|
}
|
|
} |