feat(emergency): 急救宣教资源管理模块
新增急救宣教资源管理完整功能,包含6个子模块: - 分类管理:树形结构,CRUD + 级联删除校验 - 标签管理:扁平结构,CRUD + 引用校验 - 资源管理:CRUD + 状态流转(草稿→审核→发布→下架) + 批量操作 + 阅读去重 + 复制 - 审核管理:待审核/已通过/已驳回列表 + 审核操作 + 审核记录 - 收藏管理:收藏/取消切换 + 状态查询 + 我的收藏列表 - 版本管理:编辑自动保存版本快照 + 回滚 + 差异对比 业务规则: - 编辑/回滚后自动退回草稿,清除审核状态(方案A) - 阅读去重:同用户重复阅读不增加计数 - 逻辑删除 + 租户隔离 Co-Authored-By: Claude <noreply@anthropic.com> @
This commit is contained in:
+174
@@ -0,0 +1,174 @@
|
||||
-- =====================================================
|
||||
-- 急救宣教资源管理功能 DDL(达梦数据库)
|
||||
-- 表名前缀: QH_EME_ (应急模块)
|
||||
-- =====================================================
|
||||
|
||||
-- 1. 急救宣教资源分类/标签统一表
|
||||
-- TYPE: 1=分类, 2=标签
|
||||
-- 分类支持多级树形(PARENT_ID 指向父分类,NULL=根分类)
|
||||
-- 标签为全局独立,不归属分类
|
||||
CREATE TABLE "QH_EME_FIRST_AID_RESOURCE_CATEGORY" (
|
||||
"ID" VARCHAR2(32) NOT NULL,
|
||||
"NAME" VARCHAR2(100) NOT NULL,
|
||||
"TYPE" NUMBER(1) DEFAULT 1 NOT NULL,
|
||||
"PARENT_ID" VARCHAR2(32),
|
||||
"DESCRIPTION" VARCHAR2(500),
|
||||
"SORT_NO" NUMBER(10) DEFAULT 0,
|
||||
"STATUS" NUMBER(1) DEFAULT 1,
|
||||
"CREATE_BY" VARCHAR2(50),
|
||||
"CREATE_TIME" TIMESTAMP,
|
||||
"UPDATE_BY" VARCHAR2(50),
|
||||
"UPDATE_TIME" TIMESTAMP,
|
||||
"DEL_FLAG" NUMBER(1) DEFAULT 0,
|
||||
"MEMO" VARCHAR2(500),
|
||||
PRIMARY KEY ("ID")
|
||||
);
|
||||
|
||||
COMMENT ON TABLE "QH_EME_FIRST_AID_RESOURCE_CATEGORY" IS '急救宣教资源分类/标签';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_CATEGORY"."ID" IS '主键';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_CATEGORY"."NAME" IS '名称';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_CATEGORY"."TYPE" IS '类型:1=分类,2=标签';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_CATEGORY"."PARENT_ID" IS '父分类ID(分类树形结构,标签为NULL)';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_CATEGORY"."DESCRIPTION" IS '描述';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_CATEGORY"."SORT_NO" IS '排序号';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_CATEGORY"."STATUS" IS '状态(1=正常,2=冻结)';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_CATEGORY"."CREATE_BY" IS '创建人';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_CATEGORY"."CREATE_TIME" IS '创建时间';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_CATEGORY"."UPDATE_BY" IS '更新人';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_CATEGORY"."UPDATE_TIME" IS '更新时间';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_CATEGORY"."DEL_FLAG" IS '删除标记(0=正常,1=已删除)';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_CATEGORY"."MEMO" IS '备注';
|
||||
|
||||
CREATE INDEX "IDX_FA_CATEGORY_TYPE" ON "QH_EME_FIRST_AID_RESOURCE_CATEGORY"("TYPE");
|
||||
CREATE INDEX "IDX_FA_CATEGORY_PARENT_ID" ON "QH_EME_FIRST_AID_RESOURCE_CATEGORY"("PARENT_ID");
|
||||
|
||||
-- 2. 急救宣教资源表
|
||||
CREATE TABLE "QH_EME_FIRST_AID_RESOURCE" (
|
||||
"ID" VARCHAR2(32) NOT NULL,
|
||||
"TITLE" VARCHAR2(200) NOT NULL,
|
||||
"SUMMARY" VARCHAR2(500),
|
||||
"CONTENT_TYPE" VARCHAR2(32),
|
||||
"CATEGORY_ID" VARCHAR2(32),
|
||||
"APPLICABLE_SCENARIO" VARCHAR2(500),
|
||||
"TAGS" VARCHAR2(2000),
|
||||
"CONTENT" CLOB,
|
||||
"COVER_IMAGE" VARCHAR2(500),
|
||||
"FILE_URL" CLOB,
|
||||
"EFFECTIVE_TIME" TIMESTAMP,
|
||||
"EXPIRY_TIME" TIMESTAMP,
|
||||
"AUDIT_STATUS" NUMBER(2),
|
||||
"AUDIT_REJECT_REASON" VARCHAR2(500),
|
||||
"AUDIT_BY" VARCHAR2(50),
|
||||
"AUDIT_TIME" TIMESTAMP,
|
||||
"VIEW_COUNT" NUMBER(10) DEFAULT 0,
|
||||
"FAVORITE_COUNT" NUMBER(10) DEFAULT 0,
|
||||
"STATUS" NUMBER(1) DEFAULT 1,
|
||||
"CREATE_BY" VARCHAR2(50),
|
||||
"CREATE_TIME" TIMESTAMP,
|
||||
"UPDATE_BY" VARCHAR2(50),
|
||||
"UPDATE_TIME" TIMESTAMP,
|
||||
"DEL_FLAG" NUMBER(1) DEFAULT 0,
|
||||
"MEMO" VARCHAR2(500),
|
||||
PRIMARY KEY ("ID")
|
||||
);
|
||||
|
||||
COMMENT ON TABLE "QH_EME_FIRST_AID_RESOURCE" IS '急救宣教资源';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE"."ID" IS '主键';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE"."TITLE" IS '标题';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE"."SUMMARY" IS '摘要/简介(列表展示用)';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE"."CONTENT_TYPE" IS '内容类型:IMAGE_TEXT(图文)/VIDEO(视频)/AUDIO(音频)/PDF(PDF)';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE"."CATEGORY_ID" IS '所属分类ID';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE"."APPLICABLE_SCENARIO" IS '适用场景';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE"."TAGS" IS '标签ID列表(逗号分隔)';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE"."CONTENT" IS '正文内容(富文本HTML)';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE"."COVER_IMAGE" IS '封面图URL';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE"."FILE_URL" IS '附件URL列表(JSON数组)';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE"."EFFECTIVE_TIME" IS '生效时间';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE"."EXPIRY_TIME" IS '失效时间';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE"."AUDIT_STATUS" IS '审核状态(NULL=无审核/10=待审核/11=已通过/12=已驳回)';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE"."AUDIT_REJECT_REASON" IS '驳回原因';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE"."AUDIT_BY" IS '审核人';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE"."AUDIT_TIME" IS '审核时间';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE"."VIEW_COUNT" IS '浏览次数';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE"."FAVORITE_COUNT" IS '收藏次数';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE"."STATUS" IS '发布状态(0=草稿,1=已发布,2=已下架)';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE"."CREATE_BY" IS '创建人';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE"."CREATE_TIME" IS '创建时间';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE"."UPDATE_BY" IS '更新人';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE"."UPDATE_TIME" IS '更新时间';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE"."DEL_FLAG" IS '删除标记(0=正常,1=已删除)';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE"."MEMO" IS '备注';
|
||||
|
||||
CREATE INDEX "IDX_FA_RESOURCE_CATEGORY_ID" ON "QH_EME_FIRST_AID_RESOURCE"("CATEGORY_ID");
|
||||
CREATE INDEX "IDX_FA_RESOURCE_AUDIT_STATUS" ON "QH_EME_FIRST_AID_RESOURCE"("AUDIT_STATUS");
|
||||
CREATE INDEX "IDX_FA_RESOURCE_EFFECTIVE_TIME" ON "QH_EME_FIRST_AID_RESOURCE"("EFFECTIVE_TIME");
|
||||
|
||||
-- 3. 用户行为记录表(阅读+收藏合一)
|
||||
-- TYPE: 1=阅读, 2=收藏
|
||||
CREATE TABLE "QH_EME_FIRST_AID_RESOURCE_USER_ACTION" (
|
||||
"ID" VARCHAR2(32) NOT NULL,
|
||||
"RESOURCE_ID" VARCHAR2(32) NOT NULL,
|
||||
"USER_ID" VARCHAR2(50) NOT NULL,
|
||||
"TYPE" NUMBER(1) NOT NULL,
|
||||
"CREATE_TIME" TIMESTAMP,
|
||||
PRIMARY KEY ("ID")
|
||||
);
|
||||
|
||||
COMMENT ON TABLE "QH_EME_FIRST_AID_RESOURCE_USER_ACTION" IS '用户行为记录(阅读/收藏)';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_USER_ACTION"."ID" IS '主键';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_USER_ACTION"."RESOURCE_ID" IS '资源ID';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_USER_ACTION"."USER_ID" IS '用户ID';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_USER_ACTION"."TYPE" IS '行为类型:1=阅读,2=收藏';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_USER_ACTION"."CREATE_TIME" IS '创建时间';
|
||||
|
||||
CREATE UNIQUE INDEX "UK_FA_USER_ACTION"
|
||||
ON "QH_EME_FIRST_AID_RESOURCE_USER_ACTION"("RESOURCE_ID", "USER_ID", "TYPE");
|
||||
CREATE INDEX "IDX_FA_USER_ACTION_USER_TYPE" ON "QH_EME_FIRST_AID_RESOURCE_USER_ACTION"("USER_ID", "TYPE");
|
||||
|
||||
-- 4. 版本历史表
|
||||
-- 每次编辑资源时自动保存版本快照,支持回滚
|
||||
CREATE TABLE "QH_EME_FIRST_AID_RESOURCE_VERSION" (
|
||||
"ID" VARCHAR2(32) NOT NULL,
|
||||
"RESOURCE_ID" VARCHAR2(32) NOT NULL,
|
||||
"VERSION_NO" NUMBER(10) NOT NULL,
|
||||
"TITLE" VARCHAR2(200),
|
||||
"CONTENT" CLOB,
|
||||
"CHANGE_DESCRIPTION" VARCHAR2(500),
|
||||
"CREATE_BY" VARCHAR2(50),
|
||||
"CREATE_TIME" TIMESTAMP,
|
||||
PRIMARY KEY ("ID")
|
||||
);
|
||||
|
||||
COMMENT ON TABLE "QH_EME_FIRST_AID_RESOURCE_VERSION" IS '资源版本历史';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_VERSION"."ID" IS '主键';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_VERSION"."RESOURCE_ID" IS '资源ID';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_VERSION"."VERSION_NO" IS '版本号(1,2,3...)';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_VERSION"."TITLE" IS '版本时的标题';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_VERSION"."CONTENT" IS '版本时的正文内容';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_VERSION"."CHANGE_DESCRIPTION" IS '变更描述';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_VERSION"."CREATE_BY" IS '创建人';
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_VERSION"."CREATE_TIME" IS '创建时间';
|
||||
|
||||
CREATE INDEX "IDX_FA_VERSION_RESOURCE_ID" ON "QH_EME_FIRST_AID_RESOURCE_VERSION"("RESOURCE_ID");
|
||||
|
||||
-- =====================================================
|
||||
-- 字典数据(需在应用启动后执行)
|
||||
-- QH_SYS_DICT / QH_SYS_DICT_ITEM 表由 JEECG-BOOT 框架自动创建
|
||||
-- tenant_id = 0 表示系统级字典,所有租户可见
|
||||
-- =====================================================
|
||||
|
||||
-- 字典:内容类型
|
||||
INSERT INTO QH_SYS_DICT (ID, TYPE, DICT_NAME, DICT_CODE, DESCRIPTION, DEL_FLAG, TENANT_ID, LOW_APP_ID, CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME)
|
||||
VALUES ('1589123456789100001', 0, '内容类型', 'first_aid_content_type', '急救宣教资源内容类型', 0, 0, NULL, 'admin', SYSDATE, 'admin', SYSDATE);
|
||||
|
||||
INSERT INTO QH_SYS_DICT_ITEM (ID, DICT_ID, ITEM_TEXT, ITEM_VALUE, DESCRIPTION, SORT_ORDER, STATUS, CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME) VALUES
|
||||
('1589123456789100011', '1589123456789100001', '图文', 'IMAGE_TEXT', '图文内容', 1, 1, 'admin', SYSDATE, 'admin', SYSDATE);
|
||||
|
||||
INSERT INTO QH_SYS_DICT_ITEM (ID, DICT_ID, ITEM_TEXT, ITEM_VALUE, DESCRIPTION, SORT_ORDER, STATUS, CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME) VALUES
|
||||
('1589123456789100012', '1589123456789100001', '视频', 'VIDEO', '视频内容', 2, 1, 'admin', SYSDATE, 'admin', SYSDATE);
|
||||
|
||||
INSERT INTO QH_SYS_DICT_ITEM (ID, DICT_ID, ITEM_TEXT, ITEM_VALUE, DESCRIPTION, SORT_ORDER, STATUS, CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME) VALUES
|
||||
('1589123456789100013', '1589123456789100001', '音频', 'AUDIO', '音频内容', 3, 1, 'admin', SYSDATE, 'admin', SYSDATE);
|
||||
|
||||
INSERT INTO QH_SYS_DICT_ITEM (ID, DICT_ID, ITEM_TEXT, ITEM_VALUE, DESCRIPTION, SORT_ORDER, STATUS, CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME) VALUES
|
||||
('1589123456789100014', '1589123456789100001', 'PDF', 'PDF', 'PDF文档', 4, 1, 'admin', SYSDATE, 'admin', SYSDATE);
|
||||
+77
@@ -0,0 +1,77 @@
|
||||
-- =====================================================
|
||||
-- 急救宣教资源 - 状态字段值域迁移脚本(达梦数据库)
|
||||
-- 执行时机:代码变更后,启动前执行
|
||||
-- 说明:将 AUDIT_STATUS 值域从 {0,1,2} 迁移到 {10,11,12}
|
||||
-- STATUS 值域不变 {0,1,2}
|
||||
-- =====================================================
|
||||
|
||||
-- =====================================================
|
||||
-- 1. 数据迁移:AUDIT_STATUS 旧值 → 新值
|
||||
-- =====================================================
|
||||
-- 旧: 0=待审核, 1=已通过, 2=已驳回
|
||||
-- 新: null=无审核(草稿), 10=待审核, 11=已通过, 12=已驳回
|
||||
--
|
||||
-- 注意: 旧方案中 audit_status=0 同时表示"草稿(未提交)"和"待审核(已提交)"
|
||||
-- 两者无法区分,为保证数据安全,统一视为"草稿"置为 NULL,
|
||||
-- 需用户在系统内重新提交审核。
|
||||
-- 如需保留为"待审核"状态,将下方的 NULL 改为 10 即可。
|
||||
|
||||
UPDATE "QH_EME_FIRST_AID_RESOURCE"
|
||||
SET "AUDIT_STATUS" = CASE
|
||||
WHEN "AUDIT_STATUS" = 0 THEN NULL -- 草稿(无法区分是否已提交,保守处理)
|
||||
WHEN "AUDIT_STATUS" = 1 THEN 11 -- 已通过
|
||||
WHEN "AUDIT_STATUS" = 2 THEN 12 -- 已驳回
|
||||
ELSE "AUDIT_STATUS"
|
||||
END
|
||||
WHERE "AUDIT_STATUS" IN (0, 1, 2);
|
||||
|
||||
COMMIT;
|
||||
|
||||
|
||||
-- =====================================================
|
||||
-- 2. 更新字典项(如有)
|
||||
-- =====================================================
|
||||
-- 如果 QH_SYS_DICT_ITEM 中配置了审核状态字典,需同步更新 ITEM_VALUE
|
||||
-- 示例(请根据实际字典数据调整):
|
||||
/*
|
||||
UPDATE QH_SYS_DICT_ITEM
|
||||
SET ITEM_VALUE = CASE
|
||||
WHEN ITEM_VALUE = '0' THEN '10'
|
||||
WHEN ITEM_VALUE = '1' THEN '11'
|
||||
WHEN ITEM_VALUE = '2' THEN '12'
|
||||
ELSE ITEM_VALUE
|
||||
END
|
||||
WHERE DICT_ID = (
|
||||
SELECT ID FROM QH_SYS_DICT WHERE DICT_CODE = 'first_aid_audit_status'
|
||||
)
|
||||
AND ITEM_VALUE IN ('0', '1', '2');
|
||||
COMMIT;
|
||||
*/
|
||||
|
||||
|
||||
-- =====================================================
|
||||
-- 3. 验证迁移结果
|
||||
-- =====================================================
|
||||
SELECT
|
||||
"AUDIT_STATUS",
|
||||
CASE
|
||||
WHEN "AUDIT_STATUS" IS NULL THEN '草稿'
|
||||
WHEN "AUDIT_STATUS" = 10 THEN '待审核'
|
||||
WHEN "AUDIT_STATUS" = 11 THEN '已通过'
|
||||
WHEN "AUDIT_STATUS" = 12 THEN '已驳回'
|
||||
ELSE '未知状态'
|
||||
END AS "审核状态描述",
|
||||
COUNT(*) AS "数量"
|
||||
FROM "QH_EME_FIRST_AID_RESOURCE"
|
||||
WHERE "DEL_FLAG" = 0
|
||||
GROUP BY "AUDIT_STATUS"
|
||||
ORDER BY "AUDIT_STATUS" ASC NULLS FIRST;
|
||||
|
||||
|
||||
-- =====================================================
|
||||
-- 4. 更新表字段注释
|
||||
-- =====================================================
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE"."AUDIT_STATUS" IS
|
||||
'审核状态(NULL=无审核/10=待审核/11=已通过/12=已驳回)';
|
||||
|
||||
COMMIT;
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
-- =====================================================
|
||||
-- 急救宣教资源 - 状态字段值域回滚脚本(达梦数据库)
|
||||
-- 仅当需要回退代码时使用
|
||||
-- 将 AUDIT_STATUS 从 {null,10,11,12} 回退到 {0,1,2}
|
||||
-- =====================================================
|
||||
|
||||
-- 注意: null(草稿) 回退为 0,但此时无法区分"草稿"和"待审核"
|
||||
UPDATE "QH_EME_FIRST_AID_RESOURCE"
|
||||
SET "AUDIT_STATUS" = CASE
|
||||
WHEN "AUDIT_STATUS" IS NULL THEN 0 -- 草稿 → 0(待审核)
|
||||
WHEN "AUDIT_STATUS" = 10 THEN 0 -- 待审核 → 0
|
||||
WHEN "AUDIT_STATUS" = 11 THEN 1 -- 已通过 → 1
|
||||
WHEN "AUDIT_STATUS" = 12 THEN 2 -- 已驳回 → 2
|
||||
ELSE "AUDIT_STATUS"
|
||||
END
|
||||
WHERE "AUDIT_STATUS" IS NULL OR "AUDIT_STATUS" IN (10, 11, 12);
|
||||
|
||||
COMMIT;
|
||||
|
||||
-- 恢复表字段注释
|
||||
COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE"."AUDIT_STATUS" IS
|
||||
'审核状态(0=待审核,1=已通过,2=已驳回)';
|
||||
|
||||
COMMIT;
|
||||
Reference in New Issue
Block a user