`
tansitongba
  • 浏览: 503548 次
文章分类
社区版块
存档分类
最新评论

Java订单号(时间加流水号)

 
阅读更多

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;

/**
* JAVA版本的自动生成有规则的订单号(或编号)
* 生成的格式是: 200908010001 前面几位为当前的日期,后面五位为系统自增长类型的编号
* 原理:
* 1.获取当前日期格式化值;
* 2.读取文件,上次编号的值+1最为当前此次编号的值
* (新的一天会重新从1开始编号)
*/

public class Test01 {

public static void main(String[] args) throws InterruptedException {
SerialNumber serial = new FileEveryDaySerialNumber(5, "EveryDaySerialNumber.dat");
while(true) {
System.out.println(serial.getSerialNumber());
TimeUnit.SECONDS.sleep(2);
}
}
}


abstract class SerialNumber {

public synchronized String getSerialNumber() {
return process();
}
protected abstract String process();
}


abstract class EveryDaySerialNumber extends SerialNumber {

protected final static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
protected DecimalFormat df = null;

public EveryDaySerialNumber(int width) {
if(width < 1) {
throw new IllegalArgumentException("Parameter length must be great than 1!");
}
char[] chs = new char[width];
for(int i = 0; i < width; i++) {
chs[i] = '0';
}
df = new DecimalFormat(new String(chs));
}

protected String process() {
Date date = new Date();
int n = getOrUpdateNumber(date, 1);
return format(date) + format(n);
}

protected String format(Date date) {
return sdf.format(date);
}
protected String format(int num) {
return df.format(num);
}

/**
* 获得序列号,同时更新持久化存储中的序列
* @param current 当前的日期
* @param start 初始化的序号
* @return 所获得新的序列号
*/
protected abstract int getOrUpdateNumber(Date current, int start);
}


class FileEveryDaySerialNumber extends EveryDaySerialNumber {

/**
* 持久化存储的文件
*/
private File file = null;

/**
* 存储的分隔符
*/
private final static String FIELD_SEPARATOR = ",";

public FileEveryDaySerialNumber(int width, String filename) {
super(width);
file = new File(filename);
}

@Override
protected int getOrUpdateNumber(Date current, int start) {
String date = format(current);
int num = start;
if(file.exists()) {
List<String> list = FileUtil.readList(file);
String[] data = list.get(0).split(FIELD_SEPARATOR);
if(date.equals(data[0])) {
num = Integer.parseInt(data[1]);
}
}
FileUtil.rewrite(file, date + FIELD_SEPARATOR + (num + 1));
return num;
}
}


class FileUtil {

public static void rewrite(File file, String data) {
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter(file));
bw.write(data);
} catch (IOException e) {
e.printStackTrace();
} finally {
if(bw != null) {
try {
bw.close();
} catch(IOException e) {
e.printStackTrace();
}
}
}
}

public static List<String> readList(File file) {
BufferedReader br = null;
List<String> data = new ArrayList<String>();
try {
br = new BufferedReader(new FileReader(file));
for(String str = null; (str = br.readLine()) != null; ) {
data.add(str);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if(br != null) {
try {
br.close();
} catch(IOException e) {
e.printStackTrace();
}
}
}
return data;
}
}

存储自动编号值的文件如下(文件名: EveryDaySerialNumber.dat)

原文地址:http://hi.baidu.com/itlangqun/blog/item/24a490838d4c7fb66c8119fd.html

分享到:
评论

相关推荐

    JAVA生成订单号(日期+流水号)

    在Java编程中,生成订单号...对于提供的`java订单号(时间加流水号).txt`文件,可能包含了具体的代码实现或使用示例,你可以查阅该文件以获取更详细的实现细节。在实际开发中,务必根据业务需求进行适当的调整和优化。

    Java生成订单号的工具类

    该工具类是Java编写下载即可使用,该工具类中有生成各种长度的订单号,有英文数字混合的,有数字的

    Java实现电商网站的随机订单流水号

    Java实现电商网站的随机订单流水号 订单流水是由:年月日时分秒+8位随机数所构成 第一种:使用SimpleDateFormat对当前时间进行格式化,利用Math.random()获取八位随机数 第二种:创建getCard()工具类获取8位随机数 ...

    生成订单号或流水号简单方法

    这里介绍的是订单号或者流水号的生成,用的方法是时间戳+随机数,如果你要严谨的算法生成的订单号,请勿下载,下载前,可以看下这篇文章介绍【https://blog.csdn.net/qq_27471405/article/details/82887786】

    Produced-four-serial-for-java.rar_four_java 生成流水_java四位流水号

    在Java编程中,生成流水号是一项常见的需求,特别是在数据库记录、订单系统或者任何需要唯一标识符的场景。流水号通常是一串连续的数字,用于表示数据的顺序或时间序列。在给定的“Produced-four-serial-for-java....

    java web在高并发和分布式下实现订单号生成唯一的解决方案

    Java Web 在高并发和分布式下实现订单号生成唯一的解决方案 在高并发和分布式下,实现订单号生成唯一是 Java Web 开发中的一大挑战。为了解决这个问题,我们需要从多方面考虑,包括时间戳、随机数、线程ID、进程ID...

    集群环境流水号设计

    首先,流水号,又称为序列号或唯一标识符,通常用于唯一标识系统中的每一个事务或对象,如订单号、用户ID等。在单机环境中,生成流水号相对简单,但在分布式集群环境下,由于多节点并发处理,就需要解决生成全局唯一...

    OrderNumGenerate.java

    无需通过redis,而是直接通过JAVA来生成订单号(日期+流水号), java按日期加流水号方式生成订单号

    微信支付JAVA包括订单查询,退款请求,退款明细查询,对账单下载.zip

    这通常包括订单的创建时间、支付状态(是否已支付、支付时间、支付金额等)、用户信息以及交易流水号等。这个功能对于跟踪交易流程、处理异常订单或者为用户提供查询服务非常有用。 2. 退款请求: 当用户或商家...

    简单的订单ID生成工具类

    Java代码写的订单ID生成工具类,注意需要借助Redis。返回结果为当天年月日加6位订单序列号

    java自动生成编号的实现(格式:yyMM+四位流水号)

    java自动生成编号的实现(格式:yyMM+四位流水号) java自动生成编号的实现是指通过java语言生成一个唯一的编号,格式为yyMM+四位流水号。在实际应用中,自动生成编号可以应用于各种场景,如订单编号、用户编号、物流...

    生成以日期开头,加4位数字,每次加1的工具类.如:201712140001

    这样的序列号在日志记录、订单编号、唯一ID生成等方面非常有用。 首先,`CodeUtil.java`可能是实现这个功能的核心类。这个类可能包含一个方法,例如`generateSequenceId()`,用于生成上述格式的序列号。该方法内部...

    java关于时间的用法汇总

    提供了精确到秒的日期格式,适合用于订单号、流水号等场景。 - **YYYY-MM-DD HH:MM:SS 格式** ```java public String getCurrentDate5() { Calendar c = Calendar.getInstance(); c.add(c.SECOND, 0); ...

    一款好看的发卡源码 java项目 java发卡源码 一键部署.zip

    归纳订单流水列表为更多详情 新增用户密码方式查询入口 新增token方式查询加密订单(更安全) 整理订单查看页面的布局方式 修复暗黑模式与炫丽暗黑模式下查询订单页面白底问题 订单查询区分卡号和卡密 修复分类/商品...

    利用时间生成8位不重复数

    在IT开发领域,生成不重复的编号或标识符是一个常见的需求,特别是在数据库记录、订单号、唯一用户ID等场景。为了满足这一需求,开发者经常利用系统时间作为基础,结合其他算法来生成这样的唯一序列。标题提到的...

    OrderNo.rar

    综上所述,"OrderNo.rar"可能包含了一个基于日期和流水号的Java订单号生成实现。这种设计简单有效,能确保订单号的唯一性,并方便后期的数据分析和追踪。在实际应用中,还需要结合数据库操作和并发控制来确保系统的...

    Java实现微信企业付款到个人零钱简易demo.rar

    3. **构建请求参数**:根据微信支付接口文档,创建支付请求所需的参数,如商户订单号(out_trade_no)、金额(amount)、接收者OpenID等。 4. **发起请求**:使用Java的HTTP客户端库(如Apache HttpClient或OkHttp...

    java写的火车票订票系统

    - **订单表**:记录订单号、用户ID、车次ID、座位类型、购票数量、订单状态等字段。 - **支付表**:存储支付相关数据,如支付方式、交易流水号、支付状态等。 5. **安全性考虑**: - **身份验证与授权**:确保...

    java 支付宝单笔交易查询接口返回xml解析

    这个接口主要用于商家查询某一特定交易的状态,例如交易是否成功、金额、时间等关键信息。通过这个接口,开发者可以获取到用户的支付详情,从而进行后续的业务逻辑处理,如订单状态更新、库存管理等。 调用支付宝...

Global site tag (gtag.js) - Google Analytics