From 093fac278c7931e8160209a428729d5a82d5cd72 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期日, 27 十月 2024 21:29:09 +0800
Subject: [PATCH] 一个班级可以有多个老师

---
 src/main/java/com/ycl/jxkg/service/ClassesUserService.java          |   10 +++++
 src/main/java/com/ycl/jxkg/domain/form/ClassesForm.java             |    4 ++
 src/main/java/com/ycl/jxkg/mapper/ClassesUserMapper.java            |    9 ++++
 src/main/java/com/ycl/jxkg/service/impl/ClassesServiceImpl.java     |   46 +++++++++++++++++++++++
 src/main/java/com/ycl/jxkg/domain/entity/ClassesUser.java           |    4 +
 src/main/java/com/ycl/jxkg/controller/admin/UserController.java     |   15 +++++++
 src/main/java/com/ycl/jxkg/service/impl/ClassesUserServiceImpl.java |    6 +++
 src/main/resources/mapper/ClassesUserMapper.xml                     |    7 +++
 src/main/java/com/ycl/jxkg/domain/vo/ClassesVO.java                 |    5 ++
 9 files changed, 105 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/ycl/jxkg/controller/admin/UserController.java b/src/main/java/com/ycl/jxkg/controller/admin/UserController.java
index 8e08622..9f6bf0e 100644
--- a/src/main/java/com/ycl/jxkg/controller/admin/UserController.java
+++ b/src/main/java/com/ycl/jxkg/controller/admin/UserController.java
@@ -46,6 +46,7 @@
     private final WebContext webContext;
     private final Integer teacher = 2;
     private final Integer student = 1;
+
     @RequestMapping(value = "/page/list", method = RequestMethod.POST)
     public Result<PageInfo<UserResponseVO>> pageList(@RequestBody UserPageRequestVO model) {
         if(!student.equals(model.getRole())) {
@@ -73,6 +74,20 @@
         return Result.ok().data(studentVOS);
     }
 
+    @RequestMapping(value = "/teacher/list", method = RequestMethod.GET)
+    public Result<?> teacherList() {
+        List<User> teacherList = new LambdaQueryChainWrapper<>(userService.getBaseMapper())
+                .eq(User::getRole, RoleEnum.TEACHER.getCode())
+                .orderByDesc(User::getCreateTime)
+                .list();
+        List<StudentVO> teachers = teacherList.stream().map(item -> {
+            StudentVO student = new StudentVO();
+            BeanUtils.copyProperties(item, student);
+            return student;
+        }).collect(Collectors.toList());
+        return Result.ok().data(teachers);
+    }
+
     @RequestMapping(value = "/classes/students", method = RequestMethod.GET)
     public Result<com.ycl.jxkg.domain.vo.student.user.UserResponseVO> classesStudent(@RequestParam Integer classesId) {
         List<StudentVO> studentList = userService.classesStudent(classesId);
diff --git a/src/main/java/com/ycl/jxkg/domain/entity/ClassesUser.java b/src/main/java/com/ycl/jxkg/domain/entity/ClassesUser.java
index d4782f7..2e030ec 100644
--- a/src/main/java/com/ycl/jxkg/domain/entity/ClassesUser.java
+++ b/src/main/java/com/ycl/jxkg/domain/entity/ClassesUser.java
@@ -27,5 +27,7 @@
     /**  */
     private Integer userId;
 
-
+    @TableField("teacher")
+    /** 鏄惁鑰佸笀 */
+    private Boolean teacher;
 }
diff --git a/src/main/java/com/ycl/jxkg/domain/form/ClassesForm.java b/src/main/java/com/ycl/jxkg/domain/form/ClassesForm.java
index 27fbde5..87510ea 100644
--- a/src/main/java/com/ycl/jxkg/domain/form/ClassesForm.java
+++ b/src/main/java/com/ycl/jxkg/domain/form/ClassesForm.java
@@ -13,6 +13,7 @@
 import lombok.Data;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * 鐝骇琛ㄥ崟
@@ -36,6 +37,9 @@
     @ApiModelProperty("缁撴潫鏃堕棿")
     private Date endTime;
 
+    @ApiModelProperty("鏁欏笀鍒楄〃")
+    private List<Integer> teacherList;
+
     @ApiModelProperty("澶囨敞")
     private String remark;
 
diff --git a/src/main/java/com/ycl/jxkg/domain/vo/ClassesVO.java b/src/main/java/com/ycl/jxkg/domain/vo/ClassesVO.java
index 89ba6eb..73187c4 100644
--- a/src/main/java/com/ycl/jxkg/domain/vo/ClassesVO.java
+++ b/src/main/java/com/ycl/jxkg/domain/vo/ClassesVO.java
@@ -5,6 +5,7 @@
 import com.ycl.jxkg.domain.entity.Classes;
 
 import java.util.Date;
+import java.util.List;
 
 import com.ycl.jxkg.enums.general.ClassesStatusEnum;
 import org.springframework.lang.NonNull;
@@ -23,6 +24,10 @@
     /** 鐝骇鍚嶇О */
     private String className;
 
+    /** 鑰佸笀 */
+    private List<Integer> teacherList;
+    private String teacherNamesStr;
+
     /** 鍒涘缓浜� */
     private Integer createUser;
     private String createUserName;
diff --git a/src/main/java/com/ycl/jxkg/mapper/ClassesUserMapper.java b/src/main/java/com/ycl/jxkg/mapper/ClassesUserMapper.java
index 346eaab..5e77e13 100644
--- a/src/main/java/com/ycl/jxkg/mapper/ClassesUserMapper.java
+++ b/src/main/java/com/ycl/jxkg/mapper/ClassesUserMapper.java
@@ -10,6 +10,7 @@
 import java.util.List;
 
 import com.ycl.jxkg.domain.vo.StudentExamInfoVO;
+import com.ycl.jxkg.domain.vo.StudentVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -57,4 +58,12 @@
      * @return
      */
     List<String> getClassesNameByUserId(@Param("userId") Integer userId);
+
+    /**
+     * 鏌ヨ鐝骇鑰佸笀
+     *
+     * @param id
+     * @return
+     */
+    List<StudentVO> getTeacherListByClassesId(@Param("id") Integer id);
 }
diff --git a/src/main/java/com/ycl/jxkg/service/ClassesUserService.java b/src/main/java/com/ycl/jxkg/service/ClassesUserService.java
index 2199aed..a9e8fe9 100644
--- a/src/main/java/com/ycl/jxkg/service/ClassesUserService.java
+++ b/src/main/java/com/ycl/jxkg/service/ClassesUserService.java
@@ -6,6 +6,8 @@
 import com.ycl.jxkg.domain.form.ClassesUserForm;
 import com.ycl.jxkg.domain.form.EditClassesUserForm;
 import com.ycl.jxkg.domain.query.ClassesUserQuery;
+import com.ycl.jxkg.domain.vo.StudentVO;
+
 import java.util.List;
 
 /**
@@ -71,4 +73,12 @@
      * @return
      */
     Result edit(EditClassesUserForm form);
+
+    /**
+     * 鏌ヨ鐝骇鑰佸笀
+     *
+     * @param id
+     * @return
+     */
+    List<StudentVO> getTeacherListByClassesId(Integer id);
 }
diff --git a/src/main/java/com/ycl/jxkg/service/impl/ClassesServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/ClassesServiceImpl.java
index 94a5c85..c88625a 100644
--- a/src/main/java/com/ycl/jxkg/service/impl/ClassesServiceImpl.java
+++ b/src/main/java/com/ycl/jxkg/service/impl/ClassesServiceImpl.java
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
 import com.ycl.jxkg.context.WebContext;
 import com.ycl.jxkg.domain.entity.Classes;
+import com.ycl.jxkg.domain.entity.ClassesUser;
 import com.ycl.jxkg.domain.vo.StudentSimpleVO;
 import com.ycl.jxkg.domain.vo.StudentVO;
 import com.ycl.jxkg.enums.general.ClassesStatusEnum;
@@ -15,12 +16,16 @@
 import com.ycl.jxkg.domain.form.ClassesForm;
 import com.ycl.jxkg.domain.vo.ClassesVO;
 import com.ycl.jxkg.domain.query.ClassesQuery;
+import com.ycl.jxkg.service.ClassesUserService;
 import com.ycl.jxkg.utils.PageUtil;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import lombok.RequiredArgsConstructor;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.Assert;
+import org.springframework.util.CollectionUtils;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -36,6 +41,7 @@
 
     private final ClassesMapper classesMapper;
     private final WebContext webContext;
+    private final ClassesUserService classesUserService;
 
     /**
      * 娣诲姞
@@ -43,11 +49,25 @@
      * @return
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Result add(ClassesForm form) {
         Classes entity = ClassesForm.getEntityByForm(form, null);
         entity.setStatus(ClassesStatusEnum.NORMAL);
         entity.setCreateUser(webContext.getCurrentUser().getId());
         baseMapper.insert(entity);
+
+        List<Integer> teacherList = form.getTeacherList();
+        if (CollectionUtils.isEmpty(teacherList)) {
+            teacherList = new ArrayList<>(1);
+        }
+        teacherList.add(webContext.getCurrentUser().getId());
+        for (Integer teacherUserId : teacherList) {
+            ClassesUser classesUser = new ClassesUser();
+            classesUser.setClassesId(entity.getId());
+            classesUser.setUserId(teacherUserId);
+            classesUser.setTeacher(Boolean.TRUE);
+            classesUserService.save(classesUser);
+        }
         return Result.ok("娣诲姞鎴愬姛");
     }
 
@@ -57,6 +77,7 @@
      * @return
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Result update(ClassesForm form) {
         Classes entity = baseMapper.selectById(form.getId());
 
@@ -64,6 +85,23 @@
         Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
         BeanUtils.copyProperties(form, entity);
         baseMapper.updateById(entity);
+
+        new LambdaUpdateChainWrapper<>(classesUserService.getBaseMapper())
+                .eq(ClassesUser::getClassesId, entity.getId())
+                .eq(ClassesUser::getTeacher, Boolean.TRUE)
+                .remove();
+        List<Integer> teacherList = form.getTeacherList();
+        if (CollectionUtils.isEmpty(teacherList)) {
+            teacherList = new ArrayList<>(1);
+        }
+        teacherList.add(webContext.getCurrentUser().getId());
+        for (Integer teacherUserId : teacherList) {
+            ClassesUser classesUser = new ClassesUser();
+            classesUser.setClassesId(entity.getId());
+            classesUser.setUserId(teacherUserId);
+            classesUser.setTeacher(Boolean.TRUE);
+            classesUserService.save(classesUser);
+        }
         return Result.ok("淇敼鎴愬姛");
     }
 
@@ -99,6 +137,14 @@
         IPage<ClassesVO> page = PageUtil.getPage(query, ClassesVO.class);
         query.setUserId(webContext.getCurrentUser().getId());
         baseMapper.getPage(page, query);
+
+        for (ClassesVO vo : page.getRecords()) {
+            List<StudentVO> teacherList = classesUserService.getTeacherListByClassesId(vo.getId());
+            List<Integer> teacherIds = teacherList.stream().map(StudentVO::getId).collect(Collectors.toList());
+            String teacherNamesStr = teacherList.stream().map(StudentVO::getRealName).collect(Collectors.joining(","));
+            vo.setTeacherList(teacherIds);
+            vo.setTeacherNamesStr(teacherNamesStr);
+        }
         return Result.ok().data(page.getRecords()).total(page.getTotal());
     }
 
diff --git a/src/main/java/com/ycl/jxkg/service/impl/ClassesUserServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/ClassesUserServiceImpl.java
index 78a3fe8..59fa3b9 100644
--- a/src/main/java/com/ycl/jxkg/service/impl/ClassesUserServiceImpl.java
+++ b/src/main/java/com/ycl/jxkg/service/impl/ClassesUserServiceImpl.java
@@ -6,6 +6,7 @@
 import com.ycl.jxkg.domain.entity.ClassesUser;
 import com.ycl.jxkg.domain.entity.User;
 import com.ycl.jxkg.domain.form.EditClassesUserForm;
+import com.ycl.jxkg.domain.vo.StudentVO;
 import com.ycl.jxkg.enums.RoleEnum;
 import com.ycl.jxkg.enums.UserStatusEnum;
 import com.ycl.jxkg.mapper.ClassesUserMapper;
@@ -113,6 +114,11 @@
         return Result.ok("淇敼鎴愬姛");
     }
 
+    @Override
+    public List<StudentVO> getTeacherListByClassesId(Integer id) {
+        return baseMapper.getTeacherListByClassesId(id);
+    }
+
     /**
      * 淇敼
      *
diff --git a/src/main/resources/mapper/ClassesUserMapper.xml b/src/main/resources/mapper/ClassesUserMapper.xml
index 05d0369..76f7e7c 100644
--- a/src/main/resources/mapper/ClassesUserMapper.xml
+++ b/src/main/resources/mapper/ClassesUserMapper.xml
@@ -77,4 +77,11 @@
         left join t_classes tc on tcu.classes_id = tc.id
         where user_id = #{userId} and tcu.deleted = 0 and tc.deleted =0
     </select>
+
+    <select id="getTeacherListByClassesId" resultType="com.ycl.jxkg.domain.vo.StudentVO">
+        SELECT
+               DISTINCT tu.id, tu.real_name
+        FROM t_user tu
+            INNER JOIN t_classes_user tcu ON tu.id = tcu.user_id AND tcu.classes_id = #{id} AND tcu.deleted = 0 AND tcu.teacher = 1 AND tu.deleted = 0
+    </select>
 </mapper>

--
Gitblit v1.8.0