From b45f699c29b72789ed1c8f254de7d591e35f1d92 Mon Sep 17 00:00:00 2001 From: JiaoTianBo Date: Thu, 26 Mar 2026 15:28:51 +0800 Subject: [PATCH] =?UTF-8?q?chore(project):=20=E6=B7=BB=E5=8A=A0=E6=A8=A1?= =?UTF-8?q?=E5=9D=97package-info=E6=96=87=E4=BB=B6=E5=8F=8A=E5=BC=95?= =?UTF-8?q?=E5=85=A5Spring=20AI=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 为AI智能助手、人员分析中心、数据录入中心、项目管理中心、风险管控中心、 系统管理和工单服务中心等子模块添加package-info.java文件,完善模块说明 - 为基础模块、公共配置、常量定义、异常处理、统一响应、工具类等公共包 新增package-info.java文件 - 在pom.xml中引入Spring AI相关依赖,包括spring-ai-openai-spring-boot-starter和 spring-ai-pgvector-store-spring-boot-starter - 添加Spring AI依赖管理版本,统一管理相关依赖版本号 --- docs/dev-ops/mysql/sql/weform_run.sql | 808 ---------- docs/dev-ops/pgsql/sql/weform_run.sql | 1335 +++++++++++++++++ pom.xml | 25 + .../common/base/package-info.java | 5 + .../common/config/package-info.java | 5 + .../common/constant/package-info.java | 5 + .../common/exception/package-info.java | 5 + .../common/result/package-info.java | 5 + .../common/util/package-info.java | 5 + .../controller/ai/client/package-info.java | 5 + .../ai/controller/package-info.java | 5 + .../ai/domain/dto/package-info.java | 4 + .../controller/ai/domain/vo/package-info.java | 4 + .../controller/ai/service/package-info.java | 4 + .../analysis/controller/package-info.java | 5 + .../analysis/domain/dto/package-info.java | 4 + .../analysis/domain/entity/package-info.java | 5 + .../analysis/domain/vo/package-info.java | 4 + .../analysis/mapper/package-info.java | 4 + .../analysis/service/package-info.java | 4 + .../dataentry/controller/package-info.java | 5 + .../dataentry/domain/dto/package-info.java | 4 + .../dataentry/domain/entity/package-info.java | 5 + .../dataentry/domain/vo/package-info.java | 4 + .../dataentry/mapper/package-info.java | 4 + .../dataentry/service/package-info.java | 4 + .../project/controller/package-info.java | 5 + .../project/domain/dto/package-info.java | 4 + .../project/domain/entity/package-info.java | 5 + .../project/domain/vo/package-info.java | 4 + .../project/mapper/package-info.java | 4 + .../project/service/package-info.java | 4 + .../risk/controller/package-info.java | 5 + .../risk/domain/dto/package-info.java | 4 + .../risk/domain/entity/package-info.java | 5 + .../risk/domain/vo/package-info.java | 4 + .../controller/risk/mapper/package-info.java | 4 + .../controller/risk/service/package-info.java | 4 + .../system/controller/package-info.java | 5 + .../system/domain/dto/package-info.java | 4 + .../system/domain/entity/package-info.java | 5 + .../system/domain/vo/package-info.java | 4 + .../system/mapper/package-info.java | 4 + .../system/service/package-info.java | 4 + .../ticket/controller/package-info.java | 5 + .../ticket/domain/dto/package-info.java | 4 + .../ticket/domain/entity/package-info.java | 5 + .../ticket/domain/vo/package-info.java | 4 + .../ticket/mapper/package-info.java | 4 + .../ticket/service/package-info.java | 4 + .../service/ai/client/package-info.java | 5 + .../service/ai/controller/package-info.java | 5 + .../service/ai/domain/dto/package-info.java | 4 + .../service/ai/domain/vo/package-info.java | 4 + .../service/ai/service/package-info.java | 4 + .../analysis/controller/package-info.java | 5 + .../analysis/domain/dto/package-info.java | 4 + .../analysis/domain/entity/package-info.java | 5 + .../analysis/domain/vo/package-info.java | 4 + .../service/analysis/mapper/package-info.java | 4 + .../analysis/service/package-info.java | 4 + .../dataentry/controller/package-info.java | 5 + .../dataentry/domain/dto/package-info.java | 4 + .../dataentry/domain/entity/package-info.java | 5 + .../dataentry/domain/vo/package-info.java | 4 + .../dataentry/mapper/package-info.java | 4 + .../dataentry/service/package-info.java | 4 + .../project/controller/package-info.java | 5 + .../project/domain/dto/package-info.java | 4 + .../project/domain/entity/package-info.java | 5 + .../project/domain/vo/package-info.java | 4 + .../service/project/mapper/package-info.java | 4 + .../service/project/service/package-info.java | 4 + .../service/risk/controller/package-info.java | 5 + .../service/risk/domain/dto/package-info.java | 4 + .../risk/domain/entity/package-info.java | 5 + .../service/risk/domain/vo/package-info.java | 4 + .../service/risk/mapper/package-info.java | 4 + .../service/risk/service/package-info.java | 4 + .../system/controller/package-info.java | 5 + .../system/domain/dto/package-info.java | 4 + .../system/domain/entity/package-info.java | 5 + .../system/domain/vo/package-info.java | 4 + .../service/system/mapper/package-info.java | 4 + .../service/system/service/package-info.java | 4 + .../ticket/controller/package-info.java | 5 + .../ticket/domain/dto/package-info.java | 4 + .../ticket/domain/entity/package-info.java | 5 + .../ticket/domain/vo/package-info.java | 4 + .../service/ticket/mapper/package-info.java | 4 + .../service/ticket/service/package-info.java | 4 + 91 files changed, 1746 insertions(+), 808 deletions(-) delete mode 100644 docs/dev-ops/mysql/sql/weform_run.sql create mode 100644 docs/dev-ops/pgsql/sql/weform_run.sql create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/common/base/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/common/config/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/common/constant/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/common/exception/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/common/result/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/common/util/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ai/client/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ai/controller/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ai/domain/dto/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ai/domain/vo/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ai/service/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/analysis/controller/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/analysis/domain/dto/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/analysis/domain/entity/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/analysis/domain/vo/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/analysis/mapper/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/analysis/service/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/dataentry/controller/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/dataentry/domain/dto/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/dataentry/domain/entity/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/dataentry/domain/vo/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/dataentry/mapper/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/dataentry/service/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/project/controller/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/project/domain/dto/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/project/domain/entity/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/project/domain/vo/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/project/mapper/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/project/service/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/risk/controller/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/risk/domain/dto/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/risk/domain/entity/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/risk/domain/vo/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/risk/mapper/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/risk/service/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/system/controller/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/system/domain/dto/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/system/domain/entity/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/system/domain/vo/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/system/mapper/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/system/service/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ticket/controller/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ticket/domain/dto/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ticket/domain/entity/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ticket/domain/vo/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ticket/mapper/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ticket/service/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ai/client/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ai/controller/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ai/domain/dto/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ai/domain/vo/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ai/service/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/analysis/controller/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/analysis/domain/dto/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/analysis/domain/entity/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/analysis/domain/vo/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/analysis/mapper/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/analysis/service/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/dataentry/controller/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/dataentry/domain/dto/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/dataentry/domain/entity/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/dataentry/domain/vo/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/dataentry/mapper/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/dataentry/service/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/project/controller/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/project/domain/dto/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/project/domain/entity/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/project/domain/vo/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/project/mapper/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/project/service/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/risk/controller/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/risk/domain/dto/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/risk/domain/entity/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/risk/domain/vo/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/risk/mapper/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/risk/service/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/system/controller/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/system/domain/dto/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/system/domain/entity/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/system/domain/vo/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/system/mapper/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/system/service/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ticket/controller/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ticket/domain/dto/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ticket/domain/entity/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ticket/domain/vo/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ticket/mapper/package-info.java create mode 100644 src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ticket/service/package-info.java diff --git a/docs/dev-ops/mysql/sql/weform_run.sql b/docs/dev-ops/mysql/sql/weform_run.sql deleted file mode 100644 index b98fda5..0000000 --- a/docs/dev-ops/mysql/sql/weform_run.sql +++ /dev/null @@ -1,808 +0,0 @@ --- ===================================================== --- AI项目进度与风险管控平台 - 通用版数据库设计 (PostgreSQL + pgvector) --- 适用于各类项目的管理与追踪分析 --- 支持AI原生特性:向量存储、语义搜索、RAG --- ===================================================== - --- 启用pgvector扩展 -CREATE EXTENSION IF NOT EXISTS vector; -CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; - --- 设置时区 -SET timezone = 'Asia/Shanghai'; - --- ===================================================== --- 1. 部门与用户相关表 (简化版:单部门,无多租户) --- ===================================================== - --- 部门表 (单部门架构,简化设计) -DROP TABLE IF EXISTS sys_department; -CREATE TABLE sys_department ( - id BIGSERIAL PRIMARY KEY, - dept_code VARCHAR(50) NOT NULL UNIQUE COMMENT '部门编码', - dept_name VARCHAR(100) NOT NULL COMMENT '部门名称', - parent_id BIGINT DEFAULT NULL COMMENT '父级部门ID', - leader_id BIGINT COMMENT '部门负责人ID', - description TEXT COMMENT '部门描述', - sort_order INT DEFAULT 0 COMMENT '排序', - status SMALLINT DEFAULT 1 COMMENT '状态: 1-正常, 0-禁用', - create_by BIGINT COMMENT '创建人', - create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - update_by BIGINT COMMENT '更新人', - update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', - deleted SMALLINT DEFAULT 0 COMMENT '删除标记', - - CONSTRAINT fk_dept_parent FOREIGN KEY (parent_id) REFERENCES sys_department(id) ON DELETE SET NULL -); - -CREATE INDEX idx_dept_parent ON sys_department(parent_id); -CREATE INDEX idx_dept_status ON sys_department(status); - -COMMENT ON TABLE sys_department IS '部门表 - 单部门架构'; - --- ===================================================== --- 2. 用户与权限相关表 --- ===================================================== - --- 用户表 -DROP TABLE IF EXISTS sys_user; -CREATE TABLE sys_user ( - id BIGSERIAL PRIMARY KEY, - username VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名', - password VARCHAR(200) NOT NULL COMMENT '密码(加密)', - real_name VARCHAR(50) COMMENT '真实姓名', - nickname VARCHAR(50) COMMENT '昵称', - avatar VARCHAR(500) COMMENT '头像URL', - gender SMALLINT DEFAULT 0 COMMENT '性别: 0-未知, 1-男, 2-女', - phone VARCHAR(20) COMMENT '手机号', - email VARCHAR(100) COMMENT '邮箱', - dept_id BIGINT COMMENT '所属部门ID', - position VARCHAR(50) COMMENT '职位', - employee_no VARCHAR(50) COMMENT '工号', - entry_date DATE COMMENT '入职日期', - status SMALLINT DEFAULT 1 COMMENT '状态: 1-正常, 0-禁用, 2-锁定', - last_login_time TIMESTAMP COMMENT '最后登录时间', - last_login_ip VARCHAR(50) COMMENT '最后登录IP', - preferences JSONB COMMENT '用户偏好设置', - extra_data JSONB COMMENT '扩展数据', - create_by BIGINT COMMENT '创建人', - create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - update_by BIGINT COMMENT '更新人', - update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', - deleted SMALLINT DEFAULT 0 COMMENT '删除标记', - - CONSTRAINT fk_user_dept FOREIGN KEY (dept_id) REFERENCES sys_department(id) ON DELETE SET NULL -); - -CREATE INDEX idx_user_dept ON sys_user(dept_id); -CREATE INDEX idx_user_phone ON sys_user(phone); -CREATE INDEX idx_user_status ON sys_user(status); - -COMMENT ON TABLE sys_user IS '用户表'; - --- 角色表 -DROP TABLE IF EXISTS sys_role; -CREATE TABLE sys_role ( - id BIGSERIAL PRIMARY KEY, - role_code VARCHAR(50) NOT NULL UNIQUE COMMENT '角色编码', - role_name VARCHAR(50) NOT NULL COMMENT '角色名称', - role_type VARCHAR(20) DEFAULT 'custom' COMMENT '角色类型: system-系统角色, custom-自定义角色', - description TEXT COMMENT '角色描述', - data_scope SMALLINT DEFAULT 1 COMMENT '数据权限: 1-全部, 2-本部门, 3-本人', - sort_order INT DEFAULT 0 COMMENT '排序', - status SMALLINT DEFAULT 1 COMMENT '状态: 1-正常, 0-禁用', - create_by BIGINT COMMENT '创建人', - create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - update_by BIGINT COMMENT '更新人', - update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', - deleted SMALLINT DEFAULT 0 COMMENT '删除标记' -); - -COMMENT ON TABLE sys_role IS '角色表'; - --- 用户角色关联表 -DROP TABLE IF EXISTS sys_user_role; -CREATE TABLE sys_user_role ( - id BIGSERIAL PRIMARY KEY, - user_id BIGINT NOT NULL COMMENT '用户ID', - role_id BIGINT NOT NULL COMMENT '角色ID', - create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - UNIQUE(user_id, role_id), - CONSTRAINT fk_ur_user FOREIGN KEY (user_id) REFERENCES sys_user(id) ON DELETE CASCADE, - CONSTRAINT fk_ur_role FOREIGN KEY (role_id) REFERENCES sys_role(id) ON DELETE CASCADE -); - -CREATE INDEX idx_ur_role ON sys_user_role(role_id); - -COMMENT ON TABLE sys_user_role IS '用户角色关联表'; - --- 权限表(菜单/功能权限) -DROP TABLE IF EXISTS sys_permission; -CREATE TABLE sys_permission ( - id BIGSERIAL PRIMARY KEY, - parent_id BIGINT DEFAULT NULL COMMENT '父级权限ID', - permission_code VARCHAR(100) NOT NULL UNIQUE COMMENT '权限编码', - permission_name VARCHAR(50) NOT NULL COMMENT '权限名称', - permission_type SMALLINT DEFAULT 1 COMMENT '权限类型: 1-菜单, 2-按钮, 3-接口', - path VARCHAR(200) COMMENT '路由路径', - component VARCHAR(200) COMMENT '组件路径', - icon VARCHAR(50) COMMENT '图标', - api_url VARCHAR(200) COMMENT '接口URL', - api_method VARCHAR(10) COMMENT '接口方法', - sort_order INT DEFAULT 0 COMMENT '排序', - visible SMALLINT DEFAULT 1 COMMENT '是否可见: 1-是, 0-否', - status SMALLINT DEFAULT 1 COMMENT '状态: 1-正常, 0-禁用', - create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', - deleted SMALLINT DEFAULT 0 COMMENT '删除标记', - - CONSTRAINT fk_perm_parent FOREIGN KEY (parent_id) REFERENCES sys_permission(id) ON DELETE SET NULL -); - -CREATE INDEX idx_perm_parent ON sys_permission(parent_id); - -COMMENT ON TABLE sys_permission IS '权限表'; - --- 角色权限关联表 -DROP TABLE IF EXISTS sys_role_permission; -CREATE TABLE sys_role_permission ( - id BIGSERIAL PRIMARY KEY, - role_id BIGINT NOT NULL COMMENT '角色ID', - permission_id BIGINT NOT NULL COMMENT '权限ID', - create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - UNIQUE(role_id, permission_id), - CONSTRAINT fk_rp_role FOREIGN KEY (role_id) REFERENCES sys_role(id) ON DELETE CASCADE, - CONSTRAINT fk_rp_perm FOREIGN KEY (permission_id) REFERENCES sys_permission(id) ON DELETE CASCADE -); - -COMMENT ON TABLE sys_role_permission IS '角色权限关联表'; - --- ===================================================== --- 3. 项目管理核心表 --- ===================================================== - --- 项目表 -DROP TABLE IF EXISTS project; -CREATE TABLE project ( - id BIGSERIAL PRIMARY KEY, - project_code VARCHAR(50) NOT NULL UNIQUE COMMENT '项目编号', - project_name VARCHAR(200) NOT NULL COMMENT '项目名称', - project_type VARCHAR(50) COMMENT '项目类型(如: 研发项目, 工程项目, 运营项目)', - description TEXT COMMENT '项目描述', - objectives TEXT COMMENT '项目目标', - manager_id BIGINT COMMENT '项目经理ID', - sponsor_id BIGINT COMMENT '项目发起人ID', - plan_start_date DATE COMMENT '计划开始日期', - plan_end_date DATE COMMENT '计划结束日期', - actual_start_date DATE COMMENT '实际开始日期', - actual_end_date DATE COMMENT '实际结束日期', - budget DECIMAL(18,2) DEFAULT 0 COMMENT '项目预算', - cost DECIMAL(18,2) DEFAULT 0 COMMENT '已花费金额', - currency VARCHAR(10) DEFAULT 'CNY' COMMENT '币种', - progress INT DEFAULT 0 COMMENT '进度百分比', - status VARCHAR(20) DEFAULT 'draft' COMMENT '状态: draft-草稿, planning-规划中, ongoing-进行中, paused-暂停, completed-已完成, cancelled-已取消', - priority VARCHAR(20) DEFAULT 'medium' COMMENT '优先级: critical-关键, high-高, medium-中, low-低', - risk_level VARCHAR(20) DEFAULT 'low' COMMENT '风险等级: high-高, medium-中, low-低', - visibility SMALLINT DEFAULT 1 COMMENT '可见性: 1-公开, 2-部门内, 3-项目成员', - tags JSONB COMMENT '标签列表', - extra_data JSONB COMMENT '扩展数据(用于存储行业特定字段)', - create_by BIGINT COMMENT '创建人', - create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - update_by BIGINT COMMENT '更新人', - update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', - deleted SMALLINT DEFAULT 0 COMMENT '删除标记', - - CONSTRAINT fk_project_manager FOREIGN KEY (manager_id) REFERENCES sys_user(id) ON DELETE SET NULL -); - -CREATE INDEX idx_project_manager ON project(manager_id); -CREATE INDEX idx_project_status ON project(status); -CREATE INDEX idx_project_risk_level ON project(risk_level); - -COMMENT ON TABLE project IS '项目表'; - --- 项目成员表 -DROP TABLE IF EXISTS `project_member`; -CREATE TABLE `project_member` ( - `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID', - `project_id` BIGINT NOT NULL COMMENT '项目ID', - `user_id` BIGINT NOT NULL COMMENT '用户ID', - `role_code` VARCHAR(50) DEFAULT 'member' COMMENT '项目角色: manager-项目经理, leader-负责人, member-成员, observer-观察者', - `join_date` DATE COMMENT '加入日期', - `leave_date` DATE COMMENT '离开日期', - `responsibility` TEXT COMMENT '职责描述', - `weekly_hours` DECIMAL(5,1) COMMENT '每周投入小时数', - `status` TINYINT DEFAULT 1 COMMENT '状态: 1-正常, 0-已移除', - `create_by` BIGINT COMMENT '创建人', - `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`id`), - UNIQUE KEY `uk_project_user` (`project_id`, `user_id`), - KEY `idx_user_id` (`user_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='项目成员表'; - --- 项目阶段/里程碑表 -DROP TABLE IF EXISTS `project_milestone`; -CREATE TABLE `project_milestone` ( - `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID', - `project_id` BIGINT NOT NULL COMMENT '项目ID', - `milestone_name` VARCHAR(200) NOT NULL COMMENT '里程碑名称', - `description` TEXT COMMENT '描述', - `plan_date` DATE COMMENT '计划日期', - `actual_date` DATE COMMENT '实际日期', - `status` VARCHAR(20) DEFAULT 'pending' COMMENT '状态: pending-待开始, in_progress-进行中, completed-已完成, delayed-延期', - `progress` INT DEFAULT 0 COMMENT '完成进度', - `sort_order` INT DEFAULT 0 COMMENT '排序', - `is_key` TINYINT DEFAULT 0 COMMENT '是否关键里程碑: 1-是, 0-否', - `deliverables` JSON COMMENT '交付物列表', - `extra_data` JSON COMMENT '扩展数据', - `create_by` BIGINT COMMENT '创建人', - `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_by` BIGINT COMMENT '更新人', - `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `deleted` TINYINT DEFAULT 0 COMMENT '删除标记', - PRIMARY KEY (`id`), - KEY `idx_project_id` (`project_id`), - KEY `idx_status` (`status`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='项目里程碑表'; - --- ===================================================== --- 4. 任务管理表 --- ===================================================== - --- 任务表 -DROP TABLE IF EXISTS `task`; -CREATE TABLE `task` ( - `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID', - `task_code` VARCHAR(50) COMMENT '任务编号', - `project_id` BIGINT NOT NULL COMMENT '项目ID', - `milestone_id` BIGINT COMMENT '所属里程碑ID', - `parent_id` BIGINT COMMENT '父任务ID', - `task_name` VARCHAR(200) NOT NULL COMMENT '任务名称', - `description` TEXT COMMENT '任务描述', - `task_type` VARCHAR(50) COMMENT '任务类型', - `assignee_id` BIGINT COMMENT '执行人ID', - `plan_start_date` DATE COMMENT '计划开始日期', - `plan_end_date` DATE COMMENT '计划结束日期', - `actual_start_date` DATE COMMENT '实际开始日期', - `actual_end_date` DATE COMMENT '实际结束日期', - `plan_hours` DECIMAL(8,2) COMMENT '计划工时(小时)', - `actual_hours` DECIMAL(8,2) COMMENT '实际工时(小时)', - `progress` INT DEFAULT 0 COMMENT '进度百分比', - `priority` VARCHAR(20) DEFAULT 'medium' COMMENT '优先级: critical-关键, high-高, medium-中, low-低', - `status` VARCHAR(20) DEFAULT 'pending' COMMENT '状态: pending-待开始, in_progress-进行中, completed-已完成, cancelled-已取消', - `sort_order` INT DEFAULT 0 COMMENT '排序', - `tags` JSON COMMENT '标签', - `attachments` JSON COMMENT '附件列表', - `extra_data` JSON COMMENT '扩展数据', - `create_by` BIGINT COMMENT '创建人', - `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_by` BIGINT COMMENT '更新人', - `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `deleted` TINYINT DEFAULT 0 COMMENT '删除标记', - PRIMARY KEY (`id`), - KEY `idx_project_id` (`project_id`), - KEY `idx_milestone_id` (`milestone_id`), - KEY `idx_parent_id` (`parent_id`), - KEY `idx_assignee_id` (`assignee_id`), - KEY `idx_status` (`status`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务表'; - --- 任务依赖关系表 -DROP TABLE IF EXISTS `task_dependency`; -CREATE TABLE `task_dependency` ( - `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID', - `task_id` BIGINT NOT NULL COMMENT '任务ID', - `depends_on_task_id` BIGINT NOT NULL COMMENT '依赖的任务ID', - `dependency_type` VARCHAR(20) DEFAULT 'finish_to_start' COMMENT '依赖类型: finish_to_start-完成-开始, start_to_start-开始-开始, finish_to_finish-完成-完成, start_to_finish-开始-完成', - `lag_days` INT DEFAULT 0 COMMENT '滞后天数', - `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`), - UNIQUE KEY `uk_task_dependency` (`task_id`, `depends_on_task_id`), - KEY `idx_depends_on` (`depends_on_task_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务依赖关系表'; - --- ===================================================== --- 5. 工单管理表 --- ===================================================== - --- 工单表 (移除order_type_id外键,使用type字段替代) --- 工单可关联风险,用于风险处理 -DROP TABLE IF EXISTS work_order; -CREATE TABLE work_order ( - id BIGSERIAL PRIMARY KEY, - order_code VARCHAR(50) NOT NULL UNIQUE COMMENT '工单编号', - order_type VARCHAR(50) COMMENT '工单类型: bug-缺陷, feature-需求, task-任务, incident-事件, risk_handle-风险处理, other-其他', - project_id BIGINT COMMENT '关联项目ID', - risk_id BIGINT COMMENT '关联风险ID(用于风险处理工单)', - title VARCHAR(200) NOT NULL COMMENT '工单标题', - description TEXT COMMENT '工单描述', - creator_id BIGINT NOT NULL COMMENT '创建人ID', - handler_id BIGINT COMMENT '处理人ID', - handler_group_id BIGINT COMMENT '处理组ID', - priority VARCHAR(20) DEFAULT 'medium' COMMENT '优先级: critical-紧急, high-高, medium-中, low-低', - status VARCHAR(20) DEFAULT 'pending' COMMENT '状态: pending-待处理, assigned-已分派, processing-处理中, resolved-已解决, closed-已关闭, reopened-已重开', - source VARCHAR(50) COMMENT '来源: web-网页, mobile-移动端, api-接口, system-系统生成, risk-风险分派', - deadline TIMESTAMP COMMENT '截止时间', - assigned_time TIMESTAMP COMMENT '分派时间', - first_response_time TIMESTAMP COMMENT '首次响应时间', - resolved_time TIMESTAMP COMMENT '解决时间', - closed_time TIMESTAMP COMMENT '关闭时间', - satisfaction_score INT COMMENT '满意度评分(1-5)', - tags JSONB COMMENT '标签', - attachments JSONB COMMENT '附件列表', - extra_data JSONB COMMENT '扩展数据', - create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', - deleted SMALLINT DEFAULT 0 COMMENT '删除标记', - - CONSTRAINT fk_wo_project FOREIGN KEY (project_id) REFERENCES project(id) ON DELETE SET NULL, - CONSTRAINT fk_wo_risk FOREIGN KEY (risk_id) REFERENCES risk(id) ON DELETE SET NULL -); - -CREATE INDEX idx_wo_project ON work_order(project_id); -CREATE INDEX idx_wo_risk ON work_order(risk_id); -CREATE INDEX idx_wo_creator ON work_order(creator_id); -CREATE INDEX idx_wo_handler ON work_order(handler_id); -CREATE INDEX idx_wo_status ON work_order(status); -CREATE INDEX idx_wo_priority ON work_order(priority); -CREATE INDEX idx_wo_type ON work_order(order_type); - -COMMENT ON TABLE work_order IS '工单表'; - --- 工单流转记录表 -DROP TABLE IF EXISTS work_order_log; -CREATE TABLE work_order_log ( - id BIGSERIAL PRIMARY KEY, - order_id BIGINT NOT NULL COMMENT '工单ID', - action_type VARCHAR(50) NOT NULL COMMENT '操作类型: create-创建, assign-分派, accept-接受, process-处理, resolve-解决, close-关闭, reopen-重开, comment-备注', - from_status VARCHAR(20) COMMENT '原状态', - to_status VARCHAR(20) COMMENT '新状态', - operator_id BIGINT COMMENT '操作人ID', - content TEXT COMMENT '操作内容', - attachments JSONB COMMENT '附件列表', - create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - - CONSTRAINT fk_wol_order FOREIGN KEY (order_id) REFERENCES work_order(id) ON DELETE CASCADE -); - -CREATE INDEX idx_wol_order ON work_order_log(order_id); -CREATE INDEX idx_wol_operator ON work_order_log(operator_id); - -COMMENT ON TABLE work_order_log IS '工单流转记录表'; - --- ===================================================== --- 6. 风险管理表 --- ===================================================== - --- 风险表 (移除category_id外键,使用category字符串字段) --- 风险通过分派工单处理,工单完成后同步更新风险状态 -DROP TABLE IF EXISTS risk; -CREATE TABLE risk ( - id BIGSERIAL PRIMARY KEY, - risk_code VARCHAR(50) COMMENT '风险编号', - project_id BIGINT NOT NULL COMMENT '项目ID', - category VARCHAR(50) COMMENT '风险分类: technical-技术风险, schedule-进度风险, cost-成本风险, quality-质量风险, resource-资源风险, external-外部风险, other-其他', - risk_name VARCHAR(200) NOT NULL COMMENT '风险名称', - description TEXT COMMENT '风险描述', - risk_source VARCHAR(50) COMMENT '风险来源: internal-内部, external-外部, ai_detection-AI检测', - risk_type VARCHAR(50) COMMENT '风险类型', - probability DECIMAL(5,2) COMMENT '发生概率(0-100%)', - impact DECIMAL(5,2) COMMENT '影响程度(1-5)', - risk_score DECIMAL(5,2) COMMENT '风险得分(概率*影响)', - risk_level VARCHAR(20) DEFAULT 'low' COMMENT '风险等级: critical-严重, high-高, medium-中, low-低', - status VARCHAR(20) DEFAULT 'identified' COMMENT '状态: identified-已识别, assigned-已分派工单, mitigating-缓解中, resolved-已解决, closed-已关闭', - owner_id BIGINT COMMENT '负责人ID', - - -- 工单关联(风险分派的工单ID列表) - work_order_ids BIGINT[] COMMENT '关联的工单ID数组', - - mitigation_plan TEXT COMMENT '缓解措施', - contingency_plan TEXT COMMENT '应急计划', - trigger_condition TEXT COMMENT '触发条件', - discover_time TIMESTAMP COMMENT '发现时间', - due_date DATE COMMENT '预期解决日期', - resolved_time TIMESTAMP COMMENT '解决时间', - ai_analysis JSONB COMMENT 'AI分析结果', - tags JSONB COMMENT '标签', - extra_data JSONB COMMENT '扩展数据', - create_by BIGINT COMMENT '创建人', - create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - update_by BIGINT COMMENT '更新人', - update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', - deleted SMALLINT DEFAULT 0 COMMENT '删除标记', - - CONSTRAINT fk_risk_project FOREIGN KEY (project_id) REFERENCES project(id) ON DELETE CASCADE -); - -CREATE INDEX idx_risk_project ON risk(project_id); -CREATE INDEX idx_risk_category ON risk(category); -CREATE INDEX idx_risk_owner ON risk(owner_id); -CREATE INDEX idx_risk_level ON risk(risk_level); -CREATE INDEX idx_risk_status ON risk(status); - -COMMENT ON TABLE risk IS '风险表'; - --- 注:风险通过分派工单进行处理,工单处理完成后同步更新风险状态 --- 因此不需要单独的风险处理记录表,处理历史在工单流转记录中查看 - --- ===================================================== --- 7. 数据录入与报告表 --- ===================================================== - --- 日报/数据录入表 -DROP TABLE IF EXISTS `daily_report`; -CREATE TABLE `daily_report` ( - `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID', - `project_id` BIGINT NOT NULL COMMENT '项目ID', - `creator_id` BIGINT NOT NULL COMMENT '创建人ID', - `report_date` DATE COMMENT '报告日期', - `report_type` VARCHAR(50) DEFAULT 'daily' COMMENT '报告类型: daily-日报, weekly-周报, monthly-月报, milestone-里程碑报告, photo-照片记录', - `title` VARCHAR(200) COMMENT '标题', - `content` TEXT COMMENT '内容', - `work_content` TEXT COMMENT '工作内容', - `issues` TEXT COMMENT '问题与风险', - `next_plan` TEXT COMMENT '下一步计划', - `location` VARCHAR(200) COMMENT '位置', - `latitude` DECIMAL(10,7) COMMENT '纬度', - `longitude` DECIMAL(10,7) COMMENT '经度', - `weather` VARCHAR(50) COMMENT '天气', - `temperature` DECIMAL(5,2) COMMENT '温度', - `status` VARCHAR(20) DEFAULT 'draft' COMMENT '状态: draft-草稿, submitted-已提交, approved-已审批', - `ai_analysis` JSON COMMENT 'AI分析结果', - `tags` JSON COMMENT '标签', - `extra_data` JSON COMMENT '扩展数据', - `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `deleted` TINYINT DEFAULT 0 COMMENT '删除标记', - PRIMARY KEY (`id`), - KEY `idx_project_id` (`project_id`), - KEY `idx_creator_id` (`creator_id`), - KEY `idx_report_date` (`report_date`), - KEY `idx_report_type` (`report_type`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='日报/数据录入表'; - --- 文件附件表 -DROP TABLE IF EXISTS `file_attachment`; -CREATE TABLE `file_attachment` ( - `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID', - `file_name` VARCHAR(200) NOT NULL COMMENT '文件名称', - `original_name` VARCHAR(200) COMMENT '原始文件名', - `file_path` VARCHAR(500) NOT NULL COMMENT '文件路径', - `file_url` VARCHAR(500) COMMENT '文件URL', - `file_type` VARCHAR(50) COMMENT '文件类型(MIME)', - `file_size` BIGINT COMMENT '文件大小(字节)', - `storage_type` VARCHAR(20) DEFAULT 'local' COMMENT '存储类型: local-本地, oss-对象存储, minio-MinIO', - `related_type` VARCHAR(50) COMMENT '关联类型: project, task, work_order, risk, report', - `related_id` BIGINT COMMENT '关联ID', - `uploader_id` BIGINT COMMENT '上传人ID', - `exif_data` JSON COMMENT 'EXIF信息(照片专用)', - `ai_analysis` JSON COMMENT 'AI分析结果', - `extra_data` JSON COMMENT '扩展数据', - `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `deleted` TINYINT DEFAULT 0 COMMENT '删除标记', - PRIMARY KEY (`id`), - KEY `idx_related` (`related_type`, `related_id`), - KEY `idx_uploader_id` (`uploader_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='文件附件表'; - --- ===================================================== --- 8. 资源管理表 --- ===================================================== - --- 资源表(项目资源抽象: 人力、物料、设备、资金等) --- 简化设计:移除resource_type表,使用resource_type字符串字段 -DROP TABLE IF EXISTS resource; -CREATE TABLE resource ( - id BIGSERIAL PRIMARY KEY, - resource_code VARCHAR(50) COMMENT '资源编号', - project_id BIGINT NOT NULL COMMENT '项目ID', - resource_type VARCHAR(50) COMMENT '资源类型: human-人力, material-物料, equipment-设备, software-软件, finance-资金, other-其他', - resource_name VARCHAR(200) NOT NULL COMMENT '资源名称', - description TEXT COMMENT '资源描述', - specification VARCHAR(200) COMMENT '规格型号', - unit VARCHAR(20) COMMENT '单位', - plan_quantity DECIMAL(12,2) COMMENT '计划数量', - actual_quantity DECIMAL(12,2) COMMENT '实际数量', - unit_price DECIMAL(12,2) COMMENT '单价', - currency VARCHAR(10) DEFAULT 'CNY' COMMENT '币种', - supplier VARCHAR(200) COMMENT '供应商/来源', - status VARCHAR(20) DEFAULT 'planned' COMMENT '状态: planned-计划中, requested-已申请, approved-已批准, procuring-采购中, arrived-已到货, in_use-使用中, completed-已完成', - plan_arrive_date DATE COMMENT '计划到位日期', - actual_arrive_date DATE COMMENT '实际到位日期', - responsible_id BIGINT COMMENT '负责人ID', - location VARCHAR(200) COMMENT '存放位置', - tags JSONB COMMENT '标签', - extra_data JSONB COMMENT '扩展数据', - create_by BIGINT COMMENT '创建人', - create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - update_by BIGINT COMMENT '更新人', - update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', - deleted SMALLINT DEFAULT 0 COMMENT '删除标记', - - CONSTRAINT fk_resource_project FOREIGN KEY (project_id) REFERENCES project(id) ON DELETE CASCADE -); - -CREATE INDEX idx_resource_project ON resource(project_id); -CREATE INDEX idx_resource_type ON resource(resource_type); -CREATE INDEX idx_resource_status ON resource(status); - -COMMENT ON TABLE resource IS '资源表 - 项目资源统一管理(人力、物料、设备、资金等)'; - --- ===================================================== --- 9. 流程卡点分析表 --- ===================================================== - --- 流程卡点记录表 -DROP TABLE IF EXISTS `bottleneck_record`; -CREATE TABLE `bottleneck_record` ( - `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID', - `project_id` BIGINT NOT NULL COMMENT '项目ID', - `user_id` BIGINT NOT NULL COMMENT '用户ID', - `bottleneck_type` VARCHAR(50) NOT NULL COMMENT '卡点类型: resource-资源不足, approval-审批延迟, dependency-依赖阻塞, skill-技能不足, external-外部因素, other-其他', - `related_type` VARCHAR(50) COMMENT '关联类型: task, work_order, risk', - `related_id` BIGINT COMMENT '关联ID', - `description` TEXT COMMENT '卡点描述', - `impact_level` VARCHAR(20) DEFAULT 'medium' COMMENT '影响程度: critical-严重, high-高, medium-中, low-低', - `status` VARCHAR(20) DEFAULT 'pending' COMMENT '状态: pending-待处理, resolving-解决中, resolved-已解决', - `start_time` DATETIME COMMENT '卡点开始时间', - `resolved_time` DATETIME COMMENT '解决时间', - `duration_hours` DECIMAL(8,2) COMMENT '持续时长(小时)', - `solution` TEXT COMMENT '解决方案', - `extra_data` JSON COMMENT '扩展数据', - `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`id`), - KEY `idx_project_id` (`project_id`), - KEY `idx_user_id` (`user_id`), - KEY `idx_bottleneck_type` (`bottleneck_type`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='流程卡点记录表'; - --- ===================================================== --- 10. AI服务相关表 --- ===================================================== - --- AI文档向量表 (用于RAG知识库) -DROP TABLE IF EXISTS ai_document; -CREATE TABLE ai_document ( - id BIGSERIAL PRIMARY KEY, - doc_id UUID DEFAULT uuid_generate_v4() COMMENT '文档唯一标识', - - -- 关联关系 - project_id BIGINT COMMENT '关联项目ID', - timeline_node_id BIGINT COMMENT '关联时间节点ID', - kb_id BIGINT COMMENT '关联知识库ID', - -- 文档来源 - source_type VARCHAR(50) NOT NULL COMMENT '来源类型: project-项目文档, risk-风险文档, ticket-工单, report-日报, upload-上传文件, knowledge-知识库, chat-对话记录', - source_id BIGINT COMMENT '来源记录ID', - - -- 文档内容 - title VARCHAR(500) COMMENT '文档标题', - content TEXT NOT NULL COMMENT '文档内容(纯文本)', - content_raw TEXT COMMENT '原始内容(带格式)', - summary TEXT COMMENT 'AI生成的摘要', - - -- 向量嵌入 (1536维适配OpenAI, 可调整为其他维度) - embedding vector(1536) COMMENT '向量嵌入', - - -- 文档元数据 - doc_type VARCHAR(50) COMMENT '文档类型: requirement-需求, design-设计, plan-计划, report-报告, contract-合同, photo-照片, other-其他', - language VARCHAR(10) DEFAULT 'zh' COMMENT '语言: zh-中文, en-英文', - file_type VARCHAR(50) COMMENT '文件类型: pdf, doc, txt, md, jpg, png等', - file_size BIGINT COMMENT '文件大小(字节)', - file_path VARCHAR(500) COMMENT '文件存储路径', - - -- 时间信息 (用于时间维度检索) - doc_date DATE COMMENT '文档日期(如日报日期、照片拍摄日期)', - doc_datetime TIMESTAMP COMMENT '文档时间戳', - - -- 分块信息(大文档分块存储) - chunk_index INT DEFAULT 0 COMMENT '分块序号', - chunk_total INT DEFAULT 1 COMMENT '总分块数', - chunk_parent_id BIGINT COMMENT '父文档ID(分块时使用)', - - -- 标签和分类 - tags JSONB COMMENT '标签数组', - category VARCHAR(100) COMMENT '分类', - - -- 使用统计 - view_count INT DEFAULT 0 COMMENT '查看次数', - query_count INT DEFAULT 0 COMMENT '被检索次数', - last_queried_at TIMESTAMP COMMENT '最后被检索时间', - - -- 状态 - status VARCHAR(20) DEFAULT 'active' COMMENT '状态: active-可用, processing-处理中, error-错误, archived-归档', - error_message TEXT COMMENT '错误信息', - - -- 创建信息 - create_by BIGINT COMMENT '创建人', - create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - update_by BIGINT COMMENT '更新人', - update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', - deleted SMALLINT DEFAULT 0 COMMENT '删除标记', - - -- 外键约束 - CONSTRAINT fk_ai_doc_project FOREIGN KEY (project_id) REFERENCES project(id) ON DELETE SET NULL, - CONSTRAINT fk_ai_doc_timeline FOREIGN KEY (timeline_node_id) REFERENCES project_timeline(id) ON DELETE SET NULL, - CONSTRAINT fk_ai_doc_kb FOREIGN KEY (kb_id) REFERENCES ai_knowledge_base(id) ON DELETE SET NULL -); - --- 创建向量索引 (使用IVFFlat或HNSW) --- IVFFlat: 适合中等数据量, 内存占用小 --- HNSW: 适合大数据量, 查询更快但内存占用大 -CREATE INDEX idx_ai_document_embedding ON ai_document - USING ivfflat (embedding vector_cosine_ops) - WITH (lists = 100); - --- 创建其他常用索引 -CREATE INDEX idx_ai_doc_project ON ai_document(project_id) WHERE deleted = 0; -CREATE INDEX idx_ai_doc_timeline ON ai_document(timeline_node_id) WHERE deleted = 0; -CREATE INDEX idx_ai_doc_kb ON ai_document(kb_id) WHERE deleted = 0; -CREATE INDEX idx_ai_doc_source ON ai_document(source_type, source_id) WHERE deleted = 0; -CREATE INDEX idx_ai_doc_status ON ai_document(status); -CREATE INDEX idx_ai_doc_type ON ai_document(doc_type); -CREATE INDEX idx_ai_doc_tags ON ai_document USING GIN(tags); - -COMMENT ON TABLE ai_document IS 'AI文档向量表 - 存储所有用于RAG的文档向量'; - --- AI对话记录表 (合并会话管理功能,无需单独的session表) -DROP TABLE IF EXISTS ai_chat_history; -CREATE TABLE ai_chat_history ( - id BIGSERIAL PRIMARY KEY, - - -- 会话标识 (使用UUID标识一个会话,无需单独的session表) - session_id UUID NOT NULL COMMENT '会话ID(同一session_id的消息属于同一会话)', - session_title VARCHAR(200) COMMENT '会话标题(首条消息自动生成)', - - user_id BIGINT NOT NULL COMMENT '用户ID', - project_id BIGINT COMMENT '关联项目ID', - timeline_node_id BIGINT COMMENT '关联时间节点ID', - - -- 消息内容 - role VARCHAR(20) NOT NULL COMMENT '角色: user-用户, assistant-助手, system-系统', - content TEXT NOT NULL COMMENT '对话内容', - content_embedding vector(1536) COMMENT '对话内容的向量表示(用于语义检索历史对话)', - - -- 引用的知识库文档 - referenced_doc_ids BIGINT[] COMMENT '引用的文档ID列表', - - -- 上下文配置 - system_prompt TEXT COMMENT '系统提示词(仅role=system时有值)', - context_window INT DEFAULT 10 COMMENT '该会话的上下文窗口大小', - kb_ids JSONB COMMENT '关联的知识库ID列表', - - -- 模型信息 - model VARCHAR(50) COMMENT '使用的模型', - tokens_used INT COMMENT '消耗Token数', - response_time INT COMMENT '响应时间(ms)', - - -- 用户反馈 - feedback_score INT COMMENT '反馈评分(1-5)', - feedback_content TEXT COMMENT '反馈内容', - - -- 统计 - message_index INT DEFAULT 0 COMMENT '消息在会话中的序号', - - create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - - CONSTRAINT fk_chat_project FOREIGN KEY (project_id) REFERENCES project(id) ON DELETE SET NULL, - CONSTRAINT fk_chat_timeline FOREIGN KEY (timeline_node_id) REFERENCES project_timeline(id) ON DELETE SET NULL -); - --- 索引 -CREATE INDEX idx_chat_session ON ai_chat_history(session_id); -CREATE INDEX idx_chat_user ON ai_chat_history(user_id); -CREATE INDEX idx_chat_project ON ai_chat_history(project_id); -CREATE INDEX idx_chat_timeline ON ai_chat_history(timeline_node_id); -CREATE INDEX idx_chat_time ON ai_chat_history(create_time); -CREATE INDEX idx_chat_role ON ai_chat_history(session_id, role); - -COMMENT ON TABLE ai_chat_history IS 'AI对话记录表 - 包含会话管理功能'; - --- AI分析结果表 -DROP TABLE IF EXISTS ai_analysis_result; -CREATE TABLE ai_analysis_result ( - id BIGSERIAL PRIMARY KEY, - analysis_type VARCHAR(50) NOT NULL COMMENT '分析类型: photo_analysis-照片分析, risk_prediction-风险预测, progress_analysis-进度分析, text_extraction-文本提取, embedding-向量生成', - related_type VARCHAR(50) COMMENT '关联类型', - related_id BIGINT COMMENT '关联ID', - - -- 输入输出 - input_data JSONB COMMENT '输入数据', - result_data JSONB COMMENT '分析结果', - result_embedding vector(1536) COMMENT '分析结果的向量表示', - - -- 模型信息 - confidence DECIMAL(5,2) COMMENT '置信度(0-100%)', - model_name VARCHAR(100) COMMENT '模型名称', - model_version VARCHAR(50) COMMENT '模型版本', - processing_time INT COMMENT '处理时间(ms)', - - -- 成本和Token - input_tokens INT COMMENT '输入token数', - output_tokens INT COMMENT '输出token数', - cost DECIMAL(10,6) COMMENT '成本(美元)', - - status VARCHAR(20) DEFAULT 'completed' COMMENT '状态: processing-处理中, completed-已完成, failed-失败', - error_message TEXT COMMENT '错误信息', - - create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - - CONSTRAINT fk_analysis_project FOREIGN KEY (related_id) REFERENCES project(id) ON DELETE SET NULL -); - -CREATE INDEX idx_analysis_type ON ai_analysis_result(analysis_type); -CREATE INDEX idx_analysis_related ON ai_analysis_result(related_type, related_id); -CREATE INDEX idx_analysis_time ON ai_analysis_result(create_time); - -COMMENT ON TABLE ai_analysis_result IS 'AI分析结果表'; - --- ===================================================== --- 11. 系统配置与日志表 --- ===================================================== - --- 系统配置表 -DROP TABLE IF EXISTS sys_config; -CREATE TABLE sys_config ( - id BIGSERIAL PRIMARY KEY, - config_key VARCHAR(100) NOT NULL UNIQUE COMMENT '配置键', - config_value TEXT COMMENT '配置值', - config_type VARCHAR(50) DEFAULT 'system' COMMENT '配置类型: system-系统, business-业务, ai-AI配置', - description TEXT COMMENT '配置描述', - status SMALLINT DEFAULT 1 COMMENT '状态', - create_by BIGINT COMMENT '创建人', - create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - update_by BIGINT COMMENT '更新人', - update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', - deleted SMALLINT DEFAULT 0 COMMENT '删除标记' -); - -COMMENT ON TABLE sys_config IS '系统配置表'; - --- 操作日志表 -DROP TABLE IF EXISTS sys_operation_log; -CREATE TABLE sys_operation_log ( - id BIGSERIAL PRIMARY KEY, - trace_id VARCHAR(100) COMMENT '追踪ID', - user_id BIGINT COMMENT '用户ID', - `module` VARCHAR(50) COMMENT '模块', - `operation` VARCHAR(100) COMMENT '操作', - `method` VARCHAR(200) COMMENT '方法', - `request_url` VARCHAR(500) COMMENT '请求URL', - `request_method` VARCHAR(10) COMMENT '请求方法', - `request_params` TEXT COMMENT '请求参数', - `response_data` TEXT COMMENT '响应数据', - `ip` VARCHAR(50) COMMENT 'IP地址', - `user_agent` VARCHAR(500) COMMENT '用户代理', - `execute_time` INT COMMENT '执行时长(ms)', - `status` TINYINT DEFAULT 1 COMMENT '状态: 1-成功, 0-失败', - `error_msg` TEXT COMMENT '错误信息', - `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`), - KEY `idx_trace_id` (`trace_id`), - KEY `idx_user_id` (`user_id`), - KEY `idx_module` (`module`), - KEY `idx_create_time` (`create_time`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='操作日志表'; - --- 通知消息表 -DROP TABLE IF EXISTS `sys_notification`; -CREATE TABLE `sys_notification` ( - `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID', - `user_id` BIGINT NOT NULL COMMENT '接收用户ID', - `title` VARCHAR(200) NOT NULL COMMENT '标题', - `content` TEXT COMMENT '内容', - `notification_type` VARCHAR(50) COMMENT '通知类型: system-系统, task-任务, risk-风险, work_order-工单', - `related_type` VARCHAR(50) COMMENT '关联类型', - `related_id` BIGINT COMMENT '关联ID', - `priority` VARCHAR(20) DEFAULT 'normal' COMMENT '优先级: urgent-紧急, high-高, normal-普通, low-低', - `is_read` TINYINT DEFAULT 0 COMMENT '是否已读: 1-是, 0-否', - `read_time` DATETIME COMMENT '阅读时间', - `sender_id` BIGINT COMMENT '发送人ID', - `extra_data` JSON COMMENT '扩展数据', - `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`), - KEY `idx_user_id` (`user_id`), - KEY `idx_is_read` (`is_read`), - KEY `idx_create_time` (`create_time`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='通知消息表'; \ No newline at end of file diff --git a/docs/dev-ops/pgsql/sql/weform_run.sql b/docs/dev-ops/pgsql/sql/weform_run.sql new file mode 100644 index 0000000..d7612e6 --- /dev/null +++ b/docs/dev-ops/pgsql/sql/weform_run.sql @@ -0,0 +1,1335 @@ +-- ===================================================== +-- AI项目进度与风险管控平台 - 通用版数据库设计 (PostgreSQL + pgvector) +-- 适用于各类项目的管理与追踪分析 +-- 支持AI原生特性:向量存储、语义搜索、RAG +-- ===================================================== + +-- 启用pgvector扩展 +CREATE EXTENSION IF NOT EXISTS vector; +CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; + +-- 设置时区 +SET timezone = 'Asia/Shanghai'; + +-- ===================================================== +-- 1. 部门与用户相关表 (简化版:单部门,无多租户) +-- ===================================================== + +-- 部门表 (单部门架构,简化设计) +DROP TABLE IF EXISTS sys_department CASCADE; +CREATE TABLE sys_department ( + id BIGSERIAL PRIMARY KEY, + dept_code VARCHAR(50) NOT NULL UNIQUE, + dept_name VARCHAR(100) NOT NULL, + parent_id BIGINT DEFAULT NULL, + leader_id BIGINT, + description TEXT, + sort_order INT DEFAULT 0, + status SMALLINT DEFAULT 1, + create_by BIGINT, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by BIGINT, + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + deleted SMALLINT DEFAULT 0, + + CONSTRAINT fk_dept_parent FOREIGN KEY (parent_id) REFERENCES sys_department(id) ON DELETE SET NULL +); + +CREATE INDEX idx_dept_parent ON sys_department(parent_id); +CREATE INDEX idx_dept_status ON sys_department(status); + +COMMENT ON TABLE sys_department IS '部门表 - 单部门架构'; +COMMENT ON COLUMN sys_department.dept_code IS '部门编码'; +COMMENT ON COLUMN sys_department.dept_name IS '部门名称'; +COMMENT ON COLUMN sys_department.parent_id IS '父级部门ID'; +COMMENT ON COLUMN sys_department.leader_id IS '部门负责人ID'; +COMMENT ON COLUMN sys_department.description IS '部门描述'; +COMMENT ON COLUMN sys_department.sort_order IS '排序'; +COMMENT ON COLUMN sys_department.status IS '状态: 1-正常, 0-禁用'; +COMMENT ON COLUMN sys_department.create_by IS '创建人'; +COMMENT ON COLUMN sys_department.create_time IS '创建时间'; +COMMENT ON COLUMN sys_department.update_by IS '更新人'; +COMMENT ON COLUMN sys_department.update_time IS '更新时间'; +COMMENT ON COLUMN sys_department.deleted IS '删除标记'; + +-- ===================================================== +-- 2. 用户与权限相关表 +-- ===================================================== + +-- 用户表 +DROP TABLE IF EXISTS sys_user CASCADE; +CREATE TABLE sys_user ( + id BIGSERIAL PRIMARY KEY, + username VARCHAR(50) NOT NULL UNIQUE, + password VARCHAR(200) NOT NULL, + real_name VARCHAR(50), + nickname VARCHAR(50), + avatar VARCHAR(500), + gender SMALLINT DEFAULT 0, + phone VARCHAR(20), + email VARCHAR(100), + dept_id BIGINT, + position VARCHAR(50), + employee_no VARCHAR(50), + entry_date DATE, + status SMALLINT DEFAULT 1, + last_login_time TIMESTAMP, + last_login_ip VARCHAR(50), + preferences JSONB, + extra_data JSONB, + create_by BIGINT, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by BIGINT, + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + deleted SMALLINT DEFAULT 0, + + CONSTRAINT fk_user_dept FOREIGN KEY (dept_id) REFERENCES sys_department(id) ON DELETE SET NULL +); + +CREATE INDEX idx_user_dept ON sys_user(dept_id); +CREATE INDEX idx_user_phone ON sys_user(phone); +CREATE INDEX idx_user_status ON sys_user(status); + +COMMENT ON TABLE sys_user IS '用户表'; +COMMENT ON COLUMN sys_user.username IS '用户名'; +COMMENT ON COLUMN sys_user.password IS '密码(加密)'; +COMMENT ON COLUMN sys_user.real_name IS '真实姓名'; +COMMENT ON COLUMN sys_user.nickname IS '昵称'; +COMMENT ON COLUMN sys_user.avatar IS '头像URL'; +COMMENT ON COLUMN sys_user.gender IS '性别: 0-未知, 1-男, 2-女'; +COMMENT ON COLUMN sys_user.phone IS '手机号'; +COMMENT ON COLUMN sys_user.email IS '邮箱'; +COMMENT ON COLUMN sys_user.dept_id IS '所属部门ID'; +COMMENT ON COLUMN sys_user.position IS '职位'; +COMMENT ON COLUMN sys_user.employee_no IS '工号'; +COMMENT ON COLUMN sys_user.entry_date IS '入职日期'; +COMMENT ON COLUMN sys_user.status IS '状态: 1-正常, 0-禁用, 2-锁定'; +COMMENT ON COLUMN sys_user.last_login_time IS '最后登录时间'; +COMMENT ON COLUMN sys_user.last_login_ip IS '最后登录IP'; +COMMENT ON COLUMN sys_user.preferences IS '用户偏好设置'; +COMMENT ON COLUMN sys_user.extra_data IS '扩展数据'; + +-- 角色表 +DROP TABLE IF EXISTS sys_role CASCADE; +CREATE TABLE sys_role ( + id BIGSERIAL PRIMARY KEY, + role_code VARCHAR(50) NOT NULL UNIQUE, + role_name VARCHAR(50) NOT NULL, + role_type VARCHAR(20) DEFAULT 'custom', + description TEXT, + data_scope SMALLINT DEFAULT 1, + sort_order INT DEFAULT 0, + status SMALLINT DEFAULT 1, + create_by BIGINT, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by BIGINT, + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + deleted SMALLINT DEFAULT 0 +); + +COMMENT ON TABLE sys_role IS '角色表'; +COMMENT ON COLUMN sys_role.role_code IS '角色编码'; +COMMENT ON COLUMN sys_role.role_name IS '角色名称'; +COMMENT ON COLUMN sys_role.role_type IS '角色类型: system-系统角色, custom-自定义角色'; +COMMENT ON COLUMN sys_role.description IS '角色描述'; +COMMENT ON COLUMN sys_role.data_scope IS '数据权限: 1-全部, 2-本部门, 3-本人'; +COMMENT ON COLUMN sys_role.sort_order IS '排序'; +COMMENT ON COLUMN sys_role.status IS '状态: 1-正常, 0-禁用'; + +-- 用户角色关联表 +DROP TABLE IF EXISTS sys_user_role CASCADE; +CREATE TABLE sys_user_role ( + id BIGSERIAL PRIMARY KEY, + user_id BIGINT NOT NULL, + role_id BIGINT NOT NULL, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + UNIQUE(user_id, role_id), + CONSTRAINT fk_ur_user FOREIGN KEY (user_id) REFERENCES sys_user(id) ON DELETE CASCADE, + CONSTRAINT fk_ur_role FOREIGN KEY (role_id) REFERENCES sys_role(id) ON DELETE CASCADE +); + +CREATE INDEX idx_ur_role ON sys_user_role(role_id); + +COMMENT ON TABLE sys_user_role IS '用户角色关联表'; +COMMENT ON COLUMN sys_user_role.user_id IS '用户ID'; +COMMENT ON COLUMN sys_user_role.role_id IS '角色ID'; + +-- 权限表(菜单/功能权限) +DROP TABLE IF EXISTS sys_permission CASCADE; +CREATE TABLE sys_permission ( + id BIGSERIAL PRIMARY KEY, + parent_id BIGINT DEFAULT NULL, + permission_code VARCHAR(100) NOT NULL UNIQUE, + permission_name VARCHAR(50) NOT NULL, + permission_type SMALLINT DEFAULT 1, + path VARCHAR(200), + component VARCHAR(200), + icon VARCHAR(50), + api_url VARCHAR(200), + api_method VARCHAR(10), + sort_order INT DEFAULT 0, + visible SMALLINT DEFAULT 1, + status SMALLINT DEFAULT 1, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + deleted SMALLINT DEFAULT 0, + + CONSTRAINT fk_perm_parent FOREIGN KEY (parent_id) REFERENCES sys_permission(id) ON DELETE SET NULL +); + +CREATE INDEX idx_perm_parent ON sys_permission(parent_id); + +COMMENT ON TABLE sys_permission IS '权限表'; +COMMENT ON COLUMN sys_permission.parent_id IS '父级权限ID'; +COMMENT ON COLUMN sys_permission.permission_code IS '权限编码'; +COMMENT ON COLUMN sys_permission.permission_name IS '权限名称'; +COMMENT ON COLUMN sys_permission.permission_type IS '权限类型: 1-菜单, 2-按钮, 3-接口'; +COMMENT ON COLUMN sys_permission.path IS '路由路径'; +COMMENT ON COLUMN sys_permission.component IS '组件路径'; +COMMENT ON COLUMN sys_permission.icon IS '图标'; +COMMENT ON COLUMN sys_permission.api_url IS '接口URL'; +COMMENT ON COLUMN sys_permission.api_method IS '接口方法'; +COMMENT ON COLUMN sys_permission.sort_order IS '排序'; +COMMENT ON COLUMN sys_permission.visible IS '是否可见: 1-是, 0-否'; +COMMENT ON COLUMN sys_permission.status IS '状态: 1-正常, 0-禁用'; + +-- 角色权限关联表 +DROP TABLE IF EXISTS sys_role_permission CASCADE; +CREATE TABLE sys_role_permission ( + id BIGSERIAL PRIMARY KEY, + role_id BIGINT NOT NULL, + permission_id BIGINT NOT NULL, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + UNIQUE(role_id, permission_id), + CONSTRAINT fk_rp_role FOREIGN KEY (role_id) REFERENCES sys_role(id) ON DELETE CASCADE, + CONSTRAINT fk_rp_perm FOREIGN KEY (permission_id) REFERENCES sys_permission(id) ON DELETE CASCADE +); + +COMMENT ON TABLE sys_role_permission IS '角色权限关联表'; +COMMENT ON COLUMN sys_role_permission.role_id IS '角色ID'; +COMMENT ON COLUMN sys_role_permission.permission_id IS '权限ID'; + +-- ===================================================== +-- 3. 项目管理核心表 +-- ===================================================== + +-- 项目表 +DROP TABLE IF EXISTS project CASCADE; +CREATE TABLE project ( + id BIGSERIAL PRIMARY KEY, + project_code VARCHAR(50) NOT NULL UNIQUE, + project_name VARCHAR(200) NOT NULL, + project_type VARCHAR(50), + description TEXT, + objectives TEXT, + manager_id BIGINT, + sponsor_id BIGINT, + plan_start_date DATE, + plan_end_date DATE, + actual_start_date DATE, + actual_end_date DATE, + budget DECIMAL(18,2) DEFAULT 0, + cost DECIMAL(18,2) DEFAULT 0, + currency VARCHAR(10) DEFAULT 'CNY', + progress INT DEFAULT 0, + status VARCHAR(20) DEFAULT 'draft', + priority VARCHAR(20) DEFAULT 'medium', + risk_level VARCHAR(20) DEFAULT 'low', + visibility SMALLINT DEFAULT 1, + tags JSONB, + extra_data JSONB, + create_by BIGINT, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by BIGINT, + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + deleted SMALLINT DEFAULT 0, + + CONSTRAINT fk_project_manager FOREIGN KEY (manager_id) REFERENCES sys_user(id) ON DELETE SET NULL +); + +CREATE INDEX idx_project_manager ON project(manager_id); +CREATE INDEX idx_project_status ON project(status); +CREATE INDEX idx_project_risk_level ON project(risk_level); + +COMMENT ON TABLE project IS '项目表'; +COMMENT ON COLUMN project.project_code IS '项目编号'; +COMMENT ON COLUMN project.project_name IS '项目名称'; +COMMENT ON COLUMN project.project_type IS '项目类型(如: 研发项目, 工程项目, 运营项目)'; +COMMENT ON COLUMN project.description IS '项目描述'; +COMMENT ON COLUMN project.objectives IS '项目目标'; +COMMENT ON COLUMN project.manager_id IS '项目经理ID'; +COMMENT ON COLUMN project.sponsor_id IS '项目发起人ID'; +COMMENT ON COLUMN project.plan_start_date IS '计划开始日期'; +COMMENT ON COLUMN project.plan_end_date IS '计划结束日期'; +COMMENT ON COLUMN project.actual_start_date IS '实际开始日期'; +COMMENT ON COLUMN project.actual_end_date IS '实际结束日期'; +COMMENT ON COLUMN project.budget IS '项目预算'; +COMMENT ON COLUMN project.cost IS '已花费金额'; +COMMENT ON COLUMN project.currency IS '币种'; +COMMENT ON COLUMN project.progress IS '进度百分比'; +COMMENT ON COLUMN project.status IS '状态: draft-草稿, planning-规划中, ongoing-进行中, paused-暂停, completed-已完成, cancelled-已取消'; +COMMENT ON COLUMN project.priority IS '优先级: critical-关键, high-高, medium-中, low-低'; +COMMENT ON COLUMN project.risk_level IS '风险等级: high-高, medium-中, low-低'; +COMMENT ON COLUMN project.visibility IS '可见性: 1-公开, 2-部门内, 3-项目成员'; +COMMENT ON COLUMN project.tags IS '标签列表'; +COMMENT ON COLUMN project.extra_data IS '扩展数据(用于存储行业特定字段)'; + +-- 项目初始化记录表 (记录AI解析项目文档的过程) +DROP TABLE IF EXISTS project_init_record CASCADE; +CREATE TABLE project_init_record ( + id BIGSERIAL PRIMARY KEY, + project_id BIGINT NOT NULL, + + -- 输入信息 + input_files JSONB, + input_text TEXT, + + -- 解析结果 + parse_status VARCHAR(20) DEFAULT 'pending', + parse_result JSONB, + + -- 生成的数据统计 + generated_milestones INT DEFAULT 0, + generated_tasks INT DEFAULT 0, + generated_members INT DEFAULT 0, + generated_resources INT DEFAULT 0, + + -- AI信息 + model VARCHAR(50), + tokens_used INT, + + -- 错误信息 + error_message TEXT, + + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT fk_init_project FOREIGN KEY (project_id) REFERENCES project(id) ON DELETE CASCADE +); + +CREATE INDEX idx_init_project ON project_init_record(project_id); + +COMMENT ON TABLE project_init_record IS '项目初始化记录表 - 记录AI解析项目文档生成项目结构的过程'; +COMMENT ON COLUMN project_init_record.project_id IS '项目ID'; +COMMENT ON COLUMN project_init_record.input_files IS '上传的文件列表[{name, path, type, size}]'; +COMMENT ON COLUMN project_init_record.input_text IS '用户输入的项目描述'; +COMMENT ON COLUMN project_init_record.parse_status IS '状态: pending-待解析, processing-解析中, completed-已完成, failed-失败'; +COMMENT ON COLUMN project_init_record.parse_result IS '解析结果(结构化数据)'; +COMMENT ON COLUMN project_init_record.generated_milestones IS '生成的里程碑数量'; +COMMENT ON COLUMN project_init_record.generated_tasks IS '生成的任务数量'; +COMMENT ON COLUMN project_init_record.generated_members IS '生成的成员数量'; +COMMENT ON COLUMN project_init_record.generated_resources IS '生成的资源数量'; + +-- 项目成员表 +DROP TABLE IF EXISTS project_member CASCADE; +CREATE TABLE project_member ( + id BIGSERIAL PRIMARY KEY, + project_id BIGINT NOT NULL, + user_id BIGINT NOT NULL, + role_code VARCHAR(50) DEFAULT 'member', + join_date DATE, + leave_date DATE, + responsibility TEXT, + weekly_hours DECIMAL(5,1), + status SMALLINT DEFAULT 1, + create_by BIGINT, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + deleted SMALLINT DEFAULT 0, + + UNIQUE(project_id, user_id), + CONSTRAINT fk_pm_project FOREIGN KEY (project_id) REFERENCES project(id) ON DELETE CASCADE, + CONSTRAINT fk_pm_user FOREIGN KEY (user_id) REFERENCES sys_user(id) ON DELETE CASCADE +); + +CREATE INDEX idx_pm_user ON project_member(user_id); + +COMMENT ON TABLE project_member IS '项目成员表'; +COMMENT ON COLUMN project_member.project_id IS '项目ID'; +COMMENT ON COLUMN project_member.user_id IS '用户ID'; +COMMENT ON COLUMN project_member.role_code IS '项目角色: manager-项目经理, leader-负责人, member-成员, observer-观察者'; +COMMENT ON COLUMN project_member.join_date IS '加入日期'; +COMMENT ON COLUMN project_member.leave_date IS '离开日期'; +COMMENT ON COLUMN project_member.responsibility IS '职责描述'; +COMMENT ON COLUMN project_member.weekly_hours IS '每周投入小时数'; +COMMENT ON COLUMN project_member.status IS '状态: 1-正常, 0-已移除'; + +-- 项目阶段/里程碑表 +DROP TABLE IF EXISTS project_milestone CASCADE; +CREATE TABLE project_milestone ( + id BIGSERIAL PRIMARY KEY, + project_id BIGINT NOT NULL, + milestone_name VARCHAR(200) NOT NULL, + description TEXT, + plan_date DATE, + actual_date DATE, + status VARCHAR(20) DEFAULT 'pending', + progress INT DEFAULT 0, + sort_order INT DEFAULT 0, + is_key SMALLINT DEFAULT 0, + deliverables JSONB, + extra_data JSONB, + create_by BIGINT, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by BIGINT, + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + deleted SMALLINT DEFAULT 0, + + CONSTRAINT fk_milestone_project FOREIGN KEY (project_id) REFERENCES project(id) ON DELETE CASCADE +); + +CREATE INDEX idx_milestone_project ON project_milestone(project_id); +CREATE INDEX idx_milestone_status ON project_milestone(status); + +COMMENT ON TABLE project_milestone IS '项目里程碑表'; +COMMENT ON COLUMN project_milestone.project_id IS '项目ID'; +COMMENT ON COLUMN project_milestone.milestone_name IS '里程碑名称'; +COMMENT ON COLUMN project_milestone.description IS '描述'; +COMMENT ON COLUMN project_milestone.plan_date IS '计划日期'; +COMMENT ON COLUMN project_milestone.actual_date IS '实际日期'; +COMMENT ON COLUMN project_milestone.status IS '状态: pending-待开始, in_progress-进行中, completed-已完成, delayed-延期'; +COMMENT ON COLUMN project_milestone.progress IS '完成进度'; +COMMENT ON COLUMN project_milestone.sort_order IS '排序'; +COMMENT ON COLUMN project_milestone.is_key IS '是否关键里程碑: 1-是, 0-否'; +COMMENT ON COLUMN project_milestone.deliverables IS '交付物列表'; +COMMENT ON COLUMN project_milestone.extra_data IS '扩展数据'; + +-- ===================================================== +-- 4. 任务管理表 +-- ===================================================== + +-- 任务表 +DROP TABLE IF EXISTS task CASCADE; +CREATE TABLE task ( + id BIGSERIAL PRIMARY KEY, + task_code VARCHAR(50), + project_id BIGINT NOT NULL, + milestone_id BIGINT, + parent_id BIGINT, + task_name VARCHAR(200) NOT NULL, + description TEXT, + task_type VARCHAR(50), + assignee_id BIGINT, + plan_start_date DATE, + plan_end_date DATE, + actual_start_date DATE, + actual_end_date DATE, + plan_hours DECIMAL(8,2), + actual_hours DECIMAL(8,2), + progress INT DEFAULT 0, + priority VARCHAR(20) DEFAULT 'medium', + status VARCHAR(20) DEFAULT 'pending', + sort_order INT DEFAULT 0, + tags JSONB, + attachments JSONB, + extra_data JSONB, + create_by BIGINT, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by BIGINT, + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + deleted SMALLINT DEFAULT 0, + + CONSTRAINT fk_task_project FOREIGN KEY (project_id) REFERENCES project(id) ON DELETE CASCADE, + CONSTRAINT fk_task_milestone FOREIGN KEY (milestone_id) REFERENCES project_milestone(id) ON DELETE SET NULL, + CONSTRAINT fk_task_parent FOREIGN KEY (parent_id) REFERENCES task(id) ON DELETE SET NULL, + CONSTRAINT fk_task_assignee FOREIGN KEY (assignee_id) REFERENCES sys_user(id) ON DELETE SET NULL +); + +CREATE INDEX idx_task_project ON task(project_id); +CREATE INDEX idx_task_milestone ON task(milestone_id); +CREATE INDEX idx_task_parent ON task(parent_id); +CREATE INDEX idx_task_assignee ON task(assignee_id); +CREATE INDEX idx_task_status ON task(status); + +COMMENT ON TABLE task IS '任务表'; +COMMENT ON COLUMN task.task_code IS '任务编号'; +COMMENT ON COLUMN task.project_id IS '项目ID'; +COMMENT ON COLUMN task.milestone_id IS '所属里程碑ID'; +COMMENT ON COLUMN task.parent_id IS '父任务ID'; +COMMENT ON COLUMN task.task_name IS '任务名称'; +COMMENT ON COLUMN task.description IS '任务描述'; +COMMENT ON COLUMN task.task_type IS '任务类型'; +COMMENT ON COLUMN task.assignee_id IS '执行人ID'; +COMMENT ON COLUMN task.plan_start_date IS '计划开始日期'; +COMMENT ON COLUMN task.plan_end_date IS '计划结束日期'; +COMMENT ON COLUMN task.actual_start_date IS '实际开始日期'; +COMMENT ON COLUMN task.actual_end_date IS '实际结束日期'; +COMMENT ON COLUMN task.plan_hours IS '计划工时(小时)'; +COMMENT ON COLUMN task.actual_hours IS '实际工时(小时)'; +COMMENT ON COLUMN task.progress IS '进度百分比'; +COMMENT ON COLUMN task.priority IS '优先级: critical-关键, high-高, medium-中, low-低'; +COMMENT ON COLUMN task.status IS '状态: pending-待开始, in_progress-进行中, completed-已完成, cancelled-已取消'; +COMMENT ON COLUMN task.sort_order IS '排序'; +COMMENT ON COLUMN task.tags IS '标签'; +COMMENT ON COLUMN task.attachments IS '附件列表'; +COMMENT ON COLUMN task.extra_data IS '扩展数据'; + +-- 任务依赖关系表 +DROP TABLE IF EXISTS task_dependency CASCADE; +CREATE TABLE task_dependency ( + id BIGSERIAL PRIMARY KEY, + task_id BIGINT NOT NULL, + depends_on_task_id BIGINT NOT NULL, + dependency_type VARCHAR(20) DEFAULT 'finish_to_start', + lag_days INT DEFAULT 0, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + + UNIQUE(task_id, depends_on_task_id), + CONSTRAINT fk_td_task FOREIGN KEY (task_id) REFERENCES task(id) ON DELETE CASCADE, + CONSTRAINT fk_td_depends ON DELETE CASCADE +); + +CREATE INDEX idx_td_depends ON task_dependency(depends_on_task_id); + +COMMENT ON TABLE task_dependency IS '任务依赖关系表'; +COMMENT ON COLUMN task_dependency.task_id IS '任务ID'; +COMMENT ON COLUMN task_dependency.depends_on_task_id IS '依赖的任务ID'; +COMMENT ON COLUMN task_dependency.dependency_type IS '依赖类型: finish_to_start-完成-开始, start_to_start-开始-开始, finish_to_finish-完成-完成, start_to_finish-开始-完成'; +COMMENT ON COLUMN task_dependency.lag_days IS '滞后天数'; + +-- ===================================================== +-- 5. 工单管理表 +-- ===================================================== + +-- 工单表 (移除order_type_id外键,使用type字段替代) +-- 工单可关联风险,用于风险处理 +DROP TABLE IF EXISTS work_order CASCADE; +CREATE TABLE work_order ( + id BIGSERIAL PRIMARY KEY, + order_code VARCHAR(50) NOT NULL UNIQUE, + order_type VARCHAR(50), + project_id BIGINT, + risk_id BIGINT, + title VARCHAR(200) NOT NULL, + description TEXT, + creator_id BIGINT NOT NULL, + handler_id BIGINT, + handler_group_id BIGINT, + priority VARCHAR(20) DEFAULT 'medium', + status VARCHAR(20) DEFAULT 'pending', + source VARCHAR(50), + deadline TIMESTAMP, + assigned_time TIMESTAMP, + first_response_time TIMESTAMP, + resolved_time TIMESTAMP, + closed_time TIMESTAMP, + satisfaction_score INT, + tags JSONB, + attachments JSONB, + extra_data JSONB, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + deleted SMALLINT DEFAULT 0, + + CONSTRAINT fk_wo_project FOREIGN KEY (project_id) REFERENCES project(id) ON DELETE SET NULL +); + +CREATE INDEX idx_wo_project ON work_order(project_id); +CREATE INDEX idx_wo_creator ON work_order(creator_id); +CREATE INDEX idx_wo_handler ON work_order(handler_id); +CREATE INDEX idx_wo_status ON work_order(status); +CREATE INDEX idx_wo_priority ON work_order(priority); +CREATE INDEX idx_wo_type ON work_order(order_type); + +COMMENT ON TABLE work_order IS '工单表'; +COMMENT ON COLUMN work_order.order_code IS '工单编号'; +COMMENT ON COLUMN work_order.order_type IS '工单类型: bug-缺陷, feature-需求, task-任务, incident-事件, risk_handle-风险处理, other-其他'; +COMMENT ON COLUMN work_order.project_id IS '关联项目ID'; +COMMENT ON COLUMN work_order.risk_id IS '关联风险ID(用于风险处理工单)'; +COMMENT ON COLUMN work_order.title IS '工单标题'; +COMMENT ON COLUMN work_order.description IS '工单描述'; +COMMENT ON COLUMN work_order.creator_id IS '创建人ID'; +COMMENT ON COLUMN work_order.handler_id IS '处理人ID'; +COMMENT ON COLUMN work_order.handler_group_id IS '处理组ID'; +COMMENT ON COLUMN work_order.priority IS '优先级: critical-紧急, high-高, medium-中, low-低'; +COMMENT ON COLUMN work_order.status IS '状态: pending-待处理, assigned-已分派, processing-处理中, resolved-已解决, closed-已关闭, reopened-已重开'; +COMMENT ON COLUMN work_order.source IS '来源: web-网页, mobile-移动端, api-接口, system-系统生成, risk-风险分派'; +COMMENT ON COLUMN work_order.deadline IS '截止时间'; +COMMENT ON COLUMN work_order.assigned_time IS '分派时间'; +COMMENT ON COLUMN work_order.first_response_time IS '首次响应时间'; +COMMENT ON COLUMN work_order.resolved_time IS '解决时间'; +COMMENT ON COLUMN work_order.closed_time IS '关闭时间'; +COMMENT ON COLUMN work_order.satisfaction_score IS '满意度评分(1-5)'; +COMMENT ON COLUMN work_order.tags IS '标签'; +COMMENT ON COLUMN work_order.attachments IS '附件列表'; +COMMENT ON COLUMN work_order.extra_data IS '扩展数据'; + +-- 工单流转记录表 +DROP TABLE IF EXISTS work_order_log CASCADE; +CREATE TABLE work_order_log ( + id BIGSERIAL PRIMARY KEY, + order_id BIGINT NOT NULL, + action_type VARCHAR(50) NOT NULL, + from_status VARCHAR(20), + to_status VARCHAR(20), + operator_id BIGINT, + content TEXT, + attachments JSONB, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT fk_wol_order FOREIGN KEY (order_id) REFERENCES work_order(id) ON DELETE CASCADE +); + +CREATE INDEX idx_wol_order ON work_order_log(order_id); +CREATE INDEX idx_wol_operator ON work_order_log(operator_id); + +COMMENT ON TABLE work_order_log IS '工单流转记录表'; +COMMENT ON COLUMN work_order_log.order_id IS '工单ID'; +COMMENT ON COLUMN work_order_log.action_type IS '操作类型: create-创建, assign-分派, accept-接受, process-处理, resolve-解决, close-关闭, reopen-重开, comment-备注'; +COMMENT ON COLUMN work_order_log.from_status IS '原状态'; +COMMENT ON COLUMN work_order_log.to_status IS '新状态'; +COMMENT ON COLUMN work_order_log.operator_id IS '操作人ID'; +COMMENT ON COLUMN work_order_log.content IS '操作内容'; +COMMENT ON COLUMN work_order_log.attachments IS '附件列表'; + +-- ===================================================== +-- 6. 风险管理表 +-- ===================================================== + +-- 风险表 (移除category_id外键,使用category字符串字段) +-- 风险通过分派工单处理,工单完成后同步更新风险状态 +DROP TABLE IF EXISTS risk CASCADE; +CREATE TABLE risk ( + id BIGSERIAL PRIMARY KEY, + risk_code VARCHAR(50), + project_id BIGINT NOT NULL, + category VARCHAR(50), + risk_name VARCHAR(200) NOT NULL, + description TEXT, + risk_source VARCHAR(50), + risk_type VARCHAR(50), + probability DECIMAL(5,2), + impact DECIMAL(5,2), + risk_score DECIMAL(5,2), + risk_level VARCHAR(20) DEFAULT 'low', + status VARCHAR(20) DEFAULT 'identified', + owner_id BIGINT, + + -- 工单关联(风险分派的工单ID列表) + work_order_ids BIGINT[], + + mitigation_plan TEXT, + contingency_plan TEXT, + trigger_condition TEXT, + discover_time TIMESTAMP, + due_date DATE, + resolved_time TIMESTAMP, + ai_analysis JSONB, + tags JSONB, + extra_data JSONB, + create_by BIGINT, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by BIGINT, + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + deleted SMALLINT DEFAULT 0, + + CONSTRAINT fk_risk_project FOREIGN KEY (project_id) REFERENCES project(id) ON DELETE CASCADE, + CONSTRAINT fk_risk_owner FOREIGN KEY (owner_id) REFERENCES sys_user(id) ON DELETE SET NULL +); + +-- 添加工单外键约束 (需要先创建risk表) +ALTER TABLE work_order ADD CONSTRAINT fk_wo_risk FOREIGN KEY (risk_id) REFERENCES risk(id) ON DELETE SET NULL; +CREATE INDEX idx_wo_risk ON work_order(risk_id); + +CREATE INDEX idx_risk_project ON risk(project_id); +CREATE INDEX idx_risk_category ON risk(category); +CREATE INDEX idx_risk_owner ON risk(owner_id); +CREATE INDEX idx_risk_level ON risk(risk_level); +CREATE INDEX idx_risk_status ON risk(status); + +COMMENT ON TABLE risk IS '风险表'; +COMMENT ON COLUMN risk.risk_code IS '风险编号'; +COMMENT ON COLUMN risk.project_id IS '项目ID'; +COMMENT ON COLUMN risk.category IS '风险分类: technical-技术风险, schedule-进度风险, cost-成本风险, quality-质量风险, resource-资源风险, external-外部风险, other-其他'; +COMMENT ON COLUMN risk.risk_name IS '风险名称'; +COMMENT ON COLUMN risk.description IS '风险描述'; +COMMENT ON COLUMN risk.risk_source IS '风险来源: internal-内部, external-外部, ai_detection-AI检测'; +COMMENT ON COLUMN risk.risk_type IS '风险类型'; +COMMENT ON COLUMN risk.probability IS '发生概率(0-100%)'; +COMMENT ON COLUMN risk.impact IS '影响程度(1-5)'; +COMMENT ON COLUMN risk.risk_score IS '风险得分(概率*影响)'; +COMMENT ON COLUMN risk.risk_level IS '风险等级: critical-严重, high-高, medium-中, low-低'; +COMMENT ON COLUMN risk.status IS '状态: identified-已识别, assigned-已分派工单, mitigating-缓解中, resolved-已解决, closed-已关闭'; +COMMENT ON COLUMN risk.owner_id IS '负责人ID'; +COMMENT ON COLUMN risk.work_order_ids IS '关联的工单ID数组'; +COMMENT ON COLUMN risk.mitigation_plan IS '缓解措施'; +COMMENT ON COLUMN risk.contingency_plan IS '应急计划'; +COMMENT ON COLUMN risk.trigger_condition IS '触发条件'; +COMMENT ON COLUMN risk.discover_time IS '发现时间'; +COMMENT ON COLUMN risk.due_date IS '预期解决日期'; +COMMENT ON COLUMN risk.resolved_time IS '解决时间'; +COMMENT ON COLUMN risk.ai_analysis IS 'AI分析结果'; +COMMENT ON COLUMN risk.tags IS '标签'; +COMMENT ON COLUMN risk.extra_data IS '扩展数据'; + +-- 注:风险通过分派工单进行处理,工单处理完成后同步更新风险状态 +-- 因此不需要单独的风险处理记录表,处理历史在工单流转记录中查看 + +-- ===================================================== +-- 7. 数据录入与报告表 +-- ===================================================== + +-- 日报/数据录入表 +DROP TABLE IF EXISTS daily_report CASCADE; +CREATE TABLE daily_report ( + id BIGSERIAL PRIMARY KEY, + project_id BIGINT NOT NULL, + creator_id BIGINT NOT NULL, + report_date DATE, + report_type VARCHAR(50) DEFAULT 'daily', + title VARCHAR(200), + content TEXT, + work_content TEXT, + issues TEXT, + next_plan TEXT, + location VARCHAR(200), + latitude DECIMAL(10,7), + longitude DECIMAL(10,7), + weather VARCHAR(50), + temperature DECIMAL(5,2), + status VARCHAR(20) DEFAULT 'draft', + ai_analysis JSONB, + tags JSONB, + extra_data JSONB, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + deleted SMALLINT DEFAULT 0, + + CONSTRAINT fk_dr_project FOREIGN KEY (project_id) REFERENCES project(id) ON DELETE CASCADE, + CONSTRAINT fk_dr_creator FOREIGN KEY (creator_id) REFERENCES sys_user(id) ON DELETE CASCADE +); + +CREATE INDEX idx_dr_project ON daily_report(project_id); +CREATE INDEX idx_dr_creator ON daily_report(creator_id); +CREATE INDEX idx_dr_report_date ON daily_report(report_date); +CREATE INDEX idx_dr_report_type ON daily_report(report_type); + +COMMENT ON TABLE daily_report IS '日报/数据录入表'; +COMMENT ON COLUMN daily_report.project_id IS '项目ID'; +COMMENT ON COLUMN daily_report.creator_id IS '创建人ID'; +COMMENT ON COLUMN daily_report.report_date IS '报告日期'; +COMMENT ON COLUMN daily_report.report_type IS '报告类型: daily-日报, weekly-周报, monthly-月报, milestone-里程碑报告, photo-照片记录'; +COMMENT ON COLUMN daily_report.title IS '标题'; +COMMENT ON COLUMN daily_report.content IS '内容'; +COMMENT ON COLUMN daily_report.work_content IS '工作内容'; +COMMENT ON COLUMN daily_report.issues IS '问题与风险'; +COMMENT ON COLUMN daily_report.next_plan IS '下一步计划'; +COMMENT ON COLUMN daily_report.location IS '位置'; +COMMENT ON COLUMN daily_report.latitude IS '纬度'; +COMMENT ON COLUMN daily_report.longitude IS '经度'; +COMMENT ON COLUMN daily_report.weather IS '天气'; +COMMENT ON COLUMN daily_report.temperature IS '温度'; +COMMENT ON COLUMN daily_report.status IS '状态: draft-草稿, submitted-已提交, approved-已审批'; +COMMENT ON COLUMN daily_report.ai_analysis IS 'AI分析结果'; +COMMENT ON COLUMN daily_report.tags IS '标签'; +COMMENT ON COLUMN daily_report.extra_data IS '扩展数据'; + +-- 文件附件表 +DROP TABLE IF EXISTS file_attachment CASCADE; +CREATE TABLE file_attachment ( + id BIGSERIAL PRIMARY KEY, + file_name VARCHAR(200) NOT NULL, + original_name VARCHAR(200), + file_path VARCHAR(500) NOT NULL, + file_url VARCHAR(500), + file_type VARCHAR(50), + file_size BIGINT, + storage_type VARCHAR(20) DEFAULT 'local', + related_type VARCHAR(50), + related_id BIGINT, + uploader_id BIGINT, + exif_data JSONB, + ai_analysis JSONB, + extra_data JSONB, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + deleted SMALLINT DEFAULT 0, + + CONSTRAINT fk_fa_uploader FOREIGN KEY (uploader_id) REFERENCES sys_user(id) ON DELETE SET NULL +); + +CREATE INDEX idx_fa_related ON file_attachment(related_type, related_id); +CREATE INDEX idx_fa_uploader ON file_attachment(uploader_id); + +COMMENT ON TABLE file_attachment IS '文件附件表'; +COMMENT ON COLUMN file_attachment.file_name IS '文件名称'; +COMMENT ON COLUMN file_attachment.original_name IS '原始文件名'; +COMMENT ON COLUMN file_attachment.file_path IS '文件路径'; +COMMENT ON COLUMN file_attachment.file_url IS '文件URL'; +COMMENT ON COLUMN file_attachment.file_type IS '文件类型(MIME)'; +COMMENT ON COLUMN file_attachment.file_size IS '文件大小(字节)'; +COMMENT ON COLUMN file_attachment.storage_type IS '存储类型: local-本地, oss-对象存储, minio-MinIO'; +COMMENT ON COLUMN file_attachment.related_type IS '关联类型: project, task, work_order, risk, report'; +COMMENT ON COLUMN file_attachment.related_id IS '关联ID'; +COMMENT ON COLUMN file_attachment.uploader_id IS '上传人ID'; +COMMENT ON COLUMN file_attachment.exif_data IS 'EXIF信息(照片专用)'; +COMMENT ON COLUMN file_attachment.ai_analysis IS 'AI分析结果'; +COMMENT ON COLUMN file_attachment.extra_data IS '扩展数据'; + +-- ===================================================== +-- 8. 资源管理表 +-- ===================================================== + +-- 资源表(项目资源抽象: 人力、物料、设备、资金等) +-- 简化设计:移除resource_type表,使用resource_type字符串字段 +DROP TABLE IF EXISTS resource CASCADE; +CREATE TABLE resource ( + id BIGSERIAL PRIMARY KEY, + resource_code VARCHAR(50), + project_id BIGINT NOT NULL, + resource_type VARCHAR(50), + resource_name VARCHAR(200) NOT NULL, + description TEXT, + specification VARCHAR(200), + unit VARCHAR(20), + plan_quantity DECIMAL(12,2), + actual_quantity DECIMAL(12,2), + unit_price DECIMAL(12,2), + currency VARCHAR(10) DEFAULT 'CNY', + supplier VARCHAR(200), + status VARCHAR(20) DEFAULT 'planned', + plan_arrive_date DATE, + actual_arrive_date DATE, + responsible_id BIGINT, + location VARCHAR(200), + tags JSONB, + extra_data JSONB, + create_by BIGINT, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by BIGINT, + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + deleted SMALLINT DEFAULT 0, + + CONSTRAINT fk_resource_project FOREIGN KEY (project_id) REFERENCES project(id) ON DELETE CASCADE, + CONSTRAINT fk_resource_responsible FOREIGN KEY (responsible_id) REFERENCES sys_user(id) ON DELETE SET NULL +); + +CREATE INDEX idx_resource_project ON resource(project_id); +CREATE INDEX idx_resource_type ON resource(resource_type); +CREATE INDEX idx_resource_status ON resource(status); + +COMMENT ON TABLE resource IS '资源表 - 项目资源统一管理(人力、物料、设备、资金等)'; +COMMENT ON COLUMN resource.resource_code IS '资源编号'; +COMMENT ON COLUMN resource.project_id IS '项目ID'; +COMMENT ON COLUMN resource.resource_type IS '资源类型: human-人力, material-物料, equipment-设备, software-软件, finance-资金, other-其他'; +COMMENT ON COLUMN resource.resource_name IS '资源名称'; +COMMENT ON COLUMN resource.description IS '资源描述'; +COMMENT ON COLUMN resource.specification IS '规格型号'; +COMMENT ON COLUMN resource.unit IS '单位'; +COMMENT ON COLUMN resource.plan_quantity IS '计划数量'; +COMMENT ON COLUMN resource.actual_quantity IS '实际数量'; +COMMENT ON COLUMN resource.unit_price IS '单价'; +COMMENT ON COLUMN resource.currency IS '币种'; +COMMENT ON COLUMN resource.supplier IS '供应商/来源'; +COMMENT ON COLUMN resource.status IS '状态: planned-计划中, requested-已申请, approved-已批准, procuring-采购中, arrived-已到货, in_use-使用中, completed-已完成'; +COMMENT ON COLUMN resource.plan_arrive_date IS '计划到位日期'; +COMMENT ON COLUMN resource.actual_arrive_date IS '实际到位日期'; +COMMENT ON COLUMN resource.responsible_id IS '负责人ID'; +COMMENT ON COLUMN resource.location IS '存放位置'; +COMMENT ON COLUMN resource.tags IS '标签'; +COMMENT ON COLUMN resource.extra_data IS '扩展数据'; + +-- ===================================================== +-- 9. 流程卡点分析表 +-- ===================================================== + +-- 流程卡点记录表 +DROP TABLE IF EXISTS bottleneck_record CASCADE; +CREATE TABLE bottleneck_record ( + id BIGSERIAL PRIMARY KEY, + project_id BIGINT NOT NULL, + user_id BIGINT NOT NULL, + bottleneck_type VARCHAR(50) NOT NULL, + related_type VARCHAR(50), + related_id BIGINT, + description TEXT, + impact_level VARCHAR(20) DEFAULT 'medium', + status VARCHAR(20) DEFAULT 'pending', + start_time TIMESTAMP, + resolved_time TIMESTAMP, + duration_hours DECIMAL(8,2), + solution TEXT, + extra_data JSONB, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT fk_br_project FOREIGN KEY (project_id) REFERENCES project(id) ON DELETE CASCADE, + CONSTRAINT fk_br_user FOREIGN KEY (user_id) REFERENCES sys_user(id) ON DELETE CASCADE +); + +CREATE INDEX idx_br_project ON bottleneck_record(project_id); +CREATE INDEX idx_br_user ON bottleneck_record(user_id); +CREATE INDEX idx_br_type ON bottleneck_record(bottleneck_type); + +COMMENT ON TABLE bottleneck_record IS '流程卡点记录表'; +COMMENT ON COLUMN bottleneck_record.project_id IS '项目ID'; +COMMENT ON COLUMN bottleneck_record.user_id IS '用户ID'; +COMMENT ON COLUMN bottleneck_record.bottleneck_type IS '卡点类型: resource-资源不足, approval-审批延迟, dependency-依赖阻塞, skill-技能不足, external-外部因素, other-其他'; +COMMENT ON COLUMN bottleneck_record.related_type IS '关联类型: task, work_order, risk'; +COMMENT ON COLUMN bottleneck_record.related_id IS '关联ID'; +COMMENT ON COLUMN bottleneck_record.description IS '卡点描述'; +COMMENT ON COLUMN bottleneck_record.impact_level IS '影响程度: critical-严重, high-高, medium-中, low-低'; +COMMENT ON COLUMN bottleneck_record.status IS '状态: pending-待处理, resolving-解决中, resolved-已解决'; +COMMENT ON COLUMN bottleneck_record.start_time IS '卡点开始时间'; +COMMENT ON COLUMN bottleneck_record.resolved_time IS '解决时间'; +COMMENT ON COLUMN bottleneck_record.duration_hours IS '持续时长(小时)'; +COMMENT ON COLUMN bottleneck_record.solution IS '解决方案'; +COMMENT ON COLUMN bottleneck_record.extra_data IS '扩展数据'; + +-- ===================================================== +-- 10. 时间节点知识库表 +-- ===================================================== + +-- 项目时间节点表 +DROP TABLE IF EXISTS project_timeline CASCADE; +CREATE TABLE project_timeline ( + id BIGSERIAL PRIMARY KEY, + project_id BIGINT NOT NULL, + node_name VARCHAR(200) NOT NULL, + node_type VARCHAR(50) DEFAULT 'phase', + parent_id BIGINT, + plan_date DATE, + actual_date DATE, + description TEXT, + status VARCHAR(20) DEFAULT 'pending', + sort_order INT DEFAULT 0, + + -- 知识库范围配置 + kb_scope JSONB, + + extra_data JSONB, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + deleted SMALLINT DEFAULT 0, + + CONSTRAINT fk_timeline_project FOREIGN KEY (project_id) REFERENCES project(id) ON DELETE CASCADE, + CONSTRAINT fk_timeline_parent FOREIGN KEY (parent_id) REFERENCES project_timeline(id) ON DELETE SET NULL +); + +CREATE INDEX idx_timeline_project ON project_timeline(project_id); +CREATE INDEX idx_timeline_parent ON project_timeline(parent_id); +CREATE INDEX idx_timeline_type ON project_timeline(node_type); + +COMMENT ON TABLE project_timeline IS '项目时间节点表 - 用于构建时间维度知识库'; +COMMENT ON COLUMN project_timeline.project_id IS '项目ID'; +COMMENT ON COLUMN project_timeline.node_name IS '节点名称'; +COMMENT ON COLUMN project_timeline.node_type IS '节点类型: phase-阶段, milestone-里程碑, event-事件, checkpoint-检查点'; +COMMENT ON COLUMN project_timeline.parent_id IS '父节点ID'; +COMMENT ON COLUMN project_timeline.plan_date IS '计划日期'; +COMMENT ON COLUMN project_timeline.actual_date IS '实际日期'; +COMMENT ON COLUMN project_timeline.description IS '描述'; +COMMENT ON COLUMN project_timeline.status IS '状态: pending-待开始, in_progress-进行中, completed-已完成, delayed-延期'; +COMMENT ON COLUMN project_timeline.sort_order IS '排序'; +COMMENT ON COLUMN project_timeline.kb_scope IS '知识库范围配置["report","file","risk","ticket"]'; + +-- 知识库表 +DROP TABLE IF EXISTS ai_knowledge_base CASCADE; +CREATE TABLE ai_knowledge_base ( + id BIGSERIAL PRIMARY KEY, + kb_name VARCHAR(200) NOT NULL, + kb_type VARCHAR(50) DEFAULT 'project', + project_id BIGINT, + timeline_node_id BIGINT, + description TEXT, + + -- 向量化配置 + embedding_model VARCHAR(100) DEFAULT 'text-embedding-3-small', + chunk_size INT DEFAULT 500, + chunk_overlap INT DEFAULT 50, + + -- 统计 + doc_count INT DEFAULT 0, + total_chunks INT DEFAULT 0, + + status VARCHAR(20) DEFAULT 'active', + create_by BIGINT, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + deleted SMALLINT DEFAULT 0, + + CONSTRAINT fk_kb_project FOREIGN KEY (project_id) REFERENCES project(id) ON DELETE CASCADE, + CONSTRAINT fk_kb_timeline FOREIGN KEY (timeline_node_id) REFERENCES project_timeline(id) ON DELETE SET NULL +); + +CREATE INDEX idx_kb_project ON ai_knowledge_base(project_id); +CREATE INDEX idx_kb_timeline ON ai_knowledge_base(timeline_node_id); +CREATE INDEX idx_kb_type ON ai_knowledge_base(kb_type); + +COMMENT ON TABLE ai_knowledge_base IS '知识库表'; +COMMENT ON COLUMN ai_knowledge_base.kb_name IS '知识库名称'; +COMMENT ON COLUMN ai_knowledge_base.kb_type IS '知识库类型: project-项目知识库, timeline-时间节点知识库, global-全局知识库'; +COMMENT ON COLUMN ai_knowledge_base.project_id IS '关联项目ID'; +COMMENT ON COLUMN ai_knowledge_base.timeline_node_id IS '关联时间节点ID'; +COMMENT ON COLUMN ai_knowledge_base.description IS '描述'; +COMMENT ON COLUMN ai_knowledge_base.embedding_model IS '向量模型'; +COMMENT ON COLUMN ai_knowledge_base.chunk_size IS '分块大小'; +COMMENT ON COLUMN ai_knowledge_base.chunk_overlap IS '分块重叠'; +COMMENT ON COLUMN ai_knowledge_base.doc_count IS '文档数量'; +COMMENT ON COLUMN ai_knowledge_base.total_chunks IS '总分块数'; +COMMENT ON COLUMN ai_knowledge_base.status IS '状态: active-可用, archived-归档'; + +-- ===================================================== +-- 11. AI服务相关表 +-- ===================================================== + +-- AI文档向量表 (用于RAG知识库) +DROP TABLE IF EXISTS ai_document CASCADE; +CREATE TABLE ai_document ( + id BIGSERIAL PRIMARY KEY, + doc_id UUID DEFAULT uuid_generate_v4(), + + -- 关联关系 + project_id BIGINT, + timeline_node_id BIGINT, + kb_id BIGINT, + -- 文档来源 + source_type VARCHAR(50) NOT NULL, + source_id BIGINT, + + -- 文档内容 + title VARCHAR(500), + content TEXT NOT NULL, + content_raw TEXT, + summary TEXT, + + -- 向量嵌入 (1536维适配OpenAI, 可调整为其他维度) + embedding vector(1536), + + -- 文档元数据 + doc_type VARCHAR(50), + language VARCHAR(10) DEFAULT 'zh', + file_type VARCHAR(50), + file_size BIGINT, + file_path VARCHAR(500), + + -- 时间信息 (用于时间维度检索) + doc_date DATE, + doc_datetime TIMESTAMP, + + -- 分块信息(大文档分块存储) + chunk_index INT DEFAULT 0, + chunk_total INT DEFAULT 1, + chunk_parent_id BIGINT, + + -- 标签和分类 + tags JSONB, + category VARCHAR(100), + + -- 使用统计 + view_count INT DEFAULT 0, + query_count INT DEFAULT 0, + last_queried_at TIMESTAMP, + + -- 状态 + status VARCHAR(20) DEFAULT 'active', + error_message TEXT, + + -- 创建信息 + create_by BIGINT, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by BIGINT, + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + deleted SMALLINT DEFAULT 0, + + -- 外键约束 + CONSTRAINT fk_ai_doc_project FOREIGN KEY (project_id) REFERENCES project(id) ON DELETE SET NULL, + CONSTRAINT fk_ai_doc_timeline FOREIGN KEY (timeline_node_id) REFERENCES project_timeline(id) ON DELETE SET NULL, + CONSTRAINT fk_ai_doc_kb FOREIGN KEY (kb_id) REFERENCES ai_knowledge_base(id) ON DELETE SET NULL +); + +-- 创建向量索引 (使用IVFFlat或HNSW) +-- IVFFlat: 适合中等数据量, 内存占用小 +-- HNSW: 适合大数据量, 查询更快但内存占用大 +CREATE INDEX idx_ai_document_embedding ON ai_document + USING ivfflat (embedding vector_cosine_ops) + WITH (lists = 100); + +-- 创建其他常用索引 +CREATE INDEX idx_ai_doc_project ON ai_document(project_id) WHERE deleted = 0; +CREATE INDEX idx_ai_doc_timeline ON ai_document(timeline_node_id) WHERE deleted = 0; +CREATE INDEX idx_ai_doc_kb ON ai_document(kb_id) WHERE deleted = 0; +CREATE INDEX idx_ai_doc_source ON ai_document(source_type, source_id) WHERE deleted = 0; +CREATE INDEX idx_ai_doc_status ON ai_document(status); +CREATE INDEX idx_ai_doc_type ON ai_document(doc_type); +CREATE INDEX idx_ai_doc_tags ON ai_document USING GIN(tags); + +COMMENT ON TABLE ai_document IS 'AI文档向量表 - 存储所有用于RAG的文档向量'; +COMMENT ON COLUMN ai_document.doc_id IS '文档唯一标识'; +COMMENT ON COLUMN ai_document.project_id IS '关联项目ID'; +COMMENT ON COLUMN ai_document.timeline_node_id IS '关联时间节点ID'; +COMMENT ON COLUMN ai_document.kb_id IS '关联知识库ID'; +COMMENT ON COLUMN ai_document.source_type IS '来源类型: project-项目文档, risk-风险文档, ticket-工单, report-日报, upload-上传文件, knowledge-知识库, chat-对话记录'; +COMMENT ON COLUMN ai_document.source_id IS '来源记录ID'; +COMMENT ON COLUMN ai_document.title IS '文档标题'; +COMMENT ON COLUMN ai_document.content IS '文档内容(纯文本)'; +COMMENT ON COLUMN ai_document.content_raw IS '原始内容(带格式)'; +COMMENT ON COLUMN ai_document.summary IS 'AI生成的摘要'; +COMMENT ON COLUMN ai_document.embedding IS '向量嵌入'; +COMMENT ON COLUMN ai_document.doc_type IS '文档类型: requirement-需求, design-设计, plan-计划, report-报告, contract-合同, photo-照片, other-其他'; +COMMENT ON COLUMN ai_document.language IS '语言: zh-中文, en-英文'; +COMMENT ON COLUMN ai_document.file_type IS '文件类型: pdf, doc, txt, md, jpg, png等'; +COMMENT ON COLUMN ai_document.file_size IS '文件大小(字节)'; +COMMENT ON COLUMN ai_document.file_path IS '文件存储路径'; +COMMENT ON COLUMN ai_document.doc_date IS '文档日期(如日报日期、照片拍摄日期)'; +COMMENT ON COLUMN ai_document.doc_datetime IS '文档时间戳'; +COMMENT ON COLUMN ai_document.chunk_index IS '分块序号'; +COMMENT ON COLUMN ai_document.chunk_total IS '总分块数'; +COMMENT ON COLUMN ai_document.chunk_parent_id IS '父文档ID(分块时使用)'; +COMMENT ON COLUMN ai_document.tags IS '标签数组'; +COMMENT ON COLUMN ai_document.category IS '分类'; +COMMENT ON COLUMN ai_document.view_count IS '查看次数'; +COMMENT ON COLUMN ai_document.query_count IS '被检索次数'; +COMMENT ON COLUMN ai_document.last_queried_at IS '最后被检索时间'; +COMMENT ON COLUMN ai_document.status IS '状态: active-可用, processing-处理中, error-错误, archived-归档'; +COMMENT ON COLUMN ai_document.error_message IS '错误信息'; + +-- AI对话记录表 (合并会话管理功能,无需单独的session表) +DROP TABLE IF EXISTS ai_chat_history CASCADE; +CREATE TABLE ai_chat_history ( + id BIGSERIAL PRIMARY KEY, + + -- 会话标识 (使用UUID标识一个会话,无需单独的session表) + session_id UUID NOT NULL, + session_title VARCHAR(200), + + user_id BIGINT NOT NULL, + project_id BIGINT, + timeline_node_id BIGINT, + + -- 消息内容 + role VARCHAR(20) NOT NULL, + content TEXT NOT NULL, + content_embedding vector(1536), + + -- 引用的知识库文档 + referenced_doc_ids BIGINT[], + + -- 上下文配置 + system_prompt TEXT, + context_window INT DEFAULT 10, + kb_ids JSONB, + + -- 模型信息 + model VARCHAR(50), + tokens_used INT, + response_time INT, + + -- 用户反馈 + feedback_score INT, + feedback_content TEXT, + + -- 统计 + message_index INT DEFAULT 0, + + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT fk_chat_project FOREIGN KEY (project_id) REFERENCES project(id) ON DELETE SET NULL, + CONSTRAINT fk_chat_timeline FOREIGN KEY (timeline_node_id) REFERENCES project_timeline(id) ON DELETE SET NULL, + CONSTRAINT fk_chat_user FOREIGN KEY (user_id) REFERENCES sys_user(id) ON DELETE CASCADE +); + +-- 索引 +CREATE INDEX idx_chat_session ON ai_chat_history(session_id); +CREATE INDEX idx_chat_user ON ai_chat_history(user_id); +CREATE INDEX idx_chat_project ON ai_chat_history(project_id); +CREATE INDEX idx_chat_timeline ON ai_chat_history(timeline_node_id); +CREATE INDEX idx_chat_time ON ai_chat_history(create_time); +CREATE INDEX idx_chat_role ON ai_chat_history(session_id, role); + +COMMENT ON TABLE ai_chat_history IS 'AI对话记录表 - 包含会话管理功能'; +COMMENT ON COLUMN ai_chat_history.session_id IS '会话ID(同一session_id的消息属于同一会话)'; +COMMENT ON COLUMN ai_chat_history.session_title IS '会话标题(首条消息自动生成)'; +COMMENT ON COLUMN ai_chat_history.user_id IS '用户ID'; +COMMENT ON COLUMN ai_chat_history.project_id IS '关联项目ID'; +COMMENT ON COLUMN ai_chat_history.timeline_node_id IS '关联时间节点ID'; +COMMENT ON COLUMN ai_chat_history.role IS '角色: user-用户, assistant-助手, system-系统'; +COMMENT ON COLUMN ai_chat_history.content IS '对话内容'; +COMMENT ON COLUMN ai_chat_history.content_embedding IS '对话内容的向量表示(用于语义检索历史对话)'; +COMMENT ON COLUMN ai_chat_history.referenced_doc_ids IS '引用的文档ID列表'; +COMMENT ON COLUMN ai_chat_history.system_prompt IS '系统提示词(仅role=system时有值)'; +COMMENT ON COLUMN ai_chat_history.context_window IS '该会话的上下文窗口大小'; +COMMENT ON COLUMN ai_chat_history.kb_ids IS '关联的知识库ID列表'; +COMMENT ON COLUMN ai_chat_history.model IS '使用的模型'; +COMMENT ON COLUMN ai_chat_history.tokens_used IS '消耗Token数'; +COMMENT ON COLUMN ai_chat_history.response_time IS '响应时间(ms)'; +COMMENT ON COLUMN ai_chat_history.feedback_score IS '反馈评分(1-5)'; +COMMENT ON COLUMN ai_chat_history.feedback_content IS '反馈内容'; +COMMENT ON COLUMN ai_chat_history.message_index IS '消息在会话中的序号'; + +-- AI分析结果表 +DROP TABLE IF EXISTS ai_analysis_result CASCADE; +CREATE TABLE ai_analysis_result ( + id BIGSERIAL PRIMARY KEY, + analysis_type VARCHAR(50) NOT NULL, + related_type VARCHAR(50), + related_id BIGINT, + + -- 输入输出 + input_data JSONB, + result_data JSONB, + result_embedding vector(1536), + + -- 模型信息 + confidence DECIMAL(5,2), + model_name VARCHAR(100), + model_version VARCHAR(50), + processing_time INT, + + -- 成本和Token + input_tokens INT, + output_tokens INT, + cost DECIMAL(10,6), + + status VARCHAR(20) DEFAULT 'completed', + error_message TEXT, + + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + +CREATE INDEX idx_analysis_type ON ai_analysis_result(analysis_type); +CREATE INDEX idx_analysis_related ON ai_analysis_result(related_type, related_id); +CREATE INDEX idx_analysis_time ON ai_analysis_result(create_time); + +COMMENT ON TABLE ai_analysis_result IS 'AI分析结果表'; +COMMENT ON COLUMN ai_analysis_result.analysis_type IS '分析类型: photo_analysis-照片分析, risk_prediction-风险预测, progress_analysis-进度分析, text_extraction-文本提取, embedding-向量生成'; +COMMENT ON COLUMN ai_analysis_result.related_type IS '关联类型'; +COMMENT ON COLUMN ai_analysis_result.related_id IS '关联ID'; +COMMENT ON COLUMN ai_analysis_result.input_data IS '输入数据'; +COMMENT ON COLUMN ai_analysis_result.result_data IS '分析结果'; +COMMENT ON COLUMN ai_analysis_result.result_embedding IS '分析结果的向量表示'; +COMMENT ON COLUMN ai_analysis_result.confidence IS '置信度(0-100%)'; +COMMENT ON COLUMN ai_analysis_result.model_name IS '模型名称'; +COMMENT ON COLUMN ai_analysis_result.model_version IS '模型版本'; +COMMENT ON COLUMN ai_analysis_result.processing_time IS '处理时间(ms)'; +COMMENT ON COLUMN ai_analysis_result.input_tokens IS '输入token数'; +COMMENT ON COLUMN ai_analysis_result.output_tokens IS '输出token数'; +COMMENT ON COLUMN ai_analysis_result.cost IS '成本(美元)'; +COMMENT ON COLUMN ai_analysis_result.status IS '状态: processing-处理中, completed-已完成, failed-失败'; +COMMENT ON COLUMN ai_analysis_result.error_message IS '错误信息'; + +-- ===================================================== +-- 12. 系统配置与日志表 +-- ===================================================== + +-- 系统配置表 +DROP TABLE IF EXISTS sys_config CASCADE; +CREATE TABLE sys_config ( + id BIGSERIAL PRIMARY KEY, + config_key VARCHAR(100) NOT NULL UNIQUE, + config_value TEXT, + config_type VARCHAR(50) DEFAULT 'system', + description TEXT, + status SMALLINT DEFAULT 1, + create_by BIGINT, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by BIGINT, + update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + deleted SMALLINT DEFAULT 0 +); + +COMMENT ON TABLE sys_config IS '系统配置表'; +COMMENT ON COLUMN sys_config.config_key IS '配置键'; +COMMENT ON COLUMN sys_config.config_value IS '配置值'; +COMMENT ON COLUMN sys_config.config_type IS '配置类型: system-系统, business-业务, ai-AI配置'; +COMMENT ON COLUMN sys_config.description IS '配置描述'; +COMMENT ON COLUMN sys_config.status IS '状态'; + +-- 操作日志表 +DROP TABLE IF EXISTS sys_operation_log CASCADE; +CREATE TABLE sys_operation_log ( + id BIGSERIAL PRIMARY KEY, + trace_id VARCHAR(100), + user_id BIGINT, + module VARCHAR(50), + operation VARCHAR(100), + method VARCHAR(200), + request_url VARCHAR(500), + request_method VARCHAR(10), + request_params TEXT, + response_data TEXT, + ip VARCHAR(50), + user_agent VARCHAR(500), + execute_time INT, + status SMALLINT DEFAULT 1, + error_msg TEXT, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT fk_log_user FOREIGN KEY (user_id) REFERENCES sys_user(id) ON DELETE SET NULL +); + +CREATE INDEX idx_log_trace ON sys_operation_log(trace_id); +CREATE INDEX idx_log_user ON sys_operation_log(user_id); +CREATE INDEX idx_log_module ON sys_operation_log(module); +CREATE INDEX idx_log_time ON sys_operation_log(create_time); + +COMMENT ON TABLE sys_operation_log IS '操作日志表'; +COMMENT ON COLUMN sys_operation_log.trace_id IS '追踪ID'; +COMMENT ON COLUMN sys_operation_log.user_id IS '用户ID'; +COMMENT ON COLUMN sys_operation_log.module IS '模块'; +COMMENT ON COLUMN sys_operation_log.operation IS '操作'; +COMMENT ON COLUMN sys_operation_log.method IS '方法'; +COMMENT ON COLUMN sys_operation_log.request_url IS '请求URL'; +COMMENT ON COLUMN sys_operation_log.request_method IS '请求方法'; +COMMENT ON COLUMN sys_operation_log.request_params IS '请求参数'; +COMMENT ON COLUMN sys_operation_log.response_data IS '响应数据'; +COMMENT ON COLUMN sys_operation_log.ip IS 'IP地址'; +COMMENT ON COLUMN sys_operation_log.user_agent IS '用户代理'; +COMMENT ON COLUMN sys_operation_log.execute_time IS '执行时长(ms)'; +COMMENT ON COLUMN sys_operation_log.status IS '状态: 1-成功, 0-失败'; +COMMENT ON COLUMN sys_operation_log.error_msg IS '错误信息'; + +-- 通知消息表 +DROP TABLE IF EXISTS sys_notification CASCADE; +CREATE TABLE sys_notification ( + id BIGSERIAL PRIMARY KEY, + user_id BIGINT NOT NULL, + title VARCHAR(200) NOT NULL, + content TEXT, + notification_type VARCHAR(50), + related_type VARCHAR(50), + related_id BIGINT, + priority VARCHAR(20) DEFAULT 'normal', + is_read SMALLINT DEFAULT 0, + read_time TIMESTAMP, + sender_id BIGINT, + extra_data JSONB, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT fk_notif_user FOREIGN KEY (user_id) REFERENCES sys_user(id) ON DELETE CASCADE, + CONSTRAINT fk_notif_sender FOREIGN KEY (sender_id) REFERENCES sys_user(id) ON DELETE SET NULL +); + +CREATE INDEX idx_notif_user ON sys_notification(user_id); +CREATE INDEX idx_notif_read ON sys_notification(is_read); +CREATE INDEX idx_notif_time ON sys_notification(create_time); + +COMMENT ON TABLE sys_notification IS '通知消息表'; +COMMENT ON COLUMN sys_notification.user_id IS '接收用户ID'; +COMMENT ON COLUMN sys_notification.title IS '标题'; +COMMENT ON COLUMN sys_notification.content IS '内容'; +COMMENT ON COLUMN sys_notification.notification_type IS '通知类型: system-系统, task-任务, risk-风险, work_order-工单'; +COMMENT ON COLUMN sys_notification.related_type IS '关联类型'; +COMMENT ON COLUMN sys_notification.related_id IS '关联ID'; +COMMENT ON COLUMN sys_notification.priority IS '优先级: urgent-紧急, high-高, normal-普通, low-低'; +COMMENT ON COLUMN sys_notification.is_read IS '是否已读: 1-是, 0-否'; +COMMENT ON COLUMN sys_notification.read_time IS '阅读时间'; +COMMENT ON COLUMN sys_notification.sender_id IS '发送人ID'; +COMMENT ON COLUMN sys_notification.extra_data IS '扩展数据'; + +-- ===================================================== +-- 初始化数据 +-- ===================================================== + +-- 初始化系统角色 +INSERT INTO sys_role (role_code, role_name, role_type, description, data_scope, sort_order, status) VALUES + ('admin', '系统管理员', 'system', '拥有系统全部权限', 1, 1, 1), + ('project_manager', '项目经理', 'system', '项目管理权限', 2, 2, 1), + ('team_leader', '团队负责人', 'system', '团队管理权限', 2, 3, 1), + ('member', '普通成员', 'system', '基本操作权限', 3, 4, 1); + +-- 初始化系统配置 +INSERT INTO sys_config (config_key, config_value, config_type, description) VALUES + ('ai.model.default', 'gpt-4o', 'ai', '默认AI模型'), + ('ai.embedding.model', 'text-embedding-3-small', 'ai', '向量嵌入模型'), + ('ai.embedding.dimension', '1536', 'ai', '向量维度'), + ('ai.rag.top_k', '5', 'ai', 'RAG检索返回数量'), + ('ai.rag.similarity_threshold', '0.7', 'ai', 'RAG相似度阈值'); diff --git a/pom.xml b/pom.xml index 806d9f0..cfe1695 100644 --- a/pom.xml +++ b/pom.xml @@ -19,6 +19,7 @@ 17 UTF-8 17 + 1.0.0-M6 @@ -40,6 +41,18 @@ runtime + + + org.springframework.ai + spring-ai-openai-spring-boot-starter + + + + + org.springframework.ai + spring-ai-pgvector-store-spring-boot-starter + + com.baomidou @@ -68,6 +81,18 @@ + + + + org.springframework.ai + spring-ai-bom + 1.0.0 + pom + import + + + + diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/common/base/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/common/base/package-info.java new file mode 100644 index 0000000..f14add2 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/common/base/package-info.java @@ -0,0 +1,5 @@ +/** + * 基础模块 + * 包含基础实体、基础接口等 + */ +package cn.yinlihupo.ylhpaiprojectmanager.common.base; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/common/config/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/common/config/package-info.java new file mode 100644 index 0000000..04669e5 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/common/config/package-info.java @@ -0,0 +1,5 @@ +/** + * 公共配置模块 + * 包含系统全局配置类 + */ +package cn.yinlihupo.ylhpaiprojectmanager.common.config; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/common/constant/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/common/constant/package-info.java new file mode 100644 index 0000000..364e1bb --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/common/constant/package-info.java @@ -0,0 +1,5 @@ +/** + * 常量定义模块 + * 包含系统常量、枚举等 + */ +package cn.yinlihupo.ylhpaiprojectmanager.common.constant; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/common/exception/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/common/exception/package-info.java new file mode 100644 index 0000000..6a12e6e --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/common/exception/package-info.java @@ -0,0 +1,5 @@ +/** + * 异常处理模块 + * 包含自定义异常和全局异常处理 + */ +package cn.yinlihupo.ylhpaiprojectmanager.common.exception; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/common/result/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/common/result/package-info.java new file mode 100644 index 0000000..6483ba0 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/common/result/package-info.java @@ -0,0 +1,5 @@ +/** + * 统一响应模块 + * 包含统一响应结果封装 + */ +package cn.yinlihupo.ylhpaiprojectmanager.common.result; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/common/util/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/common/util/package-info.java new file mode 100644 index 0000000..a1438d2 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/common/util/package-info.java @@ -0,0 +1,5 @@ +/** + * 工具类模块 + * 包含各种工具类 + */ +package cn.yinlihupo.ylhpaiprojectmanager.common.util; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ai/client/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ai/client/package-info.java new file mode 100644 index 0000000..69d8836 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ai/client/package-info.java @@ -0,0 +1,5 @@ +/** + * AI智能助手 - 外部AI服务客户端 + * 封装OCR、图像识别、大语言模型等外部服务调用 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.ai.client; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ai/controller/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ai/controller/package-info.java new file mode 100644 index 0000000..00c985c --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ai/controller/package-info.java @@ -0,0 +1,5 @@ +/** + * AI智能助手 - 控制器层 + * 智能问答、项目分析建议、风险预测等相关接口 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.ai.controller; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ai/domain/dto/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ai/domain/dto/package-info.java new file mode 100644 index 0000000..7527eca --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ai/domain/dto/package-info.java @@ -0,0 +1,4 @@ +/** + * AI智能助手 - 数据传输对象 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.ai.domain.dto; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ai/domain/vo/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ai/domain/vo/package-info.java new file mode 100644 index 0000000..7705896 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ai/domain/vo/package-info.java @@ -0,0 +1,4 @@ +/** + * AI智能助手 - 视图对象 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.ai.domain.vo; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ai/service/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ai/service/package-info.java new file mode 100644 index 0000000..7366c64 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ai/service/package-info.java @@ -0,0 +1,4 @@ +/** + * AI智能助手 - 业务逻辑层 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.ai.service; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/analysis/controller/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/analysis/controller/package-info.java new file mode 100644 index 0000000..29ab972 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/analysis/controller/package-info.java @@ -0,0 +1,5 @@ +/** + * 人员分析中心 - 控制器层 + * 人员画像、效能分析、流程卡点分析、效率排行榜等相关接口 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.analysis.controller; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/analysis/domain/dto/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/analysis/domain/dto/package-info.java new file mode 100644 index 0000000..32835ea --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/analysis/domain/dto/package-info.java @@ -0,0 +1,4 @@ +/** + * 人员分析中心 - 数据传输对象 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.analysis.domain.dto; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/analysis/domain/entity/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/analysis/domain/entity/package-info.java new file mode 100644 index 0000000..d75eb95 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/analysis/domain/entity/package-info.java @@ -0,0 +1,5 @@ +/** + * 人员分析中心 - 实体类 + * UserProfile, Efficiency, Bottleneck等 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.analysis.domain.entity; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/analysis/domain/vo/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/analysis/domain/vo/package-info.java new file mode 100644 index 0000000..0841be1 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/analysis/domain/vo/package-info.java @@ -0,0 +1,4 @@ +/** + * 人员分析中心 - 视图对象 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.analysis.domain.vo; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/analysis/mapper/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/analysis/mapper/package-info.java new file mode 100644 index 0000000..b69ecbe --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/analysis/mapper/package-info.java @@ -0,0 +1,4 @@ +/** + * 人员分析中心 - 数据访问层 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.analysis.mapper; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/analysis/service/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/analysis/service/package-info.java new file mode 100644 index 0000000..4dbdb33 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/analysis/service/package-info.java @@ -0,0 +1,4 @@ +/** + * 人员分析中心 - 业务逻辑层 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.analysis.service; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/dataentry/controller/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/dataentry/controller/package-info.java new file mode 100644 index 0000000..22344be --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/dataentry/controller/package-info.java @@ -0,0 +1,5 @@ +/** + * 数据录入中心 - 控制器层 + * 日报/周报录入、现场照片上传、文档管理、AI智能解析等相关接口 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.dataentry.controller; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/dataentry/domain/dto/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/dataentry/domain/dto/package-info.java new file mode 100644 index 0000000..c5d3072 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/dataentry/domain/dto/package-info.java @@ -0,0 +1,4 @@ +/** + * 数据录入中心 - 数据传输对象 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.dataentry.domain.dto; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/dataentry/domain/entity/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/dataentry/domain/entity/package-info.java new file mode 100644 index 0000000..b999478 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/dataentry/domain/entity/package-info.java @@ -0,0 +1,5 @@ +/** + * 数据录入中心 - 实体类 + * DailyReport, Photo, Document等 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.dataentry.domain.entity; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/dataentry/domain/vo/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/dataentry/domain/vo/package-info.java new file mode 100644 index 0000000..295f3b7 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/dataentry/domain/vo/package-info.java @@ -0,0 +1,4 @@ +/** + * 数据录入中心 - 视图对象 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.dataentry.domain.vo; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/dataentry/mapper/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/dataentry/mapper/package-info.java new file mode 100644 index 0000000..43fabe7 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/dataentry/mapper/package-info.java @@ -0,0 +1,4 @@ +/** + * 数据录入中心 - 数据访问层 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.dataentry.mapper; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/dataentry/service/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/dataentry/service/package-info.java new file mode 100644 index 0000000..26e9a95 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/dataentry/service/package-info.java @@ -0,0 +1,4 @@ +/** + * 数据录入中心 - 业务逻辑层 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.dataentry.service; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/project/controller/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/project/controller/package-info.java new file mode 100644 index 0000000..102bb87 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/project/controller/package-info.java @@ -0,0 +1,5 @@ +/** + * 项目管理中心 - 控制器层 + * 项目列表、项目详情、甘特图、任务管理、资源管理等相关接口 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.project.controller; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/project/domain/dto/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/project/domain/dto/package-info.java new file mode 100644 index 0000000..8259bc1 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/project/domain/dto/package-info.java @@ -0,0 +1,4 @@ +/** + * 项目管理中心 - 数据传输对象 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.project.domain.dto; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/project/domain/entity/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/project/domain/entity/package-info.java new file mode 100644 index 0000000..cda40ee --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/project/domain/entity/package-info.java @@ -0,0 +1,5 @@ +/** + * 项目管理中心 - 实体类 + * Project, Task, Milestone, Resource等 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.project.domain.entity; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/project/domain/vo/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/project/domain/vo/package-info.java new file mode 100644 index 0000000..97ac38c --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/project/domain/vo/package-info.java @@ -0,0 +1,4 @@ +/** + * 项目管理中心 - 视图对象 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.project.domain.vo; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/project/mapper/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/project/mapper/package-info.java new file mode 100644 index 0000000..cafbe39 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/project/mapper/package-info.java @@ -0,0 +1,4 @@ +/** + * 项目管理中心 - 数据访问层 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.project.mapper; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/project/service/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/project/service/package-info.java new file mode 100644 index 0000000..0ae88b9 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/project/service/package-info.java @@ -0,0 +1,4 @@ +/** + * 项目管理中心 - 业务逻辑层 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.project.service; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/risk/controller/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/risk/controller/package-info.java new file mode 100644 index 0000000..4221918 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/risk/controller/package-info.java @@ -0,0 +1,5 @@ +/** + * 风险管控中心 - 控制器层 + * 风险识别、风险评估、风险趋势分析、告警推送等相关接口 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.risk.controller; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/risk/domain/dto/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/risk/domain/dto/package-info.java new file mode 100644 index 0000000..4bdf43b --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/risk/domain/dto/package-info.java @@ -0,0 +1,4 @@ +/** + * 风险管控中心 - 数据传输对象 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.risk.domain.dto; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/risk/domain/entity/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/risk/domain/entity/package-info.java new file mode 100644 index 0000000..1aa4aa2 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/risk/domain/entity/package-info.java @@ -0,0 +1,5 @@ +/** + * 风险管控中心 - 实体类 + * Risk, RiskRecord, Alert等 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.risk.domain.entity; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/risk/domain/vo/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/risk/domain/vo/package-info.java new file mode 100644 index 0000000..5c23d22 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/risk/domain/vo/package-info.java @@ -0,0 +1,4 @@ +/** + * 风险管控中心 - 视图对象 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.risk.domain.vo; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/risk/mapper/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/risk/mapper/package-info.java new file mode 100644 index 0000000..94ccb68 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/risk/mapper/package-info.java @@ -0,0 +1,4 @@ +/** + * 风险管控中心 - 数据访问层 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.risk.mapper; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/risk/service/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/risk/service/package-info.java new file mode 100644 index 0000000..aa7fcb4 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/risk/service/package-info.java @@ -0,0 +1,4 @@ +/** + * 风险管控中心 - 业务逻辑层 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.risk.service; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/system/controller/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/system/controller/package-info.java new file mode 100644 index 0000000..3220dd5 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/system/controller/package-info.java @@ -0,0 +1,5 @@ +/** + * 系统管理 - 控制器层 + * 组织架构、用户权限、项目分类配置、系统配置等相关接口 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.system.controller; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/system/domain/dto/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/system/domain/dto/package-info.java new file mode 100644 index 0000000..4b561dc --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/system/domain/dto/package-info.java @@ -0,0 +1,4 @@ +/** + * 系统管理 - 数据传输对象 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.system.domain.dto; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/system/domain/entity/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/system/domain/entity/package-info.java new file mode 100644 index 0000000..5d4d254 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/system/domain/entity/package-info.java @@ -0,0 +1,5 @@ +/** + * 系统管理 - 实体类 + * User, Role, Permission, Organization等 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.system.domain.entity; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/system/domain/vo/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/system/domain/vo/package-info.java new file mode 100644 index 0000000..4fc34e7 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/system/domain/vo/package-info.java @@ -0,0 +1,4 @@ +/** + * 系统管理 - 视图对象 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.system.domain.vo; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/system/mapper/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/system/mapper/package-info.java new file mode 100644 index 0000000..9c43f9d --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/system/mapper/package-info.java @@ -0,0 +1,4 @@ +/** + * 系统管理 - 数据访问层 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.system.mapper; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/system/service/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/system/service/package-info.java new file mode 100644 index 0000000..c1f7063 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/system/service/package-info.java @@ -0,0 +1,4 @@ +/** + * 系统管理 - 业务逻辑层 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.system.service; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ticket/controller/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ticket/controller/package-info.java new file mode 100644 index 0000000..9f6771f --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ticket/controller/package-info.java @@ -0,0 +1,5 @@ +/** + * 工单服务中心 - 控制器层 + * 工单列表、工单创建、工单分派、进度跟踪等相关接口 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.ticket.controller; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ticket/domain/dto/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ticket/domain/dto/package-info.java new file mode 100644 index 0000000..016942c --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ticket/domain/dto/package-info.java @@ -0,0 +1,4 @@ +/** + * 工单服务中心 - 数据传输对象 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.ticket.domain.dto; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ticket/domain/entity/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ticket/domain/entity/package-info.java new file mode 100644 index 0000000..bf41ff7 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ticket/domain/entity/package-info.java @@ -0,0 +1,5 @@ +/** + * 工单服务中心 - 实体类 + * Ticket, TicketRecord, TicketType等 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.ticket.domain.entity; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ticket/domain/vo/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ticket/domain/vo/package-info.java new file mode 100644 index 0000000..1dc43da --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ticket/domain/vo/package-info.java @@ -0,0 +1,4 @@ +/** + * 工单服务中心 - 视图对象 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.ticket.domain.vo; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ticket/mapper/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ticket/mapper/package-info.java new file mode 100644 index 0000000..9f7f89b --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ticket/mapper/package-info.java @@ -0,0 +1,4 @@ +/** + * 工单服务中心 - 数据访问层 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.ticket.mapper; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ticket/service/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ticket/service/package-info.java new file mode 100644 index 0000000..6e64cfd --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/controller/ticket/service/package-info.java @@ -0,0 +1,4 @@ +/** + * 工单服务中心 - 业务逻辑层 + */ +package cn.yinlihupo.ylhpaiprojectmanager.controller.ticket.service; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ai/client/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ai/client/package-info.java new file mode 100644 index 0000000..f9faa22 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ai/client/package-info.java @@ -0,0 +1,5 @@ +/** + * AI智能助手 - 外部AI服务客户端 + * 封装OCR、图像识别、大语言模型等外部服务调用 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.ai.client; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ai/controller/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ai/controller/package-info.java new file mode 100644 index 0000000..05e4bdb --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ai/controller/package-info.java @@ -0,0 +1,5 @@ +/** + * AI智能助手 - 控制器层 + * 智能问答、项目分析建议、风险预测等相关接口 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.ai.controller; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ai/domain/dto/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ai/domain/dto/package-info.java new file mode 100644 index 0000000..f34dac8 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ai/domain/dto/package-info.java @@ -0,0 +1,4 @@ +/** + * AI智能助手 - 数据传输对象 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.ai.domain.dto; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ai/domain/vo/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ai/domain/vo/package-info.java new file mode 100644 index 0000000..acfabda --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ai/domain/vo/package-info.java @@ -0,0 +1,4 @@ +/** + * AI智能助手 - 视图对象 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.ai.domain.vo; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ai/service/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ai/service/package-info.java new file mode 100644 index 0000000..bb3a9c5 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ai/service/package-info.java @@ -0,0 +1,4 @@ +/** + * AI智能助手 - 业务逻辑层 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.ai.service; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/analysis/controller/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/analysis/controller/package-info.java new file mode 100644 index 0000000..effa6a3 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/analysis/controller/package-info.java @@ -0,0 +1,5 @@ +/** + * 人员分析中心 - 控制器层 + * 人员画像、效能分析、流程卡点分析、效率排行榜等相关接口 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.analysis.controller; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/analysis/domain/dto/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/analysis/domain/dto/package-info.java new file mode 100644 index 0000000..25baf69 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/analysis/domain/dto/package-info.java @@ -0,0 +1,4 @@ +/** + * 人员分析中心 - 数据传输对象 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.analysis.domain.dto; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/analysis/domain/entity/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/analysis/domain/entity/package-info.java new file mode 100644 index 0000000..2d98c66 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/analysis/domain/entity/package-info.java @@ -0,0 +1,5 @@ +/** + * 人员分析中心 - 实体类 + * UserProfile, Efficiency, Bottleneck等 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.analysis.domain.entity; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/analysis/domain/vo/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/analysis/domain/vo/package-info.java new file mode 100644 index 0000000..43b9bce --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/analysis/domain/vo/package-info.java @@ -0,0 +1,4 @@ +/** + * 人员分析中心 - 视图对象 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.analysis.domain.vo; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/analysis/mapper/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/analysis/mapper/package-info.java new file mode 100644 index 0000000..cc9c8cf --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/analysis/mapper/package-info.java @@ -0,0 +1,4 @@ +/** + * 人员分析中心 - 数据访问层 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.analysis.mapper; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/analysis/service/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/analysis/service/package-info.java new file mode 100644 index 0000000..5e9830a --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/analysis/service/package-info.java @@ -0,0 +1,4 @@ +/** + * 人员分析中心 - 业务逻辑层 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.analysis.service; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/dataentry/controller/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/dataentry/controller/package-info.java new file mode 100644 index 0000000..26440d7 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/dataentry/controller/package-info.java @@ -0,0 +1,5 @@ +/** + * 数据录入中心 - 控制器层 + * 日报/周报录入、现场照片上传、文档管理、AI智能解析等相关接口 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.dataentry.controller; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/dataentry/domain/dto/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/dataentry/domain/dto/package-info.java new file mode 100644 index 0000000..a6843c9 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/dataentry/domain/dto/package-info.java @@ -0,0 +1,4 @@ +/** + * 数据录入中心 - 数据传输对象 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.dataentry.domain.dto; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/dataentry/domain/entity/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/dataentry/domain/entity/package-info.java new file mode 100644 index 0000000..bf7bad8 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/dataentry/domain/entity/package-info.java @@ -0,0 +1,5 @@ +/** + * 数据录入中心 - 实体类 + * DailyReport, Photo, Document等 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.dataentry.domain.entity; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/dataentry/domain/vo/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/dataentry/domain/vo/package-info.java new file mode 100644 index 0000000..de33efa --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/dataentry/domain/vo/package-info.java @@ -0,0 +1,4 @@ +/** + * 数据录入中心 - 视图对象 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.dataentry.domain.vo; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/dataentry/mapper/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/dataentry/mapper/package-info.java new file mode 100644 index 0000000..c773381 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/dataentry/mapper/package-info.java @@ -0,0 +1,4 @@ +/** + * 数据录入中心 - 数据访问层 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.dataentry.mapper; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/dataentry/service/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/dataentry/service/package-info.java new file mode 100644 index 0000000..54580f9 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/dataentry/service/package-info.java @@ -0,0 +1,4 @@ +/** + * 数据录入中心 - 业务逻辑层 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.dataentry.service; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/project/controller/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/project/controller/package-info.java new file mode 100644 index 0000000..823f029 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/project/controller/package-info.java @@ -0,0 +1,5 @@ +/** + * 项目管理中心 - 控制器层 + * 项目列表、项目详情、甘特图、任务管理、资源管理等相关接口 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.project.controller; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/project/domain/dto/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/project/domain/dto/package-info.java new file mode 100644 index 0000000..d1f7620 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/project/domain/dto/package-info.java @@ -0,0 +1,4 @@ +/** + * 项目管理中心 - 数据传输对象 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.project.domain.dto; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/project/domain/entity/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/project/domain/entity/package-info.java new file mode 100644 index 0000000..9a7d9ec --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/project/domain/entity/package-info.java @@ -0,0 +1,5 @@ +/** + * 项目管理中心 - 实体类 + * Project, Task, Milestone, Resource等 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.project.domain.entity; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/project/domain/vo/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/project/domain/vo/package-info.java new file mode 100644 index 0000000..a97dfc2 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/project/domain/vo/package-info.java @@ -0,0 +1,4 @@ +/** + * 项目管理中心 - 视图对象 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.project.domain.vo; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/project/mapper/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/project/mapper/package-info.java new file mode 100644 index 0000000..1df5a5c --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/project/mapper/package-info.java @@ -0,0 +1,4 @@ +/** + * 项目管理中心 - 数据访问层 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.project.mapper; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/project/service/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/project/service/package-info.java new file mode 100644 index 0000000..9b141f7 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/project/service/package-info.java @@ -0,0 +1,4 @@ +/** + * 项目管理中心 - 业务逻辑层 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.project.service; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/risk/controller/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/risk/controller/package-info.java new file mode 100644 index 0000000..b907ab1 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/risk/controller/package-info.java @@ -0,0 +1,5 @@ +/** + * 风险管控中心 - 控制器层 + * 风险识别、风险评估、风险趋势分析、告警推送等相关接口 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.risk.controller; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/risk/domain/dto/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/risk/domain/dto/package-info.java new file mode 100644 index 0000000..12d695d --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/risk/domain/dto/package-info.java @@ -0,0 +1,4 @@ +/** + * 风险管控中心 - 数据传输对象 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.risk.domain.dto; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/risk/domain/entity/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/risk/domain/entity/package-info.java new file mode 100644 index 0000000..6896293 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/risk/domain/entity/package-info.java @@ -0,0 +1,5 @@ +/** + * 风险管控中心 - 实体类 + * Risk, RiskRecord, Alert等 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.risk.domain.entity; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/risk/domain/vo/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/risk/domain/vo/package-info.java new file mode 100644 index 0000000..147f624 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/risk/domain/vo/package-info.java @@ -0,0 +1,4 @@ +/** + * 风险管控中心 - 视图对象 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.risk.domain.vo; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/risk/mapper/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/risk/mapper/package-info.java new file mode 100644 index 0000000..4452555 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/risk/mapper/package-info.java @@ -0,0 +1,4 @@ +/** + * 风险管控中心 - 数据访问层 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.risk.mapper; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/risk/service/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/risk/service/package-info.java new file mode 100644 index 0000000..97c4afb --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/risk/service/package-info.java @@ -0,0 +1,4 @@ +/** + * 风险管控中心 - 业务逻辑层 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.risk.service; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/system/controller/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/system/controller/package-info.java new file mode 100644 index 0000000..a9b91db --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/system/controller/package-info.java @@ -0,0 +1,5 @@ +/** + * 系统管理 - 控制器层 + * 组织架构、用户权限、项目分类配置、系统配置等相关接口 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.system.controller; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/system/domain/dto/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/system/domain/dto/package-info.java new file mode 100644 index 0000000..1a18962 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/system/domain/dto/package-info.java @@ -0,0 +1,4 @@ +/** + * 系统管理 - 数据传输对象 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.system.domain.dto; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/system/domain/entity/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/system/domain/entity/package-info.java new file mode 100644 index 0000000..5af6901 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/system/domain/entity/package-info.java @@ -0,0 +1,5 @@ +/** + * 系统管理 - 实体类 + * User, Role, Permission, Organization等 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.system.domain.entity; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/system/domain/vo/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/system/domain/vo/package-info.java new file mode 100644 index 0000000..c6256a1 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/system/domain/vo/package-info.java @@ -0,0 +1,4 @@ +/** + * 系统管理 - 视图对象 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.system.domain.vo; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/system/mapper/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/system/mapper/package-info.java new file mode 100644 index 0000000..df448a5 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/system/mapper/package-info.java @@ -0,0 +1,4 @@ +/** + * 系统管理 - 数据访问层 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.system.mapper; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/system/service/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/system/service/package-info.java new file mode 100644 index 0000000..599ea76 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/system/service/package-info.java @@ -0,0 +1,4 @@ +/** + * 系统管理 - 业务逻辑层 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.system.service; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ticket/controller/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ticket/controller/package-info.java new file mode 100644 index 0000000..7621a6d --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ticket/controller/package-info.java @@ -0,0 +1,5 @@ +/** + * 工单服务中心 - 控制器层 + * 工单列表、工单创建、工单分派、进度跟踪等相关接口 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.ticket.controller; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ticket/domain/dto/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ticket/domain/dto/package-info.java new file mode 100644 index 0000000..ecc2722 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ticket/domain/dto/package-info.java @@ -0,0 +1,4 @@ +/** + * 工单服务中心 - 数据传输对象 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.ticket.domain.dto; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ticket/domain/entity/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ticket/domain/entity/package-info.java new file mode 100644 index 0000000..50daba7 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ticket/domain/entity/package-info.java @@ -0,0 +1,5 @@ +/** + * 工单服务中心 - 实体类 + * Ticket, TicketRecord, TicketType等 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.ticket.domain.entity; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ticket/domain/vo/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ticket/domain/vo/package-info.java new file mode 100644 index 0000000..1759233 --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ticket/domain/vo/package-info.java @@ -0,0 +1,4 @@ +/** + * 工单服务中心 - 视图对象 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.ticket.domain.vo; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ticket/mapper/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ticket/mapper/package-info.java new file mode 100644 index 0000000..7eb6e4d --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ticket/mapper/package-info.java @@ -0,0 +1,4 @@ +/** + * 工单服务中心 - 数据访问层 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.ticket.mapper; diff --git a/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ticket/service/package-info.java b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ticket/service/package-info.java new file mode 100644 index 0000000..8ce4b2f --- /dev/null +++ b/src/main/java/cn/yinlihupo/ylhpaiprojectmanager/service/ticket/service/package-info.java @@ -0,0 +1,4 @@ +/** + * 工单服务中心 - 业务逻辑层 + */ +package cn.yinlihupo.ylhpaiprojectmanager.service.ticket.service;