通用生成序列号方法

3 篇文章 0 订阅
1 篇文章 0 订阅
/**
	 * 通用生成序列号方法——限制条件:当前类中必须有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)没有内容也要用“”占位。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值