
# 问题描述
场景1:新增单据保存时,每次都生成相同的编号
场景2:已保存的单据中存在多个重复的编号
场景3:保存单据生成的编号是已存在的编号
*附:保存/提交操作过程编码规则生成编号时机图示*

# 排查步骤
## 场景1
1、检查保存数据的操作,是否为标准的保存(操作类型为save)或提交(操作类型为submit)操作,查看是否有绑定编码规则操作插件(kd.bos.business.plugin.CodeRuleOp)。
2、如果是非标准的保存或提交操作,或者未绑定编码规则操作插件,在执行该操作保存数据时,编码规则不会生成编号。所以每次生成相同编号的原因,有可能是使用的新增单据时预读在界面的编号 (即下一个即将生成的编号,预读不会消耗流水号)。

3、查看单据编号是否为调用编码规则接口生成的,检查调用的接口是否正确,生成编号接口名为getNumber,预读编号接口名为readNumber,详细接口介绍可参考【编码规则接口介绍】。
4、检查单据上的表单插件和保存/提交的操作插件,查看插件是否提前将数据保存入库,如调用不执行操作插件的保存:SaveServiceHelper.save等。提前保存数据时,数据中单据编号的值为预读在界面的编号 (即下一个即将生成的编号,预读不会消耗流水号)。编码规则实际生成编号的时机是执行操作校验前(CodeRuleOp插件的onAddValidators事件),如果数据是非新增状态,编码规则不会生成编号。
## 场景2
1、尝试是否可以复现保存单据会出现重复的编号,如果可以复现,按照场景1的步骤进行排查。
2、检查保存数据的操作, 是否配置了编码字段的唯一性校验,如果配置了,在生成编码时检测到已经有这个编码,流水号会自动加1; 如果未配置,在生成编码时不会检测是否已存在该编码,直接保存入库,无法保证编码的唯一性。

3、根据单据的重复编码+