Bladeren bron

Merge remote-tracking branch 'origin/dev' into dev

# Conflicts:
#	src/main/resources/sqlScript/20250408_sql.sql
大数据与最优化研究所 8 maanden geleden
bovenliggende
commit
ecd2e6d490

+ 34 - 6
src/main/java/com/xjrsoft/module/base/controller/BaseClassMergeController.java

@@ -2,8 +2,9 @@ package com.xjrsoft.module.base.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.hutool.core.bean.BeanUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.annotation.XjrLog;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.page.ConventPage;
@@ -11,11 +12,15 @@ import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.base.dto.AddBaseClassMergeDto;
 import com.xjrsoft.module.base.dto.BaseClassMergePageDto;
+import com.xjrsoft.module.base.dto.BaseClassMergeStudentPageDto;
 import com.xjrsoft.module.base.dto.UpdateBaseClassMergeDto;
+import com.xjrsoft.module.base.entity.BaseClass;
 import com.xjrsoft.module.base.entity.BaseClassMerge;
 import com.xjrsoft.module.base.service.IBaseClassMergeService;
 import com.xjrsoft.module.base.vo.BaseClassMergePageVo;
+import com.xjrsoft.module.base.vo.BaseClassMergeStudentVo;
 import com.xjrsoft.module.base.vo.BaseClassMergeVo;
+import com.xjrsoft.module.organization.entity.User;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
@@ -51,12 +56,24 @@ public class BaseClassMergeController {
     @SaCheckPermission("baseclassmerge:detail")
     @XjrLog(value = "班级合并列表(分页)")
     public RT<PageOutput<BaseClassMergePageVo>> page(@Valid BaseClassMergePageDto dto){
-
-        LambdaQueryWrapper<BaseClassMerge> queryWrapper = new LambdaQueryWrapper<>();
+        MPJLambdaWrapper<BaseClassMerge> queryWrapper = new MPJLambdaWrapper<>();
         queryWrapper
-                    .orderByDesc(BaseClassMerge::getId)
-                .select(BaseClassMerge.class,x -> VoToColumnUtil.fieldsToColumns(BaseClassMergePageVo.class).contains(x.getProperty()));
-        IPage<BaseClassMerge> page = baseClassMergeService.page(ConventPage.getPage(dto), queryWrapper);
+                .select(BaseClassMerge::getId)
+                .select(BaseClassMerge.class,x -> VoToColumnUtil.fieldsToColumns(BaseClassMerge.class).contains(x.getProperty()))
+                .selectAs(BaseClass::getName, BaseClassMergePageVo::getTargetClassName)
+                .selectAs(User::getName, BaseClassMergePageVo::getCreateUserName)
+                .innerJoin(User.class, User::getId, BaseClassMerge::getCreateUserId)
+                .innerJoin(BaseClass.class, BaseClass::getId, BaseClassMerge::getTargetClassId)
+                .like(StrUtil.isNotEmpty(dto.getTargetClassName()), BaseClass::getName, dto.getTargetClassName())
+                .in(StrUtil.isNotEmpty(dto.getMergeClassName()), BaseClassMerge::getId, "SELECT DISTINCT t1.base_class_merge_id FROM base_class_merge_student t1\n" +
+                        "INNER JOIN base_class t2 ON t1.class_id = t2.id\n" +
+                        "WHERE t1.delete_mark = 0 AND t2.delete_mark = 0\n" +
+                        "AND t2.name LIKE CONCAT('%'," + dto.getMergeClassName() + ",'%')")
+                .orderByDesc(BaseClassMerge::getId);
+        IPage<BaseClassMergePageVo> page = baseClassMergeService.selectJoinListPage(ConventPage.getPage(dto), BaseClassMergePageVo.class, queryWrapper);
+        for (BaseClassMergePageVo record : page.getRecords()) {
+            record.setMergeClassName(baseClassMergeService.getClassNamesByMergeId(Long.parseLong(record.getId())));
+        }
         PageOutput<BaseClassMergePageVo> pageOutput = ConventPage.getPageOutput(page, BaseClassMergePageVo.class);
         return RT.ok(pageOutput);
     }
@@ -101,4 +118,15 @@ public class BaseClassMergeController {
         return RT.ok(baseClassMergeService.delete(ids));
     }
 
+
+    @GetMapping(value = "/student-page")
+    @ApiOperation(value="班级合并学生列表(分页)")
+    @SaCheckPermission("baseclassmerge:detail")
+    @XjrLog(value = "班级合并学生列表(分页)")
+    public RT<PageOutput<BaseClassMergeStudentVo>> studentPage(@Valid BaseClassMergeStudentPageDto dto){
+        IPage<BaseClassMergeStudentVo> page = baseClassMergeService.getStudentPage(dto);
+        PageOutput<BaseClassMergeStudentVo> pageOutput = ConventPage.getPageOutput(page, BaseClassMergeStudentVo.class);
+        return RT.ok(pageOutput);
+    }
+
 }

+ 5 - 0
src/main/java/com/xjrsoft/module/base/dto/BaseClassMergePageDto.java

@@ -1,6 +1,7 @@
 package com.xjrsoft.module.base.dto;
 
 import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -15,5 +16,9 @@ import lombok.EqualsAndHashCode;
 @EqualsAndHashCode(callSuper = false)
 public class BaseClassMergePageDto extends PageInput {
 
+    @ApiModelProperty("目标班级名称")
+    private String targetClassName;
 
+    @ApiModelProperty("原班级")
+    private String mergeClassName;
 }

+ 22 - 0
src/main/java/com/xjrsoft/module/base/dto/BaseClassMergeStudentPageDto.java

@@ -0,0 +1,22 @@
+package com.xjrsoft.module.base.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+
+/**
+* @title: 班级合并分页查询入参
+* @Author dzx
+* @Date: 2025-04-08
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class BaseClassMergeStudentPageDto extends PageInput {
+
+    @ApiModelProperty("班级合并id")
+    private Long baseClassMergeId;
+
+}

+ 5 - 4
src/main/java/com/xjrsoft/module/base/entity/BaseClassMerge.java

@@ -11,6 +11,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.time.LocalDateTime;
 import java.util.Date;
 import java.util.List;
 
@@ -45,7 +46,7 @@ public class BaseClassMerge implements Serializable {
     */
     @ApiModelProperty("创建时间")
     @TableField(fill = FieldFill.INSERT)
-    private Date createDate;
+    private LocalDateTime createDate;
     /**
     * 修改人id
     */
@@ -57,20 +58,20 @@ public class BaseClassMerge implements Serializable {
     */
     @ApiModelProperty("修改日期")
     @TableField(fill = FieldFill.UPDATE)
-    private Date modifyDate;
+    private LocalDateTime modifyDate;
     /**
     * 删除标记(0:未删除 1:已删除)
     */
     @ApiModelProperty("删除标记(0:未删除 1:已删除)")
     @TableField(fill = FieldFill.INSERT)
     @TableLogic
-    private Short deleteMark;
+    private Integer deleteMark;
     /**
     * 有效标记(0:未启用 1:已启用)
     */
     @ApiModelProperty("有效标记(0:未启用 1:已启用)")
     @TableField(fill = FieldFill.INSERT)
-    private Short enabledMark;
+    private Integer enabledMark;
     /**
     * 涉及学生人数
     */

+ 2 - 2
src/main/java/com/xjrsoft/module/base/entity/BaseClassMergeStudent.java

@@ -62,13 +62,13 @@ public class BaseClassMergeStudent implements Serializable {
     @ApiModelProperty("删除标记(0:未删除 1:已删除)")
     @TableField(fill = FieldFill.INSERT)
     @TableLogic
-    private Short deleteMark;
+    private Integer deleteMark;
     /**
     * 有效标记(0:未启用 1:已启用)
     */
     @ApiModelProperty("有效标记(0:未启用 1:已启用)")
     @TableField(fill = FieldFill.INSERT)
-    private Short enabledMark;
+    private Integer enabledMark;
     /**
     * 班级合并id(base_class_merge)
     */

+ 10 - 0
src/main/java/com/xjrsoft/module/base/service/IBaseClassMergeService.java

@@ -1,7 +1,11 @@
 package com.xjrsoft.module.base.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.base.dto.BaseClassMergeStudentPageDto;
+import com.xjrsoft.module.base.entity.BaseClass;
 import com.xjrsoft.module.base.entity.BaseClassMerge;
+import com.xjrsoft.module.base.vo.BaseClassMergeStudentVo;
 
 import java.util.List;
 
@@ -36,4 +40,10 @@ public interface IBaseClassMergeService extends MPJBaseService<BaseClassMerge> {
     * @return
     */
     Boolean delete(List<Long> ids);
+
+    List<BaseClass> getClassListByMergeId(Long id);
+
+    String getClassNamesByMergeId(Long id);
+
+    IPage<BaseClassMergeStudentVo> getStudentPage(BaseClassMergeStudentPageDto dto);
 }

+ 97 - 13
src/main/java/com/xjrsoft/module/base/service/impl/BaseClassMergeServiceImpl.java

@@ -1,18 +1,36 @@
 package com.xjrsoft.module.base.service.impl;
 
+import cn.dev33.satoken.stp.StpUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.xjrsoft.common.enums.DeleteMark;
+import com.xjrsoft.common.enums.StudentChangeTypeEnum;
+import com.xjrsoft.common.page.ConventPage;
+import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.module.base.dto.BaseClassMergeStudentPageDto;
+import com.xjrsoft.module.base.entity.BaseClass;
 import com.xjrsoft.module.base.entity.BaseClassMerge;
 import com.xjrsoft.module.base.entity.BaseClassMergeStudent;
+import com.xjrsoft.module.base.mapper.BaseClassMapper;
 import com.xjrsoft.module.base.mapper.BaseClassMergeMapper;
 import com.xjrsoft.module.base.mapper.BaseClassMergeStudentMapper;
 import com.xjrsoft.module.base.service.IBaseClassMergeService;
+import com.xjrsoft.module.base.vo.BaseClassMergeStudentVo;
+import com.xjrsoft.module.organization.entity.User;
+import com.xjrsoft.module.student.entity.StudentChangeRecord;
+import com.xjrsoft.module.student.mapper.BaseStudentSchoolRollMapper;
+import com.xjrsoft.module.student.service.IStudentChangeRecordService;
+import com.xjrsoft.module.system.entity.DictionaryDetail;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 /**
@@ -24,31 +42,51 @@ import java.util.stream.Collectors;
 @Service
 @AllArgsConstructor
 public class BaseClassMergeServiceImpl extends MPJBaseServiceImpl<BaseClassMergeMapper, BaseClassMerge> implements IBaseClassMergeService {
-    private final BaseClassMergeMapper baseClassMergeBaseClassMergeMapper;
 
-    private final BaseClassMergeStudentMapper baseClassMergeBaseClassMergeStudentMapper;
+    private final BaseClassMergeStudentMapper mergeStudentMapper;
+    private final BaseClassMapper baseClassMapper;
+    private final BaseStudentSchoolRollMapper schoolRollMapper;
+    private final IStudentChangeRecordService changeRecordService;
 
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean add(BaseClassMerge baseClassMerge) {
-        baseClassMergeBaseClassMergeMapper.insert(baseClassMerge);
+        baseClassMerge.setStudentCount(baseClassMerge.getBaseClassMergeStudentList().size());
+        this.baseMapper.insert(baseClassMerge);
+        BaseClass baseClass = baseClassMapper.selectById(baseClassMerge.getTargetClassId());
+
+        Set<Long> collect = baseClassMerge.getBaseClassMergeStudentList().stream().map(BaseClassMergeStudent::getClassId).collect(Collectors.toSet());
+        List<BaseClass> classList = baseClassMapper.selectBatchIds(collect);
+        Map<Long, String> classMap = classList.stream().collect(Collectors.toMap(BaseClass::getId, BaseClass::getName));
+
         for (BaseClassMergeStudent baseClassMergeStudent : baseClassMerge.getBaseClassMergeStudentList()) {
             baseClassMergeStudent.setBaseClassMergeId(baseClassMerge.getId());
-            baseClassMergeBaseClassMergeStudentMapper.insert(baseClassMergeStudent);
+            mergeStudentMapper.insert(baseClassMergeStudent);
+            schoolRollMapper.updateStudentClass(baseClass.getId(), baseClass.getGradeId(), baseClass.getMajorSetId(), baseClassMergeStudent.getUserId());
+            changeRecordService.insertData(
+                    classMap.get(baseClassMergeStudent.getClassId()),
+                    baseClassMergeStudent.getClassId().toString(),
+                    baseClass.getName(),
+                    baseClass.getId().toString(),
+                    baseClassMergeStudent.getUserId(),
+                    StpUtil.getLoginIdAsLong(),
+                    StudentChangeTypeEnum.ChangeClass.getCode(),
+                    3
+            );
         }
-
+        
         return true;
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean update(BaseClassMerge baseClassMerge) {
-        baseClassMergeBaseClassMergeMapper.updateById(baseClassMerge);
+        this.baseMapper.updateById(baseClassMerge);
         //********************************* BaseClassMergeStudent  增删改  开始 *******************************************/
         {
             // 查出所有子级的id
-            List<BaseClassMergeStudent> baseClassMergeStudentList = baseClassMergeBaseClassMergeStudentMapper.selectList(Wrappers.lambdaQuery(BaseClassMergeStudent.class).eq(BaseClassMergeStudent::getBaseClassMergeId, baseClassMerge.getId()).select(BaseClassMergeStudent::getId));
+            List<BaseClassMergeStudent> baseClassMergeStudentList = mergeStudentMapper.selectList(Wrappers.lambdaQuery(BaseClassMergeStudent.class).eq(BaseClassMergeStudent::getBaseClassMergeId, baseClassMerge.getId()).select(BaseClassMergeStudent::getId));
             List<Long> baseClassMergeStudentIds = baseClassMergeStudentList.stream().map(BaseClassMergeStudent::getId).collect(Collectors.toList());
             //原有子表单 没有被删除的主键
             List<Long> baseClassMergeStudentOldIds = baseClassMerge.getBaseClassMergeStudentList().stream().map(BaseClassMergeStudent::getId).filter(Objects::nonNull).collect(Collectors.toList());
@@ -58,18 +96,18 @@ public class BaseClassMergeServiceImpl extends MPJBaseServiceImpl<BaseClassMerge
             for (BaseClassMergeStudent baseClassMergeStudent : baseClassMerge.getBaseClassMergeStudentList()) {
                 //如果不等于空则修改
                 if (baseClassMergeStudent.getId() != null) {
-                    baseClassMergeBaseClassMergeStudentMapper.updateById(baseClassMergeStudent);
+                    mergeStudentMapper.updateById(baseClassMergeStudent);
                 }
                 //如果等于空 则新增
                 else {
                     //已经不存在的id 删除
                     baseClassMergeStudent.setBaseClassMergeId(baseClassMerge.getId());
-                    baseClassMergeBaseClassMergeStudentMapper.insert(baseClassMergeStudent);
+                    mergeStudentMapper.insert(baseClassMergeStudent);
                 }
             }
             //已经不存在的id 删除
-            if(baseClassMergeStudentRemoveIds.size() > 0){
-                baseClassMergeBaseClassMergeStudentMapper.deleteBatchIds(baseClassMergeStudentRemoveIds);
+            if(!baseClassMergeStudentRemoveIds.isEmpty()){
+                mergeStudentMapper.deleteBatchIds(baseClassMergeStudentRemoveIds);
             }
         }
         //********************************* BaseClassMergeStudent  增删改  结束 *******************************************/
@@ -80,9 +118,55 @@ public class BaseClassMergeServiceImpl extends MPJBaseServiceImpl<BaseClassMerge
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean delete(List<Long> ids) {
-        baseClassMergeBaseClassMergeMapper.deleteBatchIds(ids);
-        baseClassMergeBaseClassMergeStudentMapper.delete(Wrappers.lambdaQuery(BaseClassMergeStudent.class).in(BaseClassMergeStudent::getBaseClassMergeId, ids));
+        this.baseMapper.deleteBatchIds(ids);
+        mergeStudentMapper.delete(Wrappers.lambdaQuery(BaseClassMergeStudent.class).in(BaseClassMergeStudent::getBaseClassMergeId, ids));
 
         return true;
     }
+
+    @Override
+    public List<BaseClass> getClassListByMergeId(Long id) {
+        List<BaseClass> classList = baseClassMapper.selectList(
+                new MPJLambdaWrapper<BaseClass>()
+                        .select(BaseClass::getId)
+                        .select(BaseClass.class, x -> VoToColumnUtil.fieldsToColumns(BaseClass.class).contains(x.getProperty()))
+                        .innerJoin(BaseClassMergeStudent.class, BaseClassMergeStudent::getClassId, BaseClass::getId)
+                        .innerJoin(BaseClassMergeStudent.class, BaseClassMergeStudent::getClassId, BaseClass::getId)
+                        .eq(BaseClassMergeStudent::getDeleteMark, DeleteMark.NODELETE.getCode())
+                        .eq(BaseClassMergeStudent::getBaseClassMergeId, id)
+                        .orderByAsc(BaseClass::getName)
+        );
+        return classList;
+    }
+
+    @Override
+    public String getClassNamesByMergeId(Long id) {
+        List<BaseClass> classList = getClassListByMergeId(id);
+        if(!classList.isEmpty()){
+            Set<String> classNameSet = classList.stream().map(BaseClass::getName).collect(Collectors.toSet());
+            return classNameSet.toString().replace("[", "").replace("]", "").replace(" ", "");
+        }
+        return null;
+    }
+
+    @Override
+    public IPage<BaseClassMergeStudentVo> getStudentPage(BaseClassMergeStudentPageDto dto) {
+        MPJLambdaWrapper<BaseClassMergeStudent> queryWrapper = new MPJLambdaWrapper<>();
+        queryWrapper
+                .select(BaseClassMergeStudent::getId)
+                .select(BaseClassMergeStudent.class,x -> VoToColumnUtil.fieldsToColumns(BaseClassMergeStudent.class).contains(x.getProperty()))
+                .selectAs(BaseClass::getName, BaseClassMergeStudentVo::getClassName)
+                .selectAs(User::getName, BaseClassMergeStudentVo::getName)
+                .selectAs(User::getCredentialNumber, BaseClassMergeStudentVo::getCredentialNumber)
+                .select("t4.name", BaseClassMergeStudentVo::getGender)
+                .select("t3.name", BaseClassMergeStudentVo::getTeacherName)
+                .innerJoin(User.class, User::getId, BaseClassMergeStudent::getUserId)
+                .innerJoin(BaseClass.class, BaseClass::getId, BaseClassMergeStudent::getClassId)
+                .leftJoin(User.class, User::getId, BaseClass::getTeacherId)
+                .innerJoin("xjr_dictionary_detail t4 ON (t4.code = t1.gender) ")
+                .eq(BaseClassMergeStudent::getBaseClassMergeId, dto.getBaseClassMergeId())
+                .orderByDesc(BaseClassMergeStudent::getId);
+        IPage<BaseClassMergeStudentVo> page = mergeStudentMapper.selectJoinPage(ConventPage.getPage(dto), BaseClassMergeStudentVo.class, queryWrapper);
+        return page;
+    }
 }

+ 12 - 4
src/main/java/com/xjrsoft/module/base/vo/BaseClassMergePageVo.java

@@ -3,6 +3,7 @@ package com.xjrsoft.module.base.vo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.time.LocalDateTime;
 import java.util.Date;
 
 /**
@@ -22,13 +23,13 @@ public class BaseClassMergePageVo {
     /**
     * 创建人
     */
-    @ApiModelProperty("创建人")
-    private Long createUserId;
+    @ApiModelProperty("操作人")
+    private String createUserName;
     /**
     * 创建时间
     */
     @ApiModelProperty("创建时间")
-    private Date createDate;
+    private LocalDateTime createDate;
     /**
     * 修改人id
     */
@@ -57,8 +58,15 @@ public class BaseClassMergePageVo {
     /**
     * 目标班级
     */
-    @ApiModelProperty("目标班级")
+    @ApiModelProperty("目标班级id")
     private Long targetClassId;
+
+    @ApiModelProperty("目标班级名称")
+    private String targetClassName;
+
+    @ApiModelProperty("原班级")
+    private String mergeClassName;
+
     /**
     * 原因
     */

+ 15 - 0
src/main/java/com/xjrsoft/module/base/vo/BaseClassMergeStudentVo.java

@@ -33,6 +33,21 @@ public class BaseClassMergeStudentVo {
     @ApiModelProperty("学生id")
     private Long userId;
 
+    @ApiModelProperty("原有班级")
+    private String className;
+
+    @ApiModelProperty("班主任名称")
+    private String teacherName;
+
+    @ApiModelProperty("姓名")
+    private String name;
+
+    @ApiModelProperty("性别")
+    private String gender;
+
+    @ApiModelProperty("身份证号")
+    private String credentialNumber;
+
 
 
 }

+ 8 - 2
src/main/java/com/xjrsoft/module/databoard/controller/DatadetailController.java

@@ -364,6 +364,12 @@ public class DatadetailController {
         }
         result.setDeptList(deptList);
 
+        List<String> jobStates = new ArrayList<>();
+        jobStates.add("JOB_DDSX");
+        jobStates.add("JOB_WCPX");
+        jobStates.add("ZZZT10009");
+        jobStates.add("ZZZT10004");
+
         MPJLambdaWrapper<XjrUser> queryWrapper = MPJWrappers.<XjrUser>lambdaJoin()
                 .disableSubLogicDel()
                 .orderByDesc(XjrUser::getId)
@@ -373,8 +379,8 @@ public class DatadetailController {
                 .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, BaseTeacher::getJobState, ext -> ext.selectAs(DictionaryDetail::getName, XjrUserPageVo::getJobState))
                 .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, XjrUser::getCredentialType, ext -> ext.selectAs(DictionaryDetail::getName, XjrUserPageVo::getCredentialType))
                 .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, BaseTeacher::getEmployWay, ext -> ext.selectAs(DictionaryDetail::getName, XjrUserPageVo::getEmployWay))
-
-                .selectAsClass(BaseTeacher.class, XjrUserPageVo.class);
+                .selectAsClass(BaseTeacher.class, XjrUserPageVo.class)
+                .in(BaseTeacher::getJobState, jobStates);
 
         List<XjrUserPageVo> teacherList = teacherService.selectJoinList(XjrUserPageVo.class, queryWrapper);
         List<String> idCardList = teacherList.stream().map(XjrUserPageVo::getCredentialNumber).collect(Collectors.toList());

+ 8 - 0
src/main/java/com/xjrsoft/module/student/controller/StudentManagerController.java

@@ -84,6 +84,14 @@ public class StudentManagerController {
             }
         }
 
+        if(StrUtil.isNotEmpty(dto.getClassIdStr())){
+            List<Long> classIds = new ArrayList<>();
+            for (String classId : dto.getClassIdStr().split(",")) {
+                classIds.add(Long.parseLong(classId));
+            }
+            dto.setClassIds(classIds);
+        }
+
         IPage<BaseStudentUserPageVo> page = studentManagerService.getStudentPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
         for (BaseStudentUserPageVo record : page.getRecords()) {
             BaseStudentUser user = studentManagerService.getById(record.getId());

+ 3 - 1
src/main/java/com/xjrsoft/module/student/dto/BaseStudentUserPageDto.java

@@ -63,7 +63,6 @@ public class BaseStudentUserPageDto extends PageInput {
     @JsonIgnore
     private Long teacherId;
 
-
     @JsonIgnore
     private List<Long> classIds;
 
@@ -71,4 +70,7 @@ public class BaseStudentUserPageDto extends PageInput {
     @ApiModelProperty("身份证号")
     private List<String> credentialNumbers;
 
+    @ApiModelProperty("身份证号")
+    private String classIdStr;
+
 }

+ 3 - 0
src/main/java/com/xjrsoft/module/student/mapper/BaseStudentSchoolRollMapper.java

@@ -53,6 +53,9 @@ public interface BaseStudentSchoolRollMapper extends MPJBaseMapper<BaseStudentSc
     @Update("UPDATE base_student_school_roll SET class_id = #{classId} where user_id = #{userId}")
     Boolean updateStudentClass(Long classId, Long userId);
 
+    @Update("UPDATE base_student_school_roll SET class_id = #{classId},major_set_id=#{majorSetId},grade_id=#{gradeId} where user_id = #{userId}")
+    Boolean updateStudentClass(Long classId, Long gradeId, Long majorSetId, Long userId);
+
     @Update("UPDATE base_student_school_roll SET class_id = #{classId},major_set_id=#{majorSetId},grade_id=#{gradeId},stduy_status=#{stduyStatus} where user_id = #{userId}")
     Boolean updateStudentClassGradeMajorStduyStatus(Long classId, Long gradeId, Long majorSetId, String stduyStatus, Long userId);
 

+ 12 - 0
src/main/resources/mapper/student/BaseStudentMapper.xml

@@ -100,6 +100,18 @@
         <if test="dto.teacherId != null">
             and t4.teacher_id = #{dto.teacherId}
         </if>
+        <if test="dto.classIds != null and dto.classIds.size() > 0">
+            and t3.class_id in
+            <foreach item="classId" index="index" collection="dto.classIds" open="(" close=")" separator=",">
+                #{classId}
+            </foreach>
+        </if>
+        <if test="dto.credentialNumbers != null and dto.credentialNumbers.size() > 0">
+            and t1.credential_number in
+            <foreach item="credentialNumber" index="index" collection="dto.credentialNumbers" open="(" close=")" separator=",">
+                #{credentialNumber}
+            </foreach>
+        </if>
         <if test="dto.order == null">
             order by t1.id
         </if>

+ 50 - 83
src/main/resources/sqlScript/20250408_sql.sql

@@ -1,95 +1,62 @@
 -- ---------------------------------------------------------------
 -- 学生复读流程
 -- ---------------------------------------------------------------
-CREATE TABLE `wf_student_repeat_study`
-(
-    `id`                BIGINT NOT NULL COMMENT '主键',
-    `create_user_id`    BIGINT       DEFAULT NULL COMMENT '创建人',
-    `create_date`       DATETIME(3)  DEFAULT NULL COMMENT '创建时间',
-    `modify_user_id`    BIGINT       DEFAULT NULL COMMENT '修改人id',
-    `modify_date`       DATETIME(3)  DEFAULT NULL COMMENT '修改日期',
-    `delete_mark`       SMALLINT     DEFAULT NULL COMMENT '删除标记(0:未删除 1:已删除)',
-    `enabled_mark`      SMALLINT     DEFAULT NULL COMMENT '有效标记(0:未启用 1:已启用)',
-    `is_original`       INT          DEFAULT NULL COMMENT '是否本校生(1:是 0:否)',
-    `name`              VARCHAR(50)  DEFAULT NULL COMMENT '学生姓名',
-    `credential_number` VARCHAR(30)  DEFAULT NULL COMMENT '身份证',
-    `old_grade_id`      BIGINT       DEFAULT NULL COMMENT '原年级id',
-    `old_class_id`      BIGINT(30)   DEFAULT NULL COMMENT '原班级id',
-    `archives_status`   VARCHAR(20)  DEFAULT NULL COMMENT '学籍状态',
-    `mobile`            VARCHAR(20)  DEFAULT NULL COMMENT '手机号',
-    `grade_id`          BIGINT       DEFAULT NULL COMMENT '年级id(base_grade)',
-    `major_set_id`      BIGINT       DEFAULT NULL COMMENT '专业方向id',
-    `class_id`          BIGINT       DEFAULT NULL COMMENT '教务处审批班级',
-    `stduy_status`      VARCHAR(30)  DEFAULT NULL COMMENT '就读方式',
-    `teacher_id`        BIGINT       DEFAULT NULL COMMENT '班主任id(xjr_user)',
-    `teacher_name`      VARCHAR(20)  DEFAULT NULL COMMENT '班主任姓名',
-    `remarks`           VARCHAR(500) DEFAULT NULL COMMENT '备注',
-    PRIMARY KEY (`id`) USING BTREE
-) ENGINE = INNODB
-  DEFAULT CHARSET = utf8mb4
-  COLLATE = utf8mb4_0900_ai_ci COMMENT ='学生复读流程';
+CREATE TABLE `wf_student_repeat_study` (
+  `id` BIGINT NOT NULL COMMENT '主键',
+  `create_user_id` BIGINT DEFAULT NULL COMMENT '创建人',
+  `create_date` DATETIME(3) DEFAULT NULL COMMENT '创建时间',
+  `modify_user_id` BIGINT DEFAULT NULL COMMENT '修改人id',
+  `modify_date` DATETIME(3) DEFAULT NULL COMMENT '修改日期',
+  `delete_mark` INT DEFAULT NULL COMMENT '删除标记(0:未删除 1:已删除)',
+  `enabled_mark` INT DEFAULT NULL COMMENT '有效标记(0:未启用 1:已启用)',
+  `is_original` INT DEFAULT NULL COMMENT '是否本校生(1:是 0:否)',
+  `name` VARCHAR(50) DEFAULT NULL COMMENT '学生姓名',
+  `credential_number` VARCHAR(30) DEFAULT NULL COMMENT '身份证',
+  `old_grade_id` BIGINT DEFAULT NULL COMMENT '原年级id',
+  `old_class_id` BIGINT(30) DEFAULT NULL COMMENT '原班级id',
+  `archives_status` VARCHAR(20) DEFAULT NULL COMMENT '学籍状态',
+  `mobile` VARCHAR(20) DEFAULT NULL COMMENT '手机号',
+  `grade_id` BIGINT DEFAULT NULL COMMENT '年级id(base_grade)',
+  `major_set_id` BIGINT DEFAULT NULL COMMENT '专业方向id',
+  `class_id` BIGINT DEFAULT NULL COMMENT '教务处审批班级',
+  `stduy_status` VARCHAR(30) DEFAULT NULL COMMENT '就读方式',
+  `teacher_id` BIGINT DEFAULT NULL COMMENT '班主任id(xjr_user)',
+  `teacher_name` VARCHAR(20) DEFAULT NULL COMMENT '班主任姓名',
+  `remarks` VARCHAR(500) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='学生复读流程';
 
 
 -- ---------------------------------------------------------------
 -- 班级合并
 -- ---------------------------------------------------------------
-CREATE TABLE `base_class_merge`
-(
-    `id`              BIGINT NOT NULL COMMENT '主键',
-    `create_user_id`  BIGINT       DEFAULT NULL COMMENT '创建人',
-    `create_date`     DATETIME(3)  DEFAULT NULL COMMENT '创建时间',
-    `modify_user_id`  BIGINT       DEFAULT NULL COMMENT '修改人id',
-    `modify_date`     DATETIME(3)  DEFAULT NULL COMMENT '修改日期',
-    `delete_mark`     SMALLINT     DEFAULT NULL COMMENT '删除标记(0:未删除 1:已删除)',
-    `enabled_mark`    SMALLINT     DEFAULT NULL COMMENT '有效标记(0:未启用 1:已启用)',
-    `student_count`   INT          DEFAULT NULL COMMENT '涉及学生人数',
-    `target_class_id` BIGINT       DEFAULT NULL COMMENT '目标班级',
-    `reason`          VARCHAR(500) DEFAULT NULL COMMENT '原因',
-    PRIMARY KEY (`id`) USING BTREE
-) ENGINE = INNODB
-  DEFAULT CHARSET = utf8mb4
-  COLLATE = utf8mb4_0900_ai_ci COMMENT ='班级合并';
+CREATE TABLE `base_class_merge` (
+  `id` BIGINT NOT NULL COMMENT '主键',
+  `create_user_id` BIGINT DEFAULT NULL COMMENT '创建人',
+  `create_date` DATETIME DEFAULT NULL COMMENT '创建时间',
+  `modify_user_id` BIGINT DEFAULT NULL COMMENT '修改人id',
+  `modify_date` DATETIME DEFAULT NULL COMMENT '修改日期',
+  `delete_mark` INT DEFAULT NULL COMMENT '删除标记(0:未删除 1:已删除)',
+  `enabled_mark` INT DEFAULT NULL COMMENT '有效标记(0:未启用 1:已启用)',
+  `student_count` INT DEFAULT NULL COMMENT '涉及学生人数',
+  `target_class_id` BIGINT DEFAULT NULL COMMENT '目标班级',
+  `reason` VARCHAR(500) DEFAULT NULL COMMENT '原因',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='班级合并';
 
 -- ---------------------------------------------------------------
 -- 班级合并涉及学生
 -- ---------------------------------------------------------------
-CREATE TABLE `base_class_merge_student`
-(
-    `id`                  BIGINT NOT NULL COMMENT '主键',
-    `create_user_id`      BIGINT      DEFAULT NULL COMMENT '创建人',
-    `create_date`         DATETIME(3) DEFAULT NULL COMMENT '创建时间',
-    `modify_user_id`      BIGINT      DEFAULT NULL COMMENT '修改人id',
-    `modify_date`         DATETIME(3) DEFAULT NULL COMMENT '修改日期',
-    `delete_mark`         SMALLINT    DEFAULT NULL COMMENT '删除标记(0:未删除 1:已删除)',
-    `enabled_mark`        SMALLINT    DEFAULT NULL COMMENT '有效标记(0:未启用 1:已启用)',
-    `base_class_merge_id` BIGINT      DEFAULT NULL COMMENT '班级合并id(base_class_merge)',
-    `class_id`            BIGINT      DEFAULT NULL COMMENT '原有班级',
-    `user_id`             BIGINT      DEFAULT NULL COMMENT '学生id',
-    PRIMARY KEY (`id`) USING BTREE
-) ENGINE = INNODB
-  DEFAULT CHARSET = utf8mb4
-  COLLATE = utf8mb4_0900_ai_ci COMMENT ='班级合并涉及学生';
-
--- ---------------------------------------------------------------
--- 团员管理
--- ---------------------------------------------------------------
-DROP TABLE IF EXISTS `league_members_manage`;
-CREATE TABLE `league_members_manage`
-(
-    id                   bigint   not null comment '主键编号'
-        primary key,
-    create_user_id       BIGINT   NULL COMMENT '创建人',
-    create_date          DATETIME NULL COMMENT '创建时间',
-    modify_user_id       BIGINT   NULL COMMENT '修改人',
-    modify_date          DATETIME NULL COMMENT '修改时间',
-    delete_mark          INT      NOT NULL COMMENT '删除标记',
-    enabled_mark         INT      NOT NULL COMMENT '有效标志',
-
-    `user_id`            BIGINT   NOT NULL COMMENT '学生主键id(xjr_user)',
-    `league_members_num` varchar(64)   DEFAULT NULL COMMENT '团员编号',
-    `address`            varchar(256)  DEFAULT NULL COMMENT '常住地址',
-    `join_time`          DATE          DEFAULT NULL COMMENT '加入时间',
-    `transfer_time`      DATE          DEFAULT NULL COMMENT '转入时间',
-    remark               varchar(1024) DEFAULT NULL COMMENT '备注'
-) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4 COMMENT = '团员管理';
+CREATE TABLE `base_class_merge_student` (
+  `id` BIGINT NOT NULL COMMENT '主键',
+  `create_user_id` BIGINT DEFAULT NULL COMMENT '创建人',
+  `create_date` DATETIME DEFAULT NULL COMMENT '创建时间',
+  `modify_user_id` BIGINT DEFAULT NULL COMMENT '修改人id',
+  `modify_date` DATETIME DEFAULT NULL COMMENT '修改日期',
+  `delete_mark` SMALLINT DEFAULT NULL COMMENT '删除标记(0:未删除 1:已删除)',
+  `enabled_mark` SMALLINT DEFAULT NULL COMMENT '有效标记(0:未启用 1:已启用)',
+  `base_class_merge_id` BIGINT DEFAULT NULL COMMENT '班级合并id(base_class_merge)',
+  `class_id` BIGINT DEFAULT NULL COMMENT '原有班级',
+  `user_id` BIGINT DEFAULT NULL COMMENT '学生id',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='班级合并涉及学生';