本文主要是介绍java生成订单号的一种思路(生成友好的订单号),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
比如订单号码要求20位字符串,除了8位的yyyymmdd外,还有12位可以自己去做。
提供一个工具类,根据一个数字生成订单号 result str = yyyymmdd + 这个int的 格式化结果,格式化就是补0,比如今天是16年12.30第一个订单号是1那么完整订单号为20161230000000000001
假设今天是第一次要订单号,我需要100个。
然后提供一个服务类来记录和获取今天生成的最大订单号。
// need Num代表 业务要占用多少个订单号
public int getMaxOrderNum(int needNum)
{
int maxNum = 获取今天最大的 ordrNum 去数据库里(数据库有日期和maxNum2个字段) ,如果今天没有记录返回0;
if(maxNum ==0)
{
给数据库insert 一条 maxNum为0 今天 的记录。
}
int updateDBMaxNum = maxNum + needNum;
update 数据库 今天, updateDBMaxNum 。
return maxNum 回去。
}
以下是我们公司的实现,我们通过 getmaxordernumberformDate方法获取到一个int值,然后formart一下即可当做订单号。
public class OrderNumberDubbboServiceImpl implements OrderNumberDubbboService
{/*** redis锁操作service*/@Resource(name = "redisLockServiceImpl")private RedisLockService redisLockService;@Autowiredprivate OrderNumberDAO dao;@Overridepublic int getMaxOrderNumberFromDate(Map<String, Object> paramMap){// 锁表(用于判断现在是否可以创建订单)一小时的超时时间if (!redisLockService.addRedisLock(ConstantKey.REDIS_LOCK_MAX_ORDER_NUMBER, 2000, 2)){return 0;}int number = ConverterUtils.toInt(paramMap.get("number"));int nowDate = ConverterUtils.toInt(paramMap.get("date"));// 从库中获取此类型的最新订单信息OrderNumber orderNumber = dao.getOrderNumber(paramMap);OrderNumber newOrderNumber = new OrderNumber();newOrderNumber.setType(ConverterUtils.toInt(paramMap.get("type")));newOrderNumber.setDate(nowDate);int startNum = 1;if (!CheckUtils.isNullOrEmpty(orderNumber) && nowDate == orderNumber.getDate()){// 库里有并且是今天的话,获取库里的数据startNum = orderNumber.getNumber() + 1;newOrderNumber.setNumber(orderNumber.getNumber() + number);dao.updateOrderNumber(newOrderNumber);redisLockService.delRedisLock(ConstantKey.REDIS_LOCK_MAX_ORDER_NUMBER);return startNum;}newOrderNumber.setNumber(number);dao.addOrderNumber(newOrderNumber);// 解锁redisLockService.delRedisLock(ConstantKey.REDIS_LOCK_MAX_ORDER_NUMBER);return startNum;}
}
如果觉得这篇文章帮助到你,给作者打赏点咖啡钱吧。
业务层拿到最大num 是0,然后他就可以占用1-100.
当下个业务在需要100个,拿到的是100,他就占用101-200;
然后业务层调用工具类去格式化数字作为最后的订单号。
这篇关于java生成订单号的一种思路(生成友好的订单号)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!