简介

各个行业的各种业务都有一个系统自动编码的号码,用来记录处理的顺序的号,就是流水号。随着公司各业务的不断发展,每个业务团队都有自己的流水号生成规则,其中包括订单号、合同号、政府文号等。每个业务流水号生成规则不相同,但有一定的相似性,同时要保证流水号的唯一性,连续性,还有高并发下的性能问题。为了将来各业务更好的整合以及用户对流水号使用要求的提高,我们提供流水号能力,统一管理流水号的生成和使用。

配置取流水号模板

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   作者:伍润源