文件
mashangyoujiu/Application/CashierApi/Controller/VipController.class.php

995 行
42 KiB
PHP
可执行文件

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

<?php
namespace CashierApi\Controller;
use Common\Business\VipEdit;
use Common\Model\RetailCashierModel;
use Common\Model\RetailPlusVipModel;
use Common\Model\RetailRechargeOrderModel;
use Common\Model\RetailStoreAuthModel;
use Common\Model\RetailStoreModel;
use Common\Model\RetailVipChangeModel;
use Common\Model\RetailVipIntegralModel;
use Common\Model\RetailVipModel;
use Common\Model\VipAndPlusViewModel;
use LittleGift\Business\Vip;
use Think\Controller;
//[1.9.0]
class VipController extends BaseController
{
/**
* 统计会员数量
* @return array $res
*/
public function getStatistics()
{
// 实例化模型
$StoreAuthModel = D('RetailStoreAuth');
$VipModel = D('RetailVip');
// 时间
$yesterday_start = mktime(0, 0, 0, date('m'), date('d') - 1, date('Y')); // 昨天开始
$yesterday_end = mktime(23, 59, 59, date('m'), date('d') - 1, date('Y')); // 昨天结束
// 门店查看会员权限 1.可以查看其他门店会员 2.不可以查看其他门店会员
$show_vip = $StoreAuthModel->getFindField(array($StoreAuthModel::STORE_ID => self::$store_id), $StoreAuthModel::SHOW_VIP);
if ($show_vip && $show_vip == 2) {
$map[$StoreAuthModel::STORE_ID] = self::$store_id;
}
$map[$VipModel::MERCHANT_ID] = self::$merchant_id;
$map[$VipModel::STATUS] = array('neq', 2);
// 统计会员总数
$vip_count = $VipModel->getCount($map);
// 统计总余额
$vip_balance = $VipModel->getSum($map, $VipModel::BALANCE);
// 统计总积分
$vip_integral = $VipModel->getSum($map, $VipModel::INTEGRAL);
// 统计昨天会员增加数量
$map2 = $map;
$map2[$VipModel::ADD_TIME] = array('between', array($yesterday_start, $yesterday_end));
$vip_yesterday_count = $VipModel->getCount($map2);
$res = array(
'status' => 1,
'vip_count' => $vip_count,
'vip_balance' => $vip_balance,
'vip_integral' => $vip_integral,
'vip_yesterday_count' => $vip_yesterday_count
);
$this->ajaxReturn($res);
}
/**
* 展示会员列表
* @param int|string $vip_type 会员类型 1.所有类型 2.普通会员 3.付费会员
* @param int|string $keyword 搜索条件(手机号、实体卡)
* @param int|string $page 分页
* @param int|string $limit 分页数量
* @return array $res
*/
public function getVipList()
{
// 实例化模型
$StoreAuthModel = D('RetailStoreAuth');
$vipAndPlusViewModel = new VipAndPlusViewModel();
// 门店查看会员权限 1.可以查看其他门店会员 2.不可以查看其他门店会员
$show_vip = $StoreAuthModel->getFindField(array($StoreAuthModel::STORE_ID => self::$store_id), $StoreAuthModel::SHOW_VIP);
// 接受参数
$page = (int)I('post.page');
$limit = (int)I('post.limit');
$vip_type = I('post.vip_type') ? I('post.vip_type') : 1;
$keyword = I('post.keyword');
if (!$page || !$limit) {
$res = array('status' => 0, 'msg' => '缺失必要的分页参数');
$this->ajaxReturn($res);
}
// 会员类型 1.普通会员 2.plus会员 (默认1)
if ($vip_type == 1) {
$map['plus_type'] = 3;
// 普通会员判断权限
if ($show_vip && $show_vip == 2) {
$map['store_id'] = self::$store_id;
}
} else if ($vip_type == 2) {
$map['plus_type'] = 2;
// plus会员判断权限
if ($show_vip && $show_vip == 2) {
$map['storeid'] = self::$store_id;
}
} else {
$res = array('status' => 0, 'msg' => '未知的会员类型条件');
$this->ajaxReturn($res);
}
// 手机号、实体卡搜索
if (trim($keyword)) {
$map['mobile_phone|card_key'] = array('like', '%' . trim($keyword) . '%');
}
$map['merchantid'] = self::$merchant_id;
$map['status'] = ['neq', 2];
$field = 'id,plus_type,merchantid,mobile_phone,card_key,name,nickname,balance,integral,addtime,add_time,grade_integral,store_id,status,storeid,end_time,headimgurl';
// 获取会员列表
$vip_list = $vipAndPlusViewModel->getOrderSelect($map, $field, 'id desc', $page, $limit);
if (!$vip_list) {
// 暂无数据
$res = array(
'status' => 0,
'msg' => trim($keyword) ? '会员查询失败' : '暂无数据'
);
$this->ajaxReturn($res);
}
// 统计数量
$count = $vipAndPlusViewModel->getCount($map);
// 处理数据
$vip_list = $vipAndPlusViewModel->handleData($vip_list);
$res = array('status' => 1, 'vip_list' => $vip_list, 'count' => $count);
$this->ajaxReturn($res);
}
/**
* 获取导购
* @return array $res
*/
public function getGuideList()
{
// 实例化模型
$GuideModel = D('RetailGuide');
$StoreModel = D('RetailStore');
$store = self::$store;
if ($store[$StoreModel::GUIDE_OPEN_STATE] == 2) {
$res = array('status' => 0, 'msg' => '暂无导购');
$this->ajaxReturn($res);
}
$map = array(
$GuideModel::MERCHANT_ID => self::$merchant_id,
$GuideModel::STORE_ID => self::$store_id,
$GuideModel::STATUS => 1,
);
$field = array($GuideModel::ID, $GuideModel::NAME);
$guide_list = $GuideModel->getSelect($map, $field);
if ($guide_list) {
$res = array('status' => 1, 'guide_list' => $guide_list);
} else {
$res = array('status' => 0, 'msg' => '暂无导购');
}
$this->ajaxReturn($res);
}
/**
* 添加会员
* @param array $vip_info 表单数据
* @return array $res
*/
public function addVipInfo()
{
// 实例化模型
$RechargeOrderModel = D('RetailRechargeOrder');
$retailCashierModel = D('RetailCashier');
$retailManagerModel = D('RetailManager');
$GuideModel = D('RetailGuide');
$VipModel = D('RetailVip');
$cryptoModel = new \Addons\Api\Crypto();
$time = time();
$cr = array();
// 获取数据
$vip_info = json_decode($_POST['vip_info'], true);
// 判断表单提交,如若绑定实体卡,其它数据可以忽略
if (!$vip_info[$VipModel::CARD_KEY]) {
if (!$vip_info[$VipModel::NAME] || !$vip_info[$VipModel::MOBILE_PHONE] || strlen($vip_info[$VipModel::MOBILE_PHONE]) != 11 || ($vip_info[$VipModel::BALANCE] && floatval($vip_info[$VipModel::BALANCE]) < 0)) {
$res = array('status' => 0, 'msg' => '请检查表单提交信息是否正确');
$this->ajaxReturn($res);
}
if (!$vip_info[$VipModel::PASSWORD]) {
$password = substr($vip_info[$VipModel::MOBILE_PHONE], -6);
} else {
if (strlen($vip_info[$VipModel::PASSWORD]) != 6) {
$res = array('status' => 0, 'msg' => '密码格式错误');
$this->ajaxReturn($res);
}
$password = $vip_info[$VipModel::PASSWORD];
}
} else {
if (!$vip_info[$VipModel::PASSWORD] || strlen($vip_info[$VipModel::PASSWORD]) != 6) {
$res = array('status' => 0, 'msg' => '密码格式错误');
$this->ajaxReturn($res);
}
$password = $vip_info[$VipModel::PASSWORD];
}
// 判断权限
$user_type = I('post.user_type'); // 操作人员类型 1.收银员 2.店长
if ($vip_info[$VipModel::BALANCE] && floatval($vip_info[$VipModel::BALANCE]) > 0) {
if ($user_type == 1) {
// 权限码
$recharge_code = I('post.recharge_code');
if (!$recharge_code) {
$res = array('status' => 0, 'msg' => '请输入权限码');
$this->ajaxReturn($res);
}
if ($recharge_code != self::$cashier[$retailCashierModel::RECHARGE_CODE]) {
$res = array('status' => 0, 'msg' => '权限码错误');
$this->ajaxReturn($res);
}
} else if ($user_type == 2) {
// 店长账号、密码
$manager_number = I('post.manager_number');
$manager_pass = I('post.manager_pass');
if (!$manager_number || !$manager_pass) {
$res = array('status' => 0, 'msg' => '请填写店长账号或密码后在提交');
$this->ajaxReturn($res);
}
// 查询店长
$manager = $retailManagerModel->getFind(array($retailManagerModel::MERCHANT_ID => self::$merchant_id, $retailManagerModel::STORE_ID => self::$store_id, $retailManagerModel::STATUS => 1, $retailManagerModel::MOBILE => $manager_number));
if (!$manager) {
$res = array('status' => 0, 'msg' => '暂无此店长,请先添加');
$this->ajaxReturn($res);
}
// 判断密码
$encryption_pass = $cryptoModel->encrypt($manager_pass, date('YmdHis', $manager[$retailManagerModel::ADD_TIME]));
if ($encryption_pass != $manager[$retailManagerModel::PASSWORD]) {
$res = array('status' => 0, 'msg' => '密码错误');
$this->ajaxReturn($res);
}
} else {
$res = array('status' => 0, 'msg' => '未知的操作人员');
$this->ajaxReturn($res);
}
}
$cr[$VipModel::NAME] = $vip_info[$VipModel::NAME];
// 手机号
if ($vip_info[$VipModel::MOBILE_PHONE]) {
// 验证手机号
$test_phone = "/^1[3456789]\d{9}$/";
if (!preg_match($test_phone, $vip_info[$VipModel::MOBILE_PHONE])) {
$res = array('status' => 0, 'msg' => '手机号格式有误');
$this->ajaxReturn($res);
}
// 判断手机号是否被使用
$vMap = array(
$VipModel::MOBILE_PHONE => $vip_info[$VipModel::MOBILE_PHONE],
$VipModel::STATUS => array('neq', 2),
$VipModel::MERCHANT_ID => self::$merchant_id,
);
$used_phone = $VipModel->getSelect($vMap);
if ($used_phone) {
$res = array('status' => 0, 'msg' => '该手机号已被注册');
$this->ajaxReturn($res);
}
$cr[$VipModel::MOBILE_PHONE] = $vip_info[$VipModel::MOBILE_PHONE];
}
// 余额
if ($vip_info[$VipModel::BALANCE] && floatval($vip_info[$VipModel::BALANCE]) > 0) {
$cr[$VipModel::BALANCE] = $vip_info[$VipModel::BALANCE];
}
// 密码
$cr[$VipModel::PASSWORD] = $cryptoModel->encrypt($password, date('YmdHis', $time));
// 生日
if ($vip_info[$VipModel::BIRTHDAY]) {
$cr[$VipModel::BIRTHDAY] = $vip_info[$VipModel::BIRTHDAY];
}
// 实体卡
if ($vip_info[$VipModel::CARD_KEY]) {
// 判断实体卡是否被使用
$vMap = array(
$VipModel::CARD_KEY => $vip_info[$VipModel::CARD_KEY],
$VipModel::STATUS => array('neq', 2),
$VipModel::MERCHANT_ID => self::$merchant_id,
);
$used_card_key = $VipModel->getSelect($vMap);
if ($used_card_key) {
$res = array('status' => 0, 'msg' => '该实体卡已被绑定');
$this->ajaxReturn($res);
}
$cr[$VipModel::CARD_KEY] = $vip_info[$VipModel::CARD_KEY];
}
// 导购员
if ($vip_info[$VipModel::GUIDE_ID]) {
// 判断导购是否存在
$gMap = array(
$GuideModel::ID => $vip_info[$VipModel::GUIDE_ID],
$GuideModel::MERCHANT_ID => self::$merchant_id,
$GuideModel::STORE_ID => self::$store_id,
$GuideModel::STATUS => 1,
);
$guide_info = $GuideModel->getFind($gMap);
if (!$guide_info) {
$res = array('status' => 0, 'msg' => '未查询到导购信息');
$this->ajaxReturn($res);
}
$cr[$VipModel::GUIDE_ID] = $vip_info[$VipModel::GUIDE_ID];
}
if (!$cr) {
$res = array('status' => 0, 'msg' => '请填写表单提交信息');
$this->ajaxReturn($res);
}
$cr[$VipModel::MERCHANT_ID] = self::$merchant_id;
$cr[$VipModel::STORE_ID] = self::$store_id;
$cr[$VipModel::ADD_TIME] = $time;
if (self::$merchant['platform_type'] == 2) {
//第三方平台
if (empty($cr[$VipModel::MOBILE_PHONE])) {
$res = array('status' => 0, 'msg' => '请输入手机号');
$this->ajaxReturn($res);
}
$thirdData = [
'merchant_id' => self::$merchant_id,
'vip_info' => [
'Code' => $cr[$VipModel::MOBILE_PHONE],
'Source' => '收银端添加',
'Customer_Code' => self::$store['third_code'],
'Name' => $cr[$VipModel::NAME]
]
];
if (!empty($cr[$VipModel::BIRTHDAY])) {
$thirdData['vip_info']['DateOfBirth'] = "/Date(".(newStrToTime($cr[$VipModel::BIRTHDAY]) * 1000)."+0800)/";
}
$thirdData['vip_info'] = json_encode($thirdData['vip_info']);
$ThirdVipClass = new Vip();
$thirdResult = $ThirdVipClass->vipInsert($thirdData);
if ($thirdResult['status'] == 0) {
$res = array('status' => 0, 'msg' => 'Q3 ERP平台添加失败' . $thirdResult['message']);
$this->ajaxReturn($res);
}
if (!empty($thirdResult['data']) && !empty($thirdResult['data']['Code'])) {
//Q3已存在更新Q3的会员信息
$third_vip = $thirdResult['data'];
if (!empty($third_vip['Source'])) {
$cr['source_channel'] = $third_vip['Source'];
}
if (!empty($third_vip['Name'])) {
$cr['name'] = $third_vip['Name'];
}
if (!empty($third_vip['DateOfBirth'])) {
$cr['birthday'] = date('Y-m-d', substr($third_vip['DateOfBirth'], 6, 10));
}
if (self::$store['third_code'] != $third_vip['Customer_Code']) {
$StoreModel = new RetailStoreModel();
$new_store_id = $StoreModel->getFindField([
'third_code' => $third_vip['Customer_Code'],
'merchantid' => self::$merchant_id,
'state' => 0
], 'id');
if (!empty($new_store_id)) {
$cr['storeid'] = $new_store_id;
}
}
}
}
$add_result = $VipModel->addOrder($cr);
if (!$add_result) {
$res = array('status' => 0, 'msg' => '添加失败');
$this->ajaxReturn($res);
}
// 判断类型变更
if ($vip_info['vip_type'] && $vip_info['vip_type'] == 2) { // 添加plus会员
// 判断收银员是否有权限
if (!self::$cashier[$retailCashierModel::MODIFY_VIP_TO_PLUS] || self::$cashier[$retailCashierModel::MODIFY_VIP_TO_PLUS] == 1) {
$res = array('status' => 0, 'msg' => '暂无变更权限');
$this->ajaxReturn($res);
}
$result = $this->changePlusVip($add_result, $vip_info['plus_time']);
if ($result['status'] == 0) {
$this->ajaxReturn($result);
}
}
// 余额变动添加余额记录 $cr2 余额记录
if ($cr[$VipModel::BALANCE]) {
// 余额记录
$cr2 = array(
$RechargeOrderModel::MERCHANT_ID => self::$merchant_id,
$RechargeOrderModel::STORE_ID => self::$store_id,
$RechargeOrderModel::VID => $add_result,
$RechargeOrderModel::STATUS => 1,
$RechargeOrderModel::MONEY => 0,
$RechargeOrderModel::ALL_MONEY => $cr[$VipModel::BALANCE],
$RechargeOrderModel::USER_TYPE => $user_type == 1 ? 3 : 2,
$RechargeOrderModel::CASHIER_ID => $user_type == 1 ? self::$cashier_id : $manager[$retailManagerModel::ID],
$RechargeOrderModel::REMARK => '收银机添加会员,初始余额' . $cr[$VipModel::BALANCE] . '元',
$RechargeOrderModel::ADD_TIME => $time,
$RechargeOrderModel::SCENE_TYPE => 1,
$RechargeOrderModel::TYPE => 3,
);
$add_result2 = $RechargeOrderModel->addOrder($cr2);
if (!$add_result2) {
$res = array('status' => 0, 'msg' => '余额变动记录添加失败');
$this->ajaxReturn($res);
}
}
// 新会员注册福利
A('PayApi/Vip')->newVipWelfare($add_result, self::$merchant_id, 1, $vip_info['vip_type']);
$res = array('status' => 1, 'msg' => '添加成功');
$this->ajaxReturn($res);
}
/**
* 获取权限
* @return array $res;
*/
public function getJurisdiction()
{
// 实例化模型
$StoreAuthModel = D('RetailStoreAuth');
$retailCashierModel = D('RetailCashier');
// 查询权限
$field = array($StoreAuthModel::OPERATION_VIP, $StoreAuthModel::EDIT_VIP);
$jurisdiction = $StoreAuthModel->getFind(array($StoreAuthModel::STORE_ID => self::$store_id), $field);
// 判断门店是否有操作权限
if ($jurisdiction[$StoreAuthModel::OPERATION_VIP] && $jurisdiction[$StoreAuthModel::OPERATION_VIP] == 2) { // 门店无操作权限
$res['operation_vip'] = '1';
$res['edit_vip'] = '1';
$this->ajaxReturn($res);
} else { // 门店有操作权限
$res['operation_vip'] = '2';
}
// 判断门店是否有编辑权限
if ($jurisdiction[$StoreAuthModel::EDIT_VIP] && $jurisdiction[$StoreAuthModel::EDIT_VIP] == 2) { // 门店无编辑权限
$res['edit_vip'] = '1';
} else { // 门店有编辑权限
// 判断收银员是否有编辑权限
if (self::$cashier[$retailCashierModel::MODIFY_VIP_STATE] && self::$cashier[$retailCashierModel::MODIFY_VIP_STATE] == 2) { // 收银员有编辑权限
$res['edit_vip'] = '2';
} else { // 收银员无编辑权限
$res['edit_vip'] = '1';
}
}
$this->ajaxReturn($res);
}
/**
* 获取商户会员等级
* @return array $res
*/
public function getGradeList()
{
// 实例化模型
$VipIntegralModel = D('RetailVipIntegral');
// 查询出所有可用会员等级
$grade_list = $VipIntegralModel->getSelect(array($VipIntegralModel::MERCHANT_ID => self::$merchant_id), array($VipIntegralModel::ID, $VipIntegralModel::CARD_NAME), $VipIntegralModel::MIN_INTEGRAL . ' desc');
$res = array('status' => 1, 'grade_list' => $grade_list);
$this->ajaxReturn($res);
}
//修改的会员信息
public function editVipInfo()
{
$data = I('post.');
$data['platform_type'] = self::$merchant['platform_type']?self::$merchant['platform_type']:1;
$data['operator_type'] = 2;
$data['user_type'] = 6;
$data['operator_id'] = self::$cashier_id;
$data['merchant_id'] = self::$merchant_id;
$data['store_id'] = self::$store_id;
$data['cashier_id'] = self::$cashier_id;
$VipEditClass = new VipEdit();
$result = $VipEditClass->editInfo($data);
$this->ajaxReturn($result);
}
/**
* 改变会员类型(plus)
* @param $vip_id 会员id
* @param int $plus_time 时长
* @return array
*/
protected function changePlusVip($vip_id, $plus_time = 365)
{
// 实例化模型
$PlusVipModel = D('RetailPlusVip');
$VipModel = D('RetailVip');
$time = time();
$year = !empty($plus_time) ? (86400 * $plus_time) : 31536000;
// 查询plus会员
$map = array(
$PlusVipModel::VIP_ID => $vip_id,
$PlusVipModel::MERCHANT_ID => self::$merchant_id,
$PlusVipModel::STORE_ID => self::$store_id,
);
$plus_data = $PlusVipModel->getFind($map);
if (!$plus_data) {
// 新增plus会员
$cr = array(
$PlusVipModel::VIP_ID => $vip_id,
$PlusVipModel::MERCHANT_ID => self::$merchant_id,
$PlusVipModel::STORE_ID => self::$store_id,
$PlusVipModel::ADD_TIME => $time,
$PlusVipModel::START_TIME => $time,
$PlusVipModel::END_TIME => $time + $year,
$PlusVipModel::STATE => 1,
);
$add_result = $PlusVipModel->addOrder($cr);
if (!$add_result) {
$res = array('status' => 0, 'msg' => '变更失败');
return $res;
}
$plus_id = $add_result;
} else {
$up = array();
// 修改plus会员
if ($plus_data[$PlusVipModel::STATE] == 2 || $plus_data[$PlusVipModel::END_TIME] < $time) {
// 过期
if ($plus_data[$PlusVipModel::STATE] == 2) {
$up[$PlusVipModel::STATE] = 1;
}
$up[$PlusVipModel::START_TIME] = $time;
$up[$PlusVipModel::END_TIME] = $time + $year;
} else {
// 正常
$up[$PlusVipModel::END_TIME] = $plus_data[$PlusVipModel::END_TIME] + $year;
}
$save_result = $PlusVipModel->updateOrder(array($PlusVipModel::ID => $plus_data[$PlusVipModel::ID]), $up);
if (!$save_result) {
$res = array('status' => 0, 'msg' => '变更失败');
return $res;
}
$plus_id = $plus_data[$PlusVipModel::ID];
}
// 二次获取会员原信息
$field = array(
$VipModel::PLUS_ID,
$VipModel::PLUS_TYPE,
$VipModel::PLUS_STATE
);
$vip_data2 = $VipModel->getFind(array($VipModel::ID => $vip_id), $field);
if (!$vip_data2) {
$res = array('status' => 0, 'msg' => '会员查询失败');
return $res;
}
// 修改会员类型
$up2 = array();
if (!$vip_data2[$VipModel::PLUS_ID] || $vip_data2[$VipModel::PLUS_ID] != $plus_id) {
$up2[$VipModel::PLUS_ID] = $plus_id;
}
if (!$vip_data2[$VipModel::PLUS_TYPE] || $vip_data2[$VipModel::PLUS_TYPE] == 3) {
$up2[$VipModel::PLUS_TYPE] = 2;
}
if (!$vip_data2[$VipModel::PLUS_STATE] || $vip_data2[$VipModel::PLUS_STATE] == 2) {
$up2[$VipModel::PLUS_STATE] = 2;
}
if (!$up2) {
$res = array('status' => 1, 'msg' => '变更成功');
return $res;
}
// 提交会员修改
$save_result = $VipModel->updateOrder(array($VipModel::ID => $vip_id), $up2);
if (!$save_result) {
$SmallProgramModel = D('RetailSmallProgramUser');
$smMap = array(
$SmallProgramModel::VID => $vip_id
);
$save = array(
$SmallProgramModel::PLUS_VIP_ID => $plus_id,
$SmallProgramModel::USER_TYPE => 2
);
$SmallProgramModel->updateOrder($smMap, $save);
$res = array('status' => 0, 'msg' => '会员类型修改失败');
} else {
$res = array('status' => 1, 'msg' => '变更成功');
}
return $res;
}
/**
* 收银修改密码
* @param array $password_info 表单提交
* @return array $res
*/
public function editPassword()
{
// 实例化模型
$StoreAuthModel = D('RetailStoreAuth');
$retailCashierModel = D('RetailCashier');
$VipModel = D('RetailVip');
$VipIntegralModel = D('RetailVipIntegral');
$VipChangeModel = D('RetailVipChange');
$cryptoModel = new \Addons\Api\Crypto();
// 接受数据
$vip_id = I('post.vip_id');
if (!$vip_id) {
$res = array('status' => 0, 'msg' => '参数缺失');
$this->ajaxReturn($res);
}
$edit_password = I('post.edit_password');
$edit_vip_code = I('post.edit_vip_code');
if (!trim($edit_password) || $edit_password == '' || !$edit_vip_code) {
$res = array('status' => 0, 'msg' => '请检查表单提交信息是否正确');
$this->ajaxReturn($res);
}
// 判断门店权限
$edit_vip = $StoreAuthModel->getFindField(array($StoreAuthModel::STORE_ID => self::$store_id), $StoreAuthModel::EDIT_VIP);
if ($edit_vip && $edit_vip == 2) {
$res = array('status' => 0, 'msg' => '门店暂无编辑权限');
$this->ajaxReturn($res);
}
// 判断收银员权限
if (!self::$cashier[$retailCashierModel::MODIFY_VIP_STATE] || self::$cashier[$retailCashierModel::MODIFY_VIP_STATE] == 1) {
$res = array('status' => 0, 'msg' => '收银员暂无编辑权限');
$this->ajaxReturn($res);
}
if ($edit_vip_code != self::$cashier[$retailCashierModel::MODIFY_VIP_CODE]) {
$res = array('status' => 0, 'msg' => '权限码错误');
$this->ajaxReturn($res);
}
// 查询会员添加时间(判断会员)
$map[$VipModel::ID] = $vip_id;
$map[$VipModel::STATUS] = 1;
$vip_info = $VipModel->getFind($map);
if (!$vip_info) {
$res = array('status' => 0, 'msg' => '会员查询失败,请确定该会员状态是否正常');
$this->ajaxReturn($res);
}
// 加密密码,判断密码是否被修改
$new_password = $cryptoModel->encrypt($edit_password, date('YmdHis', intval($vip_info[$VipModel::ADD_TIME])));
if ($new_password == $vip_info[$VipModel::PASSWORD]) {
$res = array('status' => 0, 'msg' => '密码一致,无需修改');
$this->ajaxReturn($res);
}
// 修改密码
$save_result = $VipModel->updateOrder(array($VipModel::ID => $vip_id), array($VipModel::PASSWORD => $new_password));
if (!$save_result) {
$res = array('status' => 0, 'msg' => '修改失败');
$this->ajaxReturn($res);
}
// 添加变更记录
$cr[$VipChangeModel::MERCHANT_ID] = self::$merchant_id;
$cr[$VipChangeModel::STORE_ID] = self::$store_id;
$cr[$VipChangeModel::VIP_ID] = $vip_id;
$cr[$VipChangeModel::OPERATOR] = 3;
$cr[$VipChangeModel::OPERATOR_ID] = self::$cashier_id;
$cr[$VipChangeModel::PASSWORD_STATE] = 1;
$cr[$VipChangeModel::ADD_TIME] = time();
$add_result = $VipChangeModel->addOrder($cr);
if ($add_result) {
$res = array('status' => 1, 'msg' => '修改成功');
} else {
$res = array('status' => 0, 'msg' => '变更记录添加失败');
}
$this->ajaxReturn($res);
}
/**
* 绑定实体卡
* @param int $vip_id 会员id
* @param string $card_key 实体卡
* @param int $guide_id 导购id
*/
public function BindCardKey()
{
// 实例化模型
$StoreAuthModel = D('RetailStoreAuth');
$VipModel = D('RetailVip');
// 会员id
$vip_id = I('post.vip_id');
if (!$vip_id) {
$res = array('status' => 0, 'msg' => '参数缺失');
$this->ajaxReturn($res);
}
// 查询会员条件
$map = array(
$VipModel::ID => $vip_id,
$VipModel::MERCHANT_ID => self::$merchant_id,
$VipModel::STATUS => 1,
);
// 获取会员信息
$vip_info = $VipModel->getFind($map);
if (!$vip_info) {
$res = array('status' => 0, 'msg' => '会员查询失败');
$this->ajaxReturn($res);
}
// 判断会员是否绑定实体卡
if ($vip_info[$VipModel::CARD_KEY] && ($vip_info[$VipModel::CARD_KEY] != '0' || $vip_info[$VipModel::CARD_KEY] != 0)) {
$res = array('status' => 0, 'msg' => '该用户已绑定实体卡,无法重复绑定');
$this->ajaxReturn($res);
}
// 实体卡号
$card_key = I('post.card_key');
if (!$card_key) {
$res = array('status' => 0, 'msg' => '请填写实体卡号');
$this->ajaxReturn($res);
}
$card_key = preg_replace('/[^0-9]/i', '', $card_key);
// 判断实体卡是否被使用
$used_card_key = $VipModel->getSelect(array($VipModel::CARD_KEY => $card_key, $VipModel::STATUS => array('neq', 2)));
if ($used_card_key) {
$res = array('status' => 0, 'msg' => '该实体卡已被绑定');
$this->ajaxReturn($res);
}
// 判断门店权限
$operation_vip = $StoreAuthModel->getFindField(array($StoreAuthModel::STORE_ID => self::$store_id), $StoreAuthModel::OPERATION_VIP);
if ($operation_vip && $operation_vip == 2) {
$res = array('status' => 0, 'msg' => '门店暂无操作权限');
$this->ajaxReturn($res);
}
// 是否绑定导购
$guide_id = I('post.guide_id');
if ($guide_id) {
$up[$VipModel::GUIDE_ID] = $guide_id;
}
$up[$VipModel::CARD_KEY] = $card_key;
// 二次判断提交数据
if (!$up) {
$res = array('status' => 0, 'msg' => '请先完善表单提交数据');
$this->ajaxReturn($res);
}
// 修改数据
$save_result = $VipModel->updateOrder($map, $up);
// 判断修改结果
if (!$save_result) {
$res = array('status' => 0, 'msg' => '绑定失败');
$this->ajaxReturn($res);
}
// 添加变更记录
$VipChangeModel = D('RetailVipChange');
$cr[$VipChangeModel::MERCHANT_ID] = self::$merchant_id;
$cr[$VipChangeModel::STORE_ID] = self::$store_id;
$cr[$VipChangeModel::VIP_ID] = $vip_info[$VipModel::ID];
$cr[$VipChangeModel::OPERATOR] = 3;
$cr[$VipChangeModel::OPERATOR_ID] = self::$cashier_id;
$cr[$VipChangeModel::BEFORE_CARD_KEY] = '';
$cr[$VipChangeModel::AFTER_CARD_KEY] = $card_key;
$cr[$VipChangeModel::ADD_TIME] = time();
$add_result = $VipChangeModel->addOrder($cr);
if ($add_result) {
$res = array('status' => 1, 'msg' => '绑定成功');
} else {
$res = array('status' => 0, 'msg' => '绑定成功,操作记录失败');
}
$this->ajaxReturn($res);
}
/**
* 解绑实体卡
* @param int $vip_id 会员id
* @param string $password 会员密码
* @return array $res
*/
public function UnbindCardKey()
{
// 实例化模型
$StoreAuthModel = D('RetailStoreAuth');
$VipModel = D('RetailVip');
$cryptoModel = new \Addons\Api\Crypto();
// 会员id
$vip_id = I('post.vip_id');
if (!$vip_id) {
$res = array('status' => 0, 'msg' => '参数缺失');
$this->ajaxReturn($res);
}
$password = I('post.password');
if (!$password) {
$res = array('status' => 0, 'msg' => '请输入会员密码');
$this->ajaxReturn($res);
}
// 查询会员条件
$map = array(
$VipModel::ID => $vip_id,
$VipModel::MERCHANT_ID => self::$merchant_id,
$VipModel::STATUS => 1,
);
// 获取会员信息
$vip_info = $VipModel->getFind($map);
if (!$vip_info) {
$res = array('status' => 0, 'msg' => '会员查询失败');
$this->ajaxReturn($res);
}
// 判断是否绑定实体卡
if (!$vip_info[$VipModel::CARD_KEY] && ($vip_info[$VipModel::CARD_KEY] == '0' || $vip_info[$VipModel::CARD_KEY] == 0)) {
$res = array('status' => 0, 'msg' => '该会员暂未绑定实体卡');
$this->ajaxReturn($res);
}
// 判断门店权限
$operation_vip = $StoreAuthModel->getFindField(array($StoreAuthModel::STORE_ID => self::$store_id), $StoreAuthModel::OPERATION_VIP);
if ($operation_vip && $operation_vip == 2) {
$res = array('status' => 0, 'msg' => '门店暂无操作权限');
$this->ajaxReturn($res);
}
// 判断密码
$password = $cryptoModel->encrypt($password, date('YmdHis', intval($vip_info[$VipModel::ADD_TIME]))); // 加密密码
if ($password != $vip_info[$VipModel::PASSWORD]) {
$res = array('status' => 0, 'msg' => '会员密码错误');
$this->ajaxReturn($res);
}
// 修改数据
$save_result = $VipModel->updateOrder($map, array($VipModel::CARD_KEY => 0));
if (!$save_result) {
$res = array('status' => 0, 'msg' => '解绑失败');
$this->ajaxReturn($res);
}
// 变更记录
$VipChangeModel = D('RetailVipChange');
$cr[$VipChangeModel::MERCHANT_ID] = self::$merchant_id;
$cr[$VipChangeModel::STORE_ID] = self::$store_id;
$cr[$VipChangeModel::VIP_ID] = $vip_info[$VipModel::ID];
$cr[$VipChangeModel::OPERATOR] = 3;
$cr[$VipChangeModel::OPERATOR_ID] = self::$cashier_id;
$cr[$VipChangeModel::BEFORE_CARD_KEY] = $vip_info[$VipModel::CARD_KEY];
$cr[$VipChangeModel::AFTER_CARD_KEY] = '';
$cr[$VipChangeModel::ADD_TIME] = time();
$add_result = $VipChangeModel->addOrder($cr);
if ($add_result) {
$res = array('status' => 1, 'msg' => '解绑成功');
} else {
$res = array('status' => 0, 'msg' => '解绑成功,操作记录失败');
}
$this->ajaxReturn($res);
}
/**
* 会员挂失
* @param int $vip_id 会员id
* @return array $res
*/
public function VipLose()
{
// 实例化模型
$StoreAuthModel = D('RetailStoreAuth');
$VipModel = D('RetailVip');
// 接受数据
$vip_id = I('post.vip_id');
if (!$vip_id) {
$res = array('status' => 0, 'msg' => '参数缺失');
$this->ajaxReturn($res);
}
// 查询会员条件
$map = array(
$VipModel::ID => $vip_id,
$VipModel::MERCHANT_ID => self::$merchant_id,
$VipModel::STATUS => 1,
);
// 获取会员信息
$vip_info = $VipModel->getFind($map);
if (!$vip_info) {
$res = array('status' => 0, 'msg' => '会员查询失败');
$this->ajaxReturn($res);
}
// 判断门店权限
$operation_vip = $StoreAuthModel->getFindField(array($StoreAuthModel::STORE_ID => self::$store_id), $StoreAuthModel::OPERATION_VIP);
if ($operation_vip && $operation_vip == 2) {
$res = array('status' => 0, 'msg' => '门店暂无操作权限');
$this->ajaxReturn($res);
}
// 挂失会员
$save_result = $VipModel->updateOrder($map, array($VipModel::STATUS => 4));
if ($save_result) {
$res = array('status' => 1, 'msg' => '挂失成功');
} else {
$res = array('status' => 0, 'msg' => '挂失失败');
}
$this->ajaxReturn($res);
}
/**
* 会员解除挂失
* @param int $vip_id 会员id
* @return array $res
*/
public function VipRemoveLose()
{
// 实例化模型
$StoreAuthModel = D('RetailStoreAuth');
$VipModel = D('RetailVip');
// 接受数据
$vip_id = I('post.vip_id');
if (!$vip_id) {
$res = array('status' => 0, 'msg' => '参数缺失');
$this->ajaxReturn($res);
}
// 查询会员条件
$map = array(
$VipModel::ID => $vip_id,
$VipModel::MERCHANT_ID => self::$merchant_id,
$VipModel::STATUS => 4,
);
// 获取会员信息
$vip_info = $VipModel->getFind($map);
if (!$vip_info) {
$res = array('status' => 0, 'msg' => '会员查询失败');
$this->ajaxReturn($res);
}
// 判断门店权限
$operation_vip = $StoreAuthModel->getFindField(array($StoreAuthModel::STORE_ID => self::$store_id), $StoreAuthModel::OPERATION_VIP);
if ($operation_vip && $operation_vip == 2) {
$res = array('status' => 0, 'msg' => '门店暂无操作权限');
$this->ajaxReturn($res);
}
// 解挂会员
$save_result = $VipModel->updateOrder($map, array($VipModel::STATUS => 1));
if ($save_result) {
$res = array('status' => 1, 'msg' => '解挂成功');
} else {
$res = array('status' => 0, 'msg' => '解挂失败');
}
$this->ajaxReturn($res);
}
/**
* 获取充值活动
* @param int $vip_type 会员类型 1.常规会员 2.plus会员
* @return array $res
*/
public function getRechargeActivity()
{
// 实例化模型
$retailVipRechargeModel = D('RetailVipRecharge');
$retailMerchantModel = D('RetailMerchant');
$RetailCashierModel = D('RetailCashier');
$PlusVipModel = D('RetailPlusVip');
$VipModel = D('RetailVip');
// 接受数据
$vip_id = I('post.vip_id');
if (!$vip_id) {
$res = array('status' => 0, 'msg' => '参数缺失');
$this->ajaxReturn($res);
}
$vip_type = A('PayApi/Recharge')->getVipType($vip_id);
// 获取充值活动
$recharge_activity = $retailVipRechargeModel->getRechargeActivity(self::$merchant_id, self::$store_id, $vip_id, $vip_type, 0);
// 返回参数
$res = array(
'status' => 1,
'vip_type' => $vip_type,
'recharge_activity' => $recharge_activity ? $recharge_activity : (object)array(),
'custom_recharge' => self::$merchant[$retailMerchantModel::CUSTOM_RECHARGE_STATE] ? self::$merchant[$retailMerchantModel::CUSTOM_RECHARGE_STATE] : 1, // 自定义充值 1.开启 2.关闭
'custom_give' => self::$cashier[$RetailCashierModel::CUSTOM_RECHARGE_STATE] ? self::$cashier[$RetailCashierModel::CUSTOM_RECHARGE_STATE] : 1, // 赠送 1.关闭 2.开启
);
$this->ajaxReturn($res);
}
/**
* 修改会员实体卡(安卓)
* @param int $vid 会员id
* @param string $card_key 实体卡
* @return array $res
*/
public function editVipCardKey()
{
// 实例化模型
$VipModel = D('RetailVip');
// 接受数据
$vip_id = I('post.vip_id');
$card_key = I('post.card_key');
if (!$vip_id) {
$res = array('status' => 0, 'msg' => '参数缺失');
$this->ajaxReturn($res);
}
if (!$card_key) {
$res = array('status' => 0, 'msg' => '请输入实体卡号');
$this->ajaxReturn($res);
}
// 会员查询条件
$map = array(
$VipModel::ID => $vip_id,
$VipModel::MERCHANT_ID => self::$merchant_id,
$VipModel::STATUS => array('neq', 2),
);
// 获取会员信息
$vip_info = $VipModel->getFind($map);
if (!$vip_info) {
$res = array('status' => 0, 'msg' => '会员查询失败');
$this->ajaxReturn($res);
}
// 判断实体卡是否被修改
if ($vip_info[$VipModel::CARD_KEY] == $card_key) {
$res = array('status' => 0, 'msg' => '请先修改实体卡');
$this->ajaxReturn($res);
}
// 判断实体卡是否被使用
$map2 = array(
$VipModel::MERCHANT_ID => self::$merchant_id,
$VipModel::STATUS => array('neq', 2),
$VipModel::CARD_KEY => $card_key,
);
$vip_data = $VipModel->getSelect($map2);
if ($vip_data) {
$res = array('status' => 0, 'msg' => '该实体卡已被使用');
$this->ajaxReturn($res);
}
// 修改实体卡
$save_result = $VipModel->updateOrder($map, array($VipModel::CARD_KEY => $card_key));
if ($save_result) {
$res = array('status' => 1, 'msg' => '修改成功');
} else {
$res = array('status' => 0, 'msg' => '修改失败');
}
$this->ajaxReturn($res);
}
}