简介
各个行业的各种业务都有一个系统自动编码的号码,用来记录处理的顺序的号,就是流水号。随着公司各业务的不断发展,每个业务团队都有自己的流水号生成规则,其中包括订单号、合同号、政府文号等。每个业务流水号生成规则不相同,但有一定的相似性,同时要保证流水号的唯一性,连续性,还有高并发下的性能问题。为了将来各业务更好的整合以及用户对流水号使用要求的提高,我们提供流水号能力,统一管理流水号的生成和使用。
配置取流水号模板
1.进入开发者后台进入首页——>我的套件——>开发管理——>流水号配置
地址:http://pai.flyrise.cn/developer/auth
2.添加模板
3.规则管理添加流水号规则
获取流水号
前端工程使用流水号组件获取
组件使用说明:http://pai.flyrise.cn/pai-ui/#/docs/sn
进入页面时,组件自动获取流水号;流水号已被使用,导致业务保存失败,刷新获取流水号,再次保存。
后端工程接口获取
1.引入依赖pom.xml
<dependency>
<groupId>cn.flyrise</groupId>
<artifactId>pai-common-sn</artifactId>
</dependency>
2.调用接口
//套件是入驻企业安装时使用这个接口
String sn = snService.obtainSn("SN_9001", "1309331342667943936").getData();
/*
套件是运营企业安装时使用这个接口
parkId是所运营的园区Id,园区有配置并启用就用园区的,没有就用企业的配置
*/
String sn = snService.obtainSn("SN_9001", "1309331342667943936"
, "1309331342667943937").getData();
后端工程使用流水号
引入依赖pom.xml
<dependency>
<groupId>cn.flyrise</groupId>
<artifactId>pai-common-sn</artifactId>
</dependency>
数据库处理
业务表流水号、数据隔离字段(tenant_id或者park_id),建立联合唯一索引,确保流水号不会重复
保存业务
套件是运营企业(不区分园区)或入驻企业安装时使用这个接口
try {
//po里面有流水号字段
baseMapper.insert(po);
/*
不允许漏号的流水号模板,保存成功之后,需要确认流水号
允许漏号的模板只需要在捕获异常之后确认流水号
confirmSn()方法会查询已使用的最大流水号,通知流水号中心更新
merchant_contract为表名
mc_no为流水号字段名
租户ID字段名默认tenant_id
1309331342667943936为租户Id(企业id)
merchant_no为模板编码
sn0001为当前获取的流水号
*/
FeignUtil.call(snService.confirmSn("merchant_contract", "mc_no","1309331342667943936", "merchant_no", "sn0001"));
} catch (DuplicateKeyException e) {
FeignUtil.call(snService.confirmSn("merchant_contract", "mc_no","1309331342667943936", "merchant_no", "sn0001"));
//前端根据错误编码判断是否流水号重复导致保存失败
throw new McBizException(BusinessErrors.MSG_CATEGORY_CODE_EXISTS);
}
套件是运营企业安装按园区隔离时使用这个接口
try {
//po里面有流水号字段
baseMapper.insert(po);
/*
不允许漏号的流水号模板,保存成功之后,需要确认流水号
允许漏号的模板只需要在捕获异常之后确认流水号
confirmParkSn()方法会查询已使用的最大流水号,通知流水号中心更新
merchant_contract为表名
mc_no为流水号字段名
园区ID字段名默认park_id
1309331342667943936为租户Id(企业id)
1309331342667943937为园区id
merchant_no为模板编码
sn0001为当前获取的流水号
*/
FeignUtil.call(snService.confirmParkSn("merchant_contract", "mc_no", "1309331342667943936", "1309331342667943937", "merchant_no", "sn0001"));
} catch (DuplicateKeyException e) {
FeignUtil.call(snService.confirmParkSn("merchant_contract", "mc_no","1309331342667943936", "1309331342667943937", "merchant_no", "sn0001"));
//前端根据错误编码判断是否流水号重复导致保存失败
throw new McBizException(BusinessErrors.MSG_CATEGORY_CODE_EXISTS);
}
文档更新时间: 2024-09-14 11:03 作者:伍润源