From 03ac6f66125fe2524d90ec6606629d5bff287153 Mon Sep 17 00:00:00 2001
From: liu <liujiatong112@163.com>
Date: Mon, 15 Jan 2024 17:51:59 +0800
Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=AE=A1=E7=90=86=E4=BB=A3?=
 =?UTF-8?q?=E7=A0=81=E6=8F=90=E4=BA=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../manage/controller/system/UserManager.java | 74 +++++++++++++++++++
 .../main/java/com/supervision/model/User.java |  3 +
 .../src/main/resources/mapper/UserMapper.xml  | 24 +++---
 .../src/main/resources/sqlScript/todo.sql     |  3 +
 4 files changed, 93 insertions(+), 11 deletions(-)
 create mode 100644 virtual-patient-manage/src/main/java/com/supervision/manage/controller/system/UserManager.java
 create mode 100644 virtual-patient-web/src/main/resources/sqlScript/todo.sql

diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/controller/system/UserManager.java b/virtual-patient-manage/src/main/java/com/supervision/manage/controller/system/UserManager.java
new file mode 100644
index 00000000..2565671c
--- /dev/null
+++ b/virtual-patient-manage/src/main/java/com/supervision/manage/controller/system/UserManager.java
@@ -0,0 +1,74 @@
+package com.supervision.manage.controller.system;
+
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.supervision.exception.BusinessException;
+import com.supervision.model.User;
+import com.supervision.service.UserService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Optional;
+
+@Api(tags = "用户管理")
+@RestController
+@RequestMapping("userManage")
+@RequiredArgsConstructor
+public class UserManager {
+
+    private final UserService userService;
+
+    @ApiOperation("查询用户列表")
+    @GetMapping("queryUserPage")
+    public IPage<User> queryUserPage(String userName, Integer roleCode, Integer pageNum, Integer pageSize) {
+        return userService.lambdaQuery().like(StrUtil.isNotBlank(userName), User::getName, userName)
+                .eq(ObjectUtil.isNotEmpty(roleCode), User::getRoleCode, roleCode).page(new Page<>(pageNum, pageSize));
+    }
+
+    @ApiOperation("保存用户")
+    @PostMapping("saveUser")
+    public void saveUser(@RequestBody User user) {
+        Assert.notBlank(user.getAccount(), "用户账户不能为空");
+        Assert.notBlank(user.getName(), "用户名不能为空");
+        Assert.notBlank(user.getPassword(), "用户密码不能为空");
+        Assert.notEmpty(user.getRoleCode(), "用户角色不能为空");
+        if (0 > userService.lambdaQuery().eq(User::getAccount, user.getAccount()).count()) {
+            throw new BusinessException("账户名已存在");
+        }
+        userService.save(user);
+    }
+
+    @ApiOperation("更新用户")
+    @PostMapping("updateUser")
+    public void updateUser(@RequestBody User user) {
+        Assert.notBlank(user.getId(), "ID不能为空");
+        Assert.notBlank(user.getAccount(), "用户账户不能为空");
+        Assert.notBlank(user.getName(), "用户名不能为空");
+        Assert.notBlank(user.getPassword(), "用户密码不能为空");
+        Assert.notEmpty(user.getRoleCode(), "用户角色不能为空");
+        // 查询旧的
+        User old = Optional.ofNullable(userService.getById(user.getId())).orElseThrow(() -> new BusinessException("用户不存在"));
+        if (!StrUtil.equals(old.getAccount(), user.getAccount())) {
+            throw new BusinessException("账号不允许更改");
+        }
+        userService.updateById(user);
+    }
+
+    @ApiOperation("停用用户")
+    @GetMapping("deactivateUser")
+    public User deactivateUser(String id) {
+        User old = Optional.ofNullable(userService.getById(id)).orElseThrow(() -> new BusinessException("用户不存在"));
+        if (old.getStatus() == 0) {
+            userService.lambdaUpdate().set(User::getStatus, 1).eq(User::getId, id).update();
+        } else {
+            userService.lambdaUpdate().set(User::getStatus, 0).eq(User::getId, id).update();
+        }
+        return userService.getById(id);
+
+    }
+}
diff --git a/virtual-patient-model/src/main/java/com/supervision/model/User.java b/virtual-patient-model/src/main/java/com/supervision/model/User.java
index a6abfa36..4c6ede02 100644
--- a/virtual-patient-model/src/main/java/com/supervision/model/User.java
+++ b/virtual-patient-model/src/main/java/com/supervision/model/User.java
@@ -49,6 +49,9 @@ public class User implements Serializable {
     @ApiModelProperty("用户角色编码,0管理员 1普通用户")
     private String roleCode;
 
+    @ApiModelProperty("账号状态 0正常 1停用")
+    private Integer status;
+
     @ApiModelProperty("最近登录时间")
     private LocalDateTime recentLoginTime;
 
diff --git a/virtual-patient-model/src/main/resources/mapper/UserMapper.xml b/virtual-patient-model/src/main/resources/mapper/UserMapper.xml
index 3ea70146..46babaf9 100644
--- a/virtual-patient-model/src/main/resources/mapper/UserMapper.xml
+++ b/virtual-patient-model/src/main/resources/mapper/UserMapper.xml
@@ -5,20 +5,22 @@
 <mapper namespace="com.supervision.mapper.UserMapper">
 
     <resultMap id="BaseResultMap" type="com.supervision.model.User">
-            <id property="id" column="id" jdbcType="VARCHAR"/>
-            <result property="account" column="account" jdbcType="VARCHAR"/>
-            <result property="name" column="name" jdbcType="VARCHAR"/>
-            <result property="password" column="password" jdbcType="VARCHAR"/>
-            <result property="roleCode" column="role_code" jdbcType="VARCHAR"/>
-            <result property="recentLoginTime" column="recent_login_time" jdbcType="TIMESTAMP"/>
-            <result property="createUserId" column="create_user_id" jdbcType="VARCHAR"/>
-            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
-            <result property="updateUserId" column="update_user_id" jdbcType="VARCHAR"/>
-            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+        <id property="id" column="id" jdbcType="VARCHAR"/>
+        <result property="account" column="account" jdbcType="VARCHAR"/>
+        <result property="name" column="name" jdbcType="VARCHAR"/>
+        <result property="password" column="password" jdbcType="VARCHAR"/>
+        <result property="roleCode" column="role_code" jdbcType="VARCHAR"/>
+        <result property="status" column="status" jdbcType="INTEGER"/>
+        <result property="recentLoginTime" column="recent_login_time" jdbcType="TIMESTAMP"/>
+        <result property="createUserId" column="create_user_id" jdbcType="VARCHAR"/>
+        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+        <result property="updateUserId" column="update_user_id" jdbcType="VARCHAR"/>
+        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
     </resultMap>
 
     <sql id="Base_Column_List">
-        id,account,name,
+        id
+        ,account,name,
         password,role_code,create_user_id,
         create_time,update_user_id,update_time
     </sql>
diff --git a/virtual-patient-web/src/main/resources/sqlScript/todo.sql b/virtual-patient-web/src/main/resources/sqlScript/todo.sql
new file mode 100644
index 00000000..fd406d9a
--- /dev/null
+++ b/virtual-patient-web/src/main/resources/sqlScript/todo.sql
@@ -0,0 +1,3 @@
+-- 2.0之后的SQL变更
+alter table vp_user
+    add status int default 0 null comment '账号状态 0正常 1停用' after role_code;
\ No newline at end of file