Merge remote-tracking branch 'origin/dev' into test

yun-zuoyi
汪云昊 4 years ago
commit ffda8880f0

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

@ -65,18 +65,7 @@ public class OrderNoMakeUtil {
// 判断是否首次生成SerialNo初始值-1 // 判断是否首次生成SerialNo初始值-1
if (orderNoRule.getSerialNo() > 0 && prefixIdx != -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(); 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); BigDecimal maxSerialNo = TEN.pow(orderNoRule.getSerialNoLength()).subtract(BigDecimal.ONE);
if (CommonEnumUtil.TRUE_OR_FALSE.valueOfBoolean(orderNoRule.getIsFixedLength()) if (CommonEnumUtil.TRUE_OR_FALSE.valueOfBoolean(orderNoRule.getIsFixedLength())
&& serialNo > maxSerialNo.longValue()) { && 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 no
* @param constant * @param constant
* @param param * @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); int day = no.indexOf(constant);
if (day != -1) { if (day != -1) {
no.replace(day, day + constant.length(), param.toString()); no.replace(day, day + constant.length(), param.toString());
} }
return no;
} }
} }

Loading…
Cancel
Save