1. java实体类
public class Seq extends BaseEntity { private String name; private String format; private Integer numberLength; private Long value; private Integer step; private String descInfo; private Integer type; private String typeValue; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getFormat() { return format; } public void setFormat(String format) { this.format = format; } public Integer getNumberLength() { return numberLength; } public void setNumberLength(Integer numberLength) { this.numberLength = numberLength; } public Long getValue() { return value; } public void setValue(Long value) { this.value = value; } public Integer getStep() { return step; } public void setStep(Integer step) { this.step = step; } public String getDescInfo() { return descInfo; } public void setDescInfo(String descInfo) { this.descInfo = descInfo; } public Integer getType() { return type; } public void setType(Integer type) { this.type = type; } public String getTypeValue() { return typeValue; } public void setTypeValue(String typeValue) { this.typeValue = typeValue; } }2.
public interface SeqService extends BaseService<Seq> { public String nextValue(String name); }
@Service
public class SeqServiceImpl extends BaseServiceImpl<Seq> implements SeqService {
private static Logger log = LoggerFactory.getLogger(SeqServiceImpl.class);
@Autowired
private SeqMapper seqMapper;
private SimpleDateFormat sdfYyyyMMdd = new SimpleDateFormat("yyyyMMdd");
private SimpleDateFormat sdfYyyy = new SimpleDateFormat("yyyy");
//提供对外访问的方法
public String nextValue(String name){
Date d = new Date();
String date = sdfYyyyMMdd.format(d);
String year = sdfYyyy.format(d);
Seq seq = seqMapper.getByName(name);
Long value = seq.getValue() + seq.getStep();//生成新值
if(seq.getType() != null && seq.getType() == 1) {
//如果是 按照年份循环
if (seq.getTypeValue().equals(year)) {
}else {
value = 1l;
}
}
//
String str = seq.getFormat();
str = str.replace("{year}", year);
str = str.replace("{date}", date);
str = str.replace("{value}", leftPad(seq.getNumberLength(), value+""));
//
seqMapper.increment(name);//数据库生成新值
seq.setTypeValue(year);
seq.setValue(value);
seqMapper.updateByPrimaryKey(seq);
return str;
}
private static String leftPad(int length, String value) {
int valueLen = value.length();
if (valueLen < length) {
for (int i = 0; i < (length - valueLen); i++) {
value = "0" + value;
}
}
return value;
}
}
3. sql查询
public interface SeqMapper extends MyMapper<Seq> { @Select("select * from seq where name = #{name}") public Seq getByName(String name); @Update("update seq set value = value + step where name = #{name}") public void increment(String name); }