1
0
Kaynağa Gözat

feat:用户管理+抽象对象

wangzaijun 7 ay önce
ebeveyn
işleme
59327ed45d
27 değiştirilmiş dosya ile 871 ekleme ve 130 silme
  1. 4 3
      service-base/src/main/java/com/simuwang/base/common/conts/Constants.java
  2. 9 0
      service-base/src/main/java/com/simuwang/base/common/support/BaseCmd.java
  3. 11 3
      service-base/src/main/java/com/simuwang/base/pojo/dos/BaseEntity.java
  4. 21 0
      service-base/src/main/java/com/simuwang/base/common/support/BaseIdCmd.java
  5. 30 0
      service-base/src/main/java/com/simuwang/base/common/support/BaseIdStatusCmd.java
  6. 45 0
      service-base/src/main/java/com/simuwang/base/common/support/BaseQuery.java
  7. 100 0
      service-base/src/main/java/com/simuwang/base/common/support/BaseService.java
  8. 28 0
      service-base/src/main/java/com/simuwang/base/common/support/BaseVO.java
  9. 16 0
      service-base/src/main/java/com/simuwang/base/common/support/DTO.java
  10. 102 0
      service-base/src/main/java/com/simuwang/base/common/support/MybatisPage.java
  11. 54 0
      service-base/src/main/java/com/simuwang/base/common/support/PageQuery.java
  12. 3 0
      service-base/src/main/java/com/simuwang/base/common/support/package-info.java
  13. 1 1
      service-base/src/main/java/com/simuwang/base/utils/TreeUtil.java
  14. 26 1
      service-base/src/main/java/com/simuwang/base/pojo/dos/SysMenuDO.java
  15. 17 1
      service-base/src/main/java/com/simuwang/base/pojo/dos/SysRoleDO.java
  16. 21 1
      service-base/src/main/java/com/simuwang/base/pojo/dos/SysUserDO.java
  17. 22 0
      service-base/src/main/java/com/simuwang/base/pojo/dto/command/DeleteByIdCmd.java
  18. 22 0
      service-base/src/main/java/com/simuwang/base/pojo/dto/command/UpdateStatusCmd.java
  19. 12 0
      service-base/src/main/java/com/simuwang/base/pojo/dto/query/UserPageQuery.java
  20. 69 35
      service-base/src/main/java/com/simuwang/base/pojo/vo/SysMenuVO.java
  21. 47 39
      service-base/src/main/java/com/simuwang/base/pojo/vo/SysRoleVO.java
  22. 51 44
      service-base/src/main/java/com/simuwang/base/pojo/vo/SysUserVO.java
  23. 55 0
      service-manage/src/main/java/com/simuwang/manage/api/system/SysUserController.java
  24. 24 0
      service-manage/src/main/java/com/simuwang/manage/dto/UserInfoVO.java
  25. 7 2
      service-manage/src/main/java/com/simuwang/manage/service/SystemService.java
  26. 61 0
      service-manage/src/main/java/com/simuwang/manage/service/impl/system/SysUserServiceImpl.java
  27. 13 0
      service-manage/src/main/java/com/simuwang/manage/service/system/SysUserService.java

+ 4 - 3
service-base/src/main/java/com/simuwang/base/common/conts/Constants.java

@@ -3,11 +3,12 @@ package com.simuwang.base.common.conts;
 
 /**
  * 通用常量信息
- * 
+ *
  * @author ruoyi
  */
-public class Constants
-{
+public class Constants {
+    public static final long DEFAULT_SERIAL_ID = 999L;
+
     /**
      * UTF-8 字符集
      */

+ 9 - 0
service-base/src/main/java/com/simuwang/base/common/support/BaseCmd.java

@@ -0,0 +1,9 @@
+package com.simuwang.base.common.support;
+
+/**
+ * @author wangzaijun
+ * @date 2024/9/13 13:49
+ * @description 抽象的新增或删除接口body参数
+ */
+public abstract class BaseCmd extends DTO {
+}

+ 11 - 3
service-base/src/main/java/com/simuwang/base/pojo/dos/BaseEntity.java

@@ -1,7 +1,8 @@
-package com.simuwang.base.pojo.dos;
+package com.simuwang.base.common.support;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.simuwang.base.common.conts.Constants;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -16,9 +17,9 @@ import java.util.Date;
  */
 @Setter
 @Getter
-public class BaseEntity implements Serializable {
+public abstract class BaseEntity<VO extends BaseVO> implements Serializable {
     @Serial
-    private static final long serialVersionUID = 999;
+    private static final long serialVersionUID = Constants.DEFAULT_SERIAL_ID;
     /**
      * 创建人
      */
@@ -45,4 +46,11 @@ public class BaseEntity implements Serializable {
     @TableLogic(value = "1", delval = "0")
     @TableField("isvalid")
     private Integer valid;
+
+    /**
+     * 当前数据库对象转vo对象,尽量用属性复制的方法,少用反射
+     *
+     * @return /
+     */
+    public abstract VO toVo();
 }

+ 21 - 0
service-base/src/main/java/com/simuwang/base/common/support/BaseIdCmd.java

@@ -0,0 +1,21 @@
+package com.simuwang.base.common.support;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author wangzaijun
+ * @date 2024/9/13 15:06
+ * @description 只包括id的抽象对象
+ */
+@Setter
+@Getter
+public abstract class BaseIdCmd extends BaseCmd {
+    /**
+     * 提供给子类实现的获取唯一标识的方法
+     * @return /
+     */
+    public abstract Integer getId();
+
+    public abstract void setId(Integer id);
+}

+ 30 - 0
service-base/src/main/java/com/simuwang/base/common/support/BaseIdStatusCmd.java

@@ -0,0 +1,30 @@
+package com.simuwang.base.common.support;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author wangzaijun
+ * @date 2024/9/13 15:05
+ * @description 包括id和status的抽象类
+ */
+@Setter
+@Getter
+public abstract class BaseIdStatusCmd extends BaseCmd {
+    /**
+     * 状态,0-启用,1-禁用
+     */
+    private Integer status;
+
+    public abstract Integer getId();
+
+    public abstract void setId(Integer id);
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+}

+ 45 - 0
service-base/src/main/java/com/simuwang/base/common/support/BaseQuery.java

@@ -0,0 +1,45 @@
+package com.simuwang.base.common.support;
+
+/**
+ * @author wangzaijun
+ * @date 2024/9/13 13:47
+ * @description 抽象的get请求的参数
+ */
+public abstract class BaseQuery extends DTO {
+    /**
+     * 关键字搜索查询
+     */
+    private String keyword;
+    /**
+     * 时间段查询-开始时间
+     */
+    private String beginTime;
+    /**
+     * 时间段查询-截止时间
+     */
+    private String endTime;
+
+    public String getKeyword() {
+        return keyword;
+    }
+
+    public void setKeyword(String keyword) {
+        this.keyword = keyword;
+    }
+
+    public String getBeginTime() {
+        return beginTime;
+    }
+
+    public void setBeginTime(String beginTime) {
+        this.beginTime = beginTime;
+    }
+
+    public String getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(String endTime) {
+        this.endTime = endTime;
+    }
+}

+ 100 - 0
service-base/src/main/java/com/simuwang/base/common/support/BaseService.java

@@ -0,0 +1,100 @@
+package com.simuwang.base.common.support;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.simuwang.base.common.exception.APIException;
+
+/**
+ * @author wangzaijun
+ * @date 2024/9/13 14:10
+ * @description 数据库操作的基础service
+ */
+public interface BaseService<VO extends BaseVO, T extends BaseEntity<VO>> {
+    String[] DEFAULT_COLUMNS = {"creatorid", "createtime"};
+
+    String[] DEFAULT_SELECT_COLUMNS = extColumns(DEFAULT_COLUMNS, "isvalid", "remark", "updaterid", "updatetime");
+
+    /**
+     * 扩展查询的字段
+     *
+     * @param defaultColumns 默认的通用字段
+     * @param ext            子类扩展的字段
+     * @return /
+     */
+    static String[] extColumns(String[] defaultColumns, String... ext) {
+        String[] newColumns = new String[defaultColumns.length + ext.length];
+        System.arraycopy(defaultColumns, 0, newColumns, 0, defaultColumns.length);
+        System.arraycopy(ext, 0, newColumns, defaultColumns.length, ext.length);
+        return newColumns;
+    }
+
+    /**
+     * 分页方法
+     *
+     * @param query 分页查询对象
+     * @return /
+     */
+    default <Q extends PageQuery> MybatisPage<VO> findPage(Q query) {
+        Page<T> page = new Page<>(query.getCurrent(), query.getPageSize());
+        page.setOrders(query.getOrderItems());
+        QueryWrapper<T> wrapper = Wrappers.<T>query().select(this.selectColumns());
+        this.wrapQuery(wrapper, query);
+        if (StrUtil.isAllNotBlank(query.getBeginTime(), query.getEndTime())) {
+            wrapper.between("createtime", query.getBeginTime(), query.getEndTime());
+        }
+        if (query.getOrderItems() != null) {
+            query.getOrderItems().forEach(e -> wrapper.orderBy(true, e.isAsc(), e.getColumn()));
+        } else {
+            wrapper.orderByDesc("createtime");
+        }
+        return this.convertPage(page, wrapper);
+    }
+
+    /**
+     * 获取查询列,默认只获取 {@see DEFAULT_SELECT_COLUMNS} 列字段
+     *
+     * @return /
+     */
+    default String[] selectColumns() {
+        return DEFAULT_SELECT_COLUMNS;
+    }
+
+    /**
+     * 包装查询条件,默认空实现
+     *
+     * @param wrapper 查询包装器
+     * @param query   待处理条件
+     */
+    default <Q extends PageQuery> void wrapQuery(QueryWrapper<T> wrapper, Q query) {
+        throw new APIException("not impl.");
+    }
+
+    /**
+     * 分页结果转换
+     *
+     * @param page    分页参数
+     * @param wrapper 查询条件
+     * @return 分页结果
+     */
+    MybatisPage<VO> convertPage(Page<T> page, QueryWrapper<T> wrapper);
+
+    /**
+     * 根据id更新状态
+     *
+     * @param command /
+     */
+    default <BSC extends BaseIdStatusCmd> void updateStatus(BSC command) {
+        throw new APIException("not impl.");
+    }
+
+    /**
+     * 根据id删除记录
+     *
+     * @param command /
+     */
+    default <BIC extends BaseIdCmd> void delete(BIC command) {
+        throw new APIException("not impl.");
+    }
+}

+ 28 - 0
service-base/src/main/java/com/simuwang/base/common/support/BaseVO.java

@@ -0,0 +1,28 @@
+package com.simuwang.base.common.support;
+
+import java.util.Date;
+
+/**
+ * @author wangzaijun
+ * @date 2024/9/13 13:55
+ * @description 抽象的返回对象
+ */
+public abstract class BaseVO extends DTO {
+    /**
+     * 唯一id
+     *
+     * @return /
+     */
+    public abstract Integer getId();
+
+    /**
+     * 创建人id
+     */
+    public abstract Integer getCreatorId();
+
+    /**
+     * 创建时间
+     */
+    public abstract Date getCreateTime();
+
+}

+ 16 - 0
service-base/src/main/java/com/simuwang/base/common/support/DTO.java

@@ -0,0 +1,16 @@
+package com.simuwang.base.common.support;
+
+import com.simuwang.base.common.conts.Constants;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author wangzaijun
+ * @date 2024/9/13 13:46
+ * @description 抽象的接口请求参数父类
+ */
+public abstract class DTO implements Serializable {
+    @Serial
+    private static final long serialVersionUID = Constants.DEFAULT_SERIAL_ID;
+}

+ 102 - 0
service-base/src/main/java/com/simuwang/base/common/support/MybatisPage.java

@@ -0,0 +1,102 @@
+package com.simuwang.base.common.support;
+
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.simuwang.base.common.conts.Constants;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * @author wangzaijun
+ * @date 2024/9/13 14:01
+ * @description 数据库分页包装对象
+ */
+public class MybatisPage<T> implements Serializable {
+    @Serial
+    private static final long serialVersionUID = Constants.DEFAULT_SERIAL_ID;
+    /**
+     * 总数
+     */
+    private Long total;
+    /**
+     * 当前页记录
+     */
+    private List<T> records;
+
+    public MybatisPage() {
+    }
+
+    /**
+     * 提供一个快速构建PageResult的工具
+     *
+     * @param page     mybatis分页对象
+     * @param function dto与t对象转换函数
+     * @param <T>      实体对象
+     * @param <VO>     dto数据传输对象
+     * @return PageResult
+     */
+    public static <T, VO extends BaseVO> MybatisPage<VO> of(IPage<T> page, Function<List<T>, List<VO>> function) {
+        List<VO> list = function.apply(page.getRecords());
+        return new MybatisPage<VO>().total(page.getTotal()).records(list);
+    }
+
+    /**
+     * 提供一个快速构建PageResult的工具
+     *
+     * @param page     mybatis分页对象
+     * @param function dto与t对象转换函数
+     * @param <T>      实体对象
+     * @param <VO>     dto数据传输对象
+     * @return PageResult
+     */
+    public static <T, VO extends BaseVO> MybatisPage<VO> ofList(IPage<T> page, Function<T, VO> function) {
+        List<T> records = page.getRecords();
+        List<VO> list = null;
+        if (CollUtil.isNotEmpty(records)) {
+            list = records.stream().map(function).collect(Collectors.toList());
+        }
+        return new MybatisPage<VO>().total(page.getTotal()).records(list);
+    }
+
+    /**
+     * 提供一个快速构建PageResult的工具
+     *
+     * @param total   总数
+     * @param records 当前页记录集合
+     * @param <T>     数据传输对象类型
+     * @return 分页结果 PageResult
+     */
+    public static <T> MybatisPage<T> of(Long total, List<T> records) {
+        return new MybatisPage<T>().total(total).records(records);
+    }
+
+    public Long getTotal() {
+        return total;
+    }
+
+    public void setTotal(Long total) {
+        this.total = total;
+    }
+
+    public List<T> getRecords() {
+        return records;
+    }
+
+    public void setRecords(List<T> records) {
+        this.records = records;
+    }
+
+    public MybatisPage<T> total(Long total) {
+        this.total = total;
+        return this;
+    }
+
+    public MybatisPage<T> records(List<T> records) {
+        this.records = records;
+        return this;
+    }
+}

+ 54 - 0
service-base/src/main/java/com/simuwang/base/common/support/PageQuery.java

@@ -0,0 +1,54 @@
+package com.simuwang.base.common.support;
+
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+
+import java.util.List;
+
+/**
+ * @author wangzaijun
+ * @date 2024/9/13 13:48
+ * @description 分页请求的参数
+ */
+public class PageQuery extends BaseQuery {
+    /**
+     * 当前页
+     */
+    private Long current;
+    /**
+     * 每页数
+     */
+    private Long pageSize;
+    /**
+     * 排序字段
+     */
+    private List<OrderItem> orderItems;
+
+    public PageQuery() {
+        this.current = 1L;
+        this.pageSize = 10L;
+    }
+
+    public Long getCurrent() {
+        return current;
+    }
+
+    public void setCurrent(Long current) {
+        this.current = current;
+    }
+
+    public Long getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(Long pageSize) {
+        this.pageSize = pageSize;
+    }
+
+    public List<OrderItem> getOrderItems() {
+        return orderItems;
+    }
+
+    public void setOrderItems(List<OrderItem> orderItems) {
+        this.orderItems = orderItems;
+    }
+}

+ 3 - 0
service-base/src/main/java/com/simuwang/base/common/support/package-info.java

@@ -0,0 +1,3 @@
+package com.simuwang.base.common.support;
+
+/* 数据库支持的包 */

+ 1 - 1
service-base/src/main/java/com/simuwang/base/utils/TreeUtil.java

@@ -1,4 +1,4 @@
-package com.simuwang.base.utils;
+package com.simuwang.base.common.util;
 
 import cn.hutool.core.collection.ListUtil;
 

+ 26 - 1
service-base/src/main/java/com/simuwang/base/pojo/dos/SysMenuDO.java

@@ -3,6 +3,8 @@ package com.simuwang.base.pojo.dos;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.simuwang.base.common.support.BaseEntity;
+import com.simuwang.base.pojo.vo.SysMenuVO;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -15,7 +17,7 @@ import lombok.Setter;
 @Setter
 @Getter
 @TableName("sys_menu")
-public class SysMenuDO extends BaseEntity {
+public class SysMenuDO extends BaseEntity<SysMenuVO> {
     /**
      * 菜单ID
      */
@@ -90,4 +92,27 @@ public class SysMenuDO extends BaseEntity {
      * 备注
      */
     private String remark;
+
+    @Override
+    public SysMenuVO toVo() {
+        SysMenuVO vo = new SysMenuVO();
+        vo.setMenuId(this.menuId);
+        vo.setMenuName(this.menuName);
+        vo.setMenuType(this.menuType);
+        vo.setPerms(this.perms);
+        vo.setOrderNum(this.orderNum);
+        vo.setPath(this.path);
+        vo.setComponent(this.component);
+        vo.setQuery(this.query);
+        vo.setIcon(this.icon);
+        vo.setParentId(this.parentId);
+        vo.setVisible(this.visible);
+        vo.setIsFrame(this.isFrame);
+        vo.setIsCache(this.isCache);
+        vo.setStatus(this.status);
+        vo.setRemark(this.remark);
+        vo.setCreatorId(this.getCreatorId());
+        vo.setCreateTime(this.getCreateTime());
+        return vo;
+    }
 }

+ 17 - 1
service-base/src/main/java/com/simuwang/base/pojo/dos/SysRoleDO.java

@@ -3,6 +3,8 @@ package com.simuwang.base.pojo.dos;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.simuwang.base.common.support.BaseEntity;
+import com.simuwang.base.pojo.vo.SysRoleVO;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -15,7 +17,7 @@ import lombok.Setter;
 @Setter
 @Getter
 @TableName("sys_role")
-public class SysRoleDO extends BaseEntity {
+public class SysRoleDO extends BaseEntity<SysRoleVO> {
     /**
      * 角色ID
      */
@@ -55,4 +57,18 @@ public class SysRoleDO extends BaseEntity {
      * 备注
      */
     private String remark;
+
+    @Override
+    public SysRoleVO toVo() {
+        SysRoleVO vo = new SysRoleVO();
+        vo.setRoleId(this.roleId);
+        vo.setRoleName(this.roleName);
+        vo.setRoleKey(this.roleKey);
+        vo.setRemark(this.remark);
+        vo.setRoleSort(this.roleSort);
+        vo.setStatus(this.status);
+        vo.setCreatorId(this.getCreatorId());
+        vo.setCreateTime(this.getCreateTime());
+        return vo;
+    }
 }

+ 21 - 1
service-base/src/main/java/com/simuwang/base/pojo/dos/SysUserDO.java

@@ -3,6 +3,8 @@ package com.simuwang.base.pojo.dos;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.simuwang.base.common.support.BaseEntity;
+import com.simuwang.base.pojo.vo.SysUserVO;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -15,7 +17,7 @@ import lombok.Setter;
 @Setter
 @Getter
 @TableName("sys_user")
-public class SysUserDO extends BaseEntity {
+public class SysUserDO extends BaseEntity<SysUserVO> {
     /**
      * 用户ID
      */
@@ -79,4 +81,22 @@ public class SysUserDO extends BaseEntity {
      * 备注
      */
     private String remark;
+
+    @Override
+    public SysUserVO toVo() {
+//        return BeanUtil.copyProperties(this, SysUserVO.class);
+        SysUserVO vo = new SysUserVO();
+        vo.setUserId(this.userId);
+        vo.setAvatar(this.avatar);
+        vo.setEmail(this.email);
+        vo.setPhonenumber(this.phonenumber);
+        vo.setPassword(this.password);
+        vo.setSex(this.sex);
+        vo.setUserType(this.userType);
+        vo.setStatus(this.status);
+        vo.setRemark(this.remark);
+        vo.setCreatorId(this.getCreatorId());
+        vo.setCreateTime(this.getCreateTime());
+        return vo;
+    }
 }

+ 22 - 0
service-base/src/main/java/com/simuwang/base/pojo/dto/command/DeleteByIdCmd.java

@@ -0,0 +1,22 @@
+package com.simuwang.base.pojo.dto.command;
+
+import com.simuwang.base.common.support.BaseIdCmd;
+
+/**
+ * @author wangzaijun
+ * @date 2024/9/13 15:33
+ * @description 根据id删除对象的请求参数
+ */
+public class DeleteByIdCmd extends BaseIdCmd {
+    private Integer id;
+
+    @Override
+    public Integer getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(Integer id) {
+        this.id = id;
+    }
+}

+ 22 - 0
service-base/src/main/java/com/simuwang/base/pojo/dto/command/UpdateStatusCmd.java

@@ -0,0 +1,22 @@
+package com.simuwang.base.pojo.dto.command;
+
+import com.simuwang.base.common.support.BaseIdStatusCmd;
+
+/**
+ * @author wangzaijun
+ * @date 2024/9/13 15:32
+ * @description 更新状态的请求参数
+ */
+public class UpdateStatusCmd extends BaseIdStatusCmd {
+    private Integer id;
+
+    @Override
+    public Integer getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(Integer id) {
+        this.id = id;
+    }
+}

+ 12 - 0
service-base/src/main/java/com/simuwang/base/pojo/dto/query/UserPageQuery.java

@@ -0,0 +1,12 @@
+package com.simuwang.base.pojo.dto.query;
+
+import com.simuwang.base.common.support.PageQuery;
+
+/**
+ * @author wangzaijun
+ * @date 2024/9/13 13:38
+ * @description 用户分页接口请求参数
+ */
+public class UserPageQuery extends PageQuery {
+
+}

+ 69 - 35
service-base/src/main/java/com/simuwang/base/pojo/vo/SysMenuVO.java

@@ -1,10 +1,11 @@
 package com.simuwang.base.pojo.vo;
 
 
-import lombok.Data;
+import com.simuwang.base.common.support.BaseVO;
+import lombok.Getter;
+import lombok.Setter;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.Date;
 
 /**
  * FileName: SysMenuVO
@@ -12,55 +13,88 @@ import java.util.List;
  * Date:     2024/9/8 12:45
  * Description: ${DESCRIPTION}
  */
-@Data
-public class SysMenuVO
-{
-    /** 菜单ID */
-    private Long menuId;
-
-    /** 菜单名称 */
+@Setter
+@Getter
+public class SysMenuVO extends BaseVO {
+    /**
+     * 菜单ID
+     */
+    private Integer menuId;
+
+    /**
+     * 菜单名称
+     */
     private String menuName;
 
-    /** 父菜单名称 */
-    private String parentName;
-
-    /** 父菜单ID */
-    private Long parentId;
+    /**
+     * 父菜单ID
+     */
+    private Integer parentId;
 
-    /** 显示顺序 */
+    /**
+     * 显示顺序
+     */
     private Integer orderNum;
 
-    /** 路由地址 */
+    /**
+     * 路由地址
+     */
     private String path;
 
-    /** 组件路径 */
+    /**
+     * 组件路径
+     */
     private String component;
 
-    /** 路由参数 */
+    /**
+     * 路由参数
+     */
     private String query;
 
-    /** 是否为外链(0是 1否) */
-    private String isFrame;
+    /**
+     * 是否为外链(0是 1否)
+     */
+    private Integer isFrame;
 
-    /** 是否缓存(0缓存 1不缓存) */
-    private String isCache;
+    /**
+     * 是否缓存(0缓存 1不缓存)
+     */
+    private Integer isCache;
 
-    /** 类型(M目录 C菜单 F按钮) */
+    /**
+     * 类型(M目录 C菜单 F按钮)
+     */
     private String menuType;
 
-    /** 显示状态(0显示 1隐藏) */
-    private String visible;
-    
-    /** 菜单状态(0正常 1停用) */
-    private String status;
+    /**
+     * 显示状态(0显示 1隐藏)
+     */
+    private Integer visible;
+
+    /**
+     * 菜单状态(0正常 1停用)
+     */
+    private Integer status;
 
-    /** 权限字符串 */
+    /**
+     * 权限字符串
+     */
     private String perms;
 
-    /** 菜单图标 */
+    /**
+     * 菜单图标
+     */
     private String icon;
-
-    /** 子菜单 */
-    private List<SysMenuVO> children = new ArrayList<SysMenuVO>();
-
+    /**
+     * 备注
+     */
+    private String remark;
+
+    private Integer creatorId;
+    private Date createTime;
+
+    @Override
+    public Integer getId() {
+        return this.menuId;
+    }
 }

+ 47 - 39
service-base/src/main/java/com/simuwang/base/pojo/vo/SysRoleVO.java

@@ -1,8 +1,10 @@
 package com.simuwang.base.pojo.vo;
 
-import lombok.Data;
+import com.simuwang.base.common.support.BaseVO;
+import lombok.Getter;
+import lombok.Setter;
 
-import java.util.Set;
+import java.util.Date;
 
 /**
  * FileName: SysRoleVO
@@ -10,47 +12,53 @@ import java.util.Set;
  * Date:     2024/9/8 12:45
  * Description: ${DESCRIPTION}
  */
-@Data
-public class SysRoleVO
-{
-
-    /** 角色ID */
-    private Long roleId;
-
-    /** 角色名称 */
+@Setter
+@Getter
+public class SysRoleVO extends BaseVO {
+    /**
+     * 角色ID
+     */
+    private Integer roleId;
+
+    /**
+     * 角色名称
+     */
     private String roleName;
 
-    /** 角色权限 */
+    /**
+     * 角色权限
+     */
     private String roleKey;
 
-    /** 角色排序 */
+    /**
+     * 角色排序
+     */
     private Integer roleSort;
 
-    /** 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限) */
-    private String dataScope;
-
-    /** 菜单树选择项是否关联显示( 0:父子不互相关联显示 1:父子互相关联显示) */
-    private boolean menuCheckStrictly;
-
-    /** 部门树选择项是否关联显示(0:父子不互相关联显示 1:父子互相关联显示 ) */
-    private boolean deptCheckStrictly;
-
-    /** 角色状态(0正常 1停用) */
-    private String status;
-
-    /** 删除标志(0代表存在 1代表删除) */
-    private String delFlag;
-
-    /** 用户是否存在此角色标识 默认不存在 */
-    private boolean flag = false;
-
-    /** 菜单组 */
-    private Long[] menuIds;
-
-    /** 部门组(数据权限) */
-    private Long[] deptIds;
-
-    /** 角色菜单权限 */
-    private Set<String> permissions;
-
+//    /**
+//     * 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限)
+//     */
+//    private String dataScope;
+
+    /**
+     * 角色状态(0正常 1停用)
+     */
+    private Integer status;
+
+//    /**
+//     * 用户是否存在此角色标识 默认不存在
+//     */
+//    private boolean flag = false;
+    /**
+     * 备注
+     */
+    private String remark;
+
+    private Integer creatorId;
+    private Date createTime;
+
+    @Override
+    public Integer getId() {
+        return this.roleId;
+    }
 }

+ 51 - 44
service-base/src/main/java/com/simuwang/base/pojo/vo/SysUserVO.java

@@ -1,9 +1,10 @@
 package com.simuwang.base.pojo.vo;
 
-import lombok.Data;
+import com.simuwang.base.common.support.BaseVO;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.util.Date;
-import java.util.List;
 
 /**
  * FileName: SysUserVO
@@ -11,57 +12,63 @@ import java.util.List;
  * Date:     2024/9/8 12:45
  * Description: ${DESCRIPTION}
  */
-@Data
-public class SysUserVO
-{
-    /** 用户ID */
-    private Long userId;
-
-    /** 用户账号 */
+@Setter
+@Getter
+public class SysUserVO extends BaseVO {
+    /**
+     * 用户ID
+     */
+    private Integer userId;
+
+    /**
+     * 用户名称
+     */
     private String userName;
 
-    /** 用户类型1-内部系统,2-外部系统 */
-    private String userType;
+    /**
+     * 用户类型
+     */
+    private Integer userType;
 
-    /** 用户邮箱 */
+    /**
+     * 用户邮箱
+     */
     private String email;
 
-    /** 手机号码 */
+    /**
+     * 手机号码
+     */
     private String phonenumber;
 
-    /** 手机号码 */
-    private String startDate;
-
-    /** 手机号码 */
-    private String endDate;
-
-    /** 用户性别 */
-    private String sex;
+    /**
+     * 用户性别
+     */
+    private Integer sex;
 
-    /** 用户头像 */
+    /**
+     * 用户头像
+     */
     private String avatar;
 
-    /** 密码 */
+    /**
+     * 密码
+     */
     private String password;
-
-    /** 帐号状态(0正常 1停用) */
-    private String status;
-
-    /** 删除标志(0代表存在 2代表删除) */
-    private String delFlag;
-
-    /** 最后登录IP */
-    private String loginIp;
-
-    /** 最后登录时间 */
-    private Date loginDate;
-
-    /** 角色对象 */
-    private List<SysRoleVO> roles;
-
-    /** 角色组 */
-    private Long[] roleIds;
-
-    /** 角色ID */
-    private Long roleId;
+    /**
+     * 帐号状态(0正常 1停用)
+     */
+    private Integer status;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    private Integer creatorId;
+    private Date createTime;
+
+    @Override
+    public Integer getId() {
+        return this.getUserId();
+    }
 }

+ 55 - 0
service-manage/src/main/java/com/simuwang/manage/api/system/SysUserController.java

@@ -0,0 +1,55 @@
+package com.simuwang.manage.api.system;
+
+import com.simuwang.base.common.support.MybatisPage;
+import com.simuwang.base.pojo.dto.command.DeleteByIdCmd;
+import com.simuwang.base.pojo.dto.command.UpdateStatusCmd;
+import com.simuwang.base.pojo.dto.query.UserPageQuery;
+import com.simuwang.base.pojo.vo.SysUserVO;
+import com.simuwang.manage.service.system.SysUserService;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author wangzaijun
+ * @date 2024/9/13 13:37
+ * @description 用户管理相关接口
+ */
+@RestController
+@RequestMapping("/v1/sys/user")
+public class SysUserController {
+    private final SysUserService service;
+
+    public SysUserController(SysUserService service) {
+        this.service = service;
+    }
+
+    /**
+     * 分页接口
+     *
+     * @param query 用户列表分页请求参数
+     * @return /
+     */
+    @GetMapping("page")
+    public MybatisPage<SysUserVO> page(UserPageQuery query) {
+        return this.service.findPage(query);
+    }
+
+    /**
+     * 更新用户状态接口
+     *
+     * @param command 用户id+状态对象
+     */
+    @PostMapping("update-status")
+    public void updateStatus(@RequestBody UpdateStatusCmd command) {
+        this.service.updateStatus(command);
+    }
+
+    /**
+     * 根据id删除用户信息接口
+     *
+     * @param command 用户id对象
+     */
+    @PostMapping("del")
+    public void deleteById(@RequestBody DeleteByIdCmd command) {
+        this.service.delete(command);
+    }
+}

+ 24 - 0
service-manage/src/main/java/com/simuwang/manage/dto/UserInfoVO.java

@@ -17,6 +17,14 @@ public class UserInfoVO {
      */
     private String username;
     /**
+     * 用户邮箱
+     */
+    private String email;
+    /**
+     * 手机号码
+     */
+    private String phonenumber;
+    /**
      * 角色列表
      */
     private List<UserRoleDTO> roles;
@@ -52,6 +60,22 @@ public class UserInfoVO {
         this.username = username;
     }
 
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public String getPhonenumber() {
+        return phonenumber;
+    }
+
+    public void setPhonenumber(String phonenumber) {
+        this.phonenumber = phonenumber;
+    }
+
     public List<UserRoleDTO> getRoles() {
         return roles;
     }

+ 7 - 2
service-manage/src/main/java/com/simuwang/manage/service/SystemService.java

@@ -2,8 +2,9 @@ package com.simuwang.manage.service;
 
 import com.simuwang.base.pojo.dos.SysMenuDO;
 import com.simuwang.base.pojo.dos.SysRoleDO;
+import com.simuwang.base.pojo.dos.SysUserDO;
 import com.simuwang.base.service.UserAuthService;
-import com.simuwang.base.utils.TreeUtil;
+import com.simuwang.base.common.util.TreeUtil;
 import com.simuwang.manage.dto.UserInfoVO;
 import com.simuwang.manage.dto.UserMenuTreeDTO;
 import com.simuwang.manage.dto.UserRoleDTO;
@@ -36,6 +37,7 @@ public class SystemService {
         ShiroUser shiroUser = (ShiroUser) SecurityUtils.getSubject().getPrincipal();
         Integer userId = shiroUser.getUserId();
         String username = shiroUser.getUsername();
+        SysUserDO userInfo = this.userAuthService.getUserInfoByUsername(username);
         // 用户角色信息转换
         List<SysRoleDO> roleList = this.userAuthService.listUserRoleByUserId(userId);
         List<UserRoleDTO> roles = roleList.stream()
@@ -49,6 +51,9 @@ public class SystemService {
                 UserMenuTreeDTO::getChildren, UserMenuTreeDTO::setChildren, 0, UserMenuTreeDTO::getSort);
         UserMenuTreeDTO root = new UserMenuTreeDTO(0, "全部菜单", trees);
         // 返回的数据结构构建
-        return new UserInfoVO(userId, username, roles, root);
+        UserInfoVO vo = new UserInfoVO(userId, username, roles, root);
+        vo.setEmail(userInfo.getEmail());
+        vo.setPhonenumber(userInfo.getPhonenumber());
+        return vo;
     }
 }

+ 61 - 0
service-manage/src/main/java/com/simuwang/manage/service/impl/system/SysUserServiceImpl.java

@@ -0,0 +1,61 @@
+package com.simuwang.manage.service.impl.system;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.simuwang.base.common.support.*;
+import com.simuwang.base.mapper.SysUserMapper;
+import com.simuwang.base.pojo.dos.SysUserDO;
+import com.simuwang.base.pojo.dto.query.UserPageQuery;
+import com.simuwang.base.pojo.vo.SysUserVO;
+import com.simuwang.manage.service.system.SysUserService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class SysUserServiceImpl implements SysUserService {
+    private final SysUserMapper mapper;
+
+    public SysUserServiceImpl(SysUserMapper mapper) {
+        this.mapper = mapper;
+    }
+
+    @Override
+    public String[] selectColumns() {
+        return BaseService.extColumns(DEFAULT_SELECT_COLUMNS,
+                "user_id", "user_name", "email", "phonenumber", "sex", "avatar", "status");
+    }
+
+    @Override
+    public <Q extends PageQuery> void wrapQuery(QueryWrapper<SysUserDO> wrapper, Q query) {
+        UserPageQuery params = (UserPageQuery) query;
+        String keyword = params.getKeyword();
+        if (StrUtil.isNotBlank(keyword)) {
+            wrapper.like("user_name", keyword)
+                    .or()
+                    .like("email", keyword)
+                    .or()
+                    .like("phonenumber", keyword);
+        }
+    }
+
+    @Override
+    public MybatisPage<SysUserVO> convertPage(Page<SysUserDO> page, QueryWrapper<SysUserDO> wrapper) {
+        IPage<SysUserDO> entityPage = this.mapper.selectPage(page, wrapper);
+        return MybatisPage.ofList(entityPage, SysUserDO::toVo);
+    }
+
+    @Override
+    public <BSC extends BaseIdStatusCmd> void updateStatus(BSC command) {
+        SysUserDO user = new SysUserDO();
+        user.setUserId(command.getId());
+        user.setStatus(command.getStatus());
+        this.mapper.updateById(user);
+    }
+
+    @Override
+    public <BIC extends BaseIdCmd> void delete(BIC command) {
+        Integer id = command.getId();
+        this.mapper.deleteById(id);
+    }
+}

+ 13 - 0
service-manage/src/main/java/com/simuwang/manage/service/system/SysUserService.java

@@ -0,0 +1,13 @@
+package com.simuwang.manage.service.system;
+
+import com.simuwang.base.common.support.BaseService;
+import com.simuwang.base.pojo.dos.SysUserDO;
+import com.simuwang.base.pojo.vo.SysUserVO;
+
+/**
+ * @author wangzaijun
+ * @date 2024/9/13 14:14
+ * @description 用户服务
+ */
+public interface SysUserService extends BaseService<SysUserVO, SysUserDO> {
+}