结合redis,整个工具类代码如下:
import com.ch.commoms.util.StringUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.TimeUnit;
/**
* @author 赵晟晖
* 生成流水号
*/
@Component
@RequiredArgsConstructor
public class SequenceAutoIdService {
private final RedisTemplate redisTemplate;
static final int DEFAULT_LENGTH = 4;
//bsNo:业务编号 no:单号
//工单管理
private final static String ORDER_BS_NO="b0010";
private final static String ORDER_NO="SR";
/**
* 工单业务编号
* @return
*/
public String orderBsNo(){
return createAutoID(ORDER_BS_NO);
}
/**
* 工单单号
* @return
*/
public String orderNo(){
return createAutoID(ORDER_NO);
}
/**
* 生成流水号 每天从 1 开始
* @param nameKey 流水号头部
* @return
*/
public synchronized String createAutoID(String nameKey) {
String datetime = new SimpleDateFormat("yyyyMMdd").format(new Date());
String key = MessageFormat.format("{0}:{1}:{2}", "sys",nameKey,datetime);
Long autoID = redisTemplate.opsForValue().increment(key, 1);
if(autoID==1){
redisTemplate.expire(key, 86400, TimeUnit.SECONDS);
}
String value = StringUtils.leftPad(String.valueOf(autoID), DEFAULT_LENGTH, "0");
String code = MessageFormat.format("{0}{1}{2}", nameKey, datetime,value);
return code;
}
}