java 一号店生成订单号的部分代码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 一号店生成订单号的部分代码相关的知识,希望对你有一定的参考价值。
package com.yihaodian.gos.create.utils;
import com.yihaodian.gos.constant.GosConfigDefaultValue;
import com.yihaodian.gos.constant.dict.GosConfigDict;
import com.yihaodian.gos.genid.util.GenPrimaryKeyFactory;
import com.yihaodian.gos.utils.CharUtils;
import com.yihaodian.gos.utils.GosConfigUtils;
public class PrimaryUtils {
public static final String PRIMARY_SO="primary_so";
public static final String PRIMARY_SO_ITEM="primary_so_item";
public static final String PRIMARY_SO_DELIVERY="primary_so_delivery";
/**第十五校验位的权重,由14个数字组成*/
private static final int[] WEIGHT={7,9,10,5,8,4,2,1,6,3,7,9,10,5};
/**第十五校验位的校验码,由11个数字组成,按照模11的方式获取*/
private static final char[] VALIDATE={ '1','0','5','9','8','7','6','5','4','3','2'};
/**seq对应的订单ID 14位数*/
private static final int NUM = 14;
/**userid对应的末3位位数*/
private static final int NUM_USER = 3;
/**除数:用于内部校验码生成*/
private static final int MOD = 11;
/**除数:用于获取userid末3位*/
private static final int MOD_USER = 1000;
/**
* 根据用户ID生成订单ID
* @param userId
* @return 订单ID
*/
public static long genSoId(Long userId){
// 获取步长除数
long modConfig = GosConfigUtils.getValueByKeyAndTypeLong(GosConfigDict.ORDER_SHARD_MOD_INC,
GosConfigDict.TYPE_BUSINESS,
GosConfigDefaultValue.ORDER_SHARD_MOD_INC_DEFAULT);
// 获取步长
int inc = (int) (System.currentTimeMillis() % modConfig + 1);
// 获取前14位
long seq14 = GenPrimaryKeyFactory.nextPrimaryKey(PRIMARY_SO, inc);
// 获取内部校验位
char char014[] = CharUtils.longTochars(seq14, new char[NUM]);
char char015 = getValidateCode(char014);
// 获取用户ID末3位
char user[] = CharUtils.longTochars(userId % MOD_USER, new char[NUM_USER]) ;
// 拼接出数据库保存的订单ID
char char15[] = CharUtils.charsAdd(char014, char015);
char char18[] = CharUtils.charsAdd(char15, user);
return CharUtils.charsToLong(char18);
}
/**
* 获取内部校验码,以char的形式返回
* @param char14
* @return char 校验码 (数字型字符)
*/
public static char getValidateCode(char char14[]) {
int sum = 0;
int mode = 0;
for (int i = 0; i < char14.length; i++) {
sum = sum + Integer.parseInt(String.valueOf(char14[i]))
* WEIGHT[i];
}
mode = sum % MOD;
return VALIDATE[mode];
}
public static long genSoItemId(){
return GenPrimaryKeyFactory.nextPrimaryKey(PRIMARY_SO_ITEM);
}
public static long genSoDeliveryId(){
return GenPrimaryKeyFactory.nextPrimaryKey(PRIMARY_SO_DELIVERY);
}
public static String genSoCode(long id){
return String.valueOf(id);
}
}
以上是关于java 一号店生成订单号的部分代码的主要内容,如果未能解决你的问题,请参考以下文章