You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

135 lines
3.9 KiB

3 years ago
package com.qs.serve.common.util;
import lombok.experimental.UtilityClass;
import java.time.LocalDate;
3 years ago
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
3 years ago
import java.util.ArrayList;
import java.util.Arrays;
3 years ago
import java.util.concurrent.atomic.AtomicInteger;
3 years ago
import java.util.List;
import java.util.stream.Collectors;
3 years ago
/**
* @author YenHex
* @since 2022/2/28
*/
@UtilityClass
public class StringUtils extends org.springframework.util.StringUtils {
3 years ago
/** 订单号生成(NEW) **/
private static final AtomicInteger SEQ = new AtomicInteger(1000);
private static final AtomicInteger SEQ2 = new AtomicInteger(10001);
3 years ago
private static final DateTimeFormatter DF_FMT_PREFIX = DateTimeFormatter.ofPattern("yyMMddHHmmssSS");
private static ZoneId ZONE_ID = ZoneId.of("Asia/Shanghai");
3 years ago
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());
}
}
3 years ago
/** 非空 */
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();
}
3 years ago
/**
* 格式化
* @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&&params[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);
}
3 years ago
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;
}
3 years ago
}