资产编码规则引擎设计:让一物一码不只是贴个二维码

简介: 把资产编码从写死在代码里改为可配置规则引擎:分段建模(前缀/类别/日期/流水)加版本化,号段模式解决并发重号,入库审核时生成编号并绑定RFID号、按多模板打印标签。

一、编码写死在代码里,改一次伤一次

做资产管理系统的团队迟早会遇到这个需求变更:原来资产编号是"类别码+流水号",新来的财务总监要求加上年度段,行政部又希望编号里能看出资产在哪个部门。如果编码规则是写死在代码里的一行拼接逻辑,每次调整都是一次发版。

我们的做法是把编码规则做成可配置的引擎:规则本身是一条数据库记录,由若干"段"拼成,段类型支持固定前缀、类别码、日期、部门码、流水号。运营在界面上拖几个段、填个分隔符,新规则即时生效,已经在跑的旧编号不受影响。这篇文章讲这个引擎的两层设计:规则怎么建模,流水号在并发下怎么保证不重不漏。

二、规则建模:一段一行,顺序即语义

编码规则的核心表就两张:规则主表存编码用途(资产编码、入库单编码、报废单编码各一条)和分隔符;段表存每一段的类型、参数和顺序。以资产编码为例,"固定前缀 ASSET + 类别码 + 年月 + 4位流水"存进去是这样:

SEGMENTS = [
    {
   "type": "prefix", "value": "ASSET"},
    {
   "type": "category"},            # 类别码,取资产分类表映射
    {
   "type": "date", "fmt": "%Y%m"},
    {
   "type": "serial", "width": 4},  # 流水号,按"前缀+类别+年月"分组重计
]

三个容易踩的坑,都是真踩过才记下来的:

  • 段定义要带版本。规则改动后,当天已生成的编号必须还能被解析,所以每次修改规则生成一个新版本号,编码本体不变,解析时按生成时间匹配对应版本。
  • 日期段用业务日期不用系统日期。补录上月入库的资产,编号里的年月应该是业务发生月,否则对账时编号日期和单据日期对不上。
  • 流水号分组键要和段定义一起配。按"类别+年月"分组还是全局分组,决定编号回收语义,两处配置必须出自同一条规则记录,不能各自维护。

三、流水号并发:号段模式,一次取一百个

流水号最怕两件事:重号和跳号被追责。用 SELECT MAX 加一的做法在并发下必撞车,靠数据库唯一索引兜底重试又把吞吐拖垮。我们用的是号段模式:服务启动时向号段表一次性申请一段(比如 100 个),本地原子递增消耗,用完再申请:

def next_serial(group_key, db):
    seg = db.serial_pool.find_one_and_update(
        {
   "group": group_key},
        {
   "$inc": {
   "cursor": POOL_SIZE}},
        upsert=True,
    )
    start = seg["cursor"] - POOL_SIZE + 1
    return start, start + POOL_SIZE - 1   # 本地循环使用,用完再取

代价是服务重启会丢弃号段尾部,产生跳号。我们的取舍是明确接受跳号、绝不接受重号——编号的唯一性靠号段表行级锁保证,跳号在编码规则里注明即可。资产编号毕竟不是发票号,连续性没有审计硬要求,吞吐和唯一性优先。另外号段表建议按 group 分区建索引,分组键只有十几个取值,表会一直很小,行级锁竞争天然分散,不需要额外的分布式锁组件。

四、入库即绑定:编号生成只是起点

编码引擎挂接入库流程的审核通过事件:入库单审核后批量生成资产编号,同步写入对应的 RFID 号(EPC 区),编号与 RFID 号一对一绑定。之后标签打印服务按资产类别取模板——固定资产打二维码标签,机房设备打 RFID 标签——模板里就是编码变量的占位渲染,一套引擎同时服务三类标签。

打印记录回传台账时走统一的适配器装配,按标签类型分发:

SINKS = {
   
    "qrcode": LedgerAdapter("首码资产管理系统"),
    "rfid":   RfidSink(epc_region="EPC-BANK-2"),
}

绑定关系落库后,后续的盘点、调拨、报废全部以编号为主键串联,标签只是编号的物理载体。这一层关系定了,换标签方案就不用动台账。

五、上线半年,变更成本从发版降到分钟级

引擎上线后经历了三次规则调整:加年度段、换类别码映射、报废单增加审批段,三次都是运营在界面改配置完成,没有一次动代码。回过头看,设计上最值的决定是把"规则版本"和"业务日期段"纳入模型——前者保住了存量编号的可解析性,后者避免了对账时永远差一个月的诡异现象。编码是资产系统里最小的一块,却是被引用最多的一块,值得单独认真设计。

相关文章
|
4月前
|
存储 编解码 算法
RFID硬件选型与实操:标签打印机和手持终端,这两个设备选错很麻烦
机房RFID资产管理落地实践:从标签选型、EPC编码规范到现场调优,本文用800台设备的真实案例,讲清楚账实一致的技术路径和踩坑经验。
|
2月前
|
数据采集 Oracle 关系型数据库
资产管理系统选型实战:从需求画像到POC验收的五个步骤
本文总结资产管理系统选型五步法:需求画像→厂商初筛→场景化验证→POC实战→合同落地。强调以真实数据和业务场景为判断依据,避免“纸上谈兵”,帮IT团队规避高成本试错,提升选型成功率。
|
4月前
|
存储 物联网 中间件
企业固定资产管理数字化转型:RFID技术选型与系统落地实践指南
RFID技术如何让固定资产盘点从4人3天压缩到1人3小时?本文从UHF选型、抗金属标签、四层架构到现场调优,拆解一套完整的RFID资产管理系统落地实践方案。
|
2月前
|
缓存 物联网 BI
RFID资产盘点系统实施指南:从标签选型到全量对账
本文详解RFID资产盘点实施五步法:标签选型与粘贴、读写器现场调参、盘点作业组织、结果回写对账、上线防回流,每步配可执行验收标准。避开“硬件到位却盘不准”的常见坑,助项目首次全量盘点差异直降至个位数。(239字)
|
2月前
|
数据库 索引
资产折旧计提任务设计:直线折旧的月度批量与财务对账
月度折旧计提是典型的批处理问题:折旧参数独立成计划表,直线折旧函数补齐末期尾差并统一“当月新增次月起提”口径,期间唯一键加批次进度实现幂等断点续跑,历史期间永不追溯,与财务对账差异归三类。
|
3月前
|
存储 缓存 物联网
两千件设备的资产盘点,我从三天压缩到半天的技术方案
年初接了一个活,帮一家两百多人的企业做资产数字化改造。在册设备两千一百多件,八个部门分散在三层楼,半年盘点一次,每次三人干三天,盘完账实相符不到七成。
|
2月前
|
BI
资产管理系统权限设计:功能权限、数据范围与审批边界
资产系统权限不止菜单开关:本文拆解功能、数据范围、字段三层模型,给出五档范围的查询条件实现,强调“权限内”须贯穿导出与报表等所有出口,组织同步幂等解耦,季度权限体检防患未然。
|
17天前
|
人工智能 弹性计算 运维
阿里云大促选购攻略:新老用户权益区分,轻量、ECS、GPU、AI云产品采购怎么省钱
整体来看, 阿里云轻量应用服务器、阿里云ECS云服务器、阿里云GPU云服务器、阿里云大模型服务平台 大促给不同阶段使用者提供了差异化的资源方案。新用户抓住首购机会搭建起步业务,老用户借助续费折扣、限量算力套餐优化现有业务成本。轻量、 阿里云ECS云服务器 、GPU、AI云产品覆盖从基础建站到AI模型开发的各类场景,结合CLI命令查询资源价格,提前做好预算规划,才能用好大促优惠,拿到合适的云资源。
63 0
|
20天前
人员一动,资产就漂:组织架构同步之后的归属治理
本文剖析组织架构同步至资产系统的实践陷阱:离职员工设备挂名、多系统ID不一致、变更类型处理不当等问题。提出映射表设计、幂等事件处理、快照式回收清单等方案,强调“人走之后”的归属治理才是核心。
|
26天前
|
物联网 关系型数据库 对象存储
基于阿里云IoT构建RFID资产管理系统:从标签采集到云端台账的落地实践
企业固定资产管理长期依赖 Excel 台账与人工登记,资产规模扩大后账实不符、盘点低效、流转无追溯等问题集中暴露,机房机柜 U 位管控更是长期盲区。本文基于阿里云 IoT 平台、IoT Edge 边缘计算、RDS、TSDB、OSS 等云产品,结合 RFID 抗金属标签与磁吸 U 位传感技术,构建端边云三层资产管理方案:端侧负责批量采集,边缘网关完成协议转换与标签去重,云端通过设备影子维护状态、规则引擎驱动数据流转,应用侧释放盘点与追溯价值。文中给出 MQTT 接入代码、物模型定义与规则引擎配置要点。方案核心价值在于把资产的物理位置与状态转化为可持续采集的数据流,实现资产全生命周期数字化管控。