Java 获取最大流水号公共方法

业务场景:

新项目中合同编号都要用到流水号(字母前缀+年月+三位流水号),项目中诸多模块都要用到这个流水号,需要提取公共方法。业务流水有限三位流水号足够,达到三位流水号999,变为1000。

实体类属性:

    // 流水号
    private String serialNumber;
    // 查询字段名
    private String fieldName;
    // 表名
    private String tableName;
    // 首字母
    private String firstNumber;
    // 流水号长度
    private int numberLength;

sql语句:

因为不同模块的表名和流水号字段不一致,采用动态查询

<select id="selectMaxSerialnumberEntity" parameterType="com.ciip.webmgr.utils.serialnumber.entity.SerialnumberEntity" resultType="java.lang.String">
        <![CDATA[
               SELECT
                MAX(${fieldName}) AS serialNumber
            FROM
                ${tableName}
            WHERE
                ${fieldName} LIKE CONCAT(#{firstNumber},'%')
         ]]>
    </select>

service:

/**
     * 添加对象 3位流水号
     * @param fieldName 字段名
     * @param tableName 表名
     * @param firstNumber 流水号字母前缀
     * @param numberLength 字母长度
     * @return Serialnumber 最大流水号
     */
    public String getMaxSerialnumber(String fieldName,String tableName,String firstNumber,int numberLength) {
        
        Calendar cal = Calendar.getInstance();
        int year = cal.get(Calendar.YEAR);
        int month = cal.get(Calendar.MONTH )+1;
        //规范月份格式10月份之前的月份都采用01 02等格式
        String newmonth = String.format("%02d", month);
        //根据字母前缀+年月 查询
        String Serialnumber = firstNumber+year+newmonth;
     
        SerialnumberEntity serialnumberEntity = new SerialnumberEntity();
        serialnumberEntity.setFieldName(fieldName);
        serialnumberEntity.setTableName(tableName);
        serialnumberEntity.setFirstNumber(Serialnumber);
        String MaxSerialnumber = serialnumberDAO.getMaxSerialnumber(serialnumberEntity);
        if(StringUtils.isNotBlank(MaxSerialnumber)) {
            if(MaxSerialnumber.length()==numberLength) {
                int tempid = Integer.valueOf(MaxSerialnumber.substring(MaxSerialnumber.length()-3, MaxSerialnumber.length()));
                Serialnumber = Serialnumber+String.format("%03d", tempid + 1);
            }else {
                int tempid = Integer.valueOf(MaxSerialnumber.substring(MaxSerialnumber.length()-4, MaxSerialnumber.length()));
                Serialnumber = Serialnumber+String.format("%04d", tempid + 1);
            }
        }else {
            Serialnumber = Serialnumber+"001";
        }
        return Serialnumber;
    }

©️2020 CSDN 皮肤主题: 精致技术 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值