彩票网站做一级代理犯法吗,wordpress代码详解,资讯类网站模板,广州品牌策划公司有哪些提出的要求#xff1a;生成13位纯数字的卡号与8位纯数字的卡密#xff0c;要求卡号与卡密都必须全表唯一#xff0c;然后保存到mysql。思路#xff1a;1.首先mysql中将这两个字段设置唯一索引#xff0c;保证这两个字段的值在该表中是唯一存在的2.卡号是有序增长的#x…提出的要求生成13位纯数字的卡号与8位纯数字的卡密要求卡号与卡密都必须全表唯一然后保存到mysql。思路1.首先mysql中将这两个字段设置唯一索引保证这两个字段的值在该表中是唯一存在的2.卡号是有序增长的实现比较容易先查询数据库中该字段的最大值然后进行增长生成3.卡密是无序的实现起来有些困难(网上查找和经过多次运行结果发现随机数的重复率是处于最低所以选定了随机生成)查询数据库中该字段将该字段放入map中(为了在生成卡密的时候进行判断该卡密是否存在)每次生成唯一的时候都会将值放入该map生成的卡密放入linedklist中(因为这是个频繁的添加操作linkedlist性能比arraylist性能高)4.循环遍历卡号(卡号和卡密数量是一样的)然后生成保存的对象放入list中5.重新saveAll()方法(因为使用的springdatajpa该saveAll()源码中是将数据进行循环遍历然后还是一条条的保存使用了jpa的批量保存配置设置后与未配置时并没有多少区别)进行保存。代码service层的方法PersistenceContext()protected EntityManager entityManager;public List add(PayGeneralCardFormBean formBean //校验当前spAppId是否时有效期PayServiceProvider provider payServiceProviderService.checkSpAppIdAndState(formBean.getSpAppId());if(null provider){return null;}//获取当前应用最大的批次号int maxBatchNumber findMaxBatchNumber(formBean.getSpAppId());//获取最大的卡号Long byMaxCardNumber findByMaxCardNumber();//获取所有卡号由于是写的sql查询所以数据类型变成了BigInteger后面会转成LongList cardPasswordfindAll payGeneralCardDao.cardPasswordfindAll();HashMap map new HashMap();List cardPasswords cardPasswordfindAll.stream().map(item- item.longValue()).collect(Collectors.toList());for(Long cardPassword:cardPasswords){map.put(cardPassword.toString(),true);}//生成卡号ArrayList cardNumbers PayCardNumberUtil.createNumber(formBean.getCount(), byMaxCardNumber);//生成卡密LinkedList passwords PayCardPassWordUtil.createPassword(formBean.getCount(),map);//组装数据LinkedList list new LinkedList();for(int i 0;iPayGeneralCard bean createBean(formBean.getSpAppId(), formBean.getType(), cardNumbers.get(i),passwords.get(i), maxBatchNumber);list.add(bean);}//保存数据List payGeneralCards savaAll(list);return payGeneralCards;}//批量添加数据public List savaAll(List payGeneralCards){ArrayList list new ArrayList(16);for(PayGeneralCard payGeneralCard : payGeneralCards){entityManager.persist(payGeneralCard);list.add(payGeneralCard);}return list;}PayCardNumberUtilimport java.util.ArrayList;public class PayCardNumberUtil {private static long seq 1000000000000l;private static final long ROTATION 9999999999999l;public static synchronized long next() {if (seq ROTATION) seq 1000000000000l;return seq;}/*** 生成一卡通卡号的方法* param count 生成总数* param startNumber 从这个数开始往后生成* return*/public static ArrayList createNumber(long count,long startNumber){if(seq startNumber){seq startNumber;}ArrayList list new ArrayList();for (int i 0; i count; i) {long next PayCardNumberUtil.next();list.add(next);}return list;}public static void main(String[] args) {System.out.println(PayCardNumberUtil.createNumber(10l, 2004000000057l));}}PayCardPassWordUtilimport java.util.*;/*** 一卡通密码生成器** author nature* create 2017-12-22 10:58*/public class PayCardPassWordUtil {public static LinkedList createPassword(Long count,Map map){LinkedList list new LinkedList();for (int i 0; i count; i) {String number generateUID(map);list.add(Long.parseLong(number));}return list;}//唯一一个在测试时没有重复项的方法public static String generateUID(Map map){Random random new Random();String result;for(int i0;i8;i){//首字母不能为0result (random.nextInt(9)1);}//如果有值说明改卡密已经存在了需要重新再生成if(null ! map.get(result)){return generateUID(map);}map.put(result,true);return result;}public static void main(String[] args) {Map map new HashMap();for (int i 0; i 1000; i) {System.out.println(generateUID(map));}}}