fix(core):单号生成未正常重置流水号

yun-zuoyi
汪云昊 4 years ago
parent 7222a53840
commit 3bf9f9697e

@ -90,8 +90,12 @@ public class SynchronizedService implements ISynchronizedService {
String orderNoTemplate = OrderNoMakeUtil.getOrderNoTemplate(codeRole);
String redisKey = REDIS_PREFIX_LOCK_GET_ORDER_NO + ":" + code + ":" + orderNoTemplate;
long orginSerialNo = codeRole.getSerialNo() < 0 ? 0 : codeRole.getSerialNo();
long orginSerialNo = codeRole.getSerialNo();
if (codeRole.getSerialNo() < 0 || OrderNoMakeUtil.isCycleByPrefix(codeRole, orderNoTemplate)) {
orginSerialNo = 0;
}
long incr = codeRole.getSerialNoIncrement() * num;
//缓存增加
//先判断redis是否存在如果不存在则用默认初始值+步长*数量,如果存在,则添加步长 * 数量
codeRole.setSerialNo(redisRes.putObjAdditional(redisKey, orginSerialNo, incr) - incr);

@ -65,18 +65,7 @@ public class OrderNoMakeUtil {
// 判断是否首次生成SerialNo初始值-1
if (orderNoRule.getSerialNo() > 0 && prefixIdx != -1) {
String newNo = orderNoTemplate.substring(0, prefixIdx);
String oldNo = orderNoRule.getOrderNo().substring(0, prefixIdx);
long serialNo = orderNoRule.getSerialNo() + orderNoRule.getSerialNoIncrement();
// 前缀(日期)不同后是否重置流水号
if (!newNo.equals(oldNo) && orderNoRule.getIsCycle() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) {
orderNoRule.setSerialNo(orderNoRule.getSerialNoSeed());
} else {
orderNoRule.setSerialNo(serialNo);
}
BigDecimal maxSerialNo = TEN.pow(orderNoRule.getSerialNoLength()).subtract(BigDecimal.ONE);
if (CommonEnumUtil.TRUE_OR_FALSE.valueOfBoolean(orderNoRule.getIsFixedLength())
&& serialNo > maxSerialNo.longValue()) {
@ -92,18 +81,29 @@ public class OrderNoMakeUtil {
}
/**
*
* @param orderNoRule
* @param orderNoTemplate
* @return
*/
public static boolean isCycleByPrefix(SysOrderNoRule orderNoRule, String orderNoTemplate){
int prefixIdx = orderNoTemplate.indexOf(SERIAL_NO);
String newNo = orderNoTemplate.substring(0, prefixIdx);
String oldNo = orderNoRule.getOrderNo().substring(0, prefixIdx);
return !newNo.equals(oldNo) && CommonEnumUtil.TRUE_OR_FALSE.valueOfBoolean(orderNoRule.getIsCycle());
}
/**
*
*
* @param no
* @param constant
* @param param
* @return
*/
private static StringBuilder replace(StringBuilder no, String constant, Object param) {
private static void replace(StringBuilder no, String constant, Object param) {
int day = no.indexOf(constant);
if (day != -1) {
no.replace(day, day + constant.length(), param.toString());
}
return no;
}
}

Loading…
Cancel
Save