跳到主要内容

序列配置以及序列编号组件的使用

· 阅读需 4 分钟

当我们需要生成自定义规则的编号时,会用到序列配置以及序列编号组件。

二、配置步骤

1. 准备工作

  • 首先需完成序列配置,配置入口及初始界面如下: 序列配置入口示例

2. 前端页面配置

  • 在数据配置的“编号规则”项下添加自定义规则。序列配置组件会输出两个参数:序列配置(字符串类型)和流水号(数值类型),需根据业务需求将这两个参数存入对应的数据库字段中。 编号规则配置界面
  • 接口要求:需提供一个修改接口和一个查询详情接口(用于数据回显)。
  • 回显配置:输出对应回显内容,按字段匹配配置即可。
  • 编辑功能:若需在应用端实现顺序调整、新增、删除等逻辑,可打开“基础设置”中的“编辑开关”。 编辑开关设置位置
  • 自定义接口配置:需开发一个自定义接口,其内部逻辑为:根据字段查询序列配置,将流水号+1并更新数据表,同时将结果返回给页面。
  • 业务数据格式:当序列配置中使用了业务字段(需手动填写字段名称)时,需在序列编号组件中返回一条list数据供组件匹配。例如:若配置的业务字段为source,则订单详情的list数据应返回如下格式(组件会自动匹配source的值并参与编号组装): 业务数据格式示例

3. 后端接口

  • 组件会自动匹配到"source" 的值并参与编号组装 序列配置组件 序列配置组件 序列配置组件 序列配置组件 序列配置组件
  • Ps 考虑到获取编号在业务场景下存在并发问题,这里引入了存储过程,在数据库加行锁处理并发,当然这只是示例演示,可以根据实际情况调整这块逻辑 "id": 197, "order_no": "1642496485880898986", "from_order_no": "", "pay_trade_no": "202201182736198013455040517", "refund_trade_no": "202201182736198236793339910", "activity_id": 3, "goods_id": 2, "goods_price": 100, "sale_price": 100, "phone_number": "15352260517", "deliver_account": "", "source": "h5", // 与规则中的业务字段名一致 "pay_account": "666101000066180", "pay_method": "", "order_address": "临夏回族自治州", "status": "3", "pay_amount": 80, "coupon_code": "874707499015", "use_store": "", "create_time": "2022-01-18 17:01:26", "pay_time": "2022-01-18 17:01:40", "refund_time": "2022-01-18 17:01:41", "update_time": "2022-01-18 17:01:40"

4. 参考资料

CREATE TABLE sequence_demo ( id int(11) NOT NULL AUTO_INCREMENT, sequence_config longtext, -- 存储序列配置规则(字符串) sequence_number int(11) DEFAULT NULL, -- 存储当前流水号(数值) type varchar(50) DEFAULT NULL, -- 序列类型(如“order”=订单序列) create_time datetime DEFAULT CURRENT_TIMESTAMP, -- 创建时间 update_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 更新时间 PRIMARY KEY (id), UNIQUE KEY idx_type (type) -- 序列类型唯一索引,避免重复 ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4; 序列自增存储过程 DELIMITER $$ CREATE PROCEDURE get_next_sequence( IN p_type VARCHAR(255), -- 序列类型(如“order”) IN p_step INT -- 步长(默认1,可自定义) ) BEGIN DECLARE v_new_seq INT;

START TRANSACTION; -- 开启事务 -- 行级锁锁定目标行,防止并发修改 SELECT sequence_number INTO v_new_seq FROM sequence_demo WHERE type = p_type FOR UPDATE;

-- 计算新流水号(COALESCE处理初始NULL值) SET v_new_seq = COALESCE(v_new_seq, 0) + p_step;

-- 更新流水号 UPDATE sequence_demo SET sequence_number = v_new_seq WHERE type = p_type;

COMMIT; -- 提交事务释放锁 SELECT v_new_seq AS new_sequence; -- 返回新流水号 END$$ DELIMITER ; -- 恢复默认分隔符

调用存储过程代码 CALL get_next_sequence('order', 1); -- 调用示例:获取类型为'order'的序列,步长为1