{ "project": { "name": "MOM 工厂数字化平台(mom-pro2)", "type": "混合系统", "mainSystem": "MOM 制造运营管理系统", "subSystems": [ "MES(生产·仓储·质量·设备)", "ERP(进销存·财务)", "FIN(发票报销,独立模块)", "UMS(学会会员,独立模块)", "RES(科研课题,独立模块)", "ARC(档案管理,独立模块)", "CRM(客户关系)", "SRM(供应商关系)", "HRM(人力资源)", "BPM(Flowable 协同审批)", "AI(通义千问 + Milvus RAG)", "BI(SQL 配置式大屏)" ], "description": "基于 yudao(ruoyi-vue-pro)二次开发的制造业一体化数字工厂平台,覆盖『销售接单 → 采购/生产 → 质检 → 仓储 → 发货 → 回款 → 售后』全链路,内置审批流、主数据、附件、AI 辅助与 BI 驾驶舱。", "businessPositioning": "让工厂的订单、物料、生产、库存、质量、人员、资金在一个系统内闭环流转,管理层可通过 BI 大屏掌握全局。", "coreChain": "CRM 商机/合同 → ERP 销售订单 → MES 主生产计划/工单/报工 → MES 质检与仓储 → 销售出库发货 → 开票回款 → 售后闭环", "techBase": "Spring Boot + MyBatis + Flowable + Redis + Quartz/RocketMQ/Kafka + Milvus 向量库 + 通义千问", "database": "MySQL 8.4,运行库 mom-jssm 共 430 张表(含 system_*、bpm_*、act_* 底座表与 mes_*/erp_*/crm_*/srm_*/hrm_*/mdm_*/ai_*/finance_*/ums_*/research_*/archive_* 业务表),多租户已关闭", "frontend": "mom-pro2-before(Vue3 管理后台,同仓库存放,只读参考)" }, "stats": { "businessModules": 17, "coreObjects": 59, "documentFlows": 10, "approvalListeners": 24, "aiCapabilities": 8, "wmBillTypes": 15 }, "businessAnswers": [ [ "项目解决什么问题", "离散制造工厂的产供销人财物一体化管理:从客户订单到生产交付、库存资金全链路数字化闭环" ], [ "核心业务", "销售订单履约(合同→订单→生产→质检→入库→发货→回款)与采购供应(申请→订单→到货→IQC→入库→付款)" ], [ "业务主线", "CRM 合同 → ERP 销售订单 → MES MPS/工单 → 报工/IPQC → 完工入库 → 发货通知 → 销售出库(OQC) → 开票 → 回款" ], [ "销售如何影响生产", "销售订单审批通过后,需生产明细自动创建 MES 主生产计划(MPS),MPS 下发驱动工单与任务" ], [ "采购如何影响库存", "采购订单『确认收货』生成 MES 到货通知 → IQC 合格/特采 → 采购入库单完成 → 库存台账 IN 事务+N" ], [ "生产如何产生库存", "报工审批通过后自动生成产品产出单入库(质检工序先待检、IPQC 后拆行入库);倒冲工序按 BOM 扣线边库" ], [ "质量在哪里介入", "四道闸口:IQC(到货/外协入库)、IPQC(报工质检工序)、OQC(销售出库前)、RQC(退料/退货),不合格走 NCR 处置" ], [ "售后如何闭环", "工单判定退货 → 退货申请审核 → 自动建 MES 销售退货单 → RQC 质检/入库回调 → 退款回调 → 工单完结关闭" ], [ "AI 在哪里参与", "发票/报价 OCR 预填、质检结果建议、缺料/时长/风险/交付四类预测;均为『业务组装 Prompt→模型→JSON→人工确认』模式" ], [ "模块间数据关系", "MDM 主数据统一下发;CRM↔ERP 合同生单;ERP↔MES 单据互建与数量回写;BPM 事件回调解锁状态;HRM 交接扩展数据可见性" ] ], "aiCapabilities": [ { "name": "采购发票 OCR", "flow": "上传 blobId → 图片走 chatWithImage 视觉模型 / PDF·文本走 chat → 解析发票号·抬头·供应商·价税合计·税率 → 预填采购来票表单", "callsApis": [ "SystemStorageBlobService" ] }, { "name": "报价单 OCR", "flow": "PDF/Word/Excel/图片 → POI/PDFBox/视觉模型 → 报价头+产品明细 JSON → 预填报价单", "callsApis": [ "SystemStorageBlobService" ] }, { "name": "质检结果智能判定", "flow": "质检单+指标结果+缺陷记录 组装 Prompt → chat → 建议{合格/特采/退货/报废+理由}", "callsApis": [ "MdmItemApi", "SrmSupplierApi", "CrmCustomerApi" ] }, { "name": "物料短缺预测", "flow": "工单 BOM 需求 vs 库存(在库-冻结-占用) vs 已投料 → chat → 风险等级+缺口清单", "callsApis": [ "MdmItemApi" ] }, { "name": "生产时长预测", "flow": "工序标准工时+设备小时产量+传送倍率 → chat → 预测总时长+工序分解", "callsApis": [ "MdmItemApi" ] }, { "name": "生产风险预测", "flow": "IPQC 缺陷率+设备保养点检+物料可用率<20%+关键工序 → chat → 综合风险+因素", "callsApis": [ "MdmItemApi" ] }, { "name": "交付预测", "flow": "进度+剩余天数+任务完成状态+客户交期 → chat → 能否按时+置信度+延误因素", "callsApis": [ "MdmItemApi", "CrmCustomerApi" ] }, { "name": "RAG 知识库", "flow": "文档 → POI/Tika 提文本 → 切片(800token) → 向量化入 Milvus → 检索接口(topK3,阈值0.7)【当前无业务模块消费,预留能力】", "callsApis": [] } ], "pendingConfirm": [ "仓库类型/合格仓改造:需求称仓库应有 type 字段(原料/成品/半成品/线边/合格仓),但 MesWmWarehouseDO 当前无 type 字段,仅硬编码虚拟线边库,改造似未完成【待确认】", "HrmUserHandoverApi.expandUserIds 接口已实现,但 CRM/ERP/MES 查询『我的数据』处均未实际调用,交接可见性功能未真正生效【与项目规则文档存在落差】", "回款(crm_receivable)未接 BPM,创建即审批中(10)靠手动更新;合同/开票均已接【待确认是否有意简化】", "MES 任务暂停 pauseTask 仅允许草稿状态停工,疑似校验逻辑反转 bug", "付款单 BPM 驳回回退到 PROCESS(10) 而非 REJECT(35),与其他单据不一致", "财务勾稽断裂:updatePurchasePrice/updateSalePrice 方法体为空,入库/出库金额不会自动回写收付款", "生产入库单(ProductReceipt) 与报工产出(ProductProduce) 并存,存在重复入库风险需业务确认", "AI 模型工厂仅实现通义千问,DeepSeek/OpenAI/Ollama 枚举预留未实现", "售后退货单 AUDITING(10) 状态无写入代码,疑似预留未启用", "BI 图表 querySql 以字符串拼接参数执行(仅单引号转义),存在 SQL 注入风险面", "MesWmSnDO 新增的 uuid 字段生成/消费逻辑未在核心 Service 中确认", "转正申请(hrm_regularize_application)、培训证书等仅有 SQL 与菜单初始化,Java 侧 Service/Controller 未实现", "NCR 处置结果(返工/退货)未回写触发源单据,仅台账记录", "MPS 状态枚举独立编号(0/1/2/3),与通用单据常量(0/1/4/5)不一致", "财务报销:菜单仅授予 super_admin(超管由代码直返全部菜单),普通角色未配 system_role_menu,非超管登录看不到「报销单」菜单【待确认是否补授权】", "会员管理:会员管理菜单(1075490~1075503)仅 super_admin 可见,普通角色未配 system_role_menu,非超管登录看不到会员管理目录【待确认是否补授权】", "会员管理:审批通过自动建系统账号用「联系电话」同时作用户名与初始密码,若联系电话为空会用字面量 unknown 兜底,存在弱口令与重名风险【待确认是否改造】", "会员管理:自动建档不搬运 contactUser/unitIntro/expireDate(ums_application 无对应字段),单位会员的「联系人/单位简介/有效期」只能在会员列表手工补录【待确认是否需要申请单增字段】", "会员管理:单位会员的等级字典 ums_unit_grade 仅到「会长单位」(4),但校验逻辑额外硬编码禁止单位选「理事长」(grade=5)——该值本不在单位字典内,属防御性冗余校验【待确认是否精简】", "课题管理:专家评分权重(选题0.3/方案0.3/团队0.2/成果0.2)与「加权均分≥60 且 多数结论为推荐立项」的通过阈值是占位规则,需学会最终确认;已集中为常量便于调整【待确认,改动只需改常量】", "课题管理:经费拨付已对接财务报销(1:1 生成 finance_reimbursement 并自动提交审批),但台账与报销单是软关联(无外键,仅靠 reimbursement_id),财务侧直接删除报销单会留下台账的悬空 reimbursement_id;已用 FUND_REIMBURSEMENT_NOT_EXISTS 精确提示兜底,不做数据库级约束【已接受的风险】", "课题管理:新建的财务报销审批流程 finance_reimbursement_approve 为 2 节点(财务审核 → 财务主管审批),节点默认审批人策略为「角色 = 超级管理员(1)、依次审批」;上线前需在 BPM 设计器中按学会/财务实际审批人调整,否则该角色下多用户会变成逐人会签【环境配置项,非代码缺陷】", "课题管理:经费拨付台账的「已拨付(20)」等价于报销单「已通过(20)」,不含出纳实际付款动作;若日后需要独立的「已付款」状态,需另增状态与审批节点【二期可扩展】", "课题管理:申报单与 ums_member 是软关联(无外键),会员被删除后申报单会留下悬空 memberId;成员列表需容错展示「会员已删除」【待确认是否加外键或删除保护】", "课题管理:BPM 流程 research_topic_approve 三节点默认审批人为「角色=超级管理员(1) + 依次审批」,该 dev 库超级管理员角色下有 4 个用户(admin/张娟/马芳/马贞),每个节点需 4 人会签才推进;全新安装库该角色仅 admin 一人、流程可开箱即用。dev 库需减少超级管理员用户或改在 BPM 设计器中为每节点指定审批人【环境配置项,非代码缺陷】", "课题管理:立项通知复用 system_notice 系统公告,不新增 system_notify_template、不发站内信;如需短信/站内信定向通知需另行配置【待确认通知渠道】", "档案管理:档案借阅 BPM 流程 archive_borrow_approve 为手工导出部署产物(_archive_bpm_export.sql 内 act_*/bpm 表的 UUID 与时间戳只能在部署时生成,无法预写),必须先在 BPM 模型部署再导出再合并进 config_export_all 阶段一;顺序错会导致新库初始化时该流程缺失【部署顺序硬约束,已在文件头与 README 双重标注】", "档案管理:菜单 1075600~1075699 与各 archive:* 权限点仅在归档脚本中,普通角色未配 system_role_menu,非超管登录看不到「档案管理」目录【待确认是否补授权,与财务报销/会员管理同类问题】", "档案管理:档案与来源单据(课题申报书/会员/报销单)为软关联,来源单据被删除后档案的 source_id/source_no 会成为悬空快照;档案本身不随来源单据删除而删除【待确认是否需要删除保护或外键】", "档案管理:需求中的「学会文件、会议纪要、调研报告、学术论文、合同协议」等电子文档由「文书档案」分类承载,系统内无对应来源模块,仅支持手工录入并挂电子附件;合同档案未纳入自动归档(用户明确排除)【已确认的边界】", "档案管理:逾期提醒按用户决策仅查询时实时计算(不建 infra_job、不发站内信),借阅列表「逾期」列与 /overdue-page 独立入口呈现;若日后需要到期主动推送,需另加定时任务与通知渠道【用户已确认的简化,二期可扩展】", "档案管理:「同一档案仅允许一条未归还借阅单」由应用层 submit 校验 + 审批通过时条件更新(UPDATE ... WHERE status=10)共同保证,MySQL 无法对「部分状态唯一」建约束;校验与更新之间的理论窗口已收敛为可感知的冲突报错(档案已被占用)而非脏数据【已接受的风险】", "档案管理:档案统计按分类/密级/载体三组 GROUP BY 聚合(无 N+1),当前量级可接受;档案过万后需改为缓存或物化统计表【本期不做】", "档案管理:跨模块改表——research_application / ums_member / finance_reimbursement 各新增可空列 archive_document_id(archive_module_migration.sql 用 information_schema 守卫保证幂等),需与三方模块确认变更窗口【跨模块改表,无破坏性】" ], "generatedAt": "2026-09-29", "analysisBasis": "基于 dev_business 分支 87bf4a99 源码,6 组并行源码走读(MES 生产质量 / MES 仓储 / ERP / CRM+SRM / 售后+HRM / AI+BI+MDM+BPM+底座);2026-09-28 增量补充 yudao-module-finance 独立财务报销模块(报销单 + 明细 + 发票附件 + BPM 审批 + 归档)与 yudao-module-ums 独立会员管理模块(入会申请 + BPM 两级审批 + 审批通过自动建会员与登录账号 + 会员列表/通讯录);2026-09-28 增量:BPM 流程定义 ums_membership_approve(入会审批)已在 mom-jssm 部署并并入 config_export_all 阶段一(分类 ums_membership_approve,秘书处初审 → 理事会审议,两节点审批人均为「角色」策略、角色=超级管理员(1) 兜底,表单类型=自定义表单,查看路径 /ums/application/detail/approve/index.vue);同时修复 mom-jssm 由 CREATE TABLE ... LIKE 克隆导致的 47 个指向 ruoyi-vue-pro 的 act_*/flw_* 跨库外键(重建为指向 mom-jssm 自身,孤儿行预检为 0);2026-09-28 增量:新增 yudao-module-research 独立科研课题模块一期(课题指南发布 + 在线申报 + 专家评审明细 + BPM 三级立项审批 + 立项通知公告 + 经费拨付记录,4 张 research_* 表 / 5 个字典 / bpm_category id=8002 / 流程 research_topic_approve / 菜单 1075510~1075553),并并入 config_export_all_20260928 阶段一;申报人取 ums_member(软关联)、立项通知复用 system_notice 公告、拨款凭证走 system 附件中心 recordType=research_fund_record;2026-09-29 增量:课题经费拨付对接财务报销——新建 yudao-module-finance-api(FinanceReimbursementApi:建单+提交/改单+重提/删除/查询四方法,本地 Spring Bean 调用,无需 Feign),课题侧登记拨款时 1:1 自动生成 finance_reimbursement(系统生成 1 行明细:费用类型=其他 5、发票金额=拨付金额、发票日期=拨付日期、说明=「课题〔名〕第 N 期拨款」)并立即提交 BPM,回写 reimbursement_id/reimbursement_no、台账置「报销审批中(15)」;凭证改为登记时必填并双绑(research_fund_record + finance_reimbursement);新增 ResearchFundStatusListener(第 15 个业务监听器,与 finance 自己的 FinanceReimbursementStatusListener 订阅同一流程 key 并行触发)按审批结果回写台账:通过→已拨付(20)、驳回→已驳回(30)+驳回原因/时间、取消流程→退回待拨付(0)可改后可重新发起(发起人撤回只把实例退回发起节点、流程未结束,不触发回写,台账保持 15);新造 2 节点 BPMN docs/sql/finance_reimbursement_approve.bpmn(财务审核 → 财务主管审批,category id=216 已存在),2026-09-29 已在 mom-jssm 部署为版本 1(form_type=20、自定义表单创建路径 /finance/reimbursement/index、查看路径 /finance/reimbursement/detail/approve/index.vue)并并入 config_export_all_20260929 阶段一,两级审批全通过/驳回/取消三条回写链路均已端到端验证;2026-09-29 增量:新增 yudao-module-archive 独立档案管理模块 + yudao-module-archive-api(ArchiveDocumentApi:archiveBySource 按 sourceType+sourceId 幂等归档 / isArchived / getBySource 三方法,本地 Spring Bean 调用,无 Feign),覆盖书架分类(archive_category 树形、code 唯一、defaultSecretLevel 默认密级、6 条初始分类:会员/课题/会议/财务/文书/党建,财务默认密级=保密 3)、档案管理(archive_document:DA+yyyyMMdd+6 位流水编号、密级三档 1 公开 2 内部 3 保密、载体三型 1 电子 2 实体 3 电子+实体、实体位置四字段 shelfNo/layerNo/columnNo/boxNo + storePlace、来源四类 sourceType 1 手工 2 课题 3 会员 4 财务带 sourceNo/sourceId/sourceTitle 冗余快照、状态 10 在库 20 借出中、电子附件走 system 附件中心 recordType=archive_document、archiveBySource 幂等短路 + 三方表 archive_document_id 回写作为已归档硬标记,重复归档由来源侧错误码拦截且 archive 侧 DOCUMENT_DUPLICATE_SOURCE 兜底)、借阅登记与审批(archive_borrow:JY+同级流水编号、借阅人信息/借阅目的/归还期限、状态 0 草稿 15 审批中 20 借出中 30 已归还 35 已驳回,仅 0/35 可改可重提、仅 0 可删、仅 20 可登记归还;submit 前校验同档案不得已有 15/20 在途借阅,先解析流程再建单杜绝孤儿草稿;BPM 流程 archive_borrow_approve 两级:档案管理员审核 → 分管领导审批;监听器 ArchiveBorrowStatusListener 按 businessKey 回写 20+approveTime / 35+驳回原因时间 / 退回 0,审批通过时条件更新档案 SET status=20 WHERE status=10,0 行则报档案已被占用并回滚)、归还登记(条件更新 20→30 + returnTime/归还确认人,再把档案条件更新回 10,形成闭环)、逾期实时计算(overdue=status==20 且 returnDeadline<今天,不建 infra_job 不发站内信,列表「逾期」列 + /archive/borrow/overdue-page 独立入口)、档案统计(4 卡片:总数/在库/借出/逾期 + 分类/密级/载体三组 GROUP BY 聚合,无 N+1);敏感档案用密级字段 + 独立权限点 archive:document:sensitive,/get 越权抛 DOCUMENT_SENSITIVE_NO_PERMISSION、/page 与 /export-excel 强制过滤 secret_level<>3,统一走 applySecretLevelFilter / validateSecretLevelVisible 两私有方法;新增 3 张表 archive_category/archive_document/archive_borrow、6 个字典(82000~82005)、bpm_category id=8003 + 手写 docs/sql/archive_borrow_approve.bpmn(category=archive_borrow_approve、form_type=20、创建路径 /archive/borrow/index、查看路径 /archive/borrow/detail/approve/index.vue)已在 mom-jssm 部署为版本 1、菜单 1075600~1075699;三方归档联动为列表页手动「归档」按钮(非事件驱动,归档不回写来源业务状态):课题 research_application status=20 已立项 → sourceType=2 密级 2 内部 sourceNo=立项编号;会员 ums_member status=1 正常 → sourceType=3;财务 finance_reimbursement status=20 → sourceType=4 密级 3 保密,与既有 20→40 + archiveTime 同事务叠加;三张来源表各新增可空列 archive_document_id(archive_module_migration.sql 用 information_schema 守卫保证幂等)。全库表数 427→430;业务状态监听器实际计数修正为 24 个 *StatusListener(14 个继承 BpmProcessInstanceStatusEventListener)。本模块不反向依赖 ums/finance/research,仅提供 -api 子模块由三方手动调用;依赖方向 research/ums/finance → archive-api,无环。本次同步更新的业务可视化产物:新增 mermaid/15-archive-flow.mmd,增量修订 01-business-mindmap / 08-module-relation / 09-data-flow / 10-business-object,以及 data/modules.json(新增 arc 模块、bpm 监听器计数 15→24)、objects.json(新增档案分类/档案/借阅单 3 对象 + 课题申报书/会员/报销单各补 archive_document_id)、flows.json(新增 archive 流程 9 步)、roles.json(新增档案管理员/借阅人/借阅审批人/归档经办人 4 角色)、business.json" }