model('mc');
load()->model('card');
load()->model('module');
permission_check_account_user('mc_member');
$creditnames = uni_setting_load('creditnames');
$creditnames = $creditnames['creditnames'];
$_W['page']['title'] = '会员交易-会员管理';
$dos = array('consume', 'user', 'modal', 'credit', 'card', 'cardsn', 'tpl', 'cardconsume');
$do = in_array($do, $dos) ? $do : 'tpl';
if($do == 'user') {
$type = trim($_GPC['type']);
if(!in_array($type, array('uid', 'mobile'))) {
$type = 'mobile';
}
$username = trim($_GPC['username']);
$data = pdo_getall('mc_members', array('uniacid' => $_W['uniacid'], $type => $username));
if(empty($data)) {
exit(json_encode(array('error' => 'empty', 'message' => '没有找到对应用户')));
} elseif(count($data) > 1) {
exit(json_encode(array('error' => 'not-unique', 'message' => '用户不唯一,请重新输入用户信息')));
} else {
$card = array();
$user = $data[0];
$user['groupname'] = $_W['account']['groups'][$user['groupid']]['title'];
$we7_coupon_info = module_fetch('we7_coupon');
if (!empty($we7_coupon_info)) {
$card = card_setting();
$member = pdo_get('mc_card_members', array('uniacid' => $_W['uniacid'], 'uid' => $user['uid']));
if(!empty($card) && $card['status'] == 1) {
if(!empty($member)) {
$str = "会员卡号:{$member['cardsn']}.";
$user['discount'] = $card['discount'][$user['groupid']];
$user['cardsn'] = $member['cardsn'];
if(!empty($user['discount']) && !empty($user['discount']['discount'])) {
$str .= "折扣:满{$user['discount']['condition']}元";
if($card['discount_type'] == 1) {
$str .= "减{$user['discount']['discount']}元";
} else {
$discount = $user['discount']['discount'] * 10;
$str .= "打{$discount}折";
}
$user['discount_cn'] = $str;
}
} else {
$user['discount_cn'] = '会员未领取会员卡,不能享受优惠';
}
} else {
$user['discount_cn'] = '商家未开启会员卡功能';
}
}
$html = "姓名:{$user['realname']},会员组:{$user['groupname']}
";
if(!empty($we7_coupon_info)) {
$html .= "{$user['discount_cn']}
";
}
$html .= "余额:{$user['credit2']}元,积分:{$user['credit1']}
";
if(!empty($we7_coupon_info) && !empty($card) && $card['offset_rate'] > 0 && $card['offset_max'] > 0) {
$html .= "{$card['offset_rate']}积分可抵消1元。最多可抵消{$card['offset_max']}元";
}
exit(json_encode(array('error' => 'none', 'user' => $user, 'html' => $html, 'card' => $card, 'group' => $_W['account']['groups'], 'grouplevel' => $_W['account']['grouplevel'])));
}
}
if($do == 'cardsn') {
$uid = intval($_GPC['uid']);
$cardsn = trim($_GPC['cardsn']);
$type = trim($_GPC['type']);
if($_W['isajax'] && $type == 'check') {
$data = pdo_get('mc_card_members', array('cardsn' => $cardsn, 'uniacid' => $_W['uniacid']));
if(!empty($data) ) {
exit(json_encode(array('valid' => false)));
} else {
exit(json_encode(array('valid' => true)));
}
} else {
pdo_update('mc_card_members', array('cardsn' => $cardsn), array('uid' => $uid, 'uniacid' => $_W['uniacid']));
exit('success');
}
}
if($_W['isajax'] && !in_array($do, array('user', 'clerk', 'cardsn', 'cardconsume'))) {
$uid = intval($_GPC['uid']);
$user = pdo_get('mc_members', array('uniacid' => $_W['uniacid'], 'uid' => $uid));
if(empty($user)) {
exit('会员不存在');
}
}
if($do == 'consume') {
$total = $money = floatval($_GPC['total']);
if(!$total) {
exit('消费金额不能为空');
}
$log = "系统日志:会员消费【{$total}】元";
load()->model('card');
$user['groupname'] = $_W['account']['groups'][$user['groupid']]['title'];
$card = array();
$card = card_setting();
$member = pdo_get('mc_card_members', array('uniacid' => $_W['uniacid'], 'uid' => $user['uid']));
if(!empty($card) && $card['status'] == 1 && !empty($member)) {
$user['discount'] = $card['discount'][$user['groupid']];
if(!empty($user['discount']) && !empty($user['discount']['discount'])) {
if($total >= $user['discount']['condition']) {
$log .= ",所在会员组【{$user['groupname']}】,可享受满【{$user['discount']['condition']}】元";
if($card['discount_type'] == 1) {
$log .= "减【{$user['discount']['discount']}】元";
$money = $total - $user['discount']['discount'];
} else {
$discount = $user['discount']['discount'] * 10;
$log .= "打【{$discount}】折";
$money = $total * $user['discount']['discount'];
$money = sprintf("%.1f", $money);
}
if($money < 0) {
$money = 0;
}
$log .= ",实收金额【{$money}】元";
}
}
}
$post_money = floatval($_GPC['money']);
if($post_money != $money) {
exit('实收金额错误');
}
$post_credit1 = intval($_GPC['credit1']);
if($post_credit1 > 0) {
if($post_credit1 > $user['credit1']) {
exit('超过会员账户可用积分');
}
}
$post_offset_money = intval($_GPC['offset_money']);
$offset_money = 0;
if($post_credit1 && $card['offset_rate'] > 0 && $card['offset_max'] > 0) {
$offset_money = min($card['offset_max'], $post_credit1/$card['offset_rate']);
if($offset_money != $post_offset_money) {
exit('积分抵消金额错误');
}
$credit1 = $post_credit1;
$log .= ",使用【{$post_credit1}】积分抵消【{$offset_money}】元";
}
$credit2 = floatval($_GPC['credit2']);
if($credit2 > 0) {
if($credit2 > $user['credit2']) {
exit('超过会员账户可用余额');
}
$log .= ",使用余额支付【{$credit2}】元";
}
$cash = floatval($_GPC['cash']);
$sum = $credit2 + $cash + $offset_money;
$final_cash = $money - $credit2 - $offset_money;
$return_cash = $sum - $money;
if($sum < $money) {
exit('支付金额小于实收金额');
}
if($cash > 0) {
$log .= ",使用现金支付【{$cash}】元";
}
if($return_cash > 0) {
$log .= ",找零【{$return_cash}】元";
}
if(!empty($_GPC['remark'])) {
$note = "店员备注:{$_GPC['remark']}";
}
$log = $note.$log;
if($credit2 > 0) {
$status = mc_credit_update($uid, 'credit2', -$credit2, array(0, $log, 'system', $_W['user']['clerk_id'], $_W['user']['store_id'], $_W['user']['clerk_type']));
if(is_error($status)) {
exit($status['message']);
}
}
if($credit1 > 0) {
$status = mc_credit_update($uid, 'credit1', -$credit1, array(0, $log, 'system', $_W['user']['clerk_id'], $_W['user']['store_id'], $_W['user']['clerk_type']));
if(is_error($status)) {
exit($status['message']);
}
}
$data = array(
'uniacid' => $_W['uniacid'],
'uid' => $uid,
'fee' => $total,
'final_fee' => $money,
'credit1' => $post_credit1,
'credit1_fee' => $offset_money,
'credit2' => $credit2,
'cash' => $cash,
'final_cash' => $final_cash,
'return_cash' => $return_cash,
'remark' => $log,
'clerk_id' => $_W['user']['clerk_id'],
'store_id' => $_W['user']['store_id'],
'clerk_type' => $_W['user']['clerk_type'],
'createtime' => TIMESTAMP,
);
pdo_insert('mc_cash_record', $data);
$tips = "用户消费{$money}元,使用{$data['credit1']}积分,抵现{$data['credit1_fee']}元,使用余额支付{$data['credit2']}元,现金支付{$data['final_cash']}元";
$recharges_set = card_params_setting('cardRecharge');
$grant_rate_switch = intval($recharges_set['params']['grant_rate_switch']);
$grant_credit1_enable = false;
$grant_money = $money;
if (!empty($card) && $card['grant_rate'] > 0 && !empty($member)) {
if (empty($recharges_set['params']['recharge_type'])) {
$grant_credit1_enable = true;
} else {
if ($grant_rate_switch == '1') {
$grant_money = $data['cash'] + $data['credit2'];
$grant_credit1_enable = true;
} else {
if (!empty($data['cash'])) {
$grant_money = $data['cash'];
$grant_credit1_enable = true;
}
}
}
}
if(!empty($grant_credit1_enable)) {
$num = floor($grant_money * $card['grant_rate']);
$tips .= ",积分赠送比率为:【1:{$card['grant_rate']}】,共赠送【{$num}】积分";
mc_credit_update($uid, 'credit1', $num, array(0, $tips, 'system', $_W['user']['clerk_id'], $_W['user']['store_id'], $_W['user']['clerk_type']));
}
$openid = pdo_fetchcolumn('SELECT openid FROM ' . tablename('mc_mapping_fans') . ' WHERE acid = :acid AND uid = :uid', array(':acid' => $_W['acid'], ':uid' => $uid));
$consume_tips = array(
'uid' => $uid,
'credit2_num' => $money,
'credit1_num' => $num,
'store' => '系统后台',
'remark' => $tips,
);
if(!empty($openid)) {
mc_notice_consume($openid, '会员消费通知', $consume_tips);
}
exit('success');
}
if($do == 'credit') {
$type = trim($_GPC['type']);
$num = floatval($_GPC['num']);
$names = array('credit1' => $creditnames['credit1']['title'], 'credit2' => $creditnames['credit2']['title']);
$credits = mc_credit_fetch($uid);
if($num < 0 && abs($num) > $credits[$type]) {
exit("会员账户{$names[$type]}不够");
}
$status = mc_credit_update($uid, $type, $num, array($_W['user']['uid'], trim($_GPC['remark']), 'system', $_W['user']['clerk_id'], $_W['user']['store_id'], $_W['user']['clerk_type']));
if(is_error($status)) {
exit($status['message']);
}
if($type == 'credit1') {
mc_group_update($uid);
}
$openid = pdo_fetchcolumn('SELECT openid FROM ' . tablename('mc_mapping_fans') . ' WHERE acid = :acid AND uid = :uid', array(':acid' => $_W['acid'], ':uid' => $uid));
if(!empty($openid)) {
if($type == 'credit1') {
mc_notice_credit1($openid, $uid, $num, '管理员后台操作' . $creditnames['credit1']['title']);
}
if($type == 'credit2') {
if($num > 0) {
mc_notice_recharge($openid, $uid, $num, '', "管理员后台操作{$creditnames['credit1']['title']},增加{$value}{$creditnames['credit2']['title']}");
} else {
mc_notice_credit2($openid, $uid, $num, 0, '', '', "管理员后台操作{$creditnames['credit1']['title']},减少{$value}{$creditnames['credit2']['title']}");
}
}
}
exit('success');
}
if($do == 'card') {
load()->model('card');
$card = card_setting();
if(empty($card)) {
exit('公众号未设置会员卡');
}
$member = pdo_get('mc_card_members', array('uniacid' => $_W['uniacid'], 'uid' => $user['uid']));
if(!empty($member)) {
exit('该会员已领取会员卡');
}
$cardsn = $card['format'];
preg_match_all('/(\*+)/', $card['format'], $matchs);
if (!empty($matchs)) {
foreach ($matchs[1] as $row) {
$cardsn = str_replace($row, random(strlen($row), 1), $cardsn);
}
}
preg_match('/(\#+)/', $card['format'], $matchs);
$length = strlen($matchs[1]);
$pos = strpos($card['format'], '#');
$cardsn = str_replace($matchs[1], str_pad($card['snpos']++, $length - strlen($number), '0', STR_PAD_LEFT), $cardsn);
$record = array(
'uniacid' => $_W['uniacid'],
'openid' => '',
'uid' => $uid,
'cid' => $card['id'],
'cardsn' => $_GPC['username'],
'status' => '1',
'createtime' => TIMESTAMP,
'endtime' => TIMESTAMP
);
if(pdo_insert('mc_card_members', $record)) {
pdo_update('mc_card', array('snpos' => $card['snpos']), array('uniacid' => $_W['uniacid'], 'id' => $card['id']));
$notice = '';
if($card['grant']['credit1'] > 0) {
$log = array(
$uid,
"领取会员卡,赠送{$card['grant']['credit1']}积分",
'system',
$_W['user']['clerk_id'],
$_W['user']['store_id'],
$_W['user']['clerk_type']
);
mc_credit_update($uid, 'credit1', $card['grant']['credit1'], $log);
}
if($card['grant']['credit2'] > 0) {
$log = array(
$uid,
"领取会员卡,赠送{$card['credit2']['credit1']}余额",
'system',
$_W['user']['clerk_id'],
$_W['user']['store_id'],
$_W['user']['clerk_type']
);
mc_credit_update($uid, 'credit2', $card['grant']['credit2'], $log);
}
if (!empty($card['grant']['coupon']) && is_array($card['grant']['coupon'])) {
foreach ($card['grant']['coupon'] as $grant_coupon) {
load()->model('activity');
activity_coupon_grant($grant_coupon['coupon'], $uid);
}
}
exit('success');
}
}
if ($do == 'cardconsume') {
load() -> model('activity');
$code = trim($_GPC['code']);
$coupon_record = pdo_get('coupon_record', array('code' => $code, 'status' => '1'));
if (!empty($coupon_record)) {
$status = activity_coupon_use($coupon_record['couponid'], $coupon_record['id'], 'paycenter');
if (is_error($status)) {
exit($status['message']);
}else {
exit('success');
}
} else {
exit('卡券已核销或失效');
}
}
if($do == 'group') {
$credit6 = floatval($_GPC['credit6']);
$credit = $credit1 + $credit6;
if($credit < 0) {
exit('积分和贡献相加不能小于0');
}
if($credit6 != $user['credit6']) {
mc_credit_update($uid, 'credit6', (-$user['credit6'] + $credit6), array(0, "通过修改贡献值,来变更会员用户组", 'group', $_W['user']['clerk_id'], $_W['user']['store_id'], $_W['user']['clerk_type']));
}
$groupid = $user['groupid'];
$_W['member'] = $user;
$_W['openid'] = pdo_fetchcolumn('SELECT openid FROM ' . tablename('mc_mapping_fans') . ' WHERE acid = :acid AND uid = :uid', array(':acid' => $_W['acid'], ':uid' => $user['uid']));
mc_group_update();
exit('success');
}
template('mc/trade');