feat: 实现RCU升级后端服务初始版本
- 添加Kafka消费者组件用于消费升级事件数据 - 实现数据处理器进行数据验证和转换 - 添加数据库写入组件支持批量写入G5数据库 - 配置环境变量管理连接参数 - 添加日志记录和错误处理机制 - 实现优雅关闭和流控功能
This commit is contained in:
53
docs/project.md
Normal file
53
docs/project.md
Normal file
@@ -0,0 +1,53 @@
|
||||
# 0x68命令
|
||||
## 模式
|
||||
- rcu_upgrade
|
||||
### 数据表
|
||||
- rcu_upgrade_events_g5
|
||||
|
||||
#### 基础字段
|
||||
| 字段名 | 类型 | 备注 |
|
||||
| --- | --- | --- |
|
||||
| guid | int8 | 8位整数,由数据库自己生成 |
|
||||
| ts_ms | int8 | 事件发生的时间戳(毫秒级 Unix 时间),作为分区键和主键的一部分。 |
|
||||
| hotel_id | int2 | 酒店Code,smallint 类型,范围 [0, 32767],标识所属酒店。 |
|
||||
| room_id | varchar(50) | 房间号,字符串类型,长度 1~50,标识具体房间。 |
|
||||
| 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; }
|
||||
}
|
||||
81
docs/rcu_upgrade_events_g5.sql
Normal file
81
docs/rcu_upgrade_events_g5.sql
Normal 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");
|
||||
Reference in New Issue
Block a user