-- 物流业务知识库 M1:分类 + 文章 -- 执行库:OMS 业务库 CREATE TABLE IF NOT EXISTS `t_kb_category` ( `Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键', `Code` VARCHAR(64) NOT NULL COMMENT '稳定键,如 pricing', `Name` VARCHAR(128) NOT NULL COMMENT '展示名(中文)', `SortOrder` INT NOT NULL DEFAULT 0 COMMENT '排序,越小越前', `Enabled` TINYINT NOT NULL DEFAULT 1 COMMENT '是否启用:0-否,1-是', `IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是', `ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT (UUID()) COMMENT '并发戳', `CreateUserId` INT NOT NULL DEFAULT 0 COMMENT '创建人', `CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `UpdateUserId` INT NULL COMMENT '更新人', `UpdateTime` DATETIME NULL COMMENT '更新时间', PRIMARY KEY (`Id`), UNIQUE KEY `uk_kb_category_code` (`Code`), KEY `idx_kb_category_enabled_sort` (`Enabled`, `SortOrder`) ) COMMENT='知识库分类'; CREATE TABLE IF NOT EXISTS `t_kb_article` ( `Id` INT NOT NULL AUTO_INCREMENT COMMENT '主键', `CategoryId` INT NOT NULL COMMENT '分类 Id', `Title` VARCHAR(200) NOT NULL COMMENT '标题(中文)', `Summary` VARCHAR(500) NULL COMMENT '列表摘要', `Content` LONGTEXT NOT NULL COMMENT 'Markdown 正文(中文)', `Audience` VARCHAR(16) NOT NULL DEFAULT 'customer' COMMENT '受众 customer/internal', `Status` VARCHAR(16) NOT NULL DEFAULT 'draft' COMMENT 'draft/published/offline', `Tags` VARCHAR(256) NULL COMMENT '逗号分隔标签', `RelatedPath` VARCHAR(256) NULL COMMENT '站内关联 path', `RelatedLabel` VARCHAR(64) NULL COMMENT '关联按钮文案', `IsPinned` TINYINT NOT NULL DEFAULT 0 COMMENT '置顶:0-否,1-是', `SortOrder` INT NOT NULL DEFAULT 0 COMMENT '同类排序', `PublishTime` DATETIME NULL COMMENT '发布时间', `ExpireTime` DATETIME NULL COMMENT '过期时间', `ViewCount` INT NOT NULL DEFAULT 0 COMMENT '浏览次数', `IsDeleted` TINYINT NOT NULL DEFAULT 0 COMMENT '软删除:0-否,1-是', `ConcurrencyStamp` CHAR(36) NOT NULL DEFAULT (UUID()) COMMENT '并发戳', `CreateUserId` INT NOT NULL DEFAULT 0 COMMENT '创建人', `CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `UpdateUserId` INT NULL COMMENT '更新人', `UpdateTime` DATETIME NULL COMMENT '更新时间', PRIMARY KEY (`Id`), KEY `idx_kb_article_list` (`Status`, `Audience`, `CategoryId`, `IsPinned`, `SortOrder`), KEY `idx_kb_article_publish` (`Status`, `Audience`, `PublishTime`), KEY `idx_kb_article_hot` (`Status`, `Audience`, `IsPinned`, `ViewCount`) ) COMMENT='知识库文章'; -- 种子分类(幂等:Code 唯一) INSERT INTO `t_kb_category` (`Code`, `Name`, `SortOrder`, `Enabled`) SELECT 'pricing', '查价与计费', 10, 1 FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM `t_kb_category` WHERE `Code` = 'pricing' AND `IsDeleted` = 0); INSERT INTO `t_kb_category` (`Code`, `Name`, `SortOrder`, `Enabled`) SELECT 'order', '下单与轨迹', 20, 1 FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM `t_kb_category` WHERE `Code` = 'order' AND `IsDeleted` = 0); INSERT INTO `t_kb_category` (`Code`, `Name`, `SortOrder`, `Enabled`) SELECT 'exception', '问题件与售后', 30, 1 FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM `t_kb_category` WHERE `Code` = 'exception' AND `IsDeleted` = 0); INSERT INTO `t_kb_category` (`Code`, `Name`, `SortOrder`, `Enabled`) SELECT 'customs', '禁限运与清关', 40, 1 FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM `t_kb_category` WHERE `Code` = 'customs' AND `IsDeleted` = 0); INSERT INTO `t_kb_category` (`Code`, `Name`, `SortOrder`, `Enabled`) SELECT 'account', '账户与充值', 50, 1 FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM `t_kb_category` WHERE `Code` = 'account' AND `IsDeleted` = 0); INSERT INTO `t_kb_category` (`Code`, `Name`, `SortOrder`, `Enabled`) SELECT 'dropship', '代发与店铺', 60, 1 FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM `t_kb_category` WHERE `Code` = 'dropship' AND `IsDeleted` = 0); -- 种子 FAQ(幂等:按 Title + Category Code) INSERT INTO `t_kb_article` (`CategoryId`, `Title`, `Summary`, `Content`, `Audience`, `Status`, `Tags`, `RelatedPath`, `RelatedLabel`, `IsPinned`, `SortOrder`, `PublishTime`, `ViewCount`) SELECT c.`Id`, '如何查价?计费重量怎么算?', '说明计费重、体积重与卖价取整规则。', '## 查价入口\n\n工作台或菜单进入「查价」,填写目的国、重量与尺寸即可预估运费。\n\n## 计费重量\n\n系统按 **实重** 与 **体积重** 取较大者作为计费重。体积重公式以销售产品配置为准。\n\n## 提示\n\n查价结果为预估,实际以出库计费为准。', 'customer', 'published', '查价,计费', '/order/priceCheck', '去查价', 1, 10, NOW(), 0 FROM `t_kb_category` c WHERE c.`Code` = 'pricing' AND c.`IsDeleted` = 0 AND NOT EXISTS ( SELECT 1 FROM `t_kb_article` a WHERE a.`Title` = '如何查价?计费重量怎么算?' AND a.`CategoryId` = c.`Id` AND a.`IsDeleted` = 0 ); INSERT INTO `t_kb_article` (`CategoryId`, `Title`, `Summary`, `Content`, `Audience`, `Status`, `Tags`, `RelatedPath`, `RelatedLabel`, `IsPinned`, `SortOrder`, `PublishTime`, `ViewCount`) SELECT c.`Id`, '下单后如何查看轨迹?', '订单列表与轨迹查询入口说明。', '## 查看轨迹\n\n1. 进入「我的订单」,找到目标运单。\n2. 点击轨迹图标或进入详情查看最新节点。\n\n上网后才会出现承运商轨迹;未上网前可能仅有内部操作节点。', 'customer', 'published', '轨迹,订单', NULL, NULL, 1, 10, NOW(), 0 FROM `t_kb_category` c WHERE c.`Code` = 'order' AND c.`IsDeleted` = 0 AND NOT EXISTS ( SELECT 1 FROM `t_kb_article` a WHERE a.`Title` = '下单后如何查看轨迹?' AND a.`CategoryId` = c.`Id` AND a.`IsDeleted` = 0 ); INSERT INTO `t_kb_article` (`CategoryId`, `Title`, `Summary`, `Content`, `Audience`, `Status`, `Tags`, `RelatedPath`, `RelatedLabel`, `IsPinned`, `SortOrder`, `PublishTime`, `ViewCount`) SELECT c.`Id`, '什么是问题件?如何处理?', '问题件常见原因与处理路径。', '## 什么是问题件\n\n因地址不全、禁限运、欠费、清关资料缺失等原因,包裹无法继续流转时会标记为问题件。\n\n## 怎么处理\n\n在订单列表筛选「问题件」,按提示补全资料或联系客服。处理完成后会重新放行。', 'customer', 'published', '问题件,售后', NULL, NULL, 0, 20, NOW(), 0 FROM `t_kb_category` c WHERE c.`Code` = 'exception' AND c.`IsDeleted` = 0 AND NOT EXISTS ( SELECT 1 FROM `t_kb_article` a WHERE a.`Title` = '什么是问题件?如何处理?' AND a.`CategoryId` = c.`Id` AND a.`IsDeleted` = 0 ); INSERT INTO `t_kb_article` (`CategoryId`, `Title`, `Summary`, `Content`, `Audience`, `Status`, `Tags`, `RelatedPath`, `RelatedLabel`, `IsPinned`, `SortOrder`, `PublishTime`, `ViewCount`) SELECT c.`Id`, '账户余额不足怎么办?', '充值入口与余额扣费说明。', '## 充值\n\n工作台余额卡片或财务菜单可发起充值。到账后余额可用于下单扣费。\n\n## 注意\n\n子账号余额归属主客户;扣费失败时订单可能无法提交或出库。', 'customer', 'published', '充值,余额', NULL, NULL, 0, 10, NOW(), 0 FROM `t_kb_category` c WHERE c.`Code` = 'account' AND c.`IsDeleted` = 0 AND NOT EXISTS ( SELECT 1 FROM `t_kb_article` a WHERE a.`Title` = '账户余额不足怎么办?' AND a.`CategoryId` = c.`Id` AND a.`IsDeleted` = 0 ); INSERT INTO `t_kb_article` (`CategoryId`, `Title`, `Summary`, `Content`, `Audience`, `Status`, `Tags`, `RelatedPath`, `RelatedLabel`, `IsPinned`, `SortOrder`, `PublishTime`, `ViewCount`) SELECT c.`Id`, '禁限运物品有哪些?', '常见禁限运与申报注意点。', '## 常见禁限运\n\n电池、液体、粉末、管制刀具、仿牌等通常受限或禁运,以承运商与目的国法规为准。\n\n## 申报建议\n\n如实填写品名与货值,避免笼统描述(如 gifts)。不确定时可先咨询客服。', 'customer', 'published', '禁运,清关', NULL, NULL, 0, 10, NOW(), 0 FROM `t_kb_category` c WHERE c.`Code` = 'customs' AND c.`IsDeleted` = 0 AND NOT EXISTS ( SELECT 1 FROM `t_kb_article` a WHERE a.`Title` = '禁限运物品有哪些?' AND a.`CategoryId` = c.`Id` AND a.`IsDeleted` = 0 );