SET NAMES utf8mb4; -- 公告与系统通知群发。发出去的每一条都记一行,因为"给谁发过什么"是事后 -- 唯一能对账的东西;撤回也只撤这一批里还没读的那些。 CREATE TABLE IF NOT EXISTS notification_broadcasts ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, title VARCHAR(100) NOT NULL, content VARCHAR(1000) NOT NULL, audience VARCHAR(20) NOT NULL COMMENT 'all/users/vip/city/sitters/owners', audience_ref VARCHAR(500) NOT NULL DEFAULT '' COMMENT '城市编码或用户编号列表', with_push TINYINT(1) NOT NULL DEFAULT 0, recipient_count INT UNSIGNED NOT NULL DEFAULT 0, push_count INT UNSIGNED NOT NULL DEFAULT 0, status VARCHAR(20) NOT NULL DEFAULT 'SENT' COMMENT 'SENT/REVOKED', revoked_count INT UNSIGNED NOT NULL DEFAULT 0, created_by BIGINT UNSIGNED NULL, created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), revoked_at DATETIME(3) NULL, PRIMARY KEY (id), KEY idx_broadcast_created (created_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- 订单退款流水。代喂那张 pet_feed_refunds 记的是任务口径,这张记的是订单 -- 口径:会员、保证金、代喂都在这里,一笔订单可以退很多次。 CREATE TABLE IF NOT EXISTS order_refunds ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, order_id BIGINT UNSIGNED NOT NULL, refund_no VARCHAR(60) NOT NULL, user_id BIGINT UNSIGNED NOT NULL, amount_cent INT UNSIGNED NOT NULL, channel VARCHAR(20) NOT NULL DEFAULT 'gateway' COMMENT 'gateway 原路退回 / offline 线下已退', reason VARCHAR(500) NOT NULL DEFAULT '', handled_by BIGINT UNSIGNED NULL, created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), PRIMARY KEY (id), UNIQUE KEY uk_order_refund_no (refund_no), KEY idx_order_refunds_order (order_id, id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; INSERT INTO system_configs(config_key,config_value,value_type,description) VALUES ('notification.broadcast_max_recipients','20000','integer','单次公告的最大接收人数,超过要分批发'), ('notification.broadcast_push_enabled','true','boolean','公告是否允许同时走离线推送') ON DUPLICATE KEY UPDATE description=VALUES(description);