model('mc'); load()->model('activity'); activity_coupon_type_init(); $setting = pdo_fetch("SELECT * FROM ".tablename('mc_card')." WHERE uniacid = '{$_W['uniacid']}'"); if($do == 'ajax') { $op = trim($_GPC['op']); $sql = 'SELECT `uniacid` FROM ' . tablename('mc_card') . " WHERE `uniacid` = :uniacid"; $setting = pdo_fetch($sql, array(':uniacid' => $_W['uniacid'])); if($op == 'status') { if(empty($setting)) { $open = array( 'uniacid' => $_W['uniacid'], 'title' => '我的会员卡', 'format_type' => 1, 'fields' => iserializer(array( array('title' => '姓名', 'require' => 1, 'bind' => 'realname'), array('title' => '手机', 'require' => 1, 'bind' => 'mobile'), )), 'status' => 1, ); pdo_insert('mc_card', $open); } if (false === pdo_update('mc_card', array('status' => intval($_GPC['status'])), array('uniacid' => $_W['uniacid']))) { exit('error'); } } elseif($op == 'other') { if(empty($setting)) { exit('还没有开启会员卡,请先开启会员卡'); } $field = trim($_GPC['field']); if(!in_array($field, array('recommend_status', 'sign_status'))) { exit('非法操作'); } pdo_update('mc_card', array($field => intval($_GPC['status'])), array('uniacid' => $_W['uniacid'])); } exit('success'); } if($do == 'editor') { uni_user_permission_check('mc_card_editor'); if (!empty($_GPC['wapeditor'])) { $params = $_GPC['wapeditor']['params']; if (empty($params)) { message('请您先设计手机端页面.', '', 'error'); } $params = json_decode(ihtml_entity_decode($params), true); if (empty($params)) { message('请您先设计手机端页面.', '', 'error'); } if (!empty($params)) { foreach ($params as $key => &$value) { $params_new[$value['id']] = $value; if ($value['id'] == 'cardRecharge') { $recharges_key = $key; } if ($value['id'] == 'cardBasic') { $value['params']['description'] = str_replace(array("\r\n", "\n"), '
', $value['params']['description']); $value['originParams']['description'] = str_replace(array("\r\n", "\n"), '
', $value['originParams']['description']); } } } if (!empty($params[$recharges_key])) { foreach ($params[$recharges_key]['params']['recharges'] as &$row) { if ($row['backtype'] == '0') { $row['backunit'] = '元'; } else { $row['backunit'] = '积分'; } } } $html = htmlspecialchars_decode($_GPC['wapeditor']['html'], ENT_QUOTES); $html = str_replace(array("{\$_W['uniacid']}", "{\$_W['acid']}"), array($_W['uniacid'], $_W['acid']), $html); $basic = $params_new['cardBasic']['params']; $activity = $params_new['cardActivity']['params']; $nums = $params_new['cardNums']['params']; $times = $params_new['cardTimes']['params']; $recharges = $params_new['cardRecharge']['params']; $title = trim($basic['title']) ? trim($basic['title']) : message('名称不能为空'); $format_type = 1; $format = trim($basic['format']); if(!empty($basic['fields'])) { foreach($basic['fields'] as $field) { if(!empty($field['title']) && !empty($field['bind'])) { $fields[] = $field; } } } if($basic['background']['type'] == 'system') { $image = pathinfo($basic['background']['image']); $basic['background']['image'] = $image['filename']; } if (!empty($recharges['recharges'])) { foreach ($recharges['recharges'] as $row) { if ($recharges['recharge_type'] == 1 && ($row['condition'] <= 0 || $row['back'] <= 0)) { message('充值优惠设置数值不能为负数或零', referer(), 'error'); } } } if ($activity['grant_rate'] < 0) { message('付款返积分比率不能为负数', referer(), 'error'); } $update = array( 'title' => $title, 'format_type' => $basic['format_type'], 'format' => $format, 'color' => iserializer($basic['color']), 'background' => iserializer(array( 'background' => $basic['background']['type'], 'image' => $basic['background']['image'], )), 'logo' => $basic['logo'], 'description' => trim($basic['description']), 'grant_rate' => intval($activity['grant_rate']), 'offset_rate' => intval($basic['offset_rate']), 'offset_max' => intval($basic['offset_max']), 'fields' => iserializer($fields), 'grant' => iserializer( array( 'credit1' => intval($basic['grant']['credit1']), 'credit2' => intval($basic['grant']['credit2']), 'coupon' => $basic['grant']['coupon'], ) ), 'discount_type' => intval($activity['discount_type']), 'nums_status' => intval($nums['nums_status']), 'nums_text' => trim($nums['nums_text']), 'times_status' => intval($times['times_status']), 'times_text' => trim($times['times_text']), 'params' => json_encode($params), 'html' => $html ); $grant = iunserializer($update['grant']); if ($grant['credit1'] < 0 || $grant['credit2'] < 0) { message('领卡赠送积分或余额不能为负数', referer(), 'error'); } if ($update['offset_rate'] < 0 || $update['offset_max'] < 0) { message('抵现比率的数值不能为负数或零', referer(), 'error'); } if($update['discount_type'] != 0 && !empty($activity['discounts'])) { $update['discount'] = array(); foreach($activity['discounts'] as $discount) { if ($update['discount_type'] == 1) { if (!empty($discount['condition_1']) || !empty($discount['discount_1'])) { if ($discount['condition_1'] < 0 || $discount['discount_1'] < 0) { message('消费优惠设置数值不能为负数', referer(), 'error'); } } } else { if (!empty($discount['condition_2']) || !empty($discount['discount_2'])) { if ($discount['condition_2'] < 0 || $discount['discount_2'] < 0) { message('消费优惠设置数值不能为负数', referer(), 'error'); } } } $groupid = intval($discount['groupid']); if($groupid <= 0) continue; $update['discount'][$groupid] = array( 'condition_1' => trim($discount['condition_1']), 'discount_1' => trim($discount['discount_1']), 'condition_2' => trim($discount['condition_2']), 'discount_2' => trim($discount['discount_2']), ); } $update['discount'] = iserializer($update['discount']); } if($update['nums_status'] != 0 && !empty($nums['nums'])) { $update['nums'] = array(); foreach($nums['nums'] as $row) { if ($row['num'] <= 0 || $row['recharge'] <= 0) { message('充值返次数设置不能为负数或零', referer(), 'error'); } $num = floatval($row['num']); $recharge = trim($row['recharge']); if($num <= 0 || $recharge <= 0) continue; $update['nums'][$recharge] = array( 'recharge' => $recharge, 'num' => $num ); } $update['nums'] = iserializer($update['nums']); } if($update['times_status'] != 0 && !empty($times['times'])) { $update['times'] = array(); foreach($times['times'] as $row) { if ($row['time'] <= 0 || $row['recharge'] <= 0) { message('充值返时长设置不能为负数或零', referer(), 'error'); } $time = intval($row['time']); $recharge = trim($row['recharge']); if($time <= 0 || $recharge <= 0) continue; $update['times'][$recharge] = array( 'recharge' => $recharge, 'time' => $time ); } $update['times'] = iserializer($update['times']); } if (!empty($setting)) { pdo_update('mc_card', $update, array('uniacid' => $_W['uniacid'])); } else { $update['status'] = '1'; $update['uniacid'] = $_W['uniacid']; pdo_insert('mc_card', $update); } message('会员卡设置成功!', url('mc/card/editor'), 'success'); } $unisetting = uni_setting_load('creditnames'); $fields_temp = mc_acccount_fields(); $fields = array(); foreach($fields_temp as $key => $val) { $fields[$key] = array( 'title' => $val, 'bind' => $key ); } $params = json_decode($setting['params'], true); if (!empty($params)) { foreach ($params as $key => &$value) { if ($value['id'] == 'cardBasic') { $value['params']['description'] = str_replace("
", "\n", $value['params']['description']); } $card_params[$key] = $value; $params_new[$value['id']] = $value; } } $setting['params'] = json_encode($card_params); $discounts_params = $params_new['cardActivity']['params']['discounts']; $discounts_temp = array(); if(!empty($discounts_params)) { foreach($discounts_params as $row) { $discounts_temp[$row['groupid']] = $row; } } $discounts = array(); foreach($_W['account']['groups'] as $group) { $discounts[$group['groupid']] = array( 'groupid' => $group['groupid'], 'title' => $group['title'], 'credit' => $group['credit'], 'condition_1' => $discounts_temp[$group['groupid']]['condition_1'], 'discount_1' => $discounts_temp[$group['groupid']]['discount_1'], 'condition_2' => $discounts_temp[$group['groupid']]['condition_2'], 'discount_2' => $discounts_temp[$group['groupid']]['discount_2'], ); } $setting['params'] = preg_replace('/\n/', '', $setting['params']); template('mc/card-editor'); exit(); } if ($do == 'manage') { uni_user_permission_check('mc_card_manage'); $cardid = intval($_GPC['cardid']); if ($_W['ispost']) { $status = array('status' => intval($_GPC['status'])); if (false === pdo_update('mc_card_members', $status, array('uniacid' => $_W['uniacid'], 'id' => $cardid))) { exit('error'); } exit('success'); } if ($setting['status'] == 0) { message('会员卡功能未开启', url('mc/card/editor'), 'error'); } $pindex = max(1, intval($_GPC['page'])); $psize = 10; $param = array(':uniacid' => $_W['uniacid']); $cardsn = trim($_GPC['cardsn']); if(!empty($cardsn)) { $where .= ' AND a.cardsn LIKE :cardsn'; $param[':cardsn'] = "%{$cardsn}%"; } $status = isset($_GPC['status']) ? intval($_GPC['status']) : -1; if ($status >= 0) { $where .= " AND a.status = :status"; $param[':status'] = $status; } $num = isset($_GPC['num']) ? intval($_GPC['num']) : -1; if($num >= 0) { if(!$num) { $where .= " AND a.nums = 0"; } else { $where .= " AND a.nums > 0"; } } $endtime = isset($_GPC['endtime']) ? intval($_GPC['endtime']) : -1; if($endtime >= 0) { $where .= " AND a.endtime <= :endtime"; $param[':endtime'] = strtotime($endtime . 'days'); } $keyword = trim($_GPC['keyword']); if(!empty($keyword)) { $where .= " AND (b.mobile LIKE '%{$keyword}%' OR b.realname LIKE '%{$keyword}%')"; } $sql = 'SELECT a.*, b.realname, b.groupid, b.credit1, b.credit2, b.mobile FROM ' . tablename('mc_card_members') . " AS a LEFT JOIN " . tablename('mc_members') . " AS b ON a.uid = b.uid WHERE a.uniacid = :uniacid $where ORDER BY a.id DESC LIMIT ".($pindex - 1) * $psize.','.$psize; $list = pdo_fetchall($sql, $param); $total = pdo_fetchcolumn('SELECT COUNT(*) FROM ' . tablename('mc_card_members') . " AS a LEFT JOIN " . tablename('mc_members') . " AS b ON a.uid = b.uid WHERE a.uniacid = :uniacid $where", $param); $pager = pagination($total, $pindex, $psize); template('mc/card'); } if ($do == 'delete') { $cardid = intval($_GPC['cardid']); if (pdo_delete('mc_card_members',array('id' =>$cardid))) { message('删除会员卡成功',url('mc/card/manage'),'success'); } else { message('删除会员卡失败',url('mc/card/manage'),'error'); } } if($do == 'coupon') { $title = trim($_GPC['keyword']); $condition = ' WHERE uniacid = :uniacid AND (amount-dosage>0) AND starttime <= :time AND endtime >= :time'; $param = array( ':uniacid' => $_W['uniacid'], ':time' => TIMESTAMP, ); $data = pdo_fetchall('SELECT * FROM ' . tablename('activity_coupon') . $condition, $param); if(empty($data)) { exit('empty'); } template('mc/coupon-model'); exit(); } if($do == 'modal') { $uid = intval($_GPC['uid']); $setting = pdo_get('mc_card', array('uniacid' => $_W['uniacid'])); $card = pdo_get('mc_card_members', array('uniacid' => $_W['uniacid'], 'uid' => $uid)); if(empty($card)) { exit('error'); } template('mc/card-model'); exit(); } if($do == 'submit') { load()->model('mc'); $uid = intval($_GPC['uid']); $setting = pdo_get('mc_card', array('uniacid' => $_W['uniacid'])); $card = pdo_get('mc_card_members', array('uniacid' => $_W['uniacid'], 'uid' => $uid)); if(empty($card)) { message('用户会员卡信息不存在', referer(), 'error'); } $type = trim($_GPC['type']); if($type == 'nums_plus') { $fee = floatval($_GPC['fee']); $tag = intval($_GPC['nums']); if(!$fee && !$tag) { message('请完善充值金额和充值次数', referer(), 'error'); } $total_num = $card['nums'] + $tag; pdo_update('mc_card_members', array('nums' => $total_num), array('uniacid' => $_W['uniacid'], 'uid' => $uid)); $log = array( 'uniacid' => $_W['uniacid'], 'uid' => $uid, 'type' => 'nums', 'model' => 1, 'fee' => $fee, 'tag' => $tag, 'addtime' => TIMESTAMP, 'note' => date('Y-m-d H:i') . "充值{$fee}元,管理员手动添加{$tag}次,添加后总次数为{$total_num}次", 'remark' => trim($_GPC['remark']), ); pdo_insert('mc_card_record', $log); mc_notice_nums_plus($card['openid'], $setting['nums_text'], $tag, $total_num); } if($type == 'nums_times') { $tag = intval($_GPC['nums']); if(!$tag) { message('请填写消费次数', referer(), 'error'); } if($card['nums'] < $tag) { message('当前用户的消费次数不够', referer(), 'error'); } $total_num = $card['nums'] - $tag; pdo_update('mc_card_members', array('nums' => $total_num), array('uniacid' => $_W['uniacid'], 'uid' => $uid)); $log = array( 'uniacid' => $_W['uniacid'], 'uid' => $uid, 'type' => 'nums', 'model' => 2, 'fee' => 0, 'tag' => $tag, 'addtime' => TIMESTAMP, 'note' => date('Y-m-d H:i') . "消费1次,管理员手动减1次,消费后总次数为{$total_num}次", 'remark' => trim($_GPC['remark']), ); pdo_insert('mc_card_record', $log); mc_notice_nums_times($card['openid'], $card['cardsn'], $setting['nums_text'], $total_num); } if($type == 'times_plus') { $fee = floatval($_GPC['fee']); $endtime = strtotime($_GPC['endtime']); $days = intval($_GPC['days']); if($endtime <= $card['endtime'] && !$days) { message('服务到期时间不能小于会员当前的服务到期时间或未填写延长服务天数', '', 'error'); } $tag = floor(($endtime - $card['endtime']) / 86400); if($days > 0) { $tag = $days; if($card['endtime'] > TIMESTAMP) { $endtime = $card['endtime'] + $days * 86400; } else { $endtime = strtotime($days . 'days'); } } pdo_update('mc_card_members', array('endtime' => $endtime), array('uniacid' => $_W['uniacid'], 'uid' => $uid)); $endtime = date('Y-m-d', $endtime); $log = array( 'uniacid' => $_W['uniacid'], 'uid' => $uid, 'type' => 'times', 'model' => 1, 'fee' => $fee, 'tag' => $tag, 'addtime' => TIMESTAMP, 'note' => date('Y-m-d H:i') . "充值{$fee}元,管理员手动设置{$setting['times_text']}到期时间为{$endtime},设置之前的{$setting['times_text']}到期时间为".date('Y-m-d', $card['endtime']), 'remark' => trim($_GPC['remark']), ); pdo_insert('mc_card_record', $log); mc_notice_times_plus($card['openid'], $card['cardsn'], $setting['times_text'], $fee, $tag, $endtime); } if($type == 'times_times') { $endtime = strtotime($_GPC['endtime']); if($endtime > $card['endtime']) { message("该会员的{$setting['times_text']}到期时间为:" . date('Y-m-d', $card['endtime']) . ",您当前在进行消费操作,设置到期时间不能超过" . date('Y-m-d', $card['endtime']) , '', 'error'); } $flag = intval($_GPC['flag']); if($flag) { $endtime = TIMESTAMP; } $tag = floor(($card['endtime'] - $endtime) / 86400); pdo_update('mc_card_members', array('endtime' => $endtime), array('uniacid' => $_W['uniacid'], 'uid' => $uid)); $endtime = date('Y-m-d', $endtime); $log = array( 'uniacid' => $_W['uniacid'], 'uid' => $uid, 'type' => 'times', 'model' => 2, 'fee' => 0, 'tag' => $tag, 'addtime' => TIMESTAMP, 'note' => date('Y-m-d H:i') . "管理员手动设置{$setting['times_text']}到期时间为{$endtime},设置之前的{$setting['times_text']}到期时间为".date('Y-m-d', $card['endtime']), 'remark' => trim($_GPC['remark']), ); pdo_insert('mc_card_record', $log); mc_notice_times_times($card['openid'], "您好,您的{$setting['times_text']}到期时间已变更", $setting['times_text'], $endtime); } message('操作成功', referer(), 'success'); } if($do == 'record') { $uid = intval($_GPC['uid']); $card = pdo_get('mc_card_members', array('uniacid' => $_W['uniacid'], 'uid' => $uid)); $where = ' WHERE uniacid = :uniacid AND uid = :uid'; $param = array(':uniacid' => $_W['uniacid'], ':uid' => $uid); $type = trim($_GPC['type']); if(!empty($type)) { $where .= ' AND type = :type'; $param[':type'] = $type; } if(empty($_GPC['endtime']['start'])) { $starttime = strtotime('-30 days'); $endtime = TIMESTAMP; } else { $starttime = strtotime($_GPC['endtime']['start']); $endtime = strtotime($_GPC['endtime']['end']) + 86399; } $where .= ' AND addtime >= :starttime AND addtime <= :endtime'; $param[':starttime'] = $starttime; $param[':endtime'] = $endtime; $pindex = max(1, intval($_GPC['page'])); $psize = 30; $limit = " ORDER BY id DESC LIMIT " . ($pindex -1) * $psize . ", {$psize}"; $total = pdo_fetchcolumn('SELECT COUNT(*) FROM ' . tablename('mc_card_record') . " {$where}", $param); $list = pdo_fetchall('SELECT * FROM ' . tablename('mc_card_record') . " {$where} {$limit}", $param); $pager = pagination($total, $pindex, $psize); template('mc/card'); } if($do == 'notice') { uni_user_permission_check('mc_card_other'); $op = trim($_GPC['op']) ? trim($_GPC['op']) : 'list'; if($op == 'list') { $pindex = max(1, intval($_GPC['page'])); $psize = 30; $limit = " ORDER BY id DESC LIMIT " . ($pindex -1) * $psize . ", {$psize}"; $addtime = intval($_GPC['addtime']); $where = ' WHERE uniacid = :uniacid AND type = 1'; $param = array(':uniacid' => $_W['uniacid']); $total = pdo_fetchcolumn('SELECT COUNT(*) FROM ' . tablename('mc_card_notices') . " {$where}", $param); $notices = pdo_fetchall('SELECT * FROM ' . tablename('mc_card_notices') . " {$where} {$limit}", $param); $pager = pagination($total, $pindex, $psize); } if($op == 'post') { $id = intval($_GPC['id']); if($id > 0) { $notice = pdo_get('mc_card_notices', array('uniacid' => $_W['uniacid'], 'id' => $id)); if(empty($notice)) { message('通知不存在或已被删除', referer(), 'error'); } } if(checksubmit()) { $title = trim($_GPC['title']) ? trim($_GPC['title']) : message('通知标题不能为空'); $content = trim($_GPC['content']) ? trim($_GPC['content']) : message('通知内容不能为空'); $data = array( 'uniacid' => $_W['uniacid'], 'type' => 1, 'uid' => 0, 'title' => $title, 'thumb' => trim($_GPC['thumb']), 'groupid' => intval($_GPC['groupid']), 'content' => htmlspecialchars_decode($_GPC['content']), 'addtime' => TIMESTAMP ); if($id > 0) { pdo_update('mc_card_notices', $data, array('uniacid' => $_W['uniacid'], 'id' => $id)); } else { pdo_insert('mc_card_notices', $data); } message('发布通知成功', url('mc/card/notice') , 'success'); } } if($op == 'del') { $id = intval($_GPC['id']); pdo_delete('mc_card_notices', array('uniacid' => $_W['uniacid'], 'id' => $id)); message('删除成功', referer(), 'success'); } template('mc/card-notice'); } if ($do == 'sign') { uni_user_permission_check('mc_card_other'); $op = trim($_GPC['op']) ? trim($_GPC['op']) : 'sign-credit'; if ($op == 'sign-credit') { $set = pdo_get('mc_card_credit_set', array('uniacid' => $_W['uniacid'])); if(empty($set)) { $set = array(); } else { $set['sign'] = iunserializer($set['sign']); } if(checksubmit()) { $data = array( 'uniacid' => $_W['uniacid'], 'sign' => array( 'everydaynum' => intval($_GPC['sign']['everydaynum']), 'first_group_day' => intval($_GPC['sign']['first_group_day']), 'first_group_num' => intval($_GPC['sign']['first_group_num']), 'second_group_day' => intval($_GPC['sign']['second_group_day']), 'second_group_num' => intval($_GPC['sign']['second_group_num']), 'third_group_day' => intval($_GPC['sign']['third_group_day']), 'third_group_num' => intval($_GPC['sign']['third_group_num']), 'full_sign_num' => intval($_GPC['sign']['full_sign_num']), ), 'content' => htmlspecialchars_decode($_GPC['content']), ); $data['sign'] = iserializer($data['sign']); if(empty($set['uniacid'])) { pdo_insert('mc_card_credit_set', $data); } else { pdo_update('mc_card_credit_set', $data, array('uniacid' => $_W['uniacid'])); } message('积分策略更新成功', referer(), 'success'); } } if ($op == 'record-list') { $pindex = max(1, intval($_GPC['page'])); $psize = 10; $list = pdo_fetchall("SELECT * FROM ". tablename('mc_card_sign_record'). " WHERE uniacid = :uniacid ORDER BY id DESC LIMIT " . ($pindex - 1)*$psize. ','. $psize, array(':uniacid' => $_W['uniacid'])); foreach ($list as $key => &$value){ $value['addtime'] = date('Y-m-d H:i:s', $value['addtime']); $value['realname'] = pdo_fetchcolumn("SELECT realname FROM ". tablename('mc_members'). ' WHERE uniacid = :uniacid AND uid = :uid', array(':uniacid' => $_W['uniacid'], ':uid' => $value['uid'])); } $total = pdo_fetchcolumn("SELECT COUNT(*) FROM ". tablename('mc_card_sign_record'). " WHERE uniacid = :uniacid", array(':uniacid' => $_W['uniacid'])); $pager = pagination($total, $pindex, $psize); } template('mc/card-sign'); } if($do == 'other') { uni_user_permission_check('mc_card_other'); template('mc/card-other'); }