初始化项目:添加后端代码、ThinkPHP框架、前端资源
This commit is contained in:
@@ -0,0 +1,193 @@
|
||||
<?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(){
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
<?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 BindCourse extends Model
|
||||
{
|
||||
|
||||
|
||||
// 表名
|
||||
protected $name = 'app_activity_course';
|
||||
|
||||
// 自动写入时间戳字段
|
||||
protected $autoWriteTimestamp = 'integer';
|
||||
|
||||
// 定义时间戳字段名
|
||||
protected $createTime = 'createtime';
|
||||
protected $updateTime = false;
|
||||
protected $deleteTime = false;
|
||||
|
||||
public function course()
|
||||
{
|
||||
return $this->belongsTo('\app\api\model\course\Course', 'course_id', 'id', [], 'LEFT')->setEagerlyType(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查用户参与权限
|
||||
* @return void
|
||||
*/
|
||||
public static function checkJoinAuth($userId,$activityId){
|
||||
|
||||
$list = self::with(['course'])
|
||||
->where([
|
||||
'activity_id'=>$activityId,
|
||||
'course.status'=>1
|
||||
])
|
||||
->field("course_id")
|
||||
->select();
|
||||
|
||||
if(!$list){
|
||||
return true;
|
||||
}
|
||||
|
||||
foreach ($list as $item){
|
||||
if(!\app\common\model\user\Subscription::getSubscriptionAuth($userId,$item['course_id'])){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
<?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 Form extends Model
|
||||
{
|
||||
|
||||
|
||||
// 表名
|
||||
protected $name = 'app_activity_apply_form';
|
||||
|
||||
// 自动写入时间戳字段
|
||||
protected $autoWriteTimestamp = 'integer';
|
||||
|
||||
// 定义时间戳字段名
|
||||
protected $createTime = 'createtime';
|
||||
protected $updateTime = false;
|
||||
protected $deleteTime = false;
|
||||
|
||||
|
||||
/**
|
||||
* 获取表单所属用户
|
||||
* @param $userId
|
||||
* @param $formId
|
||||
* @return void
|
||||
*/
|
||||
public static function getFormUser($formId){
|
||||
$formInfo = self::where([
|
||||
'id'=>$formId
|
||||
])->find();
|
||||
|
||||
if(!$formInfo){
|
||||
return false;
|
||||
}
|
||||
|
||||
return $formInfo['user_id'];
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取表单字段
|
||||
* @param $activityId
|
||||
* @return array|array[]
|
||||
*/
|
||||
public function getFromField($activityId){
|
||||
$activityData = \app\api\model\app\activity\Activity::getActivityDetail($activityId);
|
||||
|
||||
if(!$activityData){
|
||||
return false;
|
||||
}
|
||||
|
||||
$activityData['apply_info_form'] = json_decode($activityData['apply_info_form'],true);
|
||||
|
||||
$mustField = [
|
||||
[
|
||||
"required"=>true,
|
||||
"name"=>"姓名",
|
||||
"type"=>"input"
|
||||
],
|
||||
[
|
||||
"required"=>true,
|
||||
"name"=>"手机号",
|
||||
"type"=>"input"
|
||||
]
|
||||
];
|
||||
|
||||
if($activityData['apply_info_collet'] == 1){
|
||||
$mustField = array_merge($mustField,$activityData['apply_info_form']);
|
||||
}
|
||||
|
||||
return $mustField;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
<?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 Signin extends Model
|
||||
{
|
||||
|
||||
|
||||
// 表名
|
||||
protected $name = 'app_activity_signin';
|
||||
|
||||
// 自动写入时间戳字段
|
||||
protected $autoWriteTimestamp = 'integer';
|
||||
|
||||
// 定义时间戳字段名
|
||||
protected $createTime = 'createtime';
|
||||
protected $updateTime = false;
|
||||
protected $deleteTime = false;
|
||||
|
||||
|
||||
/**
|
||||
* 签到
|
||||
* @param $ticketNo
|
||||
* @param $type
|
||||
* @return bool
|
||||
*/
|
||||
public static function signin($ticketNo,$type='scan'){
|
||||
|
||||
$result = \app\api\model\app\activity\UserTicket::where([
|
||||
'ticket_no'=>$ticketNo
|
||||
])->update([
|
||||
'sign'=>1,
|
||||
'use_time'=>time()
|
||||
]);
|
||||
|
||||
|
||||
//消息推送收集
|
||||
\app\admin\library\app\msgpush\Msg::collect('activity_sing_in',['ticket_no'=>$ticketNo]);
|
||||
|
||||
if($result){
|
||||
self::insert([
|
||||
'uniacid'=>UNIACID,
|
||||
'ticket_no'=>$ticketNo,
|
||||
'type'=>$type,
|
||||
'createtime'=>time()
|
||||
]);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 取消签到
|
||||
* @param $ticketNo
|
||||
* @return bool
|
||||
*/
|
||||
public static function cancel($ticketNo){
|
||||
$result = \app\api\model\app\activity\UserTicket::where([
|
||||
'ticket_no'=>$ticketNo
|
||||
])->update([
|
||||
'sign'=>0,
|
||||
'use_time'=>''
|
||||
]);
|
||||
|
||||
if($result){
|
||||
self::where([
|
||||
'ticket_no'=>$ticketNo
|
||||
])->delete();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace app\api\model\app\activity;
|
||||
|
||||
use think\Model;
|
||||
use think\Db;
|
||||
use app\api\model\app\agent\Level;
|
||||
|
||||
class Ticket extends Model
|
||||
{
|
||||
|
||||
|
||||
// 表名
|
||||
protected $name = 'app_activity_ticket';
|
||||
|
||||
|
||||
// 自动写入时间戳字段
|
||||
protected $autoWriteTimestamp = 'integer';
|
||||
|
||||
// 定义时间戳字段名
|
||||
protected $createTime = 'createtime';
|
||||
protected $updateTime = false;
|
||||
protected $deleteTime = false;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
<?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;
|
||||
class UserTicket extends Model
|
||||
{
|
||||
|
||||
|
||||
// 表名
|
||||
protected $name = 'app_activity_user_ticket';
|
||||
|
||||
|
||||
// 自动写入时间戳字段
|
||||
protected $autoWriteTimestamp = 'integer';
|
||||
|
||||
// 定义时间戳字段名
|
||||
protected $createTime = 'createtime';
|
||||
protected $updateTime = false;
|
||||
protected $deleteTime = false;
|
||||
|
||||
/**
|
||||
* 获取报名人数
|
||||
* @return void
|
||||
*/
|
||||
public static function getApplyUserCount($activityId){
|
||||
return self::where([
|
||||
'activity_id'=>$activityId,
|
||||
'status'=>['<>',2]
|
||||
])->count();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取用户购买次数
|
||||
* @return void
|
||||
*/
|
||||
public static function getUserBuyCount($userId,$ticketId){
|
||||
return self::where([
|
||||
'ticket_id'=>$ticketId,
|
||||
'user_id'=>$userId
|
||||
])->count();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户票券
|
||||
* @param $where
|
||||
* @param $limit
|
||||
* @param $page
|
||||
* @param $sort
|
||||
* @return void
|
||||
*/
|
||||
public function getUserTicket($where,$limit,$page,$sort='desc'){
|
||||
$orderField = 'ut.createtime';
|
||||
|
||||
$field = ['ut.activity_id','ut.sign','ut.status','a.name as activity_name','at.name as ticket_name','ut.use_time','ut.price','ut.createtime','ut.ticket_no','form.mobile','form.name','form.other'];
|
||||
|
||||
$list = self::alias('ut')
|
||||
->join(\app\api\model\app\activity\Activity::getTable().' a','ut.activity_id=a.id','LEFT')
|
||||
->join(\app\api\model\app\activity\Ticket::getTable().' at','ut.ticket_id=at.id')
|
||||
->join(\app\api\model\app\activity\Form::getTable().' form','ut.apply_info_id=form.id')
|
||||
->where($where)
|
||||
->limit($limit)->page($page)
|
||||
->order($orderField,$sort)
|
||||
->field($field)
|
||||
->select();
|
||||
|
||||
if(!empty($list)){
|
||||
foreach ($list as &$item){
|
||||
$item['other'] = json_decode($item['other']);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return $list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户票券
|
||||
* @param $where
|
||||
* @param $limit
|
||||
* @param $page
|
||||
* @param $sort
|
||||
* @return void
|
||||
*/
|
||||
public function getTicketDetail($ticketNo){
|
||||
|
||||
$field = ['ut.activity_id','ut.status','a.name as activity_name','at.name as ticket_name','ut.use_time','ut.price','ut.createtime','ut.ticket_no','form.mobile','form.name','form.other'];
|
||||
|
||||
$data = self::alias('ut')
|
||||
->join(\app\api\model\app\activity\Activity::getTable().' a','ut.activity_id=a.id')
|
||||
->join(\app\api\model\app\activity\Ticket::getTable().' at','ut.ticket_id=at.id')
|
||||
->join(\app\api\model\app\activity\Form::getTable().' form','ut.apply_info_id=form.id')
|
||||
->where([
|
||||
'ut.ticket_no'=>$ticketNo
|
||||
])
|
||||
->field($field)
|
||||
->find();
|
||||
|
||||
if(!$data){
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user