已完成用户APP首期功能开发

交付用户端首期页面、配套接口、后台资源及测试文档。用户APP构建、静态分析和三个管理后台构建通过;完整测试仍有2项失败,后端模型注释检查未通过,详见交付记录。
This commit is contained in:
czl231
2026-09-13 00:57:32 +08:00
parent a0a4bb1218
commit 3ef33b531d
793 changed files with 40959 additions and 1204 deletions

View File

@@ -0,0 +1,56 @@
// 功能创建用气统计和用户消息已读表并补齐全部数据库注释版本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)`,
})
}