文件
mashangyoujiu/Application/Retail/Controller/RewardController.class.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);
}
}