单号的生成,好像在做项目的时候无处不在。这个生成单号是从数据库里面查询出来,然后再判断是否是今天的日期,如果是今天的日期在后面加一,否则又从001开始。
Servletl的代码:
//生成一个单号
Date RegisterDate=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd");
String presentTime =sdf.format(RegisterDate);//获取当前时间
UserinfoService userinfoservice=new UserinfoServiceImpl();//查询数据库中最大id的字段,这样就可以查到最新的订单编号
String ReturnTicketNumber=userinfoservice.SelectNumber();//获取数据库最新的编号
String SQLTime=ReturnTicketNumber.substring(2,10);//拆分得到日期
String number=ReturnTicketNumber.substring(10,13);//拆分得到编号
String Number="";
//数据库的时间和当前时间比较(当天已有数据就增加编号,没有就是新的一条编号 为00)
if(SQLTime.equals(presentTime)){
//判断日期是否是今天的,如果是今天的i+1否则从001
int i=Integer.parseInt(number);
Number="TP"+SQLTime+0+0+(i+1);//单号格式TP20190628001
}else{
Number="TP"+presentTime+"001";
}
dao的实现类
public String SelectNumber() {
//最大ID的单号就是最新的单号
String sql="SELECT ReturnTicketNumber FROM SYS_ReturnTicket WHERE ReturnTicketID = (SELECT MAX(ReturnTicketID) FROM SYS_ReturnTicket)";
String ReturnTicketNumber="";
try {
con=DbUtil.getConnection();
ps=con.prepareStatement(sql);
rs=ps.executeQuery();
while (rs.next()) {
ReturnTicketNumber=rs.getString("ReturnTicketNumber");
}
} catch (Exception e) {
e.printStackTrace();
}finally{
DbUtil.close(con, ps, rs);
}
return ReturnTicketNumber;
}