From 24b2c3aa228db19d64f76d19d90bcc8058134e5a Mon Sep 17 00:00:00 2001
From: wuhui_zzw <1760308791@qq.com>
Date: Thu, 19 Oct 2023 11:43:12 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=9A=E6=9D=83=E9=87=8D?=
=?UTF-8?q?=E5=80=BC=E4=B8=AD=E5=BF=83=E4=BF=A1=E6=81=AF=E8=8E=B7=E5=8F=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/common/models/Member.php | 16 +-
app/common/models/member/MemberChildren.php | 23 +++
.../src/admin/IndexController.php | 2 +-
.../views/admin/level-set-add.blade.php | 19 +++
.../weight-value/src/api/IndexController.php | 44 ++++-
.../weight-value/src/models/WeightValue.php | 160 +++++++++++++++++-
6 files changed, 254 insertions(+), 10 deletions(-)
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;
+ }
+
+
+
/**