Browse Source

feat(app): 完善分班管理功能- 新增学员信息查询表单对象 StudentInfoForm- 修改分班管理控制器,支持 POST 请求参数绑定- 添加获取门店列表接口 getSiteList-优化学员信息查询逻辑,支持按分班筛选
- 更新课程订单状态查询范围
- 新增门店信息响应对象 SiteInfoVO
- 修复学员是否选择字段默认值问题
- 调整 SQL 查询字段别名映射

wzq 1 day ago
parent
commit
565b929206

+ 25 - 5
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppClassGroupingController.java

@@ -17,6 +17,8 @@ import org.jeecg.modules.system.app.entity.*;
 import org.jeecg.modules.system.app.form.ClassGroupingCasePageForm;
 import org.jeecg.modules.system.app.form.ClassGroupingForm;
 import org.jeecg.modules.system.app.form.ClassGroupingPageForm;
+import org.jeecg.modules.system.app.form.StudentInfoForm;
+import org.jeecg.modules.system.app.mapper.AppSiteMapper;
 import org.jeecg.modules.system.app.service.*;
 import org.jeecg.modules.system.app.vo.*;
 import org.jeecg.modules.system.entity.SysUser;
@@ -40,6 +42,7 @@ public class AppClassGroupingController {
     private final IAppClassUserService appClassUserService;
     private final ISysUserService sysUserService;
     private final IAppCoureseService appCoureseService;
+    private final IAppSiteService appSiteService;
 
     /**
      * 分班管理分页
@@ -48,7 +51,7 @@ public class AppClassGroupingController {
      * @return
      */
     @PostMapping(value = "/queryPage")
-    public Result<IPage<ClassGroupingVO>> queryPage(ClassGroupingPageForm classGroupingPageForm) {
+    public Result<IPage<ClassGroupingVO>> queryPage(@RequestBody ClassGroupingPageForm classGroupingPageForm) {
         LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         String orgCode = loginUser.getOrgCode();
         if (!"A01".equals(orgCode)){
@@ -65,7 +68,7 @@ public class AppClassGroupingController {
      * @return
      */
     @PostMapping(value = "/queryCasePage")
-    public Result<IPage<ClassGroupingCaseVO>> queryCasePage(ClassGroupingCasePageForm classGroupingCasePageForm) {
+    public Result<IPage<ClassGroupingCaseVO>> queryCasePage(@RequestBody ClassGroupingCasePageForm classGroupingCasePageForm) {
         IPage<ClassGroupingCaseVO> classGroupingCaseVOIPage = appClassGroupingService.queryCasePage(classGroupingCasePageForm);
         return Result.OK(classGroupingCaseVOIPage);
     }
@@ -76,12 +79,29 @@ public class AppClassGroupingController {
      * @param
      * @return
      */
-    @GetMapping(value = "/getStudentInfoList")
-    public Result<List<StudentInfoVO>> getStudentInfoList(@RequestParam(value = "coursesId") String coursesId) {
-        List<StudentInfoVO> studentInfoList = appClassGroupingService.getStudentInfoList(coursesId);
+    @PostMapping(value = "/getStudentInfoList")
+    public Result<List<StudentInfoVO>> getStudentInfoList(@RequestBody StudentInfoForm studentInfoForm) {
+        List<StudentInfoVO> studentInfoList = appClassGroupingService.getStudentInfoList(studentInfoForm);
         return Result.OK(studentInfoList);
     }
 
+    /**
+     * 根据所有门店地址
+     *
+     * @param
+     * @return
+     */
+    @GetMapping(value = "/getSiteList")
+    public Result<List<SiteInfoVO>> getSiteList() {
+        List<AppSite> list = appSiteService.list();
+        List<SiteInfoVO> siteInfoVOList = list.stream().map(item -> {
+            SiteInfoVO siteInfoVO = new SiteInfoVO();
+            siteInfoVO.setSiteId(item.getId()).setSiteName(item.getName());
+            return siteInfoVO;
+        }).collect(Collectors.toList());
+        return Result.OK(siteInfoVOList);
+    }
+
     /**
      * 根据课程查询教练列表
      *

+ 28 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/form/StudentInfoForm.java

@@ -0,0 +1,28 @@
+package org.jeecg.modules.system.app.form;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@AllArgsConstructor
+@NoArgsConstructor
+@Schema(description="学员查询表单对象")
+public class StudentInfoForm implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**课程id*/
+    private String coursesId;
+
+    /**分班id*/
+    private String classGroupingId;
+}

+ 2 - 2
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/AppClassGroupingMapper.xml

@@ -35,8 +35,8 @@
     <select id="queryCasePage" resultType="org.jeecg.modules.system.app.vo.ClassGroupingCaseVO">
         SELECT
         cg.id,
-        cg.class_name,
-        u.realname,
+        cg.class_name AS classGroupingName,
+        u.realname AS coachUserName,
         COUNT( cu.id ) AS applyNum
         FROM
         nm_class_grouping cg

+ 2 - 1
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/IAppClassGroupingService.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import org.jeecg.modules.system.app.entity.AppClassGrouping;
 import org.jeecg.modules.system.app.form.ClassGroupingCasePageForm;
 import org.jeecg.modules.system.app.form.ClassGroupingPageForm;
+import org.jeecg.modules.system.app.form.StudentInfoForm;
 import org.jeecg.modules.system.app.vo.ClassGroupingCaseVO;
 import org.jeecg.modules.system.app.vo.ClassGroupingVO;
 import org.jeecg.modules.system.app.vo.StudentInfoVO;
@@ -16,5 +17,5 @@ public interface IAppClassGroupingService extends IService<AppClassGrouping> {
 
     IPage<ClassGroupingCaseVO> queryCasePage(ClassGroupingCasePageForm classGroupingCasePageForm);
 
-    List<StudentInfoVO> getStudentInfoList(String coursesId);
+    List<StudentInfoVO> getStudentInfoList(StudentInfoForm studentInfoForm);
 }

+ 34 - 4
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/impl/AppClassGroupingServiceImpl.java

@@ -2,6 +2,7 @@ package org.jeecg.modules.system.app.service.impl;
 
 
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -10,17 +11,20 @@ import org.jeecg.common.util.IdCardUtil;
 import org.jeecg.modules.system.app.entity.*;
 import org.jeecg.modules.system.app.form.ClassGroupingCasePageForm;
 import org.jeecg.modules.system.app.form.ClassGroupingPageForm;
+import org.jeecg.modules.system.app.form.StudentInfoForm;
 import org.jeecg.modules.system.app.mapper.*;
 import org.jeecg.modules.system.app.service.IAppClassGroupingService;
 import org.jeecg.modules.system.app.vo.ClassGroupingCaseVO;
 import org.jeecg.modules.system.app.vo.ClassGroupingVO;
 import org.jeecg.modules.system.app.vo.StudentInfoVO;
 import org.jeecg.modules.system.app.vo.staff.StaffResponseVO;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Service
 public class AppClassGroupingServiceImpl extends ServiceImpl<AppClassGroupingMapper, AppClassGrouping> implements IAppClassGroupingService {
@@ -35,6 +39,8 @@ public class AppClassGroupingServiceImpl extends ServiceImpl<AppClassGroupingMap
     private AppCoursesMapper appCoursesMapper;
     @Resource
     private AppSiteMapper appSiteMapper;
+    @Autowired
+    private AppClassGroupingMapper appClassGroupingMapper;
 
     @Override
     public IPage<ClassGroupingVO> queryPage(ClassGroupingPageForm classGroupingPageForm) {
@@ -60,9 +66,9 @@ public class AppClassGroupingServiceImpl extends ServiceImpl<AppClassGroupingMap
     }
 
     @Override
-    public List<StudentInfoVO> getStudentInfoList(String coursesId) {
+    public List<StudentInfoVO> getStudentInfoList(StudentInfoForm studentInfoForm) {
         List<StudentInfoVO> studentInfoList = new ArrayList<>();
-        AppCourses appCourses = appCoursesMapper.selectById(coursesId);
+        AppCourses appCourses = appCoursesMapper.selectById(studentInfoForm.getCoursesId());
         if (ObjectUtil.isNotEmpty(appCourses)) {
 
             String siteId = appCourses.getAddressSiteId();
@@ -70,15 +76,39 @@ public class AppClassGroupingServiceImpl extends ServiceImpl<AppClassGroupingMap
 
             //查询当前课程下已分班的学员
             List<AppClassUser> appClassUserList =
-                    appClassUserMapper.selectList(Wrappers.lambdaQuery(AppClassUser.class).eq(AppClassUser::getCourseId, coursesId));
+                    appClassUserMapper.selectList(Wrappers.lambdaQuery(AppClassUser.class).eq(AppClassUser::getCourseId, studentInfoForm.getCoursesId()));
+
+
+
 
             //根据当前课程查询订单
             List<AppOrderProInfo> orderProInfoList =
-                    appOrderProInfoMapper.selectList(Wrappers.lambdaQuery(AppOrderProInfo.class).between(AppOrderProInfo::getOrderStatus, 1, 4).eq(AppOrderProInfo::getProductId, coursesId));
+                    appOrderProInfoMapper.selectList(Wrappers.lambdaQuery(AppOrderProInfo.class).between(AppOrderProInfo::getOrderStatus, 1, 3).eq(AppOrderProInfo::getProductId, studentInfoForm.getCoursesId()));
+            //所有学员
             for (AppOrderProInfo appOrderProInfo : orderProInfoList) {
                 StudentInfoVO studentInfoVO = new StudentInfoVO();
                 FamilyMembers familyMembers = familyMembersMapper.selectById(appOrderProInfo.getFamilyUserId());
 
+                if (studentInfoForm.getClassGroupingId() != null) {
+                    AppClassUser appClassUser = appClassUserMapper.selectOne(Wrappers.lambdaQuery(AppClassUser.class).eq(AppClassUser::getClassGroupingId,
+                            studentInfoForm.getClassGroupingId()).eq(AppClassUser::getFamilyMemberId, appOrderProInfo.getFamilyUserId()));
+                    if (ObjectUtil.isNotEmpty(appClassUser)) {
+                        studentInfoVO.setId(familyMembers.getId());
+                        studentInfoVO.setName(familyMembers.getFullName());
+                        studentInfoVO.setGender(IdCardUtil.getGender(familyMembers.getIdentityCard()));
+                        studentInfoVO.setAge(IdCardUtil.getAge(familyMembers.getIdentityCard()));
+                        studentInfoVO.setSchoolName("无");
+                        studentInfoVO.setLevelInfo("无");
+                        studentInfoVO.setOrChoose(true);
+                        if (appSite.getType() == 0) {
+                            if (appOrderProInfo.getLevelInfo() != null) {
+                                studentInfoVO.setSchoolName(appSite.getName());
+                                studentInfoVO.setLevelInfo(appOrderProInfo.getLevelInfo());
+                            }
+                        }
+                        studentInfoList.add(studentInfoVO);
+                    }
+                }
                 long count = appClassUserList.stream().filter(appClassUser -> appClassUser.getFamilyMemberId().equals(appOrderProInfo.getFamilyUserId())).count();
                 if (count == 0) {
                     studentInfoVO.setId(familyMembers.getId());

+ 26 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/vo/SiteInfoVO.java

@@ -0,0 +1,26 @@
+package org.jeecg.modules.system.app.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@AllArgsConstructor
+@NoArgsConstructor
+@Schema(description="门店列表响应对象")
+public class SiteInfoVO implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    private String siteId;
+
+    private String siteName;
+}

+ 1 - 1
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/vo/StudentInfoVO.java

@@ -47,5 +47,5 @@ public class StudentInfoVO implements Serializable {
     /**
      * 是否选择
      */
-    private Boolean orChoose;
+    private Boolean orChoose = false;
 }