利用时间获取订单号

1. 定单号,要求很GX,10位以内的数字,不可重复,本想在mysql中,弄个字段自增,其实这样也可,但如果有并发,要操作数据库,就不太合适了。

2. 用代码实现,要求在有并发的情况下,也能保证10位定单号不重复,这个办法只能保证在一定的时间段内不重复,大概是三年。

OdnTool
 1 public class OdnTool {
2
3 public static synchronized String getOdn() throws Exception {
4 Thread.sleep(1);
5 String ut = String.valueOf(System.currentTimeMillis());
6 String odn = ut.substring(ut.length() - 10, ut.length());
7 System.out.println(odn);
8 return odn;
9 }
10 }

 synchronized和Thread.sleep(1) 都必不可少。

3. 测试代码

OdnTest
 1 public class OdnTest extends Thread {
2 public OdnTest(String name) {
3 super(name);
4 }
5
6 public void run() {
7 try {
8 OdnTool.getOdn();
9 } catch (Exception e) {
10 e.printStackTrace();
11 }
12 }
13
14 public static void main(String[] args) {
15 for (int i = 0; i < 1000; i++) {
16 new OdnTest(String.valueOf(i)).start();
17 }
18 }
19 }

在多线程环境中,如果缺少synchronized,会导致生成的定单号重复,因为几个线程一起执行,都睡眠1ms,再获取的时间会相同(java只能精确到毫秒);如果缺少Thread.sleep(1),线程是同步了,但两个同步的线程会在很短的时间内执行OK,获取的时间也会相同。

4. 不过,如果是在集群环境中,会出现两台机产生的定单号重复。其实可以这样,设定每台机生成定单号的最高位不同,但这样就只能截取时间的后9位,这样可能三个多月就会出现重复,不过依然可以满足项目需求。


转载于:https://www.cnblogs.com/elm5280/archive/2011/11/10/2244717.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Excel做的购订单(Purchase Order)管理系统是一种简易但功能强大的解决方案。购订单是企业与供应商之间的重要文件,用于书面确认订购商品或服务的详细信息,包括数量、价格、交付日期等。下面是使用Excel来建立购订单管理系统的一些说明: 1. 数据管理:Excel可以提供一个结构良好的表格,用于记录和管理购订单的各种信息。可以创建一个包含各列标题的工作表,如订单号、供应商名称、商品名称、数量、单价、总价、交付日期等,以方便数据的输入和查询。 2. 数据输入:用户可以根据需要,通过手动输入或复制粘贴的方式,将购订单的详细信息填写到相应的单元格中。可以按照时间顺序对购订单进行排序,以便跟踪和查找。 3. 公式计算和自动更新:通过使用公式和函数,可以自动计算总价、小计、折扣等信息。根据所填写的商品数量和单价,Excel会自动更新计算结果,确保数据的准确性。 4. 数据筛选和汇总:Excel提供了强大的筛选和排序功能,可以根据各列的条件进行数据筛选,以便快速找到所需的购订单。还可以使用汇总功能,将特定供应商的购订单进行汇总,以获取更全面的数据分析。 5. 报表和图表生成:利用Excel的图表功能,可以生成各种购订单相关的报表和图表,如按供应商分类的购订单数量统计图、商品销售排名等,以便更直观地了解和分析各项数据。 尽管Excel的购订单管理系统有一些功能局限性,如数据安全性和多用户协同编辑的限制,但对于一些小型企业或个人使用,仍然是一个方便、快速、简单而且成本低廉的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值