| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751 |
- <?php
- /**
- * Niushop商城系统 - 团队十年电商经验汇集巨献!
- * =========================================================
- * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
- * ----------------------------------------------
- * 官方网址: https://www.niushop.com
- * =========================================================
- */
- namespace addon\fenxiao\model;
- use addon\fenxiao\model\Config as ConfigModel;
- use app\model\BaseModel;
- use app\model\member\Member;
- use app\model\order\OrderCommon;
- use app\model\system\Stat;
- /**
- * 分销
- */
- class Fenxiao extends BaseModel
- {
- public $fenxiao_status_zh = [
- 1 => '正常',
- -1 => '冻结',
- ];
- /**
- * 添加分销商
- * @param $data
- * @return mixed
- */
- public function addFenxiao($data)
- {
- $fenxiao_info = model('fenxiao')->getInfo(
- [ [ 'member_id', '=', $data[ 'member_id' ] ], [ 'is_delete', '=', 0 ] ],
- 'fenxiao_id'
- );
- if (!empty($fenxiao_info)) return $this->error('', '已经是分销商了');
- $data[ 'fenxiao_no' ] = date('YmdHi') . rand(1000, 9999);
- $data[ 'create_time' ] = time();
- $data[ 'audit_time' ] = time();
- model('fenxiao')->startTrans();
- try {
- if (!empty($data[ 'parent' ])) {
- //添加上级分销商一级下线人数
- model('fenxiao')->setInc([ [ 'fenxiao_id', '=', $data[ 'parent' ] ], [ 'is_delete', '=', 0 ] ], 'one_child_fenxiao_num');
- //获取上上级分销商id
- $grand_parent_id = model('fenxiao')->getInfo([ [ 'fenxiao_id', '=', $data[ 'parent' ] ], [ 'is_delete', '=', 0 ] ], 'parent');
- if (!empty($grand_parent_id) && $grand_parent_id[ 'parent' ] != 0) {
- //添加上上级分销商二级下线人数
- model('fenxiao')->setInc([ [ 'fenxiao_id', '=', $grand_parent_id[ 'parent' ] ] ], 'two_child_fenxiao_num');
- $data[ 'grand_parent' ] = $grand_parent_id[ 'parent' ];
- }
- // 分销商检测升级
- event('FenxiaoUpgrade', $data[ 'parent' ]);
- }
- $res = model('fenxiao')->add($data);
- //修改会员信息
- model('member')->update([ 'fenxiao_id' => $res, 'is_fenxiao' => 1 ], [ [ 'member_id', '=', $data[ 'member_id' ] ] ]);
- $stat_model = new Stat();
- $stat_model->switchStat([ 'type' => 'add_fenxiao_member', 'data' => [ 'site_id' => $data[ 'site_id' ] ] ]);
- model('fenxiao')->commit();
- return $this->success($res);
- } catch (\Exception $e) {
- model('fenxiao')->rollback();
- return $this->error('', $e->getMessage());
- }
- }
- /**
- * 冻结
- * @param $fenxiao_id
- * @return array
- */
- public function frozen($fenxiao_id)
- {
- $data = [
- 'status' => -1,
- 'lock_time' => time()
- ];
- $res = model('fenxiao')->update($data, [ [ 'fenxiao_id', '=', $fenxiao_id ] ]);
- return $this->success($res);
- }
- /**
- * 解冻
- * @param $fenxiao_id
- * @return array
- */
- public function unfrozen($fenxiao_id)
- {
- $data = [
- 'status' => 1,
- 'lock_time' => time()
- ];
- $res = model('fenxiao')->update($data, [ [ 'fenxiao_id', '=', $fenxiao_id ] ]);
- return $this->success($res);
- }
- /**
- * 获取分销商详细信息
- * @param array $condition
- * @param string $field
- * @return array
- */
- public function getFenxiaoInfo($condition = [], $field = '*')
- {
- $condition[] = [ 'is_delete', '=', 0 ];
- $res = model('fenxiao')->getInfo($condition, $field);
- return $this->success($res);
- }
- /**
- * 获取分销商详细信息
- * @param array $condition
- * @param string $field
- * @return array
- */
- public function getFenxiaoDetailInfo($condition = [])
- {
- $condition[] = [ 'f.is_delete', '=', 0 ];
- $field = 'f.*,pf.fenxiao_name as parent_name,nm.username,nm.nickname,nm.headimg,nm.order_num,nm.order_money,fl.level_num';
- $alias = 'f';
- $join = [
- [
- 'fenxiao pf',
- 'pf.fenxiao_id = f.parent',
- 'left'
- ],
- [
- 'member nm',
- 'nm.member_id = f.member_id',
- 'left'
- ],
- [
- 'fenxiao_level fl',
- 'f.level_id = fl.level_id',
- 'left'
- ]
- ];
- $res = model('fenxiao')->getInfo($condition, $field, $alias, $join);
- return $this->success($res);
- }
- /**
- * 获取分销列表
- * @param array $condition
- * @param string $field
- * @param string $order
- * @param string $limit
- */
- public function getFenxiaoList($condition = [], $field = '*', $order = '', $limit = null)
- {
- $condition[] = [ 'is_delete', '=', 0 ];
- $list = model('fenxiao')->getList($condition, $field, $order, '', '', '', $limit);
- return $this->success($list);
- }
- /**
- * 获取分销分页列表
- * @param array $condition
- * @param number $page
- * @param string $page_size
- * @param string $order
- * @param string $field
- */
- public function getFenxiaoPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '')
- {
- $condition[] = [ 'f.is_delete', '=', 0 ];
- $field = 'f.*,pf.fenxiao_name as parent_name,m.username,m.nickname,m.mobile as member_mobile,m.headimg';
- $alias = 'f';
- $join = [
- [
- 'fenxiao pf',
- 'pf.fenxiao_id = f.parent',
- 'left'
- ],
- [
- 'member m',
- 'm.member_id = f.member_id',
- 'left'
- ]
- ];
- $list = model('fenxiao')->pageList($condition, $field, $order, $page, $page_size, $alias, $join);
- if (!empty($list[ 'list' ])) {
- foreach ($list[ 'list' ] as $k => $v) {
- $team_num = $this->getFenxiaoTeamNum($v[ 'fenxiao_id' ], $v[ 'site_id' ]);
- $list[ 'list' ][ $k ][ 'team_num' ] = $team_num[ 'data' ][ 'num' ];
- // if (empty($v['username'])) $list['list'][$k]['username'] = '--';
- // if (empty($v['nickname'])) $list['list'][$k]['nickname'] = '--';
- // if (empty($v['member_mobile'])) $list['list'][$k]['member_mobile'] = '--';
- }
- }
- return $this->success($list);
- }
- /**
- * 获取分销分页列表2
- * @param array $condition
- * @param int $page
- * @param int $page_size
- * @param string $order
- * @param string $field
- * @return array
- */
- public function getFenxiaoPageLists($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*', $alias = 'a', $join = null)
- {
- $list = model('fenxiao')->pageList($condition, $field, $order, $page, $page_size, $alias, $join, '');
- return $this->success($list);
- }
- /**
- * 获取分销商团队
- * @param $level
- * @param $fenxiao_id
- * @param int $page
- * @param int $page_size
- * @param int $is_pay
- * @return array
- */
- public function getFenxiaoTeam($level, $fenxiao_id, $page = 1, $page_size = PAGE_LIST_ROWS, $is_pay = 0)
- {
- $condition = '';
- // 下级分销商id集合
- $one_level_fenxiao = model('fenxiao')->getColumn([ [ 'parent', '=', $fenxiao_id ] ], 'fenxiao_id');
- switch ( $level ) {
- // 一级分销
- case 1:
- // 直属会员 + 直属下级分销商
- $or = " OR (f.parent = {$fenxiao_id}) ";
- $condition = "( (m.fenxiao_id = {$fenxiao_id} AND m.is_fenxiao = 0) " . $or . ") AND m.is_delete = 0";
- break;
- // 二级分销
- case 2:
- // 直属下级分销商的下级分销商 + 直属下级分销商的会员
- if (!empty($one_level_fenxiao)) {
- $or = " OR (f.parent in (" . implode($one_level_fenxiao) . ") ) ";
- $condition = "( (m.is_fenxiao = 0 AND m.fenxiao_id in (" . implode(',', $one_level_fenxiao) . ") )" . $or . ") AND m.is_delete = 0";
- }
- break;
- }
- if (empty($condition)) return $this->success([
- 'page_count' => 1,
- 'count' => 0,
- 'list' => []
- ]);
- if ($is_pay) $condition .= ' AND m.order_num > 0';
- $condition .= '';
- $field = 'm.member_id,m.nickname,m.headimg,m.is_fenxiao,m.reg_time,m.order_money,m.order_complete_money,m.order_num,m.order_complete_num,m.bind_fenxiao_time,f.fenxiao_id,f.fenxiao_no,f.fenxiao_name,f.audit_time,f.level_name,f.one_child_num,f.one_child_fenxiao_num';
- $alias = 'm';
- $join = [
- [ 'fenxiao f', 'm.member_id = f.member_id', 'left' ]
- ];
- $list = model('member')->pageList($condition, $field, 'm.bind_fenxiao_time desc', $page, $page_size, $alias, $join);
- return $this->success($list);
- }
- /**
- * 查询我的团队的数量
- * @param unknown $fenxiao_id
- * @return array
- */
- public function getFenxiaoTeamNum($fenxiao_id, $site_id)
- {
- // 查询分销基础配置
- $config_model = new Config();
- $fenxiao_basic_config = $config_model->getFenxiaoBasicsConfig($site_id)[ 'data' ][ 'value' ];
- $level = $fenxiao_basic_config[ 'level' ];
- $num = model('member')->getCount([ [ 'fenxiao_id', '=', $fenxiao_id ], [ 'is_fenxiao', '=', 0 ], [ 'is_delete', '=', 0 ] ]);
- // 下级分销商id集合
- $one_level_fenxiao = model('fenxiao')->getColumn([ [ 'parent', '=', $fenxiao_id ], [ 'is_delete', '=', 0 ] ], 'fenxiao_id');
- $return = [
- 'num' => $num, // 总人数
- 'member_num' => $num, // 会员人数
- 'fenxiao_num' => 0 // 分销商人数
- ];
- switch ( $level ) {
- case 1:
- $return[ 'num' ] += count($one_level_fenxiao);
- $return[ 'fenxiao_num' ] += count($one_level_fenxiao);
- break;
- case 2:
- if (!empty($one_level_fenxiao)) {
- $return[ 'num' ] += count($one_level_fenxiao);
- $return[ 'fenxiao_num' ] += count($one_level_fenxiao);
- $num = model('member')->getCount([ [ 'fenxiao_id', 'in', $one_level_fenxiao ], [ 'is_fenxiao', '=', 0 ], [ 'is_delete', '=', 0 ] ]);
- $return[ 'num' ] += $num;
- $return[ 'member_num' ] += $num;
- $num = model('fenxiao')->getCount([ [ 'parent', 'in', $one_level_fenxiao ], [ 'is_delete', '=', 0 ] ], 'fenxiao_id');
- $return[ 'num' ] += $num;
- $return[ 'fenxiao_num' ] += $num;
- }
- break;
- }
- return $this->success($return);
- }
- /**
- * 会员注册之后
- * @param unknown $member_id
- */
- public function memberRegister($member_id, $site_id)
- {
- //如果有推荐人则要修改分享关系
- $member_model = new Member();
- $member_info = $member_model->getMemberInfo([ [ 'member_id', '=', $member_id ] ], 'source_member')[ 'data' ];
- if (!empty($member_info[ 'source_member' ])) {
- $member_model->alterShareRelation($member_id, $member_info[ 'source_member' ], $site_id);
- }
- $this->autoBecomeFenxiao($member_id, $site_id);
- }
- /**
- * 自动成为分销商
- * @param unknown $member_id
- */
- public function autoBecomeFenxiao($member_id, $site_id)
- {
- $member_info = model('member')->getInfo([ [ 'member_id', '=', $member_id ], [ 'site_id', '=', $site_id ], [ 'is_delete', '=', 0 ] ], 'order_num,order_complete_num,order_money,order_complete_money,is_fenxiao');
- if (empty($member_info)) return $this->error('', '未查询到会员信息');
- $fenxiao_info = $this->getFenxiaoDetailInfo([ [ 'f.member_id', '=', $member_id ] ])[ 'data' ];
- if (!empty($fenxiao_info) && $member_info[ 'is_fenxiao' ]) return $this->error('', '已经是分销商');
- try {
- $config = new Config();
- // 分销商基础设置
- $basics_config = $config->getFenxiaoBasicsConfig($site_id);
- $basics_config = $basics_config[ 'data' ][ 'value' ];
- if (!$basics_config[ 'level' ]) return $this->error('', '未开启分销');
- if ($basics_config[ 'is_apply' ] != 0) return $this->error('', '成为分销商需进行申请');
- // 成为分销商的资格
- $fenxiao_config = $config->getFenxiaoConfig($site_id);
- $fenxiao_config = $fenxiao_config[ 'data' ][ 'value' ];
- switch ( $fenxiao_config[ 'fenxiao_condition' ] ) {
- case 2:
- // 消费次数
- if ($fenxiao_config[ 'consume_condition' ] == 1 && $member_info[ 'order_num' ] < $fenxiao_config[ 'consume_count' ]) return $this->error('', '未满足成为分销商的条件');
- if ($fenxiao_config[ 'consume_condition' ] == 2 && $member_info[ 'order_complete_num' ] < $fenxiao_config[ 'consume_count' ]) return $this->error('', '未满足成为分销商的条件');
- break;
- case 3:
- // 消费金额
- if ($fenxiao_config[ 'consume_condition' ] == 1 && bccomp($member_info[ 'order_money' ], $fenxiao_config[ 'consume_money' ], 2) == -1) return $this->error('', '未满足成为分销商的条件');
- if ($fenxiao_config[ 'consume_condition' ] == 2 && bccomp($member_info[ 'order_complete_money' ], $fenxiao_config[ 'consume_money' ], 2) == -1) return $this->error('', '未满足成为分销商的条件');
- break;
- case 4:
- // 购买指定商品
- $condition = [
- [ 'goods_id', 'in', $fenxiao_config[ 'goods_ids' ] ],
- ];
- if ($fenxiao_config[ 'consume_condition' ] == 1) $condition[] = [ 'pay_status', '=', 1 ];
- if ($fenxiao_config[ 'consume_condition' ] == 2) $condition[] = [ 'order_status', '=', OrderCommon::ORDER_COMPLETE ];
- $count = model('order_goods')->getCount($condition, 'order_goods_id', 'og', [ [ 'order o', 'o.order_id = og.order_id', 'inner' ] ]);
- if (!$count) return $this->error('', '未满足成为分销商的条件');
- break;
- }
- return $this->directlyBecomeFenxiao($member_id);
- } catch (\Exception $e) {
- return $this->error();
- }
- }
- /**
- * 会员直接成为分销商
- */
- private function directlyBecomeFenxiao($member_id)
- {
- //获取用户信息
- $member_field = 'member_id,site_id,source_member,fenxiao_id,nickname,headimg,mobile,reg_time,order_money,order_complete_money,order_num,order_complete_num';
- $member_info = model('member')->getInfo([ [ 'member_id', '=', $member_id ] ], $member_field);
- if (!empty($member_info)) {
- $parent = 0;
- if (!empty($member_info[ 'source_member' ])) {
- $fenxiao_info = model('fenxiao')->getInfo([ [ 'member_id', '=', $member_info[ 'source_member' ] ], [ 'is_delete', '=', 0 ] ], 'fenxiao_id');
- if (!empty($fenxiao_info)) $parent = $fenxiao_info[ 'fenxiao_id' ];
- }
- if(!empty($member_info[ 'fenxiao_id' ])){
- $fenxiao_info = model('fenxiao')->getInfo([ [ 'member_id', '=', $member_info[ 'source_member' ] ], [ 'is_delete', '=', 0 ] ], 'fenxiao_id');
- if (!empty($fenxiao_info)) $parent = $fenxiao_info[ 'fenxiao_id' ];
- }
-
- //获取分销等级信息
- $level_model = new FenxiaoLevel();
- $level_info = $level_model->getLevelInfo([ [ 'site_id', '=', $member_info[ 'site_id' ] ], [ 'is_default', '=', 1 ] ], 'level_id,level_name');
- $data = [
- 'site_id' => $member_info[ 'site_id' ],
- 'fenxiao_name' => $member_info[ 'nickname' ],
- 'mobile' => $member_info[ 'mobile' ],
- 'member_id' => $member_info[ 'member_id' ],
- 'parent' => $parent,
- 'level_id' => $level_info[ 'data' ][ 'level_id' ],
- 'level_name' => $level_info[ 'data' ][ 'level_name' ]
- ];
- $res = $this->addFenxiao($data);
- return $res;
- }
- }
- /**
- * 绑定上下线关系
- * TODO 订单创建对返回结果进行检测 不可返回失败
- * @param $param
- * @return array|void
- */
- public function bindRelation($param)
- {
- $site_id = $param[ 'site_id' ] ?? 0;
- $member_id = $param[ 'member_id' ] ?? 0;
- $action = $param[ 'action' ] ?? '';
- $config = [
- 'alter_share_relation' => 1,//对应 首次点击链接后绑定
- 'order_create' => 2,//对应 首次下单后绑定
- 'order_pay' => 3,//对应 首次付款后绑定
- ];
- if (!isset($config[ $action ])) return;
- //检测触发场景和设置是否匹配
- $config_model = new ConfigModel();
- $child_condition = $config_model->getFenxiaoRelationConfig($site_id)[ 'data' ][ 'value' ][ 'child_condition' ];
- if ($child_condition != $config[ $action ]) return;
- //检测用户
- $member_info = model('member')->getInfo([
- [ 'member_id', '=', $member_id ],
- ], 'share_member,fenxiao_id');
- if (empty($member_info)) return;
- //如果已经是分销商 不可以再修改关系
- if (!empty($member_info[ 'fenxiao_id' ])) return;
- // 查询推荐人是否是分销商
- $fenxiao_info = model('fenxiao')->getInfo([
- [ 'member_id', '=', $member_info[ 'share_member' ] ],
- [ 'is_delete', '=', 0 ],
- ], 'fenxiao_id');
- if (empty($fenxiao_info)) return;
- model('member')->startTrans();
- try {
- $member_data = [
- 'fenxiao_id' => $fenxiao_info[ 'fenxiao_id' ],
- 'bind_fenxiao_time' => time()
- ];
- model('member')->update($member_data, [ [ 'member_id', '=', $member_id ] ]);
- model('fenxiao')->setInc([ [ 'fenxiao_id', '=', $fenxiao_info[ 'fenxiao_id' ] ] ], 'one_child_num');
- // 分销商检测升级
- event('FenxiaoUpgrade', $fenxiao_info[ 'fenxiao_id' ]);
- model('member')->commit();
- return $this->success();
- } catch (\Exception $e) {
- model('member')->rollback();
- return;
- }
- }
- /**
- * 分销商检测升级
- * @param unknown $fenxiao_id
- */
- public function fenxiaoUpgrade($fenxiao_id)
- {
- $join = [
- [ 'member m', 'f.member_id = m.member_id', 'inner' ],
- [ 'fenxiao_level fl', 'f.level_id = fl.level_id', 'inner' ]
- ];
- $fenxiao_info = model('fenxiao')->getInfo([ [ 'f.fenxiao_id', '=', $fenxiao_id ], [ 'f.status', '=', 1 ], [ 'f.is_delete', '=', 0 ] ], 'f.level_id,m.order_num,m.order_money,f.one_fenxiao_order_num,f.one_fenxiao_order_money,f.one_fenxiao_total_order,f.one_child_num,f.one_child_fenxiao_num,fl.one_rate,fl.level_num,f.site_id', 'f', $join);
- if (!empty($fenxiao_info)) {
- $level_list = model('fenxiao_level')->getList([ [ 'site_id', '=', $fenxiao_info[ 'site_id' ] ], [ 'level_num', '>', $fenxiao_info[ 'level_num' ] ] ], '*', 'level_num asc,one_rate asc');
- if (!empty($level_list)) {
- $upgrade_level = null;
- foreach ($level_list as $item) {
- if ($item[ 'upgrade_type' ] == 2) {
- if ($fenxiao_info[ 'order_num' ] >= $item[ 'order_num' ] && $fenxiao_info[ 'order_money' ] >= $item[ 'order_money' ] && $fenxiao_info[ 'one_fenxiao_order_num' ] >= $item[ 'one_fenxiao_order_num' ] && $fenxiao_info[ 'one_fenxiao_total_order' ] >= $item[ 'one_fenxiao_total_order' ] && $fenxiao_info[ 'one_fenxiao_order_money' ] >= $item[ 'one_fenxiao_order_money' ] && $fenxiao_info[ 'one_child_num' ] >= $item[ 'one_child_num' ] && $fenxiao_info[ 'one_child_fenxiao_num' ] >= $item[ 'one_child_fenxiao_num' ]) {
- $upgrade_level = $item;
- break;
- }
- } else {
- if (( $fenxiao_info[ 'order_num' ] >= $item[ 'order_num' ] && $item[ 'order_num' ] > 0 ) || ( $fenxiao_info[ 'order_money' ] >= $item[ 'order_money' ] && $item[ 'order_money' ] > 0 ) || ( $fenxiao_info[ 'one_fenxiao_order_num' ] >= $item[ 'one_fenxiao_order_num' ] && $item[ 'one_fenxiao_order_num' ] > 0 ) || ( $fenxiao_info[ 'one_fenxiao_order_money' ] >= $item[ 'one_fenxiao_order_money' ] && $item[ 'one_fenxiao_order_money' ] > 0 ) || ( $fenxiao_info[ 'one_fenxiao_total_order' ] >= $item[ 'one_fenxiao_total_order' ] && $item[ 'one_fenxiao_total_order' ] > 0 ) || ( $fenxiao_info[ 'one_child_num' ] >= $item[ 'one_child_num' ] && $item[ 'one_child_num' ] > 0 ) || ( $fenxiao_info[ 'one_child_fenxiao_num' ] >= $item[ 'one_child_fenxiao_num' ] && $item[ 'one_child_fenxiao_num' ] > 0 )) {
- $upgrade_level = $item;
- break;
- }
- }
- }
- if ($upgrade_level) {
- model('fenxiao')->update([ 'level_id' => $upgrade_level[ 'level_id' ], 'level_name' => $upgrade_level[ 'level_name' ] ], [ [ 'fenxiao_id', '=', $fenxiao_id ] ]);
- }
- }
- }
- }
- /**
- * 获取下一个可升级的分销商等级 及当前分销商已达成的条件
- * @param $member_id
- * @param $site_id
- */
- public function geFenxiaoNextLevel($member_id, $site_id)
- {
- $array = [];
- $join = [
- [ 'member m', 'f.member_id = m.member_id', 'inner' ],
- [ 'fenxiao_level fl', 'f.level_id = fl.level_id', 'inner' ]
- ];
- $fenxiao_info = model('fenxiao')->getInfo(
- [ [ 'f.member_id', '=', $member_id ], [ 'f.site_id', '=', $site_id ], [ 'f.status', '=', 1 ], [ 'f.is_delete', '=', 0 ] ],
- 'f.level_id,m.order_num,m.order_money,f.one_fenxiao_order_num,f.one_fenxiao_order_money,f.one_child_num,f.one_child_fenxiao_num,fl.one_rate,fl.level_num', 'f', $join
- );
- $array[ 'fenxiao' ] = $fenxiao_info;
- $last_level = [];
- if (!empty($fenxiao_info)) {
- $last_level = model('fenxiao_level')->getFirstData([ [ 'site_id', '=', $site_id ], [ 'level_num', '>=', $fenxiao_info[ 'level_num' ] ], [ 'level_id', '<>', $fenxiao_info[ 'level_id' ] ] ], '*', 'level_num asc,one_rate asc');
- }
- $array[ 'last_level' ] = $last_level;
- return $this->success($array);
- }
- /**
- * 变更上下级关系
- * @param $member_id
- * @param $parent
- */
- public function changeParentFenxiao($member_id, $parent)
- {
- if ($member_id == '' || $member_id == 0) {
- return $this->error('', '参数member_id不能为空');
- }
- if ($parent == '' || $parent == 0) {
- return $this->error('', '上级分销商不能为空');
- }
- //获取上级分销商id
- $parent_info = model('fenxiao')->getInfo([ [ 'fenxiao_id', '=', $parent ], [ 'is_delete', '=', 0 ] ]);
- if (empty($parent_info)) {
- return $this->error('', '上级分销商不存在');
- }
- //用户信息
- $member_info = model('member')->getInfo([ [ 'member_id', '=', $member_id ] ], 'fenxiao_id,is_fenxiao');
- if (empty($member_info)) {
- return $this->error('', '用户不存在');
- }
- model('fenxiao')->startTrans();
- try {
- if ($member_info[ 'is_fenxiao' ] == 1) {//是分销商
- $fenxiao_info = model('fenxiao')->getInfo([ [ 'fenxiao_id', '=', $member_info[ 'fenxiao_id' ] ], [ 'is_delete', '=', 0 ] ], 'parent');
- //修改原有上级分销商团队人数
- if ($fenxiao_info[ 'parent' ] > 0) {
- //获取原有上级分销商信息
- model('fenxiao')->setDec([ [ 'fenxiao_id', '=', $fenxiao_info[ 'parent' ] ] ], 'one_child_fenxiao_num');
- }
- //修改变更后的上级分销商团队人数
- model('fenxiao')->setInc([ [ 'fenxiao_id', '=', $parent ] ], 'one_child_fenxiao_num');
- //修改上级分销商
- model('fenxiao')->update([ 'parent' => $parent, 'grand_parent' => $parent_info[ 'parent' ] ], [ [ 'fenxiao_id', '=', $member_info[ 'fenxiao_id' ] ] ]);
- } else {//不是分销商
- //修改上级分销商
- model('member')->update([ 'fenxiao_id' => $parent ], [ [ 'member_id', '=', $member_id ] ]);
- //修改变更后的上级分销商团队人数
- model('fenxiao')->update([ 'one_child_num' => $parent_info[ 'one_child_num' ] + 1 ], [ [ 'fenxiao_id', '=', $parent ] ]);
- }
- model('fenxiao')->commit();
- return $this->success();
- } catch (\Exception $e) {
- model('fenxiao')->rollback();
- return $this->error('', $e->getMessage());
- }
- }
- /**
- * 取消上级分销商
- * @param $member_id
- * @param $parent
- */
- public function cancelParentFenxiao($member_id)
- {
- if ($member_id == '' || $member_id == 0) {
- return $this->error('', '参数member_id不能为空');
- }
- //用户信息
- $member_info = model('member')->getInfo([ [ 'member_id', '=', $member_id ] ], 'fenxiao_id,is_fenxiao');
- if (empty($member_info)) {
- return $this->error('', '用户不存在');
- }
- model('fenxiao')->startTrans();
- try {
- if ($member_info[ 'is_fenxiao' ] == 1) {//是分销商
- $fenxiao_info = model('fenxiao')->getInfo(
- [ [ 'fenxiao_id', '=', $member_info[ 'fenxiao_id' ] ], [ 'is_delete', '=', 0 ] ],
- 'parent'
- );
- //修改原有上级分销商团队人数
- if ($fenxiao_info[ 'parent' ] > 0) {
- //获取原有上级分销商信息
- model('fenxiao')->setDec([ [ 'fenxiao_id', '=', $fenxiao_info[ 'parent' ] ] ], 'one_child_fenxiao_num');
- }
- //修改上级分销商
- model('fenxiao')->update([ 'parent' => '0' ], [ [ 'fenxiao_id', '=', $member_info[ 'fenxiao_id' ] ] ]);
- }
- model('fenxiao')->commit();
- return $this->success();
- } catch (\Exception $e) {
- model('fenxiao')->rollback();
- return $this->error('', $e->getMessage());
- }
- }
- /**
- * 获取上级分销商名称
- * @param $fenxiao_id
- * @param int $type 1-上级
- * @return mixed|string
- */
- public function getParentFenxiaoName($fenxiao_id, $type = 1)
- {
- if ($fenxiao_id == 0) {
- return '';
- }
- if ($type == 1) {
- $fenxiao_name = model('fenxiao')->getValue([ [ 'fenxiao_id', '=', $fenxiao_id ] ], 'fenxiao_name');
- return $fenxiao_name;
- } else {
- $parent = model('fenxiao')->getValue([ [ 'fenxiao_id', '=', $fenxiao_id ] ], 'parent');
- if ($parent == 0) {
- return '';
- } else {
- $fenxiao_name = model('fenxiao')->getValue([ [ 'fenxiao_id', '=', $parent ] ], 'fenxiao_name');
- return $fenxiao_name;
- }
- }
- }
- /**
- * 会员注销删除分销商
- * @param $member_id
- * @param $site_id
- * @return array
- */
- public function CronMemberCancel($member_id, $site_id)
- {
- $info = model('fenxiao')->getInfo([ [ 'member_id', '=', $member_id ], [ 'site_id', '=', $site_id ] ]);
- if (empty($info)) {
- return $this->success();
- }
- //冻结账户并删除
- $data = [
- 'status' => -1,
- 'lock_time' => time(),
- 'is_delete' => 1
- ];
- $res = model('fenxiao')->update($data, [ [ 'fenxiao_id', '=', $info[ 'fenxiao_id' ] ] ]);
- return $this->success($res);
- }
- /**
- * 变更分销商等级
- * @param array $condition
- * @param string $field
- * @param string $order
- * @param string $limit
- */
- public function changeFenxiaoLevel($data, $condition)
- {
- $result = model('fenxiao')->update($data, $condition);
- return $this->success($result);
- }
- /**
- * 获取分销等级分销商数量
- */
- public function getFenxiaoMemberCount($condition)
- {
- $condition[] = [ 'is_delete', '=', 0 ];
- $count = model('fenxiao')->getCount($condition);
- return $count;
- }
- /**
- * 获取分销商排名
- * @param $site_id
- * @param $fenxiao_id
- * @param $order
- * @return array
- */
- public function getFenxiaoRanking($site_id, $fenxiao_id, $order)
- {
- $prefix = config('database.connections.mysql.prefix');
- $version = model('fenxiao')->query('SELECT VERSION() as version')[ 0 ][ 'version' ];
- if (substr($version, 0, 1) == 8) {
- $query = "SELECT * FROM (select *,row_number() OVER(order by {$order} DESC) as rownum from {$prefix}fenxiao nf) AS f WHERE f.fenxiao_id = {$fenxiao_id}";
- } else {
- $query = "SELECT b.rownum FROM (SELECT t.*, @rownum := @rownum + 1 AS rownum FROM (SELECT @rownum := 0) r,(SELECT * FROM {$prefix}fenxiao WHERE site_id = {$site_id} ORDER BY {$order} DESC,fenxiao_id ASC) AS t) AS b WHERE b.fenxiao_id = {$fenxiao_id};";
- }
- $data = model('fenxiao')->query($query);
- $data = empty($data) ? 0 : $data[ 0 ][ 'rownum' ];
- return $this->success($data);
- }
- }
|