至于第二天重新开始,那就是在JAVA中实现了: String number = ""; String _str_date = MiscUtils.timestampToString(new Date(), "yyMMdd"); ··· sql = "select * from inv_lot_trans v where v.issue_number like '%_str_date%'" ··· if (resultSet.next()) { int temp = resultSet.getInt(1); number = (temp + "").substring(1); } else { number = "001"; } 写的不大详细~
String number = ""; String _str_date = MiscUtils.timestampToString(new Date(), "yyMMdd"); ··· sql = "select * from inv_lot_trans v where v.issue_number like '%_str_date%'" ··· if (resultSet.next()) { int temp = resultSet.getInt(1); number = (temp + "").substring(1); } else { number = "001"; }
就是 很简单的key=value的prop文件就可以 读写文件内容加上同步 就可以避免并发问题
//一个线程循环 后面的就要你存到会话中去 调用一次存一次取一次 public class PowerUtil implements Runnable { public void run() { synchronized(this) { for (int i = 0; i < 5; i++) { Thread.currentThread().getName(); System.out.println(" synchronized loop " + i); } } } public static void main(String[] args) { PowerUtil t1 = new PowerUtil(); Thread ta = new Thread(t1, "A"); ta.start(); }}
从数据库读取多方便,select row_number() over (order by id) as rowNum...
写一个synchronized的方法,
如果数据库中没有今日的最大号,那添加一条数据。存上今日和初始号。
如果数据库中有今日的最大号,则取出最大号+1,再update
-- Create sequence
create sequence LOT_NO
minvalue 1
maxvalue 999
start with 391
increment by 1
cache 10
cycle;
意思就是给数据库里加表,
以前我们做的时候用的quartz 定时 让每天晚上0点
初始化sequence表中的累积字段 让从0开始 格式就是:日期+sequence流水号这个表中你可以让用户设置:编码前缀、流水号长度、起始值 等
c_date date,--放日期
c_number number --放流水号
)
这个库里只放一条数据 当天日期和使用到的流水号
首先从数据查出这条记录,判断日期是否和当前日期相同,相同则拿流水号使用,并更新表中流水号+1
如果不相同就更新表中日期为当前日期,且把流水号改为1
String number = "";
String _str_date = MiscUtils.timestampToString(new Date(), "yyMMdd");
···
sql = "select * from inv_lot_trans v where v.issue_number like '%_str_date%'"
···
if (resultSet.next()) {
int temp = resultSet.getInt(1);
number = (temp + "").substring(1);
} else {
number = "001";
}
写的不大详细~
前缀,流水号长度,起始位数,编码方式(年编码,月编码,日编码)简单的这些就够了具体的 你去哪个项目网站看效果,www.yunji99.com 点击免费使用 》 然后进去时导航 在导航上选:系统设置 》 然后再选:业务编码规则我们做的比较全,你看你的需求了
如果订单一天内不会大于10000
首先查询今天的订单号最大的一个,如果没有,设置一个初始值(日期+序号)201203220001
如果有的话把这个订单好变成数字类型+1生成第二个订单号.
例如当前日期最大订单号为"201203220777"变成数字类型加1为"201203220778"
还是比较简单吧
String _str_date = MiscUtils.timestampToString(new Date(), "yyMMdd");
···
sql = "select * from inv_lot_trans v where v.issue_number like '%_str_date%'"
···
if (resultSet.next()) {
int temp = resultSet.getInt(1);
number = (temp + "").substring(1);
} else {
number = "001";
}
读写文件内容加上同步 就可以避免并发问题
public class PowerUtil implements Runnable { public void run() {
synchronized(this) {
for (int i = 0; i < 5; i++) {
Thread.currentThread().getName();
System.out.println(" synchronized loop " + i);
}
}
}
public static void main(String[] args) {
PowerUtil t1 = new PowerUtil();
Thread ta = new Thread(t1, "A");
ta.start();
}}