Bladeren bron

Phase11: 班级码进班后联动enrollment确认(FR-ENROLL-03)

liaoxg 1 week geleden
bovenliggende
commit
56a64fd
1 gewijzigde bestanden met toevoegingen van 33 en 0 verwijderingen
  1. 33 0
      train-backend/src/main/java/com/train/controller/ClassController.java

+ 33 - 0
train-backend/src/main/java/com/train/controller/ClassController.java

@@ -1,9 +1,12 @@
 package com.train.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.train.common.Result;
 import com.train.entity.TrainClass;
+import com.train.entity.TrainEnrollment;
 import com.train.entity.TrainUser;
 import com.train.mapper.TrainClassMapper;
+import com.train.mapper.TrainEnrollmentMapper;
 import com.train.mapper.TrainUserMapper;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -11,6 +14,7 @@ import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -25,6 +29,9 @@ public class ClassController {
     @Resource
     private TrainUserMapper trainUserMapper;
 
+    @Resource
+    private TrainEnrollmentMapper trainEnrollmentMapper;
+
     /**
      * 凭班级码进班
      */
@@ -50,6 +57,10 @@ public class ClassController {
         user.setClassId(trainClass.getId());
         trainUserMapper.updateById(user);
 
+        // 联动 enrollment:若该班次有该学员 paid 状态的报名单,置 confirmed
+        // (FR-ENROLL-03:已报名学员通过班级码进班后联动确认)
+        confirmEnrollmentIfPresent(userId, trainClass.getId());
+
         Map<String, Object> data = new HashMap<>();
         data.put("classId", trainClass.getId());
         data.put("className", trainClass.getName());
@@ -75,4 +86,26 @@ public class ClassController {
         }
         return Result.success(trainClass);
     }
+
+    /**
+     * 进班后联动报名单:若该学员有 paid 状态的报名单,置 confirmed(FR-ENROLL-03)。
+     * 无报名单则跳过(未报名直接进班场景不影响)。
+     */
+    private void confirmEnrollmentIfPresent(Long uid, Long classId) {
+        TrainEnrollment en = trainEnrollmentMapper.selectOne(
+                new LambdaQueryWrapper<TrainEnrollment>()
+                        .eq(TrainEnrollment::getUid, uid)
+                        .eq(TrainEnrollment::getClassId, classId)
+                        .eq(TrainEnrollment::getStatus, "paid")
+                        .last("LIMIT 1"));
+        if (en == null) {
+            return;
+        }
+        en.setStatus("confirmed");
+        en.setUpdatedAt(new Date());
+        trainEnrollmentMapper.updateById(en);
+        org.slf4j.LoggerFactory.getLogger(ClassController.class)
+                .info("进班联动 enrollment→confirmed: uid={}, classId={}, enrollmentId={}",
+                        uid, classId, en.getId());
+    }
 }