diff --git a/plugins/cultural-space/src/models/CulturalSpace.php b/plugins/cultural-space/src/models/CulturalSpace.php index 5b76ccca..e414ca0a 100644 --- a/plugins/cultural-space/src/models/CulturalSpace.php +++ b/plugins/cultural-space/src/models/CulturalSpace.php @@ -415,8 +415,9 @@ class CulturalSpace extends BaseModel $areaAmount = (float)sprintf("%.2f",$teamAmount - $maxAmount);// 小区业绩 = 总业绩 - 最大一条线的业绩 return [ - 'team_amount' => $teamAmount, - 'area_amount' => $areaAmount + 'team_amount' => (float)$teamAmount, + 'area_amount' => (float)$areaAmount, + 'max_amount' => (float)$maxAmount ]; } diff --git a/plugins/team-dividend/src/PluginApplication.php b/plugins/team-dividend/src/PluginApplication.php index d4269c77..8b016782 100644 --- a/plugins/team-dividend/src/PluginApplication.php +++ b/plugins/team-dividend/src/PluginApplication.php @@ -578,59 +578,83 @@ class PluginApplication extends \app\common\services\PluginApplication ], ], // 店长管理 - 'team_dividend_store_manager' => [ - 'name' => '店长管理', - 'url' => 'plugin.team-dividend.admin.store-manager.index', - 'url_params' => '', - 'permit' => 1, - 'menu' => 1, - 'icon' => '', - 'item' => 'team_dividend', - 'parents' => ['team_dividend'], - 'child' => [ - 'team_dividend_store_manager_index' => [ - 'name' => '店长列表', - 'url' => 'plugin.team-dividend.admin.store-manager.index', - 'url_params' => '', - 'permit' => 1, - 'menu' => 0, - 'icon' => '', - 'item' => 'team_dividend_store_manager_index', - 'parents' => ['team_dividend', 'team_dividend_store_manager'], - ], - 'team_dividend_store_manager_addInfo' => [ - 'name' => '添加店长', - 'url' => 'plugin.team-dividend.admin.store-manager.addInfo', - 'url_params' => '', - 'permit' => 1, - 'menu' => 0, - 'icon' => '', - 'item' => 'team_dividend_store_manager_addInfo', - 'parents' => ['team_dividend', 'team_dividend_store_manager'], - ], - 'team_dividend_store_manager_change_status' => [ - 'name' => '删除店长', - 'url' => 'plugin.team-dividend.admin.store-manager.change-status', - 'url_params' => '', - 'permit' => 1, - 'menu' => 0, - 'icon' => '', - 'item' => 'team_dividend_store_manager_change_status', - 'parents' => ['team_dividend', 'team_dividend_store_manager'], - ], - 'team_dividend_store_manager_change_see_info' => [ - 'name' => '查看店补', - 'url' => 'plugin.team-dividend.admin.store-manager.see-info', - 'url_params' => '', - 'permit' => 1, - 'menu' => 0, - 'icon' => '', - 'item' => 'team_dividend_store_manager_see_info', - 'parents' => ['team_dividend', 'team_dividend_store_manager'], - ], + // 'team_dividend_store_manager' => [ + // 'name' => '店长管理', + // 'url' => 'plugin.team-dividend.admin.store-manager.index', + // 'url_params' => '', + // 'permit' => 1, + // 'menu' => 1, + // 'icon' => '', + // 'item' => 'team_dividend', + // 'parents' => ['team_dividend'], + // 'child' => [ + // 'team_dividend_store_manager_index' => [ + // 'name' => '店长列表', + // 'url' => 'plugin.team-dividend.admin.store-manager.index', + // 'url_params' => '', + // 'permit' => 1, + // 'menu' => 0, + // 'icon' => '', + // 'item' => 'team_dividend_store_manager_index', + // 'parents' => ['team_dividend', 'team_dividend_store_manager'], + // ], + // 'team_dividend_store_manager_addInfo' => [ + // 'name' => '添加店长', + // 'url' => 'plugin.team-dividend.admin.store-manager.addInfo', + // 'url_params' => '', + // 'permit' => 1, + // 'menu' => 0, + // 'icon' => '', + // 'item' => 'team_dividend_store_manager_addInfo', + // 'parents' => ['team_dividend', 'team_dividend_store_manager'], + // ], + // 'team_dividend_store_manager_change_status' => [ + // 'name' => '删除店长', + // 'url' => 'plugin.team-dividend.admin.store-manager.change-status', + // 'url_params' => '', + // 'permit' => 1, + // 'menu' => 0, + // 'icon' => '', + // 'item' => 'team_dividend_store_manager_change_status', + // 'parents' => ['team_dividend', 'team_dividend_store_manager'], + // ], + // 'team_dividend_store_manager_change_see_info' => [ + // 'name' => '查看店补', + // 'url' => 'plugin.team-dividend.admin.store-manager.see-info', + // 'url_params' => '', + // 'permit' => 1, + // 'menu' => 0, + // 'icon' => '', + // 'item' => 'team_dividend_store_manager_see_info', + // 'parents' => ['team_dividend', 'team_dividend_store_manager'], + // ], + // + // ] + // ], - ] - ], + // 团队信息 + 'team_dividend_team' => [ + 'name' => '团队信息', + 'url' => 'plugin.team-dividend.admin.team.index', + 'url_params' => '', + 'permit' => 1, + 'menu' => 1, + 'icon' => '', + 'item' => 'team_dividend', + 'parents' => ['team_dividend'], + 'child' => [ + 'team_dividend_team_index' => [ + 'name' => '团队信息', + 'url' => 'plugin.team-dividend.admin.team.index', + 'url_params' => '', + 'permit' => 1, + 'menu' => 0, + 'icon' => '', + 'item' => 'team_dividend_team_index', + 'parents' => ['team_dividend', 'team_dividend_team'], + ], + ] + ], ] ]); } diff --git a/plugins/team-dividend/src/admin/TeamController.php b/plugins/team-dividend/src/admin/TeamController.php new file mode 100644 index 00000000..7ee7fc44 --- /dev/null +++ b/plugins/team-dividend/src/admin/TeamController.php @@ -0,0 +1,67 @@ +input('page_size',10); + $search = request()->input('search'); + // 获取全部团队的小区业绩总和 + $minAreaSumAmount = TeamDividendAgencyModel::teamMinAreaSumAmount(); + // 获取列表信息 + $result = TeamDividendAgencyModel::teamGetAllList($pageSize,$search); + foreach($result['data'] as &$dataInfo){ + $dataInfo['team_performance'] = (new CulturalSpace())->getTeamOrderAmount($dataInfo['uid']); + $dataInfo['team_performance']['area_amount_rate'] = (float)sprintf("%.2f",(float)$dataInfo['team_performance']['area_amount'] / $minAreaSumAmount * 100); + } + + $data = [ + 'list' => $result['data'], + 'pager' => PaginationHelper::show($result['total'],$result['current_page'],$result['per_page']), + 'search' => $search, + 'min_area_sum_amount' => $minAreaSumAmount + ]; + + return view('Yunshop\TeamDividend::admin.team.index',$data)->render(); + } + /** + * Common: 查看团队业绩明细 + * Author: wu-hui + * Time: 2024/01/05 14:39 + * @return array|string + * @throws \Throwable + */ + public function teamPerformanceList(){ + //参数获取 + $uid = request()->input('uid'); + // 获取每条线的业绩 + $lineData = TeamDividendAgencyModel::teamGetPerformanceList($uid); + // 获取团队长信息 + $ids = array_column($lineData['line_list'],'sub_uid'); + $lineData['user_list'] = Member::select(['uid','nickname','realname','avatar'])->whereIn('uid',$ids)->get()->keyBy('uid')->toArray(); + + + return view('Yunshop\TeamDividend::admin.team.record',$lineData)->render(); + } + + + + + +} \ No newline at end of file diff --git a/plugins/team-dividend/src/models/TeamDividendAgencyModel.php b/plugins/team-dividend/src/models/TeamDividendAgencyModel.php index 93af7c39..a1908817 100644 --- a/plugins/team-dividend/src/models/TeamDividendAgencyModel.php +++ b/plugins/team-dividend/src/models/TeamDividendAgencyModel.php @@ -5,11 +5,15 @@ namespace Yunshop\TeamDividend\models; use app\backend\models\BackendModel; +use app\common\models\Member; use app\common\models\member\MemberChildren; use app\common\models\MemberShopInfo; +use app\common\models\Order; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Support\Facades\DB; use Illuminate\Validation\Rule; +use Yunshop\CulturalSpace\models\CulturalSpace; +use Yunshop\TeamDividend\admin\models\MemberChild; use Yunshop\TeamDividend\observers\DealerObserver; use Yunshop\TeamDividend\services\UpgradeService; @@ -463,4 +467,116 @@ class TeamDividendAgencyModel extends BackendModel } } } + + + /** + * Common: 团队信息 - 获取全部团队信息列表(分页) + * Author: wu-hui + * Time: 2024/01/05 13:32 + * @param $pageSize + * @param $search + * @return array + */ + public static function teamGetAllList($pageSize,$search){ + // 条件生成 + $where = []; + if($search['uid'] > 0) $where[] = ['uid','=',$search['uid']]; + // 列表获取 + $model = self::uniacid() + ->select(['id','uid']) + ->where($where) + ->when(!empty($search['nickname']),function($query) use ($search){ + // 合伙人 昵称|真实姓名搜索 + $ids = Member::where('nickname','like',"%{$search['nickname']}%") + ->orwhere('realname','like',"%{$search['nickname']}%") + ->pluck('uid'); + if($ids) $ids = $ids->toArray(); + $query->whereIn('uid',(array)$ids); + }) + ->with([ + 'hasOneMember' => function($query){ + $query->select(['uid','nickname','realname','avatar']); + } + ]) + ->orderBy('created_at','DESC') + ->orderBy('id','DESC'); + $list = $model->paginate($pageSize); + + return $list ? $list->toArray() : []; + } + /** + * Common: 团队信息 - 获某个用户的所有团队业绩信息(仅获取直推团队) + * Author: wu-hui + * Time: 2024/01/05 13:37 + * @param $uid + * @return array + */ + public static function teamGetPerformanceList($uid):array{ + // 获取直推下级列表 + $subIds = MemberChild::uniacid() + ->where('level',1) + ->where('member_id',$uid) + ->pluck('child_id') + ->toArray(); + $data = [ + 'line_list' => [],// 每条线的信息 + 'min_line' => [],// 业绩最少的一条线的信息 + 'max_line' => [],// 业绩最多的一条线的信息 + ]; + foreach($subIds as $subUid){ + $lineAllUid = MemberChild::uniacid()->where('member_id',$subUid)->pluck('child_id')->toArray(); + $lineAllUid[] = $subUid; + $subPerformance = Order::uniacid() + ->leftJoin('yz_order_goods','yz_order_goods.order_id','yz_order.id') + ->leftJoin('yz_goods_cultural_space','yz_goods_cultural_space.goods_id','yz_order_goods.goods_id') + ->whereIn('yz_order.uid',$lineAllUid) + ->where('yz_order.status','>',0) + ->where('yz_goods_cultural_space.is_open',1) + ->sum('yz_order_goods.payment_amount'); + // 信息处理赋值 + $currentLineData = [ + 'sub_uid' => $subUid, + 'line_all_uid' => implode(',',$lineAllUid), + 'performance' => $subPerformance, + ]; + $data['line_list'][] = $currentLineData; + // 判断:当前线是否为最小业绩 + if((float)$currentLineData['performance'] < (float)$data['min_line']['performance'] || (float)$data['min_line']['performance'] <= 0){ + $data['min_line'] = $currentLineData; + } + // 判断:当前线是否为大区业绩 + if((float)$currentLineData['performance'] > (float)$data['max_line']['performance']){ + $data['max_line'] = $currentLineData; + } + } + + return $data; + } + /** + * Common: 团队信息 - 获取全部经销商的小区业绩之和 + * Author: wu-hui + * Time: 2024/01/05 14:08 + * @return float|int + */ + public static function teamMinAreaSumAmount(){ + // 小区业绩 = 总业绩 - 最大一条线的业绩 + $uidList = self::uniacid()->pluck('uid'); + $totalPerformance = 0;// 全平台所有用户小区业绩之和 + foreach($uidList as $uid){ + // 获取团队业绩信息 + $teamPerformance = (new CulturalSpace())->getTeamOrderAmount($uid); + $totalPerformance += (float)$teamPerformance['area_amount']; + } + + return $totalPerformance; + } + + + + + + + + + } \ No newline at end of file diff --git a/plugins/team-dividend/views/admin/team/index.blade.php b/plugins/team-dividend/views/admin/team/index.blade.php new file mode 100644 index 00000000..50874442 --- /dev/null +++ b/plugins/team-dividend/views/admin/team/index.blade.php @@ -0,0 +1,122 @@ +@extends('layouts.base') + +@section('content') +
| UID | +店长信息 | +总业绩 | +小区业绩 / 平台小区业绩占比 | +大区业绩 | +操作 | +
|---|---|---|---|---|---|
| {{ $item['uid'] }} | +
+
+
+
+
+
+ |
+ {{ $item['team_performance']['team_amount'] ?? '0.00' }} | +{{ $item['team_performance']['area_amount'] ?? '0.00'}} / {{ $item['team_performance']['area_amount_rate'] ?? '0'}}% | +{{ $item['team_performance']['max_amount'] ?? '0.00' }} | ++ + | +
| 用户信息 | +当前团队人数 | +团队业绩 | +
|---|---|---|
|
+
+
+
+
+
+ |
+ {{ count(explode(',',$item['line_all_uid'])) }} | +
+
+ {{ $item['performance'] }}
+ @if(count($line_list) > 1)
+ @if($item['sub_uid'] == $min_line['sub_uid']) 最大业绩 @endif
+ @if($item['sub_uid'] == $max_line['sub_uid']) 最小业绩 @endif
+ @endif
+
+ |
+