xiaoyi
2026-10-30 2964b7707a8b24067d938d7a52d1c6edfbabee37
fix(mes): 批次属性配置改为全字段透传,修复产品侧复选框不回显

## 问题
产品(成品/半成品)的批次属性配置页有 15 个复选框,勾选保存后重新打开全都不勾选。

## 根因(两处)
1. MesMdItemBatchConfigSaveReqVO / RespVO 字段名是 workorderFlag,
而 DO 是 workOrderFlag、数据库列是 work_order_flag。
BeanUtils 底层是 hutool,按属性名精确匹配,大小写不同就不映射 →
保存和回显两条路都丢。

2. MesMdItemBatchConfigServiceImpl.saveItemBatchConfig() 里有一段
「只保留必要的 7 个字段」的白名单,把产品侧的
clientFlag / salesOrderCodeFlag / workOrderFlag / taskFlag /
workstationFlag / toolFlag / moldFlag 全部裁掉了。

白名单恰好只覆盖物料侧 7 项,产品侧 7 项全丢。

## 修复
1. VO 字段名统一为 workOrderFlag,与 DO 和数据库列对齐
2. 去掉字段裁剪,改为全字段透传(表本身 15 列齐全)

## 验证
本地实测 15 项全勾选保存后回查,15 项全部正确回显(改前 workOrderFlag 恒为 null)。
已修改3个文件
22 ■■■■■ 文件已修改
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/md/item/vo/batchconfig/MesMdItemBatchConfigRespVO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/md/item/vo/batchconfig/MesMdItemBatchConfigSaveReqVO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdItemBatchConfigServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/md/item/vo/batchconfig/MesMdItemBatchConfigRespVO.java
@@ -37,7 +37,7 @@
    private Boolean purchaseOrderCodeFlag;
    @Schema(description = "批次属性-生产工单", example = "false")
    private Boolean workorderFlag;
    private Boolean workOrderFlag;
    @Schema(description = "批次属性-生产任务", example = "false")
    private Boolean taskFlag;
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/md/item/vo/batchconfig/MesMdItemBatchConfigSaveReqVO.java
@@ -37,7 +37,7 @@
    private Boolean purchaseOrderCodeFlag;
    @Schema(description = "批次属性-生产工单", example = "false")
    private Boolean workorderFlag;
    private Boolean workOrderFlag;
    @Schema(description = "批次属性-生产任务", example = "false")
    private Boolean taskFlag;
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdItemBatchConfigServiceImpl.java
@@ -76,17 +76,13 @@
            throw exception(MD_ITEM_NOT_EXISTS);
        }
        // 2. 清空不需要的字段(只保留必要的7个字段)
        MesMdItemBatchConfigSaveReqVO cleanReqVO = new MesMdItemBatchConfigSaveReqVO();
        cleanReqVO.setId(saveReqVO.getId());
        cleanReqVO.setItemId(saveReqVO.getItemId());
        cleanReqVO.setProduceDateFlag(saveReqVO.getProduceDateFlag());
        cleanReqVO.setExpireDateFlag(saveReqVO.getExpireDateFlag());
        cleanReqVO.setReceiptDateFlag(saveReqVO.getReceiptDateFlag());
        cleanReqVO.setVendorFlag(saveReqVO.getVendorFlag());
        cleanReqVO.setPurchaseOrderCodeFlag(saveReqVO.getPurchaseOrderCodeFlag());
        cleanReqVO.setLotNumberFlag(saveReqVO.getLotNumberFlag());
        cleanReqVO.setQualityStatusFlag(saveReqVO.getQualityStatusFlag());
        // 2. 全字段透传
        // 注意:这里曾经有一份「只保留 7 个字段」的白名单,把产品侧的
        // clientFlag / salesOrderCodeFlag / workOrderFlag / taskFlag /
        // workstationFlag / toolFlag / moldFlag 全部丢掉了,
        // 导致物料(半成品)和产品页面上的这些复选框勾了保存后不回显。
        // 批次属性是完整的 15 项,不再做字段裁剪。
        MesMdItemBatchConfigSaveReqVO cleanReqVO = saveReqVO;
        // 3. 保存到 MDM 表
        MdmItemBatchConfigDO mdmConfig = BeanUtils.toBean(cleanReqVO, MdmItemBatchConfigDO.class);