diff --git a/app/common/models/Member.php b/app/common/models/Member.php index 04fa1f11..27d66747 100644 --- a/app/common/models/Member.php +++ b/app/common/models/Member.php @@ -510,14 +510,16 @@ class Member extends BackendModel } /** - * 通过id获取用户信息 - * - * @param $member_id - * @return mixed + * Common: 通过id获取用户信息 + * Author: wu-hui + * Time: 2023/10/18 10:51 + * @param $member_id + * @param string[] $field + * @return BaseModel */ - public static function getMemberById($member_id) - { + public static function getMemberById($member_id,$field = ['*']){ return self::uniacid() + ->select($field) ->where('uid', $member_id) ->first(); } @@ -1128,4 +1130,6 @@ class Member extends BackendModel { return $this->hasOne(MemberAggregationAppModel::class, 'member_id', 'uid'); } + + } \ No newline at end of file diff --git a/app/common/models/member/MemberChildren.php b/app/common/models/member/MemberChildren.php index 99ff027c..112b75e1 100644 --- a/app/common/models/member/MemberChildren.php +++ b/app/common/models/member/MemberChildren.php @@ -13,11 +13,32 @@ use app\common\models\BaseModel; use app\common\models\Order; use Illuminate\Database\Eloquent\Builder; use app\common\models\Member; +use Illuminate\Support\Facades\DB; class MemberChildren extends BaseModel { public $table = 'yz_member_children'; + /** + * Common: 获取我的客户(团队总人数,不包括已删除用户) 查询模型 + * Author: wu-hui + * Time: 2023/10/19 10:20 + * @param $uid + * @return BaseModel + */ + public static function getTeamModel($uid){ + return self::uniacid() + ->join('yz_member', function ($join) { + $join->on('yz_member.member_id', '=', 'yz_member_children.child_id')->whereNull('deleted_at'); + }) + ->where('yz_member_children.uniacid',\YunShop::app()->uniacid) + ->where('yz_member_children.member_id',$uid); + } + + + + + public static function boot() { parent::boot(); @@ -39,4 +60,6 @@ class MemberChildren extends BaseModel { return $this->hasMany(Order::class,'uid','child_id'); } + + } \ No newline at end of file diff --git a/plugins/collection-room/src/admin/IndexController.php b/plugins/collection-room/src/admin/IndexController.php index eb3fdcac..26d9724b 100644 --- a/plugins/collection-room/src/admin/IndexController.php +++ b/plugins/collection-room/src/admin/IndexController.php @@ -107,7 +107,7 @@ class IndexController extends BaseController{ public function test(){ - CollectionRoomModel::addInfo(1,2); + // CollectionRoomModel::addInfo(1,2); diff --git a/plugins/team-dividend/views/admin/level-set-add.blade.php b/plugins/team-dividend/views/admin/level-set-add.blade.php index ed47e3fe..e453772b 100644 --- a/plugins/team-dividend/views/admin/level-set-add.blade.php +++ b/plugins/team-dividend/views/admin/level-set-add.blade.php @@ -90,6 +90,25 @@ value="{{$dividend->level_name}}"/> +
+ +
+
+ + + + +
+
+
diff --git a/plugins/weight-value/src/api/IndexController.php b/plugins/weight-value/src/api/IndexController.php index c30f9b27..f1199eaf 100644 --- a/plugins/weight-value/src/api/IndexController.php +++ b/plugins/weight-value/src/api/IndexController.php @@ -3,9 +3,51 @@ namespace Yunshop\WeightValue\Api; use app\common\components\ApiController; - +use app\common\models\Income; +use app\common\models\Member; +use app\common\models\member\MemberChildren; +use Yunshop\TeamDividend\models\TeamDividendLevelModel; +use Yunshop\WeightValue\models\WeightValue; class IndexController extends ApiController{ + /** + * Common: 权重值中心 - 信息获取 + * Author: wu-hui + * Time: 2023/10/19 10:50 + * @return \Illuminate\Http\JsonResponse + */ + public function getCenterData(){ + $data = []; + $uid = \YunShop::app()->getMemberId(); + $teamLevelId = request()->input('team_level_id');// 经销商等级id + // 获取等级信息 + $data['level_name'] = TeamDividendLevelModel::uniacid()->where('id',$teamLevelId)->value('level_name'); + // 获取当前用户信息 + $user = Member::getMemberById($uid,['uid','nickname','realname','avatar']); + $data['user'] = $user ? $user->toArray() : []; + // 获取可提现金额&团队人数 + $data['income'] = (float)Income::uniacid()->where('member_id', $uid)->where('status', 0)->sum('amount');// 可提现金额(仅计算未提现) + $data['total_income'] = (float)Income::uniacid()->where('member_id', $uid)->sum('amount');// 累计收入(包括已提现收入) + $data['team_total'] = MemberChildren::getTeamModel($uid)->count(); + // 获取统计信息 + $data['statistics'] = (new WeightValue())->getStatistics($uid,$teamLevelId); + + + return $this->successJson('success',$data); + } + + + + + + + + + + + + + diff --git a/plugins/weight-value/src/models/WeightValue.php b/plugins/weight-value/src/models/WeightValue.php index 3dc49386..9856847f 100644 --- a/plugins/weight-value/src/models/WeightValue.php +++ b/plugins/weight-value/src/models/WeightValue.php @@ -4,11 +4,17 @@ namespace Yunshop\WeightValue\models; use app\common\models\BaseModel; use app\common\models\Member; +use app\common\models\member\MemberChildren; use app\common\models\member\MemberParent; +use app\common\models\Order; use app\common\models\OrderGoods; use Illuminate\Support\Facades\DB; +use Yunshop\Commission\Listener\OrderCreatedListener; +use Yunshop\Commission\models\CommissionOrderGoods; +use Yunshop\ShareholderDividend\models\ShareholderDividendModel; use Yunshop\TeamDividend\models\TeamDividendAgencyModel; use Yunshop\TeamDividend\models\TeamDividendLevelModel; +use Yunshop\TeamDividend\models\TeamDividendModel; class WeightValue extends BaseModel{ @@ -280,8 +286,6 @@ class WeightValue extends BaseModel{ } - - /** * Common: 修改信息 * 必须是包含member_id、team_dividend_agency_level_id、quantity的二维数组 @@ -375,6 +379,158 @@ class WeightValue extends BaseModel{ return [$total,$ratio]; } + /** + * Common: 获取用户当前持有的权重值总数(支持根据经销商等级id获取某个等级的持有权重值) + * Author: wu-hui + * Time: 2023/10/19 10:12 + * @param int $uid + * @param int $teamLevelId + * @return string + */ + public static function getWeightValueQuantity(int $uid,int $teamLevelId = 0){ + $sumQuantity = self::uniacid() + ->where('member_id',$uid) + ->when((int)$teamLevelId > 0,function($query) use ($teamLevelId){ + $query->where('team_dividend_agency_level_id',$teamLevelId); + }) + ->sum('quantity'); + + return sprintf("%.2f",(float)$sumQuantity); + } + + + /** + * Common: 统计信息 - 全部统计信息获取及处理 + * Author: wu-hui + * Time: 2023/10/19 11:11 + * @param $uid + * @param $teamLevelId + * @return array[] + */ + public function getStatistics($uid,$teamLevelId){ + // 获取相关统计信息 + [$directPush,$recommendAgent] = $this->getCommissionGive($uid); + // 获取权重收益(当前等级相关的股东分红) + $weightIncome = ShareholderDividendModel::uniacid()->where('member_id',$uid)->where('team_level',$teamLevelId)->sum('amount'); + // 团队收益 + $teamIncomeInfo = $this->getCommissionInfo($uid); + // 权重值 + $weightValue = self::getWeightValueQuantity($uid,$teamLevelId); + // 团队订单信息 + $teamOrderInfo = self::getTeamOrderInfo($uid); + $list = [ + // 下级购买除【升级商品(购买当前商品可以升级到经销商)】外其他商品的 推广奖励(计算分销商奖励) + 'direct_push_give' => ['title' => '直推奖励','num' => (float)$directPush,'sort' => 1], + // 推荐代理 下级购买【升级商品(购买当前商品可以升级到经销商)】的 推广奖励(计算分销商奖励) + 'recommend_agent' => ['title' => '推荐代理','num' => (float)$recommendAgent,'sort' => 4], + // 根据持有权重 在【股东分红】中每周期分红所得金额(仅获取当前等级的权重值分红) + 'weight_income' => ['title' => '权重收益','num' => (float)$weightIncome,'sort' => 2], + // 本人当前持有的 本等级的权重值 + 'weight_value' => ['title' => '权重值','num' => $weightValue,'sort' => 10], + // 本团队所有相关订单的实际支付金额(不包括本人) + 'order_money' => ['title' => '总订单金额','num' => $teamOrderInfo['total_price'],'sort' => 11], + // 本团队所有相关订单总数 (不包括本人) + 'order_num' => ['title' => '总订单数','num' => $teamOrderInfo['total'],'sort' => 12], + ]; + // 获取经销商特殊身份 特殊身份:0=无特殊身份,1=经纪人,2=代理商,3=省级代理 + $identityType = (int)TeamDividendLevelModel::uniacid()->where('id',$teamLevelId)->value('identity_type'); + // 非经纪人 追加团队收益 + if($identityType != 1){ + // 本团队提供的所有推广奖励及其他相关奖励 (不包括本人) + $list['team_income'] = ['title' => '团队收益','num' => $teamIncomeInfo['commission'],'sort' => 3]; + } + // 非省公司 追加平级奖励 + if($identityType != 3){ + // 平级奖励 本人获得的所有平级奖 + $list['peer_level_reward'] = ['title' => '平级奖励','num' => $teamIncomeInfo['peer_level_reward'],'sort' => 5]; + } + + // 排序 + $sorts = array_column($list,'sort'); + array_multisort($sorts,SORT_ASC,$list); + + return $list; + } + /** + * Common: 统计信息 - 分销商相关统计 + * Author: wu-hui + * Time: 2023/10/18 16:34 + * @param $uid + * @return array|false|null + */ + private function getCommissionGive($uid){ + $info = DB::table('yz_commission_order_goods') + ->select([ + 'yz_commission_order_goods.commission_type', + DB::raw("sum(commission_money) as total_money") + ]) + ->join('yz_commission_order', 'yz_commission_order.id', 'yz_commission_order_goods.commission_order_id') + ->where('yz_commission_order.uniacid',\YunShop::app()->uniacid) + ->where('yz_commission_order.member_id',$uid) + ->where('yz_commission_order.status',2) + ->groupBy('yz_commission_order_goods.commission_type') + ->get() + ->toArray(); + $moneyInfo = array_column($info,'total_money','commission_type'); + + return [(float)$moneyInfo[0],(float)$moneyInfo[1]]; + } + /** + * Common: 统计信息 - 获取某个经销商提成统计信息(仅统计已结算且结算金额类型为收入的提成信息) + * Author: wu-hui + * Time: 2023/10/19 10:00 + * @param $uid + * @return array + */ + private function getCommissionInfo($uid){ + // 获取内容 + $info = TeamDividendModel::uniacid() + ->select(DB::raw('sum(dividend_amount) as total_sum'),'type') + ->where('member_id',$uid) + ->where('status',1) + ->where('settle_money_type',1) + ->groupBy('type') + ->get() + ->toArray(); + $infoTypeGroup = array_flip(array_column($info,'type','total_sum')); + + // 分红类型 0:分红佣金 1:平级奖 + return [ + 'total' => (float)array_sum($infoTypeGroup),// 总计 - 已结算收入提成 + 'commission' => (float)$infoTypeGroup[0],// 分红佣金 - 已结算收入提成 + 'peer_level_reward' => (float)$infoTypeGroup[1],// 平级奖 - 已结算收入提成 + ]; + } + /** + * Common: 统计信息 - 获取团队订单统计信息(订单总金额、总订单数) + * Author: wu-hui + * Time: 2023/10/19 10:38 + * @param $uid + * @return array + */ + private function getTeamOrderInfo($uid){ + $orderStatistics = [ + 'total_price' => 0.00, + 'total' => 0, + ]; + $subUserIds = MemberChildren::getTeamModel($uid)->pluck('yz_member_children.child_id')->toArray(); + if(count($subUserIds) > 0){ + $orderInfo = Order::uniacid() + ->select(DB::raw('sum(price) as total_price,count(id) as total')) + ->whereIn('uid',$subUserIds) + ->where('uid','!=',$uid) + ->first(); + $orderStatistics = [ + 'total_price' => sprintf("%.2f",(float)$orderInfo->total_price), + 'total' => (int)$orderInfo->total, + ]; + } + + return $orderStatistics; + } + + + /**