使用MySQL生成,相信大家在开发中都会满足生成业务订单号的需求。一般的生成格式是:
前缀YYMMDD流水号(比如3位流水号)这里的前缀日期不是很有技术含量,主要是尾部的流水号,这里需要3位流水号,我们从001开始。当等于10时,为当等于100时,
它是100。从001开始重置第二天。这里我们可以使用MySQL数据库存储,这里我们需要记录日期和序列号。MySQL表如下:
创建表` code _ generator `(` id ` bigint(10)NOT NULL AUTO _ INCREMENT COMMENT ' id '` number ` bigint(10)DEFAULT NULL COMMENT '序号,` gnerator_time `日期时间默认空注释'生成日期,`已删除` tinyint(1)默认' 0 '注释'是否删除,' created _ by ' varchar(32)字符集utf8mb 4 COLLATE utf8mb 4 _ unicode _ ci默认空注释'创建人,'创建时间'日期时间默认空注释'创建时间,' updated _ by ' varchar(32)字符集utf8mb 4 COLLATE utf8mb 4 _ unicode _ ci默认空注释'更新人,'更新时间'日期时间默认空注释'更新时间,使用BTREE的主键(` id `)ENGINE=InnoDB DEFAULT CHARSET=utf8mb 4 COLLATE=utf8mb 4 _ 0900 _ ai _ ci COMMENT='单号生成器'调用生成方法时,
使用Redis生成当然,除了使用MySQL生成,还可以使用Redis生成。与MySQL相比,Redis具有更好的性能。这里我们使用Redisson API。
首先,我们使用Spring注入一个Redisson客户端:
@ Bean(' redis onservice ')public redis onclient getredis onclient(){ String active profile=getActiveProfile();配置配置;if('prod ').equals(active profile)){ config=useClusterConfig();else { config=useSingleConfig();返回redisson . create(config);}在配置RedissonClient时,
@ Autowired private RedissonClientConfig redissonService;一般来说,您的数字核心代码如下:
private synchronized long getSuffixCode(String key){ redis onclient redis onclient=redis onservice . getredis onclient();RAtomicLong atomic var=redissonclient . get atomic long(key);string todayStr=getTodayStr();string code record=getCodeRecord(key);如果(!atomic var . is exists()){ atomic var . set(1);if(string utils . isnotblank(code record)){ if(!isSameDay(todayStr,code record)){ atomic var . set(1);} saveCodeRecord(key,todayStr);long value=atomic var . incrementandget();返回值;}代码的功能是串行编号的通用化.
私有void保存代码记录(String KEY,String value){ String RECORD KEY=KEY CODE _ DATE _ RECORD _ KEY;再版。set(记录键,值);序号如果小于10,
私有字符串getSuffixCodeStr(String key,int digit){ long code=getSuffixCode(key);返回getDigitNumber((int) code,digit);}公共字符串getdigit number(int number,int digit){数字格式formatter=数字格式。getnumber实例();格式化程序。setminimumintegerdigits(数字);格式化程序。setgroupingused(false);返回格式化程序.格式(数字);}之后我们再将前缀,
私有字符串generateCode(String prefix,String redisKey,int digit){ String dateStr=getTodayStr();string suffixCodeStr=getSuffixCodeStr(redisKey,digit);String[] codes={prefix,dateStr,suffixCodeStr };返回String.join(' '代码);}我们再做一层简单的封装:
公共字符串生成器代码(字符串前缀,int digit){ String redisKey=getRedisKey(前缀,‘GENERAL _ CODE’);返回生成代码(前缀、redisKey、数字);}对生成器代码()说明如下:
生成的单据号格式为:前缀YYMMDD流水号,例如generatorCode('D '4)。如果当前日期是2022年8月12日,将生成文档编号:D202208120001。
标题:我写了一个简单的单号生成器英语翻译(我写了一个简单的单号生成器英文翻译)
链接:https://www.52hkw.com/news/rj/62893.html
版权:文章转载自网络,如有侵权,请联系删除!