料一经出库领用,那条库存行的可用量就扣掉了,走不了标准库存行报废。 本接口内部做两件事:① 走逆向物流「从出库单退回(不良品)」→ 在管不良品; ② 对这笔在管量提交报废申请。两者在**同一个事务**里,要么都成要么都不成。 - 鉴权用 X-API-Key(config.MOM_INTERNAL_API_KEY),与 TRACK_WEBHOOK_KEY 刻意分离:方向相反、权限不同,独立轮换不连坐。未配置一律 503(Fail-Closed), 不静默放行 —— 一个默认开着的写接口比没配好的更危险。 - 刻意收紧:is_defective 恒为 true、need_reissue 恒为 false,都不由请求体 控制。良品分支会往库存行加数量,一个泄漏的密钥就能凭空造库存。 - track_ref 必填:Redis 未部署,唯一索引是唯一的并发防线。 - 退回逻辑从 inbound/stock.py 抽到 services/return_service.py:内部接口没有 JWT,而视图里夹着 get_current_company_filter/_normalize_user_id,不抽没法复用。 API 层保留薄包装,restock 等既有调用方一行不用改。
72 lines
2.8 KiB
YAML
72 lines
2.8 KiB
YAML
|
||
services:
|
||
db:
|
||
image: pgvector/pgvector:pg15 # 换成这个
|
||
container_name: inventory_db
|
||
restart: always
|
||
environment:
|
||
POSTGRES_USER: test
|
||
POSTGRES_PASSWORD: 1234
|
||
POSTGRES_DB: inventory_system
|
||
volumes:
|
||
- ./pgdata_docker:/var/lib/postgresql/data # 这里保持不变,Docker会自动创建这个新文件夹
|
||
ports:
|
||
- "5435:5432"
|
||
|
||
backend:
|
||
build:
|
||
context: ./inventory-backend
|
||
container_name: inventory_api
|
||
restart: always
|
||
ports:
|
||
- "8000:8000"
|
||
volumes:
|
||
- ./inventory-backend:/app
|
||
- ./inventory-backend/uploads:/app/uploads
|
||
command: gunicorn -c gunicorn.conf.py run:app --reload
|
||
environment:
|
||
DATABASE_URL: postgresql://test:1234@db:5432/inventory_system
|
||
MAIL_ENABLED: "true"
|
||
MAIL_SERVER: smtp.mxhichina.com
|
||
MAIL_PORT: "465"
|
||
MAIL_USERNAME: wms@iris-rs.cn
|
||
MAIL_PASSWORD: Q7nYyyESWlaThKjx
|
||
MAIL_DEFAULT_SENDER: wms@iris-rs.cn
|
||
MAIL_USE_SSL: "true"
|
||
MAIL_USE_TLS: "false"
|
||
# Track 系统 Webhook 通知(未配置则后端静默跳过,不通知)
|
||
TRACK_WEBHOOK_URL: ${TRACK_WEBHOOK_URL:-}
|
||
TRACK_WEBHOOK_KEY: ${TRACK_WEBHOOK_KEY:-}
|
||
# Track 系统查询接口(扫码入库拉取产品信息)
|
||
TRACK_API_URL: ${TRACK_API_URL:-}
|
||
# Track 出库 webhook(发货出库时通知 Track 标记"已出库")
|
||
TRACK_OUTBOUND_WEBHOOK_URL: ${TRACK_OUTBOUND_WEBHOOK_URL:-}
|
||
# ★ 多 Track 实例路由表:按 material_base.company_name 决定走哪个实例。
|
||
# 上面三个扁平变量保留为「未命中路由表」时的回落默认值(向后兼容)。
|
||
# ★ 用容器名互访(同属 projects_default 网络),不走宿主机端口。
|
||
TRACK_ROUTES: >-
|
||
{"IRIS":{"api":"http://track_backend:8000",
|
||
"inbound":"http://track_backend:8000/api/v1/external/webhooks/mom-inbound",
|
||
"outbound":"http://track_backend:8000/api/v1/external/webhooks/mom-outbound"},
|
||
"LICA":{"api":"http://lica_backend:8000",
|
||
"inbound":"http://lica_backend:8000/api/v1/external/webhooks/mom-inbound",
|
||
"outbound":"http://lica_backend:8000/api/v1/external/webhooks/mom-outbound"}}
|
||
# ★ 对内接口(Track → MOM)共享密钥,请求头 X-API-Key。
|
||
# 与 TRACK_WEBHOOK_KEY 刻意分离:方向相反、权限不同(能发起报废审批),
|
||
# 独立轮换不连坐。未配置则内部接口一律 503(Fail-Closed),不静默放行。
|
||
MOM_INTERNAL_API_KEY: ${MOM_INTERNAL_API_KEY:-}
|
||
depends_on:
|
||
- db
|
||
|
||
frontend:
|
||
build:
|
||
context: ./inventory-web
|
||
container_name: inventory_ui
|
||
restart: always
|
||
volumes:
|
||
- ./inventory-web:/app
|
||
- /app/node_modules
|
||
ports:
|
||
- "5175:5173"
|
||
depends_on:
|
||
- backend |