您的位置:首页 > 其它

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

2015-02-03 15:08 274 查看
在项目中,如何根据当前的流水号,生成下一个流水号!

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<glideBit-1;i++){
glideNumber=glideNumber+"0";
}
glideNumber=glideNumber+"1";
return glideNumber;
}

/**
* 根据当前的流水号,生成下一个流水号
* 当前是001 下一个002
* 当前是005 下一个006
* @param curGlideNumber 当前的流水号
* @return
* String 10005  ----整形	 10005
* 整形 10005+1    ----整形 10006
* 整形10006      ----String 10006
* String 10006  ----截取 0006
*/
public static String geneNextGlideNumber(String curGlideNumber) {
if(StringUtils.isBlank(curGlideNumber)){
throw new RuntimeException("不能计算下一个流水号");
}
curGlideNumber="1"+curGlideNumber;
Integer icurGlideNumber=Integer.parseInt(curGlideNumber);
icurGlideNumber++;
curGlideNumber=icurGlideNumber+"";
curGlideNumber=curGlideNumber.substring(1);
return curGlideNumber;
}

public static void main(String[] args) {
System.out.println(geneNextGlideNumber("004"));
}

}


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<SysCodeRule> 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;
}
}
}
}
利用上面的代码,就可以自动生成流水号。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐