# 计量单位新增「重量」字段 - 前端联调方案 ## 需求背景 计量单位原先只有 `type`(类型)字段,取值被限制为 `48千克 / 100千克 / 吨` 三种,无法录入实际重量。 实际业务中大量单位名称携带重量,例如「新塔棉7号大田用种**25公斤**」「新塔7号大田用种**10公斤**」, 这些单位的重量目前只能写进名称,无法单独维护。 本次在计量单位上新增可输入的「重量(kg)」字段,重量与名称解耦,可独立录入、修改、展示。 ## 涉及页面 - 基础数据 > 计量单位(列表页、新增/修改弹窗) - 计量单位选择器(物料/品种等表单中选用计量单位时的悬浮详情) ## 数据库变更 表 `mdm_unit_measure` 新增字段: | 字段 | 类型 | 可空 | 说明 | |------|------|------|------| | `weight` | decimal(24,6) | 是 | 重量(kg) | - 位于 `type` 字段之后。 - **不做历史数据回填**:历史记录 `weight` 均为空,需业务在页面上按实际重量补录。 - 脚本:`sql/mysql/mdm_unit_measure_add_weight.sql` ## API 本轮无新增接口、无接口路径调整,仅在既有接口的请求/响应中增加 `weight` 字段。 | 方法 | 路径 | 说明 | |------|------|------| | POST | /mdm/unit/create | 新增计量单位 | | PUT | /mdm/unit/update | 修改计量单位 | | GET | /mdm/unit/get | 查询计量单位详情 | | GET | /mdm/unit/page | 查询计量单位分页 | | GET | /mdm/unit/list | 查询计量单位列表 | | GET | /mdm/unit/list-by-ids | 根据编号列表查询计量单位 | **请求参数新增:** | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | weight | Number | 否 | 重量(kg),单位千克,可传小数 | **响应字段新增:** | 字段 | 类型 | 说明 | |------|------|------| | weight | Number | 重量(kg),未录入时返回 null | **响应示例(/mdm/unit/get):** ```json { "code": 0, "data": { "id": 1, "code": "3", "name": "新塔棉7号大田用种25公斤", "type": "48千克", "weight": 25, "primaryFlag": false, "primaryId": null, "changeRate": 1.0, "status": 0, "remark": null }, "msg": "" } ``` ## 字段展示规则 | 字段 | 展示位置 | 说明 | |------|----------|------| | weight | 计量单位列表 | 列标题「重量(kg)」,为空时展示 `-`,不参与排序 | | weight | 计量单位新增/修改弹窗 | 数字输入框,标签「重量(kg)」,非必填,最小值 0,建议精度 2 | | weight | 计量单位选择器悬浮详情 | 在「名称」下方追加一行「重量:{weight} kg」,weight 为空时不展示该行 | ## 业务规则说明 | 场景 | 规则 | |------|------| | 新增/修改 | 重量非必填;允许留空表示尚未维护 | | 重量取值 | 单位固定为千克(kg),只存数值,不存单位文本 | | 类型校验 | `type` 已**由必填改为非必填**,只填名称+重量即可保存成功 | | 与 type 的关系 | `type` 保留不删;袋码生成逻辑仍读取 `type`,本次不受影响 | | 与名称的关系 | 重量独立于名称,名称中的「25公斤」等字样不再作为重量来源 | ## 注意事项 1. **`type` 字段已放开必填限制。** 此前后端 `MdmUnitMeasureSaveReqVO` 对 `type` 有 `@NotBlank` 校验,而前端新增/修改弹窗并未提交该字段, 导致从页面新增计量单位固定返回「类型不能为空」。本次已去掉该校验,该问题一并修复。 2. **`type` 为空会导致无法生成袋码。** MES 袋码生成仍依赖 `type` 解析每托袋数(`48千克` → 每托 48 袋),`type` 为空或不在 `48千克 / 100千克 / 吨` 范围内时会报「品种主计量单位未配置类型」。 因此:仅维护重量、不维护类型的计量单位,不可用于需要生成袋码的品种。 3. 重量为**每单位(袋)的重量**,不是整批重量,请勿与库存数量相乘后回填。 4. 历史数据 `weight` 为空,前端展示需做空值兜底,避免出现 `null kg` 或 `NaN`。 5. `decimal(24,6)` 精度较高,前端建议按 2 位小数展示,避免出现 `25.000000` 这类多余尾数。 6. 计量单位存在删除保护:被物料引用的单位不允许删除,重量字段的增改不影响该规则。