Quellcode durchsuchen

老师管理:绑定班级bug修复

jinxia.mo vor 17 Stunden
Ursprung
Commit
4b79e25322

+ 38 - 23
back-ui/src/views/dz/teacher/index.vue

@@ -288,12 +288,14 @@ const data = reactive({
   form: {},
   formTeacherClass: {
       teacherId: null,
+      schoolId: null,
       schoolName: null,
       name: null,
       classIds: []
   },
   formCampusClass: {
       teacherId: null,
+      schoolId: null,
       campusId: null,
       name: null,
       classIds: []
@@ -388,6 +390,7 @@ function cancelTeacherClass() {
 function resetTeacherClass() {
     formTeacherClass.value = {
         teacherId: null,
+        schoolId: null,
         schoolName: null,
         classIds: [],
         name: null
@@ -496,20 +499,24 @@ function handleUpdateTeacherClass(row) {
         schoolId: row.schoolId,
         teacherId: row.teacherId
     }
-    listAllClass(submitData).then(response => {
-        classOptions.value = response.data || []
-
-        // 然后设置数据
-        formTeacherClass.value.teacherId = row.teacherId
-        formTeacherClass.value.name = row.name
-        formTeacherClass.value.schoolName = row.schoolName
-
-        listAllTeacherClass(submitData).then(response => {
-            formTeacherClass.value.classIds = (response.data || []).map(item => item.classId)
-        })
-
-        openTeacherClass.value = true
-        titleTeacherClass.value = "关联班级"
+    
+    // 设置基本数据
+    formTeacherClass.value.teacherId = row.teacherId
+    formTeacherClass.value.schoolId = row.schoolId
+    formTeacherClass.value.name = row.name
+    formTeacherClass.value.schoolName = row.schoolName
+    
+    // 先打开弹窗
+    openTeacherClass.value = true
+    titleTeacherClass.value = "关联班级"
+    
+    // 加载班级列表和已关联的班级
+    Promise.all([
+        listAllClass(submitData),
+        listAllTeacherClass(submitData)
+    ]).then(([classResponse, teacherClassResponse]) => {
+        classOptions.value = classResponse.data || []
+        formTeacherClass.value.classIds = (teacherClassResponse.data || []).map(item => item.classId)
     })
 }
 
@@ -520,6 +527,7 @@ function submitFormTeacherClass() {
             // 构建提交参数
             const submitData = {
                 teacherId: formTeacherClass.value.teacherId,
+                schoolId: formTeacherClass.value.schoolId,
                 classIds: formTeacherClass.value.classIds
             }
             // console.log("submitData"+submitData)
@@ -546,15 +554,19 @@ function handleUpdateCampusClass(row) {
     
     // 设置数据
     formCampusClass.value.teacherId = row.teacherId
+    formCampusClass.value.schoolId = row.campusId
     formCampusClass.value.name = row.name
-    // 如果有培训校区,默认选中
+    
+    // 先打开弹窗
+    openCampusClass.value = true
+    titleCampusClass.value = "关联校区班级"
+    
+    // 如果有培训校区,默认选中并加载该校区的班级列表
     if (row.campusId) {
         formCampusClass.value.campusId = row.campusId
         // 加载该校区的班级列表
         loadCampusClasses(row.campusId, row.teacherId)
     }
-    openCampusClass.value = true
-    titleCampusClass.value = "关联校区班级"
 }
 
 /** 校区选择变化时,加载该校区的班级列表 */
@@ -575,12 +587,13 @@ function loadCampusClasses(campusId, teacherId) {
         schoolId: campusId,
         teacherId: teacherId
     }
-    listAllClass(submitData).then(response => {
-        campusClassOptions.value = response.data || []
-        // 加载已关联的班级
-        listAllTeacherClass(submitData).then(response => {
-            formCampusClass.value.classIds = (response.data || []).map(item => item.classId)
-        })
+    // 使用Promise.all确保两个请求都完成后再设置数据
+    Promise.all([
+        listAllClass(submitData),
+        listAllTeacherClass(submitData)
+    ]).then(([classResponse, teacherClassResponse]) => {
+        campusClassOptions.value = classResponse.data || []
+        formCampusClass.value.classIds = (teacherClassResponse.data || []).map(item => item.classId)
     })
 }
 
@@ -591,6 +604,7 @@ function submitFormCampusClass() {
             // 构建提交参数
             const submitData = {
                 teacherId: formCampusClass.value.teacherId,
+                schoolId: formCampusClass.value.schoolId,
                 classIds: formCampusClass.value.classIds
             }
             // 调用关联班级的API
@@ -615,6 +629,7 @@ function cancelCampusClass() {
 function resetCampusClass() {
     formCampusClass.value = {
         teacherId: null,
+        schoolId: null,
         campusId: null,
         name: null,
         classIds: []

+ 71 - 8
ie-admin/src/main/java/com/ruoyi/web/controller/dz/DzTeacherClassController.java

@@ -1,13 +1,15 @@
 package com.ruoyi.web.controller.dz;
 
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 import javax.servlet.http.HttpServletResponse;
 
 import com.ruoyi.common.enums.BoolValues;
+import com.ruoyi.dz.domain.DzSchool;
+import com.ruoyi.dz.domain.DzClasses;
+import com.ruoyi.dz.mapper.DzClassesMapper;
+import com.ruoyi.dz.service.IDzSchoolService;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -39,6 +41,10 @@ public class DzTeacherClassController extends BaseController
 {
     @Autowired
     private IDzTeacherClassService dzTeacherClassService;
+    @Autowired
+    private IDzSchoolService schoolService;
+    @Autowired
+    private DzClassesMapper dzClassesMapper;
 
     /**
      * 查询教师班级关系列表
@@ -98,19 +104,75 @@ public class DzTeacherClassController extends BaseController
     public AjaxResult batchBindTeacherClass(@RequestBody DzTeacherClass dzTeacherClass)
     {
         List<Long> insertClassIds = Arrays.stream(dzTeacherClass.getClassIds()).collect(Collectors.toList());
+        //区分班级是学校还是校区对应的班级
+        List<DzSchool> dzSchoolList = schoolService.getDzSchoolByClassIds(insertClassIds);
+        //关联校区
+        Boolean isBindSchool = false;
+        if (CollectionUtils.isNotEmpty(dzSchoolList)&&
+                null==dzSchoolList.get(0).getDeptId()||dzSchoolList.get(0).getDeptId()<=0){
+            isBindSchool = true;
+        }
 
         DzTeacherClass cond = new DzTeacherClass().setTeacherId(dzTeacherClass.getTeacherId());
         List<DzTeacherClass> alreadyList = dzTeacherClassService.selectDzTeacherClassList(cond);
         List<Long> dbClassIds = alreadyList.stream().map(DzTeacherClass::getClassId).collect(Collectors.toList());
+        //需要将dbClassIds中与isBindSchool不相同的剔除
+        List<DzSchool> dzSchoolDbList = schoolService.getDzSchoolByClassIds(dbClassIds);
+        List<Long> schoolProcessList = new ArrayList<>();
+        for (DzSchool dzSchool : dzSchoolDbList) {
+            if (isBindSchool){
+                if (null==dzSchool.getDeptId()||dzSchool.getDeptId()<=0){
+                    schoolProcessList.add(dzSchool.getId());
+                }
+            }else {
+                if (null!=dzSchool.getDeptId()&&dzSchool.getDeptId()>0){
+                    schoolProcessList.add(dzSchool.getId());
+                }
+            }
+        }
+
+        // 构建classId到schoolId的映射:通过查询classes表获取每个classId对应的schoolId
+        final Map<Long, Long> classIdToSchoolIdMap;
+        if (CollectionUtils.isNotEmpty(dbClassIds)) {
+            List<DzClasses> classesList = dzClassesMapper.selectClassesByIds(dbClassIds);
+            if (CollectionUtils.isNotEmpty(classesList)) {
+                classIdToSchoolIdMap = classesList.stream()
+                        .filter(clazz -> clazz.getClassId() != null && clazz.getSchoolId() != null)
+                        .collect(Collectors.toMap(
+                                DzClasses::getClassId,
+                                DzClasses::getSchoolId,
+                                (existing, replacement) -> existing
+                        ));
+            } else {
+                classIdToSchoolIdMap = new HashMap<>();
+            }
+        } else {
+            classIdToSchoolIdMap = new HashMap<>();
+        }
+
+        // 如果schoolProcessList为空就过滤,否则将schoolId不在schoolProcessList内的过滤
+        if (CollectionUtils.isNotEmpty(schoolProcessList)) {
+            alreadyList = alreadyList.stream()
+                    .filter(item -> {
+                        Long schoolId = classIdToSchoolIdMap.get(item.getClassId());
+                        return schoolId != null && schoolProcessList.contains(schoolId);
+                    })
+                    .collect(Collectors.toList());
+        } else {
+            // 如果schoolProcessList为空,过滤掉所有记录
+            alreadyList = new ArrayList<>();
+        }
+
+        final List<Long> finalDbClassIds = alreadyList.stream().map(DzTeacherClass::getClassId).collect(Collectors.toList());
 
-        // 2. 找出需要删除的班级ID(存在于dbClassIds但不存在于insertClassIds)
-        List<Long> deleteClassIds = dbClassIds.stream()
+        // 2. 找出需要删除的班级ID(存在于finalDbClassIds但不存在于insertClassIds)
+        List<Long> deleteClassIds = finalDbClassIds.stream()
                 .filter(dbId -> !insertClassIds.contains(dbId))
                 .collect(Collectors.toList());
 
-        // 3. 找出需要新增的班级ID(存在于insertClassIds但不存在于dbClassIds)
+        // 3. 找出需要新增的班级ID(存在于insertClassIds但不存在于finalDbClassIds)
         List<Long> newClassIds = insertClassIds.stream()
-                .filter(insertId -> !dbClassIds.contains(insertId))
+                .filter(insertId -> !finalDbClassIds.contains(insertId))
                 .collect(Collectors.toList());
 
         // 4. 执行删除操作
@@ -137,6 +199,7 @@ public class DzTeacherClassController extends BaseController
                         DzTeacherClass insert = new DzTeacherClass();
                         insert.setTeacherId(teacherId);
                         insert.setClassId(classId);
+                        insert.setSchoolId(dzTeacherClass.getSchoolId());
                         insert.setStatus(BoolValues.yes.getValue()); // 设置有效状态
                         return insert;
                     })

+ 16 - 0
ie-system/src/main/java/com/ruoyi/dz/domain/DzTeacherClass.java

@@ -29,6 +29,10 @@ public class DzTeacherClass extends BaseEntity
     private Long classId;
     private Long[] classIds;
 
+    /** 学校id */
+    @Excel(name = "学校id")
+    private Long schoolId;
+
     /** 有效状态 */
     @Excel(name = "有效状态")
     private Integer status;
@@ -48,6 +52,7 @@ public class DzTeacherClass extends BaseEntity
         return id;
     }
 
+
     public DzTeacherClass setTeacherId(Long teacherId)
     {
         this.teacherId = teacherId;
@@ -69,6 +74,16 @@ public class DzTeacherClass extends BaseEntity
         return classId;
     }
 
+    public void setSchoolId(Long schoolId)
+    {
+        this.schoolId = schoolId;
+    }
+
+    public Long getSchoolId()
+    {
+        return schoolId;
+    }
+
     public void setStatus(Integer status)
     {
         this.status = status;
@@ -103,6 +118,7 @@ public class DzTeacherClass extends BaseEntity
             .append("id", getId())
             .append("teacherId", getTeacherId())
             .append("classId", getClassId())
+            .append("schoolId", getSchoolId())
             .append("status", getStatus())
             .append("remark", getRemark())
             .append("outDate", getOutDate())

+ 8 - 0
ie-system/src/main/java/com/ruoyi/dz/mapper/DzSchoolMapper.java

@@ -69,4 +69,12 @@ public interface DzSchoolMapper
      * @return 学校数量
      */
     public int checkSchoolName(@Param("name") String name, @Param("id") Long id);
+
+    /**
+     * 根据班级ID列表查询学校信息
+     *
+     * @param classIds 班级ID列表
+     * @return 学校信息列表
+     */
+    public List<DzSchool> getDzSchoolByClassIds(@Param("classIds") List<Long> classIds);
 }

+ 8 - 0
ie-system/src/main/java/com/ruoyi/dz/service/IDzSchoolService.java

@@ -67,4 +67,12 @@ public interface IDzSchoolService
      * @return true-唯一,false-不唯一
      */
     public boolean checkSchoolName(String name, Long id);
+
+    /**
+     * 根据班级ID列表查询学校信息
+     *
+     * @param classIds 班级ID列表
+     * @return 学校信息列表
+     */
+    public List<DzSchool> getDzSchoolByClassIds(List<Long> classIds);
 }

+ 16 - 1
ie-system/src/main/java/com/ruoyi/dz/service/impl/DzSchoolServiceImpl.java

@@ -2,9 +2,9 @@ package com.ruoyi.dz.service.impl;
 
 import java.util.List;
 import com.ruoyi.common.utils.DateUtils;
-import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.enums.UserTypeEnum;
 import com.ruoyi.system.service.ISysUserService;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.ruoyi.dz.mapper.DzSchoolMapper;
@@ -125,4 +125,19 @@ public class DzSchoolServiceImpl implements IDzSchoolService
         int count = dzSchoolMapper.checkSchoolName(name, id);
         return count == 0;
     }
+
+    /**
+     * 根据班级ID列表查询学校信息
+     *
+     * @param classIds 班级ID列表
+     * @return 学校信息列表
+     */
+    @Override
+    public List<DzSchool> getDzSchoolByClassIds(List<Long> classIds)
+    {
+        if (CollectionUtils.isEmpty(classIds)) {
+            return new java.util.ArrayList<>();
+        }
+        return dzSchoolMapper.getDzSchoolByClassIds(classIds);
+    }
 }

+ 11 - 0
ie-system/src/main/resources/mapper/dz/DzSchoolMapper.xml

@@ -138,4 +138,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             and id != #{id}
         </if>
     </select>
+
+    <!-- 根据班级ID列表查询学校信息 -->
+    <select id="getDzSchoolByClassIds" resultMap="DzSchoolResult">
+        select distinct t3.id, t3.name, t3.dept_id, t3.location, t3.remark, t3.pro, t3.city, t3.area, t3.status, t3.create_time, t3.update_time, t3.exam_types
+        from dz_classes t2
+        join dz_school t3 on t2.school_id = t3.id
+        where t2.class_id in
+        <foreach collection="classIds" item="classId" open="(" separator="," close=")">
+            #{classId}
+        </foreach>
+    </select>
 </mapper>

+ 8 - 1
ie-system/src/main/resources/mapper/dz/DzTeacherClassMapper.xml

@@ -8,13 +8,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="id"    column="id"    />
         <result property="teacherId"    column="teacher_id"    />
         <result property="classId"    column="class_id"    />
+        <result property="schoolId"    column="school_id"    />
         <result property="status"    column="status"    />
         <result property="remark"    column="remark"    />
         <result property="outDate"    column="out_date"    />
     </resultMap>
 
     <sql id="selectDzTeacherClassVo">
-        select id, teacher_id, class_id, status, remark, out_date from dz_teacher_class
+        select id, teacher_id, class_id, school_id, status, remark, out_date from dz_teacher_class
     </sql>
 
     <select id="selectDzTeacherClassList" parameterType="DzTeacherClass" resultMap="DzTeacherClassResult">
@@ -22,6 +23,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <where>
             <if test="teacherId != null "> and teacher_id = #{teacherId}</if>
             <if test="classId != null "> and class_id = #{classId}</if>
+            <if test="schoolId != null "> and school_id = #{schoolId}</if>
             <if test="status != null "> and status = #{status}</if>
             <if test="outDate != null "> and out_date = #{outDate}</if>
         </where>
@@ -45,6 +47,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="teacherId != null">teacher_id,</if>
             <if test="classId != null">class_id,</if>
+            <if test="schoolId != null">school_id,</if>
             <if test="status != null">status,</if>
             <if test="remark != null">remark,</if>
             <if test="outDate != null">out_date,</if>
@@ -52,6 +55,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="teacherId != null">#{teacherId},</if>
             <if test="classId != null">#{classId},</if>
+            <if test="schoolId != null">#{schoolId},</if>
             <if test="status != null">#{status},</if>
             <if test="remark != null">#{remark},</if>
             <if test="outDate != null">#{outDate},</if>
@@ -63,6 +67,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         INSERT INTO dz_teacher_class (
         teacher_id,
         class_id,
+        school_id,
         status,
         create_time,
         create_by
@@ -71,6 +76,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             (
             #{item.teacherId},
             #{item.classId},
+            #{item.schoolId},
             #{item.status},
             #{item.createTime},
             #{item.createBy}
@@ -83,6 +89,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <trim prefix="SET" suffixOverrides=",">
             <if test="teacherId != null">teacher_id = #{teacherId},</if>
             <if test="classId != null">class_id = #{classId},</if>
+            <if test="schoolId != null">school_id = #{schoolId},</if>
             <if test="status != null">status = #{status},</if>
             <if test="remark != null">remark = #{remark},</if>
             <if test="outDate != null">out_date = #{outDate},</if>