java DataFieldMaxValueIncrementer 生成序列号

41 篇文章 1 订阅
38 篇文章 0 订阅

 1.先建立并初始化序列表:

CREATE TABLE `wjj-pay`.`sequence_no` (
  `sequence_id` bigint(19) unsigned NOT NULL AUTO_INCREMENT COMMENT '序列',
  PRIMARY KEY (`sequence_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 COMMENT='序列生成表';

INSERT INTO `wjj-pay`.`sequence_no` (`sequence_id`) VALUES ('1');

2.配置bean

package com.wjj.application.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer;
import org.springframework.jdbc.support.incrementer.MySQLMaxValueIncrementer;

import javax.sql.DataSource;

/**
 * @author hank
 */
@Configuration
public class MyBeanConfig{
	@Autowired
	private DataSource dataSource;

	@Bean
	public DataFieldMaxValueIncrementer orderNoIncrementer() {
		MySQLMaxValueIncrementer incrementer = new MySQLMaxValueIncrementer(dataSource, "sequence_no", "sequence_id");
		//incrementer.setCacheSize(1);
		return incrementer;
	}
}

3.编写公共方法 

	/**
	 *  生成对应的序列号 - hank
	 *  @param sequence DataFieldMaxValueIncrementer对象
	 *  @param left 最左边拼接的串
	 *  @param size 总长度
	 *  @param character 数据库生成随机数字时补充字符 补充在中间
	 **/
	public static String generateUniqueNo(DataFieldMaxValueIncrementer sequence, String left, int size, String character){
		long sequenceL = sequence.nextLongValue();
		if(sequenceL < 0){
			sequenceL = -sequenceL;
		}
		String nowSequence = String.valueOf(sequenceL);
		int characterLen = size - (left.length() + nowSequence.length());
		String uniqueNo = left;
		if(characterLen > 0) {
			// 少了填充
			uniqueNo = StringUtils.rightPad(uniqueNo, characterLen+left.length(), character);
		}else if(characterLen < 0){
			// 多出来裁剪 取后后面的来填充
			nowSequence = nowSequence.substring(-characterLen, nowSequence.length());
		}
		uniqueNo = uniqueNo + nowSequence;
		return uniqueNo;
	}

4.使用工具创建单号 

    @Autowired
    private DataFieldMaxValueIncrementer sequence;
    /**
     * 创建单号
     *
     * @return 单号
     */
    @Override
    public String createPlatformTradeNo() {
        // 规则:"A" + 日期(yyyyMMddHHmmss)+ 8位流水号
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        return CommonUtils.generateUniqueNo(sequence, "PTN"+sdf.format(new Date()), 25, "0");
    }

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值