自动生成单号

       博主的这个自动生成的原则是: 要求的第一位是  六位时间 + 001,每天从001开始,区分公司。

     每次自动生成的时候都从数据库查询,这个有些不现实,只有第一次查询数据库,之后就存在redis,之后只要在redis里面取即可。

           SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");   //时间格式

           String time = sdf.format(new Date());   //取当前时间

          String companyCode = getUser().getCode();   //取公司编号

          String number = companyCode + time;   //生成编号前几位

          String maxNum = "";

         ValueOperations operations = redisTemplate.opsForValue();

        String name = "项目名称" + ":" + companyCode + ":" + time + ":" + "生成的名字";  // redis名称  为了区分公司 

       Object str = operations.get(name); //首先先查询redis,里面是否有数据

        if (str == null || str.toString().equals("")) {  //redis没有数据
            Map params = new HashMap(16);
            params.put("waybillNo", number);
            List waybillList = waybillService.list(params);  //查询数据库
            if (waybillList == null || waybillList.size() == 0) {
                operations.set(name, "001", 24, TimeUnit.HOURS);  //设置过期时间
                return number + "001";
            } else {

            int endNum = Integer.parseInt(str.toString());
            if (endNum < 999) {   //补0
                maxNum = String.format("%0" + 3 + "d", endNum + 1);
            } else if (endNum >= 999 && endNum < 9999) {
                maxNum = String.format("%0" + 4 + "d", endNum + 1);
            }
            operations.set(name, maxNum, 24, TimeUnit.HOURS);
        }

        return number + maxNum;

    

 

       

 

     

 

你可能感兴趣的:(自动生成单号)