test
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

241 lines
11 KiB

<?php
defined('IN_IA') or exit('Access Denied');
/**
* Comment: 抽奖活动管理
* Author: zzw
* Class Draw_WeliamController
*/
class Draw_WeliamController {
/**
* Comment: 获取抽奖活动信息列表
* Author: zzw
* Date: 2020/9/16 16:27
*/
public function index(){
global $_W,$_GPC;
//参数获取
$page = max(1 , intval($_GPC['page']));
$pageIndex = 10;
$pageStart = $page * $pageIndex - $pageIndex;
$title = $_GPC['title'] ? : '';//活动名称
$type = intval($_GPC['type']) ? : 0;//活动类型:1=9宫格,2=16宫格
$status = intval($_GPC['status']) ? : 0;//状态:1=未开启,2=使用中
//条件生成
$where = " WHERE uniacid = {$_W['uniacid']} AND aid = {$_W['aid']} ";
if($title) $where .= " AND title LIKE '%{$title}%' ";
if($type > 0) $where .= " AND type = {$type} ";
if($status > 0) $where .= " AND status = {$status} ";
//sql语句生成
$field = "id,title,type,status,create_time,start_time,end_time";
$sql = "SELECT {$field} FROM ".tablename(PDO_NAME."draw");
$order = " ORDER BY create_time DESC,id DESC ";
$limit = " LIMIT {$pageStart},{$pageIndex} ";
//列表信息获取
$list = pdo_fetchall($sql.$where.$order.$limit);
foreach($list as $key => &$val){
//时间信息处理
$val['create_time'] = date("Y-m-d H:i:s" , $val['create_time']);
$val['start_time'] = date("Y-m-d H:i:s" , $val['start_time']);
$val['end_time'] = date("Y-m-d H:i:s" , $val['end_time']);
//获取奖品数量
$val['prize'] = pdo_count(PDO_NAME."draw_join",['draw_id'=>$val['id'],'draw_goods_id >'=>0]);
}
//分页操作
$totalSql = str_replace($field,'count(*)',$sql);
$total = pdo_fetchcolumn($totalSql.$where);
$pager = wl_pagination($total, $page, $pageIndex);
include wl_template('draw/index');
}
/**
* Comment: 添加抽奖活动
* Author: zzw
* Date: 2020/9/16 16:10
*/
public function add(){
global $_W,$_GPC;
if($_W['ispost']){
//基本参数信息获取
$data = $_GPC['data'];
$prize = $_GPC['prize'];
$activityTime = $_GPC['activity_time'];
$mysqlFun = new MysqlFunction();
//判断轮盘数量是否为偶数
if($data['type'] == 3){
if(count($prize) % 2 != 0) wl_message("轮盘数量不为偶数,请设置为偶数!" , referer() , 'error');
$data['wheel_bg'] = serialize($data['wheel_bg']);
}
//判断抽奖概率是否合法
$totalProbability = sprintf("%.0f",array_sum(array_column($prize,'probability')));
if($totalProbability != sprintf("%.0f",100)) wl_message("中奖概率错误,概率之和不为100%!当前概率之和:{$totalProbability}%" , referer() , 'error');
//判断活动是否存在
$isHave = pdo_get(PDO_NAME."draw",['title'=>$data['title']]);
if($isHave) wl_message('已存在同名称活动!' , referer() , 'error');
//判断限制
if($data['total_join_times'] < $data['day_join_times']) wl_message('免费的总参加次数必须大于等于免费的每天参加次数!' , referer() , 'error');
if($data['total_draw_times'] < $data['day_draw_times']) wl_message('总中奖次数必须大于等于每天中奖次数!' , referer() , 'error');
if($data['total_parin_times'] < $data['day_parin_times']) wl_message('总参加次数必须大于等于每天参加次数!' , referer() , 'error');
//生成活动信息
$mysqlFun->startTrans();
$data['uniacid'] = $_W['uniacid'];
$data['aid'] = $_W['aid'];
$data['create_time'] = time();
$data['start_time'] = strtotime($activityTime['start']);
$data['end_time'] = strtotime($activityTime['end']);
$data['share_image'] = serialize($data['share_image']);
$res = pdo_insert(PDO_NAME."draw",$data);
if($res){
//处理奖品信息
$drawId = pdo_insertid();
foreach($prize as $pKey => $pVal){
$joinData = [
'draw_id' => $drawId ,//抽奖活动id
'draw_goods_id' => $pVal['draw_goods_id'] ? : 0 ,//奖品id
'probability' => $pVal['probability'] ,//中奖概率
'serial_number' => $pVal['serial_number'] ,//序号(当前奖品在该活动中的顺序)
];
$result = pdo_insert(PDO_NAME."draw_join",$joinData);
if(!$result){
$mysqlFun->rollback();
wl_message('添加失败,请刷新重试!' , referer() , 'error');
}
}
$mysqlFun->commit();
wl_message('添加成功!' , web_url('draw/draw/index') , 'success');
}else{
$mysqlFun->rollback();
wl_message('添加失败,请刷新重试!' , referer() , 'error');
}
}
//获取自定义装修菜单信息
if (p('diypage')) $menus = DiyMenu::getMenuList();
include wl_template('draw/add');
}
/**
* Comment: 编辑抽奖活动
* Author: zzw
* Date: 2020/9/16 17:36
*/
public function edit(){
global $_W,$_GPC;
//参数信息获取
$id = intval($_GPC['id']) OR wl_message('参数错误,请刷新重试!' , referer() , 'error');
if($_W['ispost']){
//基本参数信息获取
$data = $_GPC['data'];
$prize = $_GPC['prize'];
$activityTime = $_GPC['activity_time'];
$mysqlFun = new MysqlFunction();
//判断轮盘数量是否为偶数
if($data['type'] == 3){
if(count($prize) % 2 != 0) wl_message("轮盘数量不为偶数,请设置为偶数!" , referer() , 'error');
$data['wheel_bg'] = serialize($data['wheel_bg']);
}
//判断抽奖概率是否合法
$totalProbability = sprintf("%.0f",array_sum(array_column($prize,'probability')));
if($totalProbability != sprintf("%.0f",100)) wl_message("中奖概率错误,概率之和不为100%!当前概率之和:{$totalProbability}%" , referer() , 'error');
//判断活动是否存在
$isHave = pdo_get(PDO_NAME."draw",['title'=>$data['title'],'id <>'=>$id]);
if($isHave) wl_message('已存在同名称活动!' , referer() , 'error');
//判断限制
if($data['total_join_times'] < $data['day_join_times']) wl_message('免费的总参加次数必须大于等于免费的每天参加次数!' , referer() , 'error');
if($data['total_draw_times'] < $data['day_draw_times']) wl_message('总中奖次数必须大于等于每天中奖次数!' , referer() , 'error');
if($data['total_parin_times'] < $data['day_parin_times']) wl_message('总参加次数必须大于等于每天参加次数!' , referer() , 'error');
//生成活动信息
$mysqlFun->startTrans();
$data['start_time'] = strtotime($activityTime['start']);
$data['end_time'] = strtotime($activityTime['end']);
$data['share_image'] = serialize($data['share_image']);
pdo_update(PDO_NAME."draw",$data,['id'=>$id]);
//删除所有的相关奖品信息
pdo_delete(PDO_NAME."draw_join",['draw_id'=>$id]);
//处理奖品信息
foreach($prize as $pKey => $pVal){
//判断当前奖品是否存在
$joinData = [
'draw_id' => $id ,//抽奖活动id
'draw_goods_id' => $pVal['draw_goods_id'] ? : 0 ,//奖品id
'probability' => $pVal['probability'] ,//中奖概率
'serial_number' => $pVal['serial_number'] ,//序号(当前奖品在该活动中的顺序)
];
$result = pdo_insert(PDO_NAME."draw_join",$joinData);
if(!$result){
$mysqlFun->rollback();
wl_message('修改失败,请刷新重试!' , referer() , 'error');
}
}
$mysqlFun->commit();
wl_message('修改成功!' , web_url('draw/draw/index') , 'success');
}
//进入编辑页面 获取当前活动基本参数信息
$info = pdo_get(PDO_NAME."draw",['id'=>$id]);
$info['rule'] = htmlspecialchars_decode($info['rule']);
$info['introduce'] = htmlspecialchars_decode($info['introduce']);
$info['wheel_bg'] = unserialize($info['wheel_bg']);
$data['share_image'] = unserialize($data['share_image']);
//处理顶部幻灯片
if(!empty($info['share_image'])){
$flag = unserialize($info['share_image']);
if($flag){
$info['share_image'] = $flag;
}else{
$flag = $info['share_image'];
$info['share_image'] = [];
$info['share_image'][] = $flag;
}
}
//获取当前活动相关的奖品信息列表
$parizeList = Draw::drawJoinList($id);
$orderWhere = array_column($parizeList, 'serial_number');
array_multisort($orderWhere, SORT_ASC, $parizeList);
$parizeList = array_combine($orderWhere,$parizeList) ;
//获取自定义装修菜单信息
if (p('diypage')) $menus = DiyMenu::getMenuList();
include wl_template('draw/edit');
}
/**
* Comment: 删除一个抽奖活动信息
* Author: zzw
* Date: 2020/9/16 18:13
*/
public function delete(){
global $_W,$_GPC;
//参数信息获取
$id = $_GPC['id'] OR show_json(0, '参数错误,请刷新重试!');
$mysqlFun = new MysqlFunction();
//删除内容
$mysqlFun->startTrans();
$res = pdo_delete(PDO_NAME."draw",['id'=>$id]);
if($res && pdo_count(PDO_NAME."draw_join",['draw_id'=>$id]) > 0) $res = pdo_delete(PDO_NAME."draw_join",['draw_id'=>$id]);
if ($res) {
$mysqlFun->commit();
show_json(1 , '删除成功');
}else {
$mysqlFun->rollback();
show_json(0 , '删除失败,请刷新重试');
}
}
/**
* Comment: 基本设置内容
* Author: zzw
* Date: 2020/9/17 11:14
*/
public function set(){
global $_W,$_GPC;
if($_W['ispost']){
$set = $_GPC['set'];
Setting::agentsetting_save($set,'draw_set');
wl_message('设置成功!' , web_url('draw/draw/set') , 'success');
}
//获取已存在的设置信息
$set = Setting::agentsetting_read('draw_set');
$set['rule'] = htmlspecialchars_decode($set['rule']);
$set['introduce'] = htmlspecialchars_decode($set['introduce']);
include wl_template('draw/set');
}
}