优化合同个管理和产品管理相关功能
This commit is contained in:
@@ -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 '生成该消息使用的模型';
|
||||
@@ -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');
|
||||
@@ -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产品分类表';
|
||||
@@ -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);
|
||||
@@ -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续杯激活码';
|
||||
@@ -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`;
|
||||
Reference in New Issue
Block a user