生成入库单号,例如:R20220211112442000001,其中R代表前缀,20220211112442代表年月日时分秒,000001表示流水号,自动递增
实现:需要一张自动递增流水表,传入入库表名,查询到单号比较是否是当前日期,是SerialCount+1,不是设置为1,
拼接前缀+日期时间+6位流水
核心代码:
/**
* 传入表名,返回生成单号
* @param tableName 表名
* @return
*/
@Override
public String GetSerialnum(String tableName) {
Map<String,Object> map=new HashMap<String, Object>();
//定义需要返回的流水号
String result = null;
Long serialCount;
//1.通过tableName表名查询唯一对象
Serialnum serialnum = serialnumMapper.selectByTname(tableName);
//2. 获取对象的前缀
String prefix = serialnum.getPrefix();
//3. 获取对象的默认单号
String serialNumber = serialnum.getSerialNumber();
//4. 通过当前系统时间和默认单号时间对比
//4.1 获取当前时间 格式:yyyyMMdd
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String nowDate = sdf.format(new Date());
//4.2 获取单号时间
String oldDate = serialNumber.substring(1, 9);
//4.3 日期相等,说明今天已经生成订单号
if(nowDate.equals(oldDate)){
//拿到自增id,拼接生成单号
serialCount = serialnum.getSerialCount();
serialCount=serialCount+1L;
//返回结果,前缀+时间日期+6位流水
}else{
//4.4日期不相等
serialCount=1L;
}
result=prefix+new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+String.format("%06d",serialCount);
return result;
}