commit 042b626ccb9423b05ddc039531abaa8d2170a109 Author: Armor00 <2654988228@qq.com> Date: Fri May 8 15:09:07 2026 +0800 更新 diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..e69de29 diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..f6906f2 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,10 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# 已忽略包含查询文件的默认文件夹 +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/KSP_Project.iml b/.idea/KSP_Project.iml new file mode 100644 index 0000000..fc20fd6 --- /dev/null +++ b/.idea/KSP_Project.iml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..932a1c3 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..4d29732 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/job.md b/job.md new file mode 100644 index 0000000..e69de29 diff --git a/project_discovery.md b/project_discovery.md new file mode 100644 index 0000000..082fb08 --- /dev/null +++ b/project_discovery.md @@ -0,0 +1,238 @@ +# 项目梳理(第一轮) + +## 1. 已确认的基础约束 + +- 技术方向:`Python + Flask` 后端,前端需要单独界面。 +- 数据库:`PostgreSQL`。 +- 部署方式:前后端都部署在 NAS 上,并以 `Docker` 形式运行。 +- 敏感信息:**不读取** `.env`,仅参考 `.env.example`。 +- 当前代码状态:项目基本还是空白,`main.py` 仍是 PyCharm 初始化示例。 + +## 2. 环境变量格式(来自 `.env.example`) + +当前已知 PG 连接相关变量格式如下: + +- `PGHOST` +- `PGPORT` +- `PGUSER` +- `PGPASSWORD` +- `PGDATABASE` +- `APP_ENV` +- `APP_PORT` + +说明:后续 Flask 项目可以直接按这一组变量读取数据库连接信息。 + +## 3. Excel 工作簿结构梳理 + +文件:`KSP Engine Tweak Chart.xlsx` + +实际工作表如下: + +1. `Engine Database`(核心) +2. `Communication` +3. `work area`(可忽略) +4. `Fuel Chart` +5. `Tank Chart` +6. `Launch Cost` +7. `KSP Vehicle Cost` +8. `Tube`(可忽略) +9. `TQ series`(可忽略) + +## 4. 各表初步理解 + +### 4.1 `Engine Database` + +- 规模:约 `478` 条数据。 +- 核心程度最高,后续数据库设计应以此为中心。 +- 表头如下: + 1. `Engine` + 2. `Fuel Type` + 3. `Cycle` + 4. `Work Env` + 5. `SL-ISP` + 6. `Vac-ISP` + 7. `Min Thrust` + 8. `Max Thrust` + 9. `Mass` + 10. `TWR` + 11. `Throttle Range` + 12. `TVC` + 13. `Size` + 14. `Price KD` + 15. `entry Cost` + 16. `Ignitions` + 17. `Classification` + 18. `Note` + 19. `Name` + 20. `Config Name` + 21. `TechRequired` + 22. `Config Note` + +#### 观察 + +- `TWR` 基本是公式列,公式看起来是:`Max Thrust / 9.80665 / Mass`。 +- `Throttle Range` 基本也是公式列,公式看起来是:`Min Thrust / Max Thrust`。 +- 同一个 `Engine` 会有多条记录,代表不同配置/燃料/版本。 +- `Name`、`Config Name`、`TechRequired` 有较多空值,说明这些字段并不是所有引擎都有。 +- 仅用 `(Name, Config Name)` 作为唯一键 **不可靠**,发现有重复情况。 + +#### 目前推测 + +后续数据库大概率需要拆成两层: + +- `engine_base`:存引擎主体信息(名称、来源、尺寸、分类等) +- `engine_variant`:存具体配置(燃料、ISP、推力、点火次数、科技树要求等) + +但这需要你确认字段含义后再定。 + +--- + +### 4.2 `Communication` + +- 规模:约 `50` 条数据。 +- 主要记录天线/通信部件。 +- 字段包括:部件名、显示名、质量、是否主动、是否可展开、类型、展开直径、通信距离、角度、速度、功耗、来源、成本、缩放信息等。 + +#### 观察 + +- `Range km` / `Range AU` / `Range Light year` 看起来是由 `Range Raw` 换算而来。 +- `idle power watt` / `transmitting power watt` 也是公式列。 +- `Tech` 列目前看起来全部为空,可能是未整理,或者本来不用。 +- `Is Feeder`、`Is Deployable`、`Is Active` 是布尔型字段。 + +--- + +### 4.3 `Fuel Chart` + +这是一个**换算工具型表**,目前并不像主数据表,更适合作为后端计算逻辑或前端小工具。 + +#### 当前看到的结构 + +- 第一行:燃料类型,如 `HTPB`、`Solid`、`PBAN`、`Kerolox`、`Hydrolox`、`Methalox`、`Hydrazine`、`MMH/NTO` +- 第二行:每升体积对应质量(看起来像密度/换算系数) +- 第三、四行: + - 输入体积(L)后,计算不同燃料的质量 + - 输入质量(t)后,反推出不同燃料的体积 + +#### 目前判断 + +这个表不一定要入库;更适合实现为: + +- 一个独立 API +- 或前端页面里的快速换算器 +- 或后端的纯函数工具模块 + +--- + +### 4.4 `Tank Chart` + +- 规模:约 `26` 条数据。 +- 字段包括: + - `Tank` + - `Fuel Type` + - `Dry Mass` + - `Fuel Mass` + - `Wet Mass` + - `Tank Volume(L)` + - `Mass Ratio` + - `KL per ton` + - `Vehicle` + - `Source` + - `Note` + +#### 观察 + +- `Wet Mass`、`Mass Ratio`、`KL per ton` 中很多是公式列。 +- `Fuel Type` 当前主要是 `Kerolox` / `Hydrolox` / `Methalox`。 +- 这个表适合作为“燃料箱/级段参数资料表”。 + +--- + +### 4.5 `KSP Vehicle Cost` + +- 规模:约 `10` 条数据。 +- 字段比较简单: + - `Vehicle` + - `Launch Price` + - `Source` + +#### 观察 + +- 有部分 `Launch Price` 为空,需确认是“未知”还是“待补充”。 + +## 5. 当前我整理出的数据建模方向(草案) + +> 这里只是第一轮草案,等你确认字段含义后再正式定表结构。 + +### 核心主表建议 + +1. `engines` / `engine_base` + - 引擎基础信息 + - 如:名称、来源/分类、尺寸、备注、内部标识等 + +2. `engine_variants` + - 引擎配置项 + - 如:燃料类型、循环方式、适用环境、SL/Vac ISP、推力范围、质量、TVC、点火次数、价格、科技节点等 + +### 配套表建议 + +3. `communication_parts` +4. `tank_specs` +5. `vehicle_costs` +6. `fuel_conversion_rules`(不一定入库,也可能直接写成程序常量) + +## 6. 第一轮需要你确认的问题 + +下面这些问题会直接影响数据库设计和前端表单设计: + +### 关于 `Engine Database` + +1. `Work Env` 的枚举含义是什么? + - 目前看到像 `Lower`、`Upper` 等,是否表示适用飞行环境/任务场景? + +2. `Classification` 是什么语义? + - 是模组来源(如 `Squad`、`NFS`、`Ven`、`Real/...`) + - 还是引擎分类标签? + +3. `Name` 是不是游戏/模组里的**内部 part name**? + - 如果是,为什么有相当多记录为空? + +4. `Config Name` 是不是某个引擎的配置名/variant 名? + - 如果是,它显然不是全局唯一键;后续唯一标识你倾向于用什么? + - `Engine + Fuel Type + Config Name`?还是另有内部 ID? + +5. `Price KD` 是不是 Kerbal Dollars 的部件价格? +6. `entry Cost` 是不是科技树解锁成本 / 研发成本? +7. `TVC` 的单位是否是“度”(gimbal range)? +8. `Size` 的单位是否是米(或零件直径规格)? +9. `Ignitions` 为空时表示: + - 无限次? + - 未知? + - 不适用? +10. `Note` 与 `Config Note` 的区别是什么? + - 一个是引擎总体备注,一个是某个配置备注? + +### 关于 `Fuel Chart` + +11. 这个换算功能你希望最终怎么实现? + - 单独页面小工具 + - 引擎/燃料箱录入时的辅助计算器 + - 还是后端提供一个简单 API 即可 + +12. 第二行这些值,本质上是不是“燃料密度 / 升到吨的换算系数”? + - 如果是,我后续会直接把它们做成程序配置或数据库字典表。 + +### 关于 `KSP Vehicle Cost` + +13. `Launch Price` 为空的行,是不是表示“暂无数据,允许为空”? + +## 7. 下一步建议 + +等你回答上面的问题后,我建议立即进入下面阶段: + +1. 先把 `Engine Database` 字段定义彻底确认 +2. 画出数据库草图(PostgreSQL) +3. 确定 Flask 后端模块划分 +4. 确定前端页面:列表 / 搜索 / 详情 / 编辑 / 导入 +5. 再开始初始化项目结构、Docker、数据库迁移、Excel 导入脚本 +