业务编号生成器

在我们实际做项目的过程中,时常需要生成一些跟业务相关的一些唯一的业务编号,这些编号又需要一定的规则,一般是每生成一个新的编号是在前一个编号的集成上尾号递增1个单位,下面是我业余时间写的一个编号生成器,直接贴代码:

/**

* 唯一业务编号生成器

* @param flag 业务前缀标识

* @return

* @throws Exception

*/

public synchronized String getBusinessNum(String flag) throws Exception{

DateFormat dFormat = new SimpleDateFormat("yyyyMMdd");

String dateNum = dFormat.format(new Date());

String value = RedisSlave.getInstance().getString(dateNum);

//如果当天还未产生过一个编号

int count;

if(StringUtils.isEmpty(value)){

count = 1;

RedisSlave.getInstance().set(dateNum, count+"", 86400);

}else{

count = Integer.parseInt(value);

}

String zero = "";

if(count <10){

zero = "00000";

}else if(count>9 && count<100){

zero = "0000";

}else if(count>99 && count<1000){

zero = "000";

}else if(count>999 && count<10000){

zero = "00";

}else if(count>9999 && count<100000){

zero = "0";

}

String afterNum = dateNum + zero + count;

count++;

RedisSlave.getInstance().set(dateNum, count+"", 86400);

/**

*RedisSlave.getInstance().setNX(key, value, 86400);

*这个方法是如果key已经存在了就不能插入新的value了

*/

return flag + afterNum;

}

时间: 2024-11-10 07:40:25

业务编号生成器的相关文章

项目中业务编号的实现(业务码+日期+自增序列)

目录 1. 实现思路 2. 代码实现 3. 总结 参考 做项目的时候,经常会有自动生成业务编码的需求,比如插入数据的时候需要生成如下产品编号:P-(年份日期和三位序列号),比如P-20180727001 1. 实现思路 使用业务编号+当前日期获得redis的key值; 使用redis的incr来原子性地获得其对应的自增数; 避免redis的数据冗余,需要在第一次incr的时候使用expireAt设置其数据当天24点过期. 这样即可在并发情况下获得不重复的相应编码. 2. 代码实现 public

题目编号生成器

[程序描述] 利用C++随机函数编写了此程序,用于神犇们在CodeVS上灵活地攻坚克难,检验他们自己的超高水平. [操作描述] F11. [结果描述] 一个CodeVS(www.codevs.cn)网站中题目的ID编号(可能无此题,请重试新的输出). 源代码: #include<cstdio> #include<cstdlib> #include<ctime> using namespace std; int main() { printf("< Cop

序列号生成器库

通用的序列号生成器库 正如文章<通用的业务编号规则设计实现(附源码)> 文章里需要一个多实例和线程安全的序列化生成器,在SQL Server 2012+ 版本 有一个通过.NET程序集的序列号transact-sql 函数 http://msdn.microsoft.com/zh-cn/library/ff878091.aspx. 这篇文章向大家介绍一个使用SQL Server 和Sql Azure 以及Mongodb 实现的序列号生成器. 在Github上有个项目 https://githu

数仓1.4 |业务数仓搭建| 拉链表| Presto

电商业务及数据结构 SKU库存量,剩余多少SPU商品聚集的最小单位,,,这类商品的抽象,提取公共的内容 订单表:周期性状态变化(order_info) id 订单编号 total_amount 订单金额 order_status 订单状态 user_id 用户id payment_way 支付方式 out_trade_no 支付流水号 create_time 创建时间 operate_time 操作时间 订单详情表:(order_detail) order_detail.order_id 是要一

设计模式——6.单例模式

1. 模式动机 对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务:一个系统只能有一个窗口管理器或文件系统:一个系统只能有一个计时工具或ID(序号)生成器. 如何保证一个类只有一个实例并且这个实例易于被访问呢?定义一个全局变量可以确保对象随时都可以被访问,但不能防止我们实例化多个对象. 一个更好的解决办法是让类自身负责保存它的唯一实例.这个类可以保证没有其他实例被创建,并且它可以提供一个访问该实例的方法.这就是单例模式的模式动机. 2.

设计模式之:创建型设计模式(6种)

创建型设计模式有: 共6种 简单工厂模式(Simple Factory) 工厂方法模式(Factory Method) 抽象工厂模式(Abstract Factory) 建造者模式(Builder) 原型模式(Prototype) 单例模式(Singleton) 简单工厂模式 功能:主要用于创建对象.新添加类时,不会影响以前的系统代码.核心思想是用一个工厂来根据输入的条件产生不同的类,然后根据不同类的virtual函数得到不同的结果. 优点: 适用于不同情况创建不同的类时 缺点: 客户端必须要知

合格大数据分析师应该具备的技能

阶段一.业务数据分析师 课程一.数据挖掘/分析师之硬技能 - 必备常用工具使用与高级技巧 本部分内容主要介绍了数据挖掘.分析师.数据产品经理必备的常用工具的,主要有 Excel,Visio,Xmind,PPT的涉及图表数据分析方面的高级技巧,包括但不限于:数据透视表演练.Vision跨职能流程图演练.Xmind项目计划导图演练.PPT高级动画技巧等! 一.Excel 1)数据分析工具EXECL入门介绍2)数据透视表演练 3) 数据处理4) EXECL报告自动化5) PPT报告数据自动化 二.Vi

一个故事告诉你比特币的原理及运作机制(我不生产知识,我只是知识的搬运工0.0)

问题的提出 我们先从比特币产生的动机开始. 以物易物的比特村 话说在这个世界上,有一个叫比特村的小村庄,村庄共有几百户人家.这个村庄几乎与世隔绝,过着自给自足的生活.由于没有大规模贸易,比特村村民一直 过着以物易物的生活,也就是说村民之间并没有使用统一的货币,互相间的贸易基本上就是老张家拿一袋面粉换老李家一只羊,王大嫂拿一筐野果换刘大婶两尺布. 村民们一直就这么纯朴的生活着. 实物货币 终于有一天,村民觉得一直这样以物易物实在太不方便了,于是村子全员开会,讨论如何解决这个问题.有人提议,以便于分

(转载)使用SQL-Server创建一个银行数据管理系统Ⅰ

首先,要创建一个完整的数据管理系统,不是一蹴而就的,一定要要一步一步的来,不断完善,最终方能达到自己想要的结果,所以我在这里也是一点一点分步来做的. 创建数据库,数据库属性在这里用的是默认(不推荐使用这种偷懒的做法) 1 --创建数据库,使用默认配置 2 create database 某银行客户管理系统 3 go 创建表,共四个,分别是:客户信息,银行卡信息,业务类型,交易记录 1 use 某银行客户管理系统 2 3 4 --创建业务类型表,包含业务编号,业务名称和业务描述 5 create