本文已参与「新人创作礼」活动,一起开启掘金创作之路。
//每次生成卡的数量
public static final Integer GENERATE_CARD_NUMBER = 50;
for (int n = 0; n < cardNums; n = n + 50) {
if (cardNums - n < CommonConstant.GENERATE_CARD_NUMBER) {
saveCardsless(cardNums - n);
} else {
List<ZzActivateCard> zzActivateCards = new ArrayList<>();
for (int m = 0; m < 50; m++) {
ZzActivateCard zzActivateCard = new ZzActivateCard();
//UUID获取后14位字符串
String cartNumber = CartNumberUtil.getCartNumber();
//设置卡号
zzActivateCard.setCardNumber(cartNumber);
//不使用
zzActivateCard.setIsEnabled(ZzDepartment.IsEnabled.fou.getId());
zzActivateCards.add(zzActivateCard);
}
//生成卡片
saveCards(zzActivateCards);
}
}
//小于50的情况下
public void saveCardsless(Integer cardNumber) {
List<ZzActivateCard> zzActivateCards = new ArrayList<>();
for (int i = 0; i < cardNumber; i++) {
ZzActivateCard zzActivateCard = new ZzActivateCard();
//UUID获取后16位字符串
String cartNumber = CartNumberUtil.getCartNumber();
//设置卡号
zzActivateCard.setCardNumber(cartNumber);
//不使用
zzActivateCard.setIsEnabled(ZzDepartment.IsEnabled.fou.getId());
zzActivateCards.add(zzActivateCard);
}
//生成卡片
saveCards(zzActivateCards);
}
//添加卡片
public void saveCards(List<ZzActivateCard> zzActivateCards) {
List<String> cardNumbers = zzActivateCards.stream().map(e -> e.getCardNumber()).collect(Collectors.toList());
List<ZzActivateCard> zzActivateCards1 = zzActivateCardService.selectByCardNumbers(cardNumbers);
if (CollectionUtils.isNotEmpty(zzActivateCards1)) {
//删除重复卡号的元素
for (int n = 0; n < zzActivateCards.size(); n++) {
for (int m = 0; m < zzActivateCards1.size(); m++) {
if (zzActivateCards.get(n).getCardNumber().equals(zzActivateCards1.get(m).getCardNumber())) {
zzActivateCards.remove(n);
}
}
}
List<ZzActivateCard> zzActivateCardsDate = generateCards(zzActivateCards1);
zzActivateCards.addAll(zzActivateCardsDate);
}
// List<ZzActivateCard> zzActivateCardsDate = generateCards(zzActivateCards1);
// zzActivateCards.addAll(zzActivateCardsDate);
zzActivateCardService.saveBatch(zzActivateCards);
}
//递归
public List<ZzActivateCard> generateCards(List<ZzActivateCard> zzActivateCards1) {
List<ZzActivateCard> zzActivateCards = new ArrayList<>();
for (int i = 0; i < zzActivateCards1.size(); i++) {
ZzActivateCard zzActivateCard = new ZzActivateCard();
//UUID获取后16位字符串
String cartNumber = CartNumberUtil.getCartNumber();
//设置卡号
zzActivateCard.setCardNumber(cartNumber);
//不使用
zzActivateCard.setIsEnabled(ZzDepartment.IsEnabled.fou.getId());
zzActivateCards.add(zzActivateCard);
}
List<String> cardNumbers = zzActivateCards.stream().map(e -> e.getCardNumber()).collect(Collectors.toList());
List<ZzActivateCard> zzActivateCardsDate = zzActivateCardService.selectByCardNumbers(cardNumbers);
if (CollectionUtils.isNotEmpty(zzActivateCardsDate)) {
generateCards(zzActivateCards1);
}
return zzActivateCards;
}
public static String getCartNumber() {
StringBuilder prefix = new StringBuilder("QZYL");
return prefix.append(UUID.randomUUID().toString().replace("-", "").substring(0,14).toUpperCase()).toString();
}
如果生成一万条数据,每次需要到数据库比对生成的数据是否有重复。如果直接比对,会把数据库玩死,所以我们可以for循环,每次循环生成50次,并且比对50次。