562 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			562 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			PHP
		
	
	
|  | <?php | |||
|  | // +----------------------------------------------------------------------
 | |||
|  | // | likeshop开源商城系统
 | |||
|  | // +----------------------------------------------------------------------
 | |||
|  | // | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
 | |||
|  | // | gitee下载:https://gitee.com/likeshop_gitee
 | |||
|  | // | github下载:https://github.com/likeshop-github
 | |||
|  | // | 访问官网:https://www.likeshop.cn
 | |||
|  | // | 访问社区:https://home.likeshop.cn
 | |||
|  | // | 访问手册:http://doc.likeshop.cn
 | |||
|  | // | 微信公众号:likeshop技术社区
 | |||
|  | // | likeshop系列产品在gitee、github等公开渠道开源版本可免费商用,未经许可不能去除前后端官方版权标识
 | |||
|  | // |  likeshop系列产品收费版本务必购买商业授权,购买去版权授权后,方可去除前后端官方版权标识
 | |||
|  | // | 禁止对系统程序代码以任何目的,任何形式的再发布
 | |||
|  | // | likeshop团队版权所有并拥有最终解释权
 | |||
|  | // +----------------------------------------------------------------------
 | |||
|  | // | author: likeshop.cn.team
 | |||
|  | // +----------------------------------------------------------------------
 | |||
|  | 
 | |||
|  | 
 | |||
|  | namespace app\api\logic; | |||
|  | 
 | |||
|  | 
 | |||
|  | use app\common\enum\DistributionOrderGoodsEnum; | |||
|  | use app\common\enum\NoticeEnum; | |||
|  | use app\common\model\distribution\Distribution; | |||
|  | use app\common\model\distribution\DistributionLevel; | |||
|  | use app\common\server\ConfigServer; | |||
|  | use app\common\model\user\UserDistribution; | |||
|  | use app\common\model\user\User; | |||
|  | use app\common\model\distribution\DistributionMemberApply; | |||
|  | use app\common\model\distribution\DistributionOrderGoods; | |||
|  | use app\common\server\AreaServer; | |||
|  | use app\common\server\JsonServer; | |||
|  | use app\common\server\UrlServer; | |||
|  | use app\common\basics\Logic; | |||
|  | use app\common\logic\AccountLogLogic; | |||
|  | use app\common\model\AccountLog; | |||
|  | use think\Exception; | |||
|  | use think\facade\Db; | |||
|  | 
 | |||
|  | class DistributionLogic extends Logic | |||
|  | { | |||
|  |     /** | |||
|  |      * Notes: 根据后台设置返回当前生成用户的分销会员状态(设置了全员分销,新生成的用户即为分销会员) | |||
|  |      * @author 段誉(2021/4/7 14:48) | |||
|  |      * @return int | |||
|  |      */ | |||
|  |     public static function isDistributionMember() | |||
|  |     { | |||
|  |         $is_distribution = 0; | |||
|  |         //分销会员申请--1,申请分销; 2-全员分销;
 | |||
|  |         $distribution = ConfigServer::get('distribution', 'member_apply', 1); | |||
|  |         if ($distribution == 2) { | |||
|  |             $is_distribution = 1; | |||
|  |         } | |||
|  |         return $is_distribution; | |||
|  |     } | |||
|  | 
 | |||
|  |     /** | |||
|  |      * Desc: 生成用户扩展表 | |||
|  |      * @param $user_id | |||
|  |      * @return bool | |||
|  |      * @throws \think\db\exception\DataNotFoundException | |||
|  |      * @throws \think\db\exception\ModelNotFoundException | |||
|  |      * @throws \think\exception\DbException | |||
|  |      */ | |||
|  |     public static function createUserDistribution($user_id) | |||
|  |     { | |||
|  |         $user_distribution = UserDistribution::where(['user_id' => $user_id])->find(); | |||
|  | 
 | |||
|  |         if ($user_distribution) { | |||
|  |             return true; | |||
|  |         } | |||
|  | 
 | |||
|  |         $data = [ | |||
|  |             'user_id' => $user_id, | |||
|  |             'distribution_order_num' => 0, | |||
|  |             'distribution_money' => 0, | |||
|  |             'fans' => 0, | |||
|  |             'create_time' => time(), | |||
|  |         ]; | |||
|  |         UserDistribution::create($data); | |||
|  |         return true; | |||
|  |     } | |||
|  | 
 | |||
|  | 
 | |||
|  |     /** | |||
|  |      * 申请分销会员 | |||
|  |      */ | |||
|  |     public static function apply($post) | |||
|  |     { | |||
|  |             $time = time(); | |||
|  |             $data = [ | |||
|  |                 'user_id'       => $post['user_id'], | |||
|  |                 'real_name'     => $post['real_name'], | |||
|  |                 'mobile'        => $post['mobile'], | |||
|  |                 'province'      => $post['province'], | |||
|  |                 'city'          => $post['city'], | |||
|  |                 'district'      => $post['district'], | |||
|  |                 'reason'        => $post['reason'], | |||
|  |                 'status'        => 0, // 待审核
 | |||
|  |                 'create_time'   => $time, | |||
|  |                 'update_time'   => $time, | |||
|  |             ]; | |||
|  |             return DistributionMemberApply::create($data); | |||
|  |     } | |||
|  | 
 | |||
|  |     /** | |||
|  |      * 最新分销申请详情 | |||
|  |      */ | |||
|  |     public static function applyDetail($userId) | |||
|  |     { | |||
|  |         $result = DistributionMemberApply::field(['real_name','mobile','province', 'city', 'district', 'reason', 'denial_reason', 'status']) | |||
|  |             ->where('user_id', $userId) | |||
|  |             ->order('id', 'desc') | |||
|  |             ->findOrEmpty(); | |||
|  | 
 | |||
|  |         if ($result->isEmpty()) { | |||
|  |             return []; | |||
|  |         } | |||
|  |         $result = $result->toArray(); | |||
|  |         $result['province'] = AreaServer::getAddress($result['province']); | |||
|  |         $result['city'] = AreaServer::getAddress($result['city']); | |||
|  |         $result['district'] = AreaServer::getAddress($result['district']); | |||
|  | 
 | |||
|  |         switch ($result['status']) { | |||
|  |             case 0: | |||
|  |                 $result['status_str'] = '已提交,等待客服审核...'; | |||
|  |                 break; | |||
|  |             case 1: | |||
|  |                 $result['status_str'] = '已审核通过'; | |||
|  |                 break; | |||
|  |             case 2: | |||
|  |                 $result['status_str'] = '审核失败,请重新提交审核'; | |||
|  |                 break; | |||
|  |         } | |||
|  |         return $result; | |||
|  |     } | |||
|  | 
 | |||
|  |     /** | |||
|  |      * 分销主页 | |||
|  |      */ | |||
|  |     public static function index($userId) | |||
|  |     { | |||
|  |         // 自身及上级信息
 | |||
|  |         $user_info = self::myLeader($userId); | |||
|  |         // 粉丝数(一级/二级)
 | |||
|  |         $fans = User::where([ | |||
|  |             ['first_leader|second_leader', '=', $userId], | |||
|  |             ['del', '=', 0] | |||
|  |         ])->count(); | |||
|  | 
 | |||
|  |         //今天的预估收益(待返佣)
 | |||
|  |         $today_earnings = DistributionOrderGoods::whereDay('create_time') | |||
|  |             ->where(['status' => 1, 'user_id' => $userId]) | |||
|  |             ->sum('money'); | |||
|  | 
 | |||
|  |         //本月预估收益(待返佣)
 | |||
|  |         $month_earnings = DistributionOrderGoods::whereMonth('create_time') | |||
|  |             ->where(['status' => 1, 'user_id' => $userId]) | |||
|  |             ->sum('money'); | |||
|  | 
 | |||
|  |         //累计收益(已结算)
 | |||
|  |         $history_earnings = DistributionOrderGoods::where(['status' => 2, 'user_id' => $userId]) | |||
|  |             ->sum('money'); | |||
|  | 
 | |||
|  |         // 用户分销会员等级
 | |||
|  |         $levelId = Distribution::where('user_id', $userId)->value('level_id'); | |||
|  |         $levelName = DistributionLevel::getLevelNameTwo($levelId); | |||
|  | 
 | |||
|  |         $data = [ | |||
|  |             'user' => $user_info['user'], | |||
|  |             'leader' => $user_info['leader'], | |||
|  |             'fans' => $fans, | |||
|  |             'able_withdrawal' => $user_info['user']['earnings'],//可提现佣金
 | |||
|  |             'today_earnings' => round($today_earnings, 2),//今天预估收益
 | |||
|  |             'month_earnings' => round($month_earnings, 2),//本月预估收益
 | |||
|  |             'history_earnings' => round($history_earnings, 2),//累计收益
 | |||
|  |             'level_name' => $levelName | |||
|  |         ]; | |||
|  |         return $data; | |||
|  |     } | |||
|  | 
 | |||
|  |     /*** | |||
|  |      * 获取自身及上级信息 | |||
|  |      */ | |||
|  |     public static function myLeader($userId) | |||
|  |     { | |||
|  |         $field = 'nickname,avatar,is_distribution,mobile,first_leader,distribution_code,earnings'; | |||
|  | 
 | |||
|  |         $user = User::field($field)->where(['id' => $userId, 'del'=>0])->findOrEmpty(); | |||
|  | 
 | |||
|  |         $first_leader = User::field('nickname,mobile') | |||
|  |             ->where(['id' => $user['first_leader'], 'del'=>0]) | |||
|  |             ->findOrEmpty(); | |||
|  | 
 | |||
|  |         $user['avatar'] = UrlServer::getFileUrl($user['avatar']); | |||
|  |         return [ | |||
|  |             'user' => $user, | |||
|  |             'leader' => $first_leader, | |||
|  |         ]; | |||
|  |     } | |||
|  | 
 | |||
|  |     /** | |||
|  |      * 填写邀请码 | |||
|  |      */ | |||
|  |     public static function code($post) | |||
|  |     { | |||
|  |         try { | |||
|  |             Db::startTrans(); | |||
|  | 
 | |||
|  |             $firstLeader = User::field(['id', 'first_leader', 'second_leader', 'third_leader', 'ancestor_relation','user_integral']) | |||
|  |                 ->where(['distribution_code' => $post['code']]) | |||
|  |                 ->findOrEmpty(); | |||
|  |             if($firstLeader->isEmpty()) { | |||
|  |                 throw new \think\Exception('无效的邀请码'); | |||
|  |             } | |||
|  | 
 | |||
|  |             // 上级
 | |||
|  |             $first_leader_id = $firstLeader['id']; | |||
|  |             // 上上级
 | |||
|  |             $second_leader_id = $firstLeader['first_leader']; | |||
|  |             // 上上上级
 | |||
|  |             $third_leader_id = $firstLeader['second_leader']; | |||
|  |             // 拼接关系链
 | |||
|  |             $firstLeader['ancestor_relation'] = boolval($firstLeader['ancestor_relation']) ?? ''; // 清空null值及0
 | |||
|  |             $my_ancestor_relation = $first_leader_id. ',' . $firstLeader['ancestor_relation']; | |||
|  |             // 去除两端逗号
 | |||
|  |             $my_ancestor_relation = trim($my_ancestor_relation, ','); | |||
|  | 
 | |||
|  |             $user = User::findOrEmpty($post['user_id']); | |||
|  |             // 旧关系链
 | |||
|  |             if (!empty($user->ancestor_relation)) { | |||
|  |                 $old_ancestor_relation = $user->id . ',' .$user->ancestor_relation; | |||
|  |             } else { | |||
|  |                 $old_ancestor_relation = $user->id; | |||
|  |             } | |||
|  | 
 | |||
|  |             $data = [ | |||
|  |                 'first_leader' => $first_leader_id, | |||
|  |                 'second_leader' => $second_leader_id, | |||
|  |                 'third_leader' => $third_leader_id, | |||
|  |                 'ancestor_relation' => $my_ancestor_relation, | |||
|  |                 'update_time' => time() | |||
|  |             ]; | |||
|  | 
 | |||
|  |             // 更新当前用户的分销关系
 | |||
|  |             User::where(['id' => $post['user_id']])->update($data); | |||
|  | 
 | |||
|  |             //更新当前用户下级的分销关系
 | |||
|  |             $data = [ | |||
|  |                 'second_leader' => $first_leader_id, | |||
|  |                 'third_leader' => $second_leader_id, | |||
|  |                 'update_time'  => time() | |||
|  |             ]; | |||
|  |             User::where(['first_leader' => $post['user_id']])->update($data); | |||
|  | 
 | |||
|  |             //更新当前用户下下级的分销关系
 | |||
|  |             $data = [ | |||
|  |                 'third_leader' => $first_leader_id, | |||
|  |                 'update_time'  => time() | |||
|  |             ]; | |||
|  |             User::where(['second_leader' => $post['user_id']])->update($data); | |||
|  | 
 | |||
|  |             //更新当前用户所有后代的关系链
 | |||
|  |             $posterityArr = User::field('id,ancestor_relation') | |||
|  |                 ->whereFindInSet('ancestor_relation', $post['user_id']) | |||
|  |                 ->select() | |||
|  |                 ->toArray(); | |||
|  |             $updateData = []; | |||
|  |             $replace_ancestor_relation = $post['user_id'] . ','. $my_ancestor_relation; | |||
|  |             foreach($posterityArr as $item) { | |||
|  |                 $updateData[] = [ | |||
|  |                     'id' => $item['id'], | |||
|  |                     'ancestor_relation' => trim(str_replace($old_ancestor_relation, $replace_ancestor_relation, $item['ancestor_relation']), ',') | |||
|  |                 ]; | |||
|  |             } | |||
|  |             // 批量更新
 | |||
|  |             (new User())->saveAll($updateData); | |||
|  | 
 | |||
|  |             //邀请会员赠送积分
 | |||
|  |             $invited_award_integral = ConfigServer::get('marketing','invited_award_integral',0); | |||
|  |             if($invited_award_integral > 0){ | |||
|  |                 // 增加上级积分
 | |||
|  |                 $firstLeader->user_integral += (int)$invited_award_integral; | |||
|  |                 $firstLeader->save(); | |||
|  |                 // 增加上级积分变动记录
 | |||
|  |                 AccountLogLogic::AccountRecord($firstLeader['id'],$invited_award_integral,1, AccountLog::invite_add_integral); | |||
|  |             } | |||
|  | 
 | |||
|  |             //通知用户
 | |||
|  |             event('Notice', [ | |||
|  |                 'scene' => NoticeEnum::INVITE_SUCCESS_NOTICE, | |||
|  |                 'params' => [ | |||
|  |                     'user_id' => $first_leader_id, | |||
|  |                     'lower_id' => $post['user_id'], | |||
|  |                     'join_time' => date('Y-m-d H:i:s', time()) | |||
|  |                 ] | |||
|  |             ]); | |||
|  | 
 | |||
|  |             Db::commit(); | |||
|  |             return true; | |||
|  |         } catch (\Exception $e) { | |||
|  |             Db::rollback(); | |||
|  |             self::$error = $e->getMessage(); | |||
|  |             return false; | |||
|  |         } | |||
|  |     } | |||
|  | 
 | |||
|  |     /** | |||
|  |      * 分销订单 | |||
|  |      */ | |||
|  |     public static function order($get) | |||
|  |     { | |||
|  |         $where[] = ['d.user_id', '=', $get['user_id']]; | |||
|  | 
 | |||
|  |         if (isset($get['status']) && in_array($get['status'], [1,2,3])) { | |||
|  |             $where[] = ['d.status', '=', $get['status']]; | |||
|  |         } | |||
|  | 
 | |||
|  |         $field = 'd.create_time, d.money, d.goods_num, d.status, d.status as statusDesc, o.order_sn, og.total_pay_price as pay_price, g.image as goods_image, g.name as goods_name, gi.spec_value_str'; | |||
|  | 
 | |||
|  |         $count = DistributionOrderGoods::alias('d') | |||
|  |             ->where($where) | |||
|  |             ->count(); | |||
|  | 
 | |||
|  |         $lists = DistributionOrderGoods::alias('d') | |||
|  |             ->field($field) | |||
|  |             ->leftJoin('order_goods og', 'og.id = d.order_goods_id') | |||
|  |             ->leftJoin('order o', 'o.id = og.order_id') | |||
|  |             ->leftJoin('goods g', 'og.goods_id=g.id') | |||
|  |             ->leftJoin('goods_item gi', 'og.item_id=gi.id') | |||
|  |             ->where($where) | |||
|  |             ->order('d.create_time desc') | |||
|  |             ->page($get['page_no'], $get['page_size']) | |||
|  |             ->select() | |||
|  |             ->toArray(); | |||
|  | 
 | |||
|  |         foreach ($lists as &$item) { | |||
|  |             $item['goods_image'] = empty($item['goods_image']) ? '' : UrlServer::getFileUrl($item['goods_image']); | |||
|  |         } | |||
|  | 
 | |||
|  |         $data = [ | |||
|  |             'list' => $lists, | |||
|  |             'page' => $get['page_no'], | |||
|  |             'size' => $get['page_size'], | |||
|  |             'count' => $count, | |||
|  |             'more' => is_more($count, $get['page_no'], $get['page_size']) | |||
|  |         ]; | |||
|  |         return $data; | |||
|  |     } | |||
|  | 
 | |||
|  |     /** | |||
|  |      * 月度账单 | |||
|  |      */ | |||
|  |     public static function monthBill($get) | |||
|  |     { | |||
|  |         $field = [ | |||
|  |             "FROM_UNIXTIME(d.create_time,'%Y年%m月') as date", | |||
|  |             "FROM_UNIXTIME(d.create_time,'%Y') as year", | |||
|  |             "FROM_UNIXTIME(d.create_time,'%m') as month", | |||
|  |             'sum(d.money) as total_money', | |||
|  |             'count(d.id) as order_num' | |||
|  |         ]; | |||
|  |         $count = DistributionOrderGoods::alias('d') | |||
|  |             ->field($field) | |||
|  |             ->leftJoin('order_goods g', 'g.id = d.order_goods_id') | |||
|  |             ->leftJoin('order o', 'o.id = g.order_id') | |||
|  |             ->where(['d.user_id' => $get['user_id']]) | |||
|  |             ->where('d.status', 'in', [1, 2]) | |||
|  |             ->group('date') | |||
|  |             ->count(); | |||
|  | 
 | |||
|  |         $lists = DistributionOrderGoods::alias('d') | |||
|  |             ->field($field) | |||
|  |             ->leftJoin('order_goods g', 'g.id = d.order_goods_id') | |||
|  |             ->leftJoin('order o', 'o.id = g.order_id') | |||
|  |             ->where(['d.user_id' => $get['user_id']]) | |||
|  |             ->where('d.status', 'in', [1, 2]) | |||
|  |             ->order('d.create_time desc') | |||
|  |             ->page($get['page_no'], $get['page_size']) | |||
|  |             ->group('date') | |||
|  |             ->select() | |||
|  |             ->toArray(); | |||
|  | 
 | |||
|  |         $data = [ | |||
|  |             'list' => $lists, | |||
|  |             'page' => $get['page_no'], | |||
|  |             'size' => $get['page_size'], | |||
|  |             'count' => $count, | |||
|  |             'more' => is_more($count, $get['page_no'], $get['page_size']) | |||
|  |         ]; | |||
|  |         return $data; | |||
|  |     } | |||
|  | 
 | |||
|  |     /** | |||
|  |      * 月度明细 | |||
|  |      */ | |||
|  |     public static function monthDetail($get) | |||
|  |     { | |||
|  |         $where[] = ['d.user_id', '=', $get['user_id']]; | |||
|  | 
 | |||
|  |         $monthStr = $get['year'] . '-' . str_pad($get['month'], 2, '0', STR_PAD_LEFT); | |||
|  | 
 | |||
|  |         $field = 'd.create_time, d.money, d.goods_num, d.status, d.status as statusDesc, o.order_sn, og.total_pay_price as pay_price, g.image as goods_image, g.name as goods_name, gi.spec_value_str'; | |||
|  | 
 | |||
|  |         $count = DistributionOrderGoods::alias('d') | |||
|  |             ->where($where) | |||
|  |             ->whereMonth('d.create_time', $monthStr) | |||
|  |             ->count(); | |||
|  | 
 | |||
|  |         $lists = DistributionOrderGoods::alias('d') | |||
|  |             ->field($field) | |||
|  |             ->leftJoin('order_goods og', 'og.id = d.order_goods_id') | |||
|  |             ->leftJoin('order o', 'o.id = og.order_id') | |||
|  |             ->leftJoin('goods g', 'og.goods_id=g.id') | |||
|  |             ->leftJoin('goods_item gi', 'og.item_id=gi.id') | |||
|  |             ->where($where) | |||
|  |             ->whereMonth('d.create_time', $monthStr) | |||
|  |             ->order('d.create_time desc') | |||
|  |             ->page($get['page_no'], $get['page_size']) | |||
|  |             ->select() | |||
|  |             ->toArray(); | |||
|  | 
 | |||
|  |         $data = [ | |||
|  |             'list' => $lists, | |||
|  |             'page' => $get['page_no'], | |||
|  |             'size' => $get['page_size'], | |||
|  |             'count' => $count, | |||
|  |             'more' => is_more($count, $get['page_no'], $get['page_size']) | |||
|  |         ]; | |||
|  |         return $data; | |||
|  |     } | |||
|  | 
 | |||
|  | 
 | |||
|  |     /** | |||
|  |      * Desc: 取消订单后更新分销订单为已失效 | |||
|  |      * @param $order_id | |||
|  |      * @throws Exception | |||
|  |      * @throws \think\exception\PDOException | |||
|  |      */ | |||
|  |     public static function setDistributionOrderFail($order_id) | |||
|  |     { | |||
|  |         //订单取消后更新分销订单为已失效状态
 | |||
|  |         return Db::name('distribution_order_goods d') | |||
|  |             ->join('order_goods og', 'og.id = d.order_goods_id') | |||
|  |             ->join('order o', 'o.id = og.order_id') | |||
|  |             ->where('o.id', $order_id) | |||
|  |             ->update([ | |||
|  |                 'd.status' => DistributionOrderGoodsEnum::STATUS_ERROR, | |||
|  |                 'd.update_time' => time(), | |||
|  |             ]); | |||
|  |     } | |||
|  | 
 | |||
|  |     /** | |||
|  |      * @Notes: 分销佣金列表 | |||
|  |      * @Author: 张无忌 | |||
|  |      * @param $get | |||
|  |      * @param $user_id | |||
|  |      * @return bool|array | |||
|  |      */ | |||
|  |     public static function commission($get, $user_id) | |||
|  |     { | |||
|  |         try { | |||
|  |             $where = [ | |||
|  |                 ['user_id', '=', $user_id], | |||
|  |                 ['source_type', 'in', AccountLog::earnings_change] | |||
|  |             ]; | |||
|  | 
 | |||
|  |             $model = new AccountLog(); | |||
|  |             $count = $model->where($where)->count(); | |||
|  |             $lists = $model->field(['id,source_type,change_amount,change_type,create_time']) | |||
|  |                 ->where($where) | |||
|  |                 ->order('id', 'desc') | |||
|  |                 ->page($get['page_no'] ?? 1, $get['page_size'] ?? 20) | |||
|  |                 ->select(); | |||
|  | 
 | |||
|  |             foreach ($lists as &$item) { | |||
|  |                 $symbol = $item['change_type'] == 1 ? '+' : '-'; | |||
|  |                 $item['change_amount'] = $symbol.$item['change_amount']; | |||
|  |             } | |||
|  | 
 | |||
|  |             return [ | |||
|  |                 'list'  => $lists, | |||
|  |                 'page'  => $get['page_no']??1, | |||
|  |                 'size'  => $get['page_size']??20, | |||
|  |                 'count' => $count, | |||
|  |                 'more'  => is_more($count, $get['page_no']??1, $get['page_size']??20) | |||
|  |             ]; | |||
|  | 
 | |||
|  |         } catch (\Exception $e) { | |||
|  |             static::$error = $e->getMessage(); | |||
|  |             return false; | |||
|  |         } | |||
|  |     } | |||
|  | 
 | |||
|  |     public static function fixAncestorRelation() | |||
|  |     { | |||
|  |         try { | |||
|  |             $userList = User::select()->toArray(); | |||
|  |             if (empty($userList)) { | |||
|  |                 throw new \Exception('没有用户,无需修复'); | |||
|  |             } | |||
|  | 
 | |||
|  |             $updateEmptyData = []; | |||
|  |             $updateData = []; | |||
|  |             foreach($userList as $user) { | |||
|  |                 $my_ancestor_relation = self::myAncestorRelation($user); | |||
|  |                 $updateEmptyData[] = ['id' => $user['id'], 'ancestor_relation' => '']; | |||
|  |                 $updateData[] = ['id' => $user['id'], 'ancestor_relation' => $my_ancestor_relation]; | |||
|  |             } | |||
|  |             // 先清除所有关系链
 | |||
|  |             (new User())->saveAll($updateEmptyData); | |||
|  |             // 重新设置关系链
 | |||
|  |             (new User())->saveAll($updateData); | |||
|  | 
 | |||
|  |             return true; | |||
|  |         } catch (\Exception $e) { | |||
|  |             self::$error = $e->getMessage(); | |||
|  |             return false; | |||
|  |         } | |||
|  |     } | |||
|  | 
 | |||
|  |     public static function myAncestorRelation($user) | |||
|  |     { | |||
|  |         if (empty($user['first_leader'])) { | |||
|  |             return ''; | |||
|  |         } | |||
|  | 
 | |||
|  |         return trim(self::findAncestorRelation($user['first_leader']), ','); | |||
|  |     } | |||
|  | 
 | |||
|  |     public static function findAncestorRelation($id, $flag = true) | |||
|  |     { | |||
|  |         static $ancestor_relation = ''; | |||
|  |         if ($flag) { | |||
|  |             $ancestor_relation = ''; | |||
|  |         } | |||
|  |         $ancestor_relation .= $id . ','; | |||
|  |         $user = User::findOrEmpty($id); | |||
|  |         if (empty($user['first_leader'])) { | |||
|  |             return $ancestor_relation; | |||
|  |         } | |||
|  |         return self::findAncestorRelation($user['first_leader'], false); | |||
|  |     } | |||
|  | 
 | |||
|  | 
 | |||
|  |     /** | |||
|  |      * @notes 获取背景海报 | |||
|  |      * @return array|mixed|string|null | |||
|  |      * @author cjhao | |||
|  |      * @date 2021/11/29 11:35 | |||
|  |      */ | |||
|  |     public static function getPoster() | |||
|  |     { | |||
|  |         $poster = ConfigServer::get('invite', 'poster', '/images/share/share_user_bg.png'); | |||
|  |         $poster = empty($poster) ? $poster : UrlServer::getFileUrl($poster); | |||
|  |         return ['poster'=>$poster]; | |||
|  | 
 | |||
|  |     } | |||
|  | } |