工业制造
工业制造是本应用的核心功能,提供从蓝图搜索到利润核算的完整生产计划管理。
核心流程
添加生产计划
- 在工具栏点击 蓝图导入(
ui_qml/qml/pages/IndustryPage.qml的工具栏) - 输入蓝图名称(支持中/英文模糊搜索候选)
- 选择蓝图后设置:
- 数量:要生产的数量
- ME/TE 等级:蓝图的材料效率和技术效率
- 点击确认添加到生产计划表格
价格来源设置
通过工具栏的 双行价格设置(ui_qml/qml/components/FPriceSourceRow.qml)独立配置:
| 设置项 | 说明 |
|---|---|
| 材料 Hub | 材料买入区域(Jita/Amarr/Dodixie/Rens) |
| 材料价格类型 | 买单(Buy)/ 卖单(Sell)/ 均价 |
| 成品 Hub | 成品卖出区域 |
| 成品价格类型 | 卖单(Sell)/ 买单(Buy)/ 均价 |
| 材料倍率 | 材料价调整系数(默认 1.0)。填 1.10 = 材料实际买入价按所选 Hub 报价再加 10% |
| 成品倍率 | 成品价调整系数(默认 1.0)。填 0.95 = 成品实际卖出价按报价再打 95 折 |
💡 材料和成品可以使用不同 Hub,实现跨区贸易场景模拟。
倍率的作用范围:材料倍率影响所有按材料买入价算的成本 —— 计划表格的「成本」列、 右键「查看核算」的成本明细、母项拆解算价、从蓝图批量加入制造规划时的预览, 以及状态栏右下角的「备料中采购」汇总;成品倍率影响所有按成品卖出价算的收入 (「成品价值」「利润」「利润率」列等)。
⚠️ 倍率不影响安装费 —— 安装费按 CCP 官方估价(adjusted_price)计税,与玩家实际买卖价无关。
🔗 材料倍率是全局的:仓库管理页的「库存修正 / 增量粘贴」导入预览、 以及「批量设置成本价」,读写的都是这一个材料倍率(记住上次的值,不再每次重置)。 在那边改完回到本页,工具栏的倍率也会跟着变。
并行产线与蓝图等级
一条计划可以并行 N 条产线(N×流程 列),每条产线各自绑一张蓝图。 各条产线按自己那张蓝图的 ME/TE 独立结算:材料按各线求和、生产时长取最慢那条。
- ME/TE 列显示各线一致时的等级;各线不一致时显示最低那组并在后面带一个
≠(把鼠标停在格子上会列出每条线分别是什么等级) - ME/TE 一律来自蓝图本身:右键「绑定库存蓝图...」挑一张库里已有的蓝图,等级就跟着那张蓝图走。 想改等级,请在「蓝图管理」里改那张蓝图 —— 计划上没有单独设等级的入口, 蓝图不会凭空出现(必须有对应的 BPC/BPO 行才绑得上)。
缺料 / 蓝图流程不足时强制启动
启动前如果材料不足、或绑定的蓝图流程数不够,会弹一次确认: 确认后仍可启动(材料按现有库存扣、缺口记待补;蓝图按实际可用流程消耗,不会自动补流程或换绑)。
- 只是软件误点、游戏里还没开造 → 用右键「撤销启动(返还材料)」
- 蓝图流程不足强制启动后,账面的流程数会与游戏不符 —— 之后用「蓝图管理 → 粘贴导入蓝图 → 全量同步」重新粘贴游戏里的库存即可矫正
计划表格列说明
生产计划表格(plan_table.py)包含 19 列数据:
| 列 | 含义 |
|---|---|
| 蓝图名 | 蓝图物品名称 |
| 数量 | 计划生产数量 |
| ME | 材料效率等级(0-10) |
| TE | 技术效率等级(0-20) |
| 材料成本 | 所有材料的总买入成本 |
| 安装费 | 系统成本 + 设施税 + SCC 附加费 + 安装费 |
| 成品价值 | 预计成品卖出总价 |
| 单件利润 | (成品价值 - 材料成本 - 安装费) / 数量 |
| 单件利润率 | 单件利润 / 材料成本 × 100% |
| 个人利润率 | 考虑库存成本的综合利润率 |
| 总利润 | 成品价值 - 材料成本 - 安装费 - 税费 |
| 生产时长 | 总制造时间 |
| 所需蓝图数 | 考虑 PE 等级后的蓝图使用数量 |
| 等等... |
产出总表 · 「材料溢出」
产出总表的「材料溢出」列列的是中间产品,不是你要买的材料,也不代表你买多了。
它是这么算的:沿 BOM 往下走,凡是自己有蓝图的件,把它按整轮造出来 —— 蓝图按轮产出,而你需要量通常不是每轮产量的整数倍,多出来的那部分就是「溢出」。
举例(真实数据):中型EMP立体炸弹 II 计划 209 个,其材料含 R.A.M. - 能源科技 209 个,而 R.A.M. 蓝图一轮出 100 个 → 要跑 3 轮 = 300 个 → 溢出 91。
- 直接采购的数量是精确的:买 209 就是 209,不存在溢出。这一列只是提示 「这个件如果你自己做,会剩料」,帮你判断值不值得自建子线。
- 该列不看你的计划是否真的拆解出了子项产线,所以全部直接采购时它照样会报溢出。
- 只算有蓝图的件:矿物之类的叶子材料永远不溢出(买多少是多少)。
采购小助手 · 自制件不会重复采购
有子项产线的组件不会出现在待采购清单里 —— 它由自己的子线造,要买的是子线的原材料 (子线本身也是一条计划,它的材料会照常列出来)。
- 只要子线还没完工(待生产 / 生产中 / 待下线),它对应的组件就被排除。
- 子线完工后不再排除:那时产出已入库,母项的需求由库存抵扣;若产出落在了别的机库、 扣不到,就会如实报缺。
- 删掉子线、或母项没拆解过,该组件会回到待采购。
这条曾经有个口径缺陷:排除集是按「备料中(待生产 + 已勾备料)」那份计划算的, 而子线一旦投产就不在那份列表里 —— 于是子线越接近投产,越容易被当成「没有子线」, 组件被重复计成待采购。现已改为按全量计划算。
个人利润率
ScoringService.calculate_personal_margin() 是一个关键算法,综合考虑:
- 市场利润率:标准的卖出价 - 买入价(所有材料含拆解子项均按市场买入价计)
- 库存成本:你已拥有的材料按加权平均成本计算
- 混合计算:部分材料用库存成本(已有),部分用市场价(需购买)
个人利润率 = f(市场利润率, 库存成本映射, 生产数量, 平行数)拆解母项
母项拆解出子项后,子项是自制件,其成本按制造价(子项材料成本 + 子项制造作业费)计入母项成本, 而非市场买入价。因此拆解后的「市场利润率」(子项按市场买入价)通常低于「个人利润率」(子项按自制价), 两列的差异即自制省下的成本。
子项产线在母项下线时自动清理
子项产线跑完后不会立刻消失 —— 它以「已完成」留在计划表里,直到母项下线。 (不在子项完成时就删,是因为母项的「材料成本 / 利润 / 市场利润率」三列要靠同组子项行才能按子项制造价计; 子项行一没就回退成市场价。保留到母项下线,母项从待生产到在产的全过程成本口径都不变。)
- 母项下线时,它名下已完成的子项行会一并清掉;未完成的子项不动,母项行本身保留。
- 母项行保留后可照常用「设为待生产(复用)」重跑 —— 组件按库存扣,子项行不会再自动生成。
- 用「删除产线」删掉母项时,它名下连带的子项(含已完成的)同样会被清掉; 删子项时,它自己的下级产线也一并删。
- 被多个母项共用的组件,要等所有引用它的母项都结束才会被清。
- 入库成本不受清理影响:子项下线时产出就已按子项自己的成本入库;母项启动与下线也都按库存成本 (即子项制造价)核算,与子项行是否还在无关。
甘特图
切换到 📊 甘特图(ui_qml/qml/pages/FGanttChart.qml)查看:
- 各生产计划的时间线
- 产线并行情况
- 生产进度可视化
- 双主题适配(暗色/亮色)
排期口径(读懂图的关键):
- 行序是计划树的树序 —— 母项在前、它的子项紧随其后(与数据视图的缩进一致), 不受数据视图当前排序影响。
- 时间按 BOM 依赖串行:子项先做、母项接在子项之后,因为母项要等子项产出才能开工。 同一个母项下的多条子项之间并行(各自从 0 起),母项从「最晚完成的那个子项」开始。 不同分组的计划互不影响,各自从 0 起跑。
- 柱形条末端的
MM-DD HH:MM是预计完成时刻:在产计划按started_at + 计算时长给出真实 ETA(与数据视图的倒计时列同源);未开工的计划按「现在开工」推算。 - 跨多个母项引用的共享组件没有单一正确位置,按它所属的组参与排期。
定向价格刷新
点击 🔄 价格刷新 只拉取当前活跃计划涉及的物品价格:
- 5 分钟缓存 TTL(
TtlLRUCache) - 并发 50 请求(aiohttp)
- 进度实时显示在状态栏
成本公式参考
安装费计算涉及多个游戏内参数:
- EIV(Estimated Item Value):基于 ESI
adjusted_price(7 日均价) - SCI(System Cost Index):系统成本指数,来自 ESI
- Facility Tax:设施税率
- SCC Surcharge:SCC 附加费
- Broker Fee:经纪人费率(受角色技能影响)
详见 domain/formulas.py(纯公式,未生成 API 页)和 services/scoring_service.py 的 API 文档。