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); } }