| package com.ruoyi.common.utils; | 
|   | 
| import java.math.BigDecimal; | 
| import java.text.SimpleDateFormat; | 
| import java.util.Calendar; | 
| import java.util.Date; | 
| import java.util.concurrent.atomic.AtomicInteger; | 
|   | 
| /** | 
|  * @Description | 
|  * @Author xiaochen | 
|  * @Date 2021/7/28 10:26 | 
|  */ | 
| public class CodeGenerateUtils { | 
|   | 
|     /** | 
|      * @return | 
|      * @Description 获取商品编码 | 
|      * 商品编码规则:nanoTime(后5位)*5位随机数(10000~99999) | 
|      * @Author xiaochen | 
|      */ | 
|     public static String generateProductCode() { | 
|         long nanoPart = System.nanoTime() % 100000L; | 
|         if (nanoPart < 10000L) { | 
|             nanoPart += 10000L; | 
|         } | 
|         long randomPart = (long) (Math.random() * (90000) + 10000); | 
|         String code = "0" + new BigDecimal(nanoPart).multiply(new BigDecimal(randomPart)); | 
|         return code.substring(code.length() - 10); | 
|     } | 
|   | 
|     /** | 
|      * @return | 
|      * @Description 生成订单编号  10位 | 
|      * 订单编号规则:(10位):(年末尾*月,取后2位)+(用户ID%3.33*日取整后2位)+(timestamp*10000以内随机数,取后6位) | 
|      * @Author xiaochen | 
|      */ | 
|     public static String generateOrderSn() { | 
|         Calendar calendar = Calendar.getInstance(); | 
|         int year = calendar.get(Calendar.YEAR); | 
|         year = year % 10; | 
|         if (year == 0) year = 10; | 
|         int month = calendar.get(Calendar.MONTH) + 1; | 
|         int yearMonth = year * month; | 
|         String yearMonthPart = "0" + yearMonth; | 
|         yearMonthPart = yearMonthPart.substring(yearMonthPart.length() - 2); | 
|   | 
|         int day = calendar.get(Calendar.DAY_OF_MONTH); | 
|         double v = Math.random() * 10000; | 
|         int dayNum = (int) ((v % 3.33) * day); | 
|         String dayPart = "0" + dayNum; | 
|         dayPart = dayPart.substring(dayPart.length() - 2); | 
|   | 
|         String timestampPart = "" + (Math.random() * 10000) * (System.currentTimeMillis() / 10000); | 
|         timestampPart = timestampPart.replace(".", "").replace("E", ""); | 
|         timestampPart = timestampPart.substring(0, 6); | 
|         return yearMonthPart + dayPart + timestampPart; | 
|     } | 
|   | 
|     /** | 
|      * @return | 
|      * @Description 生成统一支付单号  规则:年(2)月(2)日(2)时(2)分(2)+timestamp*5位随机整数取后5位 | 
|      * @Author xiaochen | 
|      */ | 
|     public static String generateVolumeSn() { | 
|         Calendar calendar = Calendar.getInstance(); | 
|         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddhhmmss"); | 
|         String dateTime = dateFormat.format(calendar.getTime()); | 
|         dateTime = dateTime.substring(2); | 
|         String timestampPart = "" + (Math.random() * 10000) * (System.currentTimeMillis() / 10000); | 
|         timestampPart = timestampPart.replace(".", "").replace("E", ""); | 
|         timestampPart = timestampPart.substring(0, 0); | 
|         return dateTime + timestampPart; | 
|     } | 
|     /** | 
|      * @return | 
|      * @Description 生成统一支付单号  规则:年(2)月(2)日(2)时(2)分(2)+timestamp*5位随机整数取后5位 | 
|      * @Author xiaochen | 
|      */ | 
|     public static String generateVolumeSn(String code) { | 
|         Calendar calendar = Calendar.getInstance(); | 
|         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddhhmmss"); | 
|         String dateTime = dateFormat.format(calendar.getTime()); | 
|         dateTime = dateTime.substring(0,8); | 
|         String timestampPart = "" + (Math.random() * 10000) * (System.currentTimeMillis() / 10000); | 
|         timestampPart = timestampPart.replace(".", "").replace("E", ""); | 
|         timestampPart = timestampPart.substring(0, 6); | 
|         return dateTime + code + timestampPart; | 
|     } | 
|   | 
|     public static void main(String[] args) { | 
|         System.err.println(generateVolumeSn("2")); | 
|     } | 
|   | 
| } |