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;
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值