ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

从需求到详细设计:用 AI Agent 完成物料管理领域建模

从需求到详细设计:用 AI Agent 完成物料管理领域建模 领域驱动设计 · DDD 实战 · 物料供应链 · IMPA编码 · AI Agent · 2026-08物料/物资管理是船舶PMS系统中功能点最多、业务链路最长的模块——从申请、询价、采购、验收、库存到费用结算横跨63个功能点、5大业务子域。本文记录我们如何用 Coze AI Agent以 DDD 为方法论将这份复杂的需求转化为结构化的详细设计文档。63 个功能点5 大业务子域10 个核心实体三级审批 询价比价1. 物料管理的复杂度在哪里备件管理聚焦于设备维修用的零部件而物料/物资管理覆盖的是船舶运营所需的全部物资从日常耗材、油漆、化学品到油料、药品、电子海图。这带来了三个层次的复杂度第一业务链路长。一笔物料从需求到付款要经过申请→审批→询价→比价→订单→跟踪→验收→库存→费用→付款每个环节都有独立的状态和规则。第二物资类别差异大。普通物料走标准采购流程油料有月报和检测报告化学品需要满足港口国合规要求油漆有调配比例和膜厚管理药品受MLC公约约束电子海图有版本更新周期。第三费用结构复杂。一笔采购订单的费用不仅是物料单价还包括运输费、包装费、清关费、折扣、税费并且支持多币种结算和月度费用归集。┌──────────────────────────────────────────┐ │ 物料管理限界上下文 │ │ │ │ ┌────────┐ ┌────────┐ ┌────────┐ │ │ │ 物料申请 │→│ 询价比价 │→│ 采购订单 │ │ │ └────────┘ └────────┘ └───┬────┘ │ │ ↓ │ │ ┌────────┐ ┌────────┐ ┌────────┐ │ │ │ 费用结算 │←│ 库存管理 │←│ 验收入库 │ │ │ └────────┘ └────────┘ └────────┘ │ │ │ │ 专项域油料 / 化学品 / 油漆 / 药品 / 海图 │ └──────────────────────────────────────────┘2. 领域建模五个核心聚合2.1 物料申请聚合MrpApply物料申请采用主表明细行的双层结构。主表MrpApplyDesc持有申请单号、船舶、部门、申请类型、港口、到港日期等头部信息明细行MrpApply持有每条物料的申请数量和三级审批数量。聚合根MrpApplyRequest物料申请单包含实体申请主表信息MrpApplyDesc、申请明细行MrpApplyItem聚合边界申请单的所有明细行必须在同一个事务中提交审批操作修改的是明细行级别的审批数量但审批状态变更作用于整个申请单。关键设计发现代码中申请主表和明细行是两个独立的实体类mrp_applydesc和mrp_apply通过ApplyCode关联。这不是数据库设计的偶然而是反映了一个业务事实——审批是在明细行级别进行的每级审批人可以对不同物料行设置不同的审批数量ApproveNum1/2/3而不是简单的整单通过/驳回。2.2 询价聚合MrpInquiry询价是物料采购中最有特色的环节。一个询价单发给一个供应商包含多条物料的报价采购方可以向多个供应商发出询价然后进行比价。聚合根MrpInquiry询价单包含实体询价明细行MrpInquiryMrp聚合边界一个供应商的一张询价单及其所有报价明细构成一个聚合。设计要点询价单持有Vendor供应商、Currency币种、CurRate汇率——每个供应商可以用不同币种报价明细行持有Price单价、QuoteNum报价数量——报价是供应商维度的TransportPrice、PackingPrice、ClearancePrice三个附加费用字段出现在询价单上说明比价不仅是比单价还要比到岸总成本GenOrder字段标识该询价是否已生成订单防止重复转单2.3 采购订单聚合MrpOrder采购订单是物料管理中字段最多的实体60字段反映了船舶物料采购的真实复杂性。聚合根MrpPurchaseOrder采购订单包含实体订单明细行MrpOrderMrp、订单跟踪记录MrpOrderTrace订单主表的设计揭示了几个重要的业务规则字段组字段业务含义数量确认ComfirmNum确认数量与申请数量、询价数量可能不同发货记录SendDate/SendDate2, HasSend支持分批发货费用明细Fare1-Fare8, Number1-Number68种费用类型6种数量参数支持灵活费用结构付款跟踪Ispaid, PaidNumber, PaidCarNum付款状态和已付金额多币种Currency, CurRate, UsdRate订单币种、本币汇率、美元汇率物流DockVend, DockIntev, StockLocation码头供应商、库存位置预算BudgType预算类型与预算模块联动2.4 库存交易聚合MrpStoreTrans库存管理采用流水账模式——MrpStoreTrans记录每一笔库存变动当前库存数量通过流水聚合计算。聚合根MrpStockTransaction库存交易记录聚合边界每条交易记录是独立的不可变事件不包含子实体。设计亮点TransMark字段标识交易类型入库/出库/调整/期初/盘盈/盘亏流水记录冗余了物料名称CName/EName、型号MrpModel、单位MrpUnit即使主数据变更历史流水仍可查询ApplyCode和OrderID建立了流水与上游单据的追溯链路Requirement字段记录领用需求说明2.5 物料费用聚合MrpFare费用管理独立成聚合因为费用有独立的审批和付款流程且与订单是1:N关系一个订单可能有多笔费用货款、运费、关税等。聚合根MrpExpense物料费用聚合边界每笔费用独立审批、独立付款。费用实体是所有实体中字段最多的70字段体现了船舶物料采购财务处理的复杂性维度关键字段设计考量报价与实际QuotePrice vs FareNum报价金额与实际金额分离多币种QCurrency, Currency, CarCurrency报价币种/结算币种/承运币种三方汇率税务TaxAmt税额独立计算折扣Discount, Discount2支持双重折扣付款PaidNum, PaidCurrency, PayDate, PaidType付款金额/币种/日期/方式审批Approved1, Approved2, ManageSign费用审批链预算BudgType费用归属预算类型3. 核心流程从申请到付款的端到端设计3.1 三级审批机制物料申请的审批不是简单的一级过一级而是有数量调整能力的系统三级审批二级审批一级审批申请人系统三级审批二级审批一级审批申请人创建申请单含多条明细提交通知审批修改ApproveNum1填AppMemo1一级通过通知审批修改ApproveNum2填AppMemo2二级通过通知审批修改ApproveNum3填AppMemo3YesNoYStatus已批准审批完成可转询价/订单设计要点每级审批人可以修改审批数量ApproveNum1/2/3最终采购数量以最后一级为准YesNo字段是整体审批结论但每级的审批意见独立保留ApproveNumRec字段记录审批数量的变更轨迹3.2 询价比价流程审批通过的申请创建询价单选择供应商A选择供应商B选择供应商C供应商A报价供应商B报价供应商C报价比价分析选择最优方案生成采购订单比价的维度不仅是单价物料单价Price附加费用运费、包装费、清关费折扣Discount/Discount2币种和汇率不同供应商可能用不同币种报价交货期Eta/Etd到岸总成本 物料总价 运输费 包装费 清关费 - 折扣3.3 订单状态机创建订单提交审核通过审核驳回发送供应商第一批到货最后一批到货验收完成费用确认付款完成取消订单剩余取消草稿待审核已审核已发送部分发货全部到货已验收已结算已付款已取消代码中Status字段为整数结合HasSend、Ispaid、RecDate、ComfirmDate等字段共同标识订单在不同维度的进度。设计文档将这些分散的状态字段统一为显式状态机。4. IMPA 编码体系设计IMPAInternational Marine Purchasing Association编码是国际海事采购的通用语言。物料管理通过DicImpa字典表维护IMPA编码字段含义设计要点ImpaIMPA编码6位数字全局唯一主键TypeCode物料类型编码分类导航MaterialName / MaterialNameEn中英文名称双语支持Specification / Specification_En中英文规格技术参数描述UnitId / Unit计量单位标准计量单位AttachmentId附件ID产品图片/技术文档设计决策IMPA编码是岸端主数据由公司统一维护船端只能查询和引用船端可以创建本机编码LocalCode映射到IMPA编码兼顾灵活性和标准化询价单和订单明细同时持有MrpID内部物料ID、LocalCode本机编码和ISOCode国际编码支持多种编码体系共存5. 专项物资的领域设计5.1 油料管理油料是船舶最大的物料支出品类有独立的管理逻辑油料月报按月统计各设备燃油/润滑油消耗量油料检测报告记录润滑油品质检测结果关联设备油料费用按供应商维度和港口维度分别管理油料费用设备关联luboil_device建立油料与设备的消耗关系5.2 化学品管理化学品管理的核心驱动是海事合规按港口查询某港口允许/禁止哪些化学品按船舶查询某船舶当前持有哪些化学品按供应商查询某供应商能提供哪些化学品这些查询维度反映了港口国监督PSC检查的实际需求5.3 油漆管理油漆管理有独特的技术参数PntKnd油漆种类、PndTpy涂料类型、PntRate涂布率BlstClass喷砂等级、FilmDpth膜厚这些字段出现在询价单和订单明细中说明油漆采购需要指定技术参数5.4 药品管理药品管理受MLC海事劳工公约约束需要管理药品清单、有效期和定期检查。功能优先级为P2属于合规支撑域。6. 多币种与费用设计船舶物料采购天然是多币种场景。设计中采用汇率快照模式订单创建时 → 锁定 Currency CurRate UsdRate 询价报价时 → 每个供应商各自锁定汇率 费用录入时 → QCurrency(报价币种) Currency(结算币种) CarCurrency(承运币种)三级汇率设计CurRate订单币种→本币汇率UsdRate订单币种→美元汇率用于跨币种比价CERate费用层的承运汇率运费可能用第三种币种结算这个设计的核心原则是历史财务数据使用交易发生时的汇率快照不随汇率波动而变化。7. 跨域集成物料管理与以下上下文有集成关系集成域集成方式数据流向备件管理共享物料编码备件编码 ↔ 物料编码映射预算管理BudgType关联物料费用→预算执行供应商管理Vendor引用询价/订单→供应商信息设备管理油料消耗关联设备→油料消耗记录修理管理IsRepair标识修理物料→修理工程单报表域读模型库存/费用→统计报表8. AI 做了什么人做了什么AI 完成的工作约75%10个实体类的字段提取共提取约300个字段生成完整字段设计表聚合边界识别从实体关系中识别5个核心聚合区分主表/明细结构审批流程还原从三级审批字段Manager1/2/3 ApproveNum1/2/3推导出审批时序状态机推导从Status、HasSend、Ispaid等字段组合推导出订单状态机费用结构分析从Fare1-8/Number1-6等字段分析出灵活费用模型比价维度识别从运输费/包装费/清关费/折扣等字段发现到岸总成本比价逻辑多币种设计从三级汇率字段推导出汇率快照模式专项物资分类从油漆技术参数、化学品查询维度、油料月报等识别专项域人需要决策的部分约25%聚合边界确认费用是否独立于订单成聚合——AI 建议独立但需要人确认审批流程确实独立库存模式选择流水账 vs 余额表需要根据船端离线场景和性能要求决策专项物资的范围哪些专项物资需要独立聚合哪些只作为属性字段多客户变体处理电子海图是MH变体独有HKMW有独立的实体继承体系费用类型标准化Fare1-8 的具体业务含义需要领域专家确认9. 经验总结9.1 字段数量不等于领域复杂度物料费用实体有70字段但这并不意味着领域逻辑复杂——很多字段是不同费用类型、不同币种、不同审批级别的平铺展开。AI 的价值在于将这些平铺字段重新组织为聚合内的值对象如 Money、FeeBreakdown、ApprovalTrail让设计更清晰。9.2 主从表结构揭示聚合边界代码中mrp_applydesc主表和mrp_apply明细表的分离直接揭示了申请单是一个聚合根明细行是聚合内实体。这种从代码结构反推聚合边界的方法比纯从需求文档推理更可靠。9.3 冗余字段是有意设计询价单和订单明细都冗余了物料名称、型号、单位。这些冗余不是疏忽而是为了船端离线时数据自包含历史单据保留交易时的快照查询性能优化AI 一开始建议规范化去除冗余经过分析后保留了这些字段并在 ADR 中记录了决策理由。9.4 专项物资的 DDD 处理化学品、油漆、油料等专项物资DDD 中应该作为核心域内的子域处理而不是独立限界上下文。它们共享申请-采购-库存的主干流程只是在明细行上扩展了各自的技术参数。这种共享内核扩展属性的模式比为每种物资建独立模块更合理。9.5 Mermaid 图表的价值AI 生成的 Mermaid 类图、时序图和状态机在评审中起到了关键作用——团队可以围绕可视化模型快速讨论而不是面对大段文字。特别是订单状态机将散落在多个字段中的状态信息聚合为一张图业务方一眼就能发现遗漏的状态转换。
返回列表