From 197e059fcb9c3e0ceaace9eb55b70c6d8bf8ab47 Mon Sep 17 00:00:00 2001 From: wuhui_zzw <1760308791@qq.com> Date: Wed, 27 Dec 2023 14:15:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=9A=E6=9D=83=E9=87=8D?= =?UTF-8?q?=E5=80=BC=E8=B5=A0=E9=80=81=E4=BF=AE=E6=94=B9=EF=BC=8C=E5=BD=93?= =?UTF-8?q?=E5=89=8D=E4=B8=8B=E7=BA=A7=E9=9D=9E=E4=B8=8A=E7=BA=A7=E7=9A=84?= =?UTF-8?q?=E5=A4=A7=E5=8C=BA=E5=9B=A2=E9=98=9F=E6=88=90=E5=91=98=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E4=B8=8A=E7=BA=A7=E6=89=8D=E8=83=BD=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E8=B5=A0=E9=80=81=E7=9A=84=E6=9D=83=E9=87=8D=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WeightValueRepository.php | 16 ++++- .../repositories/user/UserRepository.php | 64 ++++++++++++++++++- 2 files changed, 75 insertions(+), 5 deletions(-) diff --git a/app/common/repositories/store/platformCommission/WeightValueRepository.php b/app/common/repositories/store/platformCommission/WeightValueRepository.php index 3aa7596..954e2a8 100644 --- a/app/common/repositories/store/platformCommission/WeightValueRepository.php +++ b/app/common/repositories/store/platformCommission/WeightValueRepository.php @@ -30,9 +30,19 @@ class WeightValueRepository extends BaseRepository{ public function getUserHoldList($uid,$userList = []){ // 获取用户所有上级 if(count($userList) <= 0){ - $userList = app()->make(UserRepository::class)->getAllSuperiorLv($uid); - unset($userList[$uid]);// 删除本人 - if(count($userList) <= 0) return [];// 不存在上级 + $allUserList = app()->make(UserRepository::class)->getAllSuperiorLv($uid); + unset($allUserList[$uid]);// 删除本人 + if(count($allUserList) <= 0) return [];// 不存在上级 + // 循环处理 仅小区业绩消费才会获得权重值奖励 + $userList = [];// 符合条件的用户 + $currentUid = $uid; + foreach($allUserList as $userInfo){ + // 判断:当前用户是否为上级的大区业绩的线 + if(!app()->make(UserRepository::class)->isBigAreaPart((int)$currentUid,(int)$userInfo['uid'])){ + $userList[] = $userInfo; + } + $currentUid = $userInfo['uid']; + } } // 获取持有信息 $holdList = $this->dao->getSearch([]) diff --git a/app/common/repositories/user/UserRepository.php b/app/common/repositories/user/UserRepository.php index effe7da..b4fb1ba 100644 --- a/app/common/repositories/user/UserRepository.php +++ b/app/common/repositories/user/UserRepository.php @@ -7,6 +7,7 @@ namespace app\common\repositories\user; use app\common\dao\BaseDao; use app\common\dao\user\UserDao; +use app\common\model\store\order\StoreOrder; use app\common\model\user\User; use app\common\model\wechat\WechatUser; use app\common\repositories\BaseRepository; @@ -1511,8 +1512,6 @@ class UserRepository extends BaseRepository 'uid' => $user_info['uid'] ?? '-1' ] + $append_info; } - - /** * Common: 获取全部上级信息 * Author: wu-hui @@ -1537,6 +1536,67 @@ class UserRepository extends BaseRepository if(empty($userInfo) || (int)$userInfo['spread_uid'] <= 0) return $superiorList; return $this->getAllSuperiorLv($userInfo['spread_uid'], $superiorList, ++$level); } + /** + * Common: 获取某个用户全部下级 + * Author: wu-hui + * Time: 2023/12/27 14:08 + * @param $uidS + * @param array $subordinateList + * @param int $level + * @return array + * @throws DataNotFoundException + * @throws DbException + * @throws ModelNotFoundException + */ + public function getAllSubordinate($uidS,array $subordinateList = [],int $level = 1){ + // 获取用户上级列表 + $userInfo = $this->dao->getSearch([]) + ->whereIn('spread_uid',$uidS) + ->field(['uid','nickname','brokerage_level','spread_uid',"{$level} as level"]) + ->select() + ->toArray(); + if(!empty($userInfo)){ + $subordinateList = array_merge($subordinateList,$userInfo); + + return $this->getAllSubordinate(array_column($userInfo,'uid'), $subordinateList, ++$level); + } + + return $subordinateList; + } + /** + * Common: 判断:当前用户是否存在上级的大区团队中 + * Author: wu-hui + * Time: 2023/12/27 14:12 + * @param int $uid + * @param int $spreadUid + * @return bool + * @throws DataNotFoundException + * @throws DbException + * @throws ModelNotFoundException + */ + public function isBigAreaPart(int $uid,int $spreadUid){ + // 获取:当前上级的所有直推下级 + $subIds = $this->dao->getSearch([])->where('spread_uid',$spreadUid)->column('uid'); + if(count($subIds) <= 1) return true;// 只有一条线 在大区业绩中 + // 存在多条线 循环判断 + $bigAreaIds = [];// 大区业绩所有用户的uid + $bigAreaMoney = 0;// 大全业绩金额 + foreach($subIds as $subUid){ + // 获取全部下级 用户id + $subUserList = $this->getAllSubordinate([$subUid]); + $currentLineUserIds = array_merge(array_column($subUserList,'uid'),[$subUid]); + // 获取当前线的业绩数量 + $currentLineMoney = StoreOrder::whereIn('uid',$currentLineUserIds)->sum('pay_price'); + // 判断:当前线业绩 大于 当前大区业绩;更新大区信息 + if($bigAreaMoney < $currentLineMoney) { + $bigAreaIds = $currentLineUserIds; + $bigAreaMoney = $currentLineMoney; + } + } + + return in_array($uid,$bigAreaIds);// 当前用户id 存在大区用户id列表中;当前用户为大区团队成员 + } +