在项目中,如何根据当前的流水号,生成下一个流水号!

2019-04-14 12:56发布

在项目中,如何根据当前的流水号,生成下一个流水号!
DataType.java package cn.itcast.crm.util; import org.apache.commons.lang.StringUtils; public class DataType { /** * 利用给定的流水位生成第一个流水号 * 流水位3 ----- 001 * 流水位4-----0001 */ public static String geneFirstGlideNumber(Integer glideBit) { if(glideBit==null||glideBit<3){ glideBit=3; } String glideNumber=""; for(int i=0;i CompanyServiceImpl.java
package cn.itcast.crm.service.impl; import java.util.Date; import java.util.List; import javax.annotation.Resource; import org.apache.commons.lang.time.DateFormatUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import cn.itcast.crm.dao.ISysCodeRuleDao; import cn.itcast.crm.domain.SysCodeRule; import cn.itcast.crm.service.ICompanyService; import cn.itcast.crm.util.DataType; @Transactional(readOnly=true) @Service(ICompanyService.SERVICE_NAME) public class CompanyServiceImpl implements ICompanyService { @Resource(name=ISysCodeRuleDao.SERVICE_NAME) private ISysCodeRuleDao sysCodeRuleDao; @Transactional(isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED,readOnly=false) public String getCompanyCodeByTabName(String tabName) { //获取代码规则,查询sys_code_rule String whereHql=" and o.tabName=?"; Object[] params={tabName}; List list=sysCodeRuleDao.findObjectByConditionWithNoPage(whereHql, params); if(list==null||list.size()!=1){ throw new RuntimeException("不能生成客户的编码"); } SysCodeRule sysCodeRule=list.get(0); //* 获取 是否被修改过或新添加的 字段的值 //* 如果 是否被修改过或新添加的=='Y' if(sysCodeRule.getAvailable().equals("Y")){ //* 获取 流水位=3 Integer glideBit=sysCodeRule.getGlideBit(); //* 生成第一个流水号 001 String firstGlideNumber=DataType.geneFirstGlideNumber(glideBit); //* 计算下一个流水号 002 String nextGlideNumber=DataType.geneNextGlideNumber(firstGlideNumber); //* 获取系统的当前时间 格式yyyyMMdd 20110914 String curDate=DateFormatUtils.format(new Date(), "yyyyMMdd"); //* 生成客户编码 //* 编码前缀+"-"+利用日期位格式生成当前的日期[yyyy-MM-dd ]+"-"+001 c-2011-09-14-001 String code=sysCodeRule.getAreaPrefix()+"-" +DateFormatUtils.format(new Date(), sysCodeRule.getAreaTime())+"-"+firstGlideNumber; //* 修改代码规则表 //* 下一个序列号="002" sysCodeRule.setNextseq(nextGlideNumber); //* 当前日期 20110914 sysCodeRule.setCurDate(curDate); //* 是否被修改过='N' sysCodeRule.setAvailable("N"); sysCodeRuleDao.update(sysCodeRule); //System.out.println("1:code:"+code); return code; }else{ //是否被修改过或新添加的=='N' //* 获取代码规则表中的当前日期字段的值 String curDate=sysCodeRule.getCurDate(); //* 获取系统的当前日期、 String sysCurDate=DateFormatUtils.format(new Date(), "yyyyMMdd"); //* 如果代码规则表中的当前日期字段的值==系统的当前日期、 if(curDate.equals(sysCurDate)) { //* 获取下一个序列号 ="002" String nextseq=sysCodeRule.getNextseq(); //* 计算新的流水号 003 String nextGlideNumber=DataType.geneNextGlideNumber(nextseq); //* 生成客户编码 //* 编码前缀+"-"+利用日期位格式生成当前的日期[yyyy-MM-dd ]+"-"+001 String code=sysCodeRule.getAreaPrefix()+"-" +DateFormatUtils.format(new Date(), sysCodeRule.getAreaTime())+"-"+nextseq; //* 修改代码规则表 //* 下一个序列号="003" sysCodeRule.setNextseq(nextGlideNumber); //* 当前日期 20110914 //* 是否被修改过='N' sysCodeRuleDao.update(sysCodeRule); //System.out.println("2:code:"+code); return code; }else{ //如果代码规则表中的当前日期字段的值!=系统的当前日期、 //* 获取 流水位=3 Integer glideBit=sysCodeRule.getGlideBit(); //* 生成第一个流水号 001 String firstGlideNumber=DataType.geneFirstGlideNumber(glideBit); //* 计算下一个流水号 002 String nextGlideNumber=DataType.geneNextGlideNumber(firstGlideNumber); //* 生成客户编码 //* 编码前缀+"-"+利用日期位格式生成当前的日期[yyyy-MM-dd ]+"-"+001 String code=sysCodeRule.getAreaPrefix()+"-" +DateFormatUtils.format(new Date(), sysCodeRule.getAreaTime())+"-"+firstGlideNumber; //* 修改代码规则表 //* 下一个序列号="002" sysCodeRule.setNextseq(nextGlideNumber); //* 当前日期 20110915 sysCodeRule.setCurDate(sysCurDate); //* 是否被修改过='N' sysCodeRule.setAvailable("N"); sysCodeRuleDao.update(sysCodeRule); //System.out.println("3:code:"+code); return code; } } } } 利用上面的代码,就可以自动生成流水号。