需求事这样的
1.订单id类似 2012041900001,2012041900002,2012041900003,2012041900004
2.不能重复
*3.在用户未下订单之前 订单编号要显示出来
大家有啥好的解决办法吗
1.订单id类似 2012041900001,2012041900002,2012041900003,2012041900004
2.不能重复
*3.在用户未下订单之前 订单编号要显示出来
大家有啥好的解决办法吗
解决方案 »
- 问个超级白的问题,软件调试能理解为软件测试的一部分么?
- 网页嵌套 vlc 媒体播放器
- 小白请教 jsp页面问题
- 抽象类、接口作为方法参数 java 反射 (只有这点分了。。。)
- struts2的如何初始化项目首页
- 请问关于struts标签 遍历集合中的集合元素
- 急。问题简单。进来分皆有分。回答者分多。不管对还是错
- struts+spring+hibernate 在hibernate执行的时候出现null错误
- 请帮忙分析win2000+Tomcat5.0.27+Oracle8.1.7配置连接池问题出在哪里?
- 在JBuilder 9中如何把资源文件放入struts中????
- 执行getHibernateTemplate.save(user)后,控制台已经显示出sql插入语句,但数据库里并没有数据?
- 字符串问题
var date = new Date();
bCode = date.getFullYear() + date.getMonth() + date.getDay() + date.getHours() + date.getMinutes() + date.getSeconds() + date.getMilliseconds();
document.getElementById("textField2").value = bCode;
这样子、
不是这样的吧
应该date.getFullYear() + date.getMonth() + date.getDay() 后面再加自动增长的Id吧
不存在生成一个当天日期+00001
把订单编号设最好为long此方法简单 但不严谨
我刚开始页事这样想的 但是 订单编号是 要提前显示给用户的 这种做法有可能 不同的用户显示的订单编号事一样的(A用户获取的count是1 但是还没有提交订单 B又来获取了 count还是1 A和B用户的订单id就一样了)
Random random = new Random();
System.out.println(random.nextInt(89999) + 10000);也不是很严谨
当天删除前一天的。先获取当前日期,例如:20120419,然后去map里面获取,如果没获取到则创建一个放到map里面。并用前一天的日期去获取,如果获取到了就remove。每次获取的时候+1就好了。其他就比较简单了。其实很多种方式,这只是一种实现而已
日期20120419 + 自动编号 00001
注意,自动编号,要防止多线程并发访问安全的问题。
所以,获取自动编号的时候,需要加锁
给你的对象加锁。
synchronized(obj){//代码
}其他的没什么了。
再保险点就是存之前在查一遍
第二次显示的时候会是MM20120419002,不会是MM20120419001具体怎么做看楼主思路了,编号表肯定是有几个字段要注意第一 前缀, 第二 日期, 第三 流水
/**
* 生成任务id号:两位年份两位月份两位日期+(当天任务总数+1),如果任务总数的长度不够8位,前面补零,如:12041900000001
*
* @return
*/
private Map<String, Long> taskIdMap = new HashMap<String, Long>();
ReadWriteLock rwLock = new ReentrantReadWriteLock(); public String queryMatterId() {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyMMdd");
Date date = new Date();
String key = dateFormat.format(date);
Long taskId;
rwLock.readLock().lock();
try {
taskId = taskIdMap.get(key);
} finally {
rwLock.readLock().unlock();
}
rwLock.writeLock().lock();
try {
if (null == taskId) {
taskIdMap.clear();
// taskIdMap
long id = buildTaskid(date);
taskIdMap.put(key, id);
taskId = id;
} else {
taskIdMap.put(key, taskId + 1);
}
} catch (Exception e) {
throw new RuntimeException("生成任务id同步写锁坏了");
} finally {
rwLock.writeLock().unlock();
} StringBuilder sb = new StringBuilder(key);
return sb.append(fillZero(8, String.valueOf(taskId))).toString(); }
/**
* 补零
*
* @param length 补零后的长度
* @param source需要补零的长符串
* @return
*/
private String fillZero(int length, String source) {
StringBuilder result = new StringBuilder(source);
for (int i = result.length(); i < length; i++) {
result.insert(0, '0');
}
return result.toString();
}
public java.util.List<MatterVO> query(MatterVO mattervo,int start, int end) throws DataAccessException {
try{
return sqlMapClient.getSqlMapClientTemplate().queryForList(mattervo.getClass().getSimpleName() + ".selectByProperties", mattervo,start,end);
} catch (Exception e) {
throw new DataAccessException(e);
} finally {
}
}