package com.jilongda.common.utils; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.Calendar; /** * @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" + String.valueOf((new BigDecimal(nanoPart).multiply(new BigDecimal(randomPart)))); return code.substring(code.length() - 10); } /** * @param id: 用户id * @return * @Description 生成订单编号 * 订单编号规则:(10位):(年末尾*月,取后2位)+(用户ID%3.33*日取整后2位)+(timestamp*10000以内随机数,取后6位) * @Author xiaochen */ public static String generateOrderSn(long id) { 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); int dayNum = (int) ((id % 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, 5); return dateTime + timestampPart; } public static void main(String[] args) { for (long i = 0; i < 20; i++) { //String timestampPart = ""+(Math.random() * 10000) * (System.currentTimeMillis()/10000); //System.out.println(timestampPart); //System.out.println(generateOrderSn(i)); System.err.println(generateVolumeSn()); } } /** * @description id补0生成编号 * @author jqs * @date 2024/4/17 14:19 * @param totalLength * @param id * @return String */ public static String toFillZeroCode(int totalLength, Long id) { String idStr = id.toString(); int length = idStr.length(); if(totalLength <= length){ return idStr; } int fillLength = totalLength - length; StringBuilder idsbs = new StringBuilder(); for (int i = 0; i < fillLength; i++) { idsbs.append("0"); } return idsbs.append(idStr).toString(); } }