注:算法比较low,先用着,流水号长度可变,如有需要,直接使用,本人测试通过,如有问题,自行修改。
如输入参数为0000,输出则为0001,输入参数为9999,输出参数为A000
import org.apache.commons.lang3.StringUtils;
@RequestMapping(value = "/getSerialNumber", method = RequestMethod.POST)
@ApiOperation(value = "获取流水号", notes = "获取流水号")
public String getSerialNumber(@RequestBody Code code) {
String result = "";
try {
if (code.getOriginal() == null) {
return "";
}
char[] chars = code.getOriginal().toCharArray();
String maxNumber = StringUtils.leftPad("9", chars.length, "9");
String maxLetter = StringUtils.leftPad("Z", chars.length, "Z");
if (chars[0] <= 57 && chars[0] >= 48) {
int ori = Integer.parseInt(code.getOriginal());
if (ori < Integer.parseInt(maxNumber)) {
result = String.format("%0" + chars.length + "d", ori + 1);
}
if (ori == Integer.parseInt(maxNumber)) {
result = String.format("A" + "%0" + (chars.length - 1) + "d", 0);
}
} else if (code.getOriginal().compareToIgnoreCase(maxLetter) == 0) {
result = String.format("%0" + chars.length + "d", 1);
} else {
int i = 0;
for (char item : chars) {
if (item <= 57 && item >= 48) {
break;
} else {
i++;
}
}
String letter = code.getOriginal().substring(0, i);
String number = code.getOriginal().substring(i, chars.length);
maxNumber = StringUtils.leftPad("9", number.length(), "9");
int ori = Integer.parseInt(number);
if (ori < Integer.parseInt(maxNumber)) {
result = String.format(letter + "%0" + number.length() + "d", ori + 1);
}
if (ori == Integer.parseInt(maxNumber) && letter.substring(letter.length() - 1).compareToIgnoreCase("Z") == 0) {
String tailLetter = "";
if ((number.length() - 1) == 0) {
tailLetter = "A";
}
else
{
tailLetter = "A" + String.format("%0" + (number.length() - 1) + "d", 0);
}
result = letter + tailLetter;
}
if (ori == Integer.parseInt(maxNumber) && letter.substring(letter.length() - 1).compareToIgnoreCase("Z") < 0) {
String topLetter = "";
char[] tailLetter = letter.substring(letter.length() - 1).toCharArray();
if (letter.length() == 1) {
topLetter = String.valueOf((char) (tailLetter[0] + 1));
} else {
topLetter = letter.substring(0, letter.length() - 1) + String.valueOf((char) (tailLetter[0] + 1));
}
result = String.format(topLetter + "%0" + number.length() + "d", 0);
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
return "result:" + result;
}
@Getter
@Setter
class Code {
private String original;
}