java自定义单据编号自增,规则如:销售单("XSD20170614001"),

来源:互联网 发布:ubuntu snmpwalk 安装 编辑:程序博客网 时间:2024/04/30 17:55

最近公司做一个进销存软件,需要给单据设置自定义编号功能

由于本人使用的是springmvc,仔细思考下后贴出代码:



/*service层调用工具类*/

String billType="YDD";//定义单据类型,预订单
String DbBillCode=bookBillInfoService.getMaxBillCode(billType);//获取最大的预订单号

String billId = IdGen.generateBillCode(billType,DbBillCode);



/*sql语句*/

<!-- 根据订单类型获取最大的订单编号 -->
<select id="getMaxBillCode" parameterType="java.lang.String" resultType="java.lang.String">
select Max(SUBSTRING(id,-11)) FROM book_bill_info
where id like concat ('%',#{billType},'%')
</select>



/**
* 自动生成单据编号,规则如:XSD+20170614+001,第二天的单据从001开始
* @param billType  单据类型如"XSD",DbBillCode  "数据库中取出来的单据号"
* @return
*/
public static String generateBillCode(String billType,String DbBillCode){

//存放最终生成的单据编号的字符串
String billCode=new String();

String dateString = new SimpleDateFormat("yyyyMMdd").format(new Date());

if("".equals(DbBillCode)||DbBillCode==null){
//如果单号不存在,则设置每天的第一个单号
billCode=billType+dateString+"001";
}else{

//取出单据号中的固定位
String str=billType+DbBillCode.substring(0,8);

//取出流水号
String temp=DbBillCode.substring(DbBillCode.length()-3,DbBillCode.length());


//取出当天的所有单号中最大的单号截取后自增1
       if(Integer.parseInt(temp)>=1&&Integer.parseInt(temp)<999){  
           temp=String.valueOf(Integer.parseInt(temp)+1);  
       }  
       switch (temp.length()) {  
       case 1:  
           temp="00"+temp;  
           break;  
       case 2:  
           temp="0"+temp;  
           break;  
       default:  
           break;  
       }  
       billCode=str+temp;
}

System.out.println(billCode);
return billCode;
}


junit测试代码,就不往出贴了,有需要的朋友自己传参测试一下,第一次发博客有不足或者优化的地方希望大神们

多多指导一下!


原创粉丝点击