版本: 1.1
日期: 2026-05-05(v1.1 补充交付路径:以 crm/py-backend 为准)
状态: 待评审
依据: plan/计划需求.md、plan/sx.sql(库表对齐参考)、plan/vehicle_management.sql(车辆字段参考)
crm/web(Vue 3)crm/py-backend(Python / FastAPI 等,以仓库内实际栈为准)。本规格中的业务接口、领域逻辑、审批与审计,优先在 py-backend 实现并完善。crm/backend(RuoYi-Vue-Plus / Spring Boot)。上线切换完成后 不再作为 CRM 生产运行时;切换前可作接口与表结构对照,新功能不默认要求在 Java 侧重复交付。在 CRM 内新增 计划管理 子系统,包含:
| 项目 | 结论 |
|---|---|
| 财务报销子系统(bx) | 本阶段不对接。 不向 bx 推送单据、不拉取报销状态、不共用 bx 审批实例。 |
| 结算与票款 | 运输结算单、审核、通知开票、发票附件、汇款凭证均在 CRM 库表与页面 内完成记录与状态流转。 |
| 用户与权限 | 复用 CRM 用户管理、角色管理(数据与约定仍来自现网 CRM);py-backend 侧需实现 与之对齐的认证与鉴权(如 JWT、权限码校验规则与 crm/web 约定一致)。权限标识可沿用 crm:plan:* 或 py 侧统一前缀,以实现时前后端对齐为准。 |
| 运行时策略 | 先完善 py-backend;正式上线后 CRM 仅使用 py-backend,停用 Java CRM 后端。 |
crm/backend 中完整重复实现 本规格全部能力(除非切换窗口期需要临时补丁,须在计划中单独列出)plan/sx.sql 同一库;plan_* 表由 py-backend 迁移脚本或 DDL 创建与演进,避免 Java 与 Python 两套迁移长期分叉;若切换期双栈并行,须约定 唯一写入口(默认仅 py-backend 写计划域表)。crm/web 的 API 基地址在切换后指向 py-backend;接口路径、鉴权头、错误体格式需在联调阶段与 Java 行为对齐或显式改版并文档化。plan_ 前缀,与 plan/sx.sql 同库建模时可合并迁移脚本。需求中的「计划专员 A / B / C」映射为 可配置角色或数据权限 + 菜单权限,建议:
| 角色含义 | 典型职责 | 权限要点 |
|---|---|---|
| 专员 A | 发起与安排运输、生成二维码、线下分发 | 计划编辑、运输安排、二维码生成、现场通知 |
| 专员 B | 运输完成后的整单核对 | 核对通过/退回 |
| 专员 C | 运输费用确认、归档 | 费用确认、归档 |
| 现场人员 | 待入/待出相关地磅与附件 | 地磅确认、附件上传、仅可见指派任务 |
权限码字符串在实现阶段批量定义,建议与现网 RuoYi 菜单权限格式对齐(如 crm:plan:transport:arrange),便于 crm/web 继续复用 v-hasPermi 等;校验逻辑在 py-backend 实现(与 Java Sa-Token 解耦,可对齐同一权限表或 JWT 内嵌权限列表)。
待采购、等客户通知、待安排、计划取消、待发货、已发货、待入库、已入库、待出库、已出库。
是 / 否(建议字典 crm_plan_finished:1 / 0)。
直销单、入库单、出库单、云栋单。
状态迁移须在后端用 显式校验(禁止仅靠前端禁用按钮)。
判定公司名称集合(可配置,禁止写死在代码):
安庆市山峡化工有限公司安徽云栋化工有限公司规则(与需求一致):
地磅单: 满足上述条件时 自动生成 地磅单主数据;计划列表 / 详情需展示关联地磅摘要信息。
crm_contract_* 命名一致),计划模块通过 合同 ID + 版本 ID 解析行价格。在 CRM 产品 上增加:
是否易制毒(布尔或字典)是否易制爆(布尔或字典)计划行通过产品 ID 继承属性并触发证照校验。
需求仅描述「库存管理」「盘存统计分析」。本规格约定:
plan_inventory_ledger(示例名) 由确认后的出入库事件回写,避免双录。plan_* 事实表 + 台账(若有)按物料、周期、仓库/公司维度汇总;具体报表字段在开发前列清单评审。格式:SXYS + 7 位数字序号(示例 SXYS0000001),序号 全局递增,并发下由服务端生成。
运输编号、车牌号、运输公司、所属公司、运输介质、运输起点、运输终点、运输公里数、单位(吨/趟;需求原文「吨/躺」视为笔误)、运输费用、创建人、是否开票、备注。
| 模式 | 规则 |
|---|---|
| 按重量 | 默认 运输数量 × 运输单价,结果 允许人工调整 |
| 按趟次 | 不自动计算,以 手填金额 为准 |
不向 bx 同步;汇款与票据仅为 CRM 业务记录,后续若对接 bx,可通过 新规格 定义映射。
按需求固定模板生成文本(字段来自计划头 / 行):
计划号:{planNo}
企业名称:{enterpriseName}
提货单位:{pickupCompany}
到货时间:{arrivalDate}
药品名称:{productName}
到货吨位:【{tonnage}吨】
备注:{remark}
服务端提供「复制到剪贴板」所需纯文本或前端拼装。
plan_ 前缀)以下为逻辑实体,物理表名在实现时可微调但须保持前缀与职责清晰。
| 逻辑实体 | 说明 |
|---|---|
plan_order |
计划头:计划日期、计划订单编号、单据类别、跟进状态、完成状态、供应商/目的地、销售合同 ID、跟进人、通知文本、审计字段等 |
plan_order_line |
计划行:物料、规格、包装、单位、入出库数量与价格、磅差、金额、与合同行/产品引用 |
plan_line_cert |
计划行证照:购买证/运输证附件及有效期(如需要) |
plan_transport |
运输任务:运输编号、车辆、承运商、路线、费用、单位、开票标志等 |
plan_transport_token |
二维码 token:关联运输任务、过期时间、是否已使用 |
plan_driver_feedback |
司机扫码回传:附件、数量、时间 |
plan_weighbridge |
地磅单:关联计划行或运输任务、磅值、状态 |
plan_site_attachment |
现场上传:地磅单/出入库附件 |
plan_carrier / plan_carrier_vehicle |
运输公司及车辆(字段参考 vehicle_management.sql 的 vehicles、车头车尾等) |
plan_own_vehicle |
自有车辆档案 |
plan_settlement / plan_settlement_item |
运输结算单头行 |
plan_settlement_payment |
发票与汇款登记(票据路径、金额、时间) |
plan_sequence |
计划订单号、运输号等序列(按业务类型分桶) |
编号生成: SXDDH + yyyyMMdd + 6 位日序号(与需求示例一致);与运输编号分表维护序列,避免并发冲突。
自有车辆与承运商车辆字段深度参考 plan/vehicle_management.sql(如车头 vehicle_heads、车尾 vehicle_tails、vehicles 组合关系、证件 certificates 等),映射到 plan_* 表时与 plan/sx.sql 现网表习惯 对齐(主键策略、租户、逻辑删除、审计字段等以库中已有 CRM 表为准;若全新表且仅 py 写入,可采用 UUID/雪花等与团队约定一致的方案)。
| 层级 | 路径约定 |
|---|---|
| 后端(主交付) | crm/py-backend:计划域 REST API、业务规则、编号序列、二维码 token、审批状态机等。目录与分层以该仓库现有结构为准(如 app/routers、app/services、app/models)。 |
| 后端(对照 / 切换期) | crm/backend:仅在不与「py 为唯一写入口」冲突的前提下作兼容或只读;不作为本规格默认实现落点。 |
| 前端 | crm/web:调用 py-backend 暴露的 API(api/crm/plan/* 或统一 /api 前缀,以实现时为准)、views/crm/plan/* |
| 数据库 | 与现有 CRM 同一库;DDL / Alembic(或项目采用的迁移方式)放在 py-backend 侧维护,并与 plan/sx.sql 合并策略一致 |
Decimal 精度与数据库字段一致;金额由服务端重算防篡改。@Log。附件上传走与现网一致的 OSS/文件服务配置。| 项 | 默认假设 |
|---|---|
| 司机端形态 | 独立 H5 页面(与 CRM 同域或子路径),免登录靠 token;由 py-backend 提供页面数据接口或 SSR 视项目而定 |
| 工作流 | py-backend 内表驱动审批(见 §11.1);不依赖 Java Warm-Flow |
| 公司名称匹配 | 可配置表 + 去空格全等匹配;简称需求再增加别名表 |
crm/py-backend;上线后停用 Java CRM 后端 已在 §1、§14、§15、§17 一致体现。下一步: 评审通过后,使用 writing-plans 技能生成 crm/py-backend 优先 的 docs/superpowers/plans/2026-05-05-crm-plan-management-implementation.md(或按子模块拆分为多份计划)。