java数字流水生成规则_java之流水单号的生成

本文介绍了如何在Java中生成数字流水号,采用格式LL+yyMMdd+0000,详细展示了生成规则以及相关的方法,包括获取当前日期、截取流水号和日期等操作。
摘要由CSDN通过智能技术生成

package com.xp.spo.utils;

import com.xp.spo.model.Express;

import com.xp.spo.service.ExpressService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

import java.text.SimpleDateFormat;

import java.util.Date;

/**

* @author Czy--feeling

* @create 2018-09-27 2:11 PM

* 生成格式:

LL+yyMMdd(时间)+0000(四位数),例如:LL201810100001

* 生成规则:按当天时间从0001开始累积,今天从LL201810100001开始;明天从LL201810110001开始累积;

**/

@Component

public class Odd {

private int number;

@Autowired

private ExpressService expressService;

/**

*

*/

private static Odd odd;

@PostConstruct

public void init() {

odd = this;

}

/**

* 编写测试流水订单号

* 测试流水订单号规则:自动生成(LL+8位日期+4位流水号) 示例:LL201809270001

* @param num

* @return

*/

public static String getBody(Integer num) {

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

String str = String.format("%04d", num);

return sdf.format(new Date()).substring(0, 8) + str;

}

/**

*截取流水尾号转换数字

* @param string

* @return

*/

public static int getOddCode(String string) {

int oddCode = Integer.parseInt(string.substring(10, 15));

return oddCode;

}

/**

* 截取流水单号入库日期

* @param string

* @return

*/

public static int getOddSenttime(String string) {

int oddSenttime = Integer.parseInt(string.substring(2, 10));

return oddSenttime;

}

public static int getNowTimeCode() {

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");

int nowTimeCode = Integer.parseInt(simpleDateFormat.format(new Date()).substring(0, 8));

return nowTimeCode;

}

// public static void main(String[] args) {

// System.out.println(001+1);

//

// System.out.println("122330003".substring(5,9));

//

// System.out.println(odd.getOddCode("XP201809270201"));

//

// System.out.println(getNowTimeCode());

//

// System.out.println(getOddSenttime("XP201810090201"));

//

// System.out.println(odd.getBody(01));

//

// }

/**

*生成流水单号

* @return

*/

public static String createOdd() {

String nowOdd=null;

String oddMaxCode = odd.expressService.findMaxOdd();

//如果最大流水单号不为空

if (oddMaxCode!=null) {

//如果当前时间不相同,例如:20181009=!20180809,重新开始以当天日期拼流水单号201810100001

if (getNowTimeCode() != getOddSenttime(oddMaxCode)) {

int number = 1;

Express express = new Express();

express.setOdd("LL"+getBody(number));

nowOdd = express.getOdd();

//相同,则加1,例如:201810100002

}else {

int number = odd.getOddCode(oddMaxCode);

Express express = new Express();

express.setOdd("LL"+getBody(getOddCode(oddMaxCode)+1));

nowOdd = express.getOdd();

}

//如果没有流水单号,以当前日期重新开始生成流水单号

}else {

int number = 1;

Express express = new Express();

express.setOdd("LL"+getBody(number));

nowOdd = express.getOdd();

}

return nowOdd;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值