From db58674ab7361e30abe8276b57f0acd523f3ecdb Mon Sep 17 00:00:00 2001 From: DaxPay Dev Date: Tue, 14 Jul 2026 12:52:12 +0800 Subject: [PATCH] =?UTF-8?q?feat(notify):=20=E7=AB=99=E5=86=85=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E8=A1=A8=E7=BB=93=E6=9E=84=E4=B8=8E=20admin=20?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 补充 notify 相关升级 DDL,payment-admin 引入 service-notify 以支撑运营端铃铛/SSE。 --- _config/sql/update-tables.sql | 109 ++++++++++++++++++++ daxpay-payment/daxpay-payment-admin/pom.xml | 6 ++ 2 files changed, 115 insertions(+) diff --git a/_config/sql/update-tables.sql b/_config/sql/update-tables.sql index e69de29bb..90cad3289 100644 --- a/_config/sql/update-tables.sql +++ b/_config/sql/update-tables.sql @@ -0,0 +1,109 @@ +-- 站内通知表结构(公告 + 已读 + 个人消息预留) +-- 执行顺序: update-tables.sql → update-datas.sql + +-- ---------------------------- +-- Table structure for notify_notice +-- ---------------------------- +CREATE TABLE IF NOT EXISTS "public"."notify_notice" ( + "id" int8 NOT NULL, + "title" varchar(256) COLLATE "pg_catalog"."default" NOT NULL, + "content" text COLLATE "pg_catalog"."default", + "severity" varchar(32) COLLATE "pg_catalog"."default", + "is_top" bool NOT NULL DEFAULT false, + "effective_time" timestamptz(6), + "expire_time" timestamptz(6), + "status" varchar(32) COLLATE "pg_catalog"."default" NOT NULL, + "deleted" bool NOT NULL DEFAULT false, + "last_modifier" int8, + "last_modified_time" timestamptz(6), + "version" int4 NOT NULL DEFAULT 0, + "creator" int8, + "create_time" timestamptz(6), + PRIMARY KEY ("id") +); + +COMMENT ON TABLE "public"."notify_notice" IS '公告通知(广播型)'; +COMMENT ON COLUMN "public"."notify_notice"."id" IS '主键'; +COMMENT ON COLUMN "public"."notify_notice"."title" IS '标题'; +COMMENT ON COLUMN "public"."notify_notice"."content" IS '正文(Markdown原文)'; +COMMENT ON COLUMN "public"."notify_notice"."severity" IS '重要程度(normal普通/important重要)'; +COMMENT ON COLUMN "public"."notify_notice"."is_top" IS '是否置顶'; +COMMENT ON COLUMN "public"."notify_notice"."effective_time" IS '生效时间(为空则立即生效)'; +COMMENT ON COLUMN "public"."notify_notice"."expire_time" IS '过期时间(为空则永久有效)'; +COMMENT ON COLUMN "public"."notify_notice"."status" IS '状态(draft草稿/published发布/offline下线)'; +COMMENT ON COLUMN "public"."notify_notice"."deleted" IS '逻辑删除'; +COMMENT ON COLUMN "public"."notify_notice"."last_modifier" IS '最后修改者ID'; +COMMENT ON COLUMN "public"."notify_notice"."last_modified_time" IS '最后修改时间'; +COMMENT ON COLUMN "public"."notify_notice"."version" IS '版本号(乐观锁)'; +COMMENT ON COLUMN "public"."notify_notice"."creator" IS '创建者ID'; +COMMENT ON COLUMN "public"."notify_notice"."create_time" IS '创建时间'; + +CREATE INDEX IF NOT EXISTS "idx_notify_notice_status" ON "public"."notify_notice" ("status"); +CREATE INDEX IF NOT EXISTS "idx_notify_notice_create_time" ON "public"."notify_notice" ("create_time" DESC); + +-- ---------------------------- +-- Table structure for notify_notice_read +-- ---------------------------- +CREATE TABLE IF NOT EXISTS "public"."notify_notice_read" ( + "id" int8 NOT NULL, + "user_id" int8 NOT NULL, + "notice_id" int8 NOT NULL, + "read_time" timestamptz(6), + "is_ignored" bool NOT NULL DEFAULT false, + "creator" int8, + "create_time" timestamptz(6), + PRIMARY KEY ("id") +); + +COMMENT ON TABLE "public"."notify_notice_read" IS '公告已读记录(用户 x 公告)'; +COMMENT ON COLUMN "public"."notify_notice_read"."id" IS '主键'; +COMMENT ON COLUMN "public"."notify_notice_read"."user_id" IS '用户ID'; +COMMENT ON COLUMN "public"."notify_notice_read"."notice_id" IS '公告ID'; +COMMENT ON COLUMN "public"."notify_notice_read"."read_time" IS '阅读时间'; +COMMENT ON COLUMN "public"."notify_notice_read"."is_ignored" IS '是否忽略(用户主动隐藏该公告)'; +COMMENT ON COLUMN "public"."notify_notice_read"."creator" IS '创建者ID'; +COMMENT ON COLUMN "public"."notify_notice_read"."create_time" IS '创建时间'; + +CREATE UNIQUE INDEX IF NOT EXISTS "uk_notify_notice_read_user_notice" + ON "public"."notify_notice_read" ("user_id", "notice_id"); +CREATE INDEX IF NOT EXISTS "idx_notify_notice_read_user" ON "public"."notify_notice_read" ("user_id"); + +-- ---------------------------- +-- Table structure for notify_message +-- ---------------------------- +CREATE TABLE IF NOT EXISTS "public"."notify_message" ( + "id" int8 NOT NULL, + "user_id" int8 NOT NULL, + "title" varchar(256) COLLATE "pg_catalog"."default" NOT NULL, + "content" text COLLATE "pg_catalog"."default", + "source" varchar(64) COLLATE "pg_catalog"."default", + "link" varchar(512) COLLATE "pg_catalog"."default", + "extra" text COLLATE "pg_catalog"."default", + "is_read" bool NOT NULL DEFAULT false, + "deleted" bool NOT NULL DEFAULT false, + "last_modifier" int8, + "last_modified_time" timestamptz(6), + "version" int4 NOT NULL DEFAULT 0, + "creator" int8, + "create_time" timestamptz(6), + PRIMARY KEY ("id") +); + +COMMENT ON TABLE "public"."notify_message" IS '个人消息(定向通知, 预留)'; +COMMENT ON COLUMN "public"."notify_message"."id" IS '主键'; +COMMENT ON COLUMN "public"."notify_message"."user_id" IS '接收用户ID'; +COMMENT ON COLUMN "public"."notify_message"."title" IS '标题'; +COMMENT ON COLUMN "public"."notify_message"."content" IS '正文内容'; +COMMENT ON COLUMN "public"."notify_message"."source" IS '业务来源(预留)'; +COMMENT ON COLUMN "public"."notify_message"."link" IS '跳转链接(内部路由或完整http外链)'; +COMMENT ON COLUMN "public"."notify_message"."extra" IS '跳转附加参数(JSON字符串)'; +COMMENT ON COLUMN "public"."notify_message"."is_read" IS '是否已读'; +COMMENT ON COLUMN "public"."notify_message"."deleted" IS '逻辑删除'; +COMMENT ON COLUMN "public"."notify_message"."last_modifier" IS '最后修改者ID'; +COMMENT ON COLUMN "public"."notify_message"."last_modified_time" IS '最后修改时间'; +COMMENT ON COLUMN "public"."notify_message"."version" IS '版本号(乐观锁)'; +COMMENT ON COLUMN "public"."notify_message"."creator" IS '创建者ID'; +COMMENT ON COLUMN "public"."notify_message"."create_time" IS '创建时间'; + +CREATE INDEX IF NOT EXISTS "idx_notify_message_user" ON "public"."notify_message" ("user_id"); +CREATE INDEX IF NOT EXISTS "idx_notify_message_user_read" ON "public"."notify_message" ("user_id", "is_read"); diff --git a/daxpay-payment/daxpay-payment-admin/pom.xml b/daxpay-payment/daxpay-payment-admin/pom.xml index 8c2bce318..237a748d3 100644 --- a/daxpay-payment/daxpay-payment-admin/pom.xml +++ b/daxpay-payment/daxpay-payment-admin/pom.xml @@ -28,6 +28,12 @@ daxpay-payment-core ${project.version} + + + cn.daxpay.open + service-notify + ${project.version} + org.mapstruct