admin/addon/fenxiao/model/Fenxiao.php

765 lines
30 KiB
PHP

<?php
/**
* ThinkShop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 成都云之牛科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.cdcloudshop.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;
use think\facade\Db;
/**
* 分销
*/
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');
}
// 分销商检测升级
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' ] ] ]);
// 成为分销商后 赠送钻石操作
$basics = (new Config())->getFenxiaoBasicsConfig($data[ 'site_id' ])['data']['value'];
if((int)$res > 0 && ((float)$basics['newuser_points'] ?? 0) > 0){
(new FenxiaoAccount())->addAccount((int)$res, $data['fenxiao_name'], 'diamond', (float)$basics['newuser_points'], 0,'diamond', '新用户注册赠送');
}
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,pf.level_id as parent_level_id,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 int $level
* @param int $fenxiao_id
* @param number $page
* @param string $page_size
*/
public function getFenxiaoTeam($level, $fenxiao_id, $page = 1, $page_size = PAGE_LIST_ROWS, $is_pay = 0)
{
// 分销商内购
$basics_config = (new Config())->getFenxiaoBasicsConfig(request()->siteid())['data']['value'];
$self_purchase_rebate = $basics_config['self_purchase_rebate'];
$fenxiao_level = $basics_config['level'];
$condition = '';
$prefix = config("database")[ "connections" ][ "mysql" ][ "prefix" ];
// 下级分销商id集合
$one_level_fenxiao = model('fenxiao')->getColumn([ ['parent', '=', $fenxiao_id] ], 'fenxiao_id');
switch ( $level ) {
case 0:
$or = empty($one_level_fenxiao) || ($fenxiao_level == 1 && $self_purchase_rebate) ? '' : " OR (f.parent = {$fenxiao_id}) ";
$condition = "( (m.fenxiao_id = {$fenxiao_id} AND m.is_fenxiao = 0) ". $or .") AND m.is_delete = 0";
break;
case 1:
if (!empty($one_level_fenxiao)) {
// 是否开启分销商内购
if ($self_purchase_rebate) {
$condition = "m.is_fenxiao = 0 AND m.fenxiao_id in (". implode($one_level_fenxiao) .") AND m.is_delete = 0";
} else {
$two_level_fenxiao = model('fenxiao')->getColumn([ ['parent', '=', $fenxiao_id] ], 'fenxiao_id');
$or = empty($two_level_fenxiao) ? '' : " OR (f.grand_parent = {$fenxiao_id}) ";
$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, '', $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' ];
$self_purchase_rebate = $fenxiao_basic_config['self_purchase_rebate'];
$prefix = config("database")[ "connections" ][ "mysql" ][ "prefix" ];
$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 = [
'member_num' => $num,
'num' => $num,
'fenxiao_num' => 0
];
switch ( $level ) {
case 1:
if (!$self_purchase_rebate) {
$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;
if (!$self_purchase_rebate) {
$num = model('fenxiao')->getCount([ ['grand_parent', '=', $fenxiao_id],['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('', '未查询到会员信息');
if ($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, $basics_config);
} catch (\Exception $e) {
return $this->error();
}
}
/**
* 会员直接成为分销商
*/
private function directlyBecomeFenxiao($member_id, $config = [])
{
//获取用户信息
$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' ];
}
//获取分销等级信息
$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 ($item[ 'upgrade_type' ] == 1) {
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 ], [ [ '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);
}
}