511 行
20 KiB
PHP
可执行文件
511 行
20 KiB
PHP
可执行文件
<?php
|
|
|
|
namespace Retail\Controller;
|
|
|
|
use Think\Controller;
|
|
|
|
//[1.6.9]
|
|
|
|
/**
|
|
* 商户红包
|
|
* Class RewardController
|
|
* @package Retail\Controller
|
|
*/
|
|
class RewardController extends BaseController
|
|
{
|
|
/**
|
|
* 红包
|
|
*/
|
|
public function index()
|
|
{
|
|
$arr = array(
|
|
'addReward' => '/index.php/Retail/Reward/addReward',
|
|
'redSwitch' => '/index.php/Retail/Reward/redSwitch',
|
|
'getRewardRecordList' => '/index.php/Retail/Reward/getRewardRecordList',
|
|
'redDelete' => '/index.php/Retail/Reward/redDelete',
|
|
);
|
|
$authArr = checkFunction($arr);
|
|
$this->assign('authArr', $authArr);
|
|
$this->display();
|
|
}
|
|
|
|
// 红包添加
|
|
public function add()
|
|
{
|
|
$this->display();
|
|
}
|
|
|
|
// 红包列表
|
|
public function getRewardList()
|
|
{
|
|
$type = I('post.type'); // 活动类型 1公众号通知栏 2线下支付 3小程序商城 4商城支付
|
|
$status = I('post.status'); //红包状态 1未开始 2进行中 3已结束
|
|
$start_time = I('post.start_time'); //开始时间
|
|
$end_time = I('post.end_time'); //结束时间
|
|
$page = I('post.page'); //页
|
|
$limit = I('post.limit'); //每页获取的条数
|
|
if (!empty($start_time) && !empty($end_time)) {
|
|
$start_time = strtotime($start_time);
|
|
$end_time = strtotime($end_time);
|
|
$map['add_time'] = array('between', "{$start_time},{$end_time}");
|
|
}
|
|
$map['merchant_id'] = $this->merchant_id;
|
|
$map['is_del'] = 0;
|
|
if (!empty($type)) {
|
|
$map['type'] = $type;
|
|
}
|
|
$typeArr = array(
|
|
'1' => '未开始',
|
|
'2' => '进行中',
|
|
'3' => '已结束',
|
|
);
|
|
$this_time = time();
|
|
switch ($status) {
|
|
case '1':
|
|
//未开始
|
|
$map[] = array(
|
|
'start_time' => array('gt', $this_time),
|
|
array(
|
|
'start_time' => array('elt', $this_time),
|
|
'end_time' => array('gt', $this_time),
|
|
'status' => 0,
|
|
array(
|
|
array(
|
|
array(
|
|
'less_number' => array('gt', 0),
|
|
'is_number' => 1,
|
|
),
|
|
array(
|
|
'is_number' => 0,
|
|
),
|
|
'_logic' => 'OR'
|
|
),
|
|
array(
|
|
array(
|
|
'less_money' => array('gt', 0),
|
|
'is_money' => 1,
|
|
),
|
|
array(
|
|
'is_money' => 0,
|
|
),
|
|
'_logic' => 'OR'
|
|
),
|
|
),
|
|
),
|
|
'_logic' => 'OR'
|
|
);
|
|
break;
|
|
case '2':
|
|
//进行中
|
|
$map['status'] = 1;
|
|
$map[] = array(
|
|
array(
|
|
'less_number' => array('gt', 0),
|
|
'is_number' => 1,
|
|
),
|
|
array(
|
|
'less_money' => array('gt', 0),
|
|
'is_money' => 1,
|
|
),
|
|
'start_time' => array('elt', $this_time),
|
|
'end_time' => array('gt', $this_time),
|
|
'_logic' => 'OR'
|
|
);
|
|
break;
|
|
case '3':
|
|
//已结束
|
|
$map[] = array(
|
|
array(
|
|
'less_number' => array('elt', 0),
|
|
'is_number' => 1,
|
|
),
|
|
array(
|
|
'less_money' => array('elt', 0),
|
|
'is_money' => 1,
|
|
),
|
|
'end_time' => array('lt', time()),
|
|
'_logic' => 'OR'
|
|
);
|
|
break;
|
|
}
|
|
$RewardModel = D('Reward');
|
|
// $RewardModel->closeInvalidReward($this->merchant_id);//关闭
|
|
$list = $RewardModel->getSelect($map, '*', 'add_time desc', "{$page},{$limit}");
|
|
$count = $RewardModel->getCount($map);
|
|
foreach ($list as &$value) {
|
|
$value['add_time'] = date('Y-m-d H:i:s', $value['add_time']);
|
|
$value['range_time'] = date('Y-m-d', $value['start_time']) . ' ~ ' . date('Y-m-d', $value['end_time']);
|
|
switch ($value['reward_type']) {
|
|
case '1':
|
|
$value['reward_type'] = '固定金额';
|
|
break;
|
|
case '2':
|
|
$value['reward_type'] = '随机金额';
|
|
break;
|
|
case '3':
|
|
$value['reward_type'] = '梯度金额';
|
|
break;
|
|
}
|
|
switch ($value['type']) {
|
|
case '1':
|
|
$value['type'] = '公众号通知栏';
|
|
break;
|
|
case '2':
|
|
$value['type'] = '线下支付';
|
|
break;
|
|
case '3':
|
|
$value['type'] = '小程序商城首页';
|
|
break;
|
|
case '4':
|
|
$value['type'] = '线上支付';
|
|
break;
|
|
}
|
|
if (!empty($status)) {
|
|
$value['status_msg'] = $typeArr[$status];
|
|
} else {
|
|
if ($value['start_time'] > $this_time) {
|
|
$value['status_msg'] = '未开始';
|
|
} else if (intval($value['start_time']) <= $this_time && intval($value['end_time']) > $this_time || intval($value['start_time'] > $this_time)) {
|
|
$value['this_time'] = $this_time;
|
|
if (($value['less_number'] <= 0 && $value['is_number'] == 1) || ($value['less_money'] <= 0 && $value['is_money'] == 1)) {
|
|
$value['status_msg'] = '已结束';
|
|
} else {
|
|
if ($value['status'] == 1) {
|
|
$value['status_msg'] = '进行中';
|
|
} else {
|
|
$value['status_msg'] = '未开始';
|
|
}
|
|
}
|
|
} else {
|
|
$value['status_msg'] = '已结束';
|
|
}
|
|
}
|
|
|
|
unset($value['start_time']);
|
|
unset($value['end_time']);
|
|
}
|
|
$res['code'] = 0;
|
|
$res['count'] = $count;
|
|
$res['data'] = $list;
|
|
$this->ajaxReturn($res);
|
|
}
|
|
|
|
//添加红包
|
|
public function addReward()
|
|
{
|
|
if (IS_POST) {
|
|
$name = I('post.name'); //活动名称
|
|
$reward_type = I('post.reward_type'); //红包类型
|
|
$start_time = I('post.start_time');
|
|
$end_time = I('post.end_time');
|
|
if (empty($name)) {
|
|
$res['status'] = 0;
|
|
$res['msg'] = '请填写活动名称';
|
|
$this->ajaxReturn($res);
|
|
}
|
|
//固定金额
|
|
if ($reward_type == 1) {
|
|
$fixed_money = I('post.fixed_money');
|
|
$number = I('post.number');
|
|
if (empty($fixed_money) || empty($number)) {
|
|
$res['status'] = 0;
|
|
$res['msg'] = '固定金额或数量不能为空';
|
|
$this->ajaxReturn($res);
|
|
}
|
|
$Ad['fixed_money'] = $fixed_money;
|
|
$Ad['number'] = $number;
|
|
$Ad['less_number'] = $number;
|
|
$Ad['is_money'] = 0;
|
|
} elseif ($reward_type == 2) {
|
|
//随机金额
|
|
$min_money = I('post.min_money');
|
|
$max_money = I('post.max_money');
|
|
if (empty($min_money) || empty($max_money)) {
|
|
$res['status'] = 0;
|
|
$res['msg'] = '最大最小金额不能为空';
|
|
$this->ajaxReturn($res);
|
|
} elseif ($min_money >= $max_money) {
|
|
$res['status'] = 0;
|
|
$res['msg'] = '最小金额不能比最大金额大';
|
|
$this->ajaxReturn($res);
|
|
}
|
|
$money = I('post.money') ? I('post.money') : NULL;
|
|
$number = I('post.number');
|
|
if (!empty($money)) {
|
|
if ($money < $max_money) {
|
|
$res['status'] = 0;
|
|
$res['msg'] = '总金额不能小于最大金额';
|
|
$this->ajaxReturn($res);
|
|
}
|
|
}
|
|
if (empty($money)) {
|
|
$Ad['is_money'] = 0;
|
|
}
|
|
if (empty($number)) {
|
|
$Ad['is_number'] = 0;
|
|
}
|
|
$Ad['min_money'] = $min_money;
|
|
$Ad['max_money'] = $max_money;
|
|
$Ad['money'] = $money;
|
|
$Ad['number'] = $number;
|
|
$Ad['less_number'] = $number;
|
|
$Ad['less_money'] = $money;
|
|
} else if ($reward_type == 3) {
|
|
// 梯度金额
|
|
$reward_list = I('post.reward_list');
|
|
if (empty($reward_list)) {
|
|
$res['status'] = 0;
|
|
$res['msg'] = '梯度金额不能为空';
|
|
$this->ajaxReturn($res);
|
|
}
|
|
$nub_json = json_decode($reward_list, true);
|
|
$number = 0;
|
|
$reward_list = array();
|
|
foreach ($nub_json as $val) {
|
|
$reward_list[] = array(
|
|
'max' => $val['max'], //最大金额
|
|
'min' => $val['min'], //最小金额
|
|
'num' => $val['num'], //总数量
|
|
'less_num' => $val['num'], //剩余数量
|
|
);
|
|
$number += $val['num'];
|
|
}
|
|
$money = I('post.money') ? I('post.money') : NULL;
|
|
if (empty($money)) {
|
|
$Ad['is_money'] = 0;
|
|
}
|
|
$Ad['reward_list'] = json_encode($reward_list);
|
|
$Ad['number'] = $number;
|
|
$Ad['less_number'] = $number;
|
|
$Ad['money'] = $money;
|
|
$Ad['less_money'] = $money;
|
|
}
|
|
if (!$start_time || !$end_time) {
|
|
$res['status'] = 0;
|
|
$res['msg'] = '请选择正确的时间';
|
|
$this->ajaxReturn($res);
|
|
}
|
|
// 活动类型
|
|
$type = I('post.type');
|
|
// 每日领取限制
|
|
$day_restrict_type = I('post.day_restrict_type');
|
|
if ($day_restrict_type == 1) {
|
|
$Ad['day_max_time'] = I('post.day_max_time');
|
|
} elseif ($day_restrict_type == 2) {
|
|
$Ad['day_max_money'] = I('post.day_max_money') ? I('post.day_max_money') : NULL;
|
|
}
|
|
//消费金额限制
|
|
if ($type == 2 || $type == 4) {
|
|
$need_money = I('post.need_money');
|
|
if (empty($need_money)) {
|
|
$res['status'] = 0;
|
|
$res['msg'] = '消费金额不正确';
|
|
$this->ajaxReturn($res);
|
|
}
|
|
$Ad['need_money'] = $need_money;
|
|
}
|
|
if ($type == 2 || $type == 3 || $type == 4) {
|
|
//活动门店限制
|
|
$is_limit_store = I('post.is_limit_store');
|
|
$Ad['is_limit_store'] = $is_limit_store;
|
|
if ($is_limit_store == 1) {
|
|
$limit_store_id = I('post.limit_store_id');
|
|
$Ad['limit_store_id'] = $limit_store_id;
|
|
}
|
|
//非会员限制
|
|
if ($type == 3 || $type == 4) {
|
|
$is_vip = I('post.is_vip');
|
|
$Ad['is_vip'] = $is_vip;
|
|
}
|
|
//会员等级限制
|
|
$is_class_limit = I('post.is_class_limit');
|
|
$Ad['is_class_limit'] = $is_class_limit;
|
|
if ($is_class_limit == 1) {
|
|
$class_type = I('post.class_type');
|
|
$Ad['class_type'] = $class_type;
|
|
}
|
|
}
|
|
$Ad['name'] = $name;
|
|
$Ad['reward_type'] = $reward_type;
|
|
$Ad['sum_max_time'] = I('post.sum_max_time');
|
|
$Ad['type'] = $type;
|
|
$Ad['start_time'] = strtotime($start_time);
|
|
$Ad['end_time'] = strtotime($end_time) + 86399;
|
|
$Ad['merchant_id'] = $this->merchant_id;
|
|
$Ad['day_restrict_type'] = $day_restrict_type;
|
|
|
|
$map['merchant_id'] = $this->merchant_id;
|
|
$map['type'] = $type;
|
|
$RewardModel = D('Reward');
|
|
$oldReward = $RewardModel->getFind($map, '*', 'phase desc'); // 查询是否存在数据。
|
|
$Ad['add_time'] = time();
|
|
if ($oldReward) {
|
|
$Ad['status'] = 0;
|
|
$Ad['phase'] = $oldReward['phase'] + 1; // 开启新的红包数据。
|
|
$ret = M('reward')->add($Ad);
|
|
} else {
|
|
$Ad['phase'] = 1;
|
|
$Ad['status'] = 0; // 添加红包时为关闭状态;
|
|
$ret = M('reward')->add($Ad);
|
|
}
|
|
if ($ret !== false) {
|
|
$res['status'] = 1;
|
|
$res['msg'] = '红包编辑成功';
|
|
if ($oldReward) {
|
|
if ($oldReward['status'] == 0) {
|
|
$res['msg'] = '红包添加成功,当前为关闭状态';
|
|
} else {
|
|
$res['msg'] = '红包添加成功';
|
|
}
|
|
}
|
|
if (!$oldReward) {
|
|
$res['msg'] = '红包添加成功,当前为关闭状态,开启请到红包主页';
|
|
}
|
|
} else {
|
|
$res['status'] = 0;
|
|
$res['msg'] = '请检查参数';
|
|
}
|
|
$this->ajaxReturn($res);
|
|
}
|
|
}
|
|
|
|
// 参加红包活动的店铺选项接口
|
|
public function getStoreList()
|
|
{
|
|
$map = array(
|
|
'merchantid' => $this->merchant_id,
|
|
'state' => 0,
|
|
'store_status' => 0,
|
|
);
|
|
$res = D('RetailStore')->getSelect($map, 'id,storetag as store_name');
|
|
$this->ajaxReturn($res);
|
|
}
|
|
|
|
// 参加红包活动的会员等级选项接口
|
|
public function vipGrade()
|
|
{
|
|
$integral = M('retail_vip_integral')->field('id,cardname,min_integral')->where(['merchantid' => $this->merchant_id])->select();
|
|
$this->ajaxReturn($integral);
|
|
}
|
|
|
|
//删除红包
|
|
public function redDelete()
|
|
{
|
|
$where['id'] = I('post.id');
|
|
$where['merchant_id'] = $this->merchant_id;
|
|
$res = M('reward')->where($where)->find();
|
|
if ($res) {
|
|
if ($res['status'] == 1) {
|
|
$data['status'] = 0;
|
|
$data['msg'] = '请先关闭红包';
|
|
$this->ajaxReturn($data);
|
|
}
|
|
$rt = M('reward')->where($where)->save(array('is_del' => 1));
|
|
if ($rt) {
|
|
$data['status'] = 1;
|
|
$data['msg'] = '删除成功';
|
|
} else {
|
|
$data['status'] = 0;
|
|
$data['msg'] = '删除失败';
|
|
}
|
|
} else {
|
|
$data['status'] = 0;
|
|
$data['msg'] = '该红包不存在或已被删除';
|
|
}
|
|
$this->ajaxReturn($data);
|
|
}
|
|
|
|
//红包开启关闭
|
|
public function redSwitch()
|
|
{
|
|
if (IS_POST) {
|
|
$id = I('post.id');
|
|
$status = I('post.status');
|
|
$RewardModel = D('Reward');
|
|
if ($status == 0) {
|
|
$res = $RewardModel->updateOrder(array('id' => $id), array('status' => 0));
|
|
if ($res) {
|
|
$data['status'] = 1;
|
|
$data['value'] = 0;
|
|
$data['msg'] = '关闭成功';
|
|
} else {
|
|
$data['status'] = 0;
|
|
$data['value'] = 0;
|
|
$data['msg'] = '关闭失败';
|
|
}
|
|
} else {
|
|
$times = time();
|
|
$reward = $RewardModel->getFind(array('id' => $id));
|
|
if ($times > ($reward['end_time'])) {
|
|
$data['status'] = 0;
|
|
$data['value'] = 0;
|
|
$data['msg'] = '开启失败,活动已过期!';
|
|
$this->ajaxReturn($data);
|
|
}
|
|
// 红包金额数量限制
|
|
if ($reward['is_number'] == 1 && $reward['less_number'] <= 0) {
|
|
$data['status'] = 0;
|
|
$data['msg'] = '红包数量已用完';
|
|
$this->ajaxReturn($data);
|
|
}
|
|
// 红包数量限制
|
|
if ($reward['is_money'] == 1 && $reward['less_money'] <= 0) {
|
|
$data['status'] = 0;
|
|
$data['msg'] = '红包余额不足';
|
|
$this->ajaxReturn($data);
|
|
}
|
|
//判断是否有正在开启的红包
|
|
$startReward = $RewardModel->getStartingReward($this->merchant_id, $reward['type'], $reward['start_time'], $reward['end_time']);
|
|
if (!empty($startReward)) {
|
|
$data['status'] = 0;
|
|
$data['msg'] = '开启失败,请先关闭同时段同类型开启的红包!';
|
|
$this->ajaxReturn($data);
|
|
}
|
|
$res = M('reward')->where(array('id' => $id))->save(array('status' => 1));
|
|
if ($res) {
|
|
$data['status'] = 1;
|
|
$data['value'] = 1;
|
|
$data['msg'] = '开启成功';
|
|
} else {
|
|
$data['status'] = 0;
|
|
$data['value'] = 0;
|
|
$data['msg'] = '开启失败';
|
|
}
|
|
}
|
|
$this->ajaxReturn($data);
|
|
}
|
|
}
|
|
|
|
//红包领取详情
|
|
public function getRewardRecordList()
|
|
{
|
|
$start_time = I('post.start_time'); //开始时间
|
|
$end_time = I('post.end_time'); //结束时间
|
|
$store_id = I('post.store_id'); //门店id
|
|
if (!empty($store_id)) {
|
|
$map['storeid'] = $store_id;
|
|
}
|
|
$map['reward_id'] = I('post.id'); //红包id
|
|
$map['merchantid'] = $this->merchant_id;
|
|
$map['status'] = 1;
|
|
if (!empty($start_time) && !empty($end_time)) {
|
|
$start_time = strtotime($start_time);
|
|
$end_time = strtotime($end_time) + 86400;
|
|
$map['addtime'] = array('between', "$start_time,$end_time");
|
|
}
|
|
$count = M('reward_record')->where($map)->count();
|
|
$info = M('reward_record')->field('id,vid,money,addtime,storeid')->where($map)->page($_POST['page'], $_POST['limit'])->select();
|
|
foreach ($info as &$val) {
|
|
$val['nickname'] = M('retail_vip')->where(array('id' => $val['vid']))->getField('nickname');
|
|
$val['name'] = M('retail_vip')->where(array('id' => $val['vid']))->getField('name');
|
|
$val['mobile_phone'] = M('retail_vip')->where(array('id' => $val['vid']))->getField('mobile_phone');
|
|
$val['store_name'] = M('retail_store')->where(array('id' => $val['storeid']))->getField('storetag');
|
|
$val['addtime'] = date('Y-m-d', $val['addtime']);
|
|
}
|
|
$res['code'] = 0;
|
|
$res['count'] = $count;
|
|
$res['data'] = $info;
|
|
$this->ajaxReturn($res);
|
|
}
|
|
}
|