您的位置:首页 > 其它

两个通用的产生一个编号字段的思路

2010-04-22 23:51 162 查看
两个通用的产生一个编号字段的方案(Java)

以下是我写的方案,大家有什么其它好的方法吗?

/*
* 获取一个记录编号
* 格式:12 位时间+业务编号+随即数
* 例如:100330101028+04+893 (2010-03-30-10:20:28, 业务号是04, 随机数893 )
*@param btype 业务类型编号 员工业务01 招聘业务02……
*@return code 构造的一个记录编号
*/
public static String getCode(String btype){

//返回的code
String code;
//系统当前时间 12位
SimpleDateFormat sdf=new SimpleDateFormat("yyMMddhhmmss");
String nowDate=sdf.format(new java.util.Date());

//随机数
String iRandom = Math.round(Math.random()*900 )+100 +"";

//整合一个code
return nowDate+btype+iRandom;
}


以下是另一种:

/*
* 获取一个记录编号
* 由于不存在随机数相同的风险了,这是只要6位时间即可
* 格式:6 位时间+业务编号+该业务的当天数量
* 例如:100330+04+00003 (2010-03-30-10:20:28, 业务号是04, 当天这个业务是第3笔 )
*@param btype 业务类型编号 员工业务01 招聘业务02……
*@return code 构造的一个记录编号
*/
public static String getCode(String btype){

//返回的code
String code;
//系统当前时间 6位
SimpleDateFormat sdf=new SimpleDateFormat("yyMMdd");
String nowDate=sdf.format(new java.util.Date());

//以上和方案1是一致的,但没有随机数了 换成了业务数量了
String bamountStr = "";

/*
* 操作表BusinessToday
* 找出当天对应btype的业务数量,加1后作为bamount,并且更新数据库,bamount字段++
* 这个过程是用存储过程实现的,这是只是用伪代码表示
*/
//Query Table BusinessToday, get the val of bamount and bdate
SELECT bamount, bdate FROM businesstoday WHERE btype = '';
//Check bdate is today?
if(bdate == today)
bamoutStr = ( bamount + 1) => String类型
//today is another day, bdate != today
//更新bdate字段,bamount置0
else
{
UPDATE bamount =0;
UPDATE bdate = today;
bamoutStr = ( bamount + 1) => String类型
}

//整合一个code
return nowDate+btype+bamountStr;
}

附件中有这个的数据库设计
本文出自 “ni掌柜的IT专栏” 博客,请务必保留此出处http://nileader.blog.51cto.com/1381108/303149
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: