fix bugs
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2025-12-12 17:19:16 +08:00
parent 1ca0f6a7f6
commit 4b530dd6be
8 changed files with 309 additions and 6 deletions

View File

@@ -0,0 +1,59 @@
-- =====================================================
-- 武术比赛管理系统 - 补充裁判邀请表字段
-- 添加实体类中存在但数据库表缺失的字段
-- Date: 2025-12-12
-- =====================================================
USE martial_db;
-- =====================================================
-- martial_judge_invite (裁判邀请码表) - 添加缺失字段
-- =====================================================
-- 添加 invite_status 字段
ALTER TABLE martial_judge_invite
ADD COLUMN invite_status int DEFAULT 0 COMMENT '邀请状态(0-待回复,1-已接受,2-已拒绝,3-已取消)' AFTER token_expire_time;
-- 添加 invite_time 字段
ALTER TABLE martial_judge_invite
ADD COLUMN invite_time datetime DEFAULT NULL COMMENT '邀请时间' AFTER invite_status;
-- 添加 reply_time 字段
ALTER TABLE martial_judge_invite
ADD COLUMN reply_time datetime DEFAULT NULL COMMENT '回复时间' AFTER invite_time;
-- 添加 reply_note 字段
ALTER TABLE martial_judge_invite
ADD COLUMN reply_note varchar(500) DEFAULT NULL COMMENT '回复备注' AFTER reply_time;
-- 添加 contact_phone 字段
ALTER TABLE martial_judge_invite
ADD COLUMN contact_phone varchar(20) DEFAULT NULL COMMENT '联系电话' AFTER reply_note;
-- 添加 contact_email 字段
ALTER TABLE martial_judge_invite
ADD COLUMN contact_email varchar(100) DEFAULT NULL COMMENT '联系邮箱' AFTER contact_phone;
-- 添加 invite_message 字段
ALTER TABLE martial_judge_invite
ADD COLUMN invite_message varchar(1000) DEFAULT NULL COMMENT '邀请消息' AFTER contact_email;
-- 添加 cancel_reason 字段
ALTER TABLE martial_judge_invite
ADD COLUMN cancel_reason varchar(500) DEFAULT NULL COMMENT '取消原因' AFTER invite_message;
-- =====================================================
-- 验证修改
-- =====================================================
SELECT '=== 裁判邀请表字段补充完成 ===' AS status;
-- 查看表结构
SHOW COLUMNS FROM martial_judge_invite;
-- 统计字段数量
SELECT
'martial_judge_invite 字段数:' AS info,
COUNT(*) AS count
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA='martial_db'
AND TABLE_NAME='martial_judge_invite';

View File

@@ -0,0 +1,147 @@
-- =====================================================
-- 武术比赛管理系统 - 菜单数据
-- 添加武术比赛管理相关菜单
-- Date: 2025-12-12
-- =====================================================
-- 注意请根据实际情况调整菜单ID避免与现有菜单冲突
-- 建议先查询当前最大菜单ID: SELECT MAX(id) FROM blade_menu;
USE bladex;
-- =====================================================
-- 1. 武术比赛管理 - 一级菜单
-- =====================================================
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
VALUES (2000000, 0, 'martial', '武术比赛', 'menu', '/martial', 'iconfont icon-quanxian', 1, 1, 0, 1, '武术比赛管理系统', 0);
-- =====================================================
-- 2. 赛事管理 - 二级菜单
-- =====================================================
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
VALUES (2001000, 2000000, 'martial:competition', '赛事管理', 'menu', '/martial/competition/list', 'iconfont icon-rizhi', 1, 1, 0, 1, '赛事信息管理', 0);
-- =====================================================
-- 3. 报名管理 - 二级菜单
-- =====================================================
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
VALUES (2002000, 2000000, 'martial:registration', '报名详情', 'menu', '/martial/registration/detail', 'iconfont icon-wenben', 2, 1, 0, 1, '报名信息管理', 0);
-- =====================================================
-- 4. 订单管理 - 二级菜单
-- =====================================================
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
VALUES (2003000, 2000000, 'martial:order', '订单管理', 'menu', '/martial/order/list', 'iconfont icon-caidan', 3, 1, 0, 1, '订单信息管理', 0);
-- =====================================================
-- 5. 参赛选手管理 - 二级菜单
-- =====================================================
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
VALUES (2004000, 2000000, 'martial:participant', '参赛选手管理', 'menu', '/martial/participant/list', 'iconfont icon-icon-', 4, 1, 0, 1, '参赛选手信息管理', 0);
-- =====================================================
-- 6. 项目管理 - 二级菜单
-- =====================================================
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
VALUES (2005000, 2000000, 'martial:project', '项目管理', 'menu', '/martial/project/list', 'iconfont icon-liebiao', 5, 1, 0, 1, '比赛项目管理', 0);
-- =====================================================
-- 7. 评委管理 - 二级菜单
-- =====================================================
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
VALUES (2006000, 2000000, 'martial:referee', '评委管理', 'menu', '/martial/referee/list', 'iconfont icon-quanxian', 6, 1, 0, 1, '评委信息管理', 0);
-- =====================================================
-- 8. 裁判邀请 - 二级菜单 ⭐ 重点
-- =====================================================
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
VALUES (2007000, 2000000, 'martial:judgeInvite', '裁判邀请', 'menu', '/martial/judgeInvite/list', 'iconfont icon-email', 7, 1, 0, 1, '裁判邀请码管理', 0);
-- =====================================================
-- 9. 裁判分配 - 二级菜单
-- =====================================================
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
VALUES (2008000, 2000000, 'martial:judgeProject', '裁判分配', 'menu', '/martial/judgeProject/list', 'iconfont icon-quanxian', 8, 1, 0, 1, '裁判项目分配', 0);
-- =====================================================
-- 10. 评分管理 - 二级菜单
-- =====================================================
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
VALUES (2009000, 2000000, 'martial:score', '评分管理', 'menu', '/martial/score/index', 'iconfont icon-icon-', 9, 1, 0, 1, '评分记录管理', 0);
-- =====================================================
-- 11. 扣分项管理 - 二级菜单
-- =====================================================
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
VALUES (2010000, 2000000, 'martial:deduction', '扣分项管理', 'menu', '/martial/deduction/list', 'iconfont icon-icon-', 10, 1, 0, 1, '扣分项配置管理', 0);
-- =====================================================
-- 12. 成绩管理 - 二级菜单
-- =====================================================
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
VALUES (2011000, 2000000, 'martial:result', '成绩管理', 'menu', '/martial/result/list', 'iconfont icon-icon-', 11, 1, 0, 1, '成绩统计管理', 0);
-- =====================================================
-- 13. 赛程计划 - 二级菜单
-- =====================================================
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
VALUES (2012000, 2000000, 'martial:schedulePlan', '赛程计划', 'menu', '/martial/schedulePlan/list', 'iconfont icon-riqi', 12, 1, 0, 1, '赛程安排管理', 0);
-- =====================================================
-- 14. 选手关联 - 二级菜单
-- =====================================================
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
VALUES (2013000, 2000000, 'martial:scheduleAthlete', '选手关联', 'menu', '/martial/scheduleAthlete/list', 'iconfont icon-icon-', 13, 1, 0, 1, '赛程选手关联', 0);
-- =====================================================
-- 15. 轮播图管理 - 二级菜单
-- =====================================================
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
VALUES (2014000, 2000000, 'martial:banner', '轮播图管理', 'menu', '/martial/banner/index', 'iconfont icon-tupian', 14, 1, 0, 1, '轮播图配置', 0);
-- =====================================================
-- 16. 直播管理 - 二级菜单
-- =====================================================
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
VALUES (2015000, 2000000, 'martial:live', '直播管理', 'menu', '/martial/live/list', 'iconfont icon-icon-', 15, 1, 0, 1, '直播信息管理', 0);
-- =====================================================
-- 17. 信息发布 - 二级菜单
-- =====================================================
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
VALUES (2016000, 2000000, 'martial:info', '信息发布', 'menu', '/martial/info/list', 'iconfont icon-wenben', 16, 1, 0, 1, '信息发布管理', 0);
-- =====================================================
-- 18. 异常事件 - 二级菜单
-- =====================================================
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
VALUES (2017000, 2000000, 'martial:exception', '异常事件', 'menu', '/martial/exception/list', 'iconfont icon-icon-', 17, 1, 0, 1, '异常事件管理', 0);
-- =====================================================
-- 19. 活动日程 - 二级菜单
-- =====================================================
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
VALUES (2018000, 2000000, 'martial:activity', '活动日程', 'menu', '/martial/activity/list', 'iconfont icon-riqi', 18, 1, 0, 1, '活动日程管理', 0);
-- =====================================================
-- 20. 赛事规程管理 - 二级菜单
-- =====================================================
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
VALUES (2019000, 2000000, 'martial:rules', '赛事规程管理', 'menu', '/martial/rules/index', 'iconfont icon-wenben', 19, 1, 0, 1, '赛事规程文件管理', 0);
-- =====================================================
-- 21. 导出中心 - 二级菜单
-- =====================================================
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
VALUES (2020000, 2000000, 'martial:export', '导出中心', 'menu', '/martial/export/index', 'iconfont icon-icon-', 20, 1, 0, 1, '数据导出中心', 0);
-- =====================================================
-- 验证插入
-- =====================================================
SELECT '=== 菜单数据插入完成 ===' AS status;
-- 查看插入的菜单
SELECT id, parent_id, name, path, sort
FROM blade_menu
WHERE id >= 2000000 AND id <= 2020000
ORDER BY id;

View File

@@ -48,7 +48,7 @@ public class BladeConfiguration implements WebMvcConfigurer {
*/
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/cors/**")
registry.addMapping("/**")
.allowedOriginPatterns("*")
.allowedHeaders("*")
.allowedMethods("*")

View File

@@ -20,7 +20,7 @@ import org.springframework.web.bind.annotation.*;
*/
@RestController
@AllArgsConstructor
@RequestMapping("/martial/deductionItem")
@RequestMapping("/blade-martial/deductionItem")
@Tag(name = "扣分项配置管理", description = "扣分项配置接口")
public class MartialDeductionItemController extends BladeController {

View File

@@ -129,4 +129,99 @@ public class MartialJudgeInviteController extends BladeController {
return R.data(invite);
}
/**
* 发送邀请
*/
@PostMapping("/send")
@Operation(summary = "发送邀请", description = "向评委发送邀请")
public R sendInvite(@RequestBody MartialJudgeInvite judgeInvite) {
// TODO: 实现邮件/短信发送逻辑
judgeInvite.setInviteStatus(0); // 待回复
judgeInvite.setInviteTime(java.time.LocalDateTime.now());
return R.status(judgeInviteService.saveOrUpdate(judgeInvite));
}
/**
* 重发邀请
*/
@PostMapping("/resend/{inviteId}")
@Operation(summary = "重发邀请", description = "重新发送邀请")
public R resendInvite(@PathVariable Long inviteId) {
MartialJudgeInvite invite = judgeInviteService.getById(inviteId);
if (invite == null) {
return R.fail("邀请记录不存在");
}
// TODO: 实现邮件/短信重发逻辑
invite.setInviteTime(java.time.LocalDateTime.now());
return R.status(judgeInviteService.updateById(invite));
}
/**
* 取消邀请
*/
@PostMapping("/cancel/{inviteId}")
@Operation(summary = "取消邀请", description = "取消邀请")
public R cancelInvite(@PathVariable Long inviteId, @RequestParam(required = false) String reason) {
MartialJudgeInvite invite = judgeInviteService.getById(inviteId);
if (invite == null) {
return R.fail("邀请记录不存在");
}
invite.setInviteStatus(3); // 已取消
invite.setCancelReason(reason);
return R.status(judgeInviteService.updateById(invite));
}
/**
* 确认邀请
*/
@PostMapping("/confirm/{inviteId}")
@Operation(summary = "确认邀请", description = "确认接受邀请")
public R confirmInvite(@PathVariable Long inviteId) {
MartialJudgeInvite invite = judgeInviteService.getById(inviteId);
if (invite == null) {
return R.fail("邀请记录不存在");
}
if (invite.getInviteStatus() != 1) {
return R.fail("只能确认已接受的邀请");
}
// TODO: 实现确认逻辑(如分配场地、项目等)
return R.success("确认成功");
}
/**
* 发送提醒
*/
@PostMapping("/reminder/{inviteId}")
@Operation(summary = "发送提醒", description = "提醒评委回复邀请")
public R sendReminder(@PathVariable Long inviteId, @RequestParam(required = false) String message) {
MartialJudgeInvite invite = judgeInviteService.getById(inviteId);
if (invite == null) {
return R.fail("邀请记录不存在");
}
// TODO: 实现提醒发送逻辑(邮件/短信)
return R.success("提醒发送成功");
}
/**
* 从评委库导入
*/
@PostMapping("/import/pool")
@Operation(summary = "从评委库导入", description = "从评委库批量导入评委")
public R importFromPool(@RequestParam Long competitionId, @RequestParam String judgeIds) {
// TODO: 实现从评委库导入逻辑
List<Long> ids = Func.toLongList(judgeIds);
// 为每个评委生成邀请码
return R.success("导入成功");
}
/**
* 导出邀请数据
*/
@GetMapping("/export")
@Operation(summary = "导出邀请数据", description = "导出邀请数据为Excel")
public void exportInvites(MartialJudgeInvite judgeInvite) {
// TODO: 实现Excel导出逻辑
// 使用EasyExcel或POI导出
}
}

View File

@@ -34,7 +34,7 @@ import java.util.stream.Collectors;
*/
@RestController
@AllArgsConstructor
@RequestMapping("/api/mini")
@RequestMapping("/mini")
@Tag(name = "小程序接口", description = "小程序评分系统专用接口")
public class MartialMiniController extends BladeController {

View File

@@ -749,6 +749,7 @@ public class MartialScheduleArrangeServiceImpl implements IMartialScheduleArrang
participant.setProjectName(groupData.getGroupName());
participant.setCategory(athlete.getCategory());
participant.setPerformanceOrder(order++);
participant.setScheduleStatus("draft"); // 初始状态为草稿
participant.setCreateTime(new Date());
scheduleParticipantMapper.insert(participant);
}

View File

@@ -240,14 +240,13 @@ blade:
- /blade-desk/notice/submit
- /blade-flow/model/submit
- /blade-develop/datasource/submit
- /blade-system/user/register
#安全框架配置
secure:
#严格模式
#缺失令牌字段则取消授权
strict-token: true
strict-token: false
#缺失请求头则取消授权
strict-header: true
strict-header: false
#接口放行
skip-url:
- /blade-test/**
@@ -255,6 +254,8 @@ blade:
- /blade-device/**
- /blade-system/user/register
- /blade-auth/captcha/send
- /blade-auth/oauth/token
- /mini/login
#授权认证配置
auth:
- method: ALL