单据编号生成器
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_f1b049da/cjr20263721。
技能介绍
痛点:业务单号的生成痛点
在企业运营中,合同、发票、提成单等业务单号是数据流转的锚点。常见的做法是用 Math.random() 或简单的自增 ID 凑数,但这会带来几个具体问题:
- 可读性差:无法一眼看出单据类型与生成时间。
- 并发冲突:多标签页或多用户同时新建单据时,简单的
localStorage计数器极易撞号。 - 持久化缺失:刷新页面或冷启动后,序号重置导致单号重复。
本技能(小四原创)提供了一套标准化的单号生成逻辑,核心在于 前缀 + 日期 + 持久化序号 的拼装,并区分了演示环境与生产环境的实现方案。
核心机制与工作流
- 前缀字典配置:根据单据类型建立映射,如合同为
HT、发票为FP、提成单为TC。 - 单号生成入口:在新建单据时调用
makeDocSerial,该方法负责按格式{prefix}{yyyyMMdd}{seq:4}拼装单号,并在界面上以只读且可复制的形式展示。 - 持久化策略:
- 演示环境:通过 localNextSeq 将序号持久化在 localStorage,确保单次刷新不撞号。
- 生产环境:必须对接后端服务,利用数据库的原子操作(如 SELECT FOR UPDATE 或分布式锁)保证跨节点、跨并发场景下的绝对唯一。
- 边界处理:默认同日前缀下序号递增,跨日后归零(或按产品约定);非法前缀需被拒绝。
适用边界与避坑指南
- 禁止随机单号:正式业务(尤其是合同与发票)绝不可用
Math.random(),本技能生成的是可读业务单号,而非仅供前端使用的草稿 ID(如 nanoid)。 - 并发限制:虽然
localStorage在单浏览器实例内可持久化,但在多标签页同时操作时仍存在微小竞态。生产环境应严格依赖服务端原子取号。 - 归零策略:跨日归零是默认逻辑,若业务需要全局连续,需在服务端进行调整。
使用场景
- 在新建合同时自动生成 HT 前缀的日期编号,如 HT202607220001,并保证同日递增不撞号
- 在发票系统中批量创建多类型单据,为合同、发票、提成单分别配置 HT/FP/TC 前缀字典并取号
- 在生产环境中对接后端原子取号接口,替代 localStorage 方案以支持多节点并发新建单据
- 在演示原型中快速生成本地流水号,不依赖后端服务即可展示完整的单号生成流程
适合人员
- 企业业务系统开发者,需要在合同与发票模块中实现可读且不重复的业务单号生成逻辑
- 前端工程师,正在搭建单据创建页面的演示原型,需要快速生成本地持久化的流水编号
- 后端工程师,负责设计高并发场景下的服务端原子取号接口,确保跨节点单号唯一
- 内部工具产品经理,想要统一多单据类型的编号格式规范,减少各部门自定义带来的混乱