jh-admin/addon/saas/model/ManageUser.php

531 lines
22 KiB
PHP

<?php
/**
* SAAS应用系统 --- 十年开发经验汇集巨献!
* ==========================================================
* Copy right 2020-2050 成都众联思索科技有限公司,保留所有权利。
* ----------------------------------------------------------
* 官方网址: https://www.zoomtk.com
* 这不是自由软件!未经允许不得用于商业目或程序代码摘取及修改。
* 任何企业和个人未经允许对程序代码以任何形式任何目的再发布传播。
* 唯一发布渠道www.zoomtk.com;非官方渠道统一视为侵权行为。
* ==========================================================
*/
namespace addon\saas\model;
use addon\saas\model\Config as ConfigModel;
use app\model\DbModel;
class ManageUser extends DbModel
{
public $manage_status_zh = [
1 => '正常',
-1 => '冻结',
];
/**
* 添加经理
* @param $data
* @return mixed
*/
public function addManage($data)
{
$manage_info = model('manage_user')->getInfo(
[['username', '=', $data['username']], ['is_delete', '=', 0]], 'id'
);
if (!empty($manage_info)) return $this->error('', '已经是经理了');
$data['create_time'] = time();
$data['audit_time'] = time();
if (!isset($data['password'])) {
$data['password'] = dataMd5($data['password']);
}
model('manage_user')->startTrans();
try {
if (!empty($data['parent'])) {
//添加上级经理一级下线人数
model('manage_user')->setInc([['id', '=', $data['parent']]], 'one_child_num'); //增加一级下线人数
}
if (!empty($data['grand_parent'])) {
//添加上级经理一级下线人数
model('manage_user')->setInc([['id', '=', $data['grand_parent']]], 'two_child_num');//增加二级下线人数
}
$res = model('manage_user')->add($data);
$data['manage_id'] = $res;
$updata = event('AddManage', $data, true);
$updata['rcode'] = createShareCode($res);
model('manage_user')->update($updata, [['id', '=', $res]]);
model('manage_user')->commit();
return $this->success($res);
} catch (\Exception $e) {
model('manage')->rollback();
return $this->error('', $e->getMessage());
}
}
/***
* 自动成为经理
* @param $order_info
* @return void
*/
public function autoBecomeManage($order_info)
{
$condition = [
['m.site_id', '=', $order_info['site_id']],
['m.member_id', '=', $order_info['member_id']]
];
$join = [
['member m', 'u.member_id=m.source_member', 'inner']
];
$model = new ConfigModel();
$basics_config = $model->getBasicsConfig($order_info['site_id'])['data']['value'];
if (!$basics_config['is_member_settled']) return $this->error('', '未开启入驻通道');
$parent = (array)model('manage_user')->getInfo($condition, 'u.id,u.parent,u.grand_parent', 'u', $join);
$data = [
'id' => $parent['id'] ?? 0,
'parent' => $parent['parent'] ?? 0,
'grand_parent' => $parent['grand_parent'] ?? 0,
'site_id' => $order_info['site_id'],
'member_id' => $order_info['member_id'],
'real_name' => $order_info['name'],
'mobile' => $order_info['mobile'],
];
$this->applyManage($data, $basics_config);
return $this->success($parent);
}
/***
* 自动升级
* @param $data
* @return void
*/
public function autoBecomeUpgrade($manage_id = '')
{
if ($manage_id) {
//获取拓客管理员信息
$condition = [
['id', '=', $manage_id]
];
$field = 'site_id,district_id,level_id,parent,one_site_order_num,one_site_total_order,one_site_order_money,one_child_site_num,two_child_site_num,one_child_num,two_child_num,total_commission';
$manage_info = model('manage_user')->getInfo($condition, $field);
if ($manage_info) {
$level_config = $this->geNextLevel($manage_info, $manage_info['site_id']);
if (isset($level_config['last_level'])) {
$last_level = $level_config['last_level'];
$upgrade_type = $last_level['upgrade_type'];
$order_total_num = $last_level['order_total_num']; //商家订单交易总数
$order_total_money = $last_level['order_total_money']; //商家总交易额
$order_commission_money = $last_level['order_commission_money']; //直客商家交易佣金
$one_child_site_num = $last_level['one_child_site_num']; //推荐商家数量
$one_child_indirect_site_num = $last_level['one_child_indirect_site_num']; //间联商家数量
$region_child_site_num = $last_level['region_child_site_num']; //区域商家数量
$weight_level = $last_level['weight_level']; //权重等级
$direct_site_num = $last_level['direct_site_num']; //权重直客商家数量
$indirect_site_num = $last_level['indirect_site_num'];//权重间联商家数量
// $one_site_order_num = $manage_info['one_site_order_num'];//直连订单总数
// $one_site_total_order = $manage_info['one_site_total_order'];//直连订单总额
// $manage_one_child_site_num = $manage_info['one_child_site_num'];//直连商家数量
// $manage_two_child_site_num = $manage_info['two_child_site_num'];//间联商家总数
// $one_site_order_money = $manage_info['one_site_order_money']; //直连订单佣金总额
// $manage_one_child_num = $manage_info['one_child_num']; //直连会员总数
$manage_two_child_num = $manage_info['two_child_num']; //间联会员人数
$_one_site_order_num = $manage_info['one_site_order_num'] >= $order_total_num;//商家订单交易总数
$_one_site_order_money = $manage_info['one_site_order_money'] >= $order_commission_money;//商家总交易佣金
$_one_site_total_order = $manage_info['one_site_total_order'] >= $order_total_money;//商家总交易额
$_one_child_site_num = $manage_info['one_child_num'] >= $one_child_site_num;//直连商家数量
$_one_child_indirect_site_num = $manage_info['two_child_num'] >= $one_child_indirect_site_num;//间联连商家数量
$_region_site_num = false;//需要在同区域商家
$_weight_level = false;//需要在同区域商家
$is_upgrade = 0;
if ($region_child_site_num) {//需要在同区域商家
$condition = [
['site_id', '=', $manage_info['site_id']],
['district_id', '=', $manage_info['district_id']],
['parent', '=', $manage_id],
];
$region_site_num = model('manage_user')->getCount($condition, 'id');
if ($region_site_num >= $region_child_site_num) {
$_region_site_num = 1;
}
}
if ($weight_level) { //权重等级判断
$condition = [
['site_id', '=', $manage_info['site_id']],
['level_num', '=', substr($weight_level, 1)]
];
$level_id = model('manage_user_level')->getValue($condition, 'level_id');
$_manage = [
['site_id', '=', $manage_info['site_id']],
['level_id', '=', $level_id],
['parent', '=', $manage_id],
];
$m_direct_site_num = model('manage_user')->getCount($_manage, 'id');
if ($m_direct_site_num >= $direct_site_num && $manage_two_child_num >= $indirect_site_num) {
$_weight_level = 1;
}
}
if ($upgrade_type == 1) {//满足一项
if ($_one_site_order_num || $_one_site_order_money || $_one_site_total_order || $_one_child_site_num || $_one_child_indirect_site_num || $_region_site_num || $_weight_level) {
$is_upgrade = 1;
}
} else if ($upgrade_type == 2) {//满足全部
if ($_one_site_order_num && $_one_site_order_money && $_one_site_total_order && $_one_child_site_num && $_one_child_indirect_site_num && $_region_site_num && $_weight_level) {
$is_upgrade = 1;
}
}
if ($is_upgrade) {
model('manage_user')->update(['level_id' => $last_level['level_id'], 'level_name' => $last_level['level_name']], [['id', '=', $manage_id]]);
}
}
if ($manage_info['parent']) {
$this->autoBecomeUpgrade($manage_info['parent']);//验证其他商家是否升级
}
}
}
}
public function bindRelation($manage_id)
{
}
/***
* 申请入驻
* @param $data
* @param $basics_config
* @return array|mixed
*/
public function applyManage($data, $basics_config)
{
$member_id = $data['member_id'];
$site_id = $data['site_id'];
if (!$basics_config['is_member_settled']) return $this->error('', '未开启入驻通道');
$member_info = model('member')->getInfo([['site_id', '=', $data['site_id']], ['member_id', '=', $member_id], ['is_delete', '=', 0]], 'order_num,order_complete_num,order_money,order_complete_money');
if (empty($member_info)) return $this->error('', '未查询到会员信息');
$condition = [
['site_id', '=', $site_id],
['member_id', '=', $member_id]
];
$manage_info = model('manage_user')->getInfo($condition, 'id,status');
if (!empty($manage_info) && $manage_info['status'] == 1) return $this->error('', '无需重复申请');
try {
// 基础设置
switch ($basics_config['settled_condition']) {
case 2:
// 消费次数
if ($basics_config['consume_condition'] == 1 && $member_info['order_num'] < $basics_config['consume_count']) return $this->error('', '未满足成为申请条件');
if ($basics_config['consume_condition'] == 2 && $member_info['order_complete_num'] < $basics_config['consume_count']) return $this->error('', '未满足成为申请的条件');
break;
case 3:
// 消费金额
if ($basics_config['consume_condition'] == 1 && bccomp($member_info['order_money'], $basics_config['consume_money'], 2) == -1) return $this->error('', '未满足成为申请的条件');
if ($basics_config['consume_condition'] == 2 && bccomp($member_info['order_complete_money'], $basics_config['consume_money'], 2) == -1) return $this->error('', '未满足成为申请的条件');
break;
case 4:
// 购买指定商品
$condition = [
['o.site_id', '=', $site_id],
['o.member_id', '=', $member_id],
['og.goods_id', 'in', $basics_config['goods_ids']],
];
if ($basics_config['consume_condition'] == 1) $condition[] = ['pay_status', '=', 1];
if ($basics_config['consume_condition'] == 2) $condition[] = ['order_status', '=', 10];
$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;
}
$levelInfo = model('manage_level')->getInfo([['site_id', '=', $site_id], ['level_num', '=', 1]], 'level_id,level_name,level_num');
$_password = substr($data['mobile'], -6);
$Adddata = [
'site_id' => $site_id,
'member_id' => $member_id,
'level_id' => $levelInfo['level_id'] ?? 0,
'level_name' => $levelInfo['level_name'] ?? '',
'username' => $this->createRandUsername($site_id),
'mobile' => $data['mobile'],
'real_name' => $data['real_name'],
'status' => 1,
'password' => dataMd5($_password),
'parent' => $data['id'] ?? 0,
'grand_parent' => $data['parent'] ?? 0,
];
return $this->addManage($Adddata);
} catch (\Exception $e) {
return $this->error();
}
}
/***
* 增加店铺统计数量
* @param $data
* @return void
* @throws \think\db\exception\DbException
*/
public function addSiteStatistics($data)
{
if (isset($data['site_id'])) {
$siteInfo = model("site")->getInfo([['site_id', '=', $data['site_id']]]);
if ($siteInfo['manage_id']) {
$manageInfo = model('manage_user')->getInfo([['id', '=', $siteInfo['manage_id']]], 'parent,grand_parent');
if (!empty($manageInfo['parent'])) {
//添加上级经理一级店铺数量
model('manage_user')->setInc([['id', '=', $data['parent']]], 'one_child_site_num');
}
if (!empty($manageInfo['grand_parent'])) {
//添加上级经理一级下线店铺数量
model('manage_user')->setInc([['id', '=', $data['grand_parent']]], 'two_child_site_num');
}
}
}
}
/**
* 获取经理分页列表
* @param array $condition
* @param number $page
* @param string $page_size
* @param string $order
* @param string $field
*/
public function getManagePageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = 'f.*,pf.real_name as parent_name')
{
$condition[] = ['f.is_delete', '=', 0];
$alias = 'f';
$join = [
[
'manage_user pf',
'pf.id = f.parent',
'left'
]
];
$list = model('manage_user')->pageList($condition, $field, $order, $page, $page_size, $alias, $join);
if ($list) {
foreach ($list['list'] as &$item) {
unset($item['password']);
}
}
return $this->success($list);
}
public function getManageInfo($condition, $field = 'f.*,m.nickname,m.mobile as member_mobile,m.headimg,pf.real_name as parent_name')
{
$join = [
[
'manage_user pf',
'pf.id = f.parent',
'left'
],
[
'member m',
'm.member_id = f.member_id',
'left'
]
];
$list = model('manage_user')->getInfo($condition, $field, 'f', $join);
if ($list) {
unset($list['password']);
}
return $this->success($list);
}
/***
* 获取下一个等级
* @param $ManageInfo
* @param $agent_id
* @return array
*/
public function geNextLevel($ManageInfo, $agent_id)
{
$level_config = model('manage_level')->getColumn([['site_id', '=', $agent_id]], '*', 'level_id');
$current_level = $level_config[$ManageInfo['level_id']];
$level_num = $current_level['level_num'] + 1;
$next_level['last_level'] = '';
foreach ($level_config as $key => $value) {
if ($value['upgrade_type'] > 0 && $value['level_num'] == $level_num) {
$next_level['last_level'] = $value;
continue;
} else if ($value['level_num'] > $level_num) {
$level_num += 1;
}
}
if ($next_level['last_level']) {
return $next_level;
} else {
return [];
}
}
/***
* 获取团队数据
* @param $level
* @param $member_id
* @param $page
* @param $page_size
* @param $is_pay
* @return array
*/
public function getManageTeam($level, $member_id, $page, $page_size, $is_pay = 0)
{
$condition = '';
// 下级分销商id集合
$one_parent = model('manage_user')->getValue([['member_id', '=', $member_id]], 'id');
switch ($level) {
// 一级分销
case 1:
// 直属会员 + 直属下级分销商
$condition = [
['ma.parent', '=', $one_parent]
];
break;
// 二级分销
case 2:
// 直属下级分销商的下级分销商 + 直属下级分销商的会员
$condition = [
['ma.grand_parent', '=', $one_parent]
];
break;
}
if (empty($condition)) return $this->success([
'page_count' => 1,
'count' => 0,
'list' => []
]);
if ($is_pay) $condition [] = ['m.order_num', '>', 0];
$field = 'm.member_id,m.nickname,m.headimg,m.reg_time,m.order_money,m.order_complete_money,m.order_num,m.order_complete_num,ma.id,ma.real_name,ma.level_name
,ma.audit_time
,ma.mobile
,ma.one_site_order_num
,ma.one_site_total_order
,ma.one_site_order_money
,ma.one_child_site_num
,ma.two_child_site_num
,ma.one_child_num';
$alias = 'ma';
$join = [
['member m', 'm.member_id = ma.member_id', 'left']
];
$list = model('manage_user')->pageList($condition, $field, 'ma.audit_time desc', $page, $page_size, $alias, $join);
return $this->success($list);
}
/**
* 变更上下级关系
* @param $member_id
* @param $parent
*/
public function changeParentManage($_id, $parent)
{
if ($_id == '' || $_id == 0) {
return $this->error('', '参数不能为空');
}
if ($parent == '' || $parent == 0) {
return $this->error('', '上级不能为空');
}
//获取上级id
$parent_info = model('manage_user')->getInfo([['id', '=', $parent], ['is_delete', '=', 0]]);
if (!$parent_info) return $this->error('', '上级不存在');
model('manage_user')->startTrans();
try {
//修改上级分销商
model('manage_user')->update([
'parent' => $parent,
'grand_parent' => $parent_info['parent'],
], [['id', '=', $_id]]);
//修改变更后的上级分销商团队人数
model('manage_user')->update(['one_child_num' => $parent_info['one_child_num'] + 1], [['id', '=', $parent]]);
model('manage_user')->commit();
return $this->success();
} catch (\Exception $e) {
model('manage_user')->rollback();
return $this->error('', $e->getMessage());
}
}
/**
* 取消上级
* @param $member_id
* @param $parent
*/
public function cancelParentManage($_id)
{
if ($_id == '' || $_id == 0) {
return $this->error('', '参数_id不能为空');
}
//用户信息
$_info = model('manage_user')->getInfo([['id', '=', $_id]], 'id,parent');
if (empty($_info)) {
return $this->error('', '用户不存在');
}
model('manage_user')->startTrans();
try {
$parent_info = model('manage_user')->getInfo(
[['id', '=', $_info['parent']], ['is_delete', '=', 0]],
'parent'
);
//修改原有上级分销商团队人数
if ($parent_info['parent'] > 0) {
//获取原有上级分销商信息
model('manage_user')->setDec([['id', '=', $parent_info['parent']]], 'one_child_num');
}
//修改上级分销商
model('manage_user')->update(['parent' => 0, 'grand_parent' => 0], [['id', '=', $_id]]);
model('manage_user')->commit();
return $this->success();
} catch (\Exception $e) {
model('manage_user')->rollback();
return $this->error('', $e->getMessage());
}
}
public function changePass($id, $pass, $site_id)
{
if ($id == '' || $pass == '') {
return $this->error('', '参数不能为空');
}
$condition = [
['id', '=', $id],
['site_id', '=', $site_id],
];
$info = model('manage_user')->getInfo($condition);
if (empty($info)) {
return $this->error('', '用户不存在');
}
$pass = data_md5($pass);
$res = model('manage_user')->update(['password' => $pass], [['id', '=', $id], ['site_id', '=', $site_id]]);
return $this->success('成功', $res);
}
/**
* 生成随机用户名
* @param $site_id
*/
private function createRandUsername($site_id)
{
$usernamer = 'u_' . random_keys(10);
$count = model('manage_user')->getCount([['username', '=', $usernamer], ['site_id', '=', $site_id]]);
if ($count) {
$usernamer = $this->createRandUsername($site_id);
return $usernamer;
} else {
return $usernamer;
}
}
/**
* 变更等级
* @param array $condition
* @param string $field
* @param string $order
* @param string $limit
*/
public function changeManageLevel($data, $condition)
{
$result = model('manage_user')->update($data, $condition);
return $this->success($result);
}
}