From c2dc62c3d40be033cdb65fa54473f7f355e67e88 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期四, 06 六月 2024 15:52:02 +0800
Subject: [PATCH] 班级学员新增、修改

---
 src/main/java/com/ycl/jxkg/controller/admin/ClassesNotifyController.java |    2 
 src/main/java/com/ycl/jxkg/service/ClassesUserService.java               |   11 ++
 src/main/java/com/ycl/jxkg/controller/admin/ClassesUserController.java   |   16 ++
 src/main/java/com/ycl/jxkg/domain/form/ClassesUserForm.java              |   18 +--
 src/main/java/com/ycl/jxkg/controller/admin/ClassesController.java       |    2 
 src/main/java/com/ycl/jxkg/base/Result.java                              |   13 ++
 src/main/java/com/ycl/jxkg/service/impl/ClassesUserServiceImpl.java      |   94 +++++++++++++++++-
 src/main/java/com/ycl/jxkg/domain/vo/ClassesUserVO.java                  |   13 ++
 src/main/resources/mapper/ClassesUserMapper.xml                          |   49 ++++-----
 src/main/java/com/ycl/jxkg/domain/form/EditClassesUserForm.java          |   63 ++++++++++++
 10 files changed, 226 insertions(+), 55 deletions(-)

diff --git a/src/main/java/com/ycl/jxkg/base/Result.java b/src/main/java/com/ycl/jxkg/base/Result.java
index 32ede1a..977d7fe 100644
--- a/src/main/java/com/ycl/jxkg/base/Result.java
+++ b/src/main/java/com/ycl/jxkg/base/Result.java
@@ -83,6 +83,19 @@
     }
 
     /**
+     * Ok rest response.
+     *
+     * @return the rest response
+     */
+    public static Result ok(String msg) {
+        SystemCode systemCode = SystemCode.OK;
+        Result restResponse = new Result();
+        restResponse.put("code", systemCode.getCode());
+        restResponse.put("message", msg);
+        return restResponse;
+    }
+
+    /**
      * Gets code.
      *
      * @return the code
diff --git a/src/main/java/com/ycl/jxkg/controller/admin/ClassesController.java b/src/main/java/com/ycl/jxkg/controller/admin/ClassesController.java
index 0f1a651..3167d00 100644
--- a/src/main/java/com/ycl/jxkg/controller/admin/ClassesController.java
+++ b/src/main/java/com/ycl/jxkg/controller/admin/ClassesController.java
@@ -25,7 +25,7 @@
 @RequiredArgsConstructor
 @Api(value = "鐝骇", tags = "鐝骇绠$悊")
 @RestController
-@RequestMapping("/api/classes")
+@RequestMapping("/api/admin/classes")
 public class ClassesController {
 
     private final ClassesService classesService;
diff --git a/src/main/java/com/ycl/jxkg/controller/admin/ClassesNotifyController.java b/src/main/java/com/ycl/jxkg/controller/admin/ClassesNotifyController.java
index 809e34d..1ff274e 100644
--- a/src/main/java/com/ycl/jxkg/controller/admin/ClassesNotifyController.java
+++ b/src/main/java/com/ycl/jxkg/controller/admin/ClassesNotifyController.java
@@ -27,7 +27,7 @@
 @RequiredArgsConstructor
 @Api(value = "鐝骇閫氱煡", tags = "鐝骇閫氱煡绠$悊")
 @RestController
-@RequestMapping("/api/classes-notify")
+@RequestMapping("/api/admin/classes-notify")
 public class ClassesNotifyController {
 
     private final ClassesNotifyService classesNotifyService;
diff --git a/src/main/java/com/ycl/jxkg/controller/admin/ClassesUserController.java b/src/main/java/com/ycl/jxkg/controller/admin/ClassesUserController.java
index faf1fee..ce28ca7 100644
--- a/src/main/java/com/ycl/jxkg/controller/admin/ClassesUserController.java
+++ b/src/main/java/com/ycl/jxkg/controller/admin/ClassesUserController.java
@@ -1,5 +1,6 @@
 package com.ycl.jxkg.controller.admin;
 
+import com.ycl.jxkg.domain.form.EditClassesUserForm;
 import com.ycl.jxkg.group.Update;
 import com.ycl.jxkg.group.Add;
 import org.springframework.validation.annotation.Validated;
@@ -27,7 +28,7 @@
 @RequiredArgsConstructor
 @Api(value = "鐝骇瀛﹀憳", tags = "鐝骇瀛﹀憳")
 @RestController
-@RequestMapping("/api/classes-user")
+@RequestMapping("/api/admin/classesUser")
 public class ClassesUserController {
 
     private final ClassesUserService classesUserService;
@@ -35,15 +36,22 @@
     @PostMapping
     @ApiOperation(value = "娣诲姞", notes = "娣诲姞")
     @PreAuthorize("hasAuthority('classesUser:add')")
-    public Result add(@RequestBody @Validated(Add.class) ClassesUserForm form) {
+    public Result add(@RequestBody @Validated(Add.class) EditClassesUserForm form) {
         return classesUserService.add(form);
+    }
+
+    @PostMapping("/edit")
+    @ApiOperation(value = "淇敼", notes = "淇敼")
+    @PreAuthorize("hasAuthority('classesUser:edit')")
+    public Result update(@RequestBody @Validated(Update.class) ClassesUserForm form) {
+        return classesUserService.update(form);
     }
 
     @PutMapping
     @ApiOperation(value = "淇敼", notes = "淇敼")
     @PreAuthorize("hasAuthority('classesUser:edit')")
-    public Result update(@RequestBody @Validated(Update.class) ClassesUserForm form) {
-        return classesUserService.update(form);
+    public Result edit(@RequestBody @Validated(Update.class) EditClassesUserForm form) {
+        return classesUserService.edit(form);
     }
 
     @DeleteMapping("/{id}")
diff --git a/src/main/java/com/ycl/jxkg/domain/form/ClassesUserForm.java b/src/main/java/com/ycl/jxkg/domain/form/ClassesUserForm.java
index d59163d..c14b7a9 100644
--- a/src/main/java/com/ycl/jxkg/domain/form/ClassesUserForm.java
+++ b/src/main/java/com/ycl/jxkg/domain/form/ClassesUserForm.java
@@ -13,6 +13,7 @@
 import lombok.Data;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * 鐝骇涓庣敤鎴峰叧鑱旇〃琛ㄥ崟
@@ -22,19 +23,14 @@
  */
 @Data
 @ApiModel(value = "ClassesUser琛ㄥ崟", description = "鐝骇涓庣敤鎴峰叧鑱旇〃琛ㄥ崟")
-public class ClassesUserForm extends AbsForm {
+public class ClassesUserForm {
 
-    @NotNull(message = "涓嶈兘涓虹┖", groups = {Add.class, Update.class})
-    @ApiModelProperty("")
-    private Integer classesId;
+    @NotNull(message = "鐝骇涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鐝骇")
+    private Integer id;
 
-    @NotNull(message = "涓嶈兘涓虹┖", groups = {Add.class, Update.class})
-    @ApiModelProperty("")
-    private Integer userId;
-
-    @NotNull(message = "鍔犲叆鏃堕棿涓嶈兘涓虹┖", groups = {Add.class, Update.class})
-    @ApiModelProperty("鍔犲叆鏃堕棿")
-    private Date createTime;
+    @ApiModelProperty("瀛﹀憳鍒楄〃")
+    private List<Integer> studentList;
 
     public static ClassesUser getEntityByForm(@NonNull ClassesUserForm form, ClassesUser entity) {
         if(entity == null) {
diff --git a/src/main/java/com/ycl/jxkg/domain/form/EditClassesUserForm.java b/src/main/java/com/ycl/jxkg/domain/form/EditClassesUserForm.java
new file mode 100644
index 0000000..d27669a
--- /dev/null
+++ b/src/main/java/com/ycl/jxkg/domain/form/EditClassesUserForm.java
@@ -0,0 +1,63 @@
+package com.ycl.jxkg.domain.form;
+
+import com.ycl.jxkg.domain.entity.ClassesUser;
+import com.ycl.jxkg.group.Add;
+import com.ycl.jxkg.group.Update;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.beans.BeanUtils;
+import org.springframework.lang.NonNull;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * 鐝骇涓庣敤鎴峰叧鑱旇〃琛ㄥ崟
+ *
+ * @author xp
+ * @since 2024-06-04
+ */
+@Data
+@ApiModel(value = "ClassesUser琛ㄥ崟", description = "鐝骇涓庣敤鎴峰叧鑱旇〃琛ㄥ崟")
+public class EditClassesUserForm {
+
+    @NotNull(message = "璇烽�夋嫨瑕佷慨鏀圭殑鏁版嵁", groups = {Update.class})
+    private Integer id;
+
+    @NotNull(message = "璇烽�夋嫨瀛﹀憳鐨勭彮绾�", groups = {Add.class, Update.class})
+    private Integer classesId;
+
+    @NotBlank(message = "璇峰~鍐欏鍛樼數璇�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鐢佃瘽")
+    private String phone;
+
+    @NotNull(message = "璇烽�夋嫨瀛﹀憳鎬у埆", groups = {Add.class, Update.class})
+    @ApiModelProperty("鎬у埆")
+    private Integer sex;
+
+    @NotNull(message = "璇峰~鍐欏鍛樺勾榫�", groups = {Add.class, Update.class})
+    @ApiModelProperty("骞撮緞")
+    private Integer age;
+
+    @NotBlank(message = "璇峰~鍐欏鍛樺鍚�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鐪熷疄濮撳悕")
+    private String realName;
+
+    @NotBlank(message = "璇峰~鍐欏鍛樼櫥褰曡处鍙�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鐧诲綍璐﹀彿")
+    private String account;
+
+    @ApiModelProperty("鐧诲綍瀵嗙爜")
+    private String password;
+
+    public static ClassesUser getEntityByForm(@NonNull EditClassesUserForm form, ClassesUser entity) {
+        if(entity == null) {
+          entity = new ClassesUser();
+        }
+        BeanUtils.copyProperties(form, entity);
+        return entity;
+    }
+
+}
diff --git a/src/main/java/com/ycl/jxkg/domain/vo/ClassesUserVO.java b/src/main/java/com/ycl/jxkg/domain/vo/ClassesUserVO.java
index a9a63f0..cfdb39e 100644
--- a/src/main/java/com/ycl/jxkg/domain/vo/ClassesUserVO.java
+++ b/src/main/java/com/ycl/jxkg/domain/vo/ClassesUserVO.java
@@ -20,12 +20,21 @@
 @Data
 public class ClassesUserVO extends AbsVo {
 
-    /**  */
+    /** 鐝骇ID */
     private Integer classesId;
 
-    /**  */
+    /** 鐢ㄦ埛ID */
     private Integer userId;
 
+    /** 鐪熷疄濮撳悕 */
+    private String realName;
+
+    /** 骞撮緞 */
+    private Integer sex;
+
+    /** 鐢佃瘽 */
+    private String phone;
+
     /** 鍔犲叆鏃堕棿 */
     private Date createTime;
 
diff --git a/src/main/java/com/ycl/jxkg/service/ClassesUserService.java b/src/main/java/com/ycl/jxkg/service/ClassesUserService.java
index 754ac19..2199aed 100644
--- a/src/main/java/com/ycl/jxkg/service/ClassesUserService.java
+++ b/src/main/java/com/ycl/jxkg/service/ClassesUserService.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ycl.jxkg.base.Result;
 import com.ycl.jxkg.domain.form.ClassesUserForm;
+import com.ycl.jxkg.domain.form.EditClassesUserForm;
 import com.ycl.jxkg.domain.query.ClassesUserQuery;
 import java.util.List;
 
@@ -20,7 +21,7 @@
      * @param form
      * @return
      */
-    Result add(ClassesUserForm form);
+    Result add(EditClassesUserForm form);
 
     /**
      * 淇敼
@@ -62,4 +63,12 @@
      * @return
      */
     Result all();
+
+    /**
+     * 缂栬緫瀛﹀憳淇℃伅
+     *
+     * @param form
+     * @return
+     */
+    Result edit(EditClassesUserForm form);
 }
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 639af0f..c13dc99 100644
--- a/src/main/java/com/ycl/jxkg/service/impl/ClassesUserServiceImpl.java
+++ b/src/main/java/com/ycl/jxkg/service/impl/ClassesUserServiceImpl.java
@@ -1,8 +1,16 @@
 package com.ycl.jxkg.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
 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.enums.RoleEnum;
+import com.ycl.jxkg.enums.UserStatusEnum;
 import com.ycl.jxkg.mapper.ClassesUserMapper;
+import com.ycl.jxkg.mapper.UserMapper;
+import com.ycl.jxkg.service.AuthenticationService;
 import com.ycl.jxkg.service.ClassesUserService;
 import com.ycl.jxkg.base.Result;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -13,9 +21,12 @@
 import lombok.RequiredArgsConstructor;
 import com.ycl.jxkg.utils.PageUtil;
 import org.springframework.beans.BeanUtils;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.Assert;
+import org.springframework.util.StringUtils;
 
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -29,37 +40,98 @@
 public class ClassesUserServiceImpl extends ServiceImpl<ClassesUserMapper, ClassesUser> implements ClassesUserService {
 
     private final ClassesUserMapper classesUserMapper;
+    private final AuthenticationService authenticationService;
+    private final UserMapper userMapper;
+
+    private final static String DEFAULT_PASSWORD = "202406";
 
     /**
      * 娣诲姞
+     *
      * @param form
      * @return
      */
     @Override
-    public Result add(ClassesUserForm form) {
-        ClassesUser entity = ClassesUserForm.getEntityByForm(form, null);
-        baseMapper.insert(entity);
+    @Transactional(rollbackFor = Exception.class)
+    public Result add(EditClassesUserForm form) {
+        Long count = new LambdaQueryChainWrapper<>(userMapper)
+                .eq(User::getUserName, form.getAccount())
+                .count();
+        if (count > 0) {
+            throw new RuntimeException("璇ョ櫥褰曡处鍙峰凡琚娇鐢�");
+        }
+        User user = new User();
+        user.setUserName(form.getPhone());
+        String password = StringUtils.hasText(form.getPassword()) ? form.getPassword() : DEFAULT_PASSWORD;
+        user.setPassword(authenticationService.pwdEncode(password));
+        user.setStatus(UserStatusEnum.Enable.getCode());
+        user.setRole(RoleEnum.STUDENT.getCode());
+        user.setAge(form.getAge());
+        user.setPhone(form.getPhone());
+        user.setRealName(form.getRealName());
+        user.setSex(form.getSex());
+        userMapper.insert(user);
+
+        ClassesUser classesUser = new ClassesUser();
+        classesUser.setClassesId(form.getClassesId());
+        classesUser.setUserId(user.getId());
+        baseMapper.insert(classesUser);
         return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result edit(EditClassesUserForm form) {
+        ClassesUser classesUser = baseMapper.selectById(form.getId());
+        if (Objects.isNull(classesUser)) {
+            throw new RuntimeException("瀛﹀憳鏁版嵁涓嶅瓨鍦�");
+        }
+        Long count = new LambdaQueryChainWrapper<>(userMapper)
+                .eq(User::getUserName, form.getAccount())
+                .ne(User::getId, classesUser.getUserId())
+                .count();
+        if (count > 0) {
+            throw new RuntimeException("璇ョ櫥褰曡处鍙峰凡琚娇鐢�");
+        }
+        User user = userMapper.selectById(classesUser.getUserId());
+        if (Objects.isNull(user)) {
+            throw new RuntimeException("璇ュ鐢熻处鍙蜂笉瀛樺湪鎴栬鍒犻櫎");
+        }
+        BeanUtils.copyProperties(form, classesUser);
+        baseMapper.updateById(classesUser);
+
+        BeanUtils.copyProperties(classesUser, user);
+        userMapper.updateById(user);
+        return Result.ok("淇敼鎴愬姛");
     }
 
     /**
      * 淇敼
+     *
      * @param form
      * @return
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Result update(ClassesUserForm form) {
-        ClassesUser entity = baseMapper.selectById(form.getId());
-
-        // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊
-        Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
-        BeanUtils.copyProperties(form, entity);
-        baseMapper.updateById(entity);
+        // 鍏堝垹闄や箣鍓嶇殑
+        new LambdaUpdateChainWrapper<>(baseMapper)
+                .eq(ClassesUser::getClassesId, form.getId())
+                .remove();
+        // 鍐嶆柊澧�
+        List<ClassesUser> classesUserList = form.getStudentList().stream().map(item -> {
+            ClassesUser classesUser = new ClassesUser();
+            classesUser.setClassesId(form.getId());
+            classesUser.setUserId(item);
+            return classesUser;
+        }).collect(Collectors.toList());
+        this.saveBatch(classesUserList);
         return Result.ok("淇敼鎴愬姛");
     }
 
     /**
      * 鎵归噺鍒犻櫎
+     *
      * @param ids
      * @return
      */
@@ -71,6 +143,7 @@
 
     /**
      * id鍒犻櫎
+     *
      * @param id
      * @return
      */
@@ -82,6 +155,7 @@
 
     /**
      * 鍒嗛〉鏌ヨ
+     *
      * @param query
      * @return
      */
@@ -94,6 +168,7 @@
 
     /**
      * 鏍规嵁id鏌ユ壘
+     *
      * @param id
      * @return
      */
@@ -106,6 +181,7 @@
 
     /**
      * 鍒楄〃
+     *
      * @return
      */
     @Override
diff --git a/src/main/resources/mapper/ClassesUserMapper.xml b/src/main/resources/mapper/ClassesUserMapper.xml
index 87fc1f8..ab42074 100644
--- a/src/main/resources/mapper/ClassesUserMapper.xml
+++ b/src/main/resources/mapper/ClassesUserMapper.xml
@@ -4,40 +4,37 @@
 
     <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
     <resultMap id="BaseResultMap" type="com.ycl.jxkg.domain.vo.ClassesUserVO">
-        <result column="classes_id" property="classesId" />
-        <result column="user_id" property="userId" />
-        <result column="create_time" property="createTime" />
+        <result column="classes_id" property="classesId"/>
+        <result column="user_id" property="userId"/>
+        <result column="real_name" property="realName"/>
+        <result column="sex" property="sex"/>
+        <result column="phone" property="phone"/>
+        <result column="create_time" property="createTime"/>
     </resultMap>
 
 
-
-
-
-
-
     <select id="getById" resultMap="BaseResultMap">
-        SELECT
-            TCU.classes_id,
-            TCU.user_id,
-            TCU.create_time,
-            TCU.id
-        FROM
-            t_classes_user TCU
-        WHERE
-            TCU.id = #{id} AND TCU.deleted = 0
+        SELECT TCU.classes_id,
+               TCU.user_id,
+               TCU.create_time,
+               TCU.id
+        FROM t_classes_user TCU
+        WHERE TCU.id = #{id}
+          AND TCU.deleted = 0
     </select>
 
 
     <select id="getPage" resultMap="BaseResultMap">
-        SELECT
-            TCU.classes_id,
-            TCU.user_id,
-            TCU.create_time,
-            TCU.id
-        FROM
-            t_classes_user TCU
-        WHERE
-            TCU.deleted = 0
+        SELECT TCU.classes_id,
+               TCU.user_id,
+               TCU.create_time,
+               TCU.id,
+               TU.real_name,
+               TU.sex,
+               TU.phone
+        FROM t_classes_user TCU
+                 LEFT JOIN t_user TU ON TU.id = TCU.user_id
+        WHERE TCU.deleted = 0
     </select>
 
 </mapper>

--
Gitblit v1.8.0