Files
amb_wechatapp/application/api/model/app/activity/Activity.php
T

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(){
}
}