mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
5153 字
26 分钟
毕设工作

DeepSeek API Key#

sk-ebdd67390319447c814f1da17b9cd9a4

Docker部署#

创建docker网络:

sudo docker network create bms-network

前端:Docker容器部署前端Vue服务——手把手教学_docker部署vue-CSDN博客


前端部署#

badmintonAdminFont

sudo docker run -d \
--name bms_bv2 \
-p 80:80 \
--network bms-network \
-v /user/root/cms_front/cms_admin/default.conf:/etc/nginx/conf.d/default.conf \
-v /user/root/cms_front/cms_admin/dist:/usr/share/nginx/html \
bms_b:v2

  1. 在注册报名管理的里面的比赛项目模块里
    • 创建项目之后
      • 编排管理系统里面应该也要有对应的一个项目被创建
        • 没有的字段都先用0来代替,已经有了一个用于新增Competition的端口了
        • 前端也对接了就在arrangementRequest.ts里面,调用一下就行了
  2. 把之前的数据备份一下然后删掉,重新从报名端开始记录选手,搞四个账号,每个账号男女分别16个,教练2个。
    • 不要直接数据库导入,从前端录入,手动和excl表都测一下,有问题修正一下。

#

测试过程

  • org001

    • 教练2个

      • 教练1(普通添加1个)

      • 批量1个

      • 姓名电话身份证号性别组织号联赛号
        教练2333333333331101011990010200291org001tnmt001
    • 选手16个

      • 林位杰(普通添加1个)

      • 批量添加15个

      • 姓名性别出生日期身份证号码等级学籍号头像组别号组织号联赛号比赛项目(json)备注
        黄俊宇12006-1-1110101199001020029org001
        吴家亿12006-1-2110101199001030032org001
        狄子皓12006-1-3110101199001040046org001
        张雅琪02006-1-411010119900105005Xorg001
        林悦涵02006-1-5110101199001060063org001
        纪雅诺02006-1-6110101199001070077org001
        吴禹帆12006-1-7110101199001080080org001
        李俊熠12006-1-8110101199001090094org001
        刘宇强12006-1-9110101199001100109org001
        陈子僖12006-1-10110101199001110112org001
        陈易阳12006-1-11110101199001120126org001
        刘宇奇12006-1-1211010119900113013Xorg001
        林泰龙12006-1-13110101199001140143org001
        郭昕宇12006-1-14110101199001150157org001
  • org002

  • org003


#

{
"type": "地区联赛",
"level": "B级",
"contact": {
"phone": "13800138000",
"person": "张主任"
},
"schedule": {
"knockout": "2023-07-11至2023-07-30",
"groupStage": "2023-06-15至2023-07-10"
},
"divisions": [
{
"code": "U12",
"name": "12岁以下组",
"max_age": 12,
"division_id": "div_u12_2023"
},
{
"code": "U13",
"name": "13岁以下组",
"max_age": 13,
"division_id": "div-03fd4f8e805edecc356a4b6c06cbb285"
},
{
"code": "DIV1",
"name": "男子组",
"max_age": 30,
"division_id": "div_u9_2023"
}
],
"organizer": "城市体育局",
"schedules": {
"div_u9_2023": [
{
"value": "测试",
"event_name": "男单打",
"max_players": 0,
"group_number": "1",
"display_order": 0,
"event_short_name": "男单打",
"is_cross_division": 0,
"is_scheduling_allowed": 1
}
],
"div_u12_2023": [
{
"value": "mixed_doubles",
"min_male": "1",
"event_name": "12岁以下组混合双打",
"min_female": "1",
"max_players": "16",
"group_number": "U12-2",
"display_order": "3",
"event_short_name": "混双",
"is_cross_division": "1",
"is_scheduling_allowed": "1"
},
{
"value": "mens_singles",
"min_male": 2,
"event_name": "男子单打",
"min_female": 2,
"max_players": "40",
"group_number": "U12-3",
"display_order": "1",
"event_short_name": "男单",
"is_cross_division": "1",
"is_scheduling_allowed": "1"
},
{
"value": "womens_singles",
"min_male": null,
"event_name": "女子单打",
"min_female": null,
"max_players": "24",
"group_number": "U13-1",
"display_order": "2",
"event_short_name": "女单",
"is_cross_division": "1",
"is_scheduling_allowed": "0"
}
],
"div-03fd4f8e805edecc356a4b6c06cbb285": [
{
"value": "mixed_doubles",
"min_male": null,
"event_name": "混合双打",
"min_female": null,
"max_players": "12",
"group_number": "U13-2",
"display_order": "3",
"event_short_name": "混双",
"is_cross_division": "1",
"is_scheduling_allowed": "1"
},
{
"value": "womens_doubles",
"min_male": "3",
"event_name": "女子双打",
"min_female": "3",
"max_players": "25",
"group_number": "U12-1",
"display_order": "3",
"event_short_name": "女双打",
"is_cross_division": "1",
"is_scheduling_allowed": "1"
},
{
"value": "team_event",
"min_male": "4",
"event_name": "团体赛",
"min_female": "4",
"max_players": "10",
"group_number": "U13-3",
"display_order": "4",
"event_short_name": "团体",
"is_cross_division": "0",
"is_scheduling_allowed": "0"
},
{
"value": "mens_doubles",
"min_male": "4",
"event_name": "男子双打",
"min_female": null,
"max_players": "20",
"group_number": "1",
"display_order": "3",
"event_short_name": "男双",
"is_cross_division": "0",
"is_scheduling_allowed": "1"
}
]
},
"requirements": [
"本地户籍证明",
"业余选手资格"
]
}
UPDATE tournaments
SET remark = JSON_SET(
IFNULL(remark, JSON_OBJECT())
<!-- 只在 divisions 不为空时追加 -->
<if test="divisions != null">
,
'$.divisions',
CASE
<!-- 如果 divisions 字段不存在或为空,直接创建数组 -->
WHEN JSON_EXTRACT(IFNULL(remark, '{}'), '$.divisions') IS NULL OR
JSON_LENGTH(JSON_EXTRACT(IFNULL(remark, '{}'), '$.divisions')) = 0 THEN
JSON_ARRAY(
JSON_OBJECT(
'code', #{divisions.code},
'name', #{divisions.name},
'max_age', #{divisions.max_age},
'division_id', #{divisions.division_id}
)
)
<!-- 检查是否已存在相同的 division_id -->
WHEN JSON_CONTAINS(
JSON_EXTRACT(IFNULL(remark, '{}'), '$.divisions[*].division_id'),
JSON_QUOTE(#{divisions.division_id})
) = 1 THEN
<!-- 如果已存在,不添加,保持原样 -->
JSON_EXTRACT(IFNULL(remark, '{}'), '$.divisions')
ELSE
<!-- 如果不存在,追加到数组末尾 -->
JSON_ARRAY_APPEND(
JSON_EXTRACT(IFNULL(remark, '{}'), '$.divisions'),
'$',
JSON_OBJECT(
'code', #{divisions.code},
'name', #{divisions.name},
'max_age', #{divisions.max_age},
'division_id', #{divisions.division_id}
)
)
END
</if>
<!-- 只在 schedules 不为空时追加 -->
<if test="schedules != null and schedules.size() > 0">
,
'$.schedules',
CASE
<!-- 如果 schedules 字段不存在或为空,直接创建对象 -->
WHEN JSON_EXTRACT(IFNULL(remark, '{}'), '$.schedules') IS NULL OR
JSON_LENGTH(JSON_EXTRACT(IFNULL(remark, '{}'), '$.schedules')) = 0 THEN
JSON_OBJECT(
<foreach collection="schedules.keySet()" item="key">
'${key}', JSON_ARRAY(
JSON_OBJECT(
'value', #{schedules[${key}].value},
'event_name', #{schedules[${key}].event_name},
'max_players', #{schedules[${key}].max_players},
'group_number', #{schedules[${key}].group_number},
'display_order', #{schedules[${key}].display_order},
'event_short_name', #{schedules[${key}].event_short_name},
'is_cross_division', #{schedules[${key}].is_cross_division},
'is_scheduling_allowed', #{schedules[${key}].is_scheduling_allowed}
)
)
</foreach>
)
ELSE
<!-- 如果已存在,合并 schedules -->
JSON_MERGE_PATCH(
JSON_EXTRACT(IFNULL(remark, '{}'), '$.schedules'),
JSON_OBJECT(
<foreach collection="schedules.keySet()" item="key">
'${key}',
CASE
<!-- 如果该分组不存在,创建新数组 -->
WHEN JSON_EXTRACT(IFNULL(remark, '{}'), CONCAT('$.schedules."', '${key}', '"')) IS NULL THEN
JSON_ARRAY(
JSON_OBJECT(
'value', #{schedules[${key}].value},
'event_name', #{schedules[${key}].event_name},
'max_players', #{schedules[${key}].max_players},
'group_number', #{schedules[${key}].group_number},
'display_order', #{schedules[${key}].display_order},
'event_short_name', #{schedules[${key}].event_short_name},
'is_cross_division', #{schedules[${key}].is_cross_division},
'is_scheduling_allowed', #{schedules[${key}].is_scheduling_allowed}
)
)
<!-- 检查该分组中是否已存在相同 value 的事件 -->
WHEN JSON_CONTAINS(
JSON_EXTRACT(IFNULL(remark, '{}'), CONCAT('$.schedules."', '${key}', '"[*].value')),
JSON_QUOTE(#{schedules[${key}].value})
) = 1 THEN
<!-- 如果已存在,不添加,保持原样 -->
JSON_EXTRACT(IFNULL(remark, '{}'), CONCAT('$.schedules."', '${key}', '"'))
ELSE
<!-- 如果不存在,追加到数组末尾 -->
JSON_ARRAY_APPEND(
JSON_EXTRACT(IFNULL(remark, '{}'), CONCAT('$.schedules."', '${key}', '"')),
'$',
JSON_OBJECT(
'value', #{schedules[${key}].value},
'event_name', #{schedules[${key}].event_name},
'max_players', #{schedules[${key}].max_players},
'group_number', #{schedules[${key}].group_number},
'display_order', #{schedules[${key}].display_order},
'event_short_name', #{schedules[${key}].event_short_name},
'is_cross_division', #{schedules[${key}].is_cross_division},
'is_scheduling_allowed', #{schedules[${key}].is_scheduling_allowed}
)
)
END
</foreach>
)
)
END
</if>
)
WHERE tournament_id = #{tournamentId}

251229#

选择机构页面选择test#

维护排赛#

  • 选择组别13岁以上组别只出现了一个比赛✔
    • 应该有4个
  • 完整赛程表,同一个比赛可以多次出现再不同的地方✔
    • 比赛安排要有唯一性
  • 把端口listAllDivision换成✔

改表#

  • referees表里面增加一个is_deleted
    • 记得修改一下涉及到的端口
matchesGeneralVOList: [
MatchesGeneralVO(matchId=29bec50d-65f9-4790-8126-9be4bc7e1843, matchName=13岁以上组别-mens_singles, groupId=div-03fd4f8e805edecc356a4b6c06cbb285, groupName=13岁以上组别, matchCategory=mens_singles, matchCode=null, venue=, matchTimeId=null, tournamentId=209da9dab646f182039d525d60ca428d, matchScheduleName=循环赛_4_1_1, groupNumber=4, isKnockoutStage=0, round=1, orderInRound=1, sideOnePlayerOneName=拉尔, sideOnePlayerTwoName=null, sideTwoPlayerOneName=困困, sideTwoPlayerTwoName=null),
MatchesGeneralVO(matchId=55695ab6-7491-47bb-9bdd-adc5fcf12759, matchName=13岁以上组别-mens_singles, groupId=div-03fd4f8e805edecc356a4b6c06cbb285, groupName=13岁以上组别, matchCategory=mens_singles, matchCode=null, venue=, matchTimeId=null, tournamentId=209da9dab646f182039d525d60ca428d, matchScheduleName=循环赛_1_1_1, groupNumber=1, isKnockoutStage=0, round=1, orderInRound=1, sideOnePlayerOneName=嘎嘎, sideOnePlayerTwoName=null, sideTwoPlayerOneName=茂凯, sideTwoPlayerTwoName=null),
MatchesGeneralVO(matchId=8ec77e43-b316-4a35-ad04-6d926136418e, matchName=13岁以上组别-mens_singles, groupId=div-03fd4f8e805edecc356a4b6c06cbb285, groupName=13岁以上组别, matchCategory=mens_singles, matchCode=null, venue=, matchTimeId=null, tournamentId=209da9dab646f182039d525d60ca428d, matchScheduleName=循环赛_2_1_1, groupNumber=2, isKnockoutStage=0, round=1, orderInRound=1, sideOnePlayerOneName=阿信, sideOnePlayerTwoName=null, sideTwoPlayerOneName=威威, sideTwoPlayerTwoName=null),
MatchesGeneralVO(matchId=b2a3052a-a0cf-4e7e-b5c0-cbc9f74ea8dd, matchName=13岁以上组别-mens_singles, groupId=div-03fd4f8e805edecc356a4b6c06cbb285, groupName=13岁以上组别, matchCategory=mens_singles, matchCode=null, venue=, matchTimeId=null, tournamentId=209da9dab646f182039d525d60ca428d, matchScheduleName=循环赛_3_1_1, groupNumber=3, isKnockoutStage=0, round=1, orderInRound=1, sideOnePlayerOneName=香克斯, sideOnePlayerTwoName=null, sideTwoPlayerOneName=黄骅, sideTwoPlayerTwoName=null)
]

#

ScoreTimerClient#

计分页面不能够适应各种屏幕大小,改一下

  • 选择困困vs拉尔那场
  • 可以反复测试 比赛计分完成,可以用这个SQL重置比分
delete from match_score where match_id = "f44764f7-5cca-410d-b3b4-b7f59f9da3b1";

#

  • 执裁裁判页面实现一下分页功能。

    • 全部比赛 and 选择比赛 都要实现分页功能
  • 维护排赛的左边的数据获取有问题,已经安排的比赛,不需要选择组别直接就可以展示

    • 现在我通过标签切换一下页面,左边的数据就会消失,应该要再次获取.
  • 现在BadmintonAdminFont文件,/main/players

    • 下载模板没有下载,修正一下.

#

  • 实现一下,arrangeTeamPlayersWithGroupByPlayersWithGroupDTO,用team_match_signups代替participants

    • 它和单打的那个分组逻辑一样arrangePlayersWithGroupByPlayersWithGroupDTO)
    • 可以查一下,羽毛球分组的方法
    • 前端使用在团体分组编排->抽签分组的位置(answer = await toArrangeTeamPlayers(dto))
  • 缺少创建组别的功能(http://localhost:81/main/match/categories)

  • 现在查看分组不能够在组之间换人改一下(http://localhost:81/main/match/view-groups).

    • 就是比如A组的人,不能换到B组
    • 先保存一下现在的数据,你测试成功之后把数据恢复回来
  • team_match_signups这个表里面已经有几个数据了,你可以加几个测试用,最后把测试的删掉就可以了。


260129#

要求#

完成一下GenerateTeamMatchPromotePlayers这个方法(PullPromotion.java)(生成晋级队伍) 再实现对应的获取这个数据的端口

实现一下,看看上面的单打和那个逻辑差不多 规则就在之前发你的规则书里面 团体赛获取SQL:

select
master_match_schedule_id,
organization_id,
win_count
from (
select
tm.master_match_schedule_id,
p.organization_id,
count(*) as win_count,
row_number() over (
partition by tm.master_match_schedule_id
order by count(*) desc
) as rn
from team_event_matches tm
join match_schedule ms on ms.match_schedule_id = tm.match_schedule_id
join matches m on ms.match_id = m.match_id
join teams t on t.team_id = m.winner_id
join participants p on p.participant_id = t.participant_one_id
where ms.division_id = 'div-03fd4f8e805edecc356a4b6c06cbb285'
and ms.tournament_id = '257de693732eb1bdb4ab69aaada3a6e2'
and tm.team_event_code = 'TEAM-CC24129B'
group by
tm.master_match_schedule_id,
p.organization_id
) t
where rn = 1
order by master_match_schedule_id;

相关的表#

(MySQL):badminton_matches_scoring>desc team_event_matches;
+--------------------------+--------------+------+-----+-------------------+-----------------------------------------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------------+--------------+------+-----+-------------------+-----------------------------------------------+
| team_event_id | varchar(255) | NO | PRI | <null> | |
| group_id | varchar(255) | NO | | <null> | |
| organization_id | varchar(255) | NO | | <null> | |
| team_score | int | NO | | <null> | |
| is_winner | tinyint | NO | | <null> | |
| team_event_code | varchar(32) | YES | | <null> | |
| master_match_schedule_id | varchar(48) | YES | | <null> | |
| match_schedule_id | varchar(48) | YES | | <null> | |
| create_time | datetime | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
| update_time | datetime | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED on update CURRENT_TIMESTAMP |
+--------------------------+--------------+------+-----+-------------------+-----------------------------------------------+
10 rows in set
Time: 0.102s
mysql@110.40.192.228
(MySQL):badminton_matches_scoring>
  • 在match_schedule表里面关于团体比赛
    • 有两种记录一种是side_one_player_one_id ,side_two_player_one_id都是记录organization_id
      • 是用来查看组织之间的比赛安排情况的
    • 另一种是正常的记录比赛的和单项一样
    • 这两种记录由team_event_matches tm表记录
      • tm.master_match_schedule_id 是记录第一种的match_id的,tm.match_schedule_id是记录团体比赛内具体的各项比赛的
    • 查找比赛的时候利用team_event_code来查询第一种的match_schedule记录,也可以利用team_event_matches查询出第二种的match_schedule

修改#

修改后的sql

select
master_match_schedule_id,
organization_id,
team_match_signups_id,
win_count
from (
select
tm.master_match_schedule_id,
tm.team_match_signups_id,
p.organization_id,
count(*) as win_count,
row_number() over (
partition by tm.master_match_schedule_id
order by count(*) desc
) as rn
from team_event_matches tm
join team_match_signups tms on tms.team_match_signups_id = tm.team_match_signups_id
join match_schedule ms on ms.match_schedule_id = tm.match_schedule_id
join matches m on ms.match_id = m.match_id
join teams t on t.team_id = m.winner_id
join participants p on p.participant_id = t.participant_one_id
where ms.division_id = 'div-03fd4f8e805edecc356a4b6c06cbb285'
and ms.tournament_id = '257de693732eb1bdb4ab69aaada3a6e2'
and tm.team_event_code = 'TEAM-CC24129B'
group by
tm.master_match_schedule_id,
tm.team_match_signups_id,
p.organization_id
) t
where rn = 1
order by master_match_schedule_id;
  • 在match_schedule表里面关于团体比赛
    • 有两种记录一种是side_one_player_one_id ,side_
    • two_player_one_id都是记录==team_match_signups_id==
      • 是用来查看==组织之下的队伍==之间的比赛安排情况的
    • 另一种是正常的记录比赛的和单项一样,matches_schedule表中的team_event_code表示该记录属于团体赛
    • 这两种记录由team_event_matches tm表记录
      • tm.master_match_schedule_id 是记录第一种的match_id的,tm.match_schedule_id是记录团体比赛内具体的各项比赛的
        • 查找比赛的时候利用team_event_code来查询第一种的match_schedule记录,也可以利用team_event_matches查询出第二种的match_schedule

实现记录#

思路:晋级队伍 -> 各队伍胜场次

  • 260203 2023年羽毛球赛竞赛规则 p101
  • 260204 一个组织不只对应一个队伍,用teamcode做限制,修改以上sql
  • 260206 对数据库进行修改,解决一个组织不只对应一个队伍的问题
    • 修改team_event_matches表,添加team_match_signups_id字段,作为外键链接team_match_signups表
    • 修改team_match_signups表,将主键team_match_signups_id字段类型由bigint改为varchar
    • 修改matches_schedule表的side_one_player_one_id、side_one_player_two_id字段内容,将第一种情况改成记为team_match_signups_id
    • 修改team表,添加team_match_signups_id与organization_id字段,分别与team_match_signups、organization表关联
  • 260210 team_event_matches中的organization_id和team_match_signups_id是不是没用?不行,teams生成要根据这个表来生成的。
    • 删除team_event_matches中的organization_id和team_match_signups_id?不行
  • 260211 round_robin_participants表中有关团队赛事分组记录的participant_id_one应该改成存team_match_signups_id
  • 260212 (胜场数 -> 胜次 -> 净胜局【-> 胜次】-> 净胜分数【-> 胜次】【-> 抽签】)从DB查找tms1的对阵结果(胜次)
  • 260213 match_schedule表中添加team_one_id与team_two_id字段,表示该局赛事由这两个小队进行对阵
  • 260217 问题:团队赛中,team表生成记录不完全

草稿#

select
master_match_schedule_id,
organization_id,
team_match_signups_id,
win_count
from (
select
tm.master_match_schedule_id,
tm.team_match_signups_id,
p.organization_id,
count(*) as win_count,
row_number() over (
partition by tm.master_match_schedule_id
order by count(*) desc
) as rn
from team_event_matches tm
join team_match_signups tms on tms.team_match_signups_id = tm.team_match_signups_id
join match_schedule ms on ms.match_schedule_id = tm.match_schedule_id
join matches m on ms.match_id = m.match_id
join teams t on t.team_id = m.winner_id
join participants p on p.participant_id = t.participant_one_id
where ms.division_id = 'div-03fd4f8e805edecc356a4b6c06cbb285'
and ms.tournament_id = '257de693732eb1bdb4ab69aaada3a6e2'
and tm.team_event_code = 'TEAM-CC24129B'
group by
tm.master_match_schedule_id,
tm.team_match_signups_id,
p.organization_id
) t
where rn = 1
order by master_match_schedule_id;
-- 查找team_even_matches中记录多少个不同的master_match_schedule_id
SELECT DISTINCT team_match_signups_id,master_match_schedule_id FROM team_event_matches
-- 查询小组赛中各选手获胜场次
SELECT m.winner_id AS player_id,
COUNT(*) AS win_count
FROM match_schedule r
JOIN matches m ON r.match_id = m.match_id
WHERE r.tournament_id = "257de693732eb1bdb4ab69aaada3a6e2"
AND r.division_id = "div-03fd4f8e805edecc356a4b6c06cbb285"
AND r.event_type = "mens_singles"
AND r.group_number = 1
AND m.winner_id IS NOT NULL
GROUP BY m.winner_id
-- 第一种情况:找出match_schedule中表示两个队伍的记录
SELECT
tem.master_match_schedule_id,
ms.side_one_player_one_id,
ms.side_two_player_one_id,
ms.division_id,
ms.event_type,
ms.team_event_code,
ms.match_id,
ms.group_number
FROM
team_event_matches tem
JOIN match_schedule ms ON tem.master_match_schedule_id = ms.match_schedule_id
-- 第二种情况:找出match_schedule中表示每个队伍内部的比赛(胜场数)
SELECT
-- tem.team_match_signups_id,
-- ms.match_id,
-- m.winner_id AS win_tiny_team_id,-- 此处的team指代对阵时的一方
t.team_match_signups_id,
COUNT(t.team_match_signups_id) AS win_count
FROM
team_event_matches tem
JOIN team_match_signups tms ON tem.team_match_signups_id = tms.team_match_signups_id
JOIN match_schedule ms ON tem.match_schedule_id = ms.match_schedule_id
JOIN matches m ON ms.match_id = m.match_id
JOIN teams t ON m.winner_id = t.team_id
JOIN round_robin_participants rrp ON tem.team_match_signups_id = rrp.participant_id_one
WHERE tem.team_event_code = "TEAM-CC24129B"
AND ms.division_id = "div-03fd4f8e805edecc356a4b6c06cbb285"
AND ms.tournament_id = "257de693732eb1bdb4ab69aaada3a6e2"
AND rrp.group_number = 1
GROUP BY t.team_match_signups_id
-- ------------------------------规则 1.3.2 两人胜场相同 → 看交手-------------------------------------------------------------------------------------------------------------
-- 查询选手对阵结果
SELECT
CASE
WHEN t.participant_one_id = "p002_m07"
OR t.participant_two_id = "p002_m07"
THEN 'WIN'
ELSE 'LOSE'
END AS result
FROM matches m
JOIN teams t ON m.winner_id = t.team_id
WHERE m.match_id = "5846ad7d-9df2-4e5a-b12d-e1965570992d"
AND (t.participant_one_id = "p002_m07" OR t.participant_two_id = "p003_m01")
-- 查询tms队伍对阵结果(补全team_event_matches表is_winner字段)(胜次:即team_event_matches表中master_match_schedule字段记录的比赛胜利次数)
SELECT
tem.team_match_signups_id,
ms.match_schedule_id,
ms.match_id,
ms.match_schedule_name,
-- ms.division_id,
t1.team_match_signups_id AS team_match_signups_one,
t2.team_match_signups_id AS team_match_signups_two,
CASE WHEN t.team_match_signups_id = tem.team_match_signups_id
THEN 1
ELSE 0
END AS result
FROM
team_event_matches tem
JOIN match_schedule ms ON tem.match_schedule_id = ms.match_schedule_id
JOIN matches m ON ms.match_id = m.match_id
JOIN teams t ON m.winner_id = t.team_id
JOIN teams t1 ON ms.team_one_id = t1.team_id
JOIN teams t2 ON ms.team_two_id = t2.team_id
WHERE tem.team_event_code = "TEAM-CC24129B"
AND ms.division_id = "div-03fd4f8e805edecc356a4b6c06cbb285"
-- AND ms.event_type = "mens_singles"
AND t.is_team_event = 1
SELECT
tem.team_event_id,
t.team_id
FROM team_event_matches tem
JOIN match_schedule ms ON tem.match_schedule_id = ms.match_schedule_id
JOIN teams t ON ms.match_id = t.match_id
SELECT
tem.team_event_id,
tem.team_match_signups_id,
t1.team_id AS team_one_id,
t1.team_match_signups_id AS team_one_signups_id,
t2.team_id AS team_two_id,
t2.team_match_signups_id AS team_two_signups_id,
ms.match_schedule_name
FROM team_event_matches tem
JOIN match_schedule ms
ON tem.match_schedule_id = ms.match_schedule_id
JOIN teams t1
ON ms.match_id = t1.match_id
AND t1.is_team_event = 1
JOIN teams t2
ON ms.match_id = t2.match_id
AND t2.is_team_event = 1
AND t1.team_id < t2.team_id
WHERE tem.team_event_code = 'TEAM-CC24129B';
-- 变式,查询两个team_match_signups队伍之间的比赛,判断这两个tms队伍在胜场数相同情况下的名次先后
SELECT
tem.team_match_signups_id,
ms.match_schedule_name,
t1.team_match_signups_id AS team_match_signups_one,
t2.team_match_signups_id AS team_match_signups_two,
CASE WHEN t.team_match_signups_id = tem.team_match_signups_id
THEN 1
ELSE 0
END AS result
FROM team_event_matches tem
JOIN match_schedule ms ON tem.match_schedule_id = ms.match_schedule_id
JOIN matches m ON ms.match_id = m.match_id
JOIN teams t ON m.winner_id = t.team_id
JOIN teams t1 ON ms.team_one_id = t1.team_id
JOIN teams t2 ON ms.team_two_id = t2.team_id
WHERE tem.team_event_code = "TEAM-CC24129B"
AND ms.division_id = "div-03fd4f8e805edecc356a4b6c06cbb285"
-- AND ms.event_type = "mens_singles"
AND t.is_team_event = 1
AND (
(t1.team_match_signups_id = '3' AND t2.team_match_signups_id = '1')
OR
(t1.team_match_signups_id = '1' AND t2.team_match_signups_id = '3')
);
-- 再变式,贴合项目
SELECT
tem.team_match_signups_id,
-- ms.match_schedule_name,
-- t1.team_match_signups_id AS team_match_signups_one,
-- t2.team_match_signups_id AS team_match_signups_two,
CASE WHEN t.team_match_signups_id = tem.team_match_signups_id
THEN "WIN"
ELSE "LOSE"
END AS result
FROM team_event_matches tem
JOIN match_schedule ms ON tem.match_schedule_id = ms.match_schedule_id
JOIN matches m ON ms.match_id = m.match_id
JOIN teams t ON m.winner_id = t.team_id
JOIN teams t1 ON ms.team_one_id = t1.team_id
JOIN teams t2 ON ms.team_two_id = t2.team_id
WHERE tem.team_event_code = "TEAM-CC24129B"
AND ms.division_id = "div-03fd4f8e805edecc356a4b6c06cbb285"
-- AND ms.event_type = "mens_singles"
AND t.is_team_event = 1
AND (
(t1.team_match_signups_id = '2' AND t2.team_match_signups_id = '1')
OR
(t1.team_match_signups_id = '1' AND t2.team_match_signups_id = '2')
);
-- ------------------------------≥3队tms:规则 1.3.3 看净胜局数-------------------------------------------------------------------------------------------------------------
-- 单项赛
SELECT
t.participant_one_id AS participant_id,
SUM(CASE WHEN m.winner_id = t.team_id THEN 1 ELSE 0 END) AS win_count,
SUM(CASE WHEN m.winner_id != t.team_id THEN 1 ELSE 0 END) AS lose_count,
SUM(CASE WHEN m.winner_id = t.team_id THEN 1 ELSE -1 END) AS net_games
FROM teams t
JOIN matches m ON t.match_id = m.match_id
WHERE t.participant_one_id = "p003_m01"
GROUP BY t.participant_one_id
-- 团体赛 定义:该队(tms)在所有单项比赛中,赢的局数总和,减去,输的局数总和
SELECT
tem.team_match_signups_id,
SUM(CASE WHEN m.winner_id = t.team_id THEN 1 ELSE 0 END) AS win_count,
SUM(CASE WHEN m.winner_id != t.team_id THEN 1 ELSE 0 END) AS lose_count,
SUM(CASE WHEN m.winner_id = t.team_id THEN 1 ELSE -1 END) AS net_games
FROM team_event_matches tem
JOIN match_schedule ms ON tem.match_schedule_id = ms.match_schedule_id
JOIN matches m ON ms.match_id = m.match_id
JOIN teams t ON m.match_id = t.match_id
WHERE tem.team_match_signups_id = '1'
GROUP BY tem.team_match_signups_id
-- AI修改过的
SELECT
tem.team_match_signups_id,
SUM(CASE WHEN t.team_match_signups_id = tem.team_match_signups_id THEN 1 ELSE 0 END) AS win_count,
SUM(CASE WHEN t.team_match_signups_id != tem.team_match_signups_id OR t.team_match_signups_id IS NULL THEN 1 ELSE 0 END) AS lose_count
FROM team_event_matches tem
JOIN match_schedule ms ON tem.match_schedule_id = ms.match_schedule_id
JOIN matches m ON ms.match_id = m.match_id
LEFT JOIN teams t ON m.winner_id = t.team_id
WHERE tem.team_event_code = 'TEAM-CC24129B'
AND tem.team_match_signups_id = '1'
GROUP BY tem.team_match_signups_id
-- 每个tms输掉的比赛数
SELECT
tem.team_match_signups_id,
COUNT(*) AS lose_count
FROM team_event_matches tem
JOIN match_schedule ms ON tem.match_schedule_id = ms.match_schedule_id
JOIN matches m ON ms.match_id = m.match_id
JOIN teams t ON m.winner_id = t.team_id
WHERE t.team_match_signups_id != tem.team_match_signups_id
GROUP BY tem.team_match_signups_id;
-- ----------------------------------------------------------AI------------------------------------------------------------------
SELECT * FROM teams WHERE is_team_event = 1
SELECT * FROM match_schedule WHERE team_event_code IS NOT NULL
SELECT
TABLE_SCHEMA AS 数据库名,
TABLE_NAME AS 表名,
COLUMN_NAME AS 字段名,
DATA_TYPE AS 数据类型
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'password' -- 替换为你的字段名
AND TABLE_SCHEMA = 'badminton_matches_scoring'; -- 替换为你的数据库名(可选)
CREATE TABLE `auth_user` (
`user_id` varchar(36) NOT NULL,
`user_name` varchar(100) NOT NULL COMMENT '用户名',
`password` varchar(100) NOT NULL COMMENT '密码,加密',
`role_id` int(11) DEFAULT NULL COMMENT '角色ID',
`account_locked` tinyint(1) DEFAULT '0' COMMENT '账户是否锁定:1-是,0-否',
`is_enabled` tinyint(1) DEFAULT '1' COMMENT '是否启用:1-是,0-否',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
CREATE TABLE `auth_role` (
`role_id` varchar(36) NOT NULL,
`user_name` varchar(100) NOT NULL COMMENT '用户名',
`password` varchar(100) NOT NULL COMMENT '密码,加密',
`role_id` int(11) DEFAULT NULL COMMENT '角色ID',
`account_locked` tinyint(1) DEFAULT '0' COMMENT '账户是否锁定:1-是,0-否',
`is_enabled` tinyint(1) DEFAULT '1' COMMENT '是否启用:1-是,0-否',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

AI实现提词#

现在要在​的GenerateTeamMatchPromotePlayers方法中实现生成分组后的团体赛晋级队伍(team_match_signups)的功能,要求最终返回以下形式结果
Map<Integer, List<String>> promotedTMSByGroup = new LinkedHashMap<>();用一个Map存储每个组晋级team_match_signups的 ID;
在​数据库中,你需要关注以下表:round_robin_participant、team_match_signups、team_event_matches、match_schedule、matches、teams。
相关表说明:
round_robin_participant表用来记录参赛者分组情况,当round_robin_participant表用来记录team_match_signups的分组情况时,其中的division_id为default,participants_id_one就是用来存放team_match_signups_id,group_number就是其分组编号,team_event_code就是team_match_signups表中的team_event_code;team_match_signups表,记录注册的参加团体赛的队伍,每个team_match_signup中有多个team参加比赛,这些被记录在teams表中的team_match_signups_id字段,用来表示该team是属于哪个team_match_signups,此外其team_event_code用来区分不同赛事;team_event_matches表用来记录团体赛事,其中master_match_schedule_id用来记录是哪两个team_match_signups进行比赛,match_schedule_id则是用来记录这两个team_match_signups中具体进行的哪些对局,master_match_schedule_id和match_schedule_id都记录在master_schedule表中;match_schedule表记录赛事具体时间场地和参赛队伍(teams)/运动员(participants),其中的match_id字段用来关联 match表;matches表中的winner_id字段用来记录获胜team的team_id。
具体要求:
1.1 首先按获胜场数定名次;
2.1 当对阵的两个队伍(team_match_signups)获胜场数相同,则两者间比赛的胜者名次列前;
3.1 三个或三个以上队伍(team_match_signups)获胜场数相同,则按在该组比赛的净胜局数定名次。
3.1.1 计算净胜局数后,如还剩两个队伍(team_match_signups)净胜局数相同,则两者间比赛的胜者名次列前。
4.1 三个或三个以上队伍(team_match_signups)获胜场数相同,净胜局数亦相同,则按在该组比赛的净胜分数定名次。
4.1.1 计算净胜分数后,如还剩两个队伍(team_match_signups)净胜分数相同,则两者间比赛的胜者名次列前。
4.1.2 如还有三个或三个以上队伍(team_match_signups)净胜分数相同,则以抽签定名次

20260210#

  • 执裁裁判的设置加一个查看所有的未设置裁判的比赛,在选择比赛的弹窗里面加一个选项,后端代码也修改一下。

20260219#

  • 实现一下权限登陆功能,必须登陆之后才可以使用
    • 测试一下成功之后就先放行所有的端口(方便开发)
    • TournamentAdminFont里面缺少登陆功能实现一下(用这个表permissions)
      • 前端的登陆页面也实现一下,然后做一下路由限制(不能没有登陆的时候页面不能直接查看)

20260226#

  • 报名端
    • 现在报名过的队员应该还是可以在添加运动员的弹窗里面出现
    • 现在领队的那个填写不了,改一下

20260318#

  • 查看分组加一个分界,就是不同项目的分开的明显一点。

20260326#

  • 主页(match/detail):
    • 只保留一个card,样式随意
    • 展示当前比赛的基本数据
      • 可以查看当前有什么比赛
      • 可以查看报名的数量,场地数量,已经完成的比赛数量
      • 可以导出当前所有的比赛信息
        • 这个先放个按钮在哪里,我看一下要导出什么信息
  • token存放的位置你也改一下放到localstorage里面,后面页面可能多开的。

20260331#


20260502#

remember keep the same TS、Css coding style#

05/02/2026#

Finish page of MatchScore.vue#

  1. This page need could show small score and big score
  2. Basic Info
  3. CRUD
  4. could search by venue,matchTime,matchId,matchCategory and division
  5. Paged conditional query

This SQL is only for reference and needs to be modified as required.

SELECT
m.winner_id,
m.match_name,
m.match_category,
m.group_id,
m.match_id,
m.venue,
m.match_time_id,
t.team_id,
p1.participant_name AS participant_one_name,
p2.participant_name AS participant_two_name,
MAX(ms.big_score) AS big_score,
GROUP_CONCAT(ms.small_score ORDER BY ms.session_number ASC) AS small_scores
FROM match_score ms
JOIN teams t
ON t.match_id = ms.match_id
AND t.team_id = ms.team_id
JOIN matches m
ON m.match_id = ms.match_id
LEFT JOIN participants p1 ON t.participant_one_id = p1.participant_id
LEFT JOIN participants p2 ON t.participant_two_id = p2.participant_id
WHERE ms.match_id = "d7d3da18-542f-4029-8866-bb4d7b955269"
GROUP BY t.team_id, p1.participant_name, p2.participant_name

20260503#

Finish LargeScreenDialog#

05/03/2026#

Finish LargeScreenDialog#

  1. Now LareScreenDialog Could not use,finish this Dialog

Problem MatchScore.vue#

Match List Page – Simple Task Notes#

1. Show winner#

  • Add a “Winner” column

2. Show venue and match time#

  • Show venue directly
  • Show match time
  • Format time to normal readable format (like: 2026-05-01 14:30)
  • If empty, show -

3. Show teams and score#

  • Show both teams and score in one column Format example:
Team A vs Team B (21-15, 18-21, 21-19)
  • If team missing → show TBD
  • If no score → show -
  • You can check refereeChief.vue for 详情 button

4. Add filter (dropdown)#

  • Need dropdown filters

Fix Problem PlayTeams.vue#

05/03/2026#

Fix Conditional query#

  1. Currently, conditional queries fail to return any data

部署#

sudo docker run —name bmsv6 —network bms-network -d -p 8089:8089 bms

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

毕设工作
https://mizuki.mysqil.com/posts/graduate-design/work-note/
作者
niangao5142
发布于
2026-02-03
许可协议
Unlicensed

部分信息可能已经过时

封面
Sample Song
Sample Artist
封面
Sample Song
Sample Artist
0:00 / 0:00