995 行
42 KiB
PHP
可执行文件
995 行
42 KiB
PHP
可执行文件
<?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);
|
||
}
|
||
}
|