/**
* 通用生成序列号方法——限制条件:当前类中必须有Dao.
* @version 0.1
* @param String headString 给定字头
* @param String secondString 给定第二个字符串
* @param Date date 日期元素
* @param String objPath 类+包路径
* @param String serialNoProperty 类中的参数序列号参数名
* @param int serialNolength 尾部序号要求长度
* @param boolean linkline 是否带下划线
* @return String serialNo;
*
*/
public String SerialNo(String headString,String secondString,Date date,String objPath,String serialNoProperty,int serialNolength,boolean linkline) {
//将返回的目标
String serialNo="";
//先处理日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String formeddateraw=sdf.format(date);//缩减日期格式
String formeddate=formeddateraw.replace("-", ""); //去-
//获得尾部序号
String tailSerialNo="";
List<String> lst=dao.query("select "+ serialNoProperty+" from "+objPath+" where "+serialNoProperty+" like "+"'%"+formeddate+"%'");//查序列号
中含当天日期的列表
//求原尾号中最大值
Integer maxvalue=0;
ArrayList<Integer> alst=new ArrayList();//用于存截取序号中的尾号,转成数字型,以利比较
if (lst!=null && lst.size()>1) {
for (int i = 0; i < lst.size(); i++) {
int eachVal = Integer.parseInt(lst.get(i).substring(lst.get(i).length()-serialNolength));//得到尾号,转成数字
alst.add(eachVal);
}
for (int i = 0; i < alst.size(); i++) {
for (int j = i+1; j <alst.size(); j++) {
if(alst.get(i)>alst.get(j)){
maxvalue=alst.get(i);
alst.set(i, alst.get(j));//只要前比后大,相互换位,保持前低后高。最后一个装入容器的就是最大的。
alst.set(j, maxvalue);
}
if(alst.get(i)<alst.get(j)){
maxvalue=alst.get(j);
}
}
}
//尾号
int tn = 10000000+maxvalue+1;
String tnstr=String.valueOf(tn);
tailSerialNo=tnstr.substring(tnstr.length()-serialNolength);
}else if(lst!=null && lst.size()==1){
//尾号
int tn=10000000+2;
String tnstr=String.valueOf(tn);
tailSerialNo=tnstr.substring(tnstr.length()-serialNolength);
}else{
//尾号
int tn=10000000+1;
String tnstr=String.valueOf(tn);
tailSerialNo=tnstr.substring(tnstr.length()-serialNolength);
}
//根据前置两个字符串选择状态
String temp_serialNo="";
//目标长值
if (headString.length()>0 && secondString.length()>0) {
temp_serialNo=headString+"_"+secondString+"_"+formeddate+"_"+tailSerialNo;
}else if(headString.length()>0 && secondString.length()==0){
//目标短值
temp_serialNo=headString+"_"+formeddate+"_"+tailSerialNo;
}
//根据是否去“_”,进行选择
if (linkline) {
serialNo=temp_serialNo;
}else{
serialNo=temp_serialNo.replace("_", "");
}
return serialNo;
}
应用场景:票据要求单号。
应用方法:所有参数要全,第二个参数(String secondString)没有内容也要用“”占位。