feat: 实现RCU升级后端服务初始版本

- 添加Kafka消费者组件用于消费升级事件数据
- 实现数据处理器进行数据验证和转换
- 添加数据库写入组件支持批量写入G5数据库
- 配置环境变量管理连接参数
- 添加日志记录和错误处理机制
- 实现优雅关闭和流控功能
This commit is contained in:
2026-03-17 19:23:51 +08:00
parent 23ebc6f059
commit a954db752f
21 changed files with 5919 additions and 0 deletions

53
docs/project.md Normal file
View File

@@ -0,0 +1,53 @@
# 0x68命令
## 模式
- rcu_upgrade
### 数据表
- rcu_upgrade_events_g5
#### 基础字段
| 字段名 | 类型 | 备注 |
| --- | --- | --- |
| guid | int8 | 8位整数由数据库自己生成 |
| ts_ms | int8 | 事件发生的时间戳(毫秒级 Unix 时间),作为分区键和主键的一部分。 |
| hotel_id | int2 | 酒店Codesmallint 类型,范围 [0, 32767],标识所属酒店。 |
| room_id | varchar(50) | 房间号,字符串类型,长度 150标识具体房间。 |
| device_id | varchar(64) | 设备唯一标识符最长64字符以CRICS拼接字段为准。 |
| write_ts_ms | int8 | 写入数据库的时间戳(毫秒级 Unix 时间) |
#### 信息字段
| 字段名 | 类型 | 备注 |
| --- | --- | --- |
| is_send | int2 | 1:下发0:上报 默认0 |
| udp_raw | text | UDP原始数据(使用Base64编码) |
| extra | jsonb | 扩展字段(JSON格式) |
#### 数据字段
| 字段名 | 类型 | 备注 |
| --- | --- | --- |
| ip | varchar(21) | 升级IP+port |
| md5 | varchar(255) | 升级MD5校验值 |
| partition | int4 | 升级总块数 |
| file_type | int2 | 升级文件类型 |
| file_path | varchar(255) | 升级路径 |
| upgrade_state | int2 | 升级状态 |
| app_version | varchar(255) | 固件版本 |
#### 生产服务器的推送的数据用于kafka的C#类:
public struct Upgrade_Log
{
public string hotel_id { get; set; }
public string device_id { get; set; }
public string room_id { get; set; }
public string ts_ms { get; set; }
public int is_send { get; set; }
public byte[] udp_raw { get; set; }
public object extra { get; set; }
public string remote_endpoint { get; set; }
public string md5 { get; set; }
public int partition { get; set; }
public int file_type { get; set; }
public string file_path { get; set; }
public int upgrade_state { get; set; }
public string app_version { get; set; }
}

View File

@@ -0,0 +1,81 @@
/*
Navicat Premium Dump SQL
Source Server : FnOS 80
Source Server Type : PostgreSQL
Source Server Version : 150017 (150017)
Source Host : 10.8.8.80:5434
Source Catalog : log_platform
Source Schema : rcu_upgrade
Target Server Type : PostgreSQL
Target Server Version : 150017 (150017)
File Encoding : 65001
Date: 17/03/2026 09:38:29
*/
-- ----------------------------
-- Table structure for rcu_upgrade_events_g5
-- ----------------------------
DROP TABLE IF EXISTS "rcu_upgrade"."rcu_upgrade_events_g5";
CREATE TABLE "rcu_upgrade"."rcu_upgrade_events_g5" (
"guid" int8 NOT NULL GENERATED BY DEFAULT AS IDENTITY (
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1
),
"ts_ms" int8 NOT NULL,
"hotel_id" int2 NOT NULL,
"room_id" varchar(50) COLLATE "pg_catalog"."default" NOT NULL,
"device_id" varchar(64) COLLATE "pg_catalog"."default",
"write_ts_ms" int8 DEFAULT ((EXTRACT(epoch FROM now()) * (1000)::numeric))::bigint,
"is_send" int2 DEFAULT 0,
"udp_raw" text COLLATE "pg_catalog"."default",
"extra" jsonb,
"ip" varchar(21) COLLATE "pg_catalog"."default",
"md5" varchar(255) COLLATE "pg_catalog"."default",
"partition" int4,
"file_type" int2,
"file_path" varchar(255) COLLATE "pg_catalog"."default",
"upgrade_state" int2,
"app_version" varchar(255) COLLATE "pg_catalog"."default"
)
TABLESPACE "ts_hot"
;
-- ----------------------------
-- Indexes structure for table rcu_upgrade_events_g5
-- ----------------------------
CREATE INDEX "idx_rcu_upg_g5_ts_appver" ON "rcu_upgrade"."rcu_upgrade_events_g5" USING btree (
"ts_ms" "pg_catalog"."int8_ops" DESC NULLS FIRST,
"app_version" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
) WHERE app_version IS NOT NULL;
CREATE INDEX "idx_rcu_upg_g5_ts_device" ON "rcu_upgrade"."rcu_upgrade_events_g5" USING btree (
"ts_ms" "pg_catalog"."int8_ops" DESC NULLS FIRST,
"device_id" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
) WHERE device_id IS NOT NULL;
CREATE INDEX "idx_rcu_upg_g5_ts_filetype" ON "rcu_upgrade"."rcu_upgrade_events_g5" USING btree (
"ts_ms" "pg_catalog"."int8_ops" DESC NULLS FIRST,
"file_type" "pg_catalog"."int2_ops" ASC NULLS LAST
);
CREATE INDEX "idx_rcu_upg_g5_ts_hotel_room" ON "rcu_upgrade"."rcu_upgrade_events_g5" USING btree (
"ts_ms" "pg_catalog"."int8_ops" DESC NULLS FIRST,
"hotel_id" "pg_catalog"."int2_ops" ASC NULLS LAST,
"room_id" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
);
CREATE INDEX "idx_rcu_upg_g5_ts_issend" ON "rcu_upgrade"."rcu_upgrade_events_g5" USING btree (
"ts_ms" "pg_catalog"."int8_ops" DESC NULLS FIRST,
"is_send" "pg_catalog"."int2_ops" ASC NULLS LAST
);
CREATE INDEX "rcu_upgrade_events_g5_ts_ms_idx" ON "rcu_upgrade"."rcu_upgrade_events_g5" USING btree (
"ts_ms" "pg_catalog"."int8_ops" DESC NULLS FIRST
) TABLESPACE "ts_hot";
-- ----------------------------
-- Primary Key structure for table rcu_upgrade_events_g5
-- ----------------------------
ALTER TABLE "rcu_upgrade"."rcu_upgrade_events_g5" ADD CONSTRAINT "rcu_upgrade_events_g5_pkey" PRIMARY KEY ("ts_ms", "guid");