diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SynchronizedService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SynchronizedService.java index c4ee0db..c2eee47 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SynchronizedService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SynchronizedService.java @@ -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); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/OrderNoMakeUtil.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/OrderNoMakeUtil.java index 79c57a9..f58e579 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/OrderNoMakeUtil.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/OrderNoMakeUtil.java @@ -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; } }