优化合同个管理和产品管理相关功能

This commit is contained in:
2026-09-12 23:29:45 +08:00
parent 2b1874943f
commit 4455b95e37
92 changed files with 5367 additions and 3144 deletions
-18
View File
@@ -1,18 +0,0 @@
-- 创建存储配置表
CREATE TABLE IF NOT EXISTS `yz_system_storage_config` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`storage_type` varchar(20) NOT NULL DEFAULT 'local' COMMENT '存储类型: local-本地存储, qiniu-七牛云',
`qiniu_access_key` varchar(255) DEFAULT NULL COMMENT '七牛云AccessKey',
`qiniu_secret_key` varchar(255) DEFAULT NULL COMMENT '七牛云SecretKey',
`qiniu_bucket` varchar(128) DEFAULT NULL COMMENT '七牛云Bucket名称',
`qiniu_domain` varchar(255) DEFAULT NULL COMMENT '七牛云CDN域名',
`qiniu_region` varchar(50) DEFAULT NULL COMMENT '七牛云存储区域',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统存储配置表';
-- 插入默认配置(本地存储)
INSERT INTO `yz_system_storage_config` (`storage_type`, `create_time`)
VALUES ('local', NOW())
ON DUPLICATE KEY UPDATE `storage_type` = 'local';
@@ -1,3 +0,0 @@
-- 为 AI 聊天消息表增加图片字段(用户上传的图片,base64 dataURL 的 JSON 数组)
ALTER TABLE `yz_backend_ai_chat_message`
ADD COLUMN `images` TEXT NULL COMMENT '用户上传的图片(base64 dataURL 的 JSON 数组)';
@@ -1,6 +0,0 @@
-- 为 AI 聊天消息表增加 token 用量与响应耗时字段
-- 用途:在对话界面展示每条助手回复的响应时间与消耗的 tokens
ALTER TABLE yz_backend_ai_chat_message
ADD COLUMN tokens INT NOT NULL DEFAULT 0 COMMENT '本次响应消耗的 token 总数',
ADD COLUMN duration_ms INT NOT NULL DEFAULT 0 COMMENT 'AI 响应耗时(毫秒)',
ADD COLUMN model VARCHAR(64) NOT NULL DEFAULT '' COMMENT '生成该消息使用的模型';
+63
View File
@@ -0,0 +1,63 @@
-- =============================================================
-- CRM 逾期(overdue)判定与索引
-- 说明:
-- 逾期以「当前日期」实时判定,无需新增存储字段。
-- 前端在列表/详情中展示「逾期 N 天」标签,规则如下:
-- - 项目 : 结束日期(end_date) < 今天 且 状态 != 已完成(3)
-- - 合同 : 到期日期(expire_date) < 今天 且 状态 != 已完成(2) / 已作废(3)
-- - 回款明细: 计划回款日期(plan_date) < 今天 且 明细状态 != 已回款(3)
-- 本脚本仅补充判定所需的日期索引,并给出等价 SQL 供统计/定时任务使用。
-- =============================================================
-- 1) 项目:结束日期索引(逾期判定 + 按结束日期排序)
ALTER TABLE `yz_backend_crm_project`
ADD INDEX `idx_end_date` (`end_date`);
-- 2) 合同:到期日期索引(逾期判定 + 按到期日期排序)
ALTER TABLE `yz_backend_crm_contract`
ADD INDEX `idx_expire_date` (`expire_date`);
-- 3) 回款明细逾期:plan_date 内嵌于 items(JSON),无法建单列索引。
-- 如需按「逾期回款明细」做服务端统计,建议将回款明细拆为独立子表
-- (如 yz_backend_crm_payback_item,含 plan_date DATE 列),再建索引。
-- 当前版本逾期在应用层(前端/接口)实时计算,items 已含 plan_date。
-- =============================================================
-- 等价查询(统计「逾期」记录,供运营/定时任务参考)
-- 注意:DATE(end_date) < CURDATE() 表示「结束日期在今天之前」。
-- =============================================================
-- 逾期项目(结束日期已过且未完成)
SELECT id, project_name, end_date, status
FROM `yz_backend_crm_project`
WHERE `delete_time` IS NULL
AND `end_date` IS NOT NULL
AND DATE(`end_date`) < CURDATE()
AND `status` <> 3; -- 3=已完成
-- 逾期合同(到期日期已过且非已完成/已作废)
SELECT id, contract_name, expire_date, status
FROM `yz_backend_crm_contract`
WHERE `delete_time` IS NULL
AND `expire_date` IS NOT NULL
AND DATE(`expire_date`) < CURDATE()
AND `status` NOT IN (2, 3); -- 2=已完成, 3=已作废
-- 逾期回款明细(MySQL 5.7+ 可用 JSON 函数;低版本建议在应用层计算)
-- 列出「存在任一逾期明细」的回款计划
SELECT p.id, p.contract_name,
j.seq, j.name, j.plan_date, j.status
FROM `yz_backend_crm_payback` p,
JSON_TABLE(
p.items,
'$[*]' COLUMNS (
seq INT PATH '$.seq',
name VARCHAR(100) PATH '$.name',
plan_date DATE PATH '$.plan_date',
status INT PATH '$.status'
)
) j
WHERE p.`delete_time` IS NULL
AND j.plan_date IS NOT NULL
AND DATE(j.plan_date) < CURDATE()
AND j.status <> 3; -- 3=已回款
@@ -0,0 +1,42 @@
-- =============================================================
-- 回款计划表(yz_backend_crm_payback)建表 / 核对脚本
-- =============================================================
-- 说明:
-- 1. 计划明细 items 以 JSON 文本存储,plan_date(计划回款日期)已内置于
-- 各类 plan_type 的明细结构中,无需新增独立列,故无 ALTER TABLE 语句。
-- 2. 各 plan_type 的 items 明细结构:
-- 月度/季度/年度:{"seq":int,"name":"第1期","amount":0,"plan_date":"2026-10-01"}
-- 进度: {"seq":int,"name":"预付款","percent":30,"amount":0,"plan_date":"2026-10-01"}
-- 自定义: {"seq":int,"name":"首付款","plan_date":"2026-10-01","amount":0}
-- 每行另含 received_amount / received_date / status(回款进度登记用)。
-- 3. 执行下方建表脚本可创建或核对表结构(幂等,已存在则跳过)。
-- =============================================================
CREATE TABLE IF NOT EXISTS `yz_backend_crm_payback` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`tenant_id` VARCHAR(64) NOT NULL DEFAULT '',
`contract_id` BIGINT UNSIGNED NULL,
`contract_no` VARCHAR(50) NOT NULL DEFAULT '',
`contract_name` VARCHAR(100) NOT NULL DEFAULT '',
`customer_id` BIGINT UNSIGNED NULL,
`customer_name` VARCHAR(128) NOT NULL DEFAULT '',
`plan_type` TINYINT NOT NULL DEFAULT 1 COMMENT '1月度/2季度/3年度/4进度/5自定义',
`pay_method` TINYINT NOT NULL DEFAULT 1 COMMENT '1对公/2网银/3现金/4支票/5支付宝/6微信/7其他',
`remind_days` INT NOT NULL DEFAULT 0 COMMENT '提前几天提醒',
`owner_user_id` VARCHAR(64) NOT NULL DEFAULT '',
`owner_user_name` VARCHAR(128) NOT NULL DEFAULT '',
`contract_amount` DECIMAL(14,2) NOT NULL DEFAULT 0 COMMENT '合同总金额',
`total_amount` DECIMAL(14,2) NOT NULL DEFAULT 0 COMMENT '计划回款总额',
`received_amount` DECIMAL(14,2) NOT NULL DEFAULT 0 COMMENT '已回款金额',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '1进行中/2已完成',
`items` TEXT NULL COMMENT '计划明细 JSON 数组(含 plan_date 计划回款日期)',
`remark` TEXT NULL,
`create_user_id` VARCHAR(64) NOT NULL DEFAULT '',
`create_time` DATETIME NOT NULL,
`update_time` DATETIME NOT NULL,
`delete_time` DATETIME NULL,
PRIMARY KEY (`id`),
KEY `idx_yz_backend_crm_payback_tenant` (`tenant_id`),
KEY `idx_yz_backend_crm_payback_contract` (`contract_id`),
KEY `idx_yz_backend_crm_payback_delete` (`delete_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='回款计划表';
@@ -0,0 +1,12 @@
-- =============================================================
-- CRM 回款计划:流水回执(receipt)字段
-- 说明:
-- 回款登记支持上传「流水回执」(银行流水 / 转账凭证等),非必填。
-- 新增两列用于保存回执文件地址与文件名,随回款计划主表一并存取。
-- 文件本身经 /backend/uploadfile 上传到文件存储,此处仅存其可访问地址。
-- =============================================================
-- 回款计划表:流水回执地址 + 文件名(均允许为空)
ALTER TABLE `yz_backend_crm_payback`
ADD COLUMN `receipt_url` VARCHAR(512) NULL COMMENT '流水回执文件地址(选填)' AFTER `remark`,
ADD COLUMN `receipt_name` VARCHAR(255) NULL COMMENT '流水回执文件名(选填)' AFTER `receipt_url`;
@@ -1,15 +0,0 @@
-- 项目表新增「产品清单」字段:yz_backend_crm_project.products
-- 手动执行;可重复执行(列已存在时自动跳过,不再报 1060)。
-- 该字段用于保存项目生成产品时写入产品管理的产品清单JSON。
SET @dbname = DATABASE();
SET @tablename = 'yz_backend_crm_project';
SET @columnname = 'products';
SET @preparedStatement = (SELECT IF(
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0,
'SELECT 1',
'ALTER TABLE yz_backend_crm_project ADD COLUMN products text COMMENT ''项目产品清单JSON(写入产品管理时使用)'''
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
@@ -1,93 +0,0 @@
-- 文件存储分层改造:yz_system_files 新增归属与存储字段
-- 对应计划文档:go/docs/文件存储分层改造计划.md S1
--
-- 幂等脚本:用存储过程逐项判断,已存在的列/索引自动跳过,可反复执行,不会报
-- 1060 Duplicate column / 1061 Duplicate key。
--
-- 背景:md5 在部分历史库中是 TEXT 类型,MySQL 不允许对 TEXT/BLOB 建整列索引,
-- 因此 idx_file_dedup 使用前缀长度 md5(32)(MD5 十六进制串固定 32 字符,等价全值)。
DROP PROCEDURE IF EXISTS `yz_alter_system_files_storage`;
DELIMITER $$
CREATE PROCEDURE `yz_alter_system_files_storage`()
BEGIN
DECLARE v_db VARCHAR(64);
SET v_db = DATABASE();
-- 1. 字段:source
IF NOT EXISTS (
SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = v_db AND TABLE_NAME = 'yz_system_files' AND COLUMN_NAME = 'source'
) THEN
ALTER TABLE `yz_system_files`
ADD COLUMN `source` varchar(16) NOT NULL DEFAULT 'backend'
COMMENT '来源端: backend-租户后台 platform-平台端';
END IF;
-- 2. 字段:scope
IF NOT EXISTS (
SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = v_db AND TABLE_NAME = 'yz_system_files' AND COLUMN_NAME = 'scope'
) THEN
ALTER TABLE `yz_system_files`
ADD COLUMN `scope` varchar(16) NOT NULL DEFAULT 'tenant'
COMMENT '归属: tenant-租户共享 user-用户个人';
END IF;
-- 3. 字段:storage
IF NOT EXISTS (
SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = v_db AND TABLE_NAME = 'yz_system_files' AND COLUMN_NAME = 'storage'
) THEN
ALTER TABLE `yz_system_files`
ADD COLUMN `storage` varchar(16) NOT NULL DEFAULT ''
COMMENT '存储类型: local/qiniu(冗余,便于迁移与排查)';
END IF;
-- 4. 字段:object_key
IF NOT EXISTS (
SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = v_db AND TABLE_NAME = 'yz_system_files' AND COLUMN_NAME = 'object_key'
) THEN
ALTER TABLE `yz_system_files`
ADD COLUMN `object_key` varchar(512) NOT NULL DEFAULT ''
COMMENT '存储相对路径(不含域名),用于迁移与精确删除';
END IF;
-- 5. 索引:查重(source + scope + tid + tuid + md5 前缀)
-- 不加 UNIQUE:软删(delete_time)与并发上传下唯一索引会直接报错,去重在代码层完成
IF NOT EXISTS (
SELECT 1 FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = v_db AND TABLE_NAME = 'yz_system_files' AND INDEX_NAME = 'idx_file_dedup'
) THEN
ALTER TABLE `yz_system_files`
ADD KEY `idx_file_dedup` (`source`, `scope`, `tid`, `tuid`, `md5`(32));
END IF;
-- 6. 索引:归属列表过滤
IF NOT EXISTS (
SELECT 1 FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = v_db AND TABLE_NAME = 'yz_system_files' AND INDEX_NAME = 'idx_file_owner'
) THEN
ALTER TABLE `yz_system_files`
ADD KEY `idx_file_owner` (`source`, `tid`, `scope`, `tuid`, `delete_time`);
END IF;
END$$
DELIMITER ;
CALL `yz_alter_system_files_storage`();
DROP PROCEDURE IF EXISTS `yz_alter_system_files_storage`;
-- 7. 老数据初始化:迁移脚本执行前先打底,避免 source/scope 为空导致查询遗漏
UPDATE `yz_system_files` SET `source` = 'backend' WHERE `source` = '' OR `source` IS NULL;
UPDATE `yz_system_files` SET `scope` = 'tenant' WHERE `scope` = '' OR `scope` IS NULL;
-- 8. 校验(应看到 4 个字段 + 2 个索引)
-- SHOW COLUMNS FROM yz_system_files LIKE 'source';
-- SHOW COLUMNS FROM yz_system_files LIKE 'scope';
-- SHOW COLUMNS FROM yz_system_files LIKE 'storage';
-- SHOW COLUMNS FROM yz_system_files LIKE 'object_key';
-- SHOW INDEX FROM yz_system_files WHERE Key_name IN ('idx_file_dedup','idx_file_owner');
-29
View File
@@ -1,29 +0,0 @@
-- CRM 产品管理表:yz_backend_crm_product
-- 手动执行(可重复执行);产品可由「项目生成」时自动写入,也可在「产品管理」中独立维护。
CREATE TABLE IF NOT EXISTS yz_backend_crm_product (
id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键ID',
tenant_id varchar(64) NOT NULL COMMENT '租户ID',
product_no varchar(50) NOT NULL DEFAULT '' COMMENT '产品编号',
product_name varchar(100) NOT NULL COMMENT '产品名称',
category varchar(20) NOT NULL DEFAULT '' COMMENT '分类:1硬件/2软件/3服务/4开发/5其他',
unit varchar(20) NOT NULL DEFAULT '' COMMENT '单位',
spec varchar(255) NOT NULL DEFAULT '' COMMENT '规格型号',
price decimal(14,2) NOT NULL DEFAULT '0.00' COMMENT '销售单价',
cost_price decimal(14,2) NOT NULL DEFAULT '0.00' COMMENT '成本单价',
tax_rate decimal(6,2) NOT NULL DEFAULT '0.00' COMMENT '税率(%)',
status tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态:1启用/0停用',
project_id bigint(20) DEFAULT NULL COMMENT '来源项目ID(由项目生成时填入)',
project_name varchar(100) NOT NULL DEFAULT '' COMMENT '来源项目名称',
remark text COMMENT '备注',
create_user_id varchar(64) NOT NULL DEFAULT '' COMMENT '创建人用户ID',
create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
delete_time datetime DEFAULT NULL COMMENT '删除时间(软删除)',
PRIMARY KEY (id),
KEY idx_tenant_id (tenant_id),
KEY idx_product_name (tenant_id,product_name),
KEY idx_category (tenant_id,category),
KEY idx_project (tenant_id,project_id),
KEY idx_status (tenant_id,status),
KEY idx_delete_time (delete_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户CRM产品管理表';
@@ -1,19 +0,0 @@
-- CRM 产品分类表:yz_backend_crm_product_category
-- 手动执行(可重复执行);建表后请在「产品管理-产品分类」中维护数据。
CREATE TABLE IF NOT EXISTS yz_backend_crm_product_category (
id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键ID',
tenant_id varchar(64) NOT NULL COMMENT '租户ID',
name varchar(100) NOT NULL COMMENT '分类名称',
code varchar(50) NOT NULL DEFAULT '' COMMENT '分类编码(选填)',
sort int(11) NOT NULL DEFAULT '0' COMMENT '排序',
status tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态:1启用/0停用',
remark text COMMENT '备注',
create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
delete_time datetime DEFAULT NULL COMMENT '删除时间(软删除)',
PRIMARY KEY (id),
UNIQUE KEY uk_tenant_name (tenant_id,name),
KEY idx_tenant_id (tenant_id),
KEY idx_status (tenant_id,status),
KEY idx_delete_time (delete_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户CRM产品分类表';
-45
View File
@@ -1,45 +0,0 @@
-- 投诉建议「产品分类」:区分用户针对哪类产品提建议
-- 请在目标库手动执行(utf8mb4)
CREATE TABLE IF NOT EXISTS `yz_system_complaint_category` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(64) NOT NULL COMMENT '分类名称,如:官网、租户后台、小程序',
`code` varchar(32) DEFAULT NULL COMMENT '可选编码,便于程序识别',
`sort` int NOT NULL DEFAULT 0 COMMENT '排序,越小越靠前',
`status` tinyint NOT NULL DEFAULT 1 COMMENT '1启用 0禁用',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`delete_time` datetime DEFAULT NULL COMMENT '软删',
PRIMARY KEY (`id`),
KEY `idx_delete_time` (`delete_time`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='投诉建议-产品分类';
CREATE TABLE IF NOT EXISTS `yz_system_platform_complaint` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`category_id` bigint unsigned NOT NULL COMMENT '产品分类ID',
`title` varchar(200) NOT NULL COMMENT '标题',
`content` text NOT NULL COMMENT '建议/投诉内容',
`contact_name` varchar(64) DEFAULT NULL COMMENT '联系人',
`contact_phone` varchar(32) DEFAULT NULL COMMENT '联系电话',
`contact_email` varchar(128) DEFAULT NULL COMMENT '联系邮箱',
`status` tinyint NOT NULL DEFAULT 0 COMMENT '0待处理 1处理中 2已回复 3已关闭',
`reply_content` text COMMENT '平台回复内容',
`reply_time` datetime DEFAULT NULL COMMENT '回复时间',
`tid` bigint unsigned DEFAULT NULL COMMENT '可选:关联租户ID',
`remark` varchar(512) DEFAULT NULL COMMENT '管理员内部备注',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`delete_time` datetime DEFAULT NULL COMMENT '软删',
PRIMARY KEY (`id`),
KEY `idx_category_id` (`category_id`),
KEY `idx_status` (`status`),
KEY `idx_delete_time` (`delete_time`),
KEY `idx_tid` (`tid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='平台端-投诉建议';
-- 可选:示例分类(执行完建表后按需取消注释)
-- INSERT INTO `yz_system_complaint_category` (`name`,`code`,`sort`,`status`) VALUES
-- ('官网','site',0,1),
-- ('租户后台','tenant_admin',10,1),
-- ('小程序','miniapp',20,1);
-129
View File
@@ -1,129 +0,0 @@
-- OA 文档管理(文档库 / 文档图谱)建表脚本
--
-- 说明:正常情况【不需要执行本脚本】。
-- 服务在首次访问 /backend/oa/document/* 接口时,会由
-- controllers/backend_oa_document.go 的 Prepare() 调用
-- models.EnsureOaDocumentTables() 自动建表(CREATE TABLE IF NOT EXISTS,
-- sync.Once 保证单进程只建一次)。
--
-- 本脚本仅用于以下场景手工预建:
-- 1. 生产库账号没有 DDL 权限,自动建表失败;
-- 2. DBA 要求先在预发/生产环境审核建表语句;
-- 3. 需要排查表结构是否符合预期。
--
-- 幂等:全部使用 IF NOT EXISTS,可反复执行,不会覆盖已有数据。
-- 与代码保持一致:models/oa_document.go
-- 1. 文档分类表(树形)
CREATE TABLE IF NOT EXISTS yz_backend_oa_doc_category (
id bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
tid int NOT NULL DEFAULT 0 COMMENT '租户ID',
user_id bigint unsigned NOT NULL DEFAULT 0 COMMENT '分类归属用户:共享空间共享=0(租户级);私密空间=创建者的 yz_system_tenant_user.uid',
parent_id bigint unsigned NOT NULL DEFAULT 0 COMMENT '父级ID,0为一级分类',
name varchar(128) NOT NULL DEFAULT '' COMMENT '分类名称',
sort int NOT NULL DEFAULT 0 COMMENT '排序,越小越靠前',
remark varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
is_system tinyint NOT NULL DEFAULT 0 COMMENT '是否系统内置分类 0-否(可删除) 1-是(不可删除)',
scope varchar(16) NOT NULL DEFAULT 'shared' COMMENT '所属空间 shared-共享文档空间 personal-私密文档空间(绑定用户级别)',
is_deleted tinyint NOT NULL DEFAULT 0 COMMENT '是否删除 0-否 1-是',
create_time datetime DEFAULT NULL COMMENT '创建时间',
update_time datetime DEFAULT NULL COMMENT '更新时间',
delete_time datetime DEFAULT NULL COMMENT '删除时间',
PRIMARY KEY (id),
KEY idx_tid_parent (tid, parent_id),
KEY idx_tid_scope_user (tid, scope, user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='OA文档分类表';
-- 1.1 历史库补齐列(特性上线前已建表时执行,已存在则报错可忽略)
-- ALTER TABLE yz_backend_oa_doc_category
-- ADD COLUMN is_system tinyint NOT NULL DEFAULT 0 COMMENT '是否系统内置分类 0-否(可删除) 1-是(不可删除)';
-- ALTER TABLE yz_backend_oa_doc_category
-- ADD COLUMN scope varchar(16) NOT NULL DEFAULT 'shared' COMMENT '所属空间 shared-共享 personal-私密';
-- ALTER TABLE yz_backend_oa_doc_category
-- ADD COLUMN user_id bigint unsigned NOT NULL DEFAULT 0 COMMENT '分类归属用户(私密空间=租户用户 uid)';
-- 1.2 分类归属规则(双空间模型,2026-09 起):
-- 文档库按「共享文档 / 私密文档」两个空间组织,每个空间各自一棵分类树:
-- - 共享空间:scope=shared、user_id=0(租户级,全租户共用一套,任何人可建/删,内置分类除外);
-- - 私密空间:scope=personal、user_id=当前用户的 yz_system_tenant_user.uid(绑定到用户级别,各用户独立一套)。
-- 文档可见性(OaDoc.visibility)与所在空间一一对应:共享空间→0(租户公开),私密空间→1(私密,仅创建者与被共享者可见)。
-- 系统内置分类「项目文档」(scope=shared, user_id=0, is_system=1) 属于共享空间,按租户自动补建
-- (models.EnsureOaDocDefaultCategories),一般无需手工插入。
-- 历史脏数据(scope 不在 shared/personal)在 EnsureOaDocumentTables 中自动归为共享空间(user_id=0, scope=shared)。
-- 说明:「未分类」是虚拟分类,文档 category_id = 0 即表示未分类,两个空间各自独立计算,不落库、不可删除。
-- 2. 文档表
-- doc_type: 0-其他 1-文档 2-表格 3-演示 4-PDF 5-图片 6-压缩包 7-视频 8-音频
-- status : 0-草稿 1-已发布 2-已归档
CREATE TABLE IF NOT EXISTS yz_backend_oa_doc (
id bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
tid int NOT NULL DEFAULT 0 COMMENT '租户ID',
category_id bigint unsigned NOT NULL DEFAULT 0 COMMENT '所属分类ID,0为未分类',
title varchar(255) NOT NULL DEFAULT '' COMMENT '文档标题',
file_id bigint unsigned NOT NULL DEFAULT 0 COMMENT '关联附件ID(yz_system_files)',
file_url varchar(512) NOT NULL DEFAULT '' COMMENT '附件访问地址',
file_name varchar(255) NOT NULL DEFAULT '' COMMENT '原始文件名',
ext varchar(16) NOT NULL DEFAULT '' COMMENT '扩展名',
size bigint unsigned NOT NULL DEFAULT 0 COMMENT '文件大小(字节)',
doc_type tinyint NOT NULL DEFAULT 0 COMMENT '类型 0-其他 1-文档 2-表格 3-演示 4-PDF 5-图片 6-压缩包 7-视频 8-音频',
tags varchar(255) NOT NULL DEFAULT '' COMMENT '标签,逗号分隔',
summary varchar(1000) NOT NULL DEFAULT '' COMMENT '摘要/描述',
status tinyint NOT NULL DEFAULT 0 COMMENT '状态 0-草稿 1-已发布 2-已归档',
version int NOT NULL DEFAULT 1 COMMENT '版本号',
is_star tinyint NOT NULL DEFAULT 0 COMMENT '是否收藏 0-否 1-是',
owner_id bigint unsigned NOT NULL DEFAULT 0 COMMENT '负责人ID',
owner_name varchar(100) NOT NULL DEFAULT '' COMMENT '负责人姓名',
view_count int NOT NULL DEFAULT 0 COMMENT '查看次数',
download_count int NOT NULL DEFAULT 0 COMMENT '下载次数',
creator_id bigint unsigned NOT NULL DEFAULT 0 COMMENT '创建人ID',
creator_name varchar(100) NOT NULL DEFAULT '' COMMENT '创建人姓名',
visibility tinyint NOT NULL DEFAULT 0 COMMENT '可见性 0-租户公开 1-私密(仅创建者与被共享者)',
is_deleted tinyint NOT NULL DEFAULT 0 COMMENT '是否删除 0-否 1-是',
create_time datetime DEFAULT NULL COMMENT '创建时间',
update_time datetime DEFAULT NULL COMMENT '更新时间',
delete_time datetime DEFAULT NULL COMMENT '删除时间',
PRIMARY KEY (id),
KEY idx_tid_cate (tid, category_id, is_deleted),
KEY idx_tid_status (tid, status, is_deleted),
KEY idx_tid_title (tid, title)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='OA文档表';
-- 3. 文档关联表(文档图谱的连线来源)
-- relation: reference-引用 related-相关 version-版本 belong-从属
-- 说明:代码在建立关联时会同时写入正向与反向两条记录,便于图谱无向检索;
-- uk_doc_pair 保证同一对文档的同一关系不重复。
CREATE TABLE IF NOT EXISTS yz_backend_oa_doc_link (
id bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
tid int NOT NULL DEFAULT 0 COMMENT '租户ID',
source_id bigint unsigned NOT NULL DEFAULT 0 COMMENT '源文档ID',
target_id bigint unsigned NOT NULL DEFAULT 0 COMMENT '目标文档ID',
relation varchar(32) NOT NULL DEFAULT 'related' COMMENT '关系 reference-引用 related-相关 version-版本 belong-从属',
remark varchar(255) NOT NULL DEFAULT '' COMMENT '关系说明',
creator_id bigint unsigned NOT NULL DEFAULT 0 COMMENT '创建人ID',
create_time datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (id),
UNIQUE KEY uk_doc_pair (tid, source_id, target_id, relation),
KEY idx_tid_source (tid, source_id),
KEY idx_tid_target (tid, target_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='OA文档关联表';
-- 4. 文档共享表(私密文档可见性授权)
-- share_type: 0-用户(target_id=uid) 1-部门(target_id=org_id,含子部门)
-- uk_doc_target 保证同一文档对同一目标不重复授权。
CREATE TABLE IF NOT EXISTS yz_backend_oa_doc_share (
id bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
tid int NOT NULL DEFAULT 0 COMMENT '租户ID',
doc_id bigint unsigned NOT NULL DEFAULT 0 COMMENT '文档ID',
share_type tinyint NOT NULL DEFAULT 0 COMMENT '共享类型 0-用户(target_id=uid) 1-部门(target_id=org_id,含子部门)',
target_id bigint unsigned NOT NULL DEFAULT 0 COMMENT '共享目标ID',
creator_id bigint unsigned NOT NULL DEFAULT 0 COMMENT '授权人ID',
create_time datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (id),
UNIQUE KEY uk_doc_target (tid, doc_id, share_type, target_id),
KEY idx_tid_doc (tid, doc_id),
KEY idx_target (tid, share_type, target_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='OA文档共享表';
-- 5. 校验(应看到 4 张表)
-- SHOW TABLES LIKE 'yz_backend_oa_doc%';
@@ -1,31 +0,0 @@
-- Cursor 激活码管理
-- status: 0 未使用 1 已使用 2 已过期 3 已禁用
-- type: 0 自定义 1 天卡 7 周卡 30 月卡 90 季卡 365 年卡
CREATE TABLE IF NOT EXISTS `yz_platform_cursor_activation_code` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`code` varchar(128) NOT NULL COMMENT '激活码',
`type` int NOT NULL DEFAULT 30 COMMENT '卡密类型:0自定义 1天卡 7周卡 30月卡 90季卡 365年卡',
`status` tinyint NOT NULL DEFAULT 0 COMMENT '状态:0未使用 1已使用 2已过期 3已禁用',
`duration_days` int NOT NULL DEFAULT 30 COMMENT '有效天数',
`bind_account` varchar(128) DEFAULT NULL COMMENT '绑定账号',
`bind_device_id` bigint unsigned DEFAULT NULL COMMENT '绑定设备ID,关联 yz_platform_cursor_equipment.id',
`machine_code` varchar(128) DEFAULT NULL COMMENT '绑定设备机器码',
`device_info` varchar(1000) DEFAULT NULL COMMENT '绑定设备信息',
`owner_user_id` bigint unsigned DEFAULT NULL COMMENT '归属用户ID',
`owner_user_name` varchar(128) DEFAULT NULL COMMENT '归属用户名称',
`activated_at` datetime DEFAULT NULL COMMENT '激活时间',
`expired_at` datetime DEFAULT NULL COMMENT '过期时间',
`remark` varchar(1000) DEFAULT NULL COMMENT '备注',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` datetime DEFAULT NULL COMMENT '删除时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_code` (`code`),
KEY `idx_status_delete` (`status`,`delete_time`),
KEY `idx_type_status` (`type`,`status`),
KEY `idx_bind_account` (`bind_account`),
KEY `idx_bind_device_id` (`bind_device_id`),
KEY `idx_owner_user_id` (`owner_user_id`),
KEY `idx_expired_at` (`expired_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Cursor续杯激活码';
-26
View File
@@ -1,26 +0,0 @@
-- 软件升级产品(客户端拉取版本与下载地址)
-- 安装包建议上传到文件管理,分类使用「appsupgrade」(或任意分类,记录 file_id 即可)
CREATE TABLE IF NOT EXISTS `yz_system_software_upgrade` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(128) NOT NULL COMMENT '软件显示名称',
`code` varchar(64) NOT NULL COMMENT '客户端唯一标识,与 check 接口 code 一致',
`latest_version` varchar(32) NOT NULL DEFAULT '0.0.0' COMMENT '当前发布的最新版本号',
`file_id` bigint unsigned DEFAULT NULL COMMENT '关联 yz_system_files.id,安装包',
`download_url` varchar(512) DEFAULT NULL COMMENT '兼容旧客户端的单安装包地址;为空则用 file_id 对应 src 拼公开 URL',
`download_urls` text DEFAULT NULL COMMENT '多运行环境安装包地址 JSON,如 {"windows":"...","mac":"...","ubuntu":"...","linux":"..."}',
`force_update` tinyint NOT NULL DEFAULT 0 COMMENT '1 建议强制更新',
`release_notes` varchar(2000) DEFAULT NULL COMMENT '更新说明',
`status` tinyint NOT NULL DEFAULT 1 COMMENT '1 启用 0 停用',
`sort` int NOT NULL DEFAULT 0,
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`delete_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_code` (`code`),
KEY `idx_status_delete` (`status`,`delete_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='软件升级产品';
-- 已有表升级:
-- ALTER TABLE `yz_system_software_upgrade`
-- ADD COLUMN `download_urls` text DEFAULT NULL COMMENT '多运行环境安装包地址 JSON,如 {"windows":"...","mac":"...","ubuntu":"...","linux":"..."}' AFTER `download_url`;