Pārlūkot izejas kodu

用户登录认证,用户信息修改等接口验证

xucaiqin 2 gadi atpakaļ
vecāks
revīzija
3b264b201e
14 mainītis faili ar 187 papildinājumiem un 23 dzēšanām
  1. 4 1
      iot-framework/iot-common/src/main/java/com/middle/platform/common/constant/Global.java
  2. 2 2
      iot-framework/iot-starter-mybatis/src/main/java/com/middle/platform/mybatis/core/dataobject/BaseDO.java
  3. 20 0
      iot-framework/iot-starter-web/src/main/java/com/middle/platform/web/config/GlobalExceptionHandler.java
  4. 1 1
      iot-module/iot-module-auth/iot-module-auth-biz/src/main/java/com/middle/platform/auth/biz/controller/AuthController.java
  5. 4 0
      iot-module/iot-module-auth/iot-module-auth-biz/src/main/java/com/middle/platform/auth/biz/service/AuthService.java
  6. 2 1
      iot-module/iot-module-system/iot-module-system-api/src/main/java/com/middle/platform/system/api/enums/DictType.java
  7. 1 0
      iot-module/iot-module-system/iot-module-system-api/src/main/java/com/middle/platform/system/api/pojo/UserDto.java
  8. 26 8
      iot-module/iot-module-system/iot-module-system-biz/src/main/java/com/middle/platform/system/biz/controller/UserController.java
  9. 1 4
      iot-module/iot-module-system/iot-module-system-biz/src/main/java/com/middle/platform/system/biz/pojo/req/SysUserPara.java
  10. 50 0
      iot-module/iot-module-system/iot-module-system-biz/src/main/java/com/middle/platform/system/biz/pojo/req/SysUserUpdPara.java
  11. 1 0
      iot-module/iot-module-system/iot-module-system-biz/src/main/java/com/middle/platform/system/biz/pojo/res/SysUserVo.java
  12. 13 0
      iot-module/iot-module-system/iot-module-system-biz/src/main/java/com/middle/platform/system/biz/service/SysUserMenuService.java
  13. 61 5
      iot-module/iot-module-system/iot-module-system-biz/src/main/java/com/middle/platform/system/biz/service/SysUserService.java
  14. 1 1
      iot-module/iot-module-system/iot-module-system-biz/src/main/resources/mapper/SysUserMapper.xml

+ 4 - 1
iot-framework/iot-common/src/main/java/com/middle/platform/common/constant/Global.java

@@ -10,8 +10,11 @@ public interface Global {
 
     /*删除标记*/
     int DEL = 1;//删除
-
     int UN_DEL = 0;//正常
+    //用户启用停用
+    int USE = 1;//启用
+    int UN_USE = 0;//停用
 
     String UN_AUTH = "未登录,请先登录";
+
 }

+ 2 - 2
iot-framework/iot-starter-mybatis/src/main/java/com/middle/platform/mybatis/core/dataobject/BaseDO.java

@@ -39,7 +39,7 @@ public abstract class BaseDO implements Serializable {
     /**
      * 是否删除
      */
-    @TableLogic
-    private Boolean delFlag;
+    @TableLogic(delval = "1", value = "0")
+    private Integer delFlag;
 
 }

+ 20 - 0
iot-framework/iot-starter-web/src/main/java/com/middle/platform/web/config/GlobalExceptionHandler.java

@@ -5,6 +5,8 @@ import com.middle.platform.common.constant.Global;
 import com.middle.platform.common.exception.BusinessException;
 import com.middle.platform.common.exception.ResultCode;
 import com.middle.platform.common.utils.Result;
+import jakarta.validation.ConstraintViolation;
+import jakarta.validation.ConstraintViolationException;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.util.CollectionUtils;
@@ -15,6 +17,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * 全局异常
@@ -66,5 +69,22 @@ public class GlobalExceptionHandler {
         log.error("参数校验异常:{}", errMsg);
         return Result.failed(ResultCode.ERROR, errMsg);
     }
+    @ResponseBody
+    @ExceptionHandler(ConstraintViolationException.class)
+    public Result<Object> constraintViolationExceptionHandler(ConstraintViolationException ex) {
+        Set<ConstraintViolation<?>> constraintViolations = ex.getConstraintViolations();
+        StringBuilder sb = new StringBuilder();
+        if (!CollectionUtils.isEmpty(constraintViolations)) {
+            boolean first = true;
+            for (ConstraintViolation<?> constraintViolation : constraintViolations) {
+                if (!first) {
+                    sb.append(",");
+                }
+                sb.append(constraintViolation.getMessage());
+                first = false;
+            }
+        }
+        return Result.failed(ResultCode.ERROR, sb.toString());
+    }
 
 }

+ 1 - 1
iot-module/iot-module-auth/iot-module-auth-biz/src/main/java/com/middle/platform/auth/biz/controller/AuthController.java

@@ -40,7 +40,7 @@ public class AuthController {
      * @return
      */
     @PostMapping("/resetPass")
-    public Result<Object> resetPass(@RequestParam @NotNull(message = "用户id不能为空") Long id) {
+    public Result<Object> resetPass(@Validated @NotNull(message = "用户id不能为空") Long id) {
         authService.resetPassword(id);
         return Result.ok(true, "重置成功");
     }

+ 4 - 0
iot-module/iot-module-auth/iot-module-auth-biz/src/main/java/com/middle/platform/auth/biz/service/AuthService.java

@@ -2,6 +2,7 @@ package com.middle.platform.auth.biz.service;
 
 import cn.dev33.satoken.stp.StpUtil;
 import com.middle.platform.auth.biz.pojo.LoginPara;
+import com.middle.platform.common.constant.Global;
 import com.middle.platform.common.exception.BusinessException;
 import com.middle.platform.common.utils.HashUtil;
 import com.middle.platform.system.api.feign.UserApi;
@@ -34,6 +35,9 @@ public class AuthService {
         if (Objects.isNull(userDto)) {
             throw new BusinessException("账号不存在");
         }
+        if (Objects.equals(userDto.getStatus(), Global.UN_USE)) {
+            throw new BusinessException("账号已停用");
+        }
         if (HashUtil.argon2Match(loginPara.getPassword(), userDto.getPassword())) {
             StpUtil.login(userDto.getId());
             return true;

+ 2 - 1
iot-module/iot-module-system/iot-module-system-api/src/main/java/com/middle/platform/system/api/enums/DictType.java

@@ -10,5 +10,6 @@ public interface DictType {
     String REPORT_PROTOCOL_TYPE = "reportProtocolType";
     String VENDORS_TYPE = "vendorsType";
     String DATA_FORMAT_TYPE = "dataFormatType";
-    String AUTH_TYPE = "authType";
+    String AUTH_TYPE = "authType";//认证类型
+    String SEX_TYPE = "sex_type";//性别
 }

+ 1 - 0
iot-module/iot-module-system/iot-module-system-api/src/main/java/com/middle/platform/system/api/pojo/UserDto.java

@@ -18,4 +18,5 @@ public class UserDto implements Serializable {
     private Long id;
     private String username;
     private String password;
+    private Integer status;
 }

+ 26 - 8
iot-module/iot-module-system/iot-module-system-biz/src/main/java/com/middle/platform/system/biz/controller/UserController.java

@@ -4,14 +4,14 @@ import com.middle.platform.common.utils.PageRes;
 import com.middle.platform.common.utils.Result;
 import com.middle.platform.system.biz.pojo.req.SysUserPagePara;
 import com.middle.platform.system.biz.pojo.req.SysUserPara;
+import com.middle.platform.system.biz.pojo.req.SysUserUpdPara;
 import com.middle.platform.system.biz.pojo.res.SysUserVo;
 import com.middle.platform.system.biz.service.SysUserService;
 import jakarta.annotation.Resource;
+import jakarta.validation.constraints.NotNull;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.List;
-
 /**
  * @author xucaiqin
  * @date 2023-12-15 08:46:49
@@ -33,7 +33,7 @@ public class UserController {
      */
     @PostMapping("/save")
     public Result<Object> save(@RequestBody @Validated SysUserPara sysUserPara) {
-        return Result.ok(sysUserService.save(sysUserPara));
+        return Result.ok(sysUserService.save(sysUserPara), "保存成功");
     }
 
     /**
@@ -42,11 +42,29 @@ public class UserController {
      * @param basePara
      * @return
      */
-    @GetMapping("/list")
-    public Result<PageRes<SysUserVo>> list(SysUserPagePara basePara) {
-        List<SysUserVo> list = sysUserService.pageQuery(basePara);
-        return Result.ok(new PageRes<>(list));
+    @PostMapping("/list")
+    public Result<PageRes<SysUserVo>> list(@RequestBody SysUserPagePara basePara) {
+        return Result.ok(sysUserService.pageQuery(basePara), "查询成功");
     }
 
-
+    /**
+     * 删除用户
+     *
+     * @param id
+     * @return
+     */
+    @PostMapping("/remove/{id}")
+    public Result<Object> list(@Validated @PathVariable("id") @NotNull(message = "用户id不能为空") Long id) {
+        return Result.ok(sysUserService.remove(id), "删除成功");
+    }
+    /**
+     * 修改用户
+     *
+     * @param sysUserUpdPara
+     * @return
+     */
+    @PostMapping("/update")
+    public Result<Object> update(@RequestBody @Validated SysUserUpdPara sysUserUpdPara) {
+        return Result.ok(sysUserService.update(sysUserUpdPara), "修改成功");
+    }
 }

+ 1 - 4
iot-module/iot-module-system/iot-module-system-biz/src/main/java/com/middle/platform/system/biz/pojo/req/SysUserPara.java

@@ -1,7 +1,6 @@
 package com.middle.platform.system.biz.pojo.req;
 
 import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotEmpty;
 import jakarta.validation.constraints.NotNull;
 import lombok.Getter;
 import lombok.Setter;
@@ -17,6 +16,7 @@ import java.util.List;
 @Getter
 @Setter
 public class SysUserPara {
+    private Long id;
     /**
      * 姓名
      */
@@ -50,13 +50,10 @@ public class SysUserPara {
     /**
      * 备注
      */
-    @NotBlank(message = "备注不能为空")
     private String remark;
     /**
      * 权限
      */
-    @NotEmpty(message = "权限不能为空")
-    @NotNull(message = "权限不能为空")
     private List<Long> menu;
 
 }

+ 50 - 0
iot-module/iot-module-system/iot-module-system-biz/src/main/java/com/middle/platform/system/biz/pojo/req/SysUserUpdPara.java

@@ -0,0 +1,50 @@
+package com.middle.platform.system.biz.pojo.req;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 修改用户
+ *
+ * @author xucaiqin
+ * @date 2023-12-18 14:44:40
+ */
+@Getter
+@Setter
+public class SysUserUpdPara {
+    @NotNull(message = "id不能为空")
+    private Long id;
+    /**
+     * 姓名
+     */
+    private String name;
+
+    /**
+     * 性别0未知1男2女
+     */
+    private Integer sex;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+    /**
+     * 登录密码
+     */
+    private String password;
+
+    /**
+     * 备注
+     */
+    private String remark;
+    /**
+     * 权限
+     */
+    private List<Long> menu;
+
+}

+ 1 - 0
iot-module/iot-module-system/iot-module-system-biz/src/main/java/com/middle/platform/system/biz/pojo/res/SysUserVo.java

@@ -21,6 +21,7 @@ public class SysUserVo {
      * 性别0未知1男2女
      */
     private Integer sex;
+    private String sexLabel;
 
     /**
      * 联系电话

+ 13 - 0
iot-module/iot-module-system/iot-module-system-biz/src/main/java/com/middle/platform/system/biz/service/SysUserMenuService.java

@@ -1,5 +1,6 @@
 package com.middle.platform.system.biz.service;
 
+import com.middle.platform.common.constant.Global;
 import com.middle.platform.system.biz.entity.SysUserMenu;
 import com.middle.platform.system.biz.mapper.SysUserMenuMapper;
 import lombok.RequiredArgsConstructor;
@@ -31,4 +32,16 @@ public class SysUserMenuService {
             sysUserMenuMapper.insert(sysUserMenu);
         }
     }
+
+    /**
+     * 删除用户关联的菜单
+     *
+     * @param userId
+     */
+    public void removeMenu(Long userId) {
+        SysUserMenu sysUserMenu = new SysUserMenu();
+        sysUserMenu.setUserId(userId);
+        sysUserMenu.setDelFlag(Global.UN_DEL);
+        sysUserMenuMapper.deleteById(sysUserMenu);
+    }
 }

+ 61 - 5
iot-module/iot-module-system/iot-module-system-biz/src/main/java/com/middle/platform/system/biz/service/SysUserService.java

@@ -2,20 +2,28 @@ package com.middle.platform.system.biz.service;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.middle.platform.common.constant.Global;
 import com.middle.platform.common.exception.BusinessException;
 import com.middle.platform.common.utils.HashUtil;
+import com.middle.platform.common.utils.PageRes;
+import com.middle.platform.system.api.enums.DictType;
+import com.middle.platform.system.api.feign.DictApi;
+import com.middle.platform.system.api.pojo.SysUserFlag;
 import com.middle.platform.system.api.pojo.UserCache;
 import com.middle.platform.system.api.pojo.UserDto;
 import com.middle.platform.system.biz.entity.SysUser;
 import com.middle.platform.system.biz.mapper.SysUserMapper;
-import com.middle.platform.system.api.pojo.SysUserFlag;
 import com.middle.platform.system.biz.pojo.req.SysUserPagePara;
 import com.middle.platform.system.biz.pojo.req.SysUserPara;
+import com.middle.platform.system.biz.pojo.req.SysUserUpdPara;
 import com.middle.platform.system.biz.pojo.res.SysUserVo;
 import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 import java.util.List;
 import java.util.Objects;
@@ -31,6 +39,7 @@ public class SysUserService {
 
     private final SysUserMapper sysUserMapper;
     private final SysUserMenuService sysUserMenuService;
+    private final DictApi dictApi;
     @Value("${defaultPass:KW123!@}")
     private String defaultPass;
 
@@ -43,12 +52,14 @@ public class SysUserService {
         sysUser.setPhone(sysUserPara.getPhone());
         sysUser.setUsername(sysUserPara.getUsername());
         sysUser.setPassword(Optional.ofNullable(sysUserPara.getPassword()).map(HashUtil::argon2).orElseGet(() -> HashUtil.argon2(defaultPass)));
-        sysUser.setStatus(0);
+        sysUser.setStatus(Global.USE);
         sysUser.setRemark(sysUserPara.getRemark());
         sysUserMapper.insert(sysUser);
         //用户id主键
         Long id = sysUser.getId();
-        sysUserMenuService.save(id, sysUserPara.getMenu());
+        if (!CollectionUtils.isEmpty(sysUserPara.getMenu())) {
+            sysUserMenuService.save(id, sysUserPara.getMenu());
+        }
         return true;
     }
 
@@ -58,9 +69,14 @@ public class SysUserService {
      * @param basePara
      * @return 用户列表
      */
-    public List<SysUserVo> pageQuery(SysUserPagePara basePara) {
+    public PageRes<SysUserVo> pageQuery(SysUserPagePara basePara) {
         PageHelper.startPage(basePara.getPage(), basePara.getPageSize());
-        return sysUserMapper.pageList(basePara);
+        List<SysUserVo> sysUserVos = sysUserMapper.pageList(basePara);
+        PageInfo<SysUserVo> pageInfo = new PageInfo<>(sysUserVos);
+        sysUserVos.forEach(u -> Optional.ofNullable(dictApi.query(DictType.SEX_TYPE, String.valueOf(u.getSex()))).ifPresent(d -> {
+            u.setSexLabel(d.getLabel());
+        }));
+        return new PageRes<>(pageInfo, sysUserVos);
     }
 
     /**
@@ -141,4 +157,44 @@ public class SysUserService {
         sysUser.setPassword(HashUtil.argon2(defaultPass));
         sysUserMapper.updateById(sysUser);
     }
+
+    /**
+     * 删除用户
+     *
+     * @param id
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public Object remove(Long id) {
+        //删除用户
+        sysUserMapper.deleteById(id);
+        //删除用户关联菜单
+        sysUserMenuService.removeMenu(id);
+        return true;
+    }
+
+    /**
+     * 修改用户
+     *
+     * @param sysUserPara
+     * @return
+     */
+    public Object update(SysUserUpdPara sysUserPara) {
+        SysUser sysUser = checkUser(sysUserPara.getId());
+        sysUser.setName(sysUserPara.getName());
+        sysUser.setSex(sysUserPara.getSex());
+        sysUser.setPhone(sysUserPara.getPhone());
+        if(StringUtils.isNotBlank(sysUserPara.getPassword())){
+            sysUser.setPassword(Optional.of(sysUserPara.getPassword()).map(HashUtil::argon2).orElseGet(() -> HashUtil.argon2(defaultPass)));
+        }
+        sysUser.setStatus(Global.USE);
+        sysUser.setRemark(sysUserPara.getRemark());
+        sysUserMapper.updateById(sysUser);
+        //用户id主键
+        Long id = sysUser.getId();
+        if (!CollectionUtils.isEmpty(sysUserPara.getMenu())) {
+            sysUserMenuService.save(id, sysUserPara.getMenu());
+        }
+        return true;
+    }
 }

+ 1 - 1
iot-module/iot-module-system/iot-module-system-biz/src/main/resources/mapper/SysUserMapper.xml

@@ -37,7 +37,7 @@
   </select>
 
   <select id="queryOne" resultType="com.middle.platform.system.api.pojo.UserDto">
-      select su.id, su.username, su.password
+      select su.id, su.username, su.password, su.status
       from sys_user su
       <where>
           <if test="username != null and username != ''">