From db1fbfcf5916cc787fb2ae9416cada315fecbcb8 Mon Sep 17 00:00:00 2001 From: wuhui_zzw <1760308791@qq.com> Date: Mon, 20 Nov 2023 17:39:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=9A=E8=A3=85=E4=BF=AE?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E9=93=BE=E6=8E=A5=E9=80=89=E6=8B=A9=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E6=B7=BB=E5=8A=A0=E6=96=87=E5=88=9B=E7=A9=BA=E9=97=B4?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E4=B8=AD=E5=BF=83=E9=93=BE=E6=8E=A5=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=9A=E6=96=87=E5=88=9B=E7=A9=BA=E9=97=B4?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E4=B8=AD=E5=BF=83=E7=BB=9F=E8=AE=A1=E4=BF=A1?= =?UTF-8?q?=E6=81=AF(=E5=8A=A0=E6=9D=83=E6=94=B6=E7=9B=8A=E6=9C=AA?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/common/services/ComponentService.php | 9 ++- .../cultural-space/src/PluginApplication.php | 2 +- .../src/api/IndexController.php | 39 +++++++++ .../src/models/ContributionBonusLog.php | 21 +++++ .../src/models/CulturalSpace.php | 81 +++++++++++++++++++ .../src/Listener/OrderPaidListener.php | 3 +- .../src/admin/TeamAgencyController.php | 6 +- .../src/models/TeamDividendModel.php | 27 +++++++ 8 files changed, 180 insertions(+), 8 deletions(-) create mode 100644 plugins/cultural-space/src/api/IndexController.php diff --git a/app/common/services/ComponentService.php b/app/common/services/ComponentService.php index b2ab04c7..1a72ec63 100644 --- a/app/common/services/ComponentService.php +++ b/app/common/services/ComponentService.php @@ -348,6 +348,7 @@ class ComponentService $uniacid = \YunShop::app()->uniacid; // 获取经销商等级列表 $lvList = TeamDividendLevelModel::uniacid() + ->where('level_type',0) ->select(['id','level_name']) ->get() ->toArray(); @@ -356,8 +357,8 @@ class ComponentService $data[] = [ 'name' => $lvItem['level_name'].'中心', 'mini_url' => '', - 'path_url' => yzAppFullUrl('member/weight_value_home',['team_level_id'=>$lvItem['id']]), - 'url' => "member/weight_value_home?i={$uniacid}&team_level_id={$lvItem['id']}&", + 'path_url' => yzAppFullUrl('member/weight_value_home',['team_level_id'=>$lvItem['id'],'content_type'=>'broker']), + 'url' => "member/weight_value_home?i={$uniacid}&team_level_id={$lvItem['id']}&content_type=broker&", ]; } @@ -375,6 +376,7 @@ class ComponentService protected static function otherLink() { $name = '其他链接'; + $uniacid = \YunShop::app()->uniacid; //如果是插件请加上plugin_name $data = [ ['name' => '会员信息', 'mini_url' => '/packageA/member/info/info', 'url' => 'member/info', 'plugin_name' => ''], @@ -406,6 +408,7 @@ class ComponentService ['name' => '典藏室', 'mini_url' => '', 'url' => 'member/collection_room'], ['name' => '关于我们', 'mini_url' => '', 'url' => 'member/tool/about_us'], ['name' => '消息中心', 'mini_url' => '', 'url' => 'member/message_center/index'], + ['name' => '文创空间管理中心', 'mini_url' => '', 'url' => "member/weight_value_home?i={$uniacid}&content_type=cultural_space&", 'plugin_name' => 'cultural-space','params'=>['type'=>'cultural_space']], ]; $data = static::delNotOpenPlugin($data); @@ -433,7 +436,7 @@ class ComponentService unset($pluginList[$pluginKey]['plugin_name']); } //完整url - $plugin['path_url'] = isset($plugin['url']) ? yzAppFullUrl($plugin['url']) : null; + $plugin['path_url'] = isset($plugin['url']) ? yzAppFullUrl($plugin['url'],($plugin['params'] ?? [])) : null; } $pluginList = array_values($pluginList); return $pluginList; diff --git a/plugins/cultural-space/src/PluginApplication.php b/plugins/cultural-space/src/PluginApplication.php index 3fbecf60..349582af 100644 --- a/plugins/cultural-space/src/PluginApplication.php +++ b/plugins/cultural-space/src/PluginApplication.php @@ -12,7 +12,7 @@ class PluginApplication extends \app\common\services\PluginApplication{ \app\backend\modules\menu\Menu::current()->setPluginMenu('cultural-space', [ 'name' => '文创空间', 'type' => 'marketing', - 'url' => 'plugin.cultural-space.admin.index.index',// url 可以填写http 也可以直接写路由 + 'url' => 'plugin.cultural-space.admin.contribution.index',// url 可以填写http 也可以直接写路由 'url_params' => '',//如果是url填写的是路由则启用参数否则不启用 'permit' => 1,//如果不设置则不会做权限检测 'menu' => 1,//如果不设置则不显示菜单,子菜单也将不显示 diff --git a/plugins/cultural-space/src/api/IndexController.php b/plugins/cultural-space/src/api/IndexController.php new file mode 100644 index 00000000..0a98e2f8 --- /dev/null +++ b/plugins/cultural-space/src/api/IndexController.php @@ -0,0 +1,39 @@ +getMemberId(); + // 获取等级信息 + $data['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 CulturalSpace())->getStatistics($uid); + + return $this->successJson('success',$data); + } + + + + + + + + +} \ No newline at end of file diff --git a/plugins/cultural-space/src/models/ContributionBonusLog.php b/plugins/cultural-space/src/models/ContributionBonusLog.php index d7400079..b2b2e83c 100644 --- a/plugins/cultural-space/src/models/ContributionBonusLog.php +++ b/plugins/cultural-space/src/models/ContributionBonusLog.php @@ -52,6 +52,27 @@ class ContributionBonusLog extends BaseModel{ return $list ? $list->toArray() : []; } + /** + * Common: 获取用户贡献值分红 + * Author: wu-hui + * Time: 2023/11/20 16:06 + * @param int $uid 用户id + * @param string $incomeStatus all=全部收益;undrawn=未提现收益,withdrawn=已提现收益 + * @return float + */ + public static function getIncomeSum(int $uid,string $incomeStatus = 'all'){ + return (float)self::uniacid() + ->leftJoin('yz_member_income', function ($join) { + $join->on('yz_member_income.member_id', 'yz_cultural_space_contribution_bonus_log.uid')->on('yz_member_income.incometable_id', 'yz_cultural_space_contribution_bonus_log.id'); + }) + ->where('yz_member_income.dividend_code',201) + ->where('yz_cultural_space_contribution_bonus_log.uid',$uid) + ->when($incomeStatus != 'all',function($query) use ($incomeStatus){ + $query->where('yz_member_income.status',$incomeStatus == 'undrawn' ? 0 : 1); + }) + ->sum('yz_member_income.amount'); + } + /** diff --git a/plugins/cultural-space/src/models/CulturalSpace.php b/plugins/cultural-space/src/models/CulturalSpace.php index b9898a24..6b3fdea4 100644 --- a/plugins/cultural-space/src/models/CulturalSpace.php +++ b/plugins/cultural-space/src/models/CulturalSpace.php @@ -4,8 +4,13 @@ use app\common\facades\Setting; use app\common\models\BaseModel; use app\common\models\Member; use app\common\models\member\MemberParent; +use app\common\models\Order; use app\common\models\OrderGoods; use Illuminate\Support\Facades\DB; +use Yunshop\TeamDividend\admin\models\MemberChild; +use Yunshop\TeamDividend\models\TeamDividendAgencyModel; +use Yunshop\TeamDividend\models\TeamDividendModel; + class CulturalSpace extends BaseModel { @@ -297,6 +302,82 @@ class CulturalSpace extends BaseModel return $memberList; } + + public function getStatistics($uid){ + // 服务收益 经销商 津贴(补贴) 奖励 + $serviceIncome = TeamDividendModel::getTypeTotalIncome((int)$uid,(int)4); + // 贡献收益 经销商 津贴(补贴)平级奖 奖励 + $contributionIncome = TeamDividendModel::getTypeTotalIncome((int)$uid,(int)5); + // 贡献值分红 + $contributionBonus = ContributionBonusLog::getIncomeSum($uid); + // 获取文创空间用户信息 + $culturalSpace = CulturalSpace::uniacid()->where('uid',$uid)->select(['uid','contribution','voucher_number'])->first(); + if($culturalSpace) $culturalSpace = $culturalSpace->toArray(); + // 当前文创豆汇率 + $exchangeRate = CulturalFund::uniacid()->value('current_fee'); + // 文创豆收益 + $legumesIncome = sprintf("%.2f",$culturalSpace['voucher_number'] * $exchangeRate); + // 获取小区业绩(去除最大的线的业绩)和团队总业绩 + $teamAmount = $this->getTeamOrderAmount($uid); + + + + + // $isPartner = 0; + $list = [ + 'service_income' => ['key_name' => 'service_income','title' => '服务收益','num' => $serviceIncome,'sort' => 0], + 'contribution_income' => ['key_name' => 'contribution_income','title' => '贡献收益','num' => $contributionIncome,'sort' => 1], + 'contribution_bonus' => ['key_name' => 'contribution_bonus','title' => '贡献值分红','num' => $contributionBonus,'sort' => 2], + 'legumes' => ['key_name' => 'legumes','title' => '文创豆','num' => $culturalSpace['voucher_number'],'sort' => 3], + 'legumes_income' => ['key_name' => 'legumes_income','title' => '文创豆收益','num' => $legumesIncome,'sort' => 4], + 'contribution_value' => ['key_name' => 'contribution_value','title' => '贡献值','num' => $culturalSpace['contribution'],'sort' => 5], + 'area_performance' => ['key_name' => 'area_performance','title' => '小区业绩','num' => $teamAmount['team_amount'],'sort' => 7], + 'team_performance' => ['key_name' => 'service_revenue','title' => '团队总业绩','num' => $teamAmount['area_amount'],'sort' => 8], + 'weight_income' => ['key_name' => 'weight_income','title' => '加权收益','num' => 0,'sort' => 9], + ]; + // 合伙人等级增加显示加权收益,不显示服务收益、贡献收益、贡献值分红 + // if($isPartner) unset($list['service_income'],$list['contribution_income'],$list['contribution_bonus']); + // else unset($list['weight_income']); + // 排序 + $sorts = array_column($list,'sort'); + array_multisort($sorts,SORT_ASC,$list); + + return $list; + } + /** + * Common: 获取团队业绩 + * Author: wu-hui + * Time: 2023/11/20 16:18 + * @return float[] + */ + public function getTeamOrderAmount($uid){ + // 获取直推下级列表 + $subIds = MemberChild::uniacid() + ->where('level',1) + ->where('member_id',$uid) + ->pluck('child_id') + ->toArray(); + $subPerformance = [];// 每条线的业绩 + foreach($subIds as $subUid){ + $lineAllUid = MemberChild::uniacid()->where('member_id',$subUid)->pluck('child_id')->toArray(); + $lineAllUid[] = $subUid; + $subPerformance[$subUid] = Order::whereIn('uid',$lineAllUid)->where('status','>=',0)->sum('yz_order.price'); + } + // 计算业绩 小区业绩 && 团队总业绩 + $teamAmount = (float)sprintf("%.2f",array_sum($subPerformance));// 总业绩 + $maxAmount = max($subPerformance);// 最大一条线的业绩 + $areaAmount = (float)sprintf("%.2f",$teamAmount - $maxAmount);// 小区业绩 = 总业绩 - 最大一条线的业绩 + + return [ + 'team_amount' => $teamAmount, + 'area_amount' => $areaAmount + ]; + } + + + + + /** * Common: 一对一关联 用户信息 * Author: wu-hui diff --git a/plugins/shareholder-dividend/src/Listener/OrderPaidListener.php b/plugins/shareholder-dividend/src/Listener/OrderPaidListener.php index 6963b3ac..d365b227 100644 --- a/plugins/shareholder-dividend/src/Listener/OrderPaidListener.php +++ b/plugins/shareholder-dividend/src/Listener/OrderPaidListener.php @@ -17,8 +17,9 @@ class OrderPaidListener{ public function subscribe(Dispatcher $events){ $events->listen(\app\common\events\order\AfterOrderPaidEvent::class, function ($event) { - date_default_timezone_set("PRC"); $model = $event->getOrderModel(); + \Log::debug('--- 股东分红 - 订单支付成功后进行结算 - 触发 ----',$model->id); + date_default_timezone_set("PRC"); (new TimedTaskService())->shareholderDividendOrder($model->id); }); } diff --git a/plugins/team-dividend/src/admin/TeamAgencyController.php b/plugins/team-dividend/src/admin/TeamAgencyController.php index 640e6adf..e51c6989 100644 --- a/plugins/team-dividend/src/admin/TeamAgencyController.php +++ b/plugins/team-dividend/src/admin/TeamAgencyController.php @@ -393,9 +393,9 @@ class TeamAgencyController extends BaseController public function test(){ //因为model偶尔会出现status异常的问题,所以重新查询一遍 - $model = Order::with('hasManyOrderGoods')->find(84); - $set = \Setting::get('plugin.team_dividend'); - (new NewUpgrateJob($model->uid, $set, $model->uniacid, TeamDividendLevelUpgrade::ORDER_PAY, $model))->handle(); + // $model = Order::with('hasManyOrderGoods')->find(84); + // $set = \Setting::get('plugin.team_dividend'); + // (new NewUpgrateJob($model->uid, $set, $model->uniacid, TeamDividendLevelUpgrade::ORDER_PAY, $model))->handle(); // $order = Order::find(87); // $TeamReturnService = ReturnConfig::getClass(); diff --git a/plugins/team-dividend/src/models/TeamDividendModel.php b/plugins/team-dividend/src/models/TeamDividendModel.php index 948404c8..1f1fd7b3 100644 --- a/plugins/team-dividend/src/models/TeamDividendModel.php +++ b/plugins/team-dividend/src/models/TeamDividendModel.php @@ -467,4 +467,31 @@ class TeamDividendModel extends BaseModel return $query->orderBy('yz_team_dividend.id', 'desc'); } + + /** + * Common: 获取用户某个类型的提成 + * Author: wu-hui + * Time: 2023/11/20 15:15 + * @param int $uid 用户id + * @param int $type 4=服务收益,5=贡献收益 + * @param string $incomeStatus all=全部收益;undrawn=未提现收益,withdrawn=已提现收益 + * @return float + */ + public static function getTypeTotalIncome(int $uid,int $type,string $incomeStatus = 'all'){ + return (float)self::uniacid() + ->leftJoin('yz_member_income', function ($join) { + $join->on('yz_member_income.member_id', 'yz_team_dividend.member_id')->on('yz_member_income.incometable_id', 'yz_team_dividend.id'); + }) + ->where('yz_member_income.dividend_code',2) + ->where('yz_team_dividend.type',$type) + ->where('yz_team_dividend.member_id',$uid) + ->when($incomeStatus != 'all',function($query) use ($incomeStatus){ + $query->where('yz_member_income.status',$incomeStatus == 'undrawn' ? 0 : 1); + }) + ->sum('yz_member_income.amount'); + } + + + + } \ No newline at end of file