Pārlūkot izejas kodu

登录、用户管理

tianyabing 2 gadi atpakaļ
vecāks
revīzija
b0d60cf83f

+ 28 - 0
src/main/java/com/sky/ioc/controller/user/LoginController.java

@@ -0,0 +1,28 @@
+package com.sky.ioc.controller.user;
+
+import com.alibaba.fastjson.JSONObject;
+import com.sky.ioc.entity.dto.LoginParam;
+import com.sky.ioc.service.user.UserService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+@Api(tags = "系统--登录")
+@Slf4j
+@RestController
+public class LoginController {
+
+    @Autowired
+    private UserService userService;
+
+    @ApiOperation("系统登录")
+    @PostMapping("/login")
+    public JSONObject login(@RequestBody LoginParam loginParam) {
+        return userService.login(loginParam.getUsername(), loginParam.getPassword());
+    }
+
+}

+ 86 - 0
src/main/java/com/sky/ioc/controller/user/UserController.java

@@ -0,0 +1,86 @@
+package com.sky.ioc.controller.user;
+
+import com.sky.ioc.entity.domain.system.Users;
+import com.sky.ioc.service.user.UserService;
+import com.sky.ioc.tool.ReturnMsg;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+
+@Api(tags = "系统--登录")
+@Slf4j
+@RestController
+@RequestMapping("/users")
+public class UserController {
+
+    @Autowired
+    private UserService userService;
+
+    @ApiOperation("添加用户")
+    @PostMapping("/user")
+    public ReturnMsg addUser(Users users) {
+        return userService.addUser(users);
+    }
+
+    @ApiOperation("更新用户详情")
+    @PutMapping("/user")
+    public ReturnMsg updUser(Users users) {
+        return userService.updUser(users);
+    }
+
+    @ApiOperation("查看用户详情")
+    @GetMapping("/user")
+    public ReturnMsg getUserDetail(@RequestParam String id) {
+        return userService.getUserDetail(id);
+    }
+
+    @ApiOperation("删除用户")
+    @DeleteMapping("/user")
+    public ReturnMsg delUser(@RequestParam String id) {
+        return userService.deleteUserById(id);
+    }
+
+    @ApiOperation("批量删除用户")
+    @DeleteMapping("/bacth_delete_user")
+    public ReturnMsg batchDelUser(@RequestParam String user_id) {
+        return userService.deleteUserById(user_id);
+    }
+
+    @ApiOperation("获取用户列表")
+    @GetMapping("/user_list")
+    public ReturnMsg getUserList(@RequestParam(required = false) String status, @RequestParam(required = false) String filter,
+                                 @RequestParam(required = false) String page, @RequestParam(required = false) String page_size) {
+        return userService.getUserList(status, filter, page, page_size);
+    }
+
+    @ApiOperation("修改用户状态")
+    @PutMapping("/user_status")
+    public ReturnMsg modifyStatus(@RequestParam String id, @RequestParam String status) {
+        return userService.updateUserStatus(id, status);
+    }
+
+    @ApiOperation("批量修改用户状态")
+    @PutMapping("/batch_modify_user_status")
+    public ReturnMsg batchModifyStatus(@RequestParam String users_id , @RequestParam String status) {
+        return userService.batchModifyStatus(users_id , status);
+    }
+
+    @ApiOperation("批量修改用户角色")
+    @PutMapping("/batch_modify_user_role")
+    public ReturnMsg batchModifyUserRole(@RequestParam String users_id , @RequestParam String role_id) {
+        return userService.batchModifyUserRole(users_id , role_id);
+    }
+
+    @ApiOperation("导出用户数据")
+    @GetMapping("/export_data")
+    public void exportData(HttpServletResponse response) {
+        userService.exportData(response);
+    }
+
+
+
+}

+ 21 - 0
src/main/java/com/sky/ioc/entity/domain/system/Users.java

@@ -1,5 +1,7 @@
 package com.sky.ioc.entity.domain.system;
 
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import lombok.Data;
@@ -8,33 +10,52 @@ import lombok.Data;
 public class Users {
 
     @TableId(type = IdType.AUTO)
+    @ExcelProperty("ID")
     private Integer id;
     /** 用户名 */
+    @ExcelProperty("用户名")
     private String userName;
     /** 密码 */
+    @ExcelIgnore
     private String password;
     /** 头像 */
+    @ExcelIgnore
     private String photograph;
     /** 昵称 */
+    @ExcelProperty("昵称")
     private String name;
     /** 手机号 */
+    @ExcelProperty("手机号")
     private String phone;
     /** 邮箱 */
+    @ExcelProperty("邮箱")
     private String email;
     /** 单位ID */
+    @ExcelIgnore
     private String company;
     /** 部门ID */
+    @ExcelIgnore
     private String department;
     /** 在职状态 0-在职 */
+    @ExcelIgnore
     private String onJobStatus;
+    @ExcelIgnore
     private String duty;
     /** 账户状态 0-在职 */
+    @ExcelIgnore
     private String accountStatus;
+    @ExcelIgnore
     private String nationality;
     /** 创建时间 */
+    @ExcelIgnore
     private String registerTime;
     /**
      * 常用功能ID,例如 1,5,6
      */
+    @ExcelIgnore
     private  String commonMenus;
+    @ExcelIgnore
+    private String role;
+    @ExcelIgnore
+    private String permission;
 }

+ 12 - 0
src/main/java/com/sky/ioc/entity/dto/LoginParam.java

@@ -0,0 +1,12 @@
+package com.sky.ioc.entity.dto;
+
+import lombok.Data;
+
+@Data
+public class LoginParam {
+
+    private String username;
+    private String password;
+    private String phone;
+    private String code;
+}

+ 39 - 0
src/main/java/com/sky/ioc/entity/dto/LoginUserVo.java

@@ -0,0 +1,39 @@
+package com.sky.ioc.entity.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class LoginUserVo {
+
+    private long id;
+    /** 用户名 */
+    private String userName;
+    /** 头像 */
+    private String photograph;
+    /** 昵称 */
+    private String name;
+    /** 手机号 */
+    private String phone;
+    /** 邮箱 */
+    private String email;
+    /** 单位ID */
+    private String company;
+    /** 部门ID */
+    private String department;
+    /** 在职状态 0-在职 */
+    private String onJobStatus;
+    private String duty;
+    /** 账户状态 0-在职 */
+    private String accountStatus;
+    private String nationality;
+    /** 创建时间 */
+    private String registerTime;
+    /**
+     * 常用功能ID,例如 1,5,6
+     */
+    private  String commonMenus;
+}

+ 14 - 0
src/main/java/com/sky/ioc/mapper/user/UserMapper.java

@@ -0,0 +1,14 @@
+package com.sky.ioc.mapper.user;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sky.ioc.entity.domain.system.Users;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+@Mapper
+public interface UserMapper extends BaseMapper<Users> {
+
+    int batchUpdateStatus(@Param("ids") String[] ids, @Param("status") String status);
+
+    int batchModifyUserRole(@Param("userIds") String[] userIds, @Param("roleId") String roleId);
+}

+ 32 - 0
src/main/java/com/sky/ioc/service/user/UserService.java

@@ -0,0 +1,32 @@
+package com.sky.ioc.service.user;
+
+import com.alibaba.fastjson.JSONObject;
+import com.sky.ioc.entity.domain.system.Users;
+import com.sky.ioc.tool.ReturnMsg;
+
+import javax.servlet.http.HttpServletResponse;
+
+public interface UserService {
+
+    JSONObject login(String username, String password);
+
+    ReturnMsg addUser(Users users);
+
+    ReturnMsg getUserDetail(String id);
+
+    ReturnMsg updUser(Users users);
+
+    ReturnMsg deleteUserById(String id);
+
+    ReturnMsg batchDeleteUserById(String ids);
+    ReturnMsg getUserList(String status, String filter, String page, String pageSize);
+
+    ReturnMsg updateUserStatus(String id, String status);
+
+    ReturnMsg batchModifyStatus(String ids, String status);
+
+    ReturnMsg batchModifyUserRole(String usersId, String roleId);
+
+    void exportData(HttpServletResponse response);
+
+}

+ 169 - 0
src/main/java/com/sky/ioc/service/user/impl/UserServiceImpl.java

@@ -0,0 +1,169 @@
+package com.sky.ioc.service.user.impl;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.sky.ioc.entity.domain.system.Users;
+import com.sky.ioc.entity.dto.LoginUserVo;
+import com.sky.ioc.mapper.user.UserMapper;
+import com.sky.ioc.service.user.UserService;
+import com.sky.ioc.tool.JwtUtil;
+import com.sky.ioc.tool.Pbkdf2Sha256Digest;
+import com.sky.ioc.tool.RedisUtil;
+import com.sky.ioc.tool.ReturnMsg;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+
+@Service
+public class UserServiceImpl implements UserService {
+
+    @Autowired
+    private UserMapper userMapper;
+
+    @Autowired
+    private RedisUtil redisUtil;
+
+    @Override
+    public JSONObject login(String username, String password) {
+        Users users = userMapper.selectOne(new LambdaQueryWrapper<Users>().eq(Users::getUserName, username));
+        if (Objects.isNull(users)){
+            throw new RuntimeException("用户名或密码错误");
+        }
+        boolean verification = Pbkdf2Sha256Digest.verification(password, users.getPassword());
+        if (!verification){
+            throw new RuntimeException("用户名或密码错误");
+        }
+
+        // 认证成功
+        LoginUserVo loginUser = new LoginUserVo();
+        BeanUtils.copyProperties(users, loginUser);
+
+        String token = JwtUtil.genJwtToken(users);
+
+        // 将用户信息存入redis
+        redisUtil.put("login:"+loginUser.getUserName(), loginUser);
+
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("code", 0);
+        jsonObject.put("data", token);
+        jsonObject.put("message", loginUser);
+        return jsonObject;
+    }
+
+    @Override
+    public ReturnMsg addUser(Users users) {
+        Users u = userMapper.selectOne(new LambdaQueryWrapper<Users>().eq(Users::getUserName, users.getUserName()));
+        if (!Objects.isNull(u)){
+            throw new RuntimeException("用户名已存在");
+        }
+        int insert = userMapper.insert(users);
+        if (insert<1) {
+            throw  new RuntimeException("添加失败");
+        }
+        return ReturnMsg.ok();
+    }
+
+    @Override
+    public ReturnMsg getUserDetail(String id) {
+        Users users = userMapper.selectOne(new LambdaQueryWrapper<Users>().eq(Users::getId, id));
+        return ReturnMsg.ok(users);
+    }
+
+    @Override
+    public ReturnMsg updUser(Users users) {
+        int i = userMapper.updateById(users);
+        if (i<1) {
+            throw  new RuntimeException("修改失败");
+        }
+        return ReturnMsg.ok();
+    }
+
+    @Override
+    public ReturnMsg deleteUserById(String id) {
+        int i = userMapper.deleteById(id);
+        return ReturnMsg.ok();
+    }
+
+    @Override
+    public ReturnMsg batchDeleteUserById(String ids) {
+        userMapper.deleteBatchIds(Arrays.asList(StringUtils.split(ids, ",")));
+        return ReturnMsg.ok();
+    }
+
+    @Override
+    public ReturnMsg getUserList(String status, String filter, String page, String pageSize) {
+        LambdaQueryWrapper<Users> queryWrapper = new LambdaQueryWrapper<>();
+        if (StringUtils.isNotBlank(status)) {
+            queryWrapper.eq(Users::getAccountStatus, status);
+        }
+        if (StringUtils.isNotBlank(filter)) {
+            queryWrapper.like(Users::getUserName, "%"+filter+"%")
+                    .or().like(Users::getCompany, "%"+filter+"%")
+                    .or().like(Users::getDepartment, "%"+filter+"%");
+        }
+        List<Users> users = new ArrayList<>();
+        long total = 0;
+        if (StringUtils.isNoneBlank(page, pageSize)) {
+            PageHelper.startPage(Integer.parseInt(page), Integer.parseInt(pageSize));
+            PageInfo<Users> pageInfo = PageInfo.of(userMapper.selectList(queryWrapper));
+            users = pageInfo.getList();
+            total = pageInfo.getTotal();
+        } else {
+            users = userMapper.selectList(queryWrapper);
+            total = users.size();
+        }
+        ReturnMsg<List<Users>> ok = ReturnMsg.ok(users);
+        ok.setTotal(total);
+        return ok;
+    }
+
+    @Override
+    public ReturnMsg updateUserStatus(String id, String status) {
+        Users users = userMapper.selectById(id);
+        if (users==null) {
+            throw new RuntimeException("用户不存在");
+        }
+        users.setAccountStatus(status);
+        int i = userMapper.updateById(users);
+        return ReturnMsg.ok();
+    }
+
+    @Override
+    public ReturnMsg batchModifyStatus(String ids, String status) {
+        String[] split = StringUtils.split(ids, ",");
+        userMapper.batchUpdateStatus(split, status);
+        return ReturnMsg.ok();
+    }
+
+    @Override
+    public ReturnMsg batchModifyUserRole(String usersId, String roleId) {
+        String[] userIds = StringUtils.split(usersId, ",");
+        userMapper.batchModifyUserRole(userIds, roleId);
+        return ReturnMsg.ok();
+    }
+
+    @Override
+    public void exportData(HttpServletResponse response) {
+        List<Users> users = userMapper.selectList(new LambdaQueryWrapper<>());
+        try {
+            ServletOutputStream outputStream = response.getOutputStream();
+            EasyExcel.write(outputStream, Users.class).autoCloseStream(true).sheet().doWrite(users);
+            response.setContentType("application/vnd.ms-excel");
+            response.setCharacterEncoding("utf8");
+            response.setHeader("Content-disposition", "attachment;filename=" + "用户信息—"+System.currentTimeMillis()+".xlsx" );
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+}

+ 2 - 0
src/main/java/com/sky/ioc/tool/ReturnMsg.java

@@ -19,6 +19,8 @@ public class ReturnMsg<T> {
 
     private T data;
 
+    private Number total;
+
     public static <T> ReturnMsg<T> ok()
     {
         return restResult(null, Constant.MSG_CODE.SUCCESS, "操作成功");

+ 16 - 0
src/main/resources/mapper/UserMapper.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.sky.ioc.mapper.user.UserMapper">
+    <update id="batchUpdateStatus">
+        update users set account_status = #{status} where id in
+            <foreach collection="ids" item="item" separator="," open="(" close=")">
+                #{item}
+            </foreach>
+    </update>
+    <update id="batchModifyUserRole">
+        update users set role = #{roleId} where id in
+            <foreach collection="userIds" item="item" separator="," open="(" close=")">
+                #{item}
+            </foreach>
+    </update>
+</mapper>