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)
相关推荐
在Java编程中,生成订单号...对于提供的`java订单号(时间加流水号).txt`文件,可能包含了具体的代码实现或使用示例,你可以查阅该文件以获取更详细的实现细节。在实际开发中,务必根据业务需求进行适当的调整和优化。
该工具类是Java编写下载即可使用,该工具类中有生成各种长度的订单号,有英文数字混合的,有数字的
Java实现电商网站的随机订单流水号 订单流水是由:年月日时分秒+8位随机数所构成 第一种:使用SimpleDateFormat对当前时间进行格式化,利用Math.random()获取八位随机数 第二种:创建getCard()工具类获取8位随机数 ...
这里介绍的是订单号或者流水号的生成,用的方法是时间戳+随机数,如果你要严谨的算法生成的订单号,请勿下载,下载前,可以看下这篇文章介绍【https://blog.csdn.net/qq_27471405/article/details/82887786】
在Java编程中,生成流水号是一项常见的需求,特别是在数据库记录、订单系统或者任何需要唯一标识符的场景。流水号通常是一串连续的数字,用于表示数据的顺序或时间序列。在给定的“Produced-four-serial-for-java....
Java Web 在高并发和分布式下实现订单号生成唯一的解决方案 在高并发和分布式下,实现订单号生成唯一是 Java Web 开发中的一大挑战。为了解决这个问题,我们需要从多方面考虑,包括时间戳、随机数、线程ID、进程ID...
首先,流水号,又称为序列号或唯一标识符,通常用于唯一标识系统中的每一个事务或对象,如订单号、用户ID等。在单机环境中,生成流水号相对简单,但在分布式集群环境下,由于多节点并发处理,就需要解决生成全局唯一...
无需通过redis,而是直接通过JAVA来生成订单号(日期+流水号), java按日期加流水号方式生成订单号
这通常包括订单的创建时间、支付状态(是否已支付、支付时间、支付金额等)、用户信息以及交易流水号等。这个功能对于跟踪交易流程、处理异常订单或者为用户提供查询服务非常有用。 2. 退款请求: 当用户或商家...
Java代码写的订单ID生成工具类,注意需要借助Redis。返回结果为当天年月日加6位订单序列号
java自动生成编号的实现(格式:yyMM+四位流水号) java自动生成编号的实现是指通过java语言生成一个唯一的编号,格式为yyMM+四位流水号。在实际应用中,自动生成编号可以应用于各种场景,如订单编号、用户编号、物流...
这样的序列号在日志记录、订单编号、唯一ID生成等方面非常有用。 首先,`CodeUtil.java`可能是实现这个功能的核心类。这个类可能包含一个方法,例如`generateSequenceId()`,用于生成上述格式的序列号。该方法内部...
提供了精确到秒的日期格式,适合用于订单号、流水号等场景。 - **YYYY-MM-DD HH:MM:SS 格式** ```java public String getCurrentDate5() { Calendar c = Calendar.getInstance(); c.add(c.SECOND, 0); ...
归纳订单流水列表为更多详情 新增用户密码方式查询入口 新增token方式查询加密订单(更安全) 整理订单查看页面的布局方式 修复暗黑模式与炫丽暗黑模式下查询订单页面白底问题 订单查询区分卡号和卡密 修复分类/商品...
在IT开发领域,生成不重复的编号或标识符是一个常见的需求,特别是在数据库记录、订单号、唯一用户ID等场景。为了满足这一需求,开发者经常利用系统时间作为基础,结合其他算法来生成这样的唯一序列。标题提到的...
综上所述,"OrderNo.rar"可能包含了一个基于日期和流水号的Java订单号生成实现。这种设计简单有效,能确保订单号的唯一性,并方便后期的数据分析和追踪。在实际应用中,还需要结合数据库操作和并发控制来确保系统的...
3. **构建请求参数**:根据微信支付接口文档,创建支付请求所需的参数,如商户订单号(out_trade_no)、金额(amount)、接收者OpenID等。 4. **发起请求**:使用Java的HTTP客户端库(如Apache HttpClient或OkHttp...
- **订单表**:记录订单号、用户ID、车次ID、座位类型、购票数量、订单状态等字段。 - **支付表**:存储支付相关数据,如支付方式、交易流水号、支付状态等。 5. **安全性考虑**: - **身份验证与授权**:确保...
这个接口主要用于商家查询某一特定交易的状态,例如交易是否成功、金额、时间等关键信息。通过这个接口,开发者可以获取到用户的支付详情,从而进行后续的业务逻辑处理,如订单状态更新、库存管理等。 调用支付宝...