From cceb5468a6d24896328927c7ce1a7e24bd23ec7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Wed, 29 Jul 2026 09:55:17 +0800 Subject: [PATCH] =?UTF-8?q?feat(database):=20=E4=B8=BA=20cms=5Fwebsite=20?= =?UTF-8?q?=E8=A1=A8=E6=96=B0=E5=A2=9E=E5=8F=91=E5=B8=83=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加发布状态、定价模式和订阅周期字段 - 新增应用简介、详细说明和应用截图字段 - 增加安装次数、评分及审核相关字段 - 提供幂等的 SQL 脚本,支持重复执行 - 兼容 MySQL 5.7 和 8.0,支持存储过程逐列判断添加字段 - 适用于生产环境,执行前建议备份 cms_website 表 --- .../cms/sql/cms_website_publish_safe.sql | 23 ++++++++ .../cms/sql/cms_website_publish_safe_v2.sql | 56 +++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 src/main/java/com/gxwebsoft/cms/sql/cms_website_publish_safe.sql create mode 100644 src/main/java/com/gxwebsoft/cms/sql/cms_website_publish_safe_v2.sql diff --git a/src/main/java/com/gxwebsoft/cms/sql/cms_website_publish_safe.sql b/src/main/java/com/gxwebsoft/cms/sql/cms_website_publish_safe.sql new file mode 100644 index 0000000..b91bbe5 --- /dev/null +++ b/src/main/java/com/gxwebsoft/cms/sql/cms_website_publish_safe.sql @@ -0,0 +1,23 @@ +-- 为 cms_website 表新增发布管理相关字段(幂等版,可重复执行) +-- 适用于生产环境:1Panel-mysql-Bqdt:3306 / modules +-- 执行前请确认已连接正确的数据库,并建议先备份 cms_website 表 + +ALTER TABLE `cms_website` + ADD COLUMN IF NOT EXISTS `publish_status` VARCHAR(20) NULL DEFAULT 'developing' COMMENT '发布状态: developing开发中 pending_review待审核 published已上架 rejected审核未通过 deprecated已下架' AFTER `market`, + ADD COLUMN IF NOT EXISTS `price_type` VARCHAR(20) NULL COMMENT '定价模式: free免费 one_time一次性 subscription订阅' AFTER `publish_status`, + ADD COLUMN IF NOT EXISTS `subscription_period` VARCHAR(10) NULL COMMENT '订阅周期: month按月 year按年' AFTER `price_type`, + ADD COLUMN IF NOT EXISTS `app_description` VARCHAR(500) NULL COMMENT '应用简介(市场展示用)' AFTER `subscription_period`, + ADD COLUMN IF NOT EXISTS `detail_description` TEXT NULL COMMENT '详细说明(富文本)' AFTER `app_description`, + ADD COLUMN IF NOT EXISTS `screenshots` TEXT NULL COMMENT '应用截图(JSON数组字符串)' AFTER `detail_description`, + ADD COLUMN IF NOT EXISTS `install_count` INT NULL DEFAULT 0 COMMENT '安装/使用次数' AFTER `screenshots`, + ADD COLUMN IF NOT EXISTS `rating` DECIMAL(3,1) NULL DEFAULT 0.0 COMMENT '评分(1-5)' AFTER `install_count`, + ADD COLUMN IF NOT EXISTS `reject_reason` VARCHAR(500) NULL COMMENT '审核拒绝原因' AFTER `rating`, + ADD COLUMN IF NOT EXISTS `publish_apply_time` DATETIME NULL COMMENT '提交审核时间' AFTER `reject_reason`, + ADD COLUMN IF NOT EXISTS `publish_time` DATETIME NULL COMMENT '正式发布上架时间' AFTER `publish_apply_time`, + ADD COLUMN IF NOT EXISTS `reviewer_id` INT NULL COMMENT '审核人用户ID' AFTER `publish_time`, + ADD COLUMN IF NOT EXISTS `review_time` DATETIME NULL COMMENT '审核操作时间' AFTER `reviewer_id`; + +-- 校验:确认 13 个字段已就位(应为 13 行) +-- SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS +-- WHERE TABLE_SCHEMA = 'modules' AND TABLE_NAME = 'cms_website' +-- AND COLUMN_NAME IN ('publish_status','price_type','subscription_period','app_description','detail_description','screenshots','install_count','rating','reject_reason','publish_apply_time','publish_time','reviewer_id','review_time'); diff --git a/src/main/java/com/gxwebsoft/cms/sql/cms_website_publish_safe_v2.sql b/src/main/java/com/gxwebsoft/cms/sql/cms_website_publish_safe_v2.sql new file mode 100644 index 0000000..8c3370c --- /dev/null +++ b/src/main/java/com/gxwebsoft/cms/sql/cms_website_publish_safe_v2.sql @@ -0,0 +1,56 @@ +-- cms_website 发布字段迁移(幂等版,兼容 MySQL 5.7 / 8.0) +-- 通过存储过程逐列判断,已存在则跳过,可重复执行 +-- 注意:本脚本使用 DELIMITER,需在支持该语法的客户端执行 +-- (mysql CLI、Navicat、MySQL Workbench 等); +-- 若用 1Panel 网页 SQL 控制台(不支持 DELIMITER),请改跑 cms_website_publish.sql(一次性)。 + +DELIMITER $$ + +DROP PROCEDURE IF EXISTS `add_cms_website_publish_columns`$$ +CREATE PROCEDURE `add_cms_website_publish_columns`() +BEGIN + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='modules' AND TABLE_NAME='cms_website' AND COLUMN_NAME='publish_status') THEN + ALTER TABLE `cms_website` ADD COLUMN `publish_status` VARCHAR(20) NULL DEFAULT 'developing' COMMENT '发布状态: developing开发中 pending_review待审核 published已上架 rejected审核未通过 deprecated已下架' AFTER `market`; + END IF; + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='modules' AND TABLE_NAME='cms_website' AND COLUMN_NAME='price_type') THEN + ALTER TABLE `cms_website` ADD COLUMN `price_type` VARCHAR(20) NULL COMMENT '定价模式: free免费 one_time一次性 subscription订阅' AFTER `publish_status`; + END IF; + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='modules' AND TABLE_NAME='cms_website' AND COLUMN_NAME='subscription_period') THEN + ALTER TABLE `cms_website` ADD COLUMN `subscription_period` VARCHAR(10) NULL COMMENT '订阅周期: month按月 year按年' AFTER `price_type`; + END IF; + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='modules' AND TABLE_NAME='cms_website' AND COLUMN_NAME='app_description') THEN + ALTER TABLE `cms_website` ADD COLUMN `app_description` VARCHAR(500) NULL COMMENT '应用简介(市场展示用)' AFTER `subscription_period`; + END IF; + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='modules' AND TABLE_NAME='cms_website' AND COLUMN_NAME='detail_description') THEN + ALTER TABLE `cms_website` ADD COLUMN `detail_description` TEXT NULL COMMENT '详细说明(富文本)' AFTER `app_description`; + END IF; + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='modules' AND TABLE_NAME='cms_website' AND COLUMN_NAME='screenshots') THEN + ALTER TABLE `cms_website` ADD COLUMN `screenshots` TEXT NULL COMMENT '应用截图(JSON数组字符串)' AFTER `detail_description`; + END IF; + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='modules' AND TABLE_NAME='cms_website' AND COLUMN_NAME='install_count') THEN + ALTER TABLE `cms_website` ADD COLUMN `install_count` INT NULL DEFAULT 0 COMMENT '安装/使用次数' AFTER `screenshots`; + END IF; + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='modules' AND TABLE_NAME='cms_website' AND COLUMN_NAME='rating') THEN + ALTER TABLE `cms_website` ADD COLUMN `rating` DECIMAL(3,1) NULL DEFAULT 0.0 COMMENT '评分(1-5)' AFTER `install_count`; + END IF; + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='modules' AND TABLE_NAME='cms_website' AND COLUMN_NAME='reject_reason') THEN + ALTER TABLE `cms_website` ADD COLUMN `reject_reason` VARCHAR(500) NULL COMMENT '审核拒绝原因' AFTER `rating`; + END IF; + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='modules' AND TABLE_NAME='cms_website' AND COLUMN_NAME='publish_apply_time') THEN + ALTER TABLE `cms_website` ADD COLUMN `publish_apply_time` DATETIME NULL COMMENT '提交审核时间' AFTER `reject_reason`; + END IF; + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='modules' AND TABLE_NAME='cms_website' AND COLUMN_NAME='publish_time') THEN + ALTER TABLE `cms_website` ADD COLUMN `publish_time` DATETIME NULL COMMENT '正式发布上架时间' AFTER `publish_apply_time`; + END IF; + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='modules' AND TABLE_NAME='cms_website' AND COLUMN_NAME='reviewer_id') THEN + ALTER TABLE `cms_website` ADD COLUMN `reviewer_id` INT NULL COMMENT '审核人用户ID' AFTER `publish_time`; + END IF; + IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='modules' AND TABLE_NAME='cms_website' AND COLUMN_NAME='review_time') THEN + ALTER TABLE `cms_website` ADD COLUMN `review_time` DATETIME NULL COMMENT '审核操作时间' AFTER `reviewer_id`; + END IF; +END$$ + +DELIMITER ; + +CALL `add_cms_website_publish_columns`(); +DROP PROCEDURE IF EXISTS `add_cms_website_publish_columns`;