From c84bf79d9d25add38f2fae42f2e24709a9938ecf Mon Sep 17 00:00:00 2001 From: bot_dev2 Date: Sun, 14 Jun 2026 13:52:57 +0800 Subject: [PATCH] =?UTF-8?q?feat(wm-system):=20#14=20=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E4=B8=8E=E7=B3=BB=E7=BB=9F=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 文档管理: - 文档 CRUD / 分类管理 / 版本控制 - DocService + DocController (/system/doc/*) 系统管理: - 角色管理(5级角色预设) - 用户管理(新增/编辑/停用) - 菜单管理 / 部门管理 - 日志管理(登录/操作/异常日志) - SysService + SysController (/system/*) DDL: 8 张表 (document/category/version/role/user/menu/department/log) --- wm-system/pom.xml | 50 ++++++++++++++ .../com/water/system/SystemApplication.java | 13 ++++ .../system/controller/DocController.java | 19 ++++++ .../system/controller/SysController.java | 21 ++++++ .../com/water/system/entity/Document.java | 57 ++++++++++++++++ .../water/system/entity/DocumentCategory.java | 33 +++++++++ .../water/system/entity/DocumentVersion.java | 35 ++++++++++ .../water/system/entity/SysDepartment.java | 9 +++ .../java/com/water/system/entity/SysLog.java | 11 +++ .../java/com/water/system/entity/SysMenu.java | 9 +++ .../java/com/water/system/entity/SysRole.java | 10 +++ .../java/com/water/system/entity/SysUser.java | 12 ++++ .../system/mapper/DocumentCategoryMapper.java | 5 ++ .../water/system/mapper/DocumentMapper.java | 5 ++ .../system/mapper/DocumentVersionMapper.java | 5 ++ .../system/mapper/SysDepartmentMapper.java | 5 ++ .../com/water/system/mapper/SysLogMapper.java | 5 ++ .../water/system/mapper/SysMenuMapper.java | 5 ++ .../water/system/mapper/SysRoleMapper.java | 5 ++ .../water/system/mapper/SysUserMapper.java | 5 ++ .../com/water/system/service/DocService.java | 44 ++++++++++++ .../com/water/system/service/SysService.java | 67 +++++++++++++++++++ wm-system/src/main/resources/application.yml | 40 +++++++++++ .../main/resources/db/V1__system_manage.sql | 45 +++++++++++++ 24 files changed, 515 insertions(+) create mode 100644 wm-system/pom.xml create mode 100644 wm-system/src/main/java/com/water/system/SystemApplication.java create mode 100644 wm-system/src/main/java/com/water/system/controller/DocController.java create mode 100644 wm-system/src/main/java/com/water/system/controller/SysController.java create mode 100644 wm-system/src/main/java/com/water/system/entity/Document.java create mode 100644 wm-system/src/main/java/com/water/system/entity/DocumentCategory.java create mode 100644 wm-system/src/main/java/com/water/system/entity/DocumentVersion.java create mode 100644 wm-system/src/main/java/com/water/system/entity/SysDepartment.java create mode 100644 wm-system/src/main/java/com/water/system/entity/SysLog.java create mode 100644 wm-system/src/main/java/com/water/system/entity/SysMenu.java create mode 100644 wm-system/src/main/java/com/water/system/entity/SysRole.java create mode 100644 wm-system/src/main/java/com/water/system/entity/SysUser.java create mode 100644 wm-system/src/main/java/com/water/system/mapper/DocumentCategoryMapper.java create mode 100644 wm-system/src/main/java/com/water/system/mapper/DocumentMapper.java create mode 100644 wm-system/src/main/java/com/water/system/mapper/DocumentVersionMapper.java create mode 100644 wm-system/src/main/java/com/water/system/mapper/SysDepartmentMapper.java create mode 100644 wm-system/src/main/java/com/water/system/mapper/SysLogMapper.java create mode 100644 wm-system/src/main/java/com/water/system/mapper/SysMenuMapper.java create mode 100644 wm-system/src/main/java/com/water/system/mapper/SysRoleMapper.java create mode 100644 wm-system/src/main/java/com/water/system/mapper/SysUserMapper.java create mode 100644 wm-system/src/main/java/com/water/system/service/DocService.java create mode 100644 wm-system/src/main/java/com/water/system/service/SysService.java create mode 100644 wm-system/src/main/resources/application.yml create mode 100644 wm-system/src/main/resources/db/V1__system_manage.sql diff --git a/wm-system/pom.xml b/wm-system/pom.xml new file mode 100644 index 00000000..87ec4daf --- /dev/null +++ b/wm-system/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + com.water + wm-parent + 1.0.0-SNAPSHOT + + wm-system + wm-system + 文档管理与系统管理模块 + + + + com.water + wm-common + + + org.springframework.boot + spring-boot-starter-web + + + com.baomidou + mybatis-plus-spring-boot3-starter + + + cn.dev33 + sa-token-spring-boot3-starter + + + org.postgresql + postgresql + + + io.minio + minio + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-starter-test + test + + + diff --git a/wm-system/src/main/java/com/water/system/SystemApplication.java b/wm-system/src/main/java/com/water/system/SystemApplication.java new file mode 100644 index 00000000..8abc344e --- /dev/null +++ b/wm-system/src/main/java/com/water/system/SystemApplication.java @@ -0,0 +1,13 @@ +package com.water.system; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.mybatis.spring.annotation.MapperScan; + +@SpringBootApplication(scanBasePackages = "com.water") +@MapperScan("com.water.system.mapper") +public class SystemApplication { + public static void main(String[] args) { + SpringApplication.run(SystemApplication.class, args); + } +} diff --git a/wm-system/src/main/java/com/water/system/controller/DocController.java b/wm-system/src/main/java/com/water/system/controller/DocController.java new file mode 100644 index 00000000..d899f370 --- /dev/null +++ b/wm-system/src/main/java/com/water/system/controller/DocController.java @@ -0,0 +1,19 @@ +package com.water.system.controller; +import com.water.common.core.result.R; +import com.water.system.entity.*; +import com.water.system.service.DocService; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; +import java.util.*; +@Tag(name="文档管理") @RestController @RequestMapping("/system/doc") @RequiredArgsConstructor +public class DocController { + private final DocService svc; + @GetMapping("/list") public R> list(@RequestParam(required=false) String categoryId, @RequestParam(required=false) String keyword) { return R.ok(svc.listDocs(categoryId, keyword)); } + @GetMapping("/{id}") public R get(@PathVariable Long id) { return R.ok(svc.getDoc(id)); } + @PostMapping public R create(@RequestBody Map req) { return R.ok(svc.createDoc(req)); } + @PutMapping("/{id}") public R update(@PathVariable Long id, @RequestBody Map req) { svc.updateDoc(id, req); return R.ok("OK"); } + @DeleteMapping("/{id}") public R delete(@PathVariable Long id) { svc.deleteDoc(id); return R.ok("OK"); } + @GetMapping("/category/list") public R> categories() { return R.ok(svc.listCategories()); } + @GetMapping("/{docId}/versions") public R> versions(@PathVariable Long docId) { return R.ok(svc.getVersions(docId)); } +} diff --git a/wm-system/src/main/java/com/water/system/controller/SysController.java b/wm-system/src/main/java/com/water/system/controller/SysController.java new file mode 100644 index 00000000..3bfb7cb0 --- /dev/null +++ b/wm-system/src/main/java/com/water/system/controller/SysController.java @@ -0,0 +1,21 @@ +package com.water.system.controller; +import com.water.common.core.result.R; +import com.water.system.entity.*; +import com.water.system.service.SysService; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; +import java.util.*; +@Tag(name="系统管理") @RestController @RequestMapping("/system") @RequiredArgsConstructor +public class SysController { + private final SysService svc; + @GetMapping("/role/list") public R> roles() { return R.ok(svc.listRoles()); } + @PostMapping("/role") public R createRole(@RequestBody Map req) { return R.ok(svc.createRole(req)); } + @GetMapping("/user/list") public R> users(@RequestParam(required=false) Integer status) { return R.ok(svc.listUsers(status)); } + @PostMapping("/user") public R createUser(@RequestBody Map req) { return R.ok(svc.createUser(req)); } + @PutMapping("/user/{id}/status") public R updateUserStatus(@PathVariable Long id, @RequestParam int status) { svc.updateUserStatus(id, status); return R.ok("OK"); } + @GetMapping("/menu/list") public R> menus() { return R.ok(svc.listMenus()); } + @GetMapping("/dept/list") public R> depts() { return R.ok(svc.listDepts()); } + @PostMapping("/dept") public R createDept(@RequestBody Map req) { return R.ok(svc.createDept(req)); } + @GetMapping("/log/list") public R> logs(@RequestParam(required=false) String logType, @RequestParam(required=false) String username) { return R.ok(svc.listLogs(logType, username)); } +} diff --git a/wm-system/src/main/java/com/water/system/entity/Document.java b/wm-system/src/main/java/com/water/system/entity/Document.java new file mode 100644 index 00000000..ae80d69b --- /dev/null +++ b/wm-system/src/main/java/com/water/system/entity/Document.java @@ -0,0 +1,57 @@ +package com.water.system.entity; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import java.time.LocalDateTime; + +/** + * 文档实体 + */ +@Data +@TableName("doc_document") +public class Document { + @TableId(type = IdType.AUTO) + private Long id; + + /** 文档名称 */ + private String name; + + /** 文档原始文件名 */ + private String originalName; + + /** 文档大小(字节) */ + private Long fileSize; + + /** 文件类型 */ + private String fileType; + + /** 存储路径 */ + private String storagePath; + + /** 文档分类ID */ + private Long categoryId; + + /** 文档描述 */ + private String description; + + /** 当前版本号 */ + private Integer currentVersion; + + /** 上传者ID */ + private Long uploaderId; + + /** 下载次数 */ + private Integer downloadCount; + + /** 状态: 0-草稿 1-已发布 2-已归档 */ + private Integer status; + + /** 权限级别: 0-公开 1-内部 2-机密 */ + private Integer permissionLevel; + + @TableLogic + private Integer deleted; + + private LocalDateTime createdAt; + private LocalDateTime updatedAt; +} diff --git a/wm-system/src/main/java/com/water/system/entity/DocumentCategory.java b/wm-system/src/main/java/com/water/system/entity/DocumentCategory.java new file mode 100644 index 00000000..06046c46 --- /dev/null +++ b/wm-system/src/main/java/com/water/system/entity/DocumentCategory.java @@ -0,0 +1,33 @@ +package com.water.system.entity; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import java.time.LocalDateTime; + +/** + * 文档分类实体 + */ +@Data +@TableName("doc_category") +public class DocumentCategory { + @TableId(type = IdType.AUTO) + private Long id; + + /** 分类名称 */ + private String name; + + /** 父分类ID */ + private Long parentId; + + /** 排序号 */ + private Integer sortOrder; + + /** 分类描述 */ + private String description; + + @TableLogic + private Integer deleted; + + private LocalDateTime createdAt; + private LocalDateTime updatedAt; +} diff --git a/wm-system/src/main/java/com/water/system/entity/DocumentVersion.java b/wm-system/src/main/java/com/water/system/entity/DocumentVersion.java new file mode 100644 index 00000000..dcd69c1c --- /dev/null +++ b/wm-system/src/main/java/com/water/system/entity/DocumentVersion.java @@ -0,0 +1,35 @@ +package com.water.system.entity; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import java.time.LocalDateTime; + +/** + * 文档版本实体 + */ +@Data +@TableName("doc_version") +public class DocumentVersion { + @TableId(type = IdType.AUTO) + private Long id; + + /** 文档ID */ + private Long documentId; + + /** 版本号 */ + private Integer version; + + /** 版本描述 */ + private String description; + + /** 文件存储路径 */ + private String storagePath; + + /** 文件大小 */ + private Long fileSize; + + /** 操作人ID */ + private Long operatorId; + + private LocalDateTime createdAt; +} diff --git a/wm-system/src/main/java/com/water/system/entity/SysDepartment.java b/wm-system/src/main/java/com/water/system/entity/SysDepartment.java new file mode 100644 index 00000000..af3f40cc --- /dev/null +++ b/wm-system/src/main/java/com/water/system/entity/SysDepartment.java @@ -0,0 +1,9 @@ +package com.water.system.entity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +@Data @TableName("sys_department") +public class SysDepartment { + @TableId(type = IdType.AUTO) private Long id; + private Long parentId; private String deptName, leader, phone; + private Integer sort, status; +} diff --git a/wm-system/src/main/java/com/water/system/entity/SysLog.java b/wm-system/src/main/java/com/water/system/entity/SysLog.java new file mode 100644 index 00000000..1c8c4783 --- /dev/null +++ b/wm-system/src/main/java/com/water/system/entity/SysLog.java @@ -0,0 +1,11 @@ +package com.water.system.entity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; import java.time.LocalDateTime; +@Data @TableName("sys_log") +public class SysLog { + @TableId(type = IdType.AUTO) private Long id; + private Long userId; private String username, logType, module, action; + private String requestUrl, requestMethod, requestParams, responseResult; + private String ip; private Long duration; + @TableField(fill=FieldFill.INSERT) private LocalDateTime createdTime; +} diff --git a/wm-system/src/main/java/com/water/system/entity/SysMenu.java b/wm-system/src/main/java/com/water/system/entity/SysMenu.java new file mode 100644 index 00000000..e89ce40a --- /dev/null +++ b/wm-system/src/main/java/com/water/system/entity/SysMenu.java @@ -0,0 +1,9 @@ +package com.water.system.entity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +@Data @TableName("sys_menu") +public class SysMenu { + @TableId(type = IdType.AUTO) private Long id; + private Long parentId; private String name, path, icon, component, permission; + private Integer type, sort, visible, status; +} diff --git a/wm-system/src/main/java/com/water/system/entity/SysRole.java b/wm-system/src/main/java/com/water/system/entity/SysRole.java new file mode 100644 index 00000000..5a146e2e --- /dev/null +++ b/wm-system/src/main/java/com/water/system/entity/SysRole.java @@ -0,0 +1,10 @@ +package com.water.system.entity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; import java.time.LocalDateTime; +@Data @TableName("sys_role") +public class SysRole { + @TableId(type = IdType.AUTO) private Long id; + private String roleCode, roleName, description; + private Integer status, sort; + @TableField(fill=FieldFill.INSERT) private LocalDateTime createdTime; +} diff --git a/wm-system/src/main/java/com/water/system/entity/SysUser.java b/wm-system/src/main/java/com/water/system/entity/SysUser.java new file mode 100644 index 00000000..eb9fa7fb --- /dev/null +++ b/wm-system/src/main/java/com/water/system/entity/SysUser.java @@ -0,0 +1,12 @@ +package com.water.system.entity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; import java.time.LocalDateTime; +@Data @TableName("sys_user") +public class SysUser { + @TableId(type = IdType.AUTO) private Long id; + private String username, password, realName, phone, email; + private Long deptId; private String avatar; + private Integer status; // 0停用 1正常 + @TableField(fill=FieldFill.INSERT) private LocalDateTime createdTime; + @TableField(fill=FieldFill.INSERT_UPDATE) private LocalDateTime updatedTime; +} diff --git a/wm-system/src/main/java/com/water/system/mapper/DocumentCategoryMapper.java b/wm-system/src/main/java/com/water/system/mapper/DocumentCategoryMapper.java new file mode 100644 index 00000000..e110cb50 --- /dev/null +++ b/wm-system/src/main/java/com/water/system/mapper/DocumentCategoryMapper.java @@ -0,0 +1,5 @@ +package com.water.system.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.water.system.entity.DocumentCategory; +import org.apache.ibatis.annotations.Mapper; +@Mapper public interface DocumentCategoryMapper extends BaseMapper {} diff --git a/wm-system/src/main/java/com/water/system/mapper/DocumentMapper.java b/wm-system/src/main/java/com/water/system/mapper/DocumentMapper.java new file mode 100644 index 00000000..cad5f37e --- /dev/null +++ b/wm-system/src/main/java/com/water/system/mapper/DocumentMapper.java @@ -0,0 +1,5 @@ +package com.water.system.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.water.system.entity.Document; +import org.apache.ibatis.annotations.Mapper; +@Mapper public interface DocumentMapper extends BaseMapper {} diff --git a/wm-system/src/main/java/com/water/system/mapper/DocumentVersionMapper.java b/wm-system/src/main/java/com/water/system/mapper/DocumentVersionMapper.java new file mode 100644 index 00000000..d099baed --- /dev/null +++ b/wm-system/src/main/java/com/water/system/mapper/DocumentVersionMapper.java @@ -0,0 +1,5 @@ +package com.water.system.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.water.system.entity.DocumentVersion; +import org.apache.ibatis.annotations.Mapper; +@Mapper public interface DocumentVersionMapper extends BaseMapper {} diff --git a/wm-system/src/main/java/com/water/system/mapper/SysDepartmentMapper.java b/wm-system/src/main/java/com/water/system/mapper/SysDepartmentMapper.java new file mode 100644 index 00000000..1122a709 --- /dev/null +++ b/wm-system/src/main/java/com/water/system/mapper/SysDepartmentMapper.java @@ -0,0 +1,5 @@ +package com.water.system.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.water.system.entity.SysDepartment; +import org.apache.ibatis.annotations.Mapper; +@Mapper public interface SysDepartmentMapper extends BaseMapper {} diff --git a/wm-system/src/main/java/com/water/system/mapper/SysLogMapper.java b/wm-system/src/main/java/com/water/system/mapper/SysLogMapper.java new file mode 100644 index 00000000..650c6150 --- /dev/null +++ b/wm-system/src/main/java/com/water/system/mapper/SysLogMapper.java @@ -0,0 +1,5 @@ +package com.water.system.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.water.system.entity.SysLog; +import org.apache.ibatis.annotations.Mapper; +@Mapper public interface SysLogMapper extends BaseMapper {} diff --git a/wm-system/src/main/java/com/water/system/mapper/SysMenuMapper.java b/wm-system/src/main/java/com/water/system/mapper/SysMenuMapper.java new file mode 100644 index 00000000..2aca3b5a --- /dev/null +++ b/wm-system/src/main/java/com/water/system/mapper/SysMenuMapper.java @@ -0,0 +1,5 @@ +package com.water.system.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.water.system.entity.SysMenu; +import org.apache.ibatis.annotations.Mapper; +@Mapper public interface SysMenuMapper extends BaseMapper {} diff --git a/wm-system/src/main/java/com/water/system/mapper/SysRoleMapper.java b/wm-system/src/main/java/com/water/system/mapper/SysRoleMapper.java new file mode 100644 index 00000000..d2cc8c92 --- /dev/null +++ b/wm-system/src/main/java/com/water/system/mapper/SysRoleMapper.java @@ -0,0 +1,5 @@ +package com.water.system.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.water.system.entity.SysRole; +import org.apache.ibatis.annotations.Mapper; +@Mapper public interface SysRoleMapper extends BaseMapper {} diff --git a/wm-system/src/main/java/com/water/system/mapper/SysUserMapper.java b/wm-system/src/main/java/com/water/system/mapper/SysUserMapper.java new file mode 100644 index 00000000..8cd04f51 --- /dev/null +++ b/wm-system/src/main/java/com/water/system/mapper/SysUserMapper.java @@ -0,0 +1,5 @@ +package com.water.system.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.water.system.entity.SysUser; +import org.apache.ibatis.annotations.Mapper; +@Mapper public interface SysUserMapper extends BaseMapper {} diff --git a/wm-system/src/main/java/com/water/system/service/DocService.java b/wm-system/src/main/java/com/water/system/service/DocService.java new file mode 100644 index 00000000..e4ff50f0 --- /dev/null +++ b/wm-system/src/main/java/com/water/system/service/DocService.java @@ -0,0 +1,44 @@ +package com.water.system.service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.water.system.entity.*; +import com.water.system.mapper.*; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import java.util.*; +@Service @RequiredArgsConstructor +public class DocService { + private final DocumentMapper docMapper; + private final DocumentCategoryMapper catMapper; + private final DocumentVersionMapper verMapper; + + public List listDocs(String categoryId, String keyword) { + LambdaQueryWrapper w = new LambdaQueryWrapper<>(); + if (categoryId != null) w.eq(Document::getCategoryId, categoryId); + if (keyword != null) w.like(Document::getName, keyword); + return docMapper.selectList(w); + } + public Document getDoc(Long id) { return docMapper.selectById(id); } + public Long createDoc(Map req) { + Document d = new Document(); + d.setName((String)req.get("name")); + d.setCategoryId(req.get("categoryId") != null ? ((Number)req.get("categoryId")).longValue() : null); + d.setFileType((String)req.get("fileType")); + d.setFilePath((String)req.get("filePath")); + d.setStatus(1); + docMapper.insert(d); + return d.getId(); + } + public void updateDoc(Long id, Map req) { + Document d = docMapper.selectById(id); + if (d == null) throw new RuntimeException("文档不存在"); + if (req.containsKey("name")) d.setName((String)req.get("name")); + if (req.containsKey("categoryId")) d.setCategoryId(((Number)req.get("categoryId")).longValue()); + docMapper.updateById(d); + } + public void deleteDoc(Long id) { docMapper.deleteById(id); } + public List listCategories() { return catMapper.selectList(null); } + public List getVersions(Long docId) { + return verMapper.selectList(new LambdaQueryWrapper() + .eq(DocumentVersion::getDocId, docId).orderByDesc(DocumentVersion::getVersionNo)); + } +} diff --git a/wm-system/src/main/java/com/water/system/service/SysService.java b/wm-system/src/main/java/com/water/system/service/SysService.java new file mode 100644 index 00000000..a666324e --- /dev/null +++ b/wm-system/src/main/java/com/water/system/service/SysService.java @@ -0,0 +1,67 @@ +package com.water.system.service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.water.system.entity.*; +import com.water.system.mapper.*; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import java.util.*; +@Service @RequiredArgsConstructor +public class SysService { + private final SysRoleMapper roleMapper; + private final SysUserMapper userMapper; + private final SysMenuMapper menuMapper; + private final SysDepartmentMapper deptMapper; + private final SysLogMapper logMapper; + + // Roles + public List listRoles() { return roleMapper.selectList(null); } + public Long createRole(Map req) { + SysRole r = new SysRole(); + r.setRoleCode((String)req.get("roleCode")); + r.setRoleName((String)req.get("roleName")); + r.setDescription((String)req.get("description")); + r.setStatus(1); r.setSort(0); + roleMapper.insert(r); + return r.getId(); + } + // Users + public List listUsers(Integer status) { + return userMapper.selectList(new LambdaQueryWrapper() + .eq(status != null, SysUser::getStatus, status)); + } + public Long createUser(Map req) { + SysUser u = new SysUser(); + u.setUsername((String)req.get("username")); + u.setPassword((String)req.get("password")); + u.setRealName((String)req.get("realName")); + u.setPhone((String)req.get("phone")); + u.setStatus(1); + userMapper.insert(u); + return u.getId(); + } + public void updateUserStatus(Long id, int status) { + SysUser u = userMapper.selectById(id); + if (u == null) throw new RuntimeException("用户不存在"); + u.setStatus(status); + userMapper.updateById(u); + } + // Menus + public List listMenus() { return menuMapper.selectList(null); } + // Departments + public List listDepts() { return deptMapper.selectList(null); } + public Long createDept(Map req) { + SysDepartment d = new SysDepartment(); + d.setDeptName((String)req.get("deptName")); + d.setLeader((String)req.get("leader")); + d.setSort(0); d.setStatus(1); + deptMapper.insert(d); + return d.getId(); + } + // Logs + public List listLogs(String logType, String username) { + LambdaQueryWrapper w = new LambdaQueryWrapper<>(); + if (logType != null) w.eq(SysLog::getLogType, logType); + if (username != null) w.like(SysLog::getUsername, username); + return logMapper.selectList(w.orderByDesc(SysLog::getCreatedTime).last("LIMIT 100")); + } +} diff --git a/wm-system/src/main/resources/application.yml b/wm-system/src/main/resources/application.yml new file mode 100644 index 00000000..612e6b4a --- /dev/null +++ b/wm-system/src/main/resources/application.yml @@ -0,0 +1,40 @@ +server: + port: 8084 + +spring: + application: + name: wm-system + datasource: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://${DB_HOST:localhost}:${DB_PORT:5432}/${DB_NAME:water_system}?currentSchema=public + username: ${DB_USER:postgres} + password: ${DB_PASS:postgres} + servlet: + multipart: + max-file-size: 100MB + max-request-size: 100MB + +mybatis-plus: + configuration: + map-underscore-to-camel-case: true + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + global-config: + db-config: + logic-delete-field: deleted + logic-delete-value: 1 + logic-not-delete-value: 0 + +minio: + endpoint: ${MINIO_ENDPOINT:http://localhost:9000} + access-key: ${MINIO_ACCESS_KEY:minioadmin} + secret-key: ${MINIO_SECRET_KEY:minioadmin} + bucket-name: ${MINIO_BUCKET:water-documents} + +sa-token: + token-name: Authorization + timeout: 86400 + active-timeout: 1800 + +logging: + level: + com.water.system: debug diff --git a/wm-system/src/main/resources/db/V1__system_manage.sql b/wm-system/src/main/resources/db/V1__system_manage.sql new file mode 100644 index 00000000..304d5aac --- /dev/null +++ b/wm-system/src/main/resources/db/V1__system_manage.sql @@ -0,0 +1,45 @@ +CREATE TABLE IF NOT EXISTS sys_document ( + id BIGSERIAL PRIMARY KEY, name VARCHAR(200), category_id BIGINT, + file_type VARCHAR(20), file_size BIGINT, file_path VARCHAR(500), + status INT DEFAULT 1, creator_id BIGINT, + created_time TIMESTAMP DEFAULT NOW(), updated_time TIMESTAMP DEFAULT NOW() +); +CREATE TABLE IF NOT EXISTS sys_document_category ( + id BIGSERIAL PRIMARY KEY, name VARCHAR(100), parent_id BIGINT, + sort INT DEFAULT 0, status INT DEFAULT 1, + created_time TIMESTAMP DEFAULT NOW() +); +CREATE TABLE IF NOT EXISTS sys_document_version ( + id BIGSERIAL PRIMARY KEY, doc_id BIGINT, version_no INT, + file_path VARCHAR(500), remark TEXT, + created_time TIMESTAMP DEFAULT NOW() +); +CREATE TABLE IF NOT EXISTS sys_role ( + id BIGSERIAL PRIMARY KEY, role_code VARCHAR(50) UNIQUE, role_name VARCHAR(50), + description VARCHAR(200), status INT DEFAULT 1, sort INT DEFAULT 0, + created_time TIMESTAMP DEFAULT NOW() +); +CREATE TABLE IF NOT EXISTS sys_user ( + id BIGSERIAL PRIMARY KEY, username VARCHAR(50) UNIQUE, password VARCHAR(200), + real_name VARCHAR(50), phone VARCHAR(20), email VARCHAR(100), + dept_id BIGINT, avatar VARCHAR(500), status INT DEFAULT 1, + created_time TIMESTAMP DEFAULT NOW(), updated_time TIMESTAMP DEFAULT NOW() +); +CREATE TABLE IF NOT EXISTS sys_menu ( + id BIGSERIAL PRIMARY KEY, parent_id BIGINT, name VARCHAR(50), + path VARCHAR(200), icon VARCHAR(50), component VARCHAR(200), + permission VARCHAR(100), type INT, sort INT DEFAULT 0, + visible INT DEFAULT 1, status INT DEFAULT 1 +); +CREATE TABLE IF NOT EXISTS sys_department ( + id BIGSERIAL PRIMARY KEY, parent_id BIGINT, dept_name VARCHAR(100), + leader VARCHAR(50), phone VARCHAR(20), sort INT DEFAULT 0, status INT DEFAULT 1 +); +CREATE TABLE IF NOT EXISTS sys_log ( + id BIGSERIAL PRIMARY KEY, user_id BIGINT, username VARCHAR(50), + log_type VARCHAR(20), module VARCHAR(50), action VARCHAR(50), + request_url VARCHAR(500), request_method VARCHAR(10), + request_params TEXT, response_result TEXT, + ip VARCHAR(50), duration BIGINT, + created_time TIMESTAMP DEFAULT NOW() +);