diff --git a/db/updatesql/20260626-急救宣教.sql b/db/updatesql/20260626-急救宣教.sql new file mode 100644 index 0000000..0bdced1 --- /dev/null +++ b/db/updatesql/20260626-急救宣教.sql @@ -0,0 +1,200 @@ +-- ===================================================== +-- 急救宣教资源管理 — 线上部署 SQL(达梦 DM8) +-- 包含:分类/标签、资源、用户行为、版本历史、审核记录、推送记录 +-- 日期: 2026-06-25 +-- ===================================================== + +-- 1. 资源分类/标签统一表 +-- TYPE: 1=分类(树形), 2=标签(扁平) +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,标签指向所属分类ID)'; +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"."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_BY_ID" VARCHAR2(32), + "AUDIT_TIME" TIMESTAMP, + "VIEW_COUNT" NUMBER(10) DEFAULT 0, + "FAVORITE_COUNT" NUMBER(10) DEFAULT 0, + "STATUS" NUMBER(1) DEFAULT 0, + "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'; +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_BY_ID" IS '审核人ID'; +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"."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. 用户行为记录表(阅读+收藏) +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=收藏'; +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), + "IS_CURRENT" NUMBER(1) DEFAULT 0, + "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 '版本号'; +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"."IS_CURRENT" IS '是否当前版本(1=是,0=否)'; +CREATE INDEX "IDX_FA_VERSION_RESOURCE_ID" ON "QH_EME_FIRST_AID_RESOURCE_VERSION"("RESOURCE_ID"); + +-- 5. 审核记录表 +CREATE TABLE "QH_EME_FIRST_AID_RESOURCE_AUDIT" ( + "ID" VARCHAR2(32) NOT NULL, + "RESOURCE_ID" VARCHAR2(32) NOT NULL, + "AUDIT_STATUS" NUMBER(2), + "AUDIT_REJECT_REASON" VARCHAR2(500), + "AUDIT_BY" VARCHAR2(50), + "AUDIT_BY_ID" VARCHAR2(32), + "AUDIT_TIME" TIMESTAMP, + "CREATE_TIME" TIMESTAMP DEFAULT SYSDATE, + PRIMARY KEY ("ID") +); +COMMENT ON TABLE "QH_EME_FIRST_AID_RESOURCE_AUDIT" IS '急救宣教资源审核记录'; +COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_AUDIT"."ID" IS '主键'; +COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_AUDIT"."RESOURCE_ID" IS '关联资源ID'; +COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_AUDIT"."AUDIT_STATUS" IS '审核状态:10=待审核,11=已通过,12=已驳回'; +COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_AUDIT"."AUDIT_REJECT_REASON" IS '驳回原因'; +COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_AUDIT"."AUDIT_BY" IS '审核人'; +COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_AUDIT"."AUDIT_BY_ID" IS '审核人ID'; +COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_AUDIT"."AUDIT_TIME" IS '审核时间'; +COMMENT ON COLUMN "QH_EME_FIRST_AID_RESOURCE_AUDIT"."CREATE_TIME" IS '创建时间'; +CREATE INDEX "IDX_FA_AUDIT_RESOURCE_ID" ON "QH_EME_FIRST_AID_RESOURCE_AUDIT"("RESOURCE_ID"); + +-- 6. 推送记录表 +CREATE TABLE "QH_EME_FIRST_AID_PUSH_RECORD" ( + "ID" VARCHAR2(32) NOT NULL, + "RESOURCE_ID" VARCHAR2(32) NOT NULL, + "RESOURCE_TITLE" VARCHAR2(200) DEFAULT NULL, + "ORDER_ID" VARCHAR2(32) NOT NULL, + "TARGET_USER_ID" VARCHAR2(32) DEFAULT NULL, + "PUSH_BY" VARCHAR2(50) DEFAULT NULL, + "PUSH_BY_ID" VARCHAR2(32) DEFAULT NULL, + "PUSH_TIME" TIMESTAMP DEFAULT NULL, + "TENANT_ID" VARCHAR2(32) DEFAULT NULL, + PRIMARY KEY ("ID"), + CONSTRAINT "UK_ORDER_RESOURCE" UNIQUE ("ORDER_ID", "RESOURCE_ID") +); +COMMENT ON TABLE "QH_EME_FIRST_AID_PUSH_RECORD" IS '急救宣教推送记录表'; +COMMENT ON COLUMN "QH_EME_FIRST_AID_PUSH_RECORD"."ID" IS '主键'; +COMMENT ON COLUMN "QH_EME_FIRST_AID_PUSH_RECORD"."RESOURCE_ID" IS '资源ID'; +COMMENT ON COLUMN "QH_EME_FIRST_AID_PUSH_RECORD"."RESOURCE_TITLE" IS '资源标题(冗余)'; +COMMENT ON COLUMN "QH_EME_FIRST_AID_PUSH_RECORD"."ORDER_ID" IS '关联应急工单ID'; +COMMENT ON COLUMN "QH_EME_FIRST_AID_PUSH_RECORD"."TARGET_USER_ID" IS '推送目标用户ID'; +COMMENT ON COLUMN "QH_EME_FIRST_AID_PUSH_RECORD"."PUSH_BY" IS '推送人'; +COMMENT ON COLUMN "QH_EME_FIRST_AID_PUSH_RECORD"."PUSH_BY_ID" IS '推送人ID'; +COMMENT ON COLUMN "QH_EME_FIRST_AID_PUSH_RECORD"."PUSH_TIME" IS '推送时间'; +COMMENT ON COLUMN "QH_EME_FIRST_AID_PUSH_RECORD"."TENANT_ID" IS '租户ID'; +CREATE INDEX "IDX_FA_PUSH_RECORD_ORDER_ID" ON "QH_EME_FIRST_AID_PUSH_RECORD"("ORDER_ID"); + +-- 7. 字典数据 +-- 7.1 内容类型 +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); + diff --git a/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/entity/FirstAidResource.java b/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/entity/FirstAidResource.java index abea25e..6393e9f 100644 --- a/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/entity/FirstAidResource.java +++ b/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/entity/FirstAidResource.java @@ -125,7 +125,7 @@ public class FirstAidResource implements Serializable { private Integer favoriteCount; /** 发布状态(0=草稿,1=已发布,2=已下架) */ - @Excel(name = "状态", width = 15, dicCode = "first_aid_resource_status") + @Excel(name = "状态", width = 15) @Schema(title = "发布状态(0=草稿,1=已发布,2=已下架)") private Integer status; diff --git a/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/entity/FirstAidResourceCategory.java b/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/entity/FirstAidResourceCategory.java index 498a534..7ff6842 100644 --- a/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/entity/FirstAidResourceCategory.java +++ b/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/entity/FirstAidResourceCategory.java @@ -37,7 +37,7 @@ public class FirstAidResourceCategory implements Serializable { private String name; /** 类型(1=分类,2=标签) */ - @Excel(name = "类型", width = 15, dicCode = "first_aid_category_type") + @Excel(name = "类型", width = 15) @Schema(title = "类型(1=分类,2=标签)") private Integer type;