|
|
|
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<params.length&¶ms[idx_p]!=null){
|
|
|
|
builder.replace(idx,idx+2,params[idx_p]);
|
|
|
|
idx_p++;
|
|
|
|
}else {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return builder.toString();
|
|
|
|
}
|
|
|
|
|
|
|
|
private static boolean hasText(StringBuilder a,String text){
|
|
|
|
return a.toString().contains(text);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static List<String> 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<Long> splitIdLong(String ids){
|
|
|
|
List<String> strs = splitIdString(ids);
|
|
|
|
if(strs!=null){
|
|
|
|
return strs.stream().map(a->Long.parseLong(a)).collect(Collectors.toList());
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|