package com.gkhy.exam.system.utils;
|
|
import cn.hutool.core.date.DateUtil;
|
import com.gkhy.exam.common.enums.CodeTypeEnum;
|
import com.gkhy.exam.common.exception.ApiException;
|
import com.gkhy.exam.common.utils.RedisUtils;
|
import com.gkhy.exam.common.utils.StringUtils;
|
import com.gkhy.exam.system.mapper.ExExamPaperMapper;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
|
import java.time.format.DateTimeFormatter;
|
import java.util.Date;
|
import java.util.concurrent.TimeUnit;
|
|
/**
|
* <p>
|
* 编号生成工具来
|
* </p>
|
*
|
* @author kzy
|
* @since 2024-06-06 13:53:17
|
*/
|
|
@Component
|
public class SequenceUtils {
|
@Autowired
|
private RedisUtils redisUtils;
|
@Autowired
|
private ExExamPaperMapper examPaperMapper;
|
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd");
|
private static final DateTimeFormatter DATE_FORMATTER2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
public synchronized String getNextSequence(String prefixKey){
|
if(StringUtils.isBlank(prefixKey)){
|
throw new ApiException("编号前缀不能为空");
|
}
|
Date currentDate=new Date();
|
String today= DateUtil.format(currentDate,DATE_FORMATTER);
|
String key=prefixKey+today;
|
long increment=redisUtils.incr(key,1);
|
if(increment==1){
|
//查询数据库
|
long count=0;
|
if(prefixKey.equals(CodeTypeEnum.EXAM_PAPER.getCode())){
|
count=examPaperMapper.selectCountBetweenDay(DateUtil.format(DateUtil.beginOfDay(currentDate),DATE_FORMATTER2),DateUtil.format(DateUtil.endOfDay(currentDate),DATE_FORMATTER2));
|
}
|
if(count>0){
|
increment=count+1;
|
redisUtils.set(key,increment);
|
}
|
redisUtils.expire(key,24, TimeUnit.HOURS);
|
}
|
if(increment>9999){
|
throw new ApiException("编号超过最大值");
|
}
|
String code=String.format("%04d",increment);
|
return today+code;
|
}
|
}
|