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()
+);