|
|
0abc5850d8
|
fix(bom): save_bom 落库 BOM 级备注,get_bom_detail 改读 bom_remark
save_bom() 此前从未读取 data['remark'],父件级备注被静默丢弃;
get_bom_detail() 则用 first.BomTable.remark(第一个子件行的备注)冒充
主表备注——所以填了保存后再打开必为空,偶尔还会显示出某个子件的备注
(库里 1196 行只有 1 行有 remark,值是"白色")。
这正是"BOM 备注看不见"的根因。
|
2026-09-21 14:13:14 +08:00 |
|
|
|
2a9e2e4560
|
fix(bom): BOM 三态互斥 + active_only排除归档 + 详情主备注
- get_bom_list active_only 补 is_archived==False,出库/借库“按BOM套餐”不再泄漏归档版本
- get_bom_detail 返回顶层 remark,详情弹窗主备注可回显
- 状态互斥:update_enabled 切启/停即清归档;update_archived 归档→废弃(enabled=False)、取消归档→启用;停用视图排除归档
|
2026-09-09 13:00:41 +08:00 |
|
|
|
66b3e4897f
|
fix(bom): get_bom_summary 关键词与 list 对齐 + 状态更新方法健壮化
- get_bom_summary 关键词过滤改为与 get_bom_list 同款子查询(同时匹配 bom_no、父件名/规格、子件名/规格),任意关键词下 summary 计数与 list 明细严格一致,消除“标题有数、表格为空”
- update_enabled/update_archived 对 bom_no/version 做 strip 规范化,并细化“BOM不存在”报错(带上实际参数便于排查)
|
2026-09-08 13:58:43 +08:00 |
|
|
|
02f74278df
|
feat(bom): 归档业务闭环——状态筛选+归档/取消归档入口
- get_bom_list/get_bom_summary 状态过滤支持 archived,enabled 语义改为“启用且未归档”
- get_bom_list 输出补 is_archived;新增 update_archived 与 POST /bom/archive(整组切换归档、清缓存、审计)
- “未指定版本自动取最新”硬化为仅认启用且未归档(get_bom_detail / get_bom_no_by_parent)
- 前端:状态按钮组加“归档”;列表状态列区分归档;操作列加“归档/取消归档”按钮
|
2026-09-08 11:13:38 +08:00 |
|
|
|
91fb6c1a03
|
feat(bom): 自制件子件选版本落库/强校验 + 独立启停 + 状态筛选
- save_bom 落库 child_bom_no/child_bom_version;自制件必选且须属于启用未归档配方集,外购件置空;跨版本查重纳入引用版本
- get_bom_detail 改为读存储列,空则回退最新启用配方;候选/校验/回退读取均排除 is_archived
- 新增 GET /bom/self-bom-versions(子件候选版本);新增 POST /bom/status 独立启停(update_enabled 清缓存)
- 草稿链路 save_draft/get_draft_detail/publish 持久化引用版本
- get_bom_list/get_bom_summary 支持 status(enabled/disabled) 过滤
|
2026-09-08 10:14:44 +08:00 |
|
|
|
3dd8458de0
|
feat: BOM 子件展示自制件 BOM 版本号——子件列表与出库/借库 BOM 清单打印均显示
|
2026-09-07 18:01:16 +08:00 |
|
|
|
bf7b2cc6d3
|
feat: BOM 库存接口支持按版本查询,修复同一编号多版本下拉回显错乱
|
2026-09-02 18:39:17 +08:00 |
|
|
|
3a07f1a272
|
fix(bom): BOM 详情查询改为 LEFT JOIN,子件物料被删后仍返回父件结构
- get_bom_detail 使用 outerjoin 替代 join
- 子件物料被删除后 child_name 显示 [已删除物料] 而非误报 BOM 不存在
- 修复按 BOM 出库时因子件删除导致 404 BOM 不存在
|
2026-08-31 10:28:22 +08:00 |
|
|
|
2556b77530
|
perf: 系统级性能优化与并发安全修复
## 并发安全修复 (4处)
- scrap.py: 报废执行添加 SELECT FOR UPDATE 悲观锁,消除 TOCTOU 竞态
- stock.py (adjust_stock): 盘点调整添加 for_update=True 行锁
- outbound_service.py: 低库存预警 SMTP 调用移到 commit 之后,避免长事务
- trans_service.py: execute_dispatch 按 (source_table, id) 排序 items,消除死锁风险
## N+1 查询优化 (2处)
- inventory_task.py: _prefetch_inventory_map 单条 UNION ALL+GROUP BY 替代循环内逐条查询(N*4次→2次)
- stock.py (export_stocktake): get_borrowed_qty 批量 GROUP BY 替代逐条 TransBorrow 查询(~18000次→1次)
## BOM 列表性能重构
- bom_service.py: get_bom_list 单条 GROUP BY+string_agg+分页,消除 N+1 循环查询
- bom_service.py: 新增 get_bom_summary (轻量 GROUP BY category+COUNT)
- bom.py: 新增 /api/v1/bom/summary 路由,/list 支持 category 过滤
## Odoo 基础信息懒加载
- base_service.py: 新增 get_odoo_summary (GROUP BY category+COUNT)
- base.py: 新增 /api/v1/inbound/base/odoo-summary 路由
- buyOdoo.vue: 懒加载分组架构 (fetchOdooSummary + loadGroupItems)
- material_base.ts: 新增 getOdooSummary API
## 前端 Bug 修复
- BomManage.vue: 懒加载分组 (fetchBomSummary + loadGroupItems + collapse)
- BomManage.vue: 适配新 API 格式 (res.data.items 替代 res.data)
- buyOdoo.vue: 移除 "点击展开加载" 文字
- Selection.vue + borrow/apply/index.vue: openBomSelect 适配新 API 格式
|
2026-07-15 17:37:57 +08:00 |
|
|
|
e1417d740a
|
feat: 全模块公司隔离 + crossDomain权限码动态跨域控制
- get_current_company_filter: 新增_has_cross_domain_permission, 权限码替代硬编码
- 补全11个Service的get_current_company_filter调用(semi/product/service/outbound/bom/trans/scrap/summary)
- base/search修复: search_material此前无隔离, 已补全
- get_current_company_filter兜底: JWT缺company_name时返回__NO_COMPANY__防止放行
- permission.py: _get_operator_company补全返回值, 修复权限页保存逻辑
- 新增crossDomain迁移脚本, element_type=element挂system_mgmt下
|
2026-07-15 11:11:40 +08:00 |
|
|
|
c1092407ad
|
V3.50
|
2026-06-25 15:21:43 +08:00 |
|
|
|
c7b84ff3c6
|
fix: BOM草稿模块缺陷修复(事务回滚 + 外键约束 + 前端状态清理)
|
2026-06-10 11:30:07 +08:00 |
|
|
|
f18dfd9819
|
新增 /cascade-inventory 级联库存缺口查询接口,供 AI 调用 BOM 出库缺口分析
|
2026-06-01 09:59:48 +08:00 |
|
|
|
d119bebe94
|
fix: BOM搜索子件名称+自动搜索防抖
|
2026-05-21 17:41:14 +08:00 |
|
|
|
c60112f5f8
|
perf: 引入 Redis Cache-Aside 模式优化 BOM 读取,TTL=12h,写操作后主动失效缓存
|
2026-05-19 10:14:55 +08:00 |
|
|
|
d60e1c5188
|
perf: 修复 get_bom_with_stock_by_bom_no N+1 查询问题,改为批量 IN + 内存字典匹配
|
2026-05-19 09:33:54 +08:00 |
|
|
|
950b8dd671
|
fix: BOM列表搜索去除外层 % 通配符,改为小写忽略大小写匹配
|
2026-05-15 09:37:21 +08:00 |
|
|
|
1edd471208
|
feat(bom): BOM列表按物料类别分组展示,支持折叠展开与数量统计
|
2026-05-12 15:27:47 +08:00 |
|
|
|
3c9cb06dbc
|
fix: save_bom add db.session.flush() to fix unique constraint conflict
|
2026-04-23 13:34:41 +08:00 |
|
|
|
a849e14b2c
|
refactor(orm): 将所有的批量 delete/update 重构为对象级操作,以确保触发 SQLAlchemy 审计事件
|
2026-04-20 15:43:48 +08:00 |
|
|
|
4048447123
|
feat: 增加 BOM 另存为跨版本内容查重校验
|
2026-03-06 10:38:58 +08:00 |
|
|
|
b682d4b02f
|
对于出库选单和Bom库的逻辑完善以及功能美化
|
2026-02-12 16:54:26 +08:00 |
|
|
|
d61668bc4b
|
修改bom表逻辑和出库选单内容
|
2026-02-12 10:39:21 +08:00 |
|
|
|
b93a565c82
|
feat: add material spec to BOM responses and UI
Co-authored-by: aider (openai/DeepSeek-V3.2-Thinking) <aider@aider.chat>
|
2026-02-12 10:10:37 +08:00 |
|
|
|
6d5d8a6aad
|
feat: implement BOM versioning with bom_no and new management APIs
Co-authored-by: aider (openai/DeepSeek-V3.2-Thinking) <aider@aider.chat>
|
2026-02-12 09:37:27 +08:00 |
|
|
|
e535a2d99c
|
(no commit message provided)
Co-authored-by: aider (openai/DeepSeek-V3.2-Thinking) <aider@aider.chat>
|
2026-02-09 15:41:11 +08:00 |
|
|
|
c0463cb7dc
|
(no commit message provided)
Co-authored-by: aider (openai/DeepSeek-V3.2-Thinking) <aider@aider.chat>
|
2026-02-09 15:28:42 +08:00 |
|
|
|
b61072eea0
|
(no commit message provided)
Co-authored-by: aider (openai/DeepSeek-V3.2-Thinking) <aider@aider.chat>
|
2026-02-09 15:19:19 +08:00 |
|
|
|
40abb53721
|
(no commit message provided)
Co-authored-by: aider (openai/DeepSeek-V3.2-Thinking) <aider@aider.chat>
|
2026-02-09 15:07:54 +08:00 |
|