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 导入脚本
+