在项目中,如何根据当前的流水号,生成下一个流水号!
2015-02-03 15:08
274 查看
在项目中,如何根据当前的流水号,生成下一个流水号!
DataType.java
CompanyServiceImpl.java
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; } } } }利用上面的代码,就可以自动生成流水号。
相关文章推荐
- 项目中要求根据 一个号码,生成它的流水号
- 收藏:如何根据当前MDB中的表生成对应的JET SQL DDL “CREATE TABLE”语句/脚本?
- 如何根据当前时间生成唯一编号
- 如何使用 asp.net 4.0 新特性 路由功能 有助于seo优化 给一个 asp.net web项目(网站项目) 增加路由功能 ,继承,给根据路由生成的url的结尾,增加一个有利于seo优化的斜杠 /,跳转到一个路由生成的url页面
- JAVA_WEB项目之在myecplise中如何利用DB Browser窗口连接mysql数据库之后根据表反向生成映射文件
- 用JS实现根据当前时间随机生成流水号或者订单号
- 如何让从数据库中查询出符合条件的记录,然后给每个记录自动加上序号,序号是根据符合条件的记录多少在随时变化.而且也会在以查询生成的报表中显示出来.谢谢
- 移动项目开发笔记(.net根据模板生成Word文件(zt))
- c# winform中如何判断DataGrid当前选中的是空白行,并根据选择控制按钮是否可用
- 如何实现项目脚本的批量生成
- 如何利用NB代码生成工具和NBear框架,快速开发WEB项目
- mxOutlookBarPro中,button是通过for语句动态生成的,如何取得当前单击button的标题呢?
- C# 如何在窗体项目的类中获得当前窗体的对象
- 如何根据hibernate的实体类和实体类配置文件生成数据库的表
- access如何用代码在“默认值”里实现自动编号?单据流水号生成问题。
- 如何创建生成非 MFC 项目的自定义 AppWizards
- 如何利用NB代码生成工具和NBear框架,快速开发WEB项目
- SQL SERVER 根据日期自动生成流水号
- 如何设定项目窗口和生成文件的图标