xiaoyi
22 小时以前 8782476e9cb4480be5da588888d08022b7942d0c
分支
用户 xiaoyi <908147524@qq.com>
星期六, 十一月 7, 2026 14:07 +0800
提交者 xiaoyi <908147524@qq.com>
星期六, 十一月 7, 2026 14:07 +0800
提交8782476e9cb4480be5da588888d08022b7942d0c
目录 e9858152429cd6da9e1552f6503f1270fa8e232f 目录 | zip | gz
上一版本 bc31cda78817c62aa552be40f39eccaa03262923 查看 | 对比
feat: 补齐需求10/15/16/17/18/21/23,改用现有模块替代 ERP 依赖

## 问题
按验收计划逐项复测时确认以下缺口:
1. 需求10 退单管理、需求23 成本分析依赖 ERP 模块,而该模块在构建中被排除
(yudao-server DefaultController 对 ERP 路径返回 501),导致无法验收
2. 需求15 执行反馈只有报工与任务列表,缺设备运行数据、物料消耗、交期偏差
3. 需求16 质量追溯缺原材料合规证书与售后故障关联
4. 需求17 故障报修缺远程诊断能力
5. 需求18 OEE 缺停机明细报表
6. 需求21 风险监测只有人工录入当前值,未接设备采集

## 修复
### 需求10 退单管理(去 ERP)
- 新增 after_sale_cancellation 表与完整受理流程:
退货 / 合同变更 / 合同终止统一受理,统一审批
- 审批通过后按类型执行下游动作:
退货 → 生成售后退货单;合同终止 → 作废 CRM 合同(status=50)
- 关键设计:状态流转用乐观锁;下游动作结果写入 executed/executeRemark,
失败不静默吞掉,便于人工补做;驳回强制填意见

### 需求23 成本分析(去 ERP)
- 新增 SrmCostAnalysisService,改用 SRM 招标需求量 + 供应商报价
- 加权均价 = Σ(报价单价 × 需求数量) / Σ(需求数量)
- 输出采购量、加权均价、最低/最高价、报价次数、供应商数、预估价偏差率、价格变动
- 另提供按月价格趋势接口

### 需求15 执行反馈
- 新增 MesProTaskExecutionService:汇总计划/报工/设备采集/物料消耗/交期偏差
- 延期原因只列可观测信号(告警、缺料、报工滞后、耗时超计划),不推断管理原因

### 需求16 质量追溯
- srm-api 新增 SrmSupplierCertificateApi:按供应商查询合规证书(含过期标记)
- 批次追溯新增 /certificates(原材料合规证书)与 /aftersales(售后故障记录)
- aftersales-api 新增 getTicketsBySaleOrderNo,供 MES 反查售后

### 需求17 故障报修
- 新增 MesDvRepairDiagnosisService:基于实时采集 + 状态历史 + 告警做远程诊断
- 输出风险等级、诊断结论、逐条诊断依据;不引入新外部接口

### 需求18 OEE
- 新增停机明细报表:按采集间隔推算停机区间与合计,复用 CollectOfflinePolicy

### 需求21 风险监测
- 危险源新增 machineryId + metricKey,从 mes_collect_realtime 取值
- 新增 /safety/risk-source/refresh:批量刷新并按阈值判定,返回报警清单
- 取不到采集值时置 UNKNOWN,不覆盖历史观测时间

## 数据库
- after_sale_cancellation_20261107.sql:退单受理表 + 菜单权限
- safety_risk_source_20261107.sql:危险源台账表 + 菜单
- safety_risk_source_collect_20261107.sql:危险源加设备绑定列
- safety_hazard_employee_link_20261107.sql:补隐患表缺失的
reporter_id/assignee_id/rechecker_id(修复创建隐患 500)
- mes_work_order_schedule_priority/market_type、mdm_item_outsource_lead_time:
排产约束字段
- purchase_order_srm_menu、bpm_invoice_legacy_derived_from:菜单与数据迁移

## 验证
mvn compile EXIT=0;mvn test-compile EXIT=0。
本地复测(mom_local):
- 需求10 11/11 通过(含退货生成、合同作废、驳回路径)
- 需求23 6/6 通过(样本:钢木电缆盘 加权均价659.6)
- 需求13/15/17/18/21 21/21 通过
- 需求16/22 通过;需求20 未绑定账号场景 6/6 通过
已添加32个文件
已修改17个文件
2439 ■■■■■ 文件已修改
sql/mysql/after_sale_cancellation_20261107.sql 49 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
sql/mysql/bpm_invoice_legacy_derived_from_20261106.sql 9 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
sql/mysql/mdm_item_outsource_lead_time_20261107.sql 9 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
sql/mysql/mes_work_order_market_type_20261107.sql 9 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
sql/mysql/mes_work_order_schedule_priority_20261107.sql 9 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
sql/mysql/purchase_order_srm_menu_20261107.sql 14 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
sql/mysql/safety_hazard_employee_link_20261107.sql 23 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
sql/mysql/safety_risk_source_20261107.sql 22 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
sql/mysql/safety_risk_source_collect_20261107.sql 24 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-aftersales-api/src/main/java/cn/iocoder/yudao/module/aftersales/api/AfterSaleTicketApi.java 9 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/api/AfterSaleTicketApiImpl.java 8 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/cancellation/AfterSaleCancellationController.java 100 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/cancellation/vo/AfterSaleCancellationApproveReqVO.java 23 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/cancellation/vo/AfterSaleCancellationSaveReqVO.java 49 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/dal/dataobject/cancellation/AfterSaleCancellationDO.java 51 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/dal/mysql/cancellation/AfterSaleCancellationMapper.java 26 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/dal/mysql/ticket/AfterSaleTicketMapper.java 7 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/dal/redis/no/AfterSaleNoRedisDAO.java 5 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/enums/ErrorCodeConstants.java 10 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/cancellation/AfterSaleCancellationService.java 213 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/ticket/AfterSaleTicketService.java 8 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/service/ticket/AfterSaleTicketServiceImpl.java 8 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-aftersales/src/test/java/cn/iocoder/yudao/module/aftersales/service/collaboration/AfterSaleCollaborationServiceTest.java 204 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-aftersales/src/test/java/cn/iocoder/yudao/module/aftersales/service/returnobj/AfterSaleReturnMesLinkTest.java 104 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-aftersales/src/test/java/cn/iocoder/yudao/module/aftersales/service/ticket/AfterSaleLedgerServiceTest.java 30 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-erp/src/test/java/cn/iocoder/yudao/module/erp/api/sale/ErpSaleOrderNoticeLockTest.java 26 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-erp/src/test/java/cn/iocoder/yudao/module/erp/service/finance/ErpAfterSaleFinanceDraftServiceTest.java 53 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-erp/src/test/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderCancellationGuardTest.java 96 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-erp/src/test/java/cn/iocoder/yudao/module/erp/service/statistics/PurchasePriceMetricsTest.java 15 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/collect/vo/MesCollectDowntimeDetailRespVO.java 71 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dv/repair/MesDvRepairController.java 13 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dv/repair/vo/MesDvRepairDiagnosisRespVO.java 69 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dv/statistics/MesDvStatisticsController.java 17 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/feedback/MesProFeedbackController.java 13 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/feedback/vo/MesProTaskExecutionRespVO.java 100 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/safety/SafetyRiskSourceController.java 5 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/safety/vo/risk/SafetyRiskSourceSaveReqVO.java 4 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/batch/MesWmBatchController.java 47 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/safety/SafetyRiskSourceDO.java 4 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/collect/MesCollectQueryService.java 62 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/dv/repair/MesDvRepairDiagnosisService.java 163 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProTaskExecutionService.java 180 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/safety/SafetyRiskSourceService.java 98 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-srm-api/src/main/java/cn/iocoder/yudao/module/srm/api/certificate/SrmSupplierCertificateApi.java 22 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-srm-api/src/main/java/cn/iocoder/yudao/module/srm/api/certificate/dto/SrmSupplierCertificateRespDTO.java 24 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/api/certificate/SrmSupplierCertificateApiImpl.java 42 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/controller/admin/statistics/SrmStatisticsController.java 25 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/controller/admin/statistics/vo/SrmCostAnalysisRespVO.java 84 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/service/statistics/SrmCostAnalysisService.java 183 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史