package com.qs.serve.common.util; import lombok.experimental.UtilityClass; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.concurrent.atomic.AtomicInteger; import java.util.List; import java.util.stream.Collectors; /** * @author YenHex * @since 2022/2/28 */ @UtilityClass public class StringUtils extends org.springframework.util.StringUtils { /** 订单号生成(NEW) **/ private static final AtomicInteger SEQ = new AtomicInteger(1000); private static final AtomicInteger SEQ2 = new AtomicInteger(10001); private static final DateTimeFormatter DF_FMT_PREFIX = DateTimeFormatter.ofPattern("yyMMddHHmmssSS"); private static ZoneId ZONE_ID = ZoneId.of("Asia/Shanghai"); public static String generateOrderNo(){ LocalDateTime dataTime = LocalDateTime.now(ZONE_ID); if(SEQ.intValue()>9990){ SEQ.getAndSet(1000); } return dataTime.format(DF_FMT_PREFIX)+SEQ.getAndIncrement(); } public static String genShortId() { // 2 位 年份的后两位 22001 后五位走随机 每天清一次缓存 99999 10 StringBuilder idSb = new StringBuilder(); /// 年份后两位 和 一年中的第几天 LocalDate now = LocalDate.now(); String year = now.getYear() + ""; year = year.substring(2); String day = now.getDayOfYear() + ""; /// 补0 if (day.length() < 3) { StringBuilder sb = new StringBuilder(); for (int i = day.length(); i < 3; i++) { sb.append("0"); } day = sb.append(day).toString(); } idSb.append(year).append(day); /// 后五位补随机数 if(SEQ2.intValue()>99900){ SEQ2.getAndSet(10000); } idSb.append(SEQ2.getAndIncrement()); return idSb.toString(); } public static void main(String[] args) { for (int i = 0; i < 100; i++) { System.out.println(genShortId()); //System.out.println(generateOrderNo()); } } /** 非空 */ public static boolean isNotEmpty(String str){ return !isEmpty(str); } /** 含有空对象 */ public static boolean hasEmpty(Object... strings){ for (Object str : strings) { if(isEmpty(str)){return true;} } return false; } public static String getUrlByList(List list,String param){ StringBuilder sb = new StringBuilder(); for (Object val : list) { sb.append("&"+param+"="+val); } return sb.toString(); } /** * 格式化 * @param exp 含{}的表达式 * @param params 参数(注意跳过空值) * @return */ public static String format(String exp,String... params){ StringBuilder builder = new StringBuilder(exp); int idx_p = 0; while (hasText(builder,"{}")){ int idx = builder.indexOf("{}"); if(idx_p splitIdString(String ids){ if(ids==null){ return null; } if(ids.contains(",")){ String[] idsA= ids.split(","); return Arrays.asList(idsA); } return Arrays.asList(ids); } public static List splitIdLong(String ids){ List strs = splitIdString(ids); if(strs!=null){ return strs.stream().map(Long::parseLong).collect(Collectors.toList()); } return null; } }