java生成仓库入库单号(前缀+日期+6位流水)

在这里插入图片描述
在这里插入图片描述

生成入库单号,例如:R20220211112442000001,其中R代表前缀,20220211112442代表年月日时分秒,000001表示流水号,自动递增
在这里插入图片描述
实现:需要一张自动递增流水表,传入入库表名,查询到单号比较是否是当前日期,是SerialCount+1,不是设置为1,
拼接前缀+日期时间+6位流水
核心代码:

/**
     * 传入表名,返回生成单号
     * @param tableName 表名
     * @return
     */
    @Override
    public String GetSerialnum(String tableName) {
    
    

        Map<String,Object> map=new HashMap<String, Object>();

        //定义需要返回的流水号
        String result = null;
        Long serialCount;

        //1.通过tableName表名查询唯一对象
        Serialnum serialnum = serialnumMapper.selectByTname(tableName);
        //2. 获取对象的前缀
        String prefix = serialnum.getPrefix();
        //3. 获取对象的默认单号
        String serialNumber = serialnum.getSerialNumber();
        //4. 通过当前系统时间和默认单号时间对比
        //4.1 获取当前时间 格式:yyyyMMdd
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        String nowDate = sdf.format(new Date());
        //4.2 获取单号时间
        String oldDate = serialNumber.substring(1, 9);
        //4.3 日期相等,说明今天已经生成订单号
        if(nowDate.equals(oldDate)){
    
    
            //拿到自增id,拼接生成单号
            serialCount = serialnum.getSerialCount();
            serialCount=serialCount+1L;
            //返回结果,前缀+时间日期+6位流水
        }else{
    
    
            //4.4日期不相等
             serialCount=1L;
        }
        result=prefix+new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+String.format("%06d",serialCount);
        return result;
    }

猜你喜欢

转载自blog.csdn.net/weixin_44226883/article/details/122878316