编辑 | blame | 历史 | 原始文档

计量单位新增「重量」字段 - 前端联调方案

需求背景

计量单位原先只有 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):

{
  "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. 计量单位存在删除保护:被物料引用的单位不允许删除,重量字段的增改不影响该规则。