57 lines
4.1 KiB
Go
57 lines
4.1 KiB
Go
|
|
// 功能:创建用气统计和用户消息已读表并补齐全部数据库注释;版本: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)`,
|
|||
|
|
})
|
|||
|
|
}
|