ajaxReturn($res); } } /* ******************************************* 我的信息 Start ******************************************** */ // 用户是否是分销员--小程序登录判断用 public function isUserDistributor() { $uid = self::$uid; //用户id $merchant_id = self::$merchant_id; $DistributorModel = new DistributorModel(); $isDistributor = $DistributorModel->getFind(['merchant_id' => $merchant_id, 'uid' => $uid, 'status' => 0], 'id'); if ($isDistributor['id']) { return true; } else { return false; } } // 获取分销员基本信息 public function getDistributorBasicInfo() { $uid = self::$uid; //用户id $merchant_id = self::$merchant_id; $DistributorModel = new DistributorModel(); $OrderModel = new OrderModel(); $SmallProgramUserModel = new RetailSmallProgramUserModel(); $distributor_id = $this->verifyDistributor($uid, $merchant_id); $where['dor.id'] = $distributor_id; $field = [ 'dor.id as distributor_id', 'dor.phone_number', 'dor.uid', 'dor.pid', 'dor.add_time', 'dor.settable_amount', 'rx.nickname', 'rx.avatar', 'dg.id as grade_id', 'dg.grade_name', 'dg.proportion' ]; $personal = $DistributorModel->getUserBasicInfo($where, $field); if ($personal) { // 获取上级昵称 if ($personal['pid']) { $superior_uid = $DistributorModel->getFind(['id' => $personal['pid']], 'id,status,uid'); // 获取上级用户的UID if (!$superior_uid['id'] || $superior_uid['status'] == 1) { $personal['p_name'] = NULL; $personal['pid'] = 0; } else { $superior = $SmallProgramUserModel->getFind(['id' => $superior_uid['uid']], 'nickname'); // 获取上级用户的昵称 $personal['p_name'] = $superior['nickname']; } } $personal['commission'] = $OrderModel->userCommissionExpected($distributor_id, $merchant_id); $balanceWhere['rbo.merchant_id'] = $merchant_id; $balanceWhere['diso.withdraw_state'] = 0; $balance = $OrderModel->userCommissionExpectedByTime($balanceWhere, $distributor_id, 3, 5); $personal['balance'] = bcadd($balance, $personal['settable_amount'], 2); $personal['add_time'] = date('Y-m-d H:i:s', $personal['add_time']); $res['status'] = 1; $res['msg'] = '信息获取成功!'; $res['data'] = $personal; } else { $res['status'] = 0; $res['msg'] = '信息获取失败,请稍后重试!'; $res['data'] = (object)[]; } $this->ajaxReturn($res); } // 获取升级要求V2--2020年8月4日 public function getUpgradeConditions() { $merchant_id = self::$merchant_id; $uid = self::$uid; $GradeModel = new GradeModel(); $DistributorModel = new DistributorModel(); $distributor_id = $this->verifyDistributor($uid, $merchant_id); // 获取用户当前等级信息 $result['grade_info'] = $DistributorModel->getUserGradeInfo($distributor_id); $field = [ 'id', 'grade_name', 'invite', 'commission', 'myself_money', 'client', 'is_invite', 'is_commission', 'is_myself_money', 'is_client', 'proportion', 'upgrade_type', 'grade_type' ]; $result['upgrade_conditions'] = $GradeModel->getAllUpgradeConditions($merchant_id, $field); if ($result['upgrade_conditions']) { // 获取用户的当前数据 $userInfo = $DistributorModel->getFind(['id' => $distributor_id], 'total_invite, total_commission, total_myself_money, total_client'); foreach ($result['upgrade_conditions'] as &$value) { $value['upgrade'] = []; if ($value['grade_type'] == 1) { if ($value['is_invite'] == 1) { $value['upgrade'][] = '邀请分销员数量达到' . $userInfo['total_invite'] . '/' . $value['invite'] . '人'; } if ($value['is_commission'] == 1) { $value['upgrade'][] = '推广佣金达到' . $userInfo['total_commission'] . '/' . $value['commission'] . '元'; } if ($value['is_myself_money'] == 1) { $value['upgrade'][] = '自购商品金额达到' . $userInfo['total_myself_money'] . '/' . $value['myself_money'] . '元'; } if ($value['is_client'] == 1) { $value['upgrade'][] = '邀请客户数达到' . $userInfo['total_client'] . '/' . $value['client'] . '人'; } if ($value['upgrade_type'] == 0) { $value['upgrade_condition'] = '满足其中一个条件即可升级'; } else { $value['upgrade_condition'] = '满足其中所有条件即可升级'; } } else { $value['upgrade'][] = '该等级为初始等级,没有升级条件!'; $value['upgrade_condition'] = ''; } unset($value['upgrade_type']); unset($value['grade_type']); unset($value['invite']); unset($value['commission']); unset($value['myself_money']); unset($value['client']); unset($value['is_invite']); unset($value['is_client']); unset($value['is_commission']); unset($value['is_myself_money']); } $this->successAjaxReturn('信息获取成功!', $result); } else { $this->successAjaxReturn('商户暂未添加升级条件!', $result); } } // 获取我的分销员 public function getMyDistributor() { $page = I('post.page') ? I('post.page') : 1; $limit = I('post.limit') ? I('post.limit') : 10; $search = I('post.search'); $uid = self::$uid; //用户id $merchant_id = self::$merchant_id; $DistributorModel = new DistributorModel(); $distributor_id = $this->verifyDistributor($uid, $merchant_id); if ($search) { $where['dor.phone_number|rx.nickname'] = ['like', "%{$search}%"];; } $where['dor.pid'] = $distributor_id; $where['dor.merchant_id'] = $merchant_id; $where['dor.status'] = 0; $field = [ 'dor.id as distributor_id', 'dor.phone_number', 'dor.uid', 'dor.add_time', 'rx.nickname', 'rx.avatar', ]; $partnerList = $DistributorModel->getMyDistributor($where, $field, $page, $limit, 'dor.id desc'); if ($partnerList['list']) { foreach ($partnerList['list'] as &$value) { $value['add_time'] = date('Y-m-d H:i:s', $value['add_time']); } $res['status'] = 1; $res['msg'] = '数据获取成功!'; $res['data'] = $partnerList; } else { $res['status'] = 1; $res['msg'] = '暂无数据!'; $res['data'] = []; } $this->ajaxReturn($res); } /* ******************************************* 我的信息 End ******************************************** */ /* ******************************************* 提现相关Start ******************************************** */ // 获取提现基本信息 public function getWithdrawalConfig() { $ConfigModel = new ConfigModel(); $cMap = array( 'merchant_id' => I('post.merchant_id'), ); $min_withdrawal_money = $ConfigModel->getFindField($cMap, 'withdrawal_money'); $dMap = array( 'uid' => I('post.uid'), 'status' => 0, ); $DistributorModel = new DistributorModel(); $settable_amount = $DistributorModel->getFindField($dMap, 'settable_amount'); $this->ajaxReturn(array( 'status' => 1, 'msg' => '获取成功', 'data' => array( 'min_withdrawal_money' => $min_withdrawal_money, 'settable_amount' => $settable_amount, ), )); } // 提现账户设置 public function updateWithdrawalAccount() { $msg_arr['name'] = I('post.name'); $msg_arr['account'] = I('post.account'); $uid = self::$uid; //用户id $merchant_id = self::$merchant_id; $DistributorModel = new DistributorModel(); if (!$msg_arr['name'] || !$msg_arr['account']) { $res['status'] = 1; $res['msg'] = '必要参数缺失!'; $this->ajaxReturn($res); } $msg = json_encode($msg_arr); $result = $DistributorModel->updateOrder(['merchant_id' => $merchant_id, 'uid' => $uid], ['alipay_msg' => $msg]); if ($result) { $res['status'] = 1; $res['msg'] = '操作成功'; } else { $res['status'] = 0; $res['msg'] = '操作失败,请稍后!'; } $this->ajaxReturn($res); } // 申请提现 public function userApplyWithdrawal() { $way = I('post.withdrawal_way'); $money = I('post.withdrawal_money'); $uid = self::$uid; //用户id $merchant_id = self::$merchant_id; $WithdrawalModel = new WithdrawalModel(); $DistributorModel = new DistributorModel(); $ConfigModel = new ConfigModel(); $distributor_id = $this->verifyDistributor($uid, $merchant_id); if (!in_array($way, [0, 1, 2])) { $res['status'] = 0; $res['msg'] = '请选择正确的提现账户!'; $this->ajaxReturn($res); } // 账户信息验证(未完成) if ($way == 1) { $alipay = $DistributorModel->getFind(['id' => $distributor_id], 'alipay_msg'); if (!$alipay) { $res['status'] = 0; $res['msg'] = '支付宝账号未设置!'; $this->ajaxReturn($res); } $alipay_arr = json_decode($alipay['alipay_msg'], true); if (!$alipay_arr['name'] || !$alipay_arr['account']) { $res['status'] = 1; $res['msg'] = '账号信息错误!'; $this->ajaxReturn($res); } } if (!verifyPrice($money)) { $res['status'] = 0; $res['msg'] = '请填写正确的金额!'; $this->ajaxReturn($res); } // 金额判断 (用户金额是否足够-未完成) $minMoney = $ConfigModel->getFind(['merchant_id' => $merchant_id], 'withdrawal_money'); if ($minMoney['withdrawal_money']) { if ($money < $minMoney['withdrawal_money']) { $res['status'] = 0; $res['msg'] = '提现金额过低,请重新输入!'; $this->ajaxReturn($res); } } // 用户金额是否满足 $usrMoney = $DistributorModel->getFindField(['id' => $distributor_id], 'settable_amount'); if ($usrMoney < $money) { $res['status'] = 0; $res['msg'] = '您的余额不足!'; $this->ajaxReturn($res); } $config = $ConfigModel->getFind(['merchant_id' => $merchant_id], 'clearing_form'); if ($config['clearing_form'] == 1) { $data['status'] = 0; } else { $data['status'] = 2; // 无需审核 } $data['withdrawal_way'] = $way; $data['withdrawal_money'] = $money; $data['merchant_id'] = $merchant_id; $data['distributor_id'] = $distributor_id; $data['add_time'] = time(); $result = $WithdrawalModel->addOrder($data); if ($result) { // 用户资金冻结 $DistributorModel->toSetDec(['id' => $distributor_id], 'settable_amount', $money); if ($config['clearing_form'] == 0) { // 自动打款 if ($way == 1) { // 支付宝打款 } else { // 微信打款 $remitRes = $WithdrawalModel->remitPay($result, $merchant_id); if ($remitRes['status'] == 0) { $this->failAjaxReturn($remitRes['msg']); } } } else { } $this->successAjaxReturn('提现申请成功!', ['status' => $data['status']]); } else { $this->failAjaxReturn('申请失败,请稍后重试!!', []); } } // 提现记录 public function userWithdrawalRecord() { $page = I('post.page') ? I('post.page') : 1; $limit = I('post.limit') ? I('post.limit') : 10; $uid = self::$uid; $merchant_id = self::$merchant_id; $WithdrawalModel = new WithdrawalModel(); $distributor_id = $this->verifyDistributor($uid, $merchant_id); $where = [ 'merchant_id' => $merchant_id, 'distributor_id' => $distributor_id ]; $field = [ 'withdrawal_way', 'withdrawal_money', 'withdrawal_json', 'status', 'state', 'add_time', ]; $applyList['list'] = $WithdrawalModel->getSelect($where, $field, 'id DESC', $page . ',' . $limit); $applyList['count'] = $WithdrawalModel->getCount($where); if ($applyList['count']) { foreach ($applyList['list'] as &$value) { $value['add_time'] = date('Y-m-d H:i:s', $value['add_time']); // $value['withdrawal_way'] = '微信支付'; // if($value['state'] == 0){ // $value['state'] = '未打款'; // } else if($value['state'] == 1){ // $value['state'] = '已到账'; // } else { // $value['state'] = '打款中'; // } // 账号信息结算 // $value['withdrawal_account'] = json_decode($value['withdrawal_json'], true); // unset($value['withdrawal_json']); } $res['status'] = 1; $res['msg'] = '数据获取成功!'; $res['data'] = $applyList; } else { $res['status'] = 1; $res['msg'] = '暂无数据,请稍后重试!'; $res['data'] = []; } $this->ajaxReturn($res); } /* ******************************************* 提现相关End ******************************************** */ /* ******************************************* 商品Start ******************************************** */ // 获取分销商品 public function getDistributionGoods() { $page = I('post.page') ? I('post.page') : 1; $limit = I('post.limit') ? I('post.limit') : 10; $search = I('post.search'); $uid = self::$uid; //用户id $merchant_id = self::$merchant_id; $StoreModel = new StoreModel(); $RetailStoreModel = new RetailStoreModel(); $DistributorModel = new DistributorModel(); $distributor_id = $this->verifyDistributor($uid, $merchant_id); if ($search) { $where['rg.goods_name'] = ['like', "%{$search}%"]; } $storeIdArr = $RetailStoreModel->getFindField(['merchantid' => $merchant_id, 'state' => 0], 'id', true); $where['ds.merchant_id'] = $merchant_id; $where['ds.goods_status'] = 1; $where['rg.store_id'] = ['in', $storeIdArr]; $where['rg.status'] = 0; $where['rg.online_state'] = 1; $field = [ 'ds.goods_id as id', 'ds.first_proportion', 'rg.goods_name', 'rg.store_id', 'rg.online_price', 'rg.goods_img_id' ]; $goodsList = $StoreModel->getDistributionGoods($where, $field, $page, $limit, 'ds.id desc'); // 获取我的佣金比例 $proportion = $DistributorModel->getUserPresent($distributor_id); if ($goodsList['list']) { foreach ($goodsList['list'] as &$value) { if ($value['first_proportion']) { $value['self_proportion'] = bcmul($value['online_price'], $value['first_proportion'], 2); } else { $value['self_proportion'] = bcmul($value['online_price'], $proportion, 2); } $value['retail_price'] = $value['online_price']; $value['goods_img'] = getGoodsImage($value['goods_img_id'], self::$store_id); unset($value['goods_img_id']); } $res['status'] = 1; $res['msg'] = '数据获取成功!'; $res['data'] = $goodsList; } else { $res['status'] = 1; $res['msg'] = '还没有分销商品哦!'; $res['data'] = []; } $this->ajaxReturn($res); } /** * 商品分销佣金返回值 * @param uid 小程序用户id * @param goods_id 商品id * @param price 商品价格 */ public function disStorePropReturn($uid, $goods_id, $price) { $StoreModel = new StoreModel(); $DistributorModel = new DistributorModel(); $distributor_id = $DistributorModel->getFindField(['uid' => $uid, 'status' => 0], 'id'); if ($distributor_id) { // 获取我的佣金比例 $proportion = $DistributorModel->getUserPresent($distributor_id); // 判断当前商品是否为分销商品 $storeMap = [ 'goods_id' => $goods_id, 'goods_status' => ['neq', 2], ]; $distriStoreInfo = $StoreModel->getFind($storeMap, 'id,first_proportion'); if (!$distriStoreInfo['id']) return ['status' => 4, 'disStoreProp' => NULL]; if (empty($price)) { //价格 return ['status' => 2, 'disStoreProp' => NULL]; } else { if (!empty($distriStoreInfo['first_proportion'])) { $prop = $distriStoreInfo['first_proportion']; } else { $prop = $proportion; } $disStoreProp = bcmul($price, $prop, 2); if ($disStoreProp < 0.01) { return ['status' => 5, 'disStoreProp' => NULL]; } else { return ['status' => 1, 'disStoreProp' => $disStoreProp]; } } } else { //非分销用户 return ['status' => 3, 'disStoreProp' => NULL]; } } /* ******************************************* 下面是一些方法 ******************************************** */ private function verifyDistributor($uid, $merchant_id) { $DistributorModel = new DistributorModel(); $distributor_id = $DistributorModel->verifyUserDistributor($uid, $merchant_id); if ($distributor_id) { return $distributor_id; } else { $res['status'] = 0; $res['msg'] = 'Authentication failed,Please try again!'; $res['data'] = array( 'status' => $uid ? 1 : 0, //1不是分销员是普通用户 0不是分销员并且未登录 ); $this->ajaxReturn($res); } } // 错误提示 private function failAjaxReturn($msg, $data = '') { $res['status'] = 0; $res['msg'] = $msg; $res['data'] = $data; $this->ajaxReturn($res); } // 成功 private function successAjaxReturn($msg, $data = '') { $res['status'] = 1; $res['msg'] = $msg; $res['data'] = $data; $this->ajaxReturn($res); } }