implement notify

This commit is contained in:
Timi
2026-08-20 23:14:54 +08:00
parent 84190b9773
commit e3ef3e5275
44 changed files with 1667 additions and 34 deletions
+21
View File
@@ -51,3 +51,24 @@ cors:
# 允许访问的客户端域名,如:http://web.xxx.com,* 表示不做任何限制(不做任何限制时 allow-credentials 无效)
allow-origin:
- "http://localhost:8080"
# 通知消息队列
notify:
queue:
mail:
enable: false
cron: "*/10 * * * * *"
default-from:
sms:
enable: false
cron: "*/10 * * * * *"
app-id:
sign:
secret-id:
secret-key:
wechat:
enable: false
cron: "*/10 * * * * *"
http:
enable: false
cron: "*/10 * * * * *"
@@ -0,0 +1,72 @@
ALTER TABLE `notify_detail`
ADD COLUMN `read_at` BIGINT(20) COMMENT '已读时间' AFTER `status`,
ADD INDEX `idx_site_user_read`(`msg_type` ASC, `send_to` ASC, `read_at` ASC, `created_at` ASC) USING BTREE;
CREATE TABLE `sms_queue` (
`id` VARCHAR(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`notify_detail_id` VARCHAR(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '所属通知详情 ID',
`template_id` VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '模板 ID',
`data` LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '内容',
`args` LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '参数',
`send_to` VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '发送去向',
`send_at` BIGINT(20) COMMENT '发送时间',
`retry` INT(11) COMMENT '重试计数',
`timeout_at` BIGINT(20) COMMENT '超时时间',
`created_at` BIGINT(20) COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_notify_detail_id`(`notify_detail_id` ASC) USING BTREE,
INDEX `idx_send_at`(`send_at` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '短信推送队列' ROW_FORMAT = Dynamic;
CREATE TABLE `mail_queue` (
`id` VARCHAR(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`notify_detail_id` VARCHAR(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '所属通知详情 ID',
`subject` LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '标题',
`data` LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '内容',
`args` LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '参数',
`attachments` LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '附件',
`send_from` VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '发送来源',
`send_to` VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '发送去向',
`send_at` BIGINT(20) COMMENT '发送时间',
`retry` INT(11) COMMENT '重试计数',
`timeout_at` BIGINT(20) COMMENT '超时时间',
`created_at` BIGINT(20) COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_notify_detail_id`(`notify_detail_id` ASC) USING BTREE,
INDEX `idx_send_at`(`send_at` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT = '邮件推送队列' ROW_FORMAT = Dynamic;
CREATE TABLE `http_queue` (
`id` VARCHAR(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`notify_detail_id` VARCHAR(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '所属通知详情 ID',
`data` LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '内容',
`method` VARCHAR(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '请求方法',
`args` LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '参数',
`send_to` VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '发送去向',
`send_at` BIGINT(20) COMMENT '发送时间',
`retry` INT(11) COMMENT '重试计数',
`timeout_at` BIGINT(20) COMMENT '超时时间',
`created_at` BIGINT(20) COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_notify_detail_id`(`notify_detail_id` ASC) USING BTREE,
INDEX `idx_send_at`(`send_at` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT = 'HTTP 推送队列' ROW_FORMAT = Dynamic;
CREATE TABLE `wechat_queue` (
`id` VARCHAR(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`notify_detail_id` VARCHAR(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '所属通知详情 ID',
`app_id` VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '微信 AppId',
`app_secret` VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '微信 AppSecret',
`template_id` VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '模板 ID',
`subject` LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '标题',
`data` LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '内容',
`args` LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '参数',
`send_to` VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '发送去向',
`send_at` BIGINT(20) COMMENT '发送时间',
`retry` INT(11) COMMENT '重试计数',
`timeout_at` BIGINT(20) COMMENT '超时时间',
`created_at` BIGINT(20) COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_notify_detail_id`(`notify_detail_id` ASC) USING BTREE,
INDEX `idx_send_at`(`send_at` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT = '微信消息推送队列' ROW_FORMAT = Dynamic;
@@ -18,6 +18,43 @@
</if>
AND `deleted_at` IS NULL
</select>
<sql id="ownerKeywordWhere">
`t`.`owner_type` = #{ownerType}
<if test="ownerId != null and ownerId != ''">
AND `t`.`owner_id` = #{ownerId}
</if>
<if test="keyword != null and keyword.trim() != ''">
AND (
`m`.`zh_cn` LIKE CONCAT('%', #{keyword}, '%')
OR `m`.`zh_tw` LIKE CONCAT('%', #{keyword}, '%')
OR `m`.`en_us` LIKE CONCAT('%', #{keyword}, '%')
OR `m`.`ru_ru` LIKE CONCAT('%', #{keyword}, '%')
OR `m`.`ja_jp` LIKE CONCAT('%', #{keyword}, '%')
OR `m`.`de_de` LIKE CONCAT('%', #{keyword}, '%')
OR `m`.`ko_kr` LIKE CONCAT('%', #{keyword}, '%')
)
</if>
AND `t`.`deleted_at` IS NULL
AND `m`.`deleted_at` IS NULL
</sql>
<select id="countByOwnerAndKeyword" resultType="long">
SELECT COUNT(1)
FROM `tag` `t`
INNER JOIN `multilingual` `m`
ON `m`.`id` = `t`.`name_lang_id`
WHERE
<include refid="ownerKeywordWhere" />
</select>
<select id="selectByOwnerAndKeyword" resultType="com.imyeyu.api.modules.common.entity.Tag">
SELECT `t`.*
FROM `tag` `t`
INNER JOIN `multilingual` `m`
ON `m`.`id` = `t`.`name_lang_id`
WHERE
<include refid="ownerKeywordWhere" />
ORDER BY COALESCE(`t`.`updated_at`, `t`.`created_at`) DESC
LIMIT #{offset}, #{limit}
</select>
<select id="selectByOwnerAndZhCN" resultType="com.imyeyu.api.modules.common.entity.Tag">
SELECT
`t`.*