Files
platforms/backend/api/cmd/cli/usage_message_migration.go
czl231 3ef33b531d 已完成用户APP首期功能开发
交付用户端首期页面、配套接口、后台资源及测试文档。用户APP构建、静态分析和三个管理后台构建通过;完整测试仍有2项失败,后端模型注释检查未通过,详见交付记录。
2026-09-13 00:57:32 +08:00

57 lines
4.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 功能创建用气统计和用户消息已读表并补齐全部数据库注释版本1.0.0。
package main
// migrateUsageMessages 只新增统计及已读表,不生成计量数据或业务消息。
func migrateUsageMessages() error {
return migrateClientColumns([]string{
`CREATE TABLE IF NOT EXISTS dev_usage_stat (
id bigserial PRIMARY KEY, identity varchar(36) NOT NULL UNIQUE,
created_at timestamptz NOT NULL, updated_at timestamptz NOT NULL, deleted_at timestamptz,
status integer NOT NULL DEFAULT 1 CHECK (status IN (1,2,3)),
product_info_id bigint NOT NULL REFERENCES product_info(id), stat_date date NOT NULL,
usage_kg numeric(12,3) NOT NULL DEFAULT 0 CHECK (usage_kg >= 0),
breakfast_kg numeric(12,3) NOT NULL DEFAULT 0 CHECK (breakfast_kg >= 0),
lunch_kg numeric(12,3) NOT NULL DEFAULT 0 CHECK (lunch_kg >= 0),
dinner_kg numeric(12,3) NOT NULL DEFAULT 0 CHECK (dinner_kg >= 0),
source varchar(32) NOT NULL CHECK (source IN ('meter','device','manual')),
calc_version varchar(32) NOT NULL, calculated_at timestamptz NOT NULL,
CONSTRAINT ux_dev_usage_stat_day UNIQUE(product_info_id,stat_date)
)`,
`COMMENT ON TABLE dev_usage_stat IS '实体设备每日用气统计事实;数据来源和计算口径必须可追溯'`,
`COMMENT ON COLUMN dev_usage_stat.id IS '数据库自增内部主键'`,
`COMMENT ON COLUMN dev_usage_stat.identity IS '对外业务UUID标识'`,
`COMMENT ON COLUMN dev_usage_stat.created_at IS '统计记录创建时间'`,
`COMMENT ON COLUMN dev_usage_stat.updated_at IS '统计记录最后更新时间'`,
`COMMENT ON COLUMN dev_usage_stat.deleted_at IS '软删除时间'`,
`COMMENT ON COLUMN dev_usage_stat.status IS '通用状态1=启用2=停用3=归档'`,
`COMMENT ON COLUMN dev_usage_stat.product_info_id IS '统计所属实体设备内部主键'`,
`COMMENT ON COLUMN dev_usage_stat.stat_date IS '统计日期,按用户服务时区划分'`,
`COMMENT ON COLUMN dev_usage_stat.usage_kg IS '当日总用气量,单位千克'`,
`COMMENT ON COLUMN dev_usage_stat.breakfast_kg IS '早餐时段用气量,单位千克'`,
`COMMENT ON COLUMN dev_usage_stat.lunch_kg IS '午餐时段用气量,单位千克'`,
`COMMENT ON COLUMN dev_usage_stat.dinner_kg IS '晚餐时段用气量,单位千克'`,
`COMMENT ON COLUMN dev_usage_stat.source IS '数据来源meter=计量表device=设备上报manual=人工导入'`,
`COMMENT ON COLUMN dev_usage_stat.calc_version IS '生成统计的计算口径版本'`,
`COMMENT ON COLUMN dev_usage_stat.calculated_at IS '统计计算完成时间'`,
`CREATE INDEX IF NOT EXISTS idx_dev_usage_stat_query ON dev_usage_stat(product_info_id,stat_date,status)`,
`CREATE TABLE IF NOT EXISTS user_message_read (
id bigserial PRIMARY KEY, identity varchar(36) NOT NULL UNIQUE,
created_at timestamptz NOT NULL, updated_at timestamptz NOT NULL, deleted_at timestamptz,
status integer NOT NULL DEFAULT 1 CHECK (status IN (1,3)),
user_account_id bigint NOT NULL REFERENCES user_account(id), message_key varchar(96) NOT NULL,
read_at timestamptz NOT NULL, CONSTRAINT ux_user_message_read UNIQUE(user_account_id,message_key)
)`,
`COMMENT ON TABLE user_message_read IS '用户对订单、工单及公告衍生消息的已读回执;消息正文仍取自业务事实表'`,
`COMMENT ON COLUMN user_message_read.id IS '数据库自增内部主键'`,
`COMMENT ON COLUMN user_message_read.identity IS '对外业务UUID标识'`,
`COMMENT ON COLUMN user_message_read.created_at IS '回执创建时间'`,
`COMMENT ON COLUMN user_message_read.updated_at IS '回执最后更新时间'`,
`COMMENT ON COLUMN user_message_read.deleted_at IS '软删除时间'`,
`COMMENT ON COLUMN user_message_read.status IS '通用状态1=启用3=归档'`,
`COMMENT ON COLUMN user_message_read.user_account_id IS '读取消息的用户账号内部主键'`,
`COMMENT ON COLUMN user_message_read.message_key IS '消息来源类型与业务唯一标识组成的稳定键'`,
`COMMENT ON COLUMN user_message_read.read_at IS '用户首次确认已读时间'`,
`CREATE INDEX IF NOT EXISTS idx_user_message_read_lookup ON user_message_read(user_account_id,status)`,
})
}