获取球队详细信息以及成员列表
<h1>获取球队详情和成员(增强版)</h1>
<h2>接口信息</h2>
<ul>
<li><strong>接口名称</strong>: 获取球队详情和成员(增强版)</li>
<li><strong>接口描述</strong>: 获取球队基本信息、成员详细信息列表,并判断当前用户是否为球队负责人</li>
<li><strong>请求URL</strong>: <code>/api/team/detailWithMembers/{teamId}</code></li>
<li><strong>请求方式</strong>: <code>GET</code></li>
<li><strong>认证方式</strong>: 匿名访问(@Anonymous)</li>
</ul>
<h2>请求参数</h2>
<h3>路径参数</h3>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">示例值</th>
<th>必选</th>
<th style="text-align: left;">类型</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">teamId</td>
<td style="text-align: left;">101</td>
<td>是</td>
<td style="text-align: left;">Long</td>
<td style="text-align: left;">球队ID</td>
</tr>
</tbody>
</table>
<h2>响应示例</h2>
<h3>成功响应</h3>
<pre><code class="language-json">{
&quot;code&quot;: 200,
&quot;msg&quot;: &quot;操作成功&quot;,
&quot;data&quot;: {
&quot;team&quot;: {
&quot;teamId&quot;: 101,
&quot;teamName&quot;: &quot;篮球队A&quot;,
&quot;teamType&quot;: &quot;A&quot;,
&quot;teamTypeName&quot;: &quot;整建制&quot;,
&quot;leaderName&quot;: &quot;张三&quot;,
&quot;leaderPhone&quot;: &quot;13800138000&quot;,
&quot;managerName&quot;: &quot;李四&quot;,
&quot;managerPhone&quot;: &quot;13900139000&quot;,
&quot;managerUserId&quot;: 1001,
&quot;headCoachName&quot;: &quot;王五&quot;,
&quot;headCoachPhone&quot;: &quot;13700137000&quot;,
&quot;province&quot;: &quot;广东省&quot;,
&quot;city&quot;: &quot;深圳市&quot;,
&quot;address&quot;: &quot;南山区科技园&quot;,
&quot;teamLogo&quot;: &quot;path/team_logo.jpg&quot;,
&quot;status&quot;: &quot;1&quot;,
&quot;statusName&quot;: &quot;正常&quot;,
&quot;memberNum&quot;: 2,
&quot;createTime&quot;: &quot;2025-01-27 10:00:00&quot;,
&quot;updateTime&quot;: &quot;2025-01-27 10:00:00&quot;
},
&quot;members&quot;: [
{
&quot;memberId&quot;: 201,
&quot;teamId&quot;: 101,
&quot;userId&quot;: 1001,
&quot;memberType&quot;: &quot;1&quot;,
&quot;joinStatus&quot;: &quot;1&quot;,
&quot;joinTime&quot;: &quot;2025-01-27 10:00:00&quot;,
&quot;realName&quot;: &quot;张三&quot;,
&quot;name&quot;: &quot;张三&quot;,
&quot;gender&quot;: &quot;男&quot;,
&quot;phone&quot;: &quot;13800138000&quot;,
&quot;idCard&quot;: &quot;110101199001021234&quot;,
&quot;birthDate&quot;: &quot;1990-01-02&quot;,
&quot;ethnicity&quot;: &quot;汉族&quot;,
&quot;provinceCity&quot;: &quot;北京市&quot;,
&quot;position&quot;: &quot;1号位&quot;,
&quot;height&quot;: 185.00,
&quot;weight&quot;: 75.00,
&quot;jerseySize&quot;: &quot;XL&quot;,
&quot;athleteLevel&quot;: &quot;一级运动员&quot;,
&quot;playerResume&quot;: &quot;多次参加校级联赛,表现突出&quot;,
&quot;playerAvatar&quot;: &quot;path/photo1001.jpg&quot;,
&quot;jerseyNumber&quot;: &quot;NO.1&quot;,
&quot;status&quot;: &quot;正常&quot;,
&quot;banUntil&quot;: null
},
{
&quot;memberId&quot;: 202,
&quot;teamId&quot;: 101,
&quot;userId&quot;: 1002,
&quot;memberType&quot;: &quot;1&quot;,
&quot;joinStatus&quot;: &quot;1&quot;,
&quot;joinTime&quot;: &quot;2025-01-28 10:00:00&quot;,
&quot;realName&quot;: &quot;李四&quot;,
&quot;name&quot;: &quot;李四&quot;,
&quot;gender&quot;: &quot;女&quot;,
&quot;phone&quot;: &quot;13900139000&quot;,
&quot;idCard&quot;: &quot;120103199102022345&quot;,
&quot;birthDate&quot;: &quot;1991-02-02&quot;,
&quot;ethnicity&quot;: &quot;满族&quot;,
&quot;provinceCity&quot;: &quot;天津市&quot;,
&quot;position&quot;: &quot;2号位&quot;,
&quot;height&quot;: 178.50,
&quot;weight&quot;: 70.20,
&quot;jerseySize&quot;: &quot;XL&quot;,
&quot;athleteLevel&quot;: &quot;二级运动员&quot;,
&quot;playerResume&quot;: &quot;经验丰富,擅长防守&quot;,
&quot;playerAvatar&quot;: &quot;path/photo1002.jpg&quot;,
&quot;jerseyNumber&quot;: &quot;NO.2&quot;,
&quot;status&quot;: &quot;正常&quot;,
&quot;banUntil&quot;: null
}
],
&quot;memberCount&quot;: 2,
&quot;isTeamManager&quot;: true,
&quot;canTransferManager&quot;: true
}
}</code></pre>
<h3>未登录用户响应</h3>
<pre><code class="language-json">{
&quot;code&quot;: 200,
&quot;msg&quot;: &quot;操作成功&quot;,
&quot;data&quot;: {
&quot;team&quot;: {
&quot;teamId&quot;: 101,
&quot;teamName&quot;: &quot;篮球队A&quot;,
&quot;teamType&quot;: &quot;A&quot;,
&quot;teamTypeName&quot;: &quot;整建制&quot;,
&quot;leaderName&quot;: &quot;张三&quot;,
&quot;leaderPhone&quot;: &quot;13800138000&quot;,
&quot;managerName&quot;: &quot;李四&quot;,
&quot;managerPhone&quot;: &quot;13900139000&quot;,
&quot;managerUserId&quot;: 1001,
&quot;headCoachName&quot;: &quot;王五&quot;,
&quot;headCoachPhone&quot;: &quot;13700137000&quot;,
&quot;province&quot;: &quot;广东省&quot;,
&quot;city&quot;: &quot;深圳市&quot;,
&quot;address&quot;: &quot;南山区科技园&quot;,
&quot;teamLogo&quot;: &quot;path/team_logo.jpg&quot;,
&quot;status&quot;: &quot;1&quot;,
&quot;statusName&quot;: &quot;正常&quot;,
&quot;memberNum&quot;: 2,
&quot;createTime&quot;: &quot;2025-01-27 10:00:00&quot;,
&quot;updateTime&quot;: &quot;2025-01-27 10:00:00&quot;
},
&quot;members&quot;: [
{
&quot;memberId&quot;: 201,
&quot;teamId&quot;: 101,
&quot;userId&quot;: 1001,
&quot;memberType&quot;: &quot;1&quot;,
&quot;joinStatus&quot;: &quot;1&quot;,
&quot;joinTime&quot;: &quot;2025-01-27 10:00:00&quot;,
&quot;realName&quot;: &quot;张三&quot;,
&quot;name&quot;: &quot;张三&quot;,
&quot;gender&quot;: &quot;男&quot;,
&quot;phone&quot;: &quot;13800138000&quot;,
&quot;idCard&quot;: &quot;110101199001021234&quot;,
&quot;birthDate&quot;: &quot;1990-01-02&quot;,
&quot;ethnicity&quot;: &quot;汉族&quot;,
&quot;provinceCity&quot;: &quot;北京市&quot;,
&quot;position&quot;: &quot;1号位&quot;,
&quot;height&quot;: 185.00,
&quot;weight&quot;: 75.00,
&quot;jerseySize&quot;: &quot;XL&quot;,
&quot;athleteLevel&quot;: &quot;一级运动员&quot;,
&quot;playerResume&quot;: &quot;多次参加校级联赛,表现突出&quot;,
&quot;playerAvatar&quot;: &quot;path/photo1001.jpg&quot;,
&quot;jerseyNumber&quot;: &quot;NO.1&quot;,
&quot;status&quot;: &quot;正常&quot;,
&quot;banUntil&quot;: null
}
],
&quot;memberCount&quot;: 1,
&quot;isTeamManager&quot;: false,
&quot;canTransferManager&quot;: false
}
}</code></pre>
<h3>错误响应</h3>
<pre><code class="language-json">{
&quot;code&quot;: 500,
&quot;msg&quot;: &quot;操作失败&quot;,
&quot;data&quot;: &quot;球队不存在&quot;
}</code></pre>
<h2>响应参数说明</h2>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">code</td>
<td style="text-align: left;">integer</td>
<td style="text-align: left;">响应状态码(200=成功 500=失败)</td>
</tr>
<tr>
<td style="text-align: left;">msg</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">响应消息</td>
</tr>
<tr>
<td style="text-align: left;">data</td>
<td style="text-align: left;">object</td>
<td style="text-align: left;">响应数据</td>
</tr>
<tr>
<td style="text-align: left;">data.team</td>
<td style="text-align: left;">object</td>
<td style="text-align: left;">球队详细信息</td>
</tr>
<tr>
<td style="text-align: left;">data.members</td>
<td style="text-align: left;">array</td>
<td style="text-align: left;">成员详细信息列表</td>
</tr>
<tr>
<td style="text-align: left;">data.memberCount</td>
<td style="text-align: left;">integer</td>
<td style="text-align: left;">成员数量</td>
</tr>
<tr>
<td style="text-align: left;">data.isTeamManager</td>
<td style="text-align: left;">boolean</td>
<td style="text-align: left;">当前用户是否为球队负责人</td>
</tr>
<tr>
<td style="text-align: left;">data.canTransferManager</td>
<td style="text-align: left;">boolean</td>
<td style="text-align: left;">是否可以转让负责人权限</td>
</tr>
</tbody>
</table>
<h3>球队信息字段说明</h3>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">data.team.teamId</td>
<td style="text-align: left;">long</td>
<td style="text-align: left;">球队ID</td>
</tr>
<tr>
<td style="text-align: left;">data.team.teamName</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">球队名称</td>
</tr>
<tr>
<td style="text-align: left;">data.team.teamType</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">球队类型(A=整建制 B=个人组队)</td>
</tr>
<tr>
<td style="text-align: left;">data.team.teamTypeName</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">球队类型名称</td>
</tr>
<tr>
<td style="text-align: left;">data.team.leaderName</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">领队姓名</td>
</tr>
<tr>
<td style="text-align: left;">data.team.leaderPhone</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">领队联系方式</td>
</tr>
<tr>
<td style="text-align: left;">data.team.managerName</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">球队负责人姓名</td>
</tr>
<tr>
<td style="text-align: left;">data.team.managerPhone</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">负责人联系方式</td>
</tr>
<tr>
<td style="text-align: left;">data.team.managerUserId</td>
<td style="text-align: left;">long</td>
<td style="text-align: left;">负责人用户ID</td>
</tr>
<tr>
<td style="text-align: left;">data.team.headCoachName</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">主教练姓名</td>
</tr>
<tr>
<td style="text-align: left;">data.team.headCoachPhone</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">主教练联系方式</td>
</tr>
<tr>
<td style="text-align: left;">data.team.province</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">所在省份</td>
</tr>
<tr>
<td style="text-align: left;">data.team.city</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">所在城市</td>
</tr>
<tr>
<td style="text-align: left;">data.team.address</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">详细地址</td>
</tr>
<tr>
<td style="text-align: left;">data.team.teamLogo</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">球队Logo路径</td>
</tr>
<tr>
<td style="text-align: left;">data.team.status</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">球队状态(0=禁用 1=正常)</td>
</tr>
<tr>
<td style="text-align: left;">data.team.statusName</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">球队状态名称</td>
</tr>
<tr>
<td style="text-align: left;">data.team.memberNum</td>
<td style="text-align: left;">integer</td>
<td style="text-align: left;">成员数量</td>
</tr>
<tr>
<td style="text-align: left;">data.team.createTime</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">创建时间</td>
</tr>
<tr>
<td style="text-align: left;">data.team.updateTime</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">更新时间</td>
</tr>
</tbody>
</table>
<h3>成员信息字段说明</h3>
<h4>球队成员基本信息</h4>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">data.members.memberId</td>
<td style="text-align: left;">long</td>
<td style="text-align: left;">成员ID</td>
</tr>
<tr>
<td style="text-align: left;">data.members.teamId</td>
<td style="text-align: left;">long</td>
<td style="text-align: left;">球队ID</td>
</tr>
<tr>
<td style="text-align: left;">data.members.userId</td>
<td style="text-align: left;">long</td>
<td style="text-align: left;">用户ID</td>
</tr>
<tr>
<td style="text-align: left;">data.members.memberType</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">成员类型(1=球员 2=教练)</td>
</tr>
<tr>
<td style="text-align: left;">data.members.joinStatus</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">加入状态(0=申请中 1=已加入 2=已拒绝)</td>
</tr>
<tr>
<td style="text-align: left;">data.members.joinTime</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">加入时间</td>
</tr>
<tr>
<td style="text-align: left;">data.members.leaveTime</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">离开时间(如有)</td>
</tr>
<tr>
<td style="text-align: left;">data.members.realName</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">真实姓名</td>
</tr>
</tbody>
</table>
<h4>用户基本信息</h4>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">data.members.name</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">姓名</td>
</tr>
<tr>
<td style="text-align: left;">data.members.gender</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">性别(男/女)</td>
</tr>
<tr>
<td style="text-align: left;">data.members.phone</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">联系方式</td>
</tr>
<tr>
<td style="text-align: left;">data.members.idCard</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">身份证号</td>
</tr>
<tr>
<td style="text-align: left;">data.members.birthDate</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">出生年月(YYYY-MM-DD)</td>
</tr>
<tr>
<td style="text-align: left;">data.members.ethnicity</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">民族</td>
</tr>
<tr>
<td style="text-align: left;">data.members.provinceCity</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">所在省市</td>
</tr>
</tbody>
</table>
<h4>球员信息</h4>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">data.members.position</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">场上位置(1号位/2号位/3号位/4号位/5号位)</td>
</tr>
<tr>
<td style="text-align: left;">data.members.height</td>
<td style="text-align: left;">decimal</td>
<td style="text-align: left;">身高(cm)</td>
</tr>
<tr>
<td style="text-align: left;">data.members.weight</td>
<td style="text-align: left;">decimal</td>
<td style="text-align: left;">体重(kg)</td>
</tr>
<tr>
<td style="text-align: left;">data.members.jerseySize</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">球衣尺码(XL/2XL/3XL/4XL/5XL/6XL/7XL)</td>
</tr>
<tr>
<td style="text-align: left;">data.members.athleteLevel</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">运动员等级</td>
</tr>
<tr>
<td style="text-align: left;">data.members.playerResume</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">球员履历</td>
</tr>
<tr>
<td style="text-align: left;">data.members.playerAvatar</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">球员头像(1寸免冠照片路径)</td>
</tr>
<tr>
<td style="text-align: left;">data.members.jerseyNumber</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">球衣号码(自动生成:NO.1, NO.2...)</td>
</tr>
<tr>
<td style="text-align: left;">data.members.status</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">状态(正常/禁赛)</td>
</tr>
<tr>
<td style="text-align: left;">data.members.banUntil</td>
<td style="text-align: left;">string</td>
<td style="text-align: left;">禁赛截止时间(如有)</td>
</tr>
</tbody>
</table>
<h3>权限字段说明</h3>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">data.isTeamManager</td>
<td style="text-align: left;">boolean</td>
<td style="text-align: left;">当前用户是否为球队负责人</td>
</tr>
<tr>
<td style="text-align: left;">data.canTransferManager</td>
<td style="text-align: left;">boolean</td>
<td style="text-align: left;">是否可以转让负责人权限</td>
</tr>
</tbody>
</table>
<h2>使用说明</h2>
<ol>
<li><strong>一站式获取</strong>: 此接口一次性获取球队基本信息和成员详细信息</li>
<li><strong>完整信息</strong>: 包含球队信息、成员基本信息、用户基本信息、球员信息</li>
<li><strong>权限判断</strong>: 自动判断当前登录用户是否为球队负责人</li>
<li><strong>自动编号</strong>: 球衣号码自动按加入时间顺序生成</li>
<li><strong>多表关联</strong>: 通过LEFT JOIN关联多个表获取完整信息</li>
</ol>
<h2>权限判断逻辑</h2>
<ol>
<li><strong>获取当前用户</strong>: 通过Token获取当前登录用户信息</li>
<li><strong>ID转换</strong>: 将微信用户ID转换为系统用户ID</li>
<li><strong>权限比对</strong>: 比较当前用户ID与球队的managerUserId</li>
<li><strong>权限设置</strong>:
- <code>isTeamManager = true</code> 且 <code>canTransferManager = true</code>:当前用户是负责人
- <code>isTeamManager = false</code> 且 <code>canTransferManager = false</code>:当前用户不是负责人或未登录</li>
</ol>
<h2>注意事项</h2>
<ul>
<li>teamId参数是必填的,必须通过URL路径传递</li>
<li>返回的时间格式为 <code>YYYY-MM-DD HH:mm:ss</code></li>
<li>如果球队不存在,会返回"球队不存在"的错误信息</li>
<li>成员列表可能为空数组,表示该球队暂无成员</li>
<li>球员头像字段可能为空,需要前端做默认处理</li>
<li>球衣号码是自动生成的,不需要手动设置</li>
<li>未登录用户访问时,权限字段为false,但不影响球队信息获取</li>
<li>接口会自动处理异常情况并返回相应的错误信息</li>
</ul>
<h2>数据库关联说明</h2>
<p>此接口通过以下表关联获取完整信息:</p>
<ul>
<li><code>wm_team</code> - 球队表(主表)</li>
<li><code>wm_team_member</code> - 球队成员表</li>
<li><code>wm_basic_user_info</code> - 用户基本信息表</li>
<li><code>wm_player_info</code> - 球员信息表</li>
</ul>
<h2>前端使用建议</h2>
<ol>
<li><strong>权限控制</strong>: 根据<code>isTeamManager</code>字段控制"转让负责人"按钮的显示</li>
<li><strong>功能限制</strong>: 根据<code>canTransferManager</code>字段控制相关功能的可用性</li>
<li><strong>用户体验</strong>: 未登录时权限字段为false,可以引导用户登录</li>
<li><strong>头像处理</strong>: 当<code>playerAvatar</code>为空时,显示默认头像</li>
<li><strong>数据展示</strong>: 可以分别展示球队信息和成员列表</li>
</ol>
<h2>相关接口</h2>
<ul>
<li><a href="2.获取球队详情-增强版.md">获取球队详情(增强版)</a> - 仅获取球队基本信息及负责人权限</li>
<li><a href="4.获取球队成员列表-增强版.md">获取球队成员列表(增强版)</a> - 单独获取球队成员详细信息</li>
</ul>