From 9f2bd88520298c20762560d256aa148a5bd835ee Mon Sep 17 00:00:00 2001 From: menglikai Date: Sat, 9 May 2026 13:22:33 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=9B=A2=E9=98=9F?= =?UTF-8?q?=E9=87=8D=E6=96=B0=E5=AE=9E=E8=AE=AD=E6=8E=A5=E5=8F=A3restartTe?= =?UTF-8?q?am?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jlw/service/ExaminationsService.java | 49 +++++++++++++++++++ .../jlw/web/ExaminationsController.java | 8 +++ 2 files changed, 57 insertions(+) diff --git a/web/src/main/java/com/ibeetl/jlw/service/ExaminationsService.java b/web/src/main/java/com/ibeetl/jlw/service/ExaminationsService.java index 756ccf2..81baf48 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/ExaminationsService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/ExaminationsService.java @@ -66,6 +66,9 @@ public class ExaminationsService extends CoreBaseService { @Autowired private UserExaminationsService userExaminationsService; + @Autowired + private UserTeamsService userTeamsService; + public PageQuery queryByCondition(ExaminationsQuery query) { PageQuery ret = examinationsDao.queryByCondition(query.getPageQuery(), query); queryListAfter(ret.getList()); @@ -1104,4 +1107,50 @@ public class ExaminationsService extends CoreBaseService { return JsonResult.success("重新实训成功"); } + + /** + * 团队模式重新实训 + */ + @Transactional(rollbackFor = Exception.class) + public JsonResult restartTeam(Long examinationId, Long teamId, Users user) { + // 1. 校验权限(该团队成员) + UserTeams ut = new UserTeams(); + ut.setUserId(user.getId()); + ut.setTeamId(teamId); + if (userTeamsService.userTeamsByQuery(ut) == null) { + return JsonResult.failMessage("您不是该团队成员,无权操作"); + } + + // 2. 查找该团队在该实训下的实例 + // 注意:这里的 examinationId 是实训模板ID (examinations.id) + ExaminationInstances instance = sqlManager.lambdaQuery(ExaminationInstances.class) + .andEq(ExaminationInstances::getExaminationId, examinationId) + .andEq(ExaminationInstances::getTeamId, teamId) + .single(); + + if (instance == null) { + return JsonResult.failMessage("未找到实训进度,无需重置"); + } + Long instanceId = instance.getId(); // 获取真正的实例自增ID + + // 3. 删除逻辑 + // 删除实训实例记录 + int rows = examinationInstancesDao.deleteById(instanceId); + if (rows <= 0) { + // 这里抛出异常,触发 @Transactional 回滚 + throw new GlobalException("重新实训失败,未找到实例或删除失败"); + } + + // 清理由该实例产生的业务数据 (InstanceDatas) + sqlManager.lambdaQuery(InstanceDatas.class) + .andEq(InstanceDatas::getInstanceId, instanceId.intValue()) + .delete(); + + // 清理该团队所有成员在该实例下的实训记录 (UserExaminations) + sqlManager.lambdaQuery(UserExaminations.class) + .andEq(UserExaminations::getInstanceId, instanceId) + .delete(); + + return JsonResult.success("团队实训进度重置成功"); + } } diff --git a/web/src/main/java/com/ibeetl/jlw/web/ExaminationsController.java b/web/src/main/java/com/ibeetl/jlw/web/ExaminationsController.java index 5546d59..39c56d1 100644 --- a/web/src/main/java/com/ibeetl/jlw/web/ExaminationsController.java +++ b/web/src/main/java/com/ibeetl/jlw/web/ExaminationsController.java @@ -69,6 +69,14 @@ public class ExaminationsController { return examinationsService.restartOne(examinationId,instanceId, user); } + @PostMapping(API + "/restartTeam") + @FinancialAuth + @ApiModelProperty("团队模式重新实训") + @ResponseBody + public JsonResult restartTeam(@RequestParam Long examinationId, @RequestParam Long teamId, @FinancialUser Users user) { + return examinationsService.restartTeam(examinationId, teamId, user); + } + @GetMapping(API + "/list") @FinancialAuth